Категория:FAQ — различия между версиями — S.T.A.L.K.E.R. Inside Wiki

Категория:FAQ — различия между версиями

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск
(Начало.)
 
м (перенос статьи в отдельную часть)
Строка 1: Строка 1:
−
= Как сделать, чтобы игра не вылетала при введении вырезанных монстров =
+
== [[New_monsters|Как сделать, чтобы игра не вылетала при введении вырезанных монстров]] ==
  
−
Многие часто сталкиваются с тем, что при попытке добавления монстров не попавшими в финальную версию игра может вылетать. Поробую рассказать, как это дело можно исправить. Для примера возьму кошек (уж очень они мне нравятся)
+
Многие часто сталкиваются с тем, что при попытке добавления монстров не попавшими в финальную версию игра может вылетать. Попробую рассказать, как это дело можно исправить. [[New_monsters|Читаем...]]
−
 
+
−
Добавить их можно отредактировать файл '''all.spawn''', либо динамически создать в игре через функцию '''alife:create()'''.
+
−
 
+
−
== Вылет при появлении ==
+
−
 
+
−
Обычно сопровождается сообщением в логе:
+
−
 
+
−
Arguments    : Can't open section 'cat_weak'
+
−
 
+
−
Это значит, что монстр у нас не до конца описан. В файле конфигурации идет секция
+
−
[m_cat_e]:monster_base
+
−
Но для создания разных по силе конфигураций монстров обычно используется такая штука. Создается секция вида
+
−
[cat_weak]:m_cat_e
+
−
то есть ссылка на основную конфигурацию, а потом указываются параметры, которые отличаются от нее. Например сила, здоровье, угол обзора и тд. Мы пока ограничимся просто добавлением этой секции. В файле '''config\creatures\m_cat.ltx''' в конце допишем '''[cat_weak]:m_cat_e'''. Запускаем, добавляем кошку, вылетаем с ошибкой:
+
−
Arguments    : Can't find variable smart_terrain_choose_interval in [cat_weak]
+
−
Что ж, добавим и этот параметр. Посмотрим, какой он у собак, и сделаем также:
+
−
smart_terrain_choose_interval = 00:15:00
+
−
Запускаем, вылетаем с ошибкой:
+
−
Arguments    : Can't find variable satiety_threshold in [cat_weak]
+
−
Вобщем, добавляем параметры, по кошка не станет нормально появлятся. Такие ошибки легко локализуются и исправляются.
+
−
 
+
−
Ну, на всякий случай, нужно добавить еще две строчки:
+
−
critical_wound_threshold = 0.4
+
−
critical_wound_decrease_quant = 0.
+
−
 
+
−
После этого кошка появляется, бегает, с 30 метров бежит нас кушать. Мы этого не хотим, стреляем в нее, и у нас происходит
+
−
 
+
−
== Вылет при убийстве ==
+
−
 
+
−
Это знаменитая ошибка:
+
−
Arguments    : LUA error: e:\stalker\gamedata\scripts\_g.script:20 ........
+
−
Самое просто и неправильное решение - закоментировать 20-ю строку скрипта _g.script, вылет исчезнет, но ошибка никуда не денется. Я не могу сказать с уверенностью, к чему игнорирование этого факта может привести, так как исправлял причину, а не следствие.
+
−
 
+
−
Путем нехитрых логических размышлений решение было найдено. Вернее тупым перебором всего, что относилось к делу, криками на форумах, битьем головой о стенку... Потом пришло озарение, вместе с сакраментальным вопросом "что происходит после смерти?" А происходит добавление в статистику убитого объекта (монстра, нпс-а). Поэтому лезем в скрипт '''xr_statistic.script'''. В самом начале видим объявление переменной
+
−
local killCountProps = {...}
+
−
в которой кошек нет. Поэтому добавляем их туда (например, в конец), для начисления очков опыта:
+
−
cat_weak = 1, cat_normal = 2, cat_strong = 3,
+
−
Хотя мы сделали только '''cat_weak''', но на будущее добавим и остальных. Затем идет перечисление используемых классов монстров:
+
−
monster_classes = {
+
−
кошек нет и здесь, добавляем:
+
−
[clsid.cat_s] = "cat",
+
−
Смотрим дальше, видим функцию '''addKillCount(npc)''', которая определяет сообщество (community) убитого. Функция вызывает '''getNpcType(npc)''', которая находится в этом же скрипте. А там идет обращение к функции '''IsStalker(npc)''', и возвращает сообщество и ранг убиенного.
+
−
 
+
−
Но тут про мостров ни слова, а значит идем дальше. Функция '''IsStalker(npc)''' обнаруживается в скрипте '''_g.script'''. Просматривая его обнаруживаем следующие интересующие нас функции:
+
−
*is_object_monster(obj)
+
−
кошек нет, добавляем рядом с собаками:
+
−
otype == clsid.cat or
+
−
*IsMonster (object, class_id)
+
−
кошки есть, ничего не трогаем.
+
−
 
+
−
Для страховки проверим еще одни файл, '''class_registrator.script'''. Находим в нем строку
+
−
cs_register (object_factory, "CCat", "se_monster.se_monster", "SM_CAT_S", "cat_s")
+
−
и успокаиваемся на этом. Запускаем, убиваем, подходим, пытаемся обыскать - вылетаем. Потому что случился
+
−
 
+
−
== Вылет при обыске ==
+
−
 
+
−
Ну тут уже проще. Вспоминаем, что у нас показывается в инвентаре убитого? Иконка растерзанного трупа. Проверяем '''m_cat.ltx''' - действительно, параметр '''icon''' отсутствует. Тут появляется два пути.
+
−
 
+
−
Первый - нарисовать новую иконку, вставить ее в файл ui_npc_monster.dds, определить координаты и добавить их в xml-описатель '''ui_npc_monster.xml'''. И так для каждого нового монстра.
+
−
 
+
−
Второй - использовать общую иконку для всех монстров, у которых отсутствует этот параметр. Мы им и воспользуемся, так как для тестовых целей сойдет, а для серьезного применения все равно необходимо иметь хоть какие-то художественные навыки (если кто видел мой тестовый мод "15 кошек", то помнят тот ужас вместо иконки кошки :) )
+
−
 
+
−
Для этого отредактируем файл defines.ltx , так как именно в нём содержится секция '''monster_base''', общая для всех монстров. Открываем, ищем секцию, и вставляем
+
−
icon = ui_frame_error_sign_red
+
−
Это будет такой красный крест в круге. Запускаем, убиваем, обыскиваем и не вылетаем.
+
−
 
+
−
Итак, свежедобавленный монстр бегает, живет, нападает. Однако та же кошка по умолчанию невероятно сильна, убивает с одного удара, поэтому для нормальной жизни необходимо подредактировать секцию атаки.
+
−
 
+
−
== Внимание!!! ==
+
−
 
+
−
Огромный минус в том, что убитое животное не попадает в статистику, хотя мы вроде все для этого сделали. С этим предлагаю разобраться самим. Подсказка: в энциклопедии кошек тоже нет ;)
+

Версия 22:18, 24 мая 2007

Как сделать, чтобы игра не вылетала при введении вырезанных монстров

Многие часто сталкиваются с тем, что при попытке добавления монстров не попавшими в финальную версию игра может вылетать. Попробую рассказать, как это дело можно исправить. Читаем...

Страницы в категории «FAQ»

{{#ifeq:2|1|Эта категория содержит только следующую страницу.|Эта категория содержит следующие 2 страниц из 2.}}

Другие места
LANGUAGE