Veteran Member
Join Date: Jan 2016
Location: Romania
09-19-2016
, 14:56
Re: Add functions to this plugin. Modify plugin.
#6
Done:
Code
Code:
#include < amxmodx >
#include < amxmisc >
#include < fun >
#include < nvault >
#include < hamsandwich >
#include <cstrike>
#include <csx>
#define PLUGIN "Rank Mod"
#define VERSION "1.0"
#define AUTHOR "Blizzard"
#define cm(%0) ( sizeof(%0) - 1 )
#define MAXLEVEL 13
#define MAXAUTH 4
native setSpriteRender( id , indexSprite , render );
native addPlayerSprite(id,Float:scale,Float:frameRate,szModel[],Float:fAngle, Float:fLen, Float:fTime,Float:fDistance , bool: bTransparent );
enum _:mData {
m_szRankName[ 32 ],
m_szRankSprite[32],
m_iRankXP
};
enum {
STANDARD = 0,
MOD,
ADMIN,
LEADER
};
new const g_mPlayerData[ ][ mData ] = {
{"Silver 1", "sprites/slowdown3.spr", 0},
{"Silver 2", "sprites/test22.spr", 50},
{"Silver 3", "sprites/slowdown3.spr", 200},
{"Silver 4", "sprites/slowdown3.spr", 350},
{"Silver Elite", "sprites/slowdown3.spr", 600},
{"Gold Nova 1", "sprites/slowdown3.spr", 1000},
{"Gold Nova 2", "sprites/slowdown3.spr", 1500},
{"Gold Nova 3", "sprites/slowdown3.spr", 2500},
{"Gold Nova 4", "sprites/slowdown3.spr", 5000},
{"Master Guardian", "sprites/slowdown3.spr", 8250},
{"Master Guardian 2", "sprites/slowdown3.spr", 13500},
{"Master Guardian Elite", "sprites/slowdown3.spr", 20000},
{"DMG", "sprites/slowdown3.spr", 30000},
{"Legendary Eagle", "sprites/slowdown3.spr", 40000},
{"Legendery Eagle Master", "sprites/slowdown3.spr", 50000},
{"Supreme", "sprites/slowdown3.spr", 60000},
{"Global Elite", "sprites/slowdown3.spr", 70000},
{"RankName", "sprites/slowdown3.spr", 100000},
{"RankName", "sprites/slowdown3.spr", 150000}
};
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;
new gWinRound;
new gBombPlant;
new gBombDef;
new gDie;
new gLoseRound;
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 .rank", "cmdToggleHud" );
register_clcmd( "say /manage", "cmdManagePlayers" );
register_clcmd("say", "handle_say")
register_clcmd("say_team", "handle_team_say")
set_task(1.0, "taskSprite", _, _, _, "b");
// Cvars
gWinRound = register_cvar( "rm_xp_winround", "1" );
gBombPlant = register_cvar( "rm_xp_bombplant", "1" );
gBombDef = register_cvar( "rm_xp_bombdef", "1" );
gDie = register_cvar( "rm_xp_die", "1" );
gLoseRound = register_cvar( "rm_xp_looseround", "1" );
// Wins event:
register_event("TeamScore", "Event_TeroWin", "a", "1=TERRORIST")
register_event("TeamScore", "Event_CTWin", "a", "1=CT")
}
public Event_TeroWin( )
{
new Players[32], PlayersCount;
get_players( Players, PlayersCount, "a" );
for( new i=0; i < PlayersCount; i++ )
{
switch ( cs_get_user_team( Players[i] ) )
{
case CS_TEAM_T: g_iPlayerXP[ Players[i] ] += get_pcvar_num( gWinRound )
case CS_TEAM_CT: g_iPlayerXP[ Players[i] ] -= get_pcvar_num( gLoseRound )
}
}
}
public Event_CTWin( )
{
new Players[32], PlayersCount;
get_players( Players, PlayersCount, "a" );
for( new i=0; i < PlayersCount; i++ )
{
switch ( cs_get_user_team( Players[i] ) )
{
case CS_TEAM_T: g_iPlayerXP[ Players[i] ] -= get_pcvar_num( gLoseRound )
case CS_TEAM_CT: g_iPlayerXP[ Players[i] ] += get_pcvar_num( gWinRound)
}
}
}
public bomb_defused( id )
{
if( is_user_alive( id ) && get_pcvar_num( gBombDef) )
g_iPlayerXP[ id ] += get_pcvar_num( gBombDef );
}
public bomb_planted( id )
{
if( is_user_alive( id ) && get_pcvar_num( gBombPlant) )
g_iPlayerXP[ id ] += get_pcvar_num( gBombPlant );
}
public taskSprite(){
for(new i ; i < 33 ; i++ ){
if( ! is_user_alive(i))
continue;
addPlayerSprite(i, 0.02, 10.0, g_mPlayerData[g_iPlayerLevel[i]][m_szRankSprite], 20.0, 10.0, 1.0, 13.0, true);
}
}
public plugin_precache( ) {
precache_sound( g_sLevelUp );
for(new i ; i < sizeof g_mPlayerData ; i++ )
precache_model(g_mPlayerData[i][m_szRankSprite])
}
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( get_pcvar_num( gDie ) )
{
g_iPlayerXP[ iVictim ] -= get_pcvar_num( gDie );
}
if( HeadShot && weapon == CSW_KNIFE )
g_iPlayerXP[ iKiller ] += 5;
else if( HeadShot )
g_iPlayerXP[ iKiller ] += 1;
else if( weapon == CSW_KNIFE && !HeadShot )
g_iPlayerXP[ iKiller ] += 1;
else if( weapon != CSW_KNIFE && !HeadShot )
g_iPlayerXP[ iKiller ] += 1;
else
g_iPlayerXP[ iKiller ] += 1;
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.51, 0, 6.0, 1.0, 0.0, 0.0, -1 );
if( g_iPlayerLevel[ id ] < MAXLEVEL ) {
show_hudmessage(id, "[ Rank: %s ]^n[ XP: %i / %i ]",
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, "[ Rank: %s ]^n[ XP: %i / %i ]",
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;
}
}
public handle_say(id){
new chat[192], none[2][32], message[192], name[192]
read_argv(1, chat, sizeof(chat) -1)
formatex(none[0], sizeof(none) -1, ""), formatex(none[1], sizeof(none) -1, " ")
if(!equali(chat, none[0]) && !equali(chat, none[1]))
{
get_user_name(id, name, sizeof(name) -1)
if(!is_user_alive(id))
{
formatex(message, sizeof(message) -1, "!g[%s]!n *DEAD* %s : %s", g_mPlayerData[ g_iPlayerLevel[ id ] ][ m_szRankName ], name, chat)
}
else
{
formatex(message, sizeof(message) -1, "!g[%s]!n %s : %s", g_mPlayerData[ g_iPlayerLevel[ id ] ][ m_szRankName ], name , chat)
}
Color(0, message)
}
return PLUGIN_HANDLED_MAIN;
}
public handle_team_say(id){
new chat[192], none[2][32], message[192], message2[192], name[192]
read_argv(1, chat, sizeof(chat) -1)
formatex(none[0], sizeof(none) -1, ""), formatex(none[1], sizeof(none) -1, " ")
if(!equali(chat, none[0]) && !equali(chat, none[1]))
{
get_user_name(id, name, sizeof(name) -1)
switch(cs_get_user_team(id))
{
case CS_TEAM_CT: {
if(!is_user_alive(id))
formatex(message, sizeof(message) -1, "!g[%s]!n (Counter-Terrorists) *DEAD* %s : %s", g_mPlayerData[ g_iPlayerLevel[ id ] ][ m_szRankName ], name, chat)
else
formatex(message, sizeof(message) -1, "!g[%s]!n (Counter-Terrorists) %s : %s", g_mPlayerData[ g_iPlayerLevel[ id ] ][ m_szRankName ], name, chat)
new iPlayers[32], iNum, iPid
get_players(iPlayers, iNum)
for(new i; i < iNum; i++)
{
iPid = iPlayers[i]
if(cs_get_user_team(iPid) != CS_TEAM_CT)
continue;
Color(iPid, message)
}
}
case CS_TEAM_T: {
if(!is_user_alive(id))
formatex(message2, sizeof(message2) -1, "!g[%s]!n (Terrorists) *DEAD* %s : %s", g_mPlayerData[ g_iPlayerLevel[ id ] ][ m_szRankName ], name, chat)
else
formatex(message2, sizeof(message2) -1, "!g[%s]!n (Terrorists)^3 %s : %s", g_mPlayerData[ g_iPlayerLevel[ id ] ][ m_szRankName ], name, chat)
new iPlayers[32], iNum, iPid
get_players(iPlayers, iNum)
for(new i; i< iNum; i++)
{
iPid = iPlayers[i]
if(cs_get_user_team(iPid) != CS_TEAM_T)
continue
Color(iPid, message2)
}
}
}
return PLUGIN_HANDLED_MAIN;
}
return PLUGIN_CONTINUE;
}
Cvars:
rm_xp_winround '1'
rm_xp_bombplant '1'
rm_xp_bombdef '1'
rm_xp_die '1'
rm_xp_looseround '1'
Note:
I didn't test because i'm hurry up, i spend just 5 minutes to make it fast because i need to go so i'm not sure if i miss something, also i didn't post any message, like "you win X% xp' or something like that, so i waiting your answer after you testing, cheez.
__________________
Project: Among Us
Last edited by Craxor; 09-21-2016 at 03:42 .