Восстанавливаем Сидоровича в ЗП — S.T.A.L.K.E.R. Inside Wiki

Восстанавливаем Сидоровича в ЗП

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск

Итак, допустим, вы делаете мод на ЗП, и вам нужно восстановить Сидоровича со всеми его анимациями и фразами. В этой статье я расскажу и опишу этот процесс. 1. Для начала откроем папку creatures и создадим там файл с расширение ltx Назовем его, скажем, 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 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

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

Это мы создали спавн секцию торговца. Еще нужно в stalkers.ltx, который находится в той же папке, добавить инклуд

  1. include "m_sidor.ltx"

2. В спавн секции указан биндер bind_trader Нужно его создать. В папке создаем файл с расширением script и называем его 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

3. В той же папке scripts создадим файл mob_trader.script и в него пишем


-- 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

4. Создаем профиль торговцу (подробно на этом останавливаться не буду) В character_desc_ пишем <specific_character id="esc_sidor_trader" team_default="1"> <name>Сидорович</name> <icon>ui_inGame2_Sidor</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_02\stalker\</snd_config> <rank>65</rank> <reputation>0</reputation> <money min="500000" max="500000" infinitive="1" />

   <visual>actors\stalker_trader\stalker_trader_1</visual>

<supplies>

     	[spawn] \n
   </supplies>
  1. include "gameplay\character_criticals_4.xml"
               <start_dialog>esc_sidor_start_dialog</start_dialog>

<actor_dialog>actor_break_dialog</actor_dialog> </specific_character>

В npc_profile

   <character id="esc_sidor_trader">
       <class>esc_sidor_trader</class>
   <specific_character>esc_sidor_trader</specific_character>
   </character>

Еще нужно прописать Сидору стартовый диалог

   <dialog id="esc_sidor_start_dialog">
       <phrase_list>
           <phrase id="0">
esc_sidor_start_dialog_text
           </phrase>
       </phrase_list>
   </dialog>

5. Далее нужно заспавнить Сидора. Это можно сделать через Perl, редактирую all.spawn, либо через СДК, что намного удобнне. Если вы решили делать через Perl, то вставляем в alife_ это (координаты спавна Сидоровича на Кордоне ЧН; вертексы меняйте на свои) [482]

cse_abstract properties

section_name = m_trader name = esc_m_trader position = -244.299667358398,-24.803882598877,-133.839172363281 direction = -0.000105999999505002,1.46652603149414,0.000314000004436821

cse_alife_object properties

game_vertex_id = 168 distance = 0 level_vertex_id = 132406 object_flags = 0xffffff3f custom_data = <<END [logic] cfg = scripts\escape\esc_sidor_trader.ltx END

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 cse_alife_trader_abstract__unk1_u8 = 1

Еще надо сделать рестриктор esc_space_restrictor_wait_trader, вот координаты [481]

cse_abstract properties

section_name = space_restrictor name = esc_space_restrictor_wait_trader position = -246.889709472656,-24.8104095458984,-134.595703125 direction = 1.59999999596039e-005,0,-0.00445500016212463

cse_alife_object properties

game_vertex_id = 168 distance = 0 level_vertex_id = 132406 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 = shape0 shape0:type = box shape0:axis_x = 2.68119788169861,0,0 shape0:axis_y = 0,7.55560111999512,0 shape0:axis_z = 0,0,4.42359781265259 shape0:offset = 0,0,0

cse_alife_space_restrictor properties

restrictor_type = 3

Нужно прописать логику рестриктора. В папке scripts\escape создаем файл esc_space_restrictor_wait_trader.ltx и в него пишем

[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%

Не забываем про логику Сидора, которую указали. Создаем там же файл esc_sidor_trader.ltx и в него вставляем

[logic] active = mob_trader@new_idle1 trade = misc\trade\trade_sidor.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%

Не забудьте создать файл торговли Сидора trade_sidor, который указали в логике, иначе вылет. Вот и все. Сидор должен занять свое место и все должно работать. P.S. Все скрипты и логику Сидора можно взять и в ЧН. Удачи в моддинге. Автор: !SkIF!

Другие места
LANGUAGE