Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: 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 по ссылке из шапки и соседнюю тему "Курс молодого бойца",
возможно Ваш вопрос уже рассматривался.


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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
Ay49MihasДата: Пн, 18.08.2014, 20:23 | Сообщение # 976
Полевой исследователь
Ученые сталкеры
Сообщений: 218
Награды: 9
Репутация: [ 83 ]

Здравствуйте!
В SGM 2.2 воспользовался для персонажа схемой move, типом patrol (по аналогии с проводником в Тёмной Долине).
Всё прекрасно работает, паренёк бежит по заданному пути, но тут вдруг я реил стрельнуть в лежащую далеко (от непися с логикой) бочку, которая взорвалась. После этого непись добежал до ближайшей точки в пути и остановился, дальше не бежит. Почему так?
PS: со скриптами реализации секций логики совсем не дружен, так что если это штатный режим, то посоветуйте, пожалуйста, рецепт как исправить.
Спасибо!
 
sergej5500Дата: Пн, 18.08.2014, 20:46 | Сообщение # 977
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Ay49Mihas,

Попробуй прописать в стартовую секцию логики [logic] строку:

post_combat_time = 0,0.

Или переделай логику под валкера. Валкеры зависают намного реже.
 
Ay49MihasДата: Вт, 19.08.2014, 19:08 | Сообщение # 978
Полевой исследователь
Ученые сталкеры
Сообщений: 218
Награды: 9
Репутация: [ 83 ]

Цитата sergej5500 ()
Попробуй прописать в стартовую секцию логики [logic] строку:
post_combat_time = 0,0.

Увы, не сработало.

Цитата sergej5500 ()
Или переделай логику под валкера. Валкеры зависают намного реже.

А вот это сработало smile Действительно, с валкера отвлёкшись, непись через некоторое время возвращается на свой путь и идёт как ни в чём не бывало дальше.
 
sergej5500Дата: Чт, 21.08.2014, 11:44 | Сообщение # 979
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Всем привет. Решил добавить в СГМ 2.1 квест "Гон" из Геонезис Аддон на защиту склада Долга. Немного переделал его.

[cut=Фрагмент логики рестриктора.][sr_idle@spawn_1_1]
on_info = sr_idle@timer_1_1 %=jup_b220_gon_monster_spawn%
on_info2 = {=distance_to_obj_ge(jup_b207_trapper_gon_spot:150)} sr_idle@fail %+jup_b220_stalker_gon_squad_enemy%
on_info3 = {+jup_b220_stalker_gon_squad_enemy} sr_idle@fail

[sr_idle@timer_1_1]
on_game_timer = 10 | sr_idle@exist_1_1
on_info = {=distance_to_obj_ge(jup_b207_trapper_gon_spot:150)} sr_idle@fail %+jup_b220_stalker_gon_squad_enemy%
on_info2 = {+jup_b220_stalker_gon_squad_enemy} sr_idle@fail

[sr_idle@exist_1_1]
on_info = {!squad_exist(jup_b220_monster_gon_squad)} sr_idle@spawn_1_2 %=add_cleaner_monster%
on_info2 = {=distance_to_obj_ge(jup_b207_trapper_gon_spot:150)} sr_idle@fail %+jup_b220_stalker_gon_squad_enemy%
on_info3 = {+jup_b220_stalker_gon_squad_enemy} sr_idle@fail

[sr_idle@spawn_1_2]
on_info = sr_idle@timer_1_2 %=jup_b220_gon_monster_spawn%
on_info2 = {=distance_to_obj_ge(jup_b207_trapper_gon_spot:150)} sr_idle@fail %+jup_b220_stalker_gon_squad_enemy%
on_info3 = {+jup_b220_stalker_gon_squad_enemy} sr_idle@fail

[sr_idle@timer_1_2]
on_game_timer = 10 | sr_idle@exist_1_2
on_info = {=distance_to_obj_ge(jup_b207_trapper_gon_spot:150)} sr_idle@fail %+jup_b220_stalker_gon_squad_enemy%
on_info2 = {+jup_b220_stalker_gon_squad_enemy} sr_idle@fail

[sr_idle@exist_1_2]
on_info = {!squad_exist(jup_b220_monster_gon_squad)} sr_idle@spawn_1_3 %=add_cleaner_monster%
on_info2 = {=distance_to_obj_ge(jup_b207_trapper_gon_spot:150)} sr_idle@fail %+jup_b220_stalker_gon_squad_enemy%
on_info3 = {+jup_b220_stalker_gon_squad_enemy} sr_idle@fail[/cut]

[cut=Монстры][jup_b220_monster_bloodsucker_squad]:online_offline_group
faction = monster_predatory_night
npc = sgm_monster_bloodsucker_normal, sgm_monster_bloodsucker_normal, sgm_monster_bloodsucker_normal
story_id = jup_b220_monster_gon_squad
target_smart = jup_b207
always_arrived = true

[jup_b220_monster_boar_squad]:online_offline_group
faction = monster_vegetarian
npc = sgm_monster_boar_normal, sgm_monster_boar_normal, sgm_monster_boar_normal, sgm_monster_boar_normal, sgm_monster_boar_normal, sgm_monster_boar_normal, sgm_monster_boar_normal, sgm_monster_boar_normal, sgm_monster_boar_normal
story_id = jup_b220_monster_gon_squad
target_smart = jup_b207
always_arrived = true

[jup_b220_monster_flesh_squad]:online_offline_group
faction = monster_vegetarian
npc = sgm_monster_flesh_normal, sgm_monster_flesh_normal, sgm_monster_flesh_normal, sgm_monster_flesh_normal, sgm_monster_flesh_normal, sgm_monster_flesh_normal, sgm_monster_flesh_normal, sgm_monster_flesh_normal, sgm_monster_flesh_normal, sgm_monster_flesh_normal, sgm_monster_flesh_normal, sgm_monster_flesh_normal
story_id = jup_b220_monster_gon_squad
target_smart = jup_b207
always_arrived = true

[jup_b220_monster_pseudodog_squad]:online_offline_group
faction = monster_predatory_day
npc = sgm_monster_pseudodog_normal, sgm_monster_pseudodog_normal, sgm_monster_pseudodog_normal, sgm_monster_pseudodog_normal, sgm_monster_pseudodog_normal, sgm_monster_pseudodog_normal
target_smart = jup_b207
always_arrived = true

[jup_b220_monster_dog_squad]:online_offline_group
faction = monster_predatory_day
npc = sgm_monster_dog_normal, sgm_monster_dog_normal, sgm_monster_dog_normal, sgm_monster_dog_normal, sgm_monster_dog_normal, sgm_monster_dog_normal, sgm_monster_dog_normal, sgm_monster_dog_normal, sgm_monster_dog_normal, sgm_monster_dog_normal, sgm_monster_dog_normal, sgm_monster_dog_normal
story_id = jup_b220_monster_gon_squad
target_smart = jup_b207
always_arrived = true

[jup_b220_monster_snork_squad]:online_offline_group
faction = monster_zombied_night
npc = sgm_monster_snork_normal, sgm_monster_snork_normal, sgm_monster_snork_normal, sgm_monster_snork_normal, sgm_monster_snork_normal, sgm_monster_snork_normal, sgm_monster_snork_normal, sgm_monster_snork_normal, sgm_monster_snork_normal
story_id = jup_b220_monster_gon_squad
target_smart = jup_b207
always_arrived = true

[jup_b220_monster_chimera_squad]:online_offline_group
faction = monster_predatory_night
npc = sgm_monster_chimera_normal, sgm_monster_chimera_normal, sgm_monster_chimera_normal
story_id = jup_b220_monster_gon_squad
target_smart = jup_b207
always_arrived = true

[jup_b220_monster_gigant_squad]:online_offline_group
faction = monster_predatory_day
npc = sgm_monster_gigant_normal, sgm_monster_gigant_normal
story_id = jup_b220_monster_gon_squad
target_smart = jup_b207
always_arrived = true

[jup_b220_monster_burer_squad]:online_offline_group
faction = monster_zombied_night
npc = sgm_monster_burer_normal, sgm_monster_burer_normal, sgm_monster_burer_normal
story_id = jup_b220_monster_gon_squad
target_smart = jup_b207
always_arrived = true

[jup_b220_monster_psy_dog_squad]:online_offline_group
faction = monster_predatory_day
npc = sgm_monster_psy_dog_normal, sgm_monster_psy_dog_normal, sgm_monster_psy_dog_normal, sgm_monster_psy_dog_normal, sgm_monster_psy_dog_normal, sgm_monster_psy_dog_normal
target_smart = jup_b207
always_arrived = true

[jup_b220_monster_controller_squad]:online_offline_group
faction = monster_zombied_day
npc = sgm_monster_controller_normal, sgm_monster_controller_normal, sgm_monster_controller_normal
story_id = jup_b220_monster_gon_squad
target_smart = jup_b207
always_arrived = true
[/cut]

[cut=Функция спавна]
function jup_b220_gon_monster_spawn()
local jup_b220_gon_monster_pos_random=math.random(1,6)
local jup_b220_gon_monster_squad_random=math.random(1,11)
if jup_b220_gon_monster_pos_random==1 then
if jup_b220_gon_monster_squad_random==1 then
create_force("jup_b220_monster_bloodsucker_squad",69.019668579102,-1.3870533704758,146.45944213867,833767,648)
end
if jup_b220_gon_monster_squad_random==2 then
create_force("jup_b220_monster_boar_squad",69.019668579102,-1.3870533704758,146.45944213867,833767,648)
end
if jup_b220_gon_monster_squad_random==3 then
create_force("jup_b220_monster_flesh_squad",69.019668579102,-1.3870533704758,146.45944213867,833767,648)
end
if jup_b220_gon_monster_squad_random==4 then
create_force("jup_b220_monster_pseudodog_squad",69.019668579102,-1.3870533704758,146.45944213867,833767,648)
end
if jup_b220_gon_monster_squad_random==5 then
create_force("jup_b220_monster_dog_squad",69.019668579102,-1.3870533704758,146.45944213867,833767,648)
end
if jup_b220_gon_monster_squad_random==6 then
create_force("jup_b220_monster_snork_squad",69.019668579102,-1.3870533704758,146.45944213867,833767,648)
end
if jup_b220_gon_monster_squad_random==7 then
create_force("jup_b220_monster_chimera_squad",69.019668579102,-1.3870533704758,146.45944213867,833767,648)
end
if jup_b220_gon_monster_squad_random==8 then
create_force("jup_b220_monster_gigant_squad",69.019668579102,-1.3870533704758,146.45944213867,833767,648)
end
if jup_b220_gon_monster_squad_random==9 then
create_force("jup_b220_monster_burer_squad",69.019668579102,-1.3870533704758,146.45944213867,833767,648)
end
if jup_b220_gon_monster_squad_random==10 then
create_force("jup_b220_monster_psy_dog_squad",69.019668579102,-1.3870533704758,146.45944213867,833767,648)
end
if jup_b220_gon_monster_squad_random==11 then
create_force("jup_b220_monster_controller_squad",69.019668579102,-1.3870533704758,146.45944213867,833767,648)
end
end
if jup_b220_gon_monster_pos_random==2 then
if jup_b220_gon_monster_squad_random==1 then
create_force("jup_b220_monster_bloodsucker_squad",123.03616333008,-5.6287517547607,120.73503875732,926221,650)
end
if jup_b220_gon_monster_squad_random==2 then
create_force("jup_b220_monster_boar_squad",123.03616333008,-5.6287517547607,120.73503875732,926221,650)
end
if jup_b220_gon_monster_squad_random==3 then
create_force("jup_b220_monster_flesh_squad",123.03616333008,-5.6287517547607,120.73503875732,926221,650)
end
if jup_b220_gon_monster_squad_random==4 then
create_force("jup_b220_monster_pseudodog_squad",123.03616333008,-5.6287517547607,120.73503875732,926221,650)
end
if jup_b220_gon_monster_squad_random==5 then
create_force("jup_b220_monster_dog_squad",123.03616333008,-5.6287517547607,120.73503875732,926221,650)
end
if jup_b220_gon_monster_squad_random==6 then
create_force("jup_b220_monster_snork_squad",123.03616333008,-5.6287517547607,120.73503875732,926221,650)
end
if jup_b220_gon_monster_squad_random==7 then
create_force("jup_b220_monster_chimera_squad",123.03616333008,-5.6287517547607,120.73503875732,926221,650)
end
if jup_b220_gon_monster_squad_random==8 then
create_force("jup_b220_monster_gigant_squad",123.03616333008,-5.6287517547607,120.73503875732,926221,650)
end
if jup_b220_gon_monster_squad_random==9 then
create_force("jup_b220_monster_burer_squad",123.03616333008,-5.6287517547607,120.73503875732,926221,650)
end
if jup_b220_gon_monster_squad_random==10 then
create_force("jup_b220_monster_psy_dog_squad",123.03616333008,-5.6287517547607,120.73503875732,926221,650)
end
if jup_b220_gon_monster_squad_random==11 then
create_force("jup_b220_monster_controller_squad",123.03616333008,-5.6287517547607,120.73503875732,926221,650)
end
end
if jup_b220_gon_monster_pos_random==3 then
if jup_b220_gon_monster_squad_random==1 then
create_force("jup_b220_monster_bloodsucker_squad",154.56488037109,-15.411540031433,98.691482543945,980147,505)
end
if jup_b220_gon_monster_squad_random==2 then
create_force("jup_b220_monster_boar_squad",154.56488037109,-15.411540031433,98.691482543945,980147,505)
end
if jup_b220_gon_monster_squad_random==3 then
create_force("jup_b220_monster_flesh_squad",154.56488037109,-15.411540031433,98.691482543945,980147,505)
end
if jup_b220_gon_monster_squad_random==4 then
create_force("jup_b220_monster_pseudodog_squad",154.56488037109,-15.411540031433,98.691482543945,980147,505)
end
if jup_b220_gon_monster_squad_random==5 then
create_force("jup_b220_monster_dog_squad",154.56488037109,-15.411540031433,98.691482543945,980147,505)
end
if jup_b220_gon_monster_squad_random==6 then
create_force("jup_b220_monster_snork_squad",154.56488037109,-15.411540031433,98.691482543945,980147,505)
end
if jup_b220_gon_monster_squad_random==7 then
create_force("jup_b220_monster_chimera_squad",154.56488037109,-15.411540031433,98.691482543945,980147,505)
end
if jup_b220_gon_monster_squad_random==8 then
create_force("jup_b220_monster_gigant_squad",154.56488037109,-15.411540031433,98.691482543945,980147,505)
end
if jup_b220_gon_monster_squad_random==9 then
create_force("jup_b220_monster_burer_squad",154.56488037109,-15.411540031433,98.691482543945,980147,505)
end
if jup_b220_gon_monster_squad_random==10 then
create_force("jup_b220_monster_psy_dog_squad",154.56488037109,-15.411540031433,98.691482543945,980147,505)
end
if jup_b220_gon_monster_squad_random==11 then
create_force("jup_b220_monster_controller_squad",154.56488037109,-15.411540031433,98.691482543945,980147,505)
end
end
if jup_b220_gon_monster_pos_random==4 then
if jup_b220_gon_monster_squad_random==1 then
create_force("jup_b220_monster_bloodsucker_squad",210.45220947266,-11.418073654175,188.53520202637,1076642,507)
end
if jup_b220_gon_monster_squad_random==2 then
create_force("jup_b220_monster_boar_squad",210.45220947266,-11.418073654175,188.53520202637,1076642,507)
end
if jup_b220_gon_monster_squad_random==3 then
create_force("jup_b220_monster_flesh_squad",210.45220947266,-11.418073654175,188.53520202637,1076642,507)
end
if jup_b220_gon_monster_squad_random==4 then
create_force("jup_b220_monster_pseudodog_squad",210.45220947266,-11.418073654175,188.53520202637,1076642,507)
end
if jup_b220_gon_monster_squad_random==5 then
create_force("jup_b220_monster_dog_squad",210.45220947266,-11.418073654175,188.53520202637,1076642,507)
end
if jup_b220_gon_monster_squad_random==6 then
create_force("jup_b220_monster_snork_squad",210.45220947266,-11.418073654175,188.53520202637,1076642,507)
end
if jup_b220_gon_monster_squad_random==7 then
create_force("jup_b220_monster_chimera_squad",210.45220947266,-11.418073654175,188.53520202637,1076642,507)
end
if jup_b220_gon_monster_squad_random==8 then
create_force("jup_b220_monster_gigant_squad",210.45220947266,-11.418073654175,188.53520202637,1076642,507)
end
if jup_b220_gon_monster_squad_random==9 then
create_force("jup_b220_monster_burer_squad",210.45220947266,-11.418073654175,188.53520202637,1076642,507)
end
if jup_b220_gon_monster_squad_random==10 then
create_force("jup_b220_monster_psy_dog_squad",210.45220947266,-11.418073654175,188.53520202637,1076642,507)
end
if jup_b220_gon_monster_squad_random==11 then
create_force("jup_b220_monster_controller_squad",210.45220947266,-11.418073654175,188.53520202637,1076642,507)
end
end
if jup_b220_gon_monster_pos_random==5 then
if jup_b220_gon_monster_squad_random==1 then
create_force("jup_b220_monster_bloodsucker_squad",251.25486755371,-3.9337031841278,222.29516601563,1140349,612)
end
if jup_b220_gon_monster_squad_random==2 then
create_force("jup_b220_monster_boar_squad",251.25486755371,-3.9337031841278,222.29516601563,1140349,612)
end
if jup_b220_gon_monster_squad_random==3 then
create_force("jup_b220_monster_flesh_squad",251.25486755371,-3.9337031841278,222.29516601563,1140349,612)
end
if jup_b220_gon_monster_squad_random==4 then
create_force("jup_b220_monster_pseudodog_squad",251.25486755371,-3.9337031841278,222.29516601563,1140349,612)
end
if jup_b220_gon_monster_squad_random==5 then
create_force("jup_b220_monster_dog_squad",251.25486755371,-3.9337031841278,222.29516601563,1140349,612)
end
if jup_b220_gon_monster_squad_random==6 then
create_force("jup_b220_monster_snork_squad",251.25486755371,-3.9337031841278,222.29516601563,1140349,612)
end
if jup_b220_gon_monster_squad_random==7 then
create_force("jup_b220_monster_chimera_squad",251.25486755371,-3.9337031841278,222.29516601563,1140349,612)
end
if jup_b220_gon_monster_squad_random==8 then
create_force("jup_b220_monster_gigant_squad",251.25486755371,-3.9337031841278,222.29516601563,1140349,612)
end
if jup_b220_gon_monster_squad_random==9 then
create_force("jup_b220_monster_burer_squad",251.25486755371,-3.9337031841278,222.29516601563,1140349,612)
end
if jup_b220_gon_monster_squad_random==10 then
create_force("jup_b220_monster_psy_dog_squad",251.25486755371,-3.9337031841278,222.29516601563,1140349,612)
end
if jup_b220_gon_monster_squad_random==11 then
create_force("jup_b220_monster_controller_squad",251.25486755371,-3.9337031841278,222.29516601563,1140349,612)
end
end
if jup_b220_gon_monster_pos_random==6 then
if jup_b220_gon_monster_squad_random==1 then
create_force("jup_b220_monster_bloodsucker_squad",225.56190490723,2.4048516750336,286.41793823242,1102377,515)
end
if jup_b220_gon_monster_squad_random==2 then
create_force("jup_b220_monster_boar_squad",225.56190490723,2.4048516750336,286.41793823242,1102377,515)
end
if jup_b220_gon_monster_squad_random==3 then
create_force("jup_b220_monster_flesh_squad",225.56190490723,2.4048516750336,286.41793823242,1102377,515)
end
if jup_b220_gon_monster_squad_random==4 then
create_force("jup_b220_monster_pseudodog_squad",225.56190490723,2.4048516750336,286.41793823242,1102377,515)
end
if jup_b220_gon_monster_squad_random==5 then
create_force("jup_b220_monster_dog_squad",225.56190490723,2.4048516750336,286.41793823242,1102377,515)
end
if jup_b220_gon_monster_squad_random==6 then
create_force("jup_b220_monster_snork_squad",225.56190490723,2.4048516750336,286.41793823242,1102377,515)
end
if jup_b220_gon_monster_squad_random==7 then
create_force("jup_b220_monster_chimera_squad",225.56190490723,2.4048516750336,286.41793823242,1102377,515)
end
if jup_b220_gon_monster_squad_random==8 then
create_force("jup_b220_monster_gigant_squad",225.56190490723,2.4048516750336,286.41793823242,1102377,515)
end
if jup_b220_gon_monster_squad_random==9 then
create_force("jup_b220_monster_burer_squad",225.56190490723,2.4048516750336,286.41793823242,1102377,515)
end
if jup_b220_gon_monster_squad_random==10 then
create_force("jup_b220_monster_psy_dog_squad",225.56190490723,2.4048516750336,286.41793823242,1102377,515)
end
if jup_b220_gon_monster_squad_random==11 then
create_force("jup_b220_monster_controller_squad",225.56190490723,2.4048516750336,286.41793823242,1102377,515)
end
end
end
[/cut]

При спавне очередной группы зверей рандомно выбирается один сквад из одиннадцати и одно точка спавна из шести.
Игрок не знает, откуда прибежит следующая группа животных и кто в ней будет состоять. На локации в любой момент должен быть только один сквад монстров. Но при тестовом выполнении квеста несколько раз спавнилось по два сквада за один раз или же сквад спавнился до гибели предыдущего. С чем это может быть связано?
 
denis2000Дата: Чт, 21.08.2014, 19:09 | Сообщение # 980
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500,

  • Во первых логика рестриктора может быть несколько проще:
    [cut=Логика рестриктора][sr_idle@stalker_gon_squad_def]
    on_info20 = {=distance_to_obj_ge(jup_b207_trapper_gon_spot:150)} sr_idle@fail %+jup_b220_stalker_gon_squad_enemy%
    on_info30 = {+jup_b220_stalker_gon_squad_enemy} sr_idle@fail

    [sr_idle@spawn_1_1]:sr_idle@stalker_gon_squad_def
    on_info = sr_idle@timer_1_1 %=jup_b220_gon_monster_spawn%

    [sr_idle@timer_1_1]:sr_idle@stalker_gon_squad_def
    on_game_timer = 10 | sr_idle@exist_1_1

    [sr_idle@exist_1_1]:sr_idle@stalker_gon_squad_def
    on_info = {!squad_exist(jup_b220_monster_gon_squad)} sr_idle@spawn_1_2 %=add_cleaner_monster%

    [sr_idle@spawn_1_2]:sr_idle@stalker_gon_squad_def
    on_info = sr_idle@timer_1_2 %=jup_b220_gon_monster_spawn%

    [sr_idle@timer_1_2]:sr_idle@stalker_gon_squad_def
    on_game_timer = 10 | sr_idle@exist_1_2

    [sr_idle@exist_1_2]:sr_idle@stalker_gon_squad_def
    on_info = {!squad_exist(jup_b220_monster_gon_squad)} sr_idle@spawn_1_3 %=add_cleaner_monster%[/cut]
  • Во вторых желательно все же увеличить интервал таймеров игровых секунд до 100-200.
  • В третьих разные волны разные story_id сквадов!
  • В четвертых настройки сквадов сами по себе могут дать некоторый рандом по составу и численности, зачем именно такие сквады?
  • В пятых функция спавна может быть заметно проще, если параметры спавна забить в таблицы и одним движением извлечь нужные параметры.


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

denis2000,
Спасибо за информацию.

Цитата denis2000 ()
В пятых функция спавна может быть заметно проще, если параметры спавна забить в таблицы и одним движением извлечь нужные параметры.

Как это сделать на практике? Допустим, есть 2 варианта сквадов и 2 точки спавна.

Цитата denis2000 ()
В третьих разные волны разные story_id сквадов!

У меня 11 вариантов сквадов. Потребуется проверять 11 стори-ид. Мы же не знаем, какой сквад отреспился в этот раз.
Может быть, стоит стори-ид убрать и выдавать при гибели сквада инфопорцию. При спавне следующего сквада её сбрасывать.

Цитата denis2000 ()
В четвертых настройки сквадов сами по себе могут дать некоторый рандом по составу и численности, зачем именно такие сквады?


Я пробовал спавнить такой сквад.

[cut=Сквад][jup_b220_monster_dog_squad]:online_offline_group
faction = monster_predatory_day
npc = sgm_monster_dog_normal
story_id = jup_b220_monster_gon_squad
target_smart = jup_b207
always_arrived = true
npc_in_squad = 2, 6[/cut]

Спавнился сквад из одной собаки. Или кол-во собак в строке npc = надо писать так:

npc = sgm_monster_dog_normal, sgm_monster_dog_normal, sgm_monster_dog_normal, sgm_monster_dog_normal, sgm_monster_dog_normal, sgm_monster_dog_normal, sgm_monster_dog_normal, sgm_monster_dog_normal, sgm_monster_dog_normal, sgm_monster_dog_normal, sgm_monster_dog_normal, sgm_monster_dog_normal

Число собак в строке должно быть больше максимального кол-ва нпс в скваде?
 
denis2000Дата: Чт, 21.08.2014, 21:51 | Сообщение # 982
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата sergej5500 ()
У меня 11 вариантов сквадов. Потребуется проверять 11 стори-ид. Мы же не знаем, какой сквад отреспился в этот раз.

Знаете! Одна волна - один стори_ид на все варианты сквадов, другая волна другой стори_ид.
Цитата sergej5500 ()
Может быть, стоит стори-ид убрать и выдавать при гибели сквада инфопорцию. При спавне следующего сквада её сбрасывать.

А вот это правильная мысль, только на разные волны мутантов разные инфопорции.
Цитата sergej5500 ()
npc = sgm_monster_dog_normal

Вообще то не npc, а npc_random:
Код
npc_random = sgm_monster_dog_normal
npc_in_squad = 2, 6


Цитата sergej5500 ()
Как это сделать на практике?

Как то так:
[cut]
Код
local jup_b220_gon_monster_squad_tabl = {
[1] = "jup_b220_monster_bloodsucker_squad",
...
[11] = "jup_b220_monster_dog_squad"
}

local jup_b220_gon_monster_pos_tabl = {
[1] = {[1]=69.019668579102,[2]=-1.3870533704758,[3]=146.45944213867,[4]=833767,[5]=648},
...
[6] = {[1]=123.03616333008,[2]=-5.6287517547607,[3]=120.73503875732,[4]=926221,[5]=650}
}

function jup_b220_gon_monster_spawn()
local pos_random=math.random(1,6)
local squad_random=math.random(1,11)
create_force(jup_b220_gon_monster_squad_tabl[squad_random],jup_b220_gon_monster_pos_tabl[pos_random][1],jup_b220_gon_monster_pos_tabl[pos_random][2],jup_b220_gon_monster_pos_tabl[pos_random][3],jup_b220_gon_monster_pos_tabl[pos_random][4],jup_b220_gon_monster_pos_tabl[pos_random][5])
end
[/cut]


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

Всем привет. Встретил забавный глюк.

Неписи грабят тайники из оригинала ЗП. Между Копачами и Яновом в болотце под мостками есть тайник. Там лежит СПАС-12, патроны, граната и еще что-то.

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

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

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

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
gamerДата: Чт, 04.09.2014, 16:33 | Сообщение # 985
Новичок
Пользователи
Сообщений: 82
Награды: 0
Репутация: [ 0 ]

При переносе в зп актору задаю исходные координат, также пробовал задать 0,0,0 .Мой актор при всех попытках спавнитса за локацией.В чём может быть проблема?
 
sergej5500Дата: Чт, 04.09.2014, 17:04 | Сообщение # 986
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

gamer,

Проверь совпадение координат в строках

position = 253.482116699219, 8.78786945343018, 169.996673583984

и

upd:position = 253.482116699219, 8.78786945343018, 169.996673583984

в секции actor в all.spawn. У меня была похожая проблема.
 
gamerДата: Чт, 04.09.2014, 19:35 | Сообщение # 987
Новичок
Пользователи
Сообщений: 82
Награды: 0
Репутация: [ 0 ]

Не понимаю

В Alife_ltx записал ети координаты 45.6969795227051,0,-356.334716796875 ,а меня выкидует вопще на другие координати
 
FantomICWДата: Чт, 04.09.2014, 19:38 | Сообщение # 988
Лидер «Свободы»
Свобода
Сообщений: 4438
Награды: 44
Репутация: [ 1340 ]

gamer, еще раз проверь upd:position.


 
gamerДата: Чт, 04.09.2014, 21:51 | Сообщение # 989
Новичок
Пользователи
Сообщений: 82
Награды: 0
Репутация: [ 0 ]

кажись проблема с компилятором , появился дополнительный way файл
 
denis2000Дата: Пт, 05.09.2014, 08:19 | Сообщение # 990
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

gamer, Значит в нем пути с геймвертексами вне диапазона.

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