!me, !hp
Добавлено: 19 окт 2018, 10:48
Плагин позволяет использовать чат-команды !me, !hp
Исходный код

Код: Выбрать все
"!me"(или "/me", информация о нанесенном уроне)
"!hp"(или /hp"", информация об убийце) после смерти.
Код: Выбрать все
/* Plugin Template generated by Pawn Studio */
#include <sourcemod>
#define CLEARITEM {0,0,0,0,0,0,0}
#define CLEARHITSITEM {0,0,0,0,0,0,0,0,0}
#define DAMAGE 0
#define ATTACKER 1
#define ATTACKERHP 2
#define ATTACKERAP 3
#define ATTACKERISDEAD 4
#define LASTDAMAGE 5
#define HITS 6
#define ME 0
#define HP 1
new g_MaxPlayers = 0;
new g_Clients[MAXPLAYERS+1][7];
new g_Hits[MAXPLAYERS+1][9];
new bool:g_IsRoundEnd = false;
new String:g_HitBox[9][16] =
{
"HB_Generic",
"HB_Head",
"HB_Chest",
"HB_Stomach",
"HB_LeftArm",
"HB_RightArm",
"HB_LeftLeg",
"HB_RightLeg",
"HB_Gear"
};
new String:g_Attackers[MAXPLAYERS+1][64];
new String:g_Weapons[MAXPLAYERS+1][64];
public Plugin:myinfo =
{
name = "Stats after death",
author = "BURN",
description = "/me /hp commands, special for 21games.ru",
version = "1.0",
url = ""
}
public OnPluginStart()
{
LoadTranslations("sad.phrases");
AddCommandListener(OnClientMessage, "say");
AddCommandListener(OnClientMessage, "say_team");
HookEvent("player_death", OnPlayerDeath);
HookEvent("round_freeze_end", OnRoundStart);
HookEvent("player_hurt", OnPlayerTakeDamage);
HookEvent("cs_win_panel_round", OnRoundEnd);
}
public OnMapStart()
{
g_MaxPlayers = GetMaxClients();
}
public OnClientPutInServer(client)
{
g_Clients[client] = CLEARITEM;
g_Hits[client] = CLEARHITSITEM;
}
public OnRoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
g_IsRoundEnd = false;
for(new i = 1; i <= g_MaxPlayers; i++)
{
g_Clients[i] = CLEARITEM;
}
for(new i = 1; i <= g_MaxPlayers; i++)
{
g_Hits[i] = CLEARHITSITEM;
}
}
public OnRoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
{
g_IsRoundEnd = true;
}
public Action:OnClientMessage(client, const String:msg[], args)
{
if (client)
{
new String:text[6];
GetCmdArgString(text, sizeof(text));
if (StrEqual(text, "\"!me\"", false) || StrEqual(text, "\"/me\"", false))
{
PrintStatsMessage(client, ME);
}
else if (StrEqual(text, "\"!hp\"", false) || StrEqual(text, "\"/hp\"", false))
{
PrintStatsMessage(client, HP);
}
}
return Plugin_Continue;
}
public OnPlayerTakeDamage(Handle:event, const String:name[], bool:dontBroadcast)
{
new damage = GetEventInt(event, "dmg_health");
new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
new victim = GetClientOfUserId(GetEventInt(event, "userid"));
if (attacker)
{
if (IsClientConnected(attacker) && IsClientConnected(victim))
{
if (GetClientTeam(attacker) != GetClientTeam(victim))
{
g_Clients[attacker][DAMAGE] += damage;
g_Clients[attacker][HITS]++;
g_Clients[victim][LASTDAMAGE] = damage;
g_Hits[attacker][GetEventInt(event, "hitgroup")]++;
}
}
}
}
public OnPlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
new client = GetClientOfUserId(GetEventInt(event, "userid"));
if (attacker && IsClientConnected(attacker))
{
GetClientName(attacker, g_Attackers[client], 64);
g_Clients[client][ATTACKER] = attacker;
GetEventString(event, "weapon", g_Weapons[client], 64);
if (IsPlayerAlive(attacker))
{
g_Clients[client][ATTACKERHP] = GetClientHealth(attacker);
g_Clients[client][ATTACKERAP] = GetClientArmor(attacker);
}
else
{
g_Clients[client][ATTACKERISDEAD] = 1;
}
}
if (GetRandomInt(1, 4) == 2 && IsClientConnected(client))
{
PrintToChat(client, "%T%T", "Plugin_Prefix", client, "ScrollMessage", client);
}
}
public PrintStatsMessage(client, type)
{
new String: message[192];
if (IsPlayerAlive(client) && !g_IsRoundEnd)
{
Format(message, 192, "%T", "Error_PlayerIsAlive", client)
}
else
{
if (type)
{
if (g_Clients[client][ATTACKER])
{
if (client == g_Clients[client][ATTACKER])
{
Format(message, 192, "%T", "Error_PlayerIsSuicide", client);
}
else
{
if (!g_Clients[client][ATTACKERISDEAD])
{
Format(message, 192, "%T", "HPMessage", client, g_Attackers[client], g_Clients[client][ATTACKERHP], g_Clients[client][ATTACKERAP], g_Weapons[client], g_Clients[client][LASTDAMAGE]);
}
else
{
Format(message, 192, "%T", "HPMessage2", client, g_Attackers[client], g_Weapons[client], g_Clients[client][LASTDAMAGE]);
}
}
}
else
{
Format(message, 192, "%T", "Error_NoAttacker", client);
}
}
else
{
if (g_Clients[client][DAMAGE])
{
new String:tStr[128];
new String:hitbox[32];
for (new i = 0; i < 9; i++)
{
if (g_Hits[client][i])
{
Format(hitbox, 32, "%T", g_HitBox[i], client);
if (strlen(tStr))
{
Format(tStr, 128, "%s %s %d,", tStr, hitbox, g_Hits[client][i]);
}
else
{
Format(tStr, 128, "%s%s %d,", tStr, hitbox, g_Hits[client][i]);
}
}
}
tStr[strlen(tStr)-1] = 0;
Format(message, 192, "%T", "MEMessage", client, g_Clients[client][HITS], tStr, g_Clients[client][DAMAGE]);
}
else
{
Format(message, 192, "%T", "Error_NoHits", client);
}
}
}
PrintToChat(client, "%T%s", "Plugin_Prefix", client, message);
}