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: Коллекция функций / макросов - Stepashka - 06.03.2011

Quote:
Originally Posted by iEnemY
Посмотреть сообщение
Макрос - функция, написанная в коде павно, не на языке павно (С, С++?)
Сток - самописная функция, которая может содержать параметры, и возвращать результат.

Увы, я не знаю теории, но знаю практику...
в данном случае, самп скриптинг:
макрос это подмена кода при компеляции.
Сток это не функция, это подстановка написанного кода в указанные мест.


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

Вот как оно работает... а паблик тогда что? Если его можно использовать так же как сток, и он тоже может возвращать значения? Кстати я что то где то слышал про то, что паблики увеличивают размер AMX файла - это правда?


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

паблик - колбэк...


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

Quote:
Originally Posted by iEnemY
Посмотреть сообщение
Вот как оно работает... а паблик тогда что? Если его можно использовать так же как сток, и он тоже может возвращать значения? Кстати я что то где то слышал про то, что паблики увеличивают размер AMX файла - это правда?
сток ничего не возврощает и это не одно и тоже.
грубо говоря если ты написал стоковую функцию которая возвращает имя игрока, что-т типа:
pawn Код:
stock GetName(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
return name;
}
...
if(GetName(playerid) == 'vasya')
...
после компиляции это будет что-то типа этого:
pawn Код:
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
if(name == 'vasya')
...
и так в каждом месте где был вставлен сток

Колбеки это уже функции, с зарегестрированными в памяти именами.
И на объем амх файла влияет все одинаково, в основном на него влияет количество массивов в коде.


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

Насчет массивов я знаю, вот щас я узнал про if(GetName(playerid) == 'vasya'), думал так только 'a' (1 символ) можно было сравнивать, просто где то видел if(something == "something") - то выполнялось условие. В павно это не прокатило... А я то везде strcmp использовал...
В моем понимании "возвращает" - подставляет значение, на то место где была функция. Спасибо за объяснение.


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

степах после компиляции будет все в опкодах...


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

Quote:
Originally Posted by Romanius
Посмотреть сообщение
степах после компиляции будет все в опкодах...
не придерайся к мелочам!
Копать дальше придем к бинарным последовостям.


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

копать дальше тебе уже некуда, иначе у тя глазки разедутся...


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

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


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

мастер хоть на папирусе, пятросян....


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

pawn Код:
stock IsValidRpName(rpname[])
{
    new
        len = strlen(rpname)
    ;
   
    if ( len < 3 || len > 20 ) return 0;
   
    if ( !('A' <= rpname[0] <= 'Z') ) return 0;
   
    new
        name [ 2 ][ MAX_PLAYER_NAME ],
        delim,
        i = 1
    ;
   
    name[0][0] = rpname[0];
   
    while ( i != len )
    {
        switch ( rpname[i] )
        {
            case 'a'..'z':
            {
                if ( !delim )
                {
                    name[0][i] = rpname[i];
                }
                else
                {
                    name[1][i - delim - 1] = rpname[i];
                }
            }
            case '_':
            {
                if ( delim ) return 0;
               
                delim = i;
               
                if ( i < 2 ) return 0; // Минимум 2 буква перед '_'
                if ( !('A' <= rpname[++i] <= 'Z') ) return 0;
               
                name[1][0] = rpname[i];
            }
            default: return 0;
        }
        i++;
    }

    return ( strcmp(name[0], name[1], true) != 0 );
}



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

pawn Код:
stock GetHighNumber(...)
{
    new high;
    for (new i = 0; i< numargs(); i++)
        if (getarg(i) > high) high = getarg(i);
    return high;
}



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

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

pawn Код:
// SendClientMessageBreaks( chars, playerid, color, const message[  ] )

public OnPlayerConnect( playerid )
{
    SendClientMessageBreaks( 45, playerid, 0x0, "{FF0000}SA-MP is a free Massively Multiplayer Online game mod for the PC version of Rockstar Games Grand Theft Auto: San Andreas ™. " );
    return 1;
}

Pastebin


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

Ищу функцию для вывода количества пассажирских мест авто


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

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


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

да мне нужен массив хотя бы, должен же быть у кого то


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

можно попробовать автоматизировать...
но для этого нужны боты )
n = сколько влезает в автобус
сажать во все модели по n ботов
30 секунд подождать(пока сядут), затем проверять кол-во мест
или можно то же самое, но только с игроком:
сажать его поочерёдно с 0 места до максимального. но там куча багов может возникнуть...


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

pawn Код:
stock GetPlayersInVehicle(vehicleid)// DANGER_HIDDEN
{//для получения кол-ва игроков в данной машине
    new amount = 0;
    for(new i = 0; i < GetMaxPlayers(); i++)
    {
        if(!IsPlayerConnected(i) || !IsPlayerInVehicle(i,vehicleid)) continue;
        amount++;
    }
    return amount;
}
вы не про это?


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

Quote:
Originally Posted by DiSE
Посмотреть сообщение
вы не про это?
нет.


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

Quote:
Originally Posted by CrunkBankS
Посмотреть сообщение
да мне нужен массив хотя бы, должен же быть у кого то
Ну есть же поиск по форуму...
Код:
stock GetVehicleMaxPassengers(iModel)
{
    if(400 <= iModel <= 611)
    {
        static
            s_MaxPassengers[] =
            {
                271782163, 288428337, 288559891, -2146225407, 327282960, 271651075, 268443408, 286339857, 319894289, 823136512, 805311233,
                285414161, 286331697, 268513553, 18026752, 286331152, 286261297, 286458129, 856765201, 286331137, 856690995, 269484528, 
                51589393, -15658689, 322109713, -15527663, 65343    
            }
        ;
        return ((s_MaxPassengers[(iModel -= 400) >>> 3] >>> ((iModel & 7) << 2)) & 0xF);
    }
    return 0xF;
}
//RyDeR`