SA-MP Forums Archive
Коллекция функций / макросов - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Коллекция функций / макросов (/showthread.php?tid=118026)

Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14


Re: Коллекция функций / макросов - CrunkBankS - 20.11.2011

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


Re: Коллекция функций / макросов - RingoRus - 25.11.2011

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


Re: Коллекция функций / макросов - White_116 - 25.11.2011

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


Re: Коллекция функций / макросов - ZiGGi - 25.11.2011

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;
}



Re: Коллекция функций / макросов - RingoRus - 25.11.2011

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


Re: Коллекция функций / макросов - ZiGGi - 26.11.2011

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



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


Re: Коллекция функций / макросов - RingoRus - 28.11.2011

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


Re: Коллекция функций / макросов - ZiGGi - 28.11.2011

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


Re: Коллекция функций / макросов - Stepashka - 15.02.2012

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];)



Re: Коллекция функций / макросов - White_116 - 15.02.2012

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


Re: Коллекция функций / макросов - ZiGGi - 16.02.2012

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


Re: Коллекция функций / макросов - White_116 - 16.02.2012

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


Re: Коллекция функций / макросов - xJester - 18.02.2012

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); 



Re: Коллекция функций / макросов - DANGER1979 - 18.02.2012

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);
    }
}



Re: Коллекция функций / макросов - ZiGGi - 18.02.2012

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


Re: Коллекция функций / макросов - OKStyle - 18.02.2012

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


Re: Коллекция функций / макросов - DANGER1979 - 18.02.2012

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 прекрасно справляется.

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


Re: Коллекция функций / макросов - ZiGGi - 18.02.2012

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

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

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


Re: Коллекция функций / макросов - raider19rus - 04.07.2012

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



Re: Коллекция функций / макросов - Stepashka - 04.07.2012

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;
}