#include <amxmodx>
#include <engine>
#include <hamsandwich>
#if AMXX_VERSION_NUM < 183
#include <colorchat>
#define print_team_default DontChange
#define print_team_grey Grey
#define print_team_red Red
#define print_team_blue Blue
#endif
//#define NOT_ALIVE // Use / me can only dead players. To allow everyone to use, comment;)
#define INFO_KILLER // Information / me and / hp after the player's death
//#define NO_ROUND // Support endless round.
#define msgSayText 76
#define maxPlayers 32
enum _:info
{
damage,
lasthit,
killerid,
killername[32]
}
new g_iPlayerData[maxPlayers+1][info];
new Float:g_fHpKiller[maxPlayers+1];
new Float:g_fApKiller[maxPlayers+1];
new Float:g_fDistance[maxPlayers+1];
new const g_szHitPlaces[][] = { "-", "head", "chest", "stomach", "left hand", "rigth hand", "left leg", "rigth leg" };
public plugin_init()
{
register_plugin("Say me and Say hp", "1.4", "neygomon");
register_event("Damage", "eventDamage", "b", "2!0");
#if defined NO_ROUND
RegisterHam(Ham_Spawn, "player", "fwdPlayerSpawn", true);
#else
register_event("HLTV", "eventRoundStart", "a", "1=0", "2=0");
#endif
RegisterHam(Ham_Killed, "player", "fwdPlayerKilled", true);
register_clcmd("say /me", "ClCmdSayMe");
register_clcmd("say_team /me", "ClCmdSayMe");
register_clcmd("say /hp", "ClCmdSayHp");
register_clcmd("say_team /hp", "ClCmdSayHp");
}
public client_putinserver(id)
{
arrayset(g_iPlayerData[id], 0, info);
}
#if defined NO_ROUND
public fwdPlayerSpawn(const id)
{
arrayset(g_iPlayerData[id], 0, info);
}
#else
public eventRoundStart()
{
for(new i = 1; i <= maxPlayers; i++)
{
arrayset(g_iPlayerData[i], 0, info);
}
}
#endif
public eventDamage(id)
{
static attacker, hit; attacker = get_user_attacker(id, 0, hit);
if(id != attacker && 1 <= attacker <= maxPlayers)
{
g_iPlayerData[attacker][damage] += read_data(2);
g_iPlayerData[attacker][lasthit] = hit;
}
}
public fwdPlayerKilled(pVictim, pKiller)
{
if(pVictim == pKiller || !is_user_connected(pKiller) || !is_user_connected(pVictim))
return;
g_fHpKiller[pVictim] = entity_get_float(pKiller, EV_FL_health);
g_fApKiller[pVictim] = entity_get_float(pKiller, EV_FL_armorvalue);
g_fDistance[pVictim] = entity_range(pKiller, pVictim) / 32.00;
g_iPlayerData[pVictim][killerid] = pKiller;
get_user_name(pKiller, g_iPlayerData[pVictim][killername], charsmax(g_iPlayerData[][killername]));
#if defined INFO_KILLER
ClCmdSayHp(pVictim);
ClCmdSayMe(pVictim);
#endif
}
public ClCmdSayMe(id)
{
#if defined NOT_ALIVE
if(is_user_alive(id))
{
client_print_color(id, -2, "^1[^3SayMe^1] ^4This feature is only available to dead players!");
return PLUGIN_HANDLED;
}
#endif
switch(g_iPlayerData[id][damage])
{
case 0: client_print_color(id, -2, "^1[^3SayMe^1] ^4You did not shoot ^3no one.");
default:client_print_color(id, 0, "^1[^3SayMe^1] ^4You have caused ^3%d^4 damage. Last hit in ^3%s^4.", g_iPlayerData[id][damage], g_szHitPlaces[g_iPlayerData[id][lasthit]]);
}
return PLUGIN_HANDLED;
}
public ClCmdSayHp(id)
{
switch(g_iPlayerData[id][killerid])
{
case 0: client_print_color(id, -2, "^1[^3SayMe^1] ^4Anybody did not kill you.");
default:client_print_color(id, 0, "^1[^3SayMe^1] ^4You were killed by the: ^3%s^4 from a distance ^3%.0f^4 m. He left: ^3%.0f^1HP ^4and ^3%.0f^1AP", g_iPlayerData[id][killername], g_fDistance[id], g_fHpKiller[id], g_fApKiller[id]);
}
return PLUGIN_HANDLED;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1038\\ f0\\ fs16 \n\\ par }
*/