Скриптинг курилка

Quote:
Originally Posted by Stepashka
View Post
Как-то так:
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) \
    
(<= strlen(%1) <= 20 && regex_match(%1"[A-Z]+[a-zA-Z]*_[A-Z]+[a-zA-Z]*")) 
Reply

Quote:
Originally Posted by Diman777
View Post
Шатнул немного ф-ию и получилось вот так:
PHP Code:
bool:IsNearToVehicle(playerid)
{
    if (
GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
    {
        for (new 
vehidvehid MAX_VEHICLESvehid++)
        {
            for (new 
driveriddriverid MAX_PLAYERSdriverid++)
            {
                if (
GetPlayerVehicleID(driverid) == vehid
                
&& GetPlayerState(driverid) == PLAYER_STATE_DRIVER)
                {
                    new 
Float:axes[3];
                    
GetPlayerPos(playeridaxes[0], axes[1], axes[2]);
                    if (
GetVehicleDistanceFromPoint(vehidaxes[0], axes[1], axes[2]) <= 5.0)
                    {
                        return 
true;
                    }
                }
            }
        }
    }
    return 
false;

Г**но какое то, выше написал как сделать надо!
Reply

Quote:
Originally Posted by ZiGGi
View Post
Ему проверку на регистр первого символа вроде как нужно оставить. А сам макрос лучше обрамить скобками, чтобы код вида 1 + IsValidRpName(name), не приводил к не ожидаемым результатам.

PHP Code:
#define IsValidRpName(%1) \
    
(<= strlen(%1) <= 20 && regex_match(%1"[A-Z]+[a-zA-Z]*_[A-Z]+[a-zA-Z]*")) 
Спасибо, а разве регулярка вида {4,20} не определит минимальный и максимальный размер ника?
Reply

Quote:
Originally Posted by gensek4
View Post
Спасибо, а разве регулярка вида {4,20} не определит минимальный и максимальный размер ника?
А зачем?
Вообще измерять длину строки регуляркой логически неверное решение.
И в данном контексте, если длина не попадёт в диапазон - ругулярка даже не будет вызвана, а это экономит процессорное время.
Reply

Quote:
Originally Posted by gensek4
View Post
Спасибо, а разве регулярка вида {4,20} не определит минимальный и максимальный размер ника?
А разве эта регулярка не допустит подобный никнейм - IgGy_AzAlEa?
Reply

Quote:
Originally Posted by TheMallard
View Post
А разве эта регулярка не допустит подобный никнейм - IgGy_AzAlEa?
Code:
#define IsValidRpName(%1) \ 
    (4 <= strlen(%1) <= 20 && regex_match(%1, "[A-Z][a-z]*_[A-Z][a-z]*"))
Ещё надо указать что она регистрозависимая.
Reply

Quote:
Originally Posted by TheMallard
View Post
А разве эта регулярка не допустит подобный никнейм - IgGy_AzAlEa?
Допустит, но некоторые, например, используют ники - Jeffrey_McSmith, что вполне по правилам, а регулярка их не признает. Лучше уж пожертвовать регистром, но не ограничивать РПшные ники.
Reply

И еще, вот сейчас у меня используется подобная проверка на пароль:
PHP Code:
stock CheckPassword(pass[])
{
    for(new 
istrlen(pass); ++)
    {
        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) \
    
(<= strlen(%1) <= 64 && regex_match(%1"[A-Za-Zа-яА-Я0-9]*")) 
Reply

Quote:
Originally Posted by gensek4
View Post
И еще, вот сейчас у меня используется подобная проверка на пароль:
PHP Code:
stock CheckPassword(pass[])
{
    for(new 
istrlen(pass); ++)
    {
        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) \
    
(<= strlen(%1) <= 64 && regex_match(%1"[A-Za-Zа-яА-Я0-9]*")) 
зачем вообще проверять какие символы используются в пароле, достаточно проверять только длину. И максимальный лимит лучше сделать 255 (максимальный размер varchar в DB)
Reply

Quote:
Originally Posted by Stepashka
View Post
зачем вообще проверять какие символы используются в пароле, достаточно проверять только длину. И максимальный лимит лучше сделать 255 (максимальный размер varchar в DB)
Так у меня хэш SHA-2 используется, он вроде любое кол-во символов преобразует в строку, длинной 64 символа. Да и, а если инъекция? Или если ты пароль хэшируешь функцией SHA256_PassHash инъекция уже никак не может пройти? Да, в добавок я еще %e использую, при сохрании хэша в базе.
Reply

Quote:
Originally Posted by gensek4
View Post
Так у меня хэш SHA-2 используется, он вроде любое кол-во символов преобразует в строку, длинной 64 символа. Да и, а если инъекция? Или если ты пароль хэшируешь функцией SHA256_PassHash инъекция уже никак не может пройти? Да, в добавок я еще %e использую, при сохрании хэша в базе.
Отвечаю по порядку:
  1. Экранирование данных
  2. Есть много различных инъекций, так что может.
Сути это не меняет, зачем ограничивать пользователей в выборе символов для пароля, достаточно ограничить в длине.
Единственное допустимое ограничение это заставлять использовать разный регистр +цифры +спец символы.

Добавлю для общего развития: введённые в качестве пароля данные даже "тримать" нельзя!
Reply

Quote:
Originally Posted by White_116;
выше написал как сделать надо
Вот не получается у меня так, покажи, раз на то пошло
Reply

Так как оригинальную тему закрыли, то решил ответить здесь, так как вопрос довольно важный.

Quote:
Originally Posted by OKStyle
View Post
Seriously? Do you really think that Kalcor should edit wiki? Done.
Quote:
Originally Posted by OKStyle
View Post
Серьёзно? Ты реально думаешь, что 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 для избежания подобных проблем.
Reply

Вопроса на ответ я так и не увидел. Вы тоже без шуток думаете, что Калкору есть дело до Вики? Там достаточно пользователей, которые вносят правки в статьи.
Reply

Quote:
Originally Posted by OKStyle
View Post
Вопроса на ответ я так и не увидел. Вы тоже без шуток думаете, что Калкору есть дело до Вики? Там достаточно пользователей, которые вносят правки в статьи.
Я понимаю, что ему наплевать на wiki, но я показал реальную ситуацию, когда обновление wiki обычными пользователями вызывает проблемы.
Reply

Почему \n не считается как один символ?
Каким самым простым способом можно заменить пробел на \n?
Reply

Quote:
Originally Posted by themakar
View Post
Почему \n не считается как один символ?
Не считается где?

Quote:
Originally Posted by themakar
View Post
Каким самым простым способом можно заменить пробел на \n?
PHP Code:
for(new strlen(str) - 1>= 0i--)
{
    if(
str[i] == 32)
    {
        
str[i] = '\n';
    }

Reply

Quote:
Originally Posted by stabker
View Post
Не считается где?
Поправка
В текстах на экране отступ ~n~ не считается за один символ?
Нужно собственно в фразе если она больше 16 символов найти пробел и заменить его на перенос ~n~.
Reply

~n~ считается за 3 символа, \n за 1
Reply

Quote:
Originally Posted by S4D
View Post
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(playeridD_CARBUYDIALOG_STYLE_MSGBOX"{FFFFFF}Автосалон""Перейти к покупке автомобиля?""Да""Нет");

https://sampwiki.blast.hk/wiki/Control_Structures#return
По конкретней поможешь?
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)