local HI = has_alife_info local GI = give_info local DI = disable_info function NI(str) return not (has_alife_info(str)) end function create_squad(smart_name,section) local smart = SIMBOARD.smarts_by_names[smart_name] if (smart and not get_story_se_object(section)) then SIMBOARD:create_squad(smart,section) end return get_story_se_object(section) end function kill_common_enemy(enemy,npc,p) if (xr_conditions.is_enemy_actor_or_companion(enemy,npc,p)) then return end if (get_object_story_id(enemy:id())) then return end local squad = get_object_squad(enemy) if (squad and squad.common and (not get_object_story_id(squad.id))) then local function itr(npc_id,ene_id) local obj = npc_id and level.object_by_id(npc_id) local ene = ene_id and level.object_by_id(ene_id) if (obj and obj:alive() and ene and ene:alive()) then local h = hit() h.power = 1 h.direction = vector():set(0,-1,0) h.bone = "bip01_spine" h.draftsman = obj h.impulse = 0 h.type = hit.wound ene:hit(h) end return true end CreateTimeEvent(npc:id(),"kill_common_enemy" .. enemy:id(),0,itr,npc:id(),enemy:id()) end end function actor_sprint(actor,npc,p) if (IsMoveState("mcSprint")) then return true end return false end function ray_cast_to_actor_le(actor,npc,p) local act_pos = db.actor and db.actor:position() local npc_pos = npc and npc:position() if (act_pos and npc_pos and tonumber(p[1])) then local dir = vector():set((act_pos):sub(npc_pos)):normalize() local pick = ray_pick() pick:set_position(vector():set(npc_pos.x,npc_pos.y+0.5,npc_pos.z)) pick:set_direction(dir) pick:set_ignore_object(db.actor) pick:set_flags(2) pick:set_range(tonumber(p[1])+5) pick:query() local distance = pick:get_distance() if (distance and (distance < tonumber(p[1]))) then return true end end return false end --[[---------------------------------------------------------------------------------------------------- Quests ------------------------------------------------------------------------------------------------------]] function lure_prey_init() if (NI("me_lure_prey_init")) then local smart = SIMBOARD.smarts_by_names["rad2_prip_teleport"] if (smart) then SIMBOARD:create_squad(smart,"squad_lure_prey_controller_1") SIMBOARD:create_squad(smart,"squad_lure_prey_phantom") local p = vector():set(663.0,-43.60,169.5) alife():create("merc_outfit",vec_add(p,vector():set(-0.2,0.0,0.0)),smart.m_level_vertex_id,smart.m_game_vertex_id) alife():create("helm_m40",vec_add(p,vector():set(-0.2,0.0,0.4)),smart.m_level_vertex_id,smart.m_game_vertex_id) alife():create("wpn_lr300",vec_add(p,vector():set(0.2,0.0,0.0)),smart.m_level_vertex_id,smart.m_game_vertex_id) alife():create("ammo_5.56x45_fmj",vec_add(p,vector():set(0.6,0.0,0.3)),smart.m_level_vertex_id,smart.m_game_vertex_id) alife():create("ammo_5.56x45_fmj",vec_add(p,vector():set(0.6,0.0,0.1)),smart.m_level_vertex_id,smart.m_game_vertex_id) alife():create("ammo_5.56x45_fmj",vec_add(p,vector():set(0.6,0.0,-0.1)),smart.m_level_vertex_id,smart.m_game_vertex_id) alife():create("ammo_5.56x45_fmj",vec_add(p,vector():set(0.4,0.0,0.3)),smart.m_level_vertex_id,smart.m_game_vertex_id) alife():create("ammo_5.56x45_fmj",vec_add(p,vector():set(0.4,0.0,0.1)),smart.m_level_vertex_id,smart.m_game_vertex_id) alife():create("ammo_5.56x45_fmj",vec_add(p,vector():set(0.4,0.0,-0.1)),smart.m_level_vertex_id,smart.m_game_vertex_id) alife():create("grenade_f1",vec_add(p,vector():set(0.6,0.0,-0.3)),smart.m_level_vertex_id,smart.m_game_vertex_id) alife():create("grenade_f1",vec_add(p,vector():set(0.6,0.0,-0.3)),smart.m_level_vertex_id,smart.m_game_vertex_id) end GI("me_lure_prey_init") end end function lure_prey_before_hit(npc,shit,bone_id,flags) if (shit.draftsman and (shit.draftsman:id() == AC_ID)) then if (NI("me_lure_prey_argo")) then GI("me_lure_prey_argo") end return end flags.ret_value = false end function lure_prey_set_stalker(actor,npc,p) if (db.actor and npc) then local com_1 = db.actor:character_community() local com_2 = npc:character_community() if (com_1 and com_2 and not string.find(com_1,com_2)) then local str = string.gsub(com_1,"actor_","") npc:set_character_community(str) end end end --[[---------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------]] function bloodsucker_val_init() if (NI("me_bloodsucker_val_init")) then local smart = SIMBOARD.smarts_by_names["val_smart_terrain_1_2"] if (smart) then SIMBOARD:create_squad(smart,"squad_bloodsucker_val_1") SIMBOARD:create_squad(smart,"squad_bloodsucker_val_2") SIMBOARD:create_squad(smart,"squad_bloodsucker_val_3") end GI("me_bloodsucker_val_init") end end function bloodsucker_val_actor_sprint(actor,npc,p) if not (IsMoveState("mcSprint")) then return false end local pos = db.actor and db.actor:position() if not (pos) then return false end if not (170 < pos.x and pos.x < 177) then return false end if not (-280 < pos.z and pos.z < -263) then return false end return true end function bloodsucker_val_dead(actor,obj,p) if (obj) then local sec = {"squad_bloodsucker_val_1","squad_bloodsucker_val_2","squad_bloodsucker_val_3"} for i,v in pairs (sec) do if (string.find(obj:section_name(),v)) then for ii,vv in pairs(sec) do if (not string.find(obj:section_name(),vv) and get_story_se_object(vv)) then return end end if (NI("me_bloodsucker_val_dead")) then GI("me_bloodsucker_val_dead") end return end end end end --[[---------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------]] function sleeping_snork_init() if (NI("me_sleeping_snork_init")) then create_squad("jup_b47","squad_sleeping_bloodsucker_jup_1") create_squad("jup_b47","squad_sleeping_bloodsucker_jup_2") --create_squad("jup_b47","squad_sleeping_bloodsucker_jup_3") GI("me_sleeping_snork_init") end end --[[---------------------------------------------------------------------------------------------------- Registers ------------------------------------------------------------------------------------------------------]] function actor_on_first_update() lure_prey_init() bloodsucker_val_init() end function on_game_start() RegisterScriptCallback("actor_on_first_update",actor_on_first_update) end --[[---------------------------------------------------------------------------------------------------- Debug ------------------------------------------------------------------------------------------------------]] --[[ cmd = debug_cmd_list.command_get_list() function cmd.misc1() lure_prey_init() story_mercenary_leader() end function cmd.misc2() bloodsucker_val_init() end function cmd.misc2kill1() xr_effects.kill_squad(nil,nil,{"squad_bloodsucker_val_1"}) end function cmd.misc2kill2() xr_effects.kill_squad(nil,nil,{"squad_bloodsucker_val_2"}) end function cmd.misc2kill3() xr_effects.kill_squad(nil,nil,{"squad_bloodsucker_val_3"}) end function cmd.misc3() sleeping_snork_init() end function cmd.misc3kill() xr_effects.kill_squad(nil,nil,{"squad_sleeping_snork_1"}) xr_effects.kill_squad(nil,nil,{"squad_sleeping_snork_2"}) xr_effects.kill_squad(nil,nil,{"squad_sleeping_snork_3"}) end --]]