licenses.inc Система лицензий в битовой реализации
На форуме почти в каждом уроке посвященному битовым операциям упоминается про систему лицензий, которую можно сделать с их помощью, но никто (по крайней мере я не видел) не делал конкретный пример, который можно подключить и пользоваться. Я написал инклуд, который использует всего 1 одномерный массив на MAX_PLAYERS ячеек, который и будет хранить все лицензии.
Исходный код
PHP код:
#include <a_samp>
stock licenses[MAX_PLAYERS];
//Посмотреть лицензию
#define GetLicCar(%0) (licenses[%0] & 1 ? true : false)
#define GetLicPlane(%0) (licenses[%0] & (1<<1) ? true : false)
#define GetLicShip(%0) (licenses[%0] & (1<<2) ? true : false)
#define GetLicBiz(%0) (licenses[%0] & (1<<3) ? true : false)
#define GetLicFish(%0) (licenses[%0] & (1<<4) ? true : false)
//Выдать лицензию
#define GiveLicCar(%0) (licenses[%0] |= 1)
#define GiveLicPlane(%0) (licenses[%0] |= (1<<1))
#define GiveLicShip(%0) (licenses[%0] |= (1<<2))
#define GiveLicBiz(%0) (licenses[%0] |= (1<<3))
#define GiveLicFish(%0) (licenses[%0] |= (1<<4))
//Забрать лицензию
#define TakeLicCar(%0) (licenses[%0] &= ~1)
#define TakeLicPlane(%0) (licenses[%0] &= ~(1<<1))
#define TakeLicShip(%0) (licenses[%0] &= ~(1<<2))
#define TakeLicBiz(%0) (licenses[%0] &= ~(1<<3))
#define TakeLicFish(%0) (licenses[%0] &= ~(1<<4))
#define GetPlayerLicsValue(%0) licenses[%0]
#define SetPlayerLicsValue(%0,%1) (licenses[%0] = %1)
Просто вставляем это в мод, либо подключаем в виде инклуда.
P.S. Хранить в БД нужно всего 1-о число.
Пример сохранения:
PHP код:
mysql_format(DATABASE, string, sizeof(string), "UPDATE `accounts` SET `pLicenses` = %d WHERE `pID` = %d LIMIT 1",
GetPlayerLicsValue(playerid), pInfo[playerid][pID]);
Пример инициализации:
PHP код:
SetPlayerLicsValue(playerid, cache_get_field_content_int(0, "pLicenses", DATABASE));