Ще ми помогне ли някой с преработката на ето този код:
Код за потвърждение: Избери целия код
#include <amxmodx>
#include <csstats>
#define IGNORE_FLAG ADMIN_LEVEL_A /* flag "m" */
new pRanks, pFlags
public plugin_init() {
register_plugin( "Top Awards", "0.11c", "Safety1st" )
register_dictionary( "topawards.txt" )
pRanks = register_cvar( "top_ranks", "10" )
pFlags = register_cvar( "top_flags", "r" )
}
public client_putinserver(id) {
set_task( 0.3, "CheckStats", id ) // we need to use delay otherwise we will get rank = 0
}
public CheckStats(id) {
new iFlags = get_user_flags(id)
new szAddFlags[16]
get_pcvar_string( pFlags, szAddFlags, 15 )
new iAddFlags = read_flags(szAddFlags)
if ( iFlags & IGNORE_FLAG || iFlags & iAddFlags == iAddFlags )
// ignore player with IGNORE_FLAG or having all additional flags
return
new iRanks = get_pcvar_num(pRanks)
if ( !iRanks )
return
new szStats[8], szBodyHits[8]
new iRank = get_user_stats( id, szStats, szBodyHits )
if ( iRank && iRank <= iRanks ) {
// 1st check for safety. may be player not ranked at all yet
set_user_flags( id, iFlags | iAddFlags )
new data[2]
data[0] = id
data[1] = iRanks
set_task( 5.0, "PrintMessage", _, data, 2 )
}
}
public PrintMessage( data[2] ) {
if ( !is_user_connected(data[0]) )
return
ColorPrint( data[0], "%L", data[0], "TOP_AWARDS", data[1] )
}
ColorPrint( iReceiver, const szRawMessage[ ], any:... ) {
static iMsgSayText = 0
if( !iMsgSayText )
iMsgSayText = get_user_msgid( "SayText" )
new szMessage[192]
vformat( szMessage, charsmax(szMessage) - 1, szRawMessage, 3 )
replace_all( szMessage, charsmax(szMessage) - 1, "!n", "^1" )
replace_all( szMessage, charsmax(szMessage) - 1, "!t", "^3" )
replace_all( szMessage, charsmax(szMessage) - 1, "!g", "^4" )
if ( szMessage[0] != '^1' || szMessage[0] != '^3' || szMessage[0] != '^4' )
format( szMessage, charsmax(szMessage) - 1, "^1%s", szMessage ) // we must set initial default color if it is not provided explicitly
message_begin( MSG_ONE_UNRELIABLE, iMsgSayText, _, iReceiver )
write_byte(iReceiver) // use target player as sender to see colors at all (and his own team color for ^3)
write_string(szMessage)
message_end()
}
Аз искам ако може плъгина да е променен така, че да прави това:
-в Топ100 - да дава access flag "r"
-в Топ30 - да дава access flag "s"
-в Топ10 - да дава access flag "t"
И съответно да "информира пак за придобиването на различните "флагове".
p.s. Дали ще работи правилно ако променя кода ето така, и какво да добавя, всеки следващ флаг да премахва или "игнорира" предишния и да има и други две съобщения за Топ100 и Топ30 в "topawards.txt":
Код за потвърждение: Избери целия код
#include <amxmodx>
#include <csstats>
#define IGNORE_FLAG ADMIN_LEVEL_A /* flag "m" */
new pRanks, pFlags
public plugin_init() {
register_plugin( "Top Awards", "0.11c", "Safety1st" )
register_dictionary( "topawards.txt" )
pRanks = register_cvar( "top_ranks", "100" )
pFlags = register_cvar( "top_flags", "r" )
pRanks = register_cvar( "top_ranks", "30" )
pFlags = register_cvar( "top_flags", "s" )
pRanks = register_cvar( "top_ranks", "10" )
pFlags = register_cvar( "top_flags", "t")
}
public client_putinserver(id) {
set_task( 0.3, "CheckStats", id ) // we need to use delay otherwise we will get rank = 0
}
public CheckStats(id) {
new iFlags = get_user_flags(id)
new szAddFlags[16]
get_pcvar_string( pFlags, szAddFlags, 15 )
new iAddFlags = read_flags(szAddFlags)
if ( iFlags & IGNORE_FLAG || iFlags & iAddFlags == iAddFlags )
// ignore player with IGNORE_FLAG or having all additional flags
return
new iRanks = get_pcvar_num(pRanks)
if ( !iRanks )
return
new szStats[8], szBodyHits[8]
new iRank = get_user_stats( id, szStats, szBodyHits )
if ( iRank && iRank <= iRanks ) {
// 1st check for safety. may be player not ranked at all yet
set_user_flags( id, iFlags | iAddFlags )
new data[2]
data[0] = id
data[1] = iRanks
set_task( 5.0, "PrintMessage", _, data, 2 )
}
}
public PrintMessage( data[2] ) {
if ( !is_user_connected(data[0]) )
return
ColorPrint( data[0], "%L", data[0], "TOP_AWARDS", data[1] )
}
ColorPrint( iReceiver, const szRawMessage[ ], any:... ) {
static iMsgSayText = 0
if( !iMsgSayText )
iMsgSayText = get_user_msgid( "SayText" )
new szMessage[192]
vformat( szMessage, charsmax(szMessage) - 1, szRawMessage, 3 )
replace_all( szMessage, charsmax(szMessage) - 1, "!n", "^1" )
replace_all( szMessage, charsmax(szMessage) - 1, "!t", "^3" )
replace_all( szMessage, charsmax(szMessage) - 1, "!g", "^4" )
if ( szMessage[0] != '^1' || szMessage[0] != '^3' || szMessage[0] != '^4' )
format( szMessage, charsmax(szMessage) - 1, "^1%s", szMessage ) // we must set initial default color if it is not provided explicitly
message_begin( MSG_ONE_UNRELIABLE, iMsgSayText, _, iReceiver )
write_byte(iReceiver) // use target player as sender to see colors at all (and his own team color for ^3)
write_string(szMessage)
message_end()
}