Re: Скриптинг курилка -
ZiGGi - 18.07.2016
Quote:
Originally Posted by Stepashka
Как-то так:
Code:
#define IsValidRpName(%1) \
4 <= strlen(%1) <= 20 && regex_match(%1, "[a-zA-Z]*_[a-zA-Z]*")
|
Ему проверку на регистр первого символа вроде как нужно оставить. А сам макрос лучше обрамить скобками, чтобы код вида
1 + IsValidRpName(name), не приводил к не ожидаемым результатам.
PHP Code:
#define IsValidRpName(%1) \
(4 <= strlen(%1) <= 20 && regex_match(%1, "[A-Z]+[a-zA-Z]*_[A-Z]+[a-zA-Z]*"))
Re: Скриптинг курилка -
White_116 - 18.07.2016
Quote:
Originally Posted by Diman777
Шатнул немного ф-ию и получилось вот так:
PHP Code:
bool:IsNearToVehicle(playerid)
{
if (GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
{
for (new vehid; vehid < MAX_VEHICLES; vehid++)
{
for (new driverid; driverid < MAX_PLAYERS; driverid++)
{
if (GetPlayerVehicleID(driverid) == vehid
&& GetPlayerState(driverid) == PLAYER_STATE_DRIVER)
{
new Float:axes[3];
GetPlayerPos(playerid, axes[0], axes[1], axes[2]);
if (GetVehicleDistanceFromPoint(vehid, axes[0], axes[1], axes[2]) <= 5.0)
{
return true;
}
}
}
}
}
return false;
}
|
Г**но какое то, выше написал как сделать надо!
Re: Скриптинг курилка -
gensek4 - 18.07.2016
Quote:
Originally Posted by ZiGGi
Ему проверку на регистр первого символа вроде как нужно оставить. А сам макрос лучше обрамить скобками, чтобы код вида 1 + IsValidRpName(name), не приводил к не ожидаемым результатам.
PHP Code:
#define IsValidRpName(%1) \
(4 <= strlen(%1) <= 20 && regex_match(%1, "[A-Z]+[a-zA-Z]*_[A-Z]+[a-zA-Z]*"))
|
Спасибо, а разве регулярка вида {4,20} не определит минимальный и максимальный размер ника?
Re: Скриптинг курилка -
Stepashka - 18.07.2016
Quote:
Originally Posted by gensek4
Спасибо, а разве регулярка вида {4,20} не определит минимальный и максимальный размер ника?
|
А зачем?
Вообще измерять длину строки регуляркой логически неверное решение.
И в данном контексте, если длина не попадёт в диапазон - ругулярка даже не будет вызвана, а это экономит процессорное время.
Re: Скриптинг курилка -
TheMallard - 18.07.2016
Quote:
Originally Posted by gensek4
Спасибо, а разве регулярка вида {4,20} не определит минимальный и максимальный размер ника?
|
А разве эта регулярка не допустит подобный никнейм - IgGy_AzAlEa?
Re: Скриптинг курилка -
Stepashka - 18.07.2016
Quote:
Originally Posted by TheMallard
А разве эта регулярка не допустит подобный никнейм - IgGy_AzAlEa?
|
Code:
#define IsValidRpName(%1) \
(4 <= strlen(%1) <= 20 && regex_match(%1, "[A-Z][a-z]*_[A-Z][a-z]*"))
Ещё надо указать что она регистрозависимая.
Re: Скриптинг курилка -
gensek4 - 18.07.2016
Quote:
Originally Posted by TheMallard
А разве эта регулярка не допустит подобный никнейм - IgGy_AzAlEa?
|
Допустит, но некоторые, например, используют ники - Jeffrey_McSmith, что вполне по правилам, а регулярка их не признает. Лучше уж пожертвовать регистром, но не ограничивать РПшные ники.
Re: Скриптинг курилка -
gensek4 - 18.07.2016
И еще, вот сейчас у меня используется подобная проверка на пароль:
PHP Code:
stock CheckPassword(pass[])
{
for(new i; i < strlen(pass); i ++)
{
if( (pass[i] >= 'a' && pass[i] <= 'z') ||
(pass[i] >= 'A' && pass[i] <= 'Z') ||
(pass[i] >= 'а' && pass[i] <= 'я') ||
(pass[i] >= 'А' && pass[i] <= 'Я') ||
(pass[i] >= '0' && pass[i] <= '9') )
{
continue;
}
else return false;
}
return true;
}
Регулярным выражением, будет быстрее? И проверка будет подобным образом выглядеть?
PHP Code:
#define CheckPassword(%1) \
(6 <= strlen(%1) <= 64 && regex_match(%1, "[A-Za-Zа-яА-Я0-9]*"))
Re: Скриптинг курилка -
Stepashka - 18.07.2016
Quote:
Originally Posted by gensek4
И еще, вот сейчас у меня используется подобная проверка на пароль:
PHP Code:
stock CheckPassword(pass[])
{
for(new i; i < strlen(pass); i ++)
{
if( (pass[i] >= 'a' && pass[i] <= 'z') ||
(pass[i] >= 'A' && pass[i] <= 'Z') ||
(pass[i] >= 'а' && pass[i] <= 'я') ||
(pass[i] >= 'А' && pass[i] <= 'Я') ||
(pass[i] >= '0' && pass[i] <= '9') )
{
continue;
}
else return false;
}
return true;
}
Регулярным выражением, будет быстрее? И проверка будет подобным образом выглядеть?
PHP Code:
#define CheckPassword(%1) \
(6 <= strlen(%1) <= 64 && regex_match(%1, "[A-Za-Zа-яА-Я0-9]*"))
|
зачем вообще проверять какие символы используются в пароле, достаточно проверять только длину. И максимальный лимит лучше сделать 255 (максимальный размер varchar в DB)
Re: Скриптинг курилка -
gensek4 - 18.07.2016
Quote:
Originally Posted by Stepashka
зачем вообще проверять какие символы используются в пароле, достаточно проверять только длину. И максимальный лимит лучше сделать 255 (максимальный размер varchar в DB)
|
Так у меня хэш SHA-2 используется, он вроде любое кол-во символов преобразует в строку, длинной 64 символа. Да и, а если инъекция? Или если ты пароль хэшируешь функцией SHA256_PassHash инъекция уже никак не может пройти? Да, в добавок я еще %e использую, при сохрании хэша в базе.
Re: Скриптинг курилка -
Stepashka - 18.07.2016
Quote:
Originally Posted by gensek4
Так у меня хэш SHA-2 используется, он вроде любое кол-во символов преобразует в строку, длинной 64 символа. Да и, а если инъекция? Или если ты пароль хэшируешь функцией SHA256_PassHash инъекция уже никак не может пройти? Да, в добавок я еще %e использую, при сохрании хэша в базе.
|
Отвечаю по порядку:
- Экранирование данных
- Есть много различных инъекций, так что может.
Сути это не меняет, зачем ограничивать пользователей в выборе символов для пароля, достаточно ограничить в длине.
Единственное допустимое ограничение это заставлять использовать разный регистр +цифры +спец символы.
Добавлю для общего развития: введённые в качестве пароля данные даже "тримать" нельзя!
Re: Скриптинг курилка -
Diman777 - 18.07.2016
Quote:
Originally Posted by White_116;
выше написал как сделать надо
|
Вот не получается у меня так, покажи, раз на то пошло
Re: Скриптинг курилка -
ZiGGi - 19.07.2016
Так как
оригинальную тему закрыли, то решил ответить здесь, так как вопрос довольно важный.
Quote:
Originally Posted by OKStyle
Seriously? Do you really think that Kalcor should edit wiki?  Done.
|
Quote:
Originally Posted by OKStyle
Серьёзно? Ты реально думаешь, что Kalcor должен редактировать (обновлять) wiki?
|
Да, вот пример реальной проблемы:
Мне нужно было узнать, что делают return в некоторых callback, я пошёл на wiki:
https://sampwiki.blast.hk/wiki/OnPlayerTakeDamage
https://sampwiki.blast.hk/wiki/OnPlayerGiveDamage
Я получил это (старая версия):
Quote:
1 - Allows this callback to be called in other scripts.
0 - Callback will not be called in other scripts.
It is always called first in gamemodes so returning 0 there blocks filterscripts from seeing it
|
Я попытался использовать эту информацию, но всё работало не правильно. Почему? Потому что информация на wiki была написана наугад, в надежде, что в обработке возвращаемых значений этих автовызываемых функций есть здравый смысл.
После изучения работы этих функций (путём реверс-инжиниринга), я обновил wiki на это:
Quote:
1 - Callback will not be called in other filterscripts.
0 - Allows this callback to be called in other filterscripts.
It is always called first in filterscripts so returning 1 there blocks other filterscripts from seeing it
|
Как можно увидеть, разница огромная (в игровом режиме вообще нет разницы, что возвращать). И, поэтому, Kalcor или кто-нибудь из команды должны обновлять wiki для избежания подобных проблем.
Re: Скриптинг курилка -
OKStyle - 19.07.2016
Вопроса на ответ я так и не увидел. Вы тоже без шуток думаете, что Калкору есть дело до Вики? Там достаточно пользователей, которые вносят правки в статьи.
Re: Скриптинг курилка -
ZiGGi - 20.07.2016
Quote:
Originally Posted by OKStyle
Вопроса на ответ я так и не увидел. Вы тоже без шуток думаете, что Калкору есть дело до Вики? Там достаточно пользователей, которые вносят правки в статьи.
|
Я понимаю, что ему наплевать на wiki, но я показал реальную ситуацию, когда обновление wiki обычными пользователями вызывает проблемы.
Re: Скриптинг курилка -
themakar - 22.07.2016
Почему \n не считается как один символ?
Каким самым простым способом можно заменить пробел на \n?
Re: Скриптинг курилка -
stabker - 23.07.2016
Quote:
Originally Posted by themakar
Почему \n не считается как один символ?
|
Не считается где?
Quote:
Originally Posted by themakar
Каким самым простым способом можно заменить пробел на \n?
|
PHP Code:
for(new i = strlen(str) - 1; i >= 0; i--)
{
if(str[i] == 32)
{
str[i] = '\n';
}
}
Re: Скриптинг курилка -
themakar - 23.07.2016
Quote:
Originally Posted by stabker
Не считается где?
|
Поправка
В текстах на экране отступ ~n~ не считается за один символ?
Нужно собственно в фразе если она больше 16 символов найти пробел и заменить его на перенос ~n~.
Re: Скриптинг курилка -
OKStyle - 23.07.2016
~n~ считается за 3 символа, \n за 1
Re: Скриптинг курилка -
SanDev - 08.08.2016
Quote:
Originally Posted by S4D
PHP Code:
else if(pickupid >= CarBuy[0] && pickupid <= CarBuy[2])
{
if(pickupid == CarBuy[0]) SetPVarInt(playerid, "CarBuy_Set", 1);
else if(pickupid == CarBuy[1]) SetPVarInt(playerid, "CarBuy_Set", 2);
else if(pickupid == CarBuy[2]) SetPVarInt(playerid, "CarBuy_Set", 3);
return ShowPlayerDialog(playerid, D_CARBUY, DIALOG_STYLE_MSGBOX, "{FFFFFF}Автосалон", "Перейти к покупке автомобиля?", "Да", "Нет");
}
https://sampwiki.blast.hk/wiki/Control_Structures#return
|
По конкретней поможешь?