View Single Post
N3v3rM1nd
Member
Join Date: Apr 2021
Old 03-23-2022 , 11:03   Re: Convert from SourcePawn to AmxxPawn
Reply With Quote #7

Quote:
Originally Posted by CrazY. View Post


Seems to be working, tested on a local server.
Check if this work

Code:
#include <amxmodx>
#include <hamsandwich>

#define PLUGIN "Display Damage"
#define VERSION "1.0"
#define AUTHOR "unknown"

#if !defined MAX_PLAYERS
#define MAX_PLAYERS 32
#endif

new pCvarAllowCommand
new pCvarDisplayAttacksOnly
new pCvarAliveOnly
new pCvarExcludeBots

const MAX_HEALTH = 100

new g_iHits[MAX_PLAYERS + 1][MAX_PLAYERS + 1]
new g_iDamage[MAX_PLAYERS + 1][MAX_PLAYERS + 1]

public plugin_init() 
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	pCvarDisplayAttacksOnly = register_cvar("dmg_display_attacksonly", "1")
	pCvarAliveOnly = register_cvar("dmg_cmd_alive_only", "1")
	pCvarAllowCommand = register_cvar("dmg_cmd_allow", "1")
	pCvarExcludeBots = register_cvar("dmg_exclude_bots", "0")

	register_logevent("logevent_roundend",2,"1=Round_End")
	
	register_clcmd("say .dmg", "cmdSayDamage")
	
	RegisterHam(Ham_TakeDamage, "player", "ham_TakeDamage_Post", 0)
	RegisterHam(Ham_Spawn, "player", "ham_PlayerSpawn", 1)
}

public ham_PlayerSpawn(id)
{
	for (new i; i < sizeof g_iHits; i++)
	{
		arrayset(g_iHits[i], 0, sizeof g_iHits[])
	}

	for (new i; i < sizeof g_iDamage; i++)
	{
		arrayset(g_iDamage[i], 0, sizeof g_iDamage[])
	}
}

public ham_TakeDamage_Post(iVictim, iInflictor, iAttacker, Float:fDamage, iDamageBits)
{
	if(!is_user_connected(iAttacker) || !is_user_connected(iVictim))
		return HAM_IGNORED
		
	g_iHits[iAttacker][iVictim]++
	
	new iDamage = floatround(fDamage), iVictimHealth = get_user_health(iVictim)
	if((iDamage >= iVictimHealth) && !g_iDamage[iAttacker][iVictim])
	{
		g_iDamage[iAttacker][iVictim] = iVictimHealth
	}
	else g_iDamage[iAttacker][iVictim] += iDamage
	return HAM_IGNORED
}

public logevent_roundend()
{
	new iPlayers[MAX_PLAYERS], iNum
	get_players(iPlayers, iNum)	
	for(new i;i < iNum;i++)
	{
		displayDamage(iPlayers[i])
	}
}

public cmdSayDamage(id)
{
	if(!get_pcvar_num(pCvarAllowCommand))
	{
		client_print(id, print_chat,"^x03-->^x01 Command unavaliable.")
		return PLUGIN_HANDLED
	}

	if(!is_user_alive(id) && get_pcvar_num(pCvarAliveOnly))
	{
		client_print(id, print_chat,"^x03-->^x01 You cannot use this command while dead.")
		return PLUGIN_HANDLED
	}
	displayDamage(id)
	return PLUGIN_HANDLED
}	

public displayDamage(id)
{
	new iPlayers[MAX_PLAYERS], iNum, szMessage[192]
	//get_players(iPlayers, iNum, get_pcvar_num(pCvarExcludeBots) ? "ech" : "e", (get_user_team(id) == 1) ? "CT" : "TERRORIST")
	if (get_pcvar_num(pCvarExcludeBots))
		get_players(iPlayers, iNum, "ch")
	else
		get_players(iPlayers, iNum, "h")
	
	new team = get_user_team(id)

	for(new i, iPlayer, szName[MAX_PLAYERS], iDmg[2],iHit[2];i < iNum;i++)
	{
		iPlayer = iPlayers[i]

		if(iPlayer == id || get_user_team(iPlayer) == team)
			continue

		iHit[0] = g_iHits[id][iPlayer] // Hit Done
		iHit[1] = g_iHits[iPlayer][id] // Hit Received
			
		if(get_pcvar_num(pCvarDisplayAttacksOnly) && (!iHit[0] && !iHit[1]))
			continue
			
		iDmg[0] = g_iDamage[id][iPlayer] // Damage Done
		iDmg[1] = g_iDamage[iPlayer][id] // Damage Recived
					
		get_user_name(iPlayer, szName, charsmax(szName))
						
		formatex
		(
			szMessage, 
			charsmax(szMessage), 
			"%s^x01--> (^x04%i^x01 dmg / ^x04%i^x01 hits) to (^x04%i^x01 dmg / ^x04%i^x01 hits) from ^x03%s^x01 (^x04%i^x01 HP)",
			szMessage,
			min(iDmg[0], MAX_HEALTH),
			iHit[0],
			min(iDmg[1], MAX_HEALTH),
			iHit[1],
			szName,
			(is_user_alive(iPlayer) ? get_user_health(iPlayer) : 0))
	}
	
	if(!szMessage[0])
	{
		formatex(szMessage, charsmax(szMessage), "^x03-->^x01 No damage event happened with you.")
	}
	
	ChatColor(id, szMessage)
}

ChatColor(const id, const input[], any:...)
{
	static mMessageSayText
	if(!mMessageSayText)
	{
		mMessageSayText = get_user_msgid("SayText")
	}

        new iCount = 1, iPlayers[MAX_PLAYERS]
        static msg[191]
        vformat(msg, 190, input, 3)

        replace_all(msg, 190, "!g", "^4")
        replace_all(msg, 190, "!y", "^1")
        replace_all(msg, 190, "!t", "^3")

        if(id) iPlayers[0] = id; else get_players(iPlayers, iCount, "ch")
        {
                for (new i, player; i < iCount; i++)
                {
			message_begin(MSG_ONE_UNRELIABLE, mMessageSayText, _, (player = iPlayers[i]))
			write_byte(player)
			write_string(msg)
			message_end()
                }
        }
}
This one is working, thanks both of you
N3v3rM1nd is offline