В языке Pawn есть механизм состояний(автоматон) — это такая система, которая позволяет определить несколько копий одной функции для использования в различных условиях. Я начну объяснять с примера, ибо так получится более наглядно, а ниже подробно опишу эту систему.
Пример
Допустим нам нужно сохранить данные игрока и данные гонок, а также сообщить об этом игрокам и гонщикам соответственно. При обычной реализации код выглядит грязновато:
#include <a_samp> forward data_Save(type); forward message_Save(type); enum { players, races } main() { data_Save(players); message_Save(players); } public data_Save(type) { switch (type) { case players: { // saving } case races: { // saving } } } public message_Save(type) { switch (type) { case players: { // send message to player } case races: { // send message to racers } } }
А реализация с помощью автоматонов выглядит очень элегантно:
#include <a_samp> forward data_Save(); forward message_Save(); main() { state dataType:players; data_Save(); message_Save(); } public data_Save() <dataType:players> { // saving } public data_Save() <dataType:races> { // saving } public message_Save() <dataType:players> { // send message to players } public message_Save() <dataType:races> { // send message to racers }