como puedo poner este plugin de zp a modo normal¿¿¿
#1
yo quiero poner este extra item de zp a modo normal
que se registre en el menu de comandos del menu del amxmod
porfa ayuda este es el code



#include <amxmodx>
#include <fakemeta_util>
#include <engine>
#include <cstrike>
#include <hamsandwich>
#include <xs>
#include <zombieplague>

const UNIT_SECOND = (1<<12)


#define ENG_NULLENT -1
#define EV_INT_WEAPONKEY EV_INT_impulse
#define POISON_WEAPONKEY 233
#define WEAP_LINUX_XTRA_OFF 4
#define m_fKnown 44
#define m_flNextPrimaryAttack 46
#define m_flTimeWeaponIdle 48
#define m_iClip 51
#define m_fInReload 54
#define PLAYER_LINUX_XTRA_OFF 5
#define m_flNextAttack 83
#define TIME_POISON 5.0
#define CSW_WPN_POISON CSW_M3
#define OFFSET_TIME_ATTACK 0.6
#define WPN_RELOAD_TIME 3.4

new const gWeapon[] = "weapon_m3"

#define PLUGIN "[AMXX] Public: Poison Launcher"
#define VERSION "1.8.1"
#define AUTHOR "Re.Act!ve"

new const g_item_name[] = { "Poison Launcher" }; // Item name
new const g_item_cost = 20 ; // Item cost

#define RED 60
#define GREEN 250
#define BLUE 0
#define PEV_ENT_TIME pev_fuser1

// Precahce files
new const fire_model_name[] = "models/zm/spore.mdl"
new const fire_poison[] = "models/zm/spore_poison.mdl"
new const fire_spr_name[] = "sprites/laserbeam.spr"
new const fire_sprite[] = "sprites/zm/poison_spr.spr"
new const spr_poison_flare[] = "sprites/zm/poison_flare.spr"

new fire_sound[] = "weapons/plauncher-1.wav"
new g_sound[][] = {
"weapons/plauncher_draw.wav",
"weapons/plaunch_clipin.wav",
"weapons/plaunch_clipout.wav",
"weapons/plauncher_explode.wav"
}

new const v_model[] = "models/zm/v_plaunch_flipbyHiDanZ.mdl"
new const p_model[] = "models/zm/p_plaunch1.mdl"
new const w_model[] = "models/zm/w_plaunch.mdl"

// classname
new const fire_classname[] = "poison_fire"
new const poison_classname[] = "posion_spore"
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)
enum
{
IDLE_ANIM = 0,
DRAW_ANIM = 2,
RELOAD_ANIM = 1,
SHOOT_ANIM = 3,
SHOOT_ANIM1 = 4,
SHOOT_ANIM2 = 5
}

new sprite_ability, fire_spr_id, fire_spr_nameid, g_IsInPrimaryAttack, cvar_start_damage, cvar_end_damage, cvar_clip, cvar_maxclip, cvar_shot_speed, g_itemid, cvar_movetype
new g_orig_event, Float:g_poison_touch[33], oldweap[33], g_TmpClip[33], Float:gPoisonGlow[33], bool:gGlowPlayer[33], g_msgScreenShake
new bool:g_has_item[33], bool:disc_opened[33]

new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
"weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
"weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
"weapon_ak47", "weapon_knife", "weapon_p90" }

public plugin_precache()
{
precache_model(v_model)
precache_model(p_model)
precache_model(w_model)

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

precache_sound(fire_sound)

precache_model(fire_model_name)
precache_model(fire_poison)
sprite_ability = engfunc(EngFunc_PrecacheModel, spr_poison_flare)
fire_spr_id = precache_model(fire_sprite)
fire_spr_nameid = precache_model(fire_spr_name)
}

public plugin_init()
{
register_plugin ( PLUGIN, VERSION, AUTHOR )

g_itemid = zp_register_extra_item(g_item_name, g_item_cost, ZP_TEAM_HUMAN)

cvar_shot_speed = register_cvar("zp_pl_bulletspeed", "500") // Velocidad De Disparo
cvar_movetype = register_cvar("zp_pl_movetype", "0") // 0 - Directa, 1 - Gravedad (Estilo De Disparo)
cvar_start_damage = register_cvar("zp_pl_startdamage", "250.0") // Daño Minimo
cvar_end_damage = register_cvar("zp_pl_enddamage", "600.0") // Daño Maximo
cvar_clip = register_cvar("zp_pl_clip", "15") // Balas De Inicio
cvar_maxclip = register_cvar("zp_pl_ammo", "60") // Municion Maxima
g_msgScreenShake = get_user_msgid("ScreenShake")
set_cvar_num("sv_maxvelocity", 8000)

RegisterHam(Ham_Weapon_PrimaryAttack, gWeapon, "fw_PrimaryAttack")
RegisterHam(Ham_Weapon_PrimaryAttack, gWeapon, "fw_PrimaryAttack_Post", 1)
RegisterHam(Ham_Item_PostFrame, gWeapon, "plasma_ItemPostFrame")
RegisterHam(Ham_Weapon_Reload, gWeapon, "fw_Reload")
RegisterHam(Ham_Weapon_Reload, gWeapon, "Reload_Post", 1)
RegisterHam(Ham_Item_AddToPlayer, gWeapon, "fw_item_addtoplayer", 1)

register_forward(FM_SetModel, "fw_SetModel")
register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
register_forward(FM_PrecacheEvent, "fwPrecacheEvent_Post", 1)
register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)

register_touch(fire_classname, "*", "fw_touch_shot")
register_think(fire_classname, "fw_think")
register_touch(poison_classname, "*", "fw_touch_poison")

for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
if (WEAPONENTNAMES[i][0])
RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1)
}

public fwPrecacheEvent_Post(type, const name[])
{
if (equal("events/m3.sc", name))
{
g_orig_event = get_orig_retval()
return FMRES_HANDLED
}
return FMRES_IGNORED
}

public fw_UpdateClientData_Post(id, sendweapons, cd_handle)
{
if(get_user_weapon(id) != CSW_WPN_POISON || !g_has_item[id])
return FMRES_IGNORED

set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001)

return FMRES_HANDLED
}

public fw_item_addtoplayer(ent, id)
{
if(!is_valid_ent(ent))
return HAM_IGNORED

if(entity_get_int(ent, EV_INT_WEAPONKEY) == POISON_WEAPONKEY)
{
g_has_item[id] = true;
entity_set_int(id, EV_INT_impulse, 0)

replace_weapon_models(id, ent)
return HAM_HANDLED
}

return HAM_HANDLED
}

public client_connect(id)
g_has_item[id] = false

public client_disconnect(id)
g_has_item[id] = false

public zp_user_infected_post(id)
{
if (zp_get_user_zombie(id))
g_has_item[id] = false
}

public zp_user_humanized_post(id)
g_has_item[id] = false

public zp_extra_item_selected(id, itemid)
{
if(itemid == g_itemid)
{
drop_weapons(id,1)
g_has_item[id] = true;
new iWep2 = fm_give_item(id,gWeapon)
if( iWep2 > 0 )
{
cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip))
cs_set_user_bpammo (id, CSW_WPN_POISON, get_pcvar_num(cvar_maxclip))
}
UTIL_PlayWeaponAnimation (id, DRAW_ANIM)
emit_sound(id, CHAN_WEAPON, g_sound[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}

public fw_PrimaryAttack(Weapon)
{
if (g_has_item[pev( Weapon, pev_owner )])
{
g_IsInPrimaryAttack = 1
return HAM_SUPERCEDE;
}
return HAM_IGNORED;
}

public fwPlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
if ((eventid != g_orig_event) || !g_IsInPrimaryAttack)
return FMRES_IGNORED

if (!(1 <= invoker <= get_maxplayers()))
return FMRES_IGNORED

playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
return FMRES_SUPERCEDE
}

public fw_PrimaryAttack_Post(Weapon)
{
g_IsInPrimaryAttack = 0
new Player = get_pdata_cbase(Weapon, 41, 4)

new szClip, szAmmo
get_user_weapon(Player, szClip, szAmmo)

if(!is_user_alive(Player))
return

if(szClip == 0)
return

if(!is_user_alive(Player))
return

if(g_has_item[Player] || szClip >= 1)
{
//set_pdata_float(Player , m_flNextAttack, OFFSET_TIME_ATTACK, PLAYER_LINUX_XTRA_OFF)
set_pdata_float( Player, 83, OFFSET_TIME_ATTACK )
make_shoot(Player, Weapon)
}
}

public make_shoot(id, Weapon)
{
if(!is_user_alive(id))
return HAM_IGNORED;

if(get_user_weapon(id) != CSW_WPN_POISON)
return HAM_IGNORED;

if(!g_has_item[id] || disc_opened[id])
return HAM_IGNORED;

new szClip
get_user_weapon(id, szClip)

if(szClip >= 1)
{
new FloatLenguauch[3]
pev(id, pev_punchangle, Puch)
Puch[0]-=random_float(3.0, 6.0)
cs_set_weapon_ammo(Weapon, szClip-1)
emit_sound(id, CHAN_WEAPON, fire_sound, 1.0, ATTN_NORM, 0, PITCH_NORM)
UTIL_PlayWeaponAnimation(id, random_num(SHOOT_ANIM, SHOOT_ANIM2))
throw_fire(id)
set_pev(id,pev_punchangle,Puch)
}
return HAM_IGNORED;
}

public throw_fire(id)
{
new iEnt = create_entity("info_target")
new FloatpacmanfVelocity[3]

velocity_by_aim(id, (get_pcvar_num(cvar_shot_speed)*10), vfVelocity)

// add velocity of Owner for ent
new FloatpacmanfAttack[3], FloatpacmanfAngle[3], FloatpacmanOfps[3]
get_weapon_attackment(id, vfAttack, 20.0)
pev(id, pev_view_ofs, vOfps)
pev(id, pev_angles, vfAngle)

// set info for ent
set_pev(iEnt, pev_movetype, MOVETYPE_FLY)
set_pev(iEnt, PEV_ENT_TIME, get_gametime() + 5.0) // time remove
set_pev(iEnt, pev_classname, fire_classname)
engfunc(EngFunc_SetModel, iEnt, fire_model_name) //fire_model_name
set_pev(iEnt, pev_mins, Float:{-2.0, -2.0, -2.0})
set_pev(iEnt, pev_maxs, Float:{2.0, 2.0, 2.0})
set_pev(iEnt, pev_body, 2)
set_pev(iEnt, pev_origin, vfAttack)
set_pev(iEnt, pev_velocity, vfVelocity)
set_pev(iEnt, pev_solid, SOLID_BBOX)
set_pev(iEnt, pev_owner, id)
set_pev(iEnt, pev_iuser2, 1)
set_pev(iEnt, pev_vuser1, vfVelocity)
set_pev(iEnt, pev_angles, vfAngle)
set_pev(iEnt, pev_v_angle, vOfps)

set_pev(iEnt, pev_rendermode, kRenderTransAdd)
set_pev(iEnt, pev_renderamt, 130.0)

message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW) // TE id
write_short(iEnt) // entity
write_short(fire_spr_nameid) // sprite
write_byte(8) // life
write_byte(6) // width
write_byte(RED) // r
write_byte(GREEN) // g
write_byte(BLUE) // b
write_byte(180) // brightness
message_end()
set_task(OFFSET_TIME_ATTACK, "RemoveDisk", id+2242)
}

public RemoveDisk(taskid)
{
disc_opened[taskid-2242] = false;
remove_task(taskid)
}

public fw_SetModel(entity, model[])
{
if(!is_valid_ent(entity))
return FMRES_IGNORED;

static szClassName[33]
entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))

if(!equal(szClassName, "weaponbox"))
return FMRES_IGNORED;

static iOwner

iOwner = entity_get_edict(entity, EV_ENT_owner)

if(equal(model, "models/w_m3.mdl"))
{
static iStoredSVDID

iStoredSVDID = find_ent_by_owner(ENG_NULLENT, gWeapon, entity)

if(!is_valid_ent(iStoredSVDID))
return FMRES_IGNORED;

if(g_has_item[iOwner])
{
entity_set_int(iStoredSVDID, EV_INT_WEAPONKEY, POISON_WEAPONKEY)

g_has_item[iOwner] = false

entity_set_model(entity, w_model)

return FMRES_SUPERCEDE;
}
}
return FMRES_IGNORED;
}

public fw_think(iEnt)
{
if(!pev_valid(iEnt))
return

new Float:fFrame, Float:fScale, Float:fNextThink
pev(iEnt, pev_frame, fFrame)
pev(iEnt, pev_scale, fScale)

// effect exp
new iMoveType = pev(iEnt, pev_movetype)
if (iMoveType == MOVETYPE_NONE)
{
fNextThink = 0.015
fFrame += 1.0
fScale = floatmax(fScale, 1.55)

if (fFrame > 21.0)
{
engfunc(EngFunc_RemoveEntity, iEnt)
return
}
}

// effect normal
else
{
fNextThink = 0.045
fFrame += 1.0
fFrame = floatmin(21.0, fFrame)
fScale += 0.2
fScale = floatmin(fScale, 1.75)
}

set_pev(iEnt, pev_frame, fFrame)
set_pev(iEnt, pev_scale, fScale)
set_pev(iEnt, pev_nextthink, get_gametime() + fNextThink)

// time remove
static Float:fTimeRemove
pev(iEnt, pev_fuser1, fTimeRemove)
if (get_gametime() >= fTimeRemove)
{
engfunc(EngFunc_RemoveEntity, iEnt)
return;
}
}

public fw_remove_poison(taskEnt)
{
new Ent=taskEnt-1234
if(is_valid_ent(Ent)) engfunc(EngFunc_RemoveEntity, Ent)
remove_task(taskEnt)
}

public fw_touch_poison(ent, touch)
{
client_print(0, print_center, "Touch")
if(is_user_alive(touch))
{
static Float:CurTime
CurTime = get_gametime()

if(CurTime - 1.0 > g_poison_touch[touch])
{
new Owner = pev(ent, pev_owner)
ExecuteHamB(Ham_TakeDamage, touch, Owner, touch, 50.0, DMG_BLAST)
set_pev(touch, pev_maxspeed, 20.0)

g_poison_touch[touch] = CurTime
}
}
}

public fw_touch_shot(ent, id)
{
emit_sound(ent, CHAN_ITEM, g_sound[3], 1.0, ATTN_NORM, 0, PITCH_NORM)
new FloatpacmanOrigin[3]
pev(ent, pev_origin, vOrigin);

new classname[1024]
pev(id, pev_classname, classname, charsmax(classname))
if(equal(classname, "func_wall") || equal(classname, "func_breakable") || equal(classname, "worldspawn")) {
new Gent = create_entity("info_target")

set_pev(Gent, pev_owner, pev(ent, pev_owner))
new Float:maxs[3] = {40.0, 40.0, 25.0}
new Float:mins[3] = {-40.0, -40.0, -25.0}
entity_set_size(Gent, mins, maxs)
set_pev(Gent, pev_classname, poison_classname)
engfunc(EngFunc_SetModel, Gent, fire_poison)

new FloatpacmanNewOrigin[3],FloatpacmanNormal[3],FloatpacmanTraceDirection[3],
FloatpacmanTraceEnd[3],FloatpacmanEntAngles[3];

pev(ent, get_pcvar_num(cvar_movetype) ? pev_velocity : pev_vuser1, vTraceDirection)

xs_vec_add(vTraceDirection, vOrigin, vTraceEnd);

engfunc(EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, ent, 0);

new Float:fFraction;
get_tr2(0, TR_flFraction, fFraction);

// -- We hit something!
if(fFraction < 1.0)
{
// -- Save results to be used later.
get_tr2(0, TR_vecEndPos, vTraceEnd);

get_tr2(0, TR_vecPlaneNormal, vNormal);
}
xs_vec_add(vTraceEnd, vNormal, vNewOrigin);

vector_to_angle(vNormal,vEntAngles);
vEntAngles[0]-=90.0

set_pev(Gent,pev_angles,vEntAngles);
set_pev(Gent, pev_origin, vNewOrigin)

set_pev(Gent, pev_rendermode, kRenderTransAdd)
set_pev(Gent, pev_renderamt, 160.0)

set_pev(Gent, pev_solid, SOLID_SLIDEBOX)
set_pev(Gent, pev_movetype, MOVETYPE_NONE)

effect_play_sprite(vOrigin, 40.0)

set_task(TIME_POISON, "fw_remove_poison", Gent+1234)
remove_entity(ent)
return FMRES_IGNORED
}

if(!is_valid_ent(id))
return FMRES_IGNORED

if(!is_user_alive(id) || !is_user_connected(id)) {
remove_entity(ent)
return FMRES_IGNORED
}

if(pev(ent, pev_iuser2) == 1)
{
set_pev(ent, pev_iuser2, 0)
pev(id, pev_origin, vOrigin)
effect_play_sprite(vOrigin, 30.0)

message_begin (MSG_BROADCAST,SVC_TEMPENTITY)
write_byte( TE_SPRITETRAIL ) // Throws a shower of sprites or models
write_coord( floatround(vOrigin[ 0 ]) ) // start pos
write_coord( floatround(vOrigin[ 1 ]) )
write_coord( floatround(vOrigin[ 2 ]) )
write_coord( floatround(vOrigin[ 0 ]) ) // velocity
write_coord( floatround(vOrigin[ 1 ]) )
write_coord( floatround(vOrigin[ 2 ]) +20)
write_short(sprite_ability ) // spr
write_byte(18) // (count)
write_byte(random_num(8,15)) // (life in 0.1's)
write_byte(4) // byte (scale in 0.1's)
write_byte(random_num(22,35)) // (velocity along vector in 10's)
write_byte(20) // (randomness of velocity in 10's)
message_end()

static attacker

attacker = pev(ent, pev_owner)

if(!fm_get_user_godmode(id)) {
new Floatpacmanelocity[3]
pev(ent, pev_vuser1, velocity)
velocity[2]+=30.0
xs_vec_mul_scalar(velocity, 1000.0/xs_vec_len(velocity), velocity)

ExecuteHam(Ham_TakeDamage, id, "poison_launcher", attacker, random_float(get_pcvar_float(cvar_start_damage), get_pcvar_float(cvar_end_damage)), DMG_BULLET)
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("Damage"), _, id)
write_byte(0) // damage save
write_byte(0) // damage take
write_long(DMG_POISON) // damage type
write_coord(0) // x
write_coord(0) // y
write_coord(0) // z
message_end()

user_screen_shake(id, 4, 2, 5)
do_screen_fade(id, 0.8, 0.7, RED, GREEN, BLUE, 180);

set_pev(id, pev_velocity, velocity)
gPoisonGlow[id] = get_gametime() + 1.0;
gGlowPlayer[id] = true;

fm_set_rendering(id, kRenderFxGlowShell, RED, GREEN, BLUE, kRenderNormal, 25)
}
remove_entity(ent)
return FMRES_IGNORED
}

return FMRES_IGNORED
}


public client_PostThink(id)
{
if (!is_user_alive(id)) return;

if(gGlowPlayer[id]) {
if(gPoisonGlow[id]>get_gametime())
return

set_pev(id, pev_maxspeed, 100.0) // prevent from moving
set_pev(id, pev_renderfx, 0)
gGlowPlayer[id] = false;
}
}

effect_play_sprite(const FloatpacmanOrigin[3], Float:Add)
{
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vOrigin, 0)
write_byte(TE_SPRITE)
engfunc(EngFunc_WriteCoord, vOrigin[0])
engfunc(EngFunc_WriteCoord, vOrigin[1])
engfunc(EngFunc_WriteCoord, vOrigin[2] + Add)
write_short(fire_spr_id)
write_byte(8)
write_byte(200)
message_end()
}

public fw_Item_Deploy_Post(weapon_ent)
{
static owner
owner = fm_cs_get_weapon_ent_owner(weapon_ent)

static weaponid
weaponid = cs_get_weapon_id(weapon_ent)

replace_weapon_models(owner, weaponid)
}

replace_weapon_models(id, weaponid)
{
switch (weaponid)
{
case CSW_WPN_POISON:
{
//if (!avp_get_user_predator(id))
// return

if(g_has_item[id])
{
set_pev(id, pev_viewmodel2, v_model)
set_pev(id, pev_weaponmodel2, p_model)
UTIL_PlayWeaponAnimation (id, DRAW_ANIM)
emit_sound(id, CHAN_WEAPON, g_sound[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
//set_pdata_float(id, m_flNextAttack, 1.3, PLAYER_LINUX_XTRA_OFF)
}
}
}
oldweap[id] = weaponid
}

public plasma_ItemPostFrame(weapon_entity)
{
new id = pev(weapon_entity, pev_owner)
if (!is_user_connected(id))
return HAM_IGNORED

if (!g_has_item[id])
return HAM_IGNORED

static iClipExtra

iClipExtra = get_pcvar_num(cvar_clip)
new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, PLAYER_LINUX_XTRA_OFF)

new iBpAmmo = cs_get_user_bpammo(id, CSW_WPN_POISON)
new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)

new fInReload = get_pdata_int(weapon_entity, m_fInReload, WEAP_LINUX_XTRA_OFF)

if( fInReload && flNextAttack <= 0.0 )
{
new j = min(iClipExtra - iClip, iBpAmmo)

set_pdata_int(weapon_entity, m_iClip, iClip + j, WEAP_LINUX_XTRA_OFF)
cs_set_user_bpammo(id, CSW_WPN_POISON, iBpAmmo-j)

set_pdata_int(weapon_entity, m_fInReload, 0, WEAP_LINUX_XTRA_OFF)
fInReload = 0
}
return HAM_IGNORED
}

public fw_Reload(weapon_entity)
{
new id = pev(weapon_entity, pev_owner)
if (!is_user_connected(id))
return HAM_IGNORED

if (!g_has_item[id])
return HAM_IGNORED

static iClipExtra

if(g_has_item[id])
iClipExtra = get_pcvar_num(cvar_clip)

g_TmpClip[id] = -1

new iBpAmmo = cs_get_user_bpammo(id, CSW_WPN_POISON)
new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)

if (iBpAmmo <= 0)
return HAM_SUPERCEDE

if (iClip >= iClipExtra)
return HAM_SUPERCEDE

g_TmpClip[id] = iClip

return HAM_IGNORED
}

public Reload_Post(weapon_entity)
{
new id = pev(weapon_entity, pev_owner)

if (!is_user_connected(id))
return HAM_IGNORED

if (!g_has_item[id])
return HAM_IGNORED

if (g_TmpClip[id] == -1)
return HAM_IGNORED

set_pdata_int(weapon_entity, m_iClip, g_TmpClip[id], WEAP_LINUX_XTRA_OFF)
set_pdata_float(weapon_entity, m_flTimeWeaponIdle, WPN_RELOAD_TIME, WEAP_LINUX_XTRA_OFF)
set_pdata_float(id, m_flNextAttack, WPN_RELOAD_TIME, PLAYER_LINUX_XTRA_OFF)
set_pdata_int(weapon_entity, m_fInReload, 1, WEAP_LINUX_XTRA_OFF)
UTIL_PlayWeaponAnimation(id, RELOAD_ANIM)

return HAM_IGNORED
}

stock fm_cs_get_current_weapon_ent(id)
{
return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM, OFFSET_LINUX)
}

stock fm_cs_get_weapon_ent_owner(ent)
{
return get_pdata_cbase(ent, 41, 4)
}

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()
}

user_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 do_screen_fade( id, Float:fadeTime, Float:holdTime, red, green, blue, alpha, type = 0x0000 )
{
static msgScreenFade;
if ( !msgScreenFade ) { msgScreenFade = get_user_msgid( "ScreenFade" ); }
new fade, hold;
fade = clamp( floatround( fadeTime * float(1<<12)), 0, 0xFFFF );
hold = clamp( floatround( holdTime * float(1<<12)), 0, 0xFFFF );
message_begin( MSG_ONE_UNRELIABLE, msgScreenFade, _, id );
write_short( fade );
write_short( hold );
write_short( type );
write_byte( red );
write_byte( green );
write_byte( blue );
write_byte( alpha );
message_end( );
}

stock get_weapon_attackment(id, Float:output[3], Float:fDis = 40.0)
{
new FloatpacmanfEnd[3], viEnd[3]
get_user_origin(id, viEnd, 3)
IVecFVec(viEnd, vfEnd)

new Float:fOrigin[3], Float:fAngle[3]

pev(id, pev_origin, fOrigin)
pev(id, pev_view_ofs, fAngle)

xs_vec_add(fOrigin, fAngle, fOrigin)

new Float:fAttack[3]

xs_vec_sub(vfEnd, fOrigin, fAttack)
xs_vec_sub(vfEnd, fOrigin, fAttack)

new Float:fRate

fRate = fDis / vector_length(fAttack)
xs_vec_mul_scalar(fAttack, fRate, fAttack)

xs_vec_add(fOrigin, fAttack, output)
}

stock drop_weapons(id, dropwhat)
{
static weapons[32], num, i, weaponid
num = 0
get_user_weapons(id, weapons, num)

for (i = 0; i < num; i++)
{
weaponid = weapons[i]

if ((dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (dropwhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM)))
{
static wname[32]
get_weaponname(weaponid, wname, sizeof wname - 1)
engclient_cmd(id, "drop", wname)
}
}
}


porfa ayuda soy nuevo en esto de configurar plugins solo se poner svar pacmanCerealspitRoflmaoRoflmao

InterestingHappyface
Responder
#2
Sección equivocada, ahí lo moví a scripting. Por otro lado, pone el código entre etiquetas [PHP] o subilo como adjunto.
[Imagen: paypalqr.png]
Responder
#3
Código PHP:
<amxmodx>
#include <fakemeta_util>
#include <engine>
#include <cstrike>
#include <hamsandwich>
#include <xs>

const UNIT_SECOND = (1<<12)


#define ENG_NULLENT    -1
#define EV_INT_WEAPONKEY    EV_INT_impulse
#define POISON_WEAPONKEY    233
#define WEAP_LINUX_XTRA_OFF    4
#define m_fKnown    44
#define m_flNextPrimaryAttack 46
#define m_flTimeWeaponIdle    48
#define m_iClip    51
#define m_fInReload    54
#define PLAYER_LINUX_XTRA_OFF    5
#define m_flNextAttack    83
#define TIME_POISON    5.0
#define CSW_WPN_POISON    CSW_M3
#define OFFSET_TIME_ATTACK 0.6
#define WPN_RELOAD_TIME 3.4

new const gWeapon[] = "weapon_m3"

#define PLUGIN "[AMXX] Public: Poison Launcher"
#define VERSION "1.8.4"
#define AUTHOR "Re.Act!ve" 

new const g_item_name[] = { "Poison Launcher" }; // Item name
new const g_item_cost 20 // Item cost

#define RED 60
#define GREEN 250
#define BLUE 0
#define PEV_ENT_TIME pev_fuser1

// Precahce files
new const fire_model_name[] = "models/zm/spore.mdl"
new const fire_poison[] = "models/zm/spore_poison.mdl"
new const fire_spr_name[] = "sprites/laserbeam.spr"
new const fire_sprite[] = "sprites/zm/poison_spr.spr"
new const spr_poison_flare[] = "sprites/zm/poison_flare.spr"

new fire_sound[] = "weapons/plauncher-1.wav"
new g_sound[][] = {
    
"weapons/plauncher_draw.wav",
    
"weapons/plaunch_clipin.wav",
    
"weapons/plaunch_clipout.wav",
    
"weapons/plauncher_explode.wav"
}

new const 
v_model[] = "models/zm/v_plaunch_flipbyHiDanZ.mdl"
new const p_model[] = "models/zm/p_plaunch1.mdl"
new const w_model[] = "models/zm/w_plaunch.mdl"

// classname
new const fire_classname[] = "poison_fire"
new const poison_classname[] = "posion_spore"
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)
enum
{
    
IDLE_ANIM 0,
    
DRAW_ANIM 2,
    
RELOAD_ANIM 1,
    
SHOOT_ANIM 3,
    
SHOOT_ANIM1 4,
    
SHOOT_ANIM2 5
}

new 
sprite_abilityfire_spr_idfire_spr_nameidg_IsInPrimaryAttackcvar_start_damagecvar_end_damagecvar_clipcvar_maxclipcvar_shot_speedg_itemidcvar_movetype
new g_orig_eventFloat:g_poison_touch[33], oldweap[33], g_TmpClip[33], Float:gPoisonGlow[33], bool:gGlowPlayer[33], g_msgScreenShake
new bool:g_has_item[33], bool:disc_opened[33]

new const 
WEAPONENTNAMES[][] = { """weapon_p228""""weapon_scout""weapon_hegrenade""weapon_xm1014""weapon_c4""weapon_mac10",
    
"weapon_aug""weapon_smokegrenade""weapon_elite""weapon_fiveseven""weapon_ump45""weapon_sg550",
    
"weapon_galil""weapon_famas""weapon_usp""weapon_glock18""weapon_awp""weapon_mp5navy""weapon_m249",
    
"weapon_m3""weapon_m4a1""weapon_tmp""weapon_g3sg1""weapon_flashbang""weapon_deagle""weapon_sg552",
    
"weapon_ak47""weapon_knife""weapon_p90" }

public 
plugin_precache()
{
    
precache_model(v_model)
    
precache_model(p_model)
    
precache_model(w_model)

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

    
precache_sound(fire_sound)

    
precache_model(fire_model_name)
    
precache_model(fire_poison)
    
sprite_ability engfunc(EngFunc_PrecacheModelspr_poison_flare)    
    
fire_spr_id precache_model(fire_sprite)
    
fire_spr_nameid precache_model(fire_spr_name)
}

public 
plugin_init()
{
    
register_plugin PLUGINVERSIONAUTHOR )

    
//g_itemid = zp_register_extra_item(g_item_name, g_item_cost, ZP_TEAM_HUMAN)

    
cvar_shot_speed register_cvar("zp_pl_bulletspeed""500")    // Velocidad De Disparo
    
cvar_movetype register_cvar("zp_pl_movetype""0")    // 0 - Directa, 1 - Gravedad (Estilo De Disparo)
    
cvar_start_damage register_cvar("zp_pl_startdamage""250.0")    // Daño Minimo
    
cvar_end_damage register_cvar("zp_pl_enddamage""600.0")    // Daño Maximo
    
cvar_clip register_cvar("zp_pl_clip""15")    // Balas De Inicio
    
cvar_maxclip register_cvar("zp_pl_ammo""60")    // Municion Maxima
    
g_msgScreenShake get_user_msgid("ScreenShake")
    
set_cvar_num("sv_maxvelocity"8000)

    
RegisterHam(Ham_Weapon_PrimaryAttackgWeapon"fw_PrimaryAttack")
    
RegisterHam(Ham_Weapon_PrimaryAttackgWeapon"fw_PrimaryAttack_Post"1)
    
RegisterHam(Ham_Item_PostFramegWeapon"plasma_ItemPostFrame")
    
RegisterHam(Ham_Weapon_ReloadgWeapon"fw_Reload")
    
RegisterHam(Ham_Weapon_ReloadgWeapon"Reload_Post"1)
    
RegisterHam(Ham_Item_AddToPlayergWeapon"fw_item_addtoplayer"1)

    
register_forward(FM_SetModel"fw_SetModel")
    
register_forward(FM_PlaybackEvent"fwPlaybackEvent")
    
register_forward(FM_PrecacheEvent"fwPrecacheEvent_Post"1)
    
register_forward(FM_UpdateClientData"fw_UpdateClientData_Post"1)

    
register_touch(fire_classname"*""fw_touch_shot")
    
register_think(fire_classname"fw_think")
    
register_touch(poison_classname"*""fw_touch_poison")

    for (new 
1sizeof WEAPONENTNAMESi++)
    if (
WEAPONENTNAMES[i][0]) 
    
RegisterHam(Ham_Item_DeployWEAPONENTNAMES[i], "fw_Item_Deploy_Post"1)
}

public 
fwPrecacheEvent_Post(type, const name[])
{
    if (
equal("events/m3.sc"name))
    {
        
g_orig_event get_orig_retval()
        return 
FMRES_HANDLED
    
}
    return 
FMRES_IGNORED
}

public 
fw_UpdateClientData_Post(idsendweaponscd_handle)
{
        
    if(
get_user_weapon(id) != CSW_WPN_POISON || !g_has_item[id])
    return 
FMRES_IGNORED

    set_cd
(cd_handleCD_flNextAttackhalflife_time() + 0.001

    return 
FMRES_HANDLED
}

public 
fw_item_addtoplayer(entid)
{
    if(!
is_valid_ent(ent))
    return 
HAM_IGNORED

    
if(entity_get_int(entEV_INT_WEAPONKEY) == POISON_WEAPONKEY)
    {
        
g_has_item[id] = true;
        
entity_set_int(idEV_INT_impulse0)

        
replace_weapon_models(ident)
        return 
HAM_HANDLED
    
}

    return 
HAM_HANDLED
}

public 
client_connect(id)
g_has_item[id] = false

public client_disconnect(id)
g_has_item[id] = false

/*
public zp_user_infected_post(id)
{
    if (zp_get_user_zombie(id))
    g_has_item[id] = false
}
*/
public zp_user_humanized_post(id)
g_has_item[id] = false

public zp_extra_item_selected(iditemid)
{
    if(
itemid == g_itemid
    {
        
drop_weapons(id,1)
        
g_has_item[id] = true;
        new 
iWep2 fm_give_item(id,gWeapon)
        if( 
iWep2 )
        {
            
cs_set_weapon_ammo(iWep2get_pcvar_num(cvar_clip))
            
cs_set_user_bpammo (idCSW_WPN_POISONget_pcvar_num(cvar_maxclip))    
        }
        
UTIL_PlayWeaponAnimation (idDRAW_ANIM)
        
emit_sound(idCHAN_WEAPONg_sound[0], 1.0ATTN_NORM0PITCH_NORM)
    }
}

public 
fw_PrimaryAttack(Weapon)
{
    if (
g_has_item[pevWeaponpev_owner )]) 
    {
        
g_IsInPrimaryAttack 1
        
return HAM_SUPERCEDE;
    }
    return 
HAM_IGNORED;
}

public 
fwPlaybackEvent(flagsinvokereventidFloat:delayFloat:origin[3], Float:angles[3], Float:fparam1Float:fparam2iParam1iParam2bParam1bParam2)
{
    if ((
eventid != g_orig_event) || !g_IsInPrimaryAttack)
    return 
FMRES_IGNORED

    
if (!(<= invoker <= get_maxplayers()))
    return 
FMRES_IGNORED

    playback_event
(flags FEV_HOSTONLYinvokereventiddelayoriginanglesfparam1fparam2iParam1iParam2bParam1bParam2)
    return 
FMRES_SUPERCEDE
}

public 
fw_PrimaryAttack_Post(Weapon)
{
    
g_IsInPrimaryAttack 0
    
new Player get_pdata_cbase(Weapon414)

    new 
szClipszAmmo
    get_user_weapon
(PlayerszClipszAmmo)

    if(!
is_user_alive(Player))
    return

    if(
szClip == 0)
    return

    if(!
is_user_alive(Player))
    return

    if(
g_has_item[Player] || szClip >= 1)
    {
        
//set_pdata_float(Player , m_flNextAttack, OFFSET_TIME_ATTACK, PLAYER_LINUX_XTRA_OFF)
        
set_pdata_floatPlayer83OFFSET_TIME_ATTACK )
        
make_shoot(PlayerWeapon)
    }
}

public 
make_shoot(idWeapon)
{
    if(!
is_user_alive(id))
    return 
HAM_IGNORED;

    if(
get_user_weapon(id) != CSW_WPN_POISON)
    return 
HAM_IGNORED;

    if(!
g_has_item[id] || disc_opened[id])
    return 
HAM_IGNORED;

    new 
szClip
    get_user_weapon
(idszClip)

    if(
szClip >= 1)
    {
        new 
Float:Puch[3]
        
pev(idpev_punchanglePuch)
        
Puch[0]-=random_float(3.06.0)
        
cs_set_weapon_ammo(WeaponszClip-1)
        
emit_sound(idCHAN_WEAPONfire_sound1.0ATTN_NORM0PITCH_NORM)
        
UTIL_PlayWeaponAnimation(idrandom_num(SHOOT_ANIMSHOOT_ANIM2))
        
throw_fire(id)
        
set_pev(id,pev_punchangle,Puch)
    }
    return 
HAM_IGNORED;
}

public 
throw_fire(id)
{
    new 
iEnt create_entity("info_target")
    new 
Float:vfVelocity[3]

    
velocity_by_aim(id, (get_pcvar_num(cvar_shot_speed)*10), vfVelocity)

    
// add velocity of Owner for ent
    
new Float:vfAttack[3], Float:vfAngle[3], Float:vOfps[3]
    
get_weapon_attackment(idvfAttack20.0)
    
pev(idpev_view_ofsvOfps)
    
pev(idpev_anglesvfAngle)

    
// set info for ent
    
set_pev(iEntpev_movetypeMOVETYPE_FLY)
    
set_pev(iEntPEV_ENT_TIMEget_gametime() + 5.0)    // time remove
    
set_pev(iEntpev_classnamefire_classname)
    
engfunc(EngFunc_SetModeliEntfire_model_name)    //fire_model_name
    
set_pev(iEntpev_minsFloat:{-2.0, -2.0, -2.0})
    
set_pev(iEntpev_maxsFloat:{2.02.02.0})
    
set_pev(iEntpev_body2)
    
set_pev(iEntpev_originvfAttack)
    
set_pev(iEntpev_velocityvfVelocity)
    
set_pev(iEntpev_solidSOLID_BBOX)
    
set_pev(iEntpev_ownerid)
    
set_pev(iEntpev_iuser21)
    
set_pev(iEntpev_vuser1vfVelocity)
    
set_pev(iEntpev_anglesvfAngle)
    
set_pev(iEntpev_v_anglevOfps)

    
set_pev(iEntpev_rendermodekRenderTransAdd)
    
set_pev(iEntpev_renderamt130.0)

    
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
    
write_byte(TE_BEAMFOLLOW// TE id
    
write_short(iEnt// entity
    
write_short(fire_spr_nameid// sprite
    
write_byte(8// life
    
write_byte(6// width
    
write_byte(RED// r
    
write_byte(GREEN// g
    
write_byte(BLUE// b
    
write_byte(180// brightness
    
message_end()
    
set_task(OFFSET_TIME_ATTACK"RemoveDisk"id+2242)
}

public 
RemoveDisk(taskid)
{
    
disc_opened[taskid-2242] = false;
    
remove_task(taskid)
}

public 
fw_SetModel(entitymodel[])
{
    if(!
is_valid_ent(entity))
    return 
FMRES_IGNORED;

    static 
szClassName[33]
    
entity_get_string(entityEV_SZ_classnameszClassNamecharsmax(szClassName))

    if(!
equal(szClassName"weaponbox"))
    return 
FMRES_IGNORED;

    static 
iOwner

    iOwner 
entity_get_edict(entityEV_ENT_owner)

    if(
equal(model"models/w_m3.mdl"))
    {
        static 
iStoredSVDID

        iStoredSVDID 
find_ent_by_owner(ENG_NULLENTgWeaponentity)

        if(!
is_valid_ent(iStoredSVDID))
        return 
FMRES_IGNORED;

        if(
g_has_item[iOwner])
        {
            
entity_set_int(iStoredSVDIDEV_INT_WEAPONKEYPOISON_WEAPONKEY)

            
g_has_item[iOwner] = false

            entity_set_model
(entityw_model)

            return 
FMRES_SUPERCEDE;
        }
    }
    return 
FMRES_IGNORED;
}

public 
fw_think(iEnt)
{
    if(!
pev_valid(iEnt)) 
    return

    new 
Float:fFrameFloat:fScaleFloat:fNextThink
    pev
(iEntpev_framefFrame)
    
pev(iEntpev_scalefScale)

    
// effect exp
    
new iMoveType pev(iEntpev_movetype)
    if (
iMoveType == MOVETYPE_NONE)
    {
        
fNextThink 0.015
        fFrame 
+= 1.0
        fScale 
floatmax(fScale1.55)

        if (
fFrame 21.0)
        {
            
engfunc(EngFunc_RemoveEntityiEnt)
            return
        }
    }

    
// effect normal
    
else
    {
        
fNextThink 0.045
        fFrame 
+= 1.0
        fFrame 
floatmin(21.0fFrame)
        
fScale += 0.2
        fScale 
floatmin(fScale1.75)
    }

    
set_pev(iEntpev_framefFrame)
    
set_pev(iEntpev_scalefScale)
    
set_pev(iEntpev_nextthinkget_gametime() + fNextThink)

    
// time remove
    
static Float:fTimeRemove
    pev
(iEntpev_fuser1fTimeRemove)
    if (
get_gametime() >= fTimeRemove)
    {
        
engfunc(EngFunc_RemoveEntityiEnt)
        return;
    }
}

public 
fw_remove_poison(taskEnt)
{
    new 
Ent=taskEnt-1234
    
if(is_valid_ent(Ent)) engfunc(EngFunc_RemoveEntityEnt)
    
remove_task(taskEnt)
}

public 
fw_touch_poison(enttouch)
{
    
client_print(0print_center"Touch")
    if(
is_user_alive(touch))
    {
        static 
Float:CurTime
        CurTime 
get_gametime()

        if(
CurTime 1.0 g_poison_touch[touch])
        {
            new 
Owner pev(entpev_owner)
            
ExecuteHamB(Ham_TakeDamagetouchOwnertouch50.0DMG_BLAST)
            
set_pev(touchpev_maxspeed20.0)    

            
g_poison_touch[touch] = CurTime
        
}
    }
}

public 
fw_touch_shot(entid)
{
    
emit_sound(entCHAN_ITEMg_sound[3], 1.0ATTN_NORM0PITCH_NORM)
    new 
Float:vOrigin[3]
    
pev(entpev_originvOrigin);

    new 
classname[1024]
    
pev(idpev_classnameclassnamecharsmax(classname))
    if(
equal(classname"func_wall") || equal(classname"func_breakable") || equal(classname"worldspawn")) {
        new 
Gent create_entity("info_target")

        
set_pev(Gentpev_ownerpev(entpev_owner))
        new 
Float:maxs[3] = {40.040.025.0}
        new 
Float:mins[3] = {-40.0, -40.0, -25.0}
        
entity_set_size(Gentminsmaxs)
        
set_pev(Gentpev_classnamepoison_classname)
        
engfunc(EngFunc_SetModelGentfire_poison)

        new    
Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3],
        
Float:vTraceEnd[3],Float:vEntAngles[3];

        
pev(entget_pcvar_num(cvar_movetype) ? pev_velocity pev_vuser1vTraceDirection)

        
xs_vec_add(vTraceDirectionvOriginvTraceEnd);

        
engfunc(EngFunc_TraceLinevOriginvTraceEndDONT_IGNORE_MONSTERSent0);

        new 
Float:fFraction;
        
get_tr2(0TR_flFractionfFraction);

        
// -- We hit something!
        
if(fFraction 1.0)
        {
            
// -- Save results to be used later.
            
get_tr2(0TR_vecEndPosvTraceEnd);

            
get_tr2(0TR_vecPlaneNormalvNormal);
        }
        
xs_vec_add(vTraceEndvNormalvNewOrigin);

        
vector_to_angle(vNormal,vEntAngles);
        
vEntAngles[0]-=90.0

        set_pev
(Gent,pev_angles,vEntAngles);
        
set_pev(Gentpev_originvNewOrigin)

        
set_pev(Gentpev_rendermodekRenderTransAdd)
        
set_pev(Gentpev_renderamt160.0)

        
set_pev(Gentpev_solidSOLID_SLIDEBOX)
        
set_pev(Gentpev_movetypeMOVETYPE_NONE)

        
effect_play_sprite(vOrigin40.0)

        
set_task(TIME_POISON"fw_remove_poison"Gent+1234)
        
remove_entity(ent)
        return 
FMRES_IGNORED
    
}

    if(!
is_valid_ent(id))
    return 
FMRES_IGNORED

    
if(!is_user_alive(id) || !is_user_connected(id)) {
        
remove_entity(ent)
        return 
FMRES_IGNORED
    
}

    if(
pev(entpev_iuser2) == 1)
    {
        
set_pev(entpev_iuser20)
        
pev(idpev_originvOrigin)
        
effect_play_sprite(vOrigin30.0)

        
message_begin (MSG_BROADCAST,SVC_TEMPENTITY)
        
write_byteTE_SPRITETRAIL // Throws a shower of sprites or models
        
write_coordfloatround(vOrigin]) ) // start pos
        
write_coordfloatround(vOrigin]) )
        
write_coordfloatround(vOrigin]) )
        
write_coordfloatround(vOrigin]) ) // velocity
        
write_coordfloatround(vOrigin]) )
        
write_coordfloatround(vOrigin]) +20)
        
write_short(sprite_ability // spr
        
write_byte(18// (count)
        
write_byte(random_num(8,15)) // (life in 0.1's)
        
write_byte(4// byte (scale in 0.1's)
        
write_byte(random_num(22,35)) // (velocity along vector in 10's)
        
write_byte(20// (randomness of velocity in 10's)
        
message_end()

        static 
attacker

        attacker 
pev(entpev_owner)

        if(!
fm_get_user_godmode(id)) {
            new 
Float:velocity[3]
            
pev(entpev_vuser1velocity)
            
velocity[2]+=30.0
            xs_vec_mul_scalar
(velocity1000.0/xs_vec_len(velocity), velocity)

            
ExecuteHam(Ham_TakeDamageid"poison_launcher"attackerrandom_float(get_pcvar_float(cvar_start_damage), get_pcvar_float(cvar_end_damage)), DMG_BULLET)
            
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("Damage"), _id)
            
write_byte(0// damage save
            
write_byte(0// damage take
            
write_long(DMG_POISON// damage type
            
write_coord(0// x
            
write_coord(0// y
            
write_coord(0// z
            
message_end()

            
user_screen_shake(id425)
            
do_screen_fade(id0.80.7REDGREENBLUE180);

            
set_pev(idpev_velocityvelocity)
            
gPoisonGlow[id] = get_gametime() + 1.0;
            
gGlowPlayer[id] = true;

            
fm_set_rendering(idkRenderFxGlowShellREDGREENBLUEkRenderNormal25)
        }
        
remove_entity(ent)
        return 
FMRES_IGNORED
    
}

    return 
FMRES_IGNORED
}


public 
client_PostThink(id)
{
    if (!
is_user_alive(id)) return;

    if(
gGlowPlayer[id]) {
        if(
gPoisonGlow[id]>get_gametime())
        return

        
set_pev(idpev_maxspeed100.0// prevent from moving
        
set_pev(idpev_renderfx0)    
        
gGlowPlayer[id] = false;    
    }
}

effect_play_sprite(const Float:vOrigin[3], Float:Add)
{
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYvOrigin0)
    
write_byte(TE_SPRITE)
    
engfunc(EngFunc_WriteCoordvOrigin[0])
    
engfunc(EngFunc_WriteCoordvOrigin[1])
    
engfunc(EngFunc_WriteCoordvOrigin[2] + Add)
    
write_short(fire_spr_id)
    
write_byte(8)
    
write_byte(200)
    
message_end()
}

public 
fw_Item_Deploy_Post(weapon_ent)
{
    static 
owner
    owner 
fm_cs_get_weapon_ent_owner(weapon_ent)

    static 
weaponid
    weaponid 
cs_get_weapon_id(weapon_ent)

    
replace_weapon_models(ownerweaponid)
}

replace_weapon_models(idweaponid)
{
    switch (
weaponid)
    {
        case 
CSW_WPN_POISON:
        {
            
//if (!avp_get_user_predator(id))
            //    return

            
if(g_has_item[id])
            {
                
set_pev(idpev_viewmodel2v_model)
                
set_pev(idpev_weaponmodel2p_model)
                
UTIL_PlayWeaponAnimation (idDRAW_ANIM)
                
emit_sound(idCHAN_WEAPONg_sound[0], 1.0ATTN_NORM0PITCH_NORM)
                
//set_pdata_float(id, m_flNextAttack, 1.3, PLAYER_LINUX_XTRA_OFF)
            
}
        }
    }
    
oldweap[id] = weaponid
}

public 
plasma_ItemPostFrame(weapon_entity
{
    new 
id pev(weapon_entitypev_owner)
    if (!
is_user_connected(id))
    return 
HAM_IGNORED

    
if (!g_has_item[id])
    return 
HAM_IGNORED

    
static iClipExtra

    iClipExtra 
get_pcvar_num(cvar_clip)
    new 
Float:flNextAttack get_pdata_float(idm_flNextAttackPLAYER_LINUX_XTRA_OFF)

    new 
iBpAmmo cs_get_user_bpammo(idCSW_WPN_POISON)
    new 
iClip get_pdata_int(weapon_entitym_iClipWEAP_LINUX_XTRA_OFF)

    new 
fInReload get_pdata_int(weapon_entitym_fInReloadWEAP_LINUX_XTRA_OFF

    if( 
fInReload && flNextAttack <= 0.0 )
    {
        new 
min(iClipExtra iClipiBpAmmo)

        
set_pdata_int(weapon_entitym_iClipiClip jWEAP_LINUX_XTRA_OFF)
        
cs_set_user_bpammo(idCSW_WPN_POISONiBpAmmo-j)

        
set_pdata_int(weapon_entitym_fInReload0WEAP_LINUX_XTRA_OFF)
        
fInReload 0
    
}
    return 
HAM_IGNORED
}

public 
fw_Reload(weapon_entity
{
    new 
id pev(weapon_entitypev_owner)
    if (!
is_user_connected(id))
    return 
HAM_IGNORED

    
if (!g_has_item[id])
    return 
HAM_IGNORED

    
static iClipExtra

    
if(g_has_item[id])
    
iClipExtra get_pcvar_num(cvar_clip)

    
g_TmpClip[id] = -1

    
new iBpAmmo cs_get_user_bpammo(idCSW_WPN_POISON)
    new 
iClip get_pdata_int(weapon_entitym_iClipWEAP_LINUX_XTRA_OFF)

    if (
iBpAmmo <= 0)
    return 
HAM_SUPERCEDE

    
if (iClip >= iClipExtra)
    return 
HAM_SUPERCEDE

    g_TmpClip
[id] = iClip

    
return HAM_IGNORED
}

public 
Reload_Post(weapon_entity
{
    new 
id pev(weapon_entitypev_owner)

    if (!
is_user_connected(id))
    return 
HAM_IGNORED

    
if (!g_has_item[id])
    return 
HAM_IGNORED

    
if (g_TmpClip[id] == -1)
    return 
HAM_IGNORED

    set_pdata_int
(weapon_entitym_iClipg_TmpClip[id], WEAP_LINUX_XTRA_OFF)
    
set_pdata_float(weapon_entitym_flTimeWeaponIdleWPN_RELOAD_TIMEWEAP_LINUX_XTRA_OFF)
    
set_pdata_float(idm_flNextAttackWPN_RELOAD_TIMEPLAYER_LINUX_XTRA_OFF)
    
set_pdata_int(weapon_entitym_fInReload1WEAP_LINUX_XTRA_OFF)
    
UTIL_PlayWeaponAnimation(idRELOAD_ANIM)

    return 
HAM_IGNORED
}

stock fm_cs_get_current_weapon_ent(id)
{
    return 
get_pdata_cbase(idOFFSET_ACTIVE_ITEMOFFSET_LINUX)
}

stock fm_cs_get_weapon_ent_owner(ent)
{
    return 
get_pdata_cbase(ent414)
}

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

    
message_begin(MSG_ONE_UNRELIABLESVC_WEAPONANIM, .player Player)
    
write_byte(Sequence)
    
write_byte(pev(Playerpev_body))
    
message_end()
}

user_screen_shake(idamplitude 4duration 2frequency 10)
{
    
message_begin(MSG_ONE_UNRELIABLEg_msgScreenShake_id)
    
write_short((1<<12)*amplitude// ??
    
write_short((1<<12)*duration// ??
    
write_short((1<<12)*frequency// ??
    
message_end()
}

stock do_screen_fadeidFloat:fadeTimeFloat:holdTimeredgreenbluealphatype 0x0000 )
{
    static 
msgScreenFade;
    if ( !
msgScreenFade ) { msgScreenFade get_user_msgid"ScreenFade" ); }
    new 
fadehold;
    
fade clampfloatroundfadeTime float(1<<12)), 00xFFFF );
    
hold clampfloatroundholdTime float(1<<12)), 00xFFFF );
    
message_beginMSG_ONE_UNRELIABLEmsgScreenFade_id );
    
write_shortfade );
    
write_shorthold );
    
write_shorttype );
    
write_bytered );
    
write_bytegreen );
    
write_byteblue );
    
write_bytealpha );
    
message_end( );
}

stock get_weapon_attackment(idFloat:output[3], Float:fDis 40.0)
{
     
    new 
Float:vfEnd[3], viEnd[3
    
get_user_origin(idviEnd3
    
IVecFVec(viEndvfEnd

    new 
Float:fOrigin[3], Float:fAngle[3]

    
pev(idpev_originfOrigin
    
pev(idpev_view_ofsfAngle)

    
xs_vec_add(fOriginfAnglefOrigin

    new 
Float:fAttack[3]

    
xs_vec_sub(vfEndfOriginfAttack)
    
xs_vec_sub(vfEndfOriginfAttack

    new 
Float:fRate

    fRate 
fDis vector_length(fAttack)
    
xs_vec_mul_scalar(fAttackfRatefAttack)

    
xs_vec_add(fOriginfAttackoutput)
}

stock drop_weapons(iddropwhat)
{
    static 
weapons[32], numiweaponid
    num 
0
    get_user_weapons
(idweaponsnum)

    for (
0numi++)
    {
        
weaponid weapons[i]

        if ((
dropwhat == && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (dropwhat == && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM)))
        {
            static 
wname[32]
            
get_weaponname(weaponidwnamesizeof wname 1)
            
engclient_cmd(id"drop"wname)
        }
    }

Responder
#4
(29/09/2016, 03:31 PM)SoundBlaster escribió:
Código PHP:
<amxmodx>
#include <fakemeta_util>
#include <engine>
#include <cstrike>
#include <hamsandwich>
#include <xs>

const UNIT_SECOND = (1<<12)


#define ENG_NULLENT    -1
#define EV_INT_WEAPONKEY    EV_INT_impulse
#define POISON_WEAPONKEY    233
#define WEAP_LINUX_XTRA_OFF    4
#define m_fKnown    44
#define m_flNextPrimaryAttack 46
#define m_flTimeWeaponIdle    48
#define m_iClip    51
#define m_fInReload    54
#define PLAYER_LINUX_XTRA_OFF    5
#define m_flNextAttack    83
#define TIME_POISON    5.0
#define CSW_WPN_POISON    CSW_M3
#define OFFSET_TIME_ATTACK 0.6
#define WPN_RELOAD_TIME 3.4

new const gWeapon[] = "weapon_m3"

#define PLUGIN "[AMXX] Public: Poison Launcher"
#define VERSION "1.8.4"
#define AUTHOR "Re.Act!ve" 

new const g_item_name[] = { "Poison Launcher" }; // Item name
new const g_item_cost 20 // Item cost

#define RED 60
#define GREEN 250
#define BLUE 0
#define PEV_ENT_TIME pev_fuser1

// Precahce files
new const fire_model_name[] = "models/zm/spore.mdl"
new const fire_poison[] = "models/zm/spore_poison.mdl"
new const fire_spr_name[] = "sprites/laserbeam.spr"
new const fire_sprite[] = "sprites/zm/poison_spr.spr"
new const spr_poison_flare[] = "sprites/zm/poison_flare.spr"

new fire_sound[] = "weapons/plauncher-1.wav"
new g_sound[][] = {
    
"weapons/plauncher_draw.wav",
    
"weapons/plaunch_clipin.wav",
    
"weapons/plaunch_clipout.wav",
    
"weapons/plauncher_explode.wav"
}

new const 
v_model[] = "models/zm/v_plaunch_flipbyHiDanZ.mdl"
new const p_model[] = "models/zm/p_plaunch1.mdl"
new const w_model[] = "models/zm/w_plaunch.mdl"

// classname
new const fire_classname[] = "poison_fire"
new const poison_classname[] = "posion_spore"
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)
enum
{
    
IDLE_ANIM 0,
    
DRAW_ANIM 2,
    
RELOAD_ANIM 1,
    
SHOOT_ANIM 3,
    
SHOOT_ANIM1 4,
    
SHOOT_ANIM2 5
}

new 
sprite_abilityfire_spr_idfire_spr_nameidg_IsInPrimaryAttackcvar_start_damagecvar_end_damagecvar_clipcvar_maxclipcvar_shot_speedg_itemidcvar_movetype
new g_orig_eventFloat:g_poison_touch[33], oldweap[33], g_TmpClip[33], Float:gPoisonGlow[33], bool:gGlowPlayer[33], g_msgScreenShake
new bool:g_has_item[33], bool:disc_opened[33]

new const 
WEAPONENTNAMES[][] = { """weapon_p228""""weapon_scout""weapon_hegrenade""weapon_xm1014""weapon_c4""weapon_mac10",
    
"weapon_aug""weapon_smokegrenade""weapon_elite""weapon_fiveseven""weapon_ump45""weapon_sg550",
    
"weapon_galil""weapon_famas""weapon_usp""weapon_glock18""weapon_awp""weapon_mp5navy""weapon_m249",
    
"weapon_m3""weapon_m4a1""weapon_tmp""weapon_g3sg1""weapon_flashbang""weapon_deagle""weapon_sg552",
    
"weapon_ak47""weapon_knife""weapon_p90" }

public 
plugin_precache()
{
    
precache_model(v_model)
    
precache_model(p_model)
    
precache_model(w_model)

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

    
precache_sound(fire_sound)

    
precache_model(fire_model_name)
    
precache_model(fire_poison)
    
sprite_ability engfunc(EngFunc_PrecacheModelspr_poison_flare)    
    
fire_spr_id precache_model(fire_sprite)
    
fire_spr_nameid precache_model(fire_spr_name)
}

public 
plugin_init()
{
    
register_plugin PLUGINVERSIONAUTHOR )

    
//g_itemid = zp_register_extra_item(g_item_name, g_item_cost, ZP_TEAM_HUMAN)

    
cvar_shot_speed register_cvar("zp_pl_bulletspeed""500")    // Velocidad De Disparo
    
cvar_movetype register_cvar("zp_pl_movetype""0")    // 0 - Directa, 1 - Gravedad (Estilo De Disparo)
    
cvar_start_damage register_cvar("zp_pl_startdamage""250.0")    // Daño Minimo
    
cvar_end_damage register_cvar("zp_pl_enddamage""600.0")    // Daño Maximo
    
cvar_clip register_cvar("zp_pl_clip""15")    // Balas De Inicio
    
cvar_maxclip register_cvar("zp_pl_ammo""60")    // Municion Maxima
    
g_msgScreenShake get_user_msgid("ScreenShake")
    
set_cvar_num("sv_maxvelocity"8000)

    
RegisterHam(Ham_Weapon_PrimaryAttackgWeapon"fw_PrimaryAttack")
    
RegisterHam(Ham_Weapon_PrimaryAttackgWeapon"fw_PrimaryAttack_Post"1)
    
RegisterHam(Ham_Item_PostFramegWeapon"plasma_ItemPostFrame")
    
RegisterHam(Ham_Weapon_ReloadgWeapon"fw_Reload")
    
RegisterHam(Ham_Weapon_ReloadgWeapon"Reload_Post"1)
    
RegisterHam(Ham_Item_AddToPlayergWeapon"fw_item_addtoplayer"1)

    
register_forward(FM_SetModel"fw_SetModel")
    
register_forward(FM_PlaybackEvent"fwPlaybackEvent")
    
register_forward(FM_PrecacheEvent"fwPrecacheEvent_Post"1)
    
register_forward(FM_UpdateClientData"fw_UpdateClientData_Post"1)

    
register_touch(fire_classname"*""fw_touch_shot")
    
register_think(fire_classname"fw_think")
    
register_touch(poison_classname"*""fw_touch_poison")

    for (new 
1sizeof WEAPONENTNAMESi++)
    if (
WEAPONENTNAMES[i][0]) 
    
RegisterHam(Ham_Item_DeployWEAPONENTNAMES[i], "fw_Item_Deploy_Post"1)
}

public 
fwPrecacheEvent_Post(type, const name[])
{
    if (
equal("events/m3.sc"name))
    {
        
g_orig_event get_orig_retval()
        return 
FMRES_HANDLED
    
}
    return 
FMRES_IGNORED
}

public 
fw_UpdateClientData_Post(idsendweaponscd_handle)
{
        
    if(
get_user_weapon(id) != CSW_WPN_POISON || !g_has_item[id])
    return 
FMRES_IGNORED

    set_cd
(cd_handleCD_flNextAttackhalflife_time() + 0.001

    return 
FMRES_HANDLED
}

public 
fw_item_addtoplayer(entid)
{
    if(!
is_valid_ent(ent))
    return 
HAM_IGNORED

    
if(entity_get_int(entEV_INT_WEAPONKEY) == POISON_WEAPONKEY)
    {
        
g_has_item[id] = true;
        
entity_set_int(idEV_INT_impulse0)

        
replace_weapon_models(ident)
        return 
HAM_HANDLED
    
}

    return 
HAM_HANDLED
}

public 
client_connect(id)
g_has_item[id] = false

public client_disconnect(id)
g_has_item[id] = false

/*
public zp_user_infected_post(id)
{
    if (zp_get_user_zombie(id))
    g_has_item[id] = false
}
*/
public zp_user_humanized_post(id)
g_has_item[id] = false

public zp_extra_item_selected(iditemid)
{
    if(
itemid == g_itemid
    {
        
drop_weapons(id,1)
        
g_has_item[id] = true;
        new 
iWep2 fm_give_item(id,gWeapon)
        if( 
iWep2 )
        {
            
cs_set_weapon_ammo(iWep2get_pcvar_num(cvar_clip))
            
cs_set_user_bpammo (idCSW_WPN_POISONget_pcvar_num(cvar_maxclip))    
        }
        
UTIL_PlayWeaponAnimation (idDRAW_ANIM)
        
emit_sound(idCHAN_WEAPONg_sound[0], 1.0ATTN_NORM0PITCH_NORM)
    }
}

public 
fw_PrimaryAttack(Weapon)
{
    if (
g_has_item[pevWeaponpev_owner )]) 
    {
        
g_IsInPrimaryAttack 1
        
return HAM_SUPERCEDE;
    }
    return 
HAM_IGNORED;
}

public 
fwPlaybackEvent(flagsinvokereventidFloat:delayFloat:origin[3], Float:angles[3], Float:fparam1Float:fparam2iParam1iParam2bParam1bParam2)
{
    if ((
eventid != g_orig_event) || !g_IsInPrimaryAttack)
    return 
FMRES_IGNORED

    
if (!(<= invoker <= get_maxplayers()))
    return 
FMRES_IGNORED

    playback_event
(flags FEV_HOSTONLYinvokereventiddelayoriginanglesfparam1fparam2iParam1iParam2bParam1bParam2)
    return 
FMRES_SUPERCEDE
}

public 
fw_PrimaryAttack_Post(Weapon)
{
    
g_IsInPrimaryAttack 0
    
new Player get_pdata_cbase(Weapon414)

    new 
szClipszAmmo
    get_user_weapon
(PlayerszClipszAmmo)

    if(!
is_user_alive(Player))
    return

    if(
szClip == 0)
    return

    if(!
is_user_alive(Player))
    return

    if(
g_has_item[Player] || szClip >= 1)
    {
        
//set_pdata_float(Player , m_flNextAttack, OFFSET_TIME_ATTACK, PLAYER_LINUX_XTRA_OFF)
        
set_pdata_floatPlayer83OFFSET_TIME_ATTACK )
        
make_shoot(PlayerWeapon)
    }
}

public 
make_shoot(idWeapon)
{
    if(!
is_user_alive(id))
    return 
HAM_IGNORED;

    if(
get_user_weapon(id) != CSW_WPN_POISON)
    return 
HAM_IGNORED;

    if(!
g_has_item[id] || disc_opened[id])
    return 
HAM_IGNORED;

    new 
szClip
    get_user_weapon
(idszClip)

    if(
szClip >= 1)
    {
        new 
Float:Puch[3]
        
pev(idpev_punchanglePuch)
        
Puch[0]-=random_float(3.06.0)
        
cs_set_weapon_ammo(WeaponszClip-1)
        
emit_sound(idCHAN_WEAPONfire_sound1.0ATTN_NORM0PITCH_NORM)
        
UTIL_PlayWeaponAnimation(idrandom_num(SHOOT_ANIMSHOOT_ANIM2))
        
throw_fire(id)
        
set_pev(id,pev_punchangle,Puch)
    }
    return 
HAM_IGNORED;
}

public 
throw_fire(id)
{
    new 
iEnt create_entity("info_target")
    new 
Float:vfVelocity[3]

    
velocity_by_aim(id, (get_pcvar_num(cvar_shot_speed)*10), vfVelocity)

    
// add velocity of Owner for ent
    
new Float:vfAttack[3], Float:vfAngle[3], Float:vOfps[3]
    
get_weapon_attackment(idvfAttack20.0)
    
pev(idpev_view_ofsvOfps)
    
pev(idpev_anglesvfAngle)

    
// set info for ent
    
set_pev(iEntpev_movetypeMOVETYPE_FLY)
    
set_pev(iEntPEV_ENT_TIMEget_gametime() + 5.0)    // time remove
    
set_pev(iEntpev_classnamefire_classname)
    
engfunc(EngFunc_SetModeliEntfire_model_name)    //fire_model_name
    
set_pev(iEntpev_minsFloat:{-2.0, -2.0, -2.0})
    
set_pev(iEntpev_maxsFloat:{2.02.02.0})
    
set_pev(iEntpev_body2)
    
set_pev(iEntpev_originvfAttack)
    
set_pev(iEntpev_velocityvfVelocity)
    
set_pev(iEntpev_solidSOLID_BBOX)
    
set_pev(iEntpev_ownerid)
    
set_pev(iEntpev_iuser21)
    
set_pev(iEntpev_vuser1vfVelocity)
    
set_pev(iEntpev_anglesvfAngle)
    
set_pev(iEntpev_v_anglevOfps)

    
set_pev(iEntpev_rendermodekRenderTransAdd)
    
set_pev(iEntpev_renderamt130.0)

    
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
    
write_byte(TE_BEAMFOLLOW// TE id
    
write_short(iEnt// entity
    
write_short(fire_spr_nameid// sprite
    
write_byte(8// life
    
write_byte(6// width
    
write_byte(RED// r
    
write_byte(GREEN// g
    
write_byte(BLUE// b
    
write_byte(180// brightness
    
message_end()
    
set_task(OFFSET_TIME_ATTACK"RemoveDisk"id+2242)
}

public 
RemoveDisk(taskid)
{
    
disc_opened[taskid-2242] = false;
    
remove_task(taskid)
}

public 
fw_SetModel(entitymodel[])
{
    if(!
is_valid_ent(entity))
    return 
FMRES_IGNORED;

    static 
szClassName[33]
    
entity_get_string(entityEV_SZ_classnameszClassNamecharsmax(szClassName))

    if(!
equal(szClassName"weaponbox"))
    return 
FMRES_IGNORED;

    static 
iOwner

    iOwner 
entity_get_edict(entityEV_ENT_owner)

    if(
equal(model"models/w_m3.mdl"))
    {
        static 
iStoredSVDID

        iStoredSVDID 
find_ent_by_owner(ENG_NULLENTgWeaponentity)

        if(!
is_valid_ent(iStoredSVDID))
        return 
FMRES_IGNORED;

        if(
g_has_item[iOwner])
        {
            
entity_set_int(iStoredSVDIDEV_INT_WEAPONKEYPOISON_WEAPONKEY)

            
g_has_item[iOwner] = false

            entity_set_model
(entityw_model)

            return 
FMRES_SUPERCEDE;
        }
    }
    return 
FMRES_IGNORED;
}

public 
fw_think(iEnt)
{
    if(!
pev_valid(iEnt)) 
    return

    new 
Float:fFrameFloat:fScaleFloat:fNextThink
    pev
(iEntpev_framefFrame)
    
pev(iEntpev_scalefScale)

    
// effect exp
    
new iMoveType pev(iEntpev_movetype)
    if (
iMoveType == MOVETYPE_NONE)
    {
        
fNextThink 0.015
        fFrame 
+= 1.0
        fScale 
floatmax(fScale1.55)

        if (
fFrame 21.0)
        {
            
engfunc(EngFunc_RemoveEntityiEnt)
            return
        }
    }

    
// effect normal
    
else
    {
        
fNextThink 0.045
        fFrame 
+= 1.0
        fFrame 
floatmin(21.0fFrame)
        
fScale += 0.2
        fScale 
floatmin(fScale1.75)
    }

    
set_pev(iEntpev_framefFrame)
    
set_pev(iEntpev_scalefScale)
    
set_pev(iEntpev_nextthinkget_gametime() + fNextThink)

    
// time remove
    
static Float:fTimeRemove
    pev
(iEntpev_fuser1fTimeRemove)
    if (
get_gametime() >= fTimeRemove)
    {
        
engfunc(EngFunc_RemoveEntityiEnt)
        return;
    }
}

public 
fw_remove_poison(taskEnt)
{
    new 
Ent=taskEnt-1234
    
if(is_valid_ent(Ent)) engfunc(EngFunc_RemoveEntityEnt)
    
remove_task(taskEnt)
}

public 
fw_touch_poison(enttouch)
{
    
client_print(0print_center"Touch")
    if(
is_user_alive(touch))
    {
        static 
Float:CurTime
        CurTime 
get_gametime()

        if(
CurTime 1.0 g_poison_touch[touch])
        {
            new 
Owner pev(entpev_owner)
            
ExecuteHamB(Ham_TakeDamagetouchOwnertouch50.0DMG_BLAST)
            
set_pev(touchpev_maxspeed20.0)    

            
g_poison_touch[touch] = CurTime
        
}
    }
}

public 
fw_touch_shot(entid)
{
    
emit_sound(entCHAN_ITEMg_sound[3], 1.0ATTN_NORM0PITCH_NORM)
    new 
Float:vOrigin[3]
    
pev(entpev_originvOrigin);

    new 
classname[1024]
    
pev(idpev_classnameclassnamecharsmax(classname))
    if(
equal(classname"func_wall") || equal(classname"func_breakable") || equal(classname"worldspawn")) {
        new 
Gent create_entity("info_target")

        
set_pev(Gentpev_ownerpev(entpev_owner))
        new 
Float:maxs[3] = {40.040.025.0}
        new 
Float:mins[3] = {-40.0, -40.0, -25.0}
        
entity_set_size(Gentminsmaxs)
        
set_pev(Gentpev_classnamepoison_classname)
        
engfunc(EngFunc_SetModelGentfire_poison)

        new    
Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3],
        
Float:vTraceEnd[3],Float:vEntAngles[3];

        
pev(entget_pcvar_num(cvar_movetype) ? pev_velocity pev_vuser1vTraceDirection)

        
xs_vec_add(vTraceDirectionvOriginvTraceEnd);

        
engfunc(EngFunc_TraceLinevOriginvTraceEndDONT_IGNORE_MONSTERSent0);

        new 
Float:fFraction;
        
get_tr2(0TR_flFractionfFraction);

        
// -- We hit something!
        
if(fFraction 1.0)
        {
            
// -- Save results to be used later.
            
get_tr2(0TR_vecEndPosvTraceEnd);

            
get_tr2(0TR_vecPlaneNormalvNormal);
        }
        
xs_vec_add(vTraceEndvNormalvNewOrigin);

        
vector_to_angle(vNormal,vEntAngles);
        
vEntAngles[0]-=90.0

        set_pev
(Gent,pev_angles,vEntAngles);
        
set_pev(Gentpev_originvNewOrigin)

        
set_pev(Gentpev_rendermodekRenderTransAdd)
        
set_pev(Gentpev_renderamt160.0)

        
set_pev(Gentpev_solidSOLID_SLIDEBOX)
        
set_pev(Gentpev_movetypeMOVETYPE_NONE)

        
effect_play_sprite(vOrigin40.0)

        
set_task(TIME_POISON"fw_remove_poison"Gent+1234)
        
remove_entity(ent)
        return 
FMRES_IGNORED
    
}

    if(!
is_valid_ent(id))
    return 
FMRES_IGNORED

    
if(!is_user_alive(id) || !is_user_connected(id)) {
        
remove_entity(ent)
        return 
FMRES_IGNORED
    
}

    if(
pev(entpev_iuser2) == 1)
    {
        
set_pev(entpev_iuser20)
        
pev(idpev_originvOrigin)
        
effect_play_sprite(vOrigin30.0)

        
message_begin (MSG_BROADCAST,SVC_TEMPENTITY)
        
write_byteTE_SPRITETRAIL // Throws a shower of sprites or models
        
write_coordfloatround(vOrigin]) ) // start pos
        
write_coordfloatround(vOrigin]) )
        
write_coordfloatround(vOrigin]) )
        
write_coordfloatround(vOrigin]) ) // velocity
        
write_coordfloatround(vOrigin]) )
        
write_coordfloatround(vOrigin]) +20)
        
write_short(sprite_ability // spr
        
write_byte(18// (count)
        
write_byte(random_num(8,15)) // (life in 0.1's)
        
write_byte(4// byte (scale in 0.1's)
        
write_byte(random_num(22,35)) // (velocity along vector in 10's)
        
write_byte(20// (randomness of velocity in 10's)
        
message_end()

        static 
attacker

        attacker 
pev(entpev_owner)

        if(!
fm_get_user_godmode(id)) {
            new 
Float:velocity[3]
            
pev(entpev_vuser1velocity)
            
velocity[2]+=30.0
            xs_vec_mul_scalar
(velocity1000.0/xs_vec_len(velocity), velocity)

            
ExecuteHam(Ham_TakeDamageid"poison_launcher"attackerrandom_float(get_pcvar_float(cvar_start_damage), get_pcvar_float(cvar_end_damage)), DMG_BULLET)
            
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("Damage"), _id)
            
write_byte(0// damage save
            
write_byte(0// damage take
            
write_long(DMG_POISON// damage type
            
write_coord(0// x
            
write_coord(0// y
            
write_coord(0// z
            
message_end()

            
user_screen_shake(id425)
            
do_screen_fade(id0.80.7REDGREENBLUE180);

            
set_pev(idpev_velocityvelocity)
            
gPoisonGlow[id] = get_gametime() + 1.0;
            
gGlowPlayer[id] = true;

            
fm_set_rendering(idkRenderFxGlowShellREDGREENBLUEkRenderNormal25)
        }
        
remove_entity(ent)
        return 
FMRES_IGNORED
    
}

    return 
FMRES_IGNORED
}


public 
client_PostThink(id)
{
    if (!
is_user_alive(id)) return;

    if(
gGlowPlayer[id]) {
        if(
gPoisonGlow[id]>get_gametime())
        return

        
set_pev(idpev_maxspeed100.0// prevent from moving
        
set_pev(idpev_renderfx0)    
        
gGlowPlayer[id] = false;    
    }
}

effect_play_sprite(const Float:vOrigin[3], Float:Add)
{
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYvOrigin0)
    
write_byte(TE_SPRITE)
    
engfunc(EngFunc_WriteCoordvOrigin[0])
    
engfunc(EngFunc_WriteCoordvOrigin[1])
    
engfunc(EngFunc_WriteCoordvOrigin[2] + Add)
    
write_short(fire_spr_id)
    
write_byte(8)
    
write_byte(200)
    
message_end()
}

public 
fw_Item_Deploy_Post(weapon_ent)
{
    static 
owner
    owner 
fm_cs_get_weapon_ent_owner(weapon_ent)

    static 
weaponid
    weaponid 
cs_get_weapon_id(weapon_ent)

    
replace_weapon_models(ownerweaponid)
}

replace_weapon_models(idweaponid)
{
    switch (
weaponid)
    {
        case 
CSW_WPN_POISON:
        {
            
//if (!avp_get_user_predator(id))
            //    return

            
if(g_has_item[id])
            {
                
set_pev(idpev_viewmodel2v_model)
                
set_pev(idpev_weaponmodel2p_model)
                
UTIL_PlayWeaponAnimation (idDRAW_ANIM)
                
emit_sound(idCHAN_WEAPONg_sound[0], 1.0ATTN_NORM0PITCH_NORM)
                
//set_pdata_float(id, m_flNextAttack, 1.3, PLAYER_LINUX_XTRA_OFF)
            
}
        }
    }
    
oldweap[id] = weaponid
}

public 
plasma_ItemPostFrame(weapon_entity
{
    new 
id pev(weapon_entitypev_owner)
    if (!
is_user_connected(id))
    return 
HAM_IGNORED

    
if (!g_has_item[id])
    return 
HAM_IGNORED

    
static iClipExtra

    iClipExtra 
get_pcvar_num(cvar_clip)
    new 
Float:flNextAttack get_pdata_float(idm_flNextAttackPLAYER_LINUX_XTRA_OFF)

    new 
iBpAmmo cs_get_user_bpammo(idCSW_WPN_POISON)
    new 
iClip get_pdata_int(weapon_entitym_iClipWEAP_LINUX_XTRA_OFF)

    new 
fInReload get_pdata_int(weapon_entitym_fInReloadWEAP_LINUX_XTRA_OFF

    if( 
fInReload && flNextAttack <= 0.0 )
    {
        new 
min(iClipExtra iClipiBpAmmo)

        
set_pdata_int(weapon_entitym_iClipiClip jWEAP_LINUX_XTRA_OFF)
        
cs_set_user_bpammo(idCSW_WPN_POISONiBpAmmo-j)

        
set_pdata_int(weapon_entitym_fInReload0WEAP_LINUX_XTRA_OFF)
        
fInReload 0
    
}
    return 
HAM_IGNORED
}

public 
fw_Reload(weapon_entity
{
    new 
id pev(weapon_entitypev_owner)
    if (!
is_user_connected(id))
    return 
HAM_IGNORED

    
if (!g_has_item[id])
    return 
HAM_IGNORED

    
static iClipExtra

    
if(g_has_item[id])
    
iClipExtra get_pcvar_num(cvar_clip)

    
g_TmpClip[id] = -1

    
new iBpAmmo cs_get_user_bpammo(idCSW_WPN_POISON)
    new 
iClip get_pdata_int(weapon_entitym_iClipWEAP_LINUX_XTRA_OFF)

    if (
iBpAmmo <= 0)
    return 
HAM_SUPERCEDE

    
if (iClip >= iClipExtra)
    return 
HAM_SUPERCEDE

    g_TmpClip
[id] = iClip

    
return HAM_IGNORED
}

public 
Reload_Post(weapon_entity
{
    new 
id pev(weapon_entitypev_owner)

    if (!
is_user_connected(id))
    return 
HAM_IGNORED

    
if (!g_has_item[id])
    return 
HAM_IGNORED

    
if (g_TmpClip[id] == -1)
    return 
HAM_IGNORED

    set_pdata_int
(weapon_entitym_iClipg_TmpClip[id], WEAP_LINUX_XTRA_OFF)
    
set_pdata_float(weapon_entitym_flTimeWeaponIdleWPN_RELOAD_TIMEWEAP_LINUX_XTRA_OFF)
    
set_pdata_float(idm_flNextAttackWPN_RELOAD_TIMEPLAYER_LINUX_XTRA_OFF)
    
set_pdata_int(weapon_entitym_fInReload1WEAP_LINUX_XTRA_OFF)
    
UTIL_PlayWeaponAnimation(idRELOAD_ANIM)

    return 
HAM_IGNORED
}

stock fm_cs_get_current_weapon_ent(id)
{
    return 
get_pdata_cbase(idOFFSET_ACTIVE_ITEMOFFSET_LINUX)
}

stock fm_cs_get_weapon_ent_owner(ent)
{
    return 
get_pdata_cbase(ent414)
}

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

    
message_begin(MSG_ONE_UNRELIABLESVC_WEAPONANIM, .player Player)
    
write_byte(Sequence)
    
write_byte(pev(Playerpev_body))
    
message_end()
}

user_screen_shake(idamplitude 4duration 2frequency 10)
{
    
message_begin(MSG_ONE_UNRELIABLEg_msgScreenShake_id)
    
write_short((1<<12)*amplitude// ??
    
write_short((1<<12)*duration// ??
    
write_short((1<<12)*frequency// ??
    
message_end()
}

stock do_screen_fadeidFloat:fadeTimeFloat:holdTimeredgreenbluealphatype 0x0000 )
{
    static 
msgScreenFade;
    if ( !
msgScreenFade ) { msgScreenFade get_user_msgid"ScreenFade" ); }
    new 
fadehold;
    
fade clampfloatroundfadeTime float(1<<12)), 00xFFFF );
    
hold clampfloatroundholdTime float(1<<12)), 00xFFFF );
    
message_beginMSG_ONE_UNRELIABLEmsgScreenFade_id );
    
write_shortfade );
    
write_shorthold );
    
write_shorttype );
    
write_bytered );
    
write_bytegreen );
    
write_byteblue );
    
write_bytealpha );
    
message_end( );
}

stock get_weapon_attackment(idFloat:output[3], Float:fDis 40.0)
{
     
    new 
Float:vfEnd[3], viEnd[3
    
get_user_origin(idviEnd3
    
IVecFVec(viEndvfEnd

    new 
Float:fOrigin[3], Float:fAngle[3]

    
pev(idpev_originfOrigin
    
pev(idpev_view_ofsfAngle)

    
xs_vec_add(fOriginfAnglefOrigin

    new 
Float:fAttack[3]

    
xs_vec_sub(vfEndfOriginfAttack)
    
xs_vec_sub(vfEndfOriginfAttack

    new 
Float:fRate

    fRate 
fDis vector_length(fAttack)
    
xs_vec_mul_scalar(fAttackfRatefAttack)

    
xs_vec_add(fOriginfAttackoutput)
}

stock drop_weapons(iddropwhat)
{
    static 
weapons[32], numiweaponid
    num 
0
    get_user_weapons
(idweaponsnum)

    for (
0numi++)
    {
        
weaponid weapons[i]

        if ((
dropwhat == && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (dropwhat == && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM)))
        {
            static 
wname[32]
            
get_weaponname(weaponidwnamesizeof wname 1)
            
engclient_cmd(id"drop"wname)
        }
    }


no me sirvio no sale en el menu de comandos del amxmodWhatdone
Responder
#5
Fixeado..
Te recomiendo leer el codigo para que te des cuenta de donde estaba el error.
Código PHP:
#include <amxmodx>
#include <fakemeta_util>
#include <engine>
#include <cstrike>
#include <hamsandwich>
#include <xs>

const UNIT_SECOND = (1<<12)


#define ENG_NULLENT    -1
#define EV_INT_WEAPONKEY    EV_INT_impulse
#define POISON_WEAPONKEY    233
#define WEAP_LINUX_XTRA_OFF    4
#define m_fKnown    44
#define m_flNextPrimaryAttack 46
#define m_flTimeWeaponIdle    48
#define m_iClip    51
#define m_fInReload    54
#define PLAYER_LINUX_XTRA_OFF    5
#define m_flNextAttack    83
#define TIME_POISON    5.0
#define CSW_WPN_POISON    CSW_M3
#define OFFSET_TIME_ATTACK 0.6
#define WPN_RELOAD_TIME 3.4

new const gWeapon[] = "weapon_m3"

#define PLUGIN "[AMXX] Public: Poison Launcher"
#define VERSION "1.8.4"
#define AUTHOR "Re.Act!ve" 

new const g_item_name[] = { "Poison Launcher" }; // Item name
new const g_item_cost 20 // Item cost

#define RED 60
#define GREEN 250
#define BLUE 0
#define PEV_ENT_TIME pev_fuser1

// Precahce files
new const fire_model_name[] = "models/zm/spore.mdl"
new const fire_poison[] = "models/zm/spore_poison.mdl"
new const fire_spr_name[] = "sprites/laserbeam.spr"
new const fire_sprite[] = "sprites/zm/poison_spr.spr"
new const spr_poison_flare[] = "sprites/zm/poison_flare.spr"

new fire_sound[] = "weapons/plauncher-1.wav"
new g_sound[][] = {
    
"weapons/plauncher_draw.wav",
    
"weapons/plaunch_clipin.wav",
    
"weapons/plaunch_clipout.wav",
    
"weapons/plauncher_explode.wav"
}

new const 
v_model[] = "models/zm/v_plaunch_flipbyHiDanZ.mdl"
new const p_model[] = "models/zm/p_plaunch1.mdl"
new const w_model[] = "models/zm/w_plaunch.mdl"

// classname
new const fire_classname[] = "poison_fire"
new const poison_classname[] = "posion_spore"
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)
enum
{
    
IDLE_ANIM 0,
    
DRAW_ANIM 2,
    
RELOAD_ANIM 1,
    
SHOOT_ANIM 3,
    
SHOOT_ANIM1 4,
    
SHOOT_ANIM2 5
}

new 
sprite_abilityfire_spr_idfire_spr_nameidg_IsInPrimaryAttackcvar_start_damagecvar_end_damagecvar_clipcvar_maxclipcvar_shot_speedg_itemidcvar_movetype
new g_orig_eventFloat:g_poison_touch[33], oldweap[33], g_TmpClip[33], Float:gPoisonGlow[33], bool:gGlowPlayer[33], g_msgScreenShake
new bool:g_has_item[33], bool:disc_opened[33]

new const 
WEAPONENTNAMES[][] = { """weapon_p228""""weapon_scout""weapon_hegrenade""weapon_xm1014""weapon_c4""weapon_mac10",
    
"weapon_aug""weapon_smokegrenade""weapon_elite""weapon_fiveseven""weapon_ump45""weapon_sg550",
    
"weapon_galil""weapon_famas""weapon_usp""weapon_glock18""weapon_awp""weapon_mp5navy""weapon_m249",
    
"weapon_m3""weapon_m4a1""weapon_tmp""weapon_g3sg1""weapon_flashbang""weapon_deagle""weapon_sg552",
    
"weapon_ak47""weapon_knife""weapon_p90" }

public 
plugin_precache()
{
    
precache_model(v_model)
    
precache_model(p_model)
    
precache_model(w_model)

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

    
precache_sound(fire_sound)

    
precache_model(fire_model_name)
    
precache_model(fire_poison)
    
sprite_ability engfunc(EngFunc_PrecacheModelspr_poison_flare)    
    
fire_spr_id precache_model(fire_sprite)
    
fire_spr_nameid precache_model(fire_spr_name)
}

public 
plugin_init()
{
    
register_plugin PLUGINVERSIONAUTHOR )

    
//g_itemid = zp_register_extra_item(g_item_name, g_item_cost, ZP_TEAM_HUMAN)

    
cvar_shot_speed register_cvar("zp_pl_bulletspeed""500")    // Velocidad De Disparo
    
cvar_movetype register_cvar("zp_pl_movetype""0")    // 0 - Directa, 1 - Gravedad (Estilo De Disparo)
    
cvar_start_damage register_cvar("zp_pl_startdamage""250.0")    // Daño Minimo
    
cvar_end_damage register_cvar("zp_pl_enddamage""600.0")    // Daño Maximo
    
cvar_clip register_cvar("zp_pl_clip""15")    // Balas De Inicio
    
cvar_maxclip register_cvar("zp_pl_ammo""60")    // Municion Maxima
    
g_msgScreenShake get_user_msgid("ScreenShake")
    
set_cvar_num("sv_maxvelocity"8000)

    
RegisterHam(Ham_Weapon_PrimaryAttackgWeapon"fw_PrimaryAttack")
    
RegisterHam(Ham_Weapon_PrimaryAttackgWeapon"fw_PrimaryAttack_Post"1)
    
RegisterHam(Ham_Item_PostFramegWeapon"plasma_ItemPostFrame")
    
RegisterHam(Ham_Weapon_ReloadgWeapon"fw_Reload")
    
RegisterHam(Ham_Weapon_ReloadgWeapon"Reload_Post"1)
    
RegisterHam(Ham_Item_AddToPlayergWeapon"fw_item_addtoplayer"1)

    
register_forward(FM_SetModel"fw_SetModel")
    
register_forward(FM_PlaybackEvent"fwPlaybackEvent")
    
register_forward(FM_PrecacheEvent"fwPrecacheEvent_Post"1)
    
register_forward(FM_UpdateClientData"fw_UpdateClientData_Post"1)

    
register_touch(fire_classname"*""fw_touch_shot")
    
register_think(fire_classname"fw_think")
    
register_touch(poison_classname"*""fw_touch_poison")

    for (new 
1sizeof WEAPONENTNAMESi++)
    if (
WEAPONENTNAMES[i][0]) 
    
RegisterHam(Ham_Item_DeployWEAPONENTNAMES[i], "fw_Item_Deploy_Post"1)
}

public 
fwPrecacheEvent_Post(type, const name[])
{
    if (
equal("events/m3.sc"name))
    {
        
g_orig_event get_orig_retval()
        return 
FMRES_HANDLED
    
}
    return 
FMRES_IGNORED
}

public 
fw_UpdateClientData_Post(idsendweaponscd_handle)
{
        
    if(
get_user_weapon(id) != CSW_WPN_POISON || !g_has_item[id])
    return 
FMRES_IGNORED

    set_cd
(cd_handleCD_flNextAttackhalflife_time() + 0.001

    return 
FMRES_HANDLED
}

public 
fw_item_addtoplayer(entid)
{
    if(!
is_valid_ent(ent))
    return 
HAM_IGNORED

    
if(entity_get_int(entEV_INT_WEAPONKEY) == POISON_WEAPONKEY)
    {
        
g_has_item[id] = true;
        
entity_set_int(idEV_INT_impulse0)

        
replace_weapon_models(ident)
        return 
HAM_HANDLED
    
}

    return 
HAM_HANDLED
}

public 
client_connect(id)
g_has_item[id] = false

public client_disconnect(id)
g_has_item[id] = false

/*
public zp_user_infected_post(id)
{
    if (zp_get_user_zombie(id))
    g_has_item[id] = false
}
*/
public zp_user_humanized_post(id)
g_has_item[id] = false

public zp_extra_item_selected(iditemid)
{
    if(
itemid == g_itemid
    {
        
drop_weapons(id,1)
        
g_has_item[id] = true;
        new 
iWep2 fm_give_item(id,gWeapon)
        if( 
iWep2 )
        {
            
cs_set_weapon_ammo(iWep2get_pcvar_num(cvar_clip))
            
cs_set_user_bpammo (idCSW_WPN_POISONget_pcvar_num(cvar_maxclip))    
        }
        
UTIL_PlayWeaponAnimation (idDRAW_ANIM)
        
emit_sound(idCHAN_WEAPONg_sound[0], 1.0ATTN_NORM0PITCH_NORM)
    }
}

public 
fw_PrimaryAttack(Weapon)
{
    if (
g_has_item[pevWeaponpev_owner )]) 
    {
        
g_IsInPrimaryAttack 1
        
return HAM_SUPERCEDE;
    }
    return 
HAM_IGNORED;
}

public 
fwPlaybackEvent(flagsinvokereventidFloat:delayFloat:origin[3], Float:angles[3], Float:fparam1Float:fparam2iParam1iParam2bParam1bParam2)
{
    if ((
eventid != g_orig_event) || !g_IsInPrimaryAttack)
    return 
FMRES_IGNORED

    
if (!(<= invoker <= get_maxplayers()))
    return 
FMRES_IGNORED

    playback_event
(flags FEV_HOSTONLYinvokereventiddelayoriginanglesfparam1fparam2iParam1iParam2bParam1bParam2)
    return 
FMRES_SUPERCEDE
}

public 
fw_PrimaryAttack_Post(Weapon)
{
    
g_IsInPrimaryAttack 0
    
new Player get_pdata_cbase(Weapon414)

    new 
szClipszAmmo
    get_user_weapon
(PlayerszClipszAmmo)

    if(!
is_user_alive(Player))
    return

    if(
szClip == 0)
    return

    if(!
is_user_alive(Player))
    return

    if(
g_has_item[Player] || szClip >= 1)
    {
        
//set_pdata_float(Player , m_flNextAttack, OFFSET_TIME_ATTACK, PLAYER_LINUX_XTRA_OFF)
        
set_pdata_floatPlayer83OFFSET_TIME_ATTACK )
        
make_shoot(PlayerWeapon)
    }
}

public 
make_shoot(idWeapon)
{
    if(!
is_user_alive(id))
    return 
HAM_IGNORED;

    if(
get_user_weapon(id) != CSW_WPN_POISON)
    return 
HAM_IGNORED;

    if(!
g_has_item[id] || disc_opened[id])
    return 
HAM_IGNORED;

    new 
szClip
    get_user_weapon
(idszClip)

    if(
szClip >= 1)
    {
        new 
Float:Puch[3]
        
pev(idpev_punchanglePuch)
        
Puch[0]-=random_float(3.06.0)
        
cs_set_weapon_ammo(WeaponszClip-1)
        
emit_sound(idCHAN_WEAPONfire_sound1.0ATTN_NORM0PITCH_NORM)
        
UTIL_PlayWeaponAnimation(idrandom_num(SHOOT_ANIMSHOOT_ANIM2))
        
throw_fire(id)
        
set_pev(id,pev_punchangle,Puch)
    }
    return 
HAM_IGNORED;
}

public 
throw_fire(id)
{
    new 
iEnt create_entity("info_target")
    new 
Float:vfVelocity[3]

    
velocity_by_aim(id, (get_pcvar_num(cvar_shot_speed)*10), vfVelocity)

    
// add velocity of Owner for ent
    
new Float:vfAttack[3], Float:vfAngle[3], Float:vOfps[3]
    
get_weapon_attackment(idvfAttack20.0)
    
pev(idpev_view_ofsvOfps)
    
pev(idpev_anglesvfAngle)

    
// set info for ent
    
set_pev(iEntpev_movetypeMOVETYPE_FLY)
    
set_pev(iEntPEV_ENT_TIMEget_gametime() + 5.0)    // time remove
    
set_pev(iEntpev_classnamefire_classname)
    
engfunc(EngFunc_SetModeliEntfire_model_name)    //fire_model_name
    
set_pev(iEntpev_minsFloat:{-2.0, -2.0, -2.0})
    
set_pev(iEntpev_maxsFloat:{2.02.02.0})
    
set_pev(iEntpev_body2)
    
set_pev(iEntpev_originvfAttack)
    
set_pev(iEntpev_velocityvfVelocity)
    
set_pev(iEntpev_solidSOLID_BBOX)
    
set_pev(iEntpev_ownerid)
    
set_pev(iEntpev_iuser21)
    
set_pev(iEntpev_vuser1vfVelocity)
    
set_pev(iEntpev_anglesvfAngle)
    
set_pev(iEntpev_v_anglevOfps)

    
set_pev(iEntpev_rendermodekRenderTransAdd)
    
set_pev(iEntpev_renderamt130.0)

    
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
    
write_byte(TE_BEAMFOLLOW// TE id
    
write_short(iEnt// entity
    
write_short(fire_spr_nameid// sprite
    
write_byte(8// life
    
write_byte(6// width
    
write_byte(RED// r
    
write_byte(GREEN// g
    
write_byte(BLUE// b
    
write_byte(180// brightness
    
message_end()
    
set_task(OFFSET_TIME_ATTACK"RemoveDisk"id+2242)
}

public 
RemoveDisk(taskid)
{
    
disc_opened[taskid-2242] = false;
    
remove_task(taskid)
}

public 
fw_SetModel(entitymodel[])
{
    if(!
is_valid_ent(entity))
    return 
FMRES_IGNORED;

    static 
szClassName[33]
    
entity_get_string(entityEV_SZ_classnameszClassNamecharsmax(szClassName))

    if(!
equal(szClassName"weaponbox"))
    return 
FMRES_IGNORED;

    static 
iOwner

    iOwner 
entity_get_edict(entityEV_ENT_owner)

    if(
equal(model"models/w_m3.mdl"))
    {
        static 
iStoredSVDID

        iStoredSVDID 
find_ent_by_owner(ENG_NULLENTgWeaponentity)

        if(!
is_valid_ent(iStoredSVDID))
        return 
FMRES_IGNORED;

        if(
g_has_item[iOwner])
        {
            
entity_set_int(iStoredSVDIDEV_INT_WEAPONKEYPOISON_WEAPONKEY)

            
g_has_item[iOwner] = false

            entity_set_model
(entityw_model)

            return 
FMRES_SUPERCEDE;
        }
    }
    return 
FMRES_IGNORED;
}

public 
fw_think(iEnt)
{
    if(!
pev_valid(iEnt)) 
    return

    new 
Float:fFrameFloat:fScaleFloat:fNextThink
    pev
(iEntpev_framefFrame)
    
pev(iEntpev_scalefScale)

    
// effect exp
    
new iMoveType pev(iEntpev_movetype)
    if (
iMoveType == MOVETYPE_NONE)
    {
        
fNextThink 0.015
        fFrame 
+= 1.0
        fScale 
floatmax(fScale1.55)

        if (
fFrame 21.0)
        {
            
engfunc(EngFunc_RemoveEntityiEnt)
            return
        }
    }

    
// effect normal
    
else
    {
        
fNextThink 0.045
        fFrame 
+= 1.0
        fFrame 
floatmin(21.0fFrame)
        
fScale += 0.2
        fScale 
floatmin(fScale1.75)
    }

    
set_pev(iEntpev_framefFrame)
    
set_pev(iEntpev_scalefScale)
    
set_pev(iEntpev_nextthinkget_gametime() + fNextThink)

    
// time remove
    
static Float:fTimeRemove
    pev
(iEntpev_fuser1fTimeRemove)
    if (
get_gametime() >= fTimeRemove)
    {
        
engfunc(EngFunc_RemoveEntityiEnt)
        return;
    }
}

public 
fw_remove_poison(taskEnt)
{
    new 
Ent=taskEnt-1234
    
if(is_valid_ent(Ent)) engfunc(EngFunc_RemoveEntityEnt)
    
remove_task(taskEnt)
}

public 
fw_touch_poison(enttouch)
{
    
client_print(0print_center"Touch")
    if(
is_user_alive(touch))
    {
        static 
Float:CurTime
        CurTime 
get_gametime()

        if(
CurTime 1.0 g_poison_touch[touch])
        {
            new 
Owner pev(entpev_owner)
            
ExecuteHamB(Ham_TakeDamagetouchOwnertouch50.0DMG_BLAST)
            
set_pev(touchpev_maxspeed20.0)    

            
g_poison_touch[touch] = CurTime
        
}
    }
}

public 
fw_touch_shot(entid)
{
    
emit_sound(entCHAN_ITEMg_sound[3], 1.0ATTN_NORM0PITCH_NORM)
    new 
Float:vOrigin[3]
    
pev(entpev_originvOrigin);

    new 
classname[1024]
    
pev(idpev_classnameclassnamecharsmax(classname))
    if(
equal(classname"func_wall") || equal(classname"func_breakable") || equal(classname"worldspawn")) {
        new 
Gent create_entity("info_target")

        
set_pev(Gentpev_ownerpev(entpev_owner))
        new 
Float:maxs[3] = {40.040.025.0}
        new 
Float:mins[3] = {-40.0, -40.0, -25.0}
        
entity_set_size(Gentminsmaxs)
        
set_pev(Gentpev_classnamepoison_classname)
        
engfunc(EngFunc_SetModelGentfire_poison)

        new    
Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3],
        
Float:vTraceEnd[3],Float:vEntAngles[3];

        
pev(entget_pcvar_num(cvar_movetype) ? pev_velocity pev_vuser1vTraceDirection)

        
xs_vec_add(vTraceDirectionvOriginvTraceEnd);

        
engfunc(EngFunc_TraceLinevOriginvTraceEndDONT_IGNORE_MONSTERSent0);

        new 
Float:fFraction;
        
get_tr2(0TR_flFractionfFraction);

        
// -- We hit something!
        
if(fFraction 1.0)
        {
            
// -- Save results to be used later.
            
get_tr2(0TR_vecEndPosvTraceEnd);

            
get_tr2(0TR_vecPlaneNormalvNormal);
        }
        
xs_vec_add(vTraceEndvNormalvNewOrigin);

        
vector_to_angle(vNormal,vEntAngles);
        
vEntAngles[0]-=90.0

        set_pev
(Gent,pev_angles,vEntAngles);
        
set_pev(Gentpev_originvNewOrigin)

        
set_pev(Gentpev_rendermodekRenderTransAdd)
        
set_pev(Gentpev_renderamt160.0)

        
set_pev(Gentpev_solidSOLID_SLIDEBOX)
        
set_pev(Gentpev_movetypeMOVETYPE_NONE)

        
effect_play_sprite(vOrigin40.0)

        
set_task(TIME_POISON"fw_remove_poison"Gent+1234)
        
remove_entity(ent)
        return 
FMRES_IGNORED
    
}

    if(!
is_valid_ent(id))
    return 
FMRES_IGNORED

    
if(!is_user_alive(id) || !is_user_connected(id)) {
        
remove_entity(ent)
        return 
FMRES_IGNORED
    
}

    if(
pev(entpev_iuser2) == 1)
    {
        
set_pev(entpev_iuser20)
        
pev(idpev_originvOrigin)
        
effect_play_sprite(vOrigin30.0)

        
message_begin (MSG_BROADCAST,SVC_TEMPENTITY)
        
write_byteTE_SPRITETRAIL // Throws a shower of sprites or models
        
write_coordfloatround(vOrigin]) ) // start pos
        
write_coordfloatround(vOrigin]) )
        
write_coordfloatround(vOrigin]) )
        
write_coordfloatround(vOrigin]) ) // velocity
        
write_coordfloatround(vOrigin]) )
        
write_coordfloatround(vOrigin]) +20)
        
write_short(sprite_ability // spr
        
write_byte(18// (count)
        
write_byte(random_num(8,15)) // (life in 0.1's)
        
write_byte(4// byte (scale in 0.1's)
        
write_byte(random_num(22,35)) // (velocity along vector in 10's)
        
write_byte(20// (randomness of velocity in 10's)
        
message_end()

        static 
attacker

        attacker 
pev(entpev_owner)

        if(!
fm_get_user_godmode(id)) {
            new 
Float:velocity[3]
            
pev(entpev_vuser1velocity)
            
velocity[2]+=30.0
            xs_vec_mul_scalar
(velocity1000.0/xs_vec_len(velocity), velocity)

            
ExecuteHam(Ham_TakeDamageid"poison_launcher"attackerrandom_float(get_pcvar_float(cvar_start_damage), get_pcvar_float(cvar_end_damage)), DMG_BULLET)
            
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("Damage"), _id)
            
write_byte(0// damage save
            
write_byte(0// damage take
            
write_long(DMG_POISON// damage type
            
write_coord(0// x
            
write_coord(0// y
            
write_coord(0// z
            
message_end()

            
user_screen_shake(id425)
            
do_screen_fade(id0.80.7REDGREENBLUE180);

            
set_pev(idpev_velocityvelocity)
            
gPoisonGlow[id] = get_gametime() + 1.0;
            
gGlowPlayer[id] = true;

            
fm_set_rendering(idkRenderFxGlowShellREDGREENBLUEkRenderNormal25)
        }
        
remove_entity(ent)
        return 
FMRES_IGNORED
    
}

    return 
FMRES_IGNORED
}


public 
client_PostThink(id)
{
    if (!
is_user_alive(id)) return;

    if(
gGlowPlayer[id]) {
        if(
gPoisonGlow[id]>get_gametime())
        return

        
set_pev(idpev_maxspeed100.0// prevent from moving
        
set_pev(idpev_renderfx0)    
        
gGlowPlayer[id] = false;    
    }
}

effect_play_sprite(const Float:vOrigin[3], Float:Add)
{
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYvOrigin0)
    
write_byte(TE_SPRITE)
    
engfunc(EngFunc_WriteCoordvOrigin[0])
    
engfunc(EngFunc_WriteCoordvOrigin[1])
    
engfunc(EngFunc_WriteCoordvOrigin[2] + Add)
    
write_short(fire_spr_id)
    
write_byte(8)
    
write_byte(200)
    
message_end()
}

public 
fw_Item_Deploy_Post(weapon_ent)
{
    static 
owner
    owner 
fm_cs_get_weapon_ent_owner(weapon_ent)

    static 
weaponid
    weaponid 
cs_get_weapon_id(weapon_ent)

    
replace_weapon_models(ownerweaponid)
}

replace_weapon_models(idweaponid)
{
    switch (
weaponid)
    {
        case 
CSW_WPN_POISON:
        {
            
//if (!avp_get_user_predator(id))
            //    return

            
if(g_has_item[id])
            {
                
set_pev(idpev_viewmodel2v_model)
                
set_pev(idpev_weaponmodel2p_model)
                
UTIL_PlayWeaponAnimation (idDRAW_ANIM)
                
emit_sound(idCHAN_WEAPONg_sound[0], 1.0ATTN_NORM0PITCH_NORM)
                
//set_pdata_float(id, m_flNextAttack, 1.3, PLAYER_LINUX_XTRA_OFF)
            
}
        }
    }
    
oldweap[id] = weaponid
}

public 
plasma_ItemPostFrame(weapon_entity
{
    new 
id pev(weapon_entitypev_owner)
    if (!
is_user_connected(id))
    return 
HAM_IGNORED

    
if (!g_has_item[id])
    return 
HAM_IGNORED

    
static iClipExtra

    iClipExtra 
get_pcvar_num(cvar_clip)
    new 
Float:flNextAttack get_pdata_float(idm_flNextAttackPLAYER_LINUX_XTRA_OFF)

    new 
iBpAmmo cs_get_user_bpammo(idCSW_WPN_POISON)
    new 
iClip get_pdata_int(weapon_entitym_iClipWEAP_LINUX_XTRA_OFF)

    new 
fInReload get_pdata_int(weapon_entitym_fInReloadWEAP_LINUX_XTRA_OFF

    if( 
fInReload && flNextAttack <= 0.0 )
    {
        new 
min(iClipExtra iClipiBpAmmo)

        
set_pdata_int(weapon_entitym_iClipiClip jWEAP_LINUX_XTRA_OFF)
        
cs_set_user_bpammo(idCSW_WPN_POISONiBpAmmo-j)

        
set_pdata_int(weapon_entitym_fInReload0WEAP_LINUX_XTRA_OFF)
        
fInReload 0
    
}
    return 
HAM_IGNORED
}

public 
fw_Reload(weapon_entity
{
    new 
id pev(weapon_entitypev_owner)
    if (!
is_user_connected(id))
    return 
HAM_IGNORED

    
if (!g_has_item[id])
    return 
HAM_IGNORED

    
static iClipExtra

    
if(g_has_item[id])
    
iClipExtra get_pcvar_num(cvar_clip)

    
g_TmpClip[id] = -1

    
new iBpAmmo cs_get_user_bpammo(idCSW_WPN_POISON)
    new 
iClip get_pdata_int(weapon_entitym_iClipWEAP_LINUX_XTRA_OFF)

    if (
iBpAmmo <= 0)
    return 
HAM_SUPERCEDE

    
if (iClip >= iClipExtra)
    return 
HAM_SUPERCEDE

    g_TmpClip
[id] = iClip

    
return HAM_IGNORED
}

public 
Reload_Post(weapon_entity
{
    new 
id pev(weapon_entitypev_owner)

    if (!
is_user_connected(id))
    return 
HAM_IGNORED

    
if (!g_has_item[id])
    return 
HAM_IGNORED

    
if (g_TmpClip[id] == -1)
    return 
HAM_IGNORED

    set_pdata_int
(weapon_entitym_iClipg_TmpClip[id], WEAP_LINUX_XTRA_OFF)
    
set_pdata_float(weapon_entitym_flTimeWeaponIdleWPN_RELOAD_TIMEWEAP_LINUX_XTRA_OFF)
    
set_pdata_float(idm_flNextAttackWPN_RELOAD_TIMEPLAYER_LINUX_XTRA_OFF)
    
set_pdata_int(weapon_entitym_fInReload1WEAP_LINUX_XTRA_OFF)
    
UTIL_PlayWeaponAnimation(idRELOAD_ANIM)

    return 
HAM_IGNORED
}

stock fm_cs_get_current_weapon_ent(id)
{
    return 
get_pdata_cbase(idOFFSET_ACTIVE_ITEMOFFSET_LINUX)
}

stock fm_cs_get_weapon_ent_owner(ent)
{
    return 
get_pdata_cbase(ent414)
}

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

    
message_begin(MSG_ONE_UNRELIABLESVC_WEAPONANIM, .player Player)
    
write_byte(Sequence)
    
write_byte(pev(Playerpev_body))
    
message_end()
}

user_screen_shake(idamplitude 4duration 2frequency 10)
{
    
message_begin(MSG_ONE_UNRELIABLEg_msgScreenShake_id)
    
write_short((1<<12)*amplitude// ??
    
write_short((1<<12)*duration// ??
    
write_short((1<<12)*frequency// ??
    
message_end()
}

stock do_screen_fadeidFloat:fadeTimeFloat:holdTimeredgreenbluealphatype 0x0000 )
{
    static 
msgScreenFade;
    if ( !
msgScreenFade ) { msgScreenFade get_user_msgid"ScreenFade" ); }
    new 
fadehold;
    
fade clampfloatroundfadeTime float(1<<12)), 00xFFFF );
    
hold clampfloatroundholdTime float(1<<12)), 00xFFFF );
    
message_beginMSG_ONE_UNRELIABLEmsgScreenFade_id );
    
write_shortfade );
    
write_shorthold );
    
write_shorttype );
    
write_bytered );
    
write_bytegreen );
    
write_byteblue );
    
write_bytealpha );
    
message_end( );
}

stock get_weapon_attackment(idFloat:output[3], Float:fDis 40.0)
{
     
    new 
Float:vfEnd[3], viEnd[3
    
get_user_origin(idviEnd3
    
IVecFVec(viEndvfEnd

    new 
Float:fOrigin[3], Float:fAngle[3]

    
pev(idpev_originfOrigin
    
pev(idpev_view_ofsfAngle)

    
xs_vec_add(fOriginfAnglefOrigin

    new 
Float:fAttack[3]

    
xs_vec_sub(vfEndfOriginfAttack)
    
xs_vec_sub(vfEndfOriginfAttack

    new 
Float:fRate

    fRate 
fDis vector_length(fAttack)
    
xs_vec_mul_scalar(fAttackfRatefAttack)

    
xs_vec_add(fOriginfAttackoutput)
}

stock drop_weapons(iddropwhat)
{
    static 
weapons[32], numiweaponid
    num 
0
    get_user_weapons
(idweaponsnum)

    for (
0numi++)
    {
        
weaponid weapons[i]

        if ((
dropwhat == && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (dropwhat == && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM)))
        {
            static 
wname[32]
            
get_weaponname(weaponidwnamesizeof wname 1)
            
engclient_cmd(id"drop"wname)
        }
    }

Idioma: [Extrangez]
Nivel de Amistad: [Depende de ti]

Aportes:
[Mapas]
zm_impressive

zm_laberim
zm_bunkeriM 28%

Made in Venezuela
Responder
#6
(29/09/2016, 04:18 PM)wester escribió: Fixeado..
Te recomiendo leer el codigo para que te des cuenta de donde estaba el error.
Código PHP:
#include <amxmodx>
#include <fakemeta_util>
#include <engine>
#include <cstrike>
#include <hamsandwich>
#include <xs>

const UNIT_SECOND = (1<<12)


#define ENG_NULLENT    -1
#define EV_INT_WEAPONKEY    EV_INT_impulse
#define POISON_WEAPONKEY    233
#define WEAP_LINUX_XTRA_OFF    4
#define m_fKnown    44
#define m_flNextPrimaryAttack 46
#define m_flTimeWeaponIdle    48
#define m_iClip    51
#define m_fInReload    54
#define PLAYER_LINUX_XTRA_OFF    5
#define m_flNextAttack    83
#define TIME_POISON    5.0
#define CSW_WPN_POISON    CSW_M3
#define OFFSET_TIME_ATTACK 0.6
#define WPN_RELOAD_TIME 3.4

new const gWeapon[] = "weapon_m3"

#define PLUGIN "[AMXX] Public: Poison Launcher"
#define VERSION "1.8.4"
#define AUTHOR "Re.Act!ve" 

new const g_item_name[] = { "Poison Launcher" }; // Item name
new const g_item_cost 20 // Item cost

#define RED 60
#define GREEN 250
#define BLUE 0
#define PEV_ENT_TIME pev_fuser1

// Precahce files
new const fire_model_name[] = "models/zm/spore.mdl"
new const fire_poison[] = "models/zm/spore_poison.mdl"
new const fire_spr_name[] = "sprites/laserbeam.spr"
new const fire_sprite[] = "sprites/zm/poison_spr.spr"
new const spr_poison_flare[] = "sprites/zm/poison_flare.spr"

new fire_sound[] = "weapons/plauncher-1.wav"
new g_sound[][] = {
    
"weapons/plauncher_draw.wav",
    
"weapons/plaunch_clipin.wav",
    
"weapons/plaunch_clipout.wav",
    
"weapons/plauncher_explode.wav"
}

new const 
v_model[] = "models/zm/v_plaunch_flipbyHiDanZ.mdl"
new const p_model[] = "models/zm/p_plaunch1.mdl"
new const w_model[] = "models/zm/w_plaunch.mdl"

// classname
new const fire_classname[] = "poison_fire"
new const poison_classname[] = "posion_spore"
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)
enum
{
    
IDLE_ANIM 0,
    
DRAW_ANIM 2,
    
RELOAD_ANIM 1,
    
SHOOT_ANIM 3,
    
SHOOT_ANIM1 4,
    
SHOOT_ANIM2 5
}

new 
sprite_abilityfire_spr_idfire_spr_nameidg_IsInPrimaryAttackcvar_start_damagecvar_end_damagecvar_clipcvar_maxclipcvar_shot_speedg_itemidcvar_movetype
new g_orig_eventFloat:g_poison_touch[33], oldweap[33], g_TmpClip[33], Float:gPoisonGlow[33], bool:gGlowPlayer[33], g_msgScreenShake
new bool:g_has_item[33], bool:disc_opened[33]

new const 
WEAPONENTNAMES[][] = { """weapon_p228""""weapon_scout""weapon_hegrenade""weapon_xm1014""weapon_c4""weapon_mac10",
    
"weapon_aug""weapon_smokegrenade""weapon_elite""weapon_fiveseven""weapon_ump45""weapon_sg550",
    
"weapon_galil""weapon_famas""weapon_usp""weapon_glock18""weapon_awp""weapon_mp5navy""weapon_m249",
    
"weapon_m3""weapon_m4a1""weapon_tmp""weapon_g3sg1""weapon_flashbang""weapon_deagle""weapon_sg552",
    
"weapon_ak47""weapon_knife""weapon_p90" }

public 
plugin_precache()
{
    
precache_model(v_model)
    
precache_model(p_model)
    
precache_model(w_model)

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

    
precache_sound(fire_sound)

    
precache_model(fire_model_name)
    
precache_model(fire_poison)
    
sprite_ability engfunc(EngFunc_PrecacheModelspr_poison_flare)    
    
fire_spr_id precache_model(fire_sprite)
    
fire_spr_nameid precache_model(fire_spr_name)
}

public 
plugin_init()
{
    
register_plugin PLUGINVERSIONAUTHOR )

    
//g_itemid = zp_register_extra_item(g_item_name, g_item_cost, ZP_TEAM_HUMAN)

    
cvar_shot_speed register_cvar("zp_pl_bulletspeed""500")    // Velocidad De Disparo
    
cvar_movetype register_cvar("zp_pl_movetype""0")    // 0 - Directa, 1 - Gravedad (Estilo De Disparo)
    
cvar_start_damage register_cvar("zp_pl_startdamage""250.0")    // Daño Minimo
    
cvar_end_damage register_cvar("zp_pl_enddamage""600.0")    // Daño Maximo
    
cvar_clip register_cvar("zp_pl_clip""15")    // Balas De Inicio
    
cvar_maxclip register_cvar("zp_pl_ammo""60")    // Municion Maxima
    
g_msgScreenShake get_user_msgid("ScreenShake")
    
set_cvar_num("sv_maxvelocity"8000)

    
RegisterHam(Ham_Weapon_PrimaryAttackgWeapon"fw_PrimaryAttack")
    
RegisterHam(Ham_Weapon_PrimaryAttackgWeapon"fw_PrimaryAttack_Post"1)
    
RegisterHam(Ham_Item_PostFramegWeapon"plasma_ItemPostFrame")
    
RegisterHam(Ham_Weapon_ReloadgWeapon"fw_Reload")
    
RegisterHam(Ham_Weapon_ReloadgWeapon"Reload_Post"1)
    
RegisterHam(Ham_Item_AddToPlayergWeapon"fw_item_addtoplayer"1)

    
register_forward(FM_SetModel"fw_SetModel")
    
register_forward(FM_PlaybackEvent"fwPlaybackEvent")
    
register_forward(FM_PrecacheEvent"fwPrecacheEvent_Post"1)
    
register_forward(FM_UpdateClientData"fw_UpdateClientData_Post"1)

    
register_touch(fire_classname"*""fw_touch_shot")
    
register_think(fire_classname"fw_think")
    
register_touch(poison_classname"*""fw_touch_poison")

    for (new 
1sizeof WEAPONENTNAMESi++)
    if (
WEAPONENTNAMES[i][0]) 
    
RegisterHam(Ham_Item_DeployWEAPONENTNAMES[i], "fw_Item_Deploy_Post"1)
}

public 
fwPrecacheEvent_Post(type, const name[])
{
    if (
equal("events/m3.sc"name))
    {
        
g_orig_event get_orig_retval()
        return 
FMRES_HANDLED
    
}
    return 
FMRES_IGNORED
}

public 
fw_UpdateClientData_Post(idsendweaponscd_handle)
{
        
    if(
get_user_weapon(id) != CSW_WPN_POISON || !g_has_item[id])
    return 
FMRES_IGNORED

    set_cd
(cd_handleCD_flNextAttackhalflife_time() + 0.001

    return 
FMRES_HANDLED
}

public 
fw_item_addtoplayer(entid)
{
    if(!
is_valid_ent(ent))
    return 
HAM_IGNORED

    
if(entity_get_int(entEV_INT_WEAPONKEY) == POISON_WEAPONKEY)
    {
        
g_has_item[id] = true;
        
entity_set_int(idEV_INT_impulse0)

        
replace_weapon_models(ident)
        return 
HAM_HANDLED
    
}

    return 
HAM_HANDLED
}

public 
client_connect(id)
g_has_item[id] = false

public client_disconnect(id)
g_has_item[id] = false

/*
public zp_user_infected_post(id)
{
    if (zp_get_user_zombie(id))
    g_has_item[id] = false
}
*/
public zp_user_humanized_post(id)
g_has_item[id] = false

public zp_extra_item_selected(iditemid)
{
    if(
itemid == g_itemid
    {
        
drop_weapons(id,1)
        
g_has_item[id] = true;
        new 
iWep2 fm_give_item(id,gWeapon)
        if( 
iWep2 )
        {
            
cs_set_weapon_ammo(iWep2get_pcvar_num(cvar_clip))
            
cs_set_user_bpammo (idCSW_WPN_POISONget_pcvar_num(cvar_maxclip))    
        }
        
UTIL_PlayWeaponAnimation (idDRAW_ANIM)
        
emit_sound(idCHAN_WEAPONg_sound[0], 1.0ATTN_NORM0PITCH_NORM)
    }
}

public 
fw_PrimaryAttack(Weapon)
{
    if (
g_has_item[pevWeaponpev_owner )]) 
    {
        
g_IsInPrimaryAttack 1
        
return HAM_SUPERCEDE;
    }
    return 
HAM_IGNORED;
}

public 
fwPlaybackEvent(flagsinvokereventidFloat:delayFloat:origin[3], Float:angles[3], Float:fparam1Float:fparam2iParam1iParam2bParam1bParam2)
{
    if ((
eventid != g_orig_event) || !g_IsInPrimaryAttack)
    return 
FMRES_IGNORED

    
if (!(<= invoker <= get_maxplayers()))
    return 
FMRES_IGNORED

    playback_event
(flags FEV_HOSTONLYinvokereventiddelayoriginanglesfparam1fparam2iParam1iParam2bParam1bParam2)
    return 
FMRES_SUPERCEDE
}

public 
fw_PrimaryAttack_Post(Weapon)
{
    
g_IsInPrimaryAttack 0
    
new Player get_pdata_cbase(Weapon414)

    new 
szClipszAmmo
    get_user_weapon
(PlayerszClipszAmmo)

    if(!
is_user_alive(Player))
    return

    if(
szClip == 0)
    return

    if(!
is_user_alive(Player))
    return

    if(
g_has_item[Player] || szClip >= 1)
    {
        
//set_pdata_float(Player , m_flNextAttack, OFFSET_TIME_ATTACK, PLAYER_LINUX_XTRA_OFF)
        
set_pdata_floatPlayer83OFFSET_TIME_ATTACK )
        
make_shoot(PlayerWeapon)
    }
}

public 
make_shoot(idWeapon)
{
    if(!
is_user_alive(id))
    return 
HAM_IGNORED;

    if(
get_user_weapon(id) != CSW_WPN_POISON)
    return 
HAM_IGNORED;

    if(!
g_has_item[id] || disc_opened[id])
    return 
HAM_IGNORED;

    new 
szClip
    get_user_weapon
(idszClip)

    if(
szClip >= 1)
    {
        new 
Float:Puch[3]
        
pev(idpev_punchanglePuch)
        
Puch[0]-=random_float(3.06.0)
        
cs_set_weapon_ammo(WeaponszClip-1)
        
emit_sound(idCHAN_WEAPONfire_sound1.0ATTN_NORM0PITCH_NORM)
        
UTIL_PlayWeaponAnimation(idrandom_num(SHOOT_ANIMSHOOT_ANIM2))
        
throw_fire(id)
        
set_pev(id,pev_punchangle,Puch)
    }
    return 
HAM_IGNORED;
}

public 
throw_fire(id)
{
    new 
iEnt create_entity("info_target")
    new 
Float:vfVelocity[3]

    
velocity_by_aim(id, (get_pcvar_num(cvar_shot_speed)*10), vfVelocity)

    
// add velocity of Owner for ent
    
new Float:vfAttack[3], Float:vfAngle[3], Float:vOfps[3]
    
get_weapon_attackment(idvfAttack20.0)
    
pev(idpev_view_ofsvOfps)
    
pev(idpev_anglesvfAngle)

    
// set info for ent
    
set_pev(iEntpev_movetypeMOVETYPE_FLY)
    
set_pev(iEntPEV_ENT_TIMEget_gametime() + 5.0)    // time remove
    
set_pev(iEntpev_classnamefire_classname)
    
engfunc(EngFunc_SetModeliEntfire_model_name)    //fire_model_name
    
set_pev(iEntpev_minsFloat:{-2.0, -2.0, -2.0})
    
set_pev(iEntpev_maxsFloat:{2.02.02.0})
    
set_pev(iEntpev_body2)
    
set_pev(iEntpev_originvfAttack)
    
set_pev(iEntpev_velocityvfVelocity)
    
set_pev(iEntpev_solidSOLID_BBOX)
    
set_pev(iEntpev_ownerid)
    
set_pev(iEntpev_iuser21)
    
set_pev(iEntpev_vuser1vfVelocity)
    
set_pev(iEntpev_anglesvfAngle)
    
set_pev(iEntpev_v_anglevOfps)

    
set_pev(iEntpev_rendermodekRenderTransAdd)
    
set_pev(iEntpev_renderamt130.0)

    
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
    
write_byte(TE_BEAMFOLLOW// TE id
    
write_short(iEnt// entity
    
write_short(fire_spr_nameid// sprite
    
write_byte(8// life
    
write_byte(6// width
    
write_byte(RED// r
    
write_byte(GREEN// g
    
write_byte(BLUE// b
    
write_byte(180// brightness
    
message_end()
    
set_task(OFFSET_TIME_ATTACK"RemoveDisk"id+2242)
}

public 
RemoveDisk(taskid)
{
    
disc_opened[taskid-2242] = false;
    
remove_task(taskid)
}

public 
fw_SetModel(entitymodel[])
{
    if(!
is_valid_ent(entity))
    return 
FMRES_IGNORED;

    static 
szClassName[33]
    
entity_get_string(entityEV_SZ_classnameszClassNamecharsmax(szClassName))

    if(!
equal(szClassName"weaponbox"))
    return 
FMRES_IGNORED;

    static 
iOwner

    iOwner 
entity_get_edict(entityEV_ENT_owner)

    if(
equal(model"models/w_m3.mdl"))
    {
        static 
iStoredSVDID

        iStoredSVDID 
find_ent_by_owner(ENG_NULLENTgWeaponentity)

        if(!
is_valid_ent(iStoredSVDID))
        return 
FMRES_IGNORED;

        if(
g_has_item[iOwner])
        {
            
entity_set_int(iStoredSVDIDEV_INT_WEAPONKEYPOISON_WEAPONKEY)

            
g_has_item[iOwner] = false

            entity_set_model
(entityw_model)

            return 
FMRES_SUPERCEDE;
        }
    }
    return 
FMRES_IGNORED;
}

public 
fw_think(iEnt)
{
    if(!
pev_valid(iEnt)) 
    return

    new 
Float:fFrameFloat:fScaleFloat:fNextThink
    pev
(iEntpev_framefFrame)
    
pev(iEntpev_scalefScale)

    
// effect exp
    
new iMoveType pev(iEntpev_movetype)
    if (
iMoveType == MOVETYPE_NONE)
    {
        
fNextThink 0.015
        fFrame 
+= 1.0
        fScale 
floatmax(fScale1.55)

        if (
fFrame 21.0)
        {
            
engfunc(EngFunc_RemoveEntityiEnt)
            return
        }
    }

    
// effect normal
    
else
    {
        
fNextThink 0.045
        fFrame 
+= 1.0
        fFrame 
floatmin(21.0fFrame)
        
fScale += 0.2
        fScale 
floatmin(fScale1.75)
    }

    
set_pev(iEntpev_framefFrame)
    
set_pev(iEntpev_scalefScale)
    
set_pev(iEntpev_nextthinkget_gametime() + fNextThink)

    
// time remove
    
static Float:fTimeRemove
    pev
(iEntpev_fuser1fTimeRemove)
    if (
get_gametime() >= fTimeRemove)
    {
        
engfunc(EngFunc_RemoveEntityiEnt)
        return;
    }
}

public 
fw_remove_poison(taskEnt)
{
    new 
Ent=taskEnt-1234
    
if(is_valid_ent(Ent)) engfunc(EngFunc_RemoveEntityEnt)
    
remove_task(taskEnt)
}

public 
fw_touch_poison(enttouch)
{
    
client_print(0print_center"Touch")
    if(
is_user_alive(touch))
    {
        static 
Float:CurTime
        CurTime 
get_gametime()

        if(
CurTime 1.0 g_poison_touch[touch])
        {
            new 
Owner pev(entpev_owner)
            
ExecuteHamB(Ham_TakeDamagetouchOwnertouch50.0DMG_BLAST)
            
set_pev(touchpev_maxspeed20.0)    

            
g_poison_touch[touch] = CurTime
        
}
    }
}

public 
fw_touch_shot(entid)
{
    
emit_sound(entCHAN_ITEMg_sound[3], 1.0ATTN_NORM0PITCH_NORM)
    new 
Float:vOrigin[3]
    
pev(entpev_originvOrigin);

    new 
classname[1024]
    
pev(idpev_classnameclassnamecharsmax(classname))
    if(
equal(classname"func_wall") || equal(classname"func_breakable") || equal(classname"worldspawn")) {
        new 
Gent create_entity("info_target")

        
set_pev(Gentpev_ownerpev(entpev_owner))
        new 
Float:maxs[3] = {40.040.025.0}
        new 
Float:mins[3] = {-40.0, -40.0, -25.0}
        
entity_set_size(Gentminsmaxs)
        
set_pev(Gentpev_classnamepoison_classname)
        
engfunc(EngFunc_SetModelGentfire_poison)

        new    
Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3],
        
Float:vTraceEnd[3],Float:vEntAngles[3];

        
pev(entget_pcvar_num(cvar_movetype) ? pev_velocity pev_vuser1vTraceDirection)

        
xs_vec_add(vTraceDirectionvOriginvTraceEnd);

        
engfunc(EngFunc_TraceLinevOriginvTraceEndDONT_IGNORE_MONSTERSent0);

        new 
Float:fFraction;
        
get_tr2(0TR_flFractionfFraction);

        
// -- We hit something!
        
if(fFraction 1.0)
        {
            
// -- Save results to be used later.
            
get_tr2(0TR_vecEndPosvTraceEnd);

            
get_tr2(0TR_vecPlaneNormalvNormal);
        }
        
xs_vec_add(vTraceEndvNormalvNewOrigin);

        
vector_to_angle(vNormal,vEntAngles);
        
vEntAngles[0]-=90.0

        set_pev
(Gent,pev_angles,vEntAngles);
        
set_pev(Gentpev_originvNewOrigin)

        
set_pev(Gentpev_rendermodekRenderTransAdd)
        
set_pev(Gentpev_renderamt160.0)

        
set_pev(Gentpev_solidSOLID_SLIDEBOX)
        
set_pev(Gentpev_movetypeMOVETYPE_NONE)

        
effect_play_sprite(vOrigin40.0)

        
set_task(TIME_POISON"fw_remove_poison"Gent+1234)
        
remove_entity(ent)
        return 
FMRES_IGNORED
    
}

    if(!
is_valid_ent(id))
    return 
FMRES_IGNORED

    
if(!is_user_alive(id) || !is_user_connected(id)) {
        
remove_entity(ent)
        return 
FMRES_IGNORED
    
}

    if(
pev(entpev_iuser2) == 1)
    {
        
set_pev(entpev_iuser20)
        
pev(idpev_originvOrigin)
        
effect_play_sprite(vOrigin30.0)

        
message_begin (MSG_BROADCAST,SVC_TEMPENTITY)
        
write_byteTE_SPRITETRAIL // Throws a shower of sprites or models
        
write_coordfloatround(vOrigin]) ) // start pos
        
write_coordfloatround(vOrigin]) )
        
write_coordfloatround(vOrigin]) )
        
write_coordfloatround(vOrigin]) ) // velocity
        
write_coordfloatround(vOrigin]) )
        
write_coordfloatround(vOrigin]) +20)
        
write_short(sprite_ability // spr
        
write_byte(18// (count)
        
write_byte(random_num(8,15)) // (life in 0.1's)
        
write_byte(4// byte (scale in 0.1's)
        
write_byte(random_num(22,35)) // (velocity along vector in 10's)
        
write_byte(20// (randomness of velocity in 10's)
        
message_end()

        static 
attacker

        attacker 
pev(entpev_owner)

        if(!
fm_get_user_godmode(id)) {
            new 
Float:velocity[3]
            
pev(entpev_vuser1velocity)
            
velocity[2]+=30.0
            xs_vec_mul_scalar
(velocity1000.0/xs_vec_len(velocity), velocity)

            
ExecuteHam(Ham_TakeDamageid"poison_launcher"attackerrandom_float(get_pcvar_float(cvar_start_damage), get_pcvar_float(cvar_end_damage)), DMG_BULLET)
            
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("Damage"), _id)
            
write_byte(0// damage save
            
write_byte(0// damage take
            
write_long(DMG_POISON// damage type
            
write_coord(0// x
            
write_coord(0// y
            
write_coord(0// z
            
message_end()

            
user_screen_shake(id425)
            
do_screen_fade(id0.80.7REDGREENBLUE180);

            
set_pev(idpev_velocityvelocity)
            
gPoisonGlow[id] = get_gametime() + 1.0;
            
gGlowPlayer[id] = true;

            
fm_set_rendering(idkRenderFxGlowShellREDGREENBLUEkRenderNormal25)
        }
        
remove_entity(ent)
        return 
FMRES_IGNORED
    
}

    return 
FMRES_IGNORED
}


public 
client_PostThink(id)
{
    if (!
is_user_alive(id)) return;

    if(
gGlowPlayer[id]) {
        if(
gPoisonGlow[id]>get_gametime())
        return

        
set_pev(idpev_maxspeed100.0// prevent from moving
        
set_pev(idpev_renderfx0)    
        
gGlowPlayer[id] = false;    
    }
}

effect_play_sprite(const Float:vOrigin[3], Float:Add)
{
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYvOrigin0)
    
write_byte(TE_SPRITE)
    
engfunc(EngFunc_WriteCoordvOrigin[0])
    
engfunc(EngFunc_WriteCoordvOrigin[1])
    
engfunc(EngFunc_WriteCoordvOrigin[2] + Add)
    
write_short(fire_spr_id)
    
write_byte(8)
    
write_byte(200)
    
message_end()
}

public 
fw_Item_Deploy_Post(weapon_ent)
{
    static 
owner
    owner 
fm_cs_get_weapon_ent_owner(weapon_ent)

    static 
weaponid
    weaponid 
cs_get_weapon_id(weapon_ent)

    
replace_weapon_models(ownerweaponid)
}

replace_weapon_models(idweaponid)
{
    switch (
weaponid)
    {
        case 
CSW_WPN_POISON:
        {
            
//if (!avp_get_user_predator(id))
            //    return

            
if(g_has_item[id])
            {
                
set_pev(idpev_viewmodel2v_model)
                
set_pev(idpev_weaponmodel2p_model)
                
UTIL_PlayWeaponAnimation (idDRAW_ANIM)
                
emit_sound(idCHAN_WEAPONg_sound[0], 1.0ATTN_NORM0PITCH_NORM)
                
//set_pdata_float(id, m_flNextAttack, 1.3, PLAYER_LINUX_XTRA_OFF)
            
}
        }
    }
    
oldweap[id] = weaponid
}

public 
plasma_ItemPostFrame(weapon_entity
{
    new 
id pev(weapon_entitypev_owner)
    if (!
is_user_connected(id))
    return 
HAM_IGNORED

    
if (!g_has_item[id])
    return 
HAM_IGNORED

    
static iClipExtra

    iClipExtra 
get_pcvar_num(cvar_clip)
    new 
Float:flNextAttack get_pdata_float(idm_flNextAttackPLAYER_LINUX_XTRA_OFF)

    new 
iBpAmmo cs_get_user_bpammo(idCSW_WPN_POISON)
    new 
iClip get_pdata_int(weapon_entitym_iClipWEAP_LINUX_XTRA_OFF)

    new 
fInReload get_pdata_int(weapon_entitym_fInReloadWEAP_LINUX_XTRA_OFF

    if( 
fInReload && flNextAttack <= 0.0 )
    {
        new 
min(iClipExtra iClipiBpAmmo)

        
set_pdata_int(weapon_entitym_iClipiClip jWEAP_LINUX_XTRA_OFF)
        
cs_set_user_bpammo(idCSW_WPN_POISONiBpAmmo-j)

        
set_pdata_int(weapon_entitym_fInReload0WEAP_LINUX_XTRA_OFF)
        
fInReload 0
    
}
    return 
HAM_IGNORED
}

public 
fw_Reload(weapon_entity
{
    new 
id pev(weapon_entitypev_owner)
    if (!
is_user_connected(id))
    return 
HAM_IGNORED

    
if (!g_has_item[id])
    return 
HAM_IGNORED

    
static iClipExtra

    
if(g_has_item[id])
    
iClipExtra get_pcvar_num(cvar_clip)

    
g_TmpClip[id] = -1

    
new iBpAmmo cs_get_user_bpammo(idCSW_WPN_POISON)
    new 
iClip get_pdata_int(weapon_entitym_iClipWEAP_LINUX_XTRA_OFF)

    if (
iBpAmmo <= 0)
    return 
HAM_SUPERCEDE

    
if (iClip >= iClipExtra)
    return 
HAM_SUPERCEDE

    g_TmpClip
[id] = iClip

    
return HAM_IGNORED
}

public 
Reload_Post(weapon_entity
{
    new 
id pev(weapon_entitypev_owner)

    if (!
is_user_connected(id))
    return 
HAM_IGNORED

    
if (!g_has_item[id])
    return 
HAM_IGNORED

    
if (g_TmpClip[id] == -1)
    return 
HAM_IGNORED

    set_pdata_int
(weapon_entitym_iClipg_TmpClip[id], WEAP_LINUX_XTRA_OFF)
    
set_pdata_float(weapon_entitym_flTimeWeaponIdleWPN_RELOAD_TIMEWEAP_LINUX_XTRA_OFF)
    
set_pdata_float(idm_flNextAttackWPN_RELOAD_TIMEPLAYER_LINUX_XTRA_OFF)
    
set_pdata_int(weapon_entitym_fInReload1WEAP_LINUX_XTRA_OFF)
    
UTIL_PlayWeaponAnimation(idRELOAD_ANIM)

    return 
HAM_IGNORED
}

stock fm_cs_get_current_weapon_ent(id)
{
    return 
get_pdata_cbase(idOFFSET_ACTIVE_ITEMOFFSET_LINUX)
}

stock fm_cs_get_weapon_ent_owner(ent)
{
    return 
get_pdata_cbase(ent414)
}

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

    
message_begin(MSG_ONE_UNRELIABLESVC_WEAPONANIM, .player Player)
    
write_byte(Sequence)
    
write_byte(pev(Playerpev_body))
    
message_end()
}

user_screen_shake(idamplitude 4duration 2frequency 10)
{
    
message_begin(MSG_ONE_UNRELIABLEg_msgScreenShake_id)
    
write_short((1<<12)*amplitude// ??
    
write_short((1<<12)*duration// ??
    
write_short((1<<12)*frequency// ??
    
message_end()
}

stock do_screen_fadeidFloat:fadeTimeFloat:holdTimeredgreenbluealphatype 0x0000 )
{
    static 
msgScreenFade;
    if ( !
msgScreenFade ) { msgScreenFade get_user_msgid"ScreenFade" ); }
    new 
fadehold;
    
fade clampfloatroundfadeTime float(1<<12)), 00xFFFF );
    
hold clampfloatroundholdTime float(1<<12)), 00xFFFF );
    
message_beginMSG_ONE_UNRELIABLEmsgScreenFade_id );
    
write_shortfade );
    
write_shorthold );
    
write_shorttype );
    
write_bytered );
    
write_bytegreen );
    
write_byteblue );
    
write_bytealpha );
    
message_end( );
}

stock get_weapon_attackment(idFloat:output[3], Float:fDis 40.0)
{
     
    new 
Float:vfEnd[3], viEnd[3
    
get_user_origin(idviEnd3
    
IVecFVec(viEndvfEnd

    new 
Float:fOrigin[3], Float:fAngle[3]

    
pev(idpev_originfOrigin
    
pev(idpev_view_ofsfAngle)

    
xs_vec_add(fOriginfAnglefOrigin

    new 
Float:fAttack[3]

    
xs_vec_sub(vfEndfOriginfAttack)
    
xs_vec_sub(vfEndfOriginfAttack

    new 
Float:fRate

    fRate 
fDis vector_length(fAttack)
    
xs_vec_mul_scalar(fAttackfRatefAttack)

    
xs_vec_add(fOriginfAttackoutput)
}

stock drop_weapons(iddropwhat)
{
    static 
weapons[32], numiweaponid
    num 
0
    get_user_weapons
(idweaponsnum)

    for (
0numi++)
    {
        
weaponid weapons[i]

        if ((
dropwhat == && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (dropwhat == && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM)))
        {
            static 
wname[32]
            
get_weaponname(weaponidwnamesizeof wname 1)
            
engclient_cmd(id"drop"wname)
        }
    }


y el comando solo me salen los svars ayuda WhatdoneWhatdoneCutecryGenius
Responder
#7
(29/09/2016, 04:39 PM)mmeka12 escribió:
(29/09/2016, 04:18 PM)wester escribió: Fixeado..
Te recomiendo leer el codigo para que te des cuenta de donde estaba el error.
Código PHP:
#include <amxmodx>
#include <fakemeta_util>
#include <engine>
#include <cstrike>
#include <hamsandwich>
#include <xs>

const UNIT_SECOND = (1<<12)


#define ENG_NULLENT    -1
#define EV_INT_WEAPONKEY    EV_INT_impulse
#define POISON_WEAPONKEY    233
#define WEAP_LINUX_XTRA_OFF    4
#define m_fKnown    44
#define m_flNextPrimaryAttack 46
#define m_flTimeWeaponIdle    48
#define m_iClip    51
#define m_fInReload    54
#define PLAYER_LINUX_XTRA_OFF    5
#define m_flNextAttack    83
#define TIME_POISON    5.0
#define CSW_WPN_POISON    CSW_M3
#define OFFSET_TIME_ATTACK 0.6
#define WPN_RELOAD_TIME 3.4

new const gWeapon[] = "weapon_m3"

#define PLUGIN "[AMXX] Public: Poison Launcher"
#define VERSION "1.8.4"
#define AUTHOR "Re.Act!ve" 

new const g_item_name[] = { "Poison Launcher" }; // Item name
new const g_item_cost 20 // Item cost

#define RED 60
#define GREEN 250
#define BLUE 0
#define PEV_ENT_TIME pev_fuser1

// Precahce files
new const fire_model_name[] = "models/zm/spore.mdl"
new const fire_poison[] = "models/zm/spore_poison.mdl"
new const fire_spr_name[] = "sprites/laserbeam.spr"
new const fire_sprite[] = "sprites/zm/poison_spr.spr"
new const spr_poison_flare[] = "sprites/zm/poison_flare.spr"

new fire_sound[] = "weapons/plauncher-1.wav"
new g_sound[][] = {
    
"weapons/plauncher_draw.wav",
    
"weapons/plaunch_clipin.wav",
    
"weapons/plaunch_clipout.wav",
    
"weapons/plauncher_explode.wav"
}

new const 
v_model[] = "models/zm/v_plaunch_flipbyHiDanZ.mdl"
new const p_model[] = "models/zm/p_plaunch1.mdl"
new const w_model[] = "models/zm/w_plaunch.mdl"

// classname
new const fire_classname[] = "poison_fire"
new const poison_classname[] = "posion_spore"
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)
enum
{
    
IDLE_ANIM 0,
    
DRAW_ANIM 2,
    
RELOAD_ANIM 1,
    
SHOOT_ANIM 3,
    
SHOOT_ANIM1 4,
    
SHOOT_ANIM2 5
}

new 
sprite_abilityfire_spr_idfire_spr_nameidg_IsInPrimaryAttackcvar_start_damagecvar_end_damagecvar_clipcvar_maxclipcvar_shot_speedg_itemidcvar_movetype
new g_orig_eventFloat:g_poison_touch[33], oldweap[33], g_TmpClip[33], Float:gPoisonGlow[33], bool:gGlowPlayer[33], g_msgScreenShake
new bool:g_has_item[33], bool:disc_opened[33]

new const 
WEAPONENTNAMES[][] = { """weapon_p228""""weapon_scout""weapon_hegrenade""weapon_xm1014""weapon_c4""weapon_mac10",
    
"weapon_aug""weapon_smokegrenade""weapon_elite""weapon_fiveseven""weapon_ump45""weapon_sg550",
    
"weapon_galil""weapon_famas""weapon_usp""weapon_glock18""weapon_awp""weapon_mp5navy""weapon_m249",
    
"weapon_m3""weapon_m4a1""weapon_tmp""weapon_g3sg1""weapon_flashbang""weapon_deagle""weapon_sg552",
    
"weapon_ak47""weapon_knife""weapon_p90" }

public 
plugin_precache()
{
    
precache_model(v_model)
    
precache_model(p_model)
    
precache_model(w_model)

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

    
precache_sound(fire_sound)

    
precache_model(fire_model_name)
    
precache_model(fire_poison)
    
sprite_ability engfunc(EngFunc_PrecacheModelspr_poison_flare)    
    
fire_spr_id precache_model(fire_sprite)
    
fire_spr_nameid precache_model(fire_spr_name)
}

public 
plugin_init()
{
    
register_plugin PLUGINVERSIONAUTHOR )

    
//g_itemid = zp_register_extra_item(g_item_name, g_item_cost, ZP_TEAM_HUMAN)

    
cvar_shot_speed register_cvar("zp_pl_bulletspeed""500")    // Velocidad De Disparo
    
cvar_movetype register_cvar("zp_pl_movetype""0")    // 0 - Directa, 1 - Gravedad (Estilo De Disparo)
    
cvar_start_damage register_cvar("zp_pl_startdamage""250.0")    // Daño Minimo
    
cvar_end_damage register_cvar("zp_pl_enddamage""600.0")    // Daño Maximo
    
cvar_clip register_cvar("zp_pl_clip""15")    // Balas De Inicio
    
cvar_maxclip register_cvar("zp_pl_ammo""60")    // Municion Maxima
    
g_msgScreenShake get_user_msgid("ScreenShake")
    
set_cvar_num("sv_maxvelocity"8000)

    
RegisterHam(Ham_Weapon_PrimaryAttackgWeapon"fw_PrimaryAttack")
    
RegisterHam(Ham_Weapon_PrimaryAttackgWeapon"fw_PrimaryAttack_Post"1)
    
RegisterHam(Ham_Item_PostFramegWeapon"plasma_ItemPostFrame")
    
RegisterHam(Ham_Weapon_ReloadgWeapon"fw_Reload")
    
RegisterHam(Ham_Weapon_ReloadgWeapon"Reload_Post"1)
    
RegisterHam(Ham_Item_AddToPlayergWeapon"fw_item_addtoplayer"1)

    
register_forward(FM_SetModel"fw_SetModel")
    
register_forward(FM_PlaybackEvent"fwPlaybackEvent")
    
register_forward(FM_PrecacheEvent"fwPrecacheEvent_Post"1)
    
register_forward(FM_UpdateClientData"fw_UpdateClientData_Post"1)

    
register_touch(fire_classname"*""fw_touch_shot")
    
register_think(fire_classname"fw_think")
    
register_touch(poison_classname"*""fw_touch_poison")

    for (new 
1sizeof WEAPONENTNAMESi++)
    if (
WEAPONENTNAMES[i][0]) 
    
RegisterHam(Ham_Item_DeployWEAPONENTNAMES[i], "fw_Item_Deploy_Post"1)
}

public 
fwPrecacheEvent_Post(type, const name[])
{
    if (
equal("events/m3.sc"name))
    {
        
g_orig_event get_orig_retval()
        return 
FMRES_HANDLED
    
}
    return 
FMRES_IGNORED
}

public 
fw_UpdateClientData_Post(idsendweaponscd_handle)
{
        
    if(
get_user_weapon(id) != CSW_WPN_POISON || !g_has_item[id])
    return 
FMRES_IGNORED

    set_cd
(cd_handleCD_flNextAttackhalflife_time() + 0.001

    return 
FMRES_HANDLED
}

public 
fw_item_addtoplayer(entid)
{
    if(!
is_valid_ent(ent))
    return 
HAM_IGNORED

    
if(entity_get_int(entEV_INT_WEAPONKEY) == POISON_WEAPONKEY)
    {
        
g_has_item[id] = true;
        
entity_set_int(idEV_INT_impulse0)

        
replace_weapon_models(ident)
        return 
HAM_HANDLED
    
}

    return 
HAM_HANDLED
}

public 
client_connect(id)
g_has_item[id] = false

public client_disconnect(id)
g_has_item[id] = false

/*
public zp_user_infected_post(id)
{
    if (zp_get_user_zombie(id))
    g_has_item[id] = false
}
*/
public zp_user_humanized_post(id)
g_has_item[id] = false

public zp_extra_item_selected(iditemid)
{
    if(
itemid == g_itemid
    {
        
drop_weapons(id,1)
        
g_has_item[id] = true;
        new 
iWep2 fm_give_item(id,gWeapon)
        if( 
iWep2 )
        {
            
cs_set_weapon_ammo(iWep2get_pcvar_num(cvar_clip))
            
cs_set_user_bpammo (idCSW_WPN_POISONget_pcvar_num(cvar_maxclip))    
        }
        
UTIL_PlayWeaponAnimation (idDRAW_ANIM)
        
emit_sound(idCHAN_WEAPONg_sound[0], 1.0ATTN_NORM0PITCH_NORM)
    }
}

public 
fw_PrimaryAttack(Weapon)
{
    if (
g_has_item[pevWeaponpev_owner )]) 
    {
        
g_IsInPrimaryAttack 1
        
return HAM_SUPERCEDE;
    }
    return 
HAM_IGNORED;
}

public 
fwPlaybackEvent(flagsinvokereventidFloat:delayFloat:origin[3], Float:angles[3], Float:fparam1Float:fparam2iParam1iParam2bParam1bParam2)
{
    if ((
eventid != g_orig_event) || !g_IsInPrimaryAttack)
    return 
FMRES_IGNORED

    
if (!(<= invoker <= get_maxplayers()))
    return 
FMRES_IGNORED

    playback_event
(flags FEV_HOSTONLYinvokereventiddelayoriginanglesfparam1fparam2iParam1iParam2bParam1bParam2)
    return 
FMRES_SUPERCEDE
}

public 
fw_PrimaryAttack_Post(Weapon)
{
    
g_IsInPrimaryAttack 0
    
new Player get_pdata_cbase(Weapon414)

    new 
szClipszAmmo
    get_user_weapon
(PlayerszClipszAmmo)

    if(!
is_user_alive(Player))
    return

    if(
szClip == 0)
    return

    if(!
is_user_alive(Player))
    return

    if(
g_has_item[Player] || szClip >= 1)
    {
        
//set_pdata_float(Player , m_flNextAttack, OFFSET_TIME_ATTACK, PLAYER_LINUX_XTRA_OFF)
        
set_pdata_floatPlayer83OFFSET_TIME_ATTACK )
        
make_shoot(PlayerWeapon)
    }
}

public 
make_shoot(idWeapon)
{
    if(!
is_user_alive(id))
    return 
HAM_IGNORED;

    if(
get_user_weapon(id) != CSW_WPN_POISON)
    return 
HAM_IGNORED;

    if(!
g_has_item[id] || disc_opened[id])
    return 
HAM_IGNORED;

    new 
szClip
    get_user_weapon
(idszClip)

    if(
szClip >= 1)
    {
        new 
Float:Puch[3]
        
pev(idpev_punchanglePuch)
        
Puch[0]-=random_float(3.06.0)
        
cs_set_weapon_ammo(WeaponszClip-1)
        
emit_sound(idCHAN_WEAPONfire_sound1.0ATTN_NORM0PITCH_NORM)
        
UTIL_PlayWeaponAnimation(idrandom_num(SHOOT_ANIMSHOOT_ANIM2))
        
throw_fire(id)
        
set_pev(id,pev_punchangle,Puch)
    }
    return 
HAM_IGNORED;
}

public 
throw_fire(id)
{
    new 
iEnt create_entity("info_target")
    new 
Float:vfVelocity[3]

    
velocity_by_aim(id, (get_pcvar_num(cvar_shot_speed)*10), vfVelocity)

    
// add velocity of Owner for ent
    
new Float:vfAttack[3], Float:vfAngle[3], Float:vOfps[3]
    
get_weapon_attackment(idvfAttack20.0)
    
pev(idpev_view_ofsvOfps)
    
pev(idpev_anglesvfAngle)

    
// set info for ent
    
set_pev(iEntpev_movetypeMOVETYPE_FLY)
    
set_pev(iEntPEV_ENT_TIMEget_gametime() + 5.0)    // time remove
    
set_pev(iEntpev_classnamefire_classname)
    
engfunc(EngFunc_SetModeliEntfire_model_name)    //fire_model_name
    
set_pev(iEntpev_minsFloat:{-2.0, -2.0, -2.0})
    
set_pev(iEntpev_maxsFloat:{2.02.02.0})
    
set_pev(iEntpev_body2)
    
set_pev(iEntpev_originvfAttack)
    
set_pev(iEntpev_velocityvfVelocity)
    
set_pev(iEntpev_solidSOLID_BBOX)
    
set_pev(iEntpev_ownerid)
    
set_pev(iEntpev_iuser21)
    
set_pev(iEntpev_vuser1vfVelocity)
    
set_pev(iEntpev_anglesvfAngle)
    
set_pev(iEntpev_v_anglevOfps)

    
set_pev(iEntpev_rendermodekRenderTransAdd)
    
set_pev(iEntpev_renderamt130.0)

    
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
    
write_byte(TE_BEAMFOLLOW// TE id
    
write_short(iEnt// entity
    
write_short(fire_spr_nameid// sprite
    
write_byte(8// life
    
write_byte(6// width
    
write_byte(RED// r
    
write_byte(GREEN// g
    
write_byte(BLUE// b
    
write_byte(180// brightness
    
message_end()
    
set_task(OFFSET_TIME_ATTACK"RemoveDisk"id+2242)
}

public 
RemoveDisk(taskid)
{
    
disc_opened[taskid-2242] = false;
    
remove_task(taskid)
}

public 
fw_SetModel(entitymodel[])
{
    if(!
is_valid_ent(entity))
    return 
FMRES_IGNORED;

    static 
szClassName[33]
    
entity_get_string(entityEV_SZ_classnameszClassNamecharsmax(szClassName))

    if(!
equal(szClassName"weaponbox"))
    return 
FMRES_IGNORED;

    static 
iOwner

    iOwner 
entity_get_edict(entityEV_ENT_owner)

    if(
equal(model"models/w_m3.mdl"))
    {
        static 
iStoredSVDID

        iStoredSVDID 
find_ent_by_owner(ENG_NULLENTgWeaponentity)

        if(!
is_valid_ent(iStoredSVDID))
        return 
FMRES_IGNORED;

        if(
g_has_item[iOwner])
        {
            
entity_set_int(iStoredSVDIDEV_INT_WEAPONKEYPOISON_WEAPONKEY)

            
g_has_item[iOwner] = false

            entity_set_model
(entityw_model)

            return 
FMRES_SUPERCEDE;
        }
    }
    return 
FMRES_IGNORED;
}

public 
fw_think(iEnt)
{
    if(!
pev_valid(iEnt)) 
    return

    new 
Float:fFrameFloat:fScaleFloat:fNextThink
    pev
(iEntpev_framefFrame)
    
pev(iEntpev_scalefScale)

    
// effect exp
    
new iMoveType pev(iEntpev_movetype)
    if (
iMoveType == MOVETYPE_NONE)
    {
        
fNextThink 0.015
        fFrame 
+= 1.0
        fScale 
floatmax(fScale1.55)

        if (
fFrame 21.0)
        {
            
engfunc(EngFunc_RemoveEntityiEnt)
            return
        }
    }

    
// effect normal
    
else
    {
        
fNextThink 0.045
        fFrame 
+= 1.0
        fFrame 
floatmin(21.0fFrame)
        
fScale += 0.2
        fScale 
floatmin(fScale1.75)
    }

    
set_pev(iEntpev_framefFrame)
    
set_pev(iEntpev_scalefScale)
    
set_pev(iEntpev_nextthinkget_gametime() + fNextThink)

    
// time remove
    
static Float:fTimeRemove
    pev
(iEntpev_fuser1fTimeRemove)
    if (
get_gametime() >= fTimeRemove)
    {
        
engfunc(EngFunc_RemoveEntityiEnt)
        return;
    }
}

public 
fw_remove_poison(taskEnt)
{
    new 
Ent=taskEnt-1234
    
if(is_valid_ent(Ent)) engfunc(EngFunc_RemoveEntityEnt)
    
remove_task(taskEnt)
}

public 
fw_touch_poison(enttouch)
{
    
client_print(0print_center"Touch")
    if(
is_user_alive(touch))
    {
        static 
Float:CurTime
        CurTime 
get_gametime()

        if(
CurTime 1.0 g_poison_touch[touch])
        {
            new 
Owner pev(entpev_owner)
            
ExecuteHamB(Ham_TakeDamagetouchOwnertouch50.0DMG_BLAST)
            
set_pev(touchpev_maxspeed20.0)    

            
g_poison_touch[touch] = CurTime
        
}
    }
}

public 
fw_touch_shot(entid)
{
    
emit_sound(entCHAN_ITEMg_sound[3], 1.0ATTN_NORM0PITCH_NORM)
    new 
Float:vOrigin[3]
    
pev(entpev_originvOrigin);

    new 
classname[1024]
    
pev(idpev_classnameclassnamecharsmax(classname))
    if(
equal(classname"func_wall") || equal(classname"func_breakable") || equal(classname"worldspawn")) {
        new 
Gent create_entity("info_target")

        
set_pev(Gentpev_ownerpev(entpev_owner))
        new 
Float:maxs[3] = {40.040.025.0}
        new 
Float:mins[3] = {-40.0, -40.0, -25.0}
        
entity_set_size(Gentminsmaxs)
        
set_pev(Gentpev_classnamepoison_classname)
        
engfunc(EngFunc_SetModelGentfire_poison)

        new    
Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3],
        
Float:vTraceEnd[3],Float:vEntAngles[3];

        
pev(entget_pcvar_num(cvar_movetype) ? pev_velocity pev_vuser1vTraceDirection)

        
xs_vec_add(vTraceDirectionvOriginvTraceEnd);

        
engfunc(EngFunc_TraceLinevOriginvTraceEndDONT_IGNORE_MONSTERSent0);

        new 
Float:fFraction;
        
get_tr2(0TR_flFractionfFraction);

        
// -- We hit something!
        
if(fFraction 1.0)
        {
            
// -- Save results to be used later.
            
get_tr2(0TR_vecEndPosvTraceEnd);

            
get_tr2(0TR_vecPlaneNormalvNormal);
        }
        
xs_vec_add(vTraceEndvNormalvNewOrigin);

        
vector_to_angle(vNormal,vEntAngles);
        
vEntAngles[0]-=90.0

        set_pev
(Gent,pev_angles,vEntAngles);
        
set_pev(Gentpev_originvNewOrigin)

        
set_pev(Gentpev_rendermodekRenderTransAdd)
        
set_pev(Gentpev_renderamt160.0)

        
set_pev(Gentpev_solidSOLID_SLIDEBOX)
        
set_pev(Gentpev_movetypeMOVETYPE_NONE)

        
effect_play_sprite(vOrigin40.0)

        
set_task(TIME_POISON"fw_remove_poison"Gent+1234)
        
remove_entity(ent)
        return 
FMRES_IGNORED
    
}

    if(!
is_valid_ent(id))
    return 
FMRES_IGNORED

    
if(!is_user_alive(id) || !is_user_connected(id)) {
        
remove_entity(ent)
        return 
FMRES_IGNORED
    
}

    if(
pev(entpev_iuser2) == 1)
    {
        
set_pev(entpev_iuser20)
        
pev(idpev_originvOrigin)
        
effect_play_sprite(vOrigin30.0)

        
message_begin (MSG_BROADCAST,SVC_TEMPENTITY)
        
write_byteTE_SPRITETRAIL // Throws a shower of sprites or models
        
write_coordfloatround(vOrigin]) ) // start pos
        
write_coordfloatround(vOrigin]) )
        
write_coordfloatround(vOrigin]) )
        
write_coordfloatround(vOrigin]) ) // velocity
        
write_coordfloatround(vOrigin]) )
        
write_coordfloatround(vOrigin]) +20)
        
write_short(sprite_ability // spr
        
write_byte(18// (count)
        
write_byte(random_num(8,15)) // (life in 0.1's)
        
write_byte(4// byte (scale in 0.1's)
        
write_byte(random_num(22,35)) // (velocity along vector in 10's)
        
write_byte(20// (randomness of velocity in 10's)
        
message_end()

        static 
attacker

        attacker 
pev(entpev_owner)

        if(!
fm_get_user_godmode(id)) {
            new 
Float:velocity[3]
            
pev(entpev_vuser1velocity)
            
velocity[2]+=30.0
            xs_vec_mul_scalar
(velocity1000.0/xs_vec_len(velocity), velocity)

            
ExecuteHam(Ham_TakeDamageid"poison_launcher"attackerrandom_float(get_pcvar_float(cvar_start_damage), get_pcvar_float(cvar_end_damage)), DMG_BULLET)
            
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("Damage"), _id)
            
write_byte(0// damage save
            
write_byte(0// damage take
            
write_long(DMG_POISON// damage type
            
write_coord(0// x
            
write_coord(0// y
            
write_coord(0// z
            
message_end()

            
user_screen_shake(id425)
            
do_screen_fade(id0.80.7REDGREENBLUE180);

            
set_pev(idpev_velocityvelocity)
            
gPoisonGlow[id] = get_gametime() + 1.0;
            
gGlowPlayer[id] = true;

            
fm_set_rendering(idkRenderFxGlowShellREDGREENBLUEkRenderNormal25)
        }
        
remove_entity(ent)
        return 
FMRES_IGNORED
    
}

    return 
FMRES_IGNORED
}


public 
client_PostThink(id)
{
    if (!
is_user_alive(id)) return;

    if(
gGlowPlayer[id]) {
        if(
gPoisonGlow[id]>get_gametime())
        return

        
set_pev(idpev_maxspeed100.0// prevent from moving
        
set_pev(idpev_renderfx0)    
        
gGlowPlayer[id] = false;    
    }
}

effect_play_sprite(const Float:vOrigin[3], Float:Add)
{
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYvOrigin0)
    
write_byte(TE_SPRITE)
    
engfunc(EngFunc_WriteCoordvOrigin[0])
    
engfunc(EngFunc_WriteCoordvOrigin[1])
    
engfunc(EngFunc_WriteCoordvOrigin[2] + Add)
    
write_short(fire_spr_id)
    
write_byte(8)
    
write_byte(200)
    
message_end()
}

public 
fw_Item_Deploy_Post(weapon_ent)
{
    static 
owner
    owner 
fm_cs_get_weapon_ent_owner(weapon_ent)

    static 
weaponid
    weaponid 
cs_get_weapon_id(weapon_ent)

    
replace_weapon_models(ownerweaponid)
}

replace_weapon_models(idweaponid)
{
    switch (
weaponid)
    {
        case 
CSW_WPN_POISON:
        {
            
//if (!avp_get_user_predator(id))
            //    return

            
if(g_has_item[id])
            {
                
set_pev(idpev_viewmodel2v_model)
                
set_pev(idpev_weaponmodel2p_model)
                
UTIL_PlayWeaponAnimation (idDRAW_ANIM)
                
emit_sound(idCHAN_WEAPONg_sound[0], 1.0ATTN_NORM0PITCH_NORM)
                
//set_pdata_float(id, m_flNextAttack, 1.3, PLAYER_LINUX_XTRA_OFF)
            
}
        }
    }
    
oldweap[id] = weaponid
}

public 
plasma_ItemPostFrame(weapon_entity
{
    new 
id pev(weapon_entitypev_owner)
    if (!
is_user_connected(id))
    return 
HAM_IGNORED

    
if (!g_has_item[id])
    return 
HAM_IGNORED

    
static iClipExtra

    iClipExtra 
get_pcvar_num(cvar_clip)
    new 
Float:flNextAttack get_pdata_float(idm_flNextAttackPLAYER_LINUX_XTRA_OFF)

    new 
iBpAmmo cs_get_user_bpammo(idCSW_WPN_POISON)
    new 
iClip get_pdata_int(weapon_entitym_iClipWEAP_LINUX_XTRA_OFF)

    new 
fInReload get_pdata_int(weapon_entitym_fInReloadWEAP_LINUX_XTRA_OFF

    if( 
fInReload && flNextAttack <= 0.0 )
    {
        new 
min(iClipExtra iClipiBpAmmo)

        
set_pdata_int(weapon_entitym_iClipiClip jWEAP_LINUX_XTRA_OFF)
        
cs_set_user_bpammo(idCSW_WPN_POISONiBpAmmo-j)

        
set_pdata_int(weapon_entitym_fInReload0WEAP_LINUX_XTRA_OFF)
        
fInReload 0
    
}
    return 
HAM_IGNORED
}

public 
fw_Reload(weapon_entity
{
    new 
id pev(weapon_entitypev_owner)
    if (!
is_user_connected(id))
    return 
HAM_IGNORED

    
if (!g_has_item[id])
    return 
HAM_IGNORED

    
static iClipExtra

    
if(g_has_item[id])
    
iClipExtra get_pcvar_num(cvar_clip)

    
g_TmpClip[id] = -1

    
new iBpAmmo cs_get_user_bpammo(idCSW_WPN_POISON)
    new 
iClip get_pdata_int(weapon_entitym_iClipWEAP_LINUX_XTRA_OFF)

    if (
iBpAmmo <= 0)
    return 
HAM_SUPERCEDE

    
if (iClip >= iClipExtra)
    return 
HAM_SUPERCEDE

    g_TmpClip
[id] = iClip

    
return HAM_IGNORED
}

public 
Reload_Post(weapon_entity
{
    new 
id pev(weapon_entitypev_owner)

    if (!
is_user_connected(id))
    return 
HAM_IGNORED

    
if (!g_has_item[id])
    return 
HAM_IGNORED

    
if (g_TmpClip[id] == -1)
    return 
HAM_IGNORED

    set_pdata_int
(weapon_entitym_iClipg_TmpClip[id], WEAP_LINUX_XTRA_OFF)
    
set_pdata_float(weapon_entitym_flTimeWeaponIdleWPN_RELOAD_TIMEWEAP_LINUX_XTRA_OFF)
    
set_pdata_float(idm_flNextAttackWPN_RELOAD_TIMEPLAYER_LINUX_XTRA_OFF)
    
set_pdata_int(weapon_entitym_fInReload1WEAP_LINUX_XTRA_OFF)
    
UTIL_PlayWeaponAnimation(idRELOAD_ANIM)

    return 
HAM_IGNORED
}

stock fm_cs_get_current_weapon_ent(id)
{
    return 
get_pdata_cbase(idOFFSET_ACTIVE_ITEMOFFSET_LINUX)
}

stock fm_cs_get_weapon_ent_owner(ent)
{
    return 
get_pdata_cbase(ent414)
}

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

    
message_begin(MSG_ONE_UNRELIABLESVC_WEAPONANIM, .player Player)
    
write_byte(Sequence)
    
write_byte(pev(Playerpev_body))
    
message_end()
}

user_screen_shake(idamplitude 4duration 2frequency 10)
{
    
message_begin(MSG_ONE_UNRELIABLEg_msgScreenShake_id)
    
write_short((1<<12)*amplitude// ??
    
write_short((1<<12)*duration// ??
    
write_short((1<<12)*frequency// ??
    
message_end()
}

stock do_screen_fadeidFloat:fadeTimeFloat:holdTimeredgreenbluealphatype 0x0000 )
{
    static 
msgScreenFade;
    if ( !
msgScreenFade ) { msgScreenFade get_user_msgid"ScreenFade" ); }
    new 
fadehold;
    
fade clampfloatroundfadeTime float(1<<12)), 00xFFFF );
    
hold clampfloatroundholdTime float(1<<12)), 00xFFFF );
    
message_beginMSG_ONE_UNRELIABLEmsgScreenFade_id );
    
write_shortfade );
    
write_shorthold );
    
write_shorttype );
    
write_bytered );
    
write_bytegreen );
    
write_byteblue );
    
write_bytealpha );
    
message_end( );
}

stock get_weapon_attackment(idFloat:output[3], Float:fDis 40.0)
{
     
    new 
Float:vfEnd[3], viEnd[3
    
get_user_origin(idviEnd3
    
IVecFVec(viEndvfEnd

    new 
Float:fOrigin[3], Float:fAngle[3]

    
pev(idpev_originfOrigin
    
pev(idpev_view_ofsfAngle)

    
xs_vec_add(fOriginfAnglefOrigin

    new 
Float:fAttack[3]

    
xs_vec_sub(vfEndfOriginfAttack)
    
xs_vec_sub(vfEndfOriginfAttack

    new 
Float:fRate

    fRate 
fDis vector_length(fAttack)
    
xs_vec_mul_scalar(fAttackfRatefAttack)

    
xs_vec_add(fOriginfAttackoutput)
}

stock drop_weapons(iddropwhat)
{
    static 
weapons[32], numiweaponid
    num 
0
    get_user_weapons
(idweaponsnum)

    for (
0numi++)
    {
        
weaponid weapons[i]

        if ((
dropwhat == && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (dropwhat == && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM)))
        {
            static 
wname[32]
            
get_weaponname(weaponidwnamesizeof wname 1)
            
engclient_cmd(id"drop"wname)
        }
    }


y el comando solo me salen los svars ayuda WhatdoneWhatdoneCutecryGenius

Código PHP:
#include <amxmodx>
#include <fakemeta_util>
#include <engine>
#include <cstrike>
#include <hamsandwich>
#include <xs>

const UNIT_SECOND = (1<<12)


#define ENG_NULLENT    -1
#define EV_INT_WEAPONKEY    EV_INT_impulse
#define POISON_WEAPONKEY    233
#define WEAP_LINUX_XTRA_OFF    4
#define m_fKnown    44
#define m_flNextPrimaryAttack 46
#define m_flTimeWeaponIdle    48
#define m_iClip    51
#define m_fInReload    54
#define PLAYER_LINUX_XTRA_OFF    5
#define m_flNextAttack    83
#define TIME_POISON    5.0
#define CSW_WPN_POISON    CSW_M3
#define OFFSET_TIME_ATTACK 0.6
#define WPN_RELOAD_TIME 3.4

new const gWeapon[] = "weapon_m3"

#define PLUGIN "[AMXX] Public: Poison Launcher"
#define VERSION "1.8.5"
#define AUTHOR "Re.Act!ve" 

new const g_item_name[] = { "Poison Launcher" }; // Item name
new const g_item_cost 20 // Item cost

#define RED 60
#define GREEN 250
#define BLUE 0
#define PEV_ENT_TIME pev_fuser1

// Precahce files
new const fire_model_name[] = "models/zm/spore.mdl"
new const fire_poison[] = "models/zm/spore_poison.mdl"
new const fire_spr_name[] = "sprites/laserbeam.spr"
new const fire_sprite[] = "sprites/zm/poison_spr.spr"
new const spr_poison_flare[] = "sprites/zm/poison_flare.spr"

new fire_sound[] = "weapons/plauncher-1.wav"
new g_sound[][] = {
    
"weapons/plauncher_draw.wav",
    
"weapons/plaunch_clipin.wav",
    
"weapons/plaunch_clipout.wav",
    
"weapons/plauncher_explode.wav"
}

new const 
v_model[] = "models/zm/v_plaunch_flipbyHiDanZ.mdl"
new const p_model[] = "models/zm/p_plaunch1.mdl"
new const w_model[] = "models/zm/w_plaunch.mdl"

// classname
new const fire_classname[] = "poison_fire"
new const poison_classname[] = "posion_spore"
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)
enum
{
    
IDLE_ANIM 0,
    
DRAW_ANIM 2,
    
RELOAD_ANIM 1,
    
SHOOT_ANIM 3,
    
SHOOT_ANIM1 4,
    
SHOOT_ANIM2 5
}

new 
sprite_abilityfire_spr_idfire_spr_nameidg_IsInPrimaryAttackcvar_start_damagecvar_end_damagecvar_clipcvar_maxclipcvar_shot_speedg_itemidcvar_movetype
new g_orig_eventFloat:g_poison_touch[33], oldweap[33], g_TmpClip[33], Float:gPoisonGlow[33], bool:gGlowPlayer[33], g_msgScreenShake
new bool:g_has_item[33], bool:disc_opened[33]

new const 
WEAPONENTNAMES[][] = { """weapon_p228""""weapon_scout""weapon_hegrenade""weapon_xm1014""weapon_c4""weapon_mac10",
    
"weapon_aug""weapon_smokegrenade""weapon_elite""weapon_fiveseven""weapon_ump45""weapon_sg550",
    
"weapon_galil""weapon_famas""weapon_usp""weapon_glock18""weapon_awp""weapon_mp5navy""weapon_m249",
    
"weapon_m3""weapon_m4a1""weapon_tmp""weapon_g3sg1""weapon_flashbang""weapon_deagle""weapon_sg552",
    
"weapon_ak47""weapon_knife""weapon_p90" }

public 
plugin_precache()
{
    
precache_model(v_model)
    
precache_model(p_model)
    
precache_model(w_model)

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

    
precache_sound(fire_sound)

    
precache_model(fire_model_name)
    
precache_model(fire_poison)
    
sprite_ability engfunc(EngFunc_PrecacheModelspr_poison_flare)    
    
fire_spr_id precache_model(fire_sprite)
    
fire_spr_nameid precache_model(fire_spr_name)
}

public 
plugin_init()
{
    
register_plugin PLUGINVERSIONAUTHOR )

    
//g_itemid = zp_register_extra_item(g_item_name, g_item_cost, ZP_TEAM_HUMAN)

    
cvar_shot_speed register_cvar("zp_pl_bulletspeed""500")    // Velocidad De Disparo
    
cvar_movetype register_cvar("zp_pl_movetype""0")    // 0 - Directa, 1 - Gravedad (Estilo De Disparo)
    
cvar_start_damage register_cvar("zp_pl_startdamage""250.0")    // Daño Minimo
    
cvar_end_damage register_cvar("zp_pl_enddamage""600.0")    // Daño Maximo
    
cvar_clip register_cvar("zp_pl_clip""15")    // Balas De Inicio
    
cvar_maxclip register_cvar("zp_pl_ammo""60")    // Municion Maxima
    
g_msgScreenShake get_user_msgid("ScreenShake")
    
set_cvar_num("sv_maxvelocity"8000)

    
RegisterHam(Ham_Weapon_PrimaryAttackgWeapon"fw_PrimaryAttack")
    
RegisterHam(Ham_Weapon_PrimaryAttackgWeapon"fw_PrimaryAttack_Post"1)
    
RegisterHam(Ham_Item_PostFramegWeapon"plasma_ItemPostFrame")
    
RegisterHam(Ham_Weapon_ReloadgWeapon"fw_Reload")
    
RegisterHam(Ham_Weapon_ReloadgWeapon"Reload_Post"1)
    
RegisterHam(Ham_Item_AddToPlayergWeapon"fw_item_addtoplayer"1)

    
register_forward(FM_SetModel"fw_SetModel")
    
register_forward(FM_PlaybackEvent"fwPlaybackEvent")
    
register_forward(FM_PrecacheEvent"fwPrecacheEvent_Post"1)
    
register_forward(FM_UpdateClientData"fw_UpdateClientData_Post"1)

    
register_touch(fire_classname"*""fw_touch_shot")
    
register_think(fire_classname"fw_think")
    
register_touch(poison_classname"*""fw_touch_poison")

    
register_concmd"obtener_arma""setweapon" );

    for (new 
1sizeof WEAPONENTNAMESi++)
    if (
WEAPONENTNAMES[i][0]) 
    
RegisterHam(Ham_Item_DeployWEAPONENTNAMES[i], "fw_Item_Deploy_Post"1)
}

public 
setweaponid )
{
    if( !
is_user_aliveid ) ) return;

    
drop_weaponsid);
    
g_has_itemid ] = true;
    new 
iWep2 fm_give_itemidgWeapon );

    if( 
iWep2 )
    {
        
cs_set_weapon_ammoiWep2get_pcvar_numcvar_clip ) );
        
cs_set_user_bpammoidCSW_WPN_POISONget_pcvar_numcvar_maxclip ) );
    }

    
UTIL_PlayWeaponAnimationidDRAW_ANIM );
    
emit_soundidCHAN_WEAPONg_sound[0], 1.0ATTN_NORM0PITCH_NORM );
}

public 
fwPrecacheEvent_Post(type, const name[])
{
    if (
equal("events/m3.sc"name))
    {
        
g_orig_event get_orig_retval()
        return 
FMRES_HANDLED
    
}
    return 
FMRES_IGNORED
}

public 
fw_UpdateClientData_Post(idsendweaponscd_handle)
{
        
    if(
get_user_weapon(id) != CSW_WPN_POISON || !g_has_item[id])
    return 
FMRES_IGNORED

    set_cd
(cd_handleCD_flNextAttackhalflife_time() + 0.001

    return 
FMRES_HANDLED
}

public 
fw_item_addtoplayer(entid)
{
    if(!
is_valid_ent(ent))
    return 
HAM_IGNORED

    
if(entity_get_int(entEV_INT_WEAPONKEY) == POISON_WEAPONKEY)
    {
        
g_has_item[id] = true;
        
entity_set_int(idEV_INT_impulse0)

        
replace_weapon_models(ident)
        return 
HAM_HANDLED
    
}

    return 
HAM_HANDLED
}

public 
client_connect(id)
g_has_item[id] = false

public client_disconnect(id)
g_has_item[id] = false

/*
public zp_user_infected_post(id)
{
    if (zp_get_user_zombie(id))
    g_has_item[id] = false
}
*/
public zp_user_humanized_post(id)
g_has_item[id] = false

public zp_extra_item_selected(iditemid)
{
    if(
itemid == g_itemid
    {
        
drop_weapons(id,1)
        
g_has_item[id] = true;
        new 
iWep2 fm_give_item(id,gWeapon)
        if( 
iWep2 )
        {
            
cs_set_weapon_ammo(iWep2get_pcvar_num(cvar_clip))
            
cs_set_user_bpammo (idCSW_WPN_POISONget_pcvar_num(cvar_maxclip))    
        }
        
UTIL_PlayWeaponAnimation (idDRAW_ANIM)
        
emit_sound(idCHAN_WEAPONg_sound[0], 1.0ATTN_NORM0PITCH_NORM)
    }
}

public 
fw_PrimaryAttack(Weapon)
{
    if (
g_has_item[pevWeaponpev_owner )]) 
    {
        
g_IsInPrimaryAttack 1
        
return HAM_SUPERCEDE;
    }
    return 
HAM_IGNORED;
}

public 
fwPlaybackEvent(flagsinvokereventidFloat:delayFloat:origin[3], Float:angles[3], Float:fparam1Float:fparam2iParam1iParam2bParam1bParam2)
{
    if ((
eventid != g_orig_event) || !g_IsInPrimaryAttack)
    return 
FMRES_IGNORED

    
if (!(<= invoker <= get_maxplayers()))
    return 
FMRES_IGNORED

    playback_event
(flags FEV_HOSTONLYinvokereventiddelayoriginanglesfparam1fparam2iParam1iParam2bParam1bParam2)
    return 
FMRES_SUPERCEDE
}

public 
fw_PrimaryAttack_Post(Weapon)
{
    
g_IsInPrimaryAttack 0
    
new Player get_pdata_cbase(Weapon414)

    new 
szClipszAmmo
    get_user_weapon
(PlayerszClipszAmmo)

    if(!
is_user_alive(Player))
    return

    if(
szClip == 0)
    return

    if(!
is_user_alive(Player))
    return

    if(
g_has_item[Player] || szClip >= 1)
    {
        
//set_pdata_float(Player , m_flNextAttack, OFFSET_TIME_ATTACK, PLAYER_LINUX_XTRA_OFF)
        
set_pdata_floatPlayer83OFFSET_TIME_ATTACK )
        
make_shoot(PlayerWeapon)
    }
}

public 
make_shoot(idWeapon)
{
    if(!
is_user_alive(id))
    return 
HAM_IGNORED;

    if(
get_user_weapon(id) != CSW_WPN_POISON)
    return 
HAM_IGNORED;

    if(!
g_has_item[id] || disc_opened[id])
    return 
HAM_IGNORED;

    new 
szClip
    get_user_weapon
(idszClip)

    if(
szClip >= 1)
    {
        new 
Float:Puch[3]
        
pev(idpev_punchanglePuch)
        
Puch[0]-=random_float(3.06.0)
        
cs_set_weapon_ammo(WeaponszClip-1)
        
emit_sound(idCHAN_WEAPONfire_sound1.0ATTN_NORM0PITCH_NORM)
        
UTIL_PlayWeaponAnimation(idrandom_num(SHOOT_ANIMSHOOT_ANIM2))
        
throw_fire(id)
        
set_pev(id,pev_punchangle,Puch)
    }
    return 
HAM_IGNORED;
}

public 
throw_fire(id)
{
    new 
iEnt create_entity("info_target")
    new 
Float:vfVelocity[3]

    
velocity_by_aim(id, (get_pcvar_num(cvar_shot_speed)*10), vfVelocity)

    
// add velocity of Owner for ent
    
new Float:vfAttack[3], Float:vfAngle[3], Float:vOfps[3]
    
get_weapon_attackment(idvfAttack20.0)
    
pev(idpev_view_ofsvOfps)
    
pev(idpev_anglesvfAngle)

    
// set info for ent
    
set_pev(iEntpev_movetypeMOVETYPE_FLY)
    
set_pev(iEntPEV_ENT_TIMEget_gametime() + 5.0)    // time remove
    
set_pev(iEntpev_classnamefire_classname)
    
engfunc(EngFunc_SetModeliEntfire_model_name)    //fire_model_name
    
set_pev(iEntpev_minsFloat:{-2.0, -2.0, -2.0})
    
set_pev(iEntpev_maxsFloat:{2.02.02.0})
    
set_pev(iEntpev_body2)
    
set_pev(iEntpev_originvfAttack)
    
set_pev(iEntpev_velocityvfVelocity)
    
set_pev(iEntpev_solidSOLID_BBOX)
    
set_pev(iEntpev_ownerid)
    
set_pev(iEntpev_iuser21)
    
set_pev(iEntpev_vuser1vfVelocity)
    
set_pev(iEntpev_anglesvfAngle)
    
set_pev(iEntpev_v_anglevOfps)

    
set_pev(iEntpev_rendermodekRenderTransAdd)
    
set_pev(iEntpev_renderamt130.0)

    
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
    
write_byte(TE_BEAMFOLLOW// TE id
    
write_short(iEnt// entity
    
write_short(fire_spr_nameid// sprite
    
write_byte(8// life
    
write_byte(6// width
    
write_byte(RED// r
    
write_byte(GREEN// g
    
write_byte(BLUE// b
    
write_byte(180// brightness
    
message_end()
    
set_task(OFFSET_TIME_ATTACK"RemoveDisk"id+2242)
}

public 
RemoveDisk(taskid)
{
    
disc_opened[taskid-2242] = false;
    
remove_task(taskid)
}

public 
fw_SetModel(entitymodel[])
{
    if(!
is_valid_ent(entity))
    return 
FMRES_IGNORED;

    static 
szClassName[33]
    
entity_get_string(entityEV_SZ_classnameszClassNamecharsmax(szClassName))

    if(!
equal(szClassName"weaponbox"))
    return 
FMRES_IGNORED;

    static 
iOwner

    iOwner 
entity_get_edict(entityEV_ENT_owner)

    if(
equal(model"models/w_m3.mdl"))
    {
        static 
iStoredSVDID

        iStoredSVDID 
find_ent_by_owner(ENG_NULLENTgWeaponentity)

        if(!
is_valid_ent(iStoredSVDID))
        return 
FMRES_IGNORED;

        if(
g_has_item[iOwner])
        {
            
entity_set_int(iStoredSVDIDEV_INT_WEAPONKEYPOISON_WEAPONKEY)

            
g_has_item[iOwner] = false

            entity_set_model
(entityw_model)

            return 
FMRES_SUPERCEDE;
        }
    }
    return 
FMRES_IGNORED;
}

public 
fw_think(iEnt)
{
    if(!
pev_valid(iEnt)) 
    return

    new 
Float:fFrameFloat:fScaleFloat:fNextThink
    pev
(iEntpev_framefFrame)
    
pev(iEntpev_scalefScale)

    
// effect exp
    
new iMoveType pev(iEntpev_movetype)
    if (
iMoveType == MOVETYPE_NONE)
    {
        
fNextThink 0.015
        fFrame 
+= 1.0
        fScale 
floatmax(fScale1.55)

        if (
fFrame 21.0)
        {
            
engfunc(EngFunc_RemoveEntityiEnt)
            return
        }
    }

    
// effect normal
    
else
    {
        
fNextThink 0.045
        fFrame 
+= 1.0
        fFrame 
floatmin(21.0fFrame)
        
fScale += 0.2
        fScale 
floatmin(fScale1.75)
    }

    
set_pev(iEntpev_framefFrame)
    
set_pev(iEntpev_scalefScale)
    
set_pev(iEntpev_nextthinkget_gametime() + fNextThink)

    
// time remove
    
static Float:fTimeRemove
    pev
(iEntpev_fuser1fTimeRemove)
    if (
get_gametime() >= fTimeRemove)
    {
        
engfunc(EngFunc_RemoveEntityiEnt)
        return;
    }
}

public 
fw_remove_poison(taskEnt)
{
    new 
Ent=taskEnt-1234
    
if(is_valid_ent(Ent)) engfunc(EngFunc_RemoveEntityEnt)
    
remove_task(taskEnt)
}

public 
fw_touch_poison(enttouch)
{
    
client_print(0print_center"Touch")
    if(
is_user_alive(touch))
    {
        static 
Float:CurTime
        CurTime 
get_gametime()

        if(
CurTime 1.0 g_poison_touch[touch])
        {
            new 
Owner pev(entpev_owner)
            
ExecuteHamB(Ham_TakeDamagetouchOwnertouch50.0DMG_BLAST)
            
set_pev(touchpev_maxspeed20.0)    

            
g_poison_touch[touch] = CurTime
        
}
    }
}

public 
fw_touch_shot(entid)
{
    
emit_sound(entCHAN_ITEMg_sound[3], 1.0ATTN_NORM0PITCH_NORM)
    new 
Float:vOrigin[3]
    
pev(entpev_originvOrigin);

    new 
classname[1024]
    
pev(idpev_classnameclassnamecharsmax(classname))
    if(
equal(classname"func_wall") || equal(classname"func_breakable") || equal(classname"worldspawn")) {
        new 
Gent create_entity("info_target")

        
set_pev(Gentpev_ownerpev(entpev_owner))
        new 
Float:maxs[3] = {40.040.025.0}
        new 
Float:mins[3] = {-40.0, -40.0, -25.0}
        
entity_set_size(Gentminsmaxs)
        
set_pev(Gentpev_classnamepoison_classname)
        
engfunc(EngFunc_SetModelGentfire_poison)

        new    
Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3],
        
Float:vTraceEnd[3],Float:vEntAngles[3];

        
pev(entget_pcvar_num(cvar_movetype) ? pev_velocity pev_vuser1vTraceDirection)

        
xs_vec_add(vTraceDirectionvOriginvTraceEnd);

        
engfunc(EngFunc_TraceLinevOriginvTraceEndDONT_IGNORE_MONSTERSent0);

        new 
Float:fFraction;
        
get_tr2(0TR_flFractionfFraction);

        
// -- We hit something!
        
if(fFraction 1.0)
        {
            
// -- Save results to be used later.
            
get_tr2(0TR_vecEndPosvTraceEnd);

            
get_tr2(0TR_vecPlaneNormalvNormal);
        }
        
xs_vec_add(vTraceEndvNormalvNewOrigin);

        
vector_to_angle(vNormal,vEntAngles);
        
vEntAngles[0]-=90.0

        set_pev
(Gent,pev_angles,vEntAngles);
        
set_pev(Gentpev_originvNewOrigin)

        
set_pev(Gentpev_rendermodekRenderTransAdd)
        
set_pev(Gentpev_renderamt160.0)

        
set_pev(Gentpev_solidSOLID_SLIDEBOX)
        
set_pev(Gentpev_movetypeMOVETYPE_NONE)

        
effect_play_sprite(vOrigin40.0)

        
set_task(TIME_POISON"fw_remove_poison"Gent+1234)
        
remove_entity(ent)
        return 
FMRES_IGNORED
    
}

    if(!
is_valid_ent(id))
    return 
FMRES_IGNORED

    
if(!is_user_alive(id) || !is_user_connected(id)) {
        
remove_entity(ent)
        return 
FMRES_IGNORED
    
}

    if(
pev(entpev_iuser2) == 1)
    {
        
set_pev(entpev_iuser20)
        
pev(idpev_originvOrigin)
        
effect_play_sprite(vOrigin30.0)

        
message_begin (MSG_BROADCAST,SVC_TEMPENTITY)
        
write_byteTE_SPRITETRAIL // Throws a shower of sprites or models
        
write_coordfloatround(vOrigin]) ) // start pos
        
write_coordfloatround(vOrigin]) )
        
write_coordfloatround(vOrigin]) )
        
write_coordfloatround(vOrigin]) ) // velocity
        
write_coordfloatround(vOrigin]) )
        
write_coordfloatround(vOrigin]) +20)
        
write_short(sprite_ability // spr
        
write_byte(18// (count)
        
write_byte(random_num(8,15)) // (life in 0.1's)
        
write_byte(4// byte (scale in 0.1's)
        
write_byte(random_num(22,35)) // (velocity along vector in 10's)
        
write_byte(20// (randomness of velocity in 10's)
        
message_end()

        static 
attacker

        attacker 
pev(entpev_owner)

        if(!
fm_get_user_godmode(id)) {
            new 
Float:velocity[3]
            
pev(entpev_vuser1velocity)
            
velocity[2]+=30.0
            xs_vec_mul_scalar
(velocity1000.0/xs_vec_len(velocity), velocity)

            
ExecuteHam(Ham_TakeDamageid"poison_launcher"attackerrandom_float(get_pcvar_float(cvar_start_damage), get_pcvar_float(cvar_end_damage)), DMG_BULLET)
            
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("Damage"), _id)
            
write_byte(0// damage save
            
write_byte(0// damage take
            
write_long(DMG_POISON// damage type
            
write_coord(0// x
            
write_coord(0// y
            
write_coord(0// z
            
message_end()

            
user_screen_shake(id425)
            
do_screen_fade(id0.80.7REDGREENBLUE180);

            
set_pev(idpev_velocityvelocity)
            
gPoisonGlow[id] = get_gametime() + 1.0;
            
gGlowPlayer[id] = true;

            
fm_set_rendering(idkRenderFxGlowShellREDGREENBLUEkRenderNormal25)
        }
        
remove_entity(ent)
        return 
FMRES_IGNORED
    
}

    return 
FMRES_IGNORED
}


public 
client_PostThink(id)
{
    if (!
is_user_alive(id)) return;

    if(
gGlowPlayer[id]) {
        if(
gPoisonGlow[id]>get_gametime())
        return

        
set_pev(idpev_maxspeed100.0// prevent from moving
        
set_pev(idpev_renderfx0)    
        
gGlowPlayer[id] = false;    
    }
}

effect_play_sprite(const Float:vOrigin[3], Float:Add)
{
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYvOrigin0)
    
write_byte(TE_SPRITE)
    
engfunc(EngFunc_WriteCoordvOrigin[0])
    
engfunc(EngFunc_WriteCoordvOrigin[1])
    
engfunc(EngFunc_WriteCoordvOrigin[2] + Add)
    
write_short(fire_spr_id)
    
write_byte(8)
    
write_byte(200)
    
message_end()
}

public 
fw_Item_Deploy_Post(weapon_ent)
{
    static 
owner
    owner 
fm_cs_get_weapon_ent_owner(weapon_ent)

    static 
weaponid
    weaponid 
cs_get_weapon_id(weapon_ent)

    
replace_weapon_models(ownerweaponid)
}

replace_weapon_models(idweaponid)
{
    switch (
weaponid)
    {
        case 
CSW_WPN_POISON:
        {
            
//if (!avp_get_user_predator(id))
            //    return

            
if(g_has_item[id])
            {
                
set_pev(idpev_viewmodel2v_model)
                
set_pev(idpev_weaponmodel2p_model)
                
UTIL_PlayWeaponAnimation (idDRAW_ANIM)
                
emit_sound(idCHAN_WEAPONg_sound[0], 1.0ATTN_NORM0PITCH_NORM)
                
//set_pdata_float(id, m_flNextAttack, 1.3, PLAYER_LINUX_XTRA_OFF)
            
}
        }
    }
    
oldweap[id] = weaponid
}

public 
plasma_ItemPostFrame(weapon_entity
{
    new 
id pev(weapon_entitypev_owner)
    if (!
is_user_connected(id))
    return 
HAM_IGNORED

    
if (!g_has_item[id])
    return 
HAM_IGNORED

    
static iClipExtra

    iClipExtra 
get_pcvar_num(cvar_clip)
    new 
Float:flNextAttack get_pdata_float(idm_flNextAttackPLAYER_LINUX_XTRA_OFF)

    new 
iBpAmmo cs_get_user_bpammo(idCSW_WPN_POISON)
    new 
iClip get_pdata_int(weapon_entitym_iClipWEAP_LINUX_XTRA_OFF)

    new 
fInReload get_pdata_int(weapon_entitym_fInReloadWEAP_LINUX_XTRA_OFF

    if( 
fInReload && flNextAttack <= 0.0 )
    {
        new 
min(iClipExtra iClipiBpAmmo)

        
set_pdata_int(weapon_entitym_iClipiClip jWEAP_LINUX_XTRA_OFF)
        
cs_set_user_bpammo(idCSW_WPN_POISONiBpAmmo-j)

        
set_pdata_int(weapon_entitym_fInReload0WEAP_LINUX_XTRA_OFF)
        
fInReload 0
    
}
    return 
HAM_IGNORED
}

public 
fw_Reload(weapon_entity
{
    new 
id pev(weapon_entitypev_owner)
    if (!
is_user_connected(id))
    return 
HAM_IGNORED

    
if (!g_has_item[id])
    return 
HAM_IGNORED

    
static iClipExtra

    
if(g_has_item[id])
    
iClipExtra get_pcvar_num(cvar_clip)

    
g_TmpClip[id] = -1

    
new iBpAmmo cs_get_user_bpammo(idCSW_WPN_POISON)
    new 
iClip get_pdata_int(weapon_entitym_iClipWEAP_LINUX_XTRA_OFF)

    if (
iBpAmmo <= 0)
    return 
HAM_SUPERCEDE

    
if (iClip >= iClipExtra)
    return 
HAM_SUPERCEDE

    g_TmpClip
[id] = iClip

    
return HAM_IGNORED
}

public 
Reload_Post(weapon_entity
{
    new 
id pev(weapon_entitypev_owner)

    if (!
is_user_connected(id))
    return 
HAM_IGNORED

    
if (!g_has_item[id])
    return 
HAM_IGNORED

    
if (g_TmpClip[id] == -1)
    return 
HAM_IGNORED

    set_pdata_int
(weapon_entitym_iClipg_TmpClip[id], WEAP_LINUX_XTRA_OFF)
    
set_pdata_float(weapon_entitym_flTimeWeaponIdleWPN_RELOAD_TIMEWEAP_LINUX_XTRA_OFF)
    
set_pdata_float(idm_flNextAttackWPN_RELOAD_TIMEPLAYER_LINUX_XTRA_OFF)
    
set_pdata_int(weapon_entitym_fInReload1WEAP_LINUX_XTRA_OFF)
    
UTIL_PlayWeaponAnimation(idRELOAD_ANIM)

    return 
HAM_IGNORED
}

stock fm_cs_get_current_weapon_ent(id)
{
    return 
get_pdata_cbase(idOFFSET_ACTIVE_ITEMOFFSET_LINUX)
}

stock fm_cs_get_weapon_ent_owner(ent)
{
    return 
get_pdata_cbase(ent414)
}

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

    
message_begin(MSG_ONE_UNRELIABLESVC_WEAPONANIM, .player Player)
    
write_byte(Sequence)
    
write_byte(pev(Playerpev_body))
    
message_end()
}

user_screen_shake(idamplitude 4duration 2frequency 10)
{
    
message_begin(MSG_ONE_UNRELIABLEg_msgScreenShake_id)
    
write_short((1<<12)*amplitude// ??
    
write_short((1<<12)*duration// ??
    
write_short((1<<12)*frequency// ??
    
message_end()
}

stock do_screen_fadeidFloat:fadeTimeFloat:holdTimeredgreenbluealphatype 0x0000 )
{
    static 
msgScreenFade;
    if ( !
msgScreenFade ) { msgScreenFade get_user_msgid"ScreenFade" ); }
    new 
fadehold;
    
fade clampfloatroundfadeTime float(1<<12)), 00xFFFF );
    
hold clampfloatroundholdTime float(1<<12)), 00xFFFF );
    
message_beginMSG_ONE_UNRELIABLEmsgScreenFade_id );
    
write_shortfade );
    
write_shorthold );
    
write_shorttype );
    
write_bytered );
    
write_bytegreen );
    
write_byteblue );
    
write_bytealpha );
    
message_end( );
}

stock get_weapon_attackment(idFloat:output[3], Float:fDis 40.0)
{
     
    new 
Float:vfEnd[3], viEnd[3
    
get_user_origin(idviEnd3
    
IVecFVec(viEndvfEnd

    new 
Float:fOrigin[3], Float:fAngle[3]

    
pev(idpev_originfOrigin
    
pev(idpev_view_ofsfAngle)

    
xs_vec_add(fOriginfAnglefOrigin

    new 
Float:fAttack[3]

    
xs_vec_sub(vfEndfOriginfAttack)
    
xs_vec_sub(vfEndfOriginfAttack

    new 
Float:fRate

    fRate 
fDis vector_length(fAttack)
    
xs_vec_mul_scalar(fAttackfRatefAttack)

    
xs_vec_add(fOriginfAttackoutput)
}

stock drop_weapons(iddropwhat)
{
    static 
weapons[32], numiweaponid
    num 
0
    get_user_weapons
(idweaponsnum)

    for (
0numi++)
    {
        
weaponid weapons[i]

        if ((
dropwhat == && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (dropwhat == && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM)))
        {
            static 
wname[32]
            
get_weaponname(weaponidwnamesizeof wname 1)
            
engclient_cmd(id"drop"wname)
        }
    }


Listo, en la consola pones "obtener_arma" y te va a dar el arma.

Responder
#8
[/quote]

grasias enverda te lo agradesto Gran sonrisa RainbowRainbowExcitedeyesVictoryTruestoryCorazón

y esto tengo una pregunta podrias canbiar de zp a modo otma estre plugin
el cual es el svdex porque eres muy proRainbowRainbow
y me enseñaria a ser como tu¿
solo se editar svars pero podrias desmotrarme tus conosimietos¿¿

aqui el codigo porfavor ponlo a modo normal y que no se me salga del cs
si no es molestia Roflmao


[PHP]

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

#define TASK_SHOW_AMMO 111111

new const weapon_classname[] = "svdex"
new const w_model[] = "models/zombie_plague/w_svdex.mdl"
new const p_model[] = "models/zombie_plague/p_svdex.mdl"
new const v_model1[] = "models/zombie_plague/v_svdex.mdl"
new const v_model2[] = "models/zombie_plague/v_svdex_2.mdl"
new const grenade_model[] = "models/zombie_plague/s_svdex.mdl"

new const grenade_exp_spr[] = "sprites/zombie_plague/explode_nade.spr"
new const grenade_exp_sound[] = "weapons/svdex_exp.wav"
new const grenade_launch_sound[] = "weapons/svdex_shoot2.wav"

new bool:g_has_ak47launcher[33]
new ak47_mode[33]
new bool:no_draw_other[33]
new bool:is_changing[33]
new Float:last_press[33]
new Float:cl_pushangle[33]

new g_grenade[33]
new g_nodrop[33]
new g_trail, exp_spr

// Cvars
new cvar_default_mode, cvar_radius
new cvar_ammo_default, cvar_normal_dmg, cvar_launch_dmg
new cvar_speed, cvar_recoil

// Weapon entity names
new const WEAPONENTNAMES[][] = {
"weapon_p228", "weapon_scout", "weapon_hegrenade", "weapon_xm1014",
"weapon_c4", "weapon_mac10", "weapon_aug", "weapon_smokegrenade", "weapon_elite",
"weapon_fiveseven", "weapon_ump45", "weapon_sg550", "weapon_galil", "weapon_famas",
"weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle",
"weapon_sg552", "weapon_ak47", "weapon_knife", "weapon_p90"
}

new g_ak47launcher

public plugin_init()
{
register_plugin("[ZP] Extra Item: SvDex", "1.0", "Dias")

// Events
register_event("CurWeapon", "event_curweapon", "be", "1=1")
register_event("DeathMsg", "event_death", "a")
register_event("HLTV", "event_newround", "a", "1=0", "2=0")
RegisterHam(Ham_Spawn, "player", "fw_spawn_post", 1)
for(new i = 0 ; i < sizeof WEAPONENTNAMES; i++)
register_clcmd(WEAPONENTNAMES[i], "fw_changeweapon")
register_clcmd("lastinv", "fw_changeweapon")
RegisterHam(Ham_Item_Deploy, "weapon_ak47", "fw_ak47_deploy_post", 1)

// Forward
register_forward(FM_CmdStart, "fw_cmdstart")
register_touch("svdex_grenade", "*", "fw_touch")
RegisterHam(Ham_TakeDamage, "player", "fw_takedmg")

RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "fw_primary_attack")
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "fw_primary_attack_post",1)

// Cvars
cvar_default_mode = register_cvar("zp_svdex_launcher_default_mode", "1")
cvar_radius = register_cvar("zp_svdex_launcher_radius", "200.0")

cvar_speed = register_cvar("zp_svdex_normal_speed", "5.5")
cvar_recoil = register_cvar("zp_svdex_normal_recoil", "0.5")
cvar_normal_dmg = register_cvar("zp_svdex_normal_dmg", "4.5")

cvar_ammo_default = register_cvar("zp_svdex_launcher_ammo", "10")
cvar_launch_dmg = register_cvar("zp_svdex_launcher_dmg", "650")

register_clcmd("drop", "cmd_drop", 0)

g_ak47launcher = zp_register_extra_item("SvDex (2 Mode)", 40, ZP_TEAM_HUMAN)
}

public plugin_precache()
{
engfunc(EngFunc_PrecacheModel, w_model)
engfunc(EngFunc_PrecacheModel, p_model)
engfunc(EngFunc_PrecacheModel, v_model1)
engfunc(EngFunc_PrecacheModel, v_model2)

engfunc(EngFunc_PrecacheModel, grenade_model)
engfunc(EngFunc_PrecacheSound, grenade_exp_sound)
engfunc(EngFunc_PrecacheSound, grenade_launch_sound)

precache_sound("weapons/svdex_shoot1.wav")
precache_sound("weapons/svdex_clipin.wav")
precache_sound("weapons/svdex_clipon.wav")
precache_sound("weapons/svdex_clipout.wav")
precache_sound("weapons/svdex_draw.wav")

g_trail = engfunc(EngFunc_PrecacheModel, "sprites/smoke.spr")
exp_spr = engfunc(EngFunc_PrecacheModel, grenade_exp_spr)
}

public zp_extra_item_selected(id, item)
{
if(item != g_ak47launcher)
return PLUGIN_HANDLED

if(!g_has_ak47launcher[id])
{
g_has_ak47launcher[id] = true

ak47_mode[id] = get_pcvar_num(cvar_default_mode)
g_grenade[id] = get_pcvar_num(cvar_ammo_default)
cs_set_user_bpammo(id, CSW_AK47, 250)

give_item(id, "weapon_ak47")
}

return PLUGIN_CONTINUE
}

public fw_changeweapon(id)
{
if(no_draw_other[id])
return PLUGIN_HANDLED

return PLUGIN_CONTINUE
}

public fw_ak47_deploy_post(ent)
{
static id
id = pev(ent, pev_owner)

if(!is_user_alive(id) || !is_user_connected(id))
return HAM_IGNORED

if(get_user_weapon(id) == CSW_AK47 && g_has_ak47launcher[id] && ak47_mode[id] == 2)
set_task(0.2, "show_ammo", id+TASK_SHOW_AMMO)

return HAM_HANDLED
}

public fw_takedmg(victim, inflictor, attacker, Float:damage, damagebits)
{
if(!is_user_connected(victim) || !is_user_connected(attacker))
return HAM_IGNORED

if(get_user_weapon(attacker) == CSW_AK47 && g_has_ak47launcher[attacker] && ak47_mode[attacker] == 1)
{
SetHamParamFloat(4, damage * get_pcvar_float(cvar_normal_dmg))
}

return HAM_HANDLED
}

//for recoil and sound...
public fw_primary_attack(ent)
{
new id = pev(ent,pev_owner)
pev(id,pev_punchangle, cl_pushangle[id])
return HAM_IGNORED
}
public fw_primary_attack_post(ent)
{
new id = pev(ent,pev_owner)
new clip, ammo
new weap = get_user_weapon( id, clip, ammo )
if(weap == CSW_AK47 && g_has_ak47launcher[id])
{
new Float:push[3]
pev(id,pev_punchangle,push)
xs_vec_sub(push,cl_pushangle[id],push)
xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil),push)
xs_vec_add(push,cl_pushangle[id],push)
set_pev(id,pev_punchangle,push)
if( clip > 0)
{
ExecuteHamB(Ham_Weapon_PlayEmptySound, ent)
emit_sound(id, CHAN_AUTO, "weapons/svdex_shoot1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}

return HAM_IGNORED
}

public event_newround(id)
{
for(new i = 0; i < get_maxplayers(); i++)
{
g_nodrop[i] = false
no_draw_other[i] = false
}

for(new i = 0; i < entity_count(); i++)
{
static ent
ent = find_ent_by_class(-1, weapon_classname)

remove_entity(ent)
}
}

public cmd_drop(id)
{
new plrClip, plrAmmo
new plrWeapId
plrWeapId = get_user_weapon(id, plrClip , plrAmmo)

if(plrWeapId == CSW_AK47 && g_has_ak47launcher[id] && is_user_alive(id))
{
if(g_nodrop[id])
{
return PLUGIN_HANDLED
} else {
no_draw_other[id] = false
create_w_class(id, plrClip, plrAmmo, 1)
return PLUGIN_HANDLED
}
}

return PLUGIN_CONTINUE
}

public create_w_class(id, clip, ammo, type)
{
new Float:Aim[3],Float:origin[3]
VelocityByAim(id, 64, Aim)
entity_get_vector(id,EV_VEC_origin,origin)

if (type == 1) {
origin[0] += 2*Aim[0]
origin[1] += 2*Aim[1]
}

new ent = create_entity("info_target")
entity_set_string(ent,EV_SZ_classname, weapon_classname)
entity_set_model(ent, w_model)

entity_set_size(ent,Float:{-2.0,-2.0,-2.0},Float:{5.0,5.0,5.0})
entity_set_int(ent,EV_INT_solid,1)

entity_set_int(ent,EV_INT_movetype,6)
entity_set_int(ent, EV_INT_iuser1, clip)
entity_set_int(ent, EV_INT_iuser2, ammo)
entity_set_int(ent, EV_INT_iuser3, g_grenade[id])
entity_set_vector(ent,EV_VEC_origin, origin)
g_has_ak47launcher[id] = false
remove_gun(id)
}

public pfn_touch(ptr, ptd) {
if(is_valid_ent(ptr)) {

new classname[32]
entity_get_string(ptr,EV_SZ_classname,classname,31)
if(equal(classname, weapon_classname)) {
if(is_valid_ent(ptd)) {
new id = ptd
if(id > 0 && id < 34) {
if(!g_has_ak47launcher[id] && is_user_alive(id)) {
give_weapon(id,entity_get_int(ptr, EV_INT_iuser1), entity_get_int(ptr, EV_INT_iuser2))
g_grenade[id] = entity_get_int(ptr, EV_INT_iuser3)
remove_entity(ptr)
}
}
}
}
}
}

public remove_gun(id) {
new wpnList[32]
new number
get_user_weapons(id,wpnList,number)
for (new i = 0;i < number ;i++) {
if (wpnList[i] == CSW_AK47) {
fm_strip_user_gun(id, wpnList[i])
}
}
}

public give_weapon(id, clip, ammo){
g_has_ak47launcher[id] = true
give_item(id, "weapon_ak47")
cs_set_user_bpammo(id, CSW_AK47, ammo)
new ent = get_weapon_ent(id, CSW_AK47)
cs_set_weapon_ammo(ent, clip)

}

public event_curweapon(id)
{
if (!is_user_alive(id))
return PLUGIN_HANDLED

static CurWeapon
CurWeapon = read_data(2)

if(CurWeapon == CSW_AK47 && g_has_ak47launcher[id])
{
if(ak47_mode[id] == 1)
{
static weapon_ent
weapon_ent = get_weapon_ent(id, CurWeapon)

if(weapon_ent)
{
static FloatGran sonrisaelay
Delay = get_pdata_float(weapon_ent, 46, 4) * get_pcvar_float(cvar_speed)
if (Delay > 0.0)
set_pdata_float(weapon_ent, 46, Delay, 4)
}

set_pev(id, pev_viewmodel2, v_model1)
} else if(ak47_mode[id] == 2) {
set_pev(id, pev_viewmodel2, v_model2)
}

set_pev(id, pev_weaponmodel2, p_model)
}

return PLUGIN_CONTINUE
}

public event_death()
{
new id = read_data(2)

new plrClip, plrAmmo
get_user_weapon(id, plrClip , plrAmmo)

if(g_has_ak47launcher[id])
{
create_w_class(id, plrClip, plrAmmo, 0)
g_has_ak47launcher[id] = false

if(ak47_mode[id] == 2)
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
write_byte(0)
message_end()
}

return PLUGIN_HANDLED
}

return PLUGIN_CONTINUE
}

public fw_spawn_post(id)
{
if(g_has_ak47launcher[id])
{
g_has_ak47launcher[id] = false
}
g_grenade[id] = 0
g_nodrop[id] = false

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
write_byte(0)
message_end()
}

public zp_user_infected_post(id)
{
if(g_has_ak47launcher[id])
{
g_has_ak47launcher[id] = false
}

g_grenade[id] = 0
g_nodrop[id] = false
no_draw_other[id] = false

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
write_byte(0)
message_end()
}

public fw_cmdstart(id, uc_handle, seed)
{
if(!is_user_alive(id) || !g_has_ak47launcher[id] || get_user_weapon(id) != CSW_AK47)
return FMRES_IGNORED

if(is_changing[id])
return FMRES_IGNORED

static Button, Float:Time, fInReload, ent

Button = get_uc(uc_handle, UC_Buttons)
Time = get_gametime()
ent = find_ent_by_owner(-1, "weapon_ak47", id)
fInReload = get_pdata_int(ent, 54, 4)

if(fInReload)
{
no_draw_other[id] = true
return FMRES_IGNORED
} else {
no_draw_other[id] = false
}

if(Button & IN_ATTACK2)
{
if(ak47_mode[id] == 1)
{
is_changing[id] = true
no_draw_other[id] = true
g_nodrop[id] = true

play_weapon_anim(id, 6)
set_player_nextattack(id, 1.8)

new task[2]
task[0] = id
task[1] = 2
set_task(1.8, "change_complete", _, task, sizeof(task))

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
write_byte((1<<6))
message_end()

} else if(ak47_mode[id] == 2) {
is_changing[id] = true
no_draw_other[id] = true
g_nodrop[id] = true

play_weapon_anim(id, 6)
set_player_nextattack(id, 1.8)

new task[2]
task[0] = id
task[1] = 1
set_task(1.8, "change_complete", _, task, sizeof(task))
}
}

if(Button & IN_RELOAD)
{
if(is_changing[id])
{
Button &= ~IN_RELOAD
set_uc(uc_handle, UC_Buttons, Button)
}
} else if(Button & IN_ATTACK) {
if(Time - 3.0 > last_press[id] && ak47_mode[id] == 2)
{
set_player_nextattack(id, 999999.0)

launch_grenade(id)
last_press[id] = Time
}
}

return FMRES_HANDLED
}

public fw_touch(grenade, id)
{
if(!pev_valid(grenade))
return FMRES_IGNORED

// Get it's origin
static Float:Origin[3]
pev(grenade, pev_origin, Origin)

// Explosion
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0)
write_byte(TE_EXPLOSION)
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2])
write_short(exp_spr)
write_byte(40)
write_byte(30)
write_byte(0)
message_end()

static owner, iVictim

iVictim = -1
owner = pev(grenade, pev_owner)

while((iVictim = find_ent_in_sphere(iVictim, Origin, get_pcvar_float(cvar_radius))) != 0)
{
if((0 < iVictim < 32) && is_user_alive(iVictim) && zp_get_user_zombie(iVictim))
{
new Damage
Damage = get_pcvar_num(cvar_launch_dmg)

ExecuteHam(Ham_TakeDamage, iVictim, 0, owner, 0, DMG_BULLET)
static health
health = get_user_health(iVictim)

if(health - Damage >= 1)
{
set_user_health(iVictim, health - Damage)
make_knockback(iVictim, Origin, 2.0 * Damage)
}
else
{
death_message(owner, iVictim, "grenade", 1)
}
}
}

emit_sound(grenade, CHAN_VOICE, grenade_exp_sound, 1.0, ATTN_NORM, 0, PITCH_NORM)


// Remove grenade
engfunc(EngFunc_RemoveEntity, grenade)

/*
for(new i = 0; i < get_maxplayers(); i++)
{
if(is_user_alive(i) && is_user_connected(i))
{
static Float:Origin2[3], Float:distance_f

pev(i, pev_origin, Origin2)
distance_f = get_distance_f(Origin, Origin2)

if (distance_f <= get_pcvar_float(cvar_radius))
{
new Damage
Damage = get_pcvar_num(cvar_launch_dmg)

ExecuteHamB(Ham_TakeDamage, i, "grenade", owner, Damage, DMG_BLAST)
emit_sound(owner, CHAN_VOICE, grenade_exp_sound, 1.0, ATTN_NORM, 0, PITCH_NORM)

if(!zp_get_user_zombie(i))
return FMRES_IGNORED
if(i == owner)
return FMRES_IGNORED

static health
health = get_user_health(i)

if(health - Damage >= 1)
{
set_user_health(i, health - Damage)
make_knockback(i, Origin, 2.0 * Damage)
}
else
{
death_message(owner, i, "grenade", 1)
Origin2[2] -= 45.0
}
}
}
}*/

return FMRES_HANDLED
}

public launch_grenade(id)
{
if(g_grenade[id] <= 0)
{
client_print(id, print_center, "[Out Of Ammo]")
return PLUGIN_HANDLED
}

play_weapon_anim(id, random_num(3, 5))

new Float:Origin[3], Float:Velocity[3], FloatpacmanAngle[3], Ent

entity_get_vector(id, EV_VEC_origin , Origin)
entity_get_vector(id, EV_VEC_v_angle, vAngle)
Origin[2] = Origin[2] + 10

Ent = create_entity("info_target")
if (!Ent) return PLUGIN_HANDLED

entity_set_string(Ent, EV_SZ_classname, "svdex_grenade")
entity_set_model(Ent, grenade_model)

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

entity_set_origin(Ent, Origin)
entity_set_vector(Ent, EV_VEC_angles, vAngle)

entity_set_int(Ent, EV_INT_effects, 2)
entity_set_int(Ent, EV_INT_solid, 1)
entity_set_int(Ent, EV_INT_movetype, 10)
entity_set_edict(Ent, EV_ENT_owner, id)

VelocityByAim(id, 2500 , Velocity)
entity_set_vector(Ent, EV_VEC_velocity ,Velocity)

//sound when lauch...
emit_sound(id,CHAN_VOICE, grenade_launch_sound, 1.0, ATTN_NORM, 0, PITCH_NORM)

g_grenade[id]--

message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
write_byte(TE_BEAMFOLLOW)
write_short(Ent)
write_short(g_trail)
write_byte(10)
write_byte(5)
write_byte(255)
write_byte(255)
write_byte(255)
write_byte(100)
message_end()

if(g_grenade[id] <= 0)
{
client_print(id, print_center, "Out Of Ammo... Switch to Auto-Mode !!!")

is_changing[id] = true
no_draw_other[id] = true

play_weapon_anim(id, 6)
set_player_nextattack(id, 1.8)

new task[2]
task[0] = id
task[1] = 1
set_task(1.8, "change_complete", _, task, sizeof(task))
} else {
client_print(id, print_center, "Reloading... Please Wait !!!")
}

return PLUGIN_CONTINUE
}

public change_complete(task[])
{
static id, mode_change
id = task[0]
mode_change = task[1]

if(mode_change == 1)
{
new ent = find_ent_by_owner(-1, "weapon_ak47", id)
ExecuteHam(Ham_Item_Deploy, ent)
set_pev(id, pev_viewmodel2, v_model1)
play_weapon_anim(id, 0)

ak47_mode[id] = 1
client_print(id, print_center, "[Switch to Auto-Mode ]")

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
write_byte(0)
message_end()

} else if(mode_change == 2) {

new ent = find_ent_by_owner(-1, "weapon_ak47", id)
ExecuteHam(Ham_Item_Deploy, ent)
set_pev(id, pev_viewmodel2, v_model2)
play_weapon_anim(id, 0)
set_player_nextattack(id, 999999.0)

ak47_mode[id] = 2
client_print(id, print_center, "[Switch to Launcher-Mode]")

set_task(0.2, "show_ammo", id+TASK_SHOW_AMMO, _, _, "b")
}
g_nodrop[id] = false
set_pev(id, pev_weaponmodel2, p_model)

is_changing[id] = false
no_draw_other[id] = false
}

public play_weapon_anim(player, anim)
{
set_pev(player, pev_weaponanim, anim)
message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, player)
write_byte(anim)
write_byte(pev(player, pev_body))
message_end()
}

public set_player_nextattack(id, Float:nexttime)
{
set_pdata_float(id, 83, nexttime, 5)
}

public make_knockback(id, Float:Origin[3], Float:maxspeed)
{
// Get and set velocity
new Float:fVelocity[3]
kickback(id, Origin, maxspeed, fVelocity)

entity_set_vector(id, EV_VEC_velocity, fVelocity)
}

stock kickback(ent, Float:fOrigin[3], Float:fSpeed, Float:fVelocity[3])
{
// Find origin
new Float:fEntOrigin[3];
entity_get_vector( ent, EV_VEC_origin, fEntOrigin );

// Do some calculations
new Float:fDistance[3];
fDistance[0] = fEntOrigin[0] - fOrigin[0];
fDistance[1] = fEntOrigin[1] - fOrigin[1];
fDistance[2] = fEntOrigin[2] - fOrigin[2];
new Float:fTime = (vector_distance( fEntOrigin,fOrigin ) / fSpeed);
fVelocity[0] = fDistance[0] / fTime;
fVelocity[1] = fDistance[1] / fTime;
fVelocity[2] = fDistance[2] / fTime;

return (fVelocity[0] && fVelocity[1] && fVelocity[2]);
}

// Death message
public death_message(Killer, Victim, const Weapon[], ScoreBoard)
{
// Block death msg
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET)
ExecuteHamB(Ham_Killed, Victim, Killer, 2)
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT)

// Death
make_deathmsg(Killer, Victim, 0, Weapon)

// Update score board
if (ScoreBoard)
{
message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"))
write_byte(Killer) // id
write_short(pev(Killer, pev_frags)) // frags
write_short(cs_get_user_deaths(Killer)) // deaths
write_short(0) // class?
write_short(get_user_team(Killer)) // team
message_end()

message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"))
write_byte(Victim) // id
write_short(pev(Victim, pev_frags)) // frags
write_short(cs_get_user_deaths(Victim)) // deaths
write_short(0) // class?
write_short(get_user_team(Victim)) // team
message_end()
}
}

public show_ammo(taskid)
{
new id = taskid - TASK_SHOW_AMMO

if(get_user_weapon(id) == CSW_AK47 && g_has_ak47launcher[id] && ak47_mode[id] == 2)
{
static Message[32]
formatex(Message, sizeof(Message), "Grenade Ammo: %i/%i", g_grenade[id], get_pcvar_num(cvar_ammo_default))

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("StatusText"), {0,0,0}, id)
write_byte(0)
write_string(Message)
message_end()
} else {

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("StatusText"), {0,0,0}, id)
write_byte(0)
write_string("")
message_end()
remove_task(id+TASK_SHOW_AMMO)
}
}

stock get_weapon_ent(id,wpnid=0,wpnName[]="")
{
static newName[24]

if(wpnid) get_weaponname(wpnid,newName,23)
else formatex(newName,23,"%s",wpnName)

if(!equal(newName,"weapon_",7))
format(newName,23,"weapon_%s",newName)

return fm_find_ent_by_owner(get_maxplayers(),newName,id)
}

[/quote]

grasias enverda te lo agradesto Gran sonrisa RainbowRainbowExcitedeyesVictoryTruestoryCorazón

y esto tengo una pregunta podrias canbiar de zp a modo otma estre plugin
el cual es el svdex porque eres muy proRainbowRainbow
y me enseñaria a ser como tu¿
solo se editar svars pero podrias desmotrarme tus conosimietos¿¿

aqui el codigo porfavor ponlo a modo normal y que no se me salga del cs
si no es molestia Roflmao

no se poner eso de codigo PHP y que saga e un cuadro pacman
codigo PHP




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

#define TASK_SHOW_AMMO 111111

new const weapon_classname[] = "svdex"
new const w_model[] = "models/zombie_plague/w_svdex.mdl"
new const p_model[] = "models/zombie_plague/p_svdex.mdl"
new const v_model1[] = "models/zombie_plague/v_svdex.mdl"
new const v_model2[] = "models/zombie_plague/v_svdex_2.mdl"
new const grenade_model[] = "models/zombie_plague/s_svdex.mdl"

new const grenade_exp_spr[] = "sprites/zombie_plague/explode_nade.spr"
new const grenade_exp_sound[] = "weapons/svdex_exp.wav"
new const grenade_launch_sound[] = "weapons/svdex_shoot2.wav"

new bool:g_has_ak47launcher[33]
new ak47_mode[33]
new bool:no_draw_other[33]
new bool:is_changing[33]
new Float:last_press[33]
new Float:cl_pushangle[33]

new g_grenade[33]
new g_nodrop[33]
new g_trail, exp_spr

// Cvars
new cvar_default_mode, cvar_radius
new cvar_ammo_default, cvar_normal_dmg, cvar_launch_dmg
new cvar_speed, cvar_recoil

// Weapon entity names
new const WEAPONENTNAMES[][] = {
"weapon_p228", "weapon_scout", "weapon_hegrenade", "weapon_xm1014",
"weapon_c4", "weapon_mac10", "weapon_aug", "weapon_smokegrenade", "weapon_elite",
"weapon_fiveseven", "weapon_ump45", "weapon_sg550", "weapon_galil", "weapon_famas",
"weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle",
"weapon_sg552", "weapon_ak47", "weapon_knife", "weapon_p90"
}

new g_ak47launcher

public plugin_init()
{
register_plugin("[ZP] Extra Item: SvDex", "1.0", "Dias")

// Events
register_event("CurWeapon", "event_curweapon", "be", "1=1")
register_event("DeathMsg", "event_death", "a")
register_event("HLTV", "event_newround", "a", "1=0", "2=0")
RegisterHam(Ham_Spawn, "player", "fw_spawn_post", 1)
for(new i = 0 ; i < sizeof WEAPONENTNAMES; i++)
register_clcmd(WEAPONENTNAMES[i], "fw_changeweapon")
register_clcmd("lastinv", "fw_changeweapon")
RegisterHam(Ham_Item_Deploy, "weapon_ak47", "fw_ak47_deploy_post", 1)

// Forward
register_forward(FM_CmdStart, "fw_cmdstart")
register_touch("svdex_grenade", "*", "fw_touch")
RegisterHam(Ham_TakeDamage, "player", "fw_takedmg")

RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "fw_primary_attack")
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "fw_primary_attack_post",1)

// Cvars
cvar_default_mode = register_cvar("zp_svdex_launcher_default_mode", "1")
cvar_radius = register_cvar("zp_svdex_launcher_radius", "200.0")

cvar_speed = register_cvar("zp_svdex_normal_speed", "5.5")
cvar_recoil = register_cvar("zp_svdex_normal_recoil", "0.5")
cvar_normal_dmg = register_cvar("zp_svdex_normal_dmg", "4.5")

cvar_ammo_default = register_cvar("zp_svdex_launcher_ammo", "10")
cvar_launch_dmg = register_cvar("zp_svdex_launcher_dmg", "650")

register_clcmd("drop", "cmd_drop", 0)

g_ak47launcher = zp_register_extra_item("SvDex (2 Mode)", 40, ZP_TEAM_HUMAN)
}

public plugin_precache()
{
engfunc(EngFunc_PrecacheModel, w_model)
engfunc(EngFunc_PrecacheModel, p_model)
engfunc(EngFunc_PrecacheModel, v_model1)
engfunc(EngFunc_PrecacheModel, v_model2)

engfunc(EngFunc_PrecacheModel, grenade_model)
engfunc(EngFunc_PrecacheSound, grenade_exp_sound)
engfunc(EngFunc_PrecacheSound, grenade_launch_sound)

precache_sound("weapons/svdex_shoot1.wav")
precache_sound("weapons/svdex_clipin.wav")
precache_sound("weapons/svdex_clipon.wav")
precache_sound("weapons/svdex_clipout.wav")
precache_sound("weapons/svdex_draw.wav")

g_trail = engfunc(EngFunc_PrecacheModel, "sprites/smoke.spr")
exp_spr = engfunc(EngFunc_PrecacheModel, grenade_exp_spr)
}

public zp_extra_item_selected(id, item)
{
if(item != g_ak47launcher)
return PLUGIN_HANDLED

if(!g_has_ak47launcher[id])
{
g_has_ak47launcher[id] = true

ak47_mode[id] = get_pcvar_num(cvar_default_mode)
g_grenade[id] = get_pcvar_num(cvar_ammo_default)
cs_set_user_bpammo(id, CSW_AK47, 250)

give_item(id, "weapon_ak47")
}

return PLUGIN_CONTINUE
}

public fw_changeweapon(id)
{
if(no_draw_other[id])
return PLUGIN_HANDLED

return PLUGIN_CONTINUE
}

public fw_ak47_deploy_post(ent)
{
static id
id = pev(ent, pev_owner)

if(!is_user_alive(id) || !is_user_connected(id))
return HAM_IGNORED

if(get_user_weapon(id) == CSW_AK47 && g_has_ak47launcher[id] && ak47_mode[id] == 2)
set_task(0.2, "show_ammo", id+TASK_SHOW_AMMO)

return HAM_HANDLED
}

public fw_takedmg(victim, inflictor, attacker, Float:damage, damagebits)
{
if(!is_user_connected(victim) || !is_user_connected(attacker))
return HAM_IGNORED

if(get_user_weapon(attacker) == CSW_AK47 && g_has_ak47launcher[attacker] && ak47_mode[attacker] == 1)
{
SetHamParamFloat(4, damage * get_pcvar_float(cvar_normal_dmg))
}

return HAM_HANDLED
}

//for recoil and sound...
public fw_primary_attack(ent)
{
new id = pev(ent,pev_owner)
pev(id,pev_punchangle, cl_pushangle[id])
return HAM_IGNORED
}
public fw_primary_attack_post(ent)
{
new id = pev(ent,pev_owner)
new clip, ammo
new weap = get_user_weapon( id, clip, ammo )
if(weap == CSW_AK47 && g_has_ak47launcher[id])
{
new Float:push[3]
pev(id,pev_punchangle,push)
xs_vec_sub(push,cl_pushangle[id],push)
xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil),push)
xs_vec_add(push,cl_pushangle[id],push)
set_pev(id,pev_punchangle,push)
if( clip > 0)
{
ExecuteHamB(Ham_Weapon_PlayEmptySound, ent)
emit_sound(id, CHAN_AUTO, "weapons/svdex_shoot1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}

return HAM_IGNORED
}

public event_newround(id)
{
for(new i = 0; i < get_maxplayers(); i++)
{
g_nodrop[i] = false
no_draw_other[i] = false
}

for(new i = 0; i < entity_count(); i++)
{
static ent
ent = find_ent_by_class(-1, weapon_classname)

remove_entity(ent)
}
}

public cmd_drop(id)
{
new plrClip, plrAmmo
new plrWeapId
plrWeapId = get_user_weapon(id, plrClip , plrAmmo)

if(plrWeapId == CSW_AK47 && g_has_ak47launcher[id] && is_user_alive(id))
{
if(g_nodrop[id])
{
return PLUGIN_HANDLED
} else {
no_draw_other[id] = false
create_w_class(id, plrClip, plrAmmo, 1)
return PLUGIN_HANDLED
}
}

return PLUGIN_CONTINUE
}

public create_w_class(id, clip, ammo, type)
{
new Float:Aim[3],Float:origin[3]
VelocityByAim(id, 64, Aim)
entity_get_vector(id,EV_VEC_origin,origin)

if (type == 1) {
origin[0] += 2*Aim[0]
origin[1] += 2*Aim[1]
}

new ent = create_entity("info_target")
entity_set_string(ent,EV_SZ_classname, weapon_classname)
entity_set_model(ent, w_model)

entity_set_size(ent,Float:{-2.0,-2.0,-2.0},Float:{5.0,5.0,5.0})
entity_set_int(ent,EV_INT_solid,1)

entity_set_int(ent,EV_INT_movetype,6)
entity_set_int(ent, EV_INT_iuser1, clip)
entity_set_int(ent, EV_INT_iuser2, ammo)
entity_set_int(ent, EV_INT_iuser3, g_grenade[id])
entity_set_vector(ent,EV_VEC_origin, origin)
g_has_ak47launcher[id] = false
remove_gun(id)
}

public pfn_touch(ptr, ptd) {
if(is_valid_ent(ptr)) {

new classname[32]
entity_get_string(ptr,EV_SZ_classname,classname,31)
if(equal(classname, weapon_classname)) {
if(is_valid_ent(ptd)) {
new id = ptd
if(id > 0 && id < 34) {
if(!g_has_ak47launcher[id] && is_user_alive(id)) {
give_weapon(id,entity_get_int(ptr, EV_INT_iuser1), entity_get_int(ptr, EV_INT_iuser2))
g_grenade[id] = entity_get_int(ptr, EV_INT_iuser3)
remove_entity(ptr)
}
}
}
}
}
}

public remove_gun(id) {
new wpnList[32]
new number
get_user_weapons(id,wpnList,number)
for (new i = 0;i < number ;i++) {
if (wpnList[i] == CSW_AK47) {
fm_strip_user_gun(id, wpnList[i])
}
}
}

public give_weapon(id, clip, ammo){
g_has_ak47launcher[id] = true
give_item(id, "weapon_ak47")
cs_set_user_bpammo(id, CSW_AK47, ammo)
new ent = get_weapon_ent(id, CSW_AK47)
cs_set_weapon_ammo(ent, clip)

}

public event_curweapon(id)
{
if (!is_user_alive(id))
return PLUGIN_HANDLED

static CurWeapon
CurWeapon = read_data(2)

if(CurWeapon == CSW_AK47 && g_has_ak47launcher[id])
{
if(ak47_mode[id] == 1)
{
static weapon_ent
weapon_ent = get_weapon_ent(id, CurWeapon)

if(weapon_ent)
{
static FloatGran sonrisaelay
Delay = get_pdata_float(weapon_ent, 46, 4) * get_pcvar_float(cvar_speed)
if (Delay > 0.0)
set_pdata_float(weapon_ent, 46, Delay, 4)
}

set_pev(id, pev_viewmodel2, v_model1)
} else if(ak47_mode[id] == 2) {
set_pev(id, pev_viewmodel2, v_model2)
}

set_pev(id, pev_weaponmodel2, p_model)
}

return PLUGIN_CONTINUE
}

public event_death()
{
new id = read_data(2)

new plrClip, plrAmmo
get_user_weapon(id, plrClip , plrAmmo)

if(g_has_ak47launcher[id])
{
create_w_class(id, plrClip, plrAmmo, 0)
g_has_ak47launcher[id] = false

if(ak47_mode[id] == 2)
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
write_byte(0)
message_end()
}

return PLUGIN_HANDLED
}

return PLUGIN_CONTINUE
}

public fw_spawn_post(id)
{
if(g_has_ak47launcher[id])
{
g_has_ak47launcher[id] = false
}
g_grenade[id] = 0
g_nodrop[id] = false

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
write_byte(0)
message_end()
}

public zp_user_infected_post(id)
{
if(g_has_ak47launcher[id])
{
g_has_ak47launcher[id] = false
}

g_grenade[id] = 0
g_nodrop[id] = false
no_draw_other[id] = false

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
write_byte(0)
message_end()
}

public fw_cmdstart(id, uc_handle, seed)
{
if(!is_user_alive(id) || !g_has_ak47launcher[id] || get_user_weapon(id) != CSW_AK47)
return FMRES_IGNORED

if(is_changing[id])
return FMRES_IGNORED

static Button, Float:Time, fInReload, ent

Button = get_uc(uc_handle, UC_Buttons)
Time = get_gametime()
ent = find_ent_by_owner(-1, "weapon_ak47", id)
fInReload = get_pdata_int(ent, 54, 4)

if(fInReload)
{
no_draw_other[id] = true
return FMRES_IGNORED
} else {
no_draw_other[id] = false
}

if(Button & IN_ATTACK2)
{
if(ak47_mode[id] == 1)
{
is_changing[id] = true
no_draw_other[id] = true
g_nodrop[id] = true

play_weapon_anim(id, 6)
set_player_nextattack(id, 1.8)

new task[2]
task[0] = id
task[1] = 2
set_task(1.8, "change_complete", _, task, sizeof(task))

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
write_byte((1<<6))
message_end()

} else if(ak47_mode[id] == 2) {
is_changing[id] = true
no_draw_other[id] = true
g_nodrop[id] = true

play_weapon_anim(id, 6)
set_player_nextattack(id, 1.8)

new task[2]
task[0] = id
task[1] = 1
set_task(1.8, "change_complete", _, task, sizeof(task))
}
}

if(Button & IN_RELOAD)
{
if(is_changing[id])
{
Button &= ~IN_RELOAD
set_uc(uc_handle, UC_Buttons, Button)
}
} else if(Button & IN_ATTACK) {
if(Time - 3.0 > last_press[id] && ak47_mode[id] == 2)
{
set_player_nextattack(id, 999999.0)

launch_grenade(id)
last_press[id] = Time
}
}

return FMRES_HANDLED
}

public fw_touch(grenade, id)
{
if(!pev_valid(grenade))
return FMRES_IGNORED

// Get it's origin
static Float:Origin[3]
pev(grenade, pev_origin, Origin)

// Explosion
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0)
write_byte(TE_EXPLOSION)
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2])
write_short(exp_spr)
write_byte(40)
write_byte(30)
write_byte(0)
message_end()

static owner, iVictim

iVictim = -1
owner = pev(grenade, pev_owner)

while((iVictim = find_ent_in_sphere(iVictim, Origin, get_pcvar_float(cvar_radius))) != 0)
{
if((0 < iVictim < 32) && is_user_alive(iVictim) && zp_get_user_zombie(iVictim))
{
new Damage
Damage = get_pcvar_num(cvar_launch_dmg)

ExecuteHam(Ham_TakeDamage, iVictim, 0, owner, 0, DMG_BULLET)
static health
health = get_user_health(iVictim)

if(health - Damage >= 1)
{
set_user_health(iVictim, health - Damage)
make_knockback(iVictim, Origin, 2.0 * Damage)
}
else
{
death_message(owner, iVictim, "grenade", 1)
}
}
}

emit_sound(grenade, CHAN_VOICE, grenade_exp_sound, 1.0, ATTN_NORM, 0, PITCH_NORM)


// Remove grenade
engfunc(EngFunc_RemoveEntity, grenade)

/*
for(new i = 0; i < get_maxplayers(); i++)
{
if(is_user_alive(i) && is_user_connected(i))
{
static Float:Origin2[3], Float:distance_f

pev(i, pev_origin, Origin2)
distance_f = get_distance_f(Origin, Origin2)

if (distance_f <= get_pcvar_float(cvar_radius))
{
new Damage
Damage = get_pcvar_num(cvar_launch_dmg)

ExecuteHamB(Ham_TakeDamage, i, "grenade", owner, Damage, DMG_BLAST)
emit_sound(owner, CHAN_VOICE, grenade_exp_sound, 1.0, ATTN_NORM, 0, PITCH_NORM)

if(!zp_get_user_zombie(i))
return FMRES_IGNORED
if(i == owner)
return FMRES_IGNORED

static health
health = get_user_health(i)

if(health - Damage >= 1)
{
set_user_health(i, health - Damage)
make_knockback(i, Origin, 2.0 * Damage)
}
else
{
death_message(owner, i, "grenade", 1)
Origin2[2] -= 45.0
}
}
}
}*/

return FMRES_HANDLED
}

public launch_grenade(id)
{
if(g_grenade[id] <= 0)
{
client_print(id, print_center, "[Out Of Ammo]")
return PLUGIN_HANDLED
}

play_weapon_anim(id, random_num(3, 5))

new Float:Origin[3], Float:Velocity[3], FloatpacmanAngle[3], Ent

entity_get_vector(id, EV_VEC_origin , Origin)
entity_get_vector(id, EV_VEC_v_angle, vAngle)
Origin[2] = Origin[2] + 10

Ent = create_entity("info_target")
if (!Ent) return PLUGIN_HANDLED

entity_set_string(Ent, EV_SZ_classname, "svdex_grenade")
entity_set_model(Ent, grenade_model)

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

entity_set_origin(Ent, Origin)
entity_set_vector(Ent, EV_VEC_angles, vAngle)

entity_set_int(Ent, EV_INT_effects, 2)
entity_set_int(Ent, EV_INT_solid, 1)
entity_set_int(Ent, EV_INT_movetype, 10)
entity_set_edict(Ent, EV_ENT_owner, id)

VelocityByAim(id, 2500 , Velocity)
entity_set_vector(Ent, EV_VEC_velocity ,Velocity)

//sound when lauch...
emit_sound(id,CHAN_VOICE, grenade_launch_sound, 1.0, ATTN_NORM, 0, PITCH_NORM)

g_grenade[id]--

message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
write_byte(TE_BEAMFOLLOW)
write_short(Ent)
write_short(g_trail)
write_byte(10)
write_byte(5)
write_byte(255)
write_byte(255)
write_byte(255)
write_byte(100)
message_end()

if(g_grenade[id] <= 0)
{
client_print(id, print_center, "Out Of Ammo... Switch to Auto-Mode !!!")

is_changing[id] = true
no_draw_other[id] = true

play_weapon_anim(id, 6)
set_player_nextattack(id, 1.8)

new task[2]
task[0] = id
task[1] = 1
set_task(1.8, "change_complete", _, task, sizeof(task))
} else {
client_print(id, print_center, "Reloading... Please Wait !!!")
}

return PLUGIN_CONTINUE
}

public change_complete(task[])
{
static id, mode_change
id = task[0]
mode_change = task[1]

if(mode_change == 1)
{
new ent = find_ent_by_owner(-1, "weapon_ak47", id)
ExecuteHam(Ham_Item_Deploy, ent)
set_pev(id, pev_viewmodel2, v_model1)
play_weapon_anim(id, 0)

ak47_mode[id] = 1
client_print(id, print_center, "[Switch to Auto-Mode ]")

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
write_byte(0)
message_end()

} else if(mode_change == 2) {

new ent = find_ent_by_owner(-1, "weapon_ak47", id)
ExecuteHam(Ham_Item_Deploy, ent)
set_pev(id, pev_viewmodel2, v_model2)
play_weapon_anim(id, 0)
set_player_nextattack(id, 999999.0)

ak47_mode[id] = 2
client_print(id, print_center, "[Switch to Launcher-Mode]")

set_task(0.2, "show_ammo", id+TASK_SHOW_AMMO, _, _, "b")
}
g_nodrop[id] = false
set_pev(id, pev_weaponmodel2, p_model)

is_changing[id] = false
no_draw_other[id] = false
}

public play_weapon_anim(player, anim)
{
set_pev(player, pev_weaponanim, anim)
message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, player)
write_byte(anim)
write_byte(pev(player, pev_body))
message_end()
}

public set_player_nextattack(id, Float:nexttime)
{
set_pdata_float(id, 83, nexttime, 5)
}

public make_knockback(id, Float:Origin[3], Float:maxspeed)
{
// Get and set velocity
new Float:fVelocity[3]
kickback(id, Origin, maxspeed, fVelocity)

entity_set_vector(id, EV_VEC_velocity, fVelocity)
}

stock kickback(ent, Float:fOrigin[3], Float:fSpeed, Float:fVelocity[3])
{
// Find origin
new Float:fEntOrigin[3];
entity_get_vector( ent, EV_VEC_origin, fEntOrigin );

// Do some calculations
new Float:fDistance[3];
fDistance[0] = fEntOrigin[0] - fOrigin[0];
fDistance[1] = fEntOrigin[1] - fOrigin[1];
fDistance[2] = fEntOrigin[2] - fOrigin[2];
new Float:fTime = (vector_distance( fEntOrigin,fOrigin ) / fSpeed);
fVelocity[0] = fDistance[0] / fTime;
fVelocity[1] = fDistance[1] / fTime;
fVelocity[2] = fDistance[2] / fTime;

return (fVelocity[0] && fVelocity[1] && fVelocity[2]);
}

// Death message
public death_message(Killer, Victim, const Weapon[], ScoreBoard)
{
// Block death msg
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET)
ExecuteHamB(Ham_Killed, Victim, Killer, 2)
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT)

// Death
make_deathmsg(Killer, Victim, 0, Weapon)

// Update score board
if (ScoreBoard)
{
message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"))
write_byte(Killer) // id
write_short(pev(Killer, pev_frags)) // frags
write_short(cs_get_user_deaths(Killer)) // deaths
write_short(0) // class?
write_short(get_user_team(Killer)) // team
message_end()

message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"))
write_byte(Victim) // id
write_short(pev(Victim, pev_frags)) // frags
write_short(cs_get_user_deaths(Victim)) // deaths
write_short(0) // class?
write_short(get_user_team(Victim)) // team
message_end()
}
}

public show_ammo(taskid)
{
new id = taskid - TASK_SHOW_AMMO

if(get_user_weapon(id) == CSW_AK47 && g_has_ak47launcher[id] && ak47_mode[id] == 2)
{
static Message[32]
formatex(Message, sizeof(Message), "Grenade Ammo: %i/%i", g_grenade[id], get_pcvar_num(cvar_ammo_default))

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("StatusText"), {0,0,0}, id)
write_byte(0)
write_string(Message)
message_end()
} else {

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("StatusText"), {0,0,0}, id)
write_byte(0)
write_string("")
message_end()
remove_task(id+TASK_SHOW_AMMO)
}
}

stock get_weapon_ent(id,wpnid=0,wpnName[]="")
{
static newName[24]

if(wpnid) get_weaponname(wpnid,newName,23)
else formatex(newName,23,"%s",wpnName)

if(!equal(newName,"weapon_",7))
format(newName,23,"weapon_%s",newName)

return fm_find_ent_by_owner(get_maxplayers(),newName,id)
}

codigo PHP
Responder
#9
(30/09/2016, 04:45 PM)mmeka12 escribió: grasias enverda te lo agradesto Gran sonrisa RainbowRainbowExcitedeyesVictoryTruestoryCorazón

y esto tengo una pregunta podrias canbiar de zp a modo otma estre plugin
el cual es el svdex porque eres muy proRainbowRainbow
y me enseñaria a ser como tu¿
solo se editar svars pero podrias desmotrarme tus conosimietos¿¿

aqui el codigo porfavor ponlo a modo normal y que no se me salga del cs
si no es molestia Roflmao

PHP


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

#define TASK_SHOW_AMMO 111111

new const weapon_classname[] = "svdex"
new const w_model[] = "models/zombie_plague/w_svdex.mdl"
new const p_model[] = "models/zombie_plague/p_svdex.mdl"
new const v_model1[] = "models/zombie_plague/v_svdex.mdl"
new const v_model2[] = "models/zombie_plague/v_svdex_2.mdl"
new const grenade_model[] = "models/zombie_plague/s_svdex.mdl"

new const grenade_exp_spr[] = "sprites/zombie_plague/explode_nade.spr"
new const grenade_exp_sound[] = "weapons/svdex_exp.wav"
new const grenade_launch_sound[] = "weapons/svdex_shoot2.wav"

new bool:g_has_ak47launcher[33]
new ak47_mode[33]
new bool:no_draw_other[33]
new bool:is_changing[33]
new Float:last_press[33]
new Float:cl_pushangle[33]

new g_grenade[33]
new g_nodrop[33]
new g_trail, exp_spr

// Cvars
new cvar_default_mode, cvar_radius
new cvar_ammo_default, cvar_normal_dmg, cvar_launch_dmg
new cvar_speed, cvar_recoil

// Weapon entity names
new const WEAPONENTNAMES[][] = {
"weapon_p228", "weapon_scout", "weapon_hegrenade", "weapon_xm1014",
"weapon_c4", "weapon_mac10", "weapon_aug", "weapon_smokegrenade", "weapon_elite",
"weapon_fiveseven", "weapon_ump45", "weapon_sg550", "weapon_galil", "weapon_famas",
"weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle",
"weapon_sg552", "weapon_ak47", "weapon_knife", "weapon_p90"
}

new g_ak47launcher

public plugin_init()
{
register_plugin("[ZP] Extra Item: SvDex", "1.0", "Dias")

// Events
register_event("CurWeapon", "event_curweapon", "be", "1=1")
register_event("DeathMsg", "event_death", "a")
register_event("HLTV", "event_newround", "a", "1=0", "2=0")
RegisterHam(Ham_Spawn, "player", "fw_spawn_post", 1)
for(new i = 0 ; i < sizeof WEAPONENTNAMES; i++)
register_clcmd(WEAPONENTNAMES[i], "fw_changeweapon")
register_clcmd("lastinv", "fw_changeweapon")
RegisterHam(Ham_Item_Deploy, "weapon_ak47", "fw_ak47_deploy_post", 1)

// Forward
register_forward(FM_CmdStart, "fw_cmdstart")
register_touch("svdex_grenade", "*", "fw_touch")
RegisterHam(Ham_TakeDamage, "player", "fw_takedmg")

RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "fw_primary_attack")
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "fw_primary_attack_post",1)

// Cvars
cvar_default_mode = register_cvar("zp_svdex_launcher_default_mode", "1")
cvar_radius = register_cvar("zp_svdex_launcher_radius", "200.0")

cvar_speed = register_cvar("zp_svdex_normal_speed", "5.5")
cvar_recoil = register_cvar("zp_svdex_normal_recoil", "0.5")
cvar_normal_dmg = register_cvar("zp_svdex_normal_dmg", "4.5")

cvar_ammo_default = register_cvar("zp_svdex_launcher_ammo", "10")
cvar_launch_dmg = register_cvar("zp_svdex_launcher_dmg", "650")

register_clcmd("drop", "cmd_drop", 0)

g_ak47launcher = zp_register_extra_item("SvDex (2 Mode)", 40, ZP_TEAM_HUMAN)
}

public plugin_precache()
{
engfunc(EngFunc_PrecacheModel, w_model)
engfunc(EngFunc_PrecacheModel, p_model)
engfunc(EngFunc_PrecacheModel, v_model1)
engfunc(EngFunc_PrecacheModel, v_model2)

engfunc(EngFunc_PrecacheModel, grenade_model)
engfunc(EngFunc_PrecacheSound, grenade_exp_sound)
engfunc(EngFunc_PrecacheSound, grenade_launch_sound)

precache_sound("weapons/svdex_shoot1.wav")
precache_sound("weapons/svdex_clipin.wav")
precache_sound("weapons/svdex_clipon.wav")
precache_sound("weapons/svdex_clipout.wav")
precache_sound("weapons/svdex_draw.wav")

g_trail = engfunc(EngFunc_PrecacheModel, "sprites/smoke.spr")
exp_spr = engfunc(EngFunc_PrecacheModel, grenade_exp_spr)
}

public zp_extra_item_selected(id, item)
{
if(item != g_ak47launcher)
return PLUGIN_HANDLED

if(!g_has_ak47launcher[id])
{
g_has_ak47launcher[id] = true

ak47_mode[id] = get_pcvar_num(cvar_default_mode)
g_grenade[id] = get_pcvar_num(cvar_ammo_default)
cs_set_user_bpammo(id, CSW_AK47, 250)

give_item(id, "weapon_ak47")
}

return PLUGIN_CONTINUE
}

public fw_changeweapon(id)
{
if(no_draw_other[id])
return PLUGIN_HANDLED

return PLUGIN_CONTINUE
}

public fw_ak47_deploy_post(ent)
{
static id
id = pev(ent, pev_owner)

if(!is_user_alive(id) || !is_user_connected(id))
return HAM_IGNORED

if(get_user_weapon(id) == CSW_AK47 && g_has_ak47launcher[id] && ak47_mode[id] == 2)
set_task(0.2, "show_ammo", id+TASK_SHOW_AMMO)

return HAM_HANDLED
}

public fw_takedmg(victim, inflictor, attacker, Float:damage, damagebits)
{
if(!is_user_connected(victim) || !is_user_connected(attacker))
return HAM_IGNORED

if(get_user_weapon(attacker) == CSW_AK47 && g_has_ak47launcher[attacker] && ak47_mode[attacker] == 1)
{
SetHamParamFloat(4, damage * get_pcvar_float(cvar_normal_dmg))
}

return HAM_HANDLED
}

//for recoil and sound...
public fw_primary_attack(ent)
{
new id = pev(ent,pev_owner)
pev(id,pev_punchangle, cl_pushangle[id])
return HAM_IGNORED
}
public fw_primary_attack_post(ent)
{
new id = pev(ent,pev_owner)
new clip, ammo
new weap = get_user_weapon( id, clip, ammo )
if(weap == CSW_AK47 && g_has_ak47launcher[id])
{
new Float:push[3]
pev(id,pev_punchangle,push)
xs_vec_sub(push,cl_pushangle[id],push)
xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil),push)
xs_vec_add(push,cl_pushangle[id],push)
set_pev(id,pev_punchangle,push)
if( clip > 0)
{
ExecuteHamB(Ham_Weapon_PlayEmptySound, ent)
emit_sound(id, CHAN_AUTO, "weapons/svdex_shoot1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}

return HAM_IGNORED
}

public event_newround(id)
{
for(new i = 0; i < get_maxplayers(); i++)
{
g_nodrop[i] = false
no_draw_other[i] = false
}

for(new i = 0; i < entity_count(); i++)
{
static ent
ent = find_ent_by_class(-1, weapon_classname)

remove_entity(ent)
}
}

public cmd_drop(id)
{
new plrClip, plrAmmo
new plrWeapId
plrWeapId = get_user_weapon(id, plrClip , plrAmmo)

if(plrWeapId == CSW_AK47 && g_has_ak47launcher[id] && is_user_alive(id))
{
if(g_nodrop[id])
{
return PLUGIN_HANDLED
} else {
no_draw_other[id] = false
create_w_class(id, plrClip, plrAmmo, 1)
return PLUGIN_HANDLED
}
}

return PLUGIN_CONTINUE
}

public create_w_class(id, clip, ammo, type)
{
new Float:Aim[3],Float:origin[3]
VelocityByAim(id, 64, Aim)
entity_get_vector(id,EV_VEC_origin,origin)

if (type == 1) {
origin[0] += 2*Aim[0]
origin[1] += 2*Aim[1]
}

new ent = create_entity("info_target")
entity_set_string(ent,EV_SZ_classname, weapon_classname)
entity_set_model(ent, w_model)

entity_set_size(ent,Float:{-2.0,-2.0,-2.0},Float:{5.0,5.0,5.0})
entity_set_int(ent,EV_INT_solid,1)

entity_set_int(ent,EV_INT_movetype,6)
entity_set_int(ent, EV_INT_iuser1, clip)
entity_set_int(ent, EV_INT_iuser2, ammo)
entity_set_int(ent, EV_INT_iuser3, g_grenade[id])
entity_set_vector(ent,EV_VEC_origin, origin)
g_has_ak47launcher[id] = false
remove_gun(id)
}

public pfn_touch(ptr, ptd) {
if(is_valid_ent(ptr)) {

new classname[32]
entity_get_string(ptr,EV_SZ_classname,classname,31)
if(equal(classname, weapon_classname)) {
if(is_valid_ent(ptd)) {
new id = ptd
if(id > 0 && id < 34) {
if(!g_has_ak47launcher[id] && is_user_alive(id)) {
give_weapon(id,entity_get_int(ptr, EV_INT_iuser1), entity_get_int(ptr, EV_INT_iuser2))
g_grenade[id] = entity_get_int(ptr, EV_INT_iuser3)
remove_entity(ptr)
}
}
}
}
}
}

public remove_gun(id) {
new wpnList[32]
new number
get_user_weapons(id,wpnList,number)
for (new i = 0;i < number ;i++) {
if (wpnList[i] == CSW_AK47) {
fm_strip_user_gun(id, wpnList[i])
}
}
}

public give_weapon(id, clip, ammo){
g_has_ak47launcher[id] = true
give_item(id, "weapon_ak47")
cs_set_user_bpammo(id, CSW_AK47, ammo)
new ent = get_weapon_ent(id, CSW_AK47)
cs_set_weapon_ammo(ent, clip)

}

public event_curweapon(id)
{
if (!is_user_alive(id))
return PLUGIN_HANDLED

static CurWeapon
CurWeapon = read_data(2)

if(CurWeapon == CSW_AK47 && g_has_ak47launcher[id])
{
if(ak47_mode[id] == 1)
{
static weapon_ent
weapon_ent = get_weapon_ent(id, CurWeapon)

if(weapon_ent)
{
static FloatGran sonrisaelay
Delay = get_pdata_float(weapon_ent, 46, 4) * get_pcvar_float(cvar_speed)
if (Delay > 0.0)
set_pdata_float(weapon_ent, 46, Delay, 4)
}

set_pev(id, pev_viewmodel2, v_model1)
} else if(ak47_mode[id] == 2) {
set_pev(id, pev_viewmodel2, v_model2)
}

set_pev(id, pev_weaponmodel2, p_model)
}

return PLUGIN_CONTINUE
}

public event_death()
{
new id = read_data(2)

new plrClip, plrAmmo
get_user_weapon(id, plrClip , plrAmmo)

if(g_has_ak47launcher[id])
{
create_w_class(id, plrClip, plrAmmo, 0)
g_has_ak47launcher[id] = false

if(ak47_mode[id] == 2)
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
write_byte(0)
message_end()
}

return PLUGIN_HANDLED
}

return PLUGIN_CONTINUE
}

public fw_spawn_post(id)
{
if(g_has_ak47launcher[id])
{
g_has_ak47launcher[id] = false
}
g_grenade[id] = 0
g_nodrop[id] = false

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
write_byte(0)
message_end()
}

public zp_user_infected_post(id)
{
if(g_has_ak47launcher[id])
{
g_has_ak47launcher[id] = false
}

g_grenade[id] = 0
g_nodrop[id] = false
no_draw_other[id] = false

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
write_byte(0)
message_end()
}

public fw_cmdstart(id, uc_handle, seed)
{
if(!is_user_alive(id) || !g_has_ak47launcher[id] || get_user_weapon(id) != CSW_AK47)
return FMRES_IGNORED

if(is_changing[id])
return FMRES_IGNORED

static Button, Float:Time, fInReload, ent

Button = get_uc(uc_handle, UC_Buttons)
Time = get_gametime()
ent = find_ent_by_owner(-1, "weapon_ak47", id)
fInReload = get_pdata_int(ent, 54, 4)

if(fInReload)
{
no_draw_other[id] = true
return FMRES_IGNORED
} else {
no_draw_other[id] = false
}

if(Button & IN_ATTACK2)
{
if(ak47_mode[id] == 1)
{
is_changing[id] = true
no_draw_other[id] = true
g_nodrop[id] = true

play_weapon_anim(id, 6)
set_player_nextattack(id, 1.8)

new task[2]
task[0] = id
task[1] = 2
set_task(1.8, "change_complete", _, task, sizeof(task))

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
write_byte((1<<6))
message_end()

} else if(ak47_mode[id] == 2) {
is_changing[id] = true
no_draw_other[id] = true
g_nodrop[id] = true

play_weapon_anim(id, 6)
set_player_nextattack(id, 1.8)

new task[2]
task[0] = id
task[1] = 1
set_task(1.8, "change_complete", _, task, sizeof(task))
}
}

if(Button & IN_RELOAD)
{
if(is_changing[id])
{
Button &= ~IN_RELOAD
set_uc(uc_handle, UC_Buttons, Button)
}
} else if(Button & IN_ATTACK) {
if(Time - 3.0 > last_press[id] && ak47_mode[id] == 2)
{
set_player_nextattack(id, 999999.0)

launch_grenade(id)
last_press[id] = Time
}
}

return FMRES_HANDLED
}

public fw_touch(grenade, id)
{
if(!pev_valid(grenade))
return FMRES_IGNORED

// Get it's origin
static Float:Origin[3]
pev(grenade, pev_origin, Origin)

// Explosion
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0)
write_byte(TE_EXPLOSION)
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2])
write_short(exp_spr)
write_byte(40)
write_byte(30)
write_byte(0)
message_end()

static owner, iVictim

iVictim = -1
owner = pev(grenade, pev_owner)

while((iVictim = find_ent_in_sphere(iVictim, Origin, get_pcvar_float(cvar_radius))) != 0)
{
if((0 < iVictim < 32) && is_user_alive(iVictim) && zp_get_user_zombie(iVictim))
{
new Damage
Damage = get_pcvar_num(cvar_launch_dmg)

ExecuteHam(Ham_TakeDamage, iVictim, 0, owner, 0, DMG_BULLET)
static health
health = get_user_health(iVictim)

if(health - Damage >= 1)
{
set_user_health(iVictim, health - Damage)
make_knockback(iVictim, Origin, 2.0 * Damage)
}
else
{
death_message(owner, iVictim, "grenade", 1)
}
}
}

emit_sound(grenade, CHAN_VOICE, grenade_exp_sound, 1.0, ATTN_NORM, 0, PITCH_NORM)


// Remove grenade
engfunc(EngFunc_RemoveEntity, grenade)

/*
for(new i = 0; i < get_maxplayers(); i++)
{
if(is_user_alive(i) && is_user_connected(i))
{
static Float:Origin2[3], Float:distance_f

pev(i, pev_origin, Origin2)
distance_f = get_distance_f(Origin, Origin2)

if (distance_f <= get_pcvar_float(cvar_radius))
{
new Damage
Damage = get_pcvar_num(cvar_launch_dmg)

ExecuteHamB(Ham_TakeDamage, i, "grenade", owner, Damage, DMG_BLAST)
emit_sound(owner, CHAN_VOICE, grenade_exp_sound, 1.0, ATTN_NORM, 0, PITCH_NORM)

if(!zp_get_user_zombie(i))
return FMRES_IGNORED
if(i == owner)
return FMRES_IGNORED

static health
health = get_user_health(i)

if(health - Damage >= 1)
{
set_user_health(i, health - Damage)
make_knockback(i, Origin, 2.0 * Damage)
}
else
{
death_message(owner, i, "grenade", 1)
Origin2[2] -= 45.0
}
}
}
}*/

return FMRES_HANDLED
}

public launch_grenade(id)
{
if(g_grenade[id] <= 0)
{
client_print(id, print_center, "[Out Of Ammo]")
return PLUGIN_HANDLED
}

play_weapon_anim(id, random_num(3, 5))

new Float:Origin[3], Float:Velocity[3], FloatpacmanAngle[3], Ent

entity_get_vector(id, EV_VEC_origin , Origin)
entity_get_vector(id, EV_VEC_v_angle, vAngle)
Origin[2] = Origin[2] + 10

Ent = create_entity("info_target")
if (!Ent) return PLUGIN_HANDLED

entity_set_string(Ent, EV_SZ_classname, "svdex_grenade")
entity_set_model(Ent, grenade_model)

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

entity_set_origin(Ent, Origin)
entity_set_vector(Ent, EV_VEC_angles, vAngle)

entity_set_int(Ent, EV_INT_effects, 2)
entity_set_int(Ent, EV_INT_solid, 1)
entity_set_int(Ent, EV_INT_movetype, 10)
entity_set_edict(Ent, EV_ENT_owner, id)

VelocityByAim(id, 2500 , Velocity)
entity_set_vector(Ent, EV_VEC_velocity ,Velocity)

//sound when lauch...
emit_sound(id,CHAN_VOICE, grenade_launch_sound, 1.0, ATTN_NORM, 0, PITCH_NORM)

g_grenade[id]--

message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
write_byte(TE_BEAMFOLLOW)
write_short(Ent)
write_short(g_trail)
write_byte(10)
write_byte(5)
write_byte(255)
write_byte(255)
write_byte(255)
write_byte(100)
message_end()

if(g_grenade[id] <= 0)
{
client_print(id, print_center, "Out Of Ammo... Switch to Auto-Mode !!!")

is_changing[id] = true
no_draw_other[id] = true

play_weapon_anim(id, 6)
set_player_nextattack(id, 1.8)

new task[2]
task[0] = id
task[1] = 1
set_task(1.8, "change_complete", _, task, sizeof(task))
} else {
client_print(id, print_center, "Reloading... Please Wait !!!")
}

return PLUGIN_CONTINUE
}

public change_complete(task[])
{
static id, mode_change
id = task[0]
mode_change = task[1]

if(mode_change == 1)
{
new ent = find_ent_by_owner(-1, "weapon_ak47", id)
ExecuteHam(Ham_Item_Deploy, ent)
set_pev(id, pev_viewmodel2, v_model1)
play_weapon_anim(id, 0)

ak47_mode[id] = 1
client_print(id, print_center, "[Switch to Auto-Mode ]")

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
write_byte(0)
message_end()

} else if(mode_change == 2) {

new ent = find_ent_by_owner(-1, "weapon_ak47", id)
ExecuteHam(Ham_Item_Deploy, ent)
set_pev(id, pev_viewmodel2, v_model2)
play_weapon_anim(id, 0)
set_player_nextattack(id, 999999.0)

ak47_mode[id] = 2
client_print(id, print_center, "[Switch to Launcher-Mode]")

set_task(0.2, "show_ammo", id+TASK_SHOW_AMMO, _, _, "b")
}
g_nodrop[id] = false
set_pev(id, pev_weaponmodel2, p_model)

is_changing[id] = false
no_draw_other[id] = false
}

public play_weapon_anim(player, anim)
{
set_pev(player, pev_weaponanim, anim)
message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, player)
write_byte(anim)
write_byte(pev(player, pev_body))
message_end()
}

public set_player_nextattack(id, Float:nexttime)
{
set_pdata_float(id, 83, nexttime, 5)
}

public make_knockback(id, Float:Origin[3], Float:maxspeed)
{
// Get and set velocity
new Float:fVelocity[3]
kickback(id, Origin, maxspeed, fVelocity)

entity_set_vector(id, EV_VEC_velocity, fVelocity)
}

stock kickback(ent, Float:fOrigin[3], Float:fSpeed, Float:fVelocity[3])
{
// Find origin
new Float:fEntOrigin[3];
entity_get_vector( ent, EV_VEC_origin, fEntOrigin );

// Do some calculations
new Float:fDistance[3];
fDistance[0] = fEntOrigin[0] - fOrigin[0];
fDistance[1] = fEntOrigin[1] - fOrigin[1];
fDistance[2] = fEntOrigin[2] - fOrigin[2];
new Float:fTime = (vector_distance( fEntOrigin,fOrigin ) / fSpeed);
fVelocity[0] = fDistance[0] / fTime;
fVelocity[1] = fDistance[1] / fTime;
fVelocity[2] = fDistance[2] / fTime;

return (fVelocity[0] && fVelocity[1] && fVelocity[2]);
}

// Death message
public death_message(Killer, Victim, const Weapon[], ScoreBoard)
{
// Block death msg
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET)
ExecuteHamB(Ham_Killed, Victim, Killer, 2)
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT)

// Death
make_deathmsg(Killer, Victim, 0, Weapon)

// Update score board
if (ScoreBoard)
{
message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"))
write_byte(Killer) // id
write_short(pev(Killer, pev_frags)) // frags
write_short(cs_get_user_deaths(Killer)) // deaths
write_short(0) // class?
write_short(get_user_team(Killer)) // team
message_end()

message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"))
write_byte(Victim) // id
write_short(pev(Victim, pev_frags)) // frags
write_short(cs_get_user_deaths(Victim)) // deaths
write_short(0) // class?
write_short(get_user_team(Victim)) // team
message_end()
}
}

public show_ammo(taskid)
{
new id = taskid - TASK_SHOW_AMMO

if(get_user_weapon(id) == CSW_AK47 && g_has_ak47launcher[id] && ak47_mode[id] == 2)
{
static Message[32]
formatex(Message, sizeof(Message), "Grenade Ammo: %i/%i", g_grenade[id], get_pcvar_num(cvar_ammo_default))

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("StatusText"), {0,0,0}, id)
write_byte(0)
write_string(Message)
message_end()
} else {

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("StatusText"), {0,0,0}, id)
write_byte(0)
write_string("")
message_end()
remove_task(id+TASK_SHOW_AMMO)
}
}

stock get_weapon_ent(id,wpnid=0,wpnName[]="")
{
static newName[24]

if(wpnid) get_weaponname(wpnid,newName,23)
else formatex(newName,23,"%s",wpnName)

if(!equal(newName,"weapon_",7))
format(newName,23,"weapon_%s",newName)

return fm_find_ent_by_owner(get_maxplayers(),newName,id)
}


Poné el código en etiquetas php, no se entiende una verga si no..



Prueba..

Código PHP:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <cstrike>
#include <fun>

#define TASK_SHOW_AMMO 111111

new const weapon_classname[] = "svdex"
new const w_model[] = "models/zombie_plague/w_svdex.mdl"
new const p_model[] = "models/zombie_plague/p_svdex.mdl"
new const v_model1[] = "models/zombie_plague/v_svdex.mdl"
new const v_model2[] = "models/zombie_plague/v_svdex_2.mdl"
new const grenade_model[] = "models/zombie_plague/s_svdex.mdl"

new const grenade_exp_spr[] = "sprites/zombie_plague/explode_nade.spr"
new const grenade_exp_sound[] = "weapons/svdex_exp.wav"
new const grenade_launch_sound[] = "weapons/svdex_shoot2.wav"

new bool:g_has_ak47launcher[33]
new 
ak47_mode[33]
new 
bool:no_draw_other[33]
new 
bool:is_changing[33]
new 
Float:last_press[33]
new 
Float:cl_pushangle[33]

new 
g_grenade[33]
new 
g_nodrop[33]
new 
g_trailexp_spr

// Cvars
new cvar_default_modecvar_radius
new cvar_ammo_defaultcvar_normal_dmgcvar_launch_dmg
new cvar_speedcvar_recoil

// Weapon entity names
new const WEAPONENTNAMES[][] = {
    
"weapon_p228""weapon_scout""weapon_hegrenade""weapon_xm1014"
    
"weapon_c4""weapon_mac10""weapon_aug""weapon_smokegrenade""weapon_elite"
    
"weapon_fiveseven""weapon_ump45""weapon_sg550""weapon_galil""weapon_famas"
    
"weapon_usp""weapon_glock18""weapon_awp""weapon_mp5navy""weapon_m249",
    
"weapon_m3""weapon_m4a1""weapon_tmp""weapon_g3sg1""weapon_flashbang""weapon_deagle",
    
"weapon_sg552""weapon_ak47""weapon_knife""weapon_p90" 
}

new 
g_ak47launcher

public plugin_init()
{
    
register_plugin("[ZP] Extra Item: SvDex""1.0""Dias")
    
    
// Events
    
register_event("CurWeapon""event_curweapon""be""1=1")
    
register_event("DeathMsg""event_death""a")
    
register_event("HLTV""event_newround""a""1=0""2=0")
    
RegisterHam(Ham_Spawn"player""fw_spawn_post"1)
    for(new 
sizeof WEAPONENTNAMESi++)
        
register_clcmd(WEAPONENTNAMES[i], "fw_changeweapon")
    
register_clcmd("lastinv""fw_changeweapon")
    
RegisterHam(Ham_Item_Deploy"weapon_ak47""fw_ak47_deploy_post"1)
    
register_concmd"obtener_svdex""setweapon" );
    
    
// Forward
    
register_forward(FM_CmdStart"fw_cmdstart")
    
register_touch("svdex_grenade""*""fw_touch")
    
RegisterHam(Ham_TakeDamage"player""fw_takedmg")
    
    
RegisterHam(Ham_Weapon_PrimaryAttack"weapon_ak47""fw_primary_attack")
    
RegisterHam(Ham_Weapon_PrimaryAttack"weapon_ak47""fw_primary_attack_post",1
    
    
// Cvars
    
cvar_default_mode register_cvar("zp_svdex_launcher_default_mode""1")
    
cvar_radius register_cvar("zp_svdex_launcher_radius""200.0")
    
    
cvar_speed register_cvar("zp_svdex_normal_speed""5.5")
    
cvar_recoil register_cvar("zp_svdex_normal_recoil""0.5")
    
cvar_normal_dmg register_cvar("zp_svdex_normal_dmg""4.5")    
    
    
cvar_ammo_default register_cvar("zp_svdex_launcher_ammo""10")
    
cvar_launch_dmg register_cvar("zp_svdex_launcher_dmg""650")
    
    
register_clcmd("drop""cmd_drop"0)
    
    
//g_ak47launcher = zp_register_extra_item("SvDex (2 Mode)", 40, ZP_TEAM_HUMAN)
}

public 
plugin_precache()
{
    
engfunc(EngFunc_PrecacheModelw_model)
    
engfunc(EngFunc_PrecacheModelp_model)
    
engfunc(EngFunc_PrecacheModelv_model1)
    
engfunc(EngFunc_PrecacheModelv_model2)
    
    
engfunc(EngFunc_PrecacheModelgrenade_model)
    
engfunc(EngFunc_PrecacheSoundgrenade_exp_sound)
    
engfunc(EngFunc_PrecacheSoundgrenade_launch_sound)
    
    
precache_sound("weapons/svdex_shoot1.wav")
    
precache_sound("weapons/svdex_clipin.wav")
    
precache_sound("weapons/svdex_clipon.wav")
    
precache_sound("weapons/svdex_clipout.wav")
    
precache_sound("weapons/svdex_draw.wav")
    
    
g_trail engfunc(EngFunc_PrecacheModel"sprites/smoke.spr")
    
exp_spr engfunc(EngFunc_PrecacheModelgrenade_exp_spr)
}

public 
setweaponiditem )
{
    if( 
item != g_ak47launcher && !is_user_aliveid ) ) return PLUGIN_HANDLED;

    if(!
g_has_ak47launcher[id])
    {
        
g_has_ak47launcher[id] = true
        
        ak47_mode
[id] = get_pcvar_num(cvar_default_mode)
        
g_grenade[id] = get_pcvar_num(cvar_ammo_default)
        
cs_set_user_bpammo(idCSW_AK47250)
        
        
give_item(id"weapon_ak47")
    }
    
    return 
PLUGIN_CONTINUE;
}

/*public zp_extra_item_selected(id, item)
{
    if(item != g_ak47launcher)
        return PLUGIN_HANDLED
    
    if(!g_has_ak47launcher[id])
    {
        g_has_ak47launcher[id] = true
        
        ak47_mode[id] = get_pcvar_num(cvar_default_mode)
        g_grenade[id] = get_pcvar_num(cvar_ammo_default)
        cs_set_user_bpammo(id, CSW_AK47, 250)
        
        give_item(id, "weapon_ak47")
    }
    
    return PLUGIN_CONTINUE
}*/

public fw_changeweapon(id)
{
    if(
no_draw_other[id])
        return 
PLUGIN_HANDLED
    
    
return PLUGIN_CONTINUE
}

public 
fw_ak47_deploy_post(ent)
{
    static 
id
    id 
pev(entpev_owner)
    
    if(!
is_user_alive(id) || !is_user_connected(id))
        return 
HAM_IGNORED
    
    
if(get_user_weapon(id) == CSW_AK47 && g_has_ak47launcher[id] && ak47_mode[id] == 2)
        
set_task(0.2"show_ammo"id+TASK_SHOW_AMMO)
        
    return 
HAM_HANDLED
}

public 
fw_takedmg(victiminflictorattackerFloat:damagedamagebits)
{
    if(!
is_user_connected(victim) || !is_user_connected(attacker))
        return 
HAM_IGNORED
    
    
if(get_user_weapon(attacker) == CSW_AK47 && g_has_ak47launcher[attacker] && ak47_mode[attacker] == 1)
    {
        
SetHamParamFloat(4damage get_pcvar_float(cvar_normal_dmg))
    }
    
    return 
HAM_HANDLED
}

//for recoil and sound...
public fw_primary_attack(ent)
{
    new 
id pev(ent,pev_owner)
    
pev(id,pev_punchanglecl_pushangle[id])
    return 
HAM_IGNORED
}
public 
fw_primary_attack_post(ent)
{
    new 
id pev(ent,pev_owner)
    new 
clipammo
    
new weap get_user_weaponidclipammo )
    if(
weap == CSW_AK47 && g_has_ak47launcher[id])
    {
        new 
Float:push[3]
        
pev(id,pev_punchangle,push)
        
xs_vec_sub(push,cl_pushangle[id],push)
        
xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil),push)
        
xs_vec_add(push,cl_pushangle[id],push)
        
set_pev(id,pev_punchangle,push)
        if( 
clip 0)
        {
            
ExecuteHamB(Ham_Weapon_PlayEmptySoundent)
            
emit_sound(idCHAN_AUTO"weapons/svdex_shoot1.wav"1.0ATTN_NORM0PITCH_NORM)
        }
    }    
    
    return 
HAM_IGNORED
}

public 
event_newround(id)
{
    for(new 
0get_maxplayers(); i++)
    {
        
g_nodrop[i] = false
        no_draw_other
[i] = false
    
}
    
    for(new 
0entity_count(); i++)
    {
        static 
ent
        ent 
find_ent_by_class(-1weapon_classname)
        
        
remove_entity(ent)
    }
}

public 
cmd_drop(id)
{
    new 
plrClipplrAmmo
    
new plrWeapId
    plrWeapId 
get_user_weapon(idplrClip plrAmmo)
    
    if(
plrWeapId == CSW_AK47 && g_has_ak47launcher[id] && is_user_alive(id)) 
    {
        if(
g_nodrop[id])
        {
            return 
PLUGIN_HANDLED
        
} else {
            
no_draw_other[id] = false
            create_w_class
(idplrClipplrAmmo1)    
            return 
PLUGIN_HANDLED
        
}
    } 
    
    return 
PLUGIN_CONTINUE
}

public 
create_w_class(idclipammotype)
{
    new 
Float:Aim[3],Float:origin[3]
    
VelocityByAim(id64Aim)
    
entity_get_vector(id,EV_VEC_origin,origin)
    
    if (
type == 1) {
        
origin[0] += 2*Aim[0]
        
origin[1] += 2*Aim[1]
    }
    
    new 
ent create_entity("info_target")
    
entity_set_string(ent,EV_SZ_classnameweapon_classname)
    
entity_set_model(entw_model)    
    
    
entity_set_size(ent,Float:{-2.0,-2.0,-2.0},Float:{5.0,5.0,5.0})
    
entity_set_int(ent,EV_INT_solid,1)
    
    
entity_set_int(ent,EV_INT_movetype,6)
    
entity_set_int(entEV_INT_iuser1clip)
    
entity_set_int(entEV_INT_iuser2ammo)
    
entity_set_int(entEV_INT_iuser3g_grenade[id])
    
entity_set_vector(ent,EV_VEC_originorigin)
    
g_has_ak47launcher[id] = false
    remove_gun
(id)
}

public 
pfn_touch(ptrptd) {
    if(
is_valid_ent(ptr)) {
        
        new 
classname[32]
        
entity_get_string(ptr,EV_SZ_classname,classname,31)
        if(
equal(classnameweapon_classname)) {
            if(
is_valid_ent(ptd)) {
                new 
id ptd
                
if(id && id 34) {
                    if(!
g_has_ak47launcher[id] && is_user_alive(id)) {
                        
give_weapon(id,entity_get_int(ptrEV_INT_iuser1), entity_get_int(ptrEV_INT_iuser2))
                        
g_grenade[id] = entity_get_int(ptrEV_INT_iuser3)
                        
remove_entity(ptr)
                    }
                }
            }
        }
    }
}

public 
remove_gun(id) { 
    new 
wpnList[32
    new 
number
    get_user_weapons
(id,wpnList,number
    for (new 
0;number ;i++) { 
        if (
wpnList[i] == CSW_AK47) {
            
fm_strip_user_gun(idwpnList[i])
        }
    }


public 
give_weapon(idclipammo){
    
g_has_ak47launcher[id] = true
    give_item
(id"weapon_ak47")
    
cs_set_user_bpammo(idCSW_AK47ammo)
    new 
ent get_weapon_ent(idCSW_AK47)
    
cs_set_weapon_ammo(entclip)
    
}

public 
event_curweapon(id)
{
    if (!
is_user_alive(id))
        return 
PLUGIN_HANDLED
    
    
static CurWeapon
    CurWeapon 
read_data(2)
    
    if(
CurWeapon == CSW_AK47 && g_has_ak47launcher[id])
    {
        if(
ak47_mode[id] == 1)
        {
            static 
weapon_ent
            weapon_ent 
get_weapon_ent(idCurWeapon)
            
            if(
weapon_ent
            {
                static 
Float:Delay
                Delay 
get_pdata_float(weapon_ent464) * get_pcvar_float(cvar_speed)
                if (
Delay 0.0)
                    
set_pdata_float(weapon_ent46Delay4)
            }
            
            
set_pev(idpev_viewmodel2v_model1)
            } else if(
ak47_mode[id] == 2) {
            
set_pev(idpev_viewmodel2v_model2)
        }
        
        
set_pev(idpev_weaponmodel2p_model)
    }
    
    return 
PLUGIN_CONTINUE
}

public 
event_death()
{
    new 
id read_data(2)
    
    new 
plrClipplrAmmo
    get_user_weapon
(idplrClip plrAmmo)
    
    if(
g_has_ak47launcher[id])
    {
        
create_w_class(idplrClipplrAmmo0)
        
g_has_ak47launcher[id] = false
        
        
if(ak47_mode[id] == 2)
        {
            
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("HideWeapon"), _id)
            
write_byte(0)
            
message_end()
        }
        
        return 
PLUGIN_HANDLED
    
}    

    return 
PLUGIN_CONTINUE
}

public 
fw_spawn_post(id)
{
    if(
g_has_ak47launcher[id])
    {
        
g_has_ak47launcher[id] = false
    
}
    
g_grenade[id] = 0    
    g_nodrop
[id] = false
    
    message_begin
(MSG_ONE_UNRELIABLEget_user_msgid("HideWeapon"), _id)
    
write_byte(0)
    
message_end()
}

/*public zp_user_infected_post(id)
{
    if(g_has_ak47launcher[id])
    {
        g_has_ak47launcher[id] = false
    }
    
    g_grenade[id] = 0    
    g_nodrop[id] = false
    no_draw_other[id] = false
    
    message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
    write_byte(0)
    message_end()    
}*/

public fw_cmdstart(iduc_handleseed)
{
    if(!
is_user_alive(id) || !g_has_ak47launcher[id] || get_user_weapon(id) != CSW_AK47)
        return 
FMRES_IGNORED
    
    
if(is_changing[id])
        return 
FMRES_IGNORED
    
    
static ButtonFloat:TimefInReloadent
    
    Button 
get_uc(uc_handleUC_Buttons)
    
Time get_gametime()
    
ent find_ent_by_owner(-1"weapon_ak47"id)
    
fInReload get_pdata_int(ent544)
    
    if(
fInReload)
    {
        
no_draw_other[id] = true
        
return FMRES_IGNORED
        
} else {
        
no_draw_other[id] = false
    
}
    
    if(
Button IN_ATTACK2)
    {
        if(
ak47_mode[id] == 1)
        {
            
is_changing[id] = true
            no_draw_other
[id] = true
            g_nodrop
[id] = true
            
            play_weapon_anim
(id6)
            
set_player_nextattack(id1.8)
            
            new 
task[2]
            
task[0] = id
            task
[1] = 2
            set_task
(1.8"change_complete"_tasksizeof(task))
            
            
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("HideWeapon"), _id)
            
write_byte((1<<6))
            
message_end()
            
            } else if(
ak47_mode[id] == 2) {
            
is_changing[id] = true
            no_draw_other
[id] = true
            g_nodrop
[id] = true
            
            play_weapon_anim
(id6)
            
set_player_nextattack(id1.8)
            
            new 
task[2]
            
task[0] = id
            task
[1] = 1
            set_task
(1.8"change_complete"_tasksizeof(task))
        }
    }
    
    if(
Button IN_RELOAD)
    {
        if(
is_changing[id])
        {
            
Button &= ~IN_RELOAD
            set_uc
(uc_handleUC_ButtonsButton)
        }
    } else if(
Button IN_ATTACK) {
        if(
Time 3.0 last_press[id] && ak47_mode[id] == 2)
        {
            
set_player_nextattack(id999999.0)
            
            
launch_grenade(id)
            
last_press[id] = Time
        
}
    }
    
    return 
FMRES_HANDLED
}

public 
fw_touch(grenadeid)
{
    if(!
pev_valid(grenade))
        return 
FMRES_IGNORED
    
    
// Get it's origin
    
static Float:Origin[3]
    
pev(grenadepev_originOrigin)
    
    
// Explosion
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYOrigin0)
    
write_byte(TE_EXPLOSION)
    
engfunc(EngFunc_WriteCoordOrigin[0])
    
engfunc(EngFunc_WriteCoordOrigin[1])
    
engfunc(EngFunc_WriteCoordOrigin[2])
    
write_short(exp_spr)
    
write_byte(40)
    
write_byte(30)
    
write_byte(0)
    
message_end()
    
    static 
owneriVictim
    
    iVictim 
= -1
    owner 
pev(grenadepev_owner)    

    while((
iVictim find_ent_in_sphere(iVictimOriginget_pcvar_float(cvar_radius))) != 0)
    {
        if((
iVictim 32) && is_user_alive(iVictim) && zp_get_user_zombie(iVictim))
        {
            new 
Damage
            Damage 
get_pcvar_num(cvar_launch_dmg)
        
            
ExecuteHam(Ham_TakeDamageiVictim0owner0DMG_BULLET)
            static 
health
            health 
get_user_health(iVictim)
                
            if(
health Damage >= 1)
            {
                
set_user_health(iVictimhealth Damage
                
make_knockback(iVictimOrigin2.0 Damage)
            }
            else
            {
                
death_message(owneriVictim"grenade"1)
            }            
        }
    }
    
    
emit_sound(grenadeCHAN_VOICEgrenade_exp_sound1.0ATTN_NORM0PITCH_NORM
        
    
    
// Remove grenade
    
engfunc(EngFunc_RemoveEntitygrenade)
    
    
/*
    for(new i = 0; i < get_maxplayers(); i++)
    {
        if(is_user_alive(i) && is_user_connected(i))
        {
            static Float:Origin2[3], Float:distance_f
            
            pev(i, pev_origin, Origin2)
            distance_f = get_distance_f(Origin, Origin2)
            
            if (distance_f <= get_pcvar_float(cvar_radius))
            {
                new Damage
                Damage = get_pcvar_num(cvar_launch_dmg)
        
                ExecuteHamB(Ham_TakeDamage, i, "grenade", owner, Damage, DMG_BLAST)
                emit_sound(owner, CHAN_VOICE, grenade_exp_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) 
        
                if(!zp_get_user_zombie(i))
                    return FMRES_IGNORED
                if(i == owner)
                    return FMRES_IGNORED
                    
                static health
                health = get_user_health(i)
                
                if(health - Damage >= 1)
                {
                    set_user_health(i, health - Damage) 
                    make_knockback(i, Origin, 2.0 * Damage)
                }
                else
                {
                    death_message(owner, i, "grenade", 1)
                    Origin2[2] -= 45.0
                }
            }
        }
    }*/

    
return FMRES_HANDLED
}

public 
launch_grenade(id)
{    
    if(
g_grenade[id] <= 0)
    {
        
client_print(idprint_center"[Out Of Ammo]")
        return 
PLUGIN_HANDLED
    
}
    
    
play_weapon_anim(idrandom_num(35))
    
    new 
Float:Origin[3], Float:Velocity[3], Float:vAngle[3], Ent
    
    entity_get_vector
(idEV_VEC_origin Origin)
    
entity_get_vector(idEV_VEC_v_anglevAngle)
    
Origin[2] = Origin[2] + 10
    
    Ent 
create_entity("info_target")
    if (!
Ent) return PLUGIN_HANDLED
    
    entity_set_string
(EntEV_SZ_classname"svdex_grenade")
    
entity_set_model(Entgrenade_model)
    
    new 
Float:MinBox[3] = {-1.0, -1.0, -1.0}
    new 
Float:MaxBox[3] = {1.01.01.0}
    
entity_set_vector(EntEV_VEC_minsMinBox)
    
entity_set_vector(EntEV_VEC_maxsMaxBox)
    
    
entity_set_origin(EntOrigin)
    
entity_set_vector(EntEV_VEC_anglesvAngle)
    
    
entity_set_int(EntEV_INT_effects2)
    
entity_set_int(EntEV_INT_solid1)
    
entity_set_int(EntEV_INT_movetype10)
    
entity_set_edict(EntEV_ENT_ownerid)
    
    
VelocityByAim(id2500 Velocity)
    
entity_set_vector(EntEV_VEC_velocity ,Velocity)
    
    
//sound when lauch...
    
emit_sound(id,CHAN_VOICEgrenade_launch_sound1.0ATTN_NORM0PITCH_NORM
    
    
g_grenade[id]--
    
    
message_beginMSG_BROADCASTSVC_TEMPENTITY )
    
write_byte(TE_BEAMFOLLOW)
    
write_short(Ent)
    
write_short(g_trail)
    
write_byte(10)
    
write_byte(5)
    
write_byte(255)
    
write_byte(255)
    
write_byte(255)
    
write_byte(100)
    
message_end()
    
    if(
g_grenade[id] <= 0)
    {
        
client_print(idprint_center"Out Of Ammo... Switch to Auto-Mode !!!")
        
        
is_changing[id] = true
        no_draw_other
[id] = true
        
        play_weapon_anim
(id6)
        
set_player_nextattack(id1.8)
        
        new 
task[2]
        
task[0] = id
        task
[1] = 1
        set_task
(1.8"change_complete"_tasksizeof(task))
    } else {
        
client_print(idprint_center"Reloading... Please Wait !!!")
    }
        
    return 
PLUGIN_CONTINUE
}

public 
change_complete(task[])
{
    static 
idmode_change
    id 
task[0]
    
mode_change task[1]
    
    if(
mode_change == 1)
    {
        new 
ent find_ent_by_owner(-1"weapon_ak47"id)
        
ExecuteHam(Ham_Item_Deployent)
        
set_pev(idpev_viewmodel2v_model1)
        
play_weapon_anim(id0)
        
        
ak47_mode[id] = 1
        client_print
(idprint_center"[Switch to Auto-Mode ]")
        
        
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("HideWeapon"), _id)
        
write_byte(0)
        
message_end()
        
        } else if(
mode_change == 2) {
            
        new 
ent find_ent_by_owner(-1"weapon_ak47"id)
        
ExecuteHam(Ham_Item_Deployent)
        
set_pev(idpev_viewmodel2v_model2)
        
play_weapon_anim(id0)
        
set_player_nextattack(id999999.0)
        
        
ak47_mode[id] = 2
        client_print
(idprint_center"[Switch to Launcher-Mode]")
        
        
set_task(0.2"show_ammo"id+TASK_SHOW_AMMO__"b")
    }
    
g_nodrop[id] = false
    set_pev
(idpev_weaponmodel2p_model)
    
    
is_changing[id] = false
    no_draw_other
[id] = false
}

public 
play_weapon_anim(playeranim)
{
    
set_pev(playerpev_weaponanimanim)
    
message_begin(MSG_ONESVC_WEAPONANIM, {000}, player)
    
write_byte(anim)
    
write_byte(pev(playerpev_body))
    
message_end()
}

public 
set_player_nextattack(idFloat:nexttime)
{
    
set_pdata_float(id83nexttime5)
}

public 
make_knockback(idFloat:Origin[3], Float:maxspeed)
{
    
// Get and set velocity
    
new Float:fVelocity[3]
    
kickback(idOriginmaxspeedfVelocity)
    
    
entity_set_vector(idEV_VEC_velocityfVelocity)
}

stock kickback(entFloat:fOrigin[3], Float:fSpeedFloat:fVelocity[3])
{
    
// Find origin
    
new Float:fEntOrigin[3];
    
entity_get_vectorentEV_VEC_originfEntOrigin );

    
// Do some calculations
    
new Float:fDistance[3];
    
fDistance[0] = fEntOrigin[0] - fOrigin[0];
    
fDistance[1] = fEntOrigin[1] - fOrigin[1];
    
fDistance[2] = fEntOrigin[2] - fOrigin[2];
    new 
Float:fTime = (vector_distancefEntOrigin,fOrigin ) / fSpeed);
    
fVelocity[0] = fDistance[0] / fTime;
    
fVelocity[1] = fDistance[1] / fTime;
    
fVelocity[2] = fDistance[2] / fTime;

    return (
fVelocity[0] && fVelocity[1] && fVelocity[2]);
}

// Death message
public death_message(KillerVictim, const Weapon[], ScoreBoard)
{
    
// Block death msg
    
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET)
    
ExecuteHamB(Ham_KilledVictimKiller2)
    
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT)
    
    
// Death
    
make_deathmsg(KillerVictim0Weapon)

    
// Update score board
    
if (ScoreBoard)
    {
        
message_begin(MSG_BROADCASTget_user_msgid("ScoreInfo"))
        
write_byte(Killer// id
        
write_short(pev(Killerpev_frags)) // frags
        
write_short(cs_get_user_deaths(Killer)) // deaths
        
write_short(0// class?
        
write_short(get_user_team(Killer)) // team
        
message_end()
        
        
message_begin(MSG_BROADCASTget_user_msgid("ScoreInfo"))
        
write_byte(Victim// id
        
write_short(pev(Victimpev_frags)) // frags
        
write_short(cs_get_user_deaths(Victim)) // deaths
        
write_short(0// class?
        
write_short(get_user_team(Victim)) // team
        
message_end()
    }
}

public 
show_ammo(taskid)
{
    new 
id taskid TASK_SHOW_AMMO
    
    
if(get_user_weapon(id) == CSW_AK47 && g_has_ak47launcher[id] && ak47_mode[id] == 2)
    {
        static 
Message[32]
        
formatex(Messagesizeof(Message), "Grenade Ammo: %i/%i"g_grenade[id], get_pcvar_num(cvar_ammo_default))
        
        
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("StatusText"), {0,0,0}, id)
        
write_byte(0)
        
write_string(Message)
        
message_end()
    } else {
        
        
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("StatusText"), {0,0,0}, id)
        
write_byte(0)
        
write_string("")
        
message_end()
        
remove_task(id+TASK_SHOW_AMMO)
    }
}

stock get_weapon_ent(id,wpnid=0,wpnName[]="")
{
    static 
newName[24]

    if(
wpnidget_weaponname(wpnid,newName,23)
    else 
formatex(newName,23,"%s",wpnName)

    if(!
equal(newName,"weapon_",7))
        
format(newName,23,"weapon_%s",newName)

    return 
fm_find_ent_by_owner(get_maxplayers(),newName,id)
}
[
hr]
[/
quote]

grasias enverda te lo agradesto ::rainbow::rainbow::excitedeyes::victory::truestory::heart:

y esto tengo una pregunta podrias canbiar de zp a modo otma estre plugin
el cual es el svdex porque eres muy pro
:rainbow::rainbow:
y me enseñaria a ser como tu¿
solo se editar svars pero podrias desmotrarme tus conosimietos¿¿

aqui el codigo porfavor ponlo a modo normal y que no se me salga del cs
si no es molestia 
:roflmao:

no se poner eso de codigo PHP y que saga e un cuadro :v
codigo PHP




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

#define TASK_SHOW_AMMO 111111

new const weapon_classname[] = "svdex"
new const w_model[] = "models/zombie_plague/w_svdex.mdl"
new const p_model[] = "models/zombie_plague/p_svdex.mdl"
new const v_model1[] = "models/zombie_plague/v_svdex.mdl"
new const v_model2[] = "models/zombie_plague/v_svdex_2.mdl"
new const grenade_model[] = "models/zombie_plague/s_svdex.mdl"

new const grenade_exp_spr[] = "sprites/zombie_plague/explode_nade.spr"
new const grenade_exp_sound[] = "weapons/svdex_exp.wav"
new const grenade_launch_sound[] = "weapons/svdex_shoot2.wav"

new bool:g_has_ak47launcher[33]
new 
ak47_mode[33]
new 
bool:no_draw_other[33]
new 
bool:is_changing[33]
new 
Float:last_press[33]
new 
Float:cl_pushangle[33]

new 
g_grenade[33]
new 
g_nodrop[33]
new 
g_trailexp_spr

// Cvars
new cvar_default_modecvar_radius
new cvar_ammo_defaultcvar_normal_dmgcvar_launch_dmg
new cvar_speedcvar_recoil

// Weapon entity names
new const WEAPONENTNAMES[][] = {
    
"weapon_p228""weapon_scout""weapon_hegrenade""weapon_xm1014"
    
"weapon_c4""weapon_mac10""weapon_aug""weapon_smokegrenade""weapon_elite"
    
"weapon_fiveseven""weapon_ump45""weapon_sg550""weapon_galil""weapon_famas"
    
"weapon_usp""weapon_glock18""weapon_awp""weapon_mp5navy""weapon_m249",
    
"weapon_m3""weapon_m4a1""weapon_tmp""weapon_g3sg1""weapon_flashbang""weapon_deagle",
    
"weapon_sg552""weapon_ak47""weapon_knife""weapon_p90" 
}

new 
g_ak47launcher

public plugin_init()
{
    
register_plugin("[ZP] Extra Item: SvDex""1.0""Dias")
    
    
// Events
    
register_event("CurWeapon""event_curweapon""be""1=1")
    
register_event("DeathMsg""event_death""a")
    
register_event("HLTV""event_newround""a""1=0""2=0")
    
RegisterHam(Ham_Spawn"player""fw_spawn_post"1)
    for(new 
sizeof WEAPONENTNAMESi++)
        
register_clcmd(WEAPONENTNAMES[i], "fw_changeweapon")
    
register_clcmd("lastinv""fw_changeweapon")
    
RegisterHam(Ham_Item_Deploy"weapon_ak47""fw_ak47_deploy_post"1)
    
    
// Forward
    
register_forward(FM_CmdStart"fw_cmdstart")
    
register_touch("svdex_grenade""*""fw_touch")
    
RegisterHam(Ham_TakeDamage"player""fw_takedmg")
    
    
RegisterHam(Ham_Weapon_PrimaryAttack"weapon_ak47""fw_primary_attack")
    
RegisterHam(Ham_Weapon_PrimaryAttack"weapon_ak47""fw_primary_attack_post",1
    
    
// Cvars
    
cvar_default_mode register_cvar("zp_svdex_launcher_default_mode""1")
    
cvar_radius register_cvar("zp_svdex_launcher_radius""200.0")
    
    
cvar_speed register_cvar("zp_svdex_normal_speed""5.5")
    
cvar_recoil register_cvar("zp_svdex_normal_recoil""0.5")
    
cvar_normal_dmg register_cvar("zp_svdex_normal_dmg""4.5")    
    
    
cvar_ammo_default register_cvar("zp_svdex_launcher_ammo""10")
    
cvar_launch_dmg register_cvar("zp_svdex_launcher_dmg""650")
    
    
register_clcmd("drop""cmd_drop"0)
    
    
g_ak47launcher zp_register_extra_item("SvDex (2 Mode)"40ZP_TEAM_HUMAN)
}

public 
plugin_precache()
{
    
engfunc(EngFunc_PrecacheModelw_model)
    
engfunc(EngFunc_PrecacheModelp_model)
    
engfunc(EngFunc_PrecacheModelv_model1)
    
engfunc(EngFunc_PrecacheModelv_model2)
    
    
engfunc(EngFunc_PrecacheModelgrenade_model)
    
engfunc(EngFunc_PrecacheSoundgrenade_exp_sound)
    
engfunc(EngFunc_PrecacheSoundgrenade_launch_sound)
    
    
precache_sound("weapons/svdex_shoot1.wav")
    
precache_sound("weapons/svdex_clipin.wav")
    
precache_sound("weapons/svdex_clipon.wav")
    
precache_sound("weapons/svdex_clipout.wav")
    
precache_sound("weapons/svdex_draw.wav")
    
    
g_trail engfunc(EngFunc_PrecacheModel"sprites/smoke.spr")
    
exp_spr engfunc(EngFunc_PrecacheModelgrenade_exp_spr)
}

public 
zp_extra_item_selected(iditem)
{
    if(
item != g_ak47launcher)
        return 
PLUGIN_HANDLED
    
    
if(!g_has_ak47launcher[id])
    {
        
g_has_ak47launcher[id] = true
        
        ak47_mode
[id] = get_pcvar_num(cvar_default_mode)
        
g_grenade[id] = get_pcvar_num(cvar_ammo_default)
        
cs_set_user_bpammo(idCSW_AK47250)
        
        
give_item(id"weapon_ak47")
    }
    
    return 
PLUGIN_CONTINUE
}

public 
fw_changeweapon(id)
{
    if(
no_draw_other[id])
        return 
PLUGIN_HANDLED
    
    
return PLUGIN_CONTINUE
}

public 
fw_ak47_deploy_post(ent)
{
    static 
id
    id 
pev(entpev_owner)
    
    if(!
is_user_alive(id) || !is_user_connected(id))
        return 
HAM_IGNORED
    
    
if(get_user_weapon(id) == CSW_AK47 && g_has_ak47launcher[id] && ak47_mode[id] == 2)
        
set_task(0.2"show_ammo"id+TASK_SHOW_AMMO)
        
    return 
HAM_HANDLED
}

public 
fw_takedmg(victiminflictorattackerFloat:damagedamagebits)
{
    if(!
is_user_connected(victim) || !is_user_connected(attacker))
        return 
HAM_IGNORED
    
    
if(get_user_weapon(attacker) == CSW_AK47 && g_has_ak47launcher[attacker] && ak47_mode[attacker] == 1)
    {
        
SetHamParamFloat(4damage get_pcvar_float(cvar_normal_dmg))
    }
    
    return 
HAM_HANDLED
}

//for recoil and sound...
public fw_primary_attack(ent)
{
    new 
id pev(ent,pev_owner)
    
pev(id,pev_punchanglecl_pushangle[id])
    return 
HAM_IGNORED
}
public 
fw_primary_attack_post(ent)
{
    new 
id pev(ent,pev_owner)
    new 
clipammo
    
new weap get_user_weaponidclipammo )
    if(
weap == CSW_AK47 && g_has_ak47launcher[id])
    {
        new 
Float:push[3]
        
pev(id,pev_punchangle,push)
        
xs_vec_sub(push,cl_pushangle[id],push)
        
xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil),push)
        
xs_vec_add(push,cl_pushangle[id],push)
        
set_pev(id,pev_punchangle,push)
        if( 
clip 0)
        {
            
ExecuteHamB(Ham_Weapon_PlayEmptySoundent)
            
emit_sound(idCHAN_AUTO"weapons/svdex_shoot1.wav"1.0ATTN_NORM0PITCH_NORM)
        }
    }    
    
    return 
HAM_IGNORED
}

public 
event_newround(id)
{
    for(new 
0get_maxplayers(); i++)
    {
        
g_nodrop[i] = false
        no_draw_other
[i] = false
    
}
    
    for(new 
0entity_count(); i++)
    {
        static 
ent
        ent 
find_ent_by_class(-1weapon_classname)
        
        
remove_entity(ent)
    }
}

public 
cmd_drop(id)
{
    new 
plrClipplrAmmo
    
new plrWeapId
    plrWeapId 
get_user_weapon(idplrClip plrAmmo)
    
    if(
plrWeapId == CSW_AK47 && g_has_ak47launcher[id] && is_user_alive(id)) 
    {
        if(
g_nodrop[id])
        {
            return 
PLUGIN_HANDLED
        
} else {
            
no_draw_other[id] = false
            create_w_class
(idplrClipplrAmmo1)    
            return 
PLUGIN_HANDLED
        
}
    } 
    
    return 
PLUGIN_CONTINUE
}

public 
create_w_class(idclipammotype)
{
    new 
Float:Aim[3],Float:origin[3]
    
VelocityByAim(id64Aim)
    
entity_get_vector(id,EV_VEC_origin,origin)
    
    if (
type == 1) {
        
origin[0] += 2*Aim[0]
        
origin[1] += 2*Aim[1]
    }
    
    new 
ent create_entity("info_target")
    
entity_set_string(ent,EV_SZ_classnameweapon_classname)
    
entity_set_model(entw_model)    
    
    
entity_set_size(ent,Float:{-2.0,-2.0,-2.0},Float:{5.0,5.0,5.0})
    
entity_set_int(ent,EV_INT_solid,1)
    
    
entity_set_int(ent,EV_INT_movetype,6)
    
entity_set_int(entEV_INT_iuser1clip)
    
entity_set_int(entEV_INT_iuser2ammo)
    
entity_set_int(entEV_INT_iuser3g_grenade[id])
    
entity_set_vector(ent,EV_VEC_originorigin)
    
g_has_ak47launcher[id] = false
    remove_gun
(id)
}

public 
pfn_touch(ptrptd) {
    if(
is_valid_ent(ptr)) {
        
        new 
classname[32]
        
entity_get_string(ptr,EV_SZ_classname,classname,31)
        if(
equal(classnameweapon_classname)) {
            if(
is_valid_ent(ptd)) {
                new 
id ptd
                
if(id && id 34) {
                    if(!
g_has_ak47launcher[id] && is_user_alive(id)) {
                        
give_weapon(id,entity_get_int(ptrEV_INT_iuser1), entity_get_int(ptrEV_INT_iuser2))
                        
g_grenade[id] = entity_get_int(ptrEV_INT_iuser3)
                        
remove_entity(ptr)
                    }
                }
            }
        }
    }
}

public 
remove_gun(id) { 
    new 
wpnList[32
    new 
number
    get_user_weapons
(id,wpnList,number
    for (new 
0;number ;i++) { 
        if (
wpnList[i] == CSW_AK47) {
            
fm_strip_user_gun(idwpnList[i])
        }
    }


public 
give_weapon(idclipammo){
    
g_has_ak47launcher[id] = true
    give_item
(id"weapon_ak47")
    
cs_set_user_bpammo(idCSW_AK47ammo)
    new 
ent get_weapon_ent(idCSW_AK47)
    
cs_set_weapon_ammo(entclip)
    
}

public 
event_curweapon(id)
{
    if (!
is_user_alive(id))
        return 
PLUGIN_HANDLED
    
    
static CurWeapon
    CurWeapon 
read_data(2)
    
    if(
CurWeapon == CSW_AK47 && g_has_ak47launcher[id])
    {
        if(
ak47_mode[id] == 1)
        {
            static 
weapon_ent
            weapon_ent 
get_weapon_ent(idCurWeapon)
            
            if(
weapon_ent
            {
                static 
Float:Delay
                Delay 
get_pdata_float(weapon_ent464) * get_pcvar_float(cvar_speed)
                if (
Delay 0.0)
                    
set_pdata_float(weapon_ent46Delay4)
            }
            
            
set_pev(idpev_viewmodel2v_model1)
            } else if(
ak47_mode[id] == 2) {
            
set_pev(idpev_viewmodel2v_model2)
        }
        
        
set_pev(idpev_weaponmodel2p_model)
    }
    
    return 
PLUGIN_CONTINUE
}

public 
event_death()
{
    new 
id read_data(2)
    
    new 
plrClipplrAmmo
    get_user_weapon
(idplrClip plrAmmo)
    
    if(
g_has_ak47launcher[id])
    {
        
create_w_class(idplrClipplrAmmo0)
        
g_has_ak47launcher[id] = false
        
        
if(ak47_mode[id] == 2)
        {
            
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("HideWeapon"), _id)
            
write_byte(0)
            
message_end()
        }
        
        return 
PLUGIN_HANDLED
    
}    

    return 
PLUGIN_CONTINUE
}

public 
fw_spawn_post(id)
{
    if(
g_has_ak47launcher[id])
    {
        
g_has_ak47launcher[id] = false
    
}
    
g_grenade[id] = 0    
    g_nodrop
[id] = false
    
    message_begin
(MSG_ONE_UNRELIABLEget_user_msgid("HideWeapon"), _id)
    
write_byte(0)
    
message_end()
}

/*public zp_user_infected_post(id)
{
    if(g_has_ak47launcher[id])
    {
        g_has_ak47launcher[id] = false
    }
    
    g_grenade[id] = 0    
    g_nodrop[id] = false
    no_draw_other[id] = false
    
    message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
    write_byte(0)
    message_end()    
}*/

public fw_cmdstart(iduc_handleseed)
{
    if(!
is_user_alive(id) || !g_has_ak47launcher[id] || get_user_weapon(id) != CSW_AK47)
        return 
FMRES_IGNORED
    
    
if(is_changing[id])
        return 
FMRES_IGNORED
    
    
static ButtonFloat:TimefInReloadent
    
    Button 
get_uc(uc_handleUC_Buttons)
    
Time get_gametime()
    
ent find_ent_by_owner(-1"weapon_ak47"id)
    
fInReload get_pdata_int(ent544)
    
    if(
fInReload)
    {
        
no_draw_other[id] = true
        
return FMRES_IGNORED
        
} else {
        
no_draw_other[id] = false
    
}
    
    if(
Button IN_ATTACK2)
    {
        if(
ak47_mode[id] == 1)
        {
            
is_changing[id] = true
            no_draw_other
[id] = true
            g_nodrop
[id] = true
            
            play_weapon_anim
(id6)
            
set_player_nextattack(id1.8)
            
            new 
task[2]
            
task[0] = id
            task
[1] = 2
            set_task
(1.8"change_complete"_tasksizeof(task))
            
            
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("HideWeapon"), _id)
            
write_byte((1<<6))
            
message_end()
            
            } else if(
ak47_mode[id] == 2) {
            
is_changing[id] = true
            no_draw_other
[id] = true
            g_nodrop
[id] = true
            
            play_weapon_anim
(id6)
            
set_player_nextattack(id1.8)
            
            new 
task[2]
            
task[0] = id
            task
[1] = 1
            set_task
(1.8"change_complete"_tasksizeof(task))
        }
    }
    
    if(
Button IN_RELOAD)
    {
        if(
is_changing[id])
        {
            
Button &= ~IN_RELOAD
            set_uc
(uc_handleUC_ButtonsButton)
        }
    } else if(
Button IN_ATTACK) {
        if(
Time 3.0 last_press[id] && ak47_mode[id] == 2)
        {
            
set_player_nextattack(id999999.0)
            
            
launch_grenade(id)
            
last_press[id] = Time
        
}
    }
    
    return 
FMRES_HANDLED
}

public 
fw_touch(grenadeid)
{
    if(!
pev_valid(grenade))
        return 
FMRES_IGNORED
    
    
// Get it's origin
    
static Float:Origin[3]
    
pev(grenadepev_originOrigin)
    
    
// Explosion
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYOrigin0)
    
write_byte(TE_EXPLOSION)
    
engfunc(EngFunc_WriteCoordOrigin[0])
    
engfunc(EngFunc_WriteCoordOrigin[1])
    
engfunc(EngFunc_WriteCoordOrigin[2])
    
write_short(exp_spr)
    
write_byte(40)
    
write_byte(30)
    
write_byte(0)
    
message_end()
    
    static 
owneriVictim
    
    iVictim 
= -1
    owner 
pev(grenadepev_owner)    

    while((
iVictim find_ent_in_sphere(iVictimOriginget_pcvar_float(cvar_radius))) != 0)
    {
        if((
iVictim 32) && is_user_alive(iVictim) && zp_get_user_zombie(iVictim))
        {
            new 
Damage
            Damage 
get_pcvar_num(cvar_launch_dmg)
        
            
ExecuteHam(Ham_TakeDamageiVictim0owner0DMG_BULLET)
            static 
health
            health 
get_user_health(iVictim)
                
            if(
health Damage >= 1)
            {
                
set_user_health(iVictimhealth Damage
                
make_knockback(iVictimOrigin2.0 Damage)
            }
            else
            {
                
death_message(owneriVictim"grenade"1)
            }            
        }
    }
    
    
emit_sound(grenadeCHAN_VOICEgrenade_exp_sound1.0ATTN_NORM0PITCH_NORM
        
    
    
// Remove grenade
    
engfunc(EngFunc_RemoveEntitygrenade)
    
    
/*
    for(new i = 0; i < get_maxplayers(); i++)
    {
        if(is_user_alive(i) && is_user_connected(i))
        {
            static Float:Origin2[3], Float:distance_f
            
            pev(i, pev_origin, Origin2)
            distance_f = get_distance_f(Origin, Origin2)
            
            if (distance_f <= get_pcvar_float(cvar_radius))
            {
                new Damage
                Damage = get_pcvar_num(cvar_launch_dmg)
        
                ExecuteHamB(Ham_TakeDamage, i, "grenade", owner, Damage, DMG_BLAST)
                emit_sound(owner, CHAN_VOICE, grenade_exp_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) 
        
                if(!zp_get_user_zombie(i))
                    return FMRES_IGNORED
                if(i == owner)
                    return FMRES_IGNORED
                    
                static health
                health = get_user_health(i)
                
                if(health - Damage >= 1)
                {
                    set_user_health(i, health - Damage) 
                    make_knockback(i, Origin, 2.0 * Damage)
                }
                else
                {
                    death_message(owner, i, "grenade", 1)
                    Origin2[2] -= 45.0
                }
            }
        }
    }*/

    
return FMRES_HANDLED
}

public 
launch_grenade(id)
{    
    if(
g_grenade[id] <= 0)
    {
        
client_print(idprint_center"[Out Of Ammo]")
        return 
PLUGIN_HANDLED
    
}
    
    
play_weapon_anim(idrandom_num(35))
    
    new 
Float:Origin[3], Float:Velocity[3], Float:vAngle[3], Ent
    
    entity_get_vector
(idEV_VEC_origin Origin)
    
entity_get_vector(idEV_VEC_v_anglevAngle)
    
Origin[2] = Origin[2] + 10
    
    Ent 
create_entity("info_target")
    if (!
Ent) return PLUGIN_HANDLED
    
    entity_set_string
(EntEV_SZ_classname"svdex_grenade")
    
entity_set_model(Entgrenade_model)
    
    new 
Float:MinBox[3] = {-1.0, -1.0, -1.0}
    new 
Float:MaxBox[3] = {1.01.01.0}
    
entity_set_vector(EntEV_VEC_minsMinBox)
    
entity_set_vector(EntEV_VEC_maxsMaxBox)
    
    
entity_set_origin(EntOrigin)
    
entity_set_vector(EntEV_VEC_anglesvAngle)
    
    
entity_set_int(EntEV_INT_effects2)
    
entity_set_int(EntEV_INT_solid1)
    
entity_set_int(EntEV_INT_movetype10)
    
entity_set_edict(EntEV_ENT_ownerid)
    
    
VelocityByAim(id2500 Velocity)
    
entity_set_vector(EntEV_VEC_velocity ,Velocity)
    
    
//sound when lauch...
    
emit_sound(id,CHAN_VOICEgrenade_launch_sound1.0ATTN_NORM0PITCH_NORM
    
    
g_grenade[id]--
    
    
message_beginMSG_BROADCASTSVC_TEMPENTITY )
    
write_byte(TE_BEAMFOLLOW)
    
write_short(Ent)
    
write_short(g_trail)
    
write_byte(10)
    
write_byte(5)
    
write_byte(255)
    
write_byte(255)
    
write_byte(255)
    
write_byte(100)
    
message_end()
    
    if(
g_grenade[id] <= 0)
    {
        
client_print(idprint_center"Out Of Ammo... Switch to Auto-Mode !!!")
        
        
is_changing[id] = true
        no_draw_other
[id] = true
        
        play_weapon_anim
(id6)
        
set_player_nextattack(id1.8)
        
        new 
task[2]
        
task[0] = id
        task
[1] = 1
        set_task
(1.8"change_complete"_tasksizeof(task))
    } else {
        
client_print(idprint_center"Reloading... Please Wait !!!")
    }
        
    return 
PLUGIN_CONTINUE
}

public 
change_complete(task[])
{
    static 
idmode_change
    id 
task[0]
    
mode_change task[1]
    
    if(
mode_change == 1)
    {
        new 
ent find_ent_by_owner(-1"weapon_ak47"id)
        
ExecuteHam(Ham_Item_Deployent)
        
set_pev(idpev_viewmodel2v_model1)
        
play_weapon_anim(id0)
        
        
ak47_mode[id] = 1
        client_print
(idprint_center"[Switch to Auto-Mode ]")
        
        
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("HideWeapon"), _id)
        
write_byte(0)
        
message_end()
        
        } else if(
mode_change == 2) {
            
        new 
ent find_ent_by_owner(-1"weapon_ak47"id)
        
ExecuteHam(Ham_Item_Deployent)
        
set_pev(idpev_viewmodel2v_model2)
        
play_weapon_anim(id0)
        
set_player_nextattack(id999999.0)
        
        
ak47_mode[id] = 2
        client_print
(idprint_center"[Switch to Launcher-Mode]")
        
        
set_task(0.2"show_ammo"id+TASK_SHOW_AMMO__"b")
    }
    
g_nodrop[id] = false
    set_pev
(idpev_weaponmodel2p_model)
    
    
is_changing[id] = false
    no_draw_other
[id] = false
}

public 
play_weapon_anim(playeranim)
{
    
set_pev(playerpev_weaponanimanim)
    
message_begin(MSG_ONESVC_WEAPONANIM, {000}, player)
    
write_byte(anim)
    
write_byte(pev(playerpev_body))
    
message_end()
}

public 
set_player_nextattack(idFloat:nexttime)
{
    
set_pdata_float(id83nexttime5)
}

public 
make_knockback(idFloat:Origin[3], Float:maxspeed)
{
    
// Get and set velocity
    
new Float:fVelocity[3]
    
kickback(idOriginmaxspeedfVelocity)
    
    
entity_set_vector(idEV_VEC_velocityfVelocity)
}

stock kickback(entFloat:fOrigin[3], Float:fSpeedFloat:fVelocity[3])
{
    
// Find origin
    
new Float:fEntOrigin[3];
    
entity_get_vectorentEV_VEC_originfEntOrigin );

    
// Do some calculations
    
new Float:fDistance[3];
    
fDistance[0] = fEntOrigin[0] - fOrigin[0];
    
fDistance[1] = fEntOrigin[1] - fOrigin[1];
    
fDistance[2] = fEntOrigin[2] - fOrigin[2];
    new 
Float:fTime = (vector_distancefEntOrigin,fOrigin ) / fSpeed);
    
fVelocity[0] = fDistance[0] / fTime;
    
fVelocity[1] = fDistance[1] / fTime;
    
fVelocity[2] = fDistance[2] / fTime;

    return (
fVelocity[0] && fVelocity[1] && fVelocity[2]);
}

// Death message
public death_message(KillerVictim, const Weapon[], ScoreBoard)
{
    
// Block death msg
    
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET)
    
ExecuteHamB(Ham_KilledVictimKiller2)
    
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT)
    
    
// Death
    
make_deathmsg(KillerVictim0Weapon)

    
// Update score board
    
if (ScoreBoard)
    {
        
message_begin(MSG_BROADCASTget_user_msgid("ScoreInfo"))
        
write_byte(Killer// id
        
write_short(pev(Killerpev_frags)) // frags
        
write_short(cs_get_user_deaths(Killer)) // deaths
        
write_short(0// class?
        
write_short(get_user_team(Killer)) // team
        
message_end()
        
        
message_begin(MSG_BROADCASTget_user_msgid("ScoreInfo"))
        
write_byte(Victim// id
        
write_short(pev(Victimpev_frags)) // frags
        
write_short(cs_get_user_deaths(Victim)) // deaths
        
write_short(0// class?
        
write_short(get_user_team(Victim)) // team
        
message_end()
    }
}

public 
show_ammo(taskid)
{
    new 
id taskid TASK_SHOW_AMMO
    
    
if(get_user_weapon(id) == CSW_AK47 && g_has_ak47launcher[id] && ak47_mode[id] == 2)
    {
        static 
Message[32]
        
formatex(Messagesizeof(Message), "Grenade Ammo: %i/%i"g_grenade[id], get_pcvar_num(cvar_ammo_default))
        
        
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("StatusText"), {0,0,0}, id)
        
write_byte(0)
        
write_string(Message)
        
message_end()
    } else {
        
        
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("StatusText"), {0,0,0}, id)
        
write_byte(0)
        
write_string("")
        
message_end()
        
remove_task(id+TASK_SHOW_AMMO)
    }
}

stock get_weapon_ent(id,wpnid=0,wpnName[]="")
{
    static 
newName[24]

    if(
wpnidget_weaponname(wpnid,newName,23)
    else 
formatex(newName,23,"%s",wpnName)

    if(!
equal(newName,"weapon_",7))
        
format(newName,23,"weapon_%s",newName)

    return 
fm_find_ent_by_owner(get_maxplayers(),newName,id)


Responder
#10
[quote='Skylar' pid='141534' dateline='1475265230']
[quote='mmeka12' pid='141530' dateline='1475264708']

grasias enverda te lo agradesto Gran sonrisa RainbowRainbowExcitedeyesVictoryTruestoryCorazón

y esto tengo una pregunta podrias canbiar de zp a modo otma estre plugin
el cual es el svdex porque eres muy proRainbowRainbow
y me enseñaria a ser como tu¿
solo se editar svars pero podrias desmotrarme tus conosimietos¿¿

aqui el codigo porfavor ponlo a modo normal y que no se me salga del cs
si no es molestia Roflmao

PHP


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

#define TASK_SHOW_AMMO 111111

new const weapon_classname[] = "svdex"
new const w_model[] = "models/zombie_plague/w_svdex.mdl"
new const p_model[] = "models/zombie_plague/p_svdex.mdl"
new const v_model1[] = "models/zombie_plague/v_svdex.mdl"
new const v_model2[] = "models/zombie_plague/v_svdex_2.mdl"
new const grenade_model[] = "models/zombie_plague/s_svdex.mdl"

new const grenade_exp_spr[] = "sprites/zombie_plague/explode_nade.spr"
new const grenade_exp_sound[] = "weapons/svdex_exp.wav"
new const grenade_launch_sound[] = "weapons/svdex_shoot2.wav"

new bool:g_has_ak47launcher[33]
new ak47_mode[33]
new bool:no_draw_other[33]
new bool:is_changing[33]
new Float:last_press[33]
new Float:cl_pushangle[33]

new g_grenade[33]
new g_nodrop[33]
new g_trail, exp_spr

// Cvars
new cvar_default_mode, cvar_radius
new cvar_ammo_default, cvar_normal_dmg, cvar_launch_dmg
new cvar_speed, cvar_recoil

// Weapon entity names
new const WEAPONENTNAMES[][] = {
"weapon_p228", "weapon_scout", "weapon_hegrenade", "weapon_xm1014",
"weapon_c4", "weapon_mac10", "weapon_aug", "weapon_smokegrenade", "weapon_elite",
"weapon_fiveseven", "weapon_ump45", "weapon_sg550", "weapon_galil", "weapon_famas",
"weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle",
"weapon_sg552", "weapon_ak47", "weapon_knife", "weapon_p90"
}

new g_ak47launcher

public plugin_init()
{
register_plugin("[ZP] Extra Item: SvDex", "1.0", "Dias")

// Events
register_event("CurWeapon", "event_curweapon", "be", "1=1")
register_event("DeathMsg", "event_death", "a")
register_event("HLTV", "event_newround", "a", "1=0", "2=0")
RegisterHam(Ham_Spawn, "player", "fw_spawn_post", 1)
for(new i = 0 ; i < sizeof WEAPONENTNAMES; i++)
register_clcmd(WEAPONENTNAMES[i], "fw_changeweapon")
register_clcmd("lastinv", "fw_changeweapon")
RegisterHam(Ham_Item_Deploy, "weapon_ak47", "fw_ak47_deploy_post", 1)

// Forward
register_forward(FM_CmdStart, "fw_cmdstart")
register_touch("svdex_grenade", "*", "fw_touch")
RegisterHam(Ham_TakeDamage, "player", "fw_takedmg")

RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "fw_primary_attack")
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "fw_primary_attack_post",1)

// Cvars
cvar_default_mode = register_cvar("zp_svdex_launcher_default_mode", "1")
cvar_radius = register_cvar("zp_svdex_launcher_radius", "200.0")

cvar_speed = register_cvar("zp_svdex_normal_speed", "5.5")
cvar_recoil = register_cvar("zp_svdex_normal_recoil", "0.5")
cvar_normal_dmg = register_cvar("zp_svdex_normal_dmg", "4.5")

cvar_ammo_default = register_cvar("zp_svdex_launcher_ammo", "10")
cvar_launch_dmg = register_cvar("zp_svdex_launcher_dmg", "650")

register_clcmd("drop", "cmd_drop", 0)

g_ak47launcher = zp_register_extra_item("SvDex (2 Mode)", 40, ZP_TEAM_HUMAN)
}

public plugin_precache()
{
engfunc(EngFunc_PrecacheModel, w_model)
engfunc(EngFunc_PrecacheModel, p_model)
engfunc(EngFunc_PrecacheModel, v_model1)
engfunc(EngFunc_PrecacheModel, v_model2)

engfunc(EngFunc_PrecacheModel, grenade_model)
engfunc(EngFunc_PrecacheSound, grenade_exp_sound)
engfunc(EngFunc_PrecacheSound, grenade_launch_sound)

precache_sound("weapons/svdex_shoot1.wav")
precache_sound("weapons/svdex_clipin.wav")
precache_sound("weapons/svdex_clipon.wav")
precache_sound("weapons/svdex_clipout.wav")
precache_sound("weapons/svdex_draw.wav")

g_trail = engfunc(EngFunc_PrecacheModel, "sprites/smoke.spr")
exp_spr = engfunc(EngFunc_PrecacheModel, grenade_exp_spr)
}

public zp_extra_item_selected(id, item)
{
if(item != g_ak47launcher)
return PLUGIN_HANDLED

if(!g_has_ak47launcher[id])
{
g_has_ak47launcher[id] = true

ak47_mode[id] = get_pcvar_num(cvar_default_mode)
g_grenade[id] = get_pcvar_num(cvar_ammo_default)
cs_set_user_bpammo(id, CSW_AK47, 250)

give_item(id, "weapon_ak47")
}

return PLUGIN_CONTINUE
}

public fw_changeweapon(id)
{
if(no_draw_other[id])
return PLUGIN_HANDLED

return PLUGIN_CONTINUE
}

public fw_ak47_deploy_post(ent)
{
static id
id = pev(ent, pev_owner)

if(!is_user_alive(id) || !is_user_connected(id))
return HAM_IGNORED

if(get_user_weapon(id) == CSW_AK47 && g_has_ak47launcher[id] && ak47_mode[id] == 2)
set_task(0.2, "show_ammo", id+TASK_SHOW_AMMO)

return HAM_HANDLED
}

public fw_takedmg(victim, inflictor, attacker, Float:damage, damagebits)
{
if(!is_user_connected(victim) || !is_user_connected(attacker))
return HAM_IGNORED

if(get_user_weapon(attacker) == CSW_AK47 && g_has_ak47launcher[attacker] && ak47_mode[attacker] == 1)
{
SetHamParamFloat(4, damage * get_pcvar_float(cvar_normal_dmg))
}

return HAM_HANDLED
}

//for recoil and sound...
public fw_primary_attack(ent)
{
new id = pev(ent,pev_owner)
pev(id,pev_punchangle, cl_pushangle[id])
return HAM_IGNORED
}
public fw_primary_attack_post(ent)
{
new id = pev(ent,pev_owner)
new clip, ammo
new weap = get_user_weapon( id, clip, ammo )
if(weap == CSW_AK47 && g_has_ak47launcher[id])
{
new Float:push[3]
pev(id,pev_punchangle,push)
xs_vec_sub(push,cl_pushangle[id],push)
xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil),push)
xs_vec_add(push,cl_pushangle[id],push)
set_pev(id,pev_punchangle,push)
if( clip > 0)
{
ExecuteHamB(Ham_Weapon_PlayEmptySound, ent)
emit_sound(id, CHAN_AUTO, "weapons/svdex_shoot1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}

return HAM_IGNORED
}

public event_newround(id)
{
for(new i = 0; i < get_maxplayers(); i++)
{
g_nodrop[i] = false
no_draw_other[i] = false
}

for(new i = 0; i < entity_count(); i++)
{
static ent
ent = find_ent_by_class(-1, weapon_classname)

remove_entity(ent)
}
}

public cmd_drop(id)
{
new plrClip, plrAmmo
new plrWeapId
plrWeapId = get_user_weapon(id, plrClip , plrAmmo)

if(plrWeapId == CSW_AK47 && g_has_ak47launcher[id] && is_user_alive(id))
{
if(g_nodrop[id])
{
return PLUGIN_HANDLED
} else {
no_draw_other[id] = false
create_w_class(id, plrClip, plrAmmo, 1)
return PLUGIN_HANDLED
}
}

return PLUGIN_CONTINUE
}

public create_w_class(id, clip, ammo, type)
{
new Float:Aim[3],Float:origin[3]
VelocityByAim(id, 64, Aim)
entity_get_vector(id,EV_VEC_origin,origin)

if (type == 1) {
origin[0] += 2*Aim[0]
origin[1] += 2*Aim[1]
}

new ent = create_entity("info_target")
entity_set_string(ent,EV_SZ_classname, weapon_classname)
entity_set_model(ent, w_model)

entity_set_size(ent,Float:{-2.0,-2.0,-2.0},Float:{5.0,5.0,5.0})
entity_set_int(ent,EV_INT_solid,1)

entity_set_int(ent,EV_INT_movetype,6)
entity_set_int(ent, EV_INT_iuser1, clip)
entity_set_int(ent, EV_INT_iuser2, ammo)
entity_set_int(ent, EV_INT_iuser3, g_grenade[id])
entity_set_vector(ent,EV_VEC_origin, origin)
g_has_ak47launcher[id] = false
remove_gun(id)
}

public pfn_touch(ptr, ptd) {
if(is_valid_ent(ptr)) {

new classname[32]
entity_get_string(ptr,EV_SZ_classname,classname,31)
if(equal(classname, weapon_classname)) {
if(is_valid_ent(ptd)) {
new id = ptd
if(id > 0 && id < 34) {
if(!g_has_ak47launcher[id] && is_user_alive(id)) {
give_weapon(id,entity_get_int(ptr, EV_INT_iuser1), entity_get_int(ptr, EV_INT_iuser2))
g_grenade[id] = entity_get_int(ptr, EV_INT_iuser3)
remove_entity(ptr)
}
}
}
}
}
}

public remove_gun(id) {
new wpnList[32]
new number
get_user_weapons(id,wpnList,number)
for (new i = 0;i < number ;i++) {
if (wpnList[i] == CSW_AK47) {
fm_strip_user_gun(id, wpnList[i])
}
}
}

public give_weapon(id, clip, ammo){
g_has_ak47launcher[id] = true
give_item(id, "weapon_ak47")
cs_set_user_bpammo(id, CSW_AK47, ammo)
new ent = get_weapon_ent(id, CSW_AK47)
cs_set_weapon_ammo(ent, clip)

}

public event_curweapon(id)
{
if (!is_user_alive(id))
return PLUGIN_HANDLED

static CurWeapon
CurWeapon = read_data(2)

if(CurWeapon == CSW_AK47 && g_has_ak47launcher[id])
{
if(ak47_mode[id] == 1)
{
static weapon_ent
weapon_ent = get_weapon_ent(id, CurWeapon)

if(weapon_ent)
{
static FloatGran sonrisaelay
Delay = get_pdata_float(weapon_ent, 46, 4) * get_pcvar_float(cvar_speed)
if (Delay > 0.0)
set_pdata_float(weapon_ent, 46, Delay, 4)
}

set_pev(id, pev_viewmodel2, v_model1)
} else if(ak47_mode[id] == 2) {
set_pev(id, pev_viewmodel2, v_model2)
}

set_pev(id, pev_weaponmodel2, p_model)
}

return PLUGIN_CONTINUE
}

public event_death()
{
new id = read_data(2)

new plrClip, plrAmmo
get_user_weapon(id, plrClip , plrAmmo)

if(g_has_ak47launcher[id])
{
create_w_class(id, plrClip, plrAmmo, 0)
g_has_ak47launcher[id] = false

if(ak47_mode[id] == 2)
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
write_byte(0)
message_end()
}

return PLUGIN_HANDLED
}

return PLUGIN_CONTINUE
}

public fw_spawn_post(id)
{
if(g_has_ak47launcher[id])
{
g_has_ak47launcher[id] = false
}
g_grenade[id] = 0
g_nodrop[id] = false

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
write_byte(0)
message_end()
}

public zp_user_infected_post(id)
{
if(g_has_ak47launcher[id])
{
g_has_ak47launcher[id] = false
}

g_grenade[id] = 0
g_nodrop[id] = false
no_draw_other[id] = false

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
write_byte(0)
message_end()
}

public fw_cmdstart(id, uc_handle, seed)
{
if(!is_user_alive(id) || !g_has_ak47launcher[id] || get_user_weapon(id) != CSW_AK47)
return FMRES_IGNORED

if(is_changing[id])
return FMRES_IGNORED

static Button, Float:Time, fInReload, ent

Button = get_uc(uc_handle, UC_Buttons)
Time = get_gametime()
ent = find_ent_by_owner(-1, "weapon_ak47", id)
fInReload = get_pdata_int(ent, 54, 4)

if(fInReload)
{
no_draw_other[id] = true
return FMRES_IGNORED
} else {
no_draw_other[id] = false
}

if(Button & IN_ATTACK2)
{
if(ak47_mode[id] == 1)
{
is_changing[id] = true
no_draw_other[id] = true
g_nodrop[id] = true

play_weapon_anim(id, 6)
set_player_nextattack(id, 1.8)

new task[2]
task[0] = id
task[1] = 2
set_task(1.8, "change_complete", _, task, sizeof(task))

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
write_byte((1<<6))
message_end()

} else if(ak47_mode[id] == 2) {
is_changing[id] = true
no_draw_other[id] = true
g_nodrop[id] = true

play_weapon_anim(id, 6)
set_player_nextattack(id, 1.8)

new task[2]
task[0] = id
task[1] = 1
set_task(1.8, "change_complete", _, task, sizeof(task))
}
}

if(Button & IN_RELOAD)
{
if(is_changing[id])
{
Button &= ~IN_RELOAD
set_uc(uc_handle, UC_Buttons, Button)
}
} else if(Button & IN_ATTACK) {
if(Time - 3.0 > last_press[id] && ak47_mode[id] == 2)
{
set_player_nextattack(id, 999999.0)

launch_grenade(id)
last_press[id] = Time
}
}

return FMRES_HANDLED
}

public fw_touch(grenade, id)
{
if(!pev_valid(grenade))
return FMRES_IGNORED

// Get it's origin
static Float:Origin[3]
pev(grenade, pev_origin, Origin)

// Explosion
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0)
write_byte(TE_EXPLOSION)
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2])
write_short(exp_spr)
write_byte(40)
write_byte(30)
write_byte(0)
message_end()

static owner, iVictim

iVictim = -1
owner = pev(grenade, pev_owner)

while((iVictim = find_ent_in_sphere(iVictim, Origin, get_pcvar_float(cvar_radius))) != 0)
{
if((0 < iVictim < 32) && is_user_alive(iVictim) && zp_get_user_zombie(iVictim))
{
new Damage
Damage = get_pcvar_num(cvar_launch_dmg)

ExecuteHam(Ham_TakeDamage, iVictim, 0, owner, 0, DMG_BULLET)
static health
health = get_user_health(iVictim)

if(health - Damage >= 1)
{
set_user_health(iVictim, health - Damage)
make_knockback(iVictim, Origin, 2.0 * Damage)
}
else
{
death_message(owner, iVictim, "grenade", 1)
}
}
}

emit_sound(grenade, CHAN_VOICE, grenade_exp_sound, 1.0, ATTN_NORM, 0, PITCH_NORM)


// Remove grenade
engfunc(EngFunc_RemoveEntity, grenade)

/*
for(new i = 0; i < get_maxplayers(); i++)
{
if(is_user_alive(i) && is_user_connected(i))
{
static Float:Origin2[3], Float:distance_f

pev(i, pev_origin, Origin2)
distance_f = get_distance_f(Origin, Origin2)

if (distance_f <= get_pcvar_float(cvar_radius))
{
new Damage
Damage = get_pcvar_num(cvar_launch_dmg)

ExecuteHamB(Ham_TakeDamage, i, "grenade", owner, Damage, DMG_BLAST)
emit_sound(owner, CHAN_VOICE, grenade_exp_sound, 1.0, ATTN_NORM, 0, PITCH_NORM)

if(!zp_get_user_zombie(i))
return FMRES_IGNORED
if(i == owner)
return FMRES_IGNORED

static health
health = get_user_health(i)

if(health - Damage >= 1)
{
set_user_health(i, health - Damage)
make_knockback(i, Origin, 2.0 * Damage)
}
else
{
death_message(owner, i, "grenade", 1)
Origin2[2] -= 45.0
}
}
}
}*/

return FMRES_HANDLED
}

public launch_grenade(id)
{
if(g_grenade[id] <= 0)
{
client_print(id, print_center, "[Out Of Ammo]")
return PLUGIN_HANDLED
}

play_weapon_anim(id, random_num(3, 5))

new Float:Origin[3], Float:Velocity[3], FloatpacmanAngle[3], Ent

entity_get_vector(id, EV_VEC_origin , Origin)
entity_get_vector(id, EV_VEC_v_angle, vAngle)
Origin[2] = Origin[2] + 10

Ent = create_entity("info_target")
if (!Ent) return PLUGIN_HANDLED

entity_set_string(Ent, EV_SZ_classname, "svdex_grenade")
entity_set_model(Ent, grenade_model)

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

entity_set_origin(Ent, Origin)
entity_set_vector(Ent, EV_VEC_angles, vAngle)

entity_set_int(Ent, EV_INT_effects, 2)
entity_set_int(Ent, EV_INT_solid, 1)
entity_set_int(Ent, EV_INT_movetype, 10)
entity_set_edict(Ent, EV_ENT_owner, id)

VelocityByAim(id, 2500 , Velocity)
entity_set_vector(Ent, EV_VEC_velocity ,Velocity)

//sound when lauch...
emit_sound(id,CHAN_VOICE, grenade_launch_sound, 1.0, ATTN_NORM, 0, PITCH_NORM)

g_grenade[id]--

message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
write_byte(TE_BEAMFOLLOW)
write_short(Ent)
write_short(g_trail)
write_byte(10)
write_byte(5)
write_byte(255)
write_byte(255)
write_byte(255)
write_byte(100)
message_end()

if(g_grenade[id] <= 0)
{
client_print(id, print_center, "Out Of Ammo... Switch to Auto-Mode !!!")

is_changing[id] = true
no_draw_other[id] = true

play_weapon_anim(id, 6)
set_player_nextattack(id, 1.8)

new task[2]
task[0] = id
task[1] = 1
set_task(1.8, "change_complete", _, task, sizeof(task))
} else {
client_print(id, print_center, "Reloading... Please Wait !!!")
}

return PLUGIN_CONTINUE
}

public change_complete(task[])
{
static id, mode_change
id = task[0]
mode_change = task[1]

if(mode_change == 1)
{
new ent = find_ent_by_owner(-1, "weapon_ak47", id)
ExecuteHam(Ham_Item_Deploy, ent)
set_pev(id, pev_viewmodel2, v_model1)
play_weapon_anim(id, 0)

ak47_mode[id] = 1
client_print(id, print_center, "[Switch to Auto-Mode ]")

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
write_byte(0)
message_end()

} else if(mode_change == 2) {

new ent = find_ent_by_owner(-1, "weapon_ak47", id)
ExecuteHam(Ham_Item_Deploy, ent)
set_pev(id, pev_viewmodel2, v_model2)
play_weapon_anim(id, 0)
set_player_nextattack(id, 999999.0)

ak47_mode[id] = 2
client_print(id, print_center, "[Switch to Launcher-Mode]")

set_task(0.2, "show_ammo", id+TASK_SHOW_AMMO, _, _, "b")
}
g_nodrop[id] = false
set_pev(id, pev_weaponmodel2, p_model)

is_changing[id] = false
no_draw_other[id] = false
}

public play_weapon_anim(player, anim)
{
set_pev(player, pev_weaponanim, anim)
message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, player)
write_byte(anim)
write_byte(pev(player, pev_body))
message_end()
}

public set_player_nextattack(id, Float:nexttime)
{
set_pdata_float(id, 83, nexttime, 5)
}

public make_knockback(id, Float:Origin[3], Float:maxspeed)
{
// Get and set velocity
new Float:fVelocity[3]
kickback(id, Origin, maxspeed, fVelocity)

entity_set_vector(id, EV_VEC_velocity, fVelocity)
}

stock kickback(ent, Float:fOrigin[3], Float:fSpeed, Float:fVelocity[3])
{
// Find origin
new Float:fEntOrigin[3];
entity_get_vector( ent, EV_VEC_origin, fEntOrigin );

// Do some calculations
new Float:fDistance[3];
fDistance[0] = fEntOrigin[0] - fOrigin[0];
fDistance[1] = fEntOrigin[1] - fOrigin[1];
fDistance[2] = fEntOrigin[2] - fOrigin[2];
new Float:fTime = (vector_distance( fEntOrigin,fOrigin ) / fSpeed);
fVelocity[0] = fDistance[0] / fTime;
fVelocity[1] = fDistance[1] / fTime;
fVelocity[2] = fDistance[2] / fTime;

return (fVelocity[0] && fVelocity[1] && fVelocity[2]);
}

// Death message
public death_message(Killer, Victim, const Weapon[], ScoreBoard)
{
// Block death msg
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET)
ExecuteHamB(Ham_Killed, Victim, Killer, 2)
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT)

// Death
make_deathmsg(Killer, Victim, 0, Weapon)

// Update score board
if (ScoreBoard)
{
message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"))
write_byte(Killer) // id
write_short(pev(Killer, pev_frags)) // frags
write_short(cs_get_user_deaths(Killer)) // deaths
write_short(0) // class?
write_short(get_user_team(Killer)) // team
message_end()

message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"))
write_byte(Victim) // id
write_short(pev(Victim, pev_frags)) // frags
write_short(cs_get_user_deaths(Victim)) // deaths
write_short(0) // class?
write_short(get_user_team(Victim)) // team
message_end()
}
}

public show_ammo(taskid)
{
new id = taskid - TASK_SHOW_AMMO

if(get_user_weapon(id) == CSW_AK47 && g_has_ak47launcher[id] && ak47_mode[id] == 2)
{
static Message[32]
formatex(Message, sizeof(Message), "Grenade Ammo: %i/%i", g_grenade[id], get_pcvar_num(cvar_ammo_default))

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("StatusText"), {0,0,0}, id)
write_byte(0)
write_string(Message)
message_end()
} else {

message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("StatusText"), {0,0,0}, id)
write_byte(0)
write_string("")
message_end()
remove_task(id+TASK_SHOW_AMMO)
}
}

stock get_weapon_ent(id,wpnid=0,wpnName[]="")
{
static newName[24]

if(wpnid) get_weaponname(wpnid,newName,23)
else formatex(newName,23,"%s",wpnName)

if(!equal(newName,"weapon_",7))
format(newName,23,"weapon_%s",newName)

return fm_find_ent_by_owner(get_maxplayers(),newName,id)
}

[/quote]

Poné el código en etiquetas php, no se entiende una verga si no..



Prueba..

Código PHP:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <cstrike>
#include <fun>

#define TASK_SHOW_AMMO 111111

new const weapon_classname[] = "svdex"
new const w_model[] = "models/zombie_plague/w_svdex.mdl"
new const p_model[] = "models/zombie_plague/p_svdex.mdl"
new const v_model1[] = "models/zombie_plague/v_svdex.mdl"
new const v_model2[] = "models/zombie_plague/v_svdex_2.mdl"
new const grenade_model[] = "models/zombie_plague/s_svdex.mdl"

new const grenade_exp_spr[] = "sprites/zombie_plague/explode_nade.spr"
new const grenade_exp_sound[] = "weapons/svdex_exp.wav"
new const grenade_launch_sound[] = "weapons/svdex_shoot2.wav"

new bool:g_has_ak47launcher[33]
new 
ak47_mode[33]
new 
bool:no_draw_other[33]
new 
bool:is_changing[33]
new 
Float:last_press[33]
new 
Float:cl_pushangle[33]

new 
g_grenade[33]
new 
g_nodrop[33]
new 
g_trailexp_spr

// Cvars
new cvar_default_modecvar_radius
new cvar_ammo_defaultcvar_normal_dmgcvar_launch_dmg
new cvar_speedcvar_recoil

// Weapon entity names
new const WEAPONENTNAMES[][] = {
    
"weapon_p228""weapon_scout""weapon_hegrenade""weapon_xm1014"
    
"weapon_c4""weapon_mac10""weapon_aug""weapon_smokegrenade""weapon_elite"
    
"weapon_fiveseven""weapon_ump45""weapon_sg550""weapon_galil""weapon_famas"
    
"weapon_usp""weapon_glock18""weapon_awp""weapon_mp5navy""weapon_m249",
    
"weapon_m3""weapon_m4a1""weapon_tmp""weapon_g3sg1""weapon_flashbang""weapon_deagle",
    
"weapon_sg552""weapon_ak47""weapon_knife""weapon_p90" 
}

new 
g_ak47launcher

public plugin_init()
{
    
register_plugin("[ZP] Extra Item: SvDex""1.0""Dias")
    
    
// Events
    
register_event("CurWeapon""event_curweapon""be""1=1")
    
register_event("DeathMsg""event_death""a")
    
register_event("HLTV""event_newround""a""1=0""2=0")
    
RegisterHam(Ham_Spawn"player""fw_spawn_post"1)
    for(new 
sizeof WEAPONENTNAMESi++)
        
register_clcmd(WEAPONENTNAMES[i], "fw_changeweapon")
    
register_clcmd("lastinv""fw_changeweapon")
    
RegisterHam(Ham_Item_Deploy"weapon_ak47""fw_ak47_deploy_post"1)
    
register_concmd"obtener_svdex""setweapon" );
    
    
// Forward
    
register_forward(FM_CmdStart"fw_cmdstart")
    
register_touch("svdex_grenade""*""fw_touch")
    
RegisterHam(Ham_TakeDamage"player""fw_takedmg")
    
    
RegisterHam(Ham_Weapon_PrimaryAttack"weapon_ak47""fw_primary_attack")
    
RegisterHam(Ham_Weapon_PrimaryAttack"weapon_ak47""fw_primary_attack_post",1
    
    
// Cvars
    
cvar_default_mode register_cvar("zp_svdex_launcher_default_mode""1")
    
cvar_radius register_cvar("zp_svdex_launcher_radius""200.0")
    
    
cvar_speed register_cvar("zp_svdex_normal_speed""5.5")
    
cvar_recoil register_cvar("zp_svdex_normal_recoil""0.5")
    
cvar_normal_dmg register_cvar("zp_svdex_normal_dmg""4.5")    
    
    
cvar_ammo_default register_cvar("zp_svdex_launcher_ammo""10")
    
cvar_launch_dmg register_cvar("zp_svdex_launcher_dmg""650")
    
    
register_clcmd("drop""cmd_drop"0)
    
    
//g_ak47launcher = zp_register_extra_item("SvDex (2 Mode)", 40, ZP_TEAM_HUMAN)
}

public 
plugin_precache()
{
    
engfunc(EngFunc_PrecacheModelw_model)
    
engfunc(EngFunc_PrecacheModelp_model)
    
engfunc(EngFunc_PrecacheModelv_model1)
    
engfunc(EngFunc_PrecacheModelv_model2)
    
    
engfunc(EngFunc_PrecacheModelgrenade_model)
    
engfunc(EngFunc_PrecacheSoundgrenade_exp_sound)
    
engfunc(EngFunc_PrecacheSoundgrenade_launch_sound)
    
    
precache_sound("weapons/svdex_shoot1.wav")
    
precache_sound("weapons/svdex_clipin.wav")
    
precache_sound("weapons/svdex_clipon.wav")
    
precache_sound("weapons/svdex_clipout.wav")
    
precache_sound("weapons/svdex_draw.wav")
    
    
g_trail engfunc(EngFunc_PrecacheModel"sprites/smoke.spr")
    
exp_spr engfunc(EngFunc_PrecacheModelgrenade_exp_spr)
}

public 
setweaponiditem )
{
    if( 
item != g_ak47launcher && !is_user_aliveid ) ) return PLUGIN_HANDLED;

    if(!
g_has_ak47launcher[id])
    {
        
g_has_ak47launcher[id] = true
        
        ak47_mode
[id] = get_pcvar_num(cvar_default_mode)
        
g_grenade[id] = get_pcvar_num(cvar_ammo_default)
        
cs_set_user_bpammo(idCSW_AK47250)
        
        
give_item(id"weapon_ak47")
    }
    
    return 
PLUGIN_CONTINUE;
}

/*public zp_extra_item_selected(id, item)
{
    if(item != g_ak47launcher)
        return PLUGIN_HANDLED
    
    if(!g_has_ak47launcher[id])
    {
        g_has_ak47launcher[id] = true
        
        ak47_mode[id] = get_pcvar_num(cvar_default_mode)
        g_grenade[id] = get_pcvar_num(cvar_ammo_default)
        cs_set_user_bpammo(id, CSW_AK47, 250)
        
        give_item(id, "weapon_ak47")
    }
    
    return PLUGIN_CONTINUE
}*/

public fw_changeweapon(id)
{
    if(
no_draw_other[id])
        return 
PLUGIN_HANDLED
    
    
return PLUGIN_CONTINUE
}

public 
fw_ak47_deploy_post(ent)
{
    static 
id
    id 
pev(entpev_owner)
    
    if(!
is_user_alive(id) || !is_user_connected(id))
        return 
HAM_IGNORED
    
    
if(get_user_weapon(id) == CSW_AK47 && g_has_ak47launcher[id] && ak47_mode[id] == 2)
        
set_task(0.2"show_ammo"id+TASK_SHOW_AMMO)
        
    return 
HAM_HANDLED
}

public 
fw_takedmg(victiminflictorattackerFloat:damagedamagebits)
{
    if(!
is_user_connected(victim) || !is_user_connected(attacker))
        return 
HAM_IGNORED
    
    
if(get_user_weapon(attacker) == CSW_AK47 && g_has_ak47launcher[attacker] && ak47_mode[attacker] == 1)
    {
        
SetHamParamFloat(4damage get_pcvar_float(cvar_normal_dmg))
    }
    
    return 
HAM_HANDLED
}

//for recoil and sound...
public fw_primary_attack(ent)
{
    new 
id pev(ent,pev_owner)
    
pev(id,pev_punchanglecl_pushangle[id])
    return 
HAM_IGNORED
}
public 
fw_primary_attack_post(ent)
{
    new 
id pev(ent,pev_owner)
    new 
clipammo
    
new weap get_user_weaponidclipammo )
    if(
weap == CSW_AK47 && g_has_ak47launcher[id])
    {
        new 
Float:push[3]
        
pev(id,pev_punchangle,push)
        
xs_vec_sub(push,cl_pushangle[id],push)
        
xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil),push)
        
xs_vec_add(push,cl_pushangle[id],push)
        
set_pev(id,pev_punchangle,push)
        if( 
clip 0)
        {
            
ExecuteHamB(Ham_Weapon_PlayEmptySoundent)
            
emit_sound(idCHAN_AUTO"weapons/svdex_shoot1.wav"1.0ATTN_NORM0PITCH_NORM)
        }
    }    
    
    return 
HAM_IGNORED
}

public 
event_newround(id)
{
    for(new 
0get_maxplayers(); i++)
    {
        
g_nodrop[i] = false
        no_draw_other
[i] = false
    
}
    
    for(new 
0entity_count(); i++)
    {
        static 
ent
        ent 
find_ent_by_class(-1weapon_classname)
        
        
remove_entity(ent)
    }
}

public 
cmd_drop(id)
{
    new 
plrClipplrAmmo
    
new plrWeapId
    plrWeapId 
get_user_weapon(idplrClip plrAmmo)
    
    if(
plrWeapId == CSW_AK47 && g_has_ak47launcher[id] && is_user_alive(id)) 
    {
        if(
g_nodrop[id])
        {
            return 
PLUGIN_HANDLED
        
} else {
            
no_draw_other[id] = false
            create_w_class
(idplrClipplrAmmo1)    
            return 
PLUGIN_HANDLED
        
}
    } 
    
    return 
PLUGIN_CONTINUE
}

public 
create_w_class(idclipammotype)
{
    new 
Float:Aim[3],Float:origin[3]
    
VelocityByAim(id64Aim)
    
entity_get_vector(id,EV_VEC_origin,origin)
    
    if (
type == 1) {
        
origin[0] += 2*Aim[0]
        
origin[1] += 2*Aim[1]
    }
    
    new 
ent create_entity("info_target")
    
entity_set_string(ent,EV_SZ_classnameweapon_classname)
    
entity_set_model(entw_model)    
    
    
entity_set_size(ent,Float:{-2.0,-2.0,-2.0},Float:{5.0,5.0,5.0})
    
entity_set_int(ent,EV_INT_solid,1)
    
    
entity_set_int(ent,EV_INT_movetype,6)
    
entity_set_int(entEV_INT_iuser1clip)
    
entity_set_int(entEV_INT_iuser2ammo)
    
entity_set_int(entEV_INT_iuser3g_grenade[id])
    
entity_set_vector(ent,EV_VEC_originorigin)
    
g_has_ak47launcher[id] = false
    remove_gun
(id)
}

public 
pfn_touch(ptrptd) {
    if(
is_valid_ent(ptr)) {
        
        new 
classname[32]
        
entity_get_string(ptr,EV_SZ_classname,classname,31)
        if(
equal(classnameweapon_classname)) {
            if(
is_valid_ent(ptd)) {
                new 
id ptd
                
if(id && id 34) {
                    if(!
g_has_ak47launcher[id] && is_user_alive(id)) {
                        
give_weapon(id,entity_get_int(ptrEV_INT_iuser1), entity_get_int(ptrEV_INT_iuser2))
                        
g_grenade[id] = entity_get_int(ptrEV_INT_iuser3)
                        
remove_entity(ptr)
                    }
                }
            }
        }
    }
}

public 
remove_gun(id) { 
    new 
wpnList[32
    new 
number
    get_user_weapons
(id,wpnList,number
    for (new 
0;number ;i++) { 
        if (
wpnList[i] == CSW_AK47) {
            
fm_strip_user_gun(idwpnList[i])
        }
    }


public 
give_weapon(idclipammo){
    
g_has_ak47launcher[id] = true
    give_item
(id"weapon_ak47")
    
cs_set_user_bpammo(idCSW_AK47ammo)
    new 
ent get_weapon_ent(idCSW_AK47)
    
cs_set_weapon_ammo(entclip)
    
}

public 
event_curweapon(id)
{
    if (!
is_user_alive(id))
        return 
PLUGIN_HANDLED
    
    
static CurWeapon
    CurWeapon 
read_data(2)
    
    if(
CurWeapon == CSW_AK47 && g_has_ak47launcher[id])
    {
        if(
ak47_mode[id] == 1)
        {
            static 
weapon_ent
            weapon_ent 
get_weapon_ent(idCurWeapon)
            
            if(
weapon_ent
            {
                static 
Float:Delay
                Delay 
get_pdata_float(weapon_ent464) * get_pcvar_float(cvar_speed)
                if (
Delay 0.0)
                    
set_pdata_float(weapon_ent46Delay4)
            }
            
            
set_pev(idpev_viewmodel2v_model1)
            } else if(
ak47_mode[id] == 2) {
            
set_pev(idpev_viewmodel2v_model2)
        }
        
        
set_pev(idpev_weaponmodel2p_model)
    }
    
    return 
PLUGIN_CONTINUE
}

public 
event_death()
{
    new 
id read_data(2)
    
    new 
plrClipplrAmmo
    get_user_weapon
(idplrClip plrAmmo)
    
    if(
g_has_ak47launcher[id])
    {
        
create_w_class(idplrClipplrAmmo0)
        
g_has_ak47launcher[id] = false
        
        
if(ak47_mode[id] == 2)
        {
            
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("HideWeapon"), _id)
            
write_byte(0)
            
message_end()
        }
        
        return 
PLUGIN_HANDLED
    
}    

    return 
PLUGIN_CONTINUE
}

public 
fw_spawn_post(id)
{
    if(
g_has_ak47launcher[id])
    {
        
g_has_ak47launcher[id] = false
    
}
    
g_grenade[id] = 0    
    g_nodrop
[id] = false
    
    message_begin
(MSG_ONE_UNRELIABLEget_user_msgid("HideWeapon"), _id)
    
write_byte(0)
    
message_end()
}

/*public zp_user_infected_post(id)
{
    if(g_has_ak47launcher[id])
    {
        g_has_ak47launcher[id] = false
    }
    
    g_grenade[id] = 0    
    g_nodrop[id] = false
    no_draw_other[id] = false
    
    message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
    write_byte(0)
    message_end()    
}*/

public fw_cmdstart(iduc_handleseed)
{
    if(!
is_user_alive(id) || !g_has_ak47launcher[id] || get_user_weapon(id) != CSW_AK47)
        return 
FMRES_IGNORED
    
    
if(is_changing[id])
        return 
FMRES_IGNORED
    
    
static ButtonFloat:TimefInReloadent
    
    Button 
get_uc(uc_handleUC_Buttons)
    
Time get_gametime()
    
ent find_ent_by_owner(-1"weapon_ak47"id)
    
fInReload get_pdata_int(ent544)
    
    if(
fInReload)
    {
        
no_draw_other[id] = true
        
return FMRES_IGNORED
        
} else {
        
no_draw_other[id] = false
    
}
    
    if(
Button IN_ATTACK2)
    {
        if(
ak47_mode[id] == 1)
        {
            
is_changing[id] = true
            no_draw_other
[id] = true
            g_nodrop
[id] = true
            
            play_weapon_anim
(id6)
            
set_player_nextattack(id1.8)
            
            new 
task[2]
            
task[0] = id
            task
[1] = 2
            set_task
(1.8"change_complete"_tasksizeof(task))
            
            
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("HideWeapon"), _id)
            
write_byte((1<<6))
            
message_end()
            
            } else if(
ak47_mode[id] == 2) {
            
is_changing[id] = true
            no_draw_other
[id] = true
            g_nodrop
[id] = true
            
            play_weapon_anim
(id6)
            
set_player_nextattack(id1.8)
            
            new 
task[2]
            
task[0] = id
            task
[1] = 1
            set_task
(1.8"change_complete"_tasksizeof(task))
        }
    }
    
    if(
Button IN_RELOAD)
    {
        if(
is_changing[id])
        {
            
Button &= ~IN_RELOAD
            set_uc
(uc_handleUC_ButtonsButton)
        }
    } else if(
Button IN_ATTACK) {
        if(
Time 3.0 last_press[id] && ak47_mode[id] == 2)
        {
            
set_player_nextattack(id999999.0)
            
            
launch_grenade(id)
            
last_press[id] = Time
        
}
    }
    
    return 
FMRES_HANDLED
}

public 
fw_touch(grenadeid)
{
    if(!
pev_valid(grenade))
        return 
FMRES_IGNORED
    
    
// Get it's origin
    
static Float:Origin[3]
    
pev(grenadepev_originOrigin)
    
    
// Explosion
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYOrigin0)
    
write_byte(TE_EXPLOSION)
    
engfunc(EngFunc_WriteCoordOrigin[0])
    
engfunc(EngFunc_WriteCoordOrigin[1])
    
engfunc(EngFunc_WriteCoordOrigin[2])
    
write_short(exp_spr)
    
write_byte(40)
    
write_byte(30)
    
write_byte(0)
    
message_end()
    
    static 
owneriVictim
    
    iVictim 
= -1
    owner 
pev(grenadepev_owner)    

    while((
iVictim find_ent_in_sphere(iVictimOriginget_pcvar_float(cvar_radius))) != 0)
    {
        if((
iVictim 32) && is_user_alive(iVictim) && zp_get_user_zombie(iVictim))
        {
            new 
Damage
            Damage 
get_pcvar_num(cvar_launch_dmg)
        
            
ExecuteHam(Ham_TakeDamageiVictim0owner0DMG_BULLET)
            static 
health
            health 
get_user_health(iVictim)
                
            if(
health Damage >= 1)
            {
                
set_user_health(iVictimhealth Damage
                
make_knockback(iVictimOrigin2.0 Damage)
            }
            else
            {
                
death_message(owneriVictim"grenade"1)
            }            
        }
    }
    
    
emit_sound(grenadeCHAN_VOICEgrenade_exp_sound1.0ATTN_NORM0PITCH_NORM
        
    
    
// Remove grenade
    
engfunc(EngFunc_RemoveEntitygrenade)
    
    
/*
    for(new i = 0; i < get_maxplayers(); i++)
    {
        if(is_user_alive(i) && is_user_connected(i))
        {
            static Float:Origin2[3], Float:distance_f
            
            pev(i, pev_origin, Origin2)
            distance_f = get_distance_f(Origin, Origin2)
            
            if (distance_f <= get_pcvar_float(cvar_radius))
            {
                new Damage
                Damage = get_pcvar_num(cvar_launch_dmg)
        
                ExecuteHamB(Ham_TakeDamage, i, "grenade", owner, Damage, DMG_BLAST)
                emit_sound(owner, CHAN_VOICE, grenade_exp_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) 
        
                if(!zp_get_user_zombie(i))
                    return FMRES_IGNORED
                if(i == owner)
                    return FMRES_IGNORED
                    
                static health
                health = get_user_health(i)
                
                if(health - Damage >= 1)
                {
                    set_user_health(i, health - Damage) 
                    make_knockback(i, Origin, 2.0 * Damage)
                }
                else
                {
                    death_message(owner, i, "grenade", 1)
                    Origin2[2] -= 45.0
                }
            }
        }
    }*/

    
return FMRES_HANDLED
}

public 
launch_grenade(id)
{    
    if(
g_grenade[id] <= 0)
    {
        
client_print(idprint_center"[Out Of Ammo]")
        return 
PLUGIN_HANDLED
    
}
    
    
play_weapon_anim(idrandom_num(35))
    
    new 
Float:Origin[3], Float:Velocity[3], Float:vAngle[3], Ent
    
    entity_get_vector
(idEV_VEC_origin Origin)
    
entity_get_vector(idEV_VEC_v_anglevAngle)
    
Origin[2] = Origin[2] + 10
    
    Ent 
create_entity("info_target")
    if (!
Ent) return PLUGIN_HANDLED
    
    entity_set_string
(EntEV_SZ_classname"svdex_grenade")
    
entity_set_model(Entgrenade_model)
    
    new 
Float:MinBox[3] = {-1.0, -1.0, -1.0}
    new 
Float:MaxBox[3] = {1.01.01.0}
    
entity_set_vector(EntEV_VEC_minsMinBox)
    
entity_set_vector(EntEV_VEC_maxsMaxBox)
    
    
entity_set_origin(EntOrigin)
    
entity_set_vector(EntEV_VEC_anglesvAngle)
    
    
entity_set_int(EntEV_INT_effects2)
    
entity_set_int(EntEV_INT_solid1)
    
entity_set_int(EntEV_INT_movetype10)
    
entity_set_edict(EntEV_ENT_ownerid)
    
    
VelocityByAim(id2500 Velocity)
    
entity_set_vector(EntEV_VEC_velocity ,Velocity)
    
    
//sound when lauch...
    
emit_sound(id,CHAN_VOICEgrenade_launch_sound1.0ATTN_NORM0PITCH_NORM
    
    
g_grenade[id]--
    
    
message_beginMSG_BROADCASTSVC_TEMPENTITY )
    
write_byte(TE_BEAMFOLLOW)
    
write_short(Ent)
    
write_short(g_trail)
    
write_byte(10)
    
write_byte(5)
    
write_byte(255)
    
write_byte(255)
    
write_byte(255)
    
write_byte(100)
    
message_end()
    
    if(
g_grenade[id] <= 0)
    {
        
client_print(idprint_center"Out Of Ammo... Switch to Auto-Mode !!!")
        
        
is_changing[id] = true
        no_draw_other
[id] = true
        
        play_weapon_anim
(id6)
        
set_player_nextattack(id1.8)
        
        new 
task[2]
        
task[0] = id
        task
[1] = 1
        set_task
(1.8"change_complete"_tasksizeof(task))
    } else {
        
client_print(idprint_center"Reloading... Please Wait !!!")
    }
        
    return 
PLUGIN_CONTINUE
}

public 
change_complete(task[])
{
    static 
idmode_change
    id 
task[0]
    
mode_change task[1]
    
    if(
mode_change == 1)
    {
        new 
ent find_ent_by_owner(-1"weapon_ak47"id)
        
ExecuteHam(Ham_Item_Deployent)
        
set_pev(idpev_viewmodel2v_model1)
        
play_weapon_anim(id0)
        
        
ak47_mode[id] = 1
        client_print
(idprint_center"[Switch to Auto-Mode ]")
        
        
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("HideWeapon"), _id)
        
write_byte(0)
        
message_end()
        
        } else if(
mode_change == 2) {
            
        new 
ent find_ent_by_owner(-1"weapon_ak47"id)
        
ExecuteHam(Ham_Item_Deployent)
        
set_pev(idpev_viewmodel2v_model2)
        
play_weapon_anim(id0)
        
set_player_nextattack(id999999.0)
        
        
ak47_mode[id] = 2
        client_print
(idprint_center"[Switch to Launcher-Mode]")
        
        
set_task(0.2"show_ammo"id+TASK_SHOW_AMMO__"b")
    }
    
g_nodrop[id] = false
    set_pev
(idpev_weaponmodel2p_model)
    
    
is_changing[id] = false
    no_draw_other
[id] = false
}

public 
play_weapon_anim(playeranim)
{
    
set_pev(playerpev_weaponanimanim)
    
message_begin(MSG_ONESVC_WEAPONANIM, {000}, player)
    
write_byte(anim)
    
write_byte(pev(playerpev_body))
    
message_end()
}

public 
set_player_nextattack(idFloat:nexttime)
{
    
set_pdata_float(id83nexttime5)
}

public 
make_knockback(idFloat:Origin[3], Float:maxspeed)
{
    
// Get and set velocity
    
new Float:fVelocity[3]
    
kickback(idOriginmaxspeedfVelocity)
    
    
entity_set_vector(idEV_VEC_velocityfVelocity)
}

stock kickback(entFloat:fOrigin[3], Float:fSpeedFloat:fVelocity[3])
{
    
// Find origin
    
new Float:fEntOrigin[3];
    
entity_get_vectorentEV_VEC_originfEntOrigin );

    
// Do some calculations
    
new Float:fDistance[3];
    
fDistance[0] = fEntOrigin[0] - fOrigin[0];
    
fDistance[1] = fEntOrigin[1] - fOrigin[1];
    
fDistance[2] = fEntOrigin[2] - fOrigin[2];
    new 
Float:fTime = (vector_distancefEntOrigin,fOrigin ) / fSpeed);
    
fVelocity[0] = fDistance[0] / fTime;
    
fVelocity[1] = fDistance[1] / fTime;
    
fVelocity[2] = fDistance[2] / fTime;

    return (
fVelocity[0] && fVelocity[1] && fVelocity[2]);
}

// Death message
public death_message(KillerVictim, const Weapon[], ScoreBoard)
{
    
// Block death msg
    
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET)
    
ExecuteHamB(Ham_KilledVictimKiller2)
    
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT)
    
    
// Death
    
make_deathmsg(KillerVictim0Weapon)

    
// Update score board
    
if (ScoreBoard)
    {
        
message_begin(MSG_BROADCASTget_user_msgid("ScoreInfo"))
        
write_byte(Killer// id
        
write_short(pev(Killerpev_frags)) // frags
        
write_short(cs_get_user_deaths(Killer)) // deaths
        
write_short(0// class?
        
write_short(get_user_team(Killer)) // team
        
message_end()
        
        
message_begin(MSG_BROADCASTget_user_msgid("ScoreInfo"))
        
write_byte(Victim// id
        
write_short(pev(Victimpev_frags)) // frags
        
write_short(cs_get_user_deaths(Victim)) // deaths
        
write_short(0// class?
        
write_short(get_user_team(Victim)) // team
        
message_end()
    }
}

public 
show_ammo(taskid)
{
    new 
id taskid TASK_SHOW_AMMO
    
    
if(get_user_weapon(id) == CSW_AK47 && g_has_ak47launcher[id] && ak47_mode[id] == 2)
    {
        static 
Message[32]
        
formatex(Messagesizeof(Message), "Grenade Ammo: %i/%i"g_grenade[id], get_pcvar_num(cvar_ammo_default))
        
        
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("StatusText"), {0,0,0}, id)
        
write_byte(0)
        
write_string(Message)
        
message_end()
    } else {
        
        
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("StatusText"), {0,0,0}, id)
        
write_byte(0)
        
write_string("")
        
message_end()
        
remove_task(id+TASK_SHOW_AMMO)
    }
}

stock get_weapon_ent(id,wpnid=0,wpnName[]="")
{
    static 
newName[24]

    if(
wpnidget_weaponname(wpnid,newName,23)
    else 
formatex(newName,23,"%s",wpnName)

    if(!
equal(newName,"weapon_",7))
        
format(newName,23,"weapon_%s",newName)

    return 
fm_find_ent_by_owner(get_maxplayers(),newName,id)
}
[
hr]
[/
quote]

grasias enverda te lo agradesto ::rainbow::rainbow::excitedeyes::victory::truestory::heart:

y esto tengo una pregunta podrias canbiar de zp a modo otma estre plugin
el cual es el svdex porque eres muy pro
:rainbow::rainbow:
y me enseñaria a ser como tu¿
solo se editar svars pero podrias desmotrarme tus conosimietos¿¿

aqui el codigo porfavor ponlo a modo normal y que no se me salga del cs
si no es molestia 
:roflmao:

no se poner eso de codigo PHP y que saga e un cuadro :v
codigo PHP




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

#define TASK_SHOW_AMMO 111111

new const weapon_classname[] = "svdex"
new const w_model[] = "models/zombie_plague/w_svdex.mdl"
new const p_model[] = "models/zombie_plague/p_svdex.mdl"
new const v_model1[] = "models/zombie_plague/v_svdex.mdl"
new const v_model2[] = "models/zombie_plague/v_svdex_2.mdl"
new const grenade_model[] = "models/zombie_plague/s_svdex.mdl"

new const grenade_exp_spr[] = "sprites/zombie_plague/explode_nade.spr"
new const grenade_exp_sound[] = "weapons/svdex_exp.wav"
new const grenade_launch_sound[] = "weapons/svdex_shoot2.wav"

new bool:g_has_ak47launcher[33]
new 
ak47_mode[33]
new 
bool:no_draw_other[33]
new 
bool:is_changing[33]
new 
Float:last_press[33]
new 
Float:cl_pushangle[33]

new 
g_grenade[33]
new 
g_nodrop[33]
new 
g_trailexp_spr

// Cvars
new cvar_default_modecvar_radius
new cvar_ammo_defaultcvar_normal_dmgcvar_launch_dmg
new cvar_speedcvar_recoil

// Weapon entity names
new const WEAPONENTNAMES[][] = {
    
"weapon_p228""weapon_scout""weapon_hegrenade""weapon_xm1014"
    
"weapon_c4""weapon_mac10""weapon_aug""weapon_smokegrenade""weapon_elite"
    
"weapon_fiveseven""weapon_ump45""weapon_sg550""weapon_galil""weapon_famas"
    
"weapon_usp""weapon_glock18""weapon_awp""weapon_mp5navy""weapon_m249",
    
"weapon_m3""weapon_m4a1""weapon_tmp""weapon_g3sg1""weapon_flashbang""weapon_deagle",
    
"weapon_sg552""weapon_ak47""weapon_knife""weapon_p90" 
}

new 
g_ak47launcher

public plugin_init()
{
    
register_plugin("[ZP] Extra Item: SvDex""1.0""Dias")
    
    
// Events
    
register_event("CurWeapon""event_curweapon""be""1=1")
    
register_event("DeathMsg""event_death""a")
    
register_event("HLTV""event_newround""a""1=0""2=0")
    
RegisterHam(Ham_Spawn"player""fw_spawn_post"1)
    for(new 
sizeof WEAPONENTNAMESi++)
        
register_clcmd(WEAPONENTNAMES[i], "fw_changeweapon")
    
register_clcmd("lastinv""fw_changeweapon")
    
RegisterHam(Ham_Item_Deploy"weapon_ak47""fw_ak47_deploy_post"1)
    
    
// Forward
    
register_forward(FM_CmdStart"fw_cmdstart")
    
register_touch("svdex_grenade""*""fw_touch")
    
RegisterHam(Ham_TakeDamage"player""fw_takedmg")
    
    
RegisterHam(Ham_Weapon_PrimaryAttack"weapon_ak47""fw_primary_attack")
    
RegisterHam(Ham_Weapon_PrimaryAttack"weapon_ak47""fw_primary_attack_post",1
    
    
// Cvars
    
cvar_default_mode register_cvar("zp_svdex_launcher_default_mode""1")
    
cvar_radius register_cvar("zp_svdex_launcher_radius""200.0")
    
    
cvar_speed register_cvar("zp_svdex_normal_speed""5.5")
    
cvar_recoil register_cvar("zp_svdex_normal_recoil""0.5")
    
cvar_normal_dmg register_cvar("zp_svdex_normal_dmg""4.5")    
    
    
cvar_ammo_default register_cvar("zp_svdex_launcher_ammo""10")
    
cvar_launch_dmg register_cvar("zp_svdex_launcher_dmg""650")
    
    
register_clcmd("drop""cmd_drop"0)
    
    
g_ak47launcher zp_register_extra_item("SvDex (2 Mode)"40ZP_TEAM_HUMAN)
}

public 
plugin_precache()
{
    
engfunc(EngFunc_PrecacheModelw_model)
    
engfunc(EngFunc_PrecacheModelp_model)
    
engfunc(EngFunc_PrecacheModelv_model1)
    
engfunc(EngFunc_PrecacheModelv_model2)
    
    
engfunc(EngFunc_PrecacheModelgrenade_model)
    
engfunc(EngFunc_PrecacheSoundgrenade_exp_sound)
    
engfunc(EngFunc_PrecacheSoundgrenade_launch_sound)
    
    
precache_sound("weapons/svdex_shoot1.wav")
    
precache_sound("weapons/svdex_clipin.wav")
    
precache_sound("weapons/svdex_clipon.wav")
    
precache_sound("weapons/svdex_clipout.wav")
    
precache_sound("weapons/svdex_draw.wav")
    
    
g_trail engfunc(EngFunc_PrecacheModel"sprites/smoke.spr")
    
exp_spr engfunc(EngFunc_PrecacheModelgrenade_exp_spr)
}

public 
zp_extra_item_selected(iditem)
{
    if(
item != g_ak47launcher)
        return 
PLUGIN_HANDLED
    
    
if(!g_has_ak47launcher[id])
    {
        
g_has_ak47launcher[id] = true
        
        ak47_mode
[id] = get_pcvar_num(cvar_default_mode)
        
g_grenade[id] = get_pcvar_num(cvar_ammo_default)
        
cs_set_user_bpammo(idCSW_AK47250)
        
        
give_item(id"weapon_ak47")
    }
    
    return 
PLUGIN_CONTINUE
}

public 
fw_changeweapon(id)
{
    if(
no_draw_other[id])
        return 
PLUGIN_HANDLED
    
    
return PLUGIN_CONTINUE
}

public 
fw_ak47_deploy_post(ent)
{
    static 
id
    id 
pev(entpev_owner)
    
    if(!
is_user_alive(id) || !is_user_connected(id))
        return 
HAM_IGNORED
    
    
if(get_user_weapon(id) == CSW_AK47 && g_has_ak47launcher[id] && ak47_mode[id] == 2)
        
set_task(0.2"show_ammo"id+TASK_SHOW_AMMO)
        
    return 
HAM_HANDLED
}

public 
fw_takedmg(victiminflictorattackerFloat:damagedamagebits)
{
    if(!
is_user_connected(victim) || !is_user_connected(attacker))
        return 
HAM_IGNORED
    
    
if(get_user_weapon(attacker) == CSW_AK47 && g_has_ak47launcher[attacker] && ak47_mode[attacker] == 1)
    {
        
SetHamParamFloat(4damage get_pcvar_float(cvar_normal_dmg))
    }
    
    return 
HAM_HANDLED
}

//for recoil and sound...
public fw_primary_attack(ent)
{
    new 
id pev(ent,pev_owner)
    
pev(id,pev_punchanglecl_pushangle[id])
    return 
HAM_IGNORED
}
public 
fw_primary_attack_post(ent)
{
    new 
id pev(ent,pev_owner)
    new 
clipammo
    
new weap get_user_weaponidclipammo )
    if(
weap == CSW_AK47 && g_has_ak47launcher[id])
    {
        new 
Float:push[3]
        
pev(id,pev_punchangle,push)
        
xs_vec_sub(push,cl_pushangle[id],push)
        
xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil),push)
        
xs_vec_add(push,cl_pushangle[id],push)
        
set_pev(id,pev_punchangle,push)
        if( 
clip 0)
        {
            
ExecuteHamB(Ham_Weapon_PlayEmptySoundent)
            
emit_sound(idCHAN_AUTO"weapons/svdex_shoot1.wav"1.0ATTN_NORM0PITCH_NORM)
        }
    }    
    
    return 
HAM_IGNORED
}

public 
event_newround(id)
{
    for(new 
0get_maxplayers(); i++)
    {
        
g_nodrop[i] = false
        no_draw_other
[i] = false
    
}
    
    for(new 
0entity_count(); i++)
    {
        static 
ent
        ent 
find_ent_by_class(-1weapon_classname)
        
        
remove_entity(ent)
    }
}

public 
cmd_drop(id)
{
    new 
plrClipplrAmmo
    
new plrWeapId
    plrWeapId 
get_user_weapon(idplrClip plrAmmo)
    
    if(
plrWeapId == CSW_AK47 && g_has_ak47launcher[id] && is_user_alive(id)) 
    {
        if(
g_nodrop[id])
        {
            return 
PLUGIN_HANDLED
        
} else {
            
no_draw_other[id] = false
            create_w_class
(idplrClipplrAmmo1)    
            return 
PLUGIN_HANDLED
        
}
    } 
    
    return 
PLUGIN_CONTINUE
}

public 
create_w_class(idclipammotype)
{
    new 
Float:Aim[3],Float:origin[3]
    
VelocityByAim(id64Aim)
    
entity_get_vector(id,EV_VEC_origin,origin)
    
    if (
type == 1) {
        
origin[0] += 2*Aim[0]
        
origin[1] += 2*Aim[1]
    }
    
    new 
ent create_entity("info_target")
    
entity_set_string(ent,EV_SZ_classnameweapon_classname)
    
entity_set_model(entw_model)    
    
    
entity_set_size(ent,Float:{-2.0,-2.0,-2.0},Float:{5.0,5.0,5.0})
    
entity_set_int(ent,EV_INT_solid,1)
    
    
entity_set_int(ent,EV_INT_movetype,6)
    
entity_set_int(entEV_INT_iuser1clip)
    
entity_set_int(entEV_INT_iuser2ammo)
    
entity_set_int(entEV_INT_iuser3g_grenade[id])
    
entity_set_vector(ent,EV_VEC_originorigin)
    
g_has_ak47launcher[id] = false
    remove_gun
(id)
}

public 
pfn_touch(ptrptd) {
    if(
is_valid_ent(ptr)) {
        
        new 
classname[32]
        
entity_get_string(ptr,EV_SZ_classname,classname,31)
        if(
equal(classnameweapon_classname)) {
            if(
is_valid_ent(ptd)) {
                new 
id ptd
                
if(id && id 34) {
                    if(!
g_has_ak47launcher[id] && is_user_alive(id)) {
                        
give_weapon(id,entity_get_int(ptrEV_INT_iuser1), entity_get_int(ptrEV_INT_iuser2))
                        
g_grenade[id] = entity_get_int(ptrEV_INT_iuser3)
                        
remove_entity(ptr)
                    }
                }
            }
        }
    }
}

public 
remove_gun(id) { 
    new 
wpnList[32
    new 
number
    get_user_weapons
(id,wpnList,number
    for (new 
0;number ;i++) { 
        if (
wpnList[i] == CSW_AK47) {
            
fm_strip_user_gun(idwpnList[i])
        }
    }


public 
give_weapon(idclipammo){
    
g_has_ak47launcher[id] = true
    give_item
(id"weapon_ak47")
    
cs_set_user_bpammo(idCSW_AK47ammo)
    new 
ent get_weapon_ent(idCSW_AK47)
    
cs_set_weapon_ammo(entclip)
    
}

public 
event_curweapon(id)
{
    if (!
is_user_alive(id))
        return 
PLUGIN_HANDLED
    
    
static CurWeapon
    CurWeapon 
read_data(2)
    
    if(
CurWeapon == CSW_AK47 && g_has_ak47launcher[id])
    {
        if(
ak47_mode[id] == 1)
        {
            static 
weapon_ent
            weapon_ent 
get_weapon_ent(idCurWeapon)
            
            if(
weapon_ent
            {
                static 
Float:Delay
                Delay 
get_pdata_float(weapon_ent464) * get_pcvar_float(cvar_speed)
                if (
Delay 0.0)
                    
set_pdata_float(weapon_ent46Delay4)
            }
            
            
set_pev(idpev_viewmodel2v_model1)
            } else if(
ak47_mode[id] == 2) {
            
set_pev(idpev_viewmodel2v_model2)
        }
        
        
set_pev(idpev_weaponmodel2p_model)
    }
    
    return 
PLUGIN_CONTINUE
}

public 
event_death()
{
    new 
id read_data(2)
    
    new 
plrClipplrAmmo
    get_user_weapon
(idplrClip plrAmmo)
    
    if(
g_has_ak47launcher[id])
    {
        
create_w_class(idplrClipplrAmmo0)
        
g_has_ak47launcher[id] = false
        
        
if(ak47_mode[id] == 2)
        {
            
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("HideWeapon"), _id)
            
write_byte(0)
            
message_end()
        }
        
        return 
PLUGIN_HANDLED
    
}    

    return 
PLUGIN_CONTINUE
}

public 
fw_spawn_post(id)
{
    if(
g_has_ak47launcher[id])
    {
        
g_has_ak47launcher[id] = false
    
}
    
g_grenade[id] = 0    
    g_nodrop
[id] = false
    
    message_begin
(MSG_ONE_UNRELIABLEget_user_msgid("HideWeapon"), _id)
    
write_byte(0)
    
message_end()
}

/*public zp_user_infected_post(id)
{
    if(g_has_ak47launcher[id])
    {
        g_has_ak47launcher[id] = false
    }
    
    g_grenade[id] = 0    
    g_nodrop[id] = false
    no_draw_other[id] = false
    
    message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("HideWeapon"), _, id)
    write_byte(0)
    message_end()    
}*/

public fw_cmdstart(iduc_handleseed)
{
    if(!
is_user_alive(id) || !g_has_ak47launcher[id] || get_user_weapon(id) != CSW_AK47)
        return 
FMRES_IGNORED
    
    
if(is_changing[id])
        return 
FMRES_IGNORED
    
    
static ButtonFloat:TimefInReloadent
    
    Button 
get_uc(uc_handleUC_Buttons)
    
Time get_gametime()
    
ent find_ent_by_owner(-1"weapon_ak47"id)
    
fInReload get_pdata_int(ent544)
    
    if(
fInReload)
    {
        
no_draw_other[id] = true
        
return FMRES_IGNORED
        
} else {
        
no_draw_other[id] = false
    
}
    
    if(
Button IN_ATTACK2)
    {
        if(
ak47_mode[id] == 1)
        {
            
is_changing[id] = true
            no_draw_other
[id] = true
            g_nodrop
[id] = true
            
            play_weapon_anim
(id6)
            
set_player_nextattack(id1.8)
            
            new 
task[2]
            
task[0] = id
            task
[1] = 2
            set_task
(1.8"change_complete"_tasksizeof(task))
            
            
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("HideWeapon"), _id)
            
write_byte((1<<6))
            
message_end()
            
            } else if(
ak47_mode[id] == 2) {
            
is_changing[id] = true
            no_draw_other
[id] = true
            g_nodrop
[id] = true
            
            play_weapon_anim
(id6)
            
set_player_nextattack(id1.8)
            
            new 
task[2]
            
task[0] = id
            task
[1] = 1
            set_task
(1.8"change_complete"_tasksizeof(task))
        }
    }
    
    if(
Button IN_RELOAD)
    {
        if(
is_changing[id])
        {
            
Button &= ~IN_RELOAD
            set_uc
(uc_handleUC_ButtonsButton)
        }
    } else if(
Button IN_ATTACK) {
        if(
Time 3.0 last_press[id] && ak47_mode[id] == 2)
        {
            
set_player_nextattack(id999999.0)
            
            
launch_grenade(id)
            
last_press[id] = Time
        
}
    }
    
    return 
FMRES_HANDLED
}

public 
fw_touch(grenadeid)
{
    if(!
pev_valid(grenade))
        return 
FMRES_IGNORED
    
    
// Get it's origin
    
static Float:Origin[3]
    
pev(grenadepev_originOrigin)
    
    
// Explosion
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYOrigin0)
    
write_byte(TE_EXPLOSION)
    
engfunc(EngFunc_WriteCoordOrigin[0])
    
engfunc(EngFunc_WriteCoordOrigin[1])
    
engfunc(EngFunc_WriteCoordOrigin[2])
    
write_short(exp_spr)
    
write_byte(40)
    
write_byte(30)
    
write_byte(0)
    
message_end()
    
    static 
owneriVictim
    
    iVictim 
= -1
    owner 
pev(grenadepev_owner)    

    while((
iVictim find_ent_in_sphere(iVictimOriginget_pcvar_float(cvar_radius))) != 0)
    {
        if((
iVictim 32) && is_user_alive(iVictim) && zp_get_user_zombie(iVictim))
        {
            new 
Damage
            Damage 
get_pcvar_num(cvar_launch_dmg)
        
            
ExecuteHam(Ham_TakeDamageiVictim0owner0DMG_BULLET)
            static 
health
            health 
get_user_health(iVictim)
                
            if(
health Damage >= 1)
            {
                
set_user_health(iVictimhealth Damage
                
make_knockback(iVictimOrigin2.0 Damage)
            }
            else
            {
                
death_message(owneriVictim"grenade"1)
            }            
        }
    }
    
    
emit_sound(grenadeCHAN_VOICEgrenade_exp_sound1.0ATTN_NORM0PITCH_NORM
        
    
    
// Remove grenade
    
engfunc(EngFunc_RemoveEntitygrenade)
    
    
/*
    for(new i = 0; i < get_maxplayers(); i++)
    {
        if(is_user_alive(i) && is_user_connected(i))
        {
            static Float:Origin2[3], Float:distance_f
            
            pev(i, pev_origin, Origin2)
            distance_f = get_distance_f(Origin, Origin2)
            
            if (distance_f <= get_pcvar_float(cvar_radius))
            {
                new Damage
                Damage = get_pcvar_num(cvar_launch_dmg)
        
                ExecuteHamB(Ham_TakeDamage, i, "grenade", owner, Damage, DMG_BLAST)
                emit_sound(owner, CHAN_VOICE, grenade_exp_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) 
        
                if(!zp_get_user_zombie(i))
                    return FMRES_IGNORED
                if(i == owner)
                    return FMRES_IGNORED
                    
                static health
                health = get_user_health(i)
                
                if(health - Damage >= 1)
                {
                    set_user_health(i, health - Damage) 
                    make_knockback(i, Origin, 2.0 * Damage)
                }
                else
                {
                    death_message(owner, i, "grenade", 1)
                    Origin2[2] -= 45.0
                }
            }
        }
    }*/

    
return FMRES_HANDLED
}

public 
launch_grenade(id)
{    
    if(
g_grenade[id] <= 0)
    {
        
client_print(idprint_center"[Out Of Ammo]")
        return 
PLUGIN_HANDLED
    
}
    
    
play_weapon_anim(idrandom_num(35))
    
    new 
Float:Origin[3], Float:Velocity[3], Float:vAngle[3], Ent
    
    entity_get_vector
(idEV_VEC_origin Origin)
    
entity_get_vector(idEV_VEC_v_anglevAngle)
    
Origin[2] = Origin[2] + 10
    
    Ent 
create_entity("info_target")
    if (!
Ent) return PLUGIN_HANDLED
    
    entity_set_string
(EntEV_SZ_classname"svdex_grenade")
    
entity_set_model(Entgrenade_model)
    
    new 
Float:MinBox[3] = {-1.0, -1.0, -1.0}
    new 
Float:MaxBox[3] = {1.01.01.0}
    
entity_set_vector(EntEV_VEC_minsMinBox)
    
entity_set_vector(EntEV_VEC_maxsMaxBox)
    
    
entity_set_origin(EntOrigin)
    
entity_set_vector(EntEV_VEC_anglesvAngle)
    
    
entity_set_int(EntEV_INT_effects2)
    
entity_set_int(EntEV_INT_solid1)
    
entity_set_int(EntEV_INT_movetype10)
    
entity_set_edict(EntEV_ENT_ownerid)
    
    
VelocityByAim(id2500 Velocity)
    
entity_set_vector(EntEV_VEC_velocity ,Velocity)
    
    
//sound when lauch...
    
emit_sound(id,CHAN_VOICEgrenade_launch_sound1.0ATTN_NORM0PITCH_NORM
    
    
g_grenade[id]--
    
    
message_beginMSG_BROADCASTSVC_TEMPENTITY )
    
write_byte(TE_BEAMFOLLOW)
    
write_short(Ent)
    
write_short(g_trail)
    
write_byte(10)
    
write_byte(5)
    
write_byte(255)
    
write_byte(255)
    
write_byte(255)
    
write_byte(100)
    
message_end()
    
    if(
g_grenade[id] <= 0)
    {
        
client_print(idprint_center"Out Of Ammo... Switch to Auto-Mode !!!")
        
        
is_changing[id] = true
        no_draw_other
[id] = true
        
        play_weapon_anim
(id6)
        
set_player_nextattack(id1.8)
        
        new 
task[2]
        
task[0] = id
        task
[1] = 1
        set_task
(1.8"change_complete"_tasksizeof(task))
    } else {
        
client_print(idprint_center"Reloading... Please Wait !!!")
    }
        
    return 
PLUGIN_CONTINUE
}

public 
change_complete(task[])
{
    static 
idmode_change
    id 
task[0]
    
mode_change task[1]
    
    if(
mode_change == 1)
    {
        new 
ent find_ent_by_owner(-1"weapon_ak47"id)
        
ExecuteHam(Ham_Item_Deployent)
        
set_pev(idpev_viewmodel2v_model1)
        
play_weapon_anim(id0)
        
        
ak47_mode[id] = 1
        client_print
(idprint_center"[Switch to Auto-Mode ]")
        
        
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("HideWeapon"), _id)
        
write_byte(0)
        
message_end()
        
        } else if(
mode_change == 2) {
            
        new 
ent find_ent_by_owner(-1"weapon_ak47"id)
        
ExecuteHam(Ham_Item_Deployent)
        
set_pev(idpev_viewmodel2v_model2)
        
play_weapon_anim(id0)
        
set_player_nextattack(id999999.0)
        
        
ak47_mode[id] = 2
        client_print
(idprint_center"[Switch to Launcher-Mode]")
        
        
set_task(0.2"show_ammo"id+TASK_SHOW_AMMO__"b")
    }
    
g_nodrop[id] = false
    set_pev
(idpev_weaponmodel2p_model)
    
    
is_changing[id] = false
    no_draw_other
[id] = false
}

public 
play_weapon_anim(playeranim)
{
    
set_pev(playerpev_weaponanimanim)
    
message_begin(MSG_ONESVC_WEAPONANIM, {000}, player)
    
write_byte(anim)
    
write_byte(pev(playerpev_body))
    
message_end()
}

public 
set_player_nextattack(idFloat:nexttime)
{
    
set_pdata_float(id83nexttime5)
}

public 
make_knockback(idFloat:Origin[3], Float:maxspeed)
{
    
// Get and set velocity
    
new Float:fVelocity[3]
    
kickback(idOriginmaxspeedfVelocity)
    
    
entity_set_vector(idEV_VEC_velocityfVelocity)
}

stock kickback(entFloat:fOrigin[3], Float:fSpeedFloat:fVelocity[3])
{
    
// Find origin
    
new Float:fEntOrigin[3];
    
entity_get_vectorentEV_VEC_originfEntOrigin );

    
// Do some calculations
    
new Float:fDistance[3];
    
fDistance[0] = fEntOrigin[0] - fOrigin[0];
    
fDistance[1] = fEntOrigin[1] - fOrigin[1];
    
fDistance[2] = fEntOrigin[2] - fOrigin[2];
    new 
Float:fTime = (vector_distancefEntOrigin,fOrigin ) / fSpeed);
    
fVelocity[0] = fDistance[0] / fTime;
    
fVelocity[1] = fDistance[1] / fTime;
    
fVelocity[2] = fDistance[2] / fTime;

    return (
fVelocity[0] && fVelocity[1] && fVelocity[2]);
}

// Death message
public death_message(KillerVictim, const Weapon[], ScoreBoard)
{
    
// Block death msg
    
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET)
    
ExecuteHamB(Ham_KilledVictimKiller2)
    
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT)
    
    
// Death
    
make_deathmsg(KillerVictim0Weapon)

    
// Update score board
    
if (ScoreBoard)
    {
        
message_begin(MSG_BROADCASTget_user_msgid("ScoreInfo"))
        
write_byte(Killer// id
        
write_short(pev(Killerpev_frags)) // frags
        
write_short(cs_get_user_deaths(Killer)) // deaths
        
write_short(0// class?
        
write_short(get_user_team(Killer)) // team
        
message_end()
        
        
message_begin(MSG_BROADCASTget_user_msgid("ScoreInfo"))
        
write_byte(Victim// id
        
write_short(pev(Victimpev_frags)) // frags
        
write_short(cs_get_user_deaths(Victim)) // deaths
        
write_short(0// class?
        
write_short(get_user_team(Victim)) // team
        
message_end()
    }
}

public 
show_ammo(taskid)
{
    new 
id taskid TASK_SHOW_AMMO
    
    
if(get_user_weapon(id) == CSW_AK47 && g_has_ak47launcher[id] && ak47_mode[id] == 2)
    {
        static 
Message[32]
        
formatex(Messagesizeof(Message), "Grenade Ammo: %i/%i"g_grenade[id], get_pcvar_num(cvar_ammo_default))
        
        
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("StatusText"), {0,0,0}, id)
        
write_byte(0)
        
write_string(Message)
        
message_end()
    } else {
        
        
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("StatusText"), {0,0,0}, id)
        
write_byte(0)
        
write_string("")
        
message_end()
        
remove_task(id+TASK_SHOW_AMMO)
    }
}

stock get_weapon_ent(id,wpnid=0,wpnName[]="")
{
    static 
newName[24]

    if(
wpnidget_weaponname(wpnid,newName,23)
    else 
formatex(newName,23,"%s",wpnName)

    if(!
equal(newName,"weapon_",7))
        
format(newName,23,"weapon_%s",newName)

    return 
fm_find_ent_by_owner(get_maxplayers(),newName,id)

[/quote]

no se poenr esas etiqudas me dises¿¿¿GeniusGeniusRoflmao

[quote='mmeka12' pid='141545' dateline='1475268260']
[quote='Skylar' pid='141534' dateline='1475265230']
[quote='mmeka12' pid='141530' dateline='1475264708']

grasias enverda te lo agradesto Gran sonrisa RainbowRainbowExcitedeyesVictoryTruestoryCorazón

y esto tengo una pregunta podrias canbiar de zp a modo otma estre plugin
el cual es el svdex porque eres muy proRainbowRainbow
y me enseñaria a ser como tu¿
solo se editar svars pero podrias desmotrarme tus conosimietos¿¿

aqui el codigo porfavor ponlo a modo normal y que no se me salga del cs
si no es molestia Roflmao

PHP


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

#define TASK_SHOW_AMMO 111111

new const weapon_classname[] = "svdex"
new const w_model[] = "models/zombie_plague/w_svdex.mdl"
new const p_model[] = "models/zombie_plague/p_svdex.mdl"
new const v_model1[] = "models/zombie_plague/v_svdex.mdl"
new const v_model2[] = "models/zombie_plague/v_svdex_2.mdl"
new const grenade_model[] = "models/zombie_plague/s_svdex.mdl"

new const grenade_exp_spr[] = "sprites/zombie_plague/explode_nade.spr"
new const grenade_exp_sound[] = "weapons/svdex_exp.wav"
new const grenade_launch_sound[] = "weapons/svdex_shoot2.wav"

new bool:g_has_ak47launcher[33]
new ak47_mode[33]
new bool:no_draw_other[33]
new bool:is_changing[33]
new Float:last_press[33]
new Float:cl_pushangle[33]

new g_grenade[33]
new g_nodrop[33]
new g_trail, exp_spr

// Cvars
new cvar_default_mode, cvar_radius
new cvar_ammo_default, cvar_normal_dmg, cvar_launch_dmg
new cvar_speed, cvar_recoil

// Weapon entity names
new const WEAPONENTNAMES[][] = {
"weapon_p228", "weapon_scout", "weapon_hegrenade", "weapon_xm1014",
"weapon_c4", "weapon_mac10", "weapon_aug", "weapon_smokegrenade", "weapon_elite",
"weapon_fiveseven", "weapon_ump45", "weapon_sg550", "weapon_galil", "weapon_famas",
"weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle",
"weapon_sg552", "weapon_ak47", "weapon_knife", "weapon_p90"
}

new g_ak47launcher

public plugin_init()
{
register_plugin("[ZP] Extra Item: SvDex", "1.0", "Dias")

// Events
register_event("CurWeapon", "event_curweapon", "be", "1=1")
register_event("DeathMsg", "event_death", "a")
register_event("HLTV", "event_newround", "a", "1=0", "2=0")
RegisterHam(Ham_Spawn, "player", "fw_spawn_post", 1)
for(new i = 0 ; i < sizeof WEAPONENTNAMES; i++)
register_clcmd(WEAPONENTNAMES[i], "fw_changeweapon")
register_clcmd("lastinv", "fw_changeweapon")
RegisterHam(Ham_Item_Deploy, "weapon_ak47", "fw_ak47_deploy_post", 1)

// Forward
register_forward(FM_CmdStart, "fw_cmdstart")
register_touch("svdex_grenade", "*", "fw_touch")
RegisterHam(Ham_TakeDamage, "player", "fw_takedmg")

RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "fw_primary_attack")
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "fw_primary_attack_post",1)

// Cvars
cvar_default_mode = register_cvar("zp_svdex_launcher_default_mode", "1")
cvar_radius = register_cvar("zp_svdex_launcher_radius", "200.0")

cvar_speed = register_cvar("zp_svdex_normal_speed", "5.5")
cvar_recoil = register_cvar("zp_svdex_normal_recoil", "0.5")
cvar_normal_dmg = register_cvar("zp_svdex_normal_dmg", "4.5")

cvar_ammo_default = register_cvar("zp_svdex_launcher_ammo", "10")
cvar_launch_dmg = register_cvar("zp_svdex_launcher_dmg", "650")

register_clcmd("drop", "cmd_drop", 0)

g_ak47launcher = zp_register_extra_item("SvDex (2 Mode)", 40, ZP_TEAM_HUMAN)
}

public plugin_precache()
{
engfunc(EngFunc_PrecacheModel, w_model)
engfunc(EngFunc_PrecacheModel, p_model)
engfunc(EngFunc_PrecacheModel, v_model1)
engfunc(EngFunc_PrecacheModel, v_model2)

engfunc(EngFunc_PrecacheModel, grenade_model)
engfunc(EngFunc_PrecacheSound, grenade_exp_sound)
engfunc(EngFunc_PrecacheSound, grenade_launch_sound)

precache_sound("weapons/svdex_shoot1.wav")
precache_sound("weapons/svdex_clipin.wav")
precache
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)