Junior Member
Join Date: May 2011
Location: Turkey
|
07-03-2012
, 14:05
Compile errors...
|
#1
|
I tried to compile but had two errors. Can someone help me to fix?
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)
}
These are errors.
[IMG]http://img51.**************/img51/6554/adszwhh.jpg[/IMG]
This is engine.inc and others :
Last edited by aaa131; 07-03-2012 at 14:53.
|
|