Пример :
[Mayor] Player : Hi all
Също искам да махна hostname , timeleft и status от плъгина
Да пише само ранк и xp
Код за потвърждение: Избери целия код
/*
Blizzards Plugins Comply With GNU General Public License
Rank Mod is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Under no circumstances are you allowed to redistribute and/or modify
it claming that you are the original author of such plugin/modification.
Rank Mod is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include < amxmodx >
#include < amxmisc >
#include < fun >
#include < nvault >
#include < hamsandwich >
#pragma semicolon 1
#define PLUGIN "Rank Mod"
#define VERSION "1.0"
#define AUTHOR "Blizzard"
#define cm(%0) ( sizeof(%0) - 1 )
#define MAXLEVEL 13
#define MAXAUTH 4
enum _:mData {
m_szRankName[ 32 ],
m_iRankXP
};
enum {
STANDARD = 0,
MOD,
ADMIN,
LEADER
};
new const g_mPlayerData[ ][ mData ] = {
{ "Private", 0 },
{ "Specialist", 50 },
{ "Corporal", 200 },
{ "Sargeant", 350 },
{ "Staff Sargeant", 600 },
{ "Warrant Officer", 1000 },
{ "Chief Warrant Officer", 1500 },
{ "Second Lieutenant", 2500 },
{ "First Lieutenant", 5000 },
{ "Captain", 8250 },
{ "Major", 13500 },
{ "Colonel", 20000 },
{ "General", 30000 },
{ "General of The Army", 45000 }
};
new const g_mPlayerAuth[ ][ ] = {
"Standard", "Moderator", "Admin", "Leader"
};
new const g_sLevelUp[ ] = { "RankMod/Rank-Mod-LvlUp.mp3" };
// Integers
new g_iPlayerXP[ 33 ] = 0;
new g_iPlayerLevel[ 33 ] = 0;
new g_iPlayerStatus[ 33 ] = 3;
// Booleans
new g_bToggleHud[ 33 ] = true;
new g_bAdvertSeen[ 33 ] = false;
// Strings
new g_szHostName[ 64 ];
// Cvars
new g_Vault;
public plugin_init() {
register_plugin( PLUGIN, VERSION, AUTHOR );
// Register Events
register_event( "DeathMsg", "Event_DeathMsg", "a" );
// Register Messages
register_message( get_user_msgid( "StatusValue" ), "msgStatusValue" );
// Register Ham
RegisterHam( Ham_Spawn, "player", "CBase_PlayerPost_Spawn", 1 );
// Register Client Commands
register_clcmd( "say /hud", "cmdToggleHud" );
register_clcmd( "say /manage", "cmdManagePlayers" );
}
public plugin_precache( ) {
precache_sound( g_sLevelUp );
}
public plugin_cfg( ) {
get_cvar_string( "hostname", g_szHostName, cm( g_szHostName ) );
g_Vault = nvault_open( "Rank-Mod" );
}
public client_authorized( id ) {
if( has_flag( id, "a" ) )
g_iPlayerStatus[ id ] = LEADER;
else if( has_flag( id, "b" ) )
g_iPlayerStatus[ id ] = ADMIN;
else if( has_flag( id, "c" ) )
g_iPlayerStatus[ id ] = MOD;
else if( has_flag( id, "z" ) )
g_iPlayerStatus[ id ] = STANDARD;
}
public client_putinserver( id ) {
g_bToggleHud[ id ] = true;
g_bAdvertSeen[ id ] = false;
set_task( 0.9, "ShowHud", id, _, _, "b" );
LoadData( id );
}
public CBase_PlayerPost_Spawn( id ) {
if( !g_bAdvertSeen[ id ] ) {
Color( id, "!nWelcome !g%s!n, This Server Is Running !g%s v%s!n By !g%s!n", get_nick( id ), PLUGIN, VERSION, AUTHOR );
g_bAdvertSeen[ id ] = true;
}
}
public client_disconnect( id ) {
SaveData( id );
}
public Event_DeathMsg( ) {
new iKiller = read_data( 1 );
new iVictim = read_data( 2 );
new HeadShot = read_data( 3 );
new clip, ammo, weapon = get_user_weapon( iKiller, clip, ammo );
if( iVictim != iKiller ) {
if( HeadShot && weapon == CSW_KNIFE )
g_iPlayerXP[ iKiller ] += 30;
else if( HeadShot )
g_iPlayerXP[ iKiller ] += 10;
else if( weapon == CSW_KNIFE && !HeadShot )
g_iPlayerXP[ iKiller ] += 30;
else if( weapon != CSW_KNIFE && !HeadShot )
g_iPlayerXP[ iKiller ] += 5;
else
g_iPlayerXP[ iKiller ] += 5;
if( g_iPlayerLevel[ iKiller ] < MAXLEVEL ) {
if( g_iPlayerXP[ iKiller ] >= g_mPlayerData[ g_iPlayerLevel[ iKiller ] + 1 ][ m_iRankXP ] ) {
g_iPlayerLevel[ iKiller ]++;
set_dhudmessage( 0, 255, 0, -1.0, 0.60, 1, 3.0, 3.0, 1.5, 1.5 );
show_dhudmessage( iKiller, "You Have Been Promoted To^n^n-= %s =-", g_mPlayerData[ g_iPlayerLevel[ iKiller ] ][ m_szRankName ] );
client_cmd( iKiller, "mp3 play sound/%s", g_sLevelUp );
}
}
}
}
// Toggle Showing Hud Message On / Off
public cmdToggleHud( id ) {
g_bToggleHud[ id ] = !g_bToggleHud[ id ];
return PLUGIN_HANDLED;
}
// Shows The Rank Information Message
public ShowHud( id ) {
if( g_bToggleHud[ id ] ) {
set_hudmessage(0, 255, 0, 0.01, 0.18, 0, 6.0, 1.0, 0.0, 0.0, -1 );
if( g_iPlayerLevel[ id ] < MAXLEVEL ) {
show_hudmessage(id, "[ %s ]^n^n[ Rank: -= %s =- ]^n[ XP: %i / %i ]^n^n[ TimeLeft: %d:%02d ]^n^n[ Status: %s ]",
g_szHostName,
g_mPlayerData[ g_iPlayerLevel[ id ] ][ m_szRankName ],
g_iPlayerXP[ id ],
g_mPlayerData[ g_iPlayerLevel[ id ] + 1 ][ m_iRankXP ],
get_timeleft( ) / 60,
get_timeleft( ) % 60,
g_mPlayerAuth[ g_iPlayerStatus[ id ] ] );
} else {
show_hudmessage(id, "[ %s ]^n^n[ Rank: -= %s =- ]^n[ XP: %i ]^n^n[ TimeLeft: %d:%02d ]^n^n[ Status: %s ]",
g_szHostName,
g_mPlayerData[ g_iPlayerLevel[ id ] ][ m_szRankName ],
g_iPlayerXP[ id ],
get_timeleft( ) / 60,
get_timeleft( ) % 60,
g_mPlayerAuth[ g_iPlayerStatus[ id ] ] );
}
}
}
////////////////////
// StatusValueMsg //
////////////////////
public msgStatusValue( msgid, dest, id ) {
new flag, value;
flag = get_msg_arg_int( 1 );
value = get_msg_arg_int( 2 );
if( !value ) {
return PLUGIN_CONTINUE;
}
if( flag == 2 ) {
new text[ 128 ];
if( get_user_team( value ) == get_user_team( id ) )
formatex( text, charsmax( text ), "1 %%p2 HP: %d ( %s )", get_user_health( value ), g_mPlayerData[ g_iPlayerLevel[ value ] ][ m_szRankName ] );
else
formatex( text, charsmax( text ), "1 %%p2 ( %s )", g_mPlayerData[ g_iPlayerLevel[ value ] ][ m_szRankName ] );
message_begin( MSG_ONE_UNRELIABLE, get_user_msgid( "StatusText" ), _, id );
write_byte( 0 );
write_string( text );
message_end( );
}
return PLUGIN_CONTINUE;
}
//////////////////////////////////
/* MANAGE PLAYERS RANKS */
//////////////////////////////////
public cmdManagePlayers( id ) {
if( !has_flag( id, "a" ) )
return PLUGIN_HANDLED;
new menu = menu_create( "Manage Player Ranks:", "Players_Handler" );
new iPlayers[ 32 ], iNum, i, Players;
new szUserID[ 32 ], szName[ 64 ];
get_players( iPlayers, iNum );
for( i = 0; i < iNum; i++ ) {
Players = iPlayers[ i ];
formatex( szName, cm( szName ), "%s ( \r%s\w )", get_nick( Players ), g_mPlayerData[ g_iPlayerLevel[ Players ] ][ m_szRankName ] );
formatex( szUserID, cm( szUserID ), "%d", get_user_userid( Players ) );
menu_additem( menu, szName, szUserID );
}
menu_display( id, menu );
return PLUGIN_HANDLED;
}
public Players_Handler( id, menu, item ) {
if( item == MENU_EXIT ) {
menu_destroy( menu );
return PLUGIN_HANDLED;
}
new item_access, callback;
new info[ 64 ], name[ 32 ];
menu_item_getinfo( menu, item, item_access, info, cm( info ), name, cm( name ), callback );
new userid = str_to_num( info );
new player = find_player( "k", userid );
ChoosePlayerRank( id, player );
return PLUGIN_HANDLED;
}
public ChoosePlayerRank( index, Choosen ) {
new szTitle[ 101 ], szChoosen[ 5 ];
formatex( szTitle, cm( szTitle ), "Change \r%s\y Rank To:", get_nick( Choosen ) );
new menu = menu_create( szTitle, "PlayerRank_Handler" );
num_to_str( Choosen, szChoosen, cm( szChoosen ) );
for( new i = 0; i < sizeof( g_mPlayerData ); i++ )
menu_additem( menu, g_mPlayerData[ i ][ m_szRankName ], szChoosen );
menu_display( index, menu );
return PLUGIN_HANDLED;
}
public PlayerRank_Handler( id, menu, item ) {
if( item == MENU_EXIT ) {
menu_destroy( menu );
return PLUGIN_HANDLED;
}
new item_access, callback;
new info[ 64 ], name[ 32 ];
menu_item_getinfo( menu, item, item_access, info, cm( info ), name, cm( name ), callback );
new player = str_to_num( info );
g_iPlayerXP[ player ] = g_mPlayerData[ item ][ m_iRankXP ];
g_iPlayerLevel[ player ] = item;
set_dhudmessage( 0, random( 256 ), 0, -1.0, 0.60, 1, 3.0, 3.0, 1.5, 1.5 );
show_dhudmessage( player, "ADMIN: %s Has Changed Your Rank To^n^n-= %s =-",
get_nick( id ),
g_mPlayerData[ g_iPlayerLevel[ player ] ][ m_szRankName ] );
client_cmd( player, "mp3 play sound/%s", g_sLevelUp );
menu_destroy( menu );
return PLUGIN_HANDLED;
}
public plugin_end( ) {
nvault_close( g_Vault );
}
///////////////////////////////////
/* STOCKS */
///////////////////////////////////
stock Color( id, String[ ], any:... ) {
static szMsg[ 192 ];
vformat( szMsg, charsmax( szMsg ), String, 3 );
replace_all( szMsg, charsmax( szMsg ), "!n", "^1" );
replace_all( szMsg, charsmax( szMsg ), "!t", "^3" );
replace_all( szMsg, charsmax( szMsg ), "!g", "^4" );
static msgSayText = 0;
if( !msgSayText ) msgSayText = get_user_msgid( "SayText" );
new Players[ 32 ], iNum = 1, i;
if( id ) Players[ 0 ] = id;
else get_players( Players, iNum, "ch" );
for( --iNum; iNum >= 0; iNum-- ) {
i = Players[ iNum ];
message_begin( MSG_ONE_UNRELIABLE, msgSayText, _, i );
write_byte( i );
write_string( szMsg );
message_end( );
}
}
stock get_nick( index ) {
new szName[ 32 ]; get_user_name( index, szName, cm( szName ) );
return szName;
}
//////////////////////////////////////////
/* DHUD MESSAGE STOCKS */
//////////////////////////////////////////
stock __dhud_color;
stock __dhud_x;
stock __dhud_y;
stock __dhud_effect;
stock __dhud_fxtime;
stock __dhud_holdtime;
stock __dhud_fadeintime;
stock __dhud_fadeouttime;
stock __dhud_reliable;
stock set_dhudmessage( red = 0, green = 160, blue = 0, Float:x = -1.0, Float:y = 0.65, effects = 2, Float:fxtime = 6.0, Float:holdtime = 3.0, Float:fadeintime = 0.1, Float:fadeouttime = 1.5, bool:reliable = false )
{
#define clamp_byte(%1) ( clamp( %1, 0, 255 ) )
#define pack_color(%1,%2,%3) ( %3 + ( %2 << 8 ) + ( %1 << 16 ) )
__dhud_color = pack_color( clamp_byte( red ), clamp_byte( green ), clamp_byte( blue ) );
__dhud_x = _:x;
__dhud_y = _:y;
__dhud_effect = effects;
__dhud_fxtime = _:fxtime;
__dhud_holdtime = _:holdtime;
__dhud_fadeintime = _:fadeintime;
__dhud_fadeouttime = _:fadeouttime;
__dhud_reliable = _:reliable;
return 1;
}
stock show_dhudmessage( index, const message[], any:... )
{
new buffer[ 128 ];
new numArguments = numargs();
if( numArguments == 2 )
{
send_dhudMessage( index, message );
}
else if( index || numArguments == 3 )
{
vformat( buffer, charsmax( buffer ), message, 3 );
send_dhudMessage( index, buffer );
}
else
{
new playersList[ 32 ], numPlayers;
get_players( playersList, numPlayers, "ch" );
if( !numPlayers )
{
return 0;
}
new Array:handleArrayML = ArrayCreate();
for( new i = 2, j; i < numArguments; i++ )
{
if( getarg( i ) == LANG_PLAYER )
{
while( ( buffer[ j ] = getarg( i + 1, j++ ) ) ) {}
j = 0;
if( GetLangTransKey( buffer ) != TransKey_Bad )
{
ArrayPushCell( handleArrayML, i++ );
}
}
}
new size = ArraySize( handleArrayML );
if( !size )
{
vformat( buffer, charsmax( buffer ), message, 3 );
send_dhudMessage( index, buffer );
}
else
{
for( new i = 0, j; i < numPlayers; i++ )
{
index = playersList[ i ];
for( j = 0; j < size; j++ )
{
setarg( ArrayGetCell( handleArrayML, j ), 0, index );
}
vformat( buffer, charsmax( buffer ), message, 3 );
send_dhudMessage( index, buffer );
}
}
ArrayDestroy( handleArrayML );
}
return 1;
}
stock send_dhudMessage( const index, const message[] )
{
message_begin( __dhud_reliable ? ( index ? MSG_ONE : MSG_ALL ) : ( index ? MSG_ONE_UNRELIABLE : MSG_BROADCAST ), SVC_DIRECTOR, _, index );
{
write_byte( strlen( message ) + 31 );
write_byte( DRC_CMD_MESSAGE );
write_byte( __dhud_effect );
write_long( __dhud_color );
write_long( __dhud_x );
write_long( __dhud_y );
write_long( __dhud_fadeintime );
write_long( __dhud_fadeouttime );
write_long( __dhud_holdtime );
write_long( __dhud_fxtime );
write_string( message );
}
message_end();
}
//////////////////////////////////
/* SAVE/LOAD STOCKS */
//////////////////////////////////
stock SaveData( index ) {
new szAuthID[ 35 ], szData[ 64 ];
get_user_authid( index, szAuthID, cm( szAuthID ) );
formatex( szData, cm( szData ), "%i %i", g_iPlayerXP[ index ], g_iPlayerLevel[ index ] );
nvault_set( g_Vault, szAuthID, szData );
}
stock LoadData( index ) {
new szAuthID[ 35 ], szData[ 64 ];
get_user_authid( index, szAuthID, cm( szAuthID ) );
new XP[ 32 ], LVL[ 15 ];
if( nvault_get( g_Vault, szAuthID, szData, cm( szData ) ) &&
parse( szData, XP, 31, LVL, 14 ) ) {
g_iPlayerXP[ index ] = str_to_num( XP );
g_iPlayerLevel[ index ] = str_to_num( LVL );
} else {
g_iPlayerXP[ index ] = 0;
g_iPlayerLevel[ index ] = 0;
}
}