/*
* AMX Mod X Script
*
* "Killa HP"
* © jas0n, November 2007
*
* This file is provided as is (no warranties)
*
* Описание:
* Плагин показывает сообщение в чате "You have been killed by AttackeR [78 HP, 100 AP][13 Kills, 2 Deaths] from distance 36 meters." жертве
* и "Enemy VictiM [21 Kills, 9 Deaths] down!" + звук "Enemy Down!" атакующему.
*
* Переменные:
* // Показывать сообщение "You have been killed by AttackeR [...]" жертве (default: 1)
* // 0 - Выключить
* // 1 - Включить
* kh_showvictim <0|1>
*
* // Показывать сообщение "Enemy VictiM [...] down!" атакующему (default: 1)
* // 0 - Выключить
* // 1 - Включить
* kh_showkiller <0|1>
*
* // Проигрывание звука "Enemy down!" атакующему (default: 1)
* // 0 - Выключить
* // 1 - Включить
* kh_playsound <0|1>
*
* Переменные LANG файла:
* :KILLER_NAME: - Имя атакующего
* :KILLER_HEALTH: - Оставшееся количество здоровья атакующего
* :KILLER_ARMOR: - Оставшееся количество брони атакующего
* :KILLER_FRAGS: - Количество фрагов атакующего
* :KILLER_DEATHS: - Количество смертей атакующего
*
* :VICTIM_NAME: - Имя жертвы
* :VICTIM_FRAGS: - Количество фрагов жертвы
* :VICTIM_DEATHS: - Количество смертей жертвы
*
* :SHOT_DISTANCE: - Расстояние выстрела
*
* * С помощью вышепреведенных переменных в файле 'amxmodx\data\lang\killa_hp.txt' легко формируется и изменяется текст сообщения,
* но следует учитывать, что длина уже сформированого сообщения, которое выводится на экран, не должна превышать 191 символ.
* * Для показа цветных сообщений необходимо в файле словаря 'amxmodx\data\lang\killa_hp.txt' использовать
* тэги [g]green_color[/g] и [t]team_color[/t].
* * В данном плагине цвет [t]team_color[/t] изменен на цвет противоположной команды, т.е. если вы играете за CT, то цвет
* будет красный, если за T - синий. Это сделано для того, чтоб ник игрока убившего Вас в сообщении
* показывался цветом его команды, а не Вашей.
*
* Список версий:
* [12/11/07 13:43] v1.0
* * First release
*
* [12/11/07 19:00] v1.1
* * Message bug fix
*
* [14/01/08 14:08] v1.2b
* * Minor optimization;
* * Now message prints to victim's console too
* * Support for AmxModX ver. < 1.8.0
*
* [04/04/08 09:29] v1.3
* * Some optimizations
* * Removed dependence of <cstrike> module
*
* [26/05/08 14:58] v1.4
* * Removed console message printing
* * Player name now colored by his team-color
* * 'Enemy Down' sound playing to attacker
*
* [11/11/09 14:20] v1.5
* * Added cvars killa_hp_sound
* * Added lang file (multilingual support)
* * Color configuration tags [g] and [t] for Green and Team colors accordingly
*
* [22/06/10 12:49] v1.6
* * Cvar killa_hp_sound changed to kh_playsound
* * Added cvars kh_showvictim and kh_showkiller
* * Added shot distance display
* * Fixed potential bug in message buffer
*
* ColorChat:
* ^x01 Стандартный цвет
* ^x03 Цвет Команды. Т.е. Terrorist - Красный цвет, Counter-Terrorist - Синий цвет и SPECTATOR или UNASSIGNED - Серый цвет.
* ^x04 Зеленый цвет
*
* * Цвета красный, серый, и синий не могут быть использованы на одной линии. Этого сделать невозможно!
*
* Благодарность:
* * VipPredator [dedicated-server.ru]
*/
#include <amxmodx>
#include <colorchat>
new const PLUGIN_NAME[] = "Killa HP"
new const PLUGIN_VERSION[] = "1.6"
new const PLUGIN_AUTHOR[] = "jas0n"
#define MAX_PLAYERS 32
#define MAX_NAME_LENGTH 32
#define MAX_MSG_LENGTH 192
#define MAX_BUF_LENGTH 1024
#define SOUND_PLAY_DELAY 3
#define charsmax(%1) (sizeof(%1)-1)
new const g_szSoundFile[] = "radio/enemydown.wav"
new Float:cMeter = 32.00
new g_LastPlayedTime[MAX_PLAYERS+1]
new pcvar_showvictim
new pcvar_showkiller
new pcvar_playsound
public plugin_init()
{
register_plugin ( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR )
register_dictionary ( "killa_hp.txt" )
register_event ( "DeathMsg", "evDeath", "a", "1>0" )
pcvar_showvictim = register_cvar ( "kh_showvictim", "1" )
pcvar_showkiller = register_cvar ( "kh_showkiller", "1" )
pcvar_playsound = register_cvar ( "kh_playsound", "1" )
}
public plugin_precache()
{
precache_sound ( g_szSoundFile )
}
public evDeath()
{
static aID, vID
static message[MAX_MSG_LENGTH], buffer[MAX_BUF_LENGTH]
static aName[MAX_NAME_LENGTH], vName[MAX_NAME_LENGTH]
static n_aHealth, n_aArmor, n_aFrags, n_aDeaths
static n_vFrags, n_vDeaths
static aHealth[4], aArmor[4], aFrags[5], aDeaths[5]
static vFrags[5], vDeaths[5]
static aTeam, aOrigin[3], vOrigin[3], n_szDistance, szDistance[5]
aID = read_data ( 1 )
vID = read_data ( 2 )
if ( vID == aID ) return
get_user_name ( aID, aName, charsmax ( aName ) )
get_user_name ( vID, vName, charsmax ( vName ) )
n_aHealth = get_user_health ( aID )
n_aArmor = get_user_armor ( aID )
n_aFrags = get_user_frags ( aID )
n_aDeaths = get_user_deaths ( aID )
get_user_origin ( aID, aOrigin )
aTeam = get_user_team ( aID )
n_vFrags = get_user_frags ( vID )
n_vDeaths = get_user_deaths ( vID )
get_user_origin ( vID, vOrigin )
n_szDistance = floatround ( get_distance ( aOrigin, vOrigin ) / cMeter )
num_to_str ( n_aHealth, aHealth, charsmax ( aHealth ) )
num_to_str ( n_aArmor, aArmor, charsmax ( aArmor ) )
num_to_str ( n_aFrags, aFrags, charsmax ( aFrags ) )
num_to_str ( n_aDeaths, aDeaths, charsmax ( aDeaths ) )
num_to_str ( n_vFrags, vFrags, charsmax ( vFrags ) )
num_to_str ( n_vDeaths, vDeaths, charsmax ( vDeaths ) )
num_to_str ( n_szDistance, szDistance, charsmax ( szDistance ) )
if ( get_pcvar_num ( pcvar_showvictim ) )
{
formatex ( buffer, charsmax ( buffer ), "%L", LANG_SERVER, "KH_VICTIM_MSG" )
format_cvars ( buffer, charsmax ( buffer ), aName, aHealth, aArmor, aFrags, aDeaths, vName, vFrags, vDeaths, szDistance )
format_color ( buffer, charsmax ( buffer ), 1 )
formatex ( message, charsmax ( message ), "^x01%s", buffer )
switch ( aTeam )
{
case 1: ColorChat ( vID, RED, message )
case 2: ColorChat ( vID, BLUE, message )
}
}
if ( get_pcvar_num ( pcvar_playsound ) && ( ( get_systime() - g_LastPlayedTime[aID] ) > SOUND_PLAY_DELAY ) )
{
client_cmd ( aID, "spk %s", g_szSoundFile )
g_LastPlayedTime[aID] = get_systime()
}
if ( get_pcvar_num ( pcvar_showkiller ) )
{
formatex ( buffer, charsmax ( buffer ), "%L", LANG_SERVER, "KH_ATTACKER_MSG" )
format_cvars ( buffer, charsmax ( buffer ), aName, aHealth, aArmor, aFrags, aDeaths, vName, vFrags, vDeaths, szDistance )
format_color ( buffer, charsmax ( buffer ), 1 )
formatex ( message, charsmax ( message ), "^x01%s", buffer )
switch ( aTeam )
{
case 1: ColorChat ( aID, BLUE, message )
case 2: ColorChat ( aID, RED, message )
}
}
}
stock format_cvars ( buffer[], length, aName[], aHealth[], aArmor[], aFrags[], aDeaths[], vName[], vFrags[], vDeaths[], szDistance[] )
{
replace_all ( buffer, length, ":KILLER_NAME:", aName )
replace_all ( buffer, length, ":KILLER_HEALTH:", aHealth )
replace_all ( buffer, length, ":KILLER_ARMOR:", aArmor )
replace_all ( buffer, length, ":KILLER_FRAGS:", aFrags )
replace_all ( buffer, length, ":KILLER_DEATHS:", aDeaths )
replace_all ( buffer, length, ":VICTIM_NAME:", vName )
replace_all ( buffer, length, ":VICTIM_FRAGS:", vFrags )
replace_all ( buffer, length, ":VICTIM_DEATHS:", vDeaths )
replace_all ( buffer, length, ":SHOT_DISTANCE:", szDistance )
}
stock format_color ( buffer[], length, colored_message )
{
replace_all ( buffer, length, "^x01", "" )
replace_all ( buffer, length, "^x03", "" )
replace_all ( buffer, length, "^x04", "" )
if ( colored_message )
{
replace_all ( buffer, length, "[t]", "^x03" )
replace_all ( buffer, length, "[g]", "^x04" )
replace_all ( buffer, length, "[/t]", "^x01" )
replace_all ( buffer, length, "[/g]", "^x01" )
}
else
{
replace_all ( buffer, length, "[t]", "" )
replace_all ( buffer, length, "[g]", "" )
replace_all ( buffer, length, "[/t]", "" )
replace_all ( buffer, length, "[/g]", "" )
}
}