Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Вылет при убийстве

Читайте также:
  1. БИЛЛЬ ВЫЛЕТАЕТ В ТРУБУ
  2. В которой Тритон Билль вылетает в трубу
  3. Вылет 13 декабря на 8 дней и более
  4. Вылет 18 ноября на 8 дней и более
  5. Вылет 19 ноября на 12 дней
  6. Глава IV БИЛЛЬ ВЫЛЕТАЕТ В ТРУБУ

Новые монстры

Введение

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

Для примера возьму кошек (уж очень они мне нравятся)

Добавить их можно отредактировать файл 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.4critical_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. Просматривая его обнаруживаем следующие интересующие нас функции:

кошек нет, добавляем рядом с собаками:

otype == clsid.cat or

кошки есть, ничего не трогаем.

Для страховки проверим еще одни файл, class_registrator.script. Находим в нем строку

cs_register (object_factory, "CCat", "se_monster.se_monster", "SM_CAT_S", "cat_s")

и успокаиваемся на этом. Запускаем, убиваем, подходим, пытаемся обыскать - вылетаем. Потому что случился


Дата добавления: 2015-12-07; просмотров: 60 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.006 сек.)