Коллекция функций / макросов

Не нашел, спасибо
Reply

Ищу функцию для проверки строки на сторонние символы, кроме латинских букв и цифр (исключения: @ .)
Reply

Можешь это заюзать https://sampforum.blast.hk/showthread.php?tid=247892
Reply

Quote:
Originally Posted by RingoRus
Посмотреть сообщение
Ищу функцию для проверки строки на сторонние символы, кроме латинских букв и цифр (исключения: @ .)
pawn Код:
stock FindWrongSymb(string[])
{
    for (new i=strlen(string)-1; i>=0; i--)
    {
        switch (string[i])
        {
            case 'a'..'z','A'..'Z','0'..'9','@': continue;
            default: return 1;
        }
    }
    return 0;
}
Reply

Quote:
Originally Posted by White_116
Посмотреть сообщение
Можешь это заюзать https://sampforum.blast.hk/showthread.php?tid=247892
Подключать плагин, чтобы использовать одну функцию как-то не хочется.

Quote:
Originally Posted by ZiGGi
Посмотреть сообщение
pawn Код:
stock FindWrongSymb(string[])
{
    for (new i=strlen(string)-1; i>=0; i--)
    {
        switch (string[i])
        {
            case 'a'..'z','A'..'Z',0..9,'@': continue;
            default: return 1;
        }
    }
    return 0;
}
Не работает, всё время возвращает true
Reply

Quote:
Originally Posted by RingoRus
Посмотреть сообщение
Подключать плагин, чтобы использовать одну функцию как-то не хочется.



Не работает, всё время возвращает true
Покажи что вводишь в string
Reply

Всё разобрался. Только цифры в case тоже нужно взять в одинарные кавычки: '0'..'9'
Reply

Quote:
Originally Posted by RingoRus
Посмотреть сообщение
Всё разобрался. Только цифры в case тоже нужно взять в одинарные кавычки: '0'..'9'
угу, косяк
Reply

pawn Код:
for( new __idx = maxPlayers; __idx;)
{
new k = list_player_IDs[ --__idx];  continue;
}
тоже самое что
pawn Код:
#define forscan(%1) for(new __idx = maxPlayers ; __idx && %1 = list_player_IDs[ --__idx];)
Reply

нет, смысл в том что присвоение это пример, ид лучше сразу брать из list_player_IDs[__idx];,
-1 переменная которая сидит в макросе...
SetPlayerPos(list_player_IDs[__idx],0.0,0.0,0.0);
Reply

Quote:
Originally Posted by White_116
Посмотреть сообщение
нет, смысл в том что присвоение это пример, ид лучше сразу брать из list_player_IDs[__idx];,
-1 переменная которая сидит в макросе...
SetPlayerPos(list_player_IDs[__idx],0.0,0.0,0.0);
Получится способ идентичный PLIDS... И всё-равно медленнее foreach
Reply

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

PHP код:
     #define memory_exist(%1) existproperty( .value = hash( #%1 ) )
    #define memory_delete(%1) deleteproperty( .value = hash( #%1 ) )
    #define memory_set(%1,%2) setproperty( .value = hash( #%1 ), .string = #%2 )
    #define memory_get(%1,%2) getproperty( .value = hash( #%1 ), .string = %2 ); strunpack( %2, %2, sizeof(%2) )
    #define memory. memory_
    
stock hash(str[])
    {
        new 
key;
        for ( new 
xxmax strlenstr ); xmaxx++ )
        {
            
key += str[x];
        }
          
key *= key;
          
key >>= 11;
          return 
key 1024;
    } 
Как бы удобнее (: Но алгоритм хеш-ключа нужно переделать.

Пример:
PHP код:
new result[16];
memory.set("test string""0.0");
memory.get("test string"result); 
Reply

pawn Код:
stock strCharSplit(const strings[], &index)
{
    new result[20], i = 0;
    if(index != 0 && strings[index] != '\0') index++;
    while(strings[index] && strings[index] != ' ')
    {
        result[i++] = strings[index++];
    }
    return result;
}
не равнозначная замена
pawn Код:
stock strtok(const strings[], &index)
{
   new length = strlen(strings);
   while ((index < length) && (strings[index] <= ' '))   index++;
   new offset = index;
   new result[20];
   while ((index < length) && (strings[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
   {   
        result[index - offset] = strings[index];
        index++;
   }
   result[index - offset] = EOS;
   return result;
}
т.к. данные из файла вообще не считываются
срабатывает строка
Error: Line%d - 404 %s.race
Пример
pawn Код:
stock LoadRaceList()
{  
    if(fexist("Logs/racenames.cfg"))
    {  
        new File:file = fopen("Logs/racenames.cfg", io_read);
        new line[20];
        while(fread(file, line, sizeof(line), false))
        {
            new iidx;
            RaceNames[countrace] = strCharSplit(line, iidx);
            new trackname[13+32];
            format(trackname, sizeof(trackname), "Logs/%s.race",RaceNames[countrace]);
            if(fexist(trackname))
            {
                //printf("Race%d - %s.race",countrace,RaceNames[countrace]);
            }
            else printf("Error: Line%d - 404 %s.race", countrace, RaceNames[countrace]);
            countrace++;
        }
        fclose(file);
    }
}
Reply

Quote:
Originally Posted by DANGER1979
Посмотреть сообщение
[pawn]
не равнозначная замена
[pawn]
срабатывает строка
Error: Line%d - 404 %s.race
Покажи содержимое файла Logs/racenames.cfg
Reply

Может сепаратор не пробел?
Reply

Quote:

Chiliad
Control
Hilltop
LVRace
LVRace2
M25
MSR2
Outburst
Racepoint
Reckless
Resign
Roadrash
Beachfront
Caper
Caper2
Clip
FBI
Freewheel
LSRace
LSRace2
MSR
Offroad
Oil
SFRace
Shave
Torrent
Tourismo
Tourismo2
Air
Airplane
Helicopters
Bike
Boats
River
Kart
Quad
BMX_Challenge
NRG_Challenge
Mountain_Challenge
Birdseye_Winder
Cobra_Run
RING

сепаратор пробел, но в самом файле его нет, т.е. данные состоят из одного слова

strtok прекрасно справляется.

Просто, чтобы люди знали что это не равнозначная замена и поэтому нету на вики.
Reply

Quote:
Originally Posted by DANGER1979
Посмотреть сообщение
сепаратор пробел, но в самом файле его нет, т.е. данные состоят из одного слова

strtok прекрасно справляется.

Просто, чтобы люди знали что это не равнозначная замена и поэтому нету на вики.
Кому в голову придёт использовать strcharsplit в строке, без сепаратора?
Reply

Простейшая функция, возвращает кол-во символов в строке:
pawn Код:
stock symbcount(string[], symbol)
{
    new count;
    for (new i; i < strlen(string); i++)
    {
        if (string[i] == symbol) count++;
    }
    return count;
}
Reply

Quote:
Originally Posted by ru.raider
Посмотреть сообщение
Простейшая функция, возвращает кол-во символов в строке:
pawn Код:
stock symbcount(string[], symbol)
{
    new count;
    for (new i; i < strlen(string); i++)
    {
        if (string[i] == symbol) count++;
    }
    return count;
}
при каждой итерации вызывается очень медленная функция strlen.
pawn Код:
SymbolCount(string[], symbol)
{
    new count;
    for (new i; string[i] != EOS; ++i)
    {
        if (string[i] == symbol) ++count;
    }
    return count;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)