I was wondering if i have someones plugin like this plugin by emp how would i give someone who types /aspec a scout and a usp then when he gets out of it or anything it will be dropped?
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>
#include <fun>
#define MAX_PLAYERS 32
new g_Spec[MAX_PLAYERS+1];
#define SPECIAL_PRECACHE "models/player/vip/vip.mdl"
#define SPECIAL_SHORT "vip"
#define ADMIN_FLAG ADMIN_KICK
#define ALPHA_RENDER 127
public plugin_init()
{
register_plugin("Advanced Spectate", "1.1", "Emp`");
register_clcmd("say", "say_event");
register_clcmd("say_team","say_event");
register_event("ResetHUD", "ResetHUD", "be");
register_forward(FM_StartFrame, "fm_startframe");
}
reset_player_model(id)
if(is_user_alive(id))
if(g_Spec[id])
cs_set_user_model(id, SPECIAL_SHORT);
else
cs_reset_user_model(id);
public plugin_precache()
precache_model(SPECIAL_PRECACHE);
public say_event(id)
{
new said[10];
read_args(said,9);
remove_quotes(said);
if( equali(said, "/spec",5) || equali(said, "/aspec",6) )
if( !( get_user_flags(id) & ADMIN_FLAG ) )
client_print(id, print_chat, "You do not have access to go Advanced Spectate.");
else if( g_Spec[id] ){
client_print(id, print_chat, "You have returned to a normal team.");
if(is_user_alive(id)){
reset_player_model(id);
if(g_Spec[id]==1)
cs_set_user_team(id, CS_TEAM_T);
else
cs_set_user_team(id, CS_TEAM_CT);
unspec_stuff(id);
_SetPlayerSolid(id);
_set_rendering(id);
}
g_Spec[id] = 0;
}
else{
g_Spec[id] = Team(id);
spec_stuff(id);
cs_set_user_team(id, CS_TEAM_SPECTATOR);
reset_player_model(id);
client_print(id, print_chat, "You have gone Advanced Spectate.");
}
}
public spec_stuff(id)
{
if(g_Spec[id] > 0){
if(is_user_alive(id)){
{
give_item(player,"weapon_scout");
new weapon_id = find_ent_by_owner(-1, "weapon_scout", player);
cs_set_weapon_ammo(weapon_id, 10)
}
set_user_godmode(id, 1);
set_user_hitzones(id, 0, 1);
set_user_hitzones(0, id, 1);
_SetPlayerNotSolid(id);
_set_rendering(id, kRenderFxDistort, 0, 0, 0, kRenderTransAdd, ALPHA_RENDER);
}
set_task(5.0, "spec_stuff", id);
}
else
_set_rendering(id);
}
unspec_stuff(id)
{
set_user_godmode(id, 0);
set_user_hitzones(id, 0, 255);
set_user_hitzones(0, id, 255);
}
public ResetHUD(id)
set_task(0.75, "delayedSpawn", id);
public delayedSpawn(id)
{
if(g_Spec[id]>0){
client_print(id, print_chat, "You have been taken out of spec mode.");
g_Spec[id] = 0;
unspec_stuff(id);
}
reset_player_model(id);
}
public client_putinserver(id)
g_Spec[id] = 0;
stock Team(id)
{
if(!is_user_connected(id))
return 0;
return _:cs_get_user_team(id);
}
/* Sets indexes of players.
* Flags:
* "a" - don't collect dead players.
* "b" - don't collect alive players.
* "c" - skip bots.
* "d" - skip real players.
* "e" - match with team number.
* "f" - match with part of name. //not used - leaving blank to match AMXX's get_players
* "g" - ignore case sensitivity. //not used - leaving blank to match AMXX's get_players
* "h" - skip HLTV.
* "i" - not equal to team number.
* Example: Get all alive on team 2: poke_get_players(players,num,"ae",2) */
stock poke_get_players(players[MAX_PLAYERS], &pnum, const flags[]="", team=-1)
{
new total = 0, bitwise = read_flags(flags);
for(new i=1; i<=MAX_PLAYERS; i++)
{
if(is_user_connected(i))
{
if( is_user_alive(i) ? (bitwise & 2) : (bitwise & 1))
continue;
if( is_user_bot(i) ? (bitwise & 4) : (bitwise & 8))
continue;
if( (bitwise & 16) && team!=-1 && Team(i)!=team)
continue;
// & 32
// & 64
if( (bitwise & 128) && is_user_hltv(i))
continue;
if( (bitwise & 256) && team!=-1 && Team(i)==team)
continue;
players[total] = i;
total++;
}
}
pnum = total;
return true;
}
_SetPlayerSolid(id)
if(is_user_alive(id))
set_pev(id, pev_solid, SOLID_BBOX);
_SetPlayerNotSolid(id)
if(is_user_alive(id))
set_pev(id, pev_solid, SOLID_NOT);
// Taken from csdm_protection.sma by BAILOPAN.
stock _set_rendering(index, fx=kRenderFxNone, r=255, g=255, b=255, render=kRenderNormal, amount=16)
{
set_pev(index, pev_renderfx, fx);
new Float:RenderColor[3];
RenderColor[0] = float(r);
RenderColor[1] = float(g);
RenderColor[2] = float(b);
set_pev(index, pev_rendercolor, RenderColor);
set_pev(index, pev_rendermode, render);
set_pev(index, pev_renderamt, float(amount));
return 1;
}
public fm_startframe()
{
static solid_plays[32];
static players[32], num, i, j, player, person;
static Float:player_origin[3], Float:person_origin[3], Float:player_height, Float:person_height;
poke_get_players(players, num, "ah");
for(i = 0; i < num; i++)
solid_plays[ players[i] ] = 1;
for(i = 0; i < num; i++)
{
player = players[i];
if(g_Spec[player] < 1)
continue;
pev(player, pev_origin, player_origin);
player_height = player_origin[2];
player_origin[2] = 0.0;
for(j = 0; j < num; j++)
{
person = players[j];
if(player == person)
continue;
pev(person, pev_origin, person_origin);
person_height = person_origin[2];
person_origin[2] = 0.0;
if( vector_distance(player_origin, person_origin) < 90
&& floatabs(player_height - person_height) < 110 )
{
solid_plays[player] = 0;
solid_plays[person] = 0;
}
}
}
for(i = 0; i < num; i++)
{
player = players[i];
if( solid_plays[ player ] )
_SetPlayerSolid(player);
else
_SetPlayerNotSolid(player);
}
return FMRES_IGNORED;
}