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`