ATAC - Advance Team Attack Control
Copyright © 2006-2007 by ATAC Team
ATAC allows you to customise the way you handle Team Attackers/Killers in a variety of different ways for most Half-Life 1 modifications.
Sections:

1. Installation
2. Configuration
3. CVARs
4. Commands
5. Natives and Forwards
6. Scripting examples
7. Support - External Mods
8. Credits and copyrights
9. Changelog

I. Installation

ATAC requires AMX Mod X 1.76 or above with FakeMeta module enabled.

To install the mod, follow these directions:

1. Extract ATAC package into your addons/amxmodx directory
2. Open addons/amxmodx/configs/atac directory configure the cfg files to suit your needs
3. Open addons/amxmodx/configs/atac-plugins.ini file and configure the plugins to suit your needs
4. Restart your HLDS server, and you're done!

II. Configuration

Configuration is done 97% through atac.cfg file in amxmodx/configs/atac. The other 3% is done in the atac.sma file in amxmodx/scripting which just involves changing the defines at the top of the file. This is only required if your not happy with how many registered punishments/hooks are allowed.

III. CVARs

CVARs
Name | Information | Default Value
--- | --- | ---
atac_disabled | Switches ATAC off or on | 0
atac_menu | Switches punishment menu on or off | 1
atac_menu_overwrite | Switches menu overwriting on or off | 0
atac_admins_immune | Sets admin immunity type: 0=OFF, 1=NO KICK/BAN, 2=ON (Admins require flag "a") | 1
atac_store_kills | Switches storage of kills per map on or off | 1
atac_nocount_death | Do not count TA/TK when a user dies beforehand (ie grenades, or other projectiles) | 0
atac_ban_type | Sets banning type: 0=OFF, 1=IP, 2=AUTHID, 3=AUTO-DETECT | 3
atac_ban_time | Sets amount of time (minutes) you want to ban a user after their Team Kills have reached the limit (0=PERMANENT BAN) | 120
atac_team_attacks | Sets amount of Team Attacks you want to be counted as a Team Kill (0=OFF) | 5
atac_team_kills | Sets amount of Team Kills you want allowed before user is kicked/banned (0=OFF) | 3
Team Attack Addon (atac_ta.amxx)
atac_slap_attacker | Sets slapping on attacker: 0=OFF, 1=ON (Note: no health is deducted) | 0
atac_slayon_maxattacks | Sets slaying on maximum Team Attacks: 0=OFF, 1=ON | 0
atac_health_restore | Sets health restoration on victim: 0=OFF, 1=ON | 0
atac_mirror_damage | Sets mirror damage on attacker: 0=OFF, 1=ON | 0
atac_noattack_within | Sets no Team Attack timelimit in seconds from beginning of spawn (0=OFF) | 5

IV. Commands

Server Commands
Command | Information | Version Implemented
--- | --- | ---
atac | off - disables ATAC on - enables ATAC version - displays ATAC version settings - displays ATAC settings players - displays all players team attacks/kills status
punishments - displays punishments registered
addons - displays addons registered
credits - displays credits
team - displays current development team
3.0
3.0
3.0
3.0
3.0
3.0
3.0
3.0
3.0
Client Commands
say /atacstatus | Shows your Team Attack and Team Kill status | 3.0

V. Natives

Natives
Command | Information | Version Implemented
--- | --- | ---
atac_register_punishment() | Register a punishment returns -1 on failure. Allows hooking any forward from [Punishments] | 3.0
atac_register_addon() | Register a addon returns -1 on failure. Allows hooking any forward from [Addons] | 3.0
is_punishment_valid( index ) | Returns -1 on failure or plugin index if punishment is valid | 3.0
get_maxpunishments() | Returns maximum amount of punishments registered | 3.0
get_atac_attacks( id ) | Gets the amount of Team Attacks done by a player | 3.0
set_atac_attacks( attacker, amount, victim=0 ) | Sets the amount of Team Attacks done by a player | 3.0
get_atac_kills( id ) | Gets the amount of Team Kills done by a player | 3.0
set_atac_kills( killer, amount, victim=0, item=0 ) | Sets the amount of Team Kills done by a player. item 0 - Show/Do nothing, 1 - Show Menu to Victim, anything higher activates a specific punishment ignoring TeamKills | 3.0
Forwards
atac_punishment_name( victim ) | Called when ATAC builds it's Team Kill Menu. You must return with EngFunc_AllocString! [Punishments] | 3.0
atac_player_punish( killer, victim ) | Called when a punishment is chosen. [Punishments] | 3.0
atac_player_reset( killer, victim ) | Called when a player dies and just before a player respawns. [Punishments] | 3.0
atac_player_spawn( killer, victim ) | Called when a player (re)spawns. [Punishments] | 3.0
atac_team_attack( attacker, victim, damage ) | Called when a team attack occurs. [Addons] | 3.0
atac_team_kill( killer, victim ) | Called when a team kill occurs. [Addons] | 3.0
atac_punished( killer, const name[], const authid[] ) | Called when a team kill increment occurs. This forward can supercede ATAC's banning system by: return PLUGIN_HANDLED [Addons] | 3.0

VI. Scripting examples

Example Registering a Punishment:

    #include <amxmodx>
    #include <fakemeta>
    #include <atac>

    #define PLUGIN  "Some Name"
    #define VERSION "Some Number"
    #define AUTHOR  "Some Name"

    public plugin_init()
    {
    	register_plugin( PLUGIN, VERSION, AUTHOR )
    	atac_register_punishment()
    }

    public atac_punishment_name( id )
    {
    	// Setup menu text
    	new text[ 64 ]
    	formatex( text, 63, "%L", id, "SOME_MACRO" )
    	// You must do this, else ATAC won't decode your string
    	return engfunc( EngFunc_AllocString, text )
    }

    public atac_player_punish( killer, victim )
    {
    	// Saves duplicating data
    	exec_punishment( killer )
    	// You don't have to return a hook but it saves catching events
    	return ATAC_HOOK_RESET
    }

    public atac_player_spawn( killer, victim )
    {
    	// Saves duplicating data
    	exec_punishment( killer )
    	// You don't have to return a hook but it saves catching events
    	return ATAC_HOOK_RESET
    }

    public atac_player_reset( killer, victim )
    {
    	client_print( 0, print_chat, "Punishment ended for: %i", killer )
    }

    exec_punishment(id)
    {
    	client_print( 0, print_chat, "Executing punishment on: %i", id )
    }

Example Registering Team Damage Attack:

    #include <amxmodx>
    #include <atac>

    #define PLUGIN  "Some Name"
    #define VERSION "Some Number"
    #define AUTHOR  "Some Name"

    public plugin_init()
    {
    	register_plugin( PLUGIN, VERSION, AUTHOR )
    	atac_register_addon()
    }

    public atac_team_attack( attacker, victim, damage )
    {
    	client_print( 0, print_chat, "Attacker: %i - Victim: %i - Damage: %i", attacker, victim, damage )
    }

VII. Support - External Mods

Adding support for external modifications is quite simple. All you need to do is this (Example):

    set_pev( id, pev_dmg_inflictor, index )
    // FakeMeta Module way
    set_pev( id, pev_health, value )
    // Fun Module way
    set_user_health( id, value )

As soon as health is changed ATAC intercepts the call and checks whether its a team mate attacking.

MODs that enhance gameplay which allows for team mate attacking/killing would need to disable ATAC else it'll just spoil the MOD, here is how:

    new atac_active

    atac_check()
    {
    	atac_active = get_cvar_pointer( "atac_disabled" )
    	if ( !get_pcvar_num( atac_active ) )
    		server_cmd( "atac off" )
    }

DO NOT ASK: any ATAC TEAM member to write direct support for your PLUGIN inside of ATAC itself, it will never happen since as of this version ATAC supports near enough any Half-Life 1 modification. Writing direct support for certain PLUGIN's is pointless since they mainly support only one particular MOD!

VIII. Credits and copyrights

* Copyright © 2006-2007, ATAC Team
*
* ATAC (Advanced Team Attack Control) 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.
*
* 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 ATAC (Advanced Team Attack Control); if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.

People who contributed/inspired ATAC are:

ATAC Team:

Lead Developer: Phil "Orangutanz" Poland
Developers: Christoph "DevconeS" Amrein, Brad Jones
Translations: Orangutanz (English), arkshine (French), |PJ| Shorty (German),
KWo (Polish), Deviance (Swedish), Dav3 (Hungarian), thedavis (Spanish)
BlackMilk (Dutch), iggy_bus (Serbian) and Strelomet (Russian)
Testers: KWo (PODBot developer), AMX Mod X community

Pre ATAC 3:

Aaron "f117bomb" Drabeck - original co-author of ATAC
Phil "T(+)rget" Poland - original co-author of ATAC
teame06 & {NM}Jason - converting and improving ATAC 2.5.x for AMX Mod X

Misc:

David "BAILOPAN" Anderson - if it wasn't for this guy ATAC 3 wouldn't of been possible
Aleksander "OLO" Naszko - if it wasn't for this guy ATAC would of never existed

IX. Changelog

     3.0: 04/10/07
    	Public Release for Series 3