Question

Решил немного подтянуть знания и для начала сделать что-нибудь незамысловатое. Решил сделать команду, которая показывает диалог: ID и Ник богатого игрока. Получил конечно же ошибки про компиляции. Некоторые поправил, но еще 2 осталось и что-то не получается их исправить. Поглядите что не так сделал

Спойлер

CMD:topmoney(playerid, params[])
{
	if(PI[playerid][pAdmin] < 1) return 1;
	else if(AdminLogged[playerid] == false) return SendMess(playerid, MSG_YOU_NOT_LOGGED_AS_ADMIN);
	else if(sscanf(params, "u", params[0])) return SendClientMessage(playerid, COLOR_LIGHTBLUE, "{FFFFFF}Введите: /topmoney");
	new string[29+(-4+MAX_PLAYER_NAME)+1]; //отсюда в принципе и начинается..
	for(new i; i <= 500; i++);
    if(GetPlayerMoney(i) >= 100000 || PI[i][pBank] >= 100000 )
	{
	    format(string, sizeof(string), "Самый богатый игрок","%d ID | Ник: %s", playerid, PI[playerid][pName]);
	    ShowPlayerDialog(playerid,D_NULL,DIALOG_STYLE_MSGBOX,"Самый богатый игрок","%d ID | Ник: %s","Окей","");
    }
	return 1;
}

 

(Тут табуляция какая-то пьяная получилась.. На деле все ровно. вроде как )

 

Теперь немного о команде..

		format(string, sizeof(string), "Самый богатый игрок","%d ID | Ник: %s", playerid, PI[playerid][pName]);
	    ShowPlayerDialog(playerid,D_NULL,DIALOG_STYLE_MSGBOX,"Самый богатый игрок","%d ID | Ник: %s","Окей","");

Тут я уже окончательно запутался и не понял где именно оставить текст "Самый богатый игрок...". Если кто объяснит - с меня плюсик :)

 

Ну и Ошибки при компиляции:

Спойлер

srp.pwn(33377) : error 036: empty statement

srp.pwn(33378) : error 017: undefined symbol "i"

 

Строчка 33377: for(new i; i <= 500; i++);
Строчка 33378: if(GetPlayerMoney(i) >= 100000 || PI[i][pBank] >= 100000 )

 

Edited by HAPKOMAH

Share this post


Link to post

2 answers to this question

  • 0

Так, раз уж подтянуть знания.. Начнём по порядку... У тебя ошибки из-за цикла: 

for(new i; i <= 500; i++);

После цикла точка с запятой не ставиться, либо фигурная скобка и выполнение кода, либо на этой же строке короткий код в одну строку.

Следующее: ты перебираешь игроков, рекомендую использовать цикл foreach, про него можно узнать в интернете, но если в двух словах: у тебя максимально не оптимизирован, ты даже не проверяешь на то, в онлайне человек или нет, у тебя будет выполняться 500 итераций, даже если сделаешь проверку, а юзая foreach, он будет выполнять столько проверок, сколько игроков на сервере, это же гораздо лучше!

Прикрепляю команду с использованием foreach, сам инклуд, надеюсь подключишь)

CMD:topmoney(playerid)
{
	if(PI[playerid][pAdmin] < 1) return 1;
	else if(AdminLogged[playerid] == false) return SendMess(playerid, MSG_YOU_NOT_LOGGED_AS_ADMIN);
	new string[29+(-4+MAX_PLAYER_NAME)+1]; //отсюда в принципе и начинается..
	foreach(new i: Player) 
	{
	    if(GetPlayerMoney(i) >= 100000 || PI[i][pBank] >= 100000 )
		{
		    format(string, sizeof(string), "ID: %d | Ник: %s", i, PI[i][pName]);
		    ShowPlayerDialog(playerid,D_NULL,DIALOG_STYLE_MSGBOX,"Самый богатый игрок", string, "Закрыть","");
	    }
	}
	return 1;
}

Что я исправил: тебе не нужно вводить ид игрока, потому что тебе нужно узнать самого богатого игрока, я это убрал. Заменил обычный цикл на foreach, писал выше почему.

По поводу format: ты записываешь значение в переменную, задаёшь ей текст с какими-то значениями через эту функцию формат, потом, туда, где тебе нужно вывести форматированный текст, вместо "text", пишешь просто название переменной, которую форматировал, в данном случае string.

format(имя формат. переменной, размер(в основном юзаем sizeof имя формат. переменной), "текст, который задаём переменной", аргументы);

 

И вообще, команда у тебя не выбирает самого богатого игрока, она покажет игрока, первого попавшегося, у которого налом больше 100к или в банке больше 100к

А, и в формате, я заменил playerid(ид, кто вводит команду), на "i", ид типа самого богатого игрока, но логику твоей команды я тебе объяснил

Share this post


Link to post
  • 0

@SCRIPTMAN Большое спасибо за то, что откликнулись и разобрали все.

Все скомпилировалось и работает. Сейчас буду разбираться во всём.

Некоторые моменты:

- Изначально планировалось, что бы показывало вообще самого богатого игрока, пусть он и в оффлайн. Но, как я понял, это немного по другому придется делать. Ну да ладно

- Я не придумал, как написать, что бы выводило игрока, у которого больше всего денег и решил пока сделать условие в >100к

Ещё раз спасибо :)

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • SheikhMAN
      By SheikhMAN
      Приветствую дорогие коллеги. Намучался, хочу решить одну проблему, делаю проверку на правильность введенной почты,
      и не могу правильно настроить это дело в диалоге. Кто поможет, буду очень рад. Внизу прикрепил скрипт.

      Внутри спойлера код.