#pragma semicolon 1 

#include <sourcemod> 
#include <sdkhooks> 

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); 
    } 
}  

