Junior Member
Join Date: May 2019
Location: Morocco
|
05-15-2019
, 18:43
Re: ZM VIP
|
#3
|
sawn off shotgun
PHP Code:
/*================================================================================
[ZP] Extra Item: Sawn-Off Shotgun
Copyright (C) 2009 by meTaLiCroSS
Request maded by Clear
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
In addition, as a special exception, the author gives permission to
link the code of this program with the Half-Life Game Engine ("HL
Engine") and Modified Game Libraries ("MODs") developed by Valve,
L.L.C ("Valve"). You must obey the GNU General Public License in all
respects for all of the code used other than the HL Engine and MODs
from Valve. If you modify this file, you may extend this exception
to your version of the file, but you are not obligated to do so. If
you do not wish to do so, delete this exception statement from your
version.
=================================================================================*/
#include <amxmodx>
#include <fakemeta>
#include <engine>
#include <hamsandwich>
#include <xs>
#include <zombieplague>
/*================================================================================
[Customization]
=================================================================================*/
// Item Cost
new const g_SawnOff_Cost = 30
// Models
new const sawnoff_model_v[] = "models/v_sawn_off_shotgun.mdl"
new const sawnoff_model_p[] = "models/p_sawn_off_shotgun.mdl"
new const sawnoff_model_w[] = "models/w_sawn_off_shotgun.mdl"
// ---------------------------------------------------------------
// ------------------ Customization ends here!! ------------------
// ---------------------------------------------------------------
// Offsets
#if cellbits == 32
const OFFSET_CLIPAMMO = 51
#else
const OFFSET_CLIPAMMO = 65
#endif
const OFFSET_LINUX = 5
const OFFSET_LINUX_WEAPONS = 4
const OFFSET_LASTPRIMARYITEM = 368
// Version
#define VERSION "0.4.5"
// Arrays
new g_sawnoff_shotgun[33], g_currentweapon[33]
// Variables
new g_SawnOff, g_MaxPlayers
// Cvar Pointers
new cvar_enable, cvar_oneround, cvar_knockback, cvar_knockbackpower, cvar_uclip, cvar_damage
/*================================================================================
[Init and Precache]
=================================================================================*/
public plugin_init()
{
// Plugin Info
register_plugin("[ZP] Extra Item: Sawn-Off Shotgun", VERSION, "meTaLiCroSS")
// Ham Forwards
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack")
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
// Fakemeta Forwards
register_forward(FM_SetModel, "fw_SetModel")
// Event: Round Start
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
// Message: Cur Weapon
register_message(get_user_msgid("CurWeapon"), "message_cur_weapon")
// CVARS
register_cvar("zp_extra_sawnoff", VERSION, FCVAR_SERVER|FCVAR_SPONLY)
cvar_enable = register_cvar("zp_sawnoff_enable", "1")
cvar_uclip = register_cvar("zp_sawnoff_unlimited_clip", "1")
cvar_damage = register_cvar("zp_sawnoff_damage_mult", "4.0")
cvar_oneround = register_cvar("zp_sawnoff_oneround", "0")
cvar_knockback = register_cvar("zp_sawnoff_knockback", "1")
cvar_knockbackpower = register_cvar("zp_sawnoff_kbackpower", "10.0")
// Variables
g_MaxPlayers = get_maxplayers()
g_SawnOff = zp_register_extra_item("Sawn-Off Shotgun", g_SawnOff_Cost, ZP_TEAM_HUMAN)
}
public plugin_precache()
{
// Precaching models
precache_model(sawnoff_model_v)
precache_model(sawnoff_model_p)
precache_model(sawnoff_model_w)
}
/*================================================================================
[Main Functions]
=================================================================================*/
// Round Start Event
public event_round_start()
{
// Get all the players
for(new id = 1; id <= g_MaxPlayers; id++)
{
// Check
if(get_pcvar_num(cvar_oneround) || !get_pcvar_num(cvar_enable))
{
// Striping Sawn Off
if(g_sawnoff_shotgun[id])
{
g_sawnoff_shotgun[id] = false;
ham_strip_weapon(id, "weapon_m3")
}
}
}
}
// Message Current Weapon
public message_cur_weapon(msg_id, msg_dest, id)
{
// Doesn't have a Sawn Off
if (!g_sawnoff_shotgun[id])
return PLUGIN_CONTINUE
// Isn't alive / not active weapon
if (!is_user_alive(id) || get_msg_arg_int(1) != 1)
return PLUGIN_CONTINUE
// Get Weapon Clip
new clip = get_msg_arg_int(3)
// Update Weapon Array
g_currentweapon[id] = get_msg_arg_int(2) // get weapon ID
// Weapon isn't M3
if(g_currentweapon[id] != CSW_M3)
return PLUGIN_CONTINUE;
// Replace Models
entity_set_string(id, EV_SZ_viewmodel, sawnoff_model_v)
entity_set_string(id, EV_SZ_weaponmodel, sawnoff_model_p)
// Check cvar
if(get_pcvar_num(cvar_uclip))
{
// Set Ammo HUD in 8
set_msg_arg_int(3, get_msg_argtype(3), 8)
// Check clip if more than 2
if (clip < 2)
{
// Update weapon ammo
fm_set_weapon_ammo(find_ent_by_owner(-1, "weapon_m3", id), 8)
}
}
return PLUGIN_CONTINUE;
}
// Touch fix (when user drop the Sawn off, already has the Sawn off.
public touch_fix(id)
{
if(g_sawnoff_shotgun[id])
g_sawnoff_shotgun[id] = false;
}
/*================================================================================
[Main Forwards]
=================================================================================*/
public fw_PlayerKilled(victim, attacker, shouldgib)
{
// Victim has a Sawn off
if(g_sawnoff_shotgun[victim])
g_sawnoff_shotgun[victim] = false;
}
public fw_SetModel(entity, model[])
{
// Entity is not valid
if(!is_valid_ent(entity))
return FMRES_IGNORED;
// Entity model is not a M3
if(!equali(model, "models/w_m3.mdl"))
return FMRES_IGNORED;
// Get owner and entity classname
new owner = entity_get_edict(entity, EV_ENT_owner)
new classname[33]
entity_get_string(entity, EV_SZ_classname, classname, charsmax(classname))
// Entity classname is a weaponbox
if(equal(classname, "weaponbox"))
{
// The weapon owner has a Sawn Off
if(g_sawnoff_shotgun[owner])
{
// Striping Sawn off and set New Model
g_sawnoff_shotgun[owner] = false;
entity_set_model(entity, sawnoff_model_w)
set_task(0.1, "touch_fix", owner)
return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
// Attacker isn't a Player (1 in 32)
if(!(1 <= attacker <= g_MaxPlayers))
return HAM_IGNORED;
// Attacker's weapon isn't a M3
if(g_currentweapon[attacker] != CSW_M3)
return HAM_IGNORED;
// User doesn't have a Sawn Off
if(!g_sawnoff_shotgun[attacker])
return HAM_IGNORED;
SetHamParamFloat(4, damage * get_pcvar_float(cvar_damage) )
return HAM_IGNORED;
}
public fw_TraceAttack(victim, attacker, Float:damage, Float:direction[3], tracehandle, damage_type)
{
// Player is allowed to make a Knockback
if(!allowed_knockback(victim, attacker))
return HAM_IGNORED;
// Check damage type
if(!(damage_type & DMG_BULLET))
return HAM_IGNORED;
// Make Knockback...
new Float:velocity[3]; pev(victim, pev_velocity, velocity)
xs_vec_mul_scalar(direction, get_pcvar_float(cvar_knockbackpower), direction)
xs_vec_add(velocity, direction, direction)
entity_set_vector(victim, EV_VEC_velocity, direction)
return HAM_IGNORED;
}
public pfn_touch(entity, toucher)
{
new model[33], toucherclass[33], entityclass[33]
// Get toucher Classname
if((toucher > 0) && is_valid_ent(toucher)) entity_get_string(toucher, EV_SZ_classname, toucherclass, charsmax(toucherclass))
// Get entity Classname
if((entity > 0) && is_valid_ent(entity)) entity_get_string(entity, EV_SZ_classname, entityclass, charsmax(entityclass))
// Now check if is a Weapon and is a Player
if(equali(toucherclass, "player") && equali(entityclass, "weaponbox"))
{
// Get Model
entity_get_string(entity, EV_SZ_model, model, charsmax(model))
// Check Model
if(equali(model, sawnoff_model_w))
if(allowed_touch(toucher)) // Player is allowed to pickup the weapon
g_sawnoff_shotgun[toucher] = true // Set Weapon
}
}
/*================================================================================
[Internal Functions]
=================================================================================*/
allowed_knockback(victim, attacker)
{
// Obviously, doesn't is allowed to be Knockbacked (WTF)
if(!g_sawnoff_shotgun[attacker] || !get_pcvar_num(cvar_knockback) || g_currentweapon[attacker] != CSW_M3 || !zp_get_user_zombie(victim))
return false;
return true;
}
allowed_touch(toucher)
{
// Can't touch the Weapon
if(zp_get_user_survivor(toucher) || zp_get_user_zombie(toucher) || fm_get_user_lastprimaryitem(toucher) || g_sawnoff_shotgun[toucher])
return false;
return true;
}
/*================================================================================
[Zombie Plague Forwards]
=================================================================================*/
public zp_extra_item_selected(id, itemid)
{
// Item is the Sawn-Off
if(itemid == g_SawnOff)
{
if(!get_pcvar_num(cvar_enable))
{
zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + g_SawnOff_Cost)
client_print(id, print_chat, "[ZP] The Sawn-Off Shotgun is Disabled")
return;
}
// Already has an M3
if(g_sawnoff_shotgun[id] && user_has_weapon(id, CSW_M3))
{
zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + g_SawnOff_Cost)
client_print(id, print_chat, "[ZP] You already have a Sawn-Off Shotgun")
return;
}
// Array
g_sawnoff_shotgun[id] = true
// Weapon
ham_give_weapon(id, "weapon_m3")
// Message
client_print(id, print_chat, "[ZP] You now have a Sawn-Off Shotgun")
}
}
public zp_user_infected_post(infected, infector)
{
// Infected has a M3
if(g_sawnoff_shotgun[infected])
g_sawnoff_shotgun[infected] = false;
}
public zp_user_humanized_post(player)
{
// Is Survivor
if(zp_get_user_survivor(player) && g_sawnoff_shotgun[player])
g_sawnoff_shotgun[player] = false;
}
/*================================================================================
[Stocks]
=================================================================================*/
stock ham_give_weapon(id, weapon[])
{
if(!equal(weapon,"weapon_",7))
return 0
new wEnt = create_entity(weapon)
if(!is_valid_ent(wEnt))
return 0
entity_set_int(wEnt, EV_INT_spawnflags, SF_NORESPAWN)
DispatchSpawn(wEnt)
if(!ExecuteHamB(Ham_AddPlayerItem,id,wEnt))
{
if(is_valid_ent(wEnt)) entity_set_int(wEnt, EV_INT_flags, entity_get_int(wEnt, EV_INT_flags) | FL_KILLME)
return 0
}
ExecuteHamB(Ham_Item_AttachToPlayer,wEnt,id)
return 1
}
stock ham_strip_weapon(id, weapon[])
{
if(!equal(weapon,"weapon_",7))
return 0
new wId = get_weaponid(weapon)
if(!wId) return 0
new wEnt
while((wEnt = find_ent_by_class(wEnt, weapon)) && entity_get_edict(wEnt, EV_ENT_owner) != id) {}
if(!wEnt) return 0
if(get_user_weapon(id) == wId)
ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt);
if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt))
return 0
ExecuteHamB(Ham_Item_Kill, wEnt)
entity_set_int(id, EV_INT_weapons, entity_get_int(id, EV_INT_weapons) & ~(1<<wId))
return 1
}
stock fm_set_weapon_ammo(entity, amount)
{
set_pdata_int(entity, OFFSET_CLIPAMMO, amount, OFFSET_LINUX_WEAPONS);
}
stock fm_get_user_lastprimaryitem(id) // Thanks to joaquimandrade
{
if(get_pdata_cbase(id, OFFSET_LASTPRIMARYITEM) != -1)
return 1;
return 0;
}
plasmagun
PHP Code:
/*================================================================================
---------------------------
[ZP] Extra Item: Plasma Gun
---------------------------
Plasma Gun
Copyright (C) 2017 by Crazy
-------------------
-*- Description -*-
-------------------
This plugin add a new weapon into your zombie plague mod with
the name of Plasma Gun. That weapon launch powerfull green lasers!
When the bullet of this weapon hit any object, a nice effect appers!
----------------
-*- Commands -*-
----------------
* zp_give_plasma_gun <target> - Give the item to target.
-------------
-*- Cvars -*-
-------------
* zp_plasma_gun_ammo <number> - Ammo amout.
* zp_plasma_gun_clip <number> - Clip amout. (Max: 100)
* zp_plasma_gun_one_round <0/1> - Only one round.
* zp_plasma_gun_damage <number> - Damage multiplier.
* zp_plasma_gun_unlimited <0/1> - Unlimited ammunition.
------------------
-*- Change Log -*-
------------------
* v0.1: (Mar 2017)
- First release;
---------------
-*- Credits -*-
---------------
* MeRcyLeZZ: for the nice zombie plague mod.
* Crazy: created the extra item code.
* deanamx: for the nice weapon model.
* And all zombie-mod players that use this weapon.
=================================================================================*/
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>
#include <cs_ham_bots_api>
/*================================================================================
[Plugin Customization]
=================================================================================*/
// Item Name
#define ITEM_NAME "Plasma Gun"
// Item Cost
#define ITEM_COST 70
/*================================================================================
Customization ends here! Yes, that's it. Editing anything beyond
here is not officially supported. Proceed at your own risk...
=================================================================================*/
new const PLUGIN_VERSION[] = "v0.1";
new const V_PLASMAGUN_MDL[64] = "models/zombie_plague/v_plasma_gun.mdl";
new const P_PLASMAGUN_MDL[64] = "models/zombie_plague/p_plasma_gun.mdl";
new const W_PLASMAGUN_MDL[64] = "models/zombie_plague/w_plasma_gun.mdl";
new const PLASMAGUN_SOUNDS[][] = { "weapons/plasmagun_aug-1.wav", "weapons/plasmagun_aug-2.wav", "weapons/plasmagun_clipin1.wav", "weapons/plasmagun_clipin2.wav", "weapons/plasmagun_clipout.wav", "weapons/plasmagun_draw.wav", "weapons/plasmagun_exp.wav", "weapons/plasmagun_idle.wav" };
new g_has_plasmagun[33], g_plasmagun, g_msgWeaponList, g_plasmabomb, g_xenobeam, g_event_plasmagun, g_playername[33][32], g_maxplayers, g_primary_attack, g_plasmagun_reload_clip[33], cvar_plasmagun_clip, cvar_plasmagun_ammo, cvar_plasmagun_damage, cvar_plasmagun_oneround, cvar_plasgun_infinit;
new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 };
const m_iClip = 51;
const m_flNextAttack = 83;
const m_fInReload = 54;
const OFFSET_WEAPON_OWNER = 41;
const OFFSET_LINUX_WEAPONS = 4;
const OFFSET_LINUX = 5;
const OFFSET_ACTIVE_ITEM = 373;
const PLASMAGUN_KEY = 054687;
const WEAPON_BITSUM = ((1<<CSW_SCOUT) | (1<<CSW_XM1014) | (1<<CSW_MAC10) | (1<<CSW_AUG) | (1<<CSW_UMP45) | (1<<CSW_SG550) | (1<<CSW_P90) | (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_GALIL));
enum
{
idle = 0,
reload,
draw,
shoot1,
shoot2,
shoot3
}
public plugin_init()
{
/* Plugin register */
register_plugin("[ZP] Extra Item: Plasma Gun", PLUGIN_VERSION, "Crazy");
/* Item register */
g_plasmagun = zp_register_extra_item(ITEM_NAME, ITEM_COST, ZP_TEAM_HUMAN);
/* Events */
register_event("HLTV", "event_round_start", "a", "1=0", "2=0");
/* Messages */
register_message(get_user_msgid("CurWeapon"), "message_cur_weapon");
/* Admin command */
register_concmd("zp_give_plasmagun", "cmd_give_plasmagun", 0);
/* Forwards */
register_forward(FM_UpdateClientData, "fw_UpdateData_Post", 1);
register_forward(FM_SetModel, "fw_SetModel");
register_forward(FM_PlaybackEvent, "fw_PlaybackEvent");
/* Ham Forwards */
RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack_Post", 1);
RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack_Post", 1);
RegisterHam(Ham_TraceAttack, "func_wall", "fw_TraceAttack_Post", 1);
RegisterHam(Ham_TraceAttack, "func_door", "fw_TraceAttack_Post", 1);
RegisterHam(Ham_TraceAttack, "func_door_rotating", "fw_TraceAttack_Post", 1);
RegisterHam(Ham_TraceAttack, "func_plat", "fw_TraceAttack_Post", 1);
RegisterHam(Ham_TraceAttack, "func_rotating", "fw_TraceAttack_Post", 1);
RegisterHam(Ham_Item_Deploy, "weapon_aug", "fw_Item_Deploy_Post", 1);
RegisterHam(Ham_Item_AddToPlayer, "weapon_aug", "fw_Item_AddToPlayer_Post", 1);
RegisterHam(Ham_Item_PostFrame, "weapon_aug", "fw_Item_PostFrame");
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_aug", "fw_PrimaryAttack");
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_aug", "fw_PrimaryAttack_Post", 1);
RegisterHam(Ham_Weapon_Reload, "weapon_aug", "fw_Reload");
RegisterHam(Ham_Weapon_Reload, "weapon_aug", "fw_Reload_Post", 1);
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage");
RegisterHamBots(Ham_TakeDamage, "fw_TakeDamage");
/* Cvars */
cvar_plasmagun_clip = register_cvar("zp_plasma_gun_clip", "30");
cvar_plasmagun_ammo = register_cvar("zp_plasma_gun_ammo", "200");
cvar_plasmagun_damage = register_cvar("zp_plasma_gun_damage", "2.5");
cvar_plasmagun_oneround = register_cvar("zp_plasma_gun_one_round", "0");
cvar_plasgun_infinit = register_cvar("zp_plasma_gun_unlimited", "0");
/* Max Players */
g_maxplayers = get_maxplayers()
/* Message hook */
g_msgWeaponList = get_user_msgid("WeaponList");
}
public plugin_precache()
{
engfunc(EngFunc_PrecacheModel, V_PLASMAGUN_MDL);
engfunc(EngFunc_PrecacheModel, P_PLASMAGUN_MDL);
engfunc(EngFunc_PrecacheModel, W_PLASMAGUN_MDL);
engfunc(EngFunc_PrecacheGeneric, "sprites/weapon_plasmagun.txt");
engfunc(EngFunc_PrecacheGeneric, "sprites/640hud3_plasma.spr");
engfunc(EngFunc_PrecacheGeneric, "sprites/640hud91_plasma.spr");
g_plasmabomb = engfunc(EngFunc_PrecacheModel, "sprites/plasmabomb.spr");
g_xenobeam = engfunc(EngFunc_PrecacheModel, "sprites/xenobeam.spr");
for (new i = 0; i < sizeof PLASMAGUN_SOUNDS; i++)
engfunc(EngFunc_PrecacheSound, PLASMAGUN_SOUNDS[i]);
register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1);
register_clcmd("weapon_plasmagun", "cmd_plasma_selected");
}
public zp_user_infected_post(id)
{
g_has_plasmagun[id] = false;
}
public zp_user_humanized_post(id)
{
g_has_plasmagun[id] = false;
}
public client_putinserver(id)
{
g_has_plasmagun[id] = false;
get_user_name(id, g_playername[id], charsmax(g_playername[]));
}
public event_round_start()
{
for (new id = 0; id <= g_maxplayers; id++)
{
if (get_pcvar_num(cvar_plasmagun_oneround))
g_has_plasmagun[id] = false;
}
}
public cmd_give_plasmagun(id, level, cid)
{
if ((get_user_flags(id) & level) != level)
return PLUGIN_HANDLED;
static arg[32], player;
read_argv(1, arg, charsmax(arg));
player = cmd_target(id, arg, (CMDTARGET_ONLY_ALIVE | CMDTARGET_ALLOW_SELF));
if (!player)
return PLUGIN_HANDLED;
if (g_has_plasmagun[player])
{
client_print(id, print_chat, "[ZP] The %s already have the %s.", g_playername[player], ITEM_NAME);
return PLUGIN_HANDLED;
}
give_plasmagun(player);
client_print(player, print_chat, "[ZP] You won a %s from %s!", ITEM_NAME, g_playername[id]);
return PLUGIN_HANDLED;
}
public cmd_plasma_selected(client)
{
engclient_cmd(client, "weapon_aug");
return PLUGIN_HANDLED;
}
public message_cur_weapon(msg_id, msg_dest, msg_entity)
{
if (!is_user_alive(msg_entity))
return;
if (!g_has_plasmagun[msg_entity])
return;
if (get_user_weapon(msg_entity) != CSW_AUG)
return;
if (get_msg_arg_int(1) != 1)
return;
if (get_pcvar_num(cvar_plasgun_infinit))
{
static ent;
ent = fm_cs_get_current_weapon_ent(msg_entity);
if (!pev_valid(ent))
return;
cs_set_weapon_ammo(ent, get_pcvar_num(cvar_plasmagun_clip));
set_msg_arg_int(3, get_msg_argtype(3), get_pcvar_num(cvar_plasmagun_clip));
}
}
public zp_extra_item_selected(id, itemid)
{
if (itemid != g_plasmagun)
return;
if (g_has_plasmagun[id])
{
client_print(id, print_chat, "[ZP] You already have the %s.", ITEM_NAME);
return;
}
give_plasmagun(id);
client_print(id, print_chat, "[ZP] You bought the %s.", ITEM_NAME);
}
public fw_UpdateData_Post(id, sendweapons, cd_handle)
{
if (!is_user_alive(id))
return FMRES_IGNORED;
if (!g_has_plasmagun[id])
return FMRES_IGNORED;
if (get_user_weapon(id) != CSW_AUG)
return FMRES_IGNORED;
set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001);
return FMRES_IGNORED;
}
public fw_SetModel(ent, const model[])
{
if (!pev_valid(ent))
return FMRES_IGNORED;
if (!equal(model, "models/w_aug.mdl"))
return HAM_IGNORED;
static class_name[33];
pev(ent, pev_classname, class_name, charsmax(class_name));
if (!equal(class_name, "weaponbox"))
return FMRES_IGNORED;
static owner, weapon;
owner = pev(ent, pev_owner);
weapon = find_ent_by_owner(-1, "weapon_aug", ent);
if (!g_has_plasmagun[owner] || !pev_valid(weapon))
return FMRES_IGNORED;
g_has_plasmagun[owner] = false;
set_pev(weapon, pev_impulse, PLASMAGUN_KEY);
engfunc(EngFunc_SetModel, ent, W_PLASMAGUN_MDL);
return FMRES_SUPERCEDE;
}
public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
if ((eventid != g_event_plasmagun) || !g_primary_attack)
return FMRES_IGNORED;
if (!(1 <= invoker <= g_maxplayers))
return FMRES_IGNORED;
playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
return FMRES_SUPERCEDE;
}
public fw_PrecacheEvent_Post(type, const name[])
{
if (!equal("events/aug.sc", name))
return HAM_IGNORED;
g_event_plasmagun = get_orig_retval()
return FMRES_HANDLED;
}
public fw_Item_Deploy_Post(ent)
{
if (!pev_valid(ent))
return HAM_IGNORED;
new id = get_pdata_cbase(ent, OFFSET_WEAPON_OWNER, OFFSET_LINUX_WEAPONS);
if (!is_user_alive(id))
return HAM_IGNORED;
if (!g_has_plasmagun[id])
return HAM_IGNORED;
set_pev(id, pev_viewmodel2, V_PLASMAGUN_MDL);
set_pev(id, pev_weaponmodel2, P_PLASMAGUN_MDL);
play_weapon_anim(id, draw);
return HAM_IGNORED;
}
public fw_Item_AddToPlayer_Post(ent, id)
{
if (!pev_valid(ent))
return HAM_IGNORED;
if (!is_user_connected(id))
return HAM_IGNORED;
if (pev(ent, pev_impulse) == PLASMAGUN_KEY)
{
g_has_plasmagun[id] = true;
set_pev(ent, pev_impulse, 0);
}
message_begin(MSG_ONE, g_msgWeaponList, _, id)
write_string((g_has_plasmagun[id] ? "weapon_plasmagun" : "weapon_aug"))
write_byte(4)
write_byte(90)
write_byte(-1)
write_byte(-1)
write_byte(0)
write_byte(14)
write_byte(CSW_AUG)
write_byte(0)
message_end()
return HAM_IGNORED;
}
public fw_Item_PostFrame(ent)
{
if (!pev_valid(ent))
return HAM_IGNORED;
new id = get_pdata_cbase(ent, OFFSET_WEAPON_OWNER, OFFSET_LINUX_WEAPONS);
if (!is_user_alive(id))
return HAM_IGNORED;
if (!g_has_plasmagun[id])
return HAM_IGNORED;
static cvar_clip; cvar_clip = get_pcvar_num(cvar_plasmagun_clip);
new clip = get_pdata_int(ent, m_iClip, OFFSET_LINUX_WEAPONS);
new bpammo = cs_get_user_bpammo(id, CSW_AUG);
new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, OFFSET_LINUX);
new fInReload = get_pdata_int(ent, m_fInReload, OFFSET_LINUX_WEAPONS);
if (fInReload && flNextAttack <= 0.0)
{
new temp_clip = min(cvar_clip - clip, bpammo);
set_pdata_int(ent, m_iClip, clip + temp_clip, OFFSET_LINUX_WEAPONS);
cs_set_user_bpammo(id, CSW_AUG, bpammo-temp_clip);
set_pdata_int(ent, m_fInReload, 0, OFFSET_LINUX_WEAPONS);
fInReload = 0;
}
return HAM_IGNORED;
}
public fw_PrimaryAttack(ent)
{
if (!pev_valid(ent))
return HAM_IGNORED;
new id = get_pdata_cbase(ent, OFFSET_WEAPON_OWNER, OFFSET_LINUX_WEAPONS);
if (!is_user_alive(id))
return HAM_IGNORED;
if (!g_has_plasmagun[id])
return HAM_IGNORED;
if (!cs_get_weapon_ammo(ent))
return HAM_IGNORED;
g_primary_attack = true;
return HAM_IGNORED;
}
public fw_PrimaryAttack_Post(ent)
{
if (!pev_valid(ent))
return HAM_IGNORED;
new id = get_pdata_cbase(ent, OFFSET_WEAPON_OWNER, OFFSET_LINUX_WEAPONS);
if (!is_user_alive(id))
return HAM_IGNORED;
if (!g_has_plasmagun[id])
return HAM_IGNORED;
if (!cs_get_weapon_ammo(ent))
return HAM_IGNORED;
g_primary_attack = false;
play_weapon_anim(id, random_num(shoot1, shoot2));
emit_sound(id, CHAN_WEAPON, PLASMAGUN_SOUNDS[random_num(0, 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
make_xenobeam(id);
return HAM_IGNORED;
}
public fw_Reload(ent)
{
if (!pev_valid(ent))
return HAM_IGNORED;
new id = get_pdata_cbase(ent, OFFSET_WEAPON_OWNER, OFFSET_LINUX_WEAPONS);
if (!is_user_alive(id))
return HAM_IGNORED;
if (!g_has_plasmagun[id])
return HAM_IGNORED;
g_plasmagun_reload_clip[id] = -1;
static cvar_clip; cvar_clip = get_pcvar_num(cvar_plasmagun_clip);
new clip = get_pdata_int(ent, m_iClip, OFFSET_LINUX_WEAPONS);
new bpammo = cs_get_user_bpammo(id, CSW_AUG);
if (bpammo <= 0)
return HAM_SUPERCEDE;
if (clip >= cvar_clip)
return HAM_SUPERCEDE;
g_plasmagun_reload_clip[id] = clip;
return HAM_IGNORED;
}
public fw_Reload_Post(ent)
{
if (!pev_valid(ent))
return HAM_IGNORED;
new id = get_pdata_cbase(ent, OFFSET_WEAPON_OWNER, OFFSET_LINUX_WEAPONS);
if (!is_user_alive(id))
return HAM_IGNORED;
if (!g_has_plasmagun[id])
return HAM_IGNORED;
if (g_plasmagun_reload_clip[id] == -1)
return HAM_IGNORED;
set_pdata_int(ent, m_iClip, g_plasmagun_reload_clip[id], OFFSET_LINUX_WEAPONS);
set_pdata_int(ent, m_fInReload, 1, OFFSET_LINUX_WEAPONS);
play_weapon_anim(id, reload);
return HAM_IGNORED;
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, dmg_bits)
{
if (!is_user_alive(attacker))
return HAM_IGNORED;
if (!g_has_plasmagun[attacker])
return HAM_IGNORED;
if (get_user_weapon(attacker) != CSW_AUG)
return HAM_IGNORED;
SetHamParamFloat(OFFSET_LINUX_WEAPONS, damage * get_pcvar_float(cvar_plasmagun_damage));
return HAM_IGNORED;
}
public fw_TraceAttack_Post(ent, attacker, Float:damage, Float:dir[3], ptr, dmg_bits)
{
if (!is_user_alive(attacker))
return HAM_IGNORED;
if (get_user_weapon(attacker) != CSW_AUG)
return HAM_IGNORED;
if (!g_has_plasmagun[attacker])
return HAM_IGNORED;
static Float:end[3];
get_tr2(ptr, TR_vecEndPos, end);
if(ent)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_DECAL)
engfunc(EngFunc_WriteCoord, end[0])
engfunc(EngFunc_WriteCoord, end[1])
engfunc(EngFunc_WriteCoord, end[2])
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
write_short(ent)
message_end()
}
else
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_SPRITE)
engfunc(EngFunc_WriteCoord, end[0])
engfunc(EngFunc_WriteCoord, end[1])
engfunc(EngFunc_WriteCoord, end[2])
write_short(g_plasmabomb)
write_byte(10)
write_byte(200)
message_end()
}
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_GUNSHOTDECAL)
engfunc(EngFunc_WriteCoord, end[0])
engfunc(EngFunc_WriteCoord, end[1])
engfunc(EngFunc_WriteCoord, end[2])
write_short(attacker)
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
message_end()
return HAM_IGNORED;
}
give_plasmagun(id)
{
drop_primary(id);
g_has_plasmagun[id] = true;
new weapon = fm_give_item(id, "weapon_aug");
cs_set_weapon_ammo(weapon, get_pcvar_num(cvar_plasmagun_clip));
cs_set_user_bpammo(id, CSW_AUG, get_pcvar_num(cvar_plasmagun_ammo));
}
play_weapon_anim(id, frame)
{
set_pev(id, pev_weaponanim, frame);
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = id)
write_byte(frame)
write_byte(pev(id, pev_body))
message_end()
}
drop_primary(id)
{
static weapons[32], num;
get_user_weapons(id, weapons, num);
for (new i = 0; i < num; i++)
{
if (WEAPON_BITSUM & (1<<weapons[i]))
{
static wname[32];
get_weaponname(weapons[i], wname, sizeof wname - 1);
engclient_cmd(id, "drop", wname);
}
}
}
make_xenobeam(id)
{
static originF[3];
get_user_origin(id, originF, 3);
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMENTPOINT)
write_short(id | 0x1000)
write_coord(originF[0])
write_coord(originF[1])
write_coord(originF[2])
write_short(g_xenobeam)
write_byte(0)
write_byte(0)
write_byte(1)
write_byte(20)
write_byte(0)
write_byte(110)
write_byte(251)
write_byte(110)
write_byte(200)
write_byte(5)
message_end()
}
stock fm_give_item(index, const item[])
{
if (!equal(item, "weapon_", 7) && !equal(item, "ammo_", 5) && !equal(item, "item_", 5) && !equal(item, "tf_weapon_", 10))
return 0;
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, item));
if (!pev_valid(ent))
return 0;
new Float:origin[3];
pev(index, pev_origin, origin);
set_pev(ent, pev_origin, origin);
set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN);
dllfunc(DLLFunc_Spawn, ent);
new save = pev(ent, pev_solid);
dllfunc(DLLFunc_Touch, ent, index);
if (pev(ent, pev_solid) != save)
return ent;
engfunc(EngFunc_RemoveEntity, ent);
return -1;
}
stock fm_cs_get_current_weapon_ent(id)
{
if (pev_valid(id) != 2)
return -1;
return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM, OFFSET_LINUX);
}
Sandbags
PHP Code:
/*================================================================================
-----------------------------------
-*- [ZP] Sandbags -*-
-----------------------------------
~~~~~~~~~~~~~~~
- Description -
~~~~~~~~~~~~~~~
Original by SAMURAI, Upgraded to zp by LARP
[email protected] (Chile) Languaje spanish!
================================================================================*/
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <xs>
#include <fun>
#include <zombieplague.inc>
// The sizes of models
#define PALLET_MINS Float:{ -27.260000, -22.280001, -22.290001 }
#define PALLET_MAXS Float:{ 27.340000, 26.629999, 29.020000 }
// from fakemeta util by VEN
#define fm_find_ent_by_class(%1,%2) engfunc(EngFunc_FindEntityByString, %1, "classname", %2)
#define fm_remove_entity(%1) engfunc(EngFunc_RemoveEntity, %1)
// this is mine
#define fm_drop_to_floor(%1) engfunc(EngFunc_DropToFloor,%1)
// cvars
new pnumplugin, remove_nrnd, maxpallets, phealth;
// num of pallets with bags
new palletscout = 0;
/* Models for pallets with bags .
Are available 2 models, will be set a random of them */
new g_models[][] =
{
"models/pallet_with_bags2.mdl",
"models/pallet_with_bags.mdl"
}
new stuck[33]
new g_bolsas[33];
new cvar[3]
new const Float:size[][3] = {
{0.0, 0.0, 1.0}, {0.0, 0.0, -1.0}, {0.0, 1.0, 0.0}, {0.0, -1.0, 0.0}, {1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0}, {-1.0, 1.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, -1.0, 1.0}, {1.0, 1.0, -1.0}, {-1.0, -1.0, 1.0}, {1.0, -1.0, -1.0}, {-1.0, 1.0, -1.0}, {-1.0, -1.0, -1.0},
{0.0, 0.0, 2.0}, {0.0, 0.0, -2.0}, {0.0, 2.0, 0.0}, {0.0, -2.0, 0.0}, {2.0, 0.0, 0.0}, {-2.0, 0.0, 0.0}, {-2.0, 2.0, 2.0}, {2.0, 2.0, 2.0}, {2.0, -2.0, 2.0}, {2.0, 2.0, -2.0}, {-2.0, -2.0, 2.0}, {2.0, -2.0, -2.0}, {-2.0, 2.0, -2.0}, {-2.0, -2.0, -2.0},
{0.0, 0.0, 3.0}, {0.0, 0.0, -3.0}, {0.0, 3.0, 0.0}, {0.0, -3.0, 0.0}, {3.0, 0.0, 0.0}, {-3.0, 0.0, 0.0}, {-3.0, 3.0, 3.0}, {3.0, 3.0, 3.0}, {3.0, -3.0, 3.0}, {3.0, 3.0, -3.0}, {-3.0, -3.0, 3.0}, {3.0, -3.0, -3.0}, {-3.0, 3.0, -3.0}, {-3.0, -3.0, -3.0},
{0.0, 0.0, 4.0}, {0.0, 0.0, -4.0}, {0.0, 4.0, 0.0}, {0.0, -4.0, 0.0}, {4.0, 0.0, 0.0}, {-4.0, 0.0, 0.0}, {-4.0, 4.0, 4.0}, {4.0, 4.0, 4.0}, {4.0, -4.0, 4.0}, {4.0, 4.0, -4.0}, {-4.0, -4.0, 4.0}, {4.0, -4.0, -4.0}, {-4.0, 4.0, -4.0}, {-4.0, -4.0, -4.0},
{0.0, 0.0, 5.0}, {0.0, 0.0, -5.0}, {0.0, 5.0, 0.0}, {0.0, -5.0, 0.0}, {5.0, 0.0, 0.0}, {-5.0, 0.0, 0.0}, {-5.0, 5.0, 5.0}, {5.0, 5.0, 5.0}, {5.0, -5.0, 5.0}, {5.0, 5.0, -5.0}, {-5.0, -5.0, 5.0}, {5.0, -5.0, -5.0}, {-5.0, 5.0, -5.0}, {-5.0, -5.0, -5.0}
}
new const g_item_name[] = { "15 Sandbags" }
const g_item_bolsas = 0
new g_itemid_bolsas
new ZPSTUCK, g_BINDMODE, g_MSGMODE
/*************************************************************
************************* AMXX PLUGIN *************************
**************************************************************/
public plugin_init()
{
/* Register the plugin */
//register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
register_plugin("[ZP] Extra: SandBags", "1.1", "LARP")
set_task(0.1,"checkstuck",0,"",0,"b")
g_itemid_bolsas = zp_register_extra_item(g_item_name, g_item_bolsas, ZP_TEAM_HUMAN)
/* Register the cvars */
g_BINDMODE = register_cvar("zp_pb_bind","0"); //Auto bind L Key!
g_MSGMODE = register_cvar("zp_pb_msg","1"); //
ZPSTUCK = register_cvar("zp_pb_stuck","1")
pnumplugin = register_cvar("zp_pb_enable","1"); // 1 = ON ; 0 = OFF
remove_nrnd = register_cvar("zp_pb_remround","1");
maxpallets = register_cvar("zp_pb_limit","200"); // max number of pallets with bags
phealth = register_cvar("zp_pb_health","200"); // set the health to a pallet with bags
/* Game Events */
register_event("HLTV","event_newround", "a","1=0", "2=0"); // it's called every on new round
/* This is for menuz: */
register_menucmd(register_menuid("\ySand Bags:"), 1023, "menu_command" );
register_clcmd("say /pb","show_the_menu");
register_clcmd("/pb","show_the_menu");
//cvar[0] = register_cvar("zp_autounstuck","1")
cvar[1] = register_cvar("zp_pb_stuckeffects","1")
cvar[2] = register_cvar("zp_pb_stuckwait","7")
}
public plugin_precache()
{
for(new i;i < sizeof g_models;i++)
engfunc(EngFunc_PrecacheModel,g_models[i]);
}
public show_the_menu(id,level,cid)
{
// check if user doesen't have admin
/*if( ! cmd_access( id,level, cid , 0 ))
return PLUGIN_HANDLED;
*/
// check if the plugin cvar is turned off
if( ! get_pcvar_num( pnumplugin ) )
return PLUGIN_HANDLED;
// check if user isn't alive
if( ! is_user_alive( id ) )
{
client_print( id, print_chat, "" ); //msg muerto
return PLUGIN_HANDLED;
}
if ( !zp_get_user_zombie(id) )
{
new szMenuBody[256];
new keys;
new nLen = format( szMenuBody, 255, "\ySand Bags:^n" );
nLen += format( szMenuBody[nLen], 255-nLen, "^n\w1. Place a Sandbags (%i Remaining)", g_bolsas[id] );
//nLen += format( szMenuBody[nLen], 255-nLen, "^n\w2. Remove a pallet with bags" );
nLen += format( szMenuBody[nLen], 255-nLen, "^n^n\w0. Exit" );
keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<9)
show_menu( id, keys, szMenuBody, -1 );
// depends what you want, if is continue will appear on chat what the admin sayd
return PLUGIN_HANDLED;
}
client_print(id, print_chat, "[ZP] The zombies can not use this command!")
return PLUGIN_HANDLED;
}
public menu_command(id,key,level,cid)
{
switch( key )
{
// place a pallet with bags
case 0:
{
if ( !zp_get_user_zombie(id) )
{
new money = g_bolsas[id]
if ( money < 1 )
{
if ( get_pcvar_num(g_MSGMODE) == 1 )
{
set_hudmessage(0, 0, 100, 0.80, 0.80, 0, 6.0, 2.0, 1.0, 1.0)
show_hudmessage(id, "You do not have to^nplace sandbags")
return PLUGIN_CONTINUE
}
client_print(id, print_chat, "[ZP] You do not have to place sandbags!")
return PLUGIN_CONTINUE
}
g_bolsas[id]-= 1
place_palletwbags(id);
show_the_menu(id,level,cid);
return PLUGIN_CONTINUE
}
client_print(id, print_chat, "[ZP] The zombies can not use this!!")
return PLUGIN_CONTINUE
}
// remove a pallet with bags
/*case 1:
{
if ( !zp_get_user_zombie(id) )
{
new ent, body, class[32];
get_user_aiming(id, ent, body);
if (pev_valid(ent))
{
pev(ent, pev_classname, class, 31);
if (equal(class, "amxx_pallets"))
{
g_bolsas[id]+= 1
fm_remove_entity(ent);
}
else
client_print(id, print_chat, "[ZP] You are not aiming at a pallet with bags");
}
else
client_print(id, print_chat, "[ZP] You are not aiming at a valid entity !");
show_the_menu(id,level,cid);
}
}
*/
// remove all pallets with bags
/*case 2:
{
g_bolsas[id]= 0
remove_allpalletswbags();
client_print(id,print_chat,"[AMXX] You removed all pallets with bags !");
show_the_menu(id,level,cid);
}
*/
}
return PLUGIN_HANDLED;
}
public place_palletwbags(id)
{
if( palletscout == get_pcvar_num(maxpallets) )
{
client_print(id,print_chat,"[ZP] For security reasons only allow %d Sandbags on the server!",get_pcvar_num(maxpallets));
return PLUGIN_HANDLED;
}
// create a new entity
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "func_wall"));
// set a name to the entity
set_pev(ent,pev_classname,"amxx_pallets");
// set model
engfunc(EngFunc_SetModel,ent,g_models[random(sizeof g_models)]);
// register a new var. for origin
static Float:xorigin[3];
get_user_hitpoint(id,xorigin);
// check if user is aiming at the air
if(engfunc(EngFunc_PointContents,xorigin) == CONTENTS_SKY)
{
client_print(id,print_chat,"[ZP] You can not put sandbags in the sky!");
return PLUGIN_HANDLED;
}
// set sizes
static Float:p_mins[3], Float:p_maxs[3];
p_mins = PALLET_MINS;
p_maxs = PALLET_MAXS;
engfunc(EngFunc_SetSize, ent, p_mins, p_maxs);
set_pev(ent, pev_mins, p_mins);
set_pev(ent, pev_maxs, p_maxs );
set_pev(ent, pev_absmin, p_mins);
set_pev(ent, pev_absmax, p_maxs );
// set the rock of origin where is user placed
engfunc(EngFunc_SetOrigin, ent, xorigin);
// make the rock solid
set_pev(ent,pev_solid,SOLID_BBOX); // touch on edge, block
// set the movetype
set_pev(ent,pev_movetype,MOVETYPE_FLY); // no gravity, but still collides with stuff
// now the damage stuff, to set to take it or no
// if you set the cvar "pallets_wbags_health" 0, you can't destroy a pallet with bags
// else, if you want to make it destroyable, just set the health > 0 and will be
// destroyable.
new Float:p_cvar_health = get_pcvar_float(phealth);
switch(p_cvar_health)
{
case 0.0 :
{
set_pev(ent,pev_takedamage,DAMAGE_NO);
}
default :
{
set_pev(ent,pev_health,p_cvar_health);
set_pev(ent,pev_takedamage,DAMAGE_YES);
}
}
static Float:rvec[3];
pev(id,pev_v_angle,rvec);
rvec[0] = 0.0;
set_pev(ent,pev_angles,rvec);
// drop entity to floor
fm_drop_to_floor(ent);
// num ..
palletscout++;
// confirm message
if ( get_pcvar_num(g_MSGMODE) == 1 )
{
set_hudmessage(0, 0, 100, 0.80, 0.80, 0, 6.0, 2.0, 1.0, 1.0)
show_hudmessage(id, "You placed a SandBag^n%i Remaining", g_bolsas[id])
return PLUGIN_HANDLED
}
client_print(id, print_chat, "[ZP] You have placed a Sandbag.")
return PLUGIN_HANDLED;
}
/* ====================================================
get_user_hitpoin stock . Was maked by P34nut, and is
like get_user_aiming but is with floats and better :o
====================================================*/
stock get_user_hitpoint(id, Float:hOrigin[3])
{
if ( ! is_user_alive( id ))
return 0;
new Float:fOrigin[3], Float:fvAngle[3], Float:fvOffset[3], Float:fvOrigin[3], Float:feOrigin[3];
new Float:fTemp[3];
pev(id, pev_origin, fOrigin);
pev(id, pev_v_angle, fvAngle);
pev(id, pev_view_ofs, fvOffset);
xs_vec_add(fOrigin, fvOffset, fvOrigin);
engfunc(EngFunc_AngleVectors, fvAngle, feOrigin, fTemp, fTemp);
xs_vec_mul_scalar(feOrigin, 9999.9, feOrigin);
xs_vec_add(fvOrigin, feOrigin, feOrigin);
engfunc(EngFunc_TraceLine, fvOrigin, feOrigin, 0, id);
global_get(glb_trace_endpos, hOrigin);
return 1;
}
/* ====================================================
This is called on every round, at start up,
with HLTV logevent. So if the "pallets_wbags_nroundrem"
cvar is set to 1, all placed pallets with bugs will be
removed.
====================================================*/
public event_newround()
{
if( get_pcvar_num ( remove_nrnd ) == 1)
remove_allpalletswbags();
}
/* ====================================================
This is a stock to help for remove all pallets with
bags placed . Is called on new round if the cvar
"pallets_wbags_nroundrem" is set 1.
====================================================*/
stock remove_allpalletswbags()
{
new pallets = -1;
while((pallets = fm_find_ent_by_class(pallets, "amxx_pallets")))
fm_remove_entity(pallets);
palletscout = 0;
}
public checkstuck() {
if ( get_pcvar_num(ZPSTUCK) == 1 )
{
static players[32], pnum, player
get_players(players, pnum)
static Float:origin[3]
static Float:mins[3], hull
static Float:vec[3]
static o,i
for(i=0; i<pnum; i++){
player = players[i]
if (is_user_connected(player) && is_user_alive(player)) {
pev(player, pev_origin, origin)
hull = pev(player, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN
if (!is_hull_vacant(origin, hull,player) && !get_user_noclip(player) && !(pev(player,pev_solid) & SOLID_NOT)) {
++stuck[player]
if(stuck[player] >= get_pcvar_num(cvar[2])) {
pev(player, pev_mins, mins)
vec[2] = origin[2]
for (o=0; o < sizeof size; ++o) {
vec[0] = origin[0] - mins[0] * size[o][0]
vec[1] = origin[1] - mins[1] * size[o][1]
vec[2] = origin[2] - mins[2] * size[o][2]
if (is_hull_vacant(vec, hull,player)) {
engfunc(EngFunc_SetOrigin, player, vec)
effects(player)
set_pev(player,pev_velocity,{0.0,0.0,0.0})
o = sizeof size
}
}
}
}
else
{
stuck[player] = 0
}
}
}
}
}
stock bool:is_hull_vacant(const Float:origin[3], hull,id) {
static tr
engfunc(EngFunc_TraceHull, origin, origin, 0, hull, id, tr)
if (!get_tr2(tr, TR_StartSolid) || !get_tr2(tr, TR_AllSolid)) //get_tr2(tr, TR_InOpen))
return true
return false
}
public effects(id) {
if(get_pcvar_num(cvar[1])) {
set_hudmessage(255,150,50, -1.0, 0.65, 0, 6.0, 1.5,0.1,0.7) // HUDMESSAGE
show_hudmessage(id,"Automatic Unstuck!") // HUDMESSAGE
message_begin(MSG_ONE_UNRELIABLE,105,{0,0,0},id )
write_short(1<<10) // fade lasts this long duration
write_short(1<<10) // fade lasts this long hold time
write_short(1<<1) // fade type (in / out)
write_byte(20) // fade red
write_byte(255) // fade green
write_byte(255) // fade blue
write_byte(255) // fade alpha
message_end()
client_cmd(id,"spk fvox/blip.wav")
}
}
public zp_extra_item_selected(player, itemid)
{
if (itemid == g_itemid_bolsas)
{
g_bolsas[player]+= 15
cmd_bind(player)
set_task(0.3,"show_the_menu",player)
if ( get_pcvar_num(g_MSGMODE) == 1 )
{
set_hudmessage(0, 0, 100, 0.80, 0.80, 0, 6.0, 2.0, 1.0, 1.0)
show_hudmessage(player, "Plugin By LARP^n Chile 2008")
}
}
}
public cmd_bind(id)
{
if ( get_pcvar_num(g_BINDMODE) == 1 )
{
client_print(id, print_chat, "[ZP] You have %i sandbags, to use with the key 'L'", g_bolsas[id])
client_cmd(id,"bind l /pb")
return PLUGIN_HANDLED
}
client_print(id, print_chat, "[ZP] You have %i sandbags, to use type 'say /pb'", g_bolsas[id])
return PLUGIN_HANDLED
}
__________________
|
|