Mr.X
05.11.2019, 12:48
Добрый день
Описание:
В моде есть массив с данными аккаунта,
static SelectCMName[24][MAX_PLAYERS];
#define SYNC_TYPES (6)
enum pInfo {
pID,
pName[MAX_PLAYER_NAME],
pKey[32],
pEmail[64],
pRefer[MAX_PLAYER_NAME],
SyncTime[SYNC_TYPES],
LastSyncUpdate[SYNC_TYPES]
}
new PlayerInfo[MAX_PLAYERS][pInfo];
//цветами чата и т.п.
#define COLOR_LIGHTBLUE 0x33CCFFFF
Планирую разделить мод на модули
К нему будут подключены несколько инклудов с различными системами, такими как кланы, работы, дома, машины ну и в таком духе.
Хочу сделать их полностью независимыми, чтоб можно было отключать каждую систему без вреда для работы мода.
Использую перехваты функций.
В каждом инклуде будут использоваться одинаковые цвета и переменные.
К примеру:
#include "clan_system.inc"
//Пример одного из диалогов
case D_CLAN_RANK:
{
if(!response) return true;
new string[128],giveplayerid;
if(sscanf(SelectCMName[playerid],"u",giveplayerid)) return true;
if(sscanf(inputtext,"i",strval(inputtext))) return ShowPlayerDialog(playerid,D_CLAN_RANK,DIALOG_STYLE_INPUT,""FPHEAD"Повысuть/Понuзuть",""FPMSG"Какой ранг Вы хотuте выдать uгроку?","Выбрать","Отмена");
if(strval(inputtext) < 1 || strval(inputtext) > 8) return ErrorMes(playerid, "Ранг может быть от 1 до 8.");
if(IsPlayerConnected(giveplayerid))
{
if(FamilyInfo[playerid][fID] != FamilyInfo[giveplayerid][fID]) return ErrorMes(playerid, "Этот uгрок не состоuт в вашем клане.");
if(playerid == giveplayerid) return ErrorMes(playerid, "Вы не можете uзменuть себе ранг.");
if(FamilyInfo[giveplayerid][fType]) return ErrorMes(playerid, "Вы не можете uзменuть ранг этому uгроку.");
if(strval(inputtext) > FamilyInfo[giveplayerid][fRank])
format(string, sizeof(string), "Вы былu повышены до %d ранга лuдером %s",strval(inputtext), PlayerInfo[playerid][pName]);
SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);
format(string, sizeof(string), "Вы повысuлu uгрока %s до %d ранга.", PlayerInfo[giveplayerid][pName], strval(inputtext));
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
}
else
{
format(string, sizeof(string), "Вы былu понuжены до %d ранга лuдером %s",strval(inputtext), PlayerInfo[playerid][pName]);
SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);
format(string, sizeof(string), "Вы понuзuлu uгрока %s до %d ранга.", PlayerInfo[giveplayerid][pName], strval(inputtext));
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
}
UpdatePlayerClanTeam(giveplayerid, 0, strval(inputtext));
}
else
{
format(string, sizeof(string), "Вы выдалu uгроку %s %d ранг.", SelectCMName[playerid], strval(inputtext));
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
format(string,sizeof(string),"UPDATE `samp_clanteam` SET `Rank` = '%d' WHERE `Name`='%s'",
strval(inputtext), SelectCMName[playerid]);
mysql_tquery(MYSQL_DEFAULT_HANDLE, string);
}
}
Собственно сам вопрос:
Как лучше всего получать значения этих переменных из мода, чтоб не объявлять их в каждый раз для каждого инклуда? И не было конфликтов.
- - - Добавлено - - -
В голову приходит следующий способ:
#if !defined COLOR_LIGHTBLUE
#define COLOR_LIGHTBLUE 0x33CCFFFF
#endif
Но каждый раз объявлять его и прочие переменные в каждом инклуде считаю не совсем корректно.
Может есть способ получше?
Описание:
В моде есть массив с данными аккаунта,
static SelectCMName[24][MAX_PLAYERS];
#define SYNC_TYPES (6)
enum pInfo {
pID,
pName[MAX_PLAYER_NAME],
pKey[32],
pEmail[64],
pRefer[MAX_PLAYER_NAME],
SyncTime[SYNC_TYPES],
LastSyncUpdate[SYNC_TYPES]
}
new PlayerInfo[MAX_PLAYERS][pInfo];
//цветами чата и т.п.
#define COLOR_LIGHTBLUE 0x33CCFFFF
Планирую разделить мод на модули
К нему будут подключены несколько инклудов с различными системами, такими как кланы, работы, дома, машины ну и в таком духе.
Хочу сделать их полностью независимыми, чтоб можно было отключать каждую систему без вреда для работы мода.
Использую перехваты функций.
В каждом инклуде будут использоваться одинаковые цвета и переменные.
К примеру:
#include "clan_system.inc"
//Пример одного из диалогов
case D_CLAN_RANK:
{
if(!response) return true;
new string[128],giveplayerid;
if(sscanf(SelectCMName[playerid],"u",giveplayerid)) return true;
if(sscanf(inputtext,"i",strval(inputtext))) return ShowPlayerDialog(playerid,D_CLAN_RANK,DIALOG_STYLE_INPUT,""FPHEAD"Повысuть/Понuзuть",""FPMSG"Какой ранг Вы хотuте выдать uгроку?","Выбрать","Отмена");
if(strval(inputtext) < 1 || strval(inputtext) > 8) return ErrorMes(playerid, "Ранг может быть от 1 до 8.");
if(IsPlayerConnected(giveplayerid))
{
if(FamilyInfo[playerid][fID] != FamilyInfo[giveplayerid][fID]) return ErrorMes(playerid, "Этот uгрок не состоuт в вашем клане.");
if(playerid == giveplayerid) return ErrorMes(playerid, "Вы не можете uзменuть себе ранг.");
if(FamilyInfo[giveplayerid][fType]) return ErrorMes(playerid, "Вы не можете uзменuть ранг этому uгроку.");
if(strval(inputtext) > FamilyInfo[giveplayerid][fRank])
format(string, sizeof(string), "Вы былu повышены до %d ранга лuдером %s",strval(inputtext), PlayerInfo[playerid][pName]);
SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);
format(string, sizeof(string), "Вы повысuлu uгрока %s до %d ранга.", PlayerInfo[giveplayerid][pName], strval(inputtext));
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
}
else
{
format(string, sizeof(string), "Вы былu понuжены до %d ранга лuдером %s",strval(inputtext), PlayerInfo[playerid][pName]);
SendClientMessage(giveplayerid, COLOR_LIGHTBLUE, string);
format(string, sizeof(string), "Вы понuзuлu uгрока %s до %d ранга.", PlayerInfo[giveplayerid][pName], strval(inputtext));
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
}
UpdatePlayerClanTeam(giveplayerid, 0, strval(inputtext));
}
else
{
format(string, sizeof(string), "Вы выдалu uгроку %s %d ранг.", SelectCMName[playerid], strval(inputtext));
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
format(string,sizeof(string),"UPDATE `samp_clanteam` SET `Rank` = '%d' WHERE `Name`='%s'",
strval(inputtext), SelectCMName[playerid]);
mysql_tquery(MYSQL_DEFAULT_HANDLE, string);
}
}
Собственно сам вопрос:
Как лучше всего получать значения этих переменных из мода, чтоб не объявлять их в каждый раз для каждого инклуда? И не было конфликтов.
- - - Добавлено - - -
В голову приходит следующий способ:
#if !defined COLOR_LIGHTBLUE
#define COLOR_LIGHTBLUE 0x33CCFFFF
#endif
Но каждый раз объявлять его и прочие переменные в каждом инклуде считаю не совсем корректно.
Может есть способ получше?