#include <sdktools>
int iAssist[MAXPLAYERS+1];
int iAssist_Health[MAXPLAYERS+1][MAXPLAYERS+1];
bool bSkipMsgChat;
public void OnPluginStart(){
HookEvent("player_hurt", OnPlayerHurt);
HookEvent("player_death", OnPlayerDeath_pre, EventHookMode_Pre);
UserMsg msg = GetUserMessageId("SayText2");
if(msg != INVALID_MESSAGE_ID) HookUserMessage(msg, OnTextMsg, true);
}
public Action OnTextMsg(UserMsg msg_id, BfRead msg, const int[] players, int playersNum, bool reliable, bool init){
if(!bSkipMsgChat) return Plugin_Continue;
BfReadByte(msg); BfReadByte(msg);
char cMsg[128]; BfReadString(msg, cMsg, sizeof(cMsg));
return StrContains(cMsg, "Cstrike_Name_Change") != -1 ? Plugin_Handled : Plugin_Continue;
}
public void OnPlayerHurt(Event event, const char[] name, bool db){
int attacker = GetClientOfUserId(event.GetInt("attacker"));
int client = GetClientOfUserId(event.GetInt("userid"));
if(attacker == client || attacker < 1 || attacker > MaxClients) return;
iAssist_Health[client][attacker] += event.GetInt("dmg_health");
if(iAssist_Health[client][attacker] > 30 && iAssist[client] < 1)
iAssist[client] = attacker;
}
public void OnPlayerDeath_pre(Event event, const char[] name, bool db){
int attacker = GetClientOfUserId(event.GetInt("attacker"));
int client = GetClientOfUserId(event.GetInt("userid"));
if(attacker == client || attacker < 1 || attacker > MaxClients || iAssist[client] < 1 || iAssist[client] == attacker || !IsClientInGame(iAssist[client])) return;
bSkipMsgChat = true;
event.BroadcastDisabled = true;
DataPack pack = new DataPack();
pack.WriteCell(event.GetInt("userid"));
pack.WriteCell(event.GetInt("attacker"));
char cGetWeapon[32]; event.GetString("weapon", cGetWeapon, sizeof(cGetWeapon));
pack.WriteString(cGetWeapon);
pack.WriteCell(event.GetBool("headshot"));
pack.WriteCell(event.GetInt("dominated"));
pack.WriteCell(event.GetInt("revenge"));
char cGetName[32]; GetClientName(attacker, cGetName, sizeof(cGetName));
pack.WriteString(cGetName);
CreateTimer(0.065, AssistEvent, pack);
char cSetName[64]; FormatEx(cSetName, sizeof(cSetName), "%N + %N", attacker, iAssist[client]);
SetClientName(attacker, cSetName);
iAssist[client] = 0;
for(int i = 1; i <= MaxClients; i++)
iAssist_Health[client][i] = 0;
}
public Action AssistEvent(Handle timer, DataPack pack){
pack.Reset();
int client = pack.ReadCell();
int attacker = pack.ReadCell();
char cWeapon[32]; pack.ReadString(cWeapon, sizeof(cWeapon));
bool headshoot = view_as<bool>(pack.ReadCell());
int dominated = pack.ReadCell();
int revenge = pack.ReadCell();
Event assist_event = CreateEvent("player_death");
assist_event.SetInt("userid", client);
assist_event.SetInt("attacker", attacker);
assist_event.SetString("weapon", cWeapon);
assist_event.SetBool("headshot", headshoot);
assist_event.SetInt("dominated", dominated);
assist_event.SetInt("revenge", revenge);
for(int i = 1; i <= MaxClients; i++)
if(IsClientInGame(i) && !IsFakeClient(i))
assist_event.FireToClient(i);
assist_event.Cancel();
char cSetOldName[32]; pack.ReadString(cSetOldName, sizeof(cSetOldName));
SetClientName(GetClientOfUserId(attacker), cSetOldName);
pack.Close();
bSkipMsgChat = false;
}