Mensajes: 11
Temas: 3
Registro en: Sep 2016
29/09/2016, 03:07 PM
(Última modificación: 29/09/2016, 03:13 PM por mmeka12.)
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 Float uch[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 Float fVelocity[3]
velocity_by_aim(id, (get_pcvar_num(cvar_shot_speed)*10), vfVelocity)
// add velocity of Owner for ent
new Float fAttack[3], Float fAngle[3], Float Ofps[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 Float Origin[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 Float NewOrigin[3],Float Normal[3],Float TraceDirection[3],
Float TraceEnd[3],Float EntAngles[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 Float elocity[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 Float Origin[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 Float fEnd[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
Mensajes: 4,637
Temas: 73
Registro en: Oct 2013
Reputación:
44
Sección equivocada, ahí lo moví a scripting. Por otro lado, pone el código entre etiquetas [PHP] o subilo como adjunto.
Mensajes: 2,074
Temas: 110
Registro en: Apr 2014
Código PHP: e <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_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 Float:Puch[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 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(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 Float:vOrigin[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 Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3], Float:vTraceEnd[3],Float:vEntAngles[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 Float:velocity[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 Float:vOrigin[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 Float:vfEnd[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) } } }
Mensajes: 11
Temas: 3
Registro en: Sep 2016
(29/09/2016, 03:31 PM)SoundBlaster escribió: Código PHP: e <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_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 Float:Puch[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 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(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 Float:vOrigin[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 Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3], Float:vTraceEnd[3],Float:vEntAngles[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 Float:velocity[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 Float:vOrigin[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 Float:vfEnd[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) } } }
no me sirvio no sale en el menu de comandos del amxmod
Mensajes: 765
Temas: 46
Registro en: Jul 2016
Reputación:
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_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 Float:Puch[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 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(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 Float:vOrigin[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 Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3], Float:vTraceEnd[3],Float:vEntAngles[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 Float:velocity[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 Float:vOrigin[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 Float:vfEnd[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) } } }
Idioma: [Extrangez]
Nivel de Amistad: [Depende de ti]
Aportes:
[Mapas]
zm_impressive
zm_laberim
zm_bunkeriM 28%
Made in Venezuela
Mensajes: 11
Temas: 3
Registro en: Sep 2016
(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_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 Float:Puch[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 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(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 Float:vOrigin[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 Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3], Float:vTraceEnd[3],Float:vEntAngles[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 Float:velocity[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 Float:vOrigin[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 Float:vfEnd[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) } } }
y el comando solo me salen los svars ayuda
Mensajes: 3,238
Temas: 47
Registro en: Feb 2015
Reputación:
34
(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_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 Float:Puch[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 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(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 Float:vOrigin[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 Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3], Float:vTraceEnd[3],Float:vEntAngles[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 Float:velocity[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 Float:vOrigin[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 Float:vfEnd[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) } } }
y el comando solo me salen los svars ayuda
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_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")
register_concmd( "obtener_arma", "setweapon" );
for (new i = 1; i < sizeof WEAPONENTNAMES; i++) if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1) }
public setweapon( id ) { if( !is_user_alive( id ) ) return;
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 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 Float:Puch[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 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(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 Float:vOrigin[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 Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3], Float:vTraceEnd[3],Float:vEntAngles[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 Float:velocity[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 Float:vOrigin[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 Float:vfEnd[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) } } }
Listo, en la consola pones "obtener_arma" y te va a dar el arma.
Mensajes: 11
Temas: 3
Registro en: Sep 2016
30/09/2016, 04:45 PM
(Última modificación: 30/09/2016, 04:52 PM por mmeka12.)
[/quote]
grasias enverda te lo agradesto
y esto tengo una pregunta podrias canbiar de zp a modo otma estre plugin
el cual es el svdex porque eres muy pro
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
[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 Float elay
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], Float Angle[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
y esto tengo una pregunta podrias canbiar de zp a modo otma estre plugin
el cual es el svdex porque eres muy pro
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
no se poner eso de codigo PHP y que saga e un cuadro
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 Float elay
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], Float Angle[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
Mensajes: 3,238
Temas: 47
Registro en: Feb 2015
Reputación:
34
30/09/2016, 04:53 PM
(Última modificación: 30/09/2016, 05:08 PM por Skylar.)
(30/09/2016, 04:45 PM)mmeka12 escribió: grasias enverda te lo agradesto
y esto tengo una pregunta podrias canbiar de zp a modo otma estre plugin
el cual es el svdex porque eres muy pro
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
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 Floatelay
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], FloatAngle[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_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) 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_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 setweapon( id, item ) { if( item != g_ak47launcher && !is_user_alive( id ) ) 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 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 Float:Delay 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], Float:vAngle[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) } [hr] [/quote]
grasias enverda te lo agradesto :D :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_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 Float:Delay 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], Float:vAngle[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) }
Mensajes: 11
Temas: 3
Registro en: Sep 2016
30/09/2016, 05:44 PM
(Última modificación: 30/09/2016, 06:00 PM por mmeka12.)
[quote='Skylar' pid='141534' dateline='1475265230']
[quote='mmeka12' pid='141530' dateline='1475264708']
grasias enverda te lo agradesto
y esto tengo una pregunta podrias canbiar de zp a modo otma estre plugin
el cual es el svdex porque eres muy pro
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
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 Float elay
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], Float Angle[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_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) 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_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 setweapon( id, item ) { if( item != g_ak47launcher && !is_user_alive( id ) ) 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 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 Float:Delay 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], Float:vAngle[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) } [hr] [/quote]
grasias enverda te lo agradesto :D :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_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 Float:Delay 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], Float:vAngle[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]
no se poenr esas etiqudas me dises¿¿¿
[quote='mmeka12' pid='141545' dateline='1475268260']
[quote='Skylar' pid='141534' dateline='1475265230']
[quote='mmeka12' pid='141530' dateline='1475264708']
grasias enverda te lo agradesto
y esto tengo una pregunta podrias canbiar de zp a modo otma estre plugin
el cual es el svdex porque eres muy pro
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
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
|