<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://stalkerin.gameru.net/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://stalkerin.gameru.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=178.44.227.81&amp;*</id>
		<title>S.T.A.L.K.E.R. Inside Wiki - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://stalkerin.gameru.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=178.44.227.81&amp;*"/>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/178.44.227.81"/>
		<updated>2026-04-29T19:31:58Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%9D%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BC%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%8B</id>
		<title>Новые монстры</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%9D%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BC%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%8B"/>
				<updated>2011-05-03T19:18:55Z</updated>
		
		<summary type="html">&lt;p&gt;178.44.227.81: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Введение ==&lt;br /&gt;
&lt;br /&gt;
Многие часто сталкиваются с тем, что при попытке добавления монстров не попавшими в финальную версию игра может вылетать. Попробую рассказать, как это дело можно исправить.&lt;br /&gt;
&lt;br /&gt;
Для примера возьму кошек (уж очень они мне нравятся)&lt;br /&gt;
&lt;br /&gt;
Добавить их можно отредактировать файл '''all.spawn''', либо динамически создать в игре через функцию '''alife:create()'''.&lt;br /&gt;
&lt;br /&gt;
== Вылет при появлении ==&lt;br /&gt;
&lt;br /&gt;
Обычно сопровождается сообщением в логе:&lt;br /&gt;
&lt;br /&gt;
 Arguments     : Can't open section 'cat_weak'&lt;br /&gt;
&lt;br /&gt;
Это значит, что монстр у нас не до конца описан. В файле конфигурации идет секция&lt;br /&gt;
 [m_cat_e]:monster_base&lt;br /&gt;
Но для создания разных по силе конфигураций монстров обычно используется такая штука. Создается секция вида&lt;br /&gt;
 [cat_weak]:m_cat_e&lt;br /&gt;
то есть ссылка на основную конфигурацию (иными словами это называется наследованием), а потом указываются параметры, которые отличаются от нее. Например сила, здоровье, угол обзора и тд. Мы пока ограничимся просто добавлением этой секции. В файле '''config\creatures\m_cat.ltx''' в конце допишем '''[cat_weak]:m_cat_e'''. Запускаем, добавляем кошку, вылетаем с ошибкой:&lt;br /&gt;
 Arguments     : Can't find variable smart_terrain_choose_interval in [cat_weak]&lt;br /&gt;
Что ж, добавим и этот параметр. Посмотрим, какой он у собак, и сделаем также:&lt;br /&gt;
 smart_terrain_choose_interval	= 00:15:00&lt;br /&gt;
Запускаем, вылетаем с ошибкой:&lt;br /&gt;
 Arguments     : Can't find variable satiety_threshold in [cat_weak]&lt;br /&gt;
Вобщем, добавляем параметры, по кошка не станет нормально появлятся. Такие ошибки легко локализуются и исправляются.&lt;br /&gt;
&lt;br /&gt;
Ну, на всякий случай, нужно добавить еще две строчки:&lt;br /&gt;
 critical_wound_threshold	= 0.4&lt;br /&gt;
 critical_wound_decrease_quant	= 0.&lt;br /&gt;
&lt;br /&gt;
После этого кошка появляется, бегает, с 30 метров бежит нас кушать. Мы этого не хотим, стреляем в нее, и у нас происходит&lt;br /&gt;
&lt;br /&gt;
== Вылет при убийстве ==&lt;br /&gt;
&lt;br /&gt;
Это знаменитая ошибка:&lt;br /&gt;
 Arguments     : LUA error: e:\stalker\gamedata\scripts\_g.script:20 ........&lt;br /&gt;
Самое просто и неправильное решение - закоментировать 20-ю строку скрипта _g.script, вылет исчезнет, но ошибка никуда не денется. Я не могу сказать с уверенностью, к чему игнорирование этого факта может привести, так как исправлял причину, а не следствие.&lt;br /&gt;
&lt;br /&gt;
Путем нехитрых логических размышлений решение было найдено. Вернее тупым перебором всего, что относилось к делу, криками на форумах, битьем головой о стенку... Потом пришло озарение, вместе с сакраментальным вопросом &amp;quot;что происходит после смерти?&amp;quot; А происходит добавление в статистику убитого объекта (монстра, нпс-а). Поэтому лезем в скрипт '''xr_statistic.script'''. В самом начале видим объявление переменной&lt;br /&gt;
 local killCountProps = {...}&lt;br /&gt;
в которой кошек нет. Поэтому добавляем их туда (например, в конец), для начисления очков опыта:&lt;br /&gt;
 cat_weak = 1, cat_normal = 2, cat_strong = 3,&lt;br /&gt;
Хотя мы сделали только '''cat_weak''', но на будущее добавим и остальных. Затем идет перечисление используемых классов монстров:&lt;br /&gt;
 monster_classes = {&lt;br /&gt;
кошек нет и здесь, добавляем:&lt;br /&gt;
 [clsid.cat_s] = &amp;quot;cat&amp;quot;,&lt;br /&gt;
Смотрим дальше, видим функцию '''addKillCount(npc)''', которая определяет сообщество (community) убитого. Функция вызывает '''getNpcType(npc)''', которая находится в этом же скрипте. А там идет обращение к функции '''IsStalker(npc)''', и возвращает сообщество и ранг убиенного.&lt;br /&gt;
&lt;br /&gt;
Но тут про мостров ни слова, а значит идем дальше. Функция '''IsStalker(npc)''' обнаруживается в скрипте '''_g.script'''. Просматривая его обнаруживаем следующие интересующие нас функции:&lt;br /&gt;
*is_object_monster(obj)&lt;br /&gt;
кошек нет, добавляем рядом с собаками:&lt;br /&gt;
 otype == clsid.cat or&lt;br /&gt;
*IsMonster (object, class_id)&lt;br /&gt;
кошки есть, ничего не трогаем.&lt;br /&gt;
&lt;br /&gt;
Для страховки проверим еще одни файл, '''class_registrator.script'''. Находим в нем строку&lt;br /&gt;
 cs_register (object_factory, &amp;quot;CCat&amp;quot;, &amp;quot;se_monster.se_monster&amp;quot;, &amp;quot;SM_CAT_S&amp;quot;, &amp;quot;cat_s&amp;quot;)&lt;br /&gt;
и успокаиваемся на этом. Запускаем, убиваем, подходим, пытаемся обыскать - вылетаем. Потому что случился&lt;br /&gt;
&lt;br /&gt;
== Вылет при обыске ==&lt;br /&gt;
&lt;br /&gt;
Ну тут уже проще. Вспоминаем, что у нас показывается в инвентаре убитого? Иконка растерзанного трупа. Проверяем '''m_cat.ltx''' - действительно, параметр '''icon''' отсутствует. Тут появляется два пути.&lt;br /&gt;
&lt;br /&gt;
Первый - нарисовать новую иконку, вставить ее в файл ui_npc_monster.dds, определить координаты и добавить их в xml-описатель '''ui_npc_monster.xml'''. И так для каждого нового монстра.&lt;br /&gt;
&lt;br /&gt;
Второй - использовать общую иконку для всех монстров, у которых отсутствует этот параметр. Мы им и воспользуемся, так как для тестовых целей сойдет, а для серьезного применения все равно необходимо иметь хоть какие-то художественные навыки (если кто видел мой тестовый мод &amp;quot;15 кошек&amp;quot;, то помнят тот ужас вместо иконки кошки :) )&lt;br /&gt;
&lt;br /&gt;
Для этого отредактируем файл defines.ltx , так как именно в нём содержится секция '''monster_base''', общая для всех монстров. Открываем, ищем секцию, и вставляем&lt;br /&gt;
 icon = ui_frame_error_sign_red&lt;br /&gt;
Это будет такой красный крест в круге. Запускаем, убиваем, обыскиваем и не вылетаем.&lt;br /&gt;
&lt;br /&gt;
Итак, свежедобавленный монстр бегает, живет, нападает. Однако та же кошка по умолчанию невероятно сильна, убивает с одного удара, поэтому для нормальной жизни необходимо подредактировать секцию атаки.&lt;br /&gt;
&lt;br /&gt;
== Внимание!!! ==&lt;br /&gt;
&lt;br /&gt;
Огромный минус в том, что убитое животное не попадает в статистику, хотя мы вроде все для этого сделали. С этим предлагаю разобраться самим. Подсказка: в энциклопедии кошек тоже нет =)&lt;br /&gt;
[[Категория:Конфигурационные файлы]]&lt;/div&gt;</summary>
		<author><name>178.44.227.81</name></author>	</entry>

	</feed>