А как между всеми файлами связать массивы, переменные? Кажется только PVar'ы можно объявить в одном файле, а использовать в других...
Как быть когда нужно в каждой системе использовать, к примеру, паблик OnDialogResponse? Прописывать его в каждом инклуде? Хотелось бы пример реализации увидеть, если это возможно.
При создании переменной с помощью new, её область видимости становится глобальной и эта переменная доступна из любых, ниже подключенных, файлов. Но обращение к переменным напрямую - это дурной тон, люди, как правило, создают несколько функций - интерфейсов, для работы с этими переменными. Например, вместо чего-то вроде: gPlayerInfo[playerid][e_pLevel] = 5, ты используешь SetPlayerLevel(playerid, 5).
Использование OnDialogResponse или других автовызываемых функций обычно заключается в использовании метода ALS. Ещё можно использовать y_hooks из YSI.
Или, если подобный подход не нравится, можно вызывать подфункции в основной OnDialogResponse.
Примерно так:
Где функции Bar_OnDialogResponse и Tuning_OnDialogResponse могут находиться где угодно.PHP код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if (Bar_OnDialogResponse(playerid, dialogid, response, listitem, inputtext)) {
return 1;
}
if (Tuning_OnDialogResponse(playerid, dialogid, response, listitem, inputtext)) {
return 1;
}
return 1;
}
Для примера могу дать свою систему соревнований (ещё не доделана), в которой данные моменты реализованы: https://github.com/Open-GTO/Open-GTO...es/competition
В основном файле, competition.pwn, есть массив gParams, этот массив имеет область видимости исключительно в этом файле, но доступ к параметрам есть откуда угодно. Достигается это с помощью реализации функции Competition_SetParamInt, Competition_GetParamInt и им подобными (Float, String). Например здесь я получаю ID карты для формирования диалога, который, как раз, реализован в отдельном для диалогов файле - competition_menu.pwn.
Также используется метод перехвата ALS. Например здесь перехватывается OnPlayerDisconnect.
Как можно заметить, вся эта система соревнований относительно просто может переехать в другие скрипты. Вся система сосредоточена в одном каталоге и использует лишь несколько внешних зависимостей - собственные системы мультиязычности и диалогов, которые доступны в виде библиотек.
Disinterpreter (01.07.2016) kushichka (28.06.2016)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)