Здесь будут храниться макросы, выложенные пользователями форума.
После добавления макроса, первый пост будет обновляться.
Вид для печати
Здесь будут храниться макросы, выложенные пользователями форума.
После добавления макроса, первый пост будет обновляться.
По-моему, это дело сугубо индивидуальное. Кому-то удобнее писать "SCM", вместе "SendClientMessage", а кому-то наоборот (например, мне. Ибо в первом случае теряется вся читабельность)
Прибавляет к pvar типа integer, указанное значение.PHP код:
#define give_int(%1,%2,%3) SetPVarInt(%1,%2,GetPVarInt(%1,%2)+%3)
Позволяет форматировать сообщения для игрока в 1 строку!PHP код:
#define SFCM(%0,%1,%2) do{new _s[256];format(_s,256,%2);SendClientMessage(%0,%1,_s) ;}while(false)
P.S довольно старый, но полезный макрос
Пример:PHP код:
SFCM(playerid, -1, "У вас на руках: $%d", GetPlayerMoney(playerid));
Макрос для обмена значений переменныхPHP код:
#define swap(%0,%1) %0^=%1;%1^=%0;%0^=%1;
зачем?Цитата:
new FALSE = false;
а потом удивляемся, откуда берутся быдлокодеры.Цитата:
#define SFCM(%0,%1,%2) do{new _s[256];format(_s,256,%2);SendClientMessage(%0,%1,_s) ;}while(FALSE)
Update.
Delete.
Ну вот тогда вам макросец, возвращающий модуль числа
Так же с макросами можно кучу всего сделать. Например, pVar преобразуем в вид массиваPHP код:
#define abs(%0) (%0 < 0 ) ? (-%0) : (%0)
Или же как функциюPHP код:
#define BanId[%0] GetPVarInt(%0, "BanId")
Всё ограничивается только вашей фантазиейPHP код:
#define GetBanId(%0) GetPVarInt(%0, "BanId")
update.
Запускает таймер с указанием времени в секундахPHP код:
#define SetTimerSec(%1,%2,%3) SetTimer(%1,1000*%2,%3)
Update.
Получение дня недели.
Пример использования:PHP код:
#define DayOfWeek(%0,%1,%2) \
(7000 + (%2 + (%0 -= (14 - %1) / 12) + %0 / 4 - %0 / 100 + %0 / 400 + (31 * (%1 + 12 * (14 - %1) / 12 - 2)) / 12)) % 7
Автор макроса: LondlemPHP код:
static const
DayNames[][] =
{
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
}
;
new
year,
month,
day
;
getdate(year, month, day);
print(DayNames[DayOfWeek(year, month, day)]);
UPD//Londlem
Старый,но очень приятный макрос, не нужно делать форварды и публики а всего лишь 4 буквы которые тоже подсвечиваются в Pawno.PHP код:
#define void%0(%1) forward%0(%1); public%0(%1)
- - - Добавлено - - -
P.s. void на С++ как функция.
Мини-античит на деньги.
PHP код:
enum pInfo:
{
pMoney,
}
new Player[MAX_PLAYERS][pInfo];
PHP код:
#define GiveMoney(%1, %2) Player[%1][pMoney]+=%2; GivePlayerMoney(%1, %2)
UPD//Caypen
Тогда уж
PHP код:
new g_player_money[MAX_PLAYERS];
stock GivePlayerMoneyEx(playerid, money)
{
g_player_money[playerid] += money;
ResetPlayerMoney(playerid);
return GivePlayerMoney(playerid, g_player_money[playerid]);
}
#define GivePlayerMoney(%0,%1) GivePlayerMoneyEx(%0, %1)
#define ReloadPlayerMoney(%0) GivePlayerMoneyEx(%0, 0)
#define SetPlayerMoney(%0,%1) GivePlayerMoneyEx(%0, %1-g_player_money[%0])//Хотя этот макрос вряд ли будет работать правильно
Нажатие кнопки.PHP код:
#define PRESSED(%0) (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
Пример использования:
PHP код:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(PRESSED(KEY_JUMP | KEY_SPRINT) && (GetPlayerState(playerid) != 2)) ClearAnimations(playerid);
return true;
}
Отсюда взял? :D
http://wiki.sa-mp.com/wiki/OnPlayerKeyStateChange
Мой макросец заменить стоит на этот
PHP код:
#define ABS(%0) (%0 < 0) ? (-(%0)) : (%0)
Update.
Может не будем велосипед изобретать?
http://wiki.sa-mp.com/wiki/Floatabs
Ограничение количества патронов на оружие (автоматическая установка патронов на указанное количество в 3 параметре).
Пример использования:PHP код:
#define WeaponRestrict(%0,%1,%2) \
GetPlayerWeapon(%0) == %1 && GetPlayerAmmo(%0) > %2 && GivePlayerWeapon(%0, %1, -GetPlayerAmmo(%0) + %2)
Автор макроса: LondlemPHP код:
if(WeaponRestrict(playerid, 38, 500))
SendClientMessage(playerid, -1, "Запрещено носить с собой более чем 500 патронов от минигана.");
if(WeaponRestrict(playerid, WEAPON_DEAGLE, 120))
SendClientMessage(playerid, -1, "Запрещено носить с собой более чем 120 патронов от пустынного орла.");
Update.
Update.
Update.
Предлагаем новые (а главное интересные ) макросы.
Удалил один макрос, ибо он не работал.
1.Пример:PHP код:
#define min(%0) (%0*60)
2.PHP код:
AddStaticVehicleEx(420,1062.4160000,-1737.3077000,13.1495000,-90.0000000,6,6,min(15));
Пример:PHP код:
#define RandomEx(%1,%2) (random(%2-%1)+%1)
3.PHP код:
if(RandomEx(0,25) == 3) print("Random равен 3");
PHP код:
#define IsName(%0,%1) (strcmp(PlayerName[%0],%1,true) == 0)
Пример:
P.S: PlayerName замените на свойPHP код:
CMD:test(playerid)
{
if(!IsName(playerid,"Admin_Adminovich") return true;
print("Команда /test");
return true;
}
Проверяет пароль на соответствие. Необходим плагин regex.
Проверяет email на валидность по стандартам RFC. Необходим плагин regex.Код:#define IsValidPassword(%1) regex_match(%1, "^[a-zA-Z0-9_]{8,32}$")
Бесконечное значениеКод:#define IsValidEmail(%1) regex_match(%1, "^[a-zA-Z0-9_]{3,64}@[a-zA-Z0-9-]{2,250}\\.[a-zA-Z]{2,4}$")
Может пригодится кому-нибудь эта байда)Код:#define INFINITE_VALUE 0x7F800000
- - - Добавлено - - -
void в с++ это не функция. Это означает, что функция ничего не возвращает.
Костыли для zcmd
PHP код:
#if defined _zcmd_included
// by Untonyst
#define zcmd::%0(%1)\
CallLocalFunction(#cmd_%0, !"is", %1)
#define ZALT:%0:%1;\
forward cmd_%1(playerid, params[]);\
public cmd_%1(playerid, params[])\
return cmd_%0(playerid, params);
#endif
- Вызов команды с параметрами
PHP код:
zcmd::КОМАНДА(для кого вызываем команду, параметры);
- Альтернативное имя для команды
PHP код:
ZALT:КОМАНДА:АЛЬТЕРНАТИВНОЕ_ИМЯ;