hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2025.08.17. 23:09



Jelenlévő felhasználók

Jelenleg 331 felhasználó van jelen :: 2 regisztrált, 0 rejtett és 329 vendég

A legtöbb felhasználó (2883 fő) 2025.07.30. 16:00-kor tartózkodott itt.

Regisztrált felhasználók: Bing [Bot], Majestic-12 [Bot]az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása Hozzászólás a témához  [13 hozzászólás ]  Oldal12Következő
Szerző Üzenet
 Hozzászólás témája: Oldal átalakito
HozzászólásElküldve:2012.01.25. 10:57 
Offline
Őstag
Avatar

Csatlakozott:2011.11.15. 16:29
Hozzászólások:1142
Megköszönt másnak: 8 alkalommal
Megköszönték neki: 24 alkalommal
Az oldal átalakitóját használtam és ezt irta ki :


Welcome to the AMX Mod X 1.8.1-300 Compiler.
Copyright (c) 1997-2006 ITB CompuPhase, AMX Mod X Team

files/4711353/4711353.sma(30) : error 037: invalid string (possibly non-terminated string)
files/4711353/4711353.sma(31) : error 001: expected token: "}", but found "new"

2 Errors.
Could not locate output file 4711353.amx (compile failed).

Mi ilyenkor a hiba?!

_________________
[url=http://www.gametracker.com/server_info/188.227.227.114:27286/][img]http://cache.www.gametracker.com/server_info/188.227.227.114:27286/b_350_20_323957_202743_F19A15_111111.png[/img][/url]


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Oldal átalakito
HozzászólásElküldve:2012.01.25. 10:59 
Offline
Őstag
Avatar

Csatlakozott:2011.11.15. 16:29
Hozzászólások:1142
Megköszönt másnak: 8 alkalommal
Megköszönték neki: 24 alkalommal
a másiknál meg ezt irta : [spoiler]Welcome to the AMX Mod X 1.8.1-300 Compiler.
Copyright (c) 1997-2006 ITB CompuPhase, AMX Mod X Team

files/7015962/7015962.sma(152) : error 088: number of arguments does not match definition

1 Error.
Could not locate output file 7015962.amx (compile failed)[/spoiler]

_________________
[url=http://www.gametracker.com/server_info/188.227.227.114:27286/][img]http://cache.www.gametracker.com/server_info/188.227.227.114:27286/b_350_20_323957_202743_F19A15_111111.png[/img][/url]


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Oldal átalakito
HozzászólásElküldve:2012.01.25. 11:06 
Offline
Imperátor
Avatar

Csatlakozott:2009.04.21. 09:33
Hozzászólások:3991
Megköszönt másnak: 5 alkalommal
Megköszönték neki: 135 alkalommal
SMA?

_________________
Kód:
I'm back

Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Oldal átalakito
HozzászólásElküldve:2012.01.25. 14:45 
Offline
Tiszteletbeli

Csatlakozott:2010.02.04. 19:12
Hozzászólások:3528
Megköszönt másnak: 26 alkalommal
Megköszönték neki: 180 alkalommal
na ja, így biztos tudjuk -.-

_________________
http://www.ebateam.eu/


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Oldal átalakito
HozzászólásElküldve:2012.01.25. 14:55 
Offline
Őstag
Avatar

Csatlakozott:2011.11.15. 16:29
Hozzászólások:1142
Megköszönt másnak: 8 alkalommal
Megköszönték neki: 24 alkalommal
SMA 1 :
[spoiler]/*================================================================================

-----------------------------------
-*- [ZP] Dragon Zombie -*-
-----------------------------------

~~~~~~~~~~~~~~~
- Description -
~~~~~~~~~~~~~~~

This plugin add new class zombie: Dragon Zombie.

================================================================================*/

#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>
#include <cstrike>
#include <fun>
#include <xs>

new const ball_name[] = "dragon_ball";
new const ball_model[] = "models/w_hiddentail.mdl";
new const ball_firespritemdl[] = "sprites/flame2.spr";
new const ball_spriteexplodemdl[] = "sprites/zerogxplode.spr"

new const zclass_name[] = { "Dragon Zombie" } // name
new const zclass_info[] = { "- Tuzgolyo dobasa[\rG]} // description
new const zclass_model[] = { "zombie_source1" } // model
new const zclass_clawmodel[] = { "v_knife_spider.mdl" } // claw model
const zclass_health = 2000 // health
const zclass_speed = 290 // speed
const Float:zclass_gravity = 1.0 // gravity
const Float:zclass_knockback = 1.0 // knockback

new sprFlame, sprSmoke

new g_zclassdragon
new cvar_dragondmg , cvar_dragondelay , cvar_dragonvelocity , cvar_dragonballhealth , cvar_dragonballradius , cvar_dragonballpower , cvar_burndmg , cvar_burntime , cvar_burn
new g_msgScreenShake , g_smoke , sTrail , ball_firesprite , ball_spriteexplode , g_explode[512] , g_can[33] , g_msgScoreInfo , g_roundend , bool:g_AlreadyBurn[ 33 ] , Time[ 33 ]

public plugin_init()
{
register_plugin("[ZP] Zombie Class: Dragon Zombie", "0.1", "=)")

cvar_dragondelay = register_cvar("zp_classdragon_delay","15")
cvar_dragondmg = register_cvar("zp_classdragonball_dmg","70.0")
cvar_dragonvelocity = register_cvar("zp_classdragonball_velocity","600")
cvar_dragonballhealth = register_cvar("zp_classdragonball_health","6")
cvar_dragonballradius = register_cvar("zp_classdragonball_radius","300.0")
cvar_dragonballpower = register_cvar ( "zp_classdragonball_power", "800" )
cvar_burn = register_cvar ( "zp_classdragonball_enable", "1" )
cvar_burntime = register_cvar ( "zp_classdragonball_burntime", "15" )
cvar_burndmg = register_cvar ( "zp_classdragonball_burndmg", "3" )

register_touch(ball_name, "worldspawn", "touchWorld")
register_touch(ball_name, "func_wall", "touchWorld")
register_touch(ball_name, "func_door", "touchWorld")
register_touch(ball_name, "func_door_rotating", "touchWorld")
register_touch(ball_name, "func_wall_toggle", "touchWorld")
register_touch(ball_name, "func_breakable", "touchWorld")
register_think(ball_name,"ball_think")

register_clcmd("drop","dragon_cmd")
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")

RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")

g_msgScoreInfo = get_user_msgid("ScoreInfo")
g_msgScreenShake = get_user_msgid("ScreenShake")

}

public plugin_precache()
{
precache_model(ball_model)
g_smoke = precache_model( "sprites/steam1.spr" );
sTrail = precache_model("sprites/laserbeam.spr")
ball_firesprite = precache_model(ball_firespritemdl)
ball_spriteexplode = precache_model(ball_spriteexplodemdl)

sprFlame = precache_model( "sprites/flame.spr" )
sprSmoke = precache_model( "sprites/black_smoke3.spr" )

g_zclassdragon = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
}
public dragon_cmd( id )
{
if( !is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != g_zclassdragon || zp_get_user_nemesis(id))
return PLUGIN_CONTINUE;

if(g_can[id])
{
client_print(id,print_center,"Most nem tudod hasznalni , varj meg %d masodpercet.",g_can[id])
return PLUGIN_HANDLED;
}

static Float:origin[3], Float:angles[3], Float:v_forward[3], Float:v_right[3], Float:v_up[3], Float:gun_position[3], Float:player_origin[3], Float:player_view_offset[3];
static Float:OriginX[3]
pev(id, pev_v_angle, angles);
pev(id, pev_origin, OriginX);
engfunc(EngFunc_MakeVectors, angles);

global_get(glb_v_forward, v_forward);
global_get(glb_v_right, v_right);
global_get(glb_v_up, v_up);

//m_pPlayer->GetGunPosition( ) = pev->origin + pev->view_ofs
pev(id, pev_origin, player_origin);
pev(id, pev_view_ofs, player_view_offset);
xs_vec_add(player_origin, player_view_offset, gun_position);

xs_vec_mul_scalar(v_forward, 13.0, v_forward);
xs_vec_mul_scalar(v_right, 0.0, v_right);
xs_vec_mul_scalar(v_up, 5.0, v_up);

xs_vec_add(gun_position, v_forward, origin);
xs_vec_add(origin, v_right, origin);
xs_vec_add(origin, v_up, origin);

new Float:StartOrigin[3]

StartOrigin[0] = origin[0];
StartOrigin[1] = origin[1];
StartOrigin[2] = origin[2];


new Float:fVelocity[3] , Float:flOrigin[3] , Float:flAngle[3]
pev(id,pev_origin,flOrigin)
pev(id,pev_angles,flAngle)

new ball = create_entity("info_target")

if (!ball) return PLUGIN_HANDLED

g_explode[ball] = 0

entity_set_string(ball, EV_SZ_classname, ball_name)

entity_set_model(ball, ball_model)

entity_set_origin(ball, StartOrigin)

entity_set_vector(ball, EV_VEC_angles, flAngle)

new Float:MinBox[3] = {-1.0, -1.0, -1.0}
new Float:MaxBox[3] = {1.0, 1.0, 1.0}
entity_set_vector(ball, EV_VEC_mins, MinBox)
entity_set_vector(ball, EV_VEC_maxs, MaxBox)

entity_set_int(ball, EV_INT_solid, SOLID_SLIDEBOX)

entity_set_int(ball, EV_INT_movetype, MOVETYPE_BOUNCE)

entity_set_edict(ball, EV_ENT_owner, id)

entity_set_int(ball, EV_INT_effects, EF_BRIGHTLIGHT)

VelocityByAim(id, get_pcvar_num(cvar_dragonvelocity ), fVelocity)
entity_set_vector(ball , EV_VEC_velocity, fVelocity)

message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW) // Temporary entity ID
write_short(ball) // Entity
write_short(sTrail) // Sprite index
write_byte(10) // Life
write_byte(3) // Line width
write_byte(255) // Red
write_byte(150) // Green
write_byte(20) // Blue
write_byte(255) // Alpha
message_end()

UTIL_PlayPlayerAnimation(id,10)
UTIL_PlayWeaponAnimation(id,8)

g_can[id] = get_pcvar_num(cvar_dragondelay)
set_task(1.0,"ability_zero",id)

entity_set_float(ball, EV_FL_health , get_pcvar_float(cvar_dragonballhealth))

entity_set_float(ball, EV_FL_nextthink, get_gametime() + 0.1)

return PLUGIN_HANDLED;
}

public touchWorld(ball, world) {

new Float:v[3]
entity_get_vector(ball, EV_VEC_velocity, v)

v[0] = (v[0] * 0.85)
v[1] = (v[1] * 0.85)
v[2] = (v[2] * 0.85)
entity_set_vector(ball, EV_VEC_velocity, v)

return PLUGIN_HANDLED
}

public event_round_start()
{
new iEnt = FM_NULLENT;
while( (iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", ball_name)) > 0 )
{
engfunc(EngFunc_RemoveEntity,iEnt)
}

for(new i;i<=32;i++)
{
remove_task(i)
g_can[i] = 0
Time[ i ] = 0
g_AlreadyBurn[ i] = false
}

g_roundend = 0
}

public ball_think(ball)
{
if(!is_valid_ent(ball))
return;

new Float:oldangles[3],Float:angles[3]
pev(ball,pev_angles,oldangles)
angles[0] = oldangles[0] + random_float(20.0,100.0)
angles[1] = oldangles[1] + random_float(10.0,80.0)
angles[2] = oldangles[2] + random_float(10.0,80.0)
set_pev(ball,pev_angles,angles)

new Float:v[3]
entity_get_vector(ball, EV_VEC_velocity, v)

if(v[2] < 40.0 && v[1] < 40.0 && v[0] < 40.0)
{
if(!g_explode[ball])
{
set_task(0.5,"firesprite_ball",ball)
g_explode[ball] = 1
}

entity_set_float(ball, EV_FL_health, entity_get_float(ball,EV_FL_health) - 0.2)

if(entity_get_float(ball,EV_FL_health) <= 0.0)
{
ball_explode(ball)
remove_entity(ball)
g_explode[ball] = 0
return;
}
}

entity_set_float(ball, EV_FL_nextthink, get_gametime() + 0.1)

}

public firesprite_ball(ball)
{
if(!is_valid_ent(ball))
return;

new Float:flOrigin[3]
pev(ball,pev_origin,flOrigin)

engfunc ( EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, flOrigin, 0 )
write_byte ( TE_SPRITE )
engfunc ( EngFunc_WriteCoord, flOrigin [ 0 ] )
engfunc ( EngFunc_WriteCoord, flOrigin [ 1 ] )
engfunc ( EngFunc_WriteCoord, flOrigin [ 2 ] + 45.0 )
write_short ( ball_firesprite )
write_byte ( 5 )
write_byte ( 185 )
message_end ( )

message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
write_byte( TE_SMOKE );
engfunc ( EngFunc_WriteCoord, flOrigin [ 0 ] )
engfunc ( EngFunc_WriteCoord, flOrigin [ 1 ] )
engfunc ( EngFunc_WriteCoord, flOrigin [ 2 ] + 45.0 )
write_short( g_smoke );
write_byte( 10 );
write_byte( 10 );
message_end();

if(entity_get_float(ball,EV_FL_health) >= 1.0) set_task(0.5,"firesprite_ball",ball)
}
public ball_explode ( Entity )
{
if ( Entity < 0 )
return

static Float:flOrigin [ 3 ]
pev ( Entity, pev_origin, flOrigin )

message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_EXPLOSION) // Temporary entity ID
engfunc(EngFunc_WriteCoord, flOrigin[0]) // engfunc because float
engfunc(EngFunc_WriteCoord, flOrigin[1])
engfunc(EngFunc_WriteCoord, flOrigin[2])
write_short(ball_spriteexplode) // Sprite index
write_byte(50) // Scale
write_byte(15) // Framerate
write_byte(0) // Flags
message_end()

new iOwner = entity_get_edict ( Entity, EV_ENT_owner )

for ( new i = 1; i <= 32 ; i++ )
{
if ( !is_user_alive ( i ) || zp_get_user_zombie( i ))
continue

new Float:flVictimOrigin [ 3 ]
pev ( i, pev_origin, flVictimOrigin )

new Float:flDistance = get_distance_f ( flOrigin, flVictimOrigin )

if ( flDistance <= get_pcvar_float(cvar_dragonballradius) )
{
static Float:flSpeed
flSpeed = get_pcvar_float ( cvar_dragonballpower )

static Float:flNewSpeed
flNewSpeed = flSpeed * ( 1.0 - ( flDistance / get_pcvar_float(cvar_dragonballradius) ) )

static Float:flVelocity [ 3 ]
get_speed_vector ( flOrigin, flVictimOrigin, flNewSpeed, flVelocity )

set_pev ( i, pev_velocity,flVelocity )

message_begin(MSG_ONE, g_msgScreenShake, {0,0,0}, i)
write_short(1<<14) // Amount
write_short(1<<14) // Duration
write_short(1<<14) // Frequency
message_end()

radius_damage_ab( flVictimOrigin, flOrigin , i , iOwner)

if(!g_AlreadyBurn[ i ] && get_pcvar_num(cvar_burn ) == 1 )
{
// Burn / ON
g_AlreadyBurn[ i ] = true

// Set burn time
Time[ i ] = get_pcvar_num(cvar_burntime)

// Burn victim
Burn( i )
}
}
}
}

public radius_damage_ab(Float:originF[3] , Float:flOrigin[3] , iVictim , iAttacker)
{
if(g_roundend || !is_user_connected(iAttacker) || !is_user_connected(iVictim))
return;

new Float:dist = get_distance_f(originF, flOrigin);
new Float:dmg = get_pcvar_float(cvar_dragondmg) - ( get_pcvar_float(cvar_dragondmg) / get_pcvar_float(cvar_dragonballradius) ) * dist;

if(pev(iVictim,pev_health) - dmg <= 0)
{
new headshot
if(dist < 20.0) headshot = 1
if(dist >= 20.0) headshot = 0
message_begin( MSG_ALL, get_user_msgid("DeathMsg"),{0,0,0},0)
write_byte(iAttacker)
write_byte(iVictim)
write_byte(headshot)
write_string("dragon")
message_end()

user_silentkill(iVictim)

set_pev(iAttacker, pev_frags, float(pev(iAttacker, pev_frags) + 1))
zp_set_user_ammo_packs(iAttacker, zp_get_user_ammo_packs(iAttacker) + 1)
fm_cs_set_user_deaths(iVictim, cs_get_user_deaths(iVictim) + 1)

message_begin(MSG_BROADCAST, g_msgScoreInfo)
write_byte(iAttacker) // id
write_short(pev(iAttacker, pev_frags)) // frags
write_short(cs_get_user_deaths(iAttacker)) // deaths
write_short(0) // class?
write_short(fm_cs_get_user_team(iAttacker)) // team
message_end()

message_begin(MSG_BROADCAST, g_msgScoreInfo)
write_byte(iVictim) // id
write_short(pev(iVictim, pev_frags)) // frags
write_short(cs_get_user_deaths(iVictim)) // deaths
write_short(0) // class?
write_short(fm_cs_get_user_team(iVictim)) // team
message_end()

}else{
if(dmg > 0) set_pev(iVictim , pev_health , pev(iVictim,pev_health) - dmg)
if(dmg <= 0) set_pev(iVictim , pev_health , pev(iVictim,pev_health) + dmg)
}
}

public remove_values(id)
{
remove_task(id)
g_can[id] = 0
}

public ability_zero(id)
{
g_can[id] -= 1
if(!g_can[id]) client_print(id,print_center,"Now you can use ability!")
if(g_can[id]) set_task(1.0,"ability_zero",id)
}

public Burn( victim )
{
// Get user origin
static Origin[ 3 ] ; get_user_origin( victim, Origin )

// If burn time is over or victim are in water
if( Time[ victim ] <= 0 || get_entity_flags( victim ) & FL_INWATER )
{
// Show Smoke sprite
message_begin( MSG_PVS, SVC_TEMPENTITY, Origin )
write_byte( TE_SMOKE ) // TE id
write_coord( Origin[0] ) // x
write_coord( Origin[1] ) // y
write_coord( Origin[2]-50 ) // z
write_short( sprSmoke ) // sprite
write_byte( random_num(15, 20) ) // scale
write_byte( random_num(10, 20) ) // framerate
message_end( )

// Delay to allow burn again
set_task( float(get_pcvar_num(cvar_burntime)), "Stop", victim )

// Exit
return
}
else
{
// Flame sprite
message_begin( MSG_PVS, SVC_TEMPENTITY, Origin )
write_byte( TE_SPRITE ) // TE id
write_coord( Origin[0]+random_num(-5, 5) ) // x
write_coord( Origin[1]+random_num(-5, 5) ) // y
write_coord( Origin[2]+random_num(-10, 10) ) // z
write_short( sprFlame ) // sprite
write_byte( random_num(5, 10) ) // scale
write_byte( 200 ) // brightness
message_end( )

// Decrease Time
Time[ victim ]--

// Decrease life (random)
if(get_user_health(victim) - get_pcvar_num(cvar_burndmg) > 0) set_user_health( victim, get_user_health( victim ) - get_pcvar_num(cvar_burndmg))

// Stop fire if health <= min health.
if( get_user_health( victim ) <= get_pcvar_num(cvar_burndmg))
{
g_AlreadyBurn[ victim ] = false
return
}

// Repeat
set_task( 0.5, "Burn", victim )
}
}

public Stop( victim )
g_AlreadyBurn[ victim ] = false // Allow burn again

public zp_user_humanized_post(id) remove_values(id)
public fw_PlayerKilled(id, attacker, shouldgib) remove_values(id)
public client_connect(id) remove_values(id)
public zp_round_ended() g_roundend = 1

public zp_user_infected_post(id)
{
Time[ id ] = 0
g_AlreadyBurn[ id ] = false
remove_task(id)
}

stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
{
set_pev(Player, pev_weaponanim, Sequence)

message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
write_byte(Sequence)
write_byte(pev(Player, pev_body))
message_end()
}

stock UTIL_PlayPlayerAnimation(const id, const Sequence , Float:frame = 1.0 , Float:framerate = 1.0)
{
entity_set_int(id, EV_INT_sequence, Sequence)
entity_set_int(id, EV_INT_gaitsequence, 1)
entity_set_float(id, EV_FL_frame, frame)
entity_set_float(id, EV_FL_framerate, framerate)
}

stock get_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
{
new_velocity[0] = origin2[0] - origin1[0]
new_velocity[1] = origin2[1] - origin1[1]
new_velocity[2] = origin2[2] - origin1[2]
new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
new_velocity[0] *= num
new_velocity[1] *= num
new_velocity[2] *= num

return 1;
}

stock fm_cs_set_user_deaths(id, value)
{
set_pdata_int(id, 444, value, 5)
}

stock fm_cs_get_user_team(id)
{
return get_pdata_int(id, 114, 5);
}[/spoiler]

SMA2
[spoiler]#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <xs>
#include <fun>
#include <engine>
#include <cstrike>
#include <zombieplague>

//#define FIRST_ZOMBIE_CANT_USE
#define HAVE_DYNAMIC_LIGHT_EFFECT
#define WHEN_HITED_DROP_WEAPON
#define WHEN_HITED_CANT_SHOOT
#define WHEN_HITED_CANT_MOVE
#define WHEN_DAMAGE_OVER_HEALTH_INFECT
#define WHEN_DAMAGE_MAKE_FAIL
#define HITED_ZOMBIE_KNOCKBACK

#if defined WHEN_DAMAGE_MAKE_FAIL
#define Damage_Check_Time_Range 2.0
#define Get_Amount_Of_Damage 300.0
#endif

#define Hit_Attack2_Key_Time 0.8
#define Make_EnergyBall_Time 1.4
#define EnergyBall_Deduct_Speed 5
#define Short_Dist_Cant_Shoot 100
const Float:Damage_Survivor_Multiplier = 1.0

#define Task_ID_1 param[0]+5333

#if defined WHEN_HITED_DROP_WEAPON
// Weapon bitsums
const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|
(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)

const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)
#endif

// Weapons Offsets (win32)
const OFFSET_flNextPrimaryAttack = 46
const OFFSET_flNextSecondaryAttack = 47
const OFFSET_flTimeWeaponIdle = 48

// Linux diff's
const OFFSET_LINUX_WEAPONS = 4

// Zombie Attributes
new const zclass_name[] = { "VIP/ADMIN Zombie" }
new const zclass_info[] = { "- Csak adminnak+VIP \y[ADMINVIP]" }
new const zclass_model[] = { "psih_cso" }
new const zclass_clawmodel[] = {"v_energeball_new.mdl" }
new KNOCKBOMB_ENERGYBALL[] = "models/tx/bombjump/v_psihoball.mdl"
const zclass_health = 2400
const zclass_speed = 230
const Float:zclass_gravity = 0.7
const Float:zclass_knockback = 0.8

// Model and Sound
new const EnergyBall_P_Model[] = { "models/tx/p_snowball.mdl" }
new const EnergyBall_W_Model[] = { "models/tx/w_snowball.mdl" }
new const EnergyBall_Make_Sound[] = { "weapons/electro4.wav" }
new const EnergyBall_Shoot_Sound[] = { "weapons/gauss2.wav" }
new const EnergyBall_Touch_Sound[][] = { "weapons/ric_conc-1.wav", "weapons/ric_conc-2.wav" }
new const g_infect_sound[] = "tox_cso/energyinfect.wav"
new const pain_energyball_sound[] = "tox_cso/zompain.wav"
new const pain_energyball_sound2[] = "tox_cso/zompain.wav"
new const death_energyball_sound[] = "tox_cso/zombie_death.wav"

// Zombie Class ID
new g_zclass_energyball

// Cvars
new g_shoot_times, g_speed, g_damage, g_cooldown, g_explosion_range, g_effect_time, g_surv_effect_time
new maxplayers, bool:round_end, Float:current_time
new g_msgScreenShake, g_msgScreenFade, g_msgDamage
new g_msgDeathMsg, g_msgScoreAttrib, g_msgScoreInfo
new g_trailSpr, g_shokewaveSpr

// Cvars
new energyball_num[33]
new check_step[33], bool:step_started[33], Float:step_check_time[33]
new bool:make_energyball[33], bool:have_energyball[33]
new bool:cooldown_started[33], Float:cooldown_over_time[33]
new bool:be_hited[33], Float:be_hit_check_time[33]
new bool:effect_started[33], Float:effect_over_time[33]
new Float:next_play_sound_time[33]
new bool:touched_energyball[33], Float:touch_energyball_time[33]
new g_ent_weaponmodel[33]

#if defined WHEN_DAMAGE_MAKE_FAIL
new Float:get_attack_damage[33], Float:damage_check_time[33]
#endif

#if defined WHEN_DAMAGE_OVER_HEALTH_INFECT
new bool:is_infect_round
#endif


public plugin_init()
{
register_plugin("ZP Class Energy Ball(Tesla)", "2.1", "Jim/tERoR edit")

g_shoot_times = register_cvar("zp_zclass_eb_shoottimes", "10")
g_speed = register_cvar("zp_zclass_eb_speed", "1500")
g_damage = register_cvar("zp_zclass_eb_damage", "50")
g_cooldown = register_cvar("zp_zclass_eb_cooldown", "20.0")
g_explosion_range = register_cvar("zp_zclass_eb_exploderange", "300")
g_effect_time = register_cvar("zp_zclass_eb_effecttime", "4.0")
g_surv_effect_time = register_cvar("zp_zclass_eb_surveffecttime", "0.0")

register_forward(FM_CmdStart, "fw_CmdStart")
register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")
register_forward(FM_Touch, "fw_Touch")
register_forward(FM_StartFrame, "fw_StartFrame")

register_event("DeathMsg","Death_Zombie","a")
RegisterHam(Ham_TakeDamage, "player", "CPlayer__TakeDamage");
register_event("CurWeapon", "Event_CurrentWeapon", "be", "1=1")

register_event("ResetHUD","NewRound","be")
register_event("DeathMsg", "Death", "a")
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
register_logevent("logevent_round_end", 2, "1=Round_End")

maxplayers = get_maxplayers()
g_msgScreenShake = get_user_msgid("ScreenShake")
g_msgScreenFade = get_user_msgid("ScreenFade")
g_msgDamage = get_user_msgid("Damage")
g_msgDeathMsg = get_user_msgid("DeathMsg")
g_msgScoreAttrib = get_user_msgid("ScoreAttrib")
g_msgScoreInfo = get_user_msgid("ScoreInfo")
}

public plugin_precache()
{
precache_model(EnergyBall_P_Model)
precache_model(EnergyBall_W_Model)
precache_model(KNOCKBOMB_ENERGYBALL)
precache_sound(EnergyBall_Make_Sound)
precache_sound(EnergyBall_Shoot_Sound)
precache_sound("tox_cso/zompain.wav")
precache_sound("tox_cso/zombie_death.wav" )
precache_sound("tox_cso/energyinfect.wav")

for (new i = 0; i < sizeof EnergyBall_Touch_Sound; i++)
precache_sound(EnergyBall_Touch_Sound[i])

g_trailSpr = precache_model("sprites/zbeam4.spr")
g_shokewaveSpr = precache_model( "sprites/shockwave.spr")

g_zclass_energyball = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback, -1)
}

public zp_user_infected_post(id, infector)
{
reset_cvars(id)

if (zp_get_user_zombie_class(id) == g_zclass_energyball)
{
emit_sound(id, CHAN_WEAPON, g_infect_sound[0], 1.0, ATTN_NORM, 0, PITCH_LOW)
client_printcolor(id, "!g[Acu ZM]!y Kepessegedet !g 20 seckent !yсhasznalhatod..[Energy LABDA]")
}
}

public zp_user_infected_pre(id)
{
if(zp_get_user_next_class(id) == g_zclass_energyball)
{
}
}

public fw_CmdStart(id, uc_handle, seed)
{
if (!is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != g_zclass_energyball)
return FMRES_IGNORED;

if (zp_get_user_nemesis(id))
return FMRES_IGNORED;

#if defined FIRST_ZOMBIE_CANT_USE
if (zp_get_user_first_zombie(id))
return FMRES_IGNORED;
#endif

static weap_id
weap_id = get_user_weapon(id)

if (weap_id != CSW_KNIFE)
{
if (make_energyball[id] || have_energyball[id])
{
check_step[id] = 1
step_started[id] = false
make_energyball[id] = false
have_energyball[id] = false
set_user_weapon_attack_time(id, 0.0)
}

return FMRES_IGNORED;
}

if (get_pcvar_num(g_shoot_times) != 0 && energyball_num[id] <= 0)
return FMRES_IGNORED;

if (cooldown_started[id])
return FMRES_IGNORED;

static button, oldbutton
button = get_uc(uc_handle, UC_Buttons)
oldbutton = pev(id, pev_oldbuttons)

#if defined SUPPORT_BOT_TO_USE
if (is_user_bot(id))
{
static target, body
get_user_aiming(id, target, body)
if (check_target_valid(target))
{
aim_target[id] = target
aim_check_over_time[id] = current_time + 20.0
}
else
{
aim_target[id] = 0

if (current_time >= aim_check_over_time[id])
{
check_step[id] = 1
step_started[id] = false

if (make_energyball[id] || have_energyball[id])
{
make_energyball[id] = false
have_energyball[id] = false
set_user_weapon_attack_time(id, 0.0)
}
}
}

switch (check_step[id])
{
case 1:
{
if (!step_started[id])
{
if (aim_target[id])
{
step_started[id] = true
step_check_time[id] = current_time + Hit_Attack2_Key_Time
}
}
else
{
if (current_time >= step_check_time[id])
{
check_step[id] = 2
step_started[id] = false
make_energyball[id] = true
set_user_weapon_attack_time(id, 0.5)
SendWeaponAnim(id, 0)
}
}
}
case 2:
{
if (!step_started[id])
{
step_started[id] = true
step_check_time[id] = current_time + Make_EnergyBall_Time
}
else
{
if (current_time >= step_check_time[id])
{
check_step[id] = 3
step_started[id] = false
make_energyball[id] = false
have_energyball[id] = true
set_user_weapon_attack_time(id, 0.5)
SendWeaponAnim(id, 0)
}
}
}
case 3:
{
//
if (aim_target[id])
{
if (have_energyball[id])
{
check_step[id] = 1
have_energyball[id] = false
shoot_energyball(id)
set_user_weapon_attack_time(id, 0.0)
}
}
}
}

return FMRES_IGNORED;
}
#endif

switch (check_step[id])
{
case 1:
{
if (button & IN_ATTACK)
{
check_step[id] = 1
step_started[id] = false
}
else if (button & IN_ATTACK2)
{
if (!step_started[id])
{
if (!(oldbutton & IN_ATTACK2))
{
step_started[id] = true
step_check_time[id] = current_time + Hit_Attack2_Key_Time
}
}
else
{
if (current_time >= step_check_time[id])
{
if (get_pcvar_num(g_shoot_times) != 0)

check_step[id] = 2
step_started[id] = false
make_energyball[id] = true
set_user_weapon_attack_time(id, 1.0)
SendWeaponAnim(id, 0)
}
}
}
else
{
step_started[id] = false
}
}
case 2:
{
if (button & IN_ATTACK)
{
check_step[id] = 1
step_started[id] = false

if (make_energyball[id])
{
client_print(id, print_center, "")
make_energyball[id] = false
set_user_weapon_attack_time(id, 0.0)
}
}
else if (button & IN_ATTACK2)
{
client_print(id, print_center, "<<Acu ZM - ADMIN ZOMBI/VIP>>")

if (!step_started[id])
{
step_started[id] = true
step_check_time[id] = current_time + Make_EnergyBall_Time
}
else
{
if (current_time >= step_check_time[id])
{
check_step[id] = 3
step_started[id] = false
make_energyball[id] = false
have_energyball[id] = true
set_user_weapon_attack_time(id, 1.0)
SendWeaponAnim(id, 0)
}
}
}
else
{
check_step[id] = 1
step_started[id] = false

if (make_energyball[id])
{
client_print(id, print_center, "")
make_energyball[id] = false
set_user_weapon_attack_time(id, 0.0)
}
}
}
case 3:
{
if (button & IN_ATTACK)
{
check_step[id] = 1

if (have_energyball[id])
{
client_print(id, print_center, "<<Neked van energy labdad>>")
have_energyball[id] = false
set_user_weapon_attack_time(id, 0.0)
}
}
else if (button & IN_ATTACK2)
{
static dist
dist = get_forward_view_dist(id)
if (dist < Short_Dist_Cant_Shoot)
client_print(id, print_center, "<<Acu ZM - ADMIN ZOMBI/VIP>>")
else
client_print(id, print_center, "<<ĐAcu ZM - ADMIN ZOMBI/VIP>>")
}
else
{
if (have_energyball[id])
{
client_print(id, print_center, "<<Acu ZM - ADMIN ZOMBI/VIP>")
check_step[id] = 1
have_energyball[id] = false
shoot_energyball(id)
set_user_weapon_attack_time(id, 0.0)
}
}
}
}

return FMRES_HANDLED;
}

#if defined SUPPORT_BOT_TO_USE
check_target_valid(target)
{
if (!(1 <= target <= maxplayers) || !is_user_alive(target) || zp_get_user_zombie(target))
return 0;

return 1;
}
#endif

set_user_weapon_attack_time(id, Float:next_attack_time)
{
static weap_id
weap_id = get_user_weapon(id)

static weap_name[32]
get_weaponname(weap_id, weap_name, charsmax(weap_name))

static weap_ent
weap_ent = fm_find_ent_by_owner(-1, weap_name, id)

set_weapon_next_pri_attack(weap_ent, next_attack_time)
set_weapon_next_sec_attack(weap_ent, next_attack_time)

if (weap_id == CSW_XM1014 || weap_id == CSW_M3)
set_weapon_idle_time(weap_ent, next_attack_time)
}

public fw_PlayerPreThink(id)
{
if (!is_user_alive(id))
return FMRES_IGNORED;

if (zp_get_user_zombie(id))
{
if (zp_get_user_zombie_class(id) != g_zclass_energyball)
return FMRES_IGNORED;

if (zp_get_user_nemesis(id))
return FMRES_IGNORED;

#if defined FIRST_ZOMBIE_CANT_USE
if (zp_get_user_first_zombie(id))
return FMRES_IGNORED;
#endif

if (get_pcvar_num(g_shoot_times) != 0 && energyball_num[id] <= 0)
return FMRES_IGNORED;

if (make_energyball[id] || have_energyball[id])
{
freeze_user_attack(id)
}

if (cooldown_started[id])
{
if (current_time >= cooldown_over_time[id])
{
cooldown_started[id] = false
client_print(id, print_center, "<<<Varnod kell!!!>>>", get_pcvar_float(g_cooldown))
}
}
}
else
{
if (be_hited[id])
{
if (current_time >= be_hit_check_time[id])
{
be_hited[id] = false
effect_started[id] = true

if (zp_get_user_survivor(id))
effect_over_time[id] = current_time + get_pcvar_float(g_surv_effect_time)
else
effect_over_time[id] = current_time + get_pcvar_float(g_effect_time)
}
}

if (effect_started[id])
{
#if defined WHEN_HITED_CANT_SHOOT
freeze_user_attack(id)
#endif

#if defined WHEN_HITED_CANT_MOVE
if (is_user_on_ground(id))
{
set_pev(id, pev_velocity, Float:{0.0,0.0,0.0}) // stop motion
set_pev(id, pev_maxspeed, 1.0) // prevent from moving
set_pev(id, pev_gravity, 999999.9) // set really high
}
#endif

if (current_time >= effect_over_time[id])
{
#if defined WHEN_HITED_CANT_MOVE
set_pev(id, pev_gravity, get_cvar_float("zp_human_gravity"))
#endif

effect_started[id] = false
}
}

if (touched_energyball[id])
{
if (current_time - touch_energyball_time[id] >= 0.2)
{
touched_energyball[id] = false
}
}
}

return FMRES_IGNORED;
}

freeze_user_attack(id)
{
static weap_id
weap_id = get_user_weapon(id)

static weap_name[32]
get_weaponname(weap_id, weap_name, charsmax(weap_name))

static weap_ent
weap_ent = fm_find_ent_by_owner(-1, weap_name, id)

if (get_weapon_next_pri_attack(weap_ent) <= 0.1)
set_weapon_next_pri_attack(weap_ent, 1.0)

if (get_weapon_next_sec_attack(weap_ent) <= 0.1)
set_weapon_next_sec_attack(weap_ent, 1.0)

if (weap_id == CSW_XM1014 || weap_id == CSW_M3)
{
if (get_weapon_idle_time(weap_ent) <= 0.1)
set_weapon_idle_time(weap_ent, 1.0)
}
}

public fw_Touch(ptr, ptd)
{
if (!pev_valid(ptr))
return FMRES_IGNORED;

static classname[32]
pev(ptr, pev_classname, classname, 31)

if (!equal(classname, "EnergyBall_Ent"))
return FMRES_IGNORED;

static owner
owner = pev(ptr, pev_iuser1)

static Float:ent_origin[3]
pev(ptr, pev_origin, ent_origin)

static sound_index
sound_index = random_num(0, sizeof EnergyBall_Touch_Sound -1)
engfunc(EngFunc_EmitSound, ptr, CHAN_VOICE, EnergyBall_Touch_Sound[sound_index], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

static ent_speed
ent_speed = pev(ptr, pev_iuser4) - EnergyBall_Deduct_Speed
set_pev(ptr, pev_iuser4, ent_speed)

pev(ptd, pev_classname, classname, 31)

if (equal(classname, "EnergyBall_Ent"))
{
set_pev(ptr, pev_iuser2, 1)
}
else if ((1 <= ptd <= 32) && is_user_alive(ptd) && !touched_energyball[ptd])
{
#if !(defined HITED_ZOMBIE_KNOCKBACK)
if (zp_get_user_zombie(ptd))
return FMRES_IGNORED;
#endif

if (round_end)
return FMRES_IGNORED;

touched_energyball[ptd] = true
touch_energyball_time[ptd] = current_time

static Float:origin[3], Float:velocity1[3], Float:velocity2[3]
pev(ptd, pev_origin, origin)
pev(ptd, pev_velocity, velocity1)

particle_burst_effect(origin)

velocity2[0] = origin[0] - ent_origin[0]
velocity2[1] = origin[1] - ent_origin[1]
velocity2[2] = origin[2] - ent_origin[2]

static Float:speed
speed = vector_length(velocity2)

speed = floatmax(float(ent_speed) - 800.0, 0.0) / (speed > 0.0 ? speed : 1.0)

xs_vec_mul_scalar(velocity2, speed, velocity2)
xs_vec_sub(velocity2, velocity1, velocity2)

speed = vector_length(velocity2)
if (speed > 800.0)
xs_vec_mul_scalar(velocity2, (800.0 / speed), velocity2)
floatclamp(velocity2[2], -200.0, 800.0)

set_pev(ptd, pev_velocity, velocity2)

if (!zp_get_user_zombie(ptd))
{
if (fm_get_user_godmode(ptd) || get_user_godmode(ptd))
return FMRES_IGNORED;

screen_shake(ptd, 6, 1, 5)
screen_fade(ptd, 0.2, 220, 0, 0, 150)

#if defined WHEN_HITED_DROP_WEAPON
//
if (!zp_get_user_survivor(ptd))
{
static EnergyBall_fly_time
EnergyBall_fly_time = pev(ptr, pev_iuser3)

if (EnergyBall_fly_time <= 10)
drop_current_weapon(ptd)
}
#endif

static damage
damage = get_pcvar_num(g_damage)

if (zp_get_user_survivor(ptd))
damage = floatround(float(damage) * Damage_Survivor_Multiplier)

damage_human_user(owner, ptd, damage, (4.0 /5.0), DMG_BLAST, "EnergyBall")
}
}

return FMRES_IGNORED;
}

damage_human_user(attacker, victim, damage, Float:damage_armor_rate, damage_type, weapon[])
{
new health = get_user_health(victim)
new armor = get_user_armor(victim)
new damage_armor = floatround(float(damage) * damage_armor_rate)
if (damage_armor > 0 && armor > 0)
{
if (armor > damage_armor)
{
damage -= damage_armor
fm_set_user_armor(victim, armor - damage_armor)
}
else
{
damage -= armor
fm_set_user_armor(victim, 0)
}
}

if (damage > 0)
{
if (health > damage)
{
set_user_takedamage(victim, damage, damage_type)
effect_started[victim] = false
be_hited[victim] = true
be_hit_check_time[victim] = current_time + 1.0
}
else
{
new frags = get_user_frags(attacker)

#if defined WHEN_DAMAGE_OVER_HEALTH_INFECT

if (is_infect_round && !(zp_get_user_last_human(victim) || zp_get_user_survivor(victim)))
{
if (zp_infect_user(victim, 0))
{
new weapon_string[64]
format(weapon_string, charsmax(weapon_string), "%s (Infect)", weapon)
SendDeathMsg(attacker, victim, 1, weapon_string)
cs_set_user_deaths(victim, get_user_deaths(victim) + 1)
}
else
{
set_msg_block(g_msgDeathMsg, BLOCK_SET)
ExecuteHamB(Ham_Killed, victim, attacker, 0)
set_msg_block(g_msgDeathMsg, BLOCK_NOT)
SendDeathMsg(attacker, victim, 0, weapon)
}
}
else
{
#endif

set_msg_block(g_msgDeathMsg, BLOCK_SET)
ExecuteHamB(Ham_Killed, victim, attacker, 0)
set_msg_block(g_msgDeathMsg, BLOCK_NOT)
SendDeathMsg(attacker, victim, 0, weapon)

#if defined WHEN_DAMAGE_OVER_HEALTH_INFECT
}
#endif

fm_set_user_frags(attacker, frags + 1)
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 1)

FixDeadAttrib(victim, (is_user_alive(victim) ? 0 : 1))
Update_ScoreInfo(victim, get_user_frags(victim), get_user_deaths(victim))
FixDeadAttrib(attacker, (is_user_alive(attacker) ? 0 : 1))
Update_ScoreInfo(attacker, get_user_frags(attacker), get_user_deaths(attacker))

/*
new k_name[32], v_name[32], k_authid[32], v_authid[32], k_team[10], v_team[10]
get_user_name(attacker, k_name, charsmax(k_name))
get_user_team(attacker, k_team, charsmax(k_team))
get_user_authid(attacker, k_authid, charsmax(k_authid))
get_user_name(victim, v_name, charsmax(v_name))
get_user_team(victim, v_team, charsmax(v_team))
get_user_authid(victim, v_authid, charsmax(v_authid))
log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
k_name, get_user_userid(attacker), k_authid, k_team,
v_name, get_user_userid(victim), v_authid, v_team, weapon)
*/
}
}
}

public fw_StartFrame()
{
current_time = get_gametime()

static Float:next_check_time, id
if (current_time < next_check_time)
return FMRES_IGNORED;
else
next_check_time = current_time + 0.1

#if defined HAVE_DYNAMIC_LIGHT_EFFECT
static Float:origin[3]
#endif

for (id = 1; id <= maxplayers; id++)
{
if (!is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != g_zclass_energyball)
continue;

if (make_energyball[id])
{
#if defined HAVE_DYNAMIC_LIGHT_EFFECT
pev(id, pev_origin, origin)

create_dynamic_light(origin, 10, 235, 255, 0, 2)
#endif
if (current_time > next_play_sound_time[id])
{
engfunc(EngFunc_EmitSound, id, CHAN_VOICE, EnergyBall_Make_Sound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
next_play_sound_time[id] = current_time + 1.0
}
}
else if (have_energyball[id])
{
#if defined HAVE_DYNAMIC_LIGHT_EFFECT
pev(id, pev_origin, origin)

create_dynamic_light(origin, 16, 60, 255, 20, 2)
#endif

fm_set_weaponmodel_ent(id, EnergyBall_P_Model)

if (pev_valid(g_ent_weaponmodel[id]))
{
fm_set_rendering(g_ent_weaponmodel[id], kRenderFxGlowShell, 60, 255, 20, kRenderNormal, 255)
}
}

if (!have_energyball[id])
{
fm_remove_weaponmodel_ent(id)
}
}

return FMRES_IGNORED;
}

#if defined WHEN_DAMAGE_MAKE_FAIL
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
if (victim == attacker || !is_user_connected(attacker))
return HAM_IGNORED;

if (!zp_get_user_zombie(victim) || zp_get_user_zombie(attacker))
return HAM_IGNORED;

if (zp_get_user_zombie_class(victim) != g_zclass_energyball || zp_get_user_nemesis(victim))
return HAM_IGNORED;


if (!(damage_type & DMG_BULLET))
return HAM_IGNORED;

if (!make_energyball[victim] && !have_energyball[victim])
{
get_attack_damage[victim] = 0.0
return HAM_IGNORED;
}

if (current_time > damage_check_time[victim])
{
get_attack_damage[victim] = 0.0
damage_check_time[victim] = current_time + Damage_Check_Time_Range
}

get_attack_damage[victim] += damage

if (get_attack_damage[victim] >= Get_Amount_Of_Damage)
{
get_attack_damage[victim] = 0.0
damage_check_time[victim] = current_time + Damage_Check_Time_Range

check_step[victim] = 1
step_started[victim] = false
make_energyball[victim] = false
have_energyball[victim] = false
//set_user_weapon_attack_time(id, 0.0)
}

return HAM_IGNORED;
}
#endif

public shoot_energyball(id)
{
if (!is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != g_zclass_energyball)
return;

new dist = get_forward_view_dist(id)
if (dist < Short_Dist_Cant_Shoot)
return;

SendWeaponAnim(id, 7)

fm_remove_weaponmodel_ent(id)

new Float:origin[3], Float:vector[3]
pev(id, pev_origin, origin)
velocity_by_aim(id, 45, vector)
xs_vec_add(origin, vector, origin)

new Float:angles[3]
pev(id, pev_angles, angles)

new ent = create_entity_object2("EnergyBall_Ent", SOLID_BBOX, MOVETYPE_BOUNCEMISSILE, 1, EnergyBall_W_Model, Float:{ 20.0, 20.0, 20.0 }, angles, origin)
if (ent == -1) return;

new Float:speed = vector_length(vector)
speed = get_pcvar_float(g_speed) / (speed > 0.0 ? speed : 1.0)
xs_vec_mul_scalar(vector, speed, vector)
speed = vector_length(vector)
set_pev(ent, pev_iuser4, floatround(speed))
set_pev(ent, pev_iuser3, 0)
set_pev(ent, pev_iuser2, 0)
set_pev(ent, pev_iuser1, id)
set_pev(ent, pev_velocity, vector)
fm_set_rendering(ent, kRenderFxGlowShell, 20, 255, 20, kRenderNormal, 255)
engfunc(EngFunc_EmitSound, id, CHAN_VOICE, EnergyBall_Shoot_Sound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
create_beam_follow(ent, 20, 255, 20, 200)

new param[4]
param[0] = ent
param[1] = 100
param[2] = 3
param[3] = 0
set_task(1.0, "energyball_fly", Task_ID_1, param, 4)

if (get_pcvar_num(g_shoot_times) != 0)
{
energyball_num[id]--

if (energyball_num[id] > 0)
client_printcolor(id, "!g[Acu ZM]!y Kepessegedet !g 20 seckent !yсhasznalhatod.", energyball_num[id])
else
client_printcolor(id, "!g[Acu ZM]!y Kepessegedet !g 20 seckent !yсhasznalhatod.", energyball_num[id])
}

cooldown_started[id] = true
cooldown_over_time[id] = current_time + get_pcvar_float(g_cooldown)
}

public energyball_fly(param[4])
{
new ent = param[0]

if (!pev_valid(ent))
return;

if (round_end)
{
if (pev_valid(ent))
{
//kill_beam(ent)
engfunc(EngFunc_RemoveEntity, ent)
}

return;
}

kill_beam(ent)
create_beam_follow(ent, 20, 255, 20, 200)

new Float:velocity[3]
pev(ent, pev_velocity, velocity)
new Float:speed = vector_length(velocity)

new Float:origin[3]
pev(ent, pev_origin, origin)

new EnergyBall_fly_time = pev(ent, pev_iuser3)
set_pev(ent, pev_iuser3, EnergyBall_fly_time + 1)

new touch_EnergyBall = pev(ent, pev_iuser2)

if (is_ent_stuck(ent))
param[3]++
else
param[3] = 0

if (param[1] <= 0 || touch_EnergyBall || param[3] >= 5 || speed <= 20.0)
{
set_pev(ent, pev_velocity, { 0.0, 0.0, 0.0 })
create_explo2(origin)
create_blast_effect(origin, 20, 255, 20, 200, get_pcvar_float(g_explosion_range))

if (!round_end)
search_in_range_target(origin)

if (pev_valid(ent))
engfunc(EngFunc_RemoveEntity, ent)

return;
}

if (param[2] <= 0)
{
new set_speed = pev(ent, pev_iuser4)
speed = float(set_speed) / (speed > 0.0 ? speed : 1.0)
xs_vec_mul_scalar(velocity, speed, velocity)
set_pev(ent, pev_velocity, velocity)
param[2] = 3
}

param[2]--
param[1]--

set_task(0.1, "energyball_fly", Task_ID_1, param, 4)
}

public search_in_range_target(Float:origin[3])
{
new i, Float:target_origin[3], Float:dist
for (i = 1; i <= maxplayers; i++)
{
if (!is_user_alive(i) || zp_get_user_zombie(i))
continue;

if (fm_get_user_godmode(i) || get_user_godmode(i))
continue;

pev(i, pev_origin, target_origin)
dist = get_distance_f(origin, target_origin)
if (dist > get_pcvar_float(g_explosion_range))
continue;

//screen_fade(i, 0.2, 20, 255, 20, 150)
screen_fade(i, 0.2, 122, 55, 139, 150)

be_hited[i] = true
be_hit_check_time[i] = current_time
}
}

public zp_user_humanized_post(id)
{
fm_remove_weaponmodel_ent(id)
reset_cvars(id)
}

#if defined WHEN_DAMAGE_OVER_HEALTH_INFECT
public zp_round_started(gamemode, id)
{
is_infect_round = (gamemode == MODE_INFECTION || gamemode == MODE_MULTI)
}
#endif

public logevent_round_end()
{
round_end = true
}

public client_connect(id)
{
reset_cvars(id)
}

public client_disconnect(id)
{
fm_remove_weaponmodel_ent(id)
reset_cvars(id)
}

public NewRound(id)
{
fm_remove_weaponmodel_ent(id)
reset_cvars(id)
}

public Death()
{
new id = read_data(2)
if (!(1 <= id <= maxplayers))
return;

fm_remove_weaponmodel_ent(id)
reset_cvars(id)
}

public event_round_start()
{
round_end = false

remove_energyball()

#if defined WHEN_DAMAGE_OVER_HEALTH_INFECT
is_infect_round = false
#endif
}

public reset_cvars(id)
{
energyball_num[id] = get_pcvar_num(g_shoot_times)
check_step[id] = 1
step_started[id] = false
step_check_time[id] = 0.0
make_energyball[id] = false
have_energyball[id] = false
cooldown_started[id] = false
cooldown_over_time[id] = 0.0
be_hited[id] = false
be_hit_check_time[id] = 0.0
effect_started[id] = false
effect_over_time[id] = 0.0
touched_energyball[id] = false
touch_energyball_time[id] = 0.0
g_ent_weaponmodel[id] = 0
}

public remove_energyball()
{
new ent = fm_find_ent_by_class(-1, "EnergyBall_Ent")
while(ent)
{
engfunc(EngFunc_RemoveEntity, ent)
ent = fm_find_ent_by_class(ent, "EnergyBall_Ent")
}
}

stock create_entity_object2(const classname[], solid, movetype, sequence, const model[], Float:size[3], Float:angles[3], Float:origin[3])
{
// Create entity
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
if (!pev_valid(ent)) return -1;

// Set entity status
set_pev(ent, pev_classname, classname)
set_pev(ent, pev_solid, solid)
set_pev(ent, pev_movetype, movetype)
set_pev(ent, pev_sequence, sequence)

// Set entity size
new Float:half_size[3], Float:mins[3], Float:maxs[3]
half_size[0] = size[0] / 2.0
half_size[1] = size[1] / 2.0
half_size[2] = size[2] / 2.0
mins[0] = 0.0 - half_size[0]
mins[1] = 0.0 - half_size[1]
mins[2] = 0.0 - half_size[2]
maxs[0] = half_size[0]
maxs[1] = half_size[1]
maxs[2] = half_size[2]
engfunc(EngFunc_SetSize, ent, mins, maxs)

// Set entity angles
set_pev(ent, pev_angles, angles)

// Set entity model
if (strlen(model) > 0)
engfunc(EngFunc_SetModel, ent, model)

// Set entity origin
set_pev(ent, pev_origin, origin)

return ent;
}

stock get_forward_view_dist(id)
{
new iOrigin1[3], iOrigin2[3]
get_user_origin(id, iOrigin1, 0)
get_user_origin(id, iOrigin2, 3)
new dist = get_distance(iOrigin1, iOrigin2)

return dist;
}

stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
{
static Float:color[3]
color[0] = float(r)
color[1] = float(g)
color[2] = float(b)

set_pev(entity, pev_renderfx, fx)
set_pev(entity, pev_rendercolor, color)
set_pev(entity, pev_rendermode, render)
set_pev(entity, pev_renderamt, float(amount))
}

stock fm_set_user_armor(index, armor)
{
set_pev(index, pev_armorvalue, float(armor));

return 1;
}

stock fm_set_user_health(index, health)
{
health > 0 ? set_pev(index, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, index);

return 1;
}

stock set_user_takedamage(index, damage, damage_type)
{
new Float:origin[3], iOrigin[3]
pev(index, pev_origin, origin)
FVecIVec(origin, iOrigin)

message_begin(MSG_ONE, g_msgDamage, _, index)
write_byte(21) // damage save
write_byte(20) // damage take
write_long(damage_type) // damage type
write_coord(iOrigin[0]) // position.x
write_coord(iOrigin[1]) // position.y
write_coord(iOrigin[2]) // position.z
message_end()

fm_set_user_health(index, max(get_user_health(index) - damage, 0))
}

stock fm_set_user_frags(index, frags)
{
set_pev(index, pev_frags, float(frags));

return 1;
}

stock is_user_on_ground(index)
{
if (pev(index, pev_flags) & FL_ONGROUND)
return true;

return false;
}

stock is_ent_stuck(ent)
{
static Float:originF[3]
pev(ent, pev_origin, originF)

engfunc(EngFunc_TraceHull, originF, originF, 0, HULL_HEAD, ent, 0)

if (get_tr2(0, TR_StartSolid) || get_tr2(0, TR_AllSolid) || !get_tr2(0, TR_InOpen))
return true;

return false;
}

stock Float:get_weapon_next_pri_attack(entity)
{
return get_pdata_float(entity, OFFSET_flNextPrimaryAttack, OFFSET_LINUX_WEAPONS)
}

stock set_weapon_next_pri_attack(entity, Float:time)
{
set_pdata_float(entity, OFFSET_flNextPrimaryAttack, time, OFFSET_LINUX_WEAPONS)
}

stock Float:get_weapon_next_sec_attack(entity)
{
return get_pdata_float(entity, OFFSET_flNextSecondaryAttack, OFFSET_LINUX_WEAPONS)
}

stock set_weapon_next_sec_attack(entity, Float:time)
{
set_pdata_float(entity, OFFSET_flNextSecondaryAttack, time, OFFSET_LINUX_WEAPONS)
}

stock Float:get_weapon_idle_time(entity)
{
return get_pdata_float(entity, OFFSET_flTimeWeaponIdle, OFFSET_LINUX_WEAPONS)
}

stock set_weapon_idle_time(entity, Float:time)
{
set_pdata_float(entity, OFFSET_flTimeWeaponIdle, time, OFFSET_LINUX_WEAPONS)
}

stock fm_find_ent_by_owner(entity, const classname[], owner)
{
while ((entity = engfunc(EngFunc_FindEntityByString, entity, "classname", classname)) && (pev(entity, pev_owner) != owner)) {}

return entity;
}

stock fm_find_ent_by_class(index, const classname[])
{
return engfunc(EngFunc_FindEntityByString, index, "classname", classname)
}

#if defined WHEN_HITED_DROP_WEAPON
stock drop_current_weapon(id)
{
static weapon_id, clip, ammo
weapon_id = get_user_weapon(id, clip, ammo)

if (((1<<weapon_id) & PRIMARY_WEAPONS_BIT_SUM) || ((1<<weapon_id) & SECONDARY_WEAPONS_BIT_SUM))
{
static weapon_name[32]
get_weaponname(weapon_id, weapon_name, sizeof weapon_name - 1)
engclient_cmd(id, "drop", weapon_name)
}
}
#endif

stock PlaySound(index, const sound[])
{
if (equal(sound[strlen(sound)-4], ".mp3"))
client_cmd(index, "mp3 play ^"sound/%s^"", sound)
else
client_cmd(index, "spk ^"%s^"", sound)
}

stock SendWeaponAnim(id, iAnim)
{
set_pev(id, pev_weaponanim, iAnim)

message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
write_byte(iAnim)
write_byte(pev(id, pev_body))
message_end()
}

stock SendDeathMsg(attacker, victim, headshot, const weapon[]) // Send Death Message
{
message_begin(MSG_BROADCAST, g_msgDeathMsg)
write_byte(attacker) // killer
write_byte(victim) // victim
write_byte(headshot) // headshot flag [1 or 0]
write_string(weapon) // killer's weapon
message_end()
}

stock FixDeadAttrib(id, dead_flag = 0) // Fix Dead Attrib on scoreboard
{
message_begin(MSG_BROADCAST, g_msgScoreAttrib)
write_byte(id) // id
write_byte(dead_flag) // attrib
message_end()
}

stock Update_ScoreInfo(id, frags, deaths) // Update Player's Frags and Deaths
{
message_begin(MSG_BROADCAST, g_msgScoreInfo)
write_byte(id) // id
write_short(frags) // frags
write_short(deaths) // deaths
write_short(0) // class?
write_short(get_user_team(id)) // team
message_end()
}

stock screen_shake(id, amplitude = 4, duration = 2, frequency = 10)
{
message_begin(MSG_ONE_UNRELIABLE, g_msgScreenShake, _, id)
write_short((1<<12)*amplitude)
write_short((1<<12)*duration)
write_short((1<<12)*frequency)
message_end()
}

stock screen_fade(id, Float:time, red, green, blue, alpha)
{
message_begin(MSG_ONE_UNRELIABLE, g_msgScreenFade, _, id)
write_short((1<<12)*1) // duration
write_short(floatround((1<<12)*time)) // hold time
write_short(0x0000) // fade type
write_byte(red) // red
write_byte(green) // green
write_byte(blue) // blue
write_byte(alpha) // alpha
message_end()
}

stock particle_burst_effect(const Float:originF[3])
{
// Particle burst
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_PARTICLEBURST) // TE id
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
write_short(50) // radius
write_byte(70) // color
write_byte(3) // duration (will be randomized a bit)
message_end()
}

#if defined HAVE_DYNAMIC_LIGHT_EFFECT
stock create_dynamic_light(const Float:originF[3], radius, red, green, blue, life)
{
// Dynamic light, effect world, minor entity effect
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_DLIGHT) // TE id: 27
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
write_byte(radius) // radius in 10's
write_byte(red) //red
write_byte(green) //green
write_byte(blue) //blue
write_byte(life) // life in 10's
write_byte(0) // decay rate in 10's
message_end()
}
#endif

stock create_beam_follow(entity, red, green, blue, brightness)
{
//Entity add colored trail
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW) // TE id
write_short(entity) // entity
write_short(g_trailSpr) // sprite
write_byte(1) // life
write_byte(10) // width
write_byte(red) // r
write_byte(green) // g
write_byte(blue) // b
write_byte(brightness) // brightness
message_end()
}

stock create_explo2(const Float:originF[3])
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_EXPLOSION2) // TE id: 12
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
write_byte(1) // starting color
write_byte(10) // num colors
message_end()
}

stock create_blast_effect(const Float:originF[3], red, green, blue, brightness, Float:radius)
{
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_BEAMCYLINDER) // TE id: 21
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
engfunc(EngFunc_WriteCoord, originF[0]) // x axis
engfunc(EngFunc_WriteCoord, originF[1]) // y axis
engfunc(EngFunc_WriteCoord, originF[2] + radius) // z axis
write_short(g_shokewaveSpr) // sprite
write_byte(0) // startframe
write_byte(0) // framerate
write_byte(4) // life
write_byte(60) // width
write_byte(0) // noise
write_byte(red) // red
write_byte(green) // green
write_byte(blue) // blue
write_byte(brightness) // brightness
write_byte(0) // speed
message_end()
}

stock kill_beam(entity)
{
// Kill all beams attached to entity
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_KILLBEAM) // TE id: 99
write_short(entity)
message_end()
}

stock fm_get_user_godmode(index)
{
new Float:val;
pev(index, pev_takedamage, val);

return (val == DAMAGE_NO);
}

stock fm_set_weaponmodel_ent(id, const weapon_model[])
{
// Set model on entity or make a new one if unexistant
if (!pev_valid(g_ent_weaponmodel[id]))
{
g_ent_weaponmodel[id] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
if (!pev_valid(g_ent_weaponmodel[id])) return;

set_pev(g_ent_weaponmodel[id], pev_classname, "weapon_model")
set_pev(g_ent_weaponmodel[id], pev_movetype, MOVETYPE_FOLLOW)
set_pev(g_ent_weaponmodel[id], pev_aiment, id)
set_pev(g_ent_weaponmodel[id], pev_owner, id)
}

static model[100]

if (equal(weapon_model, ""))
{
static weap_id, weap_name[32]
weap_id = get_user_weapon(id)
get_weaponname(weap_id, weap_name, sizeof weap_name - 1)
formatex(model, sizeof model - 1, "models/p_%s.mdl", weap_name[7])
}
else
{
copy(model, sizeof model - 1, weapon_model)
}

engfunc(EngFunc_SetModel, g_ent_weaponmodel[id], model)
}

stock fm_remove_weaponmodel_ent(id)
{
// Remove "weaponmodel" ent if present
if (pev_valid(g_ent_weaponmodel[id]))
{
engfunc(EngFunc_RemoveEntity, g_ent_weaponmodel[id])
g_ent_weaponmodel[id] = 0
}
}

public Event_CurrentWeapon(id)
{
new weaponID = read_data(2)

if (weaponID == CSW_SMOKEGRENADE)

if(zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == g_zclass_energyball && !zp_get_user_nemesis(id))
{
entity_set_string(id, EV_SZ_viewmodel, KNOCKBOMB_ENERGYBALL)
}

if (weaponID == CSW_FLASHBANG)

if(zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == g_zclass_energyball && !zp_get_user_nemesis(id))
{
entity_set_string(id, EV_SZ_viewmodel, KNOCKBOMB_ENERGYBALL)
}

}

public CPlayer__TakeDamage(id, iVictim, iInflictor, iAttacker, Float:flDamage, bitsDamage)
{
if (zp_get_user_zombie_class(id) == g_zclass_energyball && zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && !zp_get_user_survivor(id))
{
new rand = random_num(1,2)
switch(rand)
{
case 1: emit_sound(id, CHAN_WEAPON, pain_energyball_sound[0], 1.0, ATTN_NORM, 0, PITCH_LOW)
case 2: emit_sound(id, CHAN_WEAPON, pain_energyball_sound2[0], 1.0, ATTN_NORM, 0, PITCH_LOW)
}
}
}

public Death_Zombie(id)
{
new victim=read_data(2)

if(zp_get_user_zombie(victim) && zp_get_user_zombie_class(victim) == g_zclass_energyball && !zp_get_user_nemesis(victim))
{
emit_sound(id, CHAN_WEAPON, death_energyball_sound[0], 1.0, ATTN_NORM, 0, PITCH_LOW)
}

}

stock client_printcolor(id, const input[], any:...) // stock by tERoR
{
static iPlayersNum[32], iCount; iCount = 1
static szMsg[191]

vformat(szMsg, charsmax(szMsg), input, 3)

replace_all(szMsg, 190, "!g", "^4")
replace_all(szMsg, 190, "!y", "^1")
replace_all(szMsg, 190, "!t", "^3")
replace_all(szMsg, 190, "!t2", "^0")

if(id) iPlayersNum[0] = id
else get_players(iPlayersNum, iCount, "ch")

for(new i = 0; i < iCount; i++)
{
if(is_user_connected(iPlayersNum[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayersNum[i])
write_byte(iPlayersNum[i])
write_string(szMsg)
message_end()
}
}
}[/spoiler]

_________________
[url=http://www.gametracker.com/server_info/188.227.227.114:27286/][img]http://cache.www.gametracker.com/server_info/188.227.227.114:27286/b_350_20_323957_202743_F19A15_111111.png[/img][/url]


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Oldal átalakito
HozzászólásElküldve:2012.01.25. 14:59 
Offline
Developer
Avatar

Csatlakozott:2011.06.01. 21:11
Hozzászólások:7966
Megköszönt másnak: 295 alkalommal
Megköszönték neki: 537 alkalommal
Fix1:

Kód:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>
#include <cstrike>
#include <fun>
#include <xs>

new const ball_name[] = "dragon_ball";
new const ball_model[] = "models/w_hiddentail.mdl";
new const ball_firespritemdl[] = "sprites/flame2.spr";
new const ball_spriteexplodemdl[] = "sprites/zerogxplode.spr"

new const zclass_name[] = { "Dragon Zombie" } // name
new const zclass_info[] = { "- Tuzgolyo dobasa[\rG]"} // description
new const zclass_model[] = { "zombie_source1" } // model
new const zclass_clawmodel[] = { "v_knife_spider.mdl" } // claw model
const zclass_health = 2000 // health
const zclass_speed = 290 // speed
const Float:zclass_gravity = 1.0 // gravity
const Float:zclass_knockback = 1.0 // knockback

new sprFlame, sprSmoke

new g_zclassdragon
new cvar_dragondmg , cvar_dragondelay , cvar_dragonvelocity , cvar_dragonballhealth , cvar_dragonballradius , cvar_dragonballpower , cvar_burndmg , cvar_burntime , cvar_burn
new g_msgScreenShake , g_smoke , sTrail , ball_firesprite , ball_spriteexplode , g_explode[512] , g_can[33] , g_msgScoreInfo , g_roundend , bool:g_AlreadyBurn[ 33 ] , Time[ 33 ]

public plugin_init()
{
register_plugin("[ZP] Zombie Class: Dragon Zombie", "0.1", "=)")

cvar_dragondelay = register_cvar("zp_classdragon_delay","15")
cvar_dragondmg = register_cvar("zp_classdragonball_dmg","70.0")
cvar_dragonvelocity = register_cvar("zp_classdragonball_velocity","600")
cvar_dragonballhealth = register_cvar("zp_classdragonball_health","6")
cvar_dragonballradius = register_cvar("zp_classdragonball_radius","300.0")
cvar_dragonballpower = register_cvar ( "zp_classdragonball_power", "800" )
cvar_burn = register_cvar ( "zp_classdragonball_enable", "1" )
cvar_burntime = register_cvar ( "zp_classdragonball_burntime", "15" )
cvar_burndmg = register_cvar ( "zp_classdragonball_burndmg", "3" )

register_touch(ball_name, "worldspawn",    "touchWorld")
register_touch(ball_name, "func_wall",    "touchWorld")
register_touch(ball_name, "func_door",    "touchWorld")
register_touch(ball_name, "func_door_rotating", "touchWorld")
register_touch(ball_name, "func_wall_toggle",   "touchWorld")
register_touch(ball_name, "func_breakable",    "touchWorld")
register_think(ball_name,"ball_think")

register_clcmd("drop","dragon_cmd")
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")

RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")

g_msgScoreInfo = get_user_msgid("ScoreInfo")
g_msgScreenShake = get_user_msgid("ScreenShake")

}

public plugin_precache()
{
precache_model(ball_model)
g_smoke = precache_model( "sprites/steam1.spr" );
sTrail = precache_model("sprites/laserbeam.spr")
ball_firesprite = precache_model(ball_firespritemdl)
ball_spriteexplode = precache_model(ball_spriteexplodemdl)

sprFlame = precache_model( "sprites/flame.spr" )
sprSmoke = precache_model( "sprites/black_smoke3.spr" )

g_zclassdragon = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)   
}
public dragon_cmd( id )
{
if( !is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != g_zclassdragon || zp_get_user_nemesis(id))
return PLUGIN_CONTINUE;

if(g_can[id])
{
client_print(id,print_center,"Most nem tudod hasznalni , varj meg %d masodpercet.",g_can[id])
return PLUGIN_HANDLED;
}

static Float:origin[3], Float:angles[3], Float:v_forward[3], Float:v_right[3], Float:v_up[3], Float:gun_position[3], Float:player_origin[3], Float:player_view_offset[3];
static Float:OriginX[3]
pev(id, pev_v_angle, angles);
pev(id, pev_origin, OriginX);
engfunc(EngFunc_MakeVectors, angles);

global_get(glb_v_forward, v_forward);
global_get(glb_v_right, v_right);
global_get(glb_v_up, v_up);

//m_pPlayer->GetGunPosition( ) = pev->origin + pev->view_ofs
pev(id, pev_origin, player_origin);
pev(id, pev_view_ofs, player_view_offset);
xs_vec_add(player_origin, player_view_offset, gun_position);

xs_vec_mul_scalar(v_forward, 13.0, v_forward);
xs_vec_mul_scalar(v_right, 0.0, v_right);
xs_vec_mul_scalar(v_up, 5.0, v_up);

xs_vec_add(gun_position, v_forward, origin);
xs_vec_add(origin, v_right, origin);
xs_vec_add(origin, v_up, origin);

new Float:StartOrigin[3]

StartOrigin[0] = origin[0];
StartOrigin[1] = origin[1];
StartOrigin[2] = origin[2];


new Float:fVelocity[3] , Float:flOrigin[3] , Float:flAngle[3]
pev(id,pev_origin,flOrigin)
pev(id,pev_angles,flAngle)

new ball = create_entity("info_target")

if (!ball) return PLUGIN_HANDLED

g_explode[ball] = 0

entity_set_string(ball, EV_SZ_classname, ball_name)

entity_set_model(ball, ball_model)

entity_set_origin(ball, StartOrigin)

entity_set_vector(ball, EV_VEC_angles, flAngle)

new Float:MinBox[3] = {-1.0, -1.0, -1.0}
new Float:MaxBox[3] = {1.0, 1.0, 1.0}
entity_set_vector(ball, EV_VEC_mins, MinBox)
entity_set_vector(ball, EV_VEC_maxs, MaxBox)

entity_set_int(ball, EV_INT_solid, SOLID_SLIDEBOX)

entity_set_int(ball, EV_INT_movetype, MOVETYPE_BOUNCE)

entity_set_edict(ball, EV_ENT_owner, id)

entity_set_int(ball, EV_INT_effects, EF_BRIGHTLIGHT)

VelocityByAim(id, get_pcvar_num(cvar_dragonvelocity ), fVelocity)
entity_set_vector(ball , EV_VEC_velocity, fVelocity)

message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW) // Temporary entity ID
write_short(ball) // Entity
write_short(sTrail) // Sprite index
write_byte(10) // Life
write_byte(3) // Line width
write_byte(255) // Red
write_byte(150) // Green
write_byte(20) // Blue
write_byte(255) // Alpha
message_end()

UTIL_PlayPlayerAnimation(id,10)
UTIL_PlayWeaponAnimation(id,8)

g_can[id] = get_pcvar_num(cvar_dragondelay)
set_task(1.0,"ability_zero",id)

entity_set_float(ball, EV_FL_health , get_pcvar_float(cvar_dragonballhealth))

entity_set_float(ball, EV_FL_nextthink, get_gametime() + 0.1)

return PLUGIN_HANDLED;
}

public touchWorld(ball, world) {

new Float:v[3]
entity_get_vector(ball, EV_VEC_velocity, v)

v[0] = (v[0] * 0.85)
v[1] = (v[1] * 0.85)
v[2] = (v[2] * 0.85)
entity_set_vector(ball, EV_VEC_velocity, v)

return PLUGIN_HANDLED
}

public event_round_start()
{
new iEnt = FM_NULLENT;
while( (iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", ball_name)) > 0 )
{
engfunc(EngFunc_RemoveEntity,iEnt)
}   

for(new i;i<=32;i++)
{
remove_task(i)
g_can[i] = 0
Time[ i ] = 0
g_AlreadyBurn[ i] = false
}

g_roundend = 0
}

public ball_think(ball)
{
if(!is_valid_ent(ball))
return;

new Float:oldangles[3],Float:angles[3]
pev(ball,pev_angles,oldangles)
angles[0] = oldangles[0] + random_float(20.0,100.0)
angles[1] = oldangles[1] + random_float(10.0,80.0)
angles[2] = oldangles[2] + random_float(10.0,80.0)
set_pev(ball,pev_angles,angles)

new Float:v[3]
entity_get_vector(ball, EV_VEC_velocity, v)

if(v[2] < 40.0 && v[1] < 40.0 && v[0] < 40.0)
{
if(!g_explode[ball])
{
set_task(0.5,"firesprite_ball",ball)
g_explode[ball] = 1
}

entity_set_float(ball, EV_FL_health, entity_get_float(ball,EV_FL_health) - 0.2)

if(entity_get_float(ball,EV_FL_health) <= 0.0)
{
ball_explode(ball)
remove_entity(ball)
g_explode[ball] = 0
return;
}
}

entity_set_float(ball, EV_FL_nextthink, get_gametime() + 0.1)

}

public firesprite_ball(ball)
{
if(!is_valid_ent(ball))
return;

new Float:flOrigin[3]
pev(ball,pev_origin,flOrigin)

engfunc ( EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, flOrigin, 0 )
write_byte ( TE_SPRITE )
engfunc ( EngFunc_WriteCoord, flOrigin [ 0 ] )
engfunc ( EngFunc_WriteCoord, flOrigin [ 1 ] )
engfunc ( EngFunc_WriteCoord, flOrigin [ 2 ] + 45.0 )
write_short ( ball_firesprite )
write_byte ( 5 )
write_byte ( 185 )
message_end ( )

message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
write_byte( TE_SMOKE );
engfunc ( EngFunc_WriteCoord, flOrigin [ 0 ] )
engfunc ( EngFunc_WriteCoord, flOrigin [ 1 ] )
engfunc ( EngFunc_WriteCoord, flOrigin [ 2 ] + 45.0 )
write_short( g_smoke );
write_byte( 10 );
write_byte( 10 );
message_end();

if(entity_get_float(ball,EV_FL_health) >= 1.0) set_task(0.5,"firesprite_ball",ball)
}
public ball_explode ( Entity )
{
if ( Entity < 0 )
return

static Float:flOrigin [ 3 ]
pev ( Entity, pev_origin, flOrigin )

message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_EXPLOSION) // Temporary entity ID
engfunc(EngFunc_WriteCoord, flOrigin[0]) // engfunc because float
engfunc(EngFunc_WriteCoord, flOrigin[1])
engfunc(EngFunc_WriteCoord, flOrigin[2])
write_short(ball_spriteexplode) // Sprite index
write_byte(50) // Scale
write_byte(15) // Framerate
write_byte(0) // Flags
message_end()

new iOwner = entity_get_edict ( Entity, EV_ENT_owner )

for ( new i = 1; i <= 32 ; i++ )
{
if ( !is_user_alive ( i ) || zp_get_user_zombie( i ))
continue

new Float:flVictimOrigin [ 3 ]
pev ( i, pev_origin, flVictimOrigin )

new Float:flDistance = get_distance_f ( flOrigin, flVictimOrigin )

if ( flDistance <= get_pcvar_float(cvar_dragonballradius) )
{
static Float:flSpeed
flSpeed = get_pcvar_float ( cvar_dragonballpower )

static Float:flNewSpeed
flNewSpeed = flSpeed * ( 1.0 - ( flDistance / get_pcvar_float(cvar_dragonballradius) ) )

static Float:flVelocity [ 3 ]
get_speed_vector ( flOrigin, flVictimOrigin, flNewSpeed, flVelocity )

set_pev ( i, pev_velocity,flVelocity )

message_begin(MSG_ONE, g_msgScreenShake, {0,0,0}, i)
write_short(1<<14) // Amount
write_short(1<<14) // Duration
write_short(1<<14) // Frequency
message_end()

radius_damage_ab( flVictimOrigin, flOrigin , i , iOwner)

if(!g_AlreadyBurn[ i ] && get_pcvar_num(cvar_burn ) == 1 )
{
// Burn / ON
g_AlreadyBurn[ i ] = true

// Set burn time
Time[ i ] = get_pcvar_num(cvar_burntime)

// Burn victim
Burn( i )
}
}
}
}

public radius_damage_ab(Float:originF[3] , Float:flOrigin[3] , iVictim , iAttacker)
{
if(g_roundend || !is_user_connected(iAttacker) || !is_user_connected(iVictim))
return;

new Float:dist = get_distance_f(originF, flOrigin);
new Float:dmg = get_pcvar_float(cvar_dragondmg) - ( get_pcvar_float(cvar_dragondmg) / get_pcvar_float(cvar_dragonballradius) ) * dist;

if(pev(iVictim,pev_health) - dmg <= 0)
{
new headshot
if(dist < 20.0) headshot = 1
if(dist >= 20.0) headshot = 0
message_begin( MSG_ALL, get_user_msgid("DeathMsg"),{0,0,0},0)
write_byte(iAttacker)
write_byte(iVictim)
write_byte(headshot)
write_string("dragon")
message_end()

user_silentkill(iVictim)

set_pev(iAttacker, pev_frags, float(pev(iAttacker, pev_frags) + 1))
zp_set_user_ammo_packs(iAttacker, zp_get_user_ammo_packs(iAttacker) + 1)
fm_cs_set_user_deaths(iVictim, cs_get_user_deaths(iVictim) + 1)

message_begin(MSG_BROADCAST, g_msgScoreInfo)
write_byte(iAttacker) // id
write_short(pev(iAttacker, pev_frags)) // frags
write_short(cs_get_user_deaths(iAttacker)) // deaths
write_short(0) // class?
write_short(fm_cs_get_user_team(iAttacker)) // team
message_end()

message_begin(MSG_BROADCAST, g_msgScoreInfo)
write_byte(iVictim) // id
write_short(pev(iVictim, pev_frags)) // frags
write_short(cs_get_user_deaths(iVictim)) // deaths
write_short(0) // class?
write_short(fm_cs_get_user_team(iVictim)) // team
message_end()

}else{
if(dmg > 0) set_pev(iVictim , pev_health , pev(iVictim,pev_health) - dmg)
if(dmg <= 0) set_pev(iVictim , pev_health , pev(iVictim,pev_health) + dmg)
}
}

public remove_values(id)
{
remove_task(id)
g_can[id] = 0
}

public ability_zero(id)
{
g_can[id] -= 1
if(!g_can[id]) client_print(id,print_center,"Now you can use ability!")
if(g_can[id]) set_task(1.0,"ability_zero",id)
}

public Burn( victim )
{
// Get user origin
static Origin[ 3 ] ; get_user_origin( victim, Origin )

// If burn time is over or victim are in water
if( Time[ victim ] <= 0 || get_entity_flags( victim ) & FL_INWATER )
{   
// Show Smoke sprite   
message_begin( MSG_PVS, SVC_TEMPENTITY, Origin )
write_byte( TE_SMOKE ) // TE id
write_coord( Origin[0] ) // x
write_coord( Origin[1] ) // y
write_coord( Origin[2]-50 ) // z
write_short( sprSmoke ) // sprite
write_byte( random_num(15, 20) ) // scale
write_byte( random_num(10, 20) ) // framerate
message_end( )

// Delay to allow burn again
set_task( float(get_pcvar_num(cvar_burntime)), "Stop", victim )

// Exit
return
}
else
{   
// Flame sprite   
message_begin( MSG_PVS, SVC_TEMPENTITY, Origin )
write_byte( TE_SPRITE ) // TE id
write_coord( Origin[0]+random_num(-5, 5) ) // x
write_coord( Origin[1]+random_num(-5, 5) ) // y
write_coord( Origin[2]+random_num(-10, 10) ) // z
write_short( sprFlame ) // sprite
write_byte( random_num(5, 10) ) // scale
write_byte( 200 ) // brightness
message_end( )

// Decrease Time
Time[ victim ]--

// Decrease life (random)
if(get_user_health(victim) - get_pcvar_num(cvar_burndmg) > 0) set_user_health( victim, get_user_health( victim ) - get_pcvar_num(cvar_burndmg))

// Stop fire if health <= min health.
if( get_user_health( victim ) <= get_pcvar_num(cvar_burndmg))
{
g_AlreadyBurn[ victim ] = false
return
}

// Repeat
set_task( 0.5, "Burn", victim )
}
}

public Stop( victim )
g_AlreadyBurn[ victim ] = false // Allow burn again

public zp_user_humanized_post(id) remove_values(id)
public fw_PlayerKilled(id, attacker, shouldgib) remove_values(id)
public client_connect(id) remove_values(id)
public zp_round_ended() g_roundend = 1

public zp_user_infected_post(id)   
{
Time[ id ] = 0
g_AlreadyBurn[ id ] = false
remove_task(id)
}

stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
{
set_pev(Player, pev_weaponanim, Sequence)

message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
write_byte(Sequence)
write_byte(pev(Player, pev_body))
message_end()
}

stock UTIL_PlayPlayerAnimation(const id, const Sequence , Float:frame = 1.0 , Float:framerate = 1.0)
{
entity_set_int(id, EV_INT_sequence, Sequence)
entity_set_int(id, EV_INT_gaitsequence, 1)
entity_set_float(id, EV_FL_frame, frame)
entity_set_float(id, EV_FL_framerate, framerate)
}

stock get_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
{
new_velocity[0] = origin2[0] - origin1[0]
new_velocity[1] = origin2[1] - origin1[1]
new_velocity[2] = origin2[2] - origin1[2]
new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
new_velocity[0] *= num
new_velocity[1] *= num
new_velocity[2] *= num

return 1;
}

stock fm_cs_set_user_deaths(id, value)
{
set_pdata_int(id, 444, value, 5)
}

stock fm_cs_get_user_team(id)
{
return get_pdata_int(id, 114, 5);
}


Fix2:
Kód:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <xs>
#include <fun>
#include <engine>
#include <cstrike>
#include <zombieplague>

//#define FIRST_ZOMBIE_CANT_USE   
#define HAVE_DYNAMIC_LIGHT_EFFECT   
#define WHEN_HITED_DROP_WEAPON   
#define WHEN_HITED_CANT_SHOOT   
#define WHEN_HITED_CANT_MOVE   
#define WHEN_DAMAGE_OVER_HEALTH_INFECT   
#define WHEN_DAMAGE_MAKE_FAIL   
#define HITED_ZOMBIE_KNOCKBACK   

#if defined WHEN_DAMAGE_MAKE_FAIL
#define Damage_Check_Time_Range 2.0   
#define Get_Amount_Of_Damage 300.0   
#endif

#define Hit_Attack2_Key_Time 0.8   
#define Make_EnergyBall_Time 1.4   
#define EnergyBall_Deduct_Speed   5   
#define Short_Dist_Cant_Shoot 100
const Float:Damage_Survivor_Multiplier = 1.0   

#define Task_ID_1 param[0]+5333

#if defined WHEN_HITED_DROP_WEAPON
// Weapon bitsums
const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|
(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)

const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)
#endif

// Weapons Offsets (win32)
const OFFSET_flNextPrimaryAttack = 46
const OFFSET_flNextSecondaryAttack = 47
const OFFSET_flTimeWeaponIdle = 48

// Linux diff's
const OFFSET_LINUX_WEAPONS = 4

// Zombie Attributes
new const zclass_name[] = { "VIP/ADMIN Zombie" }
new const zclass_info[] = { "- Csak adminnak+VIP \y[ADMINVIP]" }
new const zclass_model[] = { "psih_cso" }
new const zclass_clawmodel[] = {"v_energeball_new.mdl" }
new KNOCKBOMB_ENERGYBALL[] = "models/tx/bombjump/v_psihoball.mdl"
const zclass_health = 2400
const zclass_speed = 230
const Float:zclass_gravity = 0.7
const Float:zclass_knockback = 0.8

// Model and Sound
new const EnergyBall_P_Model[] = { "models/tx/p_snowball.mdl" }
new const EnergyBall_W_Model[] = { "models/tx/w_snowball.mdl" }
new const EnergyBall_Make_Sound[] = { "weapons/electro4.wav" }
new const EnergyBall_Shoot_Sound[] = { "weapons/gauss2.wav" }
new const EnergyBall_Touch_Sound[][] = { "weapons/ric_conc-1.wav", "weapons/ric_conc-2.wav" }
new const g_infect_sound[] = "tox_cso/energyinfect.wav"
new const pain_energyball_sound[] = "tox_cso/zompain.wav"
new const pain_energyball_sound2[] = "tox_cso/zompain.wav"
new const death_energyball_sound[] = "tox_cso/zombie_death.wav"

// Zombie Class ID
new g_zclass_energyball

// Cvars
new g_shoot_times, g_speed, g_damage, g_cooldown, g_explosion_range, g_effect_time, g_surv_effect_time
new maxplayers, bool:round_end, Float:current_time
new g_msgScreenShake, g_msgScreenFade, g_msgDamage
new g_msgDeathMsg, g_msgScoreAttrib, g_msgScoreInfo
new g_trailSpr, g_shokewaveSpr

// Cvars
new energyball_num[33]
new check_step[33], bool:step_started[33], Float:step_check_time[33]
new bool:make_energyball[33], bool:have_energyball[33]
new bool:cooldown_started[33], Float:cooldown_over_time[33]
new bool:be_hited[33], Float:be_hit_check_time[33]
new bool:effect_started[33], Float:effect_over_time[33]
new Float:next_play_sound_time[33]
new bool:touched_energyball[33], Float:touch_energyball_time[33]
new g_ent_weaponmodel[33]

#if defined WHEN_DAMAGE_MAKE_FAIL
new Float:get_attack_damage[33], Float:damage_check_time[33]
#endif

#if defined WHEN_DAMAGE_OVER_HEALTH_INFECT
new bool:is_infect_round
#endif


public plugin_init()
{
register_plugin("ZP Class Energy Ball(Tesla)", "2.1", "Jim/tERoR edit")

g_shoot_times = register_cvar("zp_zclass_eb_shoottimes", "10")   
g_speed = register_cvar("zp_zclass_eb_speed", "1500")   
g_damage = register_cvar("zp_zclass_eb_damage", "50")   
g_cooldown = register_cvar("zp_zclass_eb_cooldown", "20.0")   
g_explosion_range = register_cvar("zp_zclass_eb_exploderange", "300")   
g_effect_time = register_cvar("zp_zclass_eb_effecttime", "4.0")   
g_surv_effect_time = register_cvar("zp_zclass_eb_surveffecttime", "0.0")

register_forward(FM_CmdStart, "fw_CmdStart")
register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")
register_forward(FM_Touch, "fw_Touch")
register_forward(FM_StartFrame, "fw_StartFrame")

register_event("DeathMsg","Death_Zombie","a")
RegisterHam(Ham_TakeDamage, "player", "CPlayer__TakeDamage");
register_event("CurWeapon", "Event_CurrentWeapon", "be", "1=1")

register_event("ResetHUD","NewRound","be")
register_event("DeathMsg", "Death", "a")
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
register_logevent("logevent_round_end", 2, "1=Round_End")

maxplayers = get_maxplayers()
g_msgScreenShake = get_user_msgid("ScreenShake")
g_msgScreenFade = get_user_msgid("ScreenFade")
g_msgDamage = get_user_msgid("Damage")
g_msgDeathMsg = get_user_msgid("DeathMsg")
g_msgScoreAttrib = get_user_msgid("ScoreAttrib")
g_msgScoreInfo = get_user_msgid("ScoreInfo")
}

public plugin_precache()
{
precache_model(EnergyBall_P_Model)
precache_model(EnergyBall_W_Model)
precache_model(KNOCKBOMB_ENERGYBALL)
precache_sound(EnergyBall_Make_Sound)
precache_sound(EnergyBall_Shoot_Sound)
precache_sound("tox_cso/zompain.wav")
precache_sound("tox_cso/zombie_death.wav" )
precache_sound("tox_cso/energyinfect.wav")

for (new i = 0; i < sizeof EnergyBall_Touch_Sound; i++)
precache_sound(EnergyBall_Touch_Sound[i])

g_trailSpr = precache_model("sprites/zbeam4.spr")
g_shokewaveSpr = precache_model( "sprites/shockwave.spr")

g_zclass_energyball = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
}

public zp_user_infected_post(id, infector)
{
reset_cvars(id)

if (zp_get_user_zombie_class(id) == g_zclass_energyball)
{
emit_sound(id, CHAN_WEAPON, g_infect_sound[0], 1.0, ATTN_NORM, 0, PITCH_LOW)
client_printcolor(id, "!g[Acu ZM]!y Kepessegedet !g 20 seckent !yсhasznalhatod..[Energy LABDA]")
}
}

public zp_user_infected_pre(id)
{
if(zp_get_user_next_class(id) == g_zclass_energyball)
{
}
}

public fw_CmdStart(id, uc_handle, seed)
{
if (!is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != g_zclass_energyball)
return FMRES_IGNORED;

if (zp_get_user_nemesis(id))
return FMRES_IGNORED;

#if defined FIRST_ZOMBIE_CANT_USE
if (zp_get_user_first_zombie(id))
return FMRES_IGNORED;
#endif

static weap_id
weap_id = get_user_weapon(id)

if (weap_id != CSW_KNIFE)
{
if (make_energyball[id] || have_energyball[id])
{
check_step[id] = 1
step_started[id] = false
make_energyball[id] = false
have_energyball[id] = false
set_user_weapon_attack_time(id, 0.0)
}

return FMRES_IGNORED;
}

if (get_pcvar_num(g_shoot_times) != 0 && energyball_num[id] <= 0)
return FMRES_IGNORED;

if (cooldown_started[id])
return FMRES_IGNORED;

static button, oldbutton
button = get_uc(uc_handle, UC_Buttons)
oldbutton = pev(id, pev_oldbuttons)

#if defined SUPPORT_BOT_TO_USE
if (is_user_bot(id))
{
static target, body
get_user_aiming(id, target, body)
if (check_target_valid(target))
{
aim_target[id] = target
aim_check_over_time[id] = current_time + 20.0
}
else
{
aim_target[id] = 0

if (current_time >= aim_check_over_time[id])
{
check_step[id] = 1
step_started[id] = false

if (make_energyball[id] || have_energyball[id])
{
make_energyball[id] = false
have_energyball[id] = false
set_user_weapon_attack_time(id, 0.0)
}
}
}

switch (check_step[id])
{
case 1:
{
if (!step_started[id])
{
if (aim_target[id])
{
step_started[id] = true
step_check_time[id] = current_time + Hit_Attack2_Key_Time
}
}
else
{
if (current_time >= step_check_time[id])
{
check_step[id] = 2
step_started[id] = false
make_energyball[id] = true
set_user_weapon_attack_time(id, 0.5)
SendWeaponAnim(id, 0)
}
}
}
case 2:
{
if (!step_started[id])
{
step_started[id] = true
step_check_time[id] = current_time + Make_EnergyBall_Time
}
else
{
if (current_time >= step_check_time[id])
{
check_step[id] = 3
step_started[id] = false
make_energyball[id] = false
have_energyball[id] = true
set_user_weapon_attack_time(id, 0.5)
SendWeaponAnim(id, 0)
}
}
}
case 3:
{
//
if (aim_target[id])
{
if (have_energyball[id])
{
check_step[id] = 1
have_energyball[id] = false
shoot_energyball(id)
set_user_weapon_attack_time(id, 0.0)
}
}
}
}

return FMRES_IGNORED;
}
#endif

switch (check_step[id])
{
case 1:
{
if (button & IN_ATTACK)
{
check_step[id] = 1
step_started[id] = false
}
else if (button & IN_ATTACK2)
{
if (!step_started[id])
{
if (!(oldbutton & IN_ATTACK2))
{
step_started[id] = true
step_check_time[id] = current_time + Hit_Attack2_Key_Time
}
}
else
{
if (current_time >= step_check_time[id])
{
if (get_pcvar_num(g_shoot_times) != 0)

check_step[id] = 2
step_started[id] = false
make_energyball[id] = true
set_user_weapon_attack_time(id, 1.0)
SendWeaponAnim(id, 0)
}
}
}
else
{
step_started[id] = false
}
}
case 2:
{
if (button & IN_ATTACK)
{
check_step[id] = 1
step_started[id] = false

if (make_energyball[id])
{
client_print(id, print_center, "")
make_energyball[id] = false
set_user_weapon_attack_time(id, 0.0)
}
}
else if (button & IN_ATTACK2)
{
client_print(id, print_center, "<<Acu ZM - ADMIN ZOMBI/VIP>>")

if (!step_started[id])
{
step_started[id] = true
step_check_time[id] = current_time + Make_EnergyBall_Time
}
else
{
if (current_time >= step_check_time[id])
{
check_step[id] = 3
step_started[id] = false
make_energyball[id] = false
have_energyball[id] = true
set_user_weapon_attack_time(id, 1.0)
SendWeaponAnim(id, 0)
}
}
}
else
{
check_step[id] = 1
step_started[id] = false

if (make_energyball[id])
{
client_print(id, print_center, "")
make_energyball[id] = false
set_user_weapon_attack_time(id, 0.0)
}
}
}
case 3:
{
if (button & IN_ATTACK)
{
check_step[id] = 1

if (have_energyball[id])
{
client_print(id, print_center, "<<Neked van energy labdad>>")
have_energyball[id] = false
set_user_weapon_attack_time(id, 0.0)
}
}
else if (button & IN_ATTACK2)
{
static dist
dist = get_forward_view_dist(id)
if (dist < Short_Dist_Cant_Shoot)
client_print(id, print_center, "<<Acu ZM - ADMIN ZOMBI/VIP>>")
else
client_print(id, print_center, "<<ĐAcu ZM - ADMIN ZOMBI/VIP>>")
}
else
{
if (have_energyball[id])
{
client_print(id, print_center, "<<Acu ZM - ADMIN ZOMBI/VIP>")
check_step[id] = 1
have_energyball[id] = false
shoot_energyball(id)
set_user_weapon_attack_time(id, 0.0)
}
}
}
}

return FMRES_HANDLED;
}

#if defined SUPPORT_BOT_TO_USE
check_target_valid(target)
{
if (!(1 <= target <= maxplayers) || !is_user_alive(target) || zp_get_user_zombie(target))
return 0;

return 1;
}
#endif

set_user_weapon_attack_time(id, Float:next_attack_time)
{
static weap_id
weap_id = get_user_weapon(id)

static weap_name[32]
get_weaponname(weap_id, weap_name, charsmax(weap_name))

static weap_ent
weap_ent = fm_find_ent_by_owner(-1, weap_name, id)

set_weapon_next_pri_attack(weap_ent, next_attack_time)
set_weapon_next_sec_attack(weap_ent, next_attack_time)

if (weap_id == CSW_XM1014 || weap_id == CSW_M3)
set_weapon_idle_time(weap_ent, next_attack_time)
}

public fw_PlayerPreThink(id)
{
if (!is_user_alive(id))
return FMRES_IGNORED;

if (zp_get_user_zombie(id))
{
if (zp_get_user_zombie_class(id) != g_zclass_energyball)
return FMRES_IGNORED;

if (zp_get_user_nemesis(id))
return FMRES_IGNORED;

#if defined FIRST_ZOMBIE_CANT_USE
if (zp_get_user_first_zombie(id))
return FMRES_IGNORED;
#endif

if (get_pcvar_num(g_shoot_times) != 0 && energyball_num[id] <= 0)
return FMRES_IGNORED;

if (make_energyball[id] || have_energyball[id])
{
freeze_user_attack(id)
}

if (cooldown_started[id])
{
if (current_time >= cooldown_over_time[id])
{
cooldown_started[id] = false
client_print(id, print_center, "<<<Varnod kell!!!>>>", get_pcvar_float(g_cooldown))
}
}
}
else
{
if (be_hited[id])
{
if (current_time >= be_hit_check_time[id])
{
be_hited[id] = false
effect_started[id] = true

if (zp_get_user_survivor(id))
effect_over_time[id] = current_time + get_pcvar_float(g_surv_effect_time)
else
effect_over_time[id] = current_time + get_pcvar_float(g_effect_time)
}
}

if (effect_started[id])
{
#if defined WHEN_HITED_CANT_SHOOT
freeze_user_attack(id)
#endif

#if defined WHEN_HITED_CANT_MOVE
if (is_user_on_ground(id))
{
set_pev(id, pev_velocity, Float:{0.0,0.0,0.0}) // stop motion
set_pev(id, pev_maxspeed, 1.0) // prevent from moving
set_pev(id, pev_gravity, 999999.9) // set really high
}
#endif

if (current_time >= effect_over_time[id])
{
#if defined WHEN_HITED_CANT_MOVE
set_pev(id, pev_gravity, get_cvar_float("zp_human_gravity"))
#endif

effect_started[id] = false
}
}

if (touched_energyball[id])
{
if (current_time - touch_energyball_time[id] >= 0.2)
{
touched_energyball[id] = false
}
}
}

return FMRES_IGNORED;
}

freeze_user_attack(id)
{
static weap_id
weap_id = get_user_weapon(id)

static weap_name[32]
get_weaponname(weap_id, weap_name, charsmax(weap_name))

static weap_ent
weap_ent = fm_find_ent_by_owner(-1, weap_name, id)

if (get_weapon_next_pri_attack(weap_ent) <= 0.1)
set_weapon_next_pri_attack(weap_ent, 1.0)

if (get_weapon_next_sec_attack(weap_ent) <= 0.1)
set_weapon_next_sec_attack(weap_ent, 1.0)

if (weap_id == CSW_XM1014 || weap_id == CSW_M3)
{
if (get_weapon_idle_time(weap_ent) <= 0.1)
set_weapon_idle_time(weap_ent, 1.0)
}
}

public fw_Touch(ptr, ptd)
{
if (!pev_valid(ptr))
return FMRES_IGNORED;

static classname[32]
pev(ptr, pev_classname, classname, 31)

if (!equal(classname, "EnergyBall_Ent"))
return FMRES_IGNORED;

static owner
owner = pev(ptr, pev_iuser1)

static Float:ent_origin[3]
pev(ptr, pev_origin, ent_origin)

static sound_index
sound_index = random_num(0, sizeof EnergyBall_Touch_Sound -1)
engfunc(EngFunc_EmitSound, ptr, CHAN_VOICE, EnergyBall_Touch_Sound[sound_index], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

static ent_speed
ent_speed = pev(ptr, pev_iuser4) - EnergyBall_Deduct_Speed
set_pev(ptr, pev_iuser4, ent_speed)

pev(ptd, pev_classname, classname, 31)

if (equal(classname, "EnergyBall_Ent"))
{
set_pev(ptr, pev_iuser2, 1)
}
else if ((1 <= ptd <= 32) && is_user_alive(ptd) && !touched_energyball[ptd])
{
#if !(defined HITED_ZOMBIE_KNOCKBACK)
if (zp_get_user_zombie(ptd))
return FMRES_IGNORED;
#endif

if (round_end)
return FMRES_IGNORED;

touched_energyball[ptd] = true
touch_energyball_time[ptd] = current_time

static Float:origin[3], Float:velocity1[3], Float:velocity2[3]
pev(ptd, pev_origin, origin)
pev(ptd, pev_velocity, velocity1)

particle_burst_effect(origin)

velocity2[0] = origin[0] - ent_origin[0]
velocity2[1] = origin[1] - ent_origin[1]
velocity2[2] = origin[2] - ent_origin[2]

static Float:speed
speed = vector_length(velocity2)

speed = floatmax(float(ent_speed) - 800.0, 0.0) / (speed > 0.0 ? speed : 1.0)

xs_vec_mul_scalar(velocity2, speed, velocity2)
xs_vec_sub(velocity2, velocity1, velocity2)

speed = vector_length(velocity2)
if (speed > 800.0)
xs_vec_mul_scalar(velocity2, (800.0 / speed), velocity2)
floatclamp(velocity2[2], -200.0, 800.0)

set_pev(ptd, pev_velocity, velocity2)

if (!zp_get_user_zombie(ptd))
{
if (fm_get_user_godmode(ptd) || get_user_godmode(ptd))
return FMRES_IGNORED;

screen_shake(ptd, 6, 1, 5)
screen_fade(ptd, 0.2, 220, 0, 0, 150)

#if defined WHEN_HITED_DROP_WEAPON
//
if (!zp_get_user_survivor(ptd))
{
static EnergyBall_fly_time
EnergyBall_fly_time = pev(ptr, pev_iuser3)

if (EnergyBall_fly_time <= 10)
drop_current_weapon(ptd)
}
#endif

static damage
damage = get_pcvar_num(g_damage)

if (zp_get_user_survivor(ptd))
damage = floatround(float(damage) * Damage_Survivor_Multiplier)

damage_human_user(owner, ptd, damage, (4.0 /5.0), DMG_BLAST, "EnergyBall")
}
}

return FMRES_IGNORED;
}

damage_human_user(attacker, victim, damage, Float:damage_armor_rate, damage_type, weapon[])
{
new health = get_user_health(victim)
new armor = get_user_armor(victim)
new damage_armor = floatround(float(damage) * damage_armor_rate)
if (damage_armor > 0 && armor > 0)
{
if (armor > damage_armor)
{
damage -= damage_armor
fm_set_user_armor(victim, armor - damage_armor)
}
else
{
damage -= armor
fm_set_user_armor(victim, 0)
}
}

if (damage > 0)
{
if (health > damage)
{
set_user_takedamage(victim, damage, damage_type)
effect_started[victim] = false
be_hited[victim] = true
be_hit_check_time[victim] = current_time + 1.0
}
else
{
new frags = get_user_frags(attacker)

#if defined WHEN_DAMAGE_OVER_HEALTH_INFECT

if (is_infect_round && !(zp_get_user_last_human(victim) || zp_get_user_survivor(victim)))
{
if (zp_infect_user(victim, 0))
{
new weapon_string[64]
format(weapon_string, charsmax(weapon_string), "%s (Infect)", weapon)
SendDeathMsg(attacker, victim, 1, weapon_string)
cs_set_user_deaths(victim, get_user_deaths(victim) + 1)
}
else
{
set_msg_block(g_msgDeathMsg, BLOCK_SET)
ExecuteHamB(Ham_Killed, victim, attacker, 0)
set_msg_block(g_msgDeathMsg, BLOCK_NOT)
SendDeathMsg(attacker, victim, 0, weapon)
}
}
else
{
#endif

set_msg_block(g_msgDeathMsg, BLOCK_SET)
ExecuteHamB(Ham_Killed, victim, attacker, 0)
set_msg_block(g_msgDeathMsg, BLOCK_NOT)
SendDeathMsg(attacker, victim, 0, weapon)

#if defined WHEN_DAMAGE_OVER_HEALTH_INFECT
}
#endif

fm_set_user_frags(attacker, frags + 1)
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 1)

FixDeadAttrib(victim, (is_user_alive(victim) ? 0 : 1))
Update_ScoreInfo(victim, get_user_frags(victim), get_user_deaths(victim))
FixDeadAttrib(attacker, (is_user_alive(attacker) ? 0 : 1))
Update_ScoreInfo(attacker, get_user_frags(attacker), get_user_deaths(attacker))

/*
new k_name[32], v_name[32], k_authid[32], v_authid[32], k_team[10], v_team[10]
get_user_name(attacker, k_name, charsmax(k_name))
get_user_team(attacker, k_team, charsmax(k_team))
get_user_authid(attacker, k_authid, charsmax(k_authid))
get_user_name(victim, v_name, charsmax(v_name))
get_user_team(victim, v_team, charsmax(v_team))
get_user_authid(victim, v_authid, charsmax(v_authid))
log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
k_name, get_user_userid(attacker), k_authid, k_team,
v_name, get_user_userid(victim), v_authid, v_team, weapon)
*/
}
}
}

public fw_StartFrame()
{
current_time = get_gametime()

static Float:next_check_time, id
if (current_time < next_check_time)
return FMRES_IGNORED;
else
next_check_time = current_time + 0.1

#if defined HAVE_DYNAMIC_LIGHT_EFFECT
static Float:origin[3]
#endif

for (id = 1; id <= maxplayers; id++)
{
if (!is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != g_zclass_energyball)
continue;

if (make_energyball[id])
{
#if defined HAVE_DYNAMIC_LIGHT_EFFECT
pev(id, pev_origin, origin)

create_dynamic_light(origin, 10, 235, 255, 0, 2)
#endif
if (current_time > next_play_sound_time[id])
{
engfunc(EngFunc_EmitSound, id, CHAN_VOICE, EnergyBall_Make_Sound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
next_play_sound_time[id] = current_time + 1.0
}
}
else if (have_energyball[id])
{
#if defined HAVE_DYNAMIC_LIGHT_EFFECT
pev(id, pev_origin, origin)

create_dynamic_light(origin, 16, 60, 255, 20, 2)
#endif

fm_set_weaponmodel_ent(id, EnergyBall_P_Model)

if (pev_valid(g_ent_weaponmodel[id]))
{
fm_set_rendering(g_ent_weaponmodel[id], kRenderFxGlowShell, 60, 255, 20, kRenderNormal, 255)
}
}

if (!have_energyball[id])
{
fm_remove_weaponmodel_ent(id)
}
}

return FMRES_IGNORED;
}

#if defined WHEN_DAMAGE_MAKE_FAIL
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
if (victim == attacker || !is_user_connected(attacker))
return HAM_IGNORED;

if (!zp_get_user_zombie(victim) || zp_get_user_zombie(attacker))
return HAM_IGNORED;

if (zp_get_user_zombie_class(victim) != g_zclass_energyball || zp_get_user_nemesis(victim))
return HAM_IGNORED;


if (!(damage_type & DMG_BULLET))
return HAM_IGNORED;

if (!make_energyball[victim] && !have_energyball[victim])
{
get_attack_damage[victim] = 0.0
return HAM_IGNORED;
}

if (current_time > damage_check_time[victim])
{
get_attack_damage[victim] = 0.0
damage_check_time[victim] = current_time + Damage_Check_Time_Range
}

get_attack_damage[victim] += damage

if (get_attack_damage[victim] >= Get_Amount_Of_Damage)
{
get_attack_damage[victim] = 0.0
damage_check_time[victim] = current_time + Damage_Check_Time_Range

check_step[victim] = 1
step_started[victim] = false
make_energyball[victim] = false
have_energyball[victim] = false
//set_user_weapon_attack_time(id, 0.0)
}

return HAM_IGNORED;
}
#endif

public shoot_energyball(id)
{
if (!is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != g_zclass_energyball)
return;

new dist = get_forward_view_dist(id)
if (dist < Short_Dist_Cant_Shoot)   
return;

SendWeaponAnim(id, 7)

fm_remove_weaponmodel_ent(id)

new Float:origin[3], Float:vector[3]
pev(id, pev_origin, origin)
velocity_by_aim(id, 45, vector)
xs_vec_add(origin, vector, origin)

new Float:angles[3]
pev(id, pev_angles, angles)

new ent = create_entity_object2("EnergyBall_Ent", SOLID_BBOX, MOVETYPE_BOUNCEMISSILE, 1, EnergyBall_W_Model, Float:{ 20.0, 20.0, 20.0 }, angles, origin)
if (ent == -1)   return;

new Float:speed = vector_length(vector)
speed = get_pcvar_float(g_speed) / (speed > 0.0 ? speed : 1.0)
xs_vec_mul_scalar(vector, speed, vector)
speed = vector_length(vector)
set_pev(ent, pev_iuser4, floatround(speed))
set_pev(ent, pev_iuser3, 0)
set_pev(ent, pev_iuser2, 0)
set_pev(ent, pev_iuser1, id)
set_pev(ent, pev_velocity, vector)
fm_set_rendering(ent, kRenderFxGlowShell, 20, 255, 20, kRenderNormal, 255)
engfunc(EngFunc_EmitSound, id, CHAN_VOICE, EnergyBall_Shoot_Sound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
create_beam_follow(ent, 20, 255, 20, 200)

new param[4]
param[0] = ent
param[1] = 100   
param[2] = 3   
param[3] = 0   
set_task(1.0, "energyball_fly", Task_ID_1, param, 4)

if (get_pcvar_num(g_shoot_times) != 0)
{
energyball_num[id]--

if (energyball_num[id] > 0)
client_printcolor(id, "!g[Acu ZM]!y Kepessegedet !g 20 seckent !yсhasznalhatod.", energyball_num[id])
else
client_printcolor(id, "!g[Acu ZM]!y Kepessegedet !g 20 seckent !yсhasznalhatod.", energyball_num[id])
}

cooldown_started[id] = true
cooldown_over_time[id] = current_time + get_pcvar_float(g_cooldown)
}

public energyball_fly(param[4])
{
new ent = param[0]

if (!pev_valid(ent))
return;

if (round_end)
{
if (pev_valid(ent))
{
//kill_beam(ent)
engfunc(EngFunc_RemoveEntity, ent)
}

return;
}

kill_beam(ent)
create_beam_follow(ent, 20, 255, 20, 200)

new Float:velocity[3]
pev(ent, pev_velocity, velocity)
new Float:speed = vector_length(velocity)

new Float:origin[3]
pev(ent, pev_origin, origin)

new EnergyBall_fly_time = pev(ent, pev_iuser3)
set_pev(ent, pev_iuser3, EnergyBall_fly_time + 1)

new touch_EnergyBall = pev(ent, pev_iuser2)

if (is_ent_stuck(ent))
param[3]++
else
param[3] = 0

if (param[1] <= 0 || touch_EnergyBall || param[3] >= 5 || speed <= 20.0)
{
set_pev(ent, pev_velocity, { 0.0, 0.0, 0.0 })
create_explo2(origin)
create_blast_effect(origin, 20, 255, 20, 200, get_pcvar_float(g_explosion_range))

if (!round_end)
search_in_range_target(origin)

if (pev_valid(ent))
engfunc(EngFunc_RemoveEntity, ent)

return;
}

if (param[2] <= 0)
{
new set_speed = pev(ent, pev_iuser4)
speed = float(set_speed) / (speed > 0.0 ? speed : 1.0)
xs_vec_mul_scalar(velocity, speed, velocity)
set_pev(ent, pev_velocity, velocity)
param[2] = 3
}

param[2]--
param[1]--

set_task(0.1, "energyball_fly", Task_ID_1, param, 4)
}

public search_in_range_target(Float:origin[3])
{
new i, Float:target_origin[3], Float:dist
for (i = 1; i <= maxplayers; i++)
{
if (!is_user_alive(i) || zp_get_user_zombie(i))
continue;

if (fm_get_user_godmode(i) || get_user_godmode(i))
continue;

pev(i, pev_origin, target_origin)
dist = get_distance_f(origin, target_origin)
if (dist > get_pcvar_float(g_explosion_range))
continue;

//screen_fade(i, 0.2, 20, 255, 20, 150)
screen_fade(i, 0.2, 122, 55, 139, 150)

be_hited[i] = true
be_hit_check_time[i] = current_time
}
}

public zp_user_humanized_post(id)
{
fm_remove_weaponmodel_ent(id)
reset_cvars(id)
}

#if defined WHEN_DAMAGE_OVER_HEALTH_INFECT
public zp_round_started(gamemode, id)
{
is_infect_round = (gamemode == MODE_INFECTION || gamemode == MODE_MULTI)
}
#endif

public logevent_round_end()
{
round_end = true
}

public client_connect(id)
{
reset_cvars(id)
}

public client_disconnect(id)
{
fm_remove_weaponmodel_ent(id)
reset_cvars(id)
}

public NewRound(id)
{
fm_remove_weaponmodel_ent(id)
reset_cvars(id)
}

public Death()
{
new id = read_data(2)
if (!(1 <= id <= maxplayers))
return;

fm_remove_weaponmodel_ent(id)
reset_cvars(id)
}

public event_round_start()
{
round_end = false

remove_energyball()

#if defined WHEN_DAMAGE_OVER_HEALTH_INFECT
is_infect_round = false
#endif
}

public reset_cvars(id)
{
energyball_num[id] = get_pcvar_num(g_shoot_times)
check_step[id] = 1
step_started[id] = false
step_check_time[id] = 0.0
make_energyball[id] = false
have_energyball[id] = false
cooldown_started[id] = false
cooldown_over_time[id] = 0.0
be_hited[id] = false
be_hit_check_time[id] = 0.0
effect_started[id] = false
effect_over_time[id] = 0.0
touched_energyball[id] = false
touch_energyball_time[id] = 0.0
g_ent_weaponmodel[id] = 0
}

public remove_energyball()
{
new ent = fm_find_ent_by_class(-1, "EnergyBall_Ent")
while(ent)
{
engfunc(EngFunc_RemoveEntity, ent)
ent = fm_find_ent_by_class(ent, "EnergyBall_Ent")
}
}

stock create_entity_object2(const classname[], solid, movetype, sequence, const model[], Float:size[3], Float:angles[3], Float:origin[3])
{
// Create entity
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
if (!pev_valid(ent)) return -1;

// Set entity status
set_pev(ent, pev_classname, classname)
set_pev(ent, pev_solid, solid)
set_pev(ent, pev_movetype, movetype)
set_pev(ent, pev_sequence, sequence)

// Set entity size
new Float:half_size[3], Float:mins[3], Float:maxs[3]
half_size[0] = size[0] / 2.0
half_size[1] = size[1] / 2.0
half_size[2] = size[2] / 2.0
mins[0] = 0.0 - half_size[0]
mins[1] = 0.0 - half_size[1]
mins[2] = 0.0 - half_size[2]
maxs[0] = half_size[0]
maxs[1] = half_size[1]
maxs[2] = half_size[2]
engfunc(EngFunc_SetSize, ent, mins, maxs)

// Set entity angles
set_pev(ent, pev_angles, angles)

// Set entity model
if (strlen(model) > 0)
engfunc(EngFunc_SetModel, ent, model)

// Set entity origin
set_pev(ent, pev_origin, origin)

return ent;
}

stock get_forward_view_dist(id)
{
new iOrigin1[3], iOrigin2[3]
get_user_origin(id, iOrigin1, 0)
get_user_origin(id, iOrigin2, 3)
new dist = get_distance(iOrigin1, iOrigin2)

return dist;
}

stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
{
static Float:color[3]
color[0] = float(r)
color[1] = float(g)
color[2] = float(b)

set_pev(entity, pev_renderfx, fx)
set_pev(entity, pev_rendercolor, color)
set_pev(entity, pev_rendermode, render)
set_pev(entity, pev_renderamt, float(amount))
}

stock fm_set_user_armor(index, armor)
{
set_pev(index, pev_armorvalue, float(armor));

return 1;
}

stock fm_set_user_health(index, health)
{
health > 0 ? set_pev(index, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, index);

return 1;
}

stock set_user_takedamage(index, damage, damage_type)
{
new Float:origin[3], iOrigin[3]
pev(index, pev_origin, origin)
FVecIVec(origin, iOrigin)

message_begin(MSG_ONE, g_msgDamage, _, index)
write_byte(21) // damage save
write_byte(20) // damage take
write_long(damage_type) // damage type
write_coord(iOrigin[0]) // position.x
write_coord(iOrigin[1]) // position.y
write_coord(iOrigin[2]) // position.z
message_end()

fm_set_user_health(index, max(get_user_health(index) - damage, 0))
}

stock fm_set_user_frags(index, frags)
{
set_pev(index, pev_frags, float(frags));

return 1;
}

stock is_user_on_ground(index)
{
if (pev(index, pev_flags) & FL_ONGROUND)
return true;

return false;
}

stock is_ent_stuck(ent)
{
static Float:originF[3]
pev(ent, pev_origin, originF)

engfunc(EngFunc_TraceHull, originF, originF, 0, HULL_HEAD, ent, 0)

if (get_tr2(0, TR_StartSolid) || get_tr2(0, TR_AllSolid) || !get_tr2(0, TR_InOpen))
return true;

return false;
}

stock Float:get_weapon_next_pri_attack(entity)
{
return get_pdata_float(entity, OFFSET_flNextPrimaryAttack, OFFSET_LINUX_WEAPONS)
}

stock set_weapon_next_pri_attack(entity, Float:time)
{
set_pdata_float(entity, OFFSET_flNextPrimaryAttack, time, OFFSET_LINUX_WEAPONS)
}

stock Float:get_weapon_next_sec_attack(entity)
{
return get_pdata_float(entity, OFFSET_flNextSecondaryAttack, OFFSET_LINUX_WEAPONS)
}

stock set_weapon_next_sec_attack(entity, Float:time)
{
set_pdata_float(entity, OFFSET_flNextSecondaryAttack, time, OFFSET_LINUX_WEAPONS)
}

stock Float:get_weapon_idle_time(entity)
{
return get_pdata_float(entity, OFFSET_flTimeWeaponIdle, OFFSET_LINUX_WEAPONS)
}

stock set_weapon_idle_time(entity, Float:time)
{
set_pdata_float(entity, OFFSET_flTimeWeaponIdle, time, OFFSET_LINUX_WEAPONS)
}

stock fm_find_ent_by_owner(entity, const classname[], owner)
{
while ((entity = engfunc(EngFunc_FindEntityByString, entity, "classname", classname)) && (pev(entity, pev_owner) != owner)) {}

return entity;
}

stock fm_find_ent_by_class(index, const classname[])
{
return engfunc(EngFunc_FindEntityByString, index, "classname", classname)
}

#if defined WHEN_HITED_DROP_WEAPON
stock drop_current_weapon(id)
{
static weapon_id, clip, ammo
weapon_id = get_user_weapon(id, clip, ammo)

if (((1<<weapon_id) & PRIMARY_WEAPONS_BIT_SUM) || ((1<<weapon_id) & SECONDARY_WEAPONS_BIT_SUM))
{
static weapon_name[32]
get_weaponname(weapon_id, weapon_name, sizeof weapon_name - 1)
engclient_cmd(id, "drop", weapon_name)
}
}
#endif

stock PlaySound(index, const sound[])
{
if (equal(sound[strlen(sound)-4], ".mp3"))
client_cmd(index, "mp3 play ^"sound/%s^"", sound)
else
client_cmd(index, "spk ^"%s^"", sound)
}

stock SendWeaponAnim(id, iAnim)
{
set_pev(id, pev_weaponanim, iAnim)

message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
write_byte(iAnim)
write_byte(pev(id, pev_body))
message_end()
}

stock SendDeathMsg(attacker, victim, headshot, const weapon[]) // Send Death Message
{
message_begin(MSG_BROADCAST, g_msgDeathMsg)
write_byte(attacker) // killer
write_byte(victim) // victim
write_byte(headshot) // headshot flag [1 or 0]
write_string(weapon) // killer's weapon
message_end()
}

stock FixDeadAttrib(id, dead_flag = 0) // Fix Dead Attrib on scoreboard
{
message_begin(MSG_BROADCAST, g_msgScoreAttrib)
write_byte(id) // id
write_byte(dead_flag) // attrib
message_end()
}

stock Update_ScoreInfo(id, frags, deaths) // Update Player's Frags and Deaths
{
message_begin(MSG_BROADCAST, g_msgScoreInfo)
write_byte(id) // id
write_short(frags) // frags
write_short(deaths) // deaths
write_short(0) // class?
write_short(get_user_team(id)) // team
message_end()
}

stock screen_shake(id, amplitude = 4, duration = 2, frequency = 10)
{
message_begin(MSG_ONE_UNRELIABLE, g_msgScreenShake, _, id)
write_short((1<<12)*amplitude)
write_short((1<<12)*duration)
write_short((1<<12)*frequency)
message_end()
}

stock screen_fade(id, Float:time, red, green, blue, alpha)
{
message_begin(MSG_ONE_UNRELIABLE, g_msgScreenFade, _, id)
write_short((1<<12)*1) // duration
write_short(floatround((1<<12)*time)) // hold time
write_short(0x0000) // fade type
write_byte(red) // red
write_byte(green) // green
write_byte(blue) // blue
write_byte(alpha) // alpha
message_end()
}

stock particle_burst_effect(const Float:originF[3])
{
// Particle burst
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_PARTICLEBURST) // TE id
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
write_short(50) // radius
write_byte(70) // color
write_byte(3) // duration (will be randomized a bit)
message_end()
}

#if defined HAVE_DYNAMIC_LIGHT_EFFECT
stock create_dynamic_light(const Float:originF[3], radius, red, green, blue, life)
{
// Dynamic light, effect world, minor entity effect
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_DLIGHT) // TE id: 27
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
write_byte(radius) // radius in 10's
write_byte(red) //red
write_byte(green) //green
write_byte(blue) //blue
write_byte(life) // life in 10's
write_byte(0) // decay rate in 10's
message_end()
}
#endif

stock create_beam_follow(entity, red, green, blue, brightness)
{
//Entity add colored trail
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW) // TE id
write_short(entity) // entity
write_short(g_trailSpr) // sprite
write_byte(1) // life
write_byte(10) // width
write_byte(red) // r
write_byte(green) // g
write_byte(blue) // b
write_byte(brightness) // brightness
message_end()
}

stock create_explo2(const Float:originF[3])
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_EXPLOSION2) // TE id: 12
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
write_byte(1) // starting color
write_byte(10) // num colors
message_end()
}

stock create_blast_effect(const Float:originF[3], red, green, blue, brightness, Float:radius)
{
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_BEAMCYLINDER) // TE id: 21
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
engfunc(EngFunc_WriteCoord, originF[0]) // x axis
engfunc(EngFunc_WriteCoord, originF[1]) // y axis
engfunc(EngFunc_WriteCoord, originF[2] + radius) // z axis
write_short(g_shokewaveSpr) // sprite
write_byte(0) // startframe
write_byte(0) // framerate
write_byte(4) // life
write_byte(60) // width
write_byte(0) // noise
write_byte(red) // red
write_byte(green) // green
write_byte(blue) // blue
write_byte(brightness) // brightness
write_byte(0) // speed
message_end()
}

stock kill_beam(entity)
{
// Kill all beams attached to entity
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_KILLBEAM) // TE id: 99
write_short(entity)
message_end()
}

stock fm_get_user_godmode(index)
{
new Float:val;
pev(index, pev_takedamage, val);

return (val == DAMAGE_NO);
}

stock fm_set_weaponmodel_ent(id, const weapon_model[])
{
// Set model on entity or make a new one if unexistant
if (!pev_valid(g_ent_weaponmodel[id]))
{
g_ent_weaponmodel[id] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
if (!pev_valid(g_ent_weaponmodel[id])) return;

set_pev(g_ent_weaponmodel[id], pev_classname, "weapon_model")
set_pev(g_ent_weaponmodel[id], pev_movetype, MOVETYPE_FOLLOW)
set_pev(g_ent_weaponmodel[id], pev_aiment, id)
set_pev(g_ent_weaponmodel[id], pev_owner, id)
}

static model[100]

if (equal(weapon_model, ""))
{
static weap_id, weap_name[32]
weap_id = get_user_weapon(id)
get_weaponname(weap_id, weap_name, sizeof weap_name - 1)
formatex(model, sizeof model - 1, "models/p_%s.mdl", weap_name[7])
}
else
{
copy(model, sizeof model - 1, weapon_model)
}

engfunc(EngFunc_SetModel, g_ent_weaponmodel[id], model)
}

stock fm_remove_weaponmodel_ent(id)
{
// Remove "weaponmodel" ent if present
if (pev_valid(g_ent_weaponmodel[id]))
{
engfunc(EngFunc_RemoveEntity, g_ent_weaponmodel[id])
g_ent_weaponmodel[id] = 0
}
}

public Event_CurrentWeapon(id)
{
new weaponID = read_data(2)

if (weaponID == CSW_SMOKEGRENADE)

if(zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == g_zclass_energyball && !zp_get_user_nemesis(id))
{
entity_set_string(id, EV_SZ_viewmodel, KNOCKBOMB_ENERGYBALL)
}

if (weaponID == CSW_FLASHBANG)

if(zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == g_zclass_energyball && !zp_get_user_nemesis(id))
{
entity_set_string(id, EV_SZ_viewmodel, KNOCKBOMB_ENERGYBALL)
}

}

public CPlayer__TakeDamage(id, iVictim, iInflictor, iAttacker, Float:flDamage, bitsDamage)
{
if (zp_get_user_zombie_class(id) == g_zclass_energyball && zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && !zp_get_user_survivor(id))
{
new rand = random_num(1,2)
switch(rand)
{
case 1: emit_sound(id, CHAN_WEAPON, pain_energyball_sound[0], 1.0, ATTN_NORM, 0, PITCH_LOW)
case 2: emit_sound(id, CHAN_WEAPON, pain_energyball_sound2[0], 1.0, ATTN_NORM, 0, PITCH_LOW)
}
}
}

public Death_Zombie(id)
{
new victim=read_data(2)

if(zp_get_user_zombie(victim) && zp_get_user_zombie_class(victim) == g_zclass_energyball && !zp_get_user_nemesis(victim))
{
emit_sound(id, CHAN_WEAPON, death_energyball_sound[0], 1.0, ATTN_NORM, 0, PITCH_LOW)   
}

}

stock client_printcolor(id, const input[], any:...) // stock by tERoR
{
static iPlayersNum[32], iCount; iCount = 1
static szMsg[191]

vformat(szMsg, charsmax(szMsg), input, 3)

replace_all(szMsg, 190, "!g", "^4")
replace_all(szMsg, 190, "!y", "^1")
replace_all(szMsg, 190, "!t", "^3")
replace_all(szMsg, 190, "!t2", "^0")

if(id) iPlayersNum[0] = id
else get_players(iPlayersNum, iCount, "ch")

for(new i = 0; i < iCount; i++)
{
if(is_user_connected(iPlayersNum[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayersNum[i])
write_byte(iPlayersNum[i])
write_string(szMsg)
message_end()
}
}
}

_________________
http://www.easyrankup.eu


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Oldal átalakito
HozzászólásElküldve:2012.01.25. 15:01 
Offline
Őskövület
Avatar

Csatlakozott:2011.09.17. 17:54
Hozzászólások:2350
Megköszönt másnak: 40 alkalommal
Megköszönték neki: 57 alkalommal
Fix 2:

Kód:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <xs>
#include <fun>
#include <engine>
#include <cstrike>
#include <zombieplague>

//#define FIRST_ZOMBIE_CANT_USE   
#define HAVE_DYNAMIC_LIGHT_EFFECT   
#define WHEN_HITED_DROP_WEAPON   
#define WHEN_HITED_CANT_SHOOT   
#define WHEN_HITED_CANT_MOVE   
#define WHEN_DAMAGE_OVER_HEALTH_INFECT   
#define WHEN_DAMAGE_MAKE_FAIL   
#define HITED_ZOMBIE_KNOCKBACK   

#if defined WHEN_DAMAGE_MAKE_FAIL
#define Damage_Check_Time_Range 2.0   
#define Get_Amount_Of_Damage 300.0   
#endif

#define Hit_Attack2_Key_Time 0.8   
#define Make_EnergyBall_Time 1.4   
#define EnergyBall_Deduct_Speed   5   
#define Short_Dist_Cant_Shoot 100
const Float:Damage_Survivor_Multiplier = 1.0   

#define Task_ID_1 param[0]+5333

#if defined WHEN_HITED_DROP_WEAPON
// Weapon bitsums
const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|
(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)

const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)
#endif

// Weapons Offsets (win32)
const OFFSET_flNextPrimaryAttack = 46
const OFFSET_flNextSecondaryAttack = 47
const OFFSET_flTimeWeaponIdle = 48

// Linux diff's
const OFFSET_LINUX_WEAPONS = 4

// Zombie Attributes
new const zclass_name[] = { "VIP/ADMIN Zombie" }
new const zclass_info[] = { "- Csak adminnak+VIP \y[ADMINVIP]" }
new const zclass_model[] = { "psih_cso" }
new const zclass_clawmodel[] = {"v_energeball_new.mdl" }
new KNOCKBOMB_ENERGYBALL[] = "models/tx/bombjump/v_psihoball.mdl"
const zclass_health = 2400
const zclass_speed = 230
const Float:zclass_gravity = 0.7
const Float:zclass_knockback = 0.8

// Model and Sound
new const EnergyBall_P_Model[] = { "models/tx/p_snowball.mdl" }
new const EnergyBall_W_Model[] = { "models/tx/w_snowball.mdl" }
new const EnergyBall_Make_Sound[] = { "weapons/electro4.wav" }
new const EnergyBall_Shoot_Sound[] = { "weapons/gauss2.wav" }
new const EnergyBall_Touch_Sound[][] = { "weapons/ric_conc-1.wav", "weapons/ric_conc-2.wav" }
new const g_infect_sound[] = "tox_cso/energyinfect.wav"
new const pain_energyball_sound[] = "tox_cso/zompain.wav"
new const pain_energyball_sound2[] = "tox_cso/zompain.wav"
new const death_energyball_sound[] = "tox_cso/zombie_death.wav"

// Zombie Class ID
new g_zclass_energyball

// Cvars
new g_shoot_times, g_speed, g_damage, g_cooldown, g_explosion_range, g_effect_time, g_surv_effect_time
new maxplayers, bool:round_end, Float:current_time
new g_msgScreenShake, g_msgScreenFade, g_msgDamage
new g_msgDeathMsg, g_msgScoreAttrib, g_msgScoreInfo
new g_trailSpr, g_shokewaveSpr

// Cvars
new energyball_num[33]
new check_step[33], bool:step_started[33], Float:step_check_time[33]
new bool:make_energyball[33], bool:have_energyball[33]
new bool:cooldown_started[33], Float:cooldown_over_time[33]
new bool:be_hited[33], Float:be_hit_check_time[33]
new bool:effect_started[33], Float:effect_over_time[33]
new Float:next_play_sound_time[33]
new bool:touched_energyball[33], Float:touch_energyball_time[33]
new g_ent_weaponmodel[33]

#if defined WHEN_DAMAGE_MAKE_FAIL
new Float:get_attack_damage[33], Float:damage_check_time[33]
#endif

#if defined WHEN_DAMAGE_OVER_HEALTH_INFECT
new bool:is_infect_round
#endif


public plugin_init()
{
register_plugin("ZP Class Energy Ball(Tesla)", "2.1", "Jim/tERoR edit")

g_shoot_times = register_cvar("zp_zclass_eb_shoottimes", "10")   
g_speed = register_cvar("zp_zclass_eb_speed", "1500")   
g_damage = register_cvar("zp_zclass_eb_damage", "50")   
g_cooldown = register_cvar("zp_zclass_eb_cooldown", "20.0")   
g_explosion_range = register_cvar("zp_zclass_eb_exploderange", "300")   
g_effect_time = register_cvar("zp_zclass_eb_effecttime", "4.0")   
g_surv_effect_time = register_cvar("zp_zclass_eb_surveffecttime", "0.0")

register_forward(FM_CmdStart, "fw_CmdStart")
register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")
register_forward(FM_Touch, "fw_Touch")
register_forward(FM_StartFrame, "fw_StartFrame")

register_event("DeathMsg","Death_Zombie","a")
RegisterHam(Ham_TakeDamage, "player", "CPlayer__TakeDamage");
register_event("CurWeapon", "Event_CurrentWeapon", "be", "1=1")

register_event("ResetHUD","NewRound","be")
register_event("DeathMsg", "Death", "a")
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
register_logevent("logevent_round_end", 2, "1=Round_End")
g_zclass_energyball = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)

maxplayers = get_maxplayers()
g_msgScreenShake = get_user_msgid("ScreenShake")
g_msgScreenFade = get_user_msgid("ScreenFade")
g_msgDamage = get_user_msgid("Damage")
g_msgDeathMsg = get_user_msgid("DeathMsg")
g_msgScoreAttrib = get_user_msgid("ScoreAttrib")
g_msgScoreInfo = get_user_msgid("ScoreInfo")
}

public plugin_precache()
{
precache_model(EnergyBall_P_Model)
precache_model(EnergyBall_W_Model)
precache_model(KNOCKBOMB_ENERGYBALL)
precache_sound(EnergyBall_Make_Sound)
precache_sound(EnergyBall_Shoot_Sound)
precache_sound("tox_cso/zompain.wav")
precache_sound("tox_cso/zombie_death.wav" )
precache_sound("tox_cso/energyinfect.wav")

for (new i = 0; i < sizeof EnergyBall_Touch_Sound; i++)
precache_sound(EnergyBall_Touch_Sound[i])

g_trailSpr = precache_model("sprites/zbeam4.spr")
g_shokewaveSpr = precache_model( "sprites/shockwave.spr")

}

public zp_user_infected_post(id, infector)
{
reset_cvars(id)

if (zp_get_user_zombie_class(id) == g_zclass_energyball)
{
emit_sound(id, CHAN_WEAPON, g_infect_sound[0], 1.0, ATTN_NORM, 0, PITCH_LOW)
client_printcolor(id, "!g[Acu ZM]!y Kepessegedet !g 20 seckent !yсhasznalhatod..[Energy LABDA]")
}
}

public zp_user_infected_pre(id)
{
if(zp_get_user_next_class(id) == g_zclass_energyball)
{
}
}

public fw_CmdStart(id, uc_handle, seed)
{
if (!is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != g_zclass_energyball)
return FMRES_IGNORED;

if (zp_get_user_nemesis(id))
return FMRES_IGNORED;

#if defined FIRST_ZOMBIE_CANT_USE
if (zp_get_user_first_zombie(id))
return FMRES_IGNORED;
#endif

static weap_id
weap_id = get_user_weapon(id)

if (weap_id != CSW_KNIFE)
{
if (make_energyball[id] || have_energyball[id])
{
check_step[id] = 1
step_started[id] = false
make_energyball[id] = false
have_energyball[id] = false
set_user_weapon_attack_time(id, 0.0)
}

return FMRES_IGNORED;
}

if (get_pcvar_num(g_shoot_times) != 0 && energyball_num[id] <= 0)
return FMRES_IGNORED;

if (cooldown_started[id])
return FMRES_IGNORED;

static button, oldbutton
button = get_uc(uc_handle, UC_Buttons)
oldbutton = pev(id, pev_oldbuttons)

#if defined SUPPORT_BOT_TO_USE
if (is_user_bot(id))
{
static target, body
get_user_aiming(id, target, body)
if (check_target_valid(target))
{
aim_target[id] = target
aim_check_over_time[id] = current_time + 20.0
}
else
{
aim_target[id] = 0

if (current_time >= aim_check_over_time[id])
{
check_step[id] = 1
step_started[id] = false

if (make_energyball[id] || have_energyball[id])
{
make_energyball[id] = false
have_energyball[id] = false
set_user_weapon_attack_time(id, 0.0)
}
}
}

switch (check_step[id])
{
case 1:
{
if (!step_started[id])
{
if (aim_target[id])
{
step_started[id] = true
step_check_time[id] = current_time + Hit_Attack2_Key_Time
}
}
else
{
if (current_time >= step_check_time[id])
{
check_step[id] = 2
step_started[id] = false
make_energyball[id] = true
set_user_weapon_attack_time(id, 0.5)
SendWeaponAnim(id, 0)
}
}
}
case 2:
{
if (!step_started[id])
{
step_started[id] = true
step_check_time[id] = current_time + Make_EnergyBall_Time
}
else
{
if (current_time >= step_check_time[id])
{
check_step[id] = 3
step_started[id] = false
make_energyball[id] = false
have_energyball[id] = true
set_user_weapon_attack_time(id, 0.5)
SendWeaponAnim(id, 0)
}
}
}
case 3:
{
//
if (aim_target[id])
{
if (have_energyball[id])
{
check_step[id] = 1
have_energyball[id] = false
shoot_energyball(id)
set_user_weapon_attack_time(id, 0.0)
}
}
}
}

return FMRES_IGNORED;
}
#endif

switch (check_step[id])
{
case 1:
{
if (button & IN_ATTACK)
{
check_step[id] = 1
step_started[id] = false
}
else if (button & IN_ATTACK2)
{
if (!step_started[id])
{
if (!(oldbutton & IN_ATTACK2))
{
step_started[id] = true
step_check_time[id] = current_time + Hit_Attack2_Key_Time
}
}
else
{
if (current_time >= step_check_time[id])
{
if (get_pcvar_num(g_shoot_times) != 0)

check_step[id] = 2
step_started[id] = false
make_energyball[id] = true
set_user_weapon_attack_time(id, 1.0)
SendWeaponAnim(id, 0)
}
}
}
else
{
step_started[id] = false
}
}
case 2:
{
if (button & IN_ATTACK)
{
check_step[id] = 1
step_started[id] = false

if (make_energyball[id])
{
client_print(id, print_center, "")
make_energyball[id] = false
set_user_weapon_attack_time(id, 0.0)
}
}
else if (button & IN_ATTACK2)
{
client_print(id, print_center, "<<Acu ZM - ADMIN ZOMBI/VIP>>")

if (!step_started[id])
{
step_started[id] = true
step_check_time[id] = current_time + Make_EnergyBall_Time
}
else
{
if (current_time >= step_check_time[id])
{
check_step[id] = 3
step_started[id] = false
make_energyball[id] = false
have_energyball[id] = true
set_user_weapon_attack_time(id, 1.0)
SendWeaponAnim(id, 0)
}
}
}
else
{
check_step[id] = 1
step_started[id] = false

if (make_energyball[id])
{
client_print(id, print_center, "")
make_energyball[id] = false
set_user_weapon_attack_time(id, 0.0)
}
}
}
case 3:
{
if (button & IN_ATTACK)
{
check_step[id] = 1

if (have_energyball[id])
{
client_print(id, print_center, "<<Neked van energy labdad>>")
have_energyball[id] = false
set_user_weapon_attack_time(id, 0.0)
}
}
else if (button & IN_ATTACK2)
{
static dist
dist = get_forward_view_dist(id)
if (dist < Short_Dist_Cant_Shoot)
client_print(id, print_center, "<<Acu ZM - ADMIN ZOMBI/VIP>>")
else
client_print(id, print_center, "<<ĐAcu ZM - ADMIN ZOMBI/VIP>>")
}
else
{
if (have_energyball[id])
{
client_print(id, print_center, "<<Acu ZM - ADMIN ZOMBI/VIP>")
check_step[id] = 1
have_energyball[id] = false
shoot_energyball(id)
set_user_weapon_attack_time(id, 0.0)
}
}
}
}

return FMRES_HANDLED;
}

#if defined SUPPORT_BOT_TO_USE
check_target_valid(target)
{
if (!(1 <= target <= maxplayers) || !is_user_alive(target) || zp_get_user_zombie(target))
return 0;

return 1;
}
#endif

set_user_weapon_attack_time(id, Float:next_attack_time)
{
static weap_id
weap_id = get_user_weapon(id)

static weap_name[32]
get_weaponname(weap_id, weap_name, charsmax(weap_name))

static weap_ent
weap_ent = fm_find_ent_by_owner(-1, weap_name, id)

set_weapon_next_pri_attack(weap_ent, next_attack_time)
set_weapon_next_sec_attack(weap_ent, next_attack_time)

if (weap_id == CSW_XM1014 || weap_id == CSW_M3)
set_weapon_idle_time(weap_ent, next_attack_time)
}

public fw_PlayerPreThink(id)
{
if (!is_user_alive(id))
return FMRES_IGNORED;

if (zp_get_user_zombie(id))
{
if (zp_get_user_zombie_class(id) != g_zclass_energyball)
return FMRES_IGNORED;

if (zp_get_user_nemesis(id))
return FMRES_IGNORED;

#if defined FIRST_ZOMBIE_CANT_USE
if (zp_get_user_first_zombie(id))
return FMRES_IGNORED;
#endif

if (get_pcvar_num(g_shoot_times) != 0 && energyball_num[id] <= 0)
return FMRES_IGNORED;

if (make_energyball[id] || have_energyball[id])
{
freeze_user_attack(id)
}

if (cooldown_started[id])
{
if (current_time >= cooldown_over_time[id])
{
cooldown_started[id] = false
client_print(id, print_center, "<<<Varnod kell!!!>>>", get_pcvar_float(g_cooldown))
}
}
}
else
{
if (be_hited[id])
{
if (current_time >= be_hit_check_time[id])
{
be_hited[id] = false
effect_started[id] = true

if (zp_get_user_survivor(id))
effect_over_time[id] = current_time + get_pcvar_float(g_surv_effect_time)
else
effect_over_time[id] = current_time + get_pcvar_float(g_effect_time)
}
}

if (effect_started[id])
{
#if defined WHEN_HITED_CANT_SHOOT
freeze_user_attack(id)
#endif

#if defined WHEN_HITED_CANT_MOVE
if (is_user_on_ground(id))
{
set_pev(id, pev_velocity, Float:{0.0,0.0,0.0}) // stop motion
set_pev(id, pev_maxspeed, 1.0) // prevent from moving
set_pev(id, pev_gravity, 999999.9) // set really high
}
#endif

if (current_time >= effect_over_time[id])
{
#if defined WHEN_HITED_CANT_MOVE
set_pev(id, pev_gravity, get_cvar_float("zp_human_gravity"))
#endif

effect_started[id] = false
}
}

if (touched_energyball[id])
{
if (current_time - touch_energyball_time[id] >= 0.2)
{
touched_energyball[id] = false
}
}
}

return FMRES_IGNORED;
}

freeze_user_attack(id)
{
static weap_id
weap_id = get_user_weapon(id)

static weap_name[32]
get_weaponname(weap_id, weap_name, charsmax(weap_name))

static weap_ent
weap_ent = fm_find_ent_by_owner(-1, weap_name, id)

if (get_weapon_next_pri_attack(weap_ent) <= 0.1)
set_weapon_next_pri_attack(weap_ent, 1.0)

if (get_weapon_next_sec_attack(weap_ent) <= 0.1)
set_weapon_next_sec_attack(weap_ent, 1.0)

if (weap_id == CSW_XM1014 || weap_id == CSW_M3)
{
if (get_weapon_idle_time(weap_ent) <= 0.1)
set_weapon_idle_time(weap_ent, 1.0)
}
}

public fw_Touch(ptr, ptd)
{
if (!pev_valid(ptr))
return FMRES_IGNORED;

static classname[32]
pev(ptr, pev_classname, classname, 31)

if (!equal(classname, "EnergyBall_Ent"))
return FMRES_IGNORED;

static owner
owner = pev(ptr, pev_iuser1)

static Float:ent_origin[3]
pev(ptr, pev_origin, ent_origin)

static sound_index
sound_index = random_num(0, sizeof EnergyBall_Touch_Sound -1)
engfunc(EngFunc_EmitSound, ptr, CHAN_VOICE, EnergyBall_Touch_Sound[sound_index], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

static ent_speed
ent_speed = pev(ptr, pev_iuser4) - EnergyBall_Deduct_Speed
set_pev(ptr, pev_iuser4, ent_speed)

pev(ptd, pev_classname, classname, 31)

if (equal(classname, "EnergyBall_Ent"))
{
set_pev(ptr, pev_iuser2, 1)
}
else if ((1 <= ptd <= 32) && is_user_alive(ptd) && !touched_energyball[ptd])
{
#if !(defined HITED_ZOMBIE_KNOCKBACK)
if (zp_get_user_zombie(ptd))
return FMRES_IGNORED;
#endif

if (round_end)
return FMRES_IGNORED;

touched_energyball[ptd] = true
touch_energyball_time[ptd] = current_time

static Float:origin[3], Float:velocity1[3], Float:velocity2[3]
pev(ptd, pev_origin, origin)
pev(ptd, pev_velocity, velocity1)

particle_burst_effect(origin)

velocity2[0] = origin[0] - ent_origin[0]
velocity2[1] = origin[1] - ent_origin[1]
velocity2[2] = origin[2] - ent_origin[2]

static Float:speed
speed = vector_length(velocity2)

speed = floatmax(float(ent_speed) - 800.0, 0.0) / (speed > 0.0 ? speed : 1.0)

xs_vec_mul_scalar(velocity2, speed, velocity2)
xs_vec_sub(velocity2, velocity1, velocity2)

speed = vector_length(velocity2)
if (speed > 800.0)
xs_vec_mul_scalar(velocity2, (800.0 / speed), velocity2)
floatclamp(velocity2[2], -200.0, 800.0)

set_pev(ptd, pev_velocity, velocity2)

if (!zp_get_user_zombie(ptd))
{
if (fm_get_user_godmode(ptd) || get_user_godmode(ptd))
return FMRES_IGNORED;

screen_shake(ptd, 6, 1, 5)
screen_fade(ptd, 0.2, 220, 0, 0, 150)

#if defined WHEN_HITED_DROP_WEAPON
//
if (!zp_get_user_survivor(ptd))
{
static EnergyBall_fly_time
EnergyBall_fly_time = pev(ptr, pev_iuser3)

if (EnergyBall_fly_time <= 10)
drop_current_weapon(ptd)
}
#endif

static damage
damage = get_pcvar_num(g_damage)

if (zp_get_user_survivor(ptd))
damage = floatround(float(damage) * Damage_Survivor_Multiplier)

damage_human_user(owner, ptd, damage, (4.0 /5.0), DMG_BLAST, "EnergyBall")
}
}

return FMRES_IGNORED;
}

damage_human_user(attacker, victim, damage, Float:damage_armor_rate, damage_type, weapon[])
{
new health = get_user_health(victim)
new armor = get_user_armor(victim)
new damage_armor = floatround(float(damage) * damage_armor_rate)
if (damage_armor > 0 && armor > 0)
{
if (armor > damage_armor)
{
damage -= damage_armor
fm_set_user_armor(victim, armor - damage_armor)
}
else
{
damage -= armor
fm_set_user_armor(victim, 0)
}
}

if (damage > 0)
{
if (health > damage)
{
set_user_takedamage(victim, damage, damage_type)
effect_started[victim] = false
be_hited[victim] = true
be_hit_check_time[victim] = current_time + 1.0
}
else
{
new frags = get_user_frags(attacker)

#if defined WHEN_DAMAGE_OVER_HEALTH_INFECT

if (is_infect_round && !(zp_get_user_last_human(victim) || zp_get_user_survivor(victim)))
{
if (zp_infect_user(victim, 0))
{
new weapon_string[64]
format(weapon_string, charsmax(weapon_string), "%s (Infect)", weapon)
SendDeathMsg(attacker, victim, 1, weapon_string)
cs_set_user_deaths(victim, get_user_deaths(victim) + 1)
}
else
{
set_msg_block(g_msgDeathMsg, BLOCK_SET)
ExecuteHamB(Ham_Killed, victim, attacker, 0)
set_msg_block(g_msgDeathMsg, BLOCK_NOT)
SendDeathMsg(attacker, victim, 0, weapon)
}
}
else
{
#endif

set_msg_block(g_msgDeathMsg, BLOCK_SET)
ExecuteHamB(Ham_Killed, victim, attacker, 0)
set_msg_block(g_msgDeathMsg, BLOCK_NOT)
SendDeathMsg(attacker, victim, 0, weapon)

#if defined WHEN_DAMAGE_OVER_HEALTH_INFECT
}
#endif

fm_set_user_frags(attacker, frags + 1)
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + 1)

FixDeadAttrib(victim, (is_user_alive(victim) ? 0 : 1))
Update_ScoreInfo(victim, get_user_frags(victim), get_user_deaths(victim))
FixDeadAttrib(attacker, (is_user_alive(attacker) ? 0 : 1))
Update_ScoreInfo(attacker, get_user_frags(attacker), get_user_deaths(attacker))

/*
new k_name[32], v_name[32], k_authid[32], v_authid[32], k_team[10], v_team[10]
get_user_name(attacker, k_name, charsmax(k_name))
get_user_team(attacker, k_team, charsmax(k_team))
get_user_authid(attacker, k_authid, charsmax(k_authid))
get_user_name(victim, v_name, charsmax(v_name))
get_user_team(victim, v_team, charsmax(v_team))
get_user_authid(victim, v_authid, charsmax(v_authid))
log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
k_name, get_user_userid(attacker), k_authid, k_team,
v_name, get_user_userid(victim), v_authid, v_team, weapon)
*/
}
}
}

public fw_StartFrame()
{
current_time = get_gametime()

static Float:next_check_time, id
if (current_time < next_check_time)
return FMRES_IGNORED;
else
next_check_time = current_time + 0.1

#if defined HAVE_DYNAMIC_LIGHT_EFFECT
static Float:origin[3]
#endif

for (id = 1; id <= maxplayers; id++)
{
if (!is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != g_zclass_energyball)
continue;

if (make_energyball[id])
{
#if defined HAVE_DYNAMIC_LIGHT_EFFECT
pev(id, pev_origin, origin)

create_dynamic_light(origin, 10, 235, 255, 0, 2)
#endif
if (current_time > next_play_sound_time[id])
{
engfunc(EngFunc_EmitSound, id, CHAN_VOICE, EnergyBall_Make_Sound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
next_play_sound_time[id] = current_time + 1.0
}
}
else if (have_energyball[id])
{
#if defined HAVE_DYNAMIC_LIGHT_EFFECT
pev(id, pev_origin, origin)

create_dynamic_light(origin, 16, 60, 255, 20, 2)
#endif

fm_set_weaponmodel_ent(id, EnergyBall_P_Model)

if (pev_valid(g_ent_weaponmodel[id]))
{
fm_set_rendering(g_ent_weaponmodel[id], kRenderFxGlowShell, 60, 255, 20, kRenderNormal, 255)
}
}

if (!have_energyball[id])
{
fm_remove_weaponmodel_ent(id)
}
}

return FMRES_IGNORED;
}

#if defined WHEN_DAMAGE_MAKE_FAIL
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
if (victim == attacker || !is_user_connected(attacker))
return HAM_IGNORED;

if (!zp_get_user_zombie(victim) || zp_get_user_zombie(attacker))
return HAM_IGNORED;

if (zp_get_user_zombie_class(victim) != g_zclass_energyball || zp_get_user_nemesis(victim))
return HAM_IGNORED;


if (!(damage_type & DMG_BULLET))
return HAM_IGNORED;

if (!make_energyball[victim] && !have_energyball[victim])
{
get_attack_damage[victim] = 0.0
return HAM_IGNORED;
}

if (current_time > damage_check_time[victim])
{
get_attack_damage[victim] = 0.0
damage_check_time[victim] = current_time + Damage_Check_Time_Range
}

get_attack_damage[victim] += damage

if (get_attack_damage[victim] >= Get_Amount_Of_Damage)
{
get_attack_damage[victim] = 0.0
damage_check_time[victim] = current_time + Damage_Check_Time_Range

check_step[victim] = 1
step_started[victim] = false
make_energyball[victim] = false
have_energyball[victim] = false
//set_user_weapon_attack_time(id, 0.0)
}

return HAM_IGNORED;
}
#endif

public shoot_energyball(id)
{
if (!is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != g_zclass_energyball)
return;

new dist = get_forward_view_dist(id)
if (dist < Short_Dist_Cant_Shoot)   
return;

SendWeaponAnim(id, 7)

fm_remove_weaponmodel_ent(id)

new Float:origin[3], Float:vector[3]
pev(id, pev_origin, origin)
velocity_by_aim(id, 45, vector)
xs_vec_add(origin, vector, origin)

new Float:angles[3]
pev(id, pev_angles, angles)

new ent = create_entity_object2("EnergyBall_Ent", SOLID_BBOX, MOVETYPE_BOUNCEMISSILE, 1, EnergyBall_W_Model, Float:{ 20.0, 20.0, 20.0 }, angles, origin)
if (ent == -1)   return;

new Float:speed = vector_length(vector)
speed = get_pcvar_float(g_speed) / (speed > 0.0 ? speed : 1.0)
xs_vec_mul_scalar(vector, speed, vector)
speed = vector_length(vector)
set_pev(ent, pev_iuser4, floatround(speed))
set_pev(ent, pev_iuser3, 0)
set_pev(ent, pev_iuser2, 0)
set_pev(ent, pev_iuser1, id)
set_pev(ent, pev_velocity, vector)
fm_set_rendering(ent, kRenderFxGlowShell, 20, 255, 20, kRenderNormal, 255)
engfunc(EngFunc_EmitSound, id, CHAN_VOICE, EnergyBall_Shoot_Sound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
create_beam_follow(ent, 20, 255, 20, 200)

new param[4]
param[0] = ent
param[1] = 100   
param[2] = 3   
param[3] = 0   
set_task(1.0, "energyball_fly", Task_ID_1, param, 4)

if (get_pcvar_num(g_shoot_times) != 0)
{
energyball_num[id]--

if (energyball_num[id] > 0)
client_printcolor(id, "!g[Acu ZM]!y Kepessegedet !g 20 seckent !yсhasznalhatod.", energyball_num[id])
else
client_printcolor(id, "!g[Acu ZM]!y Kepessegedet !g 20 seckent !yсhasznalhatod.", energyball_num[id])
}

cooldown_started[id] = true
cooldown_over_time[id] = current_time + get_pcvar_float(g_cooldown)
}

public energyball_fly(param[4])
{
new ent = param[0]

if (!pev_valid(ent))
return;

if (round_end)
{
if (pev_valid(ent))
{
//kill_beam(ent)
engfunc(EngFunc_RemoveEntity, ent)
}

return;
}

kill_beam(ent)
create_beam_follow(ent, 20, 255, 20, 200)

new Float:velocity[3]
pev(ent, pev_velocity, velocity)
new Float:speed = vector_length(velocity)

new Float:origin[3]
pev(ent, pev_origin, origin)

new EnergyBall_fly_time = pev(ent, pev_iuser3)
set_pev(ent, pev_iuser3, EnergyBall_fly_time + 1)

new touch_EnergyBall = pev(ent, pev_iuser2)

if (is_ent_stuck(ent))
param[3]++
else
param[3] = 0

if (param[1] <= 0 || touch_EnergyBall || param[3] >= 5 || speed <= 20.0)
{
set_pev(ent, pev_velocity, { 0.0, 0.0, 0.0 })
create_explo2(origin)
create_blast_effect(origin, 20, 255, 20, 200, get_pcvar_float(g_explosion_range))

if (!round_end)
search_in_range_target(origin)

if (pev_valid(ent))
engfunc(EngFunc_RemoveEntity, ent)

return;
}

if (param[2] <= 0)
{
new set_speed = pev(ent, pev_iuser4)
speed = float(set_speed) / (speed > 0.0 ? speed : 1.0)
xs_vec_mul_scalar(velocity, speed, velocity)
set_pev(ent, pev_velocity, velocity)
param[2] = 3
}

param[2]--
param[1]--

set_task(0.1, "energyball_fly", Task_ID_1, param, 4)
}

public search_in_range_target(Float:origin[3])
{
new i, Float:target_origin[3], Float:dist
for (i = 1; i <= maxplayers; i++)
{
if (!is_user_alive(i) || zp_get_user_zombie(i))
continue;

if (fm_get_user_godmode(i) || get_user_godmode(i))
continue;

pev(i, pev_origin, target_origin)
dist = get_distance_f(origin, target_origin)
if (dist > get_pcvar_float(g_explosion_range))
continue;

//screen_fade(i, 0.2, 20, 255, 20, 150)
screen_fade(i, 0.2, 122, 55, 139, 150)

be_hited[i] = true
be_hit_check_time[i] = current_time
}
}

public zp_user_humanized_post(id)
{
fm_remove_weaponmodel_ent(id)
reset_cvars(id)
}

#if defined WHEN_DAMAGE_OVER_HEALTH_INFECT
public zp_round_started(gamemode, id)
{
is_infect_round = (gamemode == MODE_INFECTION || gamemode == MODE_MULTI)
}
#endif

public logevent_round_end()
{
round_end = true
}

public client_connect(id)
{
reset_cvars(id)
}

public client_disconnect(id)
{
fm_remove_weaponmodel_ent(id)
reset_cvars(id)
}

public NewRound(id)
{
fm_remove_weaponmodel_ent(id)
reset_cvars(id)
}

public Death()
{
new id = read_data(2)
if (!(1 <= id <= maxplayers))
return;

fm_remove_weaponmodel_ent(id)
reset_cvars(id)
}

public event_round_start()
{
round_end = false

remove_energyball()

#if defined WHEN_DAMAGE_OVER_HEALTH_INFECT
is_infect_round = false
#endif
}

public reset_cvars(id)
{
energyball_num[id] = get_pcvar_num(g_shoot_times)
check_step[id] = 1
step_started[id] = false
step_check_time[id] = 0.0
make_energyball[id] = false
have_energyball[id] = false
cooldown_started[id] = false
cooldown_over_time[id] = 0.0
be_hited[id] = false
be_hit_check_time[id] = 0.0
effect_started[id] = false
effect_over_time[id] = 0.0
touched_energyball[id] = false
touch_energyball_time[id] = 0.0
g_ent_weaponmodel[id] = 0
}

public remove_energyball()
{
new ent = fm_find_ent_by_class(-1, "EnergyBall_Ent")
while(ent)
{
engfunc(EngFunc_RemoveEntity, ent)
ent = fm_find_ent_by_class(ent, "EnergyBall_Ent")
}
}

stock create_entity_object2(const classname[], solid, movetype, sequence, const model[], Float:size[3], Float:angles[3], Float:origin[3])
{
// Create entity
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
if (!pev_valid(ent)) return -1;

// Set entity status
set_pev(ent, pev_classname, classname)
set_pev(ent, pev_solid, solid)
set_pev(ent, pev_movetype, movetype)
set_pev(ent, pev_sequence, sequence)

// Set entity size
new Float:half_size[3], Float:mins[3], Float:maxs[3]
half_size[0] = size[0] / 2.0
half_size[1] = size[1] / 2.0
half_size[2] = size[2] / 2.0
mins[0] = 0.0 - half_size[0]
mins[1] = 0.0 - half_size[1]
mins[2] = 0.0 - half_size[2]
maxs[0] = half_size[0]
maxs[1] = half_size[1]
maxs[2] = half_size[2]
engfunc(EngFunc_SetSize, ent, mins, maxs)

// Set entity angles
set_pev(ent, pev_angles, angles)

// Set entity model
if (strlen(model) > 0)
engfunc(EngFunc_SetModel, ent, model)

// Set entity origin
set_pev(ent, pev_origin, origin)

return ent;
}

stock get_forward_view_dist(id)
{
new iOrigin1[3], iOrigin2[3]
get_user_origin(id, iOrigin1, 0)
get_user_origin(id, iOrigin2, 3)
new dist = get_distance(iOrigin1, iOrigin2)

return dist;
}

stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
{
static Float:color[3]
color[0] = float(r)
color[1] = float(g)
color[2] = float(b)

set_pev(entity, pev_renderfx, fx)
set_pev(entity, pev_rendercolor, color)
set_pev(entity, pev_rendermode, render)
set_pev(entity, pev_renderamt, float(amount))
}

stock fm_set_user_armor(index, armor)
{
set_pev(index, pev_armorvalue, float(armor));

return 1;
}

stock fm_set_user_health(index, health)
{
health > 0 ? set_pev(index, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, index);

return 1;
}

stock set_user_takedamage(index, damage, damage_type)
{
new Float:origin[3], iOrigin[3]
pev(index, pev_origin, origin)
FVecIVec(origin, iOrigin)

message_begin(MSG_ONE, g_msgDamage, _, index)
write_byte(21) // damage save
write_byte(20) // damage take
write_long(damage_type) // damage type
write_coord(iOrigin[0]) // position.x
write_coord(iOrigin[1]) // position.y
write_coord(iOrigin[2]) // position.z
message_end()

fm_set_user_health(index, max(get_user_health(index) - damage, 0))
}

stock fm_set_user_frags(index, frags)
{
set_pev(index, pev_frags, float(frags));

return 1;
}

stock is_user_on_ground(index)
{
if (pev(index, pev_flags) & FL_ONGROUND)
return true;

return false;
}

stock is_ent_stuck(ent)
{
static Float:originF[3]
pev(ent, pev_origin, originF)

engfunc(EngFunc_TraceHull, originF, originF, 0, HULL_HEAD, ent, 0)

if (get_tr2(0, TR_StartSolid) || get_tr2(0, TR_AllSolid) || !get_tr2(0, TR_InOpen))
return true;

return false;
}

stock Float:get_weapon_next_pri_attack(entity)
{
return get_pdata_float(entity, OFFSET_flNextPrimaryAttack, OFFSET_LINUX_WEAPONS)
}

stock set_weapon_next_pri_attack(entity, Float:time)
{
set_pdata_float(entity, OFFSET_flNextPrimaryAttack, time, OFFSET_LINUX_WEAPONS)
}

stock Float:get_weapon_next_sec_attack(entity)
{
return get_pdata_float(entity, OFFSET_flNextSecondaryAttack, OFFSET_LINUX_WEAPONS)
}

stock set_weapon_next_sec_attack(entity, Float:time)
{
set_pdata_float(entity, OFFSET_flNextSecondaryAttack, time, OFFSET_LINUX_WEAPONS)
}

stock Float:get_weapon_idle_time(entity)
{
return get_pdata_float(entity, OFFSET_flTimeWeaponIdle, OFFSET_LINUX_WEAPONS)
}

stock set_weapon_idle_time(entity, Float:time)
{
set_pdata_float(entity, OFFSET_flTimeWeaponIdle, time, OFFSET_LINUX_WEAPONS)
}

stock fm_find_ent_by_owner(entity, const classname[], owner)
{
while ((entity = engfunc(EngFunc_FindEntityByString, entity, "classname", classname)) && (pev(entity, pev_owner) != owner)) {}

return entity;
}

stock fm_find_ent_by_class(index, const classname[])
{
return engfunc(EngFunc_FindEntityByString, index, "classname", classname)
}

#if defined WHEN_HITED_DROP_WEAPON
stock drop_current_weapon(id)
{
static weapon_id, clip, ammo
weapon_id = get_user_weapon(id, clip, ammo)

if (((1<<weapon_id) & PRIMARY_WEAPONS_BIT_SUM) || ((1<<weapon_id) & SECONDARY_WEAPONS_BIT_SUM))
{
static weapon_name[32]
get_weaponname(weapon_id, weapon_name, sizeof weapon_name - 1)
engclient_cmd(id, "drop", weapon_name)
}
}
#endif

stock PlaySound(index, const sound[])
{
if (equal(sound[strlen(sound)-4], ".mp3"))
client_cmd(index, "mp3 play ^"sound/%s^"", sound)
else
client_cmd(index, "spk ^"%s^"", sound)
}

stock SendWeaponAnim(id, iAnim)
{
set_pev(id, pev_weaponanim, iAnim)

message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
write_byte(iAnim)
write_byte(pev(id, pev_body))
message_end()
}

stock SendDeathMsg(attacker, victim, headshot, const weapon[]) // Send Death Message
{
message_begin(MSG_BROADCAST, g_msgDeathMsg)
write_byte(attacker) // killer
write_byte(victim) // victim
write_byte(headshot) // headshot flag [1 or 0]
write_string(weapon) // killer's weapon
message_end()
}

stock FixDeadAttrib(id, dead_flag = 0) // Fix Dead Attrib on scoreboard
{
message_begin(MSG_BROADCAST, g_msgScoreAttrib)
write_byte(id) // id
write_byte(dead_flag) // attrib
message_end()
}

stock Update_ScoreInfo(id, frags, deaths) // Update Player's Frags and Deaths
{
message_begin(MSG_BROADCAST, g_msgScoreInfo)
write_byte(id) // id
write_short(frags) // frags
write_short(deaths) // deaths
write_short(0) // class?
write_short(get_user_team(id)) // team
message_end()
}

stock screen_shake(id, amplitude = 4, duration = 2, frequency = 10)
{
message_begin(MSG_ONE_UNRELIABLE, g_msgScreenShake, _, id)
write_short((1<<12)*amplitude)
write_short((1<<12)*duration)
write_short((1<<12)*frequency)
message_end()
}

stock screen_fade(id, Float:time, red, green, blue, alpha)
{
message_begin(MSG_ONE_UNRELIABLE, g_msgScreenFade, _, id)
write_short((1<<12)*1) // duration
write_short(floatround((1<<12)*time)) // hold time
write_short(0x0000) // fade type
write_byte(red) // red
write_byte(green) // green
write_byte(blue) // blue
write_byte(alpha) // alpha
message_end()
}

stock particle_burst_effect(const Float:originF[3])
{
// Particle burst
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_PARTICLEBURST) // TE id
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
write_short(50) // radius
write_byte(70) // color
write_byte(3) // duration (will be randomized a bit)
message_end()
}

#if defined HAVE_DYNAMIC_LIGHT_EFFECT
stock create_dynamic_light(const Float:originF[3], radius, red, green, blue, life)
{
// Dynamic light, effect world, minor entity effect
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_DLIGHT) // TE id: 27
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
write_byte(radius) // radius in 10's
write_byte(red) //red
write_byte(green) //green
write_byte(blue) //blue
write_byte(life) // life in 10's
write_byte(0) // decay rate in 10's
message_end()
}
#endif

stock create_beam_follow(entity, red, green, blue, brightness)
{
//Entity add colored trail
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW) // TE id
write_short(entity) // entity
write_short(g_trailSpr) // sprite
write_byte(1) // life
write_byte(10) // width
write_byte(red) // r
write_byte(green) // g
write_byte(blue) // b
write_byte(brightness) // brightness
message_end()
}

stock create_explo2(const Float:originF[3])
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_EXPLOSION2) // TE id: 12
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
write_byte(1) // starting color
write_byte(10) // num colors
message_end()
}

stock create_blast_effect(const Float:originF[3], red, green, blue, brightness, Float:radius)
{
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_BEAMCYLINDER) // TE id: 21
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
engfunc(EngFunc_WriteCoord, originF[0]) // x axis
engfunc(EngFunc_WriteCoord, originF[1]) // y axis
engfunc(EngFunc_WriteCoord, originF[2] + radius) // z axis
write_short(g_shokewaveSpr) // sprite
write_byte(0) // startframe
write_byte(0) // framerate
write_byte(4) // life
write_byte(60) // width
write_byte(0) // noise
write_byte(red) // red
write_byte(green) // green
write_byte(blue) // blue
write_byte(brightness) // brightness
write_byte(0) // speed
message_end()
}

stock kill_beam(entity)
{
// Kill all beams attached to entity
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_KILLBEAM) // TE id: 99
write_short(entity)
message_end()
}

stock fm_get_user_godmode(index)
{
new Float:val;
pev(index, pev_takedamage, val);

return (val == DAMAGE_NO);
}

stock fm_set_weaponmodel_ent(id, const weapon_model[])
{
// Set model on entity or make a new one if unexistant
if (!pev_valid(g_ent_weaponmodel[id]))
{
g_ent_weaponmodel[id] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
if (!pev_valid(g_ent_weaponmodel[id])) return;

set_pev(g_ent_weaponmodel[id], pev_classname, "weapon_model")
set_pev(g_ent_weaponmodel[id], pev_movetype, MOVETYPE_FOLLOW)
set_pev(g_ent_weaponmodel[id], pev_aiment, id)
set_pev(g_ent_weaponmodel[id], pev_owner, id)
}

static model[100]

if (equal(weapon_model, ""))
{
static weap_id, weap_name[32]
weap_id = get_user_weapon(id)
get_weaponname(weap_id, weap_name, sizeof weap_name - 1)
formatex(model, sizeof model - 1, "models/p_%s.mdl", weap_name[7])
}
else
{
copy(model, sizeof model - 1, weapon_model)
}

engfunc(EngFunc_SetModel, g_ent_weaponmodel[id], model)
}

stock fm_remove_weaponmodel_ent(id)
{
// Remove "weaponmodel" ent if present
if (pev_valid(g_ent_weaponmodel[id]))
{
engfunc(EngFunc_RemoveEntity, g_ent_weaponmodel[id])
g_ent_weaponmodel[id] = 0
}
}

public Event_CurrentWeapon(id)
{
new weaponID = read_data(2)

if (weaponID == CSW_SMOKEGRENADE)

if(zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == g_zclass_energyball && !zp_get_user_nemesis(id))
{
entity_set_string(id, EV_SZ_viewmodel, KNOCKBOMB_ENERGYBALL)
}

if (weaponID == CSW_FLASHBANG)

if(zp_get_user_zombie(id) && zp_get_user_zombie_class(id) == g_zclass_energyball && !zp_get_user_nemesis(id))
{
entity_set_string(id, EV_SZ_viewmodel, KNOCKBOMB_ENERGYBALL)
}

}

public CPlayer__TakeDamage(id, iVictim, iInflictor, iAttacker, Float:flDamage, bitsDamage)
{
if (zp_get_user_zombie_class(id) == g_zclass_energyball && zp_get_user_zombie(id) && !zp_get_user_nemesis(id) && !zp_get_user_survivor(id))
{
new rand = random_num(1,2)
switch(rand)
{
case 1: emit_sound(id, CHAN_WEAPON, pain_energyball_sound[0], 1.0, ATTN_NORM, 0, PITCH_LOW)
case 2: emit_sound(id, CHAN_WEAPON, pain_energyball_sound2[0], 1.0, ATTN_NORM, 0, PITCH_LOW)
}
}
}

public Death_Zombie(id)
{
new victim=read_data(2)

if(zp_get_user_zombie(victim) && zp_get_user_zombie_class(victim) == g_zclass_energyball && !zp_get_user_nemesis(victim))
{
emit_sound(id, CHAN_WEAPON, death_energyball_sound[0], 1.0, ATTN_NORM, 0, PITCH_LOW)   
}

}

stock client_printcolor(id, const input[], any:...) // stock by tERoR
{
static iPlayersNum[32], iCount; iCount = 1
static szMsg[191]

vformat(szMsg, charsmax(szMsg), input, 3)

replace_all(szMsg, 190, "!g", "^4")
replace_all(szMsg, 190, "!y", "^1")
replace_all(szMsg, 190, "!t", "^3")
replace_all(szMsg, 190, "!t2", "^0")

if(id) iPlayersNum[0] = id
else get_players(iPlayersNum, iCount, "ch")

for(new i = 0; i < iCount; i++)
{
if(is_user_connected(iPlayersNum[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayersNum[i])
write_byte(iPlayersNum[i])
write_string(szMsg)
message_end()
}
}
}


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Oldal átalakito
HozzászólásElküldve:2012.01.25. 15:01 
Offline
Őskövület
Avatar

Csatlakozott:2011.09.17. 17:54
Hozzászólások:2350
Megköszönt másnak: 40 alkalommal
Megköszönték neki: 57 alkalommal
Jajj :D


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Oldal átalakito
HozzászólásElküldve:2012.01.25. 15:14 
Offline
Őstag
Avatar

Csatlakozott:2011.11.15. 16:29
Hozzászólások:1142
Megköszönt másnak: 8 alkalommal
Megköszönték neki: 24 alkalommal
Mingyárt ránézek :) , \\ MIaz virtual ?!!!o.o

_________________
[url=http://www.gametracker.com/server_info/188.227.227.114:27286/][img]http://cache.www.gametracker.com/server_info/188.227.227.114:27286/b_350_20_323957_202743_F19A15_111111.png[/img][/url]


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Oldal átalakito
HozzászólásElküldve:2012.01.25. 15:15 
Offline
Developer
Avatar

Csatlakozott:2011.06.01. 21:11
Hozzászólások:7966
Megköszönt másnak: 295 alkalommal
Megköszönték neki: 537 alkalommal
Az hogy ő is írta a második javítását, csak én gyorsabb voltam, én e idő allat mind a 2őt kijavítottam:)

_________________
http://www.easyrankup.eu


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése: Rendezés 
Új téma nyitása Hozzászólás a témához  [13 hozzászólás ]  Oldal12Következő


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 26 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole