КОНСТАНТА
Define – это директива позволяющая создавать константы и макросы.
- Константы, это неизменяемые переменные, они сильно упрощают работу скриптерам.
- Константой можно заменить трудно запоминающие элементы кода, такие как, например HEX-код цвета, которым выделяется строка.
- В SAMP есть множество встроенных констант. Их можно увидеть в файле, а_samp.inc.
Приведу пример констант:
#define COLOR_GREY 0xAFAFAFAA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_RED 0xAA3333AA
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_ORANGE 0xFF8000AA
#define COLOR_BRIGHTRED 0xDB0000F6
Эти константы можно использовать, например, в функции SendClientMessage, которая отправляет текстовое сообщение в чат.
Теперь вместо того, чтобы писать вот так:
1 SendClientMessage(playerid, 0xFFFF00AA,”Hello, World”);
Вы можете писать, вот так:
1 SendClientMessage(playerid,COLOR_YELLOW,”Hello, World”);
МАКРОС
С помощью простейшего макроса можно упростить себе работу, например с таймером. Забежим немного вперед. В таймерах время указывается в миллисекундах, что не очень удобно. Чтобы писать время в секундах создадим макрос SetTimerx
1 #define SetTimerx (%0,%1,%2) SetTimer(%0,%1*1000,%2)
Значении знака процента «%» с номером.
Чтобы понять их значение рассмотрим следующий пример.
Многие используют не стандартную функцию PlayerToPoint, которая, по сути, не лучше стандартной IsPlayerInRangeOfPoint. Разница функций лишь в том, что у их первые два параметра поменялись местами, а в остальном они одинаковы и выполняют одинаковую функцию.
Так вот, допустим, с помощью этого макроса мы хотим превратить все функции PlayerToPoint в стандартные функции IsPlayerInRangeOfPoint.
1 #define PlayerToPoint(%0,%1,%2,%3,%4) IsPlayerInRangeOfPoint(%1,%0,%2,%3,%4)
Номер перед знаком процента идентифицирует параметр по порядковому номеру. То есть параметр playerid у функции PlayerToPoint обозначен теперь – %0 (нулем), а параметр Float:radi обозначен – %1(единицей). Обратите внимание, первые две цифры внутри скобок и тех и других поменялись местами. Это значит, что когда вы будете использовать данный макрос, функция PlayerToPoint будет заменена функцией IsPlayerInRangeOfPoint, а первые два параметра функции поменяются местами, чтобы соответствовать синтаксису стандартной функции.
Данный макрос поможет в случае если нужно переделать 1 функцию в другую, если эти функции одинаковы, но имеют разный порядок аргументов в скобках, то данный макрос поможет расставить аргументы по своим местам.
|