Страница 2 от 3

Re: Simple Glow Menu v1.2

Публикувано на: 16 Фев 2017, 20:52
от OciXCrom
TheRedShoko написа:

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

for(new i; i < ArraySize(g_aGlow); i++)
=>

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

new iSize = ArraySize(g_aGlow);
for (new i = 0; i < iSize; i++)
Само това виждам, ако някой колега вижда някоя друга забележка, нека каже. Може да пропускам нещо.
Горното важи само ако iSize е глобална променлива. Както си го направил - даже е по-неправилно, тъй като ползваш нова променлива за нещо, което се ползва само един път. Най-добре е след четене на файла да се запази големината в глобална променлива. Моята единствена забележка е това:

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

for(new i; i < ArraySize(g_aGlow); i++)
{
    static eGlow[GlowInfo]
Променливи не трябва да се създават в loop. Направи я извън него.

Re: Simple Glow Menu v1.2

Публикувано на: 16 Фев 2017, 21:25
от Unbr3akable
Done.

Re: Simple Glow Menu v1.2

Публикувано на: 16 Фев 2017, 21:39
от TheRedShoko
OciXCrom™ написа:
TheRedShoko написа:

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

for(new i; i < ArraySize(g_aGlow); i++)
=>

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

new iSize = ArraySize(g_aGlow);
for (new i = 0; i < iSize; i++)
Само това виждам, ако някой колега вижда някоя друга забележка, нека каже. Може да пропускам нещо.
Горното важи само ако iSize е глобална променлива. Както си го направил - даже е по-неправилно, тъй като ползваш нова променлива за нещо, което се ползва само един път. Най-добре е след четене на файла да се запази големината в глобална променлива. Моята единствена забележка е това:

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

for(new i; i < ArraySize(g_aGlow); i++)
{
    static eGlow[GlowInfo] 
Променливи не трябва да се създават в loop. Направи я извън него.
Напротив. ArraySize се извиква при всяко завъртане на цикъла, затова е по-правилно да се изнесе в променлива дори и за веднъж. Относно декларирането на променливи в цикъл - it's okay.
1. променливата е static, няма как да задели памет за няколко'
2. специално съм го проверявал, понеже в повечето езици за програмиране е така, ако декларираш променлива в тялото на цикъл тя се инстанцира само веднъж, т.е. не се заделя по няколко пъти памет, а само веднъж. Следял съм адресите в паметта и при 100 завъртания на цикъла, стойностите на променливите си остават на същото място в паметта.

Re: Simple Glow Menu v2.0

Публикувано на: 22 Апр 2017, 01:34
от Unbr3akable
UPDATE v2.0 @ 22.04.2017
  • Плъгинът е изцяло пренаписан и оптимизиран.
  • Променен е начина на добавяне на нови glow-ове.
  • Кваровете са премахнати и вече настройките се променят чрез конфигурационен файл.
  • Добавени са нови настройки.
  • Добавени са нови съобщения в lang файла.
  • Добавена е опция в менюто, която премахва glow-а ви.
  • В менюто срещу избрания от вас glow, ще изписва [SELECTED] и в заглавието ще изписва името на текущия ви glow.
  • Вече можете да добавяте повече от един флаг за достъп до менюто.

Simple Glow Menu v2.0

Публикувано на: 18 Дек 2017, 09:45
от Maverick
Добавих това в настроиките: Dark red = 135 0 0 и не работи, плюс това е достъпно само за Т отбора, а това е празно: GLOW_TEAM

Simple Glow Menu v2.0

Публикувано на: 09 Фев 2018, 19:16
от g0gIch
Ще може ли, менюто да се използва само от админ с флаг 'c' и от Simon. Пробвах аз, но не успях да направя каквото искам.

Simple Glow Menu v2.0

Публикувано на: 23 Мар 2018, 00:02
от Marinovv
Плъгина работи, но не препоръчвам използването на плъгина, за Respawn или Classic сървъри и подобни сървъри с този вид модове.

Използвайки този плъгин в Respawn сървъри ще ти свети само докато не умреш. После ще трябва отново да го избираш. :)

Simple Glow Menu v2.0

Публикувано на: 23 Мар 2018, 03:50
от deadlylord
Marinovv написа: 23 Мар 2018, 00:02 Плъгина работи, но не препоръчвам използването на плъгина, за Respawn или Classic сървъри и подобни сървъри с този вид модове.

Използвайки този плъгин в Respawn сървъри ще ти свети само докато не умреш. После ще трябва отново да го избираш. :)
Оправих го

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

#include <amxmodx>
#include <amxmisc>
#include <cromchat>
#include <formatin>
#include <fun>

#if AMXX_VERSION_NUM < 183
	#include <dhudmessage>
#endif

#define PLUGIN_VERSION "2.0"

enum _:Settings
{
	GLOW_TEAM,
	GLOW_FLAG,
	GLOW_TITLE[128],
	GLOW_TITLE_PAGE[64],
	GLOW_BACK_NAME[32],
	GLOW_NEXT_NAME[32],
	GLOW_EXIT_NAME[32],
	GLOW_PER_PAGE,
	GLOW_MESSAGE_TYPE,
	Float:GLOW_HUD_X,
	Float:GLOW_HUD_Y,
	GLOW_HUD_EFFECTS,
	Float:GLOW_HUD_EFFTIME,
	Float:GLOW_HUD_HOLDTIME
}

enum _:Glows
{
	NAME[32],
	COLOR[3]
}

enum
{
	SECTION_SETTINGS,
	SECTION_GLOWS
}

new Array:g_aGlows
new g_eSettings[Settings]
new g_iGlow[33]

new bool:isGlowing = false
static eGlows[Glows]

public plugin_init()
{
	register_plugin("Simple Glow Menu", PLUGIN_VERSION, "Unbr3akable")
	
	register_cvar("SimpleGlowMenu", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED)
	
	register_dictionary("SimpleGlowMenu.txt")
	
	register_event("ResetHUD", "sp_on", "be")
}

public sp_on(id)
{
	if(isGlowing == true)
	{
		set_task(0.1, "glow", id)
	}
}

public glow(id)
{
	set_user_rendering(id, kRenderFxGlowShell, eGlows[COLOR][0], eGlows[COLOR][1], eGlows[COLOR][2])
}
public plugin_cfg()
{
	g_aGlows = ArrayCreate(Glows)
	
	ReadFile()
}

public plugin_end()
{
	ArrayDestroy(g_aGlows)
}
	
ReadFile()
{
	new szConfigsDir[64]
	
	get_configsdir(szConfigsDir, charsmax(szConfigsDir))
	add(szConfigsDir, charsmax(szConfigsDir), "/SimpleGlowMenu.ini")
	
	new iFilePointer = fopen(szConfigsDir, "rt")
	
	if (iFilePointer)
	{
		new szData[160], szKey[32], szValue[128], eGlows[Glows], iSection, i
		
		ArrayPushString(g_aGlows, "\rNone")
		
		while (!feof(iFilePointer))
		{
			fgets(iFilePointer, szData, charsmax(szData))
			
			trim(szData)
			
			switch (szData[0])
			{
				case EOS, ';': continue
				case '[':
				{
					if (szData[strlen(szData) -1] == ']')
					{
						if (containi(szData, "settings") != -1)
						{
							iSection = SECTION_SETTINGS
						}
						else if (containi(szData, "glows") != -1)
						{
							iSection = SECTION_GLOWS
						}
					}
					
					else continue
				}
				default:
				{	
					switch (iSection)
					{
						case SECTION_SETTINGS:
						{
							strtok(szData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
					
							trim(szKey)
							trim(szValue)
							
							if (equal(szKey, "GLOW_COMMANDS"))
							{
								while (szValue[0] != 0 && strtok(szValue, szKey, charsmax(szKey), szValue, charsmax(szValue), ','))
								{
									trim(szKey)
									trim(szValue)
								
									register_clcmd(szKey, "cmdGlowMenu")
								}
							}
							else if (equal(szKey, "GLOW_PREFIX"))
							{
								CC_SetPrefix(szValue)
							}
							else if (equal(szKey, "GLOW_TEAM"))
							{
								g_eSettings[GLOW_TEAM] = clamp(str_to_num(szValue), 1, 3)
							}
							else if (equal(szKey, "GLOW_FLAG"))
							{
								g_eSettings[GLOW_FLAG] = szValue[0] == EOS ? ADMIN_ALL : read_flags(szValue)
							}
							else if (equal(szKey, "GLOW_TITLE"))
							{
								copy(g_eSettings[GLOW_TITLE], charsmax(g_eSettings[GLOW_TITLE]), szValue)
							}
							else if (equal(szKey, "GLOW_TITLE_PAGE"))
							{
								copy(g_eSettings[GLOW_TITLE_PAGE], charsmax(g_eSettings[GLOW_TITLE_PAGE]), szValue)
							}
							else if (equal(szKey, "GLOW_BACK_NAME"))
							{
								copy(g_eSettings[GLOW_BACK_NAME], charsmax(g_eSettings[GLOW_BACK_NAME]), szValue)
							}
							else if (equal(szKey, "GLOW_NEXT_NAME"))
							{
								copy(g_eSettings[GLOW_NEXT_NAME], charsmax(g_eSettings[GLOW_NEXT_NAME]), szValue)
							}
							else if (equal(szKey, "GLOW_EXIT_NAME"))
							{
								copy(g_eSettings[GLOW_EXIT_NAME], charsmax(g_eSettings[GLOW_EXIT_NAME]), szValue)
							}
							else if (equal(szKey, "GLOW_PER_PAGE"))
							{
								g_eSettings[GLOW_PER_PAGE] = clamp(str_to_num(szValue), 0, 7)
							}
							else if (equal(szKey, "GLOW_MESSAGE_TYPE"))
							{
								g_eSettings[GLOW_MESSAGE_TYPE] = clamp(str_to_num(szValue), 0, 2)
							}
							else if (equal(szKey, "GLOW_HUD_X"))
							{
								g_eSettings[GLOW_HUD_X] = _:floatclamp(str_to_float(szValue), -1.0, 1.0)
							}
							else if (equal(szKey, "GLOW_HUD_Y"))
							{
								g_eSettings[GLOW_HUD_Y] = _:floatclamp(str_to_float(szValue), -1.0, 1.0)
							}
							else if (equal(szKey, "GLOW_HUD_EFFECTS"))
							{
								g_eSettings[GLOW_HUD_EFFECTS] = clamp(str_to_num(szValue), 0, 2)
							}
							else if (equal(szKey, "GLOW_HUD_EFFTIME"))
							{
								g_eSettings[GLOW_HUD_EFFTIME] = _:str_to_float(szValue)
							}
							else if (equal(szKey, "GLOW_HUD_HOLDTIME"))
							{
								g_eSettings[GLOW_HUD_HOLDTIME] = _:str_to_float(szValue)
							}
						}
						case SECTION_GLOWS:
						{
							strtok(szData, eGlows[NAME], charsmax(eGlows[NAME]), szValue, charsmax(szValue), '=')
							
							trim(eGlows[NAME])
							trim(szValue)
							
							static szColor[3][4]
								
							parse(szValue, szColor[0], charsmax(szColor[]), szColor[1], charsmax(szColor[]), szColor[2], charsmax(szColor[]))
								
							for (i = 0; i < 3; i++)
							{
								eGlows[COLOR][i] = clamp(str_to_num(szColor[i]), 0, 255)
							}
							
							ArrayPushArray(g_aGlows, eGlows)
						}
					}
				}
			}
		}
		
		fclose(iFilePointer)
	}
}

public client_putinserver(id)
{
	g_iGlow[id] = 0
}
	
public cmdGlowMenu(id)
{
	if (~get_user_flags(id) & g_eSettings[GLOW_FLAG])
	{
		CC_SendMessage(id, "%L", id, "GLOW_NOACCESS")
		
		return PLUGIN_HANDLED
	}
	
	if (get_user_team(id) != g_eSettings[GLOW_TEAM] && g_eSettings[GLOW_TEAM] != EOS)
	{
		CC_SendMessage(id, "%L", id, "GLOW_NOTEAM")
		
		return PLUGIN_HANDLED
	}
	
	static szTitle[128], iMenu, i, eGlows[Glows]
	
	ArrayGetArray(g_aGlows, g_iGlow[id], eGlows)
	
	formatex(szTitle, charsmax(szTitle), g_eSettings[GLOW_TITLE], eGlows[NAME])
	
	replace_all(szTitle, charsmax(szTitle), "\n", "^n")
	replace_all(g_eSettings[GLOW_TITLE_PAGE], charsmax(g_eSettings[GLOW_TITLE_PAGE]), "\n", "^n")
	
	iMenu = menu_create(szTitle, "handlerGlowMenu")
	
	for (i = 0; i < ArraySize(g_aGlows); i++)
	{
		ArrayGetArray(g_aGlows, i, eGlows)
		
		menu_additem(iMenu, formatin("%s %s", eGlows[NAME], g_iGlow[id] == i ? formatin("%L", id, "GLOW_SELECTED") : formatin("")))
	}
	
	if (menu_pages(iMenu) > 1)
	{
		menu_setprop(iMenu, MPROP_TITLE, formatin("%s%s", szTitle, g_eSettings[GLOW_TITLE_PAGE]))
	}
		
	menu_setprop(iMenu, MPROP_BACKNAME, g_eSettings[GLOW_BACK_NAME])
	menu_setprop(iMenu, MPROP_NEXTNAME, g_eSettings[GLOW_NEXT_NAME])
	menu_setprop(iMenu, MPROP_EXITNAME, g_eSettings[GLOW_EXIT_NAME])
	menu_setprop(iMenu, MPROP_PERPAGE, g_eSettings[GLOW_PER_PAGE])
	
	menu_display(id, iMenu, 0)
	
	return PLUGIN_HANDLED
}

public handlerGlowMenu(id, iMenu, iItem)
{
	if (iItem != MENU_EXIT)
	{
		static szHudText[128]
		
		ArrayGetArray(g_aGlows, iItem, eGlows)
	
		formatex(szHudText, charsmax(szHudText), "%L", id, "GLOW_ONSELECT_HUD", eGlows[NAME])
		
		if (iItem == 0)
		{
			g_iGlow[id] = 0
			
			isGlowing = false
			
			set_user_rendering(id)
			
			CC_SendMessage(id, "%L", id, "GLOW_REMOVE")
			
			return PLUGIN_HANDLED
		}
		
		if (g_iGlow[id] == iItem)
		{
			CC_SendMessage(id, "%L", id, "GLOW_ALREADY")
		}
		else
		{
			g_iGlow[id] = iItem
			
			isGlowing = true
		
			set_user_rendering(id, kRenderFxGlowShell, eGlows[COLOR][0], eGlows[COLOR][1], eGlows[COLOR][2])
			
			switch (g_eSettings[GLOW_MESSAGE_TYPE])
			{
				case 0: CC_SendMessage(id, "%L", id, "GLOW_ONSELECT_CHAT", eGlows[NAME])
				case 1:
				{
					set_hudmessage(eGlows[COLOR][0], eGlows[COLOR][1], eGlows[COLOR][2], g_eSettings[GLOW_HUD_X], g_eSettings[GLOW_HUD_Y],
					g_eSettings[GLOW_HUD_EFFECTS], g_eSettings[GLOW_HUD_EFFTIME], g_eSettings[GLOW_HUD_HOLDTIME])
					
					show_hudmessage(id, szHudText)
				}
				case 2:
				{
					set_dhudmessage(eGlows[COLOR][0], eGlows[COLOR][1], eGlows[COLOR][2], g_eSettings[GLOW_HUD_X], g_eSettings[GLOW_HUD_Y],
					g_eSettings[GLOW_HUD_EFFECTS], g_eSettings[GLOW_HUD_EFFTIME], g_eSettings[GLOW_HUD_HOLDTIME])
					
					show_dhudmessage(id, szHudText)
				}
			}
		}
	}
	
	menu_destroy(iMenu)
	
	return PLUGIN_HANDLED
}
Вече можеш да го препоръчваш и за respawn сървъри :coolface:

Добавено преди 3 минути 13 секунди:

Къв автора,
Хубаво си направил 3 снимки на цветовете от менюто, но във файла от архива липсват и хората трябва да си ги добавят сами, би било хубаво да ги добавиш!
Направи настройката за отбор по подразбиране да бъде 0(тоест менюто да работи за двата отбора).
Проверката за грешен отбор е малко зле, тъй като можеш да си оставиш менюто отворено и да имаш glow като си част от грешния отбор
Направи нова настройка, която да запазва glow-a при respawn

Simple Glow Menu v2.0

Публикувано на: 05 Май 2018, 21:21
от Infamous2018
[Glow Menu] Your team isn't allowed to use the Glow Menu!

Ini:

GLOW_TEAM =
GLOW_FLAG = t

How to fix that? It works only for Terrorists but not for Counter !!! :/

Simple Glow Menu v2.0

Публикувано на: 05 Май 2018, 23:07
от cgozzie
МНЕНИЕТО Е СКРИТО ОТ СТРАНА НА МОДЕРАТОР! ЦЪКНИ ВЪРХУ ЛЕНТАТА ЗА ДА ГО ПРЕГЛЕДАШ.