| indradullanov |
07-07-2013 23:02 |
coordination
can help me? where coordination boss Oberon create?
PHP Code:
#include <amxmodx> #include <engine> #include <fakemeta> #include <cstrike> #include <hamsandwich> #include <xs>
// NRS includes #include <nrs_main> #include <nrs_const>
#define PLUGIN "[NRS] : Oberon" #define TITLE "[NRS]" #define VERSION "1.3" #define AUTHOR "Good_Hash + Dias" #define MAP_NEXT "cs_italy" #define MAX_ZOMBIE_ID 4
#define OBERON_HEALTH 150000.0 #define MONEY_DMG 1000.0 #define MONEY_REWARD 1000 #define CLASS_NAME "npc_oberon" #define CLASS_TIP "Oberon Boss" #define OBERON_ATTACK_WAITIME 3.0 // Some defines for tasks #define TASK_INIT 1000 #define TASK_SPELL 1001 #define TASK_RESET 1002 #define TASK_BERSERKER 1003 #define TASK_EFFECT 1004 #define TASK_HOOKINGUP 1005 #define TASK_HOOKINGDOWN 1006 #define TASK_BOMBING 1007 #define TASK_SWARM 1008 #define TASK_CREATE 1009
// Animations.. #define ANIMATION_SPAWN 1 #define ANIMATION_SPAWN_TIME 6.2
#define OBERON_ATTACK2_DAMAGE 10.0 #define ANIMATION_ATTACK_2 7 #define ANIMATION_ATTACK_2_TIME 2.03 #define ANIMATION_ATTACK_2_BERSERKER 15 #define ANIMATION_ATTACK_2_BERSERKER_TIME 1.53
#define ANIMATION_ATTACK_3 8 #define ANIMATION_ATTACK_3_TIME 4.0 #define ANIMATION_ATTACK_3_BERSERKER 16 #define ANIMATION_ATTACK_3_BERSERKER_TIME 4.0
#define ANIMATION_ATTACK_BOMB 9 #define ANIMATION_ATTACK_BOMB_TIME 11.2 #define ANIMATION_ATTACK_BOMB_BERSERKER 18 #define ANIMATION_ATTACK_BOMB_BERSERKER_TIME 11.2
#define ANIMATION_ATTACK_HOLE 10 #define ANIMATION_ATTACK_HOLE_TIME 6.02 #define ANIMATION_ATTACK_HOLE_BERSERKER 19 #define ANIMATION_ATTACK_HOLE_BERSERKER_TIME 6.02
#define ANIMATION_BERSERKER 11 #define ANIMATION_BERSERKER_TIME 8.7
// IMPALE STRIKE new Float:g_poison_touch[33] new const skill_tentacle[][] = { "models/dione/ef_tentacle_sign.mdl", "models/dione/tentacle.mdl", "models/dione/ef_tentacle.mdl" } #define TENACLE_TASK 42141 // IMPALE STRIKE
new last_ent, g_npc_id, g_Counter new g_class_modelindex, exp_spr_id new g_class_pmodel[164] = "models/oberon/zbs_bossl_big02.mdl" new const oberon_bomb_model[] = "models/oberon/zbs_bossl_big02_bomb.mdl" new const oberon_hole_effect[] = "models/oberon/ef_hole.mdl" new const oberon_knife_effect[] = "models/oberon/ef_knife.mdl"
new const oberon_appear_sound[] = "oberon/appear.wav" new const oberon_attack1_sound[] = "oberon/attack1.wav" new const oberon_attack2_sound[] = "oberon/attack2.wav" new const oberon_berserk_attack1_sound[] = "oberon/knife_attack1.wav" new const oberon_berserk_attack2_sound[] = "oberon/knife_attack2.wav" new const oberon_berserker_sound[] = "oberon/knife.wav" new const oberon_attack_hole_sound[] = "oberon/hole.wav" new const oberon_bomb_sound[] = "oberon/attack_bomb.wav"
new const oberon_jump_sound[] = "oberon/attack3_jump.wav" new const oberon_jumpdamage_sound[] = "oberon/attack3.wav" new const oberon_bjump_sound[] = "oberon/knife_attack3_jump.wav" new const oberon_bjumpdamage_sound[] = "oberon/knife_attack3.wav"
new bool:g_incast[516], bool:g_berserker[516], bool:g_already_bombing, g_oberons_alive, Float:zombie_timer[516], g_created_zombie new Float:Damage_Money[33], g_damage_done[33]
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_touch("tentacle2", "*", "fw_tentacle_touch") RegisterHam(Ham_TakeDamage, "player", "Block_Doing_Damage") RegisterHam(Ham_Spawn, "player", "PlayerSpawn", 1) //register_clcmd("say /god", "test_attack2") register_concmd("oberon_tentakle", "test_tentakle") register_concmd("oberon_hole", "test_hole") register_concmd("oberon_bomb", "test_bomb") }
FindBuyZones( ) { new iEntity = -1; while( ( iEntity = find_ent_by_class( iEntity, "func_buyzone" ) ) > 0 ) { return iEntity } return 0 }
public event_gamestarted() { g_Counter = 25 if ( task_exists(TASK_CREATE) ) { remove_task(TASK_CREATE) } Start_Creating() }
public Start_Creating() { g_Counter-- if ( g_Counter ) { set_task(1.0, "Start_Creating", TASK_CREATE) set_hudmessage(0, 255, 0, -1.0, -0.67) show_hudmessage(0, "Start in %i sec", g_Counter) } else { set_task(1.0, "Double_Oberon", TASK_CREATE) set_hudmessage(255, 0, 0, -1.0, -0.67, 2) show_hudmessage(0, "SUPERNOVA IYI EGLENCELER DILER!!!!!!") } } public Double_Oberon() { new Float:fOrigin[3] create_npc(fOrigin, g_npc_id) create_npc(fOrigin, g_npc_id) g_oberons_alive = 2 }
public PlayerSpawn(id) if ( is_user_alive(id) ) cs_set_user_money(id, 16000) public Block_Doing_Damage(victim, inflictor, attacker, Float:damage, damagetype) { if(damagetype & DMG_GENERIC || victim == attacker || !is_user_alive(victim) || !is_user_connected(attacker)) return HAM_IGNORED if ( is_user_connected(victim) && is_user_connected(attacker) ) return HAM_SUPERCEDE return HAM_IGNORED }
public test_attack2(id) { set_pev(id, pev_health, 1012.0) } public test_hole(id) { if ( g_incast[last_ent] ) return PLUGIN_HANDLED g_incast[last_ent] = true set_task(0.3, "oberon_skill_hole", last_ent + TASK_SPELL) return PLUGIN_HANDLED } public test_tentakle(id) { if ( g_incast[last_ent] ) return PLUGIN_HANDLED g_incast[last_ent] = true set_task(0.3, "oberon_skill_impale", last_ent + TASK_SPELL) return PLUGIN_HANDLED } public test_bomb(id) { if ( g_incast[last_ent] ) return PLUGIN_HANDLED g_incast[last_ent] = true set_task(0.3, "oberon_skill_bombs", last_ent + TASK_SPELL) return PLUGIN_HANDLED }
public event_npc_damage_start(ent) { if ( !pev_valid(ent) ) return PLUGIN_CONTINUE; if ( get_npc_id(ent) == g_npc_id ) { if ( g_incast[ent] ) return PLUGIN_HANDLED if ( g_berserker[ent] ) emit_sound(ent, CHAN_BODY, oberon_berserk_attack1_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) else emit_sound(ent, CHAN_BODY, oberon_attack1_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) g_incast[ent] = true new Float:timed; if ( !g_berserker[ent] ) timed = OBERON_ATTACK_WAITIME else timed = 2.0 set_task(timed+0.3, "oberon_reset", ent + TASK_RESET) } return PLUGIN_CONTINUE; }
public event_npc_damage_delayed(ent) oberon_berser_effects(ent)
public event_npc_damage(ent, attacker, Float:damage) { if ( !pev_valid(ent) ) return; if ( get_npc_id(ent) != g_npc_id ) return Damage_Money[attacker] += damage; g_damage_done[attacker] += floatround(damage) if(Damage_Money[attacker] >= MONEY_DMG) { Damage_Money[attacker] -= MONEY_DMG cs_set_user_money(attacker, cs_get_user_money(attacker) + MONEY_REWARD) } if ( pev(ent, pev_health) <= get_npc_data(g_npc_id, DATA_HEALTH)*0.5 ) if ( !g_berserker[ent] ) { if ( g_incast[ent] ) { set_task(3.0, "oberon_berserker_on", ent+TASK_BERSERKER, _, _, "b") } else { oberon_berserker_on(ent) } } }
public oberon_berserker_on(ent) { if ( ent > TASK_BERSERKER ) ent -= TASK_BERSERKER if ( !pev_valid(ent) || g_incast[ent] ) return task_exists(ent + TASK_BERSERKER) ? remove_task(ent + TASK_BERSERKER) : 0 g_incast[ent] = true g_berserker[ent] = true npc_reset_animation(ent) set_npc_events(ent, EVENT_CUSTOM) npc_set_berserker(ent, 1) npc_set_animation(ent, ANIMATION_BERSERKER, ANIMATION_BERSERKER_TIME) emit_sound(ent, CHAN_BODY, oberon_berserker_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) set_task(ANIMATION_BERSERKER_TIME, "oberon_reset", ent + TASK_RESET) }
public event_npc_init(ent) { if ( !pev_valid(ent) ) return; if ( get_npc_id(ent) == g_npc_id ) { last_ent = ent set_npc_boss(ent, true) npc_reset_move(ent) g_berserker[ent] = false g_incast[ent] = true set_npc_events(ent, EVENT_CUSTOM) npc_set_animation(ent, ANIMATION_SPAWN, ANIMATION_SPAWN_TIME) set_task(ANIMATION_SPAWN_TIME, "npc_start", ent+TASK_INIT) //set_task(30.0, "oberon_call_zombie", ent+TASK_SWARM, _,_,"b") emit_sound(ent, CHAN_BODY, oberon_appear_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) } }
public oberon_call_zombie(ent) { ent -= TASK_SWARM if ( !pev_valid(ent) ) { remove_task(ent + TASK_SWARM) return } if (zombie_timer[ent] <= get_gametime() ) { new zombie_calls = random_num(1,10)*g_oberons_alive new zombie_online = 5*g_oberons_alive new parm[3] parm[0] = zombie_calls parm[1] = zombie_online parm[2] = ent set_task(1.0, "_oberon_call_zombie", ent+TASK_SWARM, parm, 3) } }
public _oberon_call_zombie(parm[3]) { new zombie_calls = parm[0] new zombie_online = parm[1] new ent = parm[2] new random_zombie[50] formatex(random_zombie, 49, "npc_cso_zm%i", random_num(1,MAX_ZOMBIE_ID)) if ( g_created_zombie < zombie_online ) { if ( zombie_calls > 0 ) { new Float:fOrigin[3] create_npc(fOrigin, get_npc_classname_id(random_zombie)) zombie_calls-- g_created_zombie++ parm[0] = zombie_calls parm[1] = zombie_online set_task(1.0, "_oberon_call_zombie", ent+TASK_SWARM, parm, 3) } } }
public event_npc_death(ent, killer) { if ( get_npc_id(ent) == g_npc_id ) { g_oberons_alive-- new k, kname[33], biggest_damage = 0, biggest_damage_id for (k=1; k<33; k++) { if ( g_damage_done[k] > biggest_damage ) { biggest_damage = g_damage_done[k]; biggest_damage_id = k; } } get_user_name(biggest_damage_id, kname, 32) if (g_oberons_alive ) { new name[33] get_user_name(killer, name, 32) client_print(0, print_chat, "%s Killer: %s | Damager: %s ( %i )", TITLE, name, kname, biggest_damage) #if defined WAR3FT_SUPPORT for (new i =0; i < 33; i++ ) if ( is_user_connected(i) ) give_user_xp(i, WIN_GAME, false, true, "GIFT") #endif } else { new name[33] get_user_name(killer, name, 32) client_print(0, print_chat, "%s Game end, thank you! Killer: %s | Damager: %s ( %i )", TITLE, name, kname, biggest_damage) client_print(0, print_chat, "Next map: %s", MAP_NEXT) set_task(15.0, "changelevel_pls") #if defined WAR3FT_SUPPORT for (new i =0; i < 33; i++ ) if ( is_user_connected(i) ) give_user_xp(i, WIN_GAME, false, true, "GIFT") #endif } return } // add award later! g_created_zombie-- }
public changelevel_pls() { server_cmd("changelevel ^"%s^"", MAP_NEXT) }
public npc_start(ent) { ent -= TASK_INIT if ( !pev_valid(ent) ) return g_incast[ent] = false set_npc_events(ent, EVENT_AGRESSION) set_task(random_float(1.0, 10.0), "oberon_spell_casting", ent + TASK_SPELL ) }
public oberon_reset(ent) { ent -= TASK_RESET if ( !pev_valid(ent) ) return set_npc_events(ent, EVENT_AGRESSION) g_incast[ent] = false; task_exists(ent+TASK_HOOKINGDOWN) ? remove_task(ent+TASK_HOOKINGDOWN):0; }
public oberon_spell_casting(ent) { if ( ent > TASK_SPELL ) ent -= TASK_SPELL if ( !pev_valid(ent) || !pev(ent, pev_health)) return set_task(random_float(1.0, 5.0), "oberon_spell_casting", ent + TASK_SPELL ) if ( g_incast[ent] ) { return } npc_reset_animation(ent) npc_reset_move(ent) new SPELL_ID = random_num(0,7) switch (SPELL_ID) { case 0 : return case 1 : { if ( oberon_skill_attack2_check(ent) ) { g_incast[ent] = true set_task(0.3, "oberon_skill_attack2", ent + TASK_SPELL) } } case 2: { g_incast[ent] = true set_task(0.3, "oberon_skill_hole", ent + TASK_SPELL) } case 3: { g_incast[ent] = true set_task(0.3, "oberon_skill_impale", ent + TASK_SPELL) } case 4: { g_incast[ent] = true if ( g_already_bombing ) set_task(0.3, "oberon_skill_impale", ent + TASK_SPELL) else { g_already_bombing = true set_task(0.3, "oberon_skill_bombs", ent + TASK_SPELL) } } case 5: { g_incast[ent] = true set_task(0.3, "oberon_skill_hole", ent + TASK_SPELL) } case 6..7: { g_incast[ent] = true set_task(0.3, "oberon_skill_hole", ent + TASK_SPELL) //bad tests... not working yet! set_task(0.3, "oberon_skill_jump", ent + TASK_SPELL) } } } /* public oberon_skill_jump(ent) { if ( ent > TASK_SPELL ) ent -= TASK_SPELL if ( !pev_valid(ent) ) { remove_task(ent + TASK_SPELL) return } set_npc_events(ent, EVENT_CUSTOM) new Float:timed; if ( !g_berserker[ent] ) { emit_sound(ent, CHAN_BODY, oberon_jump_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) timed = ANIMATION_ATTACK_3_TIME npc_set_animation(ent, ANIMATION_ATTACK_3, 0.01) } else { emit_sound(ent, CHAN_BODY, oberon_bjump_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) timed = ANIMATION_ATTACK_3_BERSERKER_TIME npc_set_animation(ent, ANIMATION_ATTACK_3_BERSERKER, 0.01) } static Float:target[3] pev(get_npc_target(ent), pev_origin, target) npc_set_move(ent, target) set_task(0.01, "hookingup", ent+TASK_HOOKINGUP, _, _, "b") set_task(2.0, "hookingdown", ent+TASK_HOOKINGDOWN) set_task(2.0, "oberon_jump_damage", ent+TASK_SPELL) set_task(timed, "oberon_reset", ent + TASK_RESET) }
public oberon_jump_damage(ent) { if ( ent > TASK_SPELL ) ent -= TASK_SPELL if ( !pev_valid(ent) ) return static Float:Ent_orig[3], Float:Enemy[3], Float:Aim[3] velocity_by_aim(ent, 300, Aim) xs_vec_mul_scalar(Aim, 3.0, Aim) ; Aim[2] = 300.0 pev(ent, pev_origin, Ent_orig) if ( !g_berserker[ent] ) { emit_sound(ent, CHAN_BODY, oberon_jumpdamage_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) } else { emit_sound(ent, CHAN_BODY, oberon_bjumpdamage_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) } for(new i = 1; i <= get_maxplayers(); i++) { if(!is_user_alive(i)) continue pev(i, pev_origin, Enemy) if(get_distance_f(Ent_orig, Enemy) <= 300.0) { set_pev(i, pev_velocity, Aim) npc_do_damage(ent, i, OBERON_ATTACK2_DAMAGE) ScreenShake(i, ((1<<12) * 8), ((2<<12) * 7)) ScreenFade(i, 6, 255, 0, 0, 90) } } }
public hookingup(ent) { ent -= TASK_HOOKINGUP if ( !pev_valid(ent) ) { remove_task( ent+TASK_HOOKINGUP ) return } static Float:Origin[3] pev(ent, pev_origin, Origin) Origin[2] += 1000.0 hook_ent2(ent, Origin, 1000.0) }
public hookingdown(ent) { ent -= TASK_HOOKINGDOWN remove_task(ent+TASK_HOOKINGUP) set_task(0.01, "hookingdown2", ent+TASK_HOOKINGDOWN, _, _, "b") }
public hookingdown2(ent) { ent -= TASK_HOOKINGDOWN static Float:target[3] pev(get_npc_target(ent), pev_origin, target) hook_ent2(ent, target, 1000.0) } */
public oberon_skill_bombs(ent) { if ( ent > TASK_SPELL ) ent -= TASK_SPELL if ( !pev_valid(ent) ) { remove_task(ent + TASK_SPELL) return } set_npc_events(ent, EVENT_CUSTOM) new Float:timed; if ( !g_berserker[ent] ) { emit_sound(ent, CHAN_BODY, oberon_attack2_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) timed = ANIMATION_ATTACK_BOMB_TIME npc_set_animation(ent, ANIMATION_ATTACK_BOMB, timed) } else { emit_sound(ent, CHAN_BODY, oberon_berserk_attack2_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) timed = ANIMATION_ATTACK_BOMB_BERSERKER_TIME npc_set_animation(ent, ANIMATION_ATTACK_BOMB_BERSERKER, timed) } set_task(3.0, "do_skill_bomb", ent+TASK_BOMBING, _, _, "b") set_task(timed-0.1, "stop_skill_bomb", ent+TASK_RESET) set_task(timed, "oberon_reset", ent + TASK_RESET) }
public stop_skill_bomb(ent) { if ( ent > TASK_RESET ) ent -= TASK_RESET remove_task(ent + TASK_BOMBING) g_already_bombing = false }
public do_skill_bomb(ent) { if ( ent > TASK_BOMBING ) ent -= TASK_BOMBING if ( !pev_valid(ent) ) { remove_task(ent + TASK_BOMBING) return } static Float:StartOrigin[3], Float:TempOrigin[6][3], Float:VicOrigin[6][3], Float:Random1 pev(ent, pev_origin, StartOrigin) StartOrigin[2] += 50 emit_sound(ent, 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 do_hook_bomb_up(arg[4]) { static ent, Float:TempOrigin[3] ent = arg[0] if ( !pev_valid(ent) ) { remove_task(TASK_HOOKINGUP) return } TempOrigin[0] = float(arg[1]) TempOrigin[1] = float(arg[2]) TempOrigin[2] = float(arg[3]) hook_ent2(ent, TempOrigin, 500.0) } 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] if ( !pev_valid(ent) ) { remove_task(TASK_HOOKINGUP) return } VicOrigin[0] = float(arg[1]) VicOrigin[1] = float(arg[2]) VicOrigin[2] = float(arg[3]) hook_ent2(ent, VicOrigin, 500.0) } public bomb_explode(ent) { remove_task(TASK_HOOKINGUP) remove_task(TASK_HOOKINGDOWN) if ( !pev_valid(ent) ) { return } 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(30.0, 60.0) if(g_berserker[ent]) Damage *= 2.0 npc_do_damage(ent, i, Damage)//ExecuteHam(Ham_TakeDamage, i, 0, i, Damage, DMG_BLAST) ScreenShake(i, ((1<<12) * 3), ((2<<12) * 3)) ScreenFade(i, 3, 255, 255, 0, 90) } } remove_entity(ent) }
public oberon_skill_impale(ent) { if ( ent > TASK_SPELL ) ent -= TASK_SPELL if ( !pev_valid(ent) ) return static Float:Origin[3], Float:Angles[3] entity_get_vector(ent, EV_VEC_origin, Origin) entity_get_vector(ent, EV_VEC_angles, Angles) //EV_VEC_v_angle set_npc_events(ent, EVENT_CUSTOM) new Float:timed; if ( !g_berserker[ent] ) { emit_sound(ent, CHAN_BODY, oberon_attack2_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) timed = ANIMATION_ATTACK_2_TIME npc_set_animation(ent, ANIMATION_ATTACK_2, timed) } else { emit_sound(ent, CHAN_BODY, oberon_berserk_attack2_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) timed = ANIMATION_ATTACK_2_BERSERKER_TIME npc_set_animation(ent, ANIMATION_ATTACK_2_BERSERKER, timed) } set_task(timed, "oberon_reset", ent + TASK_RESET) //set_task(timed*0.3, "_oberon_skill_attack2", ent + TASK_SPELL) Origin[2] -= 15 for(new i=1; i < 10; i++) { make_tentacle(ent, i, Origin, Angles) } }
public make_tentacle(id, i, Float:Origin[3], Float:Angles[3])//), Float:Angles[3]) { new ent = create_entity("info_target")
drop_to_floor(ent) Origin[2] += 5.0 entity_set_origin(ent, Origin) entity_set_vector(ent, EV_VEC_v_angle, Angles) //new Float: flAngles[ 3 ]; //pev( id, pev_angles, flAngles ); new Float: ConAngles[ 3 ]; ConAngles[ 1 ] = Angles[ 1 ]; ConAngles[ 2 ] = Angles[ 2 ]; entity_set_vector( ent, EV_VEC_angles, ConAngles ); //set_pev(ent, pev_owner, id) set_pev(ent, pev_v_angle, ConAngles) // addon set_pev(ent, pev_angles, ConAngles) set_pev(ent, pev_view_ofs, ConAngles) entity_set_string(ent,EV_SZ_classname, "tentacle") entity_set_model(ent, skill_tentacle[0]) entity_set_int(ent, EV_INT_solid, SOLID_NOT) entity_set_int(ent, EV_INT_movetype, MOVETYPE_FLY) 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, 2.0) entity_set_int(ent, EV_INT_sequence, 0) set_pev(ent, pev_rendermode, kRenderTransAdd) set_pev(ent, pev_renderamt, 255.0) static Float:Direction[3], Float:Endirection[3] angle_vector(ConAngles, ANGLEVECTOR_FORWARD, Direction); xs_vec_mul_scalar(Direction, 190.0*i, Direction) Endirection[ 0 ] = Direction[ 0 ] Endirection[ 1 ] = Direction[ 1 ] Endirection[ 2 ] = Direction[ 2 ] set_pev(ent, pev_velocity, Endirection) set_task(0.3, "tentacle_change", ent+TENACLE_TASK) }
public tentacle_change(ent) { ent -= TENACLE_TASK if ( !pev_valid(ent) ) return entity_set_model(ent, skill_tentacle[1]) entity_set_string(ent,EV_SZ_classname, "tentacle2") entity_set_int(ent, EV_INT_solid, SOLID_TRIGGER) entity_set_int(ent, EV_INT_movetype, MOVETYPE_PUSH) new Float:Direction[3] = { 0.0, 0.0, 0.0 } set_pev(ent, pev_velocity, Direction) new Float:maxs[3] = {26.0,26.0,56.0} new Float:mins[3] = {-26.0,-26.0,-56.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, kRenderNormal) set_pev(ent, pev_renderamt, 255.0) set_task(1.0, "tentacle_change2", ent+TENACLE_TASK) }
public tentacle_change2(ent) { ent -= TENACLE_TASK if ( !pev_valid(ent) ) return entity_set_model(ent, skill_tentacle[2]) entity_set_int(ent, EV_INT_solid, SOLID_NOT) entity_set_string(ent,EV_SZ_classname, "tentacle") 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) set_task(0.8, "remove_tentacle", ent+TENACLE_TASK) }
public remove_tentacle(ent) { ent -= TENACLE_TASK if ( !pev_valid(ent) ) return remove_entity(ent) }
public fw_tentacle_touch(tentacle, touch) { if(is_user_alive(touch)) { static Float:CurTime CurTime = get_gametime()
if(CurTime - 0.1 > g_poison_touch[touch]) { /*ExecuteHamB(Ham_TakeDamage, touch, ent, touch, 5.0, DMG_BLAST)*/ static ent ent = find_ent_by_owner(-1, "weapon_knife", touch) npc_do_damage(ent, touch, 35.0) g_poison_touch[touch] = CurTime new Float:vVelocity[3]; entity_get_vector( touch, EV_VEC_velocity, vVelocity );
vVelocity[0] = random_float( 30.0, 90.0 ); vVelocity[1] = random_float( 30.0, 90.0 ); vVelocity[2] = random_float( 250.0, 500.0 );
entity_set_vector( touch, EV_VEC_velocity, vVelocity ); } } }
public oberon_skill_hole(ent) { if ( ent > TASK_SPELL ) ent -= TASK_SPELL if ( !pev_valid(ent) ) return set_npc_events(ent, EVENT_CUSTOM) new Float:timed; if ( !g_berserker[ent] ) { timed = ANIMATION_ATTACK_HOLE_TIME npc_set_animation(ent, ANIMATION_ATTACK_HOLE, timed) } else { timed = ANIMATION_ATTACK_HOLE_BERSERKER_TIME npc_set_animation(ent, ANIMATION_ATTACK_HOLE_BERSERKER, timed) } emit_sound(ent, CHAN_BODY, oberon_attack_hole_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) set_task(timed, "oberon_reset", ent + TASK_RESET) set_task(5.0, "_oberon_skill_hole", ent + TASK_SPELL) new Hole = create_entity("info_target") static Float:Origin[3] pev(ent, pev_origin, Origin) Origin[2] -= 10.0 entity_set_origin(Hole, Origin) entity_set_string(Hole,EV_SZ_classname, "hole_hook") entity_set_model(Hole, oberon_hole_effect) entity_set_int(Hole, EV_INT_solid, SOLID_NOT) entity_set_int(Hole, 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(Hole, mins, maxs) entity_set_float(Hole, EV_FL_animtime, get_gametime()) entity_set_float(Hole, EV_FL_framerate, 1.0) entity_set_int(Hole, EV_INT_sequence, 0) set_pev(Hole, pev_rendermode, kRenderTransAdd) set_pev(Hole, pev_renderamt, 255.0) drop_to_floor(Hole) static arg[2] for(new i = 0; i < get_maxplayers(); i++) { if(is_user_alive(i) && entity_range(ent, i) <= 1000.0) { arg[0] = ent arg[1] = i set_task(0.01, "do_hook_player", 512512, arg, sizeof(arg), "b") } } }
public do_hook_player(arg[2]) // thnx to dias { static Float:Origin[3], Float:Speed, ent, target ent = arg[0] target = arg[1] if ( !pev_valid(ent) || !is_user_connected(target)) { remove_task(512512) return } pev(ent, pev_origin, Origin) Speed = (1000.0 / entity_range(ent, target)) * 75.0 hook_ent2(target, Origin, Speed) } public hook_ent2(ent, Float:VicOrigin[3], Float:speed)//credits to dias { 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 _oberon_skill_hole(ent) { if ( ent > TASK_SPELL ) ent -= TASK_SPELL static hole hole = find_ent_by_class(-1, "hole_hook") if ( pev_valid(hole ) ) remove_entity(hole) remove_task(512512) if ( !pev_valid(ent) ) return oberon_berser_effects(ent) static Float:Ent_orig[3], Float:Enemy[3] pev(ent, pev_origin, Ent_orig) for(new i = 1; i <= get_maxplayers(); i++) { if(!is_user_alive(i)) continue pev(i, pev_origin, Enemy) if(get_distance_f(Ent_orig, Enemy) <= 250.0) { npc_do_damage(ent, i, OBERON_ATTACK2_DAMAGE) ScreenShake(i, ((1<<12) * 8), ((2<<12) * 7)) ScreenFade(i, 6, 255, 0, 0, 90) } } }
public oberon_skill_attack2(ent) { if ( ent > TASK_SPELL ) ent -= TASK_SPELL if ( !pev_valid(ent) ) return set_npc_events(ent, EVENT_CUSTOM) new Float:timed; if ( !g_berserker[ent] ) { emit_sound(ent, CHAN_BODY, oberon_attack2_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) timed = ANIMATION_ATTACK_2_TIME npc_set_animation(ent, ANIMATION_ATTACK_2, timed) } else { emit_sound(ent, CHAN_BODY, oberon_berserk_attack2_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) timed = ANIMATION_ATTACK_2_BERSERKER_TIME npc_set_animation(ent, ANIMATION_ATTACK_2_BERSERKER, timed) } set_task(timed, "oberon_reset", ent + TASK_RESET) set_task(timed*0.3, "_oberon_skill_attack2", ent + TASK_SPELL) }
public _oberon_skill_attack2(ent) { if ( ent > TASK_SPELL ) ent -= TASK_SPELL if ( !pev_valid(ent) ) return static Float:Ent_orig[3], Float:Enemy[3], Float:Aim[3] velocity_by_aim(ent, 300, Aim) xs_vec_mul_scalar(Aim, 3.0, Aim) ; Aim[2] = 300.0 pev(ent, pev_origin, Ent_orig) for(new i = 1; i <= get_maxplayers(); i++) { if(!is_user_alive(i)) continue pev(i, pev_origin, Enemy) if(get_distance_f(Ent_orig, Enemy) <= 250.0) { set_pev(i, pev_velocity, Aim) npc_do_damage(ent, i, OBERON_ATTACK2_DAMAGE) ScreenShake(i, ((1<<12) * 8), ((2<<12) * 7)) ScreenFade(i, 6, 255, 0, 0, 90) } } }
stock oberon_skill_attack2_check(ent) { static Float:Ent_orig[3], Float:Enemy[3] pev(ent, pev_origin, Ent_orig) for(new i = 1; i <= get_maxplayers(); i++) { if(!is_user_alive(i)) continue pev(i, pev_origin, Enemy) if(get_distance_f(Ent_orig, Enemy) <= 250.0) { return 1 } } return 0 }
stock ScreenFade(id, Timer, Colors1, Colors2, Colors3, Alpha) { if(!is_user_connected(id)) return message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("ScreenFade"), _, id); write_short((1<<12) * Timer) write_short(1<<12) write_short(0) write_byte(Colors1) write_byte(Colors2) write_byte(Colors3) write_byte(Alpha) message_end() }
stock ScreenShake(id, duration, frequency) { if(!is_user_alive(id)) return message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("ScreenShake"), _, id); write_short(1<<14) write_short(duration) write_short(frequency) message_end(); }
public plugin_precache() { Check_Map() g_class_modelindex = precache_model(g_class_pmodel); exp_spr_id = precache_model("sprites/zerogxplode.spr"); precache_model(oberon_bomb_model) precache_model(oberon_hole_effect) precache_model(oberon_knife_effect) g_npc_id = register_npc(CLASS_NAME, CLASS_TIP) precache_sound(oberon_appear_sound) precache_sound(oberon_attack1_sound) precache_sound(oberon_attack2_sound) precache_sound(oberon_berserk_attack1_sound) precache_sound(oberon_berserk_attack2_sound) precache_sound(oberon_berserker_sound) precache_sound(oberon_attack_hole_sound) precache_sound(oberon_bomb_sound) precache_sound(oberon_jump_sound) precache_sound(oberon_jumpdamage_sound) precache_sound(oberon_bjump_sound) precache_sound(oberon_bjumpdamage_sound)
for(new i = 0; i < sizeof(skill_tentacle); i++) { engfunc(EngFunc_PrecacheModel, skill_tentacle[i]) } if(g_npc_id != -1) { set_npc_data(g_npc_id, DATA_HEALTH, OBERON_HEALTH) set_npc_data(g_npc_id, DATA_SPEED, 250.0) set_npc_data(g_npc_id, DATA_ATTACK, 99.0) set_npc_data(g_npc_id, DATA_KNOCKBACK, 0.0) set_npc_data(g_npc_id, DATA_ANI_DEATH_HEADSHOT, 20.0) set_npc_data(g_npc_id, DATA_ANI_DEATH_NORMAL_SIMPLE, 20.0) set_npc_data(g_npc_id, DATA_ANI_DEATH_NORMAL_BACK, 20.0) set_npc_data(g_npc_id, DATA_ANI_DEATH_NORMAL_FORWARD, 20.0) set_npc_data(g_npc_id, DATA_ANI_DEATH_NORMAL_SPECIAL, 20.0) set_npc_data(g_npc_id, DATA_ANI_ATTACKED, 2.0) set_npc_data(g_npc_id, DATA_ANI_IDLE, 2.0) set_npc_data(g_npc_id, DATA_ANI_MADNESS, 2.0)//10.0) set_npc_data(g_npc_id, DATA_ANI_ATTACK, 6.0) set_npc_data(g_npc_id, DATA_ANI_RUN, 4.0) set_npc_data(g_npc_id, DATA_ANI_WALK, 3.0) set_npc_data(g_npc_id, DATA_EVENT, EVENT_SLEEP) set_npc_data(g_npc_id, DATA_ATTACK_RELOADING, 2.7) set_npc_data(g_npc_id, DATA_MODEL_INDEX, float(g_class_modelindex)) set_npc_data(g_npc_id, DATA_ATTACK_WAITTIME, OBERON_ATTACK_WAITIME) set_npc_data(g_npc_id, DATA_ATTACK_DISTANCE, 250.0) // New! Set Size! set_npc_data(g_npc_id, DATA_MIN_MAX_XY_MIN, -100.0) set_npc_data(g_npc_id, DATA_MIN_MAX_XY_MAX, 100.0) set_npc_data(g_npc_id, DATA_MIN_MAX_Z_MIN, -30.0) set_npc_data(g_npc_id, DATA_MIN_MAX_Z_MAX, 100.0)
// Berserker ability.. set_npc_data(g_npc_id, DATA_MADANI_ATTACK, 14.0) set_npc_data(g_npc_id, DATA_MADANI_ATTACK_TIME, 1.8) set_npc_data(g_npc_id, DATA_MADANI_ATTACK_WAIT, 2.0) set_npc_data(g_npc_id, DATA_MADANI_IDLE, 12.0) set_npc_data(g_npc_id, DATA_MADANI_WALK, 13.0) set_npc_data(g_npc_id, DATA_MADANI_RUN, 13.0) set_npc_model(g_npc_id, g_class_pmodel) } }
public Check_Map() { new MapName[64] get_mapname(MapName, 63) if(contain(MapName, "npc_dangerous" ) == -1) { server_cmd("mp_roundtime 6") server_cmd("mp_autoteambalance 1") server_cmd("mp_limitteams 1") pause("ad") } else { server_cmd("mp_roundtime 9") server_cmd("mp_autoteambalance 0") server_cmd("mp_limitteams 0") new bz = FindBuyZones( ) new Float:absmin[3] = {-8191.0, -8191.0, -8191.0} new Float:absmax[3] = {8191.0, 8191.0, 8191.0} if ( !bz ) { new buyzone = create_entity("func_buyzone") // create buyzone entity and set it max size of map DispatchSpawn(buyzone) entity_set_size(buyzone, absmin, absmax) } else { entity_set_size(bz, absmin, absmax) } } }
public oberon_berser_effects(ent2) { if ( !g_berserker[ent2] ) return 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+TASK_EFFECT) }
public remove_knife_effect(ent) { ent -= TASK_EFFECT if ( pev_valid(ent) ) remove_entity(ent) }
|