PHP Code:
#include <amxmodx>
#include <fun>
#include <hamsandwich>
#include <fakemeta>
#include <Colorchat>
#pragma tabsize 0
new szName[33],g_speed[33]
new jumpnum[33] = 0;
new bool:dojump[33] = false;
new g_multijumps[33] = 0;
#if cellbits == 32
const OFFSET_CLIPAMMO = 51
#else
const OFFSET_CLIPAMMO = 65
#endif
const OFFSET_LINUX_WEAPONS = 4
// Max Clip for weapons
new const MAXCLIP[] = { -1, 13, -1, 10, 1, 7, -1, 30, 30, 1, 30, 20, 25, 30, 35, 25, 12, 20,
10, 30, 100, 8, 30, 30, 20, 2, 7, 30, 30, -1, 50 }
new g_has_unlimited_clip[33]
new bool:g_bMessage = false;
/*------------------------- plugin_init ----------------------------*/
public plugin_init( )
{
register_plugin( "Last Survivor", "1.0", "EaGle" )
register_event( "DeathMsg", "EventDeath", "a" )
register_forward(FM_PlayerPreThink, "FW_PlayerPreThinkz")
register_forward(FM_PlayerPostThink, "FW_PlayerPostThinkz")
register_message(get_user_msgid("CurWeapon"), "message_cur_weapon")
register_event("CurWeapon", "change_weapon", "be", "1=1")
register_logevent("OnRoundEnd", 2, "1=Round_End")
RegisterHam(Ham_Spawn, "player", "spawn_off", 1)
}
/*------------------------- Last Survivor ----------------------------*/
public EventDeath( )
{
new Players[ 32 ]
new iNum
get_players( Players, iNum, "ae", "CT" )
if( iNum == 1 && !g_bMessage )
{
for (new i = 0; i < iNum; i++)
{
get_user_name(Players[i], szName, 32)
set_user_health(Players[i], 500)
set_user_maxspeed(Players[i], get_user_maxspeed(Players[i]) + 450)
g_multijumps[Players[i]] = true
g_has_unlimited_clip[Players[i]] = true
g_speed[Players[i]] = true
ColorChat(0, GREEN, "^4[ BaseBuilder ] ^1Player ^4%s ^1Is The Last Survivor With Unlimited Clip ^4!",szName)
g_bMessage = true;
}
}
}
public OnRoundEnd( )
{
g_bMessage = false;
}
/*--------------------------------------------------------------*/
public spawn_off(id)
{
for (new id; id <= 32; id++) g_multijumps[id] = false;
for (new id; id <= 32; id++) g_has_unlimited_clip[id] = false;
}
public change_weapon(id)
{
if(g_speed[id]) set_user_maxspeed(id, get_user_maxspeed(id) + 450)
}
/*------------------------- 2 Jump ----------------------------*/
public FW_PlayerPreThinkz(id)
{
if(!g_multijumps[id]) return PLUGIN_CONTINUE
new nbut = pev(id,pev_button);
new obut = pev(id,pev_oldbuttons);
if((nbut & IN_JUMP) && !(pev(id,pev_flags) & FL_ONGROUND) && !(obut & IN_JUMP))
{
if(jumpnum[id] < 1)
{
dojump[id] = true;
jumpnum[id]++;
return PLUGIN_CONTINUE
}
}
if((nbut & IN_JUMP) && (pev(id,pev_flags) & FL_ONGROUND))
{
jumpnum[id] = 0;
return PLUGIN_CONTINUE
}
return PLUGIN_CONTINUE
}
public FW_PlayerPostThinkz(id)
{
if(!g_multijumps[id]) return PLUGIN_CONTINUE
if(dojump[id] == true)
{
new Float:velocity[3];
pev(id,pev_velocity,velocity);
velocity[2] = random_float(265.0,285.0);
set_pev(id,pev_velocity,velocity)
dojump[id] = false
return PLUGIN_CONTINUE
}
return PLUGIN_CONTINUE
}
/*------------------------- Unlimited clip ----------------------------*/
public message_cur_weapon(msg_id, msg_dest, msg_entity)
{
if (!g_has_unlimited_clip[msg_entity])
return;
if (!is_user_alive(msg_entity) || get_msg_arg_int(1) != 1)
return;
static weapon, clip
weapon = get_msg_arg_int(2)
clip = get_msg_arg_int(3)
if (MAXCLIP[weapon] > 2)
{
set_msg_arg_int(3, get_msg_argtype(3), MAXCLIP[weapon])
if (clip < 2)
{
static wname[32], weapon_ent
get_weaponname(weapon, wname, sizeof wname - 1)
weapon_ent = fm_find_ent_by_owners(-1, wname, msg_entity)
fm_set_weapon_ammos(weapon_ent, MAXCLIP[weapon])
}
}
}
stock fm_find_ent_by_owners(entity, const classname[], owner)
{
while ((entity = engfunc(EngFunc_FindEntityByString, entity, "classname", classname)) && pev(entity, pev_owner) != owner) {}
return entity;
}
stock fm_set_weapon_ammos(entity, amount)
{
set_pdata_int(entity, OFFSET_CLIPAMMO, amount, OFFSET_LINUX_WEAPONS);
}