|
Модостроение. Спавн и логика
|
|
| denis2000 | Дата: Пн, 10.10.2011, 21:20 | Сообщение # 1 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Спавн и логика Создание объектов на локации и логика поведения этих объектов Если у вас появились вопросы по созданию динамических объектов в игре (НПС, монстры, аномалии, и т.п.) и настройке их "поведения". Задавайте их в этой теме - умные головы, модосторители и просто разбирающиеся в программировании люди вам ответят.
Много интересного материала здесь (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 по ссылке из шапки и соседнюю тему "Курс молодого бойца", возможно Ваш вопрос уже рассматривался.
Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки. Помните чем подробнее вопрос, тем точнее ответ.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| denis2000 | Дата: Вт, 14.06.2016, 17:54 | Сообщение # 1291 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| men_stalker, Что же всем так лень поиском пользоваться! http://stalkerin.gameru.net/wiki....ча_в_ЗП
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| men_stalker | Дата: Чт, 16.06.2016, 08:47 | Сообщение # 1292 |
 Инженер «Свободы»
Свобода
Сообщений: 184
| denis2000, извините, но не наталкивался на эту статью :D sergej5500, получил вылет на синтаксисе логики
Добавлено (16.06.2016, 08:47) --------------------------------------------- Здравствуйте, тот же Сидорович, получил вылет: [cut=лог]FATAL ERROR
[error]Expression : fatal error [error]Function : CInifile::r_string [error]File : D:\prog_repository\sources\trunk\xrCore\Xr_ini.cpp [error]Line : 513 [error]Description : <no expression> [error]Arguments : Can't find variable terrain in [m_trader]
stack trace:[/cut] Знаю то что надо добавить переменную terrain в [m_trader], но не знаю как это сделать. Тем более что в чн у Сидоровича вообще отсутствует строка <terrain_sect>stalker_terrain</terrain_sect>. Попытался закоментировать строку, но толку мало: тот же вылет.
Сообщение отредактировал men_stalker - Чт, 16.06.2016, 08:50 |
| |
|
| Эти 0 пользователя(ей) поблагодарили men_stalker за это полезное сообщение: |
|
|
| sergej5500 | Дата: Чт, 16.06.2016, 09:31 | Сообщение # 1293 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| men_stalker,
Посмотри, как прописана эта переменная terrain у обычных сталкеров. И сделай так же.
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| men_stalker | Дата: Чт, 16.06.2016, 11:15 | Сообщение # 1294 |
 Инженер «Свободы»
Свобода
Сообщений: 184
| sergej5500,[cut=вот как прописано в оригинале] [stalker_terrain] 255,000,255,255
[sakharov_terrain] 255,001,255,255
[sim_smart_1] 255,002,255,255 [sim_smart_2] 255,003,255,255 [sim_smart_3] 255,004,255,255 [sim_smart_4] 255,005,255,255 [sim_smart_5] 255,006,255,255 [sim_smart_6] 255,007,255,255 [sim_smart_7] 255,008,255,255 [sim_smart_8] 255,009,255,255 [sim_smart_base] 255,010,255,255[/cut] Пытался так [stalker_terrain] 255,000,255,255 и так [trader_terrain] 255,000,255,255 Тот же эфект
|
| |
|
| Эти 0 пользователя(ей) поблагодарили men_stalker за это полезное сообщение: |
|
|
| sergej5500 | Дата: Чт, 16.06.2016, 11:21 | Сообщение # 1295 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| men_stalker,
Переменная, которой нет, называется terrain. Она должна быть прописана в секции stalker в файле m_stalker в configs\creatures. Прочие секции сталкеров берут её оттуда. Посмотри, чему она равна и добавь Сидоровичу.
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| denis2000 | Дата: Чт, 16.06.2016, 15:15 | Сообщение # 1296 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| men_stalker, Не в той секции!
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| men_stalker | Дата: Чт, 16.06.2016, 15:23 | Сообщение # 1297 |
 Инженер «Свободы»
Свобода
Сообщений: 184
| denis2000, в каком смысле не в той секции?
|
| |
|
| Эти 0 пользователя(ей) поблагодарили men_stalker за это полезное сообщение: |
|
|
| sergej5500 | Дата: Чт, 16.06.2016, 15:45 | Сообщение # 1298 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Цитата men_stalker (  ) в каком смысле не в той секции?
В смысле секция [stalker_foot_bones] и секция [stalker] - это разные секции. Главная для всех сталкеров - "родительская" секция это секция [stalker]. В ней и должен быть параметр
terrain = чему то там
Просмотри весь файл m_stalker на terrain = ***. Где то он должен быть прописан. Если не найдешь его в этом файле, то проверь Тотал Коммандером всю папку configs. В каком то файле этот самый terrain прописан. Его и надо скопировать Сидоровичу, чтобы игра не вылетала.
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| sergej5500 | Дата: Чт, 16.06.2016, 17:15 | Сообщение # 1299 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| men_stalker,
denis2000 указал, что параметр terrain не в той секции. А я не обратил на это внимание. Виноват.
Ваш файл
[m_trader] GroupControlSection = spawn_group $spawn = "monsters\trader" ; option for Level Editor $prefetch = 5 cform = skeleton class = AI_TRADE_S class = AI_TRD_S visual = actors\stalker_trader\stalker_trader_1.ogf ......
Параметр
terrain = 255,255,255,255,0,1
у тебя стоит под
[barman_movement_speeds]
Это другая секция. Соответственно, в секции m_trader его нет. В результате вылет. Перемести эту строку выше. Под строку visual = actors\stalker_trader\stalker_trader_1.ogf, например.
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| men_stalker | Дата: Сб, 18.06.2016, 16:34 | Сообщение # 1300 |
 Инженер «Свободы»
Свобода
Сообщений: 184
| Доброго времени суток, после добавления ещё нескольких переменных в [m_trader] при запуске получил вылет:
[cut=лог] ..... * Creating new game... * Loading spawn registry... stack trace:
0023:6791514C MSVCR80.dll, memcpy() 0023:00A14DDC xrCore.dll, NET_Packet::r() 0023:0AB83532 xrGame.dll, CDialogHolder::CDialogHolder()[/cut] Даже не знаю в каком направлении рыть, все диалоги исправны. Остальные файлы тоже проверил, вроде всё нормально. P.s ошибка только при спавне m_trader'а.
|
| |
|
| Эти 0 пользователя(ей) поблагодарили men_stalker за это полезное сообщение: |
|
|
| sergej5500 | Дата: Сб, 18.06.2016, 20:10 | Сообщение # 1301 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Цитата men_stalker (  ) после добавления ещё нескольких переменных в [m_trader] при запуске получил вылет:
Значит, причина в этих переменных. Можно посоветовать только одно. Добавлять их по одной. Смотреть, после какой появится вылет.
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| denis2000 | Дата: Сб, 18.06.2016, 20:28 | Сообщение # 1302 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата men_stalker (  ) всё нормально
Цитата men_stalker (  ) при запуске получил вылет Вы конечно в курсе, что это противоречивые заявления? Выкладывайте правки будем анализировать.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| men_stalker | Дата: Вс, 19.06.2016, 12:44 | Сообщение # 1303 |
 Инженер «Свободы»
Свобода
Сообщений: 184
| sergej5500, вылет происходит после добавления переменной eye_range и равна она100. Если добавлять по одиночке просто жалуется на нехватку этих переменных.
denis2000, creatures: [cut=m_sidor] ;----------------------------------------------------------------------------------- ;Trader ;----------------------------------------------------------------------------------- [m_trader] GroupControlSection = spawn_group $spawn = "monsters\trader" ; option for Level Editor $prefetch = 5 cform = skeleton class = AI_TRADE_S class = AI_TRD_S visual = actors\stalker_trader\stalker_trader_1.ogf terrain = 255,255,255,255,0,1 ; ДОБАВЛЕННЫЕ ПЕРЕМЕННЫЕ eye_range = 100 ; ДОБАВЛЕННЫЕ ПЕРЕМЕННЫЕ rank = 1 script_binding = bind_trader.bind ;format section{,section},count,min_factor,max_factor, ... ;supplies = m_bread,50,0.5,1.5, CANNED,30,0.5,1.5, MEDI_KIT,7,0,0.7, DETECTOR_SIMPLE,3,0,0.6, WPN_BINOC,1,0,0.70, WPN_FORT,WPN_PM,3,0.3,0.8, WPN_LR300,WPN_AK47,2,0.3,0.65, WPN_SVD,1,0,0.53, WPN_RPG7,1,0,0.53, grenade_f1,15,0,1.0, ammo_5.45x39_ap,ammo_5.45x39_fmj,50,0,1.0, ammo_5.56x45_ap,ammo_5.56х45_ss190,50,0,1.0, ammo_9x19_fmj,50,0,1.0, ammo_7.62х54_fmj,10,0,1.0, ammo_og-7b,10,0,1.0 supplies = grenade_f1,15,0,1.0, ammo_5.45x39_ap,ammo_5.45x39_fmj,50,0,1.0, ammo_5.56x45_ap,ammo_5.56х45_ss190,50,0,1.0, ammo_9x19_fmj,50,0,1.0, ammo_7.62x54_ap,10,0,1.0, ammo_og-7b,10,0,1.0 max_item_mass = 10000.0 ;---EVALUATION FUNCTIONS---------------------------------------------- ef_creature_type = 1 ; option for evaluation functions ef_weapon_type = 1
scheduled = on ; option for ALife Simulator Human = off ; option for ALife Simulator Health = 40 ; option for ALife Simulator MinSpeed = 1.0 ; option for ALife Simulator MaxSpeed = 1.5 ; option for ALife Simulator going_speed = 1.0 ; option for ALife Simulator MaxHealthValue = 100 ; option for ALife Simulator ; ДОБАВЛЕННЫЕ ПЕРЕМЕННЫЕ smart_terrain_choose_interval = 00:15:00 ph_box0_center = 0.0, 0.9, 0.0 ph_box0_size = 0.35, 0.9, 0.35 ph_box1_center = 0.0, 0.6, 0.0 ph_box1_size = 0.40, 0.6, 0.40 ph_crash_speed_min = 8;16 ph_crash_speed_max = 16;30 ph_mass = 170. cost = 1
Health = 100.0 money = 1000000 immunities_sect = trader_immunities condition_sect = trader_condition
;attach params attachable_items =
;species of monster species = human
[trader_foot_bones] front_left = bip01_l_foot front_right = bip01_r_foot
[trader_step_manager] ;order: left, right ;-------------------------------------------------------------------------- ;animation Cycles | time1 | power1 | time2 | power2 | ;-------------------------------------------------------------------------- [barman_movement_speeds] ;barman can't crouch or run ; danger ;; crouch ;;; walk danger_crouch_walk_forward = 0.8 danger_crouch_walk_backward = 0.575 danger_crouch_walk_left = 0.8 danger_crouch_walk_right = 0.8 ;;; run danger_crouch_run_forward = 2.0 danger_crouch_run_backward = 1.1 danger_crouch_run_left = 2.0 danger_crouch_run_right = 2.0 ;; stand ;;; walk danger_stand_walk_forward = 1.2 danger_stand_walk_backward = 1.2 danger_stand_walk_left = 1.2 danger_stand_walk_right = 1.2 ;;; run danger_stand_run_forward = 5.0 danger_stand_run_backward = 1.5 danger_stand_run_left = 5.0 danger_stand_run_right = 5.0 ; free ;; stand ;;; forward free_stand_walk_forward = 0.85 free_stand_run_forward = 2.5 ; panic ;; stand ;;; run ;;;; forward panic_stand_run_forward = 6.5 [/cut]
[cut=stalkers]#include "m_stalker.ltx" #include "immunities.ltx" #include "damages.ltx" #include "m_stalker_zombied.ltx" #include "m_stalker_monolith.ltx" #include "m_sidor.ltx" [/cut]
Логика:
[cut=esc_space_restrictor_wait_trader][logic] active = sr_idle
[sr_idle] on_actor_inside = sr_idle@minus %+esc_actor_come_first%
[sr_idle@minus] on_info = {+esc_trader_hello_first_played} sr_idle@last
[sr_idle@last] on_actor_in_zone = esc_space_restrictor_wait_trader | {-esc_player_sleeps} sr_idle@timer
[sr_idle@timer] on_game_timer = 150 | sr_idle@check on_actor_not_in_zone = esc_space_restrictor_wait_trader | sr_idle@last on_info = {+esc_skip_angry} sr_idle@last %-esc_skip_angry -esc_player_sleeps%
[sr_idle@check] on_actor_in_zone = esc_space_restrictor_wait_trader | sr_idle@last %+esc_player_sleeps% [/cut]
[cut=esc_trader][logic] active = mob_trader@new_idle1 trade = misc\trade\trade_barmen_all.ltx level_spot = trader
;-------------------------- ;---First Meet------------- ;-------------------------- [mob_trader@hello_first] anim_global = hello anim_head = normal sound_phrase = trader_greet_first on_signal = animation_end | mob_trader@new_idle2
;------------------------------ ;---------Wait player---------- ;------------------------------
[mob_trader@angry_1] anim_global = desk_idle anim_head = normal sound_phrase = trader_wait on_signal = sound_phrase_end | {~25} mob_trader@new_idle1_to_idle3, {~50} mob_trader@new_idle1_to_idle5, {~75} mob_trader@new_idle1_to_idle2, mob_trader@new_idle1_to_idle1
[mob_trader@angry_2] anim_global = diagonal_idle anim_head = normal sound_phrase = trader_wait on_signal = sound_phrase_end | {~25} mob_trader@new_idle2_to_idle3, {~50} mob_trader@new_idle2_to_idle4, {~75} mob_trader@new_idle2_to_idle1, mob_trader@new_idle2_to_idle2
[mob_trader@angry_3] anim_global = chair_hack_idle anim_head = normal sound_phrase = trader_wait on_signal = sound_phrase_end | {~30} mob_trader@new_idle3_to_idle2, {~70} mob_trader@new_idle3_to_idle1, mob_trader@new_idle3_to_idle3
[mob_trader@angry_4] anim_global = compute_idle anim_head = normal sound_phrase = trader_wait on_signal = sound_phrase_end | {~40} mob_trader@new_idle4_to_idle2, mob_trader@new_idle4_to_idle4 ;---------------------------------- ;------------- Idle --------------- ;----------------------------------
;Основной idle (1) - за столом [mob_trader@new_idle1] anim_global = desk_idle on_signal = animation_end | {~25} mob_trader@new_idle1_to_idle3, {~50} mob_trader@new_idle1_to_idle5, {~75} mob_trader@new_idle1_to_idle2, mob_trader@new_idle1_to_idle1 on_info = {=talking} mob_trader@new_idle1_to_idle3 %+esc_skip_angry% on_actor_dist_le_nvis = 5 | {+esc_player_sleeps} mob_trader@angry_1 %-esc_player_sleeps% on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played -esc_actor_inside_traders_dung} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_played +esc_trader_hello_played +esc_bring_habar_complete} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_search_played +esc_trader_hello_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played%, {+esc_actor_inside_traders_dung -esc_trader_bye_search_played -esc_trader_bye_first_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played +esc_trader_bye_first_search_played%, {-esc_trader_bye_garbage_played +esc_trader_hello_return_played +esc_bring_habar_complete} mob_trader@bye_garbage %+esc_trader_bye_garbage_played% on_actor_dist_ge_nvis2 = 11 | mob_trader@new_wait
; Idle (2) - по диагонали [mob_trader@new_idle2] anim_global = diagonal_idle on_signal = animation_end | {~25} mob_trader@new_idle2_to_idle3, {~50} mob_trader@new_idle2_to_idle4, {~75} mob_trader@new_idle2_to_idle1, mob_trader@new_idle2_to_idle2 on_info = {=talking} mob_trader@new_idle2_to_idle3 %+esc_skip_angry% on_actor_dist_le_nvis = 5 | {+esc_player_sleeps} mob_trader@angry_2 %-esc_player_sleeps% on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played -esc_actor_inside_traders_dung} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_played +esc_trader_hello_played +esc_bring_habar_complete} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_search_played +esc_trader_hello_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played%, {+esc_actor_inside_traders_dung -esc_trader_bye_search_played -esc_trader_bye_first_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played +esc_trader_bye_first_search_played%, {-esc_trader_bye_garbage_played +esc_trader_hello_return_played +esc_bring_habar_complete} mob_trader@bye_garbage %+esc_trader_bye_garbage_played% on_actor_dist_ge_nvis2 = 11 | mob_trader@new_wait
; Idle (3) - откинувшись на спинку [mob_trader@new_idle3] anim_global = chair_hack_idle on_signal = animation_end | {~30} mob_trader@new_idle3_to_idle2, {~70} mob_trader@new_idle3_to_idle1, mob_trader@new_idle3_to_idle3 on_info = {=talking} mob_trader@new_talking %+esc_skip_angry% on_actor_dist_le_nvis = 5 | {+esc_player_sleeps} mob_trader@angry_3 %-esc_player_sleeps% on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played -esc_actor_inside_traders_dung} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_played +esc_trader_hello_played +esc_bring_habar_complete} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_search_played +esc_trader_hello_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played%, {+esc_actor_inside_traders_dung -esc_trader_bye_search_played -esc_trader_bye_first_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played +esc_trader_bye_first_search_played%, {-esc_trader_bye_garbage_played +esc_trader_hello_return_played +esc_bring_habar_complete} mob_trader@bye_garbage %+esc_trader_bye_garbage_played% on_actor_dist_ge_nvis2 = 11 | mob_trader@new_wait
; Idle (4) - за компьютером [mob_trader@new_idle4] anim_global = compute_idle on_signal = animation_end | {~40} mob_trader@new_idle4_to_idle2, mob_trader@new_idle4_to_idle4 on_info = {=talking} mob_trader@new_idle4_to_idle2 %+esc_skip_angry% on_actor_dist_le_nvis = 5 | {+esc_player_sleeps} mob_trader@angry_4 %-esc_player_sleeps% on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played -esc_actor_inside_traders_dung} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_played +esc_trader_hello_played +esc_bring_habar_complete} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_search_played +esc_trader_hello_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played%, {+esc_actor_inside_traders_dung -esc_trader_bye_search_played -esc_trader_bye_first_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played +esc_trader_bye_first_search_played%, {-esc_trader_bye_garbage_played +esc_trader_hello_return_played +esc_bring_habar_complete} mob_trader@bye_garbage %+esc_trader_bye_garbage_played% on_actor_dist_ge_nvis2 = 11 | mob_trader@new_wait
; Idle (5) - читает [mob_trader@new_idle5] anim_global = listen_idle on_signal = animation_end | {~45} mob_trader@new_idle5_to_idle1, mob_trader@new_idle5_to_idle5 on_info = {=talking} mob_trader@new_idle5_to_idle1 %+esc_skip_angry% on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played -esc_actor_inside_traders_dung} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_played +esc_trader_hello_played +esc_bring_habar_complete} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_search_played +esc_trader_hello_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played%, {+esc_actor_inside_traders_dung -esc_trader_bye_search_played -esc_trader_bye_first_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played +esc_trader_bye_first_search_played%, {-esc_trader_bye_garbage_played +esc_trader_hello_return_played +esc_bring_habar_complete} mob_trader@bye_garbage %+esc_trader_bye_garbage_played% on_actor_dist_ge_nvis2 = 11 | mob_trader@new_wait
;---------------------------------- ;-------- Автопереходы -------- ;----------------------------------
; Стол - стол (промежуточная) [mob_trader@new_idle1_to_idle1] anim_global = desk_idle on_signal = animation_end| mob_trader@new_idle1 on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played -esc_actor_inside_traders_dung} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_played +esc_trader_hello_played +esc_bring_habar_complete} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_search_played +esc_trader_hello_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played%, {+esc_actor_inside_traders_dung -esc_trader_bye_search_played -esc_trader_bye_first_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played +esc_trader_bye_first_search_played%, {-esc_trader_bye_garbage_played +esc_trader_hello_return_played +esc_bring_habar_complete} mob_trader@bye_garbage %+esc_trader_bye_garbage_played% on_actor_dist_ge_nvis2 = 11 | mob_trader@new_wait
; Диагональ - диагональ (промежуточная) [mob_trader@new_idle2_to_idle2] anim_global = diagonal_idle on_signal = animation_end | mob_trader@new_idle2 on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played -esc_actor_inside_traders_dung} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_played +esc_trader_hello_played +esc_bring_habar_complete} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_search_played +esc_trader_hello_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played%, {+esc_actor_inside_traders_dung -esc_trader_bye_search_played -esc_trader_bye_first_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played +esc_trader_bye_first_search_played%, {-esc_trader_bye_garbage_played +esc_trader_hello_return_played +esc_bring_habar_complete} mob_trader@bye_garbage %+esc_trader_bye_garbage_played% on_actor_dist_ge_nvis2 = 11 | mob_trader@new_wait
; Спинка - спинка (промежуточная) [mob_trader@new_idle3_to_idle3] anim_global = chair_hack_idle on_signal = animation_end | mob_trader@new_idle3 on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played -esc_actor_inside_traders_dung} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_played +esc_trader_hello_played +esc_bring_habar_complete} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_search_played +esc_trader_hello_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played%, {+esc_actor_inside_traders_dung -esc_trader_bye_search_played -esc_trader_bye_first_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played +esc_trader_bye_first_search_played%, {-esc_trader_bye_garbage_played +esc_trader_hello_return_played +esc_bring_habar_complete} mob_trader@bye_garbage %+esc_trader_bye_garbage_played% on_actor_dist_ge_nvis2 = 11 | mob_trader@new_wait
; Компьютер - компьютер (промежуточная) [mob_trader@new_idle4_to_idle4] anim_global = compute_idle on_signal = animation_end | mob_trader@new_idle4 on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played -esc_actor_inside_traders_dung} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_played +esc_trader_hello_played +esc_bring_habar_complete} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_search_played +esc_trader_hello_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played%, {+esc_actor_inside_traders_dung -esc_trader_bye_search_played -esc_trader_bye_first_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played +esc_trader_bye_first_search_played%, {-esc_trader_bye_garbage_played +esc_trader_hello_return_played +esc_bring_habar_complete} mob_trader@bye_garbage %+esc_trader_bye_garbage_played% on_actor_dist_ge_nvis2 = 11 | mob_trader@new_wait
; Читает - читает (промежуточная) [mob_trader@new_idle5_to_idle5] anim_global = listen_idle on_signal = animation_end | mob_trader@new_idle5 on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played -esc_actor_inside_traders_dung} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_played +esc_trader_hello_played +esc_bring_habar_complete} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_search_played +esc_trader_hello_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played%, {+esc_actor_inside_traders_dung -esc_trader_bye_search_played -esc_trader_bye_first_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played +esc_trader_bye_first_search_played%, {-esc_trader_bye_garbage_played +esc_trader_hello_return_played +esc_bring_habar_complete} mob_trader@bye_garbage %+esc_trader_bye_garbage_played% on_actor_dist_ge_nvis2 = 11 | mob_trader@new_wait
;---------------------------------- ;----- Переходы между idle-ми ---- ;----------------------------------
; Диагональ - компьютер [mob_trader@new_idle2_to_idle4] anim_global = diagonal_to_compute on_signal = animation_end | mob_trader@new_idle4 on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played -esc_actor_inside_traders_dung} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_played +esc_trader_hello_played +esc_bring_habar_complete} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_search_played +esc_trader_hello_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played%, {+esc_actor_inside_traders_dung -esc_trader_bye_search_played -esc_trader_bye_first_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played +esc_trader_bye_first_search_played%, {-esc_trader_bye_garbage_played +esc_trader_hello_return_played +esc_bring_habar_complete} mob_trader@bye_garbage %+esc_trader_bye_garbage_played% on_actor_dist_ge_nvis2 = 11 | mob_trader@new_wait
; Компьютер - диагональ [mob_trader@new_idle4_to_idle2] anim_global = compute_idle_to_diagonal on_signal = animation_end| mob_trader@new_idle2 ;on_info = {+esc_player_sleeps} mob_trader@angry %-esc_player_sleeps% on_actor_dist_le_nvis = 5 | {+esc_player_sleeps} mob_trader@angry_2 %-esc_player_sleeps% on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played -esc_actor_inside_traders_dung} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_played +esc_trader_hello_played +esc_bring_habar_complete} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_search_played +esc_trader_hello_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played%, {+esc_actor_inside_traders_dung -esc_trader_bye_search_played -esc_trader_bye_first_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played +esc_trader_bye_first_search_played%, {-esc_trader_bye_garbage_played +esc_trader_hello_return_played +esc_bring_habar_complete} mob_trader@bye_garbage %+esc_trader_bye_garbage_played% on_actor_dist_ge_nvis2 = 11 | mob_trader@new_wait
; Диагональ - спинка [mob_trader@new_idle2_to_idle3] anim_global = diagonal_to_chair_hack on_signal = animation_end| {=talking} mob_trader@new_talking %+esc_skip_angry%, mob_trader@new_idle3 on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played -esc_actor_inside_traders_dung} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_played +esc_trader_hello_played +esc_bring_habar_complete} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_search_played +esc_trader_hello_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played%, {+esc_actor_inside_traders_dung -esc_trader_bye_search_played -esc_trader_bye_first_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played +esc_trader_bye_first_search_played%, {-esc_trader_bye_garbage_played +esc_trader_hello_return_played +esc_bring_habar_complete} mob_trader@bye_garbage %+esc_trader_bye_garbage_played% on_actor_dist_ge_nvis2 = 11 | mob_trader@new_wait
; Спинка - диагональ [mob_trader@new_idle3_to_idle2] anim_global = chair_hack_to_diagonal on_signal = animation_end| mob_trader@new_idle2 on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played -esc_actor_inside_traders_dung} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_played +esc_trader_hello_played +esc_bring_habar_complete} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_search_played +esc_trader_hello_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played%, {+esc_actor_inside_traders_dung -esc_trader_bye_search_played -esc_trader_bye_first_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played +esc_trader_bye_first_search_played%, {-esc_trader_bye_garbage_played +esc_trader_hello_return_played +esc_bring_habar_complete} mob_trader@bye_garbage %+esc_trader_bye_garbage_played% on_actor_dist_ge_nvis2 = 11 | mob_trader@new_wait
; Стол - спинка [mob_trader@new_idle1_to_idle3] anim_global = desk_to_chair_hack on_signal = animation_end|{=talking} mob_trader@new_talking %+esc_skip_angry%, mob_trader@new_idle3 on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played -esc_actor_inside_traders_dung} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_played +esc_trader_hello_played +esc_bring_habar_complete} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_search_played +esc_trader_hello_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played%, {+esc_actor_inside_traders_dung -esc_trader_bye_search_played -esc_trader_bye_first_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played +esc_trader_bye_first_search_played%, {-esc_trader_bye_garbage_played +esc_trader_hello_return_played +esc_bring_habar_complete} mob_trader@bye_garbage %+esc_trader_bye_garbage_played% on_actor_dist_ge_nvis2 = 11 | mob_trader@new_wait
; Спинка - стол [mob_trader@new_idle3_to_idle1] anim_global = chair_hack_to_desk on_signal = animation_end| mob_trader@new_idle1 on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played -esc_actor_inside_traders_dung} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_played +esc_trader_hello_played +esc_bring_habar_complete} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_search_played +esc_trader_hello_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played%, {+esc_actor_inside_traders_dung -esc_trader_bye_search_played -esc_trader_bye_first_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played +esc_trader_bye_first_search_played%, {-esc_trader_bye_garbage_played +esc_trader_hello_return_played +esc_bring_habar_complete} mob_trader@bye_garbage %+esc_trader_bye_garbage_played% on_actor_dist_ge_nvis2 = 11 | mob_trader@new_wait
; Стол - диагональ [mob_trader@new_idle1_to_idle2] anim_global = desk_to_diagonal on_signal = animation_end| mob_trader@new_idle2 on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played -esc_actor_inside_traders_dung} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_played +esc_trader_hello_played +esc_bring_habar_complete} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_search_played +esc_trader_hello_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played%, {+esc_actor_inside_traders_dung -esc_trader_bye_search_played -esc_trader_bye_first_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played +esc_trader_bye_first_search_played%, {-esc_trader_bye_garbage_played +esc_trader_hello_return_played +esc_bring_habar_complete} mob_trader@bye_garbage %+esc_trader_bye_garbage_played% on_actor_dist_ge_nvis2 = 11 | mob_trader@new_wait
; Диагональ - стол [mob_trader@new_idle2_to_idle1] anim_global = diagonal_to_desk on_signal = animation_end| mob_trader@new_idle1 on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played -esc_actor_inside_traders_dung} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_played +esc_trader_hello_played +esc_bring_habar_complete} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_search_played +esc_trader_hello_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played%, {+esc_actor_inside_traders_dung -esc_trader_bye_search_played -esc_trader_bye_first_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played +esc_trader_bye_first_search_played%, {-esc_trader_bye_garbage_played +esc_trader_hello_return_played +esc_bring_habar_complete} mob_trader@bye_garbage %+esc_trader_bye_garbage_played% on_actor_dist_ge_nvis2 = 11 | mob_trader@new_wait
; Стол - читает [mob_trader@new_idle1_to_idle5] anim_global = desk_to_listen on_signal = animation_end| mob_trader@new_idle5 on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played -esc_actor_inside_traders_dung} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_played +esc_trader_hello_played +esc_bring_habar_complete} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_search_played +esc_trader_hello_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played%, {+esc_actor_inside_traders_dung -esc_trader_bye_search_played -esc_trader_bye_first_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played +esc_trader_bye_first_search_played%, {-esc_trader_bye_garbage_played +esc_trader_hello_return_played +esc_bring_habar_complete} mob_trader@bye_garbage %+esc_trader_bye_garbage_played% on_actor_dist_ge_nvis2 = 11 | mob_trader@new_wait
; Читает - стол [mob_trader@new_idle5_to_idle1] anim_global = listen_to_desk on_signal = animation_end| mob_trader@new_idle1 on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played -esc_actor_inside_traders_dung} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_played +esc_trader_hello_played +esc_bring_habar_complete} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_search_played +esc_trader_hello_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played%, {+esc_actor_inside_traders_dung -esc_trader_bye_search_played -esc_trader_bye_first_search_played -esc_take_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played +esc_trader_bye_first_search_played%, {-esc_trader_bye_garbage_played +esc_trader_hello_return_played +esc_bring_habar_complete} mob_trader@bye_garbage %+esc_trader_bye_garbage_played% on_actor_dist_ge_nvis2 = 11 | mob_trader@new_wait
;-------------------------------------- ;------------- Разговор --------------- ;--------------------------------------
[mob_trader@new_talking] anim_global = chair_hack_talk anim_head = normal on_info = {!talking} mob_trader@new_idle3 %+esc_skip_angry%
;-------------------------------------- ;------------ Торговля ---------------- ;--------------------------------------
[mob_trade@new] anim_global = chair_hack_idle on_info = {=trading =trade_exchanged} mob_trader@new_trade_exchanged on_info2 = {!trading =trade_exchanged} mob_trader@new_trade_good on_info3 = {!trading !trade_exchanged} mob_trader@new_trade_bad
[mob_trader@new_trade_bad] anim_global = diagonal_talk anim_global = chair_hack_idle anim_head = angry ;sound_phrase = trader_bad_trade on_signal = sound_phrase_end | mob_trader@new_idle2 on_actor_dist_ge_nvis = 11 | mob_trader@new_wait
[mob_trader@new_trade_exchanged] anim_global = diagonal_talk anim_global = chair_hack_idle anim_head = normal ;sound_phrase = trader_exchanged on_signal = sound_phrase_end | mob_trader@new_idle2 on_actor_dist_ge_nvis = 11 | mob_trader@new_wait
[mob_trader@new_trade_good] anim_global = diagonal_talk anim_global = chair_hack_idle anim_head = good ;sound_phrase = trader_good_trade on_signal = sound_phrase_end | mob_trader@new_idle2 on_actor_dist_ge_nvis = 11 | mob_trader@new_wait
;------------------------------------- ;---------- Приветствия -------------- ;-------------------------------------
[mob_trader@new_hello] anim_global = hello anim_head = normal sound_phrase = trader_hello_what_have_you_got on_signal = animation_end | mob_trader@new_idle2
[mob_trader@hello_search] anim_global = hello anim_head = normal sound_phrase = trader_wait_habar_greet on_signal = animation_end | mob_trader@new_idle2
[mob_trader@hello_return] anim_global = hello anim_head = normal sound_phrase = trader_greet_habar on_signal = animation_end | mob_trader@new_idle2
[mob_trader@new_bye] on_actor_dist_ge_nvis = 11| mob_trader@new_wait anim_global = hello anim_head = normal ;sound_phrase = trader_bye on_signal = animation_end | mob_trader@new_idle2
[mob_trader@bye_search] on_actor_dist_ge_nvis = 11 | mob_trader@new_idle2 anim_global = hello anim_head = normal sound_phrase = trader_wait_habar_bye on_signal = animation_end | mob_trader@new_idle1
[mob_trader@bye_garbage] on_actor_dist_ge_nvis = 11 | mob_trader@new_wait anim_global = hello anim_head = normal sound_phrase = trader_bye_garbage on_signal = animation_end | mob_trader@new_idle2
[mob_trader@new_wait] anim_global = diagonal_idle_short on_actor_dist_le_nvis = 3 | {-esc_trader_hello_played +esc_actor_inside_traders_dung +esc_bring_habar_complete +esc_trader_hello_first_played} mob_trader@new_hello %+esc_trader_hello_played%, {-esc_trader_hello_played -esc_actor_inside_traders_dung -esc_take_habar_complete +esc_trader_hello_first_played} mob_trader@new_hello %+esc_trader_hello_played%, {-esc_trader_hello_first_played +esc_actor_come_first} mob_trader@hello_first %+esc_trader_hello_first_played +esc_trader_hello_played%, {-esc_trader_hello_search_played +esc_actor_inside_traders_dung +esc_trader_hello_first_played -esc_take_habar_complete} mob_trader@hello_search %+esc_trader_hello_search_played%, {-esc_trader_hello_return_played +esc_take_habar_complete} mob_trader@hello_return %+esc_trader_hello_return_played% on_actor_dist_ge_nvis = 7 | {-esc_trader_bye_played +esc_trader_hello_played +esc_actor_inside_traders_dung +esc_bring_habar_complete +esc_trader_hello_first_played} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_played +esc_trader_hello_played -esc_actor_inside_traders_dung -esc_take_habar_complete +esc_trader_hello_first_played} mob_trader@new_bye %+esc_trader_bye_played%, {-esc_trader_bye_search_played +esc_trader_hello_search_played +esc_trader_hello_first_played +esc_actor_inside_traders_dung -esc_bring_habar_complete} mob_trader@bye_search %+esc_trader_bye_search_played%, {-esc_trader_bye_garbage_played +esc_trader_hello_return_played +esc_bring_habar_complete} mob_trader@bye_garbage %+esc_trader_bye_garbage_played% on_actor_dist_ge_nvis2 = 11 | %-esc_trader_hello_played -esc_trader_bye_played -esc_trader_hello_search_played -esc_trader_bye_search_played% [/cut]Добавлено (19.06.2016, 12:44) --------------------------------------------- all.spawn:
[cut=alife_escape][215]
; cse_abstract properties section_name = m_trader name = esc_m_trader position = -246.400009155273, -24.7744331359863, -134.399993896484 direction = -0.0576599985361099, 1.72324705123901, 0.00393099989742041 id = 65535 version = 124 script_version = 8 spawn_id = 395
; cse_alife_object properties game_vertex_id = 3 level_vertex_id = 14374 object_flags = 0xffffff3f custom_data = <<END [logic] cfg = scripts\escape\esc_trader.ltx END story_id = 410
; cse_visual properties visual_name = actors\stalker_trader\stalker_trader_1
; cse_alife_trader_abstract properties money = 1000000 trader_flags = 0 character_profile = esc_sidor_trader
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[308]
; cse_abstract properties section_name = space_restrictor name = esc_space_restrictor_wait_trader position position = -246.880004882813, -24.8099994659424, -134.589996337891 direction = -0.0034178423229605, 5.05854368384462e-005, 0.0147993508726358 id = 65535 version = 128 script_version = 12 spawn_id = 307
; cse_alife_object properties game_vertex_id = 0 level_vertex_id = 97812 object_flags = 0xffffff3e custom_data = <<END [story_object] story_id = esc_space_restrictor_wait_trader [logic] cfg = scripts\escape\esc_space_restrictor_wait_trader.ltx END
; cse_shape properties shapes = 1 shape_0:type = sphere shape_0:offset = 0,0,0 shape_0:radius = 1
; cse_alife_space_restrictor properties restrictor_type = 3[/cut]
gameplay:
[cut=character_desc_escape]<specific_character id="esc_sidor_trader" team_default = "1"> <name>esc_c2_wolf</name> <icon>ui_inGame2_wolf</icon> <map_icon x="1" y="0"></map_icon> <bio>ќпытный сталкер. ƒетальна¤ информаци¤ отсутствует.</bio>
<class>esc_sidor_trader</class> <community>stalker</community> <terrain_sect>stalker_terrain</terrain_sect> <snd_config>characters_voice\human_03\stalker\</snd_config>
<rank>60</rank> <reputation>300</reputation> <money min="500000" max="500000" infinitive="1" /> <visual>actors\stalker_trader\stalker_trader_1</visual> <supplies>
[spawn] \n </supplies> #include "gameplay\character_criticals_4.xml" <start_dialog>esc_sidor_start_dialog</start_dialog> <actor_dialog>actor_break_dialog</actor_dialog> </specific_character> [/cut]
[cut=npc_profile]<character id="esc_sidor_trader"> <class>esc_sidor_trader</class> <specific_character>esc_sidor_trader</specific_character> </character>[/cut]
[cut=dialogs_escape]<dialog id="esc_sidor_start_dialog"> <phrase_list> <phrase id="0"> <text>esc_sidor_start_dialog</text> </phrase> </phrase_list> </dialog>[/cut]
В info_escape не придумал ничего лучше чем временно перенести этот файл из чн и добавить свои инфопоршни.
scripts: свои правки не вносил, но всё таки
[cut=mob_trader]-- mob_trader global_animations = { desk_idle = {"idle","idle_1","palci","zatylok"}, desk_talk = {"idle"}, desk_to_chair_hack = {"idle_spinka"}, desk_to_listen = {"idle_chitaet"}, desk_to_diagonal = {"perehod_0"}, chair_hack_idle = {"idle_2","idle_2_def_0"}, chair_hack_talk = {"idle_2_talk_0","idle_2_talk_1","idle_2_talk_2","idle_2_talk_3"}, chair_hack_to_diagonal = {"idle_2_to_idle_0"}, chair_hack_to_desk = {"spinka_idle"}, compute_idle = {"idle_1_spec_think_0","idle_1_spec_think_1"}, compute_idle_to_diagonal = {"idle_1_to_idle_0"}, diagonal_idle = {"idle_0_def_0","idle_0_spec_click_0","idle_0_spec_scratch_0"}, diagonal_idle_short = {"idle_0_def_0"}, diagonal_talk = {"idle_0_talk_0","idle_0_talk_1","idle_0_talk_2","idle_0_talk_3"}, diagonal_to_chair_hack = {"idle_0_to_idle_2"}, diagonal_to_compute = {"idle_0_to_idle_1"}, diagonal_to_desk = {"perehod_1"}, first_phrase = {"vstuplenie"}, listen_idle = {"chitaet"}, listen_to_desk = {"chitaet_idle"}, hello = {"hello"}, forester_sit = {"sit"}, forester_beard = {"beard_in","beard","beard_out"}, forester_reaction = {"reaction_in","reaction","reaction_out"}, forester_see = {"see_in","see","see_out"}, forester_talk_1 = {"sit_talk_1_in","sit_talk_1","sit_talk_1_out"}, forester_talk_2 = {"sit_talk_2_in","sit_talk_2","sit_talk_2_out"}, forester_talk_3 = {"sit_talk_3_in","sit_talk_3","sit_talk_3_out"}
} head_animations = { forester_talk_1 = {"sit_talk_1_in","sit_talk_1","sit_talk_1_out"}, forester_talk_2 = {"sit_talk_2_in","sit_talk_2","sit_talk_2_out"}, forester_talk_3 = {"sit_talk_3_in","sit_talk_3","sit_talk_3_out"}, forester_reaction = {"reaction_in","reaction","reaction_out"}, normal = {"talk_0","talk_1","talk_4"}, angry = {"talk_3","talk_2","talk_1"}, good = {"talk_glad_0"}, first_phrase = {"vstuplenie_head"} } function on_start_tutorial_item_1() if db.trader == nil then return end db.trader:external_sound_start("characters_voice\\scenario\\trader\\trader_tutorial_pda_12") end function on_stop_tutorial_item() if db.trader == nil then return end db.trader:external_sound_stop() end class "mob_trader" function mob_trader:__init(obj, storage) self.object = obj self.st = storage end function mob_trader:reset_scheme() trader_obj = self.object self.st.signals = {} self.object:set_callback(callback.trader_global_anim_request, self.on_global_anim_request, self ) self.object:set_callback(callback.trader_head_anim_request, self.on_head_anim_request, self ) self.object:set_callback(callback.trader_sound_end, self.on_sound_end, self ) self.object:set_callback(callback.use_object, self.use_callback, self) -- start global animation self.object:set_trader_global_anim(self:select_global_animation()) -- start sound and head animation if (self.st.sound_phrase) then local snd = mob_sound.pick_sound_from_set(self.object, self.st.sound_phrase, {}) self.object:set_trader_sound(snd, self:select_head_animation()); end if self.st.anim_head == nil then self.st.anim_head = "normal" end db.trader = self.object end function mob_trader:use_callback() -- dialog_manager.restore_npc_disabled_phrases(self.object:id()) end function mob_trader:update(delta) if xr_logic.try_switch_to_another_section(self.object, self.st, db.actor) then return end end function mob_trader:select_global_animation() local anim_set = global_animations[self.st.anim_global] local r = math.random(1, #anim_set) return anim_set[r] end function mob_trader:select_head_animation() -- random select local anim_set = head_animations[self.st.anim_head] local r = math.random(1, #anim_set) return anim_set[r] end function mob_trader:on_global_anim_request() self.st.signals["animation_end"] = true if (not self.st.play_once) then self.object:set_trader_global_anim(self:select_global_animation()) end end function mob_trader:on_head_anim_request() if self.st.anim_head == nil then return end self.object:set_trader_head_anim(self:select_head_animation()); end function mob_trader:on_sound_end() self.st.signals["sound_phrase_end"] = true end function mob_trader:deactivate() self.object:set_callback(callback.trader_global_anim_request, nil ) self.object:set_callback(callback.trader_head_anim_request, nil ) self.object:set_callback(callback.trader_sound_end, nil ) self.object:set_callback(callback.use_object, nil ) self.st.signals = {} db.trader = nil end function add_to_binder(npc, ini, scheme, section, storage) printf("DEBUG: add_to_binder: npc:name()='%s', scheme='%s', section='%s'", npc:name(), scheme, section) local new_action = mob_trader(npc, storage) -- Зарегистрировать все actions, в которых должен быть вызван метод reset_scheme при изменении настроек схемы: xr_logic.subscribe_action_for_events(npc, storage, new_action) end function set_scheme(npc, ini, scheme, section, gulag_name) local st = xr_logic.assign_storage_and_bind(npc, ini, scheme, section) st.logic = xr_logic.cfg_get_switch_conditions(ini, section, npc) st.anim_global = utils.cfg_get_string(ini, section, "anim_global", npc, true, "") st.can_talk = utils.cfg_get_bool(ini, section, "can_talk", npc, false, true) st.tip_text = utils.cfg_get_string(ini, section, "tip_text", npc, false, "", "character_use") if st.tip_text == nil then st.tip_text = "" end npc:set_tip_text(st.tip_text) if (ini:line_exist( section, "sound_phrase")) then st.anim_head = utils.cfg_get_string(ini, section, "anim_head", npc, false, "") st.sound_phrase = utils.cfg_get_string(ini, section, "sound_phrase", npc, false, "") else st.anim_head = nil st.sound_phrase = nil end
--' check if play once animation st.play_once = false if (ini:line_exist( section, "on_signal")) then local str = utils.cfg_get_string(ini, section, "on_signal", npc, false, "") local par = utils.parse_params(str) if par[1] == "animation_end" then st.play_once = true end end if st.can_talk == true then npc:enable_talk() else npc:disable_talk() end end[/cut]
[cut=bind_trader]-- Sidor etc binding function bind(obj) local new_binder = trader_object_binder(obj) obj:bind_object(new_binder) end class "trader_object_binder" (object_binder) function trader_object_binder:__init(obj) super(obj) self.loaded = false end
function trader_object_binder:reload(section) object_binder.reload(self, section) end function trader_object_binder:reinit() object_binder.reinit(self) db.storage[self.object:id()] = { } self.st = db.storage[self.object:id()] end function trader_object_binder:update(delta) object_binder.update(self, delta) -- јпдейт торговли if self.object:clsid() == clsid.script_trader then trade_manager.update(self.object) end local st = db.storage[self.object:id()] if st ~= nil and st.active_scheme ~= nil then xr_logic.try_switch_to_another_section(self.object, st[st.active_scheme], db.actor) end if self.st.active_section ~= nil then xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "update", delta) end end function trader_object_binder:net_spawn(sobject) if not object_binder.net_spawn(self, sobject) then return false end local on_offline_condlist = db.storage[self.object:id()] and db.storage[self.object:id()].overrides and db.storage[self.object:id()].overrides.on_offline_condlist if on_offline_condlist ~= nil then xr_logic.pick_section_from_condlist(db.actor, self.object, on_offline_condlist) end if not self.object:alive() then return true end if alife():object(self.object:id()) == nil then return false end db.add_obj(self.object) if self.object:clsid() == clsid.script_trader then self.object:set_trader_global_anim("idle_spinka") smart_terrain.setup_gulag_and_logic_on_spawn( self.object, self.st, sobject, modules.stype_trader, self.loaded) end return true end function trader_object_binder:net_destroy() xr_sound.stop_sounds_by_id(self.object:id()) local st = db.storage[self.object:id()] if st and st.active_scheme then xr_logic.issue_event(self.object, st[st.active_scheme], "net_destroy") end if db.offline_objects[self.object:id()] then db.offline_objects[self.object:id()].level_vertex_id = self.object:level_vertex_id() db.offline_objects[self.object:id()].active_section = db.storage[self.object:id()].active_section end db.del_obj(self.object) db.storage[self.object:id()] = nil object_binder.net_destroy(self) end function trader_object_binder:net_save_relevant() return true end function trader_object_binder:save(packet) set_save_marker(packet, "save", false, "trader_object_binder") object_binder.save(self, packet) xr_logic.save_obj(self.object, packet) if self.object:clsid() == clsid.script_trader then trade_manager.save(self.object, packet) end set_save_marker(packet, "save", true, "trader_object_binder") end function trader_object_binder:load(reader) self.loaded = true set_save_marker(reader, "load", false, "trader_object_binder") object_binder.load(self, reader) xr_logic.load_obj(self.object, reader) if self.object:clsid() == clsid.script_trader then trade_manager.load(self.object, reader) end set_save_marker(reader, "load", true, "trader_object_binder") end[/cut]
Сообщение отредактировал men_stalker - Вс, 19.06.2016, 12:44 |
| |
|
| Эти 0 пользователя(ей) поблагодарили men_stalker за это полезное сообщение: |
|
|
| denis2000 | Дата: Вс, 19.06.2016, 19:39 | Сообщение # 1304 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Поясните вот эту странную конструкцию:
Цитата men_stalker (  ) $prefetch = 5 cform = skeleton class = AI_TRADE_S class = AI_TRD_S Переменные не идут каждая в своей строке?
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| men_stalker | Дата: Пн, 20.06.2016, 11:06 | Сообщение # 1305 |
 Инженер «Свободы»
Свобода
Сообщений: 184
| denis2000, спасибо за помощь сам не заметил. Всё встало на круги своя, снова жалуется на переменные:D Добавлено (20.06.2016, 11:06) --------------------------------------------- Здравствуйте, у меня возникла проблема уже поднимаемая на этом форуме, но решения я не нашёл. Сидорович просто напросто ужасно перекручен и смещён по моим предположениям к блежайшей границе ai-сетки. Могут ли на это анимации влиять? Нужно ли их как-то переносить в зп (или они, как и модель, есть в оригинале?). И похоже он не видит логику(нету метки торговца и при торговле ничего нету, при попытке что либо продать - вылет)
Сообщение отредактировал men_stalker - Пн, 20.06.2016, 08:25 |
| |
|
| Эти 0 пользователя(ей) поблагодарили men_stalker за это полезное сообщение: |
|
|
|