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:


IX. Changelog

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