Veteran Member
Join Date: Nov 2013
Location: Malaysia (9w2zow).
|
08-08-2014
, 04:53
Re: VIP Extra Items
|
#14
|
Quote:
Originally Posted by Light_Dark
Please convert these for ZP VIP extra.
|
Please use below:
1. ATCS4:
PHP Code:
#include <amxmodx> #include <engine> #include <fakemeta> #include <fakemeta_util> #include <hamsandwich> #include <cstrike> #include <zombieplague> #include <zmvip>
#define PLUGIN "[ZP] Extra Item: AT4CS" #define VERSION "1.0" #define AUTHOR "Dias"
#define weapon_at4cs "weapon_m249" #define CSW_AT4CS CSW_M249
#define TASK_CHECKRELOAD 111112 #define TASK_RELOAD 111113
new g_at4cs new g_had_at4cs[33], Float:g_lastfire[33], Float:g_lastaim[33], g_aiming[33], g_smoke_id, g_spr_trail, g_spr_exp, is_reloading[33], cvar_radius, cvar_maxdamage
new const v_model[] = "models/zombie_plague/v_at4ex.mdl" new const p_model[] = "models/zombie_plague/p_at4ex.mdl" new const w_model[] = "models/zombie_plague/w_at4ex.mdl" new const s_model[] = "models/zombie_plague/s_rocket.mdl"
new const at4cs_sound[5][] = { "weapons/at4-1.wav", // Fire Sound "weapons/at4_clipin1.wav", // Clip in 1 "weapons/at4_clipin2.wav", // Clip in 2 "weapons/at4_clipin3.wav", // Clip in 3 "weapons/at4_draw.wav" // Draw }
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_event("CurWeapon", "event_curweapon", "be", "1=1") register_event("HLTV", "event_newround", "a", "1=0", "2=0") register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1) register_forward(FM_CmdStart, "fw_CmdStart") register_forward(FM_SetModel, "fw_SetModel") register_think("at4ex_rocket", "fw_rocket_think") register_touch("at4ex_rocket", "*", "fw_rocket_touch") RegisterHam(Ham_Weapon_Reload, weapon_at4cs, "fw_WeaponReload") RegisterHam(Ham_Item_AddToPlayer, weapon_at4cs, "fw_AddToPlayer", 1) cvar_radius = register_cvar("zp_at4cs_radius", "300.0") cvar_maxdamage = register_cvar("zp_at4cs_maxdamage", "650.0") g_at4cs = zv_register_extra_item("AT4CS", "(VIP only)", 38, ZV_TEAM_HUMAN) register_clcmd("weapon_at4cs", "hook_weapon") }
public hook_weapon(id) { engclient_cmd(id, weapon_at4cs) return PLUGIN_HANDLED }
public plugin_precache() { engfunc(EngFunc_PrecacheModel, v_model) engfunc(EngFunc_PrecacheModel, p_model) engfunc(EngFunc_PrecacheModel, w_model) engfunc(EngFunc_PrecacheModel, s_model) engfunc(EngFunc_PrecacheGeneric, "sprites/weapon_at4cs.txt") engfunc(EngFunc_PrecacheGeneric, "sprites/at4cs.spr") g_smoke_id = engfunc(EngFunc_PrecacheModel, "sprites/effects/rainsplash.spr") g_spr_trail = engfunc(EngFunc_PrecacheModel,"sprites/xbeam3.spr") g_spr_exp = engfunc(EngFunc_PrecacheModel,"sprites/zerogxplode.spr") for(new i = 0; i < sizeof(at4cs_sound); i++) engfunc(EngFunc_PrecacheSound, at4cs_sound[i]) }
public zv_extra_item_selected(id, itemid) { if(itemid != g_at4cs) return PLUGIN_HANDLED g_had_at4cs[id] = 1 is_reloading[id] = 0 g_aiming[id] = 0 fm_give_item(id, weapon_at4cs) static at4cs at4cs = fm_get_user_weapon_entity(id, CSW_AT4CS) cs_set_weapon_ammo(at4cs, 1) cs_set_user_bpammo(id, CSW_AT4CS, 10) return PLUGIN_CONTINUE }
public zp_user_infected_post(id) { g_had_at4cs[id] = 0 is_reloading[id] = 0 g_aiming[id] = 0 remove_task(id+TASK_CHECKRELOAD) remove_task(id+TASK_RELOAD) }
public zp_user_humanized_post(id) { g_had_at4cs[id] = 0 is_reloading[id] = 0 g_aiming[id] = 0 remove_task(id+TASK_CHECKRELOAD) remove_task(id+TASK_RELOAD) }
public event_newround() { remove_entity_name("at4ex_rocket") for(new i = 0; i < get_maxplayers(); i++) { if(is_user_alive(i) && is_user_connected(i)) { remove_task(i+TASK_CHECKRELOAD) remove_task(i+TASK_RELOAD) } } }
public event_curweapon(id) { if(!is_user_alive(id) || !is_user_connected(id)) return PLUGIN_HANDLED if(get_user_weapon(id) != CSW_AT4CS || !g_had_at4cs[id]) return PLUGIN_HANDLED if(zp_get_user_zombie(id) || zp_get_user_survivor(id)) return PLUGIN_HANDLED set_pev(id, pev_viewmodel2, v_model) set_pev(id, pev_weaponmodel2, p_model) return PLUGIN_CONTINUE }
public fw_UpdateClientData_Post(id, sendweapons, cd_handle) { if(!is_user_alive(id) || !is_user_connected(id)) return FMRES_IGNORED if(get_user_weapon(id) != CSW_AT4CS || !g_had_at4cs[id]) return FMRES_IGNORED if(zp_get_user_zombie(id) || zp_get_user_survivor(id)) return FMRES_IGNORED set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001) return FMRES_HANDLED }
public fw_AddToPlayer(ent, id) { if(!is_valid_ent(ent) || !is_user_alive(id)) return HAM_IGNORED if(zp_get_user_zombie(id) || zp_get_user_survivor(id)) return HAM_IGNORED if(entity_get_int(ent, EV_INT_impulse) == 61296) { g_had_at4cs[id] = 1 entity_set_int(id, EV_INT_impulse, 0) return HAM_HANDLED } if(g_had_at4cs[id]) { message_begin(MSG_ONE, get_user_msgid("WeaponList"), _, id) write_string("weapon_at4cs"); // WeaponName write_byte(3) // PrimaryAmmoID write_byte(1) // PrimaryAmmoMaxAmount write_byte(-1) // SecondaryAmmoID write_byte(-1) // SecondaryAmmoMaxAmount write_byte(0) // SlotID (0...N) write_byte(4) // NumberInSlot (1...N) write_byte(CSW_AT4CS) // WeaponID write_byte(0) // Flags message_end() } return HAM_HANDLED }
public fw_CmdStart(id, uc_handle, seed) { if(!is_user_alive(id) || !is_user_connected(id)) return FMRES_IGNORED if(get_user_weapon(id) != CSW_AT4CS || !g_had_at4cs[id]) return FMRES_IGNORED if(zp_get_user_zombie(id) || zp_get_user_survivor(id)) return FMRES_IGNORED static CurButton CurButton = get_uc(uc_handle, UC_Buttons) if(CurButton & IN_ATTACK) { static Float:CurTime CurTime = get_gametime() static at4cs at4cs = fm_find_ent_by_owner(-1, weapon_at4cs, id) if(cs_get_weapon_ammo(at4cs) > 0 && !is_reloading[id]) { if(CurTime - 4.5 > g_lastfire[id]) { set_weapon_anim(id, 1) emit_sound(id, CHAN_WEAPON, at4cs_sound[0], 1.0, ATTN_NORM, 0, PITCH_NORM) create_rocket(id) static Float:Punch_Angles[3] Punch_Angles[0] = -20.0 Punch_Angles[1] = 0.0 Punch_Angles[2] = 0.0 set_pev(id, pev_punchangle, Punch_Angles) cs_set_weapon_ammo(at4cs, cs_get_weapon_ammo(at4cs) - 1) if(cs_get_weapon_ammo(at4cs) <= 0 && !is_reloading[id]) { if(cs_get_user_bpammo(id, CSW_AT4CS) > 0) { set_task(1.0, "at4cs_reload", id) } } if(cs_get_user_zoom(id)) cs_set_user_zoom(id, CS_RESET_ZOOM, 1) g_lastfire[id] = CurTime } } else { if(!is_reloading[id]) { if(cs_get_user_bpammo(id, CSW_AT4CS) > 0) { if(CurTime - 1.0 > g_lastfire[id]) { at4cs_reload(id) g_lastfire[id] = CurTime } } } } } if(CurButton & IN_ATTACK2) { static Float:CurTime CurTime = get_gametime() if((CurTime - 0.5 > g_lastaim[id]) && !is_reloading[id]) { if(!g_aiming[id]) { cs_set_user_zoom(id, CS_SET_FIRST_ZOOM, 1) g_aiming[id] = 1 } else { cs_set_user_zoom(id, CS_RESET_ZOOM, 1) g_aiming[id] = 0 } g_lastaim[id] = CurTime } } CurButton &= ~IN_ATTACK set_uc(uc_handle, UC_Buttons, CurButton) CurButton &= ~IN_RELOAD set_uc(uc_handle, UC_Buttons, CurButton) return FMRES_HANDLED }
public fw_SetModel(ent, const model[]) { if(!is_valid_ent(ent)) return FMRES_IGNORED static szClassName[33] entity_get_string(ent, EV_SZ_classname, szClassName, charsmax(szClassName)) if(!equal(szClassName, "weaponbox")) return FMRES_IGNORED static iOwner iOwner = entity_get_edict(ent, EV_ENT_owner) if(equal(model, "models/w_m249.mdl")) { static at4cs at4cs = find_ent_by_owner(-1, "weapon_m249", ent) if(!is_valid_ent(at4cs)) return FMRES_IGNORED; if(g_had_at4cs[iOwner]) { entity_set_int(at4cs, EV_INT_impulse, 61296) g_had_at4cs[iOwner] = 0 entity_set_model(ent, w_model) return FMRES_SUPERCEDE } } return FMRES_IGNORED }
public at4cs_reload(id) { if(is_reloading[id]) return is_reloading[id] = 1 set_weapon_anim(id, 3) set_task(0.1, "checking_reload", id+TASK_CHECKRELOAD, _, _, "b") set_task(4.0, "reload_complete", id+TASK_RELOAD) }
public checking_reload(id) { id -= TASK_CHECKRELOAD if(cs_get_user_zoom(id)) cs_set_user_zoom(id, CS_RESET_ZOOM, 1) if(get_user_weapon(id) != CSW_AT4CS || !g_had_at4cs[id]) { remove_task(id+TASK_CHECKRELOAD) remove_task(id+TASK_RELOAD) is_reloading[id] = 0 } }
public reload_complete(id) { id -= TASK_RELOAD if(!is_reloading[id]) return remove_task(id+TASK_CHECKRELOAD) static at4cs at4cs = fm_find_ent_by_owner(-1, weapon_at4cs, id) cs_set_weapon_ammo(at4cs, 1) cs_set_user_bpammo(id, CSW_AT4CS, cs_get_user_bpammo(id, CSW_AT4CS) - 1) is_reloading[id] = 0 }
public fw_WeaponReload(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_AT4CS || !g_had_at4cs[id]) return HAM_IGNORED if(zp_get_user_zombie(id) || zp_get_user_survivor(id)) return HAM_IGNORED static Float:CurTime CurTime = get_gametime() if(!is_reloading[id]) { if(cs_get_user_bpammo(id, CSW_AT4CS) > 0) { if(CurTime - 1.0 > g_lastfire[id]) { at4cs_reload(id) g_lastfire[id] = CurTime } } } return HAM_SUPERCEDE }
public create_rocket(id) { new ent, Float:Origin[3], Float:Angles[3], Float:Velocity[3] ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")) engfunc(EngFunc_GetAttachment, id, 0, Origin, Angles) pev(id, pev_angles, Angles) set_pev(ent, pev_origin, Origin) set_pev(ent, pev_angles, Angles) set_pev(ent, pev_solid, 2) set_pev(ent, pev_movetype, 5) set_pev(ent, pev_classname, "at4ex_rocket") set_pev(ent, pev_owner, id) engfunc(EngFunc_SetModel, ent, s_model) set_pev(ent, pev_mins, {-1.0, -1.0, -1.0}) set_pev(ent, pev_maxs, {1.0, 1.0, 1.0}) velocity_by_aim(id, 1750, Velocity) set_pev(ent, pev_velocity, Velocity) message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_BEAMFOLLOW) // TE id write_short(ent) // entity:attachment to follow write_short(g_spr_trail) // sprite index write_byte(25) // life in 0.1's write_byte(2) // line width in 0.1's write_byte(255) // r write_byte(255) // g write_byte(255) // b write_byte(200) // brightness message_end() set_pev(ent, pev_iuser4, 0) set_pev(ent, pev_nextthink, halflife_time() + 0.1) }
public fw_rocket_think(ent) { if(!pev_valid(ent)) return static Float:Origin[3] pev(ent, pev_origin, Origin) message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_SPRITE) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_short(g_smoke_id) write_byte(2) write_byte(200) message_end() if(pev(ent, pev_iuser4) == 0) { static Victim Victim = FindClosesEnemy(ent) if(is_user_alive(Victim)) { set_pev(ent, pev_iuser4, Victim) } } else { static Victim Victim = pev(ent, pev_iuser4) if(is_user_alive(Victim)) { static Float:VicOrigin[3] pev(Victim, pev_origin, VicOrigin) turn_to_target(ent, Origin, Victim, VicOrigin) hook_ent(ent, Victim, 500.0) } else { set_pev(ent, pev_iuser4, 0) } } set_pev(ent, pev_nextthink, halflife_time() + 0.075) }
public fw_rocket_touch(rocket, touch) { if(!pev_valid(rocket)) return if(is_user_alive(touch) && pev(rocket, pev_owner) == touch) return static Float:Origin[3] pev(rocket, pev_origin, Origin) message_begin(MSG_BROADCAST ,SVC_TEMPENTITY) write_byte(TE_EXPLOSION) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_short(g_spr_exp) // sprite index write_byte(20) // scale in 0.1's write_byte(30) // framerate write_byte(0) // flags message_end() static owner, iVictim iVictim = -1 owner = pev(rocket, pev_owner) while((iVictim = find_ent_in_sphere(iVictim, Origin, get_pcvar_float(cvar_radius))) != 0) { if((0 < iVictim < 32) && is_user_alive(iVictim) && iVictim != owner && zp_get_user_zombie(iVictim)) { new Float:MaxDamage, Float:Damage MaxDamage = get_pcvar_float(cvar_maxdamage) Damage = random_float(MaxDamage - random_float(0.0, 100.0), MaxDamage + random_float(0.0, 100.0)) ExecuteHam(Ham_TakeDamage, iVictim, 0, owner, 0, DMG_BULLET) static health health = get_user_health(iVictim) if(health - Damage >= 1) { fm_set_user_health(iVictim, health - floatround(Damage)) } else { death_message(owner, iVictim, 1) } } }
engfunc(EngFunc_RemoveEntity, rocket) }
stock set_weapon_anim(id, anim) { set_pev(id, pev_weaponanim, anim)
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id) write_byte(anim) write_byte(pev(id,pev_body)) message_end() }
stock death_message(Killer, Victim, 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, "")
// 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() } }
stock FindClosesEnemy(entid) { new Float:Dist new Float:maxdistance=300.0 new indexid=0 for(new i=1;i<=get_maxplayers();i++){ if(is_user_alive(i) && is_valid_ent(i) && can_see_fm(entid, i) && pev(entid, pev_owner) != i && cs_get_user_team(pev(entid, pev_owner)) != cs_get_user_team(i)) { Dist = entity_range(entid, i) if(Dist <= maxdistance) { maxdistance=Dist indexid=i return indexid } } } return 0 }
stock bool:can_see_fm(entindex1, entindex2) { if (!entindex1 || !entindex2) return false
if (pev_valid(entindex1) && pev_valid(entindex1)) { new flags = pev(entindex1, pev_flags) if (flags & EF_NODRAW || flags & FL_NOTARGET) { return false } new Float:lookerOrig[3] new Float:targetBaseOrig[3] new Float:targetOrig[3] new Float:temp[3] pev(entindex1, pev_origin, lookerOrig) pev(entindex1, pev_view_ofs, temp) lookerOrig[0] += temp[0] lookerOrig[1] += temp[1] lookerOrig[2] += temp[2] pev(entindex2, pev_origin, targetBaseOrig) pev(entindex2, pev_view_ofs, temp) targetOrig[0] = targetBaseOrig [0] + temp[0] targetOrig[1] = targetBaseOrig [1] + temp[1] targetOrig[2] = targetBaseOrig [2] + temp[2] engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) // checks the had of seen player if (get_tr2(0, TraceResult:TR_InOpen) && get_tr2(0, TraceResult:TR_InWater)) { return false } else { new Float:flFraction get_tr2(0, TraceResult:TR_flFraction, flFraction) if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2)) { return true } else { targetOrig[0] = targetBaseOrig [0] targetOrig[1] = targetBaseOrig [1] targetOrig[2] = targetBaseOrig [2] engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) // checks the body of seen player get_tr2(0, TraceResult:TR_flFraction, flFraction) if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2)) { return true } else { targetOrig[0] = targetBaseOrig [0] targetOrig[1] = targetBaseOrig [1] targetOrig[2] = targetBaseOrig [2] - 17.0 engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) // checks the legs of seen player get_tr2(0, TraceResult:TR_flFraction, flFraction) if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2)) { return true } } } } } return false }
stock turn_to_target(ent, Float:Ent_Origin[3], target, Float:Vic_Origin[3]) { if(target) { new Float:newAngle[3] entity_get_vector(ent, EV_VEC_angles, newAngle) new Float:x = Vic_Origin[0] - Ent_Origin[0] new Float:z = Vic_Origin[1] - Ent_Origin[1] new Float:radians = floatatan(z/x, radian) newAngle[1] = radians * (180 / 3.14) if (Vic_Origin[0] < Ent_Origin[0]) newAngle[1] -= 180.0 entity_set_vector(ent, EV_VEC_angles, newAngle) } }
stock hook_ent(ent, victim, Float:speed) { static Float:fl_Velocity[3] static Float:VicOrigin[3], Float:EntOrigin[3] pev(ent, pev_origin, EntOrigin) pev(victim, pev_origin, VicOrigin) static Float:distance_f distance_f = get_distance_f(EntOrigin, VicOrigin) if (distance_f > 10.0) { new Float:fl_Time = distance_f / speed fl_Velocity[0] = (VicOrigin[0] - EntOrigin[0]) / fl_Time fl_Velocity[1] = (VicOrigin[1] - EntOrigin[1]) / fl_Time fl_Velocity[2] = (VicOrigin[2] - EntOrigin[2]) / fl_Time } else { fl_Velocity[0] = 0.0 fl_Velocity[1] = 0.0 fl_Velocity[2] = 0.0 }
entity_set_vector(ent, EV_VEC_velocity, fl_Velocity) } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1066\\ f0\\ fs16 \n\\ par } */
2. Balrog-III:
PHP Code:
#include <amxmodx> #include <fakemeta> #include <fakemeta_util> #include <hamsandwich> #include <cstrike> #include <zombieplague> #include <zmvip>
#define PLUGIN "Balrog-III" #define VERSION "1.0" #define AUTHOR "Dias"
#define V_MODEL "models/v_balrog3.mdl" #define P_MODEL "models/p_balrog3.mdl" #define W_MODEL "models/w_balrog3.mdl"
#define DAMAGE 48 #define BPAMMO 240 #define ACTIVE_CLIP 15
#define CSW_BALROG3 CSW_MP5NAVY #define weapon_balrog3 "weapon_mp5navy"
#define WEAPON_SECRETCODE 4962 #define WEAPON_EVENT "events/mp5n.sc" #define OLD_W_MODEL "models/w_mp5.mdl"
new const Balrog3_Sounds[6][] = { "weapons/balrig3-1.wav", "weapons/balrig3-2.wav", "weapons/balrig3_boltpull.wav", "weapons/balrig3_clipin.wav", "weapons/balrig3_clipout.wav", "weapons/balrig3_draw.wav" }
#define EXPLOSE_SPR "sprites/balrog5stack.spr"
enum { ANIM_IDLE = 0, ANIM_DRAW, ANIM_RELOAD, ANIM_SHOOT_A, ANIM_SHOOT_B }
new g_Balrog3 new g_Had_Balrog3[33], g_Shoot_Special[33], g_Holding_Attack[33], g_Shoot_Count[33], g_Old_Weapon[33], g_Current_Weapon[33] new g_Exp_SprId, g_balrog3_event, g_ShellId, g_SmokePuff_SprId
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1) register_forward(FM_PlaybackEvent, "fw_PlaybackEvent") register_forward(FM_SetModel, "fw_SetModel") register_forward(FM_CmdStart, "fw_CmdStart")
RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack") RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack") RegisterHam(Ham_Weapon_PrimaryAttack, weapon_balrog3, "fw_Weapon_PrimaryAttack") RegisterHam(Ham_Weapon_PrimaryAttack, weapon_balrog3, "fw_Weapon_PrimaryAttack_Post", 1) RegisterHam(Ham_Item_AddToPlayer, weapon_balrog3, "fw_Item_AddToPlayer_Post", 1)
register_clcmd("admin_get_balrog3", "Get_Balrog3", ADMIN_BAN) }
public plugin_precache() { engfunc(EngFunc_PrecacheModel, V_MODEL) engfunc(EngFunc_PrecacheModel, P_MODEL) engfunc(EngFunc_PrecacheModel, W_MODEL)
for(new i = 0; i < sizeof(Balrog3_Sounds); i++) engfunc(EngFunc_PrecacheSound, Balrog3_Sounds[i])
g_Exp_SprId = engfunc(EngFunc_PrecacheModel, EXPLOSE_SPR) g_SmokePuff_SprId = engfunc(EngFunc_PrecacheModel, "sprites/wall_puff1.spr") g_ShellId = engfunc(EngFunc_PrecacheModel, "models/pshell.mdl")
register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1) g_Balrog3 = zv_register_extra_item("Balrog-III", "VIP only", 25, ZV_TEAM_HUMAN) }
public fw_PrecacheEvent_Post(type, const name[]) { if(equal(WEAPON_EVENT, name)) g_balrog3_event = get_orig_retval() }
public zv_extra_item_selected(id, itemid) { if(itemid == g_Balrog3) Get_Balrog3(id) }
public zp_user_infected_post(id) Remove_Balrog3(id) public zp_user_humanized_post(id) Remove_Balrog3(id)
public Get_Balrog3(id) { if(!is_user_alive(id)) return g_Had_Balrog3[id] = 1 g_Shoot_Special[id] = 0 g_Holding_Attack[id] = 0 g_Shoot_Count[id] = 0 fm_give_item(id, weapon_balrog3) cs_set_user_bpammo(id, CSW_BALROG3, BPAMMO) }
public Remove_Balrog3(id) { if(!is_user_connected(id)) return g_Had_Balrog3[id] = 0 g_Shoot_Special[id] = 0 }
public Event_CurWeapon(id) { if(!is_user_alive(id)) return if(get_user_weapon(id) != g_Current_Weapon[id]) g_Current_Weapon[id] = get_user_weapon(id) if(get_user_weapon(id) == CSW_BALROG3 && g_Had_Balrog3[id]) { if(g_Old_Weapon[id] != CSW_BALROG3) { set_pev(id, pev_viewmodel2, V_MODEL) set_pev(id, pev_weaponmodel2, P_MODEL) } } g_Old_Weapon[id] = get_user_weapon(id) }
public fw_UpdateClientData_Post(id, sendweapons, cd_handle) { if(!is_user_alive(id) || !is_user_connected(id)) return FMRES_IGNORED if(get_user_weapon(id) == CSW_BALROG3 && g_Had_Balrog3[id]) set_cd(cd_handle, CD_flNextAttack, get_gametime() + 0.001) return FMRES_HANDLED }
public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) { if (!is_user_connected(invoker)) return FMRES_IGNORED if(get_user_weapon(invoker) != CSW_BALROG3 || !g_Had_Balrog3[invoker]) return FMRES_IGNORED if(eventid != g_balrog3_event) return FMRES_IGNORED engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2) if(!g_Shoot_Special[invoker] && cs_get_user_bpammo(invoker, CSW_BALROG3) > 0) { g_Shoot_Count[invoker]++ if(g_Shoot_Count[invoker] >= ACTIVE_CLIP) { g_Shoot_Special[invoker] = 1 static Ent; Ent = fm_get_user_weapon_entity(invoker, CSW_BALROG3) if(pev_valid(Ent)) g_Shoot_Count[invoker] = cs_get_weapon_ammo(Ent) } } else if(g_Shoot_Special[invoker]) { cs_set_user_bpammo(invoker, CSW_BALROG3, cs_get_user_bpammo(invoker, CSW_BALROG3) - 1) if(cs_get_user_bpammo(invoker, CSW_BALROG3) <= 0) { g_Shoot_Special[invoker] = 0 g_Shoot_Count[invoker] = 0 } } set_weapon_anim(invoker, g_Shoot_Special[invoker] == 1 ? ANIM_SHOOT_B : ANIM_SHOOT_A) emit_sound(invoker, CHAN_WEAPON, g_Shoot_Special[invoker] == 1 ? Balrog3_Sounds[1] : Balrog3_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM) Eject_Shell(invoker, g_ShellId, 0.0) return FMRES_SUPERCEDE }
public fw_SetModel(entity, model[]) { if(!pev_valid(entity)) return FMRES_IGNORED static Classname[32] pev(entity, pev_classname, Classname, sizeof(Classname)) if(!equal(Classname, "weaponbox")) return FMRES_IGNORED static iOwner iOwner = pev(entity, pev_owner) if(equal(model, OLD_W_MODEL)) { static weapon; weapon = fm_find_ent_by_owner(-1, weapon_balrog3, entity) if(!pev_valid(weapon)) return FMRES_IGNORED; if(g_Had_Balrog3[iOwner]) { Remove_Balrog3(iOwner) set_pev(weapon, pev_impulse, WEAPON_SECRETCODE) engfunc(EngFunc_SetModel, entity, W_MODEL) return FMRES_SUPERCEDE } } return FMRES_IGNORED; }
public fw_CmdStart(id, uc_handle, seed) { if(!is_user_alive(id)) return if(g_Current_Weapon[id] != CSW_BALROG3 || !g_Had_Balrog3[id]) return static NewButton; NewButton = get_uc(uc_handle, UC_Buttons) static OldButton; OldButton = pev(id, pev_oldbuttons) if(NewButton & IN_ATTACK) { if(!g_Holding_Attack[id]) g_Holding_Attack[id] = 1 } else if((NewButton & IN_ATTACK2) && !(OldButton & IN_ATTACK2)) { if(cs_get_user_zoom(id) == 1) cs_set_user_zoom(id, CS_SET_AUGSG552_ZOOM, 1) else cs_set_user_zoom(id, CS_SET_NO_ZOOM, 1) } else { if(OldButton & IN_ATTACK) { if(g_Holding_Attack[id]) { g_Holding_Attack[id] = 0 g_Shoot_Count[id] = 0 g_Shoot_Special[id] = 0 } } } }
public fw_TraceAttack(Victim, Attacker, Float:Damage, Float:Direction[3], Ptr, DamageBits) { if(!is_user_alive(Attacker)) return HAM_IGNORED if(get_user_weapon(Attacker) != CSW_BALROG3 || !g_Had_Balrog3[Attacker]) return HAM_IGNORED static Float:flEnd[3], Float:vecPlane[3] get_tr2(Ptr, TR_vecEndPos, flEnd) get_tr2(Ptr, TR_vecPlaneNormal, vecPlane) if(!is_user_alive(Victim)) { Make_BulletHole(Attacker, flEnd, Damage) Make_BulletSmoke(Attacker, Ptr) } if(g_Shoot_Special[Attacker]) { Make_BalrogEffect(Attacker, Ptr) radius_damage(Attacker, flEnd, float(DAMAGE), 96.0) } SetHamParamFloat(3, float(DAMAGE)) return HAM_IGNORED }
public fw_Weapon_PrimaryAttack(Ent) { if(!pev_valid(Ent)) return static Id; Id = pev(Ent, pev_owner) if(!g_Had_Balrog3[Id]) return if(g_Shoot_Special[Id]) set_pdata_float(Ent, 62, 0.4, 4) else set_pdata_float(Ent, 62, 0.2, 4) }
public fw_Weapon_PrimaryAttack_Post(Ent) { if(!pev_valid(Ent)) return static Id; Id = pev(Ent, pev_owner) if(!g_Had_Balrog3[Id]) return if(g_Shoot_Special[Id] && cs_get_weapon_ammo(Ent) > 0) { cs_set_weapon_ammo(Ent, g_Shoot_Count[Id]) set_pdata_float(Ent, 46, get_pdata_float(Ent, 46, 4) * 0.75, 4) } }
public fw_Item_AddToPlayer_Post(ent, id) { if(!pev_valid(ent)) return HAM_IGNORED if(pev(ent, pev_impulse) == WEAPON_SECRETCODE) { g_Had_Balrog3[id] = 1 set_pev(ent, pev_impulse, 0) } return HAM_HANDLED }
stock Make_BulletHole(id, Float:Origin[3], Float:Damage) { // Find target static Decal; Decal = random_num(41, 45) static LoopTime; if(Damage > 100.0) LoopTime = 2 else LoopTime = 1 for(new i = 0; i < LoopTime; i++) { // Put decal on "world" (a wall) message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_WORLDDECAL) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_byte(Decal) message_end() // Show sparcles message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_GUNSHOTDECAL) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_short(id) write_byte(Decal) message_end() } }
public Make_BulletSmoke(id, TrResult) { static Float:vecSrc[3], Float:vecEnd[3], TE_FLAG get_weapon_attachment(id, vecSrc) global_get(glb_v_forward, vecEnd) xs_vec_mul_scalar(vecEnd, 8192.0, vecEnd) xs_vec_add(vecSrc, vecEnd, vecEnd) get_tr2(TrResult, TR_vecEndPos, vecSrc) get_tr2(TrResult, TR_vecPlaneNormal, vecEnd) xs_vec_mul_scalar(vecEnd, 2.5, vecEnd) xs_vec_add(vecSrc, vecEnd, vecEnd) TE_FLAG |= TE_EXPLFLAG_NODLIGHTS TE_FLAG |= TE_EXPLFLAG_NOSOUND TE_FLAG |= TE_EXPLFLAG_NOPARTICLES engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0) write_byte(TE_EXPLOSION) engfunc(EngFunc_WriteCoord, vecEnd[0]) engfunc(EngFunc_WriteCoord, vecEnd[1]) engfunc(EngFunc_WriteCoord, vecEnd[2] - 10.0) write_short(g_SmokePuff_SprId) write_byte(2) write_byte(50) write_byte(TE_FLAG) message_end() }
public Make_BalrogEffect(id, TrResult) { static Float:vecSrc[3], Float:vecEnd[3], TE_FLAG get_weapon_attachment(id, vecSrc) global_get(glb_v_forward, vecEnd) xs_vec_mul_scalar(vecEnd, 8192.0, vecEnd) xs_vec_add(vecSrc, vecEnd, vecEnd) get_tr2(TrResult, TR_vecEndPos, vecSrc) get_tr2(TrResult, TR_vecPlaneNormal, vecEnd) xs_vec_mul_scalar(vecEnd, 5.0, vecEnd) xs_vec_add(vecSrc, vecEnd, vecEnd) TE_FLAG |= TE_EXPLFLAG_NODLIGHTS TE_FLAG |= TE_EXPLFLAG_NOSOUND TE_FLAG |= TE_EXPLFLAG_NOPARTICLES engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0) write_byte(TE_EXPLOSION) engfunc(EngFunc_WriteCoord, vecEnd[0]) engfunc(EngFunc_WriteCoord, vecEnd[1]) engfunc(EngFunc_WriteCoord, vecEnd[2]) write_short(g_Exp_SprId) write_byte(5) write_byte(30) write_byte(TE_FLAG) message_end() }
stock get_weapon_attachment(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 radius_damage(id, Float:Origin[3], Float:Damage, Float:Radius) { static Victim; Victim = -1 while((Victim = engfunc(EngFunc_FindEntityInSphere, Victim, Origin, Radius)) != 0) { if(!is_user_alive(Victim) || id == Victim) continue if(!zp_get_user_zombie(Victim)) continue ExecuteHamB(Ham_TakeDamage, Victim, fm_get_user_weapon_entity(id, get_user_weapon(id)), id, Damage, DMG_BULLET) } }
stock Eject_Shell(id, Shell_ModelIndex, Float:Time) // By Dias { static Ent; Ent = get_pdata_cbase(id, 373, 5) if(!pev_valid(Ent)) return set_pdata_int(Ent, 57, Shell_ModelIndex, 4) set_pdata_float(id, 111, get_gametime() + Time) }
stock set_weapon_anim(id, anim) { if(!is_user_alive(id)) return set_pev(id, pev_weaponanim, anim) message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id) write_byte(anim) write_byte(pev(id, pev_body)) message_end() }
3. Thunder Bolt:
PHP Code:
#include <amxmodx> #include <engine> #include <fakemeta> #include <fakemeta_util> #include <hamsandwich> #include <cstrike> #include <fun> #include <zombieplague> #include <zmvip>
#define PLUGIN "[CSO] Thunderbolt" #define VERSION "3.0" #define AUTHOR "Dias"
#define DAMAGE 600 #define DEFAULT_AMMO 20 #define RELOAD_TIME 2.67
#define DELAY_SOUND 0.25
#define CSW_THUNDERBOLT CSW_AWP #define weapon_thunderbolt "weapon_awp" #define old_event "events/awp.sc" #define old_w_model "models/w_awp.mdl" #define WEAPON_SECRETCODE 4234234
#define V_MODEL "models/v_sfsniper2.mdl" #define P_MODEL "models/p_sfsniper.mdl" #define W_MODEL "models/w_sfsniper.mdl"
new const WeaponSounds[5][] = { "weapons/sfsniper-1.wav", "weapons/sfsniper_insight1.wav", "weapons/sfsniper_zoom.wav", "weapons/sfsniper_idle.wav", "weapons/sfsniper_draw.wav" }
new const WeaponResources[4][] = { "sprites/weapon_sfsniper.txt", "sprites/640hud2_2.spr", "sprites/640hud10_2.spr", "sprites/640hud81_2.spr" }
enum { TB_ANIM_IDLE = 0, TB_ANIM_SHOOT, TB_ANIM_DRAW }
// MACROS #define Get_BitVar(%1,%2) (%1 & (1 << (%2 & 31))) #define Set_BitVar(%1,%2) %1 |= (1 << (%2 & 31)) #define UnSet_BitVar(%1,%2) %1 &= ~(1 << (%2 & 31))
new g_Thunderbolt new g_Had_Thunderbolt, g_Zoomed, g_Aim_HudId new Float:g_TargetOrigin[3], Float:CheckDelay[33] new g_Msg_CurWeapon, g_Msg_AmmoX new g_Beam_SprId, g_Smoke_SprId, g_HamBot_Register, g_Event_Thunderbolt
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1) register_forward(FM_PlaybackEvent, "fw_PlaybackEvent") register_forward(FM_SetModel, "fw_SetModel") register_forward(FM_CmdStart, "fw_CmdStart")
RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack_Player") RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack_World")
RegisterHam(Ham_Item_AddToPlayer, weapon_thunderbolt, "fw_AddToPlayer_Post", 1) RegisterHam(Ham_Item_Deploy, weapon_thunderbolt, "fw_Item_Deploy_Post", 1)
g_Msg_CurWeapon = get_user_msgid("CurWeapon") g_Msg_AmmoX = get_user_msgid("AmmoX")
g_Aim_HudId = CreateHudSyncObj(8)
register_clcmd("admin_get_thunderbolt", "get_thunderbolt", ADMIN_BAN) register_clcmd("weapon_sfsniper", "CLCMD_HookWeapon") }
public plugin_precache() { precache_model(V_MODEL) precache_model(P_MODEL) precache_model(W_MODEL)
for(new i = 0; i < sizeof(WeaponSounds); i++) engfunc(EngFunc_PrecacheSound, WeaponSounds[i]) for(new i = 0; i < sizeof(WeaponResources); i++) { if(i == 0) engfunc(EngFunc_PrecacheGeneric, WeaponResources[0]) else engfunc(EngFunc_PrecacheModel, WeaponResources[i]) }
g_Beam_SprId = engfunc(EngFunc_PrecacheModel, "sprites/laserbeam.spr") g_Smoke_SprId = engfunc(EngFunc_PrecacheModel, "sprites/wall_puff1.spr")
register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1) g_Thunderbolt = zv_register_extra_item("Thunderbolt", "VIP only", 30, ZV_TEAM_HUMAN) }
public client_putinserver(id) { if(is_user_bot(id) && !g_HamBot_Register) { g_HamBot_Register = 1 set_task(0.1, "Do_RegisterHamBot", id) } }
public Do_RegisterHamBot(id) { RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack_Player") }
public fw_PrecacheEvent_Post(type, const name[]) { if(equal(old_event, name)) g_Event_Thunderbolt = get_orig_retval() }
public zv_extra_item_selected(id, ItemID) { if(ItemID == g_Thunderbolt) get_thunderbolt(id) }
public zp_user_infected_post(id) Remove_Thunderbolt(id)
public get_thunderbolt(id) { Set_BitVar(g_Had_Thunderbolt, id) UnSet_BitVar(g_Zoomed, id)
fm_give_item(id, weapon_thunderbolt)
static weapon_ent; weapon_ent = fm_find_ent_by_owner(-1, weapon_thunderbolt, id) if(pev_valid(weapon_ent)) cs_set_weapon_ammo(weapon_ent, 1)
cs_set_user_bpammo(id, CSW_THUNDERBOLT, DEFAULT_AMMO) }
public Remove_Thunderbolt(id) { UnSet_BitVar(g_Had_Thunderbolt, id) UnSet_BitVar(g_Zoomed, id) }
public Event_CurWeapon(id) { static CSWID; CSWID = read_data(2) if(CSWID != CSW_THUNDERBOLT || !Get_BitVar(g_Had_Thunderbolt, id)) return
if(cs_get_user_zoom(id) > 1 && !Get_BitVar(g_Zoomed, id)) // Zoom { set_pev(id, pev_viewmodel2, "") Set_BitVar(g_Zoomed, id) } else { // Not Zoom set_pev(id, pev_viewmodel2, V_MODEL) UnSet_BitVar(g_Zoomed, id) }
UpdateAmmo(id, -1, cs_get_user_bpammo(id, CSW_THUNDERBOLT)) }
public CLCMD_HookWeapon(id) { engclient_cmd(id, weapon_thunderbolt) return }
public fw_UpdateClientData_Post(id, sendweapons, cd_handle) { if(!is_user_alive(id)) return FMRES_IGNORED if(get_user_weapon(id) == CSW_THUNDERBOLT && Get_BitVar(g_Had_Thunderbolt, id)) set_cd(cd_handle, CD_flNextAttack, get_gametime() + 0.001) return FMRES_HANDLED }
public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) { if(eventid != g_Event_Thunderbolt) return FMRES_IGNORED if (!is_user_alive(invoker)) return FMRES_IGNORED if(get_user_weapon(invoker) != CSW_THUNDERBOLT || !Get_BitVar(g_Had_Thunderbolt, invoker)) return FMRES_IGNORED engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2) Thunderbolt_Shooting(invoker) return FMRES_SUPERCEDE }
public fw_SetModel(entity, model[]) { if(!pev_valid(entity)) return FMRES_IGNORED static Classname[64] pev(entity, pev_classname, Classname, sizeof(Classname)) if(!equal(Classname, "weaponbox")) return FMRES_IGNORED static id id = pev(entity, pev_owner) if(equal(model, old_w_model)) { static weapon weapon = fm_get_user_weapon_entity(entity, CSW_THUNDERBOLT) if(!pev_valid(weapon)) return FMRES_IGNORED if(Get_BitVar(g_Had_Thunderbolt, id)) { UnSet_BitVar(g_Had_Thunderbolt, id) set_pev(weapon, pev_impulse, WEAPON_SECRETCODE) set_pev(weapon, pev_iuser4, cs_get_user_bpammo(id, CSW_THUNDERBOLT)) engfunc(EngFunc_SetModel, entity, W_MODEL) return FMRES_SUPERCEDE } } return FMRES_IGNORED; }
public fw_CmdStart(id, UcHandle, Seed) { if(!is_user_alive(id)) return if(get_user_weapon(id) != CSW_THUNDERBOLT || !Get_BitVar(g_Had_Thunderbolt, id)) return if(cs_get_user_zoom(id) <= 1) return if(get_gametime() - DELAY_SOUND > CheckDelay[id]) { static Body, Target get_user_aiming(id, Target, Body, 99999) if(is_user_alive(Target)) { emit_sound(id, CHAN_WEAPON, WeaponSounds[1], VOL_NORM, ATTN_NORM, 0, PITCH_NORM) set_hudmessage(250, 0, 0, -1.0, -1.0, 0, 0.1, 0.1) ShowSyncHudMsg(id, g_Aim_HudId, "+") } CheckDelay[id] = get_gametime() } }
public Thunderbolt_Shooting(id) { set_weapon_anim(id, TB_ANIM_SHOOT) emit_sound(id, CHAN_WEAPON, WeaponSounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM) static Ammo; Ammo = cs_get_user_bpammo(id, CSW_THUNDERBOLT) Ammo-- UpdateAmmo(id, -1, Ammo) if(Ammo <= 0) { static Ent; Ent = fm_get_user_weapon_entity(id, CSW_THUNDERBOLT) if(pev_valid(Ent)) cs_set_weapon_ammo(Ent, 0) cs_set_user_bpammo(id, CSW_THUNDERBOLT, 0) } Create_Laser(id, g_TargetOrigin) // Fixed Shell Eject set_pdata_float(id, 111, 99999999.0, 5) // Next Attack Set_Player_NextAttack(id, CSW_THUNDERBOLT, RELOAD_TIME) }
public Create_Laser(id, Float:End[3]) { static Float:Start[3] Stock_Get_Postion(id, 50.0, 5.0, -5.0, Start) message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_BEAMPOINTS) engfunc(EngFunc_WriteCoord, Start[0]) engfunc(EngFunc_WriteCoord, Start[1]) engfunc(EngFunc_WriteCoord, Start[2]) engfunc(EngFunc_WriteCoord, End[0]) engfunc(EngFunc_WriteCoord, End[1]) engfunc(EngFunc_WriteCoord, End[2]) write_short(g_Beam_SprId) write_byte(0) write_byte(0) write_byte(10) write_byte(25) write_byte(0) write_byte(0) write_byte(0) write_byte(200) write_byte(200) write_byte(0) message_end() }
public fw_AddToPlayer_Post(ent, id) { if(pev(ent, pev_impulse) == WEAPON_SECRETCODE) { Set_BitVar(g_Had_Thunderbolt, id) cs_set_user_bpammo(id, CSW_THUNDERBOLT, pev(ent, pev_iuser4)) set_pev(ent, pev_impulse, 0) } message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("WeaponList"), _, id) write_string((Get_BitVar(g_Had_Thunderbolt, id) ? "weapon_sfsniper" : "weapon_awp")) write_byte(1) write_byte(30) write_byte(-1) write_byte(-1) write_byte(0) write_byte(2) write_byte(CSW_THUNDERBOLT) write_byte(0) message_end() }
public fw_TraceAttack_Player(ent, attacker, Float:Damage, Float:fDir[3], ptr, iDamageType) { if(!is_user_alive(attacker)) return HAM_IGNORED if(get_user_weapon(attacker) != CSW_THUNDERBOLT || !Get_BitVar(g_Had_Thunderbolt, attacker)) return HAM_IGNORED get_tr2(ptr, TR_vecEndPos, g_TargetOrigin) SetHamParamFloat(3, float(DAMAGE)) return HAM_HANDLED }
public fw_TraceAttack_World(ent, attacker, Float:Damage, Float:fDir[3], ptr, iDamageType) { if(!is_user_alive(attacker)) return HAM_IGNORED if(get_user_weapon(attacker) != CSW_THUNDERBOLT || !Get_BitVar(g_Had_Thunderbolt, attacker)) return HAM_IGNORED get_tr2(ptr, TR_vecEndPos, g_TargetOrigin) Make_WorldHitEffect(attacker, ptr) SetHamParamFloat(3, float(DAMAGE)) return HAM_HANDLED }
public fw_Item_Deploy_Post(Ent) { if(!pev_valid(Ent)) return static Id; Id = get_pdata_cbase(Ent, 41, 4) if(!Get_BitVar(g_Had_Thunderbolt, Id)) return UnSet_BitVar(g_Zoomed, Id) set_pev(Id, pev_viewmodel2, V_MODEL) set_pev(Id, pev_weaponmodel2, P_MODEL) set_weapon_anim(Id, TB_ANIM_DRAW) }
public UpdateAmmo(Id, Ammo, BpAmmo) { static weapon_ent; weapon_ent = fm_get_user_weapon_entity(Id, CSW_THUNDERBOLT) if(pev_valid(weapon_ent)) { if(BpAmmo > 0) cs_set_weapon_ammo(weapon_ent, 1) else cs_set_weapon_ammo(weapon_ent, 0) } engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, g_Msg_CurWeapon, {0, 0, 0}, Id) write_byte(1) write_byte(CSW_THUNDERBOLT) write_byte(-1) message_end() message_begin(MSG_ONE_UNRELIABLE, g_Msg_AmmoX, _, Id) write_byte(1) write_byte(BpAmmo) message_end() cs_set_user_bpammo(Id, CSW_THUNDERBOLT, BpAmmo) }
public Make_WorldHitEffect(id, TrResult) { // Handle First static Float:vecSrc[3], Float:vecEnd[3], TE_FLAG get_weapon_attachment(id, vecSrc) global_get(glb_v_forward, vecEnd) xs_vec_mul_scalar(vecEnd, 8192.0, vecEnd) xs_vec_add(vecSrc, vecEnd, vecEnd) get_tr2(TrResult, TR_vecEndPos, vecSrc) get_tr2(TrResult, TR_vecPlaneNormal, vecEnd) xs_vec_mul_scalar(vecEnd, 2.5, vecEnd) xs_vec_add(vecSrc, vecEnd, vecEnd) TE_FLAG |= TE_EXPLFLAG_NODLIGHTS TE_FLAG |= TE_EXPLFLAG_NOSOUND TE_FLAG |= TE_EXPLFLAG_NOPARTICLES // Make Spark for(new i = 0; i < 3; i++) { engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0) write_byte(TE_SPARKS) engfunc(EngFunc_WriteCoord, vecEnd[0]) engfunc(EngFunc_WriteCoord, vecEnd[1]) engfunc(EngFunc_WriteCoord, vecEnd[2] - 10.0) message_end() } // Make Smoke engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0) write_byte(TE_EXPLOSION) engfunc(EngFunc_WriteCoord, vecEnd[0]) engfunc(EngFunc_WriteCoord, vecEnd[1]) engfunc(EngFunc_WriteCoord, vecEnd[2] - 10.0) write_short(g_Smoke_SprId) write_byte(2) write_byte(50) write_byte(TE_FLAG) message_end() }
stock set_weapon_anim(id, anim) { set_pev(id, pev_weaponanim, anim) message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id) write_byte(anim) write_byte(pev(id, pev_body)) message_end() }
stock Stock_Get_Postion(id,Float:forw,Float:right, Float:up,Float:vStart[]) { static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3] pev(id, pev_origin, vOrigin) pev(id, pev_view_ofs,vUp) //for player xs_vec_add(vOrigin,vUp,vOrigin) pev(id, pev_v_angle, vAngle) // if normal entity ,use pev_angles angle_vector(vAngle,ANGLEVECTOR_FORWARD,vForward) //or use EngFunc_AngleVectors angle_vector(vAngle,ANGLEVECTOR_RIGHT,vRight) angle_vector(vAngle,ANGLEVECTOR_UP,vUp) vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up }
stock get_weapon_attachment(id, Float:output[3], Float:fDis = 40.0) { static Float:vfEnd[3], viEnd[3] get_user_origin(id, viEnd, 3) IVecFVec(viEnd, vfEnd) static Float:fOrigin[3], Float:fAngle[3] pev(id, pev_origin, fOrigin) pev(id, pev_view_ofs, fAngle) xs_vec_add(fOrigin, fAngle, fOrigin) static Float:fAttack[3] xs_vec_sub(vfEnd, fOrigin, fAttack) xs_vec_sub(vfEnd, fOrigin, fAttack) static Float:fRate fRate = fDis / vector_length(fAttack) xs_vec_mul_scalar(fAttack, fRate, fAttack) xs_vec_add(fOrigin, fAttack, output) }
stock Set_Player_NextAttack(id, CSWID, Float:NextTime) { static Ent; Ent = fm_get_user_weapon_entity(id, CSWID) if(!pev_valid(Ent)) return set_pdata_float(id, 83, NextTime, 5) set_pdata_float(Ent, 46 , NextTime, 4) set_pdata_float(Ent, 47, NextTime, 4) set_pdata_float(Ent, 48, NextTime, 4) }
4. Gatling:
PHP Code:
#include <amxmodx> #include <fakemeta> #include <fakemeta_util> #include <hamsandwich> #include <cstrike> #include <zombieplague> #include <zmvip>
#define PLUGIN "Gatling" #define VERSION "1.0" #define AUTHOR "Dias"
#define CSW_GATLING CSW_M3 #define weapon_gatling "weapon_m3" #define WEAPON_ANIMEXT "m249" #define DEFAULT_W_MODEL "models/w_m3.mdl" #define WEAPON_SECRET_CODE 1942 #define old_event "events/m3.sc"
#define DAMAGE 48 #define SPEED 0.25 #define RECOIL 0.5 #define RELOAD_TIME 4.5 #define DEFAULT_CLIP 40 #define DEFAULT_BPAMMO 180
new const WeaponModel[3][] = { "models/v_gatling.mdl", // V "models/p_gatling.mdl", // P "models/w_gatling.mdl" // W }
new const WeaponSound[7][] = { "weapons/gatling-1.wav", "weapons/gatling_boltpull.wav", "weapons/gatling_clipin1.wav", "weapons/gatling_clipin2.wav", "weapons/gatling_clipout1.wav", "weapons/gatling_clipout2.wav", "weapons/usas_draw.wav" }
new const WeaponResource[4][] = { "sprites/weapon_gatling.txt", "sprites/640hud7_2.spr", "sprites/640hud55_2.spr", "sprites/640hud56_2.spr" }
enum { GATLING_ANIM_IDLE = 0, GATLING_ANIM_SHOOT1, GATLING_ANIM_SHOOT2, GATLING_ANIM_RELOAD, GATLING_ANIM_DRAW }
const PDATA_SAFE = 2 const OFFSET_LINUX_WEAPONS = 4 const OFFSET_LINUX_PLAYER = 5 const OFFSET_WEAPONOWNER = 41 const m_iClip = 51 const m_fInReload = 54 const m_flNextAttack = 83 const m_szAnimExtention = 492
new g_gatling new g_had_gatling[33], Float:g_punchangles[33][3], g_gatling_event, g_smokepuff_id, m_iBlood[2], g_ham_bot
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
register_forward(FM_CmdStart, "fw_CmdStart") register_forward(FM_SetModel, "fw_SetModel") register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1) register_forward(FM_PlaybackEvent, "fw_PlaybackEvent")
RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack") RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack")
RegisterHam(Ham_Item_Deploy, weapon_gatling, "fw_Item_Deploy_Post", 1) RegisterHam(Ham_Weapon_Reload, weapon_gatling, "fw_Weapon_Reload_Post", 1) RegisterHam(Ham_Item_PostFrame, weapon_gatling, "fw_Item_PostFrame") RegisterHam(Ham_Item_AddToPlayer, weapon_gatling, "fw_Item_AddToPlayer_Post", 1) RegisterHam(Ham_Weapon_PrimaryAttack, weapon_gatling, "fw_Weapon_PrimaryAttack") RegisterHam(Ham_Weapon_PrimaryAttack, weapon_gatling, "fw_Weapon_PrimaryAttack_Post", 1)
register_clcmd("weapon_gatling", "hook_weapon") register_clcmd("admin_get_gatling", "get_gatling", ADMIN_BAN) }
public plugin_precache() { new i
for(i = 0; i < sizeof(WeaponModel); i++) engfunc(EngFunc_PrecacheModel, WeaponModel[i]) for(i = 0; i < sizeof(WeaponSound); i++) engfunc(EngFunc_PrecacheSound, WeaponSound[i]) for(new i = 0; i < sizeof(WeaponResource); i++) { if(i == 0) engfunc(EngFunc_PrecacheGeneric, WeaponResource[i]) else engfunc(EngFunc_PrecacheModel, WeaponResource[i]) }
g_smokepuff_id = engfunc(EngFunc_PrecacheModel, "sprites/wall_puff1.spr") m_iBlood[0] = engfunc(EngFunc_PrecacheModel, "sprites/blood.spr") m_iBlood[1] = engfunc(EngFunc_PrecacheModel, "sprites/bloodspray.spr")
register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1) g_gatling = zv_register_extra_item("Gatling", "VIP only", 20, ZV_TEAM_HUMAN) }
public fw_PrecacheEvent_Post(type, const name[]) { if(equal(old_event, name)) g_gatling_event = get_orig_retval() }
public client_putinserver(id) { if(is_user_bot(id) && !g_ham_bot) { g_ham_bot = 1 set_task(0.1, "Do_Register_Ham", id) } }
public Do_Register_Ham(id) { RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack") }
public zv_extra_item_selected(id, itemid) { if(itemid == g_gatling) get_gatling(id) }
public zp_user_infected_post(id) { remove_gatling(id) }
public zp_user_humanized_post(id) { remove_gatling(id) }
public zp_round_ended() { for(new i = 0; i < get_maxplayers(); i++) { if(!is_user_connected(i)) continue remove_gatling(i) } }
public get_gatling(id) { if(!is_user_alive(id)) return drop_weapons(id, 1) g_had_gatling[id] = 1 fm_give_item(id, weapon_gatling) // Set Clip static ent; ent = fm_get_user_weapon_entity(id, CSW_GATLING) if(pev_valid(ent)) cs_set_weapon_ammo(ent, DEFAULT_CLIP) // Set BpAmmo cs_set_user_bpammo(id, CSW_GATLING, DEFAULT_BPAMMO) // Update Ammo update_ammo(id, CSW_GATLING, DEFAULT_CLIP, DEFAULT_BPAMMO) }
public remove_gatling(id) { g_had_gatling[id] = 0 }
public hook_weapon(id) { client_cmd(id, weapon_gatling) return PLUGIN_HANDLED }
public Event_CurWeapon(id) { if(!is_user_alive(id)) return if(get_user_weapon(id) != CSW_GATLING || !g_had_gatling[id]) return // Speed static ent; ent = fm_get_user_weapon_entity(id, CSW_GATLING) if(!pev_valid(ent)) return set_pdata_float(ent, 46, get_pdata_float(ent, 46, OFFSET_LINUX_WEAPONS) * SPEED, OFFSET_LINUX_WEAPONS) }
public fw_CmdStart(id, uc_handle, seed) { if(!is_user_alive(id)) return if(get_user_weapon(id) != CSW_GATLING || !g_had_gatling[id]) return static CurButton; CurButton = get_uc(uc_handle, UC_Buttons) if(CurButton & IN_RELOAD) { CurButton &= ~IN_RELOAD set_uc(uc_handle, UC_Buttons, CurButton) static ent; ent = fm_get_user_weapon_entity(id, CSW_GATLING) if(!pev_valid(ent)) return static fInReload; fInReload = get_pdata_int(ent, m_fInReload, OFFSET_LINUX_WEAPONS) static Float:flNextAttack; flNextAttack = get_pdata_float(id, m_flNextAttack, OFFSET_LINUX_PLAYER) if (flNextAttack > 0.0) return if (fInReload) { set_weapon_anim(id, GATLING_ANIM_IDLE) return } if(cs_get_weapon_ammo(ent) >= DEFAULT_CLIP) { set_weapon_anim(id, GATLING_ANIM_IDLE) return } fw_Weapon_Reload_Post(ent) } }
public fw_SetModel(entity, model[]) { if(!pev_valid(entity)) return FMRES_IGNORED static szClassName[33] pev(entity, pev_classname, szClassName, charsmax(szClassName)) if(!equal(szClassName, "weaponbox")) return FMRES_IGNORED static id id = pev(entity, pev_owner) if(equal(model, DEFAULT_W_MODEL)) { static weapon weapon = fm_find_ent_by_owner(-1, weapon_gatling, entity) if(!pev_valid(weapon)) return FMRES_IGNORED if(g_had_gatling[id]) { set_pev(weapon, pev_impulse, WEAPON_SECRET_CODE) engfunc(EngFunc_SetModel, entity, WeaponModel[2]) remove_gatling(id) return FMRES_SUPERCEDE } } return FMRES_IGNORED }
public fw_TraceAttack(ent, attacker, Float:Damage, Float:fDir[3], ptr, iDamageType) { if(!is_user_alive(attacker)) return HAM_IGNORED if(get_user_weapon(attacker) != CSW_GATLING || !g_had_gatling[attacker]) return HAM_IGNORED if(!is_user_alive(ent)) { static Float:flEnd[3], Float:vecPlane[3] get_tr2(ptr, TR_vecEndPos, flEnd) get_tr2(ptr, TR_vecPlaneNormal, vecPlane) make_bullet(attacker, flEnd) fake_smoke(attacker, ptr) } SetHamParamFloat(3, float(DAMAGE) / random_float(1.5, 2.5)) return HAM_HANDLED }
public fw_UpdateClientData_Post(id, sendweapons, cd_handle) { if(!is_user_alive(id) || !is_user_connected(id)) return FMRES_IGNORED if(get_user_weapon(id) != CSW_GATLING || !g_had_gatling[id]) return FMRES_IGNORED set_cd(cd_handle, CD_flNextAttack, get_gametime() + 0.001) return FMRES_HANDLED }
public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) { if(!is_user_connected(invoker)) return FMRES_IGNORED if(get_user_weapon(invoker) == CSW_GATLING && g_had_gatling[invoker] && eventid == g_gatling_event) { engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2) Event_Gatling_Shoot(invoker) return FMRES_SUPERCEDE } return FMRES_HANDLED }
public fw_Item_Deploy_Post(ent) { static id; id = fm_cs_get_weapon_ent_owner(ent) if (!pev_valid(id)) return static weaponid weaponid = cs_get_weapon_id(ent) if(weaponid != CSW_GATLING) return if(!g_had_gatling[id]) return set_pev(id, pev_viewmodel2, WeaponModel[0]) set_pev(id, pev_weaponmodel2, WeaponModel[1]) set_weapon_anim(id, GATLING_ANIM_DRAW) set_pdata_string(id, m_szAnimExtention * 4, WEAPON_ANIMEXT, -1 , 20) }
public fw_Weapon_Reload_Post(ent) { static id; id = pev(ent, pev_owner) if(g_had_gatling[id]) { static CurBpAmmo; CurBpAmmo = cs_get_user_bpammo(id, CSW_GATLING) if(CurBpAmmo <= 0) return HAM_IGNORED set_pdata_int(ent, 55, 0, OFFSET_LINUX_WEAPONS) set_pdata_float(id, 83, RELOAD_TIME, OFFSET_LINUX_PLAYER) set_pdata_float(ent, 48, RELOAD_TIME + 0.5, OFFSET_LINUX_WEAPONS) set_pdata_float(ent, 46, RELOAD_TIME + 0.25, OFFSET_LINUX_WEAPONS) set_pdata_float(ent, 47, RELOAD_TIME + 0.25, OFFSET_LINUX_WEAPONS) set_pdata_int(ent, m_fInReload, 1, OFFSET_LINUX_WEAPONS) set_weapon_anim(id, GATLING_ANIM_RELOAD) return HAM_HANDLED } return HAM_IGNORED }
public fw_Item_PostFrame(ent) { static id; id = pev(ent, pev_owner) if(!g_had_gatling[id]) return static iBpAmmo ; iBpAmmo = get_pdata_int(id, 381, OFFSET_LINUX_PLAYER) static iClip ; iClip = get_pdata_int(ent, m_iClip, OFFSET_LINUX_WEAPONS) static iMaxClip ; iMaxClip = DEFAULT_CLIP if(get_pdata_int(ent, m_fInReload, OFFSET_LINUX_WEAPONS) && get_pdata_float(id, m_flNextAttack, OFFSET_LINUX_PLAYER) <= 0.0) { static j; j = min(iMaxClip - iClip, iBpAmmo) set_pdata_int(ent, m_iClip, iClip + j, OFFSET_LINUX_WEAPONS) set_pdata_int(id, 381, iBpAmmo-j, OFFSET_LINUX_PLAYER) set_pdata_int(ent, m_fInReload, 0, OFFSET_LINUX_WEAPONS) cs_set_weapon_ammo(ent, DEFAULT_CLIP) update_ammo(id, CSW_GATLING, cs_get_weapon_ammo(ent), cs_get_user_bpammo(id, CSW_GATLING)) return } }
public fw_Item_AddToPlayer_Post(ent, id) { if(!pev_valid(ent)) return HAM_IGNORED if(pev(ent, pev_impulse) == WEAPON_SECRET_CODE) { remove_gatling(id) g_had_gatling[id] = 1 update_ammo(id, CSW_GATLING, cs_get_weapon_ammo(ent), cs_get_user_bpammo(id, CSW_GATLING)) } message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("WeaponList"), _, id) write_string(g_had_gatling[id] == 1 ? "weapon_gatling" : "weapon_m3") write_byte(5) write_byte(200) write_byte(-1) write_byte(-1) write_byte(0) write_byte(5) write_byte(g_had_gatling[id] == 1 ? CSW_GATLING : CSW_M3) write_byte(0) message_end() return HAM_IGNORED }
public fw_Weapon_PrimaryAttack(ent) { static id; id = pev(ent, pev_owner) if(!g_had_gatling[id]) return pev(id, pev_punchangle, g_punchangles[id]) }
public fw_Weapon_PrimaryAttack_Post(ent) { static id; id = pev(ent, pev_owner) if(!g_had_gatling[id]) return static Float:push[3] pev(id, pev_punchangle, push) xs_vec_sub(push, g_punchangles[id], push) xs_vec_mul_scalar(push, RECOIL, push) xs_vec_add(push, g_punchangles[id], push) set_pev(id, pev_punchangle, push) }
public update_ammo(id, csw_id, clip, bpammo) { if(!is_user_alive(id)) return message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("CurWeapon"), _, id) write_byte(1) write_byte(csw_id) write_byte(clip) message_end() message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("AmmoX"), _, id) write_byte(3) write_byte(bpammo) message_end() }
public Event_Gatling_Shoot(id) { set_weapon_anim(id, random_num(GATLING_ANIM_SHOOT1, GATLING_ANIM_SHOOT2)) emit_sound(id, CHAN_WEAPON, WeaponSound[0], 1.0, ATTN_NORM, 0, PITCH_NORM) }
stock fm_cs_get_weapon_ent_owner(ent) { if (pev_valid(ent) != PDATA_SAFE) return -1 return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS) }
stock set_weapon_anim(id, anim) { if(!is_user_alive(id)) return set_pev(id, pev_weaponanim, anim) message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id) write_byte(anim) write_byte(0) message_end() }
stock drop_weapons(id, dropwhat) { static weapons[32], num, i, weaponid num = 0 get_user_weapons(id, weapons, num) const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_MAC10)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_MAC10)|(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) for (i = 0; i < num; i++) { weaponid = weapons[i] if (dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) { static wname[32] get_weaponname(weaponid, wname, sizeof wname - 1) engclient_cmd(id, "drop", wname) } } }
stock make_bullet(id, Float:Origin[3]) { // Find target new decal = random_num(41, 45) const loop_time = 2 static Body, Target get_user_aiming(id, Target, Body, 999999) if(is_user_connected(Target)) return for(new i = 0; i < loop_time; i++) { // Put decal on "world" (a wall) message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_WORLDDECAL) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_byte(decal) message_end() // Show sparcles message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_GUNSHOTDECAL) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_short(id) write_byte(decal) message_end() } }
public fake_smoke(id, trace_result) { static Float:vecSrc[3], Float:vecEnd[3], TE_FLAG get_weapon_attachment(id, vecSrc) global_get(glb_v_forward, vecEnd) xs_vec_mul_scalar(vecEnd, 8192.0, vecEnd) xs_vec_add(vecSrc, vecEnd, vecEnd) get_tr2(trace_result, TR_vecEndPos, vecSrc) get_tr2(trace_result, TR_vecPlaneNormal, vecEnd) xs_vec_mul_scalar(vecEnd, 2.5, vecEnd) xs_vec_add(vecSrc, vecEnd, vecEnd) TE_FLAG |= TE_EXPLFLAG_NODLIGHTS TE_FLAG |= TE_EXPLFLAG_NOSOUND TE_FLAG |= TE_EXPLFLAG_NOPARTICLES engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0) write_byte(TE_EXPLOSION) engfunc(EngFunc_WriteCoord, vecEnd[0]) engfunc(EngFunc_WriteCoord, vecEnd[1]) engfunc(EngFunc_WriteCoord, vecEnd[2] - 10.0) write_short(g_smokepuff_id) write_byte(2) write_byte(50) write_byte(TE_FLAG) message_end() }
stock get_weapon_attachment(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 create_blood(const Float:origin[3]) { // Show some blood :) message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_BLOODSPRITE) engfunc(EngFunc_WriteCoord, origin[0]) engfunc(EngFunc_WriteCoord, origin[1]) engfunc(EngFunc_WriteCoord, origin[2]) write_short(m_iBlood[1]) write_short(m_iBlood[0]) write_byte(75) write_byte(5) message_end() }
|
|