Custom Weapons menu
Custom Weapons menu
Hello everyone i have a request if someone cand help me, i put his plugin viewtopic.php?f=15&t=3331 in my sv and it-s working very good i like it, but i want to add more extra guns for level, can somne one help me to make it for me?, because i try to make by myself but is not work.
I want to add 4 more guns
For level 35 M4A1 Dark Knight - viewtopic.php?f=14&t=268
For level 40 Ak47 Paladin - viewtopic.php?f=14&t=267
For level 45 - Tornado laserGun
For level 50 - RPG 7 - viewtopic.php?f=14&t=248
If someone can help me, pleaso post here, Thank you.
I want to add 4 more guns
For level 35 M4A1 Dark Knight - viewtopic.php?f=14&t=268
For level 40 Ak47 Paladin - viewtopic.php?f=14&t=267
For level 45 - Tornado laserGun
For level 50 - RPG 7 - viewtopic.php?f=14&t=248
If someone can help me, pleaso post here, Thank you.
- Night Fury
- Mod Developer
- Posts: 677
- Joined: 7 years ago
- Contact:
Post what you have tried and we will help you to fix it.
I just try to modify some lines, i-m not to good to edit this plugin, i don-t know how and what i need to edit, that was the reason why i ask here
Soory for double post, nobody can help me ?
Added DarkNight M4A1, you can add the other same as it, just let me know if it works or not as I did not test it.
- DarkNight M4A1:
- #include <zombie_escape>
- #include <fakemeta_util>
- #include <cstrike>
- #include <xs>
- #include <fun>
- #define PLUGIN "[CSO] M4A1 Dark Knight"
- #define VERSION "1.0"
- #define AUTHOR "Dias Pendragon"
- // Data Config
- #define MODEL_V "models/v_buffm4.mdl"
- #define MODEL_P "models/p_buffm4.mdl"
- #define MODEL_W "models/w_buffm4.mdl"
- #define MODEL_W_OLD "models/w_m4a1.mdl"
- #define CSW_BASE CSW_M4A1
- #define weapon_base "weapon_m4a1"
- #define SUBMODEL -1 // can -1
- #define WEAPON_CODE 2692015
- #define WEAPON_EVENT "events/m4a1.sc"
- #define ANIME_SHOOT 3
- #define ANIME_RELOAD 1 // can -1
- #define ANIME_DRAW 2 // can -1
- #define ANIME_IDLE 0 // can -1
- new const WeaponSounds[6][] =
- {
- "weapons/m4a1buff-1.wav",
- "weapons/m4a1buff-2.wav",
- "weapons/m4a1buff_idle.wav",
- "weapons/m4a1buff_clipin1.wav",
- "weapons/m4a1buff_clipin2.wav",
- "weapons/m4a1buff_clipout.wav"
- }
- // Weapon Config
- #define DAMAGE_A 30 // 60 for Zombie
- #define DAMAGE_B 43 // 200 for Zombie
- #define ACCURACY 70 // 0 - 100 ; -1 Default
- #define CLIP 50
- #define BPAMMO 250
- #define SPEED_A 0.0875
- #define SPEED_B 0.25
- #define RECOIL 0.75
- #define RELOAD_TIME 2.0
- // Muzzleflash
- #define MUZZLEFLASH1 "sprites/muzzleflash43.spr"
- #define MUZZLEFLASH2 "sprites/muzzleflash44.spr"
- // MACROS
- #define Get_BitVar(%1,%2) (%1 & (1 << (%2 & 31)))
- #define Set_BitVar(%1,%2) %1 |= (1 << (%2 & 31))
- #define UnSet_BitVar(%1,%2) %1 &= ~(1 << (%2 & 31))
- //new g_Base
- new g_Had_Base, g_Clip[33], g_OldWeapon[33], Float:g_Recoil[33][3]
- new g_Event_Base, g_SmokePuff_SprId, g_MsgCurWeapon, m_spriteTexture
- new g_Muzzleflash_Ent, g_Muzzleflash
- new g_Muzzleflash_Ent2, g_Muzzleflash2
- // Safety
- new g_HamBot
- new g_IsConnected, g_IsAlive, g_PlayerWeapon[33]
- public plugin_init()
- {
- register_plugin(PLUGIN, VERSION, AUTHOR)
- // Safety
- Register_SafetyFunc()
- // Event
- register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
- // Forward
- register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
- register_forward(FM_PlaybackEvent, "fw_PlaybackEvent")
- register_forward(FM_SetModel, "fw_SetModel")
- register_forward(FM_CmdStart, "fw_CmdStart")
- register_forward(FM_AddToFullPack, "fw_AddToFullPack_Post", 1)
- register_forward(FM_CheckVisibility, "fw_CheckVisibility")
- // Ham
- RegisterHam(Ham_Item_Deploy, weapon_base, "fw_Item_Deploy_Post", 1)
- RegisterHam(Ham_Item_AddToPlayer, weapon_base, "fw_Item_AddToPlayer_Post", 1)
- RegisterHam(Ham_Weapon_WeaponIdle, weapon_base, "fw_Weapon_WeaponIdle_Post", 1)
- RegisterHam(Ham_Item_PostFrame, weapon_base, "fw_Item_PostFrame")
- RegisterHam(Ham_Weapon_Reload, weapon_base, "fw_Weapon_Reload")
- RegisterHam(Ham_Weapon_Reload, weapon_base, "fw_Weapon_Reload_Post", 1)
- RegisterHam(Ham_Weapon_PrimaryAttack, weapon_base, "fw_Weapon_PrimaryAttack")
- RegisterHam(Ham_Weapon_PrimaryAttack, weapon_base, "fw_Weapon_PrimaryAttack_Post", 1)
- RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack_World")
- RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack_Player")
- // Cache
- g_MsgCurWeapon = get_user_msgid("CurWeapon")
- }
- public plugin_natives()
- {
- register_native("give_darknight_m4a1", "native_give_darknight_m4a1", 1)
- }
- public native_give_darknight_m4a1(id)
- {
- Get_Base(id)
- }
- 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])
- m_spriteTexture = precache_model( "sprites/lgtning.spr" )
- g_SmokePuff_SprId = engfunc(EngFunc_PrecacheModel, "sprites/wall_puff1.spr")
- register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1)
- // Muzzleflash
- g_Muzzleflash_Ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
- g_Muzzleflash_Ent2 = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
- precache_model(MUZZLEFLASH1)
- precache_model(MUZZLEFLASH2)
- engfunc(EngFunc_SetModel, g_Muzzleflash_Ent, MUZZLEFLASH1)
- engfunc(EngFunc_SetModel, g_Muzzleflash_Ent2, MUZZLEFLASH2)
- set_pev(g_Muzzleflash_Ent, pev_scale, 0.075)
- set_pev(g_Muzzleflash_Ent2, pev_scale, 0.1)
- set_pev(g_Muzzleflash_Ent, pev_rendermode, kRenderTransTexture)
- set_pev(g_Muzzleflash_Ent, pev_renderamt, 0.0)
- set_pev(g_Muzzleflash_Ent2, pev_rendermode, kRenderTransTexture)
- set_pev(g_Muzzleflash_Ent2, pev_renderamt, 0.0)
- }
- public fw_PrecacheEvent_Post(type, const name[])
- {
- if(equal(WEAPON_EVENT, name)) g_Event_Base = 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_Player")
- }
- public client_disconnected(id)
- {
- Safety_Disconnected(id)
- }
- /*
- public Mileage_WeaponGet(id, ItemID)
- {
- if(ItemID == g_Base) Get_Base(id)
- }
- public Mileage_WeaponRefillAmmo(id, ItemID)
- {
- if(ItemID == g_Base) cs_set_user_bpammo(id, CSW_BASE, BPAMMO)
- }
- public Mileage_WeaponRemove(id, ItemID)
- {
- if(ItemID == g_Base) Remove_Base(id)
- }*/
- public Get_Base(id)
- {
- Set_BitVar(g_Had_Base, id)
- give_item(id, weapon_base)
- // Clip & Ammo
- static Ent; Ent = fm_get_user_weapon_entity(id, CSW_BASE)
- if(!pev_valid(Ent)) return
- cs_set_weapon_ammo(Ent, CLIP)
- cs_set_user_bpammo(id, CSW_BASE, BPAMMO)
- message_begin(MSG_ONE_UNRELIABLE, g_MsgCurWeapon, _, id)
- write_byte(1)
- write_byte(CSW_BASE)
- write_byte(CLIP)
- message_end()
- cs_set_weapon_silen(Ent, 0, 0)
- }
- public ze_user_infected(id)
- {
- Remove_Base(id)
- }
- public ze_user_humanized(id)
- {
- Remove_Base(id)
- }
- public Remove_Base(id)
- {
- UnSet_BitVar(g_Had_Base, id)
- }
- public Event_CurWeapon(id)
- {
- static CSWID; CSWID = read_data(2)
- static SubModel; SubModel = SUBMODEL
- if((CSWID == CSW_BASE && g_OldWeapon[id] != CSW_BASE) && Get_BitVar(g_Had_Base, id))
- {
- if(SubModel != -1) Draw_NewWeapon(id, CSWID)
- } else if((CSWID == CSW_BASE && g_OldWeapon[id] == CSW_BASE) && Get_BitVar(g_Had_Base, id)) {
- static Ent; Ent = fm_get_user_weapon_entity(id, CSW_BASE)
- if(!pev_valid(Ent))
- {
- g_OldWeapon[id] = get_user_weapon(id)
- return
- }
- static Float:Speed
- if(cs_get_user_zoom(id) != CS_SET_AUGSG552_ZOOM) Speed = SPEED_A
- else Speed = SPEED_B
- set_pdata_float(Ent, 46, Speed, 4)
- set_pdata_float(Ent, 47, Speed, 4)
- } else if(CSWID != CSW_BASE && g_OldWeapon[id] == CSW_BASE) {
- if(SubModel != -1) Draw_NewWeapon(id, CSWID)
- }
- g_OldWeapon[id] = get_user_weapon(id)
- }
- public Draw_NewWeapon(id, CSW_ID)
- {
- if(CSW_ID == CSW_BASE)
- {
- static ent
- ent = fm_get_user_weapon_entity(id, CSW_BASE)
- if(pev_valid(ent) && Get_BitVar(g_Had_Base, id))
- {
- set_pev(ent, pev_effects, pev(ent, pev_effects) &~ EF_NODRAW)
- engfunc(EngFunc_SetModel, ent, MODEL_P)
- set_pev(ent, pev_body, SUBMODEL)
- }
- } else {
- static ent
- ent = fm_get_user_weapon_entity(id, CSW_BASE)
- if(pev_valid(ent)) set_pev(ent, pev_effects, pev(ent, pev_effects) | EF_NODRAW)
- }
- }
- public fw_UpdateClientData_Post(id, sendweapons, cd_handle)
- {
- if(!is_alive(id))
- return FMRES_IGNORED
- if(get_user_weapon(id) == CSW_BASE && Get_BitVar(g_Had_Base, id))
- set_cd(cd_handle, CD_flNextAttack, get_gametime() + 0.001)
- return FMRES_HANDLED
- }
- public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
- {
- if (!is_connected(invoker))
- return FMRES_IGNORED
- if(get_player_weapon(invoker) != CSW_BASE || !Get_BitVar(g_Had_Base, invoker))
- return FMRES_IGNORED
- if(eventid != g_Event_Base)
- return FMRES_IGNORED
- engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
- Set_WeaponAnim(invoker, ANIME_SHOOT)
- if(cs_get_user_zoom(invoker) != CS_SET_AUGSG552_ZOOM) emit_sound(invoker, CHAN_WEAPON, WeaponSounds[0], 1.0, 0.4, 0, 94 + random_num(0, 15))
- else emit_sound(invoker, CHAN_WEAPON, WeaponSounds[1], 1.0, 0.4, 0, 94 + random_num(0, 15))
- return FMRES_SUPERCEDE
- }
- public fw_SetModel(entity, model[])
- {
- if(!pev_valid(entity))
- return FMRES_IGNORED
- static Classname[32]
- pev(entity, pev_classname, Classname, sizeof(Classname))
- if(!equal(Classname, "weaponbox"))
- return FMRES_IGNORED
- static iOwner
- iOwner = pev(entity, pev_owner)
- if(equal(model, MODEL_W_OLD))
- {
- static weapon; weapon = find_ent_by_owner(-1, weapon_base, entity)
- if(!pev_valid(weapon))
- return FMRES_IGNORED;
- if(Get_BitVar(g_Had_Base, iOwner))
- {
- set_pev(weapon, pev_impulse, WEAPON_CODE)
- engfunc(EngFunc_SetModel, entity, MODEL_W)
- set_pev(entity, pev_body, SUBMODEL)
- Remove_Base(iOwner)
- return FMRES_SUPERCEDE
- }
- }
- return FMRES_IGNORED;
- }
- public fw_CmdStart(id, uc_handle, seed)
- {
- if (!is_alive(id))
- return FMRES_IGNORED
- if(get_player_weapon(id) != CSW_BASE || !Get_BitVar(g_Had_Base, id))
- return FMRES_IGNORED
- static Button; Button = get_uc(uc_handle, UC_Buttons)
- if(Button & IN_ATTACK2)
- {
- static Float:Time; Time = get_pdata_float(id, 83, 5)
- if(Time > 0.0) return FMRES_IGNORED
- if(cs_get_user_zoom(id) != CS_SET_AUGSG552_ZOOM) cs_set_user_zoom(id, CS_SET_AUGSG552_ZOOM, 1)
- else cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
- Time = 0.25
- set_pdata_float(id, 83, Time, 5)
- }
- return FMRES_IGNORED
- }
- public fw_AddToFullPack_Post(esState, iE, iEnt, iHost, iHostFlags, iPlayer, pSet)
- {
- if(iEnt == g_Muzzleflash_Ent)
- {
- if(Get_BitVar(g_Muzzleflash, 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_Muzzleflash, iHost)
- //remove_task(iHost+WEAPON_CODE)
- set_task(0.001, "Set_NextMuzzleflash", iHost+WEAPON_CODE)
- }
- 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)
- } else if(iEnt == 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)
- }
- }
- public Set_NextMuzzleflash(id) Set_BitVar(g_Muzzleflash2, id-WEAPON_CODE)
- public fw_CheckVisibility(iEntity, pSet)
- {
- if(iEntity == g_Muzzleflash_Ent || iEntity == g_Muzzleflash_Ent2)
- {
- forward_return(FMV_CELL, 1)
- return FMRES_SUPERCEDE
- }
- return FMRES_IGNORED
- }
- 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_Base, Id))
- return
- static SubModel; SubModel = SUBMODEL
- set_pev(Id, pev_viewmodel2, MODEL_V)
- set_pev(Id, pev_weaponmodel2, SubModel != -1 ? "" : MODEL_P)
- static Draw; Draw = ANIME_DRAW
- if(Draw != -1) Set_WeaponAnim(Id, ANIME_DRAW)
- }
- public fw_Item_AddToPlayer_Post(Ent, id)
- {
- if(!pev_valid(Ent))
- return HAM_IGNORED
- if(pev(Ent, pev_impulse) == WEAPON_CODE)
- {
- Set_BitVar(g_Had_Base, id)
- set_pev(Ent, pev_impulse, 0)
- }
- return HAM_HANDLED
- }
- public fw_Item_PostFrame(ent)
- {
- static id; id = pev(ent, pev_owner)
- if(!is_user_alive(id))
- return HAM_IGNORED
- if(!Get_BitVar(g_Had_Base, id))
- return HAM_IGNORED
- static Float:flNextAttack; flNextAttack = get_pdata_float(id, 83, 5)
- static bpammo; bpammo = cs_get_user_bpammo(id, CSW_BASE)
- static iClip; iClip = get_pdata_int(ent, 51, 4)
- static fInReload; fInReload = get_pdata_int(ent, 54, 4)
- if(fInReload && flNextAttack <= 0.0)
- {
- static temp1
- temp1 = min(CLIP - iClip, bpammo)
- set_pdata_int(ent, 51, iClip + temp1, 4)
- cs_set_user_bpammo(id, CSW_BASE, bpammo - temp1)
- set_pdata_int(ent, 54, 0, 4)
- fInReload = 0
- }
- return HAM_IGNORED
- }
- public fw_Weapon_Reload(ent)
- {
- static id; id = pev(ent, pev_owner)
- if(!is_user_alive(id))
- return HAM_IGNORED
- if(!Get_BitVar(g_Had_Base, id))
- return HAM_IGNORED
- g_Clip[id] = -1
- static BPAmmo; BPAmmo = cs_get_user_bpammo(id, CSW_BASE)
- static iClip; iClip = get_pdata_int(ent, 51, 4)
- if(BPAmmo <= 0)
- return HAM_SUPERCEDE
- if(iClip >= CLIP)
- return HAM_SUPERCEDE
- g_Clip[id] = iClip
- return HAM_HANDLED
- }
- public fw_Weapon_Reload_Post(ent)
- {
- static id; id = pev(ent, pev_owner)
- if(!is_user_alive(id))
- return HAM_IGNORED
- if(!Get_BitVar(g_Had_Base, id))
- return HAM_IGNORED
- if((get_pdata_int(ent, 54, 4) == 1))
- { // Reload
- if(g_Clip[id] == -1)
- return HAM_IGNORED
- set_pdata_int(ent, 51, g_Clip[id], 4)
- static Reload; Reload = ANIME_RELOAD
- if(Reload != -1) Set_WeaponAnim(id, ANIME_RELOAD)
- Set_PlayerNextAttack(id, RELOAD_TIME)
- }
- return HAM_HANDLED
- }
- public fw_Weapon_WeaponIdle_Post( iEnt )
- {
- if(pev_valid(iEnt) != 2)
- return
- static Id; Id = get_pdata_cbase(iEnt, 41, 4)
- if(get_pdata_cbase(Id, 373) != iEnt)
- return
- if(!Get_BitVar(g_Had_Base, Id))
- return
- static Idle; Idle = ANIME_IDLE
- if(Idle != -1 && get_pdata_float(iEnt, 48, 4) <= 0.25)
- {
- Set_WeaponAnim(Id, ANIME_IDLE)
- set_pdata_float(iEnt, 48, 20.0, 4)
- }
- }
- public fw_TraceAttack_World(Victim, Attacker, Float:Damage, Float:Direction[3], Ptr, DamageBits)
- {
- if(!is_connected(Attacker))
- return HAM_IGNORED
- if(get_player_weapon(Attacker) != CSW_BASE || !Get_BitVar(g_Had_Base, Attacker))
- return HAM_IGNORED
- static Float:flEnd[3], Float:vecPlane[3]
- get_tr2(Ptr, TR_vecEndPos, flEnd)
- get_tr2(Ptr, TR_vecPlaneNormal, vecPlane)
- Make_BulletHole(Attacker, flEnd, Damage)
- Make_BulletSmoke(Attacker, Ptr)
- if(cs_get_user_zoom(Attacker) != CS_SET_AUGSG552_ZOOM) SetHamParamFloat(3, float(DAMAGE_A))
- else {
- SetHamParamFloat(3, float(DAMAGE_B))
- Create_Tracer(Attacker, flEnd)
- }
- return HAM_HANDLED
- }
- public fw_TraceAttack_Player(Victim, Attacker, Float:Damage, Float:Direction[3], Ptr, DamageBits)
- {
- if(!is_connected(Attacker))
- return HAM_IGNORED
- if(get_player_weapon(Attacker) != CSW_BASE || !Get_BitVar(g_Had_Base, Attacker))
- return HAM_IGNORED
- static Float:flEnd[3]
- get_tr2(Ptr, TR_vecEndPos, flEnd)
- if(cs_get_user_zoom(Attacker) != CS_SET_AUGSG552_ZOOM) SetHamParamFloat(3, float(DAMAGE_A))
- else {
- SetHamParamFloat(3, float(DAMAGE_B))
- Create_Tracer(Attacker, flEnd)
- }
- return HAM_HANDLED
- }
- public Create_Tracer(id, Float:Target[3])
- {
- static Float:Start[3];
- Get_Position(id, 48.0, 6.0, -6.0, Start)
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
- write_byte(TE_BEAMPOINTS)
- write_coord(Start[0])
- write_coord(Start[1])
- write_coord(Start[2])
- write_coord(Target[0])
- write_coord(Target[1])
- write_coord(Target[2])
- write_short(m_spriteTexture)
- write_byte(0) // framerate
- write_byte(0) // framerate
- write_byte(5) // life
- write_byte(2) // width
- write_byte(0) // noise
- write_byte(255) // r, g, b
- write_byte(255) // r, g, b
- write_byte(255) // r, g, b
- write_byte(175) // brightness
- write_byte(1) // speed
- message_end()
- }
- public fw_Weapon_PrimaryAttack(Ent)
- {
- static id; id = pev(Ent, pev_owner)
- if(!is_alive(id))
- return
- if(!Get_BitVar(g_Had_Base, id))
- return
- pev(id, pev_punchangle, g_Recoil[id])
- }
- public fw_Weapon_PrimaryAttack_Post(Ent)
- {
- static id; id = pev(Ent, pev_owner)
- if(!is_alive(id))
- return
- if(!Get_BitVar(g_Had_Base, id))
- return
- static Float:Push[3]
- pev(id, pev_punchangle, Push)
- xs_vec_sub(Push, g_Recoil[id], Push)
- xs_vec_mul_scalar(Push, RECOIL, Push)
- xs_vec_add(Push, g_Recoil[id], Push)
- set_pev(id, pev_punchangle, Push)
- Set_BitVar(g_Muzzleflash, id)
- // Acc
- static Accena; Accena = ACCURACY
- if(Accena != -1)
- {
- static Float:Accuracy
- Accuracy = (float(100 - ACCURACY) * 1.5) / 100.0
- set_pdata_float(Ent, 62, Accuracy, 4);
- }
- }
- /* ===============================
- ------------- 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]
- }
- /* ===============================
- --------- END OF SAFETY ---------
- =================================*/
- 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 Make_BulletHole(id, Float:Origin[3], Float:Damage)
- {
- // Find target
- static Decal; Decal = random_num(41, 45)
- static LoopTime;
- if(Damage > 100.0) LoopTime = 2
- else LoopTime = 1
- for(new i = 0; i < LoopTime; i++)
- {
- // Put decal on "world" (a wall)
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
- write_byte(TE_WORLDDECAL)
- engfunc(EngFunc_WriteCoord, Origin[0])
- engfunc(EngFunc_WriteCoord, Origin[1])
- engfunc(EngFunc_WriteCoord, Origin[2])
- write_byte(Decal)
- message_end()
- // Show sparcles
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
- write_byte(TE_GUNSHOTDECAL)
- engfunc(EngFunc_WriteCoord, Origin[0])
- engfunc(EngFunc_WriteCoord, Origin[1])
- engfunc(EngFunc_WriteCoord, Origin[2])
- write_short(id)
- write_byte(Decal)
- message_end()
- }
- }
- stock Make_BulletSmoke(id, TrResult)
- {
- static Float:vecSrc[3], Float:vecEnd[3], TE_FLAG
- get_weapon_attachment(id, vecSrc)
- global_get(glb_v_forward, vecEnd)
- xs_vec_mul_scalar(vecEnd, 8192.0, vecEnd)
- xs_vec_add(vecSrc, vecEnd, vecEnd)
- get_tr2(TrResult, TR_vecEndPos, vecSrc)
- get_tr2(TrResult, TR_vecPlaneNormal, vecEnd)
- xs_vec_mul_scalar(vecEnd, 2.5, vecEnd)
- xs_vec_add(vecSrc, vecEnd, vecEnd)
- TE_FLAG |= TE_EXPLFLAG_NODLIGHTS
- TE_FLAG |= TE_EXPLFLAG_NOSOUND
- TE_FLAG |= TE_EXPLFLAG_NOPARTICLES
- engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0)
- write_byte(TE_EXPLOSION)
- engfunc(EngFunc_WriteCoord, vecEnd[0])
- engfunc(EngFunc_WriteCoord, vecEnd[1])
- engfunc(EngFunc_WriteCoord, vecEnd[2] - 10.0)
- write_short(g_SmokePuff_SprId)
- write_byte(2)
- write_byte(50)
- write_byte(TE_FLAG)
- message_end()
- }
- stock get_weapon_attachment(id, Float:output[3], Float:fDis = 40.0)
- {
- static Float:vfEnd[3], viEnd[3]
- get_user_origin(id, viEnd, 3)
- IVecFVec(viEnd, vfEnd)
- static Float:fOrigin[3], Float:fAngle[3]
- pev(id, pev_origin, fOrigin)
- pev(id, pev_view_ofs, fAngle)
- xs_vec_add(fOrigin, fAngle, fOrigin)
- static Float:fAttack[3]
- xs_vec_sub(vfEnd, fOrigin, fAttack)
- xs_vec_sub(vfEnd, fOrigin, fAttack)
- static Float:fRate
- fRate = fDis / vector_length(fAttack)
- xs_vec_mul_scalar(fAttack, fRate, fAttack)
- xs_vec_add(fOrigin, fAttack, output)
- }
- stock 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 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 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
- }
- /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
- *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1042\\ f0\\ fs16 \n\\ par }
- */
- Weapons Menu:
- #include <zombie_escape>
- #include <ze_levels>
- native give_golden_m3(id);
- native give_golden_mp5(id);
- native give_golden_m4a1(id);
- native give_golden_ak47(id);
- native give_darknight_m4a1(id);
- // Setting File
- new const ZE_SETTING_RESOURCES[] = "zombie_escape.ini"
- // Keys
- 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
- const OFFSET_CSMENUCODE = 205
- // Primary Weapons Entities [Default Values]
- new const szPrimaryWeaponEnt[][] =
- {
- "weapon_xm1014", // Level 0
- "weapon_ump45", // Level 0
- "weapon_m3", // Level 1
- "weapon_mp5navy", // Level 2
- "weapon_p90", // Level 3
- "weapon_galil", // Level 4
- "weapon_famas", // Level 5
- "weapon_sg550", // Level 6
- "weapon_g3sg1", // Level 7
- "weapon_m249", // Level 8
- "weapon_sg552", // Level 9
- "weapon_aug", // Level 10
- "weapon_m4a1", // Level 11
- "weapon_ak47" // Level 12
- }
- // Secondary Weapons Entities [Default Values]
- new const szSecondaryWeaponEnt[][]=
- {
- "weapon_usp", // Level 0
- "weapon_p228", // Level 0
- "weapon_glock18", // Level 1
- "weapon_fiveseven", // Level 2
- "weapon_deagle", // Level 3
- "weapon_elite" // Level 4
- }
- // Primary and Secondary Weapons Names [Default Values]
- new const szWeaponNames[][] =
- {
- "",
- "P228",
- "",
- "Scout",
- "HE Grenade",
- "XM1014",
- "",
- "MAC-10",
- "AUG",
- "Smoke Grenade",
- "Dual Elite",
- "Five Seven",
- "UMP 45",
- "SG-550",
- "Galil",
- "Famas",
- "USP",
- "Glock",
- "AWP",
- "MP5",
- "M249",
- "M3",
- "M4A1",
- "TMP",
- "G3SG1",
- "Flashbang",
- "Desert Eagle",
- "SG-552",
- "AK-47",
- "",
- "P90"
- }
- // Max Back Clip Ammo (Change it From here if you need)
- new const szMaxBPAmmo[] =
- {
- -1,
- 52,
- -1,
- 90,
- 1,
- 32,
- 1,
- 100,
- 90,
- 1,
- 120,
- 100,
- 100,
- 90,
- 90,
- 90,
- 100,
- 120,
- 30,
- 120,
- 200,
- 32,
- 90,
- 120,
- 90,
- 2,
- 35,
- 90,
- 90,
- -1,
- 100
- }
- // Menu selections
- const MENU_KEY_AUTOSELECT = 7
- const MENU_KEY_BACK = 7
- const MENU_KEY_NEXT = 8
- const MENU_KEY_EXIT = 9
- // Variables
- new Array:g_szPrimaryWeapons, Array:g_szSecondaryWeapons
- new g_iMenuData[33][4],
- Float:g_fBuyTimeStart[33],
- bool:g_bBoughtPrimary[33],
- bool:g_bBoughtSecondary[33],
- WPN_MAXIDS[33]
- // Define
- #define WPN_STARTID g_iMenuData[id][0]
- #define WPN_SELECTION (g_iMenuData[id][0]+key)
- #define WPN_AUTO_ON g_iMenuData[id][1]
- #define WPN_AUTO_PRI g_iMenuData[id][2]
- #define WPN_AUTO_SEC g_iMenuData[id][3]
- // Cvars
- new g_pCvarBuyTime,
- g_pCvarHeGrenade,
- g_pCvarSmokeGrenade,
- g_pCvarFlashGrenade,
- g_pCvarBlockWeapLowLevel
- public plugin_natives()
- {
- register_native("ze_show_weapon_menu", "native_ze_show_weapon_menu", 1)
- register_native("ze_is_auto_buy_enabled", "native_ze_is_auto_buy_enabled", 1)
- register_native("ze_disable_auto_buy", "native_ze_disable_auto_buy", 1)
- }
- public plugin_precache()
- {
- // Initialize arrays (32 is the max length of Weapon Entity like: weapon_ak47)
- g_szPrimaryWeapons = ArrayCreate(32, 1)
- g_szSecondaryWeapons = ArrayCreate(32, 1)
- // Load from external file
- amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "PRIMARY", g_szPrimaryWeapons)
- amx_load_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "SECONDARY", g_szSecondaryWeapons)
- // If we couldn't load from file, use and save default ones
- new iIndex
- if (ArraySize(g_szPrimaryWeapons) == 0)
- {
- for (iIndex = 0; iIndex < sizeof szPrimaryWeaponEnt; iIndex++)
- ArrayPushString(g_szPrimaryWeapons, szPrimaryWeaponEnt[iIndex])
- // If not found .ini File Create it and save default values in it
- amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "PRIMARY", g_szPrimaryWeapons)
- }
- if (ArraySize(g_szSecondaryWeapons) == 0)
- {
- for (iIndex = 0; iIndex < sizeof szSecondaryWeaponEnt; iIndex++)
- ArrayPushString(g_szSecondaryWeapons, szSecondaryWeaponEnt[iIndex])
- // If not found .ini File Create it and save default values in it
- amx_save_setting_string_arr(ZE_SETTING_RESOURCES, "Weapons Menu", "SECONDARY", g_szSecondaryWeapons)
- }
- }
- public plugin_init()
- {
- register_plugin("[ZE] Levels Weapons Menu", "1.1", "Raheem")
- // Commands
- register_clcmd("guns", "Cmd_Buy")
- register_clcmd("say /enable", "Cmd_Enable")
- register_clcmd("say_team /enable", "Cmd_Enable")
- // Cvars
- g_pCvarBuyTime = register_cvar("ze_buy_time", "60")
- g_pCvarHeGrenade = register_cvar("ze_give_HE_nade", "1") // 0 Nothing || 1 Give HE
- g_pCvarSmokeGrenade = register_cvar("ze_give_SM_nade", "1")
- g_pCvarFlashGrenade = register_cvar("ze_give_FB_nade", "1")
- g_pCvarBlockWeapLowLevel = register_cvar("ze_block_weapons_lowlvl", "1")
- // Menus
- register_menu("Primary Weapons", KEYSMENU, "Menu_Buy_Primary")
- register_menu("Secondary Weapons", KEYSMENU, "Menu_Buy_Secondary")
- // Hams
- RegisterHam(Ham_Touch, "weaponbox", "Fw_TouchWeapon_Pre", 0)
- RegisterHam(Ham_Touch, "armoury_entity", "Fw_TouchWeapon_Pre", 0)
- }
- public client_disconnected(id)
- {
- WPN_AUTO_ON = 0
- WPN_STARTID = 0
- }
- public Cmd_Enable(id)
- {
- if (WPN_AUTO_ON)
- {
- ze_colored_print(id, "%L", LANG_PLAYER, "BUY_ENABLED")
- WPN_AUTO_ON = 0
- }
- }
- public Cmd_Buy(id)
- {
- // Player Zombie
- if (ze_is_user_zombie(id))
- {
- ze_colored_print(id, "%L", LANG_PLAYER, "NO_BUY_ZOMBIE")
- return
- }
- // Player Dead
- if (!is_user_alive(id))
- {
- ze_colored_print(id, "%L", LANG_PLAYER, "DEAD_CANT_BUY_WEAPON")
- return
- }
- // Already bought
- if (g_bBoughtPrimary[id] && g_bBoughtSecondary[id])
- {
- ze_colored_print(id, "%L", LANG_PLAYER, "ALREADY_BOUGHT")
- }
- Show_Available_Buy_Menus(id)
- }
- public ze_user_humanized(id)
- {
- // Static Values
- switch (ze_get_user_level(id))
- {
- case 0: WPN_MAXIDS[id] = 2
- case 1: WPN_MAXIDS[id] = 3
- case 2: WPN_MAXIDS[id] = 4
- case 3: WPN_MAXIDS[id] = 5
- case 4: WPN_MAXIDS[id] = 6
- case 5: WPN_MAXIDS[id] = 7
- case 6: WPN_MAXIDS[id] = 8
- case 7: WPN_MAXIDS[id] = 9
- case 8: WPN_MAXIDS[id] = 10
- case 9: WPN_MAXIDS[id] = 11
- case 10: WPN_MAXIDS[id] = 12
- case 11: WPN_MAXIDS[id] = 13
- case 12..14: WPN_MAXIDS[id] = 14
- case 15..19: WPN_MAXIDS[id] = 15 // Golden m3
- case 20..24: WPN_MAXIDS[id] = 16 // Golden MP5
- case 25..29: WPN_MAXIDS[id] = 17 // Golden M4A1
- case 30..34: WPN_MAXIDS[id] = 18 // Golden AK47
- case 35: WPN_MAXIDS[id] = 19 // DarkNight M4A1
- }
- if (ze_get_user_level(id) > 35)
- {
- WPN_MAXIDS[id] = 19
- }
- // Buyzone time starts when player is set to human
- g_fBuyTimeStart[id] = get_gametime()
- g_bBoughtPrimary[id] = false
- g_bBoughtSecondary[id] = false
- // Player dead or zombie
- if (!is_user_alive(id) || ze_is_user_zombie(id))
- return
- if (WPN_AUTO_ON)
- {
- ze_colored_print(id, "%L", LANG_PLAYER, "RE_ENABLE_MENU")
- Buy_Primary_Weapon(id, WPN_AUTO_PRI)
- Buy_Secondary_Weapon(id, WPN_AUTO_SEC)
- }
- // Open available buy menus
- Show_Available_Buy_Menus(id)
- // Give HE Grenade
- if (get_pcvar_num(g_pCvarHeGrenade) != 0)
- rg_give_item(id, "weapon_hegrenade")
- // Give Smoke Grenade
- if (get_pcvar_num(g_pCvarSmokeGrenade) != 0)
- rg_give_item(id, "weapon_smokegrenade")
- // Give Flashbang Grenade
- if (get_pcvar_num(g_pCvarFlashGrenade) != 0)
- rg_give_item(id, "weapon_flashbang")
- }
- public Show_Available_Buy_Menus(id)
- {
- // Already Bought
- if (g_bBoughtPrimary[id] && g_bBoughtSecondary[id])
- return
- // Here we use if and else if so we make sure that Primary weapon come first then secondary
- if (!g_bBoughtPrimary[id])
- {
- // Primary
- Show_Menu_Buy_Primary(id)
- }
- else if (!g_bBoughtSecondary[id])
- {
- // Secondary
- Show_Menu_Buy_Secondary(id)
- }
- }
- public Show_Menu_Buy_Primary(id)
- {
- new iMenuTime = floatround(g_fBuyTimeStart[id] + get_pcvar_float(g_pCvarBuyTime) - get_gametime())
- if (iMenuTime <= 0)
- {
- ze_colored_print(id, "%L", id, "BUY_MENU_TIME_EXPIRED")
- return
- }
- static szMenu[300], szWeaponName[32]
- new iLen, iIndex, iMaxLoops = min(WPN_STARTID+7, WPN_MAXIDS[id])
- // Title
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L \w[\r%d\w-\r%d\w]^n^n", id, "MENU_PRIMARY_TITLE", WPN_STARTID+1, min(WPN_STARTID+7, WPN_MAXIDS[id]))
- // 1-7. Weapon List
- for (iIndex = WPN_STARTID; iIndex < iMaxLoops; iIndex++)
- {
- if (ze_get_user_level(id) == 0 && iIndex >= 2||
- ze_get_user_level(id) == 1 && iIndex >= 3 ||
- ze_get_user_level(id) == 2 && iIndex >= 4 ||
- ze_get_user_level(id) == 3 && iIndex >= 5 ||
- ze_get_user_level(id) == 4 && iIndex >= 6 ||
- ze_get_user_level(id) == 5 && iIndex >= 7 ||
- ze_get_user_level(id) == 6 && iIndex >= 8 ||
- ze_get_user_level(id) == 7 && iIndex >= 9 ||
- ze_get_user_level(id) == 8 && iIndex >= 10 ||
- ze_get_user_level(id) == 9 && iIndex >= 11 ||
- ze_get_user_level(id) == 10 && iIndex >= 12 ||
- ze_get_user_level(id) == 11 && iIndex >= 13 ||
- ze_get_user_level(id) == 12 && iIndex >= 14)
- {
- break
- }
- /*
- * Note that WPN_MAXIDS start from 1 but iIndex start from 0.
- */
- // Golden M3
- if (ze_get_user_level(id) >= 15 && ze_get_user_level(id) < 20)
- {
- if (iIndex == 14)
- {
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M3")
- break;
- }
- }
- // Golden MP5
- if (ze_get_user_level(id) >= 20 && ze_get_user_level(id) < 25)
- {
- if (iIndex == 14)
- {
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M3")
- }
- if (iIndex == 15)
- {
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
- break;
- }
- }
- // Golden M4A1
- if (ze_get_user_level(id) >= 25 && ze_get_user_level(id) < 30)
- {
- if (iIndex == 14)
- {
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M3")
- }
- if (iIndex == 15)
- {
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
- }
- if (iIndex == 16)
- {
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M4A1")
- break;
- }
- }
- // Golden AK47
- if (ze_get_user_level(id) >= 30)
- {
- if (iIndex == 14)
- {
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M3")
- }
- if (iIndex == 15)
- {
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
- }
- if (iIndex == 16)
- {
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M4A1")
- }
- if (iIndex == 17)
- {
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden AK-47")
- break;
- }
- }
- if (ze_get_user_level(id) >= 35)
- {
- if (iIndex == 14)
- {
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M3")
- }
- if (iIndex == 15)
- {
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden MP5")
- }
- if (iIndex == 16)
- {
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden M4A1")
- }
- if (iIndex == 17)
- {
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "Golden AK-47")
- }
- if (iIndex == 18)
- {
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, "DarkNight M4A1")
- break;
- }
- }
- // Must check if iIndex < 14 means max is AK47
- if (iIndex < 14)
- {
- ArrayGetString(g_szPrimaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\w%d.\y %s^n", iIndex-WPN_STARTID+1, szWeaponNames[get_weaponid(szWeaponName)])
- }
- }
- if (iIndex < 7)
- {
- ArrayGetString(g_szPrimaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
- }
- if (ze_get_user_level(id) == 5)
- {
- ArrayGetString(g_szPrimaryWeapons, 7, szWeaponName, charsmax(szWeaponName))
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
- }
- else if (ze_get_user_level(id) == 6)
- {
- ArrayGetString(g_szPrimaryWeapons, 8, szWeaponName, charsmax(szWeaponName))
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
- }
- else if (ze_get_user_level(id) == 7)
- {
- ArrayGetString(g_szPrimaryWeapons, 9, szWeaponName, charsmax(szWeaponName))
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
- }
- else if (ze_get_user_level(id) == 8)
- {
- ArrayGetString(g_szPrimaryWeapons, 10, szWeaponName, charsmax(szWeaponName))
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
- }
- else if (ze_get_user_level(id) == 9)
- {
- ArrayGetString(g_szPrimaryWeapons, 11, szWeaponName, charsmax(szWeaponName))
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
- }
- else if (ze_get_user_level(id) == 10)
- {
- ArrayGetString(g_szPrimaryWeapons, 12, szWeaponName, charsmax(szWeaponName))
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
- }
- else if (ze_get_user_level(id) == 11)
- {
- ArrayGetString(g_szPrimaryWeapons, 13, szWeaponName, charsmax(szWeaponName))
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Next Level Unlock\w: \y%s^n", szWeaponNames[get_weaponid(szWeaponName)])
- }
- else if (ze_get_user_level(id) >= 12 && ze_get_user_level(id) < 15) // Golden M3
- {
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 15 Unlock\w: \yGolden M3^n")
- }
- else if (ze_get_user_level(id) >= 15 && ze_get_user_level(id) < 20) // Golden MP5
- {
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 20 Unlock\w: \yGolden MP5^n")
- }
- else if (ze_get_user_level(id) >= 20 && ze_get_user_level(id) < 25) // Golden M4A1
- {
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 25 Unlock\w: \yGolden M4A1^n")
- }
- else if (ze_get_user_level(id) >= 25 && ze_get_user_level(id) < 30) // Golden Ak-47
- {
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 30 Unlock\w: \yGolden AK-47^n")
- }
- else if (ze_get_user_level(id) >= 30 && ze_get_user_level(id) < 35) // DarkNight M4A1
- {
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\r Level 30 Unlock\w: \yDarkNight M4A1^n")
- }
- // 8. Auto Select
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\w8.\y %L \w[\r%L\w]", id, "MENU_AUTOSELECT", id, (WPN_AUTO_ON) ? "SAVE_YES" : "SAVE_NO")
- // 9. Next/Back - 0. Exit
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\y9.\r %L \w/ \r%L^n^n\w0.\y %L", id, "NEXT", id, "BACK", id, "EXIT")
- // Fix for AMXX custom menus
- set_pdata_int(id, OFFSET_CSMENUCODE, 0)
- show_menu(id, KEYSMENU, szMenu, iMenuTime, "Primary Weapons")
- }
- public Show_Menu_Buy_Secondary(id)
- {
- new iMenuTime = floatround(g_fBuyTimeStart[id] + get_pcvar_float(g_pCvarBuyTime) - get_gametime())
- if (iMenuTime <= 0)
- {
- ze_colored_print(id, "%L", id, "BUY_MENU_TIME_EXPIRED")
- return
- }
- static szMenu[250], szWeaponName[32]
- new iLen, iIndex, iMaxLoops = ArraySize(g_szSecondaryWeapons)
- // Title
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y%L^n", id, "MENU_SECONDARY_TITLE")
- // 1-6. Weapon List
- for (iIndex = 0; iIndex < iMaxLoops; iIndex++)
- {
- if (ze_get_user_level(id) == 0 && iIndex >= 2 ||
- ze_get_user_level(id) == 1 && iIndex >= 3 ||
- ze_get_user_level(id) == 2 && iIndex >= 4 ||
- ze_get_user_level(id) == 3 && iIndex >= 5 ||
- ze_get_user_level(id) == 4 && iIndex >= 6)
- {
- break
- }
- ArrayGetString(g_szSecondaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\w%d.\y %s", iIndex+1, szWeaponNames[get_weaponid(szWeaponName)])
- }
- if (iIndex < ArraySize(g_szSecondaryWeapons))
- {
- ArrayGetString(g_szSecondaryWeapons, iIndex, szWeaponName, charsmax(szWeaponName))
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\r Next Level Unlock\w: \y%s", szWeaponNames[get_weaponid(szWeaponName)])
- }
- // 8. Auto Select
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\w8.\y %L \w[\r%L\w]", id, "MENU_AUTOSELECT", id, (WPN_AUTO_ON) ? "SAVE_YES" : "SAVE_NO")
- // 0. Exit
- iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n^n\w0.\y %L", id, "EXIT")
- // Fix for AMXX custom menus
- set_pdata_int(id, OFFSET_CSMENUCODE, 0)
- show_menu(id, KEYSMENU, szMenu, iMenuTime, "Secondary Weapons")
- }
- public Menu_Buy_Primary(id, key)
- {
- // Player dead or zombie or already bought primary
- if (!is_user_alive(id) || ze_is_user_zombie(id) || g_bBoughtPrimary[id])
- return PLUGIN_HANDLED
- // Special keys / weapon list exceeded
- if (key >= MENU_KEY_AUTOSELECT || WPN_SELECTION >= WPN_MAXIDS[id])
- {
- switch (key)
- {
- case MENU_KEY_AUTOSELECT: // toggle auto select
- {
- WPN_AUTO_ON = 1 - WPN_AUTO_ON
- }
- case MENU_KEY_NEXT: // next/back
- {
- if (WPN_STARTID+7 < WPN_MAXIDS[id])
- WPN_STARTID += 7
- else
- WPN_STARTID = 0
- }
- case MENU_KEY_EXIT: // exit
- {
- return PLUGIN_HANDLED
- }
- }
- // Show buy menu again
- Show_Menu_Buy_Primary(id)
- return PLUGIN_HANDLED
- }
- // Store selected weapon id
- WPN_AUTO_PRI = WPN_SELECTION
- // Buy primary weapon
- Buy_Primary_Weapon(id, WPN_AUTO_PRI)
- // Show Secondary Weapons
- Show_Available_Buy_Menus(id)
- return PLUGIN_HANDLED
- }
- public Buy_Primary_Weapon(id, selection)
- {
- if (selection == 14) // Golden M3
- {
- give_golden_m3(id)
- g_bBoughtPrimary[id] = true
- return true;
- }
- else if (selection == 15) // Golden MP5
- {
- give_golden_mp5(id)
- g_bBoughtPrimary[id] = true
- return true;
- }
- else if (selection == 16) // Golden M4A1
- {
- give_golden_m4a1(id)
- g_bBoughtPrimary[id] = true
- return true;
- }
- else if (selection == 17) // Golden AK47
- {
- give_golden_ak47(id)
- g_bBoughtPrimary[id] = true
- return true;
- }
- else if (selection == 18) // Golden AK47
- {
- give_darknight_m4a1(id)
- g_bBoughtPrimary[id] = true
- return true;
- }
- static szWeaponName[32]
- ArrayGetString(g_szPrimaryWeapons, selection, szWeaponName, charsmax(szWeaponName))
- new iWeaponId = get_weaponid(szWeaponName)
- // Strip and Give Full Weapon
- rg_give_item(id, szWeaponName, GT_REPLACE)
- rg_set_user_bpammo(id, WeaponIdType:iWeaponId, szMaxBPAmmo[iWeaponId])
- // Primary bought
- g_bBoughtPrimary[id] = true
- return true;
- }
- public Menu_Buy_Secondary(id, key)
- {
- // Player dead or zombie or already bought secondary
- if (!is_user_alive(id) || ze_is_user_zombie(id) || g_bBoughtSecondary[id])
- return PLUGIN_HANDLED
- // Special keys / weapon list exceeded
- if (key >= ArraySize(g_szSecondaryWeapons))
- {
- // Toggle autoselect
- if (key == MENU_KEY_AUTOSELECT)
- WPN_AUTO_ON = 1 - WPN_AUTO_ON
- // Reshow menu unless user exited
- if (key != MENU_KEY_EXIT)
- Show_Menu_Buy_Secondary(id)
- return PLUGIN_HANDLED
- }
- // Store selected weapon id
- WPN_AUTO_SEC = key
- // Buy secondary weapon
- Buy_Secondary_Weapon(id, key)
- return PLUGIN_HANDLED
- }
- public Buy_Secondary_Weapon(id, selection)
- {
- if ( ((selection == 2) && (ze_get_user_level(id) < 1)) ||
- ((selection == 3) && (ze_get_user_level(id) < 2)) ||
- ((selection == 4) && (ze_get_user_level(id) < 3)) ||
- ((selection == 5) && (ze_get_user_level(id) < 4)) )
- {
- Show_Menu_Buy_Secondary(id)
- return;
- }
- static szWeaponName[32]
- ArrayGetString(g_szSecondaryWeapons, selection, szWeaponName, charsmax(szWeaponName))
- new iWeaponId = get_weaponid(szWeaponName)
- // Strip and Give Full Weapon
- rg_give_item(id, szWeaponName, GT_REPLACE)
- rg_set_user_bpammo(id, WeaponIdType:iWeaponId, szMaxBPAmmo[iWeaponId])
- // Secondary bought
- g_bBoughtSecondary[id] = true
- }
- public Fw_TouchWeapon_Pre(iEnt, id)
- {
- if (get_pcvar_num(g_pCvarBlockWeapLowLevel) == 0)
- return HAM_IGNORED;
- // Not alive or Not Valid Weapon?
- if(!is_user_alive(id) || !pev_valid(iEnt))
- return HAM_IGNORED;
- // Get Weapon Model
- new szWeapModel[32]
- pev(iEnt, pev_model, szWeapModel, charsmax(szWeapModel))
- // Remove "models/w_" and ".mdl"
- copyc(szWeapModel, charsmax(szWeapModel), szWeapModel[contain(szWeapModel, "_" ) + 1], '.')
- // Set for mp5 to be same as "weapon_mp5navy"
- if(szWeapModel[1] == 'p' && szWeapModel[2] == '5')
- szWeapModel = "mp5navy"
- // Add "weapon_" to all model names
- static szWeaponEnt[32]
- formatex(szWeaponEnt, charsmax(szWeaponEnt), "weapon_%s", szWeapModel)
- // Get it's index in Weapon Array
- new iIndex, i
- // I won't explain the blew code if you need to understand ask me in Escapers-Zone.XYZ
- for (i = 0; i < ArraySize(g_szPrimaryWeapons); i++)
- {
- new szPrimaryWeapon[32]
- ArrayGetString(g_szPrimaryWeapons, i, szPrimaryWeapon, charsmax(szPrimaryWeapon))
- if (equali(szWeaponEnt, szPrimaryWeapon))
- iIndex = i
- }
- if (ze_get_user_level(id) == 0 && iIndex > 1)
- {
- return HAM_SUPERCEDE;
- }
- for (i = 1; i <= 11; i++)
- {
- if ((ze_get_user_level(id) == i) && iIndex > i+1)
- {
- return HAM_SUPERCEDE;
- }
- }
- return HAM_IGNORED;
- }
- // Natives
- public native_ze_show_weapon_menu(id)
- {
- if (!is_user_connected(id))
- {
- log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
- return false
- }
- Cmd_Buy(id)
- return true
- }
- public native_ze_is_auto_buy_enabled(id)
- {
- if (!is_user_connected(id))
- {
- log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
- return -1;
- }
- return WPN_AUTO_ON;
- }
- public native_ze_disable_auto_buy(id)
- {
- if (!is_user_connected(id))
- {
- log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player (%d)", id)
- return false
- }
- WPN_AUTO_ON = 0;
- return true
- }
He who fails to plan is planning to fail
I already make IT thank you anyway
DRK Zombie-Escape V1.6
IP : 81.169.153.129:27015
IP : 81.169.153.129:27015
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 3 guests