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

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

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

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

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

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')
...
и так в каждом месте где был вставлен сток

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

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

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

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

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

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

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

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

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

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

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
Reply

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

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

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

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

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;
}
вы не про это?
Reply

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

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`
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)