#pragma semicolon 1 #include #include public OnPluginStart() { HookUserMessage(GetUserMessageId("TextMsg"), Hook_TextMsg, true); HookEvent("player_death", Event_PlayerDeath, EventHookMode_Post); } public OnClientPutInServer(client) { SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage); } public Action:OnTakeDamage(victim, &attacker, &inflictor, &Float:damage, &damagetype) { /* Make friendly fire damage the same as real damage. */ if(victim && attacker && victim != attacker && GetClientTeam(victim) == GetClientTeam(attacker)) { damage /= 0.35; return Plugin_Changed; } return Plugin_Continue; } public Action:Hook_TextMsg(UserMsg:msg_id, Handle:bf, const players[], playersNum, bool:reliable, bool:init) { /* Block team attack messages from being shown to the server. */ decl String:message[256]; BfReadString(bf, message, sizeof(message)); if (StrContains(message, "teammate_attack") != -1) return Plugin_Handled; if (StrContains(message, "Killed_Teammate") != -1) return Plugin_Handled; return Plugin_Continue; } public Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) { /* Properly increase the players score if it was a teamkill. */ new victim = GetClientOfUserId(GetEventInt(event, "userid")); new attacker = GetClientOfUserId(GetEventInt(event, "attacker")); if(victim && attacker && victim != attacker && GetClientTeam(victim) == GetClientTeam(attacker)) { SetEntProp(attacker, Prop_Data, "m_iFrags", GetClientFrags(attacker) + 2); } }