Случайная подборка модов
Холодная кровь: Факты.Часть первая
1.9
Oblivion Lost Remake 2.5
4.4
Sky anomaly
4.0
Смерти Вопреки 2. Одним днем живу
3.4
Апокалипсис
4.0
Зона поражения
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
Поиск: