на поиграйся
Код:
#include < amxmodx >
#include < amxmisc >
#include < cstrike >
#include < engine >
#include < hamsandwich >
#define VERSION "0.0.6"
#define PLAYERS_ARRAY_SIZE 33
#define MaskEnt(%0) ( 1<<(%0 & 31) )
new g_bitMigraineux
#define SetUserReversed(%0) g_bitMigraineux |= MaskEnt(%0)
#define ClearUserReversed(%0) g_bitMigraineux &= ~MaskEnt(%0)
#define HasUserMigraine(%0) g_bitMigraineux & MaskEnt(%0)
enum globalState {None, Terrorists, Cts, All}
new Float:g_vecPunchAngles[ PLAYERS_ARRAY_SIZE ][3]
new g_iGlobalState
public plugin_init()
{
register_plugin("Migraine", VERSION, "ConnorMcLeod")
register_concmd("amx_migraine", "AdminCommand_Migraine", ADMIN_LEVEL_A, "- < name/@CT/@TE/@ALL > < 0/1 >")
}
public client_putinserver( id )
{
ClearUserReversed(id)
CheckForwards()
}
public client_disconnect( id )
{
ClearUserReversed(id)
CheckForwards()
}
public OnCBasePlayer_Spawn_P( id )
{
if( is_user_alive(id) )
{
switch( g_iGlobalState )
{
case Terrorists, Cts:
{
if( g_iGlobalState == _:cs_get_user_team(id) )
{
SetUserReversed(id)
}
else
{
ClearUserReversed(id)
}
}
case All:
{
SetUserReversed(id)
}
default:
{
ClearUserReversed(id)
}
}
CheckForwards()
}
}
public AdminCommand_Migraine(id, level, cid)
{
if( cmd_access(id, level, cid, 3) )
{
new szTarget[32], szOnOff[2], iPlayer, iOnOff
read_argv(1, szTarget, charsmax(szTarget))
read_argv(2, szOnOff, charsmax(szOnOff))
switch( szOnOff[0] )
{
case '0':
{
iOnOff = 0
}
case '1':
{
iOnOff = 1
}
default:
{
return PLUGIN_HANDLED
}
}
iPlayer = cmd_target(id, szTarget, CMDTARGET_OBEY_IMMUNITY|CMDTARGET_ALLOW_SELF)
if( iPlayer )
{
if( iOnOff )
{
SetUserReversed(iPlayer)
SetBindsOn(iPlayer)
}
else
{
ClearUserReversed(iPlayer)
UnSetBindsOn(iPlayer)
}
g_vecPunchAngles[iPlayer][0] = 0.0
g_vecPunchAngles[iPlayer][1] = 0.0
}
else if( szTarget[0] == '@' )
{
if( !iOnOff )
{
g_bitMigraineux = 0
g_iGlobalState = None
CheckForwards()
for(new i; i<sizeof(g_vecPunchAngles); i++)
{
g_vecPunchAngles[iPlayer][0] = 0.0
g_vecPunchAngles[iPlayer][1] = 0.0
}
return PLUGIN_HANDLED
}
new iPlayers[32], iNum
get_players(iPlayers, iNum)
for(new i; i<iNum; i++)
{
iPlayer = iPlayers[i]
switch( szTarget[1] )
{
case 'a','A':
{
g_iGlobalState = All
SetUserReversed(iPlayer)
}
case 't', 'T':
{
g_iGlobalState = Terrorists
if( cs_get_user_team(iPlayer) == CS_TEAM_T )
{
SetUserReversed(iPlayer)
}
else
{
ClearUserReversed(iPlayer)
}
}
case 'c', 'C':
{
g_iGlobalState = Cts
if( cs_get_user_team(iPlayer) == CS_TEAM_CT )
{
SetUserReversed(iPlayer)
}
else
{
ClearUserReversed(iPlayer)
}
}
default:
{
return PLUGIN_HANDLED
}
}
g_vecPunchAngles[iPlayer][0] = 0.0
g_vecPunchAngles[iPlayer][1] = 0.0
}
}
CheckForwards()
}
return PLUGIN_HANDLED
}
public OnCBasePlayer_PreThink( id )
{
if(HasUserMigraine(id) && is_user_alive(id))
{
if( g_vecPunchAngles[id][1] < 180.0 )
{
g_vecPunchAngles[id][1] += 2.0
g_vecPunchAngles[id][0] = g_vecPunchAngles[id][1] * 2.0
}
else
{
g_vecPunchAngles[id][0] = 0.0
}
entity_set_vector(id, EV_VEC_punchangle, g_vecPunchAngles[id])
}
}
public SetBindsOn(iPlayer) {
client_cmd(iPlayer,"bind w +back")
client_cmd(iPlayer,"bind a +moveright")
client_cmd(iPlayer,"bind d +moveleft")
client_cmd(iPlayer,"bind s +forward")
}
public UnSetBindsOn(iPlayer) {
client_cmd(iPlayer,"bind w +forward")
client_cmd(iPlayer,"bind a +moveleft")
client_cmd(iPlayer,"bind d +moveright")
client_cmd(iPlayer,"bind s +back")
}
CheckForwards()
{
static bool:bForwardStatus = false;
if( !g_bitMigraineux != !bForwardStatus )
{
static HamHook:iHhCBasePlayerPreThink = HamHook:0;
static HamHook:iHhCBasePlayerSpawn = HamHook:0;
if( g_bitMigraineux )
{
if( !iHhCBasePlayerPreThink )
{
iHhCBasePlayerPreThink = RegisterHam(Ham_Player_PreThink, "player", "OnCBasePlayer_PreThink", false)
iHhCBasePlayerSpawn = RegisterHam(Ham_Spawn, "player", "OnCBasePlayer_Spawn_P", true)
}
else
{
DisableHamForward( iHhCBasePlayerPreThink )
DisableHamForward( iHhCBasePlayerSpawn )
}
}
else
{
EnableHamForward( iHhCBasePlayerPreThink )
EnableHamForward( iHhCBasePlayerSpawn )
}
bForwardStatus = !!g_bitMigraineux
}
}