Случайная подборка модов
Winter of Death: Ultimatum
4.0
Холодная кровь: Факты.Часть первая
1.9
New Level Changer 6.0. Начало
4.0
CoP’s Level Pack [beta]
4.1
Doomed to Eternal Torment
3.9
Lost World Troops of Doom
4.1
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
  • Страница 1 из 1
  • 1
Архив - только для чтения
Форум » Архив » Моддинг - Архив » Телохранители.Помощь в реализации (Помогите...)
Телохранители.Помощь в реализации
Российская Федерация  CRAZY_stalkER6665
Понедельник, 02.07.2012, 09:23 | Сообщение # 1
Статус:
Новичок:
Сообщений: 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
Российская Федерация  saxar
Понедельник, 14.01.2013, 16:34 | Сообщение # 2
Статус:
Бывалый:
Сообщений: 801
Награды: 2
Регистрация: 17.10.2012

CRAZY_stalkER6665, таже беда. Как в зп сделать телохранителя или перенести как нибудь из sgm помогите.
  Злобная реклама
Понедельник, 14.01.2013, 16:34
Статус:
Сообщений: 666
Регистрация: 17.10.2012
Украина  GunnerShadow
Пятница, 25.01.2013, 02:52 | Сообщение # 3
Статус:
Неопытный:
Сообщений: 577
Награды: 0
Регистрация: 18.09.2012

saxar, Найди скрипты, что связаны с телохранителем. Найди его профиль и посмотри его диалоги. В диалогах найди его функции и прочее. Просмотри логику. Просмотри биндер.
  Злобная реклама
Пятница, 25.01.2013, 02:52
Статус:
Сообщений: 666
Регистрация: 18.09.2012
Российская Федерация  CRAZY_stalkER6665
Пятница, 01.02.2013, 21:11 | Сообщение # 4
Статус:
Новичок:
Сообщений: 268
Награды: 0
Регистрация: 01.07.2012

ООО тема ожила... ну давайте идеи свои.
  Злобная реклама
Пятница, 01.02.2013, 21:11
Статус:
Сообщений: 666
Регистрация: 01.07.2012
Форум » Архив » Моддинг - Архив » Телохранители.Помощь в реализации (Помогите...)
  • Страница 1 из 1
  • 1
Поиск: