Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: denis2000, FantomICW  
Модостроение. Спавн и логика
denis2000Дата: Пн, 10.10.2011, 21:20 | Сообщение # 1
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Спавн и логика

Создание объектов на локации и логика поведения этих объектов

Если у вас появились вопросы по созданию динамических объектов в игре (НПС, монстры, аномалии, и т.п.) и настройке их "поведения". Задавайте их в этой теме - умные головы,
модосторители и просто разбирающиеся в программировании люди вам ответят.


Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7

Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML
[cut noguest=Если у вас не открывается файл CHM]Если у вас не открывается файл:
1. Запустите [Пуск]=>[Выполнить] (либо хот-кей [WIN]+[R])
2. Введите команду (без кавычек) "regsvr32 %windir%\system32\hhctrl.ocx"
3. Если вылезло окно об успешном завершении вы все сделали правильно и можете перезагружать компьютер (а может и не надо)
Также: файлы МОГУТ не открываться если в пути к файлу есть: символы кириллицы, "_", "#"
Также: есть не стандартные программы-просмоторщики CHM файлов. Например: FBReader[/cut]

[cut=Где найти лог игры после вылета]Что такое LOG ошибки, и как мне его найти?
Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда.
Для того чтоб найти LOG необходимо зайти вот сюда:

В Win хр лог находится:

C:\Documents and Settings\All Users\Документы\S.T.A.L.K.E.R. - Зов Припяти\logs

Затем открываете первый файл в формате TXT, и в нем отбираете с низу 25 строчек. После кидаете эти 25 строчек в сообщение на форум.

В Win7 лог находится C:\Users\Public\Documents\S.T.A.L.K.E.R. - Зов Припяти\logs

Путь к папке с логом можно найти открыв файл fsgame.ltx который находится в корневой директории ЗП, за это отвечает строка:
...
$app_data_root$ = true | false| $fs_root$| users\
(тут мы указываем что папка пользователя, будет хранится рядом с Fsgame.ltx)
...
$logs$ = true| false| $app_data_root$| logs\
(а тут мы указываем что в папке пользователя, в подпапке Logs будут храниться наши логи)
...
[/cut][cut=Получение более подробной информации о вылете (ХОВАН)]
Открываем файл _g.script и ищем такую функцию: function abort(fmt, ...)
Там есть заккомментированная строчка "--error_log(reason)", ее и надо расскомментировать, должно получиться вот так:
Code
function abort(fmt, ...)
                    local reason = string.format(fmt, ...)
                    error_log(reason)
end

Вот для примера два одинаковых вылета, первый с функцией по умолчанию, второй - с поправленной функцией

Первый:
Code
Expression    : !m_error_code
Function      : raii_guard::~raii_guard
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line          : 748
Description   : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:478: bad argument #2 to 'format' (string expected, got nil)

Второй:
Code
Expression    : 0
Function      : ErrorLog
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp
Line          : 49
Description   : 'Attempt to read a non-existant string field 'path_walk' in section 'walker@mechanic'

[/cut]


Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы,
статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца",
возможно Ваш вопрос уже рассматривался.


Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки.
Помните чем подробнее вопрос, тем точнее ответ.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
makdmДата: Пн, 16.03.2015, 09:23 | Сообщение # 1141
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

Цитата sergej5500 ()
Можно ли написать медику такую логику?

Такая схема поведения вообще - то уже есть. Это схема xr_corpse_detection.script
Осмотр Сталкерами трупов на предмет лута.
Для того чтобы её переделать под секцию логики нужно править скрипты.

Цитата sergej5500 ()
Хочется, чтобы сталкер погиб в бою. В этом случае труп сталкера может оказаться где угодно.


Предлагаю поставить НПС в скриптовую схему ведения боя camper и прописать ему radius = 0, во время боя "незаметно" для игрока сделать %=kill_npc()%
После боя координаты положение тела сталкера останутся теми же, что и были до боя ( отбери у всех воюющих гранаты )
И медик тогда в схеме walker будет знать куда идти.


Терпение......
И все получится!
 
mexiccanecДата: Пн, 16.03.2015, 16:56 | Сообщение # 1142
Гражданский
Пользователи
Сообщений: 22
Награды: 0
Репутация: [ -10 ]

подскажите пожалуйста как ослабить альфу? Киборги блин
 
sergej5500Дата: Пн, 16.03.2015, 21:35 | Сообщение # 1143
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

mexiccanec,

Смотрите шапку темы. Сборник модостроения Хована. Там про Альфу много материалов.
 
АраксДата: Вт, 17.03.2015, 15:25 | Сообщение # 1144
Удаленные



а как создать смарт террейн для торговца?
 
denis2000Дата: Вт, 17.03.2015, 20:35 | Сообщение # 1145
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Аракс, Так-же как и для всех остальных. Подробности смотри в КМБ.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
АраксДата: Ср, 18.03.2015, 06:16 | Сообщение # 1146
Удаленные



denis2000, да мне уже не надо. Я решил завязать со сталкером
 
mexiccanecДата: Чт, 19.03.2015, 10:11 | Сообщение # 1147
Гражданский
Пользователи
Сообщений: 22
Награды: 0
Репутация: [ -10 ]

Народ а можно к примеру на локе Затон,на Скадовске убрать лишних сталков,там столько народа ненужного тусуется что у меня при подходе в зону загрузки так лагает что иногда и выкидывает или уменьшить хотя бы спавн монстров которые там после высокого ранга в тройном умножение спавнятся?
 
sergej5500Дата: Чт, 19.03.2015, 20:38 | Сообщение # 1148
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

mexiccanec,

Чтобы убрать лишних сталкеров со Скадовска, надо в файле gamedata\configs\scripts\zaton\smart\zat_stalker_base_smart менять параметр max_population. Выставьте его равным 3-4.
 
mexiccanecДата: Пт, 20.03.2015, 12:36 | Сообщение # 1149
Гражданский
Пользователи
Сообщений: 22
Награды: 0
Репутация: [ -10 ]

Поставлю 1,а там видно будет,спасибо.
 
ZrazilДата: Вс, 22.03.2015, 14:30 | Сообщение # 1150
Удаленные



Всем доброго времени суток! Кто-нибудь когда-то сталкивался с таким вылетом? Что может быть причиной?

[cut=Лог]Function : raii_guard::~raii_guard
File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line : 748
Description : ...Ioou a I?eiyou\gamedata\scripts\smart_terrain.script:1261: attempt to compare nil with number
[/cut]

Все замечательно работало, спавнилось как надо и тут после компиляции свежего спавна через сдк выдает такое.


Сообщение отредактировал Zrazil - Вс, 22.03.2015, 14:31
 
denis2000Дата: Вс, 22.03.2015, 21:47 | Сообщение # 1151
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

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

Zrazil, Что в 1261 строке скрипта smart_terrain.script?


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
ZrazilДата: Пн, 23.03.2015, 00:44 | Сообщение # 1152
Удаленные



denis2000, [cut=1261] if squad_count ~= nil and (self.max_population <= squad_count) then
--printf("smart terrain [%s] precondition returns false for squad [%s]", self:name(), squad:name())
-- if tonumber(self.props["surge"]) > 0 and xr_conditions.surge_started() then
-- printf("SURGE_SMART_STATS : smart [%s]\n max_population = %d \ squad_count = %d", self:name(), self.max_population, squad_count)
-- end
return false
end[/cut]
 
denis2000Дата: Пн, 23.03.2015, 08:45 | Сообщение # 1153
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Zrazil, max_population = nil? Проверяйте настройки смартов, везде ли корректно установлен данный параметр.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Вт, 24.03.2015, 00:03 | Сообщение # 1154
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Цитата denis2000 ()
Попробуйте для начала спавн сквада собаки без эксклюзивной логики. Не вижу пока ничего очевидного, поэтому предлагаю идти по шагам с каждым шагом усложняя настройки.


Попробовал разные варианты. Выяснил, что игра не любит строку

combat_ignore_cond = {=target_squad_name(esc_b1_military_squad)} true, {=target_squad_name(esc_b1_commander_1_squad)} true, {=target_squad_name(esc_b1_commander_2_squad)} true, {=target_squad_name(esc_b1_plennic_squad)} true, {=target_squad_name(esc_b1_plennic_bodygard_squad)} true, {=check_enemy_profile(sim_default_)} true, {=check_enemy_profile(sim_respawn_)} true, {=check_enemy_name(actor)} true

точнее её часть

{=target_squad_name(esc_b1_military_squad)} true, {=target_squad_name(esc_b1_commander_1_squad)} true, {=target_squad_name(esc_b1_commander_2_squad)} true, {=target_squad_name(esc_b1_plennic_squad)} true, {=target_squad_name(esc_b1_plennic_bodygard_squad)} true,

[cut=Функция]function target_squad_name(actor, obj, p)
if p[1] == nil then
abort("Wrong parameters")
end
if not(obj) then
return false
end
--callstack()
if IsStalker(obj) or IsMonster(obj) then
if alife():object(obj.group_id) == nil then
return false
end
if string.find( alife():object(obj.group_id):section_name(), p[1] ) ~= nil then
return true
end
--return alife():object(obj.group_id):section_name() == p[1]
end
return obj:section_name() == p[1]
end[/cut]

[cut=Сквады]
[esc_b1_military_squad]:online_offline_group
faction = army
npc = sim_respawn_military_0, sim_respawn_military_1, sim_respawn_military_2, sim_respawn_military_0, sim_respawn_military_1, sim_respawn_military_2, sim_respawn_military_0, sim_respawn_military_1, sim_respawn_military_2
target_smart = esc_smart_terrain_1
spawn_point = esc_b1_spawn_point
story_id = esc_b1_military_squad

[esc_b1_commander_1_squad]:online_offline_group
faction = army_alies
npc = esc_b1_commander_1
target_smart = esc_smart_terrain_1
spawn_point = esc_b1_commander_1_spawn_point
story_id = esc_b1_commander_1_squad

[esc_b1_commander_2_squad]:online_offline_group
faction = army_alies
npc = esc_b1_commander_2
target_smart = esc_smart_terrain_1
spawn_point = esc_b1_commander_2_spawn_point
story_id = esc_b1_commander_2_squad

[esc_b1_plennic_squad]:online_offline_group
faction = stalker_alies
npc = esc_b1_plennic
target_smart = esc_smart_terrain_1
spawn_point = esc_b1_spawn_point
story_id = esc_b1_plennic_squad

[esc_b1_plennic_bodygard_squad]:online_offline_group
faction = army_alies
npc = esc_b1_plennic_bodygard
target_smart = esc_smart_terrain_1
spawn_point = esc_b1_spawn_point
story_id = esc_b1_plennic_bodygard_squad[/cut]

Вопрос, можно ли использовать функцию target_squad_name в логике собаки?
 
denis2000Дата: Вт, 24.03.2015, 08:26 | Сообщение # 1155
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Ну вот где собака порылась:
1. Сквад не может быть целью одиночного НПС, только другой НПС.
2. Функция target_squad_name проверяет входит ли НПС из логики которого вызвана функция в указанный сквад, тоесть совсем не то что кажеться из названия.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
Поиск: