Вопросы

Начинаю разработку мода с нуля но каждый раз выдаёт ошибку при создании регистрации/авторизации

D:\SA-MP 0.3.7 Windows Server\gamemodes\new.pwn(239) : предупреждение 215: выражение не имеет эффекта
D:\SA-MP 0.3.7 Windows Server\gamemodes\new.pwn(239) : предупреждение 215: выражение не имеет эффекта
D:\SA-MP 0.3.7 Windows Server\gamemodes\new.pwn(239) : ошибка 001: ожидался токен ";", но найден ")"
D:\SA-MP 0.3.7 Windows Server\gamemodes\new.pwn(239) : ошибка 029: неправильное выражение, принят ноль
D:\SA-MP 0.3.7 Windows Server\gamemodes\new.pwn(239) : предупреждение 215: выражение не имеет эффекта
D:\SA-MP 0.3.7 Windows Server\gamemodes\new.pwn(243) : ошибка 029: неправильное выражение, принят ноль
D:\SA-MP 0.3.7 Windows Server\gamemodes\new.pwn(243) : предупреждение 215: выражение не имеет эффекта
D:\SA-MP 0.3.7 Windows Server\gamemodes\new.pwn(243) : предупреждение 215: выражение не имеет эффекта
D:\SA-MP 0.3.7 Windows Server\gamemodes\new.pwn(243) : предупреждение 215: выражение не имеет эффекта
D:\SA-MP 0.3.7 Windows Server\gamemodes\new.pwn(243) : ошибка 001: ожидался токен ";", но найден ")"
D:\SA-MP 0.3.7 Windows Server\gamemodes\new.pwn(243) : ошибка 029: неправильное выражение, принят ноль
D:\SA-MP 0.3.7 Windows Server\gamemodes\new.pwn(243) : фатальная ошибка 107: слишком много ошибок на одной строке

Компиляция остановлена.

Pawn compiler 3.2.3664 Copyright (c) 1997-2016, ITB CompuPhase
Ошибок:6.
  открыть спойлер

 

Отредактировано пользователем Cawfee

Заметка от Cawfee , создано

3.2. Код необходимо брать в тег "Код", а код более 10 строк – еще и в "Спойлер". Как это сделать рассказано в разделе "FAQ".

Устное предупреждение.

Поделиться сообщением


Ссылка на сообщение

6 ответов на этот вопрос

  • 0

Ну во-первых, в одной из функций MySQL вы либо пропустили параметр, либо случайно поставили лишнюю запятую, а именно в этом фрагменте:

mysql_function_query(dbHandle,query1,true,,"LoadAcc","i",playerid);
// Указать на какой строке это не могу, ибо вы сами их не разметили :)

Так же ошибка у вас в каждой проверку символов пароля, а именно:

switch(inputtext)
{
    //...
}
// Код выше в корне неврный, так как вы указываете строку, а не символ
// Для перебора символов строки надо использовать такой код:
switch(inputtext[i])
{
    //...
}

При оповещение игрока во время авторизации о том, сколько у него осталось попыток вы выводите такой текст:

format(str,sizeof(str),"У вас осталось: %d попыток",GetPVarInt(playerid,"wrong_password"));

Это неверно, так как временная переменная wrong_password у вас начинается с нуля, то есть при постоянном вводе неверного пароля со стороны игрока будет такая ситуация:

У вас осталось: 1 попыток
У вас осталось: 2 попыток
У вас осталось: 3 попыток
У вас осталось: 4 попыток
У вас осталось: 5 попыток
*Кик игрока*

Для верного отображения используйте такой код:

format(str,sizeof(str),"У вас осталось: %d попыток",5-GetPVarInt(playerid,"wrong_password"));

Так же мне хотелось разобрать данную проверку:

if(strlen(inputtext) < 4 || strlen(inputtext) > 32 || strlen(inputtext) == 0//..

Я думаю, что 0 и так меньше 4-х, поэтому сравнение длинные строки с нулём можно убрать:

if(strlen(inputtext) < 4 || strlen(inputtext) > 32//...

Ещё я не вижу смысла создавать отдельные переменные для каждого запроса, как это вы делаете в данном фрагменте кода:

new query[120 + MAX_PLAYER_NAME];
format(query,sizeof(query),"INSERT INTO `account` (`pNick`,`pPassword`,`pLevel`) VALUES ('%s','%s','1')"),Player[playerid][pNick],inputtext);
mysql_query(dbHandle,query);
new query1[100];
format(query1,sizeof(query1),"SELECT * FROM `account` WHERE `pNick` = '%s'",Player[playerid][pNick]);
mysql_function_query(dbHandle,query1,true,,"LoadAcc","i",playerid);

Гораздо проще и логичней использовать старую переменную, ведь она уже и не нужна:

new query[120 + MAX_PLAYER_NAME];
format(query,sizeof(query),"INSERT INTO `account` (`pNick`,`pPassword`,`pLevel`) VALUES ('%s','%s','1')"),Player[playerid][pNick],inputtext);
mysql_query(dbHandle,query);
format(query1,sizeof(query),"SELECT * FROM `account` WHERE `pNick` = '%s'",Player[playerid][pNick]);
mysql_function_query(dbHandle,query,true,,"LoadAcc","i",playerid);

На этом вроде бы всё.

Поделиться сообщением


Ссылка на сообщение
  • 0

D:\m\gamemodes\new.pwn(60) : ошибка 017: необъявленный символ "mysql_function_query"

D:\m\gamemodes\new.pwn(241) : предупреждение 215: выражение не имеет эффекта

D:\m\gamemodes\new.pwn(241) : предупреждение 215: выражение не имеет эффекта

D:\m\gamemodes\new.pwn(241) : ошибка 001: ожидался токен ";", но найден ")"

D:\m\gamemodes\new.pwn(241) : ошибка 029: неправильное выражение, принят ноль

D:\m\gamemodes\new.pwn(241) : предупреждение 215: выражение не имеет эффекта

D:\m\gamemodes\new.pwn(244) : ошибка 017: необъявленный символ "mysql_function_query"

D:\m\gamemodes\new.pwn(244) : предупреждение 215: выражение не имеет эффекта

D:\m\gamemodes\new.pwn(244) : предупреждение 215: выражение не имеет эффекта

D:\m\gamemodes\new.pwn(244) : предупреждение 215: выражение не имеет эффекта

D:\m\gamemodes\new.pwn(244) : ошибка 001: ожидался токен ";", но найден ")"

D:\m\gamemodes\new.pwn(244) : ошибка 029: неправильное выражение, принят ноль

D:\m\gamemodes\new.pwn(244) : фатальная ошибка 107: слишком много ошибок на одной строке

 

Компиляция остановлена.

 

Pawn compiler 3.2.3664 Copyright (c) 1997-2016, ITB CompuPhase

 

 

Ошибок:7.

  открыть спойлер

 

Отредактировано пользователем Cawfee

Поделиться сообщением


Ссылка на сообщение
  • 0
  В 10/20/2023 в 20:20, Sleash сказал:

Ну во-первых, в одной из функций MySQL вы либо пропустили параметр, либо случайно поставили лишнюю запятую, а именно в этом фрагменте:

mysql_function_query(dbHandle,query1,true,,"LoadAcc","i",playerid);
// Указать на какой строке это не могу, ибо вы сами их не разметили :)

Так же ошибка у вас в каждой проверке символов пароля, а именно:

switch(inputtext)
{
    //...
}
// Код выше в корне неврный, так как вы указываете строку, а не символ
// Для перебора символов строки надо использовать такой код:
switch(inputtext[i])
{
    //...
}
Читать далее...  

 

  В 10/20/2023 в 20:20, Sleash сказал:

Ещё я не вижу смысла создавать отдельные переменные для каждого запроса, как это вы делаете в данном фрагменте кода:

new query[120 + MAX_PLAYER_NAME];
format(query,sizeof(query),"INSERT INTO `account` (`pNick`,`pPassword`,`pLevel`) VALUES ('%s','%s','1')"),Player[playerid][pNick],inputtext);
mysql_query(dbHandle,query);
new query1[100];
format(query1,sizeof(query1),"SELECT * FROM `account` WHERE `pNick` = '%s'",Player[playerid][pNick]);
mysql_function_query(dbHandle,query1,true,,"LoadAcc","i",playerid);

Гораздо проще и логичней использовать старую переменную, ведь она уже и не нужна:

new query[120 + MAX_PLAYER_NAME];
format(query,sizeof(query),"INSERT INTO `account` (`pNick`,`pPassword`,`pLevel`) VALUES ('%s','%s','1')"),Player[playerid][pNick],inputtext);
mysql_query(dbHandle,query);
format(query1,sizeof(query),"SELECT * FROM `account` WHERE `pNick` = '%s'",Player[playerid][pNick]);
mysql_function_query(dbHandle,query,true,,"LoadAcc","i",playerid);
Читать далее...  

Все ошибки, которые я процитировал выше ещё сохранились в вашем коде
В добавок мне интересен этот момент:

format(str,sizeof(str),"У вас осталось: %d попыток",5-
GetPVarInt(playerid,"wrong_password"));

Этот фрагмент выбьет ошибку, почему просто нельзя было написать так:

format(str,sizeof(str),"У вас осталось: %d попыток",5-GetPVarInt(playerid,"wrong_password"));

Ну а если вам принципиально сделать этот код в 2 строчки, то пользуйтесь обратным слешем для переноса кода:

format(str,sizeof(str),"У вас осталось: %d попыток",5-\
GetPVarInt(playerid,"wrong_password"));

@grmpng 

Поделиться сообщением


Ссылка на сообщение
  • 0
  В 10/22/2023 в 02:11, Sleash сказал:

Этот фрагмент выбьет ошибку, почему просто нельзя было написать так:

Читать далее...  

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

 

  открыть спойлер

 

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee Понял, да, сейчас протестил, это в самом деле так.

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • whccompany
      От whccompany
      Срочно ищу опытного маппера и/или студию маппинга для реализации крупномасштабного маппинга CRMP на платной основе. Более подробную информацию обсуждаю в ТГ: Телеграмм канал для подробного обсуждения
    • hatriyikko
      От hatriyikko
      Рад приветствовать!

      Нужна помощь с копией радмира. Есть комплект клиент + мод радмир 5.9 (Всё это могу прислать).

      Требуется правка экономики (сделать цены, зарплаты и бонусы как в оригинальном радмире) и подправить пикапы чтобы они были в нужных местах (чтобы не было повисших в воздухе пикапов и т д)

      Если есть уже готовый мод версии близкой к 5.9 с экономикой как в оригинальном радмире и рабочими пикапами то тоже рассмотрю его покупку.

      Напишите сколько это будет стоить?

      В дальнейшем также могут понадобиться какие то доработки мода, если всё ок рассматриваю долгосрочное сотрудничество

      Связь тут или в тг @kovart7
    • RASTAMAN
      От RASTAMAN
      Для того чтобы дать пароль нужно быть администратором 10 lvl после того пишем в чат /passadm
       
      Система казино Система домов Система авто И многие другие системы!

      Особых багов не найдено.

      В моде присутствует 25 фракции.
      Есть Textdraw на спавне!