Ultimate VIP Features
Guys, so who can tell me what's the problem on those codes ? give us a solution please.
- Night Fury
- Mod Developer
- Posts: 677
- Joined: 7 years ago
- Contact:
Add Before
Code: Select all
#include <zombie_escape>
Code: Select all
#include <ze_vip>
OK, I removed norecoil, antidote, leap, trail, now vip menu contains only 4 things.
1. Knife Menu
2. Guns Menu
3. Glow Menu
4. Daily Golds
Knife menu, and glow menu already compiled fine. still (daily golds and lycanthrope won't compile)
Daily Golds:
Lycanthrope:
VIP Menu (Final):
NOTE: Please add chat message to players who press VIP Menu and they don't have access for it.
!tYou are not !gVIP!y!
1. Knife Menu
2. Guns Menu
3. Glow Menu
4. Daily Golds
Knife menu, and glow menu already compiled fine. still (daily golds and lycanthrope won't compile)
Daily Golds:
Code: Select all
#include <zombie_escape>
#include <ze_vip>
#define NV_NAME "GET_GOLDS"
#define VIP_ACCESS ADMIN_LEVEL_H
enum player_struct {
mtime,bool:ftime,key[64]
}
new g_player[33][player_struct];
new cvar_save_type,cvar_time,cvar_coins;
public plugin_natives()
{
register_plugin("ze_get_free_golds", "native_ze_get_free_golds", 1)
}
public native_ze_get_free_golds(id)
{
if (!is_user_connected(id))
return -1
cmd_coins(id)
return true
}
public plugin_init() {
register_plugin("Get Escape Golds", "1.0", "ZE DEV TEAM");
cvar_save_type = register_cvar("get_golds_save_type","1"); // how to save data 1 by authid, 2 by ip or 3 by name
cvar_time = register_cvar("get_golds_minutes","720"); // time in minutes, 720minutes=12hours it will be auto calculated
cvar_coins = register_cvar("get_golds_coins","200"); // how many coins to give
}
public cmd_coins(id) {
new nv = nvault_open(NV_NAME);
if(nv == INVALID_HANDLE) {
ze_colored_print(id, "!tFor the moment getting golds system is inactive..");
return;
}
new txt_min[32],txt_coins[10];
new coins = get_pcvar_num(cvar_coins),pminutes = get_pcvar_num(cvar_time);
copy(txt_coins,charsmax(txt_coins),(coins==1)?"coin":"coins");
build_time(pminutes,txt_min,charsmax(txt_min));
if(g_player[id][ftime]) {
ze_colored_print(id, "!tYou have received !g%d !tGolds!y, !tget another in !g%s!y!",coins,txt_min);
ze_set_escape_coins(id, ze_get_escape_coins(id) + coins);
g_player[id][ftime]=false;
nvault_touch(nv,g_player[id][key],g_player[id][mtime]=get_systime());
return;
}
new user_time=get_systime()-g_player[id][mtime];
new diff_min=(user_time<(pminutes*60))?pminutes-(user_time/60):pminutes;
build_time(diff_min,txt_min,charsmax(txt_min));
if(user_time>=(pminutes*60)) {
ze_colored_print(id, "!tYou have just received !g%d !tGolds!y, !tsince !g%s !tpassed!y!",coins,txt_min);
ze_set_escape_coins(id, ze_get_escape_coins(id) + coins);
nvault_touch(nv,g_player[id][key],g_player[id][mtime]=get_systime());
}
else
ze_colored_print(id, "!tRetry again in !g%s !tfor getting !g%d !tmore Golds!y.",txt_min,coins);
nvault_close(nv);
}
public client_putinserver(id) {
new nv,data[32];
get_auth(id,g_player[id][key],charsmax(g_player[][key]));
g_player[id][mtime]=get_systime();
g_player[id][ftime]=false;
formatex(data,charsmax(data),"%d",g_player[id][mtime]);
if((nv=nvault_open(NV_NAME))==INVALID_HANDLE)
return;
if(!nvault_lookup(nv,g_player[id][key],data,charsmax(data),g_player[id][mtime])) {
nvault_set(nv,g_player[id][key],data);
g_player[id][ftime]=true;
}
nvault_close(nv);
}
public client_disconnected(id) {
g_player[id][mtime]=0;
g_player[id][ftime]=false;
}
stock get_auth(id,data[],len)
switch(get_pcvar_num(cvar_save_type)) {
case 1: get_user_authid(id,data,len);
case 2: get_user_ip(id,data,len,1);
case 3: get_user_name(id,data,len);
}
stock build_time(pminutes,data[],len)
if(pminutes==1)
copy(data,len,"1 minute");
else if(pminutes!=1&&pminutes<60)
formatex(data,len,"%d minutes",pminutes);
else if(pminutes==60)
copy(data,len,"1 hour");
else {
new ptime=pminutes/60;
if(ptime*60==pminutes)
formatex(data,len,"%d %s",ptime,(ptime==1)?"hour":"hours");
else {
new diff=pminutes-ptime*60;
formatex(data,len,"%d %s and %d %s",ptime,(ptime==1)?"hour":"hours",diff,(diff==1)?"minute":"minutes");
}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1036\\ f0\\ fs16 \n\\ par }
*/
Code: Select all
#include <zombie_escape>
#include <ze_vip>
#include <fakemeta_util>
#include <cstrike>
#define CSW_WEAPON_BASE CSW_P90
#define CSW_NEW_WEAPON "weapon_lycanthrope"
#define CSW_OLD_WEAPON "weapon_p90"
#define WEAPON_KEY 9299292
#define OLD_WEAPON "models/w_p90.mdl"
#define is_user_valid(%1) (is_user_alive(%1) && !is_user_bot(%1) && !is_user_hltv(%1) && is_user_connected(%1))
#define VIP_ACCESS ADMIN_LEVEL_H
new const Weapon_Models[][] = { "models/Premuim_ZE/v_lycanthrope.mdl", "models/Premuim_ZE/p_lycanthrope.mdl", "models/Premuim_ZE/w_lycanthrope.mdl" }
new const Weapon_Sounds[][] = { "weapons/sg552-shot1.wav", "weapons/sg552-shot2.wav", "weapons/buffsg552_draw.wav", "weapons/buffsg552_idle.wav", "weapons/buffsg552_reload.wav", "weapons/buffsg552_reload_AF.wav" }
new const Weapon_Sprites[][] = { "sprites/weapon_lycanthrope.txt", "sprites/640hud148.spr" }
new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }
new bool:g_Hasscope[33], g_hasZoom[33]
new Cvar_scope_Recoil, Cvar_scope_DMG, Cvar_scope_Clip, Cvar_scope_Ammo, Cvar_scope_Speed
new Float:cl_pushangle[33][3], g_Eventscope, g_scope_TmpClip[33], g_IsInPrimaryAttack, g_Shock
public plugin_natives()
{
register_native("ze_give_lycanthrope", "native_ze_give_lycanthrope", 1)
}
public native_ze_give_lycanthrope(id)
{
if (!is_user_connected(id))
return -1
Givescope(id)
return true
}
public plugin_precache()
{
for(new g = 0; g < sizeof(Weapon_Models); g++)
precache_model(Weapon_Models[g])
for(new h = 0; h < sizeof(Weapon_Sounds); h++)
precache_sound(Weapon_Sounds[h])
for(new t = 0; t < sizeof(Weapon_Sprites); t++)
precache_generic(Weapon_Sprites[t])
g_Shock = precache_model("sprites/lycanthrope_hit.spr")
register_clcmd(CSW_NEW_WEAPON, "hook")
register_forward(FM_PrecacheEvent, "Fw_Precache_Event", 1)
}
public hook(id)
{
engclient_cmd(id, CSW_OLD_WEAPON)
return PLUGIN_HANDLED
}
public plugin_init()
{
register_plugin("[ZE] Extra Item: Lycanthrope", "1.0", "Jack GamePlay")
// Events & Messages
register_message(get_user_msgid("DeathMsg"), "DeathMsg")
register_event("CurWeapon", "CurrentWeapon", "be", "1=1")
register_event("HLTV", "New_Round", "a", "1=0", "2=0")
// Forwards
register_forward(FM_SetModel, "Fw_Set_Model", 1)
register_forward(FM_PlaybackEvent, "Fw_Playback_Event")
register_forward(FM_UpdateClientData, "Fw_Update_Clientdata", 1)
register_forward(FM_CmdStart, "Fw_CmdStart")
// Hook Chains
RegisterHookChain(RG_CBasePlayer_TakeDamage, "Fw_Take_DMG")
// Hams
RegisterHam(Ham_Weapon_PrimaryAttack, CSW_OLD_WEAPON, "Fw_PrimaryAttack")
RegisterHam(Ham_Weapon_PrimaryAttack, CSW_OLD_WEAPON, "Fw_PrimaryAttack_Post", 1)
RegisterHam(Ham_Item_AddToPlayer, CSW_OLD_WEAPON, "Fw_AddToPlayer")
RegisterHam(Ham_Weapon_Reload, CSW_OLD_WEAPON, "Fw_Reload")
RegisterHam(Ham_Weapon_Reload, CSW_OLD_WEAPON, "Fw_Reload_Post", 1)
RegisterHam(Ham_Spawn, "player", "Fw_Spawn", 1)
RegisterHam(Ham_TraceAttack, "worldspawn", "Fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_breakable", "Fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_wall", "Fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_door", "Fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_door_rotating", "Fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_plat", "Fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_rotating", "Fw_TraceAttack", 1)
RegisterHam(Ham_Use, "func_tank", "Fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tankmortar", "Fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tankrocket", "Fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tanklaser", "Fw_UseStationary_Post", 1)
RegisterHam(Ham_Item_Deploy, CSW_OLD_WEAPON, "Fw_Item_Deploy_Post", 1)
// Cvars
Cvar_scope_Recoil = register_cvar("ze_scope_recoil", "1.0")
Cvar_scope_DMG = register_cvar("ze_scope_damage", "6")
Cvar_scope_Clip = register_cvar("ze_scope_clip", "30")
Cvar_scope_Ammo = register_cvar("ze_scope_ammo", "150")
Cvar_scope_Speed = register_cvar("ze_scope_speed", "4.5")
}
public Fw_Item_Deploy_Post(weapon_ent)
{
new id = get_pdata_cbase(weapon_ent, 41, 4)
g_hasZoom[id] = false
cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
CurrentWeapon(id)
}
public Fw_UseStationary_Post(entity, caller, activator, use_type)
{
if (use_type == 0 && is_user_valid(caller))
{
CurrentWeapon(caller)
}
}
public Fw_TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
{
if(!is_user_valid(iAttacker))
return
static Float:flEnd[3]
get_tr2(ptr, TR_vecEndPos, flEnd)
if(get_user_weapon(iAttacker) == CSW_WEAPON_BASE && g_Hasscope[iAttacker])
{
if(iEnt)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_DECAL)
engfunc(EngFunc_WriteCoord, flEnd[0])
engfunc(EngFunc_WriteCoord, flEnd[1])
engfunc(EngFunc_WriteCoord, flEnd[2])
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
write_short(iEnt)
message_end()
}
else
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
engfunc(EngFunc_WriteCoord, flEnd[0])
engfunc(EngFunc_WriteCoord, flEnd[1])
engfunc(EngFunc_WriteCoord, flEnd[2])
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
message_end()
}
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_GUNSHOTDECAL)
engfunc(EngFunc_WriteCoord, flEnd[0])
engfunc(EngFunc_WriteCoord, flEnd[1])
engfunc(EngFunc_WriteCoord, flEnd[2])
write_short(iAttacker)
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
message_end()
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, flEnd, 0)
write_byte(TE_SPRITE)
engfunc(EngFunc_WriteCoord, flEnd[0])
engfunc(EngFunc_WriteCoord, flEnd[1])
engfunc(EngFunc_WriteCoord, flEnd[2])
write_short(g_Shock)
write_byte(5)
write_byte(150)
message_end()
}
}
public Fw_Spawn(id)
{
if(!is_user_valid(id))
return
Remove_scope(id)
}
public New_Round()
{
for(new i = 0; i < get_member_game(m_nMaxPlayers); i++)
{
if(!is_user_valid(i) || !g_Hasscope[i])
continue
Remove_scope(i)
}
}
public Fw_Reload_Post(weapon_entity)
{
new id = pev(weapon_entity, pev_owner)
if (!is_user_valid(id) || ze_is_user_zombie(id) || g_scope_TmpClip[id] == -1)
return HAM_IGNORED
if(g_Hasscope[id])
{
g_hasZoom[id] = false
cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
set_pdata_int(weapon_entity, 51, g_scope_TmpClip[id], 4)
set_pdata_float(weapon_entity, 48, 3.0, 4)
set_pdata_float(id, 83, 3.0, 5)
set_pdata_int(weapon_entity, 54, 1, 4)
UTIL_weapon_anim(id, weapon_entity, 1)
}
return HAM_IGNORED
}
public Fw_Reload(weapon_entity)
{
new id = pev(weapon_entity, pev_owner)
if (!is_user_valid(id) || ze_is_user_zombie(id))
return HAM_IGNORED
static iClipExtra
if(g_Hasscope[id])
{
iClipExtra = get_pcvar_num(Cvar_scope_Clip)
}
g_scope_TmpClip[id] = -1
new iBpAmmo = cs_get_user_bpammo(id, CSW_WEAPON_BASE)
new iClip = get_pdata_int(weapon_entity, 51, 4)
if (iBpAmmo <= 0 || iClip >= iClipExtra)
return HAM_SUPERCEDE
g_scope_TmpClip[id] = iClip
return HAM_IGNORED
}
public Fw_AddToPlayer(ent, id)
{
if(!is_valid_ent(ent) || !is_user_valid(id) || ze_is_user_zombie(id))
return HAM_IGNORED
if(entity_get_int(ent, EV_INT_impulse) == WEAPON_KEY)
{
g_Hasscope[id] = true
g_hasZoom[id] = false
cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
entity_set_int(ent, EV_INT_impulse, 0)
message_begin(MSG_ONE, get_user_msgid("WeaponList"), {0, 0, 0}, id)
write_string(CSW_NEW_WEAPON)
write_byte(7)
write_byte(100)
write_byte(-1)
write_byte(-1)
write_byte(0)
write_byte(8)
write_byte(CSW_WEAPON_BASE)
write_byte(0)
message_end()
return HAM_HANDLED
}
else
{
message_begin(MSG_ONE, get_user_msgid("WeaponList"), {0, 0, 0}, id)
write_string(CSW_OLD_WEAPON)
write_byte(7)
write_byte(100)
write_byte(-1)
write_byte(-1)
write_byte(0)
write_byte(8)
write_byte(CSW_WEAPON_BASE)
write_byte(0)
message_end()
}
return HAM_IGNORED
}
public Fw_Precache_Event(type, const name[])
{
if(equal("events/p90.sc", name))
{
g_Eventscope = get_orig_retval()
}
}
public Fw_Update_Clientdata(id, sendweapons, cd_handle)
{
if(!is_user_valid(id))
return
if(get_user_weapon(id) == CSW_WEAPON_BASE && g_Hasscope[id])
{
set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001)
}
}
public Fw_Playback_Event(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
if(!is_user_valid(invoker) || !g_IsInPrimaryAttack)
return
if(eventid == g_Eventscope && get_user_weapon(invoker) == CSW_WEAPON_BASE && g_Hasscope[invoker])
{
engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
UTIL_weapon_anim(invoker, eventid, random_num(3, 5))
emit_sound(invoker, CHAN_WEAPON, Weapon_Sounds[random_num(0, 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}
}
public ze_user_humanized(id)
{
if(!is_user_valid(id))
return
Remove_scope(id)
}
public ze_user_infected(id, infector)
{
if(!is_user_valid(id))
return
Remove_scope(id)
}
public Fw_PrimaryAttack(Weapon)
{
g_IsInPrimaryAttack = 0
new szClip, szAmmo, id
id = get_pdata_cbase(Weapon, 41, 4)
get_user_weapon(id, szClip, szAmmo)
if(!is_user_valid(id) || ze_is_user_zombie(id))
return
g_IsInPrimaryAttack = 1
if(g_Hasscope[id])
{
if (!cs_get_weapon_ammo(Weapon))
return
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_scope_Recoil), push)
xs_vec_add(push, cl_pushangle[id], push)
set_pev(id, pev_punchangle, push)
UTIL_weapon_anim(id, Weapon, random_num(3, 5))
emit_sound(id, CHAN_WEAPON, Weapon_Sounds[random_num(0, 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}
}
public Fw_CmdStart(id, handle)
{
if(!is_user_valid(id) || ze_is_user_zombie(id))
return
if((get_uc(handle, UC_Buttons) & IN_ATTACK2) && !(pev(id, pev_oldbuttons) & IN_ATTACK2))
{
if(get_user_weapon(id) == CSW_WEAPON_BASE && g_Hasscope[id] && !g_hasZoom[id])
{
g_hasZoom[id] = true
cs_set_user_zoom(id, CS_SET_FIRST_ZOOM, 0)
}
else if(get_user_weapon(id) == CSW_WEAPON_BASE && g_Hasscope[id] && g_hasZoom[id])
{
g_hasZoom[id] = false
cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
}
}
}
public Fw_Take_DMG(Victim, Inflictor, Attacker, Float:Damage, DamageType)
{
if(!is_user_valid(Victim) || !is_user_valid(Attacker) ||ze_is_user_zombie(Attacker))
return
if(get_user_weapon(Attacker) == CSW_WEAPON_BASE && g_Hasscope[Attacker])
{
SetHamParamFloat(4, Damage * get_pcvar_float(Cvar_scope_DMG))
}
}
public Fw_PrimaryAttack_Post(Weapon)
{
g_IsInPrimaryAttack = 0
new szClip, szAmmo, id
id = get_pdata_cbase(Weapon, 41, 4)
get_user_weapon(id, szClip, szAmmo)
if(!is_user_valid(id) || ze_is_user_zombie(id))
return
if(g_Hasscope[id])
{
if (!cs_get_weapon_ammo(Weapon))
return
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_scope_Recoil), push)
xs_vec_add(push, cl_pushangle[id], push)
set_pev(id, pev_punchangle, push)
UTIL_weapon_anim(id, Weapon, random_num(3, 5))
emit_sound(id, CHAN_WEAPON, Weapon_Sounds[random_num(0, 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}
}
public Fw_Set_Model(entity, model[])
{
if(!pev_valid(entity) || !equal(model, OLD_WEAPON))
return FMRES_IGNORED
static szClassName[33], id
id = pev(entity, pev_owner)
pev(entity, pev_classname, szClassName, charsmax(szClassName))
if(!equal(szClassName, "weaponbox"))
return FMRES_IGNORED
if(g_Hasscope[id] && pev_valid(fm_find_ent_by_owner(-1, CSW_OLD_WEAPON, entity)))
{
g_Hasscope[id] = false
g_hasZoom[id] = false
cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
set_pev(fm_find_ent_by_owner(-1, CSW_OLD_WEAPON, entity), pev_impulse, WEAPON_KEY)
engfunc(EngFunc_SetModel, entity, Weapon_Models[2])
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}
public CurrentWeapon(id)
{
if(!is_user_valid(id))
return
if(get_user_weapon(id) == CSW_WEAPON_BASE && g_Hasscope[id])
{
if(g_hasZoom[id])
{
cs_set_player_view_model(id, CSW_WEAPON_BASE, "")
}
else if(!g_hasZoom[id])
{
cs_set_player_view_model(id, CSW_WEAPON_BASE, Weapon_Models[0])
}
cs_set_player_weap_model(id, CSW_WEAPON_BASE, Weapon_Models[1])
message_begin(MSG_ONE, get_user_msgid("WeaponList"), {0, 0, 0}, id)
write_string(CSW_NEW_WEAPON)
write_byte(7)
write_byte(100)
write_byte(-1)
write_byte(-1)
write_byte(0)
write_byte(8)
write_byte(CSW_WEAPON_BASE)
write_byte(0)
message_end()
static Float:iSpeed; iSpeed = get_pcvar_float(Cvar_scope_Speed)
static Ent; Ent = find_ent_by_owner(-1, CSW_OLD_WEAPON, id)
if(Ent)
{
static Float:Delay; Delay = get_pdata_float( Ent, 46, 4) * iSpeed
if (Delay > 0.0)
{
set_pdata_float(Ent, 46, Delay, 4)
}
}
}
}
public DeathMsg(msg_id, msg_dest, id)
{
static szTruncatedWeapon[33], iAttacker, iVictim
get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
iAttacker = get_msg_arg_int(1)
iVictim = get_msg_arg_int(2)
if(!is_user_valid(iAttacker) || iAttacker == iVictim) return
if(equal(szTruncatedWeapon, "p90") && get_user_weapon(iAttacker) == CSW_WEAPON_BASE && g_Hasscope[iAttacker])
{
set_msg_arg_string(4, "lycanthrope")
}
}
public Givescope(id)
{
drop_weapons(id, 1)
new wep = rg_give_item(id, CSW_OLD_WEAPON)
if (wep > 0)
{
cs_set_weapon_ammo(wep, get_pcvar_num(Cvar_scope_Clip))
cs_set_user_bpammo(id, CSW_WEAPON_BASE, get_pcvar_num(Cvar_scope_Ammo))
message_begin(MSG_ONE, get_user_msgid("WeaponList"), {0, 0, 0}, id)
write_string(CSW_NEW_WEAPON)
write_byte(7)
write_byte(100)
write_byte(-1)
write_byte(-1)
write_byte(0)
write_byte(8)
write_byte(CSW_WEAPON_BASE)
write_byte(0)
message_end()
}
g_Hasscope[id] = true
g_hasZoom[id] = false
cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
UTIL_weapon_anim(id, CSW_WEAPON_BASE, 2)
ze_colored_print(id, "!tYou bought Lycanthrope!y.")
}
public Remove_scope(id)
{
if(!is_user_valid(id))
return
g_Hasscope[id] = false
g_hasZoom[id] = false
cs_set_user_zoom(id, CS_SET_NO_ZOOM, 0)
message_begin(MSG_ONE, get_user_msgid("WeaponList"), {0, 0, 0}, id)
write_string(CSW_OLD_WEAPON)
write_byte(7)
write_byte(100)
write_byte(-1)
write_byte(-1)
write_byte(0)
write_byte(8)
write_byte(CSW_WEAPON_BASE)
write_byte(0)
message_end()
cs_reset_player_view_model(id, CSW_WEAPON_BASE)
cs_reset_player_weap_model(id, CSW_WEAPON_BASE)
}
UTIL_weapon_anim(index, entity, sequence = 0)
{
set_pev(index, pev_weaponanim, sequence)
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, index)
write_byte(sequence)
write_byte(pev(entity, pev_body))
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, charsmax(wname))
engclient_cmd(id, "drop", wname)
}
}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1252\\ deff0\\ deflang1036{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ f0\\ fs16 \n\\ par }
*/
Code: Select all
#include <zombie_escape>
#include <ze_vip>
native ze_open_glow_menu(id)
native ze_give_lycanthrope(id)
native ze_give_infinity(id)
native ze_give_free_golds(id)
const OFFSET_CSMENUCODE = 205
const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
public plugin_natives()
{
register_native("ze_open_vip_menu", "native_ze_open_vip_menu", 1)
}
public native_ze_open_vip_menu(id)
{
if (!is_user_connected(id))
return -1
if (!(get_user_flags(id) & ADMIN_LEVEL_H))
return false
Show_Menu(id)
return true
}
public plugin_init()
{
register_plugin("[ZE] VIP Menu", "1.0", "Spi")
register_menu("VIP Menu", KEYSMENU, "Main_Menu")
}
public Show_Menu(id)
{
static szMenu[250]
new iLen
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\rVIP Menu^n")
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y1\d. \wKnife Menu")
if (is_user_alive(id))
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y2\d. \wGuns Menu")
}
else
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\d2. Guns Menu")
}
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y3\d. \wGlow Menu")
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y4\d. \wDaily Golds")
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\y0\d. \r%L", id, "EXIT")
set_pdata_int(id, OFFSET_CSMENUCODE, 0)
show_menu(id, KEYSMENU, szMenu, -1, "Main Menu")
}
public Main_Menu(id, key)
{
if (!is_user_connected(id))
return PLUGIN_HANDLED
switch (key)
{
case 0: ze_open_knife_menu(id)
case 1:
{
if (is_user_alive(id))
{
Open_HGunMenu(id)
}
else
{
ze_colored_print(id, "%L", id, "DEAD_CANT_BUY_WEAPON")
}
}
case 2: ze_open_glow_menu(id)
case 3: ze_give_free_golds(id)
}
return PLUGIN_HANDLED
}
public Open_ZGunMenu(id)
{
new iMenu = menu_create("\rDaily Golds:^n^n", "ZVIPMenu_Handler")
menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL)
menu_display(id, iMenu, 0)
}
public ZVIPMenu_Handler(id, iMenu, iItem)
{
if (!is_user_connected(id))
return PLUGIN_CONTINUE
switch (iItem)
{
case 0: ze_give_free_golds(id)
}
menu_destroy(iMenu)
return PLUGIN_HANDLED
}
public Open_HGunMenu(id)
{
new iMenu = menu_create("\rGuns Menu:^n^n", "HVIPMenu_Handler")
menu_additem(iMenu, "Lycanthrope")
menu_additem(iMenu, "Dual Infinity")
menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL)
menu_display(id, iMenu, 0)
}
public HVIPMenu_Handler(id, iMenu, iItem)
{
if (!is_user_connected(id))
return PLUGIN_CONTINUE
switch (iItem)
{
case 0: ze_give_lycanthrope(id)
case 1: ze_give_infinity(id)
}
menu_destroy(iMenu)
return PLUGIN_HANDLED
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1252\\ deff0\\ deflang1036{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ f0\\ fs16 \n\\ par }
*/
!tYou are not !gVIP!y!
Lycanthrope:
vip menu:
Code: Select all
#include <zombie_escape>
#include <ze_vip>
#include <fakemeta_util>
#include <cstrike>
#include <engine>
#define CSW_WEAPON_BASE CSW_P90
#define CSW_NEW_WEAPON "weapon_lycanthrope"
#define CSW_OLD_WEAPON "weapon_p90"
#define WEAPON_KEY 9299292
#define OLD_WEAPON "models/w_p90.mdl"
#define is_user_valid(%1) (is_user_alive(%1) && !is_user_bot(%1) && !is_user_hltv(%1) && is_user_connected(%1))
#define VIP_ACCESS ADMIN_LEVEL_H
new const Weapon_Models[][] = { "models/Premuim_ZE/v_lycanthrope.mdl", "models/Premuim_ZE/p_lycanthrope.mdl", "models/Premuim_ZE/w_lycanthrope.mdl" }
new const Weapon_Sounds[][] = { "weapons/sg552-shot1.wav", "weapons/sg552-shot2.wav", "weapons/buffsg552_draw.wav", "weapons/buffsg552_idle.wav", "weapons/buffsg552_reload.wav", "weapons/buffsg552_reload_AF.wav" }
new const Weapon_Sprites[][] = { "sprites/weapon_lycanthrope.txt", "sprites/640hud148.spr" }
new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }
new bool:g_Hasscope[33], g_hasZoom[33]
new Cvar_scope_Recoil, Cvar_scope_DMG, Cvar_scope_Clip, Cvar_scope_Ammo, Cvar_scope_Speed
new Float:cl_pushangle[33][3], g_Eventscope, g_scope_TmpClip[33], g_IsInPrimaryAttack, g_Shock
public plugin_natives()
{
register_native("ze_give_lycanthrope", "native_ze_give_lycanthrope", 1)
}
public native_ze_give_lycanthrope(id)
{
if (!is_user_connected(id))
return -1
Givescope(id)
return true
}
public plugin_precache()
{
for(new g = 0; g < sizeof(Weapon_Models); g++)
precache_model(Weapon_Models[g])
for(new h = 0; h < sizeof(Weapon_Sounds); h++)
precache_sound(Weapon_Sounds[h])
for(new t = 0; t < sizeof(Weapon_Sprites); t++)
precache_generic(Weapon_Sprites[t])
g_Shock = precache_model("sprites/lycanthrope_hit.spr")
register_clcmd(CSW_NEW_WEAPON, "hook")
register_forward(FM_PrecacheEvent, "Fw_Precache_Event", 1)
}
public hook(id)
{
engclient_cmd(id, CSW_OLD_WEAPON)
return PLUGIN_HANDLED
}
public plugin_init()
{
register_plugin("[ZE] Extra Item: Lycanthrope", "1.0", "Jack GamePlay")
// Events & Messages
register_message(get_user_msgid("DeathMsg"), "DeathMsg")
register_event("CurWeapon", "CurrentWeapon", "be", "1=1")
register_event("HLTV", "New_Round", "a", "1=0", "2=0")
// Forwards
register_forward(FM_SetModel, "Fw_Set_Model", 1)
register_forward(FM_PlaybackEvent, "Fw_Playback_Event")
register_forward(FM_UpdateClientData, "Fw_Update_Clientdata", 1)
register_forward(FM_CmdStart, "Fw_CmdStart")
// Hook Chains
RegisterHookChain(RG_CBasePlayer_TakeDamage, "Fw_Take_DMG")
// Hams
RegisterHam(Ham_Weapon_PrimaryAttack, CSW_OLD_WEAPON, "Fw_PrimaryAttack")
RegisterHam(Ham_Weapon_PrimaryAttack, CSW_OLD_WEAPON, "Fw_PrimaryAttack_Post", 1)
RegisterHam(Ham_Item_AddToPlayer, CSW_OLD_WEAPON, "Fw_AddToPlayer")
RegisterHam(Ham_Weapon_Reload, CSW_OLD_WEAPON, "Fw_Reload")
RegisterHam(Ham_Weapon_Reload, CSW_OLD_WEAPON, "Fw_Reload_Post", 1)
RegisterHam(Ham_Spawn, "player", "Fw_Spawn", 1)
RegisterHam(Ham_TraceAttack, "worldspawn", "Fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_breakable", "Fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_wall", "Fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_door", "Fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_door_rotating", "Fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_plat", "Fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_rotating", "Fw_TraceAttack", 1)
RegisterHam(Ham_Use, "func_tank", "Fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tankmortar", "Fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tankrocket", "Fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tanklaser", "Fw_UseStationary_Post", 1)
RegisterHam(Ham_Item_Deploy, CSW_OLD_WEAPON, "Fw_Item_Deploy_Post", 1)
// Cvars
Cvar_scope_Recoil = register_cvar("ze_scope_recoil", "1.0")
Cvar_scope_DMG = register_cvar("ze_scope_damage", "6")
Cvar_scope_Clip = register_cvar("ze_scope_clip", "30")
Cvar_scope_Ammo = register_cvar("ze_scope_ammo", "150")
Cvar_scope_Speed = register_cvar("ze_scope_speed", "4.5")
}
public Fw_Item_Deploy_Post(weapon_ent)
{
new id = get_pdata_cbase(weapon_ent, 41, 4)
g_hasZoom[id] = false
cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
CurrentWeapon(id)
}
public Fw_UseStationary_Post(entity, caller, activator, use_type)
{
if (use_type == 0 && is_user_valid(caller))
{
CurrentWeapon(caller)
}
}
public Fw_TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
{
if(!is_user_valid(iAttacker))
return
static Float:flEnd[3]
get_tr2(ptr, TR_vecEndPos, flEnd)
if(get_user_weapon(iAttacker) == CSW_WEAPON_BASE && g_Hasscope[iAttacker])
{
if(iEnt)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_DECAL)
engfunc(EngFunc_WriteCoord, flEnd[0])
engfunc(EngFunc_WriteCoord, flEnd[1])
engfunc(EngFunc_WriteCoord, flEnd[2])
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
write_short(iEnt)
message_end()
}
else
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
engfunc(EngFunc_WriteCoord, flEnd[0])
engfunc(EngFunc_WriteCoord, flEnd[1])
engfunc(EngFunc_WriteCoord, flEnd[2])
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
message_end()
}
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_GUNSHOTDECAL)
engfunc(EngFunc_WriteCoord, flEnd[0])
engfunc(EngFunc_WriteCoord, flEnd[1])
engfunc(EngFunc_WriteCoord, flEnd[2])
write_short(iAttacker)
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
message_end()
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, flEnd, 0)
write_byte(TE_SPRITE)
engfunc(EngFunc_WriteCoord, flEnd[0])
engfunc(EngFunc_WriteCoord, flEnd[1])
engfunc(EngFunc_WriteCoord, flEnd[2])
write_short(g_Shock)
write_byte(5)
write_byte(150)
message_end()
}
}
public Fw_Spawn(id)
{
if(!is_user_valid(id))
return
Remove_scope(id)
}
public New_Round()
{
for(new i = 0; i < get_member_game(m_nMaxPlayers); i++)
{
if(!is_user_valid(i) || !g_Hasscope[i])
continue
Remove_scope(i)
}
}
public Fw_Reload_Post(weapon_entity)
{
new id = pev(weapon_entity, pev_owner)
if (!is_user_valid(id) || ze_is_user_zombie(id) || g_scope_TmpClip[id] == -1)
return HAM_IGNORED
if(g_Hasscope[id])
{
g_hasZoom[id] = false
cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
set_pdata_int(weapon_entity, 51, g_scope_TmpClip[id], 4)
set_pdata_float(weapon_entity, 48, 3.0, 4)
set_pdata_float(id, 83, 3.0, 5)
set_pdata_int(weapon_entity, 54, 1, 4)
UTIL_weapon_anim(id, weapon_entity, 1)
}
return HAM_IGNORED
}
public Fw_Reload(weapon_entity)
{
new id = pev(weapon_entity, pev_owner)
if (!is_user_valid(id) || ze_is_user_zombie(id))
return HAM_IGNORED
static iClipExtra
if(g_Hasscope[id])
{
iClipExtra = get_pcvar_num(Cvar_scope_Clip)
}
g_scope_TmpClip[id] = -1
new iBpAmmo = cs_get_user_bpammo(id, CSW_WEAPON_BASE)
new iClip = get_pdata_int(weapon_entity, 51, 4)
if (iBpAmmo <= 0 || iClip >= iClipExtra)
return HAM_SUPERCEDE
g_scope_TmpClip[id] = iClip
return HAM_IGNORED
}
public Fw_AddToPlayer(ent, id)
{
if(!is_valid_ent(ent) || !is_user_valid(id) || ze_is_user_zombie(id))
return HAM_IGNORED
if(entity_get_int(ent, EV_INT_impulse) == WEAPON_KEY)
{
g_Hasscope[id] = true
g_hasZoom[id] = false
cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
entity_set_int(ent, EV_INT_impulse, 0)
message_begin(MSG_ONE, get_user_msgid("WeaponList"), {0, 0, 0}, id)
write_string(CSW_NEW_WEAPON)
write_byte(7)
write_byte(100)
write_byte(-1)
write_byte(-1)
write_byte(0)
write_byte(8)
write_byte(CSW_WEAPON_BASE)
write_byte(0)
message_end()
return HAM_HANDLED
}
else
{
message_begin(MSG_ONE, get_user_msgid("WeaponList"), {0, 0, 0}, id)
write_string(CSW_OLD_WEAPON)
write_byte(7)
write_byte(100)
write_byte(-1)
write_byte(-1)
write_byte(0)
write_byte(8)
write_byte(CSW_WEAPON_BASE)
write_byte(0)
message_end()
}
return HAM_IGNORED
}
public Fw_Precache_Event(type, const name[])
{
if(equal("events/p90.sc", name))
{
g_Eventscope = get_orig_retval()
}
}
public Fw_Update_Clientdata(id, sendweapons, cd_handle)
{
if(!is_user_valid(id))
return
if(get_user_weapon(id) == CSW_WEAPON_BASE && g_Hasscope[id])
{
set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001)
}
}
public Fw_Playback_Event(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
if(!is_user_valid(invoker) || !g_IsInPrimaryAttack)
return
if(eventid == g_Eventscope && get_user_weapon(invoker) == CSW_WEAPON_BASE && g_Hasscope[invoker])
{
engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
UTIL_weapon_anim(invoker, eventid, random_num(3, 5))
emit_sound(invoker, CHAN_WEAPON, Weapon_Sounds[random_num(0, 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}
}
public ze_user_humanized(id)
{
if(!is_user_valid(id))
return
Remove_scope(id)
}
public ze_user_infected(id, infector)
{
if(!is_user_valid(id))
return
Remove_scope(id)
}
public Fw_PrimaryAttack(Weapon)
{
g_IsInPrimaryAttack = 0
new szClip, szAmmo, id
id = get_pdata_cbase(Weapon, 41, 4)
get_user_weapon(id, szClip, szAmmo)
if(!is_user_valid(id) || ze_is_user_zombie(id))
return
g_IsInPrimaryAttack = 1
if(g_Hasscope[id])
{
if (!cs_get_weapon_ammo(Weapon))
return
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_scope_Recoil), push)
xs_vec_add(push, cl_pushangle[id], push)
set_pev(id, pev_punchangle, push)
UTIL_weapon_anim(id, Weapon, random_num(3, 5))
emit_sound(id, CHAN_WEAPON, Weapon_Sounds[random_num(0, 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}
}
public Fw_CmdStart(id, handle)
{
if(!is_user_valid(id) || ze_is_user_zombie(id))
return
if((get_uc(handle, UC_Buttons) & IN_ATTACK2) && !(pev(id, pev_oldbuttons) & IN_ATTACK2))
{
if(get_user_weapon(id) == CSW_WEAPON_BASE && g_Hasscope[id] && !g_hasZoom[id])
{
g_hasZoom[id] = true
cs_set_user_zoom(id, CS_SET_FIRST_ZOOM, 0)
}
else if(get_user_weapon(id) == CSW_WEAPON_BASE && g_Hasscope[id] && g_hasZoom[id])
{
g_hasZoom[id] = false
cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
}
}
}
public Fw_Take_DMG(Victim, Inflictor, Attacker, Float:Damage, DamageType)
{
if(!is_user_valid(Victim) || !is_user_valid(Attacker) ||ze_is_user_zombie(Attacker))
return
if(get_user_weapon(Attacker) == CSW_WEAPON_BASE && g_Hasscope[Attacker])
{
SetHamParamFloat(4, Damage * get_pcvar_float(Cvar_scope_DMG))
}
}
public Fw_PrimaryAttack_Post(Weapon)
{
g_IsInPrimaryAttack = 0
new szClip, szAmmo, id
id = get_pdata_cbase(Weapon, 41, 4)
get_user_weapon(id, szClip, szAmmo)
if(!is_user_valid(id) || ze_is_user_zombie(id))
return
if(g_Hasscope[id])
{
if (!cs_get_weapon_ammo(Weapon))
return
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_scope_Recoil), push)
xs_vec_add(push, cl_pushangle[id], push)
set_pev(id, pev_punchangle, push)
UTIL_weapon_anim(id, Weapon, random_num(3, 5))
emit_sound(id, CHAN_WEAPON, Weapon_Sounds[random_num(0, 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}
}
public Fw_Set_Model(entity, model[])
{
if(!pev_valid(entity) || !equal(model, OLD_WEAPON))
return FMRES_IGNORED
static szClassName[33], id
id = pev(entity, pev_owner)
pev(entity, pev_classname, szClassName, charsmax(szClassName))
if(!equal(szClassName, "weaponbox"))
return FMRES_IGNORED
if(g_Hasscope[id] && pev_valid(fm_find_ent_by_owner(-1, CSW_OLD_WEAPON, entity)))
{
g_Hasscope[id] = false
g_hasZoom[id] = false
cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
set_pev(fm_find_ent_by_owner(-1, CSW_OLD_WEAPON, entity), pev_impulse, WEAPON_KEY)
engfunc(EngFunc_SetModel, entity, Weapon_Models[2])
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}
public CurrentWeapon(id)
{
if(!is_user_valid(id))
return
if(get_user_weapon(id) == CSW_WEAPON_BASE && g_Hasscope[id])
{
if(g_hasZoom[id])
{
cs_set_player_view_model(id, CSW_WEAPON_BASE, "")
}
else if(!g_hasZoom[id])
{
cs_set_player_view_model(id, CSW_WEAPON_BASE, Weapon_Models[0])
}
cs_set_player_weap_model(id, CSW_WEAPON_BASE, Weapon_Models[1])
message_begin(MSG_ONE, get_user_msgid("WeaponList"), {0, 0, 0}, id)
write_string(CSW_NEW_WEAPON)
write_byte(7)
write_byte(100)
write_byte(-1)
write_byte(-1)
write_byte(0)
write_byte(8)
write_byte(CSW_WEAPON_BASE)
write_byte(0)
message_end()
static Float:iSpeed; iSpeed = get_pcvar_float(Cvar_scope_Speed)
static Ent; Ent = find_ent_by_owner(-1, CSW_OLD_WEAPON, id)
if(Ent)
{
static Float:Delay; Delay = get_pdata_float( Ent, 46, 4) * iSpeed
if (Delay > 0.0)
{
set_pdata_float(Ent, 46, Delay, 4)
}
}
}
}
public DeathMsg(msg_id, msg_dest, id)
{
static szTruncatedWeapon[33], iAttacker, iVictim
get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
iAttacker = get_msg_arg_int(1)
iVictim = get_msg_arg_int(2)
if(!is_user_valid(iAttacker) || iAttacker == iVictim) return
if(equal(szTruncatedWeapon, "p90") && get_user_weapon(iAttacker) == CSW_WEAPON_BASE && g_Hasscope[iAttacker])
{
set_msg_arg_string(4, "lycanthrope")
}
}
public Givescope(id)
{
drop_weapons(id, 1)
new wep = rg_give_item(id, CSW_OLD_WEAPON)
if (wep > 0)
{
cs_set_weapon_ammo(wep, get_pcvar_num(Cvar_scope_Clip))
cs_set_user_bpammo(id, CSW_WEAPON_BASE, get_pcvar_num(Cvar_scope_Ammo))
message_begin(MSG_ONE, get_user_msgid("WeaponList"), {0, 0, 0}, id)
write_string(CSW_NEW_WEAPON)
write_byte(7)
write_byte(100)
write_byte(-1)
write_byte(-1)
write_byte(0)
write_byte(8)
write_byte(CSW_WEAPON_BASE)
write_byte(0)
message_end()
}
g_Hasscope[id] = true
g_hasZoom[id] = false
cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
UTIL_weapon_anim(id, CSW_WEAPON_BASE, 2)
ze_colored_print(id, "!tYou bought Lycanthrope!y.")
}
public Remove_scope(id)
{
if(!is_user_valid(id))
return
g_Hasscope[id] = false
g_hasZoom[id] = false
cs_set_user_zoom(id, CS_SET_NO_ZOOM, 0)
message_begin(MSG_ONE, get_user_msgid("WeaponList"), {0, 0, 0}, id)
write_string(CSW_OLD_WEAPON)
write_byte(7)
write_byte(100)
write_byte(-1)
write_byte(-1)
write_byte(0)
write_byte(8)
write_byte(CSW_WEAPON_BASE)
write_byte(0)
message_end()
cs_reset_player_view_model(id, CSW_WEAPON_BASE)
cs_reset_player_weap_model(id, CSW_WEAPON_BASE)
}
UTIL_weapon_anim(index, entity, sequence = 0)
{
set_pev(index, pev_weaponanim, sequence)
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, index)
write_byte(sequence)
write_byte(pev(entity, pev_body))
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, charsmax(wname))
engclient_cmd(id, "drop", wname)
}
}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1252\\ deff0\\ deflang1036{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ f0\\ fs16 \n\\ par }
*/
Code: Select all
#include <zombie_escape>
#include <ze_vip>
native ze_open_glow_menu(id)
native ze_give_lycanthrope(id)
native ze_give_infinity(id)
native ze_give_free_golds(id)
native ze_open_knife_menu(id)
const OFFSET_CSMENUCODE = 205
const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
public plugin_natives()
{
register_native("ze_open_vip_menu", "native_ze_open_vip_menu", 1)
}
public native_ze_open_vip_menu(id)
{
if (!is_user_connected(id))
return -1
if (!(get_user_flags(id) & ADMIN_LEVEL_H))
return false
Show_Menu(id)
return true
}
public plugin_init()
{
register_plugin("[ZE] VIP Menu", "1.0", "Spi")
register_menu("VIP Menu", KEYSMENU, "Main_Menu")
}
public Show_Menu(id)
{
static szMenu[250]
new iLen
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\rVIP Menu^n")
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y1\d. \wKnife Menu")
if (is_user_alive(id))
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y2\d. \wGuns Menu")
}
else
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\d2. Guns Menu")
}
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y3\d. \wGlow Menu")
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y4\d. \wDaily Golds")
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\y0\d. \r%L", id, "EXIT")
set_pdata_int(id, OFFSET_CSMENUCODE, 0)
show_menu(id, KEYSMENU, szMenu, -1, "Main Menu")
}
public Main_Menu(id, key)
{
if (!(get_user_flags(id) & ADMIN_LEVEL_H))
{
ze_colored_print(id, "!tyou are not ^4VIP Member")
return PLUGIN_HANDLED
}
else if (!is_user_connected(id))
return PLUGIN_HANDLED
switch (key)
{
case 0: ze_open_knife_menu(id)
case 1:
{
if (is_user_alive(id))
{
Open_HGunMenu(id)
}
else
{
ze_colored_print(id, "%L", id, "DEAD_CANT_BUY_WEAPON")
}
}
case 2: ze_open_glow_menu(id)
case 3: ze_give_free_golds(id)
}
return PLUGIN_HANDLED
}
public Open_ZGunMenu(id)
{
new iMenu = menu_create("\rDaily Golds:^n^n", "ZVIPMenu_Handler")
menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL)
menu_display(id, iMenu, 0)
}
public ZVIPMenu_Handler(id, iMenu, iItem)
{
if (!is_user_connected(id))
return PLUGIN_CONTINUE
switch (iItem)
{
case 0: ze_give_free_golds(id)
}
menu_destroy(iMenu)
return PLUGIN_HANDLED
}
public Open_HGunMenu(id)
{
new iMenu = menu_create("\rGuns Menu:^n^n", "HVIPMenu_Handler")
menu_additem(iMenu, "Lycanthrope")
menu_additem(iMenu, "Dual Infinity")
menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL)
menu_display(id, iMenu, 0)
}
public HVIPMenu_Handler(id, iMenu, iItem)
{
if (!is_user_connected(id))
return PLUGIN_CONTINUE
switch (iItem)
{
case 0: ze_give_lycanthrope(id)
case 1: ze_give_infinity(id)
}
menu_destroy(iMenu)
return PLUGIN_HANDLED
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1252\\ deff0\\ deflang1036{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ f0\\ fs16 \n\\ par }
*/
Ok bro thanks, but daily golds is missing. there's just 1 error in the code.
and please fix this main menu with the daily golds:
and please fix this main menu with the daily golds:
Code: Select all
#include <zombie_escape>
#include <ze_zombie_classes>
#include <ze_vip>
// Keys
const OFFSET_CSMENUCODE = 205
const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
public plugin_init()
{
register_plugin("[ZE] Main Menu", ZE_VERSION, AUTHORS)
// Commands
register_clcmd("chooseteam", "Cmd_ChooseTeam")
register_clcmd("say /zemenu", "Cmd_ChooseTeam")
register_clcmd("say_team /zemenu", "Cmd_ChooseTeam")
// Register Menus
register_menu("Main Menu", KEYSMENU, "Main_Menu")
}
public Cmd_ChooseTeam(id)
{
if (!is_user_connected(id))
return PLUGIN_CONTINUE;
if (get_member(id, m_iTeam) == TEAM_TERRORIST || get_member(id, m_iTeam) == TEAM_CT)
{
Show_Menu_Main(id)
return PLUGIN_HANDLED // Kill the Choose Team Command
}
// Player in Spec? Allow him to open choose team menu so he can join
return PLUGIN_CONTINUE
}
// Main Menu
public Show_Menu_Main(id)
{
static szMenu[250]
new iLen
// Title
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%L^n^n", id, "MAIN_MENU_TITLE")
// 1. Buy Weapons
if (!ze_is_auto_buy_enabled(id)) // AutoBuy not enabled - normal case
{
if (is_user_alive(id))
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y1.\r %L^n", id, "MENU_WEAPONBUY")
}
else
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d1. %L^n", id, "MENU_WEAPONBUY")
}
}
else
{
// Auto-Buy enabled - Re-enable case
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y1.\r %L^n", id, "MENU_WEAPONBUY_RE_ENABLE")
}
// 2. Extra Items
if (is_user_alive(id))
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y2. \r%L^n", id, "MENU_EXTRABUY")
}
else
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d2. %L^n", id, "MENU_EXTRABUY")
}
// 3. Unstuck
if (is_user_alive(id))
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y3. \r%L^n^n", id, "MENU_UNSTUCK")
}
else
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d3. %L^n^n", id, "MENU_UNSTUCK")
}
// 4. Sounds Menu
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y4. \rSounds Menu^n")
// 5. Donate Menu
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y5. \rDonate Menu^n")
// 6. Zombie Classes
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y6. \rZombie Classes^n^n")
// 7. VIP Menu
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y7. \w[ \rVIP Menu \w]^n")
}
else
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d7. [ \rVIP Menu \d]^n")
}
// 8. Admin Menu
if (get_user_flags(id) & ADMIN_KICK)
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y8. \w[ \rAdmin Menu \w]^n")
}
else
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d8. [ \rAdmin Menu \d]^n")
}
// 0. Exit
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\y0.\r %L", id, "EXIT")
// Fix for AMXX custom menus
set_pdata_int(id, OFFSET_CSMENUCODE, 0)
show_menu(id, KEYSMENU, szMenu, -1, "Main Menu")
}
// Main Menu
public Main_Menu(id, key)
{
// Player disconnected?
if (!is_user_connected(id))
return PLUGIN_HANDLED
switch (key)
{
case 0: // Buy Guns
{
if (!ze_is_auto_buy_enabled(id))
{
ze_show_weapon_menu(id)
}
else
{
ze_disable_auto_buy(id)
Show_Menu_Main(id)
}
}
case 1: // Extra Items
{
if (is_user_alive(id))
{
ze_show_items_menu(id)
}
else
{
ze_colored_print(id, "%L", id, "DEAD_CANT_BUY_WEAPON")
}
}
case 2: // Unstuck
{
if (is_user_alive(id))
{
client_cmd(id, "say /unstuck")
}
else
{
ze_colored_print(id, "%L", id, "DEAD_CANT_UNSTUCK")
}
}
case 3: // Sounds Menu
{
client_cmd(id, "say /sounds")
}
case 4: // Donate Menu
{
client_cmd(id, "say /donate")
}
case 5: // Zombie Classes
{
ze_open_zombie_classes_menu(id)
}
case 6: // VIP Menu
{
ze_open_vip_menu(id)
}
case 7: // Admin Menu
{
if (get_user_flags(id) & ADMIN_KICK)
{
client_cmd(id, "amxmodmenu")
}
else
{
ze_colored_print(id, "!tYou are not !gAdmin!y.")
}
}
}
return PLUGIN_HANDLED
}
- Night Fury
- Mod Developer
- Posts: 677
- Joined: 7 years ago
- Contact:
What is the error you face when you try to compile? Next time post all errors you face!
ok man just help me to compile these two codes.
- Night Fury
- Mod Developer
- Posts: 677
- Joined: 7 years ago
- Contact:
Daily:
Menu:
Code: Select all
#include <zombie_escape>
#include <ze_vip>
#define NV_NAME "GET_GOLDS"
#define VIP_ACCESS ADMIN_LEVEL_H
enum player_struct {
mtime,bool:ftime,key[64]
}
new g_player[33][player_struct];
new cvar_save_type,cvar_time,cvar_coins;
public plugin_natives()
{
register_native("ze_get_free_golds", "native_ze_get_free_golds", 1)
}
public native_ze_get_free_golds(id)
{
if (!is_user_connected(id))
return -1
cmd_coins(id)
return true
}
public plugin_init() {
register_plugin("Get Escape Golds", "1.0", "ZE DEV TEAM");
cvar_save_type = register_cvar("get_golds_save_type","1"); // how to save data 1 by authid, 2 by ip or 3 by name
cvar_time = register_cvar("get_golds_minutes","720"); // time in minutes, 720minutes=12hours it will be auto calculated
cvar_coins = register_cvar("get_golds_coins","200"); // how many coins to give
}
public cmd_coins(id) {
new nv = nvault_open(NV_NAME);
if(nv == INVALID_HANDLE) {
ze_colored_print(id, "!tFor the moment getting golds system is inactive..");
return;
}
new txt_min[32],txt_coins[10];
new coins = get_pcvar_num(cvar_coins),pminutes = get_pcvar_num(cvar_time);
copy(txt_coins,charsmax(txt_coins),(coins==1)?"coin":"coins");
build_time(pminutes,txt_min,charsmax(txt_min));
if(g_player[id][ftime]) {
ze_colored_print(id, "!tYou have received !g%d !tGolds!y, !tget another in !g%s!y!",coins,txt_min);
ze_set_escape_coins(id, ze_get_escape_coins(id) + coins);
g_player[id][ftime]=false;
nvault_touch(nv,g_player[id][key],g_player[id][mtime]=get_systime());
return;
}
new user_time=get_systime()-g_player[id][mtime];
new diff_min=(user_time<(pminutes*60))?pminutes-(user_time/60):pminutes;
build_time(diff_min,txt_min,charsmax(txt_min));
if(user_time>=(pminutes*60)) {
ze_colored_print(id, "!tYou have just received !g%d !tGolds!y, !tsince !g%s !tpassed!y!",coins,txt_min);
ze_set_escape_coins(id, ze_get_escape_coins(id) + coins);
nvault_touch(nv,g_player[id][key],g_player[id][mtime]=get_systime());
}
else
ze_colored_print(id, "!tRetry again in !g%s !tfor getting !g%d !tmore Golds!y.",txt_min,coins);
nvault_close(nv);
}
public client_putinserver(id) {
new nv,data[32];
get_auth(id,g_player[id][key],charsmax(g_player[][key]));
g_player[id][mtime]=get_systime();
g_player[id][ftime]=false;
formatex(data,charsmax(data),"%d",g_player[id][mtime]);
if((nv=nvault_open(NV_NAME))==INVALID_HANDLE)
return;
if(!nvault_lookup(nv,g_player[id][key],data,charsmax(data),g_player[id][mtime])) {
nvault_set(nv,g_player[id][key],data);
g_player[id][ftime]=true;
}
nvault_close(nv);
}
public client_disconnected(id) {
g_player[id][mtime]=0;
g_player[id][ftime]=false;
}
stock get_auth(id,data[],len)
switch(get_pcvar_num(cvar_save_type)) {
case 1: get_user_authid(id,data,len);
case 2: get_user_ip(id,data,len,1);
case 3: get_user_name(id,data,len);
}
stock build_time(pminutes,data[],len)
if(pminutes==1)
copy(data,len,"1 minute");
else if(pminutes!=1&&pminutes<60)
formatex(data,len,"%d minutes",pminutes);
else if(pminutes==60)
copy(data,len,"1 hour");
else {
new ptime=pminutes/60;
if(ptime*60==pminutes)
formatex(data,len,"%d %s",ptime,(ptime==1)?"hour":"hours");
else {
new diff=pminutes-ptime*60;
formatex(data,len,"%d %s and %d %s",ptime,(ptime==1)?"hour":"hours",diff,(diff==1)?"minute":"minutes");
}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1036\\ f0\\ fs16 \n\\ par }
*/
Menu:
Code: Select all
#include <zombie_escape>
#include <ze_zombie_classes>
#include <ze_vip>
// Keys
const OFFSET_CSMENUCODE = 205
const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
public plugin_init()
{
register_plugin("[ZE] Main Menu", ZE_VERSION, AUTHORS)
// Commands
register_clcmd("chooseteam", "Cmd_ChooseTeam")
register_clcmd("say /zemenu", "Cmd_ChooseTeam")
register_clcmd("say_team /zemenu", "Cmd_ChooseTeam")
// Register Menus
register_menu("Main Menu", KEYSMENU, "Main_Menu")
}
public Cmd_ChooseTeam(id)
{
if (!is_user_connected(id))
return PLUGIN_CONTINUE;
if (get_member(id, m_iTeam) == TEAM_TERRORIST || get_member(id, m_iTeam) == TEAM_CT)
{
Show_Menu_Main(id)
return PLUGIN_HANDLED // Kill the Choose Team Command
}
// Player in Spec? Allow him to open choose team menu so he can join
return PLUGIN_CONTINUE
}
// Main Menu
public Show_Menu_Main(id)
{
static szMenu[250]
new iLen
// Title
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%L^n^n", id, "MAIN_MENU_TITLE")
// 1. Buy Weapons
if (!ze_is_auto_buy_enabled(id)) // AutoBuy not enabled - normal case
{
if (is_user_alive(id))
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y1.\r %L^n", id, "MENU_WEAPONBUY")
}
else
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d1. %L^n", id, "MENU_WEAPONBUY")
}
}
else
{
// Auto-Buy enabled - Re-enable case
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y1.\r %L^n", id, "MENU_WEAPONBUY_RE_ENABLE")
}
// 2. Extra Items
if (is_user_alive(id))
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y2. \r%L^n", id, "MENU_EXTRABUY")
}
else
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d2. %L^n", id, "MENU_EXTRABUY")
}
// 3. Unstuck
if (is_user_alive(id))
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y3. \r%L^n^n", id, "MENU_UNSTUCK")
}
else
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d3. %L^n^n", id, "MENU_UNSTUCK")
}
// 4. Sounds Menu
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y4. \rSounds Menu^n")
// 5. Donate Menu
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y5. \rDonate Menu^n")
// 6. Zombie Classes
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y6. \rZombie Classes^n^n")
// 7. VIP Menu
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y7. \w[ \rVIP Menu \w]^n")
// 8. Admin Menu
if (get_user_flags(id) & ADMIN_KICK)
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y8. \w[ \rAdmin Menu \w]^n")
}
else
{
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\d8. [ \rAdmin Menu \d]^n")
}
// 0. Exit
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\y0.\r %L", id, "EXIT")
// Fix for AMXX custom menus
set_pdata_int(id, OFFSET_CSMENUCODE, 0)
show_menu(id, KEYSMENU, szMenu, -1, "Main Menu")
}
// Main Menu
public Main_Menu(id, key)
{
// Player disconnected?
if (!is_user_connected(id))
return PLUGIN_HANDLED
switch (key)
{
case 0: // Buy Guns
{
if (!ze_is_auto_buy_enabled(id))
{
ze_show_weapon_menu(id)
}
else
{
ze_disable_auto_buy(id)
Show_Menu_Main(id)
}
}
case 1: // Extra Items
{
if (is_user_alive(id))
{
ze_show_items_menu(id)
}
else
{
ze_colored_print(id, "%L", id, "DEAD_CANT_BUY_WEAPON")
}
}
case 2: // Unstuck
{
if (is_user_alive(id))
{
client_cmd(id, "say /unstuck")
}
else
{
ze_colored_print(id, "%L", id, "DEAD_CANT_UNSTUCK")
}
}
case 3: // Sounds Menu
{
client_cmd(id, "say /sounds")
}
case 4: // Donate Menu
{
client_cmd(id, "say /donate")
}
case 5: // Zombie Classes
{
ze_open_zombie_classes_menu(id)
}
case 6: // VIP Menu
{
ze_open_vip_menu(id)
}
case 7: // Admin Menu
{
if (get_user_flags(id) & ADMIN_KICK)
{
client_cmd(id, "amxmodmenu")
}
else
{
ze_colored_print(id, "!tYou are not !gAdmin!y.")
}
}
}
return PLUGIN_HANDLED
}
compiled but see here, the two plugins won't even work on the server when i type "M" choosing team menu appears.
vip menu daiyl golds native was
Code: Select all
ze_give_free_golds
Code: Select all
ze_get_free_golds
Daily golds:
Code: Select all
#include <zombie_escape>
#include <ze_vip>
#define NV_NAME "GET_GOLDS"
#define VIP_ACCESS ADMIN_LEVEL_H
enum player_struct {
mtime,bool:ftime,key[64]
}
new g_player[33][player_struct];
new cvar_save_type,cvar_time,cvar_coins;
public plugin_natives()
{
register_native("ze_give_free_golds", "native_ze_give_free_golds", 1)
}
public native_ze_give_free_golds(id)
{
if (!is_user_connected(id))
return -1
cmd_coins(id)
return true
}
public plugin_init() {
register_plugin("Get Escape Golds", "1.0", "ZE DEV TEAM");
cvar_save_type = register_cvar("get_golds_save_type","1"); // how to save data 1 by authid, 2 by ip or 3 by name
cvar_time = register_cvar("get_golds_minutes","720"); // time in minutes, 720minutes=12hours it will be auto calculated
cvar_coins = register_cvar("get_golds_coins","200"); // how many coins to give
}
public cmd_coins(id) {
new nv = nvault_open(NV_NAME);
if(nv == INVALID_HANDLE) {
ze_colored_print(id, "!tFor the moment getting golds system is inactive..");
return;
}
new txt_min[32],txt_coins[10];
new coins = get_pcvar_num(cvar_coins),pminutes = get_pcvar_num(cvar_time);
copy(txt_coins,charsmax(txt_coins),(coins==1)?"coin":"coins");
build_time(pminutes,txt_min,charsmax(txt_min));
if(g_player[id][ftime]) {
ze_colored_print(id, "!tYou have received !g%d !tGolds!y, !tget another in !g%s!y!",coins,txt_min);
ze_set_escape_coins(id, ze_get_escape_coins(id) + coins);
g_player[id][ftime]=false;
nvault_touch(nv,g_player[id][key],g_player[id][mtime]=get_systime());
return;
}
new user_time=get_systime()-g_player[id][mtime];
new diff_min=(user_time<(pminutes*60))?pminutes-(user_time/60):pminutes;
build_time(diff_min,txt_min,charsmax(txt_min));
if(user_time>=(pminutes*60)) {
ze_colored_print(id, "!tYou have just received !g%d !tGolds!y, !tsince !g%s !tpassed!y!",coins,txt_min);
ze_set_escape_coins(id, ze_get_escape_coins(id) + coins);
nvault_touch(nv,g_player[id][key],g_player[id][mtime]=get_systime());
}
else
ze_colored_print(id, "!tRetry again in !g%s !tfor getting !g%d !tmore Golds!y.",txt_min,coins);
nvault_close(nv);
}
public client_putinserver(id) {
new nv,data[32];
get_auth(id,g_player[id][key],charsmax(g_player[][key]));
g_player[id][mtime]=get_systime();
g_player[id][ftime]=false;
formatex(data,charsmax(data),"%d",g_player[id][mtime]);
if((nv=nvault_open(NV_NAME))==INVALID_HANDLE)
return;
if(!nvault_lookup(nv,g_player[id][key],data,charsmax(data),g_player[id][mtime])) {
nvault_set(nv,g_player[id][key],data);
g_player[id][ftime]=true;
}
nvault_close(nv);
}
public client_disconnected(id) {
g_player[id][mtime]=0;
g_player[id][ftime]=false;
}
stock get_auth(id,data[],len)
switch(get_pcvar_num(cvar_save_type)) {
case 1: get_user_authid(id,data,len);
case 2: get_user_ip(id,data,len,1);
case 3: get_user_name(id,data,len);
}
stock build_time(pminutes,data[],len)
if(pminutes==1)
copy(data,len,"1 minute");
else if(pminutes!=1&&pminutes<60)
formatex(data,len,"%d minutes",pminutes);
else if(pminutes==60)
copy(data,len,"1 hour");
else {
new ptime=pminutes/60;
if(ptime*60==pminutes)
formatex(data,len,"%d %s",ptime,(ptime==1)?"hour":"hours");
else {
new diff=pminutes-ptime*60;
formatex(data,len,"%d %s and %d %s",ptime,(ptime==1)?"hour":"hours",diff,(diff==1)?"minute":"minutes");
}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1036\\ f0\\ fs16 \n\\ par }
*/
Thanks
guys help me there, the plugin seems like not working. when i press 1. knife menu or 2. Guns menu nothing happen like i didn't press it. can anyone know what's the problem ?
Can you post you'r code's ?
Man all my codes are already posted on this topic go check previous pages. what you want exactly ?
- Night Fury
- Mod Developer
- Posts: 677
- Joined: 7 years ago
- Contact:
There must be an errors.
Give all errors.
Give all errors.
no errors is appearing bro. just the plugin is not working correctly i think something from the code of vip menu
Mark it as plugin available and anyone can edit it as he want.
Is this thread still active?
Please help me! I want to make the menu like this.
VIP Menu
1. Guns
2. Knife Menu
> Guns
1. Salamander
2. Laser Minigun
3. Auto Minigun
4. Stun Rifle
5. Bazooka
6. [ Just give a blank code, i'll edit it ]
> Codes
Salamander:
Stun Rifle:
Bazooka:
Laser Minigun:
Auto Minigun:
Please help me! I want to make the menu like this.
VIP Menu
1. Guns
2. Knife Menu
> Guns
1. Salamander
2. Laser Minigun
3. Auto Minigun
4. Stun Rifle
5. Bazooka
6. [ Just give a blank code, i'll edit it ]
> Codes
Salamander:
Code: Select all
#include <zombie_escape>
#include <ze_vip>
#include <amxconst>
#include <fakemeta>
#include <fakemeta_util>
#include <cstrike>
#include <xs>
#include <engine>
#include <fun>
#define PLUGIN "[CSO] Salamander"
#define VERSION "2015"
#define AUTHOR "Dias Pendragon Leon"
#define CSW_SAL CSW_M249
#define weapon_sal "weapon_m249"
#define DAMAGE 38
#define FIRE_SPEED 640.0
#define RECOIL 0.0
#define MODEL_V "models/v_salamander.mdl"
#define MODEL_P "models/p_salamander.mdl"
#define MODEL_W "models/w_salamander.mdl"
#define DEFAULT_W_MODEL "models/w_m249.mdl"
new const WeaponSounds[6][] =
{
"weapons/flamegun-1.wav",
"weapons/flamegun_draw.wav",
"weapons/flamegun_clipin1.wav",
"weapons/flamegun_clipin2.wav",
"weapons/flamegun_clipout1.wav",
"weapons/flamegun_clipout2.wav"
}
new const WeaponResources[7][] =
{
"sprites/flame_puff01.spr",
"sprites/flame_burn01.spr",
"sprites/weapon_flamethrower.txt",
"sprites/640hud7_2.spr",
"sprites/640hud59_2.spr",
"sprites/640hud60_2.spr",
"sprites/smokepuff.spr"
}
enum
{
ANIM_IDLE = 0,
ANIM_SHOOT,
ANIM_SHOOT_END,
ANIM_RELOAD,
ANIM_DRAW
}
// Marcros
#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)));
// Vars
new g_Had_Salamander, g_WeaponEnt, g_SmokePuff_SprID, Float:g_PunchAngles[33]
new g_MsgCurWeapon, g_MsgWeaponList
// Safety
new g_HamBot
new g_IsConnected, g_IsAlive, g_PlayerWeapon[33]
new g_iItemId
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
// Your highness!
Register_SafetyFunc()
// Forward
register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
register_forward(FM_SetModel, "fw_SetModel")
register_forward(FM_PlaybackEvent, "fw_PlaybackEvent")
register_forward(FM_CmdStart, "fw_CmdStart")
register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1)
// Engine
register_think("fireinsaigon", "fw_Fire_Think")
register_touch("fireinsaigon", "*", "fw_Fire_Touch")
// Hams
RegisterHam(Ham_Item_Deploy, weapon_sal, "fw_Item_Deploy_Post", 1)
RegisterHam(Ham_Item_AddToPlayer, weapon_sal, "fw_Item_AddToPlayer_Post", 1)
RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack")
RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack")
RegisterHam(Ham_Weapon_PrimaryAttack, weapon_sal, "fw_Weapon_PrimaryAttack")
RegisterHam(Ham_Weapon_PrimaryAttack, weapon_sal, "fw_Weapon_PrimaryAttack_Post", 1)
g_MsgCurWeapon = get_user_msgid("CurWeapon")
g_MsgWeaponList = get_user_msgid("WeaponList")
// register_clcmd("say /get", "Get_Salamander")
register_clcmd("weapon_flamethrower", "Hook_Weapon")
g_iItemId = ze_register_item("CSO Salamander", 100, 0)
ze_set_item_vip(g_iItemId, "VIP_A")
}
public plugin_precache()
{
precache_model(MODEL_V)
precache_model(MODEL_P)
precache_model(MODEL_W)
for(new i = 0; i < sizeof(WeaponSounds); i++)
precache_sound(WeaponSounds[i])
for(new i = 0; i < sizeof(WeaponResources); i++)
{
if(i == 2) precache_generic(WeaponResources[i])
else if(i == 6) g_SmokePuff_SprID = precache_model(WeaponResources[i])
else precache_model(WeaponResources[i])
}
}
public fw_PrecacheEvent_Post(type, const name[])
{
if(equal("events/m249.sc", name))
g_WeaponEnt = get_orig_retval()
}
public client_putinserver(id)
{
Safety_Connected(id)
if(!g_HamBot && is_user_bot(id))
{
g_HamBot = 1
set_task(0.1, "Register_HamBot", id)
}
}
public Register_HamBot(id)
{
Register_SafetyFuncBot(id)
RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack")
}
public client_disconnected(id)
{
Safety_Disconnected(id)
}
public Hook_Weapon(id)
{
engclient_cmd(id, weapon_sal)
return PLUGIN_HANDLED
}
public Get_Salamander(id)
{
Set_BitVar(g_Had_Salamander, id)
give_item(id, weapon_sal)
message_begin(MSG_ONE_UNRELIABLE, g_MsgCurWeapon, _, id)
write_byte(1)
write_byte(CSW_SAL)
write_byte(100)
message_end()
cs_set_user_bpammo(id, CSW_SAL, 200)
}
public Remove_Salamander(id)
{
UnSet_BitVar(g_Had_Salamander, id)
}
public fw_UpdateClientData_Post(id, sendweapons, cd_handle)
{
if(!is_alive(id))
return FMRES_IGNORED
if(get_player_weapon(id) != CSW_SAL || !Get_BitVar(g_Had_Salamander, id))
return FMRES_IGNORED
set_cd(cd_handle, CD_flNextAttack, get_gametime() + 0.001)
return FMRES_HANDLED
}
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_sal, entity)
if(!pev_valid(weapon))
return FMRES_IGNORED
if(Get_BitVar(g_Had_Salamander, id))
{
set_pev(weapon, pev_impulse, 442015)
engfunc(EngFunc_SetModel, entity, MODEL_W)
UnSet_BitVar(g_Had_Salamander, id)
return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}
public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
if(!is_alive(invoker))
return FMRES_IGNORED
if(get_player_weapon(invoker) != CSW_SAL || !Get_BitVar(g_Had_Salamander, invoker))
return FMRES_IGNORED
if(eventid == g_WeaponEnt)
{
playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
if(pev(invoker, pev_weaponanim) != ANIM_SHOOT) Set_WeaponAnim(invoker, ANIM_SHOOT)
return FMRES_SUPERCEDE
}
return FMRES_HANDLED
}
public fw_CmdStart(id, uc_handle, seed)
{
if(!is_alive(id))
return FMRES_IGNORED
if(get_player_weapon(id) != CSW_SAL || !Get_BitVar(g_Had_Salamander, id))
return FMRES_IGNORED
static PressedButton
PressedButton = get_uc(uc_handle, UC_Buttons)
if(!(PressedButton & IN_ATTACK))
{
if((pev(id, pev_oldbuttons) & IN_ATTACK) && pev(id, pev_weaponanim) == ANIM_SHOOT)
{
static weapon; weapon = fm_get_user_weapon_entity(id, CSW_SAL)
if(pev_valid(weapon)) set_pdata_float(weapon, 48, 2.0, 4)
Set_WeaponAnim(id, ANIM_SHOOT_END)
Make_FireSmoke(id)
}
}
return FMRES_HANDLED
}
public Make_FireSmoke(id)
{
static Float:Origin[3]
get_position(id, 40.0, 5.0, -15.0, 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_SmokePuff_SprID)
write_byte(5)
write_byte(30)
write_byte(14)
message_end()
}
public fw_Item_Deploy_Post(Ent)
{
if(pev_valid(Ent) != 2)
return
static Id; Id = get_pdata_cbase(Ent, 41, 4)
if(get_pdata_cbase(Id, 373) != Ent)
return
if(!Get_BitVar(g_Had_Salamander, Id))
return
set_pev(Id, pev_viewmodel2, MODEL_V)
set_pev(Id, pev_weaponmodel2, MODEL_P)
}
public fw_Item_AddToPlayer_Post(Ent, id)
{
if(!pev_valid(Ent))
return HAM_IGNORED
if(pev(Ent, pev_impulse) == 442015)
{
Set_BitVar(g_Had_Salamander, id)
set_pev(Ent, pev_impulse, 0)
}
if(Get_BitVar(g_Had_Salamander, id))
{
message_begin(MSG_ONE_UNRELIABLE, g_MsgWeaponList, _, id)
write_string("weapon_flamethrower")
write_byte(3)
write_byte(200)
write_byte(-1)
write_byte(-1)
write_byte(0)
write_byte(4)
write_byte(CSW_SAL)
write_byte(0)
message_end()
}
return HAM_HANDLED
}
public fw_TraceAttack(Ent, Attacker, Float:Damage, Float:Dir[3], ptr, DamageType)
{
if(!is_alive(Attacker))
return HAM_IGNORED
if(get_player_weapon(Attacker) != CSW_SAL || !Get_BitVar(g_Had_Salamander, Attacker))
return HAM_IGNORED
return HAM_SUPERCEDE
}
public CreateFire(id, Float:Speed)
{
new iEnt = create_entity("env_sprite")
if(!pev_valid(iEnt)) return
static Float:vfAngle[3], Float:MyOrigin[3]
static Float:Origin[3], Float:TargetOrigin[3], Float:Velocity[3]
get_position(id, 40.0, 5.0, -5.0, Origin)
get_position(id, 1024.0, 0.0, 0.0, TargetOrigin)
pev(id, pev_angles, vfAngle)
pev(id, pev_origin, MyOrigin)
vfAngle[2] = float(random(18) * 20)
// set info for ent
set_pev(iEnt, pev_movetype, MOVETYPE_FLY)
set_pev(iEnt, pev_rendermode, kRenderTransAdd)
set_pev(iEnt, pev_renderamt, 160.0)
set_pev(iEnt, pev_fuser1, get_gametime() + 1.0) // time remove
set_pev(iEnt, pev_scale, 0.25)
set_pev(iEnt, pev_nextthink, get_gametime() + 0.05)
entity_set_string(iEnt, EV_SZ_classname, "fireinsaigon")
engfunc(EngFunc_SetModel, iEnt, WeaponResources[0])
set_pev(iEnt, pev_mins, Float:{-1.0, -1.0, -1.0})
set_pev(iEnt, pev_maxs, Float:{1.0, 1.0, 1.0})
set_pev(iEnt, pev_origin, Origin)
set_pev(iEnt, pev_gravity, 0.01)
set_pev(iEnt, pev_angles, vfAngle)
set_pev(iEnt, pev_solid, SOLID_TRIGGER)
set_pev(iEnt, pev_owner, id)
set_pev(iEnt, pev_frame, 0.0)
set_pev(iEnt, pev_iuser2, get_user_team(id))
get_speed_vector(Origin, TargetOrigin, Speed, Velocity)
set_pev(iEnt, pev_velocity, Velocity)
emit_sound(iEnt, CHAN_BODY, WeaponSounds[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
public fw_Fire_Think(iEnt)
{
if(!pev_valid(iEnt))
return
static Float:fFrame, Float:fScale
pev(iEnt, pev_frame, fFrame)
pev(iEnt, pev_scale, fScale)
// effect exp
if(pev(iEnt, pev_movetype) == MOVETYPE_NONE)
{
fFrame += 1.0
fScale += 0.1
fScale = floatmin(fScale, 1.75)
if(fFrame > 21.0)
{
engfunc(EngFunc_RemoveEntity, iEnt)
return
}
set_pev(iEnt, pev_nextthink, get_gametime() + 0.025)
} else {
fFrame += 1.25
fFrame = floatmin(21.0, fFrame)
fScale += 0.15
fScale = floatmin(fScale, 1.75)
set_pev(iEnt, pev_nextthink, get_gametime() + 0.05)
}
set_pev(iEnt, pev_frame, fFrame)
set_pev(iEnt, pev_scale, fScale)
// time remove
static Float:fTimeRemove
pev(iEnt, pev_fuser1, fTimeRemove)
if (get_gametime() >= fTimeRemove)
{
engfunc(EngFunc_RemoveEntity, iEnt)
return;
}
}
public fw_Fire_Touch(ent, id)
{
if(!pev_valid(ent))
return
if(pev_valid(id))
{
static Classname[32]
pev(id, pev_classname, Classname, sizeof(Classname))
if(equal(Classname, "fireinsaigon")) return
else if(is_alive(id))
{
static EntTeam; EntTeam = pev(ent, pev_iuser2)
if(get_user_team(id) != EntTeam)
{
static Attacker; Attacker = pev(ent, pev_owner)
if(is_connected(Attacker))
{
ExecuteHamB(Ham_TakeDamage, id, 0, Attacker, float(DAMAGE), DMG_BULLET)
}
}
}
}
set_pev(ent, pev_movetype, MOVETYPE_NONE)
set_pev(ent, pev_solid, SOLID_NOT)
}
public ze_select_item_pre(id, itemid)
{
// If it is not the gun the player is willing to buy then just make it available.
// g_iItemId is the handler you made it before.
// You can name itemid whatever you like but just not the same handler name.
if (itemid != g_iItemId)
return ZE_ITEM_AVAILABLE
// In this item we are working on, it will be for humans only so we need to hide it for zombies so they do not get it.
//If you want it to be for zombies, you need to add the not operator "!" before the native so it's gonna be like this:
// if (!ze_is_user_zombie(id))
// If you want an item to be for zombies & humans then just don't add the next code.
if (ze_is_user_zombie(id))
return ZE_ITEM_DONT_SHOW
// Here we need to return a value so you don't get a warning on compiling.
return ZE_ITEM_AVAILABLE
}
public ze_select_item_post(id, itemid)
{
// Here we just block buying the gun if it is not the gun the player is willing to buy so we just add return without values.
if (itemid != g_iItemId)
return
// Here you can give the item & you can even add a message to notice the player what he bought for example like this:
ze_colored_print(id, "You have successfully bought the item.")
// Do you remember in public plugin_init(), we found something like this in it:
// register_clcmd("say /get", "Get_MyWeapon")
// That line is to allow you to get the gun for free when you type that command.
// Well, we don't care about it, we care about:
// Get_MyWeapon
// This is the function we will use to give the weapon to the player
// It's like this:
Get_Salamander(id)
}
public fw_Weapon_PrimaryAttack(ent)
{
static id; id = pev(ent, pev_owner)
pev(id, pev_punchangle, g_PunchAngles[id])
return HAM_IGNORED
}
public fw_Weapon_PrimaryAttack_Post(ent)
{
static id; id = pev(ent, pev_owner)
if(get_player_weapon(id) == CSW_SAL && Get_BitVar(g_Had_Salamander, id) && cs_get_weapon_ammo(ent) > 0)
{
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)
CreateFire(id, FIRE_SPEED)
} else {
static Float:push[3]
pev(id, pev_punchangle, push)
xs_vec_sub(push, g_PunchAngles[id], push)
xs_vec_mul_scalar(push, 0.0, push)
xs_vec_add(push, g_PunchAngles[id], push)
set_pev(id, pev_punchangle, push)
}
return HAM_IGNORED
}
stock Set_WeaponIdleTime(id, WeaponId ,Float:TimeIdle)
{
static entwpn; entwpn = fm_get_user_weapon_entity(id, WeaponId)
if(!pev_valid(entwpn))
return
set_pdata_float(entwpn, 46, TimeIdle, 4)
set_pdata_float(entwpn, 47, TimeIdle, 4)
set_pdata_float(entwpn, 48, TimeIdle + 0.5, 4)
}
stock Set_PlayerNextAttack(id, Float:nexttime)
{
set_pdata_float(id, 83, nexttime, 5)
}
stock Set_WeaponAnim(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 get_position(id,Float:forw, Float:right, Float:up, Float:vStart[])
{
new 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_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
{
new_velocity[0] = origin2[0] - origin1[0]
new_velocity[1] = origin2[1] - origin1[1]
new_velocity[2] = origin2[2] - origin1[2]
new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
new_velocity[0] *= num
new_velocity[1] *= num
new_velocity[2] *= num
return 1;
}
stock 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)
}
/* ===============================
------------- SAFETY -------------
=================================*/
public Register_SafetyFunc()
{
register_event("CurWeapon", "Safety_CurWeapon", "be", "1=1")
RegisterHam(Ham_Spawn, "player", "fw_Safety_Spawn_Post", 1)
RegisterHam(Ham_Killed, "player", "fw_Safety_Killed_Post", 1)
}
public Register_SafetyFuncBot(id)
{
RegisterHamFromEntity(Ham_Spawn, id, "fw_Safety_Spawn_Post", 1)
RegisterHamFromEntity(Ham_Killed, id, "fw_Safety_Killed_Post", 1)
}
public Safety_Connected(id)
{
Set_BitVar(g_IsConnected, id)
UnSet_BitVar(g_IsAlive, id)
g_PlayerWeapon[id] = 0
}
public Safety_Disconnected(id)
{
UnSet_BitVar(g_IsConnected, id)
UnSet_BitVar(g_IsAlive, id)
g_PlayerWeapon[id] = 0
}
public Safety_CurWeapon(id)
{
if(!is_alive(id))
return
static CSW; CSW = read_data(2)
if(g_PlayerWeapon[id] != CSW) g_PlayerWeapon[id] = CSW
}
public fw_Safety_Spawn_Post(id)
{
if(!is_user_alive(id))
return
Set_BitVar(g_IsAlive, id)
}
public fw_Safety_Killed_Post(id)
{
UnSet_BitVar(g_IsAlive, id)
}
public is_connected(id)
{
if(!(1 <= id <= 32))
return 0
if(!Get_BitVar(g_IsConnected, id))
return 0
return 1
}
public is_alive(id)
{
if(!is_connected(id))
return 0
if(!Get_BitVar(g_IsAlive, id))
return 0
return 1
}
public get_player_weapon(id)
{
if(!is_alive(id))
return 0
return g_PlayerWeapon[id]
}
// ===================== STOCK... =======================
// ======================================================
Code: Select all
/*
* Stun Rifle is a CSO weapon, More information about it: http://cso.wikia.com/wiki/Stun_Rifle
*
* This plugin written by me: Raheem (The basic things for any weapon not written by me)
*
* I tried to simulate it same as in CSO, I think it's nearly same else simple things
* That will be done in next versions.
*
* Version 1.0 creation date: 16-6-2018
* Version 1.0 publication date: 20-6-2018
*
* Last update: 4-8-2018
*
* TODO List: Fix any problem, include good ideas
*/
#include <zombie_escape>
#include <fakemeta_util>
#define CustomItem(%0) (pev(%0, pev_impulse) == WEAPON_KEY)
// CWeaponBox
#define m_rgpPlayerItems_CWeaponBox 34
// CBasePlayerItem
#define m_pPlayer 41
#define m_pNext 42
#define m_iId 43
// CBasePlayerWeapon
#define m_flNextPrimaryAttack 46
#define m_flNextSecondaryAttack 47
#define m_flTimeWeaponIdle 48
#define m_iPrimaryAmmoType 49
#define m_iClip 51
#define m_fInReload 54
#define m_iWeaponState 74
// CBaseMonster
#define m_flNextAttack 83
// CBasePlayer
#define m_iFOV 363
#define m_rpgPlayerItems 367
#define m_pActiveItem 373
#define m_rgAmmo 376
/*-----------------------------------------------------*/
#define WEAPON_KEY 776544229
#define WEAPON_OLD "weapon_ak47"
#define WEAPON_NEW "weapon_stunrifle"
/*-----------------------------------------------------*/
new const WPN_SPRITES[][] =
{
"sprites/weapon_stunrifle.txt",
"sprites/640hud169.spr",
"sprites/640hud7.spr"
}
new const g_szSounds[][] =
{
"weapons/stunrifle-1.wav",
"weapons/stunrifle_drawa.wav",
"weapons/stunrifle_drawb.wav",
"weapons/stunrifle_drawc.wav",
"weapons/stunrifle_reloada.wav",
"weapons/stunrifle_reloadb.wav",
"weapons/stunrifle_reloadc.wav",
"weapons/stunrifle_idlea.wav",
"weapons/stunrifle_idleb.wav",
"weapons/stunrifle_idlec.wav",
"weapons/stunrifle_lowbattery.wav",
"weapons/stunrifle-2.wav"
}
new const iWeaponList[] =
{
2, 30, -1, -1, 0, 1, CSW_AK47, 0
}
#define WEAPON_MODEL_V "models/stunrifle/v_stunrifle.mdl"
#define WEAPON_MODEL_P "models/stunrifle/p_stunrifle.mdl"
#define WEAPON_MODEL_W "models/stunrifle/w_stunrifle.mdl"
#define WEAPON_BODY 0
/*-----------------------------------------------------*/
#define WEAPON_COST 0
#define WEAPON_CLIP 30
#define WEAPON_AMMO 90
#define WEAPON_RATE 0.098
#define WEAPON_RECOIL 0.96
#define WEAPON_DAMAGE 1.0 // AK47 damage multiplied by this factor
#define WEAPON_RATE_EX 0.169
#define WEAPON_RECOIL_EX 0.79
#define WEAPON_DAMAGE_EX 1.3
#define WEAPON_NATIVE "native_give_weapon_stunrifle"
/*-----------------------------------------------------*/
// Animations
#define ANIM_IDLE_A 0
#define ANIM_IDLE_B 1
#define ANIM_IDLE_C 2
#define ANIM_ATTACK_A 3
#define ANIM_ATTACK_B 4
#define ANIM_ATTACK_C 5
#define ANIM_RELOAD_A 6
#define ANIM_RELOAD_B 7
#define ANIM_RELOAD_C 8
#define ANIM_DRAW_A 9
#define ANIM_DRAW_B 10
#define ANIM_DRAW_C 11
// from model: Frames / FPS
#define ANIM_IDLE_TIME_A 90/30.0
#define ANIM_SHOOT_TIME_A 31/30.0
#define ANIM_RELOAD_TIME_A 101/30.0
#define ANIM_DRAW_TIME_A 46/30.0
#define ANIM_IDLE_TIME_B 90/30.0
#define ANIM_SHOOT_TIME_B 31/30.0
#define ANIM_RELOAD_TIME_B 101/30.0
#define ANIM_DRAW_TIME_B 46/30.0
#define ANIM_IDLE_TIME_C 90/30.0
#define ANIM_SHOOT_TIME_C 31/30.0
#define ANIM_RELOAD_TIME_C 101/30.0
#define ANIM_DRAW_TIME_C 46/30.0
new g_AllocString_V,
g_AllocString_P,
g_AllocString_E,
HamHook: g_fw_TraceAttack[4],
g_iMsgID_Weaponlist,
g_iStoredEnergy[33],
bool:g_bHasStunRifle[33],
g_pCvarBarFillTime,
g_pCvarRadius,
g_pCvarElecDmg,
g_iLigSpr,
g_iEffSpr,
g_iEff2Spr,
bool:g_bReloading[33],
g_iAppearTimes[33],
g_iItemID
public plugin_init()
{
register_plugin("[ZE] Stun Rifle", "1.1", "Raheem");
// Register our item
g_iItemID = ze_register_item("Stun Rifle", 300, 0) // It's cost 300 Coins
RegisterHam(Ham_Item_Deploy, WEAPON_OLD, "fw_Item_Deploy_Post", 1);
RegisterHam(Ham_Item_PostFrame, WEAPON_OLD, "fw_Item_PostFrame");
RegisterHam(Ham_Item_AddToPlayer, WEAPON_OLD, "fw_Item_AddToPlayer_Post", 1);
RegisterHam(Ham_Weapon_Reload, WEAPON_OLD, "fw_Weapon_Reload");
RegisterHam(Ham_Weapon_WeaponIdle, WEAPON_OLD, "fw_Weapon_WeaponIdle");
RegisterHam(Ham_Weapon_PrimaryAttack, WEAPON_OLD, "fw_Weapon_PrimaryAttack");
g_fw_TraceAttack[0] = RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack");
g_fw_TraceAttack[1] = RegisterHam(Ham_TraceAttack, "info_target", "fw_TraceAttack");
g_fw_TraceAttack[2] = RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack");
g_fw_TraceAttack[3] = RegisterHam(Ham_TraceAttack, "hostage_entity", "fw_TraceAttack");
fm_ham_hook(false);
register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1);
register_forward(FM_PlaybackEvent, "fw_PlaybackEvent");
register_forward(FM_SetModel, "fw_SetModel");
g_pCvarBarFillTime = register_cvar("stunrifle_barfill_time", "5") // Bar fill time in seconds
g_pCvarRadius = register_cvar("stunrifle_radius", "500") // elec radius
g_pCvarElecDmg = register_cvar("stunrifle_electricity_dmg", "10") // electricity damage - lowest damage for 1 bar only
register_clcmd(WEAPON_NEW, "HookSelect");
g_iMsgID_Weaponlist = get_user_msgid("WeaponList");
}
public plugin_precache()
{
g_AllocString_V = engfunc(EngFunc_AllocString, WEAPON_MODEL_V);
g_AllocString_P = engfunc(EngFunc_AllocString, WEAPON_MODEL_P);
g_AllocString_E = engfunc(EngFunc_AllocString, WEAPON_OLD);
engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_V);
engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_P);
engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_W);
for (new i = 0; i < sizeof g_szSounds; i++) engfunc(EngFunc_PrecacheSound, g_szSounds[i]);
for(new i = 0; i < sizeof WPN_SPRITES;i++) precache_generic(WPN_SPRITES[i]);
g_iLigSpr = precache_model("sprites/lightning.spr");
g_iEffSpr = precache_model("sprites/ef_buffak_hit.spr");
g_iEff2Spr = precache_model("sprites/muzzleflash67.spr");
}
public HookSelect(iPlayer)
{
engclient_cmd(iPlayer, WEAPON_OLD);
}
public give(id)
{
give_weapon_stunrifle(id)
}
public give_weapon_stunrifle(iPlayer)
{
static iEnt; iEnt = engfunc(EngFunc_CreateNamedEntity, g_AllocString_E);
if(iEnt <= 0) return 0;
set_pev(iEnt, pev_spawnflags, SF_NORESPAWN);
set_pev(iEnt, pev_impulse, WEAPON_KEY);
ExecuteHam(Ham_Spawn, iEnt);
UTIL_DropWeapon(iPlayer, 1);
if(!ExecuteHamB(Ham_AddPlayerItem, iPlayer, iEnt)) {
engfunc(EngFunc_RemoveEntity, iEnt);
return 0;
}
ExecuteHamB(Ham_Item_AttachToPlayer, iEnt, iPlayer);
set_pdata_int(iEnt, m_iClip, WEAPON_CLIP, 4);
new iAmmoType = m_rgAmmo +get_pdata_int(iEnt, m_iPrimaryAmmoType, 4);
if(get_pdata_int(iPlayer, m_rgAmmo, 5) < WEAPON_AMMO)
set_pdata_int(iPlayer, iAmmoType, WEAPON_AMMO, 5);
emit_sound(iPlayer, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
g_iStoredEnergy[iPlayer] = 0;
g_bHasStunRifle[iPlayer] = true;
set_task(get_pcvar_float(g_pCvarBarFillTime), "RechargeTask", iPlayer, _, _, "a", 6)
return 1;
}
public plugin_natives()
{
register_native(WEAPON_NATIVE, "give_weapon_stunrifle", 1);
}
public ze_select_item_pre(id, itemid)
{
// Return Available and we will block it in Post, So it dosen't affect other plugins
if (itemid != g_iItemID)
return ZE_ITEM_AVAILABLE
// Available for Humans only, So don't show it for zombies
if (ze_is_user_zombie(id))
return ZE_ITEM_DONT_SHOW
return ZE_ITEM_AVAILABLE
}
public ze_select_item_post(player, itemid)
{
if (itemid != g_iItemID)
return
give_weapon_stunrifle(player)
}
public fw_Item_Deploy_Post(iItem)
{
if(!CustomItem(iItem)) return;
static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, 4);
set_pev_string(iPlayer, pev_viewmodel2, g_AllocString_V);
set_pev_string(iPlayer, pev_weaponmodel2, g_AllocString_P);
if (g_iStoredEnergy[iPlayer] == 0)
{
// Draw A
UTIL_SendWeaponAnim(iPlayer, ANIM_DRAW_A);
emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[1], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
set_pdata_float(iPlayer, m_flNextAttack, ANIM_DRAW_TIME_A, 5);
set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_DRAW_TIME_A, 4);
}
else if (g_iStoredEnergy[iPlayer] > 0 && g_iStoredEnergy[iPlayer] <= 3)
{
// Draw B
UTIL_SendWeaponAnim(iPlayer, ANIM_DRAW_B);
emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[2], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
set_pdata_float(iPlayer, m_flNextAttack, ANIM_DRAW_TIME_B, 5);
set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_DRAW_TIME_B, 4);
}
else if (g_iStoredEnergy[iPlayer] > 3 && g_iStoredEnergy[iPlayer] <= 6)
{
// Draw C
UTIL_SendWeaponAnim(iPlayer, ANIM_DRAW_C);
emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[3], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
set_pdata_float(iPlayer, m_flNextAttack, ANIM_DRAW_TIME_C, 5);
set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_DRAW_TIME_C, 4);
}
}
public fw_Item_PostFrame(iItem)
{
if(!CustomItem(iItem)) return HAM_IGNORED;
static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, 4);
if(get_pdata_int(iItem, m_fInReload, 4) == 1) {
static iClip; iClip = get_pdata_int(iItem, m_iClip, 4);
static iAmmoType; iAmmoType = m_rgAmmo + get_pdata_int(iItem, m_iPrimaryAmmoType, 4);
static iAmmo; iAmmo = get_pdata_int(iPlayer, iAmmoType, 5);
static j; j = min(WEAPON_CLIP - iClip, iAmmo);
set_pdata_int(iItem, m_iClip, iClip+j, 4);
set_pdata_int(iPlayer, iAmmoType, iAmmo-j, 5);
set_pdata_int(iItem, m_fInReload, 0, 4);
}
else switch(get_pdata_int(iItem, m_iWeaponState, 4) ) {
case 0: {
if(get_pdata_float(iItem, m_flNextSecondaryAttack, 4) <= 0.0)
if(pev(iPlayer, pev_button) & IN_ATTACK2) {
set_pdata_int(iPlayer, m_iFOV, get_pdata_int(iPlayer, m_iFOV, 5) == 90 ? 60 : 90);
set_pdata_float(iItem, m_flNextSecondaryAttack, 0.3, 4);
}
}
}
return HAM_IGNORED;
}
public fw_Item_AddToPlayer_Post(iItem, iPlayer)
{
switch(pev(iItem, pev_impulse)) {
case WEAPON_KEY: {
s_weaponlist(iPlayer, true);
g_bHasStunRifle[iPlayer] = true;
if (g_iStoredEnergy[iPlayer] < 6)
{
set_task(101/30.0, "OnReloadFinished", iPlayer);
}
else if (g_iStoredEnergy[iPlayer] == 6)
{
client_print(iPlayer, print_center, "Your Stun Rifle is fully charged!")
}
}
case 0: s_weaponlist(iPlayer, false);
}
}
public ze_user_infected(infected)
{
if (g_bHasStunRifle[infected])
{
g_bHasStunRifle[infected] = false
g_iStoredEnergy[infected] = 0;
}
}
public ze_user_humanized(id)
{
g_bHasStunRifle[id] = false
g_iStoredEnergy[id] = 0;
}
public fw_Weapon_Reload(iItem)
{
if(!CustomItem(iItem)) return HAM_IGNORED;
static iClip; iClip = get_pdata_int(iItem, m_iClip, 4);
if(iClip >= WEAPON_CLIP) return HAM_SUPERCEDE;
static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, 4);
static iAmmoType; iAmmoType = m_rgAmmo + get_pdata_int(iItem, m_iPrimaryAmmoType, 4);
if(get_pdata_int(iPlayer, iAmmoType, 5) <= 0) return HAM_SUPERCEDE
if(get_pdata_int(iPlayer, m_iFOV, 5) != 90) set_pdata_int(iPlayer, m_iFOV, 90, 5);
set_pdata_int(iItem, m_iClip, 0, 4);
ExecuteHam(Ham_Weapon_Reload, iItem);
set_pdata_int(iItem, m_iClip, iClip, 4);
set_pdata_int(iItem, m_fInReload, 1, 4);
g_bReloading[iPlayer] = true;
set_task(3.0, "AttackTask", iPlayer+444)
if (g_iStoredEnergy[iPlayer] == 0)
{
// Reload A
set_pdata_float(iItem, m_flNextPrimaryAttack, ANIM_RELOAD_TIME_A, 4);
set_pdata_float(iItem, m_flNextSecondaryAttack, ANIM_RELOAD_TIME_A, 4);
set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_RELOAD_TIME_A, 4);
set_pdata_float(iPlayer, m_flNextAttack, ANIM_RELOAD_TIME_A, 5);
UTIL_SendWeaponAnim(iPlayer, ANIM_RELOAD_A);
emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[4], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[10], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
}
else if (g_iStoredEnergy[iPlayer] > 0 && g_iStoredEnergy[iPlayer] <= 3)
{
// Reload B
set_pdata_float(iItem, m_flNextPrimaryAttack, ANIM_RELOAD_TIME_B, 4);
set_pdata_float(iItem, m_flNextSecondaryAttack, ANIM_RELOAD_TIME_B, 4);
set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_RELOAD_TIME_B, 4);
set_pdata_float(iPlayer, m_flNextAttack, ANIM_RELOAD_TIME_B, 5);
UTIL_SendWeaponAnim(iPlayer, ANIM_RELOAD_B);
emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[5], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
if (notEmpty(iPlayer))
{
emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[11], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
}
}
else if (g_iStoredEnergy[iPlayer] > 3 && g_iStoredEnergy[iPlayer] <= 6)
{
// Reload C
set_pdata_float(iItem, m_flNextPrimaryAttack, ANIM_RELOAD_TIME_C, 4);
set_pdata_float(iItem, m_flNextSecondaryAttack, ANIM_RELOAD_TIME_C, 4);
set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_RELOAD_TIME_C, 4);
set_pdata_float(iPlayer, m_flNextAttack, ANIM_RELOAD_TIME_C, 5);
UTIL_SendWeaponAnim(iPlayer, ANIM_RELOAD_C);
emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[6], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
if (notEmpty(iPlayer))
{
emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[11], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
}
}
// Set task to recharge the battary
remove_task(iPlayer)
set_task(101/30.0, "OnReloadFinished", iPlayer)
return HAM_SUPERCEDE;
}
public AttackTask(taskid)
{
g_bReloading[taskid - 444] = false;
// After reload reset the stored energy
g_iStoredEnergy[taskid - 444] = 0;
g_iAppearTimes[taskid - 444] = 0;
}
public client_PreThink(id)
{
if (g_bReloading[id] && g_bHasStunRifle[id] && (get_user_weapon(id) == CSW_AK47))
{
if (g_iStoredEnergy[id] == 0)
{
// Reload A
}
else if (g_iStoredEnergy[id] > 0 && g_iStoredEnergy[id] <= 3)
{
// Reload B
static Float:flOrigin[3]
pev(id, pev_origin, flOrigin)
new iVictim = -1;
while ((iVictim = engfunc(EngFunc_FindEntityInSphere, iVictim, flOrigin, get_pcvar_float(g_pCvarRadius))) != 0)
{
if (!is_user_alive(iVictim) || !ze_is_user_zombie(iVictim))
continue
static Float:flVecOrigin[3];
pev(iVictim, pev_origin, flVecOrigin);
ElectricBeam(id, flVecOrigin);
ExecuteHam(Ham_TakeDamage, iVictim, id, id, get_pcvar_float(g_pCvarElecDmg) * g_iStoredEnergy[id], DMG_SLASH);
fm_set_user_rendering(iVictim, kRenderFxGlowShell, 51, 51, 225, kRenderNormal, 10);
set_task(101/30.0, "Delete_Glow", iVictim+4444);
}
}
else if (g_iStoredEnergy[id] > 3 && g_iStoredEnergy[id] <= 6)
{
// Reload C
static Float:flOrigin[3]
pev(id, pev_origin, flOrigin)
new iVictim = -1;
while ((iVictim = engfunc(EngFunc_FindEntityInSphere, iVictim, flOrigin, get_pcvar_float(g_pCvarRadius))) != 0)
{
if (!is_user_alive(iVictim) || !ze_is_user_zombie(iVictim))
continue
static Float:flVecOrigin[3]
pev(iVictim, pev_origin, flVecOrigin)
ElectricBeam(id, flVecOrigin)
ExecuteHam(Ham_TakeDamage, iVictim, id, id, get_pcvar_float(g_pCvarElecDmg) * g_iStoredEnergy[id], DMG_SLASH);
fm_set_user_rendering(iVictim, kRenderFxGlowShell, 51, 51, 225, kRenderNormal, 10);
set_task(101/30.0, "Delete_Glow", iVictim+4444);
}
}
}
}
public Delete_Glow(taskid)
{
new id = taskid - 4444;
fm_set_user_rendering(id);
}
public OnReloadFinished(id)
{
remove_task(id)
set_task(get_pcvar_float(g_pCvarBarFillTime), "RechargeTask", id, _, _, "a", 6)
}
public RechargeTask(id)
{
if (!g_bHasStunRifle[id])
return
// Increase one bar every x time
g_iStoredEnergy[id]++
new szBars[100];
switch(g_iStoredEnergy[id])
{
case 1:
{
szBars = "[ | ]";
}
case 2:
{
szBars = "[ | | ]";
}
case 3:
{
szBars = "[ | | | ]";
}
case 4:
{
szBars = "[ | | | | ]";
}
case 5:
{
szBars = "[ | | | | | ]";
}
case 6:
{
szBars = "[ | | | | | | ]";
}
}
set_dhudmessage(51, 153, 255, -1.0, -0.16, 0, 0.0, get_pcvar_float(g_pCvarBarFillTime) - 0.2)
show_dhudmessage(id, "Stun Rifle Battary: %s", szBars)
if (g_iStoredEnergy[id] == 6)
{
client_print(id, print_center, "Your Stun Rifle is fully charged!")
remove_task(id)
}
}
public fw_Weapon_WeaponIdle(iItem)
{
if(!CustomItem(iItem) || get_pdata_float(iItem, m_flTimeWeaponIdle, 4) > 0.0) return HAM_IGNORED;
static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, 4);
if (g_iStoredEnergy[iPlayer] == 0)
{
// Idle A
UTIL_SendWeaponAnim(iPlayer, ANIM_IDLE_A);
set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_IDLE_TIME_A, 4);
emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[7], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
}
else if (g_iStoredEnergy[iPlayer] > 0 && g_iStoredEnergy[iPlayer] <= 3)
{
// Idle B
UTIL_SendWeaponAnim(iPlayer, ANIM_IDLE_B);
set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_IDLE_TIME_B, 4);
emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[8], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
}
else if (g_iStoredEnergy[iPlayer] > 3 && g_iStoredEnergy[iPlayer] <= 6)
{
// Idle C
UTIL_SendWeaponAnim(iPlayer, ANIM_IDLE_C);
set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_IDLE_TIME_C, 4);
emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[9], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
}
return HAM_SUPERCEDE;
}
public fw_Weapon_PrimaryAttack(iItem)
{
if(!CustomItem(iItem)) return HAM_IGNORED;
static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, 4);
static iFOV; iFOV = (get_pdata_int(iPlayer, m_iFOV, 5) != 90);
if(get_pdata_int(iItem, m_iClip, 4) == 0) {
ExecuteHam(Ham_Weapon_PlayEmptySound, iItem);
set_pdata_float(iItem, m_flNextPrimaryAttack, 0.2, 4);
return HAM_SUPERCEDE;
}
static fw_TraceLine; fw_TraceLine = register_forward(FM_TraceLine, "fw_TraceLine_Post", 1);
fm_ham_hook(true);
state FireBullets: Enabled;
ExecuteHam(Ham_Weapon_PrimaryAttack, iItem);
state FireBullets: Disabled;
unregister_forward(FM_TraceLine, fw_TraceLine, 1);
fm_ham_hook(false);
static Float:vecPunchangle[3];
pev(iPlayer, pev_punchangle, vecPunchangle);
vecPunchangle[0] *= iFOV ? WEAPON_RECOIL_EX : WEAPON_RECOIL;
vecPunchangle[1] *= iFOV ? WEAPON_RECOIL_EX : WEAPON_RECOIL;
vecPunchangle[2] *= iFOV ? WEAPON_RECOIL_EX : WEAPON_RECOIL;
set_pev(iPlayer, pev_punchangle, vecPunchangle);
emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
if (g_iStoredEnergy[iPlayer] == 0)
{
// Idle A
UTIL_SendWeaponAnim(iPlayer, ANIM_ATTACK_A);
set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_SHOOT_TIME_A, 4);
}
else if (g_iStoredEnergy[iPlayer] > 0 && g_iStoredEnergy[iPlayer] <= 3)
{
// Idle B
UTIL_SendWeaponAnim(iPlayer, ANIM_ATTACK_B);
set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_SHOOT_TIME_B, 4);
}
else if (g_iStoredEnergy[iPlayer] > 3 && g_iStoredEnergy[iPlayer] <= 6)
{
// Idle C
UTIL_SendWeaponAnim(iPlayer, ANIM_ATTACK_C);
set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_SHOOT_TIME_C, 4);
}
Make_Muzzleflash(iPlayer)
set_pdata_float(iItem, m_flNextPrimaryAttack, iFOV ? WEAPON_RATE_EX : WEAPON_RATE, 4);
return HAM_SUPERCEDE;
}
public fw_PlaybackEvent() <FireBullets: Enabled> { return FMRES_SUPERCEDE; }
public fw_PlaybackEvent() <FireBullets: Disabled> { return FMRES_IGNORED; }
public fw_PlaybackEvent() <> { return FMRES_IGNORED; }
public fw_TraceAttack(iVictim, iAttacker, Float:flDamage) {
if(!is_user_connected(iAttacker)) return;
static iItem; iItem = get_pdata_cbase(iAttacker, m_pActiveItem, 5);
static iFOV; iFOV = (get_pdata_int(iAttacker, m_iFOV, 5) != 90);
static Float: flWeaponDamage; flWeaponDamage = (iFOV ? WEAPON_DAMAGE_EX : WEAPON_DAMAGE);
if(iItem <= 0 || !CustomItem(iItem)) return;
SetHamParamFloat(3, flDamage * flWeaponDamage);
}
public fw_UpdateClientData_Post(iPlayer, SendWeapons, CD_Handle)
{
if(get_cd(CD_Handle, CD_DeadFlag) != DEAD_NO) return;
static iItem; iItem = get_pdata_cbase(iPlayer, m_pActiveItem, 5);
if(iItem <= 0 || !CustomItem(iItem)) return;
set_cd(CD_Handle, CD_flNextAttack, 999999.0);
}
public fw_SetModel(iEnt)
{
static i, szClassname[32], iItem;
pev(iEnt, pev_classname, szClassname, 31);
if(!equal(szClassname, "weaponbox")) return FMRES_IGNORED;
for(i = 0; i < 6; i++) {
iItem = get_pdata_cbase(iEnt, m_rgpPlayerItems_CWeaponBox + i, 4);
if(iItem > 0 && CustomItem(iItem)) {
engfunc(EngFunc_SetModel, iEnt, WEAPON_MODEL_W);
set_pev(iEnt, pev_body, WEAPON_BODY);
new iPlayer = pev(iEnt, pev_owner);
g_bHasStunRifle[iPlayer] = false;
remove_task(iPlayer)
return FMRES_SUPERCEDE;
}
}
return FMRES_IGNORED;
}
public fw_TraceLine_Post(const Float:flOrigin1[3], const Float:flOrigin2[3], iFrag, iIgnore, tr)
{
if(iFrag & IGNORE_MONSTERS) return FMRES_IGNORED;
static pHit; pHit = get_tr2(tr, TR_pHit);
static Float:flvecEndPos[3]; get_tr2(tr, TR_vecEndPos, flvecEndPos);
if(pHit > 0) {
if(pev(pHit, pev_solid) != SOLID_BSP) return FMRES_IGNORED;
}
engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, flvecEndPos, 0);
write_byte(TE_GUNSHOTDECAL);
engfunc(EngFunc_WriteCoord, flvecEndPos[0]);
engfunc(EngFunc_WriteCoord, flvecEndPos[1]);
engfunc(EngFunc_WriteCoord, flvecEndPos[2]);
write_short(pHit > 0 ? pHit : 0);
write_byte(random_num(41, 45));
message_end();
return FMRES_IGNORED;
}
public fm_ham_hook(bool:on) {
if(on) {
EnableHamForward(g_fw_TraceAttack[0]);
EnableHamForward(g_fw_TraceAttack[1]);
EnableHamForward(g_fw_TraceAttack[2]);
EnableHamForward(g_fw_TraceAttack[3]);
}
else {
DisableHamForward(g_fw_TraceAttack[0]);
DisableHamForward(g_fw_TraceAttack[1]);
DisableHamForward(g_fw_TraceAttack[2]);
DisableHamForward(g_fw_TraceAttack[3]);
}
}
stock UTIL_SendWeaponAnim(iPlayer, iAnim)
{
set_pev(iPlayer, pev_weaponanim, iAnim);
message_begin(MSG_ONE, SVC_WEAPONANIM, _, iPlayer);
write_byte(iAnim);
write_byte(0);
message_end();
}
stock UTIL_DropWeapon(iPlayer, iSlot) {
static iEntity, iNext, szWeaponName[32];
iEntity = get_pdata_cbase(iPlayer, m_rpgPlayerItems + iSlot, 5);
if(iEntity > 0) {
do {
iNext = get_pdata_cbase(iEntity, m_pNext, 4)
if(get_weaponname(get_pdata_int(iEntity, m_iId, 4), szWeaponName, 31)) {
engclient_cmd(iPlayer, "drop", szWeaponName);
}
} while(( iEntity = iNext) > 0);
}
}
stock s_weaponlist(iPlayer, bool:on)
{
message_begin(MSG_ONE, g_iMsgID_Weaponlist, {0,0,0}, iPlayer);
write_string(on ? WEAPON_NEW : WEAPON_OLD);
write_byte(iWeaponList[0]);
write_byte(on ? WEAPON_AMMO : iWeaponList[1]);
write_byte(iWeaponList[2]);
write_byte(iWeaponList[3]);
write_byte(iWeaponList[4]);
write_byte(iWeaponList[5]);
write_byte(iWeaponList[6]);
write_byte(iWeaponList[7]);
message_end();
}
stock ElectricBeam(id, Float:flOrigin[3])
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMENTPOINT)
write_short(id | 0x1000)
engfunc(EngFunc_WriteCoord, flOrigin[0])
engfunc(EngFunc_WriteCoord, flOrigin[1])
engfunc(EngFunc_WriteCoord, flOrigin[2])
write_short(g_iLigSpr)
write_byte(1); // framestart
write_byte(100); // framerate - 5
write_byte(1) // life - 30
write_byte(30); // width
write_byte(random_num(0, 10)); // noise
write_byte(51); // r, g, b
write_byte(51); // r, g, b
write_byte(255); // r, g, b
write_byte(200); // brightness
write_byte(200); // speed
message_end()
if (g_iAppearTimes[id] >= 2)
return
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_EXPLOSION);
engfunc(EngFunc_WriteCoord, flOrigin[0]);
engfunc(EngFunc_WriteCoord, flOrigin[1]);
engfunc(EngFunc_WriteCoord, flOrigin[2]);
write_short(g_iEffSpr);
write_byte(10);
write_byte(10);
write_byte(TE_EXPLFLAG_NOSOUND|TE_EXPLFLAG_NOPARTICLES|TE_EXPLFLAG_NODLIGHTS);
message_end();
g_iAppearTimes[id]++
}
stock notEmpty(id)
{
static Float:flOrigin[3]
pev(id, pev_origin, flOrigin)
new iVictim = -1;
while ((iVictim = engfunc(EngFunc_FindEntityInSphere, iVictim, flOrigin, get_pcvar_float(g_pCvarRadius))) != 0)
{
if (!is_user_alive(iVictim) || !ze_is_user_zombie(iVictim))
continue
return true;
}
return false;
}
public Make_Muzzleflash(id)
{
static Float:Origin[3], TE_FLAG
get_position(id, 32.0, 6.0, -15.0, Origin)
TE_FLAG |= TE_EXPLFLAG_NODLIGHTS
TE_FLAG |= TE_EXPLFLAG_NOSOUND
TE_FLAG |= TE_EXPLFLAG_NOPARTICLES
engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, Origin, id)
write_byte(TE_EXPLOSION)
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2])
write_short(g_iEff2Spr)
write_byte(2)
write_byte(30)
write_byte(TE_FLAG)
message_end()
}
stock get_position(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
}
Code: Select all
#include <zombie_escape>
static const plugin[] = "[ZE] Extra Item: Bazooka";
static const mrocket[] = "models/zombie_escape/zm_bazooka_missile.mdl";
static const mrpg_w[] = "models/zombie_escape/w_zm_bazooka.mdl";
static const mrpg_v[] = "models/zombie_escape/v_zm_bazooka.mdl";
static const mrpg_p[] = "models/zombie_escape/p_zm_bazooka.mdl";
static const sfire[] = "weapons/rocketfire1.wav";
static const sfly[] = "weapons/nuke_fly.wav";
static const shit[] = "weapons/mortarhit.wav";
static const spickup[] = "items/gunpickup2.wav";
new g_itemid;
new gmsg_screenshake, gmsg_death, gmsg_damage, pcvar_delay, pcvar_maxdmg, pcvar_radius, pcvar_map;
new rocketsmoke, explosion, bazsmoke, white;
new bool:has_baz[33], bool:CanShoot[33];
new dmgcount[33], pcvar_dmgforpacks, pcvar_award;
public plugin_init()
{
register_plugin(plugin, "0.6", "Random1");
pcvar_delay = register_cvar("zp_baz_delay", "10.0");
pcvar_maxdmg = register_cvar("zp_baz_dmg", "720");
pcvar_radius = register_cvar("zp_baz_radius", "750");
pcvar_map = register_cvar("zp_baz_map", "0");
pcvar_dmgforpacks = get_cvar_pointer("zp_human_damage_reward");
pcvar_award = register_cvar("zp_baz_awardpacks", "1");
if ( pcvar_dmgforpacks == 0 ) {
set_pcvar_num(pcvar_award, 0); //if we couldn't read the dmg cvar from zp then set a stop state on dmg reward
log_amx("[%s] error reading zp_human_damage_reward cvar from zombie plague, turning award for damage off", plugin);
}
g_itemid = ze_register_item("Bazooka", 65, 0);
register_concmd("zp_bazooka", "give_bazooka", ADMIN_KICK, "<name/@all> gives a bazooka to the spcified target");
register_event("CurWeapon","switch_to_knife","be","1=1","2=29");
register_event("HLTV", "event_HLTV", "a", "1=0", "2=0") // New Round
register_clcmd("drop", "drop_call");
//supports 2 methods of firing, attacking while holding knife and a bind
register_clcmd("baz_fire", "fire_call");
register_forward(FM_PlayerPreThink, "fw_prethink");
register_forward(FM_Touch, "fw_touch");
gmsg_screenshake = get_user_msgid("ScreenShake");
gmsg_death = get_user_msgid("DeathMsg");
gmsg_damage = get_user_msgid("Damage");
}
public event_HLTV()
{
//remove entities regardless of cvar
new rpg_temp = engfunc(EngFunc_FindEntityByString, -1, "classname", "rpg_temp");
while( rpg_temp > 0) {
engfunc(EngFunc_RemoveEntity, rpg_temp);
rpg_temp = engfunc(EngFunc_FindEntityByString, -1, "classname", "rpg_temp");
}
if ( get_pcvar_num(pcvar_map) ) return;
for( new id = 1; id <= 32; id++ )
has_baz[id] = false;
}
public ze_select_item_pre(id, itemid)
{
// This not our item?
if (itemid != g_itemid)
return ZE_ITEM_AVAILABLE
// Available for Humans only, So don't show it for zombies
if (ze_is_user_zombie(id))
return ZE_ITEM_DONT_SHOW
// Finally return that it's available
return ZE_ITEM_AVAILABLE
}
public ze_select_item_post(id, itemid)
{
// This is not our item, Block it here and don't execute the blew code
if (itemid != g_itemid)
return
has_baz[id] = true;
CanShoot[id] = true;
}
public give_bazooka(id,level,cid)
{
if (!cmd_access(id,level,cid,1)) {
console_print(id,"You have no access to that command");
return;
}
if (read_argc() > 2) {
console_print(id,"Too many arguments supplied.");
return;
}
new arg1[32];
read_argv(1, arg1, sizeof(arg1) - 1);
new player = cmd_target(id, arg1, 10);
if ( !player ) {
if ( arg1[0] == '@' ) {
for ( new i = 1; i <= 32; i++ ) {
if ( is_user_connected(i) && !has_baz[i] && !ze_is_user_zombie(i) ) {
has_baz[i] = true;
CanShoot[i] = true;
client_print(i, print_chat, "[ZP BAZ] You now have a bazooka, attack while holding knife(will take %2.1f seconds to reload", get_pcvar_float(pcvar_delay));
}
}
} else {
client_print(id, print_chat, "No Such Player/Team");
return;
}
} else if ( !has_baz[player] && !ze_is_user_zombie(player) ) {
has_baz[player] = true;
CanShoot[player] = true;
client_print(player, print_chat, "[ZP BAZ] You now have a bazooka, attack while holding knife(will take %2.1f seconds to reload", get_pcvar_float(pcvar_delay));
}
}
public ze_user_infected(id, infector)
if ( has_baz[id] )
drop_rpg_temp(id);
public plugin_precache()
{
precache_model(mrocket);
precache_model(mrpg_w);
precache_model(mrpg_v);
precache_model(mrpg_p);
precache_sound(sfire);
precache_sound(sfly);
precache_sound(shit);
precache_sound(spickup);
rocketsmoke = precache_model("sprites/smoke.spr");
explosion = precache_model("sprites/fexplo.spr");
bazsmoke = precache_model("sprites/steam1.spr");
white = precache_model("sprites/white.spr");
}
public switch_to_knife(id)
{
if ( !is_user_alive(id) ) return;
if ( has_baz[id] && CanShoot[id] )
{
set_pev(id, pev_viewmodel2, mrpg_v);
set_pev(id, pev_weaponmodel2, mrpg_p);
}
}
public fw_prethink(id)
{
static button;
button = pev(id, pev_button);
if ( button & IN_ATTACK )
fire_call(id);
}
public fire_call(id)
{
if ( !is_user_alive(id) || !has_baz[id] || !CanShoot[id] ) return;
new weapon = get_user_weapon(id);
if ( weapon == CSW_KNIFE ) fire_rocket(id);
}
fire_rocket(id) {
if ( !CanShoot[id] ) return;
CanShoot[id] = false;
set_task(get_pcvar_float(pcvar_delay), "rpg_reload", id);
engclient_cmd(id, "weapon_knife"); //attempt to force model to reset
new Float:StartOrigin[3], Float:Angle[3];
pev(id, pev_origin, StartOrigin);
pev(id, pev_angles, Angle);
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
set_pev(ent, pev_classname, "rpgrocket");
engfunc(EngFunc_SetModel, ent, mrocket);
set_pev(ent, pev_mins, {-1.0, -1.0, -1.0});
set_pev(ent, pev_maxs, {1.0, 1.0, 1.0});
engfunc(EngFunc_SetOrigin, ent, StartOrigin);
set_pev(ent, pev_angles, Angle);
set_pev(ent, pev_solid, 2);
set_pev(ent, pev_movetype, 5);
set_pev(ent, pev_owner, id);
new Float:nVelocity[3];
velocity_by_aim(id, 1500, nVelocity);
set_pev(ent, pev_velocity, nVelocity);
emit_sound(ent, CHAN_WEAPON, sfire, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
emit_sound(ent, CHAN_VOICE, sfly, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(22);
write_short(ent);
write_short(rocketsmoke);
write_byte(30);
write_byte(3);
write_byte(255);
write_byte(255);
write_byte(255);
write_byte(255);
message_end();
}
//---------------------------------------------------------------------------------------
public rpg_reload(id)
{
CanShoot[id] = true;
if ( get_user_weapon(id) == CSW_KNIFE ) switch_to_knife(id); //sets our model
}
//---------------------------------------------------------------------------------------
public fw_touch(ent, touched)
{
if ( !pev_valid(ent) ) return FMRES_IGNORED;
static entclass[32];
pev(ent, pev_classname, entclass, 31);
if ( equali(entclass, "rpg_temp") )
{
static touchclass[32];
pev(touched, pev_classname, touchclass, 31);
if ( !equali(touchclass, "player") ) return FMRES_IGNORED;
if( !is_user_alive(touched) || ze_is_user_zombie(touched) ) return FMRES_IGNORED;
emit_sound(touched, CHAN_VOICE, spickup, 1.0, ATTN_NORM, 0, PITCH_NORM);
has_baz[touched] = true;
engfunc(EngFunc_RemoveEntity, ent);
return FMRES_HANDLED;
}
else if ( equali(entclass, "rpgrocket") )
{
new Float:EndOrigin[3];
pev(ent, pev_origin, EndOrigin);
new NonFloatEndOrigin[3];
NonFloatEndOrigin[0] = floatround(EndOrigin[0]);
NonFloatEndOrigin[1] = floatround(EndOrigin[1]);
NonFloatEndOrigin[2] = floatround(EndOrigin[2]);
emit_sound(ent, CHAN_WEAPON, shit, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
emit_sound(ent, CHAN_VOICE, shit, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(17);
write_coord(NonFloatEndOrigin[0]);
write_coord(NonFloatEndOrigin[1]);
write_coord(NonFloatEndOrigin[2] + 128);
write_short(explosion);
write_byte(60);
write_byte(255);
message_end();
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(5);
write_coord(NonFloatEndOrigin[0]);
write_coord(NonFloatEndOrigin[1]);
write_coord(NonFloatEndOrigin[2] + 256);
write_short(bazsmoke);
write_byte(125);
write_byte(5);
message_end();
new maxdamage = get_pcvar_num(pcvar_maxdmg);
new damageradius = get_pcvar_num(pcvar_radius);
new PlayerPos[3], distance, damage;
for (new i = 1; i <= 32; i++) {
if ( is_user_alive(i))
{
new id = pev(ent, pev_owner)
if ((ze_is_user_zombie(id)))
continue;
get_user_origin(i, PlayerPos);
distance = get_distance(PlayerPos, NonFloatEndOrigin);
if (distance <= damageradius) {
message_begin(MSG_ONE, gmsg_screenshake, {0,0,0}, i);
write_short(1<<14);
write_short(1<<14);
write_short(1<<14);
message_end();
damage = maxdamage - floatround(floatmul(float(maxdamage), floatdiv(float(distance), float(damageradius))));
new attacker = pev(ent, pev_owner);
baz_damage(i, attacker, damage, "bazooka");
}
}
}
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(21);
write_coord(NonFloatEndOrigin[0]);
write_coord(NonFloatEndOrigin[1]);
write_coord(NonFloatEndOrigin[2]);
write_coord(NonFloatEndOrigin[0]);
write_coord(NonFloatEndOrigin[1]);
write_coord(NonFloatEndOrigin[2] + 320);
write_short(white);
write_byte(0);
write_byte(0);
write_byte(16);
write_byte(128);
write_byte(0);
write_byte(255);
write_byte(255);
write_byte(192);
write_byte(128);
write_byte(0);
message_end();
engfunc(EngFunc_RemoveEntity, ent);
return FMRES_HANDLED;
}
return FMRES_IGNORED;
}
//---------------------------------------------------------------------------------------
public drop_call(id)
{
if ( has_baz[id] && get_user_weapon(id) == CSW_KNIFE )
{
drop_rpg_temp(id);
return PLUGIN_HANDLED; //attempt to block can't drop knife message
}
return PLUGIN_CONTINUE;
}
drop_rpg_temp(id) {
new Float:fAim[3] , Float:fOrigin[3];
velocity_by_aim(id , 64 , fAim);
pev(id , pev_origin , fOrigin);
fOrigin[0] += fAim[0];
fOrigin[1] += fAim[1];
new rpg = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
set_pev(rpg, pev_classname, "rpg_temp");
engfunc(EngFunc_SetModel, rpg, mrpg_w);
set_pev(rpg, pev_mins, { -16.0, -16.0, -16.0 } );
set_pev(rpg, pev_maxs, { 16.0, 16.0, 16.0 } );
set_pev(rpg , pev_solid , 1);
set_pev(rpg , pev_movetype , 6);
engfunc(EngFunc_SetOrigin, rpg, fOrigin);
has_baz[id] = false;
}
//---------------------------------------------------------------------------------------
baz_damage(id, attacker, damage, weaponDescription[])
{
if ( pev(id, pev_takedamage) == DAMAGE_NO ) return;
if ( damage <= 0 ) return;
new userHealth = get_user_health(id);
if (userHealth - damage <= 0 ) {
dmgcount[attacker] += userHealth - damage;
set_msg_block(gmsg_death, BLOCK_SET);
ExecuteHamB(Ham_Killed, id, attacker, 2);
set_msg_block(gmsg_death, BLOCK_NOT);
message_begin(MSG_BROADCAST, gmsg_death);
write_byte(attacker);
write_byte(id);
write_byte(0);
write_string(weaponDescription);
message_end();
set_pev(attacker, pev_frags, float(get_user_frags(attacker) + 1));
new kname[32], vname[32], kauthid[32], vauthid[32], kteam[10], vteam[10];
get_user_name(attacker, kname, 31);
get_user_team(attacker, kteam, 9);
get_user_authid(attacker, kauthid, 31);
get_user_name(id, vname, 31);
get_user_team(id, vteam, 9);
get_user_authid(id, vauthid, 31);
log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
kname, get_user_userid(attacker), kauthid, kteam,
vname, get_user_userid(id), vauthid, vteam, weaponDescription);
}
else {
dmgcount[attacker] += damage;
new origin[3];
get_user_origin(id, origin);
message_begin(MSG_ONE,gmsg_damage,{0,0,0},id);
write_byte(21);
write_byte(20);
write_long(DMG_BLAST);
write_coord(origin[0]);
write_coord(origin[1]);
write_coord(origin[2]);
message_end();
set_pev(id, pev_health, pev(id, pev_health) - float(damage));
}
if ( !get_pcvar_num(pcvar_award) ) return;
new breaker = get_pcvar_num(pcvar_dmgforpacks);
if ( dmgcount[attacker] > breaker )
{
new temp = dmgcount[attacker] / breaker
if ( temp * breaker > dmgcount[attacker] ) return; //should never be possible
dmgcount[attacker] -= temp * breaker;
ze_set_escape_coins( attacker, ze_get_escape_coins(attacker) + temp );
}
}
Code: Select all
include <ze_vip>
#include <fakemeta_util>
#define PLUGIN "[ZE] CSO Laser Minigun"
#define VERSION "1.1"
#define AUTHOR "Asep Khairul Anam"
/**** Changelog 1.1 ****
-> Fixed Bug Laserminigun Charge Mode
-> Fixed Some Crash And Bug
-> Rewrite Code
-> Add To Mode Zombie Escape (Add Extra Items)
*************************/
#define weapon_name "weapon_m249"
#define weapon_new "weapon_laserminigun"
#define VIP_ACCESS ADMIN_LEVEL_H
#define ANIM_IDLE 0
#define ANIM_SHOOT_1 7
#define ANIM_SHOOT_2 8
#define ANIM_RELOAD 5
#define ANIM_DRAW 6
#define IDLE_TIME 1.7
#define DRAW_TIME 2.53
#define RELOAD_TIME 5.23
#define WEAPON_KEY 38591238491
#define Is_CustomItem(%0) (pev(%0,pev_impulse) == WEAPON_KEY)
#define MODEL_V "models/zombie_escape/v_laserminigun.mdl"
#define MODEL_W "models/zombie_escape/w_laserminigun.mdl"
#define MODEL_P "models/zombie_escape/p_laserminiguna.mdl"
#define MODEL_P_CHARGE "models/zombie_escape/p_laserminigunb.mdl"
/******* CONFIGURATION LASERMINIGUN ********/
#define RECOIL 0.4
#define DAMAGE_LOW 0.8
#define DAMAGE_HIGH 1.5
#define DAMAGE_EXTREME 2.0
#define WEAPON_SPEED 0.07
#define DAMAGE_BALL_1 330.0
#define DAMAGE_BALL_2 550.0
#define DAMAGE_BALL_3 770.0
#define EXPLODE_RADIUS 250.0
#define WEAPON_CLIP 125
#define WEAPON_BPAMMO 250
#define SHOOTS_FOR_HIGH 20
#define SHOOTS_FOR_EXTRREME SHOOTS_FOR_HIGH + 20
/**** END OF CONFIGURATION LASERMINIGUN ****/
#define classname_ball "laserminigun_ball"
#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))
#define MUZZLEFLASH_1 "sprites/muzzleflash37.spr"
#define MUZZLEFLASH_2 "sprites/muzzleflash38.spr"
#define MUZZLEFLASH_3 "sprites/muzzleflash39.spr"
#define SPRITE_BALL_1 "sprites/laserminigun_charge_1.spr"
#define SPRITE_BALL_2 "sprites/laserminigun_charge_2.spr"
#define SPRITE_BALL_3 "sprites/laserminigun_charge_3.spr"
new gMaxPlayers, Msg_WeaponList, g_AllocString_V, g_iItemID
new g_ChargeState[512],g_ChargeShots[512], g_AllocString_P, g_AllocString_P_charge
new Float:g_VecEndTrace[3], g_ChargeBall[33], g_ChargeForEntity[33]
new g_ChargeBall1_Explosion, g_ChargeBall2_Explosion, g_ChargeBall3_Explosion
new g_Muzzleflash_Ent1,g_Muzzleflash1
new g_Muzzleflash_Ent2,g_Muzzleflash2
new g_Muzzleflash_Ent3,g_Muzzleflash3
new g_MuzzleflashBall_Ent1,g_MuzzleflashBall1
new g_MuzzleflashBall_Ent2,g_MuzzleflashBall2
new g_MuzzleflashBall_Ent3,g_MuzzleflashBall3
new const Weapon_Sounds[15][] =
{
"weapons/laserminigun-1.wav", // 0
"weapons/laserminigun-charge_start.wav", // 1
"weapons/laserminigun-charge_loop.wav", // 2
"weapons/laserminigun-charge_origin.wav", // 3
"weapons/laserminigun-charge_shoot.wav", // 4
"weapons/laserminigun_idle.wav", // 5
"weapons/laserminigun_draw.wav", // 6
"weapons/laserminigun_clipout2.wav", // 7
"weapons/laserminigun_clipout1.wav", // 8
"weapons/laserminigun_clipin2.wav", // 9
"weapons/laserminigun_clipin1.wav", // 10
"weapons/laserminigun_charge_end.wav", // 11
"weapons/laserminigun_exp1.wav", // 12
"weapons/laserminigun_exp2.wav", // 13
"weapons/laserminigun_exp3.wav" // 14
}
enum
{
STATE_LOW = 0,
STATE_HIGH,
STATE_EXTREME,
STATE_CHARGE
}
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam(Ham_Item_Deploy,weapon_name,"HookHam_Weapon_Deploy",1)
RegisterHam(Ham_Item_AddToPlayer,weapon_name,"HookHam_Weapon_Add",1)
RegisterHam(Ham_Item_PostFrame,weapon_name,"HookHam_Weapon_Frame",0)
g_iItemID = ze_register_item("Laser MiniGun \r(V.I.P)", 70, 0)
RegisterHam(Ham_Weapon_Reload,weapon_name,"HookHam_Weapon_Reload",0)
RegisterHam(Ham_Weapon_WeaponIdle,weapon_name,"HookHam_Weapon_Idle",0)
RegisterHam(Ham_Weapon_PrimaryAttack,weapon_name,"HookHam_Weapon_PrimaryAttack",0)
RegisterHam(Ham_TakeDamage,"player","HookHam_TakeDamage")
register_forward(FM_SetModel,"HookFm_SetModel")
register_forward(FM_AddToFullPack,"fw_AddToFullPack_post",1)
register_forward(FM_CheckVisibility,"fw_CheckVisibility")
register_forward(FM_UpdateClientData,"HookFm_UpdateClientData",1)
register_touch("*", classname_ball, "BallTouch")
gMaxPlayers = get_maxplayers()
Msg_WeaponList = get_user_msgid("WeaponList");
register_clcmd(weapon_new,"hook_item")
}
public plugin_precache()
{
engfunc(EngFunc_PrecacheModel, MODEL_W)
engfunc(EngFunc_PrecacheModel, MODEL_V)
engfunc(EngFunc_PrecacheModel, MODEL_P)
engfunc(EngFunc_PrecacheModel, MODEL_P_CHARGE)
engfunc(EngFunc_PrecacheModel, SPRITE_BALL_1)
engfunc(EngFunc_PrecacheModel, SPRITE_BALL_2)
engfunc(EngFunc_PrecacheModel, SPRITE_BALL_3)
g_AllocString_V = engfunc(EngFunc_AllocString, MODEL_V)
g_AllocString_P = engfunc(EngFunc_AllocString, MODEL_P)
g_AllocString_P_charge = engfunc(EngFunc_AllocString, MODEL_P_CHARGE)
for(new i = 0; i < sizeof(Weapon_Sounds); i++)
engfunc(EngFunc_PrecacheSound,Weapon_Sounds[i])
g_ChargeBall1_Explosion = engfunc(EngFunc_PrecacheModel,"sprites/laserminigun_explode_1.spr")
g_ChargeBall2_Explosion = engfunc(EngFunc_PrecacheModel,"sprites/laserminigun_explode_2.spr")
g_ChargeBall3_Explosion = engfunc(EngFunc_PrecacheModel,"sprites/laserminigun_explode_3.spr")
g_Muzzleflash_Ent1 = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
precache_model(MUZZLEFLASH_1)
engfunc(EngFunc_SetModel,g_Muzzleflash_Ent1,MUZZLEFLASH_1)
set_pev(g_Muzzleflash_Ent1,pev_scale,0.1)
set_pev(g_Muzzleflash_Ent1,pev_rendermode,kRenderTransTexture)
set_pev(g_Muzzleflash_Ent1,pev_renderamt,0.0)
g_Muzzleflash_Ent2 = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
precache_model(MUZZLEFLASH_2)
engfunc(EngFunc_SetModel,g_Muzzleflash_Ent2,MUZZLEFLASH_2)
set_pev(g_Muzzleflash_Ent2,pev_scale,0.1)
set_pev(g_Muzzleflash_Ent2,pev_rendermode,kRenderTransTexture)
set_pev(g_Muzzleflash_Ent2,pev_renderamt,0.0)
g_Muzzleflash_Ent3 = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
precache_model(MUZZLEFLASH_3)
engfunc(EngFunc_SetModel,g_Muzzleflash_Ent3,MUZZLEFLASH_3)
set_pev(g_Muzzleflash_Ent3,pev_scale,0.1)
set_pev(g_Muzzleflash_Ent3,pev_rendermode,kRenderTransTexture)
set_pev(g_Muzzleflash_Ent3,pev_renderamt,0.0)
g_MuzzleflashBall_Ent1 = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
engfunc(EngFunc_SetModel,g_MuzzleflashBall_Ent1,SPRITE_BALL_1)
set_pev(g_MuzzleflashBall_Ent1,pev_scale,0.1)
set_pev(g_MuzzleflashBall_Ent1,pev_rendermode,kRenderTransTexture)
set_pev(g_MuzzleflashBall_Ent1,pev_renderamt,0.0)
set_pev(g_MuzzleflashBall_Ent1,pev_fuser1, 0.1)
g_MuzzleflashBall_Ent2 = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
engfunc(EngFunc_SetModel,g_MuzzleflashBall_Ent2,SPRITE_BALL_2)
set_pev(g_MuzzleflashBall_Ent2,pev_scale,0.2)
set_pev(g_MuzzleflashBall_Ent2,pev_rendermode,kRenderTransTexture)
set_pev(g_MuzzleflashBall_Ent2,pev_renderamt,0.0)
set_pev(g_MuzzleflashBall_Ent2,pev_fuser1, 0.2)
g_MuzzleflashBall_Ent3 = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
engfunc(EngFunc_SetModel,g_MuzzleflashBall_Ent3,SPRITE_BALL_3)
set_pev(g_MuzzleflashBall_Ent3,pev_scale,0.25)
set_pev(g_MuzzleflashBall_Ent3,pev_rendermode,kRenderTransTexture)
set_pev(g_MuzzleflashBall_Ent3,pev_renderamt,0.0)
set_pev(g_MuzzleflashBall_Ent3,pev_fuser1, 0.25)
engfunc(EngFunc_PrecacheGeneric,MUZZLEFLASH_1)
engfunc(EngFunc_PrecacheGeneric,MUZZLEFLASH_2)
engfunc(EngFunc_PrecacheGeneric,MUZZLEFLASH_3)
engfunc(EngFunc_PrecacheGeneric,"sprites/640hud133.spr")
engfunc(EngFunc_PrecacheGeneric,"sprites/640hud14.spr")
engfunc(EngFunc_PrecacheGeneric,"sprites/weapon_laserminigun.txt")
register_forward(FM_Spawn,"HookFm_Spawn",0)
}
public plugin_natives()
{
register_native("give_laserminigun","get_item", 1)
}
public ze_user_infected(id)
{
remove_laserminigun(id)
}
public ze_user_humanized(id)
{
remove_laserminigun(id)
}
public remove_laserminigun(id)
{
g_ChargeBall[id] = 0
g_ChargeForEntity[id] = 0
UnSet_BitVar(g_MuzzleflashBall1,id)
UnSet_BitVar(g_MuzzleflashBall2,id)
UnSet_BitVar(g_MuzzleflashBall3,id)
}
public ze_select_item_pre(id, itemid)
{
// This not our item?
if (itemid != g_iItemID)
return ZE_ITEM_AVAILABLE
// Available for Humans only, So don't show it for zombies
if (ze_is_user_zombie(id))
return ZE_ITEM_DONT_SHOW
// Player Not VIP?
if (!(ze_get_vip_flags(id) & VIP_A))
return ZE_ITEM_DONT_SHOW
// Finally return that it's available
return ZE_ITEM_AVAILABLE
}
public ze_select_item_post(id, itemid)
{
// This is not our item, Block it here and don't execute the blew code
if (itemid != g_iItemID)
return
get_item(id)
}
public client_command(id)
{
new Command[32];read_argv(0,Command,charsmax(Command));
new ent = fm_find_ent_by_owner(-1,weapon_name,id)
if(equali(Command,"weapon_",7) && g_ChargeBall[id] && Is_CustomItem(ent) || equali(Command,"lastinv") && g_ChargeBall[id] && Is_CustomItem(ent))
{
client_print(id,print_center,"Saat Ini Senjata Tidak Bisa Di Ganti")
return PLUGIN_HANDLED;
}
else if(equali(Command,"drop") && g_ChargeBall[id] && Is_CustomItem(ent))
{
client_print(id,print_center,"Saat Ini Senjata Tidak Bisa Di Drop")
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
public get_item(id)
{
UTIL_DropWeapon(id,1)
new weapon = make_weapon()
if(weapon <= 0)
return
if(!ExecuteHamB(Ham_AddPlayerItem,id,weapon))
{
engfunc(EngFunc_RemoveEntity,weapon)
return
}
ExecuteHam(Ham_Item_AttachToPlayer,weapon,id)
new ammotype = 376 + get_pdata_int(weapon,49,4)
new ammo = get_pdata_int(id,ammotype,5)
if(ammo < WEAPON_BPAMMO)
set_pdata_int(id, ammotype, WEAPON_BPAMMO, 5)
set_pdata_int(weapon, 51, WEAPON_CLIP, 4)
emit_sound(id,CHAN_ITEM,"items/gunpickup2.wav",VOL_NORM,ATTN_NORM,0,PITCH_NORM)
g_ChargeState[weapon] = STATE_LOW
g_ChargeShots[weapon] = 0
g_ChargeBall[id] = 0
g_ChargeForEntity[id] = 0
UnSet_BitVar(g_MuzzleflashBall1,id)
UnSet_BitVar(g_MuzzleflashBall2,id)
UnSet_BitVar(g_MuzzleflashBall3,id)
}
public hook_item(id)
{
engclient_cmd(id,weapon_name)
return PLUGIN_HANDLED
}
public fw_AddToFullPack_post(esState,iE,ent,iHost,iHostFlags,iPlayer,pSet)
{
if(ent == g_Muzzleflash_Ent1)
{
if(Get_BitVar(g_Muzzleflash1,iHost))
{
set_es(esState,ES_Frame,float(random_num(0,2)))
set_es(esState,ES_RenderMode,kRenderTransAdd)
set_es(esState,ES_RenderAmt,255.0)
UnSet_BitVar(g_Muzzleflash1,iHost)
}
set_es(esState,ES_Skin,iHost)
set_es(esState,ES_Body,1)
set_es(esState,ES_AimEnt,iHost)
set_es(esState,ES_MoveType,MOVETYPE_FOLLOW)
}
if(ent == g_Muzzleflash_Ent2)
{
if(Get_BitVar(g_Muzzleflash2,iHost))
{
set_es(esState,ES_Frame,float(random_num(0,2)))
set_es(esState,ES_RenderMode,kRenderTransAdd)
set_es(esState,ES_RenderAmt,255.0)
UnSet_BitVar(g_Muzzleflash2,iHost)
}
set_es(esState,ES_Skin,iHost)
set_es(esState,ES_Body,1)
set_es(esState,ES_AimEnt,iHost)
set_es(esState,ES_MoveType,MOVETYPE_FOLLOW)
}
if(ent == g_Muzzleflash_Ent3)
{
if(Get_BitVar(g_Muzzleflash3,iHost))
{
set_es(esState,ES_Frame,float(random_num(0,2)))
set_es(esState,ES_RenderMode,kRenderTransAdd)
set_es(esState,ES_RenderAmt,255.0)
UnSet_BitVar(g_Muzzleflash3,iHost)
}
set_es(esState,ES_Skin,iHost)
set_es(esState,ES_Body,1)
set_es(esState,ES_AimEnt,iHost)
set_es(esState,ES_MoveType,MOVETYPE_FOLLOW)
}
if(ent == g_MuzzleflashBall_Ent1)
{
if(Get_BitVar(g_MuzzleflashBall1,iHost))
{
set_es(esState,ES_Frame,float(random_num(0,8)))
set_es(esState,ES_RenderMode,kRenderTransAdd)
set_es(esState,ES_RenderAmt,240.0)
}
set_es(esState,ES_Skin,iHost)
set_es(esState,ES_Body,1)
set_es(esState,ES_AimEnt,iHost)
set_es(esState,ES_MoveType,MOVETYPE_FOLLOW)
}
if(ent == g_MuzzleflashBall_Ent2)
{
if(Get_BitVar(g_MuzzleflashBall2,iHost))
{
set_es(esState,ES_Frame,float(random_num(0,8)))
set_es(esState,ES_RenderMode,kRenderTransAdd)
set_es(esState,ES_RenderAmt,240.0)
}
set_es(esState,ES_Skin,iHost)
set_es(esState,ES_Body,1)
set_es(esState,ES_AimEnt,iHost)
set_es(esState,ES_MoveType,MOVETYPE_FOLLOW)
}
if(ent == g_MuzzleflashBall_Ent3)
{
if(Get_BitVar(g_MuzzleflashBall3,iHost))
{
set_es(esState,ES_Frame,float(random_num(0,8)))
set_es(esState,ES_RenderMode,kRenderTransAdd)
set_es(esState,ES_RenderAmt,240.0)
}
set_es(esState,ES_Skin,iHost)
set_es(esState,ES_Body,1)
set_es(esState,ES_AimEnt,iHost)
set_es(esState,ES_MoveType,MOVETYPE_FOLLOW)
}
}
public fw_CheckVisibility(entity,pSet)
{
if(entity == g_Muzzleflash_Ent1 || entity == g_Muzzleflash_Ent2 || entity == g_Muzzleflash_Ent3)
{
forward_return(FMV_CELL,1)
return FMRES_SUPERCEDE
}
else if(entity == g_MuzzleflashBall_Ent1 || entity == g_MuzzleflashBall_Ent2 || entity == g_MuzzleflashBall_Ent3)
{
forward_return(FMV_CELL,1)
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}
public HookHam_Weapon_Deploy(ent)
{
if(!Is_CustomItem(ent))
return HAM_IGNORED
static id
id = get_pdata_cbase(ent,41,4)
set_pev_string(id,pev_viewmodel2, g_AllocString_V)
set_pev_string(id,pev_weaponmodel2, g_AllocString_P)
set_pdata_float(ent,46,DRAW_TIME,4)
set_pdata_float(ent,47,DRAW_TIME,4)
set_pdata_float(ent,48,DRAW_TIME,4)
Play_WeaponAnim(id,ANIM_DRAW)
set_pdata_string(id,1968,"m249",-1,20)
Weaponlist(id, true)
return HAM_IGNORED
}
public HookHam_Weapon_Add(ent,id)
{
switch(pev(ent,pev_impulse))
{
case WEAPON_KEY: Weaponlist(id,true)
case 0: Weaponlist(id,false)
}
return HAM_IGNORED
}
public MakeBall(id)
{
new ent = create_entity("env_sprite"),Float:f_origin[3],Float:f_vec[3]
set_pev(ent,pev_classname,classname_ball)
pev(id,pev_origin,f_origin)
velocity_by_aim(id,35,f_vec)
for(new i=0;i<3;i++){ f_origin[i]+=f_vec[i];f_vec[i]*=40.0;}
f_origin[2] += (pev(id,pev_flags)&FL_DUCKING)?2.0:10.0;
set_pev(ent,pev_origin,f_origin)
set_pev(ent,pev_velocity,f_vec)
set_pev(ent,pev_solid,SOLID_BBOX)
set_pev(ent,pev_movetype,MOVETYPE_FLY)
if(g_ChargeForEntity[id] == 1)
{
set_pev(ent, pev_scale, 0.2)
entity_set_model(ent,SPRITE_BALL_1)
}
else if(g_ChargeForEntity[id] == 2)
{
set_pev(ent, pev_scale, 0.25)
entity_set_model(ent,SPRITE_BALL_1)
}
else if(g_ChargeForEntity[id] == 3)
{
set_pev(ent, pev_scale, 0.27)
entity_set_model(ent,SPRITE_BALL_2)
}
else if(g_ChargeForEntity[id] == 4)
{
set_pev(ent, pev_scale, 0.32)
entity_set_model(ent,SPRITE_BALL_3)
}
set_pev(ent,pev_mins,Float:{-4.0,-4.0,-4.0})
set_pev(ent,pev_maxs,Float:{4.0,4.0,4.0})
set_pev(ent,pev_owner,id)
set_pev(ent,pev_rendermode,kRenderTransAdd)
set_pev(ent,pev_renderamt,255.0)
pev(id,pev_v_angle,f_vec)
set_pev(ent,pev_v_angle,f_vec)
}
public BallTouch(id, ent)
{
new Float:origin[3],Float:f_vec[3]
pev(ent, pev_origin, origin)
velocity_by_aim(ent,-15,f_vec)
for(new i = 0; i < 3; i++)
origin[i] += f_vec[i]
static classnameptd[32]
pev(id, pev_classname, classnameptd, 31)
if(equali(classnameptd, "func_breakable"))
ExecuteHamB(Ham_TakeDamage, id, 0, 0, 100.0, DMG_GENERIC)
BallSprites(ent, origin)
BallDamage(ent)
}
public BallSprites(ent, Float:origin[3])
{
static owner
owner = pev(ent, pev_owner)
if(g_ChargeForEntity[owner] == 1)
{
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_SPRITE);
write_coord(floatround(origin[0]))
write_coord(floatround(origin[1]))
write_coord(floatround(origin[2] + 40.0))
write_short(g_ChargeBall1_Explosion)
write_byte(30)
write_byte(225)
message_end()
emit_sound(ent, CHAN_ITEM, Weapon_Sounds[13], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
else if(g_ChargeForEntity[owner] == 2)
{
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_SPRITE);
write_coord(floatround(origin[0]))
write_coord(floatround(origin[1]))
write_coord(floatround(origin[2] + 40.0))
write_short(g_ChargeBall1_Explosion)
write_byte(30)
write_byte(225)
message_end()
emit_sound(ent, CHAN_ITEM, Weapon_Sounds[12], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
else if(g_ChargeForEntity[owner] == 3)
{
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_SPRITE);
write_coord(floatround(origin[0]))
write_coord(floatround(origin[1]))
write_coord(floatround(origin[2] + 40.0))
write_short(g_ChargeBall2_Explosion)
write_byte(30)
write_byte(225)
message_end()
emit_sound(ent, CHAN_ITEM, Weapon_Sounds[13], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
else if(g_ChargeForEntity[owner] == 4)
{
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_SPRITE)
write_coord(floatround(origin[0]))
write_coord(floatround(origin[1]))
write_coord(floatround(origin[2] + 40.0))
write_short(g_ChargeBall3_Explosion)
write_byte(30)
write_byte(225)
message_end()
emit_sound(ent, CHAN_ITEM, Weapon_Sounds[14], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}
public BallDamage(ent)
{
static owner, attacker
owner = pev(ent, pev_owner)
if(!is_user_alive(owner) || ze_is_user_zombie(owner))
{
attacker = 0;
return
}
else attacker = owner
for(new i = 0; i < gMaxPlayers; i++)
{
if(i == attacker)
continue
if(!is_user_alive(i))
continue
if(!ze_is_user_zombie(i))
continue
if(entity_range(i, ent) > EXPLODE_RADIUS)
continue
if(g_ChargeForEntity[attacker] == 1) ExecuteHamB(Ham_TakeDamage,i,0,attacker,DAMAGE_BALL_1,DMG_BULLET)
else if(g_ChargeForEntity[attacker] == 2) ExecuteHamB(Ham_TakeDamage,i,0,attacker,DAMAGE_BALL_1,DMG_BULLET)
else if(g_ChargeForEntity[attacker] == 3) ExecuteHamB(Ham_TakeDamage,i,0,attacker,DAMAGE_BALL_2,DMG_BULLET)
else if(g_ChargeForEntity[attacker] == 4) ExecuteHamB(Ham_TakeDamage,i,0,attacker,DAMAGE_BALL_3,DMG_BULLET)
}
remove_entity(ent)
}
public HookHam_Weapon_Frame(ent)
{
if(!Is_CustomItem(ent))
return HAM_IGNORED
static id
id = get_pdata_cbase(ent,41,4)
if(get_pdata_int(ent,54,4))
{
if(get_pdata_float(ent,46,4) >= 0.0)
return HAM_IGNORED
static clip,ammotype,ammo,j
clip = get_pdata_int(ent,51,4)
ammotype = 376 + get_pdata_int(ent,49,4)
ammo = get_pdata_int(id,ammotype,5)
j = min(WEAPON_CLIP-clip,ammo)
set_pdata_int(ent, 51, clip+j, 4)
set_pdata_int(id, ammotype, ammo-j, 5)
set_pdata_int(ent, 54, 0, 4)
}
if(g_ChargeShots[ent] < SHOOTS_FOR_HIGH) g_ChargeState[ent] = STATE_LOW
else if(g_ChargeShots[ent] >= SHOOTS_FOR_HIGH && g_ChargeShots[ent] < SHOOTS_FOR_EXTRREME) g_ChargeState[ent] = STATE_HIGH
else if(g_ChargeShots[ent] >= SHOOTS_FOR_EXTRREME) g_ChargeState[ent] = STATE_EXTREME
if(g_ChargeBall[id]) g_ChargeState[ent] = STATE_CHARGE
if(g_ChargeShots[ent] > 0 && !(pev(id,pev_button) & IN_ATTACK) &&!g_ChargeBall[id])
g_ChargeShots[ent]--
static iButton;iButton = pev(id,pev_button)
g_ChargeBall[id] = pev(ent, pev_iuser1)
new Float:fFinshTime, Float:ScaleNew, Float:ScaleDelay[33]
pev(ent,pev_fuser1,fFinshTime)
static ammo
ammo = get_pdata_int(ent,51,4)
if(iButton & IN_ATTACK2)
{
if(get_pdata_float(ent, 46, 4) >= 0.0)
return HAM_IGNORED
if(ammo == 0)
return HAM_IGNORED
g_ChargeState[ent] = STATE_CHARGE
set_pev_string(id,pev_weaponmodel2,g_AllocString_P_charge)
if(!g_ChargeBall[id])
{
g_ChargeBall[id] = 1
fFinshTime = get_gametime()+1.0
Play_WeaponAnim(id, 1)
emit_sound(ent, CHAN_ITEM, Weapon_Sounds[3], 1.0, ATTN_NORM, 0, PITCH_NORM)
set_pdata_float(ent, 48, 1.0, 4)
set_pdata_float(ent, 46, 1.0, 4)
set_pev(ent,pev_iuser1,g_ChargeBall[id])
if(get_gametime() - 0.01 > ScaleDelay[id])
{
pev(g_MuzzleflashBall_Ent1, pev_scale, ScaleNew)
ScaleNew += 0.01
set_pev(g_MuzzleflashBall_Ent1, pev_scale, ScaleNew)
ScaleDelay[id] = get_gametime()
}
set_pev(ent, pev_fuser1, fFinshTime)
Set_BitVar(g_MuzzleflashBall1,id)
UnSet_BitVar(g_MuzzleflashBall2,id)
UnSet_BitVar(g_MuzzleflashBall3,id)
}
else if(get_gametime() > fFinshTime && g_ChargeBall[id] == 1)
{
g_ChargeBall[id] = 2;
fFinshTime = get_gametime()+3.0
Play_WeaponAnim(id,2)
emit_sound(ent, CHAN_ITEM, Weapon_Sounds[1], 1.0, ATTN_NORM, 0, PITCH_NORM)
set_pdata_float(ent, 48, 1.25, 4)
set_pdata_float(ent, 46, 1.25, 4)
set_pev(ent,pev_iuser1,g_ChargeBall[id])
if(get_gametime() - 0.01 > ScaleDelay[id])
{
pev(g_MuzzleflashBall_Ent1, pev_scale, ScaleNew)
ScaleNew += 0.02
set_pev(g_MuzzleflashBall_Ent1, pev_scale, ScaleNew)
ScaleDelay[id] = get_gametime()
}
Set_BitVar(g_MuzzleflashBall1,id)
UnSet_BitVar(g_MuzzleflashBall2,id)
UnSet_BitVar(g_MuzzleflashBall3,id)
}
else if(get_gametime() > fFinshTime && g_ChargeBall[id] == 2)
{
g_ChargeBall[id] = 3
fFinshTime = get_gametime()+3.0
set_pdata_float(ent, 48, 1.5, 4)
set_pdata_float(ent, 46, 1.5, 4)
set_pev(ent,pev_iuser1,g_ChargeBall[id])
if(get_gametime() - 0.01 > ScaleDelay[id])
{
pev(g_MuzzleflashBall_Ent1, pev_scale, ScaleNew)
ScaleNew += 0.05
set_pev(g_MuzzleflashBall_Ent1, pev_scale, ScaleNew)
ScaleDelay[id] = get_gametime()
}
UnSet_BitVar(g_MuzzleflashBall1,id)
Set_BitVar(g_MuzzleflashBall2,id)
UnSet_BitVar(g_MuzzleflashBall3,id)
}
else if(get_gametime() > fFinshTime && g_ChargeBall[id] == 3)
{
g_ChargeBall[id] = 4
fFinshTime = get_gametime() + 200.0
Play_WeaponAnim(id, 3)
emit_sound(ent, CHAN_ITEM, Weapon_Sounds[2], 1.0, ATTN_NORM, 0, PITCH_NORM)
set_pdata_float(ent, 48, 250.0, 4)
set_pdata_float(ent, 46, 250.0, 4)
set_pev(ent,pev_iuser1,g_ChargeBall[id])
if(get_gametime() - 0.01 > ScaleDelay[id])
{
pev(g_MuzzleflashBall_Ent1, pev_scale, ScaleNew)
ScaleNew += 0.08
set_pev(g_MuzzleflashBall_Ent1, pev_scale, ScaleNew)
ScaleDelay[id] = get_gametime()
}
set_pev(ent, pev_fuser1, fFinshTime)
UnSet_BitVar(g_MuzzleflashBall1,id)
UnSet_BitVar(g_MuzzleflashBall2,id)
Set_BitVar(g_MuzzleflashBall3,id)
}
iButton &= ~IN_ATTACK2;
set_pev(id,pev_button,iButton)
}
else
{
switch(g_ChargeBall[id])
{
case 1:
{
Play_WeaponAnim(id,4)
emit_sound(ent, CHAN_ITEM, Weapon_Sounds[4], 1.0, ATTN_NORM, 0, PITCH_NORM)
set_pdata_float(ent,48,1.63,4)
set_pdata_float(ent,46,1.0,4)
UnSet_BitVar(g_MuzzleflashBall1,id)
UnSet_BitVar(g_MuzzleflashBall2,id)
UnSet_BitVar(g_MuzzleflashBall3,id)
g_ChargeState[ent] = STATE_LOW
g_ChargeShots[ent] = 0
g_ChargeForEntity[id] = g_ChargeBall[id]
set_pev_string(id,pev_weaponmodel2,g_AllocString_P)
MakeBall(id)
if(ammo > 19) set_pdata_int(ent, 51, ammo - 20, 4)
else set_pdata_int(ent,51, 0, 4)
}
case 2:
{
Play_WeaponAnim(id,4);
emit_sound(ent, CHAN_ITEM, Weapon_Sounds[4], 1.0, ATTN_NORM, 0, PITCH_NORM)
set_pdata_float(ent,48,1.63,4)
set_pdata_float(ent,46,1.0,4)
UnSet_BitVar(g_MuzzleflashBall1,id)
UnSet_BitVar(g_MuzzleflashBall2,id)
UnSet_BitVar(g_MuzzleflashBall3,id)
g_ChargeState[ent] = STATE_LOW
g_ChargeShots[ent] = 0
g_ChargeForEntity[id] = g_ChargeBall[id]
set_pev_string(id,pev_weaponmodel2,g_AllocString_P)
MakeBall(id)
if(ammo > 19) set_pdata_int(ent, 51, ammo - 20, 4)
else set_pdata_int(ent,51, 0, 4)
}
case 3:
{
Play_WeaponAnim(id,4)
emit_sound(ent, CHAN_ITEM, Weapon_Sounds[4], 1.0, ATTN_NORM, 0, PITCH_NORM)
set_pdata_float(ent,48,1.63,4)
set_pdata_float(ent,46,1.0,4)
UnSet_BitVar(g_MuzzleflashBall1,id)
UnSet_BitVar(g_MuzzleflashBall2,id)
UnSet_BitVar(g_MuzzleflashBall3,id)
g_ChargeState[ent] = STATE_LOW
g_ChargeShots[ent] = 0
g_ChargeForEntity[id] = g_ChargeBall[id]
set_pev_string(id,pev_weaponmodel2,g_AllocString_P)
MakeBall(id)
if(ammo > 19) set_pdata_int(ent, 51, ammo - 20, 4)
else set_pdata_int(ent,51, 0, 4)
}
case 4:
{
Play_WeaponAnim(id,4)
emit_sound(ent, CHAN_ITEM, Weapon_Sounds[4], 1.0, ATTN_NORM, 0, PITCH_NORM)
set_pdata_float(ent,48,1.63,4)
set_pdata_float(ent,46,1.0,4)
UnSet_BitVar(g_MuzzleflashBall1,id)
UnSet_BitVar(g_MuzzleflashBall2,id)
UnSet_BitVar(g_MuzzleflashBall3,id)
g_ChargeState[ent] = STATE_LOW
g_ChargeShots[ent] = 0
g_ChargeForEntity[id] = g_ChargeBall[id]
set_pev_string(id,pev_weaponmodel2,g_AllocString_P)
MakeBall(id)
if(ammo > 19) set_pdata_int(ent, 51, ammo - 20, 4)
else set_pdata_int(ent,51, 0, 4)
}
}
g_ChargeBall[id] = 0
new Float:ResetScale[3]
pev(g_MuzzleflashBall_Ent1, pev_fuser1, ResetScale[0])
set_pev(g_MuzzleflashBall_Ent1, pev_scale, ResetScale[0])
pev(g_MuzzleflashBall_Ent2, pev_fuser1, ResetScale[1])
set_pev(g_MuzzleflashBall_Ent2, pev_scale, ResetScale[1])
pev(g_MuzzleflashBall_Ent3, pev_fuser1, ResetScale[2])
set_pev(g_MuzzleflashBall_Ent3, pev_scale, ResetScale[2])
set_pev_string(id,pev_weaponmodel2,g_AllocString_P)
set_pev(ent,pev_iuser1,g_ChargeBall[id])
}
return HAM_IGNORED
}
public HookHam_Weapon_Reload(ent)
{
if(!Is_CustomItem(ent))
return HAM_IGNORED
static clip
clip = get_pdata_int(ent,51,4)
if(clip >= WEAPON_CLIP)
return HAM_SUPERCEDE
static id
id = get_pdata_cbase(ent,41,4)
if(get_pdata_int(id, 376 + get_pdata_int(ent,49,4), 5) <= 0)
return HAM_SUPERCEDE
set_pdata_int(ent, 51, 0,4)
ExecuteHam(Ham_Weapon_Reload, ent)
set_pdata_int(ent,51, clip, 4)
set_pdata_int(ent,54, 1,4)
set_pdata_float(ent, 46,RELOAD_TIME,4)
set_pdata_float(ent, 47,RELOAD_TIME,4)
set_pdata_float(ent, 48,RELOAD_TIME,4)
set_pdata_float(id, 83, RELOAD_TIME,5)
Play_WeaponAnim(id, ANIM_RELOAD)
return HAM_SUPERCEDE;
}
public HookHam_Weapon_Idle(ent)
{
if(!Is_CustomItem(ent))
return HAM_IGNORED
if(get_pdata_float(ent, 48, 4) > 0.0)
return HAM_IGNORED
set_pdata_float(ent,48,IDLE_TIME,4)
Play_WeaponAnim(get_pdata_cbase(ent, 41, 4), ANIM_IDLE)
return HAM_SUPERCEDE
}
public HookHam_Weapon_PrimaryAttack(ent)
{
if(!Is_CustomItem(ent))
return HAM_IGNORED
static ammo
ammo = get_pdata_int(ent,51,4)
if(ammo <= 0)
{
ExecuteHam(Ham_Weapon_PlayEmptySound,ent);
set_pdata_float(ent,46,WEAPON_SPEED,4)
return HAM_SUPERCEDE
}
static id; id = get_pdata_cbase(ent,41,4)
static Float:user_punchangle[3];pev(id,pev_punchangle,user_punchangle)
static fm_hooktrace;fm_hooktrace=register_forward(FM_TraceLine,"HookFm_TraceLine",true)
static fm_playbackevent;fm_playbackevent=register_forward(FM_PlaybackEvent,"HookFm_PlayBackEvent",false)
state FireBullets: Enabled;
ExecuteHam(Ham_Weapon_PrimaryAttack,ent)
state FireBullets: Disabled;
unregister_forward(FM_TraceLine,fm_hooktrace,true)
unregister_forward(FM_PlaybackEvent,fm_playbackevent,false)
Play_WeaponAnim(id,random_num(ANIM_SHOOT_1,ANIM_SHOOT_2))
set_pdata_int(ent,51,ammo-1,4)
set_pdata_float(ent,48,2.0,4)
static Float:user_newpunch[3];pev(id,pev_punchangle,user_newpunch)
user_newpunch[0]=user_punchangle[0]+(user_newpunch[0]-user_punchangle[0])*RECOIL
user_newpunch[1]=user_punchangle[1]+(user_newpunch[1]-user_punchangle[1])*RECOIL
user_newpunch[2]=user_punchangle[2]+(user_newpunch[2]-user_punchangle[2])*RECOIL
set_pev(id,pev_punchangle,user_newpunch)
emit_sound(ent, CHAN_ITEM, Weapon_Sounds[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
set_pdata_float(ent,46,WEAPON_SPEED,4)
new Float:Origin[3]
get_weapon_position(id,Origin,.add_forward=10.0,.add_right=7.0,.add_up=-10.5)
new Float:Velo[3]
Velo[0]=g_VecEndTrace[0]-Origin[0]
Velo[1]=g_VecEndTrace[1]-Origin[1]
Velo[2]=g_VecEndTrace[2]-Origin[2]
vec_normalize(Velo,Velo)
vec_mul_scalar(Velo,4096.0,Velo)
if(g_ChargeState[ent] == STATE_LOW)
{
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_USERTRACER)
engfunc(EngFunc_WriteCoord,Origin[0])
engfunc(EngFunc_WriteCoord,Origin[1])
engfunc(EngFunc_WriteCoord,Origin[2])
engfunc(EngFunc_WriteCoord,Velo[0])
engfunc(EngFunc_WriteCoord,Velo[1])
engfunc(EngFunc_WriteCoord,Velo[2])
write_byte(20)
write_byte(4)
write_byte(5)
message_end()
Set_BitVar(g_Muzzleflash1,id)
}
else if(g_ChargeState[ent] == STATE_HIGH)
{
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_USERTRACER)
engfunc(EngFunc_WriteCoord,Origin[0])
engfunc(EngFunc_WriteCoord,Origin[1])
engfunc(EngFunc_WriteCoord,Origin[2])
engfunc(EngFunc_WriteCoord,Velo[0])
engfunc(EngFunc_WriteCoord,Velo[1])
engfunc(EngFunc_WriteCoord,Velo[2])
write_byte(20)
write_byte(5)
write_byte(5)
message_end()
Set_BitVar(g_Muzzleflash2,id)
}
else if(g_ChargeState[ent] == STATE_EXTREME)
{
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_USERTRACER)
engfunc(EngFunc_WriteCoord,Origin[0])
engfunc(EngFunc_WriteCoord,Origin[1])
engfunc(EngFunc_WriteCoord,Origin[2])
engfunc(EngFunc_WriteCoord,Velo[0])
engfunc(EngFunc_WriteCoord,Velo[1])
engfunc(EngFunc_WriteCoord,Velo[2])
write_byte(20)
write_byte(1)
write_byte(5)
message_end()
Set_BitVar(g_Muzzleflash3,id)
}
g_ChargeShots[ent]++
return HAM_SUPERCEDE
}
public HookHam_TakeDamage(victim,inflictor,attacker,Float:damage)<FireBullets: Enabled>
{
new ent = fm_find_ent_by_owner(-1,weapon_name,attacker)
if(g_ChargeState[ent] == STATE_LOW)
SetHamParamFloat(4,damage*DAMAGE_LOW)
else if(g_ChargeState[ent] == STATE_HIGH)
SetHamParamFloat(4,damage*DAMAGE_HIGH)
else if(g_ChargeState[ent] == STATE_EXTREME)
SetHamParamFloat(4,damage*DAMAGE_EXTREME)
return HAM_OVERRIDE;
}
public HookHam_TakeDamage()<FireBullets: Disabled>
{
return HAM_IGNORED;
}
public HookHam_TakeDamage()<>
{
return HAM_IGNORED;
}
public HookFm_SetModel(ent)
{
static i,classname[32],item;pev(ent,pev_classname,classname,31);
if(!equal(classname,"weaponbox"))
return FMRES_IGNORED
for(i=0; i < 6; i++)
{
item = get_pdata_cbase(ent,34+i,4)
static id
id = pev(ent,pev_owner)
if(item > 0 && Is_CustomItem(item))
{
engfunc(EngFunc_SetModel,ent,MODEL_W)
g_ChargeState[ent] = STATE_LOW
g_ChargeShots[ent] = 0
UnSet_BitVar(g_MuzzleflashBall1,id)
UnSet_BitVar(g_MuzzleflashBall2,id)
UnSet_BitVar(g_MuzzleflashBall3,id)
g_ChargeBall[id] = 0
return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED;
}
public HookFm_PlayBackEvent()
{
return FMRES_SUPERCEDE
}
public HookFm_TraceLine(Float:tr_start[3],Float:tr_end[3],tr_flag,tr_ignore,tr)
{
if(tr_flag&IGNORE_MONSTERS)
return FMRES_IGNORED
static hit
hit=get_tr2(tr,TR_pHit)
static Decal, glassdecal
if(!glassdecal)
glassdecal = engfunc(EngFunc_DecalIndex,"{bproof1")
hit = get_tr2(tr,TR_pHit)
if(hit > 0 && pev_valid(hit))
{
if(pev(hit,pev_solid) != SOLID_BSP)
return FMRES_IGNORED
else if(pev(hit,pev_rendermode) != 0) Decal=glassdecal
else Decal = random_num(41,45)
}
else Decal = random_num(41,45)
static Float:vecEnd[3]
get_tr2(tr,TR_vecEndPos,vecEnd)
g_VecEndTrace = vecEnd
engfunc(EngFunc_MessageBegin,MSG_PAS,SVC_TEMPENTITY,vecEnd,0)
write_byte(TE_GUNSHOTDECAL)
engfunc(EngFunc_WriteCoord,vecEnd[0])
engfunc(EngFunc_WriteCoord,vecEnd[1])
engfunc(EngFunc_WriteCoord,vecEnd[2])
write_short(hit>0?hit:0)
write_byte(Decal)
message_end()
static Float:WallVector[3];get_tr2(tr,TR_vecPlaneNormal,WallVector)
engfunc(EngFunc_MessageBegin,MSG_PVS,SVC_TEMPENTITY,vecEnd,0);
write_byte(TE_STREAK_SPLASH)
engfunc(EngFunc_WriteCoord,vecEnd[0]);
engfunc(EngFunc_WriteCoord,vecEnd[1]);
engfunc(EngFunc_WriteCoord,vecEnd[2]);
engfunc(EngFunc_WriteCoord,WallVector[0]*random_float(25.0,30.0));
engfunc(EngFunc_WriteCoord,WallVector[1]*random_float(25.0,30.0));
engfunc(EngFunc_WriteCoord,WallVector[2]*random_float(25.0,30.0));
write_byte(111)
write_short(12)
write_short(3)
write_short(75)
message_end()
return FMRES_IGNORED
}
public HookFm_UpdateClientData(id,SendWeapons,CD_Handle)
{
static item
item = get_pdata_cbase(id,373,5)
if(item <= 0 || !Is_CustomItem(item))
return FMRES_IGNORED
set_cd(CD_Handle,CD_flNextAttack,99999.0)
return FMRES_HANDLED
}
public HookFm_Spawn(id)
{
if(pev_valid(id) != 2)
return FMRES_IGNORED
static ClName[32]
pev(id,pev_classname,ClName,31)
if(strlen(ClName) < 5)
return FMRES_IGNORED
static Trie:ClBuffer
if(!ClBuffer) ClBuffer = TrieCreate()
if(!TrieKeyExists(ClBuffer,ClName))
{
TrieSetCell(ClBuffer, ClName, 1)
RegisterHamFromEntity(Ham_TakeDamage, id, "HookHam_TakeDamage", 0)
}
return FMRES_IGNORED
}
stock make_weapon()
{
static ent, g_AllocString_E
if(g_AllocString_E || (g_AllocString_E = engfunc(EngFunc_AllocString,weapon_name)))
ent = engfunc(EngFunc_CreateNamedEntity,g_AllocString_E)
else
return 0
if(ent <= 0)
return 0
set_pev(ent,pev_spawnflags,SF_NORESPAWN)
set_pev(ent,pev_impulse,WEAPON_KEY)
ExecuteHam(Ham_Spawn,ent)
return ent
}
stock UTIL_DropWeapon(id,slot)
{
static iEntity
iEntity = get_pdata_cbase(id,(367 + slot),5)
if(iEntity > 0)
{
static iNext,szWeaponName[32]
do
{
iNext = get_pdata_cbase(iEntity,42,4);
if(get_weaponname(get_pdata_int(iEntity, 43, 4), szWeaponName, 31))
engclient_cmd(id,"drop",szWeaponName)
}
while((iEntity=iNext)>0)
}
}
stock Play_WeaponAnim(id,anim)
{
set_pev(id,pev_weaponanim,anim)
message_begin(MSG_ONE_UNRELIABLE,SVC_WEAPONANIM,_,id)
write_byte(anim)
write_byte(0)
message_end()
}
stock Weaponlist(id,bool:set)
{
if(!is_user_connected(id))
return
message_begin(MSG_ONE,Msg_WeaponList,_,id);
write_string(set == false ? weapon_name:weapon_new);
write_byte(3);
write_byte(WEAPON_BPAMMO);
write_byte(-1);
write_byte(-1);
write_byte(0);
write_byte(4);
write_byte(20);
write_byte(0);
message_end();
}
stock get_weapon_position(id,Float:fOrigin[3],Float:add_forward=0.0,Float:add_right=0.0,Float:add_up=0.0)
{
static Float:Angles[3],Float:ViewOfs[3],Float:vAngles[3]
static Float:Forward[3],Float:Right[3],Float:Up[3]
pev(id,pev_v_angle,vAngles)
pev(id,pev_origin,fOrigin)
pev(id,pev_view_ofs,ViewOfs)
vec_add(fOrigin,ViewOfs,fOrigin)
pev(id,pev_v_angle,Angles)
engfunc(EngFunc_MakeVectors,Angles)
global_get(glb_v_forward,Forward)
global_get(glb_v_right,Right)
global_get(glb_v_up,Up)
vec_mul_scalar(Forward,add_forward,Forward)
vec_mul_scalar(Right,add_right,Right)
vec_mul_scalar(Up,add_up,Up)
fOrigin[0]=fOrigin[0]+Forward[0]+Right[0]+Up[0]
fOrigin[1]=fOrigin[1]+Forward[1]+Right[1]+Up[1]
fOrigin[2]=fOrigin[2]+Forward[2]+Right[2]+Up[2]
}
vec_add(const Float:in1[],const Float:in2[],Float:out[])
{
out[0]=in1[0]+in2[0];
out[1]=in1[1]+in2[1];
out[2]=in1[2]+in2[2];
}
vec_mul_scalar(const Float:vec[],Float:scalar,Float:out[])
{
out[0]=vec[0]*scalar;
out[1]=vec[1]*scalar;
out[2]=vec[2]*scalar;
}
vec_normalize(const Float:vec[],Float:out[])
{
new Float:invlen=rsqrt(vec[0]*vec[0]+vec[1]*vec[1]+vec[2]*vec[2]);
out[0]=vec[0]*invlen;
out[1]=vec[1]*invlen;
out[2]=vec[2]*invlen;
}
Float:rsqrt(Float:x)
{
new Float:xhalf=x*0.5;
new i=_:x;
i=0x5f375a84 - (i>>1);
x=Float:i;
x=x*(1.5-xhalf*x*x);
x=x*(1.5-xhalf*x*x);
x=x*(1.5-xhalf*x*x);
return x;
}
Code: Select all
#include <zombie_escape>
#include <fakemeta_util>
#include <xs>
#define PLUGIN "[MW2] Auto Minigun"
#define VERSION "1.0"
#define AUTHOR "Dias"
new g_player_main[33], g_remoting[33], g_player_main2[33], g_firing[33],
g_preparing[33], g_ending[33], g_reloading[500]
new Float:g_last_firesound[33]
new const base_model[] = "models/mw2_auto/base.mdl"
new const main_model[] = "models/mw2_auto/main.mdl"
new const muzzleflash_spr[] = "sprites/muzzleflash3_auto.spr"
new muzzleflash_spr_id, Float:g_last_shoot[33]
new g_blood, g_bloodspray, g_dead[500], g_exp_id, g_owner[500], Float:g_check_heat[33]
new const minigun_sound[3][] = {
"mw2_auto/minigun-starting.wav",
"mw2_auto/minigun-shooting.wav",
"mw2_auto/minigun-stoping.wav"
}
new g_minigun, g_had_minigun[33], g_reg, g_heat[500], g_sync_hud1
new cvar_minigun_health, cvar_minigun_dmgrand_start, cvar_minigun_dmgrand_end,
cvar_delay_attack, cvar_reload_time
// 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" }
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("HLTV", "event_newround", "a", "1=0", "2=0")
register_event("DeathMsg", "event_death", "a")
register_think("mw2_mingun_main", "fw_main_think")
register_forward(FM_CmdStart, "fw_CmdStart")
for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1)
g_minigun = ze_register_item("[MW2] Auto-Minigun (Remote)", 35, 0)
g_sync_hud1 = CreateHudSyncObj(645)
// Cvars
cvar_minigun_health = register_cvar("zp_minigun_health", "500")
cvar_minigun_dmgrand_start = register_cvar("zp_minigun_dmgrand_start", "10")
cvar_minigun_dmgrand_end = register_cvar("zp_minigun_dmgrand_end", "30")
cvar_delay_attack = register_cvar("zp_minigun_delay_attack", "0.1")
cvar_reload_time = register_cvar("zp_minigun_reload_time", "30.0")
//register_clcmd("say /make", "create_minigun")
//register_clcmd("say /remote", "remote_minigun")
}
public plugin_precache()
{
precache_model(base_model)
precache_model(main_model)
for(new i = 0; i < sizeof(minigun_sound); i++)
engfunc(EngFunc_PrecacheSound, minigun_sound[i])
muzzleflash_spr_id = precache_model(muzzleflash_spr)
g_blood = precache_model("sprites/blood.spr")
g_bloodspray = precache_model("sprites/bloodspray.spr")
g_exp_id = precache_model("sprites/zerogxplode.spr")
}
public event_newround()
{
remove_entity_name("mw2_mingun_base")
remove_entity_name("mw2_mingun_main")
remove_entity_name("mw2_mingun_view")
for(new i = 0; i < get_maxplayers(); i++)
{
if(is_user_alive(i) && is_user_connected(i))
{
reset_minigun(i)
}
}
}
public event_death()
{
static victim
victim = read_data(2)
reset_minigun(victim)
}
public reset_minigun(id)
{
attach_view(id, id)
g_had_minigun[id] = 0
g_player_main[id] = 0
g_player_main2[id] = 0
g_remoting[id] = 0
g_preparing[id] = 0
g_firing[id] = 0
g_ending[id] = 0
remove_task(id+2479)
message_begin(MSG_ONE_UNRELIABLE, 108, {0,0,0}, id)
write_short(0)
message_end()
}
public ze_select_item_pre(id, itemid)
{
// Return Available and we will block it in Post, So it dosen't affect other plugins
if (itemid != g_minigun)
return ZE_ITEM_AVAILABLE
// Available for Humans only, So don't show it for zombies
if (ze_is_user_zombie(id))
return ZE_ITEM_DONT_SHOW
return ZE_ITEM_AVAILABLE
}
public ze_select_item_post(id, itemid)
{
if (itemid != g_minigun)
return
g_had_minigun[id] = 1
create_minigun(id)
client_printcolor(id, "!g[ZE]!y Hold !t(E)!y for 3 seconds to put MW2 Auto-Minigun !!!")
}
public create_minigun(id)
{
if(!g_had_minigun[id])
return
g_had_minigun[id] = 0
new Float:Origin[3], Float:Angles[3]
get_position(id, 40.0, 0.0, 0.0, Origin)
pev(id, pev_angles, Angles)
// Make the Base
new ent = create_entity("info_target")
entity_set_origin(ent, Origin);
Angles[0] = 0.0
entity_set_vector(ent, EV_VEC_angles, Angles)
entity_set_string(ent,EV_SZ_classname, "mw2_mingun_base")
entity_set_model(ent, base_model);
entity_set_int(ent,EV_INT_solid, SOLID_NOT)
entity_set_float(ent,EV_FL_takedamage,1.0)
entity_set_float(ent,EV_FL_health, get_pcvar_float(cvar_minigun_health) + 1000.0)
new Float:maxs[3] = {10.0,10.0,1.0}
new Float:mins[3] = {-10.0,-10.0,-1.0}
entity_set_size(ent,mins,maxs)
set_entity_anim(ent, 0)
g_dead[ent] = 0
g_owner[ent] = id
entity_set_float(ent,EV_FL_nextthink, halflife_time() + 0.01)
drop_to_floor(ent)
// Create Main
ent = create_entity("info_target")
Origin[2] -= 35.0
entity_set_origin(ent, Origin);
entity_set_vector(ent, EV_VEC_angles, Angles)
entity_set_string(ent,EV_SZ_classname, "mw2_mingun_main")
entity_set_model(ent, main_model);
entity_set_int(ent,EV_INT_solid, SOLID_BBOX)
entity_set_float(ent,EV_FL_takedamage,1.0)
entity_set_float(ent,EV_FL_health, get_pcvar_float(cvar_minigun_health) + 1000.0)
new Float:maxs2[3] = {10.0,10.0,20.0}
new Float:mins2[3] = {-10.0,-10.0,-20.0}
entity_set_size(ent,mins2,maxs2)
set_entity_anim(ent, 0)
g_heat[ent] = 0
entity_set_float(ent,EV_FL_nextthink, halflife_time() + 0.01)
g_player_main[id] = ent
g_dead[ent] = 0
g_owner[ent] = id
g_reloading[ent] = 0
drop_to_floor(ent)
if(!g_reg)
{
g_reg = 1
RegisterHamFromEntity(Ham_TakeDamage, ent, "fw_main_takedamage")
}
// Create View Ent
ent = create_entity("info_target")
get_position(id, 40.0, 0.0, 10.0, Origin)
entity_set_origin(ent, Origin);
entity_set_vector(ent, EV_VEC_angles, Angles)
entity_set_string(ent,EV_SZ_classname, "mw2_mingun_view")
entity_set_model(ent, main_model);
fm_set_rendering(ent, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0)
g_player_main2[id] = ent
}
public ze_user_infected(id)
{
reset_minigun(id)
}
public do_remote(id)
{
id -= 2479
remote_minigun(id)
}
public remote_minigun(id)
{
if(!g_player_main[id])
return
attach_view(id, g_player_main2[id])
engclient_cmd(id, "weapon_knife")
set_task(1.0, "task_delay", id)
client_printcolor(id, "!g[ZE]!y Press !t(E)!y to turn of the MW2-Auto Minigun !!!")
}
public task_delay(id)
{
g_remoting[id] = 1
}
public client_PostThink(id)
{
if(!g_remoting[id])
return
if(!g_player_main[id])
return
if(!pev_valid(g_player_main[id]))
{
reset_minigun(id)
return
}
if(!g_firing[id] && !g_reloading[g_player_main[id]])
{
if(g_heat[g_player_main[id]] > 0)
{
static Float:CurTime
CurTime = get_gametime()
if(CurTime - get_pcvar_float(cvar_delay_attack) * 2 > g_check_heat[id])
{
g_heat[g_player_main[id]]--
g_check_heat[id] = CurTime
}
}
}
static Message[64]
if(g_heat[g_player_main[id]] <= 0)
{
set_hudmessage(0, 255, 0, -1.0, 0.90, 0, 1.0, 1.0)
formatex(Message, sizeof(Message), "Status: Good")
} else if(g_heat[g_player_main[id]] > 0 && g_heat[g_player_main[id]] < 100) {
set_hudmessage(255, 255, 0, -1.0, 0.90, 0, 1.0, 1.0)
formatex(Message, sizeof(Message), "Status: Heat %i%%", g_heat[g_player_main[id]])
} else if(g_heat[g_player_main[id]] >= 100) {
set_hudmessage(255, 0, 0, -1.0, 0.90, 0, 1.0, 1.0)
formatex(Message, sizeof(Message), "Status: OverHeat")
}
ShowSyncHudMsg(id, g_sync_hud1, Message)
static Float:NewAngles[3], Float:OldAngles[3], Float:Origin[3]
pev(id, pev_angles, NewAngles)
pev(g_player_main[id], pev_angles, OldAngles)
NewAngles[2] = OldAngles[2]
pev(g_player_main2[id], pev_origin, Origin)
//get_position(g_player_main2[id], -10.0, 0.0, 0.0, Origin)
set_pev(g_player_main[id], pev_v_angle, NewAngles)
set_pev(g_player_main2[id], pev_angles, NewAngles)
NewAngles[0] -= NewAngles[0] * 2
set_pev(g_player_main[id], pev_angles, NewAngles)
if(get_user_weapon(id) != CSW_KNIFE)
engclient_cmd(id, "weapon_knife")
}
public fw_main_think(ent)
{
if(!pev_valid(ent))
return
if(pev(ent, pev_health) - 1000.0 < 0)
{
if(!g_dead[ent])
minigun_dead(ent)
return
}
if(!g_dead[ent])
entity_set_float(ent,EV_FL_nextthink, halflife_time() + 0.01)
}
public fw_main_takedamage(victim, inflictor, attacker, Float:Damage, damagebits)
{
if(!is_user_alive(attacker) || !is_user_connected(attacker))
return HAM_IGNORED
static Health
Health = pev(victim, pev_health) - 1000
client_print(attacker, print_center, "MW2 Auto-Minigun Health: %i", Health)
return HAM_HANDLED
}
public minigun_dead(ent)
{
g_dead[ent] = 1
static Float:Origin[3]
pev(ent, pev_origin, Origin)
message_begin(MSG_BROADCAST ,SVC_TEMPENTITY)
write_byte(TE_EXPLOSION)
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2])
write_short(g_exp_id) // sprite index
write_byte(30) // scale in 0.1's
write_byte(30) // framerate
write_byte(0) // flags
message_end()
static id
id = g_owner[ent]
if(is_user_connected(id))
{
reset_minigun(id)
client_printcolor(id, "!g[ZE]!y Your MW2 Auto-Minigun has been !tDestroyed!y !!!")
}
Origin[0] = 9999.0
Origin[1] = 9999.0
Origin[2] = 9999.0
set_pev(ent, pev_origin, Origin)
}
public fw_CmdStart(id, uc_handle, seed)
{
if(!is_user_alive(id) || !is_user_connected(id))
return FMRES_IGNORED
if(!g_player_main[id])
return FMRES_IGNORED
static PressButton
PressButton = get_uc(uc_handle, UC_Buttons)
if(g_remoting[id])
{
if(PressButton & IN_ATTACK)
{
static Float:CurTime
CurTime = get_gametime()
if(CurTime - get_pcvar_float(cvar_delay_attack) > g_last_shoot[id])
{
if(!g_preparing[id] && !g_firing[id] && !g_ending[id])
{
g_preparing[id] = 1
g_firing[id] = 0
set_entity_anim(g_player_main[id], 1)
set_task(1.5, "start_attack", id)
emit_sound(g_player_main[id], CHAN_WEAPON, minigun_sound[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
if(!g_preparing[id] && g_firing[id] && !g_ending[id] && g_heat[g_player_main[id]] < 100)
{
minigun_shoot(id)
if(CurTime - get_pcvar_float(cvar_delay_attack) > g_check_heat[id])
{
if(g_heat[g_player_main[id]] < 100)
{
g_heat[g_player_main[id]]++
}
g_check_heat[id] = CurTime
}
} else if(g_heat[g_player_main[id]] >= 100) {
if(!g_preparing[id] && g_firing[id] && !g_ending[id] && !g_reloading[g_player_main[id]])
{
g_firing[id] = 0
g_preparing[id] = 0
g_ending[id] = 1
set_entity_anim(g_player_main[id], 3)
emit_sound(g_player_main[id], CHAN_WEAPON, minigun_sound[2], 1.0, ATTN_NORM, 0, PITCH_NORM)
set_task(2.0, "stop_attack", id)
static Message[128]
formatex(Message, sizeof(Message), "!g[ZE]!y System is overheat. Please wait !t%i!y seconds !!!", get_pcvar_float(cvar_reload_time))
client_printcolor(id, Message)
g_reloading[g_player_main[id]] = 1
set_task(get_pcvar_float(cvar_reload_time), "reload_heat", id)
}
}
g_last_shoot[id] = CurTime
}
PressButton &= ~IN_ATTACK
set_uc(uc_handle, UC_Buttons, PressButton)
} else {
if(pev(id, pev_oldbuttons) & IN_ATTACK)
{
if(g_preparing[id] || g_firing[id])
{
g_firing[id] = 0
g_preparing[id] = 0
g_ending[id] = 1
set_entity_anim(g_player_main[id], 3)
emit_sound(g_player_main[id], CHAN_WEAPON, minigun_sound[2], 1.0, ATTN_NORM, 0, PITCH_NORM)
set_task(2.0, "stop_attack", id)
}
}
}
}
if(PressButton & IN_USE)
{
if(g_remoting[id])
{
set_task(1.0, "task_delay2", id)
attach_view(id, id)
g_preparing[id] = 0
g_firing[id] = 0
PressButton &= ~IN_USE
set_uc(uc_handle, UC_Buttons, PressButton)
} else {
if(!task_exists(id+2479))
{
set_task(3.0, "do_remote", id+2479)
message_begin(MSG_ONE_UNRELIABLE, 108, {0,0,0}, id)
write_short(3)
message_end()
}
}
} else {
if(pev(id, pev_oldbuttons) & IN_USE)
{
remove_task(id+2479)
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("BarTime"), {0,0,0}, id)
write_short(0)
message_end()
}
}
return FMRES_HANDLED
}
public reload_heat(id)
{
if(!pev_valid(g_player_main[id]))
return
g_heat[g_player_main[id]] = 0
g_reloading[g_player_main[id]] = 0
}
public task_delay2(id)
{
g_remoting[id] = 0
}
public start_attack(id)
{
g_preparing[id] = 0
g_firing[id] = 1
}
public stop_attack(id)
{
g_preparing[id] = 0
g_firing[id] = 0
g_ending[id] = 0
}
public minigun_shoot(id)
{
if(!g_remoting[id])
{
return PLUGIN_HANDLED
}
static Float:CurTime
CurTime = get_gametime()
if(CurTime - 0.1 > g_last_firesound[id])
{
PlaySound(id, minigun_sound[1])
emit_sound(g_player_main[id], CHAN_BODY, minigun_sound[1], 1.0, ATTN_NORM, 0, PITCH_NORM)
g_last_firesound[id] = CurTime
}
set_entity_anim(g_player_main[id], 2)
static Float:Origin[3], Float:AimOrigin[3]
get_position(g_player_main[id], 50.0, 0.0, 0.0, Origin)
Origin[2] += 20.0
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(muzzleflash_spr_id) // sprite index
write_byte(5) // scale in 0.1's
write_byte(10) // framerate
write_byte(4) // flags
message_end()
static Float:Punch[3]
Punch[0] = random_float(1.0, 5.0)
Punch[1] = random_float(1.0, 5.0)
Punch[2] = random_float(1.0, 10.0)
set_pev(id, pev_punchangle, Punch)
get_position(g_player_main[id], 70.0, 0.0, 30.0, Origin)
get_position(g_player_main[id], 4000.0, 0.0, 30.0, AimOrigin)
create_tracer(id, Origin, AimOrigin)
get_position(g_player_main[id], 4000.0, -30.0, 50.0, AimOrigin)
create_tracer(id, Origin, AimOrigin)
get_position(g_player_main[id], 4000.0, 30.0, -50.0, AimOrigin)
create_tracer(id, Origin, AimOrigin)
get_position(g_player_main[id], 4000.0, -60.0, -70.0, AimOrigin)
create_tracer(id, Origin, AimOrigin)
get_position(g_player_main[id], 4000.0, 60.0, 70.0, AimOrigin)
create_tracer(id, Origin, AimOrigin)
return PLUGIN_HANDLED
}
// Ham Weapon Deploy Forward
public fw_Item_Deploy_Post(weapon_ent)
{
if(pev_valid(weapon_ent))
return HAM_IGNORED
static id
id = pev(weapon_ent, pev_owner)
if(g_remoting[id])
engclient_cmd(id, "weapon_knife")
return HAM_HANDLED
}
stock get_position(id,Float:forw, Float:right, Float:up, Float:vStart[])
{
new 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
vAngle[0] = 0.0
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 create_tracer(id, Float:start[3], Float:end[3])
{
new start_[3], end_[3]
FVecIVec(start, start_)
FVecIVec(end, end_)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_TRACER)
write_coord(start_[0])
write_coord(start_[1])
write_coord(start_[2])
write_coord(end_[0])
write_coord(end_[1])
write_coord(end_[2])
message_end()
static tr, Float:End_Origin[3], Target
engfunc(EngFunc_TraceLine, start, end, DONT_IGNORE_MONSTERS, -1, tr)
get_tr2(tr, TR_vecEndPos, End_Origin)
Target = get_tr2(tr, TR_pHit)
if(is_user_alive(Target) && ze_is_user_zombie(Target))
{
static Float:Origin[3]
pev(Target, pev_origin, Origin)
// Show some blood :)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BLOODSPRITE)
write_coord(floatround(Origin[0]))
write_coord(floatround(Origin[1]))
write_coord(floatround(Origin[2]))
write_short(g_bloodspray)
write_short(g_blood)
write_byte(70)
write_byte(random_num(1,2))
message_end()
ExecuteHamB(Ham_TakeDamage, Target, 0, id, random_float(get_pcvar_float(cvar_minigun_dmgrand_start), get_pcvar_float(cvar_minigun_dmgrand_end)), DMG_BULLET)
}
make_bullet(id, End_Origin)
}
stock make_bullet(id, Float:Origin[3])
{
// Find target
new target, body
get_user_aiming(id, target, body, 999999)
if(target > 0 && target <= get_maxplayers())
{
new Float:fStart[3], Float:fEnd[3], Float:fRes[3], Float:fVel[3]
pev(id, pev_origin, fStart)
// Get ids view direction
velocity_by_aim(id, 64, fVel)
// Calculate position where blood should be displayed
fStart[0] = Origin[0]
fStart[1] = Origin[1]
fStart[2] = Origin[2]
fEnd[0] = fStart[0]+fVel[0]
fEnd[1] = fStart[1]+fVel[1]
fEnd[2] = fStart[2]+fVel[2]
// Draw traceline from victims origin into ids view direction to find
// the location on the wall to put some blood on there
new res
engfunc(EngFunc_TraceLine, fStart, fEnd, 0, target, res)
get_tr2(res, TR_vecEndPos, fRes)
// Show some blood :)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BLOODSPRITE)
write_coord(floatround(fStart[0]))
write_coord(floatround(fStart[1]))
write_coord(floatround(fStart[2]))
write_short(g_bloodspray)
write_short(g_blood)
write_byte(70)
write_byte(random_num(1,2))
message_end()
} else {
new decal = 41
// Check if the wall hit is an entity
if(target)
{
// Put decal on an entity
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_DECAL)
write_coord(floatround(Origin[0]))
write_coord(floatround(Origin[1]))
write_coord(floatround(Origin[2]))
write_byte(decal)
write_short(target)
message_end()
} else {
// Put decal on "world" (a wall)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
write_coord(floatround(Origin[0]))
write_coord(floatround(Origin[1]))
write_coord(floatround(Origin[2]))
write_byte(decal)
message_end()
}
// Show sparcles
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_GUNSHOTDECAL)
write_coord(floatround(Origin[0]))
write_coord(floatround(Origin[1]))
write_coord(floatround(Origin[2]))
write_short(id)
write_byte(decal)
message_end()
}
}
stock set_entity_anim(ent, anim)
{
entity_set_float(ent, EV_FL_animtime, get_gametime())
entity_set_float(ent, EV_FL_framerate, 1.0)
entity_set_int(ent, EV_INT_sequence, anim)
}
stock client_printcolor(const id, const input[], any:...)
{
new iCount = 1, iPlayers[32]
static szMsg[191]
vformat(szMsg, charsmax(szMsg), input, 3)
replace_all(szMsg, 190, "!g", "^4")
replace_all(szMsg, 190, "!y", "^1")
replace_all(szMsg, 190, "!t", "^3")
if(id) iPlayers[0] = id
else get_players(iPlayers, iCount, "ch")
for (new i = 0; i < iCount; i++)
{
if(is_user_connected(iPlayers[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i])
write_byte(iPlayers[i])
write_string(szMsg)
message_end()
}
}
}
If you guys, can't do it. Please just post a tutorial for me, so I can do it by myself.
Menu:
- #include <zombie_escape>
- #include <ze_vip>
- native ze_give_salamander(id)
- native ze_give_stunrifle(id)
- native ze_give_bazzoka(id)
- native give_laserminigun(id)
- native give_minigun(id)
- const OFFSET_CSMENUCODE = 205
- const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
- public plugin_natives()
- {
- register_native("ze_open_vip_menu", "native_ze_open_vip_menu", 1)
- }
- public native_ze_open_vip_menu(id)
- {
- if (!is_user_connected(id))
- return -1
- if (!(get_user_flags(id) & ADMIN_LEVEL_H))
- return false
- Show_Menu(id)
- return true
- }
- public plugin_init()
- {
- register_plugin("[ZE] VIP Menu", "1.0", "Spi")
- register_menu("VIP Menu", KEYSMENU, "Main_Menu")
- }
- public Show_Menu(id)
- {
- static szMenu[250]
- new iLen
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\rVIP Menu^n")
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y1\d. \wKnife Menu")
- if (is_user_alive(id))
- {
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y2\d. \wGuns Menu")
- }
- else
- {
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\d2. Guns Menu")
- }
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\y0\d. \r%L", id, "EXIT")
- set_pdata_int(id, OFFSET_CSMENUCODE, 0)
- show_menu(id, KEYSMENU, szMenu, -1, "Main Menu")
- }
- public Main_Menu(id, key)
- {
- if (!is_user_connected(id))
- return PLUGIN_HANDLED
- switch (key)
- {
- case 0: ze_open_knife_menu(id)
- case 1:
- {
- if (is_user_alive(id))
- {
- Open_HGunMenu(id)
- }
- else
- {
- ze_colored_print(id, "%L", id, "DEAD_CANT_BUY_WEAPON")
- }
- }
- }
- return PLUGIN_HANDLED
- }
- public Open_HGunMenu(id)
- {
- new iMenu = menu_create("\rGuns Menu:^n^n", "HVIPMenu_Handler")
- menu_additem(iMenu, "Salamander")
- menu_additem(iMenu, "Stun Rifle")
- menu_additem(iMenu, "Bazzoka")
- menu_additem(iMenu, "Laser Minigun")
- menu_additem(iMenu, "Minigun")
- menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL)
- menu_display(id, iMenu, 0)
- }
- public HVIPMenu_Handler(id, iMenu, iItem)
- {
- if (!is_user_connected(id))
- return PLUGIN_CONTINUE
- switch (iItem)
- {
- case 0: ze_give_salamander(id)
- case 1: ze_give_stunrifle(id)
- case 2: ze_give_bazzoka(id)
- case 3: give_laserminigun(id)
- case 4: give_minigun(id)
- }
- menu_destroy(iMenu)
- return PLUGIN_HANDLED
- }
- #include <zombie_escape>
- #include <ze_vip>
- #include <amxconst>
- #include <fakemeta>
- #include <fakemeta_util>
- #include <cstrike>
- #include <xs>
- #include <engine>
- #include <fun>
- #define PLUGIN "[CSO] Salamander"
- #define VERSION "2015"
- #define AUTHOR "Dias Pendragon Leon"
- #define CSW_SAL CSW_M249
- #define weapon_sal "weapon_m249"
- #define DAMAGE 38
- #define FIRE_SPEED 640.0
- #define RECOIL 0.0
- #define MODEL_V "models/v_salamander.mdl"
- #define MODEL_P "models/p_salamander.mdl"
- #define MODEL_W "models/w_salamander.mdl"
- #define DEFAULT_W_MODEL "models/w_m249.mdl"
- new const WeaponSounds[6][] =
- {
- "weapons/flamegun-1.wav",
- "weapons/flamegun_draw.wav",
- "weapons/flamegun_clipin1.wav",
- "weapons/flamegun_clipin2.wav",
- "weapons/flamegun_clipout1.wav",
- "weapons/flamegun_clipout2.wav"
- }
- new const WeaponResources[7][] =
- {
- "sprites/flame_puff01.spr",
- "sprites/flame_burn01.spr",
- "sprites/weapon_flamethrower.txt",
- "sprites/640hud7_2.spr",
- "sprites/640hud59_2.spr",
- "sprites/640hud60_2.spr",
- "sprites/smokepuff.spr"
- }
- enum
- {
- ANIM_IDLE = 0,
- ANIM_SHOOT,
- ANIM_SHOOT_END,
- ANIM_RELOAD,
- ANIM_DRAW
- }
- // Marcros
- #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)));
- // Vars
- new g_Had_Salamander, g_WeaponEnt, g_SmokePuff_SprID, Float:g_PunchAngles[33]
- new g_MsgCurWeapon, g_MsgWeaponList
- // Safety
- new g_HamBot
- new g_IsConnected, g_IsAlive, g_PlayerWeapon[33]
- public plugin_init()
- {
- register_plugin(PLUGIN, VERSION, AUTHOR)
- // Your highness!
- Register_SafetyFunc()
- // Forward
- register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
- register_forward(FM_SetModel, "fw_SetModel")
- register_forward(FM_PlaybackEvent, "fw_PlaybackEvent")
- register_forward(FM_CmdStart, "fw_CmdStart")
- register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1)
- // Engine
- register_think("fireinsaigon", "fw_Fire_Think")
- register_touch("fireinsaigon", "*", "fw_Fire_Touch")
- // Hams
- RegisterHam(Ham_Item_Deploy, weapon_sal, "fw_Item_Deploy_Post", 1)
- RegisterHam(Ham_Item_AddToPlayer, weapon_sal, "fw_Item_AddToPlayer_Post", 1)
- RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack")
- RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack")
- RegisterHam(Ham_Weapon_PrimaryAttack, weapon_sal, "fw_Weapon_PrimaryAttack")
- RegisterHam(Ham_Weapon_PrimaryAttack, weapon_sal, "fw_Weapon_PrimaryAttack_Post", 1)
- g_MsgCurWeapon = get_user_msgid("CurWeapon")
- g_MsgWeaponList = get_user_msgid("WeaponList")
- register_clcmd("weapon_flamethrower", "Hook_Weapon")
- }
- public plugin_precache()
- {
- precache_model(MODEL_V)
- precache_model(MODEL_P)
- precache_model(MODEL_W)
- for(new i = 0; i < sizeof(WeaponSounds); i++)
- precache_sound(WeaponSounds[i])
- for(new i = 0; i < sizeof(WeaponResources); i++)
- {
- if(i == 2) precache_generic(WeaponResources[i])
- else if(i == 6) g_SmokePuff_SprID = precache_model(WeaponResources[i])
- else precache_model(WeaponResources[i])
- }
- }
- public plugin_natives()
- {
- register_native("ze_give_salamander", "native_ze_give_salamander", 1)
- }
- public native_ze_give_salamander(id)
- {
- Get_Salamander(id)
- }
- public fw_PrecacheEvent_Post(type, const name[])
- {
- if(equal("events/m249.sc", name))
- g_WeaponEnt = get_orig_retval()
- }
- public client_putinserver(id)
- {
- Safety_Connected(id)
- if(!g_HamBot && is_user_bot(id))
- {
- g_HamBot = 1
- set_task(0.1, "Register_HamBot", id)
- }
- }
- public Register_HamBot(id)
- {
- Register_SafetyFuncBot(id)
- RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack")
- }
- public client_disconnected(id)
- {
- Safety_Disconnected(id)
- }
- public Hook_Weapon(id)
- {
- engclient_cmd(id, weapon_sal)
- return PLUGIN_HANDLED
- }
- public Get_Salamander(id)
- {
- Set_BitVar(g_Had_Salamander, id)
- give_item(id, weapon_sal)
- message_begin(MSG_ONE_UNRELIABLE, g_MsgCurWeapon, _, id)
- write_byte(1)
- write_byte(CSW_SAL)
- write_byte(100)
- message_end()
- cs_set_user_bpammo(id, CSW_SAL, 200)
- }
- public Remove_Salamander(id)
- {
- UnSet_BitVar(g_Had_Salamander, id)
- }
- public fw_UpdateClientData_Post(id, sendweapons, cd_handle)
- {
- if(!is_alive(id))
- return FMRES_IGNORED
- if(get_player_weapon(id) != CSW_SAL || !Get_BitVar(g_Had_Salamander, id))
- return FMRES_IGNORED
- set_cd(cd_handle, CD_flNextAttack, get_gametime() + 0.001)
- return FMRES_HANDLED
- }
- 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_sal, entity)
- if(!pev_valid(weapon))
- return FMRES_IGNORED
- if(Get_BitVar(g_Had_Salamander, id))
- {
- set_pev(weapon, pev_impulse, 442015)
- engfunc(EngFunc_SetModel, entity, MODEL_W)
- UnSet_BitVar(g_Had_Salamander, id)
- return FMRES_SUPERCEDE
- }
- }
- return FMRES_IGNORED
- }
- public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
- {
- if(!is_alive(invoker))
- return FMRES_IGNORED
- if(get_player_weapon(invoker) != CSW_SAL || !Get_BitVar(g_Had_Salamander, invoker))
- return FMRES_IGNORED
- if(eventid == g_WeaponEnt)
- {
- playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
- if(pev(invoker, pev_weaponanim) != ANIM_SHOOT) Set_WeaponAnim(invoker, ANIM_SHOOT)
- return FMRES_SUPERCEDE
- }
- return FMRES_HANDLED
- }
- public fw_CmdStart(id, uc_handle, seed)
- {
- if(!is_alive(id))
- return FMRES_IGNORED
- if(get_player_weapon(id) != CSW_SAL || !Get_BitVar(g_Had_Salamander, id))
- return FMRES_IGNORED
- static PressedButton
- PressedButton = get_uc(uc_handle, UC_Buttons)
- if(!(PressedButton & IN_ATTACK))
- {
- if((pev(id, pev_oldbuttons) & IN_ATTACK) && pev(id, pev_weaponanim) == ANIM_SHOOT)
- {
- static weapon; weapon = fm_get_user_weapon_entity(id, CSW_SAL)
- if(pev_valid(weapon)) set_pdata_float(weapon, 48, 2.0, 4)
- Set_WeaponAnim(id, ANIM_SHOOT_END)
- Make_FireSmoke(id)
- }
- }
- return FMRES_HANDLED
- }
- public Make_FireSmoke(id)
- {
- static Float:Origin[3]
- get_position(id, 40.0, 5.0, -15.0, 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_SmokePuff_SprID)
- write_byte(5)
- write_byte(30)
- write_byte(14)
- message_end()
- }
- public fw_Item_Deploy_Post(Ent)
- {
- if(pev_valid(Ent) != 2)
- return
- static Id; Id = get_pdata_cbase(Ent, 41, 4)
- if(get_pdata_cbase(Id, 373) != Ent)
- return
- if(!Get_BitVar(g_Had_Salamander, Id))
- return
- set_pev(Id, pev_viewmodel2, MODEL_V)
- set_pev(Id, pev_weaponmodel2, MODEL_P)
- }
- public fw_Item_AddToPlayer_Post(Ent, id)
- {
- if(!pev_valid(Ent))
- return HAM_IGNORED
- if(pev(Ent, pev_impulse) == 442015)
- {
- Set_BitVar(g_Had_Salamander, id)
- set_pev(Ent, pev_impulse, 0)
- }
- if(Get_BitVar(g_Had_Salamander, id))
- {
- message_begin(MSG_ONE_UNRELIABLE, g_MsgWeaponList, _, id)
- write_string("weapon_flamethrower")
- write_byte(3)
- write_byte(200)
- write_byte(-1)
- write_byte(-1)
- write_byte(0)
- write_byte(4)
- write_byte(CSW_SAL)
- write_byte(0)
- message_end()
- }
- return HAM_HANDLED
- }
- public fw_TraceAttack(Ent, Attacker, Float:Damage, Float:Dir[3], ptr, DamageType)
- {
- if(!is_alive(Attacker))
- return HAM_IGNORED
- if(get_player_weapon(Attacker) != CSW_SAL || !Get_BitVar(g_Had_Salamander, Attacker))
- return HAM_IGNORED
- return HAM_SUPERCEDE
- }
- public CreateFire(id, Float:Speed)
- {
- new iEnt = create_entity("env_sprite")
- if(!pev_valid(iEnt)) return
- static Float:vfAngle[3], Float:MyOrigin[3]
- static Float:Origin[3], Float:TargetOrigin[3], Float:Velocity[3]
- get_position(id, 40.0, 5.0, -5.0, Origin)
- get_position(id, 1024.0, 0.0, 0.0, TargetOrigin)
- pev(id, pev_angles, vfAngle)
- pev(id, pev_origin, MyOrigin)
- vfAngle[2] = float(random(18) * 20)
- // set info for ent
- set_pev(iEnt, pev_movetype, MOVETYPE_FLY)
- set_pev(iEnt, pev_rendermode, kRenderTransAdd)
- set_pev(iEnt, pev_renderamt, 160.0)
- set_pev(iEnt, pev_fuser1, get_gametime() + 1.0) // time remove
- set_pev(iEnt, pev_scale, 0.25)
- set_pev(iEnt, pev_nextthink, get_gametime() + 0.05)
- entity_set_string(iEnt, EV_SZ_classname, "fireinsaigon")
- engfunc(EngFunc_SetModel, iEnt, WeaponResources[0])
- set_pev(iEnt, pev_mins, Float:{-1.0, -1.0, -1.0})
- set_pev(iEnt, pev_maxs, Float:{1.0, 1.0, 1.0})
- set_pev(iEnt, pev_origin, Origin)
- set_pev(iEnt, pev_gravity, 0.01)
- set_pev(iEnt, pev_angles, vfAngle)
- set_pev(iEnt, pev_solid, SOLID_TRIGGER)
- set_pev(iEnt, pev_owner, id)
- set_pev(iEnt, pev_frame, 0.0)
- set_pev(iEnt, pev_iuser2, get_user_team(id))
- get_speed_vector(Origin, TargetOrigin, Speed, Velocity)
- set_pev(iEnt, pev_velocity, Velocity)
- emit_sound(iEnt, CHAN_BODY, WeaponSounds[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
- }
- public fw_Fire_Think(iEnt)
- {
- if(!pev_valid(iEnt))
- return
- static Float:fFrame, Float:fScale
- pev(iEnt, pev_frame, fFrame)
- pev(iEnt, pev_scale, fScale)
- // effect exp
- if(pev(iEnt, pev_movetype) == MOVETYPE_NONE)
- {
- fFrame += 1.0
- fScale += 0.1
- fScale = floatmin(fScale, 1.75)
- if(fFrame > 21.0)
- {
- engfunc(EngFunc_RemoveEntity, iEnt)
- return
- }
- set_pev(iEnt, pev_nextthink, get_gametime() + 0.025)
- } else {
- fFrame += 1.25
- fFrame = floatmin(21.0, fFrame)
- fScale += 0.15
- fScale = floatmin(fScale, 1.75)
- set_pev(iEnt, pev_nextthink, get_gametime() + 0.05)
- }
- set_pev(iEnt, pev_frame, fFrame)
- set_pev(iEnt, pev_scale, fScale)
- // time remove
- static Float:fTimeRemove
- pev(iEnt, pev_fuser1, fTimeRemove)
- if (get_gametime() >= fTimeRemove)
- {
- engfunc(EngFunc_RemoveEntity, iEnt)
- return;
- }
- }
- public fw_Fire_Touch(ent, id)
- {
- if(!pev_valid(ent))
- return
- if(pev_valid(id))
- {
- static Classname[32]
- pev(id, pev_classname, Classname, sizeof(Classname))
- if(equal(Classname, "fireinsaigon")) return
- else if(is_alive(id))
- {
- static EntTeam; EntTeam = pev(ent, pev_iuser2)
- if(get_user_team(id) != EntTeam)
- {
- static Attacker; Attacker = pev(ent, pev_owner)
- if(is_connected(Attacker))
- {
- ExecuteHamB(Ham_TakeDamage, id, 0, Attacker, float(DAMAGE), DMG_BULLET)
- }
- }
- }
- }
- set_pev(ent, pev_movetype, MOVETYPE_NONE)
- set_pev(ent, pev_solid, SOLID_NOT)
- }
- public fw_Weapon_PrimaryAttack(ent)
- {
- static id; id = pev(ent, pev_owner)
- pev(id, pev_punchangle, g_PunchAngles[id])
- return HAM_IGNORED
- }
- public fw_Weapon_PrimaryAttack_Post(ent)
- {
- static id; id = pev(ent, pev_owner)
- if(get_player_weapon(id) == CSW_SAL && Get_BitVar(g_Had_Salamander, id) && cs_get_weapon_ammo(ent) > 0)
- {
- 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)
- CreateFire(id, FIRE_SPEED)
- } else {
- static Float:push[3]
- pev(id, pev_punchangle, push)
- xs_vec_sub(push, g_PunchAngles[id], push)
- xs_vec_mul_scalar(push, 0.0, push)
- xs_vec_add(push, g_PunchAngles[id], push)
- set_pev(id, pev_punchangle, push)
- }
- return HAM_IGNORED
- }
- stock Set_WeaponIdleTime(id, WeaponId ,Float:TimeIdle)
- {
- static entwpn; entwpn = fm_get_user_weapon_entity(id, WeaponId)
- if(!pev_valid(entwpn))
- return
- set_pdata_float(entwpn, 46, TimeIdle, 4)
- set_pdata_float(entwpn, 47, TimeIdle, 4)
- set_pdata_float(entwpn, 48, TimeIdle + 0.5, 4)
- }
- stock Set_PlayerNextAttack(id, Float:nexttime)
- {
- set_pdata_float(id, 83, nexttime, 5)
- }
- stock Set_WeaponAnim(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 get_position(id,Float:forw, Float:right, Float:up, Float:vStart[])
- {
- new 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_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
- {
- new_velocity[0] = origin2[0] - origin1[0]
- new_velocity[1] = origin2[1] - origin1[1]
- new_velocity[2] = origin2[2] - origin1[2]
- new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
- new_velocity[0] *= num
- new_velocity[1] *= num
- new_velocity[2] *= num
- return 1;
- }
- stock 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)
- }
- /* ===============================
- ------------- SAFETY -------------
- =================================*/
- public Register_SafetyFunc()
- {
- register_event("CurWeapon", "Safety_CurWeapon", "be", "1=1")
- RegisterHam(Ham_Spawn, "player", "fw_Safety_Spawn_Post", 1)
- RegisterHam(Ham_Killed, "player", "fw_Safety_Killed_Post", 1)
- }
- public Register_SafetyFuncBot(id)
- {
- RegisterHamFromEntity(Ham_Spawn, id, "fw_Safety_Spawn_Post", 1)
- RegisterHamFromEntity(Ham_Killed, id, "fw_Safety_Killed_Post", 1)
- }
- public Safety_Connected(id)
- {
- Set_BitVar(g_IsConnected, id)
- UnSet_BitVar(g_IsAlive, id)
- g_PlayerWeapon[id] = 0
- }
- public Safety_Disconnected(id)
- {
- UnSet_BitVar(g_IsConnected, id)
- UnSet_BitVar(g_IsAlive, id)
- g_PlayerWeapon[id] = 0
- }
- public Safety_CurWeapon(id)
- {
- if(!is_alive(id))
- return
- static CSW; CSW = read_data(2)
- if(g_PlayerWeapon[id] != CSW) g_PlayerWeapon[id] = CSW
- }
- public fw_Safety_Spawn_Post(id)
- {
- if(!is_user_alive(id))
- return
- Set_BitVar(g_IsAlive, id)
- }
- public fw_Safety_Killed_Post(id)
- {
- UnSet_BitVar(g_IsAlive, id)
- }
- public is_connected(id)
- {
- if(!(1 <= id <= 32))
- return 0
- if(!Get_BitVar(g_IsConnected, id))
- return 0
- return 1
- }
- public is_alive(id)
- {
- if(!is_connected(id))
- return 0
- if(!Get_BitVar(g_IsAlive, id))
- return 0
- return 1
- }
- public get_player_weapon(id)
- {
- if(!is_alive(id))
- return 0
- return g_PlayerWeapon[id]
- }
- // ===================== STOCK... =======================
- // ======================================================
- /*
- * Stun Rifle is a CSO weapon, More information about it: http://cso.wikia.com/wiki/Stun_Rifle
- *
- * This plugin written by me: Raheem (The basic things for any weapon not written by me)
- *
- * I tried to simulate it same as in CSO, I think it's nearly same else simple things
- * That will be done in next versions.
- *
- * Version 1.0 creation date: 16-6-2018
- * Version 1.0 publication date: 20-6-2018
- *
- * Last update: 4-8-2018
- *
- * TODO List: Fix any problem, include good ideas
- */
- #include <zombie_escape>
- #include <fakemeta_util>
- #define CustomItem(%0) (pev(%0, pev_impulse) == WEAPON_KEY)
- // CWeaponBox
- #define m_rgpPlayerItems_CWeaponBox 34
- // CBasePlayerItem
- #define m_pPlayer 41
- #define m_pNext 42
- #define m_iId 43
- // CBasePlayerWeapon
- #define m_flNextPrimaryAttack 46
- #define m_flNextSecondaryAttack 47
- #define m_flTimeWeaponIdle 48
- #define m_iPrimaryAmmoType 49
- #define m_iClip 51
- #define m_fInReload 54
- #define m_iWeaponState 74
- // CBaseMonster
- #define m_flNextAttack 83
- // CBasePlayer
- #define m_iFOV 363
- #define m_rpgPlayerItems 367
- #define m_pActiveItem 373
- #define m_rgAmmo 376
- /*-----------------------------------------------------*/
- #define WEAPON_KEY 776544229
- #define WEAPON_OLD "weapon_ak47"
- #define WEAPON_NEW "weapon_stunrifle"
- /*-----------------------------------------------------*/
- new const WPN_SPRITES[][] =
- {
- "sprites/weapon_stunrifle.txt",
- "sprites/640hud169.spr",
- "sprites/640hud7.spr"
- }
- new const g_szSounds[][] =
- {
- "weapons/stunrifle-1.wav",
- "weapons/stunrifle_drawa.wav",
- "weapons/stunrifle_drawb.wav",
- "weapons/stunrifle_drawc.wav",
- "weapons/stunrifle_reloada.wav",
- "weapons/stunrifle_reloadb.wav",
- "weapons/stunrifle_reloadc.wav",
- "weapons/stunrifle_idlea.wav",
- "weapons/stunrifle_idleb.wav",
- "weapons/stunrifle_idlec.wav",
- "weapons/stunrifle_lowbattery.wav",
- "weapons/stunrifle-2.wav"
- }
- new const iWeaponList[] =
- {
- 2, 30, -1, -1, 0, 1, CSW_AK47, 0
- }
- #define WEAPON_MODEL_V "models/stunrifle/v_stunrifle.mdl"
- #define WEAPON_MODEL_P "models/stunrifle/p_stunrifle.mdl"
- #define WEAPON_MODEL_W "models/stunrifle/w_stunrifle.mdl"
- #define WEAPON_BODY 0
- /*-----------------------------------------------------*/
- #define WEAPON_COST 0
- #define WEAPON_CLIP 30
- #define WEAPON_AMMO 90
- #define WEAPON_RATE 0.098
- #define WEAPON_RECOIL 0.96
- #define WEAPON_DAMAGE 1.0 // AK47 damage multiplied by this factor
- #define WEAPON_RATE_EX 0.169
- #define WEAPON_RECOIL_EX 0.79
- #define WEAPON_DAMAGE_EX 1.3
- #define WEAPON_NATIVE "native_give_weapon_stunrifle"
- /*-----------------------------------------------------*/
- // Animations
- #define ANIM_IDLE_A 0
- #define ANIM_IDLE_B 1
- #define ANIM_IDLE_C 2
- #define ANIM_ATTACK_A 3
- #define ANIM_ATTACK_B 4
- #define ANIM_ATTACK_C 5
- #define ANIM_RELOAD_A 6
- #define ANIM_RELOAD_B 7
- #define ANIM_RELOAD_C 8
- #define ANIM_DRAW_A 9
- #define ANIM_DRAW_B 10
- #define ANIM_DRAW_C 11
- // from model: Frames / FPS
- #define ANIM_IDLE_TIME_A 90/30.0
- #define ANIM_SHOOT_TIME_A 31/30.0
- #define ANIM_RELOAD_TIME_A 101/30.0
- #define ANIM_DRAW_TIME_A 46/30.0
- #define ANIM_IDLE_TIME_B 90/30.0
- #define ANIM_SHOOT_TIME_B 31/30.0
- #define ANIM_RELOAD_TIME_B 101/30.0
- #define ANIM_DRAW_TIME_B 46/30.0
- #define ANIM_IDLE_TIME_C 90/30.0
- #define ANIM_SHOOT_TIME_C 31/30.0
- #define ANIM_RELOAD_TIME_C 101/30.0
- #define ANIM_DRAW_TIME_C 46/30.0
- new g_AllocString_V,
- g_AllocString_P,
- g_AllocString_E,
- HamHook: g_fw_TraceAttack[4],
- g_iMsgID_Weaponlist,
- g_iStoredEnergy[33],
- bool:g_bHasStunRifle[33],
- g_pCvarBarFillTime,
- g_pCvarRadius,
- g_pCvarElecDmg,
- g_iLigSpr,
- g_iEffSpr,
- g_iEff2Spr,
- bool:g_bReloading[33],
- g_iAppearTimes[33]
- public plugin_init()
- {
- register_plugin("[ZE] Stun Rifle", "1.1", "Raheem");
- RegisterHam(Ham_Item_Deploy, WEAPON_OLD, "fw_Item_Deploy_Post", 1);
- RegisterHam(Ham_Item_PostFrame, WEAPON_OLD, "fw_Item_PostFrame");
- RegisterHam(Ham_Item_AddToPlayer, WEAPON_OLD, "fw_Item_AddToPlayer_Post", 1);
- RegisterHam(Ham_Weapon_Reload, WEAPON_OLD, "fw_Weapon_Reload");
- RegisterHam(Ham_Weapon_WeaponIdle, WEAPON_OLD, "fw_Weapon_WeaponIdle");
- RegisterHam(Ham_Weapon_PrimaryAttack, WEAPON_OLD, "fw_Weapon_PrimaryAttack");
- g_fw_TraceAttack[0] = RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack");
- g_fw_TraceAttack[1] = RegisterHam(Ham_TraceAttack, "info_target", "fw_TraceAttack");
- g_fw_TraceAttack[2] = RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack");
- g_fw_TraceAttack[3] = RegisterHam(Ham_TraceAttack, "hostage_entity", "fw_TraceAttack");
- fm_ham_hook(false);
- register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1);
- register_forward(FM_PlaybackEvent, "fw_PlaybackEvent");
- register_forward(FM_SetModel, "fw_SetModel");
- g_pCvarBarFillTime = register_cvar("stunrifle_barfill_time", "5") // Bar fill time in seconds
- g_pCvarRadius = register_cvar("stunrifle_radius", "500") // elec radius
- g_pCvarElecDmg = register_cvar("stunrifle_electricity_dmg", "10") // electricity damage - lowest damage for 1 bar only
- register_clcmd(WEAPON_NEW, "HookSelect");
- g_iMsgID_Weaponlist = get_user_msgid("WeaponList");
- }
- public plugin_precache()
- {
- g_AllocString_V = engfunc(EngFunc_AllocString, WEAPON_MODEL_V);
- g_AllocString_P = engfunc(EngFunc_AllocString, WEAPON_MODEL_P);
- g_AllocString_E = engfunc(EngFunc_AllocString, WEAPON_OLD);
- engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_V);
- engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_P);
- engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_W);
- for (new i = 0; i < sizeof g_szSounds; i++) engfunc(EngFunc_PrecacheSound, g_szSounds[i]);
- for(new i = 0; i < sizeof WPN_SPRITES;i++) precache_generic(WPN_SPRITES[i]);
- g_iLigSpr = precache_model("sprites/lightning.spr");
- g_iEffSpr = precache_model("sprites/ef_buffak_hit.spr");
- g_iEff2Spr = precache_model("sprites/muzzleflash67.spr");
- }
- public plugin_natives()
- {
- register_native("ze_give_stunrifle", "native_ze_give_stunrifle", 1)
- }
- public native_ze_give_stunrifle(id)
- {
- give(id)
- }
- public HookSelect(iPlayer)
- {
- engclient_cmd(iPlayer, WEAPON_OLD);
- }
- public give(id)
- {
- give_weapon_stunrifle(id)
- }
- public give_weapon_stunrifle(iPlayer)
- {
- static iEnt; iEnt = engfunc(EngFunc_CreateNamedEntity, g_AllocString_E);
- if(iEnt <= 0) return 0;
- set_pev(iEnt, pev_spawnflags, SF_NORESPAWN);
- set_pev(iEnt, pev_impulse, WEAPON_KEY);
- ExecuteHam(Ham_Spawn, iEnt);
- UTIL_DropWeapon(iPlayer, 1);
- if(!ExecuteHamB(Ham_AddPlayerItem, iPlayer, iEnt)) {
- engfunc(EngFunc_RemoveEntity, iEnt);
- return 0;
- }
- ExecuteHamB(Ham_Item_AttachToPlayer, iEnt, iPlayer);
- set_pdata_int(iEnt, m_iClip, WEAPON_CLIP, 4);
- new iAmmoType = m_rgAmmo +get_pdata_int(iEnt, m_iPrimaryAmmoType, 4);
- if(get_pdata_int(iPlayer, m_rgAmmo, 5) < WEAPON_AMMO)
- set_pdata_int(iPlayer, iAmmoType, WEAPON_AMMO, 5);
- emit_sound(iPlayer, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- g_iStoredEnergy[iPlayer] = 0;
- g_bHasStunRifle[iPlayer] = true;
- set_task(get_pcvar_float(g_pCvarBarFillTime), "RechargeTask", iPlayer, _, _, "a", 6)
- return 1;
- }
- public plugin_natives()
- {
- register_native(WEAPON_NATIVE, "give_weapon_stunrifle", 1);
- }
- public fw_Item_Deploy_Post(iItem)
- {
- if(!CustomItem(iItem)) return;
- static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, 4);
- set_pev_string(iPlayer, pev_viewmodel2, g_AllocString_V);
- set_pev_string(iPlayer, pev_weaponmodel2, g_AllocString_P);
- if (g_iStoredEnergy[iPlayer] == 0)
- {
- // Draw A
- UTIL_SendWeaponAnim(iPlayer, ANIM_DRAW_A);
- emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[1], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- set_pdata_float(iPlayer, m_flNextAttack, ANIM_DRAW_TIME_A, 5);
- set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_DRAW_TIME_A, 4);
- }
- else if (g_iStoredEnergy[iPlayer] > 0 && g_iStoredEnergy[iPlayer] <= 3)
- {
- // Draw B
- UTIL_SendWeaponAnim(iPlayer, ANIM_DRAW_B);
- emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[2], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- set_pdata_float(iPlayer, m_flNextAttack, ANIM_DRAW_TIME_B, 5);
- set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_DRAW_TIME_B, 4);
- }
- else if (g_iStoredEnergy[iPlayer] > 3 && g_iStoredEnergy[iPlayer] <= 6)
- {
- // Draw C
- UTIL_SendWeaponAnim(iPlayer, ANIM_DRAW_C);
- emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[3], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- set_pdata_float(iPlayer, m_flNextAttack, ANIM_DRAW_TIME_C, 5);
- set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_DRAW_TIME_C, 4);
- }
- }
- public fw_Item_PostFrame(iItem)
- {
- if(!CustomItem(iItem)) return HAM_IGNORED;
- static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, 4);
- if(get_pdata_int(iItem, m_fInReload, 4) == 1) {
- static iClip; iClip = get_pdata_int(iItem, m_iClip, 4);
- static iAmmoType; iAmmoType = m_rgAmmo + get_pdata_int(iItem, m_iPrimaryAmmoType, 4);
- static iAmmo; iAmmo = get_pdata_int(iPlayer, iAmmoType, 5);
- static j; j = min(WEAPON_CLIP - iClip, iAmmo);
- set_pdata_int(iItem, m_iClip, iClip+j, 4);
- set_pdata_int(iPlayer, iAmmoType, iAmmo-j, 5);
- set_pdata_int(iItem, m_fInReload, 0, 4);
- }
- else switch(get_pdata_int(iItem, m_iWeaponState, 4) ) {
- case 0: {
- if(get_pdata_float(iItem, m_flNextSecondaryAttack, 4) <= 0.0)
- if(pev(iPlayer, pev_button) & IN_ATTACK2) {
- set_pdata_int(iPlayer, m_iFOV, get_pdata_int(iPlayer, m_iFOV, 5) == 90 ? 60 : 90);
- set_pdata_float(iItem, m_flNextSecondaryAttack, 0.3, 4);
- }
- }
- }
- return HAM_IGNORED;
- }
- public fw_Item_AddToPlayer_Post(iItem, iPlayer)
- {
- switch(pev(iItem, pev_impulse)) {
- case WEAPON_KEY: {
- s_weaponlist(iPlayer, true);
- g_bHasStunRifle[iPlayer] = true;
- if (g_iStoredEnergy[iPlayer] < 6)
- {
- set_task(101/30.0, "OnReloadFinished", iPlayer);
- }
- else if (g_iStoredEnergy[iPlayer] == 6)
- {
- client_print(iPlayer, print_center, "Your Stun Rifle is fully charged!")
- }
- }
- case 0: s_weaponlist(iPlayer, false);
- }
- }
- public ze_user_infected(infected)
- {
- if (g_bHasStunRifle[infected])
- {
- g_bHasStunRifle[infected] = false
- g_iStoredEnergy[infected] = 0;
- }
- }
- public ze_user_humanized(id)
- {
- g_bHasStunRifle[id] = false
- g_iStoredEnergy[id] = 0;
- }
- public fw_Weapon_Reload(iItem)
- {
- if(!CustomItem(iItem)) return HAM_IGNORED;
- static iClip; iClip = get_pdata_int(iItem, m_iClip, 4);
- if(iClip >= WEAPON_CLIP) return HAM_SUPERCEDE;
- static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, 4);
- static iAmmoType; iAmmoType = m_rgAmmo + get_pdata_int(iItem, m_iPrimaryAmmoType, 4);
- if(get_pdata_int(iPlayer, iAmmoType, 5) <= 0) return HAM_SUPERCEDE
- if(get_pdata_int(iPlayer, m_iFOV, 5) != 90) set_pdata_int(iPlayer, m_iFOV, 90, 5);
- set_pdata_int(iItem, m_iClip, 0, 4);
- ExecuteHam(Ham_Weapon_Reload, iItem);
- set_pdata_int(iItem, m_iClip, iClip, 4);
- set_pdata_int(iItem, m_fInReload, 1, 4);
- g_bReloading[iPlayer] = true;
- set_task(3.0, "AttackTask", iPlayer+444)
- if (g_iStoredEnergy[iPlayer] == 0)
- {
- // Reload A
- set_pdata_float(iItem, m_flNextPrimaryAttack, ANIM_RELOAD_TIME_A, 4);
- set_pdata_float(iItem, m_flNextSecondaryAttack, ANIM_RELOAD_TIME_A, 4);
- set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_RELOAD_TIME_A, 4);
- set_pdata_float(iPlayer, m_flNextAttack, ANIM_RELOAD_TIME_A, 5);
- UTIL_SendWeaponAnim(iPlayer, ANIM_RELOAD_A);
- emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[4], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[10], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- }
- else if (g_iStoredEnergy[iPlayer] > 0 && g_iStoredEnergy[iPlayer] <= 3)
- {
- // Reload B
- set_pdata_float(iItem, m_flNextPrimaryAttack, ANIM_RELOAD_TIME_B, 4);
- set_pdata_float(iItem, m_flNextSecondaryAttack, ANIM_RELOAD_TIME_B, 4);
- set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_RELOAD_TIME_B, 4);
- set_pdata_float(iPlayer, m_flNextAttack, ANIM_RELOAD_TIME_B, 5);
- UTIL_SendWeaponAnim(iPlayer, ANIM_RELOAD_B);
- emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[5], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- if (notEmpty(iPlayer))
- {
- emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[11], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- }
- }
- else if (g_iStoredEnergy[iPlayer] > 3 && g_iStoredEnergy[iPlayer] <= 6)
- {
- // Reload C
- set_pdata_float(iItem, m_flNextPrimaryAttack, ANIM_RELOAD_TIME_C, 4);
- set_pdata_float(iItem, m_flNextSecondaryAttack, ANIM_RELOAD_TIME_C, 4);
- set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_RELOAD_TIME_C, 4);
- set_pdata_float(iPlayer, m_flNextAttack, ANIM_RELOAD_TIME_C, 5);
- UTIL_SendWeaponAnim(iPlayer, ANIM_RELOAD_C);
- emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[6], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- if (notEmpty(iPlayer))
- {
- emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[11], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- }
- }
- // Set task to recharge the battary
- remove_task(iPlayer)
- set_task(101/30.0, "OnReloadFinished", iPlayer)
- return HAM_SUPERCEDE;
- }
- public AttackTask(taskid)
- {
- g_bReloading[taskid - 444] = false;
- // After reload reset the stored energy
- g_iStoredEnergy[taskid - 444] = 0;
- g_iAppearTimes[taskid - 444] = 0;
- }
- public client_PreThink(id)
- {
- if (g_bReloading[id] && g_bHasStunRifle[id] && (get_user_weapon(id) == CSW_AK47))
- {
- if (g_iStoredEnergy[id] == 0)
- {
- // Reload A
- }
- else if (g_iStoredEnergy[id] > 0 && g_iStoredEnergy[id] <= 3)
- {
- // Reload B
- static Float:flOrigin[3]
- pev(id, pev_origin, flOrigin)
- new iVictim = -1;
- while ((iVictim = engfunc(EngFunc_FindEntityInSphere, iVictim, flOrigin, get_pcvar_float(g_pCvarRadius))) != 0)
- {
- if (!is_user_alive(iVictim) || !ze_is_user_zombie(iVictim))
- continue
- static Float:flVecOrigin[3];
- pev(iVictim, pev_origin, flVecOrigin);
- ElectricBeam(id, flVecOrigin);
- ExecuteHam(Ham_TakeDamage, iVictim, id, id, get_pcvar_float(g_pCvarElecDmg) * g_iStoredEnergy[id], DMG_SLASH);
- fm_set_user_rendering(iVictim, kRenderFxGlowShell, 51, 51, 225, kRenderNormal, 10);
- set_task(101/30.0, "Delete_Glow", iVictim+4444);
- }
- }
- else if (g_iStoredEnergy[id] > 3 && g_iStoredEnergy[id] <= 6)
- {
- // Reload C
- static Float:flOrigin[3]
- pev(id, pev_origin, flOrigin)
- new iVictim = -1;
- while ((iVictim = engfunc(EngFunc_FindEntityInSphere, iVictim, flOrigin, get_pcvar_float(g_pCvarRadius))) != 0)
- {
- if (!is_user_alive(iVictim) || !ze_is_user_zombie(iVictim))
- continue
- static Float:flVecOrigin[3]
- pev(iVictim, pev_origin, flVecOrigin)
- ElectricBeam(id, flVecOrigin)
- ExecuteHam(Ham_TakeDamage, iVictim, id, id, get_pcvar_float(g_pCvarElecDmg) * g_iStoredEnergy[id], DMG_SLASH);
- fm_set_user_rendering(iVictim, kRenderFxGlowShell, 51, 51, 225, kRenderNormal, 10);
- set_task(101/30.0, "Delete_Glow", iVictim+4444);
- }
- }
- }
- }
- public Delete_Glow(taskid)
- {
- new id = taskid - 4444;
- fm_set_user_rendering(id);
- }
- public OnReloadFinished(id)
- {
- remove_task(id)
- set_task(get_pcvar_float(g_pCvarBarFillTime), "RechargeTask", id, _, _, "a", 6)
- }
- public RechargeTask(id)
- {
- if (!g_bHasStunRifle[id])
- return
- // Increase one bar every x time
- g_iStoredEnergy[id]++
- new szBars[100];
- switch(g_iStoredEnergy[id])
- {
- case 1:
- {
- szBars = "[ | ]";
- }
- case 2:
- {
- szBars = "[ | | ]";
- }
- case 3:
- {
- szBars = "[ | | | ]";
- }
- case 4:
- {
- szBars = "[ | | | | ]";
- }
- case 5:
- {
- szBars = "[ | | | | | ]";
- }
- case 6:
- {
- szBars = "[ | | | | | | ]";
- }
- }
- set_dhudmessage(51, 153, 255, -1.0, -0.16, 0, 0.0, get_pcvar_float(g_pCvarBarFillTime) - 0.2)
- show_dhudmessage(id, "Stun Rifle Battary: %s", szBars)
- if (g_iStoredEnergy[id] == 6)
- {
- client_print(id, print_center, "Your Stun Rifle is fully charged!")
- remove_task(id)
- }
- }
- public fw_Weapon_WeaponIdle(iItem)
- {
- if(!CustomItem(iItem) || get_pdata_float(iItem, m_flTimeWeaponIdle, 4) > 0.0) return HAM_IGNORED;
- static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, 4);
- if (g_iStoredEnergy[iPlayer] == 0)
- {
- // Idle A
- UTIL_SendWeaponAnim(iPlayer, ANIM_IDLE_A);
- set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_IDLE_TIME_A, 4);
- emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[7], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- }
- else if (g_iStoredEnergy[iPlayer] > 0 && g_iStoredEnergy[iPlayer] <= 3)
- {
- // Idle B
- UTIL_SendWeaponAnim(iPlayer, ANIM_IDLE_B);
- set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_IDLE_TIME_B, 4);
- emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[8], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- }
- else if (g_iStoredEnergy[iPlayer] > 3 && g_iStoredEnergy[iPlayer] <= 6)
- {
- // Idle C
- UTIL_SendWeaponAnim(iPlayer, ANIM_IDLE_C);
- set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_IDLE_TIME_C, 4);
- emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[9], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- }
- return HAM_SUPERCEDE;
- }
- public fw_Weapon_PrimaryAttack(iItem)
- {
- if(!CustomItem(iItem)) return HAM_IGNORED;
- static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, 4);
- static iFOV; iFOV = (get_pdata_int(iPlayer, m_iFOV, 5) != 90);
- if(get_pdata_int(iItem, m_iClip, 4) == 0) {
- ExecuteHam(Ham_Weapon_PlayEmptySound, iItem);
- set_pdata_float(iItem, m_flNextPrimaryAttack, 0.2, 4);
- return HAM_SUPERCEDE;
- }
- static fw_TraceLine; fw_TraceLine = register_forward(FM_TraceLine, "fw_TraceLine_Post", 1);
- fm_ham_hook(true);
- state FireBullets: Enabled;
- ExecuteHam(Ham_Weapon_PrimaryAttack, iItem);
- state FireBullets: Disabled;
- unregister_forward(FM_TraceLine, fw_TraceLine, 1);
- fm_ham_hook(false);
- static Float:vecPunchangle[3];
- pev(iPlayer, pev_punchangle, vecPunchangle);
- vecPunchangle[0] *= iFOV ? WEAPON_RECOIL_EX : WEAPON_RECOIL;
- vecPunchangle[1] *= iFOV ? WEAPON_RECOIL_EX : WEAPON_RECOIL;
- vecPunchangle[2] *= iFOV ? WEAPON_RECOIL_EX : WEAPON_RECOIL;
- set_pev(iPlayer, pev_punchangle, vecPunchangle);
- emit_sound(iPlayer, CHAN_WEAPON, g_szSounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- if (g_iStoredEnergy[iPlayer] == 0)
- {
- // Idle A
- UTIL_SendWeaponAnim(iPlayer, ANIM_ATTACK_A);
- set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_SHOOT_TIME_A, 4);
- }
- else if (g_iStoredEnergy[iPlayer] > 0 && g_iStoredEnergy[iPlayer] <= 3)
- {
- // Idle B
- UTIL_SendWeaponAnim(iPlayer, ANIM_ATTACK_B);
- set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_SHOOT_TIME_B, 4);
- }
- else if (g_iStoredEnergy[iPlayer] > 3 && g_iStoredEnergy[iPlayer] <= 6)
- {
- // Idle C
- UTIL_SendWeaponAnim(iPlayer, ANIM_ATTACK_C);
- set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_SHOOT_TIME_C, 4);
- }
- Make_Muzzleflash(iPlayer)
- set_pdata_float(iItem, m_flNextPrimaryAttack, iFOV ? WEAPON_RATE_EX : WEAPON_RATE, 4);
- return HAM_SUPERCEDE;
- }
- public fw_PlaybackEvent() <FireBullets: Enabled> { return FMRES_SUPERCEDE; }
- public fw_PlaybackEvent() <FireBullets: Disabled> { return FMRES_IGNORED; }
- public fw_PlaybackEvent() <> { return FMRES_IGNORED; }
- public fw_TraceAttack(iVictim, iAttacker, Float:flDamage) {
- if(!is_user_connected(iAttacker)) return;
- static iItem; iItem = get_pdata_cbase(iAttacker, m_pActiveItem, 5);
- static iFOV; iFOV = (get_pdata_int(iAttacker, m_iFOV, 5) != 90);
- static Float: flWeaponDamage; flWeaponDamage = (iFOV ? WEAPON_DAMAGE_EX : WEAPON_DAMAGE);
- if(iItem <= 0 || !CustomItem(iItem)) return;
- SetHamParamFloat(3, flDamage * flWeaponDamage);
- }
- public fw_UpdateClientData_Post(iPlayer, SendWeapons, CD_Handle)
- {
- if(get_cd(CD_Handle, CD_DeadFlag) != DEAD_NO) return;
- static iItem; iItem = get_pdata_cbase(iPlayer, m_pActiveItem, 5);
- if(iItem <= 0 || !CustomItem(iItem)) return;
- set_cd(CD_Handle, CD_flNextAttack, 999999.0);
- }
- public fw_SetModel(iEnt)
- {
- static i, szClassname[32], iItem;
- pev(iEnt, pev_classname, szClassname, 31);
- if(!equal(szClassname, "weaponbox")) return FMRES_IGNORED;
- for(i = 0; i < 6; i++) {
- iItem = get_pdata_cbase(iEnt, m_rgpPlayerItems_CWeaponBox + i, 4);
- if(iItem > 0 && CustomItem(iItem)) {
- engfunc(EngFunc_SetModel, iEnt, WEAPON_MODEL_W);
- set_pev(iEnt, pev_body, WEAPON_BODY);
- new iPlayer = pev(iEnt, pev_owner);
- g_bHasStunRifle[iPlayer] = false;
- remove_task(iPlayer)
- return FMRES_SUPERCEDE;
- }
- }
- return FMRES_IGNORED;
- }
- public fw_TraceLine_Post(const Float:flOrigin1[3], const Float:flOrigin2[3], iFrag, iIgnore, tr)
- {
- if(iFrag & IGNORE_MONSTERS) return FMRES_IGNORED;
- static pHit; pHit = get_tr2(tr, TR_pHit);
- static Float:flvecEndPos[3]; get_tr2(tr, TR_vecEndPos, flvecEndPos);
- if(pHit > 0) {
- if(pev(pHit, pev_solid) != SOLID_BSP) return FMRES_IGNORED;
- }
- engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, flvecEndPos, 0);
- write_byte(TE_GUNSHOTDECAL);
- engfunc(EngFunc_WriteCoord, flvecEndPos[0]);
- engfunc(EngFunc_WriteCoord, flvecEndPos[1]);
- engfunc(EngFunc_WriteCoord, flvecEndPos[2]);
- write_short(pHit > 0 ? pHit : 0);
- write_byte(random_num(41, 45));
- message_end();
- return FMRES_IGNORED;
- }
- public fm_ham_hook(bool:on) {
- if(on) {
- EnableHamForward(g_fw_TraceAttack[0]);
- EnableHamForward(g_fw_TraceAttack[1]);
- EnableHamForward(g_fw_TraceAttack[2]);
- EnableHamForward(g_fw_TraceAttack[3]);
- }
- else {
- DisableHamForward(g_fw_TraceAttack[0]);
- DisableHamForward(g_fw_TraceAttack[1]);
- DisableHamForward(g_fw_TraceAttack[2]);
- DisableHamForward(g_fw_TraceAttack[3]);
- }
- }
- stock UTIL_SendWeaponAnim(iPlayer, iAnim)
- {
- set_pev(iPlayer, pev_weaponanim, iAnim);
- message_begin(MSG_ONE, SVC_WEAPONANIM, _, iPlayer);
- write_byte(iAnim);
- write_byte(0);
- message_end();
- }
- stock UTIL_DropWeapon(iPlayer, iSlot) {
- static iEntity, iNext, szWeaponName[32];
- iEntity = get_pdata_cbase(iPlayer, m_rpgPlayerItems + iSlot, 5);
- if(iEntity > 0) {
- do {
- iNext = get_pdata_cbase(iEntity, m_pNext, 4)
- if(get_weaponname(get_pdata_int(iEntity, m_iId, 4), szWeaponName, 31)) {
- engclient_cmd(iPlayer, "drop", szWeaponName);
- }
- } while(( iEntity = iNext) > 0);
- }
- }
- stock s_weaponlist(iPlayer, bool:on)
- {
- message_begin(MSG_ONE, g_iMsgID_Weaponlist, {0,0,0}, iPlayer);
- write_string(on ? WEAPON_NEW : WEAPON_OLD);
- write_byte(iWeaponList[0]);
- write_byte(on ? WEAPON_AMMO : iWeaponList[1]);
- write_byte(iWeaponList[2]);
- write_byte(iWeaponList[3]);
- write_byte(iWeaponList[4]);
- write_byte(iWeaponList[5]);
- write_byte(iWeaponList[6]);
- write_byte(iWeaponList[7]);
- message_end();
- }
- stock ElectricBeam(id, Float:flOrigin[3])
- {
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
- write_byte(TE_BEAMENTPOINT)
- write_short(id | 0x1000)
- engfunc(EngFunc_WriteCoord, flOrigin[0])
- engfunc(EngFunc_WriteCoord, flOrigin[1])
- engfunc(EngFunc_WriteCoord, flOrigin[2])
- write_short(g_iLigSpr)
- write_byte(1); // framestart
- write_byte(100); // framerate - 5
- write_byte(1) // life - 30
- write_byte(30); // width
- write_byte(random_num(0, 10)); // noise
- write_byte(51); // r, g, b
- write_byte(51); // r, g, b
- write_byte(255); // r, g, b
- write_byte(200); // brightness
- write_byte(200); // speed
- message_end()
- if (g_iAppearTimes[id] >= 2)
- return
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
- write_byte(TE_EXPLOSION);
- engfunc(EngFunc_WriteCoord, flOrigin[0]);
- engfunc(EngFunc_WriteCoord, flOrigin[1]);
- engfunc(EngFunc_WriteCoord, flOrigin[2]);
- write_short(g_iEffSpr);
- write_byte(10);
- write_byte(10);
- write_byte(TE_EXPLFLAG_NOSOUND|TE_EXPLFLAG_NOPARTICLES|TE_EXPLFLAG_NODLIGHTS);
- message_end();
- g_iAppearTimes[id]++
- }
- stock notEmpty(id)
- {
- static Float:flOrigin[3]
- pev(id, pev_origin, flOrigin)
- new iVictim = -1;
- while ((iVictim = engfunc(EngFunc_FindEntityInSphere, iVictim, flOrigin, get_pcvar_float(g_pCvarRadius))) != 0)
- {
- if (!is_user_alive(iVictim) || !ze_is_user_zombie(iVictim))
- continue
- return true;
- }
- return false;
- }
- public Make_Muzzleflash(id)
- {
- static Float:Origin[3], TE_FLAG
- get_position(id, 32.0, 6.0, -15.0, Origin)
- TE_FLAG |= TE_EXPLFLAG_NODLIGHTS
- TE_FLAG |= TE_EXPLFLAG_NOSOUND
- TE_FLAG |= TE_EXPLFLAG_NOPARTICLES
- engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, Origin, id)
- write_byte(TE_EXPLOSION)
- engfunc(EngFunc_WriteCoord, Origin[0])
- engfunc(EngFunc_WriteCoord, Origin[1])
- engfunc(EngFunc_WriteCoord, Origin[2])
- write_short(g_iEff2Spr)
- write_byte(2)
- write_byte(30)
- write_byte(TE_FLAG)
- message_end()
- }
- stock get_position(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
- }
- #include <zombie_escape>
- static const plugin[] = "[ZE] Extra Item: Bazooka";
- static const mrocket[] = "models/zombie_escape/zm_bazooka_missile.mdl";
- static const mrpg_w[] = "models/zombie_escape/w_zm_bazooka.mdl";
- static const mrpg_v[] = "models/zombie_escape/v_zm_bazooka.mdl";
- static const mrpg_p[] = "models/zombie_escape/p_zm_bazooka.mdl";
- static const sfire[] = "weapons/rocketfire1.wav";
- static const sfly[] = "weapons/nuke_fly.wav";
- static const shit[] = "weapons/mortarhit.wav";
- static const spickup[] = "items/gunpickup2.wav";
- new gmsg_screenshake, gmsg_death, gmsg_damage, pcvar_delay, pcvar_maxdmg, pcvar_radius, pcvar_map;
- new rocketsmoke, explosion, bazsmoke, white;
- new bool:has_baz[33], bool:CanShoot[33];
- new dmgcount[33], pcvar_dmgforpacks, pcvar_award;
- public plugin_init()
- {
- register_plugin(plugin, "0.6", "Random1");
- pcvar_delay = register_cvar("zp_baz_delay", "10.0");
- pcvar_maxdmg = register_cvar("zp_baz_dmg", "720");
- pcvar_radius = register_cvar("zp_baz_radius", "750");
- pcvar_map = register_cvar("zp_baz_map", "0");
- pcvar_dmgforpacks = get_cvar_pointer("zp_human_damage_reward");
- pcvar_award = register_cvar("zp_baz_awardpacks", "1");
- if ( pcvar_dmgforpacks == 0 ) {
- set_pcvar_num(pcvar_award, 0); //if we couldn't read the dmg cvar from zp then set a stop state on dmg reward
- log_amx("[%s] error reading zp_human_damage_reward cvar from zombie plague, turning award for damage off", plugin);
- }
- register_concmd("zp_bazooka", "give_bazooka", ADMIN_KICK, "<name/@all> gives a bazooka to the spcified target");
- register_event("CurWeapon","switch_to_knife","be","1=1","2=29");
- register_event("HLTV", "event_HLTV", "a", "1=0", "2=0") // New Round
- register_clcmd("drop", "drop_call");
- //supports 2 methods of firing, attacking while holding knife and a bind
- register_clcmd("baz_fire", "fire_call");
- register_forward(FM_PlayerPreThink, "fw_prethink");
- register_forward(FM_Touch, "fw_touch");
- gmsg_screenshake = get_user_msgid("ScreenShake");
- gmsg_death = get_user_msgid("DeathMsg");
- gmsg_damage = get_user_msgid("Damage");
- }
- public plugin_natives()
- {
- register_native("ze_give_bazzoka", "native_ze_give_bazzoka", 1)
- }
- public native_ze_give_bazzoka(id)
- {
- has_baz[id] = true;
- CanShoot[id] = true;
- }
- public event_HLTV()
- {
- //remove entities regardless of cvar
- new rpg_temp = engfunc(EngFunc_FindEntityByString, -1, "classname", "rpg_temp");
- while( rpg_temp > 0) {
- engfunc(EngFunc_RemoveEntity, rpg_temp);
- rpg_temp = engfunc(EngFunc_FindEntityByString, -1, "classname", "rpg_temp");
- }
- if ( get_pcvar_num(pcvar_map) ) return;
- for( new id = 1; id <= 32; id++ )
- has_baz[id] = false;
- }
- public give_bazooka(id,level,cid)
- {
- if (!cmd_access(id,level,cid,1)) {
- console_print(id,"You have no access to that command");
- return;
- }
- if (read_argc() > 2) {
- console_print(id,"Too many arguments supplied.");
- return;
- }
- new arg1[32];
- read_argv(1, arg1, sizeof(arg1) - 1);
- new player = cmd_target(id, arg1, 10);
- if ( !player ) {
- if ( arg1[0] == '@' ) {
- for ( new i = 1; i <= 32; i++ ) {
- if ( is_user_connected(i) && !has_baz[i] && !ze_is_user_zombie(i) ) {
- has_baz[i] = true;
- CanShoot[i] = true;
- client_print(i, print_chat, "[ZP BAZ] You now have a bazooka, attack while holding knife(will take %2.1f seconds to reload", get_pcvar_float(pcvar_delay));
- }
- }
- } else {
- client_print(id, print_chat, "No Such Player/Team");
- return;
- }
- } else if ( !has_baz[player] && !ze_is_user_zombie(player) ) {
- has_baz[player] = true;
- CanShoot[player] = true;
- client_print(player, print_chat, "[ZP BAZ] You now have a bazooka, attack while holding knife(will take %2.1f seconds to reload", get_pcvar_float(pcvar_delay));
- }
- }
- public ze_user_infected(id, infector)
- if ( has_baz[id] )
- drop_rpg_temp(id);
- public plugin_precache()
- {
- precache_model(mrocket);
- precache_model(mrpg_w);
- precache_model(mrpg_v);
- precache_model(mrpg_p);
- precache_sound(sfire);
- precache_sound(sfly);
- precache_sound(shit);
- precache_sound(spickup);
- rocketsmoke = precache_model("sprites/smoke.spr");
- explosion = precache_model("sprites/fexplo.spr");
- bazsmoke = precache_model("sprites/steam1.spr");
- white = precache_model("sprites/white.spr");
- }
- public switch_to_knife(id)
- {
- if ( !is_user_alive(id) ) return;
- if ( has_baz[id] && CanShoot[id] )
- {
- set_pev(id, pev_viewmodel2, mrpg_v);
- set_pev(id, pev_weaponmodel2, mrpg_p);
- }
- }
- public fw_prethink(id)
- {
- static button;
- button = pev(id, pev_button);
- if ( button & IN_ATTACK )
- fire_call(id);
- }
- public fire_call(id)
- {
- if ( !is_user_alive(id) || !has_baz[id] || !CanShoot[id] ) return;
- new weapon = get_user_weapon(id);
- if ( weapon == CSW_KNIFE ) fire_rocket(id);
- }
- fire_rocket(id) {
- if ( !CanShoot[id] ) return;
- CanShoot[id] = false;
- set_task(get_pcvar_float(pcvar_delay), "rpg_reload", id);
- engclient_cmd(id, "weapon_knife"); //attempt to force model to reset
- new Float:StartOrigin[3], Float:Angle[3];
- pev(id, pev_origin, StartOrigin);
- pev(id, pev_angles, Angle);
- new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
- set_pev(ent, pev_classname, "rpgrocket");
- engfunc(EngFunc_SetModel, ent, mrocket);
- set_pev(ent, pev_mins, {-1.0, -1.0, -1.0});
- set_pev(ent, pev_maxs, {1.0, 1.0, 1.0});
- engfunc(EngFunc_SetOrigin, ent, StartOrigin);
- set_pev(ent, pev_angles, Angle);
- set_pev(ent, pev_solid, 2);
- set_pev(ent, pev_movetype, 5);
- set_pev(ent, pev_owner, id);
- new Float:nVelocity[3];
- velocity_by_aim(id, 1500, nVelocity);
- set_pev(ent, pev_velocity, nVelocity);
- emit_sound(ent, CHAN_WEAPON, sfire, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- emit_sound(ent, CHAN_VOICE, sfly, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
- write_byte(22);
- write_short(ent);
- write_short(rocketsmoke);
- write_byte(30);
- write_byte(3);
- write_byte(255);
- write_byte(255);
- write_byte(255);
- write_byte(255);
- message_end();
- }
- //---------------------------------------------------------------------------------------
- public rpg_reload(id)
- {
- CanShoot[id] = true;
- if ( get_user_weapon(id) == CSW_KNIFE ) switch_to_knife(id); //sets our model
- }
- //---------------------------------------------------------------------------------------
- public fw_touch(ent, touched)
- {
- if ( !pev_valid(ent) ) return FMRES_IGNORED;
- static entclass[32];
- pev(ent, pev_classname, entclass, 31);
- if ( equali(entclass, "rpg_temp") )
- {
- static touchclass[32];
- pev(touched, pev_classname, touchclass, 31);
- if ( !equali(touchclass, "player") ) return FMRES_IGNORED;
- if( !is_user_alive(touched) || ze_is_user_zombie(touched) ) return FMRES_IGNORED;
- emit_sound(touched, CHAN_VOICE, spickup, 1.0, ATTN_NORM, 0, PITCH_NORM);
- has_baz[touched] = true;
- engfunc(EngFunc_RemoveEntity, ent);
- return FMRES_HANDLED;
- }
- else if ( equali(entclass, "rpgrocket") )
- {
- new Float:EndOrigin[3];
- pev(ent, pev_origin, EndOrigin);
- new NonFloatEndOrigin[3];
- NonFloatEndOrigin[0] = floatround(EndOrigin[0]);
- NonFloatEndOrigin[1] = floatround(EndOrigin[1]);
- NonFloatEndOrigin[2] = floatround(EndOrigin[2]);
- emit_sound(ent, CHAN_WEAPON, shit, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- emit_sound(ent, CHAN_VOICE, shit, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
- write_byte(17);
- write_coord(NonFloatEndOrigin[0]);
- write_coord(NonFloatEndOrigin[1]);
- write_coord(NonFloatEndOrigin[2] + 128);
- write_short(explosion);
- write_byte(60);
- write_byte(255);
- message_end();
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
- write_byte(5);
- write_coord(NonFloatEndOrigin[0]);
- write_coord(NonFloatEndOrigin[1]);
- write_coord(NonFloatEndOrigin[2] + 256);
- write_short(bazsmoke);
- write_byte(125);
- write_byte(5);
- message_end();
- new maxdamage = get_pcvar_num(pcvar_maxdmg);
- new damageradius = get_pcvar_num(pcvar_radius);
- new PlayerPos[3], distance, damage;
- for (new i = 1; i <= 32; i++) {
- if ( is_user_alive(i))
- {
- new id = pev(ent, pev_owner)
- if ((ze_is_user_zombie(id)))
- continue;
- get_user_origin(i, PlayerPos);
- distance = get_distance(PlayerPos, NonFloatEndOrigin);
- if (distance <= damageradius) {
- message_begin(MSG_ONE, gmsg_screenshake, {0,0,0}, i);
- write_short(1<<14);
- write_short(1<<14);
- write_short(1<<14);
- message_end();
- damage = maxdamage - floatround(floatmul(float(maxdamage), floatdiv(float(distance), float(damageradius))));
- new attacker = pev(ent, pev_owner);
- baz_damage(i, attacker, damage, "bazooka");
- }
- }
- }
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
- write_byte(21);
- write_coord(NonFloatEndOrigin[0]);
- write_coord(NonFloatEndOrigin[1]);
- write_coord(NonFloatEndOrigin[2]);
- write_coord(NonFloatEndOrigin[0]);
- write_coord(NonFloatEndOrigin[1]);
- write_coord(NonFloatEndOrigin[2] + 320);
- write_short(white);
- write_byte(0);
- write_byte(0);
- write_byte(16);
- write_byte(128);
- write_byte(0);
- write_byte(255);
- write_byte(255);
- write_byte(192);
- write_byte(128);
- write_byte(0);
- message_end();
- engfunc(EngFunc_RemoveEntity, ent);
- return FMRES_HANDLED;
- }
- return FMRES_IGNORED;
- }
- //---------------------------------------------------------------------------------------
- public drop_call(id)
- {
- if ( has_baz[id] && get_user_weapon(id) == CSW_KNIFE )
- {
- drop_rpg_temp(id);
- return PLUGIN_HANDLED; //attempt to block can't drop knife message
- }
- return PLUGIN_CONTINUE;
- }
- drop_rpg_temp(id) {
- new Float:fAim[3] , Float:fOrigin[3];
- velocity_by_aim(id , 64 , fAim);
- pev(id , pev_origin , fOrigin);
- fOrigin[0] += fAim[0];
- fOrigin[1] += fAim[1];
- new rpg = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
- set_pev(rpg, pev_classname, "rpg_temp");
- engfunc(EngFunc_SetModel, rpg, mrpg_w);
- set_pev(rpg, pev_mins, { -16.0, -16.0, -16.0 } );
- set_pev(rpg, pev_maxs, { 16.0, 16.0, 16.0 } );
- set_pev(rpg , pev_solid , 1);
- set_pev(rpg , pev_movetype , 6);
- engfunc(EngFunc_SetOrigin, rpg, fOrigin);
- has_baz[id] = false;
- }
- //---------------------------------------------------------------------------------------
- baz_damage(id, attacker, damage, weaponDescription[])
- {
- if ( pev(id, pev_takedamage) == DAMAGE_NO ) return;
- if ( damage <= 0 ) return;
- new userHealth = get_user_health(id);
- if (userHealth - damage <= 0 ) {
- dmgcount[attacker] += userHealth - damage;
- set_msg_block(gmsg_death, BLOCK_SET);
- ExecuteHamB(Ham_Killed, id, attacker, 2);
- set_msg_block(gmsg_death, BLOCK_NOT);
- message_begin(MSG_BROADCAST, gmsg_death);
- write_byte(attacker);
- write_byte(id);
- write_byte(0);
- write_string(weaponDescription);
- message_end();
- set_pev(attacker, pev_frags, float(get_user_frags(attacker) + 1));
- new kname[32], vname[32], kauthid[32], vauthid[32], kteam[10], vteam[10];
- get_user_name(attacker, kname, 31);
- get_user_team(attacker, kteam, 9);
- get_user_authid(attacker, kauthid, 31);
- get_user_name(id, vname, 31);
- get_user_team(id, vteam, 9);
- get_user_authid(id, vauthid, 31);
- log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
- kname, get_user_userid(attacker), kauthid, kteam,
- vname, get_user_userid(id), vauthid, vteam, weaponDescription);
- }
- else {
- dmgcount[attacker] += damage;
- new origin[3];
- get_user_origin(id, origin);
- message_begin(MSG_ONE,gmsg_damage,{0,0,0},id);
- write_byte(21);
- write_byte(20);
- write_long(DMG_BLAST);
- write_coord(origin[0]);
- write_coord(origin[1]);
- write_coord(origin[2]);
- message_end();
- set_pev(id, pev_health, pev(id, pev_health) - float(damage));
- }
- if ( !get_pcvar_num(pcvar_award) ) return;
- new breaker = get_pcvar_num(pcvar_dmgforpacks);
- if ( dmgcount[attacker] > breaker )
- {
- new temp = dmgcount[attacker] / breaker
- if ( temp * breaker > dmgcount[attacker] ) return; //should never be possible
- dmgcount[attacker] -= temp * breaker;
- ze_set_escape_coins( attacker, ze_get_escape_coins(attacker) + temp );
- }
- }
- #include <zombie_escape>
- #include <fakemeta_util>
- #define PLUGIN "[ZE] CSO Laser Minigun"
- #define VERSION "1.1"
- #define AUTHOR "Asep Khairul Anam"
- /**** Changelog 1.1 ****
- -> Fixed Bug Laserminigun Charge Mode
- -> Fixed Some Crash And Bug
- -> Rewrite Code
- -> Add To Mode Zombie Escape (Add Extra Items)
- *************************/
- #define weapon_name "weapon_m249"
- #define weapon_new "weapon_laserminigun"
- #define VIP_ACCESS ADMIN_LEVEL_H
- #define ANIM_IDLE 0
- #define ANIM_SHOOT_1 7
- #define ANIM_SHOOT_2 8
- #define ANIM_RELOAD 5
- #define ANIM_DRAW 6
- #define IDLE_TIME 1.7
- #define DRAW_TIME 2.53
- #define RELOAD_TIME 5.23
- #define WEAPON_KEY 38591238491
- #define Is_CustomItem(%0) (pev(%0,pev_impulse) == WEAPON_KEY)
- #define MODEL_V "models/zombie_escape/v_laserminigun.mdl"
- #define MODEL_W "models/zombie_escape/w_laserminigun.mdl"
- #define MODEL_P "models/zombie_escape/p_laserminiguna.mdl"
- #define MODEL_P_CHARGE "models/zombie_escape/p_laserminigunb.mdl"
- /******* CONFIGURATION LASERMINIGUN ********/
- #define RECOIL 0.4
- #define DAMAGE_LOW 0.8
- #define DAMAGE_HIGH 1.5
- #define DAMAGE_EXTREME 2.0
- #define WEAPON_SPEED 0.07
- #define DAMAGE_BALL_1 330.0
- #define DAMAGE_BALL_2 550.0
- #define DAMAGE_BALL_3 770.0
- #define EXPLODE_RADIUS 250.0
- #define WEAPON_CLIP 125
- #define WEAPON_BPAMMO 250
- #define SHOOTS_FOR_HIGH 20
- #define SHOOTS_FOR_EXTRREME SHOOTS_FOR_HIGH + 20
- /**** END OF CONFIGURATION LASERMINIGUN ****/
- #define classname_ball "laserminigun_ball"
- #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))
- #define MUZZLEFLASH_1 "sprites/muzzleflash37.spr"
- #define MUZZLEFLASH_2 "sprites/muzzleflash38.spr"
- #define MUZZLEFLASH_3 "sprites/muzzleflash39.spr"
- #define SPRITE_BALL_1 "sprites/laserminigun_charge_1.spr"
- #define SPRITE_BALL_2 "sprites/laserminigun_charge_2.spr"
- #define SPRITE_BALL_3 "sprites/laserminigun_charge_3.spr"
- new gMaxPlayers, Msg_WeaponList, g_AllocString_V
- new g_ChargeState[512],g_ChargeShots[512], g_AllocString_P, g_AllocString_P_charge
- new Float:g_VecEndTrace[3], g_ChargeBall[33], g_ChargeForEntity[33]
- new g_ChargeBall1_Explosion, g_ChargeBall2_Explosion, g_ChargeBall3_Explosion
- new g_Muzzleflash_Ent1,g_Muzzleflash1
- new g_Muzzleflash_Ent2,g_Muzzleflash2
- new g_Muzzleflash_Ent3,g_Muzzleflash3
- new g_MuzzleflashBall_Ent1,g_MuzzleflashBall1
- new g_MuzzleflashBall_Ent2,g_MuzzleflashBall2
- new g_MuzzleflashBall_Ent3,g_MuzzleflashBall3
- new const Weapon_Sounds[15][] =
- {
- "weapons/laserminigun-1.wav", // 0
- "weapons/laserminigun-charge_start.wav", // 1
- "weapons/laserminigun-charge_loop.wav", // 2
- "weapons/laserminigun-charge_origin.wav", // 3
- "weapons/laserminigun-charge_shoot.wav", // 4
- "weapons/laserminigun_idle.wav", // 5
- "weapons/laserminigun_draw.wav", // 6
- "weapons/laserminigun_clipout2.wav", // 7
- "weapons/laserminigun_clipout1.wav", // 8
- "weapons/laserminigun_clipin2.wav", // 9
- "weapons/laserminigun_clipin1.wav", // 10
- "weapons/laserminigun_charge_end.wav", // 11
- "weapons/laserminigun_exp1.wav", // 12
- "weapons/laserminigun_exp2.wav", // 13
- "weapons/laserminigun_exp3.wav" // 14
- }
- enum
- {
- STATE_LOW = 0,
- STATE_HIGH,
- STATE_EXTREME,
- STATE_CHARGE
- }
- public plugin_init()
- {
- register_plugin(PLUGIN, VERSION, AUTHOR)
- RegisterHam(Ham_Item_Deploy,weapon_name,"HookHam_Weapon_Deploy",1)
- RegisterHam(Ham_Item_AddToPlayer,weapon_name,"HookHam_Weapon_Add",1)
- RegisterHam(Ham_Item_PostFrame,weapon_name,"HookHam_Weapon_Frame",0)
- RegisterHam(Ham_Weapon_Reload,weapon_name,"HookHam_Weapon_Reload",0)
- RegisterHam(Ham_Weapon_WeaponIdle,weapon_name,"HookHam_Weapon_Idle",0)
- RegisterHam(Ham_Weapon_PrimaryAttack,weapon_name,"HookHam_Weapon_PrimaryAttack",0)
- RegisterHam(Ham_TakeDamage,"player","HookHam_TakeDamage")
- register_forward(FM_SetModel,"HookFm_SetModel")
- register_forward(FM_AddToFullPack,"fw_AddToFullPack_post",1)
- register_forward(FM_CheckVisibility,"fw_CheckVisibility")
- register_forward(FM_UpdateClientData,"HookFm_UpdateClientData",1)
- register_touch("*", classname_ball, "BallTouch")
- gMaxPlayers = get_maxplayers()
- Msg_WeaponList = get_user_msgid("WeaponList");
- register_clcmd(weapon_new,"hook_item")
- }
- public plugin_precache()
- {
- engfunc(EngFunc_PrecacheModel, MODEL_W)
- engfunc(EngFunc_PrecacheModel, MODEL_V)
- engfunc(EngFunc_PrecacheModel, MODEL_P)
- engfunc(EngFunc_PrecacheModel, MODEL_P_CHARGE)
- engfunc(EngFunc_PrecacheModel, SPRITE_BALL_1)
- engfunc(EngFunc_PrecacheModel, SPRITE_BALL_2)
- engfunc(EngFunc_PrecacheModel, SPRITE_BALL_3)
- g_AllocString_V = engfunc(EngFunc_AllocString, MODEL_V)
- g_AllocString_P = engfunc(EngFunc_AllocString, MODEL_P)
- g_AllocString_P_charge = engfunc(EngFunc_AllocString, MODEL_P_CHARGE)
- for(new i = 0; i < sizeof(Weapon_Sounds); i++)
- engfunc(EngFunc_PrecacheSound,Weapon_Sounds[i])
- g_ChargeBall1_Explosion = engfunc(EngFunc_PrecacheModel,"sprites/laserminigun_explode_1.spr")
- g_ChargeBall2_Explosion = engfunc(EngFunc_PrecacheModel,"sprites/laserminigun_explode_2.spr")
- g_ChargeBall3_Explosion = engfunc(EngFunc_PrecacheModel,"sprites/laserminigun_explode_3.spr")
- g_Muzzleflash_Ent1 = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
- precache_model(MUZZLEFLASH_1)
- engfunc(EngFunc_SetModel,g_Muzzleflash_Ent1,MUZZLEFLASH_1)
- set_pev(g_Muzzleflash_Ent1,pev_scale,0.1)
- set_pev(g_Muzzleflash_Ent1,pev_rendermode,kRenderTransTexture)
- set_pev(g_Muzzleflash_Ent1,pev_renderamt,0.0)
- g_Muzzleflash_Ent2 = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
- precache_model(MUZZLEFLASH_2)
- engfunc(EngFunc_SetModel,g_Muzzleflash_Ent2,MUZZLEFLASH_2)
- set_pev(g_Muzzleflash_Ent2,pev_scale,0.1)
- set_pev(g_Muzzleflash_Ent2,pev_rendermode,kRenderTransTexture)
- set_pev(g_Muzzleflash_Ent2,pev_renderamt,0.0)
- g_Muzzleflash_Ent3 = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
- precache_model(MUZZLEFLASH_3)
- engfunc(EngFunc_SetModel,g_Muzzleflash_Ent3,MUZZLEFLASH_3)
- set_pev(g_Muzzleflash_Ent3,pev_scale,0.1)
- set_pev(g_Muzzleflash_Ent3,pev_rendermode,kRenderTransTexture)
- set_pev(g_Muzzleflash_Ent3,pev_renderamt,0.0)
- g_MuzzleflashBall_Ent1 = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
- engfunc(EngFunc_SetModel,g_MuzzleflashBall_Ent1,SPRITE_BALL_1)
- set_pev(g_MuzzleflashBall_Ent1,pev_scale,0.1)
- set_pev(g_MuzzleflashBall_Ent1,pev_rendermode,kRenderTransTexture)
- set_pev(g_MuzzleflashBall_Ent1,pev_renderamt,0.0)
- set_pev(g_MuzzleflashBall_Ent1,pev_fuser1, 0.1)
- g_MuzzleflashBall_Ent2 = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
- engfunc(EngFunc_SetModel,g_MuzzleflashBall_Ent2,SPRITE_BALL_2)
- set_pev(g_MuzzleflashBall_Ent2,pev_scale,0.2)
- set_pev(g_MuzzleflashBall_Ent2,pev_rendermode,kRenderTransTexture)
- set_pev(g_MuzzleflashBall_Ent2,pev_renderamt,0.0)
- set_pev(g_MuzzleflashBall_Ent2,pev_fuser1, 0.2)
- g_MuzzleflashBall_Ent3 = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
- engfunc(EngFunc_SetModel,g_MuzzleflashBall_Ent3,SPRITE_BALL_3)
- set_pev(g_MuzzleflashBall_Ent3,pev_scale,0.25)
- set_pev(g_MuzzleflashBall_Ent3,pev_rendermode,kRenderTransTexture)
- set_pev(g_MuzzleflashBall_Ent3,pev_renderamt,0.0)
- set_pev(g_MuzzleflashBall_Ent3,pev_fuser1, 0.25)
- engfunc(EngFunc_PrecacheGeneric,MUZZLEFLASH_1)
- engfunc(EngFunc_PrecacheGeneric,MUZZLEFLASH_2)
- engfunc(EngFunc_PrecacheGeneric,MUZZLEFLASH_3)
- engfunc(EngFunc_PrecacheGeneric,"sprites/640hud133.spr")
- engfunc(EngFunc_PrecacheGeneric,"sprites/640hud14.spr")
- engfunc(EngFunc_PrecacheGeneric,"sprites/weapon_laserminigun.txt")
- register_forward(FM_Spawn,"HookFm_Spawn",0)
- }
- public plugin_natives()
- {
- register_native("give_laserminigun","get_item", 1)
- }
- public ze_user_infected(id)
- {
- remove_laserminigun(id)
- }
- public ze_user_humanized(id)
- {
- remove_laserminigun(id)
- }
- public remove_laserminigun(id)
- {
- g_ChargeBall[id] = 0
- g_ChargeForEntity[id] = 0
- UnSet_BitVar(g_MuzzleflashBall1,id)
- UnSet_BitVar(g_MuzzleflashBall2,id)
- UnSet_BitVar(g_MuzzleflashBall3,id)
- }
- public client_command(id)
- {
- new Command[32];read_argv(0,Command,charsmax(Command));
- new ent = fm_find_ent_by_owner(-1,weapon_name,id)
- if(equali(Command,"weapon_",7) && g_ChargeBall[id] && Is_CustomItem(ent) || equali(Command,"lastinv") && g_ChargeBall[id] && Is_CustomItem(ent))
- {
- client_print(id,print_center,"Saat Ini Senjata Tidak Bisa Di Ganti")
- return PLUGIN_HANDLED;
- }
- else if(equali(Command,"drop") && g_ChargeBall[id] && Is_CustomItem(ent))
- {
- client_print(id,print_center,"Saat Ini Senjata Tidak Bisa Di Drop")
- return PLUGIN_HANDLED;
- }
- return PLUGIN_CONTINUE;
- }
- public get_item(id)
- {
- UTIL_DropWeapon(id,1)
- new weapon = make_weapon()
- if(weapon <= 0)
- return
- if(!ExecuteHamB(Ham_AddPlayerItem,id,weapon))
- {
- engfunc(EngFunc_RemoveEntity,weapon)
- return
- }
- ExecuteHam(Ham_Item_AttachToPlayer,weapon,id)
- new ammotype = 376 + get_pdata_int(weapon,49,4)
- new ammo = get_pdata_int(id,ammotype,5)
- if(ammo < WEAPON_BPAMMO)
- set_pdata_int(id, ammotype, WEAPON_BPAMMO, 5)
- set_pdata_int(weapon, 51, WEAPON_CLIP, 4)
- emit_sound(id,CHAN_ITEM,"items/gunpickup2.wav",VOL_NORM,ATTN_NORM,0,PITCH_NORM)
- g_ChargeState[weapon] = STATE_LOW
- g_ChargeShots[weapon] = 0
- g_ChargeBall[id] = 0
- g_ChargeForEntity[id] = 0
- UnSet_BitVar(g_MuzzleflashBall1,id)
- UnSet_BitVar(g_MuzzleflashBall2,id)
- UnSet_BitVar(g_MuzzleflashBall3,id)
- }
- public hook_item(id)
- {
- engclient_cmd(id,weapon_name)
- return PLUGIN_HANDLED
- }
- public fw_AddToFullPack_post(esState,iE,ent,iHost,iHostFlags,iPlayer,pSet)
- {
- if(ent == g_Muzzleflash_Ent1)
- {
- if(Get_BitVar(g_Muzzleflash1,iHost))
- {
- set_es(esState,ES_Frame,float(random_num(0,2)))
- set_es(esState,ES_RenderMode,kRenderTransAdd)
- set_es(esState,ES_RenderAmt,255.0)
- UnSet_BitVar(g_Muzzleflash1,iHost)
- }
- set_es(esState,ES_Skin,iHost)
- set_es(esState,ES_Body,1)
- set_es(esState,ES_AimEnt,iHost)
- set_es(esState,ES_MoveType,MOVETYPE_FOLLOW)
- }
- if(ent == g_Muzzleflash_Ent2)
- {
- if(Get_BitVar(g_Muzzleflash2,iHost))
- {
- set_es(esState,ES_Frame,float(random_num(0,2)))
- set_es(esState,ES_RenderMode,kRenderTransAdd)
- set_es(esState,ES_RenderAmt,255.0)
- UnSet_BitVar(g_Muzzleflash2,iHost)
- }
- set_es(esState,ES_Skin,iHost)
- set_es(esState,ES_Body,1)
- set_es(esState,ES_AimEnt,iHost)
- set_es(esState,ES_MoveType,MOVETYPE_FOLLOW)
- }
- if(ent == g_Muzzleflash_Ent3)
- {
- if(Get_BitVar(g_Muzzleflash3,iHost))
- {
- set_es(esState,ES_Frame,float(random_num(0,2)))
- set_es(esState,ES_RenderMode,kRenderTransAdd)
- set_es(esState,ES_RenderAmt,255.0)
- UnSet_BitVar(g_Muzzleflash3,iHost)
- }
- set_es(esState,ES_Skin,iHost)
- set_es(esState,ES_Body,1)
- set_es(esState,ES_AimEnt,iHost)
- set_es(esState,ES_MoveType,MOVETYPE_FOLLOW)
- }
- if(ent == g_MuzzleflashBall_Ent1)
- {
- if(Get_BitVar(g_MuzzleflashBall1,iHost))
- {
- set_es(esState,ES_Frame,float(random_num(0,8)))
- set_es(esState,ES_RenderMode,kRenderTransAdd)
- set_es(esState,ES_RenderAmt,240.0)
- }
- set_es(esState,ES_Skin,iHost)
- set_es(esState,ES_Body,1)
- set_es(esState,ES_AimEnt,iHost)
- set_es(esState,ES_MoveType,MOVETYPE_FOLLOW)
- }
- if(ent == g_MuzzleflashBall_Ent2)
- {
- if(Get_BitVar(g_MuzzleflashBall2,iHost))
- {
- set_es(esState,ES_Frame,float(random_num(0,8)))
- set_es(esState,ES_RenderMode,kRenderTransAdd)
- set_es(esState,ES_RenderAmt,240.0)
- }
- set_es(esState,ES_Skin,iHost)
- set_es(esState,ES_Body,1)
- set_es(esState,ES_AimEnt,iHost)
- set_es(esState,ES_MoveType,MOVETYPE_FOLLOW)
- }
- if(ent == g_MuzzleflashBall_Ent3)
- {
- if(Get_BitVar(g_MuzzleflashBall3,iHost))
- {
- set_es(esState,ES_Frame,float(random_num(0,8)))
- set_es(esState,ES_RenderMode,kRenderTransAdd)
- set_es(esState,ES_RenderAmt,240.0)
- }
- set_es(esState,ES_Skin,iHost)
- set_es(esState,ES_Body,1)
- set_es(esState,ES_AimEnt,iHost)
- set_es(esState,ES_MoveType,MOVETYPE_FOLLOW)
- }
- }
- public fw_CheckVisibility(entity,pSet)
- {
- if(entity == g_Muzzleflash_Ent1 || entity == g_Muzzleflash_Ent2 || entity == g_Muzzleflash_Ent3)
- {
- forward_return(FMV_CELL,1)
- return FMRES_SUPERCEDE
- }
- else if(entity == g_MuzzleflashBall_Ent1 || entity == g_MuzzleflashBall_Ent2 || entity == g_MuzzleflashBall_Ent3)
- {
- forward_return(FMV_CELL,1)
- return FMRES_SUPERCEDE
- }
- return FMRES_IGNORED
- }
- public HookHam_Weapon_Deploy(ent)
- {
- if(!Is_CustomItem(ent))
- return HAM_IGNORED
- static id
- id = get_pdata_cbase(ent,41,4)
- set_pev_string(id,pev_viewmodel2, g_AllocString_V)
- set_pev_string(id,pev_weaponmodel2, g_AllocString_P)
- set_pdata_float(ent,46,DRAW_TIME,4)
- set_pdata_float(ent,47,DRAW_TIME,4)
- set_pdata_float(ent,48,DRAW_TIME,4)
- Play_WeaponAnim(id,ANIM_DRAW)
- set_pdata_string(id,1968,"m249",-1,20)
- Weaponlist(id, true)
- return HAM_IGNORED
- }
- public HookHam_Weapon_Add(ent,id)
- {
- switch(pev(ent,pev_impulse))
- {
- case WEAPON_KEY: Weaponlist(id,true)
- case 0: Weaponlist(id,false)
- }
- return HAM_IGNORED
- }
- public MakeBall(id)
- {
- new ent = create_entity("env_sprite"),Float:f_origin[3],Float:f_vec[3]
- set_pev(ent,pev_classname,classname_ball)
- pev(id,pev_origin,f_origin)
- velocity_by_aim(id,35,f_vec)
- for(new i=0;i<3;i++){ f_origin[i]+=f_vec[i];f_vec[i]*=40.0;}
- f_origin[2] += (pev(id,pev_flags)&FL_DUCKING)?2.0:10.0;
- set_pev(ent,pev_origin,f_origin)
- set_pev(ent,pev_velocity,f_vec)
- set_pev(ent,pev_solid,SOLID_BBOX)
- set_pev(ent,pev_movetype,MOVETYPE_FLY)
- if(g_ChargeForEntity[id] == 1)
- {
- set_pev(ent, pev_scale, 0.2)
- entity_set_model(ent,SPRITE_BALL_1)
- }
- else if(g_ChargeForEntity[id] == 2)
- {
- set_pev(ent, pev_scale, 0.25)
- entity_set_model(ent,SPRITE_BALL_1)
- }
- else if(g_ChargeForEntity[id] == 3)
- {
- set_pev(ent, pev_scale, 0.27)
- entity_set_model(ent,SPRITE_BALL_2)
- }
- else if(g_ChargeForEntity[id] == 4)
- {
- set_pev(ent, pev_scale, 0.32)
- entity_set_model(ent,SPRITE_BALL_3)
- }
- set_pev(ent,pev_mins,Float:{-4.0,-4.0,-4.0})
- set_pev(ent,pev_maxs,Float:{4.0,4.0,4.0})
- set_pev(ent,pev_owner,id)
- set_pev(ent,pev_rendermode,kRenderTransAdd)
- set_pev(ent,pev_renderamt,255.0)
- pev(id,pev_v_angle,f_vec)
- set_pev(ent,pev_v_angle,f_vec)
- }
- public BallTouch(id, ent)
- {
- new Float:origin[3],Float:f_vec[3]
- pev(ent, pev_origin, origin)
- velocity_by_aim(ent,-15,f_vec)
- for(new i = 0; i < 3; i++)
- origin[i] += f_vec[i]
- static classnameptd[32]
- pev(id, pev_classname, classnameptd, 31)
- if(equali(classnameptd, "func_breakable"))
- ExecuteHamB(Ham_TakeDamage, id, 0, 0, 100.0, DMG_GENERIC)
- BallSprites(ent, origin)
- BallDamage(ent)
- }
- public BallSprites(ent, Float:origin[3])
- {
- static owner
- owner = pev(ent, pev_owner)
- if(g_ChargeForEntity[owner] == 1)
- {
- message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
- write_byte(TE_SPRITE);
- write_coord(floatround(origin[0]))
- write_coord(floatround(origin[1]))
- write_coord(floatround(origin[2] + 40.0))
- write_short(g_ChargeBall1_Explosion)
- write_byte(30)
- write_byte(225)
- message_end()
- emit_sound(ent, CHAN_ITEM, Weapon_Sounds[13], 1.0, ATTN_NORM, 0, PITCH_NORM)
- }
- else if(g_ChargeForEntity[owner] == 2)
- {
- message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
- write_byte(TE_SPRITE);
- write_coord(floatround(origin[0]))
- write_coord(floatround(origin[1]))
- write_coord(floatround(origin[2] + 40.0))
- write_short(g_ChargeBall1_Explosion)
- write_byte(30)
- write_byte(225)
- message_end()
- emit_sound(ent, CHAN_ITEM, Weapon_Sounds[12], 1.0, ATTN_NORM, 0, PITCH_NORM)
- }
- else if(g_ChargeForEntity[owner] == 3)
- {
- message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
- write_byte(TE_SPRITE);
- write_coord(floatround(origin[0]))
- write_coord(floatround(origin[1]))
- write_coord(floatround(origin[2] + 40.0))
- write_short(g_ChargeBall2_Explosion)
- write_byte(30)
- write_byte(225)
- message_end()
- emit_sound(ent, CHAN_ITEM, Weapon_Sounds[13], 1.0, ATTN_NORM, 0, PITCH_NORM)
- }
- else if(g_ChargeForEntity[owner] == 4)
- {
- message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
- write_byte(TE_SPRITE)
- write_coord(floatround(origin[0]))
- write_coord(floatround(origin[1]))
- write_coord(floatround(origin[2] + 40.0))
- write_short(g_ChargeBall3_Explosion)
- write_byte(30)
- write_byte(225)
- message_end()
- emit_sound(ent, CHAN_ITEM, Weapon_Sounds[14], 1.0, ATTN_NORM, 0, PITCH_NORM)
- }
- }
- public BallDamage(ent)
- {
- static owner, attacker
- owner = pev(ent, pev_owner)
- if(!is_user_alive(owner) || ze_is_user_zombie(owner))
- {
- attacker = 0;
- return
- }
- else attacker = owner
- for(new i = 0; i < gMaxPlayers; i++)
- {
- if(i == attacker)
- continue
- if(!is_user_alive(i))
- continue
- if(!ze_is_user_zombie(i))
- continue
- if(entity_range(i, ent) > EXPLODE_RADIUS)
- continue
- if(g_ChargeForEntity[attacker] == 1) ExecuteHamB(Ham_TakeDamage,i,0,attacker,DAMAGE_BALL_1,DMG_BULLET)
- else if(g_ChargeForEntity[attacker] == 2) ExecuteHamB(Ham_TakeDamage,i,0,attacker,DAMAGE_BALL_1,DMG_BULLET)
- else if(g_ChargeForEntity[attacker] == 3) ExecuteHamB(Ham_TakeDamage,i,0,attacker,DAMAGE_BALL_2,DMG_BULLET)
- else if(g_ChargeForEntity[attacker] == 4) ExecuteHamB(Ham_TakeDamage,i,0,attacker,DAMAGE_BALL_3,DMG_BULLET)
- }
- remove_entity(ent)
- }
- public HookHam_Weapon_Frame(ent)
- {
- if(!Is_CustomItem(ent))
- return HAM_IGNORED
- static id
- id = get_pdata_cbase(ent,41,4)
- if(get_pdata_int(ent,54,4))
- {
- if(get_pdata_float(ent,46,4) >= 0.0)
- return HAM_IGNORED
- static clip,ammotype,ammo,j
- clip = get_pdata_int(ent,51,4)
- ammotype = 376 + get_pdata_int(ent,49,4)
- ammo = get_pdata_int(id,ammotype,5)
- j = min(WEAPON_CLIP-clip,ammo)
- set_pdata_int(ent, 51, clip+j, 4)
- set_pdata_int(id, ammotype, ammo-j, 5)
- set_pdata_int(ent, 54, 0, 4)
- }
- if(g_ChargeShots[ent] < SHOOTS_FOR_HIGH) g_ChargeState[ent] = STATE_LOW
- else if(g_ChargeShots[ent] >= SHOOTS_FOR_HIGH && g_ChargeShots[ent] < SHOOTS_FOR_EXTRREME) g_ChargeState[ent] = STATE_HIGH
- else if(g_ChargeShots[ent] >= SHOOTS_FOR_EXTRREME) g_ChargeState[ent] = STATE_EXTREME
- if(g_ChargeBall[id]) g_ChargeState[ent] = STATE_CHARGE
- if(g_ChargeShots[ent] > 0 && !(pev(id,pev_button) & IN_ATTACK) &&!g_ChargeBall[id])
- g_ChargeShots[ent]--
- static iButton;iButton = pev(id,pev_button)
- g_ChargeBall[id] = pev(ent, pev_iuser1)
- new Float:fFinshTime, Float:ScaleNew, Float:ScaleDelay[33]
- pev(ent,pev_fuser1,fFinshTime)
- static ammo
- ammo = get_pdata_int(ent,51,4)
- if(iButton & IN_ATTACK2)
- {
- if(get_pdata_float(ent, 46, 4) >= 0.0)
- return HAM_IGNORED
- if(ammo == 0)
- return HAM_IGNORED
- g_ChargeState[ent] = STATE_CHARGE
- set_pev_string(id,pev_weaponmodel2,g_AllocString_P_charge)
- if(!g_ChargeBall[id])
- {
- g_ChargeBall[id] = 1
- fFinshTime = get_gametime()+1.0
- Play_WeaponAnim(id, 1)
- emit_sound(ent, CHAN_ITEM, Weapon_Sounds[3], 1.0, ATTN_NORM, 0, PITCH_NORM)
- set_pdata_float(ent, 48, 1.0, 4)
- set_pdata_float(ent, 46, 1.0, 4)
- set_pev(ent,pev_iuser1,g_ChargeBall[id])
- if(get_gametime() - 0.01 > ScaleDelay[id])
- {
- pev(g_MuzzleflashBall_Ent1, pev_scale, ScaleNew)
- ScaleNew += 0.01
- set_pev(g_MuzzleflashBall_Ent1, pev_scale, ScaleNew)
- ScaleDelay[id] = get_gametime()
- }
- set_pev(ent, pev_fuser1, fFinshTime)
- Set_BitVar(g_MuzzleflashBall1,id)
- UnSet_BitVar(g_MuzzleflashBall2,id)
- UnSet_BitVar(g_MuzzleflashBall3,id)
- }
- else if(get_gametime() > fFinshTime && g_ChargeBall[id] == 1)
- {
- g_ChargeBall[id] = 2;
- fFinshTime = get_gametime()+3.0
- Play_WeaponAnim(id,2)
- emit_sound(ent, CHAN_ITEM, Weapon_Sounds[1], 1.0, ATTN_NORM, 0, PITCH_NORM)
- set_pdata_float(ent, 48, 1.25, 4)
- set_pdata_float(ent, 46, 1.25, 4)
- set_pev(ent,pev_iuser1,g_ChargeBall[id])
- if(get_gametime() - 0.01 > ScaleDelay[id])
- {
- pev(g_MuzzleflashBall_Ent1, pev_scale, ScaleNew)
- ScaleNew += 0.02
- set_pev(g_MuzzleflashBall_Ent1, pev_scale, ScaleNew)
- ScaleDelay[id] = get_gametime()
- }
- Set_BitVar(g_MuzzleflashBall1,id)
- UnSet_BitVar(g_MuzzleflashBall2,id)
- UnSet_BitVar(g_MuzzleflashBall3,id)
- }
- else if(get_gametime() > fFinshTime && g_ChargeBall[id] == 2)
- {
- g_ChargeBall[id] = 3
- fFinshTime = get_gametime()+3.0
- set_pdata_float(ent, 48, 1.5, 4)
- set_pdata_float(ent, 46, 1.5, 4)
- set_pev(ent,pev_iuser1,g_ChargeBall[id])
- if(get_gametime() - 0.01 > ScaleDelay[id])
- {
- pev(g_MuzzleflashBall_Ent1, pev_scale, ScaleNew)
- ScaleNew += 0.05
- set_pev(g_MuzzleflashBall_Ent1, pev_scale, ScaleNew)
- ScaleDelay[id] = get_gametime()
- }
- UnSet_BitVar(g_MuzzleflashBall1,id)
- Set_BitVar(g_MuzzleflashBall2,id)
- UnSet_BitVar(g_MuzzleflashBall3,id)
- }
- else if(get_gametime() > fFinshTime && g_ChargeBall[id] == 3)
- {
- g_ChargeBall[id] = 4
- fFinshTime = get_gametime() + 200.0
- Play_WeaponAnim(id, 3)
- emit_sound(ent, CHAN_ITEM, Weapon_Sounds[2], 1.0, ATTN_NORM, 0, PITCH_NORM)
- set_pdata_float(ent, 48, 250.0, 4)
- set_pdata_float(ent, 46, 250.0, 4)
- set_pev(ent,pev_iuser1,g_ChargeBall[id])
- if(get_gametime() - 0.01 > ScaleDelay[id])
- {
- pev(g_MuzzleflashBall_Ent1, pev_scale, ScaleNew)
- ScaleNew += 0.08
- set_pev(g_MuzzleflashBall_Ent1, pev_scale, ScaleNew)
- ScaleDelay[id] = get_gametime()
- }
- set_pev(ent, pev_fuser1, fFinshTime)
- UnSet_BitVar(g_MuzzleflashBall1,id)
- UnSet_BitVar(g_MuzzleflashBall2,id)
- Set_BitVar(g_MuzzleflashBall3,id)
- }
- iButton &= ~IN_ATTACK2;
- set_pev(id,pev_button,iButton)
- }
- else
- {
- switch(g_ChargeBall[id])
- {
- case 1:
- {
- Play_WeaponAnim(id,4)
- emit_sound(ent, CHAN_ITEM, Weapon_Sounds[4], 1.0, ATTN_NORM, 0, PITCH_NORM)
- set_pdata_float(ent,48,1.63,4)
- set_pdata_float(ent,46,1.0,4)
- UnSet_BitVar(g_MuzzleflashBall1,id)
- UnSet_BitVar(g_MuzzleflashBall2,id)
- UnSet_BitVar(g_MuzzleflashBall3,id)
- g_ChargeState[ent] = STATE_LOW
- g_ChargeShots[ent] = 0
- g_ChargeForEntity[id] = g_ChargeBall[id]
- set_pev_string(id,pev_weaponmodel2,g_AllocString_P)
- MakeBall(id)
- if(ammo > 19) set_pdata_int(ent, 51, ammo - 20, 4)
- else set_pdata_int(ent,51, 0, 4)
- }
- case 2:
- {
- Play_WeaponAnim(id,4);
- emit_sound(ent, CHAN_ITEM, Weapon_Sounds[4], 1.0, ATTN_NORM, 0, PITCH_NORM)
- set_pdata_float(ent,48,1.63,4)
- set_pdata_float(ent,46,1.0,4)
- UnSet_BitVar(g_MuzzleflashBall1,id)
- UnSet_BitVar(g_MuzzleflashBall2,id)
- UnSet_BitVar(g_MuzzleflashBall3,id)
- g_ChargeState[ent] = STATE_LOW
- g_ChargeShots[ent] = 0
- g_ChargeForEntity[id] = g_ChargeBall[id]
- set_pev_string(id,pev_weaponmodel2,g_AllocString_P)
- MakeBall(id)
- if(ammo > 19) set_pdata_int(ent, 51, ammo - 20, 4)
- else set_pdata_int(ent,51, 0, 4)
- }
- case 3:
- {
- Play_WeaponAnim(id,4)
- emit_sound(ent, CHAN_ITEM, Weapon_Sounds[4], 1.0, ATTN_NORM, 0, PITCH_NORM)
- set_pdata_float(ent,48,1.63,4)
- set_pdata_float(ent,46,1.0,4)
- UnSet_BitVar(g_MuzzleflashBall1,id)
- UnSet_BitVar(g_MuzzleflashBall2,id)
- UnSet_BitVar(g_MuzzleflashBall3,id)
- g_ChargeState[ent] = STATE_LOW
- g_ChargeShots[ent] = 0
- g_ChargeForEntity[id] = g_ChargeBall[id]
- set_pev_string(id,pev_weaponmodel2,g_AllocString_P)
- MakeBall(id)
- if(ammo > 19) set_pdata_int(ent, 51, ammo - 20, 4)
- else set_pdata_int(ent,51, 0, 4)
- }
- case 4:
- {
- Play_WeaponAnim(id,4)
- emit_sound(ent, CHAN_ITEM, Weapon_Sounds[4], 1.0, ATTN_NORM, 0, PITCH_NORM)
- set_pdata_float(ent,48,1.63,4)
- set_pdata_float(ent,46,1.0,4)
- UnSet_BitVar(g_MuzzleflashBall1,id)
- UnSet_BitVar(g_MuzzleflashBall2,id)
- UnSet_BitVar(g_MuzzleflashBall3,id)
- g_ChargeState[ent] = STATE_LOW
- g_ChargeShots[ent] = 0
- g_ChargeForEntity[id] = g_ChargeBall[id]
- set_pev_string(id,pev_weaponmodel2,g_AllocString_P)
- MakeBall(id)
- if(ammo > 19) set_pdata_int(ent, 51, ammo - 20, 4)
- else set_pdata_int(ent,51, 0, 4)
- }
- }
- g_ChargeBall[id] = 0
- new Float:ResetScale[3]
- pev(g_MuzzleflashBall_Ent1, pev_fuser1, ResetScale[0])
- set_pev(g_MuzzleflashBall_Ent1, pev_scale, ResetScale[0])
- pev(g_MuzzleflashBall_Ent2, pev_fuser1, ResetScale[1])
- set_pev(g_MuzzleflashBall_Ent2, pev_scale, ResetScale[1])
- pev(g_MuzzleflashBall_Ent3, pev_fuser1, ResetScale[2])
- set_pev(g_MuzzleflashBall_Ent3, pev_scale, ResetScale[2])
- set_pev_string(id,pev_weaponmodel2,g_AllocString_P)
- set_pev(ent,pev_iuser1,g_ChargeBall[id])
- }
- return HAM_IGNORED
- }
- public HookHam_Weapon_Reload(ent)
- {
- if(!Is_CustomItem(ent))
- return HAM_IGNORED
- static clip
- clip = get_pdata_int(ent,51,4)
- if(clip >= WEAPON_CLIP)
- return HAM_SUPERCEDE
- static id
- id = get_pdata_cbase(ent,41,4)
- if(get_pdata_int(id, 376 + get_pdata_int(ent,49,4), 5) <= 0)
- return HAM_SUPERCEDE
- set_pdata_int(ent, 51, 0,4)
- ExecuteHam(Ham_Weapon_Reload, ent)
- set_pdata_int(ent,51, clip, 4)
- set_pdata_int(ent,54, 1,4)
- set_pdata_float(ent, 46,RELOAD_TIME,4)
- set_pdata_float(ent, 47,RELOAD_TIME,4)
- set_pdata_float(ent, 48,RELOAD_TIME,4)
- set_pdata_float(id, 83, RELOAD_TIME,5)
- Play_WeaponAnim(id, ANIM_RELOAD)
- return HAM_SUPERCEDE;
- }
- public HookHam_Weapon_Idle(ent)
- {
- if(!Is_CustomItem(ent))
- return HAM_IGNORED
- if(get_pdata_float(ent, 48, 4) > 0.0)
- return HAM_IGNORED
- set_pdata_float(ent,48,IDLE_TIME,4)
- Play_WeaponAnim(get_pdata_cbase(ent, 41, 4), ANIM_IDLE)
- return HAM_SUPERCEDE
- }
- public HookHam_Weapon_PrimaryAttack(ent)
- {
- if(!Is_CustomItem(ent))
- return HAM_IGNORED
- static ammo
- ammo = get_pdata_int(ent,51,4)
- if(ammo <= 0)
- {
- ExecuteHam(Ham_Weapon_PlayEmptySound,ent);
- set_pdata_float(ent,46,WEAPON_SPEED,4)
- return HAM_SUPERCEDE
- }
- static id; id = get_pdata_cbase(ent,41,4)
- static Float:user_punchangle[3];pev(id,pev_punchangle,user_punchangle)
- static fm_hooktrace;fm_hooktrace=register_forward(FM_TraceLine,"HookFm_TraceLine",true)
- static fm_playbackevent;fm_playbackevent=register_forward(FM_PlaybackEvent,"HookFm_PlayBackEvent",false)
- state FireBullets: Enabled;
- ExecuteHam(Ham_Weapon_PrimaryAttack,ent)
- state FireBullets: Disabled;
- unregister_forward(FM_TraceLine,fm_hooktrace,true)
- unregister_forward(FM_PlaybackEvent,fm_playbackevent,false)
- Play_WeaponAnim(id,random_num(ANIM_SHOOT_1,ANIM_SHOOT_2))
- set_pdata_int(ent,51,ammo-1,4)
- set_pdata_float(ent,48,2.0,4)
- static Float:user_newpunch[3];pev(id,pev_punchangle,user_newpunch)
- user_newpunch[0]=user_punchangle[0]+(user_newpunch[0]-user_punchangle[0])*RECOIL
- user_newpunch[1]=user_punchangle[1]+(user_newpunch[1]-user_punchangle[1])*RECOIL
- user_newpunch[2]=user_punchangle[2]+(user_newpunch[2]-user_punchangle[2])*RECOIL
- set_pev(id,pev_punchangle,user_newpunch)
- emit_sound(ent, CHAN_ITEM, Weapon_Sounds[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
- set_pdata_float(ent,46,WEAPON_SPEED,4)
- new Float:Origin[3]
- get_weapon_position(id,Origin,.add_forward=10.0,.add_right=7.0,.add_up=-10.5)
- new Float:Velo[3]
- Velo[0]=g_VecEndTrace[0]-Origin[0]
- Velo[1]=g_VecEndTrace[1]-Origin[1]
- Velo[2]=g_VecEndTrace[2]-Origin[2]
- vec_normalize(Velo,Velo)
- vec_mul_scalar(Velo,4096.0,Velo)
- if(g_ChargeState[ent] == STATE_LOW)
- {
- message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
- write_byte(TE_USERTRACER)
- engfunc(EngFunc_WriteCoord,Origin[0])
- engfunc(EngFunc_WriteCoord,Origin[1])
- engfunc(EngFunc_WriteCoord,Origin[2])
- engfunc(EngFunc_WriteCoord,Velo[0])
- engfunc(EngFunc_WriteCoord,Velo[1])
- engfunc(EngFunc_WriteCoord,Velo[2])
- write_byte(20)
- write_byte(4)
- write_byte(5)
- message_end()
- Set_BitVar(g_Muzzleflash1,id)
- }
- else if(g_ChargeState[ent] == STATE_HIGH)
- {
- message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
- write_byte(TE_USERTRACER)
- engfunc(EngFunc_WriteCoord,Origin[0])
- engfunc(EngFunc_WriteCoord,Origin[1])
- engfunc(EngFunc_WriteCoord,Origin[2])
- engfunc(EngFunc_WriteCoord,Velo[0])
- engfunc(EngFunc_WriteCoord,Velo[1])
- engfunc(EngFunc_WriteCoord,Velo[2])
- write_byte(20)
- write_byte(5)
- write_byte(5)
- message_end()
- Set_BitVar(g_Muzzleflash2,id)
- }
- else if(g_ChargeState[ent] == STATE_EXTREME)
- {
- message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
- write_byte(TE_USERTRACER)
- engfunc(EngFunc_WriteCoord,Origin[0])
- engfunc(EngFunc_WriteCoord,Origin[1])
- engfunc(EngFunc_WriteCoord,Origin[2])
- engfunc(EngFunc_WriteCoord,Velo[0])
- engfunc(EngFunc_WriteCoord,Velo[1])
- engfunc(EngFunc_WriteCoord,Velo[2])
- write_byte(20)
- write_byte(1)
- write_byte(5)
- message_end()
- Set_BitVar(g_Muzzleflash3,id)
- }
- g_ChargeShots[ent]++
- return HAM_SUPERCEDE
- }
- public HookHam_TakeDamage(victim,inflictor,attacker,Float:damage)<FireBullets: Enabled>
- {
- new ent = fm_find_ent_by_owner(-1,weapon_name,attacker)
- if(g_ChargeState[ent] == STATE_LOW)
- SetHamParamFloat(4,damage*DAMAGE_LOW)
- else if(g_ChargeState[ent] == STATE_HIGH)
- SetHamParamFloat(4,damage*DAMAGE_HIGH)
- else if(g_ChargeState[ent] == STATE_EXTREME)
- SetHamParamFloat(4,damage*DAMAGE_EXTREME)
- return HAM_OVERRIDE;
- }
- public HookHam_TakeDamage()<FireBullets: Disabled>
- {
- return HAM_IGNORED;
- }
- public HookHam_TakeDamage()<>
- {
- return HAM_IGNORED;
- }
- public HookFm_SetModel(ent)
- {
- static i,classname[32],item;pev(ent,pev_classname,classname,31);
- if(!equal(classname,"weaponbox"))
- return FMRES_IGNORED
- for(i=0; i < 6; i++)
- {
- item = get_pdata_cbase(ent,34+i,4)
- static id
- id = pev(ent,pev_owner)
- if(item > 0 && Is_CustomItem(item))
- {
- engfunc(EngFunc_SetModel,ent,MODEL_W)
- g_ChargeState[ent] = STATE_LOW
- g_ChargeShots[ent] = 0
- UnSet_BitVar(g_MuzzleflashBall1,id)
- UnSet_BitVar(g_MuzzleflashBall2,id)
- UnSet_BitVar(g_MuzzleflashBall3,id)
- g_ChargeBall[id] = 0
- return FMRES_SUPERCEDE
- }
- }
- return FMRES_IGNORED;
- }
- public HookFm_PlayBackEvent()
- {
- return FMRES_SUPERCEDE
- }
- public HookFm_TraceLine(Float:tr_start[3],Float:tr_end[3],tr_flag,tr_ignore,tr)
- {
- if(tr_flag&IGNORE_MONSTERS)
- return FMRES_IGNORED
- static hit
- hit=get_tr2(tr,TR_pHit)
- static Decal, glassdecal
- if(!glassdecal)
- glassdecal = engfunc(EngFunc_DecalIndex,"{bproof1")
- hit = get_tr2(tr,TR_pHit)
- if(hit > 0 && pev_valid(hit))
- {
- if(pev(hit,pev_solid) != SOLID_BSP)
- return FMRES_IGNORED
- else if(pev(hit,pev_rendermode) != 0) Decal=glassdecal
- else Decal = random_num(41,45)
- }
- else Decal = random_num(41,45)
- static Float:vecEnd[3]
- get_tr2(tr,TR_vecEndPos,vecEnd)
- g_VecEndTrace = vecEnd
- engfunc(EngFunc_MessageBegin,MSG_PAS,SVC_TEMPENTITY,vecEnd,0)
- write_byte(TE_GUNSHOTDECAL)
- engfunc(EngFunc_WriteCoord,vecEnd[0])
- engfunc(EngFunc_WriteCoord,vecEnd[1])
- engfunc(EngFunc_WriteCoord,vecEnd[2])
- write_short(hit>0?hit:0)
- write_byte(Decal)
- message_end()
- static Float:WallVector[3];get_tr2(tr,TR_vecPlaneNormal,WallVector)
- engfunc(EngFunc_MessageBegin,MSG_PVS,SVC_TEMPENTITY,vecEnd,0);
- write_byte(TE_STREAK_SPLASH)
- engfunc(EngFunc_WriteCoord,vecEnd[0]);
- engfunc(EngFunc_WriteCoord,vecEnd[1]);
- engfunc(EngFunc_WriteCoord,vecEnd[2]);
- engfunc(EngFunc_WriteCoord,WallVector[0]*random_float(25.0,30.0));
- engfunc(EngFunc_WriteCoord,WallVector[1]*random_float(25.0,30.0));
- engfunc(EngFunc_WriteCoord,WallVector[2]*random_float(25.0,30.0));
- write_byte(111)
- write_short(12)
- write_short(3)
- write_short(75)
- message_end()
- return FMRES_IGNORED
- }
- public HookFm_UpdateClientData(id,SendWeapons,CD_Handle)
- {
- static item
- item = get_pdata_cbase(id,373,5)
- if(item <= 0 || !Is_CustomItem(item))
- return FMRES_IGNORED
- set_cd(CD_Handle,CD_flNextAttack,99999.0)
- return FMRES_HANDLED
- }
- public HookFm_Spawn(id)
- {
- if(pev_valid(id) != 2)
- return FMRES_IGNORED
- static ClName[32]
- pev(id,pev_classname,ClName,31)
- if(strlen(ClName) < 5)
- return FMRES_IGNORED
- static Trie:ClBuffer
- if(!ClBuffer) ClBuffer = TrieCreate()
- if(!TrieKeyExists(ClBuffer,ClName))
- {
- TrieSetCell(ClBuffer, ClName, 1)
- RegisterHamFromEntity(Ham_TakeDamage, id, "HookHam_TakeDamage", 0)
- }
- return FMRES_IGNORED
- }
- stock make_weapon()
- {
- static ent, g_AllocString_E
- if(g_AllocString_E || (g_AllocString_E = engfunc(EngFunc_AllocString,weapon_name)))
- ent = engfunc(EngFunc_CreateNamedEntity,g_AllocString_E)
- else
- return 0
- if(ent <= 0)
- return 0
- set_pev(ent,pev_spawnflags,SF_NORESPAWN)
- set_pev(ent,pev_impulse,WEAPON_KEY)
- ExecuteHam(Ham_Spawn,ent)
- return ent
- }
- stock UTIL_DropWeapon(id,slot)
- {
- static iEntity
- iEntity = get_pdata_cbase(id,(367 + slot),5)
- if(iEntity > 0)
- {
- static iNext,szWeaponName[32]
- do
- {
- iNext = get_pdata_cbase(iEntity,42,4);
- if(get_weaponname(get_pdata_int(iEntity, 43, 4), szWeaponName, 31))
- engclient_cmd(id,"drop",szWeaponName)
- }
- while((iEntity=iNext)>0)
- }
- }
- stock Play_WeaponAnim(id,anim)
- {
- set_pev(id,pev_weaponanim,anim)
- message_begin(MSG_ONE_UNRELIABLE,SVC_WEAPONANIM,_,id)
- write_byte(anim)
- write_byte(0)
- message_end()
- }
- stock Weaponlist(id,bool:set)
- {
- if(!is_user_connected(id))
- return
- message_begin(MSG_ONE,Msg_WeaponList,_,id);
- write_string(set == false ? weapon_name:weapon_new);
- write_byte(3);
- write_byte(WEAPON_BPAMMO);
- write_byte(-1);
- write_byte(-1);
- write_byte(0);
- write_byte(4);
- write_byte(20);
- write_byte(0);
- message_end();
- }
- stock get_weapon_position(id,Float:fOrigin[3],Float:add_forward=0.0,Float:add_right=0.0,Float:add_up=0.0)
- {
- static Float:Angles[3],Float:ViewOfs[3],Float:vAngles[3]
- static Float:Forward[3],Float:Right[3],Float:Up[3]
- pev(id,pev_v_angle,vAngles)
- pev(id,pev_origin,fOrigin)
- pev(id,pev_view_ofs,ViewOfs)
- vec_add(fOrigin,ViewOfs,fOrigin)
- pev(id,pev_v_angle,Angles)
- engfunc(EngFunc_MakeVectors,Angles)
- global_get(glb_v_forward,Forward)
- global_get(glb_v_right,Right)
- global_get(glb_v_up,Up)
- vec_mul_scalar(Forward,add_forward,Forward)
- vec_mul_scalar(Right,add_right,Right)
- vec_mul_scalar(Up,add_up,Up)
- fOrigin[0]=fOrigin[0]+Forward[0]+Right[0]+Up[0]
- fOrigin[1]=fOrigin[1]+Forward[1]+Right[1]+Up[1]
- fOrigin[2]=fOrigin[2]+Forward[2]+Right[2]+Up[2]
- }
- vec_add(const Float:in1[],const Float:in2[],Float:out[])
- {
- out[0]=in1[0]+in2[0];
- out[1]=in1[1]+in2[1];
- out[2]=in1[2]+in2[2];
- }
- vec_mul_scalar(const Float:vec[],Float:scalar,Float:out[])
- {
- out[0]=vec[0]*scalar;
- out[1]=vec[1]*scalar;
- out[2]=vec[2]*scalar;
- }
- vec_normalize(const Float:vec[],Float:out[])
- {
- new Float:invlen=rsqrt(vec[0]*vec[0]+vec[1]*vec[1]+vec[2]*vec[2]);
- out[0]=vec[0]*invlen;
- out[1]=vec[1]*invlen;
- out[2]=vec[2]*invlen;
- }
- Float:rsqrt(Float:x)
- {
- new Float:xhalf=x*0.5;
- new i=_:x;
- i=0x5f375a84 - (i>>1);
- x=Float:i;
- x=x*(1.5-xhalf*x*x);
- x=x*(1.5-xhalf*x*x);
- x=x*(1.5-xhalf*x*x);
- return x;
- }
- #include <zombie_escape>
- #include <fakemeta_util>
- #include <xs>
- #define PLUGIN "[MW2] Auto Minigun"
- #define VERSION "1.0"
- #define AUTHOR "Dias"
- new g_player_main[33], g_remoting[33], g_player_main2[33], g_firing[33],
- g_preparing[33], g_ending[33], g_reloading[500]
- new Float:g_last_firesound[33]
- new const base_model[] = "models/mw2_auto/base.mdl"
- new const main_model[] = "models/mw2_auto/main.mdl"
- new const muzzleflash_spr[] = "sprites/muzzleflash3_auto.spr"
- new muzzleflash_spr_id, Float:g_last_shoot[33]
- new g_blood, g_bloodspray, g_dead[500], g_exp_id, g_owner[500], Float:g_check_heat[33]
- new const minigun_sound[3][] = {
- "mw2_auto/minigun-starting.wav",
- "mw2_auto/minigun-shooting.wav",
- "mw2_auto/minigun-stoping.wav"
- }
- new g_had_minigun[33], g_reg, g_heat[500], g_sync_hud1
- new cvar_minigun_health, cvar_minigun_dmgrand_start, cvar_minigun_dmgrand_end,
- cvar_delay_attack, cvar_reload_time
- // 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" }
- public plugin_init()
- {
- register_plugin(PLUGIN, VERSION, AUTHOR)
- register_event("HLTV", "event_newround", "a", "1=0", "2=0")
- register_event("DeathMsg", "event_death", "a")
- register_think("mw2_mingun_main", "fw_main_think")
- register_forward(FM_CmdStart, "fw_CmdStart")
- for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
- if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1)
- g_sync_hud1 = CreateHudSyncObj(645)
- // Cvars
- cvar_minigun_health = register_cvar("zp_minigun_health", "500")
- cvar_minigun_dmgrand_start = register_cvar("zp_minigun_dmgrand_start", "10")
- cvar_minigun_dmgrand_end = register_cvar("zp_minigun_dmgrand_end", "30")
- cvar_delay_attack = register_cvar("zp_minigun_delay_attack", "0.1")
- cvar_reload_time = register_cvar("zp_minigun_reload_time", "30.0")
- //register_clcmd("say /make", "create_minigun")
- //register_clcmd("say /remote", "remote_minigun")
- }
- public plugin_precache()
- {
- precache_model(base_model)
- precache_model(main_model)
- for(new i = 0; i < sizeof(minigun_sound); i++)
- engfunc(EngFunc_PrecacheSound, minigun_sound[i])
- muzzleflash_spr_id = precache_model(muzzleflash_spr)
- g_blood = precache_model("sprites/blood.spr")
- g_bloodspray = precache_model("sprites/bloodspray.spr")
- g_exp_id = precache_model("sprites/zerogxplode.spr")
- }
- public plugin_natives()
- {
- register_native("give_minigun","native_give_minigun", 1)
- }
- public native_give_minigun(id)
- {
- g_had_minigun[id] = 1
- create_minigun(id)
- client_printcolor(id, "!g[ZE]!y Hold !t(E)!y for 3 seconds to put MW2 Auto-Minigun !!!")
- }
- public event_newround()
- {
- remove_entity_name("mw2_mingun_base")
- remove_entity_name("mw2_mingun_main")
- remove_entity_name("mw2_mingun_view")
- for(new i = 0; i < get_maxplayers(); i++)
- {
- if(is_user_alive(i) && is_user_connected(i))
- {
- reset_minigun(i)
- }
- }
- }
- public event_death()
- {
- static victim
- victim = read_data(2)
- reset_minigun(victim)
- }
- public reset_minigun(id)
- {
- attach_view(id, id)
- g_had_minigun[id] = 0
- g_player_main[id] = 0
- g_player_main2[id] = 0
- g_remoting[id] = 0
- g_preparing[id] = 0
- g_firing[id] = 0
- g_ending[id] = 0
- remove_task(id+2479)
- message_begin(MSG_ONE_UNRELIABLE, 108, {0,0,0}, id)
- write_short(0)
- message_end()
- }
- public create_minigun(id)
- {
- if(!g_had_minigun[id])
- return
- g_had_minigun[id] = 0
- new Float:Origin[3], Float:Angles[3]
- get_position(id, 40.0, 0.0, 0.0, Origin)
- pev(id, pev_angles, Angles)
- // Make the Base
- new ent = create_entity("info_target")
- entity_set_origin(ent, Origin);
- Angles[0] = 0.0
- entity_set_vector(ent, EV_VEC_angles, Angles)
- entity_set_string(ent,EV_SZ_classname, "mw2_mingun_base")
- entity_set_model(ent, base_model);
- entity_set_int(ent,EV_INT_solid, SOLID_NOT)
- entity_set_float(ent,EV_FL_takedamage,1.0)
- entity_set_float(ent,EV_FL_health, get_pcvar_float(cvar_minigun_health) + 1000.0)
- new Float:maxs[3] = {10.0,10.0,1.0}
- new Float:mins[3] = {-10.0,-10.0,-1.0}
- entity_set_size(ent,mins,maxs)
- set_entity_anim(ent, 0)
- g_dead[ent] = 0
- g_owner[ent] = id
- entity_set_float(ent,EV_FL_nextthink, halflife_time() + 0.01)
- drop_to_floor(ent)
- // Create Main
- ent = create_entity("info_target")
- Origin[2] -= 35.0
- entity_set_origin(ent, Origin);
- entity_set_vector(ent, EV_VEC_angles, Angles)
- entity_set_string(ent,EV_SZ_classname, "mw2_mingun_main")
- entity_set_model(ent, main_model);
- entity_set_int(ent,EV_INT_solid, SOLID_BBOX)
- entity_set_float(ent,EV_FL_takedamage,1.0)
- entity_set_float(ent,EV_FL_health, get_pcvar_float(cvar_minigun_health) + 1000.0)
- new Float:maxs2[3] = {10.0,10.0,20.0}
- new Float:mins2[3] = {-10.0,-10.0,-20.0}
- entity_set_size(ent,mins2,maxs2)
- set_entity_anim(ent, 0)
- g_heat[ent] = 0
- entity_set_float(ent,EV_FL_nextthink, halflife_time() + 0.01)
- g_player_main[id] = ent
- g_dead[ent] = 0
- g_owner[ent] = id
- g_reloading[ent] = 0
- drop_to_floor(ent)
- if(!g_reg)
- {
- g_reg = 1
- RegisterHamFromEntity(Ham_TakeDamage, ent, "fw_main_takedamage")
- }
- // Create View Ent
- ent = create_entity("info_target")
- get_position(id, 40.0, 0.0, 10.0, Origin)
- entity_set_origin(ent, Origin);
- entity_set_vector(ent, EV_VEC_angles, Angles)
- entity_set_string(ent,EV_SZ_classname, "mw2_mingun_view")
- entity_set_model(ent, main_model);
- fm_set_rendering(ent, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0)
- g_player_main2[id] = ent
- }
- public ze_user_infected(id)
- {
- reset_minigun(id)
- }
- public do_remote(id)
- {
- id -= 2479
- remote_minigun(id)
- }
- public remote_minigun(id)
- {
- if(!g_player_main[id])
- return
- attach_view(id, g_player_main2[id])
- engclient_cmd(id, "weapon_knife")
- set_task(1.0, "task_delay", id)
- client_printcolor(id, "!g[ZE]!y Press !t(E)!y to turn of the MW2-Auto Minigun !!!")
- }
- public task_delay(id)
- {
- g_remoting[id] = 1
- }
- public client_PostThink(id)
- {
- if(!g_remoting[id])
- return
- if(!g_player_main[id])
- return
- if(!pev_valid(g_player_main[id]))
- {
- reset_minigun(id)
- return
- }
- if(!g_firing[id] && !g_reloading[g_player_main[id]])
- {
- if(g_heat[g_player_main[id]] > 0)
- {
- static Float:CurTime
- CurTime = get_gametime()
- if(CurTime - get_pcvar_float(cvar_delay_attack) * 2 > g_check_heat[id])
- {
- g_heat[g_player_main[id]]--
- g_check_heat[id] = CurTime
- }
- }
- }
- static Message[64]
- if(g_heat[g_player_main[id]] <= 0)
- {
- set_hudmessage(0, 255, 0, -1.0, 0.90, 0, 1.0, 1.0)
- formatex(Message, sizeof(Message), "Status: Good")
- } else if(g_heat[g_player_main[id]] > 0 && g_heat[g_player_main[id]] < 100) {
- set_hudmessage(255, 255, 0, -1.0, 0.90, 0, 1.0, 1.0)
- formatex(Message, sizeof(Message), "Status: Heat %i%%", g_heat[g_player_main[id]])
- } else if(g_heat[g_player_main[id]] >= 100) {
- set_hudmessage(255, 0, 0, -1.0, 0.90, 0, 1.0, 1.0)
- formatex(Message, sizeof(Message), "Status: OverHeat")
- }
- ShowSyncHudMsg(id, g_sync_hud1, Message)
- static Float:NewAngles[3], Float:OldAngles[3], Float:Origin[3]
- pev(id, pev_angles, NewAngles)
- pev(g_player_main[id], pev_angles, OldAngles)
- NewAngles[2] = OldAngles[2]
- pev(g_player_main2[id], pev_origin, Origin)
- //get_position(g_player_main2[id], -10.0, 0.0, 0.0, Origin)
- set_pev(g_player_main[id], pev_v_angle, NewAngles)
- set_pev(g_player_main2[id], pev_angles, NewAngles)
- NewAngles[0] -= NewAngles[0] * 2
- set_pev(g_player_main[id], pev_angles, NewAngles)
- if(get_user_weapon(id) != CSW_KNIFE)
- engclient_cmd(id, "weapon_knife")
- }
- public fw_main_think(ent)
- {
- if(!pev_valid(ent))
- return
- if(pev(ent, pev_health) - 1000.0 < 0)
- {
- if(!g_dead[ent])
- minigun_dead(ent)
- return
- }
- if(!g_dead[ent])
- entity_set_float(ent,EV_FL_nextthink, halflife_time() + 0.01)
- }
- public fw_main_takedamage(victim, inflictor, attacker, Float:Damage, damagebits)
- {
- if(!is_user_alive(attacker) || !is_user_connected(attacker))
- return HAM_IGNORED
- static Health
- Health = pev(victim, pev_health) - 1000
- client_print(attacker, print_center, "MW2 Auto-Minigun Health: %i", Health)
- return HAM_HANDLED
- }
- public minigun_dead(ent)
- {
- g_dead[ent] = 1
- static Float:Origin[3]
- pev(ent, pev_origin, Origin)
- message_begin(MSG_BROADCAST ,SVC_TEMPENTITY)
- write_byte(TE_EXPLOSION)
- engfunc(EngFunc_WriteCoord, Origin[0])
- engfunc(EngFunc_WriteCoord, Origin[1])
- engfunc(EngFunc_WriteCoord, Origin[2])
- write_short(g_exp_id) // sprite index
- write_byte(30) // scale in 0.1's
- write_byte(30) // framerate
- write_byte(0) // flags
- message_end()
- static id
- id = g_owner[ent]
- if(is_user_connected(id))
- {
- reset_minigun(id)
- client_printcolor(id, "!g[ZE]!y Your MW2 Auto-Minigun has been !tDestroyed!y !!!")
- }
- Origin[0] = 9999.0
- Origin[1] = 9999.0
- Origin[2] = 9999.0
- set_pev(ent, pev_origin, Origin)
- }
- public fw_CmdStart(id, uc_handle, seed)
- {
- if(!is_user_alive(id) || !is_user_connected(id))
- return FMRES_IGNORED
- if(!g_player_main[id])
- return FMRES_IGNORED
- static PressButton
- PressButton = get_uc(uc_handle, UC_Buttons)
- if(g_remoting[id])
- {
- if(PressButton & IN_ATTACK)
- {
- static Float:CurTime
- CurTime = get_gametime()
- if(CurTime - get_pcvar_float(cvar_delay_attack) > g_last_shoot[id])
- {
- if(!g_preparing[id] && !g_firing[id] && !g_ending[id])
- {
- g_preparing[id] = 1
- g_firing[id] = 0
- set_entity_anim(g_player_main[id], 1)
- set_task(1.5, "start_attack", id)
- emit_sound(g_player_main[id], CHAN_WEAPON, minigun_sound[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
- }
- if(!g_preparing[id] && g_firing[id] && !g_ending[id] && g_heat[g_player_main[id]] < 100)
- {
- minigun_shoot(id)
- if(CurTime - get_pcvar_float(cvar_delay_attack) > g_check_heat[id])
- {
- if(g_heat[g_player_main[id]] < 100)
- {
- g_heat[g_player_main[id]]++
- }
- g_check_heat[id] = CurTime
- }
- } else if(g_heat[g_player_main[id]] >= 100) {
- if(!g_preparing[id] && g_firing[id] && !g_ending[id] && !g_reloading[g_player_main[id]])
- {
- g_firing[id] = 0
- g_preparing[id] = 0
- g_ending[id] = 1
- set_entity_anim(g_player_main[id], 3)
- emit_sound(g_player_main[id], CHAN_WEAPON, minigun_sound[2], 1.0, ATTN_NORM, 0, PITCH_NORM)
- set_task(2.0, "stop_attack", id)
- static Message[128]
- formatex(Message, sizeof(Message), "!g[ZE]!y System is overheat. Please wait !t%i!y seconds !!!", get_pcvar_float(cvar_reload_time))
- client_printcolor(id, Message)
- g_reloading[g_player_main[id]] = 1
- set_task(get_pcvar_float(cvar_reload_time), "reload_heat", id)
- }
- }
- g_last_shoot[id] = CurTime
- }
- PressButton &= ~IN_ATTACK
- set_uc(uc_handle, UC_Buttons, PressButton)
- } else {
- if(pev(id, pev_oldbuttons) & IN_ATTACK)
- {
- if(g_preparing[id] || g_firing[id])
- {
- g_firing[id] = 0
- g_preparing[id] = 0
- g_ending[id] = 1
- set_entity_anim(g_player_main[id], 3)
- emit_sound(g_player_main[id], CHAN_WEAPON, minigun_sound[2], 1.0, ATTN_NORM, 0, PITCH_NORM)
- set_task(2.0, "stop_attack", id)
- }
- }
- }
- }
- if(PressButton & IN_USE)
- {
- if(g_remoting[id])
- {
- set_task(1.0, "task_delay2", id)
- attach_view(id, id)
- g_preparing[id] = 0
- g_firing[id] = 0
- PressButton &= ~IN_USE
- set_uc(uc_handle, UC_Buttons, PressButton)
- } else {
- if(!task_exists(id+2479))
- {
- set_task(3.0, "do_remote", id+2479)
- message_begin(MSG_ONE_UNRELIABLE, 108, {0,0,0}, id)
- write_short(3)
- message_end()
- }
- }
- } else {
- if(pev(id, pev_oldbuttons) & IN_USE)
- {
- remove_task(id+2479)
- message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("BarTime"), {0,0,0}, id)
- write_short(0)
- message_end()
- }
- }
- return FMRES_HANDLED
- }
- public reload_heat(id)
- {
- if(!pev_valid(g_player_main[id]))
- return
- g_heat[g_player_main[id]] = 0
- g_reloading[g_player_main[id]] = 0
- }
- public task_delay2(id)
- {
- g_remoting[id] = 0
- }
- public start_attack(id)
- {
- g_preparing[id] = 0
- g_firing[id] = 1
- }
- public stop_attack(id)
- {
- g_preparing[id] = 0
- g_firing[id] = 0
- g_ending[id] = 0
- }
- public minigun_shoot(id)
- {
- if(!g_remoting[id])
- {
- return PLUGIN_HANDLED
- }
- static Float:CurTime
- CurTime = get_gametime()
- if(CurTime - 0.1 > g_last_firesound[id])
- {
- PlaySound(id, minigun_sound[1])
- emit_sound(g_player_main[id], CHAN_BODY, minigun_sound[1], 1.0, ATTN_NORM, 0, PITCH_NORM)
- g_last_firesound[id] = CurTime
- }
- set_entity_anim(g_player_main[id], 2)
- static Float:Origin[3], Float:AimOrigin[3]
- get_position(g_player_main[id], 50.0, 0.0, 0.0, Origin)
- Origin[2] += 20.0
- 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(muzzleflash_spr_id) // sprite index
- write_byte(5) // scale in 0.1's
- write_byte(10) // framerate
- write_byte(4) // flags
- message_end()
- static Float:Punch[3]
- Punch[0] = random_float(1.0, 5.0)
- Punch[1] = random_float(1.0, 5.0)
- Punch[2] = random_float(1.0, 10.0)
- set_pev(id, pev_punchangle, Punch)
- get_position(g_player_main[id], 70.0, 0.0, 30.0, Origin)
- get_position(g_player_main[id], 4000.0, 0.0, 30.0, AimOrigin)
- create_tracer(id, Origin, AimOrigin)
- get_position(g_player_main[id], 4000.0, -30.0, 50.0, AimOrigin)
- create_tracer(id, Origin, AimOrigin)
- get_position(g_player_main[id], 4000.0, 30.0, -50.0, AimOrigin)
- create_tracer(id, Origin, AimOrigin)
- get_position(g_player_main[id], 4000.0, -60.0, -70.0, AimOrigin)
- create_tracer(id, Origin, AimOrigin)
- get_position(g_player_main[id], 4000.0, 60.0, 70.0, AimOrigin)
- create_tracer(id, Origin, AimOrigin)
- return PLUGIN_HANDLED
- }
- // Ham Weapon Deploy Forward
- public fw_Item_Deploy_Post(weapon_ent)
- {
- if(pev_valid(weapon_ent))
- return HAM_IGNORED
- static id
- id = pev(weapon_ent, pev_owner)
- if(g_remoting[id])
- engclient_cmd(id, "weapon_knife")
- return HAM_HANDLED
- }
- stock get_position(id,Float:forw, Float:right, Float:up, Float:vStart[])
- {
- new 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
- vAngle[0] = 0.0
- 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 create_tracer(id, Float:start[3], Float:end[3])
- {
- new start_[3], end_[3]
- FVecIVec(start, start_)
- FVecIVec(end, end_)
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
- write_byte(TE_TRACER)
- write_coord(start_[0])
- write_coord(start_[1])
- write_coord(start_[2])
- write_coord(end_[0])
- write_coord(end_[1])
- write_coord(end_[2])
- message_end()
- static tr, Float:End_Origin[3], Target
- engfunc(EngFunc_TraceLine, start, end, DONT_IGNORE_MONSTERS, -1, tr)
- get_tr2(tr, TR_vecEndPos, End_Origin)
- Target = get_tr2(tr, TR_pHit)
- if(is_user_alive(Target) && ze_is_user_zombie(Target))
- {
- static Float:Origin[3]
- pev(Target, pev_origin, Origin)
- // Show some blood :)
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
- write_byte(TE_BLOODSPRITE)
- write_coord(floatround(Origin[0]))
- write_coord(floatround(Origin[1]))
- write_coord(floatround(Origin[2]))
- write_short(g_bloodspray)
- write_short(g_blood)
- write_byte(70)
- write_byte(random_num(1,2))
- message_end()
- ExecuteHamB(Ham_TakeDamage, Target, 0, id, random_float(get_pcvar_float(cvar_minigun_dmgrand_start), get_pcvar_float(cvar_minigun_dmgrand_end)), DMG_BULLET)
- }
- make_bullet(id, End_Origin)
- }
- stock make_bullet(id, Float:Origin[3])
- {
- // Find target
- new target, body
- get_user_aiming(id, target, body, 999999)
- if(target > 0 && target <= get_maxplayers())
- {
- new Float:fStart[3], Float:fEnd[3], Float:fRes[3], Float:fVel[3]
- pev(id, pev_origin, fStart)
- // Get ids view direction
- velocity_by_aim(id, 64, fVel)
- // Calculate position where blood should be displayed
- fStart[0] = Origin[0]
- fStart[1] = Origin[1]
- fStart[2] = Origin[2]
- fEnd[0] = fStart[0]+fVel[0]
- fEnd[1] = fStart[1]+fVel[1]
- fEnd[2] = fStart[2]+fVel[2]
- // Draw traceline from victims origin into ids view direction to find
- // the location on the wall to put some blood on there
- new res
- engfunc(EngFunc_TraceLine, fStart, fEnd, 0, target, res)
- get_tr2(res, TR_vecEndPos, fRes)
- // Show some blood :)
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
- write_byte(TE_BLOODSPRITE)
- write_coord(floatround(fStart[0]))
- write_coord(floatround(fStart[1]))
- write_coord(floatround(fStart[2]))
- write_short(g_bloodspray)
- write_short(g_blood)
- write_byte(70)
- write_byte(random_num(1,2))
- message_end()
- } else {
- new decal = 41
- // Check if the wall hit is an entity
- if(target)
- {
- // Put decal on an entity
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
- write_byte(TE_DECAL)
- write_coord(floatround(Origin[0]))
- write_coord(floatround(Origin[1]))
- write_coord(floatround(Origin[2]))
- write_byte(decal)
- write_short(target)
- message_end()
- } else {
- // Put decal on "world" (a wall)
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
- write_byte(TE_WORLDDECAL)
- write_coord(floatround(Origin[0]))
- write_coord(floatround(Origin[1]))
- write_coord(floatround(Origin[2]))
- write_byte(decal)
- message_end()
- }
- // Show sparcles
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
- write_byte(TE_GUNSHOTDECAL)
- write_coord(floatround(Origin[0]))
- write_coord(floatround(Origin[1]))
- write_coord(floatround(Origin[2]))
- write_short(id)
- write_byte(decal)
- message_end()
- }
- }
- stock set_entity_anim(ent, anim)
- {
- entity_set_float(ent, EV_FL_animtime, get_gametime())
- entity_set_float(ent, EV_FL_framerate, 1.0)
- entity_set_int(ent, EV_INT_sequence, anim)
- }
- stock client_printcolor(const id, const input[], any:...)
- {
- new iCount = 1, iPlayers[32]
- static szMsg[191]
- vformat(szMsg, charsmax(szMsg), input, 3)
- replace_all(szMsg, 190, "!g", "^4")
- replace_all(szMsg, 190, "!y", "^1")
- replace_all(szMsg, 190, "!t", "^3")
- if(id) iPlayers[0] = id
- else get_players(iPlayers, iCount, "ch")
- for (new i = 0; i < iCount; i++)
- {
- if(is_user_connected(iPlayers[i]))
- {
- message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i])
- write_byte(iPlayers[i])
- write_string(szMsg)
- message_end()
- }
- }
- }
He who fails to plan is planning to fail
Create an account or sign in to join the discussion
You need to be a member in order to post a reply
Create an account
Not a member? register to join our community
Members can start their own topics & subscribe to topics
It’s free and only takes a minute
Sign in
Who is online
Users browsing this forum: No registered users and 6 guests