Всё о сервере, форум!
Основы программирования
ИНФОРМАЦИОННО-РАЗВЛЕКАТЕЛЬНЫЙ ПОРТАЛ

PrR[ Проект SAMP - Romashka [0.3e] ™18+™

Pawn :: Основы скриптинга
Константы и макросы

КОНСТАНТА

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 функцию в другую, если эти функции одинаковы, но имеют разный порядок аргументов в скобках, то данный макрос поможет расставить аргументы по своим местам.

 
 

Логин: Пароль:
Забыли пароль?Регистрация
При копировании материала с сайта активная ссылка обязательна!
Сайт управляется SiNG cms © 2010-2015