|
Статус: |
 |
Новичок: |
 |
Сообщений: |
268 |
Награды: |
0 |
Регистрация: |
01.07.2012 |
|
Люди понимающие в скриптах помогите!!! И так есть схема телохранителей Quote local medkit_status=false local launch_medkit=false ------------------------------------ ----------/Общие функции/----------- ------------------------------------ function check_bodyguards(npc) local get_bodyguards = npc:profile_name()=="actor_bodyguard_soldier1" --npc:profile_name()=="actor_bodyguard_soldier2" or --npc:profile_name()=="esc_dark_stalker_3" if get_bodyguards then return true end return false end ------------------------------------ ------------/Условие/--------------- ------------------------------------ class "evaluator_defender" (property_evaluator) function evaluator_defender:__init(name, storage) super (nil, name) self.st = storage end function evaluator_defender:evaluate() local get_npc=self.object local get_enemy=self.object:best_enemy() if distance_between_safe(db.actor,npc)>10 and check_bodyguards(get_npc)==true then return true end return false end
class "evaluator_medical" (property_evaluator) function evaluator_medical:__init(name, storage) super (nil, name) self.st = storage end function evaluator_medical:evaluate() local get_npc=self.object if db.actor~=nil and db.actor.health<0.40 and medkit_status==false then return true end if db.actor~=nil and db.actor.health<0.40 and medkit_status==true then return false end if db.actor~=nil and db.actor.health>=0.40 then return false end end
------------------------------------ ------------/Действие/-------------- ------------------------------------ class "action_defender" (action_base) function action_defender:__init (npc,action_name,storage) super (nil,action_name) self.st = storage end function action_defender:initialize() action_base.initialize(self) local npc=self.object self.object:set_desired_position() self.object:set_desired_direction() self.object:clear_animations() self.object:set_detail_path_type(move.line) self.object:set_body_state(move.standing) self.object:set_movement_type(move.run) self.object:set_path_type(game_object.level_path) self.object:set_mental_state(anim.free) self.object:set_sight(look.danger, nil, 0) self.object:remove_all_restrictions() self.napravlenie=vector():set(math.random()*6-3,0,math.random()*6-3) self.napravlenie:normalize() self.object:disable_talk() end function action_defender:execute() action_base.execute(self) local npc=self.object local get_npc=self.object local get_enemy=self.object:best_enemy() local restore_pos=level.vertex_in_direction(db.actor:level_vertex_id(),self.napravlenie,5) local get_actor_lv=db.actor:level_vertex_id() local get_utils=utils.send_to_nearest_accessible_vertex(npc,restore_pos) if distance_between_safe(db.actor,npc)>60 then if flags.defender_vector_timer==0 then npc:disable_talk() npc:set_mental_state(anim.free) state_mgr.set_state(npc,"sprint") flags.defender_vector_timer=time_global()+math.random(1000,1200) end elseif distance_between_safe(db.actor,npc)>10 and distance_between_safe(db.actor,npc)<=60 then if flags.defender_vector_timer==0 then npc:disable_talk() npc:set_mental_state(anim.free) state_mgr.set_state(npc,"assault") flags.defender_vector_timer=time_global()+math.random(1000,1200) end elseif distance_between_safe(db.actor,npc)<=10 then if flags.defender_vector_timer==0 then npc:disable_talk() npc:set_mental_state(anim.danger) state_mgr.set_state(npc,"hide") flags.defender_vector_timer=time_global()+math.random(1000,1200) end end if launch_medkit==true and flags.defender_launch_timer~=0 and time_global()>=flags.defender_launch_timer then local task_texture, task_rect = get_texture_info("ui_iconsTotal_found_thing") local medical_text = "%c[255,160,160,160]"..game.translate_string("Получен предмет:").."\\n".."%c[default]".."• "..game.translate_string(ReadCaption("medkit")).." •" db.actor:give_game_news(medical_text, task_texture, task_rect, 0, 4000) alife():create("medkit",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) launch_medkit=false flags.defender_launch_timer=0 --/give_quick_news("launch_timer = is called") end if medkit_status==true and flags.defender_status_timer~=0 and time_global()>=flags.defender_status_timer then medkit_status=false flags.defender_status_timer=0 --/give_quick_news("status_timer = is called") end if flags.defender_hit_timer==0 then local get_hit=db.storage[npc:id()].hit if get_hit then xr_sound.set_sound_play(npc,"defenders_hit_friend",math.random(100,200)) flags.defender_hit_timer=time_global()+math.random(10000,12000) end end end function action_defender:death_callback() if flags.defender_death_timer==0 then xr_sound.set_sound_play(npc,"defenders_heal",math.random(1000,3000)) flags.defender_death_timer=time_global()+math.random(5000,6000) end end function action_defender:hit_callback() printf("HIT CALLBACK CALLED") end function action_defender:reset_scheme() action_base.finalize(self) end
--/
class "action_medical" (action_base) function action_medical:__init (npc,action_name,storage) super (nil,action_name) self.st = storage end function action_medical:initialize() action_base.initialize(self) local npc=self.object self.object:set_desired_position() self.object:set_desired_direction() self.object:clear_animations() self.object:set_detail_path_type(move.line) self.object:set_body_state(move.standing) self.object:set_movement_type(move.run) self.object:set_path_type(game_object.level_path) self.object:set_mental_state(anim.free) self.object:set_sight(look.danger, nil, 0) self.object:remove_all_restrictions() self.object:disable_talk() end function action_medical:execute() action_base.execute(self) local npc=self.object local get_npc=self.object if medkit_status==false then if distance_between_safe(db.actor,npc)>10 then if flags.defender_medical_timer2==0 then local medical_pos=level.vertex_in_direction(db.actor:level_vertex_id(),vector():set(0,0,0),3) local get_utils=utils.send_to_nearest_accessible_vertex(npc,medical_pos) npc:disable_talk() npc:set_mental_state(anim.free) state_mgr.set_state(npc,"sprint") flags.defender_medical_timer2=time_global()+math.random(1000,1200) end elseif distance_between_safe(db.actor,npc)>1.6 and distance_between_safe(db.actor,npc)<=10 then if flags.defender_medical_timer2==0 then local medical_pos=level.vertex_in_direction(db.actor:level_vertex_id(),vector():set(0,0,0),3) local get_utils=utils.send_to_nearest_accessible_vertex(npc,medical_pos) npc:disable_talk() npc:set_mental_state(anim.free) state_mgr.set_state(npc,"walk") flags.defender_medical_timer2=time_global()+math.random(1000,1200) end elseif distance_between_safe(db.actor,npc)<=1.6 and db.actor.health<0.40 then if flags.defender_medical_timer==0 then npc:disable_talk() npc:set_mental_state(anim.stand_idle) state_mgr.set_state(npc,"search",nil,nil,{look_object=db.actor},{animation=true}) launch_medkit=true medkit_status=true flags.defender_medical_timer=time_global()+math.random(20000,30000) flags.defender_launch_timer=time_global()+math.random(2500,4500) flags.defender_status_timer=time_global()+math.random(8000,12000) xr_sound.set_sound_play(npc,"defenders_heal",2000) end end end if launch_medkit==true and flags.defender_launch_timer~=0 and time_global()>=flags.defender_launch_timer then local task_texture, task_rect = get_texture_info("ui_iconsTotal_found_thing") local medical_text = "%c[255,160,160,160]"..game.translate_string("Получен предмет:").."\\n".."%c[default]".."• "..game.translate_string(ReadCaption("medkit")).." •" db.actor:give_game_news(medical_text, task_texture, task_rect, 0, 4000) alife():create("medkit",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id()) launch_medkit=false flags.defender_launch_timer=0 --/give_quick_news("launch_timer = is called") end if medkit_status==true and flags.defender_status_timer~=0 and time_global()>=flags.defender_status_timer then medkit_status=false flags.defender_status_timer=0 --/give_quick_news("status_timer = is called") end if flags.defender_hit_timer==0 then local get_hit=db.storage[npc:id()].hit if get_hit then xr_sound.set_sound_play(npc,"defenders_hit_friend",math.random(100,200)) flags.defender_hit_timer=time_global()+math.random(10000,12000) end end end function action_medical:death_callback() if flags.defender_death_timer==0 then xr_sound.set_sound_play(npc,"defenders_heal",math.random(1000,3000)) flags.defender_death_timer=time_global()+math.random(5000,6000) end end function action_medical:hit_callback() printf("HIT CALLBACK CALLED") end function action_medical:reset_scheme() action_base.finalize(self) self.medical_is_give = false end
------------------------------------ ------------/Планировка/------------ ------------------------------------ property_defender = 71425 add_to_defender = property_defender property_medical = 71427 add_to_medical = property_medical
function add_to_binder(object,ini,scheme,section,storage) if check_bodyguards(object)==true then --'Эвалуаторы local manager = object:motivation_action_manager() --/планировщик manager:add_evaluator(property_defender,evaluator_defender("defender",storage)) manager:add_evaluator(property_medical,evaluator_medical("medical",storage)) --======================-- --""""Следовать к ГГ""""-- --======================-- --/"Если дистанция между ГГ и НПС>10 метров"/ --/"Если здоровье>40%"/ --/"Если здоровье<40% и флаг medkit_status равен true"/ local action = action_defender(object,"defender",storage) action:add_precondition(world_property(stalker_ids.property_alive,true)) action:add_precondition(world_property(stalker_ids.property_enemy,false)) action:add_precondition(world_property(xr_evaluators_id.sidor_wounded_base,false)) action:add_precondition(world_property(property_defender,true)) action:add_precondition(world_property(property_medical,false)) action:add_effect(world_property(property_defender,false)) manager:add_action(add_to_defender,action) xr_logic.subscribe_action_for_events(object,storage,action) --===================================-- --""""Если ГГ ранен, дать аптечку""""-- --===================================-- --/"Если здоровье<40% и флаг medkit_status равен false"/ local action = action_medical(object,"medical",storage) action:add_precondition(world_property(stalker_ids.property_alive,true)) action:add_precondition(world_property(property_medical,true)) action:add_effect(world_property(property_defender,false)) action:add_effect(world_property(property_medical,false)) manager:add_action(add_to_medical,action) xr_logic.subscribe_action_for_events(object,storage,action) --'Разрешить раздражители action = manager:action(xr_actions_id.alife) action:add_precondition(world_property(property_defender,false)) end end
------------------------------------ ------------/Функции/--------------- ------------------------------------ function set_scheme(npc, ini, scheme, section) local st = xr_logic.assign_storage_and_bind(npc, ini, scheme, section) end function disable_scheme(npc, scheme) local st = db.storage[npc:id()][scheme] if st then st.enabled = false end end
-------------------------------------//Copyright 2008-2009 GeJorge//-------------------------------------------------
Прописанный персонаж создан. Так же эта схема прописана в modules.script Вот так Quote ---------------------------------------------------------------------- -- Загрузка модулей сталкеров: ---------------------------------------------------------------------- load_scheme("xr_danger", "danger", stype_stalker) --Моя схема-------------------------------------------------------------- load_scheme("xr_defender", "defender", stype_stalker) ----------------------------------------------------------------------------- load_scheme("xr_abuse", "abuse", stype_stalker) load_scheme("xr_walker", "walker", stype_stalker) load_scheme("xr_remark", "remark", stype_stalker) load_scheme("xr_sleeper", "sleeper", stype_stalker) load_scheme("xr_kamp", "kamp", stype_stalker) load_scheme("xr_camper", "camper", stype_stalker) load_scheme("xr_meet", "meet", stype_stalker) load_scheme("xr_test", "test", stype_stalker) load_scheme("xr_heli_hunter", "heli_hunter", stype_stalker) load_scheme("xr_attendant", "follower", stype_stalker) load_scheme("xr_combat", "combat", stype_stalker) load_scheme("xr_death", "death", stype_stalker) load_scheme("xr_use", "use", stype_stalker) load_scheme("xr_hit", "hit", stype_stalker) load_scheme("xr_wounded", "wounded", stype_stalker) load_scheme("xr_rest", "rest", stype_stalker) load_scheme("xr_meet", "actor_dialogs",stype_stalker) load_scheme("xr_combat_ignore", "combat_ignore", stype_stalker) load_scheme("xr_patrol", "patrol", stype_stalker) И ничего! Логика перса взята от автора. А нпц при спавне просто ходит бродит и ничего должного не делает. Что сделать или исправить? Помогите!!!
|
|
Понедельник, 02.07.2012, 09:23
|
Статус: |
 |
Сообщений: |
666 |
Регистрация: |
01.07.2012 |
|
|
|
|