Код:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#define PLUGIN "Free For All"
#define AUTHOR "ConnorMcLeod"
#define VERSION "0.1.1"
#define XO_PLAYER 5
#define m_iTeam 114
#define cs_get_user_team_index(%0) get_pdata_int(%0, m_iTeam, XO_PLAYER)
#define cs_set_user_team_index(%0,%1) set_pdata_int(%0, m_iTeam, %1, XO_PLAYER)
new g_iMaxPlayers
#define FIRST_PLAYER_ID 1
#define IsPlayer(%1) ( FIRST_PLAYER_ID <= %1 <= g_iMaxPlayers )
#define TEAM_T 1
#define TEAM_CT 2
new g_iVictimTeam
new mp_freeforall
new bool:g_bFFA
public plugin_init()
{
register_plugin( PLUGIN, VERSION, AUTHOR )
register_concmd("amx_set_ffa", "ConsoleCommand_SetFfa", ADMIN_CFG, "<0|1>")
g_iMaxPlayers = get_maxplayers()
mp_freeforall = register_cvar("mp_freeforall", "0")
}
public ConsoleCommand_SetFfa(id, lvl, cid)
{
if( cmd_access(id, lvl, cid, 2) )
{
new szArg[3]
read_argv(1, szArg, charsmax(szArg))
if( g_bFFA && (szArg[0] == '0' || szArg[1] == 'f' || szArg[1] == 'F') )
{
Register_Forwards((g_bFFA=false))
set_pcvar_num(mp_freeforall, 0)
}
else if( !g_bFFA && (szArg[0] == '1' || szArg[1] == 'n' || szArg[1] == 'N') )
{
Register_Forwards((g_bFFA=true))
set_pcvar_num(mp_freeforall, 1)
}
}
console_print(id, "FFA mode is %s", g_bFFA ? "On" : "Off" )
return PLUGIN_HANDLED
}
public Player_TakeDamage_Pre(iVictim, iInflictor, iAttacker)
{
if( IsPlayer( iAttacker ) && iVictim != iAttacker )
{
g_iVictimTeam = cs_get_user_team_index(iVictim)
if( g_iVictimTeam == cs_get_user_team_index(iAttacker) )
{
cs_set_user_team_index(iVictim, g_iVictimTeam == TEAM_T ? TEAM_CT : TEAM_T)
return HAM_HANDLED
}
}
return HAM_IGNORED
}
public Player_TakeDamage_Post(iVictim)
{
if( g_iVictimTeam )
{
cs_set_user_team_index(iVictim, g_iVictimTeam)
g_iVictimTeam = 0
}
}
public Message_Radar(iMsgId, MSG_DEST, id)
{
return PLUGIN_HANDLED
}
Register_Forwards(bool:bState)
{
static HamHook:iHhTakeDamagePre, HamHook:iHhTakeDamagePost
, iMsgRadarHook, iMsgRadar
if(bState)
{
if( iHhTakeDamagePost )
{
EnableHamForward( iHhTakeDamagePost )
}
else
{
iHhTakeDamagePost = RegisterHam(Ham_TakeDamage, "player", "Player_TakeDamage_Post", 1)
}
if( iHhTakeDamagePre )
{
EnableHamForward( iHhTakeDamagePre )
}
else
{
iHhTakeDamagePre = RegisterHam(Ham_TakeDamage, "player", "Player_TakeDamage_Pre")
}
if( !iMsgRadarHook )
{
if( !iMsgRadar )
{
iMsgRadar = get_user_msgid("Radar")
}
iMsgRadarHook = register_message(iMsgRadar, "Message_Radar")
}
}
else
{
if( iHhTakeDamagePost )
{
DisableHamForward( iHhTakeDamagePost )
}
if( iHhTakeDamagePre )
{
DisableHamForward( iHhTakeDamagePre )
}
if( iMsgRadarHook )
{
unregister_message(iMsgRadar, iMsgRadarHook)
iMsgRadarHook = 0
}
}
}