|
Member
|

08-22-2013
, 19:37
Oberon Boss AP
|
#1
|
Hello, do not know if the area is right over come
I would add that the NPC Boss Oberon
when the player doing 1000 damage he gains 20 AmmoPacks,
and when the player kill Oberon earn 100 AmmoPacks
is to help me?
SMA:
PHP Code:
#include <amxmodx> #include <engine> #include <fakemeta> #include <hamsandwich> #include <xs>
#define OBERON_CLASSNAME "oberon" #define OBERON_HEALTH 500.0
#define TASK_SKILL 123123123 #define TASK_HOOKINGUP 123312312 #define TASK_HOOKINGDOWN 123312313
new const oberon_model[] = "models/oberon/zbs_bossl_big02.mdl" new const oberon_knife_effect[] = "models/oberon/ef_knife.mdl" new const oberon_hole_effect[] = "models/oberon/ef_hole.mdl" new const oberon_bomb_model[] = "models/oberon/zbs_bossl_big02_bomb.mdl"
new const oberon_appear_sound[] = "oberon/appear.wav" new const oberon_death_sound[] = "oberon/death.wav" new const oberon_evolution_sound[] = "oberon/knife.wav" new const oberon_attack_sound[8][] = { "oberon/attack1.wav", "oberon/attack2.wav", "oberon/attack3_jump.wav", "oberon/attack3.wav", "oberon/knife_attack1.wav", "oberon/knife_attack2.wav", "oberon/knife_attack3_jump.wav", "oberon/knife_attack3.wav" } new const oberon_hole_sound[] = "oberon/hole.wav" new const oberon_bomb_sound[] = "oberon/attack_bomb.wav"
new oberon_model_id, g_reg, m_iBlood[2], exp_spr_id new Float:g_cur_origin[3], Float:g_cur_angles[3], Float:g_cur_v_angle[3] new g_evolution, g_evoluting, g_doing_other, g_attacking3, Float:g_attacking3_origin[3]
public plugin_init() { register_plugin("[Dias's NPC] Oberon", "1.0", "Dias") register_event("HLTV", "event_newround", "a", "1=0", "2=0") register_touch(OBERON_CLASSNAME, "*", "fw_touch") register_clcmd("say /get_origin", "get_origin") register_clcmd("say /make", "create_oberon") }
public plugin_precache() { oberon_model_id = precache_model(oberon_model) precache_model(oberon_knife_effect) precache_model(oberon_hole_effect) precache_model(oberon_bomb_model) precache_sound(oberon_appear_sound) precache_sound(oberon_death_sound) precache_sound(oberon_evolution_sound) for(new i = 0; i < sizeof(oberon_attack_sound); i++) { precache_sound(oberon_attack_sound[i]) } precache_sound(oberon_hole_sound) precache_sound(oberon_bomb_sound) m_iBlood[0] = precache_model("sprites/blood.spr") m_iBlood[1] = precache_model("sprites/bloodspray.spr") exp_spr_id = precache_model("sprites/zerogxplode.spr") }
public event_newround() { static ent ent = find_ent_by_class(-1, OBERON_CLASSNAME) if(task_exists(ent+TASK_SKILL)) remove_task(ent+TASK_SKILL) }
public get_origin(id) { pev(id, pev_origin, g_cur_origin) pev(id, pev_angles, g_cur_angles) pev(id, pev_v_angle, g_cur_v_angle) client_print(id, print_chat, "[Dias's NPC] Saved Origin") }
public create_oberon(id) { new ent = create_entity("info_target") entity_set_origin(ent, g_cur_origin) entity_set_vector(ent, EV_VEC_angles, g_cur_angles) //entity_set_vector(ent, EV_VEC_v_angle, g_cur_v_angle) entity_set_float(ent, EV_FL_takedamage, 1.0) entity_set_float(ent, EV_FL_health, OBERON_HEALTH + 1000.0) entity_set_string(ent,EV_SZ_classname, OBERON_CLASSNAME) entity_set_model(ent, oberon_model) entity_set_int(ent, EV_INT_solid, SOLID_SLIDEBOX) entity_set_int(ent, EV_INT_movetype, MOVETYPE_STEP) new Float:maxs[3] = {100.0, 100.0, 100.0} new Float:mins[3] = {-100.0, -100.0, -30.0} entity_set_size(ent, mins, maxs) entity_set_int(ent, EV_INT_modelindex, oberon_model_id) set_entity_anim(ent, 1) set_pev(ent, pev_iuser4, 0) entity_set_float(ent, EV_FL_nextthink, halflife_time() + 6.0) set_task(5.0, "start_oberon", ent) set_task(15.0, "do_random_skill", ent, _, _, "b") if(!g_reg) { RegisterHamFromEntity(Ham_TakeDamage, ent, "fw_takedmg", 1) RegisterHamFromEntity(Ham_Think, ent, "fw_think") g_reg = 1 } g_evolution = 0 g_evoluting = 0 g_doing_other = 0 drop_to_floor(ent) emit_sound(ent, CHAN_BODY, oberon_appear_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) }
public start_oberon(ent) { set_entity_anim(ent, 2) }
public fw_think(ent) { if(!is_valid_ent(ent)) return HAM_IGNORED if(pev(ent, pev_iuser4) == 1) // Oberon is dead return HAM_IGNORED if(g_evoluting || g_doing_other) return HAM_IGNORED if(pev(ent, pev_health) - 1000.0 <= 0.0) { set_pev(ent, pev_iuser4, 1) set_entity_anim(ent, 20) set_task(15.0, "move_entity", ent) entity_set_int(ent, EV_INT_solid, SOLID_NOT) entity_set_float(ent, EV_FL_takedamage, 0.0) emit_sound(ent, CHAN_BODY, oberon_death_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) return HAM_IGNORED } if((pev(ent, pev_health) - 1000.0 <= OBERON_HEALTH / 2.0) && !g_evolution) { g_evoluting = 1 set_entity_anim(ent, 11) emit_sound(ent, CHAN_BODY, oberon_evolution_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) set_task(8.0, "set_new_idle", ent) return HAM_IGNORED } static victim static Float:Origin[3], Float:VicOrigin[3], Float:distance victim = FindClosesEnemy(ent) pev(ent, pev_origin, Origin) pev(victim, pev_origin, VicOrigin) distance = get_distance_f(Origin, VicOrigin) if(is_user_alive(victim)) { if(distance <= 250.0) { if(!is_valid_ent(ent)) return FMRES_IGNORED new Float:Ent_Origin[3], Float:Vic_Origin[3] pev(ent, pev_origin, Ent_Origin) pev(victim, pev_origin, Vic_Origin) npc_turntotarget(ent, Ent_Origin, victim, Vic_Origin) static Attack_Type, attack_anim, attack_sound Attack_Type = random_num(1, 2) if(Attack_Type == 1) { if(g_evolution) { attack_anim = 14 attack_sound = 4 } else { attack_anim = 6 attack_sound = 0 } set_entity_anim(ent, attack_anim) emit_sound(ent, CHAN_BODY, oberon_attack_sound[attack_sound], 1.0, ATTN_NORM, 0, PITCH_NORM) set_task(1.0, "do_takedmg", ent) entity_set_float(ent, EV_FL_nextthink, get_gametime() + 3.0) } else { if(g_evolution) { attack_anim = 15 attack_sound = 5 } else { attack_anim = 7 attack_sound = 1 } set_entity_anim(ent, attack_anim) emit_sound(ent, CHAN_BODY, oberon_attack_sound[attack_sound], 1.0, ATTN_NORM, 0, PITCH_NORM) set_task(0.5, "do_takedmg", ent) entity_set_float(ent, EV_FL_nextthink, get_gametime() + 3.0) } } else { static moving_anim if(g_evolution) moving_anim = 13 else moving_anim = 3 if(pev(ent, pev_sequence) != moving_anim) { entity_set_float(ent, EV_FL_animtime, get_gametime()) entity_set_float(ent, EV_FL_framerate, 1.0) entity_set_int(ent, EV_INT_sequence, moving_anim) } new Float:Ent_Origin[3], Float:Vic_Origin[3] pev(ent, pev_origin, Ent_Origin) pev(victim, pev_origin, Vic_Origin) npc_turntotarget(ent, Ent_Origin, victim, Vic_Origin) hook_ent(ent, victim, 100.0) entity_set_float(ent, EV_FL_nextthink, get_gametime() + 0.1) } } else { static idle_anim if(g_evolution) idle_anim = 12 else idle_anim = 2 if(pev(ent, pev_sequence) != idle_anim) { set_entity_anim(ent, idle_anim) } entity_set_float(ent, EV_FL_nextthink, get_gametime() + 1.0) } return HAM_HANDLED }
public do_random_skill(ent) { if(!pev_valid(ent)) return PLUGIN_HANDLED if(g_evoluting) return PLUGIN_HANDLED if(pev(ent, pev_health) - 1000.0 <= 0.0) return PLUGIN_HANDLED static random_skill random_skill = random_num(0, 100) g_doing_other = 1 switch(random_skill) { case 0..37: { do_attack3(ent) } case 38..72: { do_hole(ent) } case 73..100: { do_bomb(ent) } } return PLUGIN_CONTINUE }
public do_bomb(oberon) { g_doing_other = 1 static bomb_anim if(g_evolution) bomb_anim = 18 else bomb_anim = 9 set_entity_anim(oberon, bomb_anim) set_task(3.0, "do_skill_bomb", oberon+2015, _, _, "b") set_task(10.0, "stop_skill_bomb", oberon) }
public stop_skill_bomb(oberon) { remove_task(oberon+2015) static idle_anim if(g_evolution) idle_anim = 12 else idle_anim = 2 set_entity_anim(oberon, idle_anim) set_task(2.0, "reset_think", oberon) }
public do_skill_bomb(oberon) { oberon -= 2015 static Float:StartOrigin[3], Float:TempOrigin[6][3], Float:VicOrigin[6][3], Float:Random1 pev(oberon, pev_origin, StartOrigin) emit_sound(oberon, CHAN_BODY, oberon_bomb_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) // 1st Bomb Random1 = random_float(100.0, 500.0) VicOrigin[0][0] = StartOrigin[0] + Random1 VicOrigin[0][1] = StartOrigin[1] VicOrigin[0][2] = StartOrigin[2] TempOrigin[0][0] = VicOrigin[0][0] - (Random1 / 2.0) TempOrigin[0][1] = VicOrigin[0][1] TempOrigin[0][2] = VicOrigin[0][2] + 500.0 // 2nd Bomb Random1 = random_float(100.0, 500.0) VicOrigin[1][0] = StartOrigin[0] VicOrigin[1][1] = StartOrigin[1] + Random1 VicOrigin[1][2] = StartOrigin[2] TempOrigin[1][0] = VicOrigin[1][0] TempOrigin[1][1] = VicOrigin[1][1] - (Random1 / 2.0) TempOrigin[1][2] = VicOrigin[1][2] + 500.0 // 3rd Bomb Random1 = random_float(100.0, 500.0) VicOrigin[2][0] = StartOrigin[0] - Random1 VicOrigin[2][1] = StartOrigin[1] VicOrigin[2][2] = StartOrigin[2] TempOrigin[2][0] = VicOrigin[2][0] - (Random1 / 2.0) TempOrigin[2][1] = VicOrigin[2][1] TempOrigin[2][2] = VicOrigin[2][2] + 500.0 // 4th Bomb VicOrigin[3][0] = StartOrigin[0] VicOrigin[3][1] = StartOrigin[1] - Random1 VicOrigin[3][2] = StartOrigin[2] TempOrigin[3][0] = VicOrigin[3][0] TempOrigin[3][1] = VicOrigin[3][1] - (Random1 / 2.0) TempOrigin[3][2] = VicOrigin[3][2] + 500.0 // 5th Bomb VicOrigin[4][0] = StartOrigin[0] + Random1 VicOrigin[4][1] = StartOrigin[1] + Random1 VicOrigin[4][2] = StartOrigin[2] TempOrigin[4][0] = VicOrigin[4][0] - (Random1 / 2.0) TempOrigin[4][1] = VicOrigin[4][1] - (Random1 / 2.0) TempOrigin[4][2] = VicOrigin[4][2] + 500.0 // 6th Bomb VicOrigin[5][0] = StartOrigin[0] + Random1 VicOrigin[5][1] = StartOrigin[1] - Random1 VicOrigin[5][2] = StartOrigin[2] TempOrigin[5][0] = VicOrigin[5][0] + (Random1 / 2.0) TempOrigin[5][1] = VicOrigin[5][1] - (Random1 / 2.0) TempOrigin[5][2] = VicOrigin[5][2] + 500.0 for(new i = 0; i < 6; i++) { make_bomb(StartOrigin, TempOrigin[i], VicOrigin[i]) } }
public make_bomb(Float:StartOrigin[3], Float:TempOrigin[3], Float:VicOrigin[3]) { new ent = create_entity("info_target") StartOrigin[2] += 20.0 entity_set_origin(ent, StartOrigin) entity_set_string(ent,EV_SZ_classname, "oberon_bomb") entity_set_model(ent, oberon_bomb_model) entity_set_int(ent, EV_INT_solid, SOLID_NOT) entity_set_int(ent, EV_INT_movetype, MOVETYPE_BOUNCE) new Float:maxs[3] = {10.0,10.0,10.0} new Float:mins[3] = {-10.0,-10.0,-5.0} entity_set_size(ent, mins, maxs) entity_set_float(ent, EV_FL_animtime, get_gametime()) entity_set_float(ent, EV_FL_framerate, 1.0) entity_set_int(ent, EV_INT_sequence, 0) static arg[4], arg2[4] arg[0] = ent arg[1] = floatround(TempOrigin[0]) arg[2] = floatround(TempOrigin[1]) arg[3] = floatround(TempOrigin[2])
arg2[0] = ent arg2[1] = floatround(VicOrigin[0]) arg2[2] = floatround(VicOrigin[1]) arg2[3] = floatround(VicOrigin[2]) set_task(0.01, "do_hook_bomb_up", TASK_HOOKINGUP, arg, sizeof(arg), "b") set_task(1.0, "do_hook_bomb_down", _, arg2, sizeof(arg2)) set_task(2.0, "bomb_explode", ent) }
public bomb_explode(ent) { remove_task(TASK_HOOKINGUP) remove_task(TASK_HOOKINGDOWN) static Float:Origin[3] pev(ent, pev_origin, Origin) message_begin(MSG_BROADCAST ,SVC_TEMPENTITY) write_byte(TE_EXPLOSION) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_short(exp_spr_id) // sprite index write_byte(20) // scale in 0.1's write_byte(30) // framerate write_byte(0) // flags message_end() for(new i = 1; i < get_maxplayers(); i++) { if(is_user_alive(i) && entity_range(i, ent) <= 300.0) { static Float:Damage Damage = random_float(10.0, 30.0) if(g_evolution) Damage *= 2.0 ExecuteHam(Ham_TakeDamage, i, 0, i, Damage, DMG_BLAST) hit_screen(i) } } remove_entity(ent) }
public do_hook_bomb_down(arg[4]) { remove_task(TASK_HOOKINGUP) set_task(0.01, "do_hook_bomb_down2", TASK_HOOKINGDOWN, arg, sizeof(arg), "b") }
public do_hook_bomb_down2(arg[4]) { static ent, Float:VicOrigin[3] ent = arg[0] VicOrigin[0] = float(arg[1]) VicOrigin[1] = float(arg[2]) VicOrigin[2] = float(arg[3]) hook_ent2(ent, VicOrigin, 500.0) }
public do_hook_bomb_up(arg[4]) { static ent, Float:TempOrigin[3] ent = arg[0] TempOrigin[0] = float(arg[1]) TempOrigin[1] = float(arg[2]) TempOrigin[2] = float(arg[3]) hook_ent2(ent, TempOrigin, 500.0) }
public do_hole(oberon) { static hole_anim if(g_evolution) hole_anim = 19 else hole_anim = 10 set_entity_anim(oberon, hole_anim) emit_sound(oberon, CHAN_BODY, oberon_hole_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) new ent = create_entity("info_target") static Float:Origin[3] pev(oberon, pev_origin, Origin) Origin[2] -= 10.0 entity_set_origin(ent, Origin) entity_set_string(ent,EV_SZ_classname, "hole_hook") entity_set_model(ent, oberon_hole_effect) entity_set_int(ent, EV_INT_solid, SOLID_NOT) entity_set_int(ent, EV_INT_movetype, MOVETYPE_NONE) new Float:maxs[3] = {1.0,1.0,1.0} new Float:mins[3] = {-1.0,-1.0,-1.0} entity_set_size(ent, mins, maxs) entity_set_float(ent, EV_FL_animtime, get_gametime()) entity_set_float(ent, EV_FL_framerate, 1.0) entity_set_int(ent, EV_INT_sequence, 0) set_pev(ent, pev_rendermode, kRenderTransAdd) set_pev(ent, pev_renderamt, 255.0) drop_to_floor(ent) for(new i = 0; i < get_maxplayers(); i++) { if(is_user_alive(i) && entity_range(oberon, i) <= 1000.0) { static arg[2] arg[0] = oberon arg[1] = i set_task(0.01, "do_hook_player", 512512, arg, sizeof(arg), "b") } } set_task(5.0, "stop_hook", oberon+2012) }
public do_hook_player(arg[2]) { static Float:Origin[3], Float:Speed pev(arg[0], pev_origin, Origin) Speed = (1000.0 / entity_range(arg[0], arg[1])) * 75.0 hook_ent2(arg[1], Origin, Speed) }
public stop_hook(oberon) { oberon -= 2012 static ent ent = find_ent_by_class(-1, "hole_hook") remove_entity(ent) remove_task(512512) do_takedmg(oberon) set_task(1.0, "reset_think", oberon) }
public do_attack3(ent) { static attack3_anim, attack3_sound if(g_evolution) { attack3_anim = 16 attack3_sound = 6 } else { attack3_anim = 8 attack3_sound = 2 } g_attacking3 = 1 set_entity_anim(ent, attack3_anim) emit_sound(ent, CHAN_BODY, oberon_attack_sound[attack3_sound], 1.0, ATTN_NORM, 0, PITCH_NORM) set_task(0.1, "attack3_jump", ent) }
public attack3_jump(ent) { set_task(0.01, "hookingup", ent+TASK_HOOKINGUP, _, _, "b") set_task(1.0, "hookingdown", ent+TASK_HOOKINGDOWN) static Enemy Enemy = FindClosesEnemy(ent) pev(Enemy, pev_origin, g_attacking3_origin) }
public hookingup(ent) { ent -= TASK_HOOKINGUP static Float:Origin[3] pev(ent, pev_origin, Origin) Origin[2] += 1000.0 hook_ent2(ent, Origin, 1000.0) static Enemy Enemy = FindClosesEnemy(ent) new Float:Ent_Origin[3], Float:Vic_Origin[3] pev(ent, pev_origin, Ent_Origin) pev(Enemy, pev_origin, Vic_Origin) npc_turntotarget(ent, Ent_Origin, Enemy, Vic_Origin) }
public hookingdown(ent) { ent -= TASK_HOOKINGDOWN remove_task(ent+TASK_HOOKINGUP) set_task(0.5, "set_func1", ent) set_task(0.01, "hookingdown2", ent+TASK_HOOKINGDOWN, _, _, "b") }
public set_func1(ent) { set_pev(ent, pev_iuser3, 1) }
public hookingdown2(ent) { ent -= TASK_HOOKINGDOWN static Enemy Enemy = FindClosesEnemy(ent) hook_ent2(ent, g_attacking3_origin, 1000.0) new Float:Ent_Origin[3], Float:Vic_Origin[3] pev(ent, pev_origin, Ent_Origin) pev(Enemy, pev_origin, Vic_Origin) npc_turntotarget(ent, Ent_Origin, Enemy, Vic_Origin) }
public fw_touch(ent, touch) { if(!pev_valid(ent)) return FMRES_IGNORED if(g_attacking3 && pev(ent, pev_iuser3) == 1) { remove_task(ent+TASK_HOOKINGDOWN) if(is_user_alive(touch)) user_kill(touch) g_attacking3 = 0 set_pev(ent, pev_iuser3, 0) set_task(0.75, "reset_think", ent) for(new i = 1; i < get_maxplayers(); i++) { if(is_user_alive(i) && entity_range(ent, i) <= 300.0) { hit_screen(i) static Float:Damage Damage = random_float(10.0, 25.0) if(g_evolution) Damage *= 1.5 ExecuteHam(Ham_TakeDamage, i, 0, i, Damage, DMG_BLAST) } } static attack3_sound if(g_evolution) attack3_sound = 7 else attack3_sound = 3 emit_sound(ent, CHAN_BODY, oberon_attack_sound[attack3_sound], 1.0, ATTN_NORM, 0, PITCH_NORM) drop_to_floor(ent) } return FMRES_HANDLED }
public do_takedmg(ent2) { if(g_evolution) { new ent = create_entity("info_target") static Float:Origin[3], Float:Angles[3] pev(ent2, pev_origin, Origin) pev(ent2, pev_angles, Angles) entity_set_origin(ent, Origin) entity_set_vector(ent, EV_VEC_angles, Angles) entity_set_string(ent,EV_SZ_classname, "knife_effect") entity_set_model(ent, oberon_knife_effect) entity_set_int(ent, EV_INT_solid, SOLID_NOT) entity_set_int(ent, EV_INT_movetype, MOVETYPE_NONE) new Float:maxs[3] = {40.0, 40.0, 1.0} new Float:mins[3] = {-40.0, -40.0, -1.0} entity_set_size(ent, mins, maxs) drop_to_floor(ent) set_task(1.0, "remove_knife_effect", ent) } for(new i = 1; i < get_maxplayers(); i++) { if(is_user_alive(i) && entity_range(ent2, i) <= 300.0) { hit_screen(i) static Float:Damage Damage = random_float(7.5, 15.0) if(g_evolution) Damage *= 2.0 ExecuteHam(Ham_TakeDamage, i, 0, i, Damage, DMG_BLAST) } } }
public remove_knife_effect(ent) { remove_entity(ent) }
public set_new_idle(ent) { g_evoluting = 0 g_evolution = 1 set_entity_anim(ent, 12) entity_set_float(ent, EV_FL_nextthink, get_gametime() + 0.1) }
public move_entity(ent) { static Float:Origin[3] Origin[0] = 4290.0 Origin[1] = 4290.0 Origin[2] = 4290.0 set_pev(ent, pev_origin, Origin) entity_set_float(ent, EV_FL_nextthink, halflife_time() + 99999999.0) }
public fw_takedmg(victim, inflictor, attacker, Float:damage, damagebits) { static Float:Origin[3] fm_get_aimorigin(attacker, Origin) client_print(attacker, print_center, "Remain Health: %i", floatround(pev(victim, pev_health) - 1000.0)) create_blood(Origin) }
stock set_entity_anim(ent, anim) { entity_set_float(ent, EV_FL_animtime, get_gametime()) entity_set_float(ent, EV_FL_framerate, 1.0) entity_set_int(ent, EV_INT_sequence, anim) }
stock create_blood(const Float:origin[3]) { // Show some blood :) message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_BLOODSPRITE) engfunc(EngFunc_WriteCoord, origin[0]) engfunc(EngFunc_WriteCoord, origin[1]) engfunc(EngFunc_WriteCoord, origin[2]) write_short(m_iBlood[1]) write_short(m_iBlood[0]) write_byte(75) write_byte(5) message_end() }
stock fm_get_aimorigin(index, Float:origin[3]) { new Float:start[3], Float:view_ofs[3]; pev(index, pev_origin, start); pev(index, pev_view_ofs, view_ofs); xs_vec_add(start, view_ofs, start); new Float:dest[3]; pev(index, pev_v_angle, dest); engfunc(EngFunc_MakeVectors, dest); global_get(glb_v_forward, dest); xs_vec_mul_scalar(dest, 9999.0, dest); xs_vec_add(start, dest, dest); engfunc(EngFunc_TraceLine, start, dest, 0, index, 0); get_tr2(0, TR_vecEndPos, origin); return 1; }
public FindClosesEnemy(entid) { new Float:Dist new Float:maxdistance=4000.0 new indexid=0 for(new i=1;i<=get_maxplayers();i++){ if(is_user_alive(i) && is_valid_ent(i) && can_see_fm(entid, i)) { Dist = entity_range(entid, i) if(Dist <= maxdistance) { maxdistance=Dist indexid=i return indexid } } } return 0 }
public npc_turntotarget(ent, Float:Ent_Origin[3], target, Float:Vic_Origin[3]) { if(target) { new Float:newAngle[3] entity_get_vector(ent, EV_VEC_angles, newAngle) new Float:x = Vic_Origin[0] - Ent_Origin[0] new Float:z = Vic_Origin[1] - Ent_Origin[1]
new Float:radians = floatatan(z/x, radian) newAngle[1] = radians * (180 / 3.14) if (Vic_Origin[0] < Ent_Origin[0]) newAngle[1] -= 180.0 entity_set_vector(ent, EV_VEC_angles, newAngle) } }
public bool:can_see_fm(entindex1, entindex2) { if (!entindex1 || !entindex2) return false
if (pev_valid(entindex1) && pev_valid(entindex1)) { new flags = pev(entindex1, pev_flags) if (flags & EF_NODRAW || flags & FL_NOTARGET) { return false }
new Float:lookerOrig[3] new Float:targetBaseOrig[3] new Float:targetOrig[3] new Float:temp[3]
pev(entindex1, pev_origin, lookerOrig) pev(entindex1, pev_view_ofs, temp) lookerOrig[0] += temp[0] lookerOrig[1] += temp[1] lookerOrig[2] += temp[2]
pev(entindex2, pev_origin, targetBaseOrig) pev(entindex2, pev_view_ofs, temp) targetOrig[0] = targetBaseOrig [0] + temp[0] targetOrig[1] = targetBaseOrig [1] + temp[1] targetOrig[2] = targetBaseOrig [2] + temp[2]
engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) // checks the had of seen player if (get_tr2(0, TraceResult:TR_InOpen) && get_tr2(0, TraceResult:TR_InWater)) { return false } else { new Float:flFraction get_tr2(0, TraceResult:TR_flFraction, flFraction) if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2)) { return true } else { targetOrig[0] = targetBaseOrig [0] targetOrig[1] = targetBaseOrig [1] targetOrig[2] = targetBaseOrig [2] engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) // checks the body of seen player get_tr2(0, TraceResult:TR_flFraction, flFraction) if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2)) { return true } else { targetOrig[0] = targetBaseOrig [0] targetOrig[1] = targetBaseOrig [1] targetOrig[2] = targetBaseOrig [2] - 17.0 engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) // checks the legs of seen player get_tr2(0, TraceResult:TR_flFraction, flFraction) if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2)) { return true } } } } } return false }
public hook_ent(ent, victim, Float:speed) { static Float:fl_Velocity[3] static Float:VicOrigin[3], Float:EntOrigin[3]
pev(ent, pev_origin, EntOrigin) pev(victim, pev_origin, VicOrigin) static Float:distance_f distance_f = get_distance_f(EntOrigin, VicOrigin)
if (distance_f > 60.0) { new Float:fl_Time = distance_f / speed
fl_Velocity[0] = (VicOrigin[0] - EntOrigin[0]) / fl_Time fl_Velocity[1] = (VicOrigin[1] - EntOrigin[1]) / fl_Time fl_Velocity[2] = (VicOrigin[2] - EntOrigin[2]) / fl_Time } else { fl_Velocity[0] = 0.0 fl_Velocity[1] = 0.0 fl_Velocity[2] = 0.0 }
entity_set_vector(ent, EV_VEC_velocity, fl_Velocity) }
public hook_ent2(ent, Float:VicOrigin[3], Float:speed) { static Float:fl_Velocity[3] static Float:EntOrigin[3]
pev(ent, pev_origin, EntOrigin) static Float:distance_f distance_f = get_distance_f(EntOrigin, VicOrigin)
if (distance_f > 60.0) { new Float:fl_Time = distance_f / speed
fl_Velocity[0] = (VicOrigin[0] - EntOrigin[0]) / fl_Time fl_Velocity[1] = (VicOrigin[1] - EntOrigin[1]) / fl_Time fl_Velocity[2] = (VicOrigin[2] - EntOrigin[2]) / fl_Time } else { fl_Velocity[0] = 0.0 fl_Velocity[1] = 0.0 fl_Velocity[2] = 0.0 }
entity_set_vector(ent, EV_VEC_velocity, fl_Velocity) }
public hit_screen(id) { message_begin(MSG_ONE, get_user_msgid("ScreenShake"),{0,0,0}, id) write_short(1<<14) write_short(1<<13) write_short(1<<13) message_end() }
public reset_think(ent) { g_doing_other = 0 entity_set_float(ent, EV_FL_nextthink, get_gametime() + 0.1) }
|
|