PDA

View Full Version : Cerere plugin



CastaNa1337
18-03-2018, 06:25 PM
Plugin: puncte123
Descriere: atunci cand fac 1 kill sa imi apara mie in chat (sau jucatorului care omoara alt jucator) Ai primit 1 punct ca l-ai omorat pe X-ulescu spre exemplu
Versiune: nu conteaza
Autor:
Flaguri:

Tiger
18-03-2018, 09:36 PM
Ti l-am modificat dupa: <b>You have to register to ba able to see this link</b>

Este Steam-only.

#include < amxmodx >
#include < fvault >

enum _:RankData
{
Rank_Kills,
Rank_Name[ 32 ],
Rank_SteamID[ 35 ]
};

new const g_szVaultName[ ] = "amxx_stats";

new pCvar_Top;
new pCvar_KillPoints;

public plugin_init( )
{
register_plugin( "AMXX Stats", "0.0.1", "Exolent" );

register_srvcmd( "amxstats_reset", "CmdReset" );

register_clcmd( "say /rank", "CmdRank" );
register_clcmd( "say /top", "CmdTop" );
register_clcmd( "say /top10", "CmdTop" );
register_clcmd( "say /top15", "CmdTop" );

register_event( "DeathMsg", "EventDeathMsg", "a" );

pCvar_Top = register_cvar( "amxstats_top", "10" );
pCvar_KillPoints = register_cvar( "amxstats_per_kill_points", "1" );
}

public CmdReset( )
{
fvault_clear( g_szVaultName );

server_print( " Stats have been reset." );

log_amx( " Stats have been reset." );

return PLUGIN_HANDLED;
}

public CmdRank( iPlayer )
{
new Array:aRankData;
new iTotal = GetPlayerRanks( aRankData );

new iRank;
new eRankData[ RankData ];

if( iTotal )
{
new szPlayerSteamID[ 35 ];
get_user_authid( iPlayer, szPlayerSteamID, charsmax( szPlayerSteamID ) );

for( new i = 0; i < iTotal; i++ )
{
ArrayGetArray( aRankData, i, eRankData );

if( equal( szPlayerSteamID, eRankData[ Rank_SteamID ] ) )
{
iRank = i + 1;
break;
}
}
}

if( iRank )
{
client_print( iPlayer, print_chat, "* Esti pe %i din %i cu %i punct%s!", iRank, iTotal, eRankData[ Rank_Kills ], ( eRankData[ Rank_Kills ] == 1 ) ? "" : "e" );
}
else
{
client_print( iPlayer, print_chat, "* Nu ai inca rank pentru ca nu ai omorat pe nimeni!" );
}

ArrayDestroy( aRankData );
}

public CmdTop( iPlayer )
{
new Array:aRankData;
new iTotal = max( 0, min( GetPlayerRanks( aRankData ), get_pcvar_num( pCvar_Top ) ) );

if( iTotal )
{
static szMOTD[ 2500 ], iDefaultLen;
if( !iDefaultLen )
{
iDefaultLen = copy( szMOTD, charsmax( szMOTD ), "<body><table align=center border=1><thead><tr><th>#.</th><th>Nume</th><th>Points</th></tr></thead><tbody>" );
}

new iLen = iDefaultLen;

new eRankData[ RankData ];

new szFixedName[ 128 ];

for( new i = 0; i < iTotal; i++ )
{
ArrayGetArray( aRankData, i, eRankData );

copy( szFixedName, charsmax( szFixedName ), eRankData[ Rank_Name ] );

MakeNameMOTDSafe( szFixedName, 31 );

iLen += formatex( szMOTD[ iLen ], charsmax( szMOTD ) - iLen, "<tr><td>%i</td><td>%s</td><td>%i</td></tr>", ( i + 1 ), szFixedName, eRankData[ Rank_Kills ] );
}

copy( szMOTD[ iLen ], charsmax( szMOTD ) - iLen, "</tbody></table></body>" );

show_motd( iPlayer, szMOTD, "Top Players" );
}
else
{
client_print( iPlayer, print_chat, "* Nu exista jucatori in top!" );
}

ArrayDestroy( aRankData );
}

public EventDeathMsg( )
{
new iVictim = read_data( 2 );

if( is_user_connected( iVictim ) )
{
new iKiller = read_data( 1 );

if( iVictim != iKiller
&& is_user_connected( iKiller ) )
{
// killed by another player

new szName[ 32 ], szSteamID[ 35 ];
get_user_authid( iKiller, szSteamID, charsmax( szSteamID ) );

new szKills[ 48 ], iKills;
if( fvault_get_data( g_szVaultName, szSteamID, szKills, charsmax( szKills ) ) )
{
strbreak( szKills, szKills, charsmax( szKills ), szName, charsmax( szName ) );

iKills = str_to_num( szKills );
}

new points = get_pcvar_num(pCvar_KillPoints);
if( get_user_team( iVictim ) == get_user_team( iKiller ) )
{
// killed by a teammate

iKills -= points;
}
else
{
// killed by an enemy

iKills += points;
}

get_user_name( iKiller, szName ,charsmax( szName ) );

formatex( szKills, charsmax( szKills ), "%i %s", iKills, szName );

fvault_set_data( g_szVaultName, szSteamID, szKills );
get_user_name(iVictim, szName, charsmax(szName));
client_print(iKiller, print_chat, "* L-ai omorat pe %s si ai primit %i punct%s!", szName, points, ( points == 1 ) ? "" : "e" );

}
else
{
// killed self somehow
}
}
}

GetPlayerRanks( &Array:aRankData )
{
aRankData = ArrayCreate( RankData );
new iTotal;

new eRankData[ RankData ];

new szFileName[ 128 ];
_FormatVaultName( g_szVaultName, szFileName, charsmax( szFileName ) );

new iFile = fopen( szFileName, "rt" );

if( !iFile )
{
return iTotal;
}

new szFileData[ 128 ];
new szKills[ 48 ];

while( !feof( iFile ) )
{
fgets( iFile, szFileData, charsmax( szFileData ) );
trim( szFileData );

if( !szFileData[ 0 ] )
{
continue;
}

parse( szFileData, eRankData[ Rank_SteamID ], charsmax( eRankData[ Rank_SteamID ] ), szKills, charsmax( szKills ) );
strbreak( szKills, szKills, charsmax( szKills ), eRankData[ Rank_Name ], charsmax( eRankData[ Rank_Name ] ) );
eRankData[ Rank_Kills ] = str_to_num( szKills );

ArrayPushArray( aRankData, eRankData );

iTotal++;
}

fclose( iFile );

ArraySort( aRankData, "SortData" );

return iTotal;
}

public SortData( Array:aData, iIndex1, iIndex2, const iSortData[ ], iSortDataSize )
{
new eData1[ RankData ], eData2[ RankData ];
ArrayGetArray( aData, iIndex1, eData1 );
ArrayGetArray( aData, iIndex2, eData2 );

return clamp( ( eData2[ Rank_Kills ] - eData1[ Rank_Kills ] ), -1, 1 );
}

stock MakeNameMOTDSafe( szName[ 128 ], iMaxChars )
{
szName[ 32 ] = 0;

replace_all( szName, 127, "&", "&amp;" );
replace_all( szName, 127, "<", "&lt;" );
replace_all( szName, 127, ">", "&gt;" );
replace_all( szName, 127, "^"", "&quot;" );

if( iMaxChars > 128 ) return;

new iLast;
for( new i = 0; i < 128 && szName[ i ]; )
{
if( szName[ i ] == '&' )
{
if( equal( szName[ i ], "&amp;", 5 ) )
{
i += 4;
}
else if( equal( szName[ i ], "&quot;", 6 ) )
{
i += 5;
}
else if( equal( szName[ i ], "&lt;", 4 ) || equal( szName[ i ], "&gt;", 4 ) )
{
i += 3;
}
}

if( ++i > iMaxChars )
{
break;
}

iLast = i;
}

szName[ iLast ] = 0;
}

CastaNa1337
24-03-2018, 12:01 PM
Mersi f f mult ai putea sa l faci te rog frumos steam/non steam?
+ EDIT: nu functioneaza plugin-ul cand omor pe cineva nu ma anunta in chat : L ai omorat pe x ulescu ai primit 1 punct..