Новые монстры — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
(→Вылет при появлении) |
|||
(не показаны 13 промежуточные версии 5 участников) | |||
Строка 17: | Строка 17: | ||
Но для создания разных по силе конфигураций монстров обычно используется такая штука. Создается секция вида | Но для создания разных по силе конфигураций монстров обычно используется такая штука. Создается секция вида | ||
[cat_weak]:m_cat_e | [cat_weak]:m_cat_e | ||
− | то есть ссылка на основную конфигурацию (иными словами это называется наследованием), а потом указываются параметры, которые отличаются от нее. Например сила, здоровье, угол обзора и тд. Мы пока ограничимся просто добавлением этой секции. В файле '''config\creatures\m_cat.ltx''' в конце допишем '''[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] | Arguments : Can't find variable smart_terrain_choose_interval in [cat_weak] | ||
Что ж, добавим и этот параметр. Посмотрим, какой он у собак, и сделаем также: | Что ж, добавим и этот параметр. Посмотрим, какой он у собак, и сделаем также: | ||
Строка 23: | Строка 24: | ||
Запускаем, вылетаем с ошибкой: | Запускаем, вылетаем с ошибкой: | ||
Arguments : Can't find variable satiety_threshold in [cat_weak] | Arguments : Can't find variable satiety_threshold in [cat_weak] | ||
− | + | В общем, добавляем параметры, пока кошка не станет нормально появляться. Такие ошибки легко локализуются и исправляются. | |
Ну, на всякий случай, нужно добавить еще две строчки: | Ну, на всякий случай, нужно добавить еще две строчки: | ||
Строка 74: | Строка 75: | ||
== Внимание!!! == | == Внимание!!! == | ||
− | Огромный минус в том, что убитое животное не попадает в статистику, хотя мы вроде все для этого сделали. С этим предлагаю разобраться самим. Подсказка: в энциклопедии кошек тоже нет | + | Огромный минус в том, что убитое животное не попадает в статистику, хотя мы вроде все для этого сделали. С этим предлагаю разобраться самим. Подсказка: в энциклопедии кошек тоже нет :) |
− | [[Категория: | + | [[Категория:Конфигурационные файлы]] |
+ | |||
+ | Еще нужно подправить соунд кошки, потому что по дефолту она почему-то издаёт рёв кабана=) | ||
+ | |||
+ | Для тестов я выбрал холм недалеко от деревни новичков. Через xrSpawner задал себе координаты -172,3 -2,11 -61,54 (вектор не важен). Чтобы заспавнить котЭ, в xrSpawner'e идём в секцию справа "Добавить объект", там должен быть транспорт и бюрер, но если ничего нет, сверху "добавить объект в базу данных" и пишем любое название отдела и объекта (как удобнее).В общем, выбираем что-нибудь, жмем "добавить" - внизу слева будет добавленный объект. В пути к файлу пишем: "monsters\cat\cat" (без кавычек), в Entity пишем "cat_weak" а название объекта - "cat_00" - дальше принять изм. и сохранить. Координаты я выбрал рядом со своим спавном: | ||
+ | -155,29 -3,2 -65,66. | ||
+ | Добавляя монстров в другие места и локи, названия объектов не должны совпадать, а координаты вы должны найти сами (команда rs_stats on в консоли игры) | ||
+ | |||
+ | Также у некоторых новых монстров нужно увеличить distance_to_corpse и as_min_dist, иначе враги этих монстров будут стрелять в них только на расстоянии вытянутой руки. |
Текущая версия на 07:23, 23 декабря 2012
Введение
Многие часто сталкиваются с тем, что при попытке добавления монстров не попавшими в финальную версию игра может вылетать. Попробую рассказать, как это дело можно исправить.
Для примера возьму кошек (уж очень они мне нравятся)
Добавить их можно отредактировать файл 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
Это будет такой красный крест в круге. Запускаем, убиваем, обыскиваем и не вылетаем.
Итак, свежедобавленный монстр бегает, живет, нападает. Однако та же кошка по умолчанию невероятно сильна, убивает с одного удара, поэтому для нормальной жизни необходимо подредактировать секцию атаки.
Внимание!!!
Огромный минус в том, что убитое животное не попадает в статистику, хотя мы вроде все для этого сделали. С этим предлагаю разобраться самим. Подсказка: в энциклопедии кошек тоже нет :)
Еще нужно подправить соунд кошки, потому что по дефолту она почему-то издаёт рёв кабана=)
Для тестов я выбрал холм недалеко от деревни новичков. Через xrSpawner задал себе координаты -172,3 -2,11 -61,54 (вектор не важен). Чтобы заспавнить котЭ, в xrSpawner'e идём в секцию справа "Добавить объект", там должен быть транспорт и бюрер, но если ничего нет, сверху "добавить объект в базу данных" и пишем любое название отдела и объекта (как удобнее).В общем, выбираем что-нибудь, жмем "добавить" - внизу слева будет добавленный объект. В пути к файлу пишем: "monsters\cat\cat" (без кавычек), в Entity пишем "cat_weak" а название объекта - "cat_00" - дальше принять изм. и сохранить. Координаты я выбрал рядом со своим спавном: -155,29 -3,2 -65,66. Добавляя монстров в другие места и локи, названия объектов не должны совпадать, а координаты вы должны найти сами (команда rs_stats on в консоли игры)
Также у некоторых новых монстров нужно увеличить distance_to_corpse и as_min_dist, иначе враги этих монстров будут стрелять в них только на расстоянии вытянутой руки.