Как да създам меню в което да излизат имената на играчите ?

Ако имате затруднения при изработката/преработката на даден плъгин - пишете тук, ще се опитаме да ви помогнем!
Аватар
User12
Извън линия
Потребител
Потребител
Мнения: 321
Регистриран на: 25 Яну 2018, 22:39
Местоположение: Сливен
Се отблагодари: 40 пъти
Получена благодарност: 17 пъти
Обратна връзка:

Как да създам меню в което да излизат имената на играчите ?

Мнение от User12 » 17 Мар 2018, 23:19

Както се вижда от заглавието , как мога да създам меню в което да изписва имената на играчите който са в сървъра ?
Пример :

Меню - Играчи в сървъра
1 - Nick
2 - Nick2
3 - Nick3
4 - Nick4
5 - Nick5 ....

9 - more
0 - Exit
Каналът ми в YouTube : Георги Пламенов

Изображение

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

Как да създам меню в което да излизат имената на играчите ?

Мнение от OciXCrom » 17 Мар 2018, 23:28

Създаваш менюто с menu_create, луупваш всички играчи с get_players ползвайки for-loop, в луупа запазваш името на играча в някяква променлива с get_user_name и добавяш го в менюто с menu_additem. В края ползваш menu_display за да покажеш менюто. Ще е хубаво първо да опиташ и да предоставиш код с който може да се работи.

Аватар
deadlylord
Извън линия
Потребител
Потребител
Мнения: 572
Регистриран на: 04 Апр 2017, 16:35
Местоположение: Бургас, България
Получена благодарност: 2 пъти
Обратна връзка:

Как да създам меню в което да излизат имената на играчите ?

Мнение от deadlylord » 17 Мар 2018, 23:31

Най-накрая! Дочаках момента да започнете да учите хората, вместо да им давате всичко на говото! При програминето е важен подхода!

Аватар
User12
Извън линия
Потребител
Потребител
Мнения: 321
Регистриран на: 25 Яну 2018, 22:39
Местоположение: Сливен
Се отблагодари: 40 пъти
Получена благодарност: 17 пъти
Обратна връзка:

Как да създам меню в което да излизат имената на играчите ?

Мнение от User12 » 17 Мар 2018, 23:57

Като начало не мога да разбера как да "луупна всички играчи" изпозлвайки "get_players" :huh:
Каналът ми в YouTube : Георги Пламенов

Изображение

Аватар
deadlylord
Извън линия
Потребител
Потребител
Мнения: 572
Регистриран на: 04 Апр 2017, 16:35
Местоположение: Бургас, България
Получена благодарност: 2 пъти
Обратна връзка:

Как да създам меню в което да излизат имената на играчите ?

Мнение от deadlylord » 18 Мар 2018, 00:08

new players[32], num
get_players(players, num)
for (new i = 0; i < num; i++)
{
//код за изпълнение
}

Това е for цикъла, както виждаш имаме локалната променлива I , която започва от 0 и с всяко минава през цикъла ще се качва с 1

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

Как да създам меню в което да излизат имената на играчите ?

Мнение от OciXCrom » 18 Мар 2018, 00:53

deadlylord написа: 17 Мар 2018, 23:31 Най-накрая! Дочаках момента да започнете да учите хората, вместо да им давате всичко на говото! При програминето е важен подхода!
Нали това е целта на този раздел. Наготово се дава в разделите за заявки.

Аватар
User12
Извън линия
Потребител
Потребител
Мнения: 321
Регистриран на: 25 Яну 2018, 22:39
Местоположение: Сливен
Се отблагодари: 40 пъти
Получена благодарност: 17 пъти
Обратна връзка:

Как да създам меню в което да излизат имената на играчите ?

Мнение от User12 » 18 Мар 2018, 02:08

До тук го направих така :

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

public Tochki(id)
{
	new szName[32]
	get_user_name(id, szName, charsmax(szName))
	
	new players[32], num
	get_players(players, num)
	for (new i = 0; i < num; i++)
	{
		new menu = menu_create("Statistika na Igrachite", "Nastroiki")
		
		menu_additem(menu, szName, "1", 0)
		
		menu_display(id, menu, 0)
	}
}
Пропускам нещо щом , не ми създава нов ред с играч и ми показва само името с което играя в сървъра . изобщо се чудя дали съм го направил правилно поне до някъде ... може ли още насоки къде ми е грешката
Каналът ми в YouTube : Георги Пламенов

Изображение

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

Как да създам меню в което да излизат имената на играчите ?

Мнение от OciXCrom » 18 Мар 2018, 04:25

Просто трябва да разбереш какво означават кодовете, а не да ги пишеш на изуст. id е играчът, който е написал командата. Кодът във for-loopa ще се извика толкова пъти, колкото има играчи в сървъра. Ти си направил да взима твоето име, да създаде менюто Х пъти и да добави само твоето име в него. Ползваш въпросния loop за да намериш имената на всички играчи, а не за да създадеш менюто в него. Ще ти го обясня стъпка по стъпка.

1. Създаваш менюто.

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

new iMenu = menu_create("Zaglavie", "izvikvashta_funkciq")
2. Запазваш всички играчи в масив.
- Числото след iPlayers означава колко играчи (id-та) може да държи масивът. Ползваме 32 тъй като в сървъра може да има максимум 32 играча наведнъж.
- От тук iPlayers[0] ще е id-то на първия играч, iPlayers[1] на втория, iPlayers[2] на третия и прочие.
- iPnum е броят на играчи, които функцията е намерила.

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

new iPlayers[32], iPnum
get_players(iPlayers, iPnum)
3. Създаваш проленлива която ще държи името на играчите. Тук отново ползваме 32, тъй като името на един играч не може да надхвърли 32 символа.

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

new szName[32]
4. Създаваш цикъла (loop) ползвайки нова променлива i, която по подразбиране ще има стойност 0.
- i < iNum означава, че кодът в цикъла ще се повтаря докато i е по-малко от iPnum (броя на играчи на линия).
- i++ означава, че i ще се увеличава с +1 при всяко повтаряне на цикъла.

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

for(new i = 0; i < iPnum; i++)
5. В цикъла намираш името на играча с id равно на iPlayers[ i ] и го добавяш в менюто.

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

{
    get_user_name(iPlayers[i], szName, charsmax(szName))
    menu_additem(iMenu, szName)
}
6. Извън цикъла показваш менюто на играча, който е ползвал командата.

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

menu_display(id, iMenu)

Аватар
User12
Извън линия
Потребител
Потребител
Мнения: 321
Регистриран на: 25 Яну 2018, 22:39
Местоположение: Сливен
Се отблагодари: 40 пъти
Получена благодарност: 17 пъти
Обратна връзка:

Как да създам меню в което да излизат имената на играчите ?

Мнение от User12 » 19 Мар 2018, 01:12

Добре , получи се ! А мога ли кода да го направя отстрани освен името на играча и да показва някаква информация за него в случая "Точки"

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

public Tochki(id)
{
	new iMenu = menu_create("Statistika na igrachite", "Nastroiki")
	
	new iPlayers[32], iPnum
	get_players(iPlayers, iPnum)
	new szName[32]
	for(new i = 0; i < iPnum; i++)
	{
		get_user_name(iPlayers[i], szName, charsmax(szName))
		menu_additem(iMenu, szName)
	}
	menu_display(id, iMenu)
}
Тук кода е направен да работи със команда amx_show_points , но не може да показва на всички играчи точките и няма как да взема пример от кода да го направя така както искам .

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

public cmdShowPoints(id, level, cid)
{
if(!cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED

new szArg[32], szName[32], iTarget
read_argv(1, szArg, charsmax(szArg))

if(!szArg[0])
{
client_print(id, print_console, "Usage:  amx_show_points <name>")
return PLUGIN_HANDLED
}

iTarget = cmd_target(id, szArg, 0)

if(!iTarget) return PLUGIN_HANDLED

get_user_name(iTarget, szName, charsmax(szName))

CC_SendMessage(id, "&x05[&x04GhostShop&x05]&x03 Player &x04%s &x03has &x04%d &x05points!", szName, gKillerPoints[iTarget])

return PLUGIN_HANDLED
}
Тук в настройките опитах да направя при избиране на някой играч да му показва точките но показва само на 1 играч другите пише 0 !

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

public Nastroiki(id, iMenu, item)
 {
    if( item == MENU_EXIT )
    {
        menu_destroy(iMenu);
        return PLUGIN_HANDLED;
    }
    new data[6], szName[64], szArg[32], iTarget;
    read_argv(1, szArg, charsmax(szArg))
    get_user_name(iTarget, szName, charsmax(szName))
    iTarget = cmd_target(id, szArg, 0)
    
    new access, callback;
    menu_item_getinfo(iMenu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
    
    new key = str_to_num(data);
    
    CC_SendMessage(key, "^1[^4Server Menu^1] ^1Igracha ^4%s ^1ima ^4%d ^3tochki", szName, gKillerPoints[iTarget])

    menu_destroy(iMenu);
    return PLUGIN_HANDLED;
 }
 
Каналът ми в YouTube : Георги Пламенов

Изображение

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

Как да създам меню в което да излизат имената на играчите ?

Мнение от OciXCrom » 21 Мар 2018, 23:08

За да ползваш избрания играч в меню handler-а, трябва да подадеш неговото userid при добавяне на предметите в менюто. За да направиш това, преди for цикъла от предишния ми пост, добави нова променлива szUserId[8]. След това, в цикъла запазваш userid-то на играча в новата променлива като string.

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

num_to_str(get_user_userid(iPlayers[i]), szUserId, charsmax(szUserId))
И menu_additem реда го правиш така:

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

menu_additem(iMenu, szName, szUserId)
Handler-ът на менюто ще ти го дам готов, тъй като нямам много време да обяснявам. Опитай се да разбереш какво се случва в този код и ако не разбираш някоя част, питай.

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

public Nastroiki(id, iMenu, iItem)
{
	if(iItem == MENU_EXIT)
	{
		menu_destroy(iMenu)
		return PLUGIN_HANDLED
	}
	
	new szName[32], szUserId[8], iUnused
	menu_item_getinfo(iMenu, iItem, iUnused, szUserId, charsmax(szUserId), szName, charsmax(szName), iUnused)
	
	new iPlayer = find_player("k", str_to_num(szUserId))
	
	if(iPlayer)
		CC_SendMessage(id, "^1[^4Server Menu^1] ^1Igrachut ^4%s ^1ima ^4%d ^3tochki", szName, gKillerPoints[iPlayer])
		
	menu_destroy(iMenu)
	return PLUGIN_HANDLED
}

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

Обратно към “Помощ в скриптирането”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 17 госта