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


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


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

Добрый вечер. В СГМ есть секция логики НПС on_corpse_use. Запускается при юзании трупа НПС с кастом-датой. Если она, конечно, в кастом-дате прописана. Собственно, применяется она очень редко. Прописана в логике непися zat_accompany_stalker. Это проводник до Скадовска.

Я решил попробовать сделать этого НПС сквадовым. Прописал эксклюзив на ближайшем смарте. Сделал сквад из одного НПС. Задал ему работу и логику.
[cut=Эксклюзив]
[logic@zat_accompany_stalker]
active = walker@walker
suitable = {=check_npc_name(zat_accompany_stalker)} true
prior = 200

[walker@walker]
path_walk = zat_accompany_stalker_patrol_walk

[on_corpse_use]
run_action = zat_accompany_to_boat[/cut]

Непись отлично ходит по дороге. Спавнится после добавления сквада в simulation.
Секция
[on_corpse_use]
run_action = zat_accompany_to_boat

должна запустить квест "Добраться до Скадовска", если непись погиб раньше, чем игрок с ним пообщается.

Собственно, вопрос, можно ли запустить ф-ию для сквадового НПС?

Добавлено (20.05.2014, 21:52)
---------------------------------------------
Добрый вечер. Возник такой вопрос.

Прописал НПС путь.

[cut=Путь]
[zat_sim_4_zat_accompany_stalker_pursue_walk]
points = p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21
p0:name = wp00
p0:flags = 0x1
p0:position = -305.97274780273,17.625286102295,614.78491210938
p0:game_vertex_id = 33
p0:level_vertex_id = 336443
p0:links = p1(1)

p1:name = wp01
p1:flags = 0x1
p1:position = -245.22958374023,10.329545974731,626.14794921875
p1:game_vertex_id = 33
p1:level_vertex_id = 454207
p1:links = p2(1)

p2:name = wp02
p2:flags = 0x1
p2:position = -200.76133728027,5.6418194770813,640.80206298828
p2:game_vertex_id = 126
p2:level_vertex_id = 541606
p2:links = p3(1)

p3:name = wp03
p3:flags = 0x1
p3:position = -146.4808807373,-0.8795371055603,655.93487548828
p3:game_vertex_id = 193
p3:level_vertex_id = 650938
p3:links = p4(1)

p4:name = wp04
p4:flags = 0x1
p4:position = -120.71292114258,-6.3835563659668,624.78356933594
p4:game_vertex_id = 193
p4:level_vertex_id = 700523
p4:links = p5(1)

p5:name = wp05
p5:flags = 0x1
p5:position = -84.381645202637,-8.0025157928467,618.13824462891
p5:game_vertex_id = 48
p5:level_vertex_id = 772941
p5:links = p6(1)

p6:name = wp06
p6:flags = 0x1
p6:position = -38.017169952393,-8.0015726089478,612.43231201172
p6:game_vertex_id = 48
p6:level_vertex_id = 871365
p6:links = p7(1)

p7:name = wp07
p7:flags = 0x1
p7:position = 11.505271911621,-6.6523537635803,605.24914550781
p7:game_vertex_id = 192
p7:level_vertex_id = 967482
p7:links = p8(1)

p8:name = wp08
p8:flags = 0x1
p8:position = 23.189067840576,-5.5822668075562,590.47180175781
p8:game_vertex_id = 194
p8:level_vertex_id = 991616
p8:links = p9(1)

p9:name = wp09
p9:flags = 0x1
p9:position = 28.042343139648,-6.3512697219849,568.19244384766
p9:game_vertex_id = 194
p9:level_vertex_id = 1001605
p9:links = p10(1)

p10:name = wp010
p10:flags = 0x1
p10:position = 18.626575469971,-7.0012526512146,547.34967041016
p10:game_vertex_id = 47
p10:level_vertex_id = 983111
p10:links = p11(1)

p11:name = wp011
p11:flags = 0x1
p11:position = 27.894184112549,-8.0003976821899,490.33941650391
p11:game_vertex_id = 47
p11:level_vertex_id = 1001512
p11:links = p12(1)

p12:name = wp012
p12:flags = 0x1
p12:position = 33.874561309814,-2.1919672489166,453.8034362793
p12:game_vertex_id = 41
p12:level_vertex_id = 1012693
p12:links = p13(1)

p13:name = wp013
p13:flags = 0x1
p13:position = 42.217529296875,13.172751426697,417.23440551758
p13:game_vertex_id = 197
p13:level_vertex_id = 1030324
p13:links = p14(1)

p14:name = wp014
p14:flags = 0x1
p14:position = 47.49817276001,15.420347213745,376.53991699219
p14:game_vertex_id = 137
p14:level_vertex_id = 1041573
p14:links = p15(1)

p15:name = wp015
p15:flags = 0x1
p15:position = 69.380126953125,6.2323718070984,331.57562255859
p15:game_vertex_id = 135
p15:level_vertex_id = 1083120
p15:links = p16(1)

p16:name = wp016
p16:flags = 0x1
p16:position = 109.01705932617,-7.0041327476501,291.99069213867
p16:game_vertex_id = 135
p16:level_vertex_id = 1154205
p16:links = p17(1)

p17:name = wp017
p17:flags = 0x1
p17:position = 108.24343109131,-7.0003290176392,270.93334960938
p17:game_vertex_id = 189
p17:level_vertex_id = 1153009
p17:links = p18(1)

p18:name = wp018
p18:flags = 0x1
p18:position = 111.53921508789,-7.0028510093689,244.09727478027
p18:game_vertex_id = 208
p18:level_vertex_id = 1157711
p18:links = p19(1)

p19:name = wp019
p19:flags = 0x1
p19:position = 125.87326049805,-7.0023880004883,224.70512390137
p19:game_vertex_id = 185
p19:level_vertex_id = 1182956
p19:links = p20(1)

p20:name = wp020
p20:flags = 0x1
p20:position = 142.71264648438,-6.894793510437,211.1773223877
p20:game_vertex_id = 185
p20:level_vertex_id = 1210408
p20:links = p21(1)

p21:name = wp021
p21:flags = 0x1
p21:position = 160.77438354492,-7.1476922035217,198.31842041016
p21:game_vertex_id = 186
p21:level_vertex_id = 1241975[/cut]

Есть ли возможность в момент, когда НПС достигает последней точки пути (№21) выдать инфопорцию, чтобы переключить его на другую работу? И можно ли это прописать в файле way и как это делается?

 
makdmДата: Вт, 20.05.2014, 22:15 | Сообщение # 917
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

sergej5500,
Цитата sergej5500 ()
можно ли запустить ф-ию для сквадового НПС?

Можно, только для этого нужно поменять "подход" - прописывать параметр в секции НПС, а не в его custom_data.
Тогда переписав скрипт на юзанье трупа, можно производить действие, как для НПС с custom_data, так и для сквадовых НПС.

Цитата sergej5500 ()
И можно ли это прописать в файле way и как это делается?

Поставьте сигнал в пути,

p21:name = wp021|sig=see_psy

а в логике сделайте проверку
например так
on_signal = see_psy | %+see_psy_antenna%
on_info = {+see_psy_antenna} remark@attack


Терпение......
И все получится!


Сообщение отредактировал makdm - Вт, 20.05.2014, 22:19
 
sergej5500Дата: Вт, 20.05.2014, 23:34 | Сообщение # 918
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

makdm,
Спасибо за помощь. Еще один вопрос.

[cut=Путь сталкера до Скадовска][zat_sim_4_zat_accompany_stalker_pursue_walk]
points = p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21
p0:name = wp00
p0:flags = 0x1
p0:position = -305.97274780273,17.625286102295,614.78491210938
p0:game_vertex_id = 33
p0:level_vertex_id = 336443
p0:links = p1(1)

p1:name = wp01
p1:flags = 0x1
p1:position = -245.22958374023,10.329545974731,626.14794921875
p1:game_vertex_id = 33
p1:level_vertex_id = 454207
p1:links = p2(1)

p2:name = wp02
p2:flags = 0x1
p2:position = -200.76133728027,5.6418194770813,640.80206298828
p2:game_vertex_id = 126
p2:level_vertex_id = 541606
p2:links = p3(1)

p3:name = wp03
p3:flags = 0x1
p3:position = -146.4808807373,-0.8795371055603,655.93487548828
p3:game_vertex_id = 193
p3:level_vertex_id = 650938
p3:links = p4(1)

p4:name = wp04
p4:flags = 0x1
p4:position = -120.71292114258,-6.3835563659668,624.78356933594
p4:game_vertex_id = 193
p4:level_vertex_id = 700523
p4:links = p5(1)

p5:name = wp05
p5:flags = 0x1
p5:position = -84.381645202637,-8.0025157928467,618.13824462891
p5:game_vertex_id = 48
p5:level_vertex_id = 772941
p5:links = p6(1)

p6:name = wp06
p6:flags = 0x1
p6:position = -38.017169952393,-8.0015726089478,612.43231201172
p6:game_vertex_id = 48
p6:level_vertex_id = 871365
p6:links = p7(1)

p7:name = wp07
p7:flags = 0x1
p7:position = 11.505271911621,-6.6523537635803,605.24914550781
p7:game_vertex_id = 192
p7:level_vertex_id = 967482
p7:links = p8(1)

p8:name = wp08
p8:flags = 0x1
p8:position = 23.189067840576,-5.5822668075562,590.47180175781
p8:game_vertex_id = 194
p8:level_vertex_id = 991616
p8:links = p9(1)

p9:name = wp09
p9:flags = 0x1
p9:position = 28.042343139648,-6.3512697219849,568.19244384766
p9:game_vertex_id = 194
p9:level_vertex_id = 1001605
p9:links = p10(1)

p10:name = wp010
p10:flags = 0x1
p10:position = 18.626575469971,-7.0012526512146,547.34967041016
p10:game_vertex_id = 47
p10:level_vertex_id = 983111
p10:links = p11(1)

p11:name = wp011
p11:flags = 0x1
p11:position = 27.894184112549,-8.0003976821899,490.33941650391
p11:game_vertex_id = 47
p11:level_vertex_id = 1001512
p11:links = p12(1)

p12:name = wp012
p12:flags = 0x1
p12:position = 33.874561309814,-2.1919672489166,453.8034362793
p12:game_vertex_id = 41
p12:level_vertex_id = 1012693
p12:links = p13(1)

p13:name = wp013
p13:flags = 0x1
p13:position = 42.217529296875,13.172751426697,417.23440551758
p13:game_vertex_id = 197
p13:level_vertex_id = 1030324
p13:links = p14(1)

p14:name = wp014
p14:flags = 0x1
p14:position = 47.49817276001,15.420347213745,376.53991699219
p14:game_vertex_id = 137
p14:level_vertex_id = 1041573
p14:links = p15(1)

p15:name = wp015
p15:flags = 0x1
p15:position = 69.380126953125,6.2323718070984,331.57562255859
p15:game_vertex_id = 135
p15:level_vertex_id = 1083120
p15:links = p16(1)

p16:name = wp016
p16:flags = 0x1
p16:position = 109.01705932617,-7.0041327476501,291.99069213867
p16:game_vertex_id = 135
p16:level_vertex_id = 1154205
p16:links = p17(1)

p17:name = wp017
p17:flags = 0x1
p17:position = 108.24343109131,-7.0003290176392,270.93334960938
p17:game_vertex_id = 189
p17:level_vertex_id = 1153009
p17:links = p18(1)

p18:name = wp018
p18:flags = 0x1
p18:position = 111.53921508789,-7.0028510093689,244.09727478027
p18:game_vertex_id = 208
p18:level_vertex_id = 1157711
p18:links = p19(1)

p19:name = wp019
p19:flags = 0x1
p19:position = 125.87326049805,-7.0023880004883,224.70512390137
p19:game_vertex_id = 185
p19:level_vertex_id = 1182956
p19:links = p20(1)

p20:name = wp020
p20:flags = 0x1
p20:position = 142.71264648438,-6.894793510437,211.1773223877
p20:game_vertex_id = 185
p20:level_vertex_id = 1210408
p20:links = p21(1)

p21:name = wp021|sig=zat_accompany_to_boat_sms
p21:flags = 0x1
p21:position = 160.77438354492,-7.1476922035217,198.31842041016
p21:game_vertex_id = 186
p21:level_vertex_id = 1241975[/cut]

Непись должен в последней точке выдать сигнал и перейти на следующую работу. Он "зависает" на точке №20, предпоследней. Этот маршрут проходит от места старта игры в СГМ к северу от Лесопилки до Скадовска. НПС его выполняет без замечаний, а на предпоследней точке встает и смотрит на последнюю точку. В чем ошибка?
 
makdmДата: Ср, 21.05.2014, 00:48 | Сообщение # 919
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

sergej5500, зачем вы в каждой точке прописывает flags ? По моему они тут лишние.
Я бы сделал так,
или в последней точке ( 21 ) прописал p21:flags = 0x1 и сделал точку look с таким же флагом flags = 0x1
или дописал бы в 21 точку

p21:links = p0(1)
Перехода к нулевой точке не будет, т.к. выдан сигнал и произойдёт переключение схемы.


Терпение......
И все получится!


Сообщение отредактировал makdm - Ср, 21.05.2014, 00:55
 
sergej5500Дата: Ср, 21.05.2014, 10:42 | Сообщение # 920
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Доброе утро. Вернусь к предыдущему вопросу. Исправил проблему зависания непися на 20 точке. Видимо, 21 точка маршрута попала в зону "миролюбия" на Скадовске и тот не хотел туда заходить. После правки пути и выдачи сигнала на 20 точке сигнал стал выдаваться.

Возник новый вопрос.

[cut=Логика][logic@zat_accompany_stalker]
active = walker@walker
suitable = {=check_npc_name(zat_accompany_stalker)} true
prior = 200
on_death = death

[death]
on_info = {-zat_accompany_to_boat_start} %+zat_accompany_stalker_death%,{+zat_accompany_to_boat_start -zat_accompany_to_boat_daleko} %+zat_accompany_stalker_death +zat_accompany_to_boat_i_am_alone%

[walker@walker]
path_walk = zat_accompany_stalker_patrol_walk
on_info = {+zat_accompany_to_boat_start -zat_accompany_to_boat_complete} walker@walker_2

[walker@walker_2]
path_walk = zat_accompany_stalker_pursue_walk
def_state_moving = assault
on_signal = zat_accompany_to_boat_sms | walker@walker %=send_tip(zat_accompany_final_text:portrait_neutral_1:zat_accompany_stalker_title:5000)%
on_info = {+zat_accompany_to_boat_start -zat_accompany_to_boat_complete -zat_accompany_to_boat_daleko =dist_to_actor_ge(90)} walker@walker %+zat_accompany_to_boat_daleko =release_npc%
on_info2 = {+zat_accompany_to_boat_complete} walker@walker
on_info3 = {=zat_accompany_stalker_ambush_cond -zat_accompany_to_boat_ambush} %+zat_accompany_to_boat_ambush =zat_accompany_stalker_ambush_action%[/cut]

При получении сигнала НПС должен перейти на секцию walker@walker и ГГ приходит текстовое сообщение.
Но непись зависает. Сообщения приходят непрерывно по 2-3 штуки в секунду. Непись переключается на секцию walker@walker только после прихода инфопорции zat_accompany_to_boat_complete. Она выдается после приближения игрока к Скадовску на определенную дистанцию.

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

sergej5500, Он капризничает потому что постоянно переключается между секциями walker@walker и walker@walker_2

Цитата sergej5500 ()
Непись переключается на секцию walker@walker только после прихода инфопорции zat_accompany_to_boat_complete

Вы ошибаетесь! Он переключается по этому услоувию: on_signal = zat_accompany_to_boat_sms | walker@walker %=send_tip


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
alex_xp_77Дата: Пн, 09.06.2014, 18:31 | Сообщение # 922
Научный сотрудник.
Ученые сталкеры
Сообщений: 242
Награды: 6
Репутация: [ 41 ]

Добрый день всем !! У меня вопрос, при пробежке по локации, происходит вылет, без лога, просто вылет, очень похоже на непонятную команду, когда нпс незнает что ему заданно, какую команду необходимо выполнять, прилогаю скрины :
1) общая картина http://SSMaker.ru/671c90e0/
2) логика http://SSMaker.ru/3925a430/ http://SSMaker.ru/82fa3bfd/
3) пути http://SSMaker.ru/5ebdac11/ http://SSMaker.ru/1e6717b7/ http://SSMaker.ru/bdfdeaa8/ http://SSMaker.ru/c17b665f/
смарт этот, потому что при подходе к смарту происходит вылет, в тот момент когда должны спавнится нпс!!
может и разобрался бы сам если бы был лог, помогите пожалуста, хоть советом, как исправить вылет??


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

alex_xp_77,
1. Вы отдаете НПС под смарт и тут-же назначаете индивидуальную логику! Возможно только что-то одно.
2. Привыкайте выносить логику в отдельный файл - так намного проще потом редактировать.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
alex_xp_77Дата: Пн, 09.06.2014, 19:17 | Сообщение # 924
Научный сотрудник.
Ученые сталкеры
Сообщений: 242
Награды: 6
Репутация: [ 41 ]

По другому не умею к сожалению Денис, уроки смотрел только от Андрея Непряхина

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

alex_xp_77,
Да вижу.
[cut]Однако в оригинале или так:
Код
[smart_terrains]
esc_lager = true

Или так:
Код
[logic]
active = walker

[walker]
path_walk = agr_factory_spetsnaz_walk1
path_look = agr_factory_spetsnaz_look1
....

Или так:
Код
[smart_terrains]
none = true
[logic]
active = walker
....

Одновременно никому смарт и логика не назначена. Для проверки уберите назначение смарта своим НПС.[/cut]


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
alex_xp_77Дата: Пн, 09.06.2014, 20:38 | Сообщение # 926
Научный сотрудник.
Ученые сталкеры
Сообщений: 242
Награды: 6
Репутация: [ 41 ]

У меня как раз вся схема логики, и смартов прописана именно так как я привел выше, работает норм, для вашей логики Денис нужно создать тестовый уровень, что бы попрактиковаться, если не ошибаюсь, что бы привести в работу lager, нужно править lager.ltx, раньше пытался но не получилось, информации было крайне мало, нужно время, но логику скопировал, слышал что так проще.
Мне по идее нужны двое парней сидяших у костра, изначально назначил walk и look для общей компиляции, но теперь буду строить камп зону, то есть именно по сценарию игры тут : http://SSMaker.ru/3ad3fab0/ там обрати внимания вдали собачки, они тоже необходимы!!

Ну если другие нормально работают, то ничего не могу больше посоветовать. Придется методом тыка искать в чем отличие от других НПС. И приводят ли эти отличия к вылету. denis2000

Сделал камп зону все заработало!! Наверно ошибка была в названии числа то есть stalker_71_walk, где то там Денис, я не стал разбираться!!




Сообщение отредактировал alex_xp_77 - Ср, 11.06.2014, 21:23
 
sergej5500Дата: Пт, 13.06.2014, 19:20 | Сообщение # 927
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый день.

Создал 5 эксклюзивных сквадов по 6 НПС на ВНЗ.

[cut=Сквады]
[zat_b38_alfa_squad_1]:online_offline_group
faction = alfa_force
relationship = neutral
npc = respawn_easy_alfa_force, respawn_normal_alfa_force, respawn_heavy_alfa_force, respawn_easy_alfa_force, respawn_normal_alfa_force, respawn_heavy_alfa_force
story_id = zat_b38_alfa_squad_1
spawn_point = zat_b38_respawn_point_1
target_smart = zat_b38
always_arrived = true

[zat_b38_alfa_squad_2]:online_offline_group
faction = alfa_force
relationship = neutral
npc = respawn_easy_alfa_force, respawn_normal_alfa_force, respawn_heavy_alfa_force, respawn_easy_alfa_force, respawn_normal_alfa_force, respawn_heavy_alfa_force
story_id = zat_b38_alfa_squad_2
spawn_point = zat_b38_respawn_point_2
target_smart = zat_b38
always_arrived = true

[zat_b38_alfa_squad_3]:online_offline_group
faction = alfa_force
relationship = neutral
npc = respawn_easy_alfa_force, respawn_normal_alfa_force, respawn_heavy_alfa_force, respawn_easy_alfa_force, respawn_normal_alfa_force, respawn_heavy_alfa_force
story_id = zat_b38_alfa_squad_3
spawn_point = zat_b38_respawn_point_3
target_smart = zat_b38
always_arrived = true

[zat_b38_alfa_squad_4]:online_offline_group
faction = alfa_force
relationship = neutral
npc = respawn_easy_alfa_force, respawn_normal_alfa_force, respawn_heavy_alfa_force, respawn_easy_alfa_force, respawn_normal_alfa_force, respawn_heavy_alfa_force
story_id = zat_b38_alfa_squad_4
spawn_point = zat_b38_respawn_point_4
target_smart = zat_b38
always_arrived = true

[zat_b38_alfa_squad_5]:online_offline_group
faction = alfa_force
relationship = neutral
npc = respawn_easy_alfa_force, respawn_normal_alfa_force, respawn_heavy_alfa_force, respawn_easy_alfa_force, respawn_normal_alfa_force, respawn_heavy_alfa_force
story_id = zat_b38_alfa_squad_5
spawn_point = zat_b38_respawn_point_5
target_smart = zat_b38
always_arrived = true[/cut]

По сюжету сквады будут враждебны игроку. Для их первоначального и повторного спавна имеется рестриктор.

[cut=Рестриктор][logic]
active = sr_idle@1

[sr_idle@1]
on_info = {=distance_to_smart_le(zat_b38:280)} sr_idle@2

[sr_idle@2]
on_info = sr_idle@3 %=create_squad(zat_b38_alfa_squad_1:zat_b38)%

[sr_idle@3]
on_info = sr_idle@4 %=create_squad(zat_b38_alfa_squad_2:zat_b38)%

[sr_idle@4]
on_info = sr_idle@5 %=create_squad(zat_b38_alfa_squad_3:zat_b38)%

[sr_idle@5]
on_info = sr_idle@6 %=create_squad(zat_b38_alfa_squad_4:zat_b38)%

[sr_idle@6]
on_info = sr_idle@7 %=create_squad(zat_b38_alfa_squad_5:zat_b38)%

[sr_idle@7]
on_info = {=distance_to_smart_ge(zat_b38:350)} sr_idle@8

[sr_idle@8]
on_info = {=squad_exist(zat_b38_alfa_squad_1)} %=remove_squad(zat_b38_alfa_squad_1)%
on_info2 = {!squad_exist(zat_b38_alfa_squad_1)} sr_idle@9

[sr_idle@9]
on_info = {=squad_exist(zat_b38_alfa_squad_2)} %=remove_squad(zat_b38_alfa_squad_2)%
on_info2 = {!squad_exist(zat_b38_alfa_squad_2)} sr_idle@10

[sr_idle@10]
on_info = {=squad_exist(zat_b38_alfa_squad_3)} %=remove_squad(zat_b38_alfa_squad_3)%
on_info2 = {!squad_exist(zat_b38_alfa_squad_3)} sr_idle@11

[sr_idle@11]
on_info = {=squad_exist(zat_b38_alfa_squad_4)} %=remove_squad(zat_b38_alfa_squad_4)%
on_info2 = {!squad_exist(zat_b38_alfa_squad_4)} sr_idle@12

[sr_idle@12]
on_info = {=squad_exist(zat_b38_alfa_squad_5)} %=remove_squad(zat_b38_alfa_squad_5)%
on_info2 = {!squad_exist(zat_b38_alfa_squad_5)} sr_idle@1[/cut]

После старта НИ и первого приближения к ВНЗ обнаружил все 5 сквадов на месте и выполняют свои работы.

Направился к аномалии "Цирк". Т.е. сквады должны удалиться с локации а логика рестриктора переключиться на первую секцию. Вернулся к ВНЗ. Там только 2 сквада (12 НПС).

Для эксперимента поменял дистанции до смарта на 50 и 100 метров. Никаких сбоев не обнаружил. Все 5 сквадов исправно спавнятся и удаляются.

В чем может быть причина сбоя?

Зачем? denis2000

Хочу сделать следующее. При каждом приближении игрока к ВНЗ его должен встретить весь "личный состав" базы - 30 штыков.


Сообщение отредактировал sergej5500 - Пт, 13.06.2014, 09:03
 
denis2000Дата: Пт, 13.06.2014, 19:56 | Сообщение # 928
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Что мешает спавнить на дистанции 140м, а удалять на 200м?
Удалять можно одной командой:
Код
%=clear_smart_terrain(zat_b38)%

А спавнить можно в принципе в одной строке:
Код
%=create_squad(zat_b38_alfa_squad_1:zat_b38) =create_squad(zat_b38_alfa_squad_2:zat_b38) =create_squad(zat_b38_alfa_squad_3:zat_b38) =create_sq uad(zat_b38_alfa_squad_4:zat_b38) =create_squad(zat_b38_alfa_squad_5:zat_b38)%


К стати можно и при спавне проверять появился ли сквад, а как только появился переключаться на следующую секцию.


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

denis2000,
Попробовал разные варианты. Вот один из них.
[cut=Рестриктор][logic]
active = sr_idle@1

[sr_idle@1]
on_info = {=distance_to_smart_le(zat_b38:100)} sr_idle@2 %=zat_b38_alfa_base_spawn%

[sr_idle@2]
on_info = {=distance_to_smart_ge(zat_b38:270)} sr_idle@1 %=zat_b38_alfa_base_clean%[/cut]

[cut=Функции]
function zat_b38_alfa_base_spawn()
create_force("zat_b38_alfa_squad_1","zat_b38")
create_force("zat_b38_alfa_squad_2","zat_b38")
create_force("zat_b38_alfa_squad_3","zat_b38")
create_force("zat_b38_alfa_squad_4","zat_b38")
create_force("zat_b38_alfa_squad_5","zat_b38")
end
function zat_b38_alfa_base_clean()
set_squad_removed("zat_b38_alfa_squad_1")
set_squad_removed("zat_b38_alfa_squad_2")
set_squad_removed("zat_b38_alfa_squad_3")
set_squad_removed("zat_b38_alfa_squad_4")
set_squad_removed("zat_b38_alfa_squad_5")
end[/cut]

1. Наблюдается следующая ситуация. При первом приближении к ВНЗ все 5 сквадов (30 НПС) на местах. Дистанция спавна здесь значения не имеет.

2. Удаление сквадов работает корректно. При тестовом уменьшении дистанции спавна до 10 метров обошел ВНЗ. Оно пустое. Все сквады удалились.

3. Повторный спавн при дистанциях более 200 метров спавнит только два сквада. Видимо, на ближайших к игроку спавн-пойнтах. Спавн-пойнты расположены по углам здания ВНЗ.

4. При уменьшении дистанции спавна до 150 метров отреспилось 3 сквада. При 130 метрах 4 сквада. При 100 метрах все 5.
До дальнего спавн-пойнта в этот момент примерно 150-160 метров.

5. Форма команд для спавна значения не имеет. Без разницы, что писать. create_squad в логике или create_force в скрипте.
Ситуация одна и та же.

6. В порядке гипотезы. Возможно, сквады респятся, но куда-то исчезают.

Добавлено (14.06.2014, 01:24)
---------------------------------------------

Цитата sergej5500 ()
Что мешает спавнить на дистанции 140м, а удалять на 200м?

В этом случае спавн происходит на глазах игрока. Это нежелательно.
 
makdmДата: Сб, 14.06.2014, 09:14 | Сообщение # 930
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

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

sergej5500, при спавне отрядов, поставьте на них метку ( spot ), и посмотрите на карте, где реально находятся сквады. Отсюда и двигайтесь дальше.


Терпение......
И все получится!
 
Поиск: