Преработка на Top10 +add"flags" плъгин.

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
iv69
Извън линия
Потребител
Потребител
Мнения: 744
Регистриран на: 17 Мар 2018, 15:34
Се отблагодари: 214 пъти
Получена благодарност: 39 пъти

Преработка на Top10 +add"flags" плъгин.

Мнение от iv69 » 23 Сеп 2018, 14:37

Здравейте,

Ще ми помогне ли някой с преработката на ето този код:

Код за потвърждение: Избери целия код

#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()
}
В случая, плъгина дава на играчи в Top10 - access flag "r" , като едновременно с това изписва и съобщение в чата за придобиването на този флаг.
Аз искам ако може плъгина да е променен така, че да прави това:
-в Топ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()
}
Просто , ако е по-добре и лесно-напълно пренапишете кода или ми го преработете..достатъчно е да има това което съм описал. Благодаря !

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Преработка на Top10 +add"flags" плъгин.

Мнение от OciXCrom » 23 Сеп 2018, 19:58

Пренаписах го:

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <cromchat>
#include <csstats>

const IGNORE_FLAG = ADMIN_LEVEL_A
const Float:DELAY_ON_CONNECT = 0.3
const Float:DELAY_ON_MESSAGE = 5.0

enum _:Flags
{
	Rank,
	Flag[2]
}

new const g_eFlags[][Flags] =
{
	{ 10,  "t" },
	{ 30,  "s" },
	{ 100, "r" }
}

new g_iFlag[33]

public plugin_init()
{
	register_plugin("Top Awards", "1.0", "OciXCrom")
	register_dictionary("topawards.txt")
	CC_SetPrefix("&x04[Top Awards]")
}

public client_putinserver(id)
{
	g_iFlag[id] = 0
	set_task(DELAY_ON_CONNECT, "check_flags", id)
}

public check_flags(id)
{
	if(!is_user_connected(id) || get_user_flags(id) & IGNORE_FLAG)
		return

	new iStats[8], iHits[8]
	get_user_stats(id, iStats, iHits)

	new iRank = iStats[7]

	for(new i; i < sizeof(g_eFlags); i++)
	{
		if(iRank <= g_eFlags[i][Rank])
		{
			g_iFlag[id] = i
			set_user_flags(id, read_flags(g_eFlags[i][Flag]))
			set_task(DELAY_ON_MESSAGE, "send_message", id)
			break
		}
	}
}

public send_message(id)
{
	if(!is_user_connected(id))
		return

	CC_SendMessage(id, "%L", id, "TOPAWARD_GET", g_eFlags[g_iFlag[id]][Flag], g_eFlags[g_iFlag[id]][Rank])
}
data/lang/topawards.txt:

Код за потвърждение: Избери целия код

[en]
TOPAWARD_GET = You received the flag &x03%s &x01for having reached &x04rank #%i&x01.

Аватар
iv69
Извън линия
Потребител
Потребител
Мнения: 744
Регистриран на: 17 Мар 2018, 15:34
Се отблагодари: 214 пъти
Получена благодарност: 39 пъти

Преработка на Top10 +add"flags" плъгин.

Мнение от iv69 » 23 Сеп 2018, 21:51

Wow, яко, благодаря ще го пробвам веднага :)

Добавено преди 1 час 26 минути 34 секунди:
OciXCrom™ написа: 23 Сеп 2018, 19:58 Пренаписах го:

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <cromchat>
#include <csstats>

const IGNORE_FLAG = ADMIN_LEVEL_A
const Float:DELAY_ON_CONNECT = 0.3
const Float:DELAY_ON_MESSAGE = 5.0

enum _:Flags
{
	Rank,
	Flag[2]
}

new const g_eFlags[][Flags] =
{
	{ 100, "r" },
	{ 30,  "s" },
	{ 10,  "t" }
}

new g_iFlag[33]

public plugin_init()
{
	register_plugin("Top Awards", "1.0", "OciXCrom")
	register_dictionary("topawards.txt")
	CC_SetPrefix("&x04[Top Awards]")
}

public client_putinserver(id)
{
	g_iFlag[id] = 0
	set_task(DELAY_ON_CONNECT, "check_flags", id)
}

public check_flags(id)
{
	if(!is_user_connected(id) || get_user_flags(id) & IGNORE_FLAG)
		return

	new iStats[8], iHits[8]
	get_user_stats(id, iStats, iHits)

	new iRank = iStats[7]

	for(new i; i < sizeof(g_eFlags); i++)
	{
		if(iRank <= g_eFlags[i][Rank])
		{
			g_iFlag[id] = i
			set_user_flags(id, read_flags(g_eFlags[i][Flag]))
			set_task(DELAY_ON_MESSAGE, "send_message", id)
			break
		}
	}
}

public send_message(id)
{
	if(!is_user_connected(id))
		return

	CC_SendMessage(id, "%L", id, "TOPAWARD_GET", g_eFlags[g_iFlag[id]][Flag], g_eFlags[g_iFlag[id]][Rank])
}
data/lang/topawards.txt:

Код за потвърждение: Избери целия код

[en]
TOPAWARD_GET = You received the flag &x03%s &x01for having reached &x04rank #%i&x01.
Мисля , че засега работи добре и точно как исках, не мога веднага да установя всичко, понеже реснах топа, и дали наред всичко(главно дали с получаването на флаг за по-горно място се отменя или игнирира флага за по-долно, което може би не би трябвало да е проблем), нека поостане ден два отворена заявката. Пак благодаря, мисля си, четози плъгин ще стане доста популярен.

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Преработка на Top10 +add"flags" плъгин.

Мнение от OciXCrom » 23 Сеп 2018, 22:11

Всъщност да, аз грешно ги подредих флаговете. Сложи този за ранк 10 най-отгоре, след него 30 и най-отдолу 100, че в момента ако си ранк 10 ще получиш този за 100. Промених кода по-горе.

Аватар
iv69
Извън линия
Потребител
Потребител
Мнения: 744
Регистриран на: 17 Мар 2018, 15:34
Се отблагодари: 214 пъти
Получена благодарност: 39 пъти

Преработка на Top10 +add"flags" плъгин.

Мнение от iv69 » 24 Сеп 2018, 12:07

Мдаа, и аз установих това , но чак сега и веднага седнах да пиша :) хехе , плъгина работи перфектно, БЛАГОДАРЯ !!!
И не бях видял твоя отговор :)


:lock: :tnx:

Заключено
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Заявки за плъгини”

Кой е на линия

Потребители разглеждащи този форум: Bing [Bot], Google [Bot] и 22 госта