Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

FAQ Автоматоны

#Djuga

Специалист
Автоматоны в Pawn​

[HR][/HR]
Доброго времени уважаемые пользователи портала. В этом уроке я хотел бы рассказать вам об автоматонах, раннее уже была создана тема, но я затрону их более подробно, да и тем более она лежит в архиве.

Что такое автоматоны?
Автоматоны - это система, которая позволяет определить несколько одинаковых функций, но к сожалению это не перегрузки (а так хотелось(а может и да?))).

Для чего они применяются?
С их помощью можно несколько упростить написание двух и более методов, в случае с автоматонами это будут некие состояния функций.

Как же их использовать?
Итак, сейчас я вам покажу несколько примеров использования автоматонов, которые мы подробно разберём
PHP:
public OnGameModeInit() 
{ 
 state messageTo:admins; // Установка текущего состояния 
 SendMessage("Test message"); // Вызов функции 
} 
 
forward SendMessage(message[]); 
public SendMessage(message[]) <messageTo:admins> 
{ 
 for(new i = GetPlayerPoolSize(); —i != -1;) if(IsPlayerAdmin(i)) SendClientMessage(i,-1,message); 
} 
 
public SendMessage(message[]) <messageTo:players> 
{ 
 for(new i = GetPlayerPoolSize(); —i != -1;) SendClientMessage(i,-1,message); 
}
Итак, как вы могли заметить, после определения функции идёт <messageTo:admins> - что же это значит?
Так вот, это определяет для данной функции состояние (messageTo:)admins, и при установке данного состояния, будет вызываться именно эта функция.
Ну, а в случае если мы установим состояние (messageTo:)players, то будет вызываться функция, которая отправит сообщение всем игрокам.

Я надеюсь вам было не сложно понять как их использовать, и текущих знаний я думаю хватит для использования атоматонов, ну а для тех, кто хочет углубиться - мы продолжаем!

Что такое Entry()?
Entry() - функция, которая вызывается при установке состояния, и сейчас мы рассмотрим пример, а я попытаюсь объяснить.
PHP:
public OnGameModeInit() 
{ 
 state messageTo:admins; // Установка текущего состояния 
 SendMessage("Test message"); // Вызов функции 
} 
 
forward SendMessage(message[]); 
public SendMessage(message[]) <messageTo:admins> 
{ 
 for(new i = GetPlayerPoolSize(); —i != -1;) if(IsPlayerAdmin(i)) SendClientMessage(i,-1,message); 
} 
 
public SendMessage(message[]) <messageTo:players> 
{ 
 for(new i = GetPlayerPoolSize(); —i != -1;) SendClientMessage(i,-1,message); 
} 
 
entry() <messageTo:admins> 
{ 
 new hour,minute,second; 
 gettime(hour,minute,second); 
 printf("Всем администраторам было отправлено сообщение в %02d:%02d:%02d",hour,minute,second); 
}
Итак, вроде бы ничего не изменилось, разве что добавилась функция, делая простой дебаг, но вопрос - где же она вызывается?
Всё на самом деле просто она вызывается перед ф-цией SendMessage, то есть на данном моменте: "state messageTo:admins".
Просто, правда? Ладно, идем дальше, и думаю хватит.

Всевозможные объявления автоматонов
Итак, автоматоны можно объявлять несколькими способами:
1.) С одним состоянием:
PHP:
public SendMessage(message[]) <messageTo:admins>
2.) С двумя и более состояниями:
PHP:
public SendMessage(message[]) <messageTo:admins, messageTo:players>
3.) С абсолютно(нупочти) любим состоянием:
PHP:
public SendMessage(message[]) <>
Надеюсь данный урок помог вам в получении новых знаний или оптимизации своих гейммодов, пользуйтесь на здоровье!


[HR][/HR]

Домашнее задание
Итак, всё вполне просто. Напишите регистрацию/авторизацию двумя методами - если подключение к базе не удалось, то регистрация будет на файлах, если удалось - на MySQL. Дерзайте!

[HR][/HR]

При размещении на других порталах, указывайте автора -#Djuga​
 
Последнее редактирование:
Сверху Снизу