mirror of
https://github.com/OpenFusionProject/OpenFusion.git
synced 2024-11-05 06:50:04 +00:00
Move from isGM to Account Levels (#106)
Co-authored-by: dongresource <dongresource@protonmail.com>
This commit is contained in:
parent
5d8bb7f8a5
commit
adf017b07c
10
config.ini
10
config.ini
@ -34,8 +34,14 @@ xdtdata=tdata/xdt.json
|
|||||||
mobdata=tdata/mobs.json
|
mobdata=tdata/mobs.json
|
||||||
# path json
|
# path json
|
||||||
pathdata=tdata/paths.json
|
pathdata=tdata/paths.json
|
||||||
# is everyone a GM?
|
|
||||||
gm=true
|
# account permission level that will be set upon character creation
|
||||||
|
# 1 = default, will allow *all* commands
|
||||||
|
# 30 = allow some more "abusable" commands such as /summon
|
||||||
|
# 50 = only allow cheat commands, like /itemN and /speed
|
||||||
|
# 99 = standard user account, no cheats allowed
|
||||||
|
# any number higher than 50 will disable commands
|
||||||
|
accountlevel=1
|
||||||
|
|
||||||
# spawn coordinates (Z is height)
|
# spawn coordinates (Z is height)
|
||||||
# the supplied defaults are at Sector V (future)
|
# the supplied defaults are at Sector V (future)
|
||||||
|
@ -52,7 +52,7 @@ auto db = make_storage("database.db",
|
|||||||
make_column("Height", &Database::DbPlayer::Height),
|
make_column("Height", &Database::DbPlayer::Height),
|
||||||
make_column("NameCheck", &Database::DbPlayer::NameCheck),
|
make_column("NameCheck", &Database::DbPlayer::NameCheck),
|
||||||
make_column("SkinColor", &Database::DbPlayer::SkinColor),
|
make_column("SkinColor", &Database::DbPlayer::SkinColor),
|
||||||
make_column("isGM", &Database::DbPlayer::isGM),
|
make_column("AccountLevel", &Database::DbPlayer::AccountLevel),
|
||||||
make_column("FusionMatter", &Database::DbPlayer::FusionMatter),
|
make_column("FusionMatter", &Database::DbPlayer::FusionMatter),
|
||||||
make_column("Taros", &Database::DbPlayer::Taros),
|
make_column("Taros", &Database::DbPlayer::Taros),
|
||||||
make_column("Quests", &Database::DbPlayer::QuestFlag),
|
make_column("Quests", &Database::DbPlayer::QuestFlag),
|
||||||
@ -202,7 +202,7 @@ int Database::createCharacter(sP_CL2LS_REQ_SAVE_CHAR_NAME* save, int AccountID)
|
|||||||
create.HairStyle = 1;
|
create.HairStyle = 1;
|
||||||
create.Height = 0;
|
create.Height = 0;
|
||||||
create.SkinColor = 1;
|
create.SkinColor = 1;
|
||||||
create.isGM = settings::GM;
|
create.AccountLevel = settings::ACCLEVEL;
|
||||||
create.x_coordinates = settings::SPAWN_X;
|
create.x_coordinates = settings::SPAWN_X;
|
||||||
create.y_coordinates = settings::SPAWN_Y;
|
create.y_coordinates = settings::SPAWN_Y;
|
||||||
create.z_coordinates = settings::SPAWN_Z;
|
create.z_coordinates = settings::SPAWN_Z;
|
||||||
@ -347,7 +347,7 @@ Database::DbPlayer Database::playerToDb(Player *player)
|
|||||||
result.HairStyle = player->PCStyle.iHairStyle;
|
result.HairStyle = player->PCStyle.iHairStyle;
|
||||||
result.Height = player->PCStyle.iHeight;
|
result.Height = player->PCStyle.iHeight;
|
||||||
result.HP = player->HP;
|
result.HP = player->HP;
|
||||||
result.isGM = player->IsGM;
|
result.AccountLevel = player->accountLevel;
|
||||||
result.LastName = U16toU8(player->PCStyle.szLastName);
|
result.LastName = U16toU8(player->PCStyle.szLastName);
|
||||||
result.Level = player->level;
|
result.Level = player->level;
|
||||||
result.NameCheck = player->PCStyle.iNameCheck;
|
result.NameCheck = player->PCStyle.iNameCheck;
|
||||||
@ -402,7 +402,7 @@ Player Database::DbToPlayer(DbPlayer player) {
|
|||||||
result.PCStyle.iHairStyle = player.HairStyle;
|
result.PCStyle.iHairStyle = player.HairStyle;
|
||||||
result.PCStyle.iHeight = player.Height;
|
result.PCStyle.iHeight = player.Height;
|
||||||
result.HP = player.HP;
|
result.HP = player.HP;
|
||||||
result.IsGM = player.isGM;
|
result.accountLevel = player.AccountLevel;
|
||||||
U8toU16(player.LastName, result.PCStyle.szLastName);
|
U8toU16(player.LastName, result.PCStyle.szLastName);
|
||||||
result.level = player.Level;
|
result.level = player.Level;
|
||||||
result.PCStyle.iNameCheck = player.NameCheck;
|
result.PCStyle.iNameCheck = player.NameCheck;
|
||||||
|
@ -58,7 +58,7 @@ namespace Database {
|
|||||||
short int PayZoneFlag;
|
short int PayZoneFlag;
|
||||||
short int SkinColor;
|
short int SkinColor;
|
||||||
bool TutorialFlag;
|
bool TutorialFlag;
|
||||||
bool isGM;
|
int AccountLevel;
|
||||||
int FusionMatter;
|
int FusionMatter;
|
||||||
int Taros;
|
int Taros;
|
||||||
int x_coordinates;
|
int x_coordinates;
|
||||||
|
@ -158,11 +158,10 @@ void ItemManager::itemGMGiveHandler(CNSocket* sock, CNPacketData* data) {
|
|||||||
sP_CL2FE_REQ_PC_GIVE_ITEM* itemreq = (sP_CL2FE_REQ_PC_GIVE_ITEM*)data->buf;
|
sP_CL2FE_REQ_PC_GIVE_ITEM* itemreq = (sP_CL2FE_REQ_PC_GIVE_ITEM*)data->buf;
|
||||||
PlayerView& plr = PlayerManager::players[sock];
|
PlayerView& plr = PlayerManager::players[sock];
|
||||||
|
|
||||||
// Commented and disabled for future use
|
if (plr.plr->accountLevel > 50) {
|
||||||
//if (!plr.plr->IsGM) {
|
|
||||||
// TODO: send fail packet
|
// TODO: send fail packet
|
||||||
// return;
|
return;
|
||||||
//}
|
}
|
||||||
|
|
||||||
if (itemreq->eIL == 2) {
|
if (itemreq->eIL == 2) {
|
||||||
// Quest item, not a real item, handle this later, stubbed for now
|
// Quest item, not a real item, handle this later, stubbed for now
|
||||||
|
@ -408,7 +408,7 @@ void NPCManager::npcUnsummonHandler(CNSocket* sock, CNPacketData* data) {
|
|||||||
if (data->size != sizeof(sP_CL2FE_REQ_NPC_UNSUMMON))
|
if (data->size != sizeof(sP_CL2FE_REQ_NPC_UNSUMMON))
|
||||||
return; // malformed packet
|
return; // malformed packet
|
||||||
|
|
||||||
if (!PlayerManager::getPlayer(sock)->IsGM)
|
if (PlayerManager::getPlayer(sock)->accountLevel > 30)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
sP_CL2FE_REQ_NPC_UNSUMMON* req = (sP_CL2FE_REQ_NPC_UNSUMMON*)data->buf;
|
sP_CL2FE_REQ_NPC_UNSUMMON* req = (sP_CL2FE_REQ_NPC_UNSUMMON*)data->buf;
|
||||||
@ -424,7 +424,7 @@ void NPCManager::npcSummonHandler(CNSocket* sock, CNPacketData* data) {
|
|||||||
Player* plr = PlayerManager::getPlayer(sock);
|
Player* plr = PlayerManager::getPlayer(sock);
|
||||||
|
|
||||||
// permission & sanity check
|
// permission & sanity check
|
||||||
if (!plr->IsGM || req->iNPCType >= 3314)
|
if (plr->accountLevel > 30 || req->iNPCType >= 3314)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
resp.NPCAppearanceData.iNPC_ID = NPCs.size()+1;
|
resp.NPCAppearanceData.iNPC_ID = NPCs.size()+1;
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
struct Player {
|
struct Player {
|
||||||
int accountId;
|
int accountId;
|
||||||
|
int accountLevel; // permission level (see CN_ACCOUNT_LEVEL enums)
|
||||||
int64_t SerialKey;
|
int64_t SerialKey;
|
||||||
int32_t iID;
|
int32_t iID;
|
||||||
uint64_t FEKey;
|
uint64_t FEKey;
|
||||||
@ -42,7 +43,6 @@ struct Player {
|
|||||||
int32_t moneyInTrade;
|
int32_t moneyInTrade;
|
||||||
bool isTrading;
|
bool isTrading;
|
||||||
bool isTradeConfirm;
|
bool isTradeConfirm;
|
||||||
bool IsGM;
|
|
||||||
|
|
||||||
int64_t aQuestFlag[16];
|
int64_t aQuestFlag[16];
|
||||||
int tasks[ACTIVE_MISSION_COUNT];
|
int tasks[ACTIVE_MISSION_COUNT];
|
||||||
|
@ -202,7 +202,7 @@ void PlayerManager::enterPlayer(CNSocket* sock, CNPacketData* data) {
|
|||||||
|
|
||||||
response.iID = plr.iID;
|
response.iID = plr.iID;
|
||||||
response.uiSvrTime = getTime();
|
response.uiSvrTime = getTime();
|
||||||
response.PCLoadData2CL.iUserLevel = plr.level;
|
response.PCLoadData2CL.iUserLevel = plr.accountLevel;
|
||||||
response.PCLoadData2CL.iHP = plr.HP;
|
response.PCLoadData2CL.iHP = plr.HP;
|
||||||
response.PCLoadData2CL.iLevel = plr.level;
|
response.PCLoadData2CL.iLevel = plr.level;
|
||||||
response.PCLoadData2CL.iCandy = plr.money;
|
response.PCLoadData2CL.iCandy = plr.money;
|
||||||
|
@ -40,7 +40,7 @@ void TransportManager::transportRegisterLocationHandler(CNSocket* sock, CNPacket
|
|||||||
}
|
}
|
||||||
|
|
||||||
// update registration bitfield using bitmask
|
// update registration bitfield using bitmask
|
||||||
uint32_t newScamperFlag = plr->iWarpLocationFlag | (plr->IsGM ? UINT32_MAX : (1UL << (transport->iLocationID - 1)));
|
uint32_t newScamperFlag = plr->iWarpLocationFlag | (plr->accountLevel <= 40 ? UINT32_MAX : (1UL << (transport->iLocationID - 1)));
|
||||||
if (newScamperFlag != plr->iWarpLocationFlag) {
|
if (newScamperFlag != plr->iWarpLocationFlag) {
|
||||||
plr->iWarpLocationFlag = newScamperFlag;
|
plr->iWarpLocationFlag = newScamperFlag;
|
||||||
newReg = true;
|
newReg = true;
|
||||||
@ -61,7 +61,7 @@ void TransportManager::transportRegisterLocationHandler(CNSocket* sock, CNPacket
|
|||||||
/*
|
/*
|
||||||
* assuming the two bitfields are just stuck together to make a longer one, do a similar operation
|
* assuming the two bitfields are just stuck together to make a longer one, do a similar operation
|
||||||
*/
|
*/
|
||||||
if (plr->IsGM) {
|
if (plr->accountLevel <= 40) {
|
||||||
plr->aSkywayLocationFlag[0] = UINT64_MAX;
|
plr->aSkywayLocationFlag[0] = UINT64_MAX;
|
||||||
plr->aSkywayLocationFlag[1] = UINT64_MAX;
|
plr->aSkywayLocationFlag[1] = UINT64_MAX;
|
||||||
newReg = true;
|
newReg = true;
|
||||||
|
@ -24,7 +24,7 @@ std::string settings::XDTJSON = "tdata/xdt.json";
|
|||||||
std::string settings::MOBJSON = "tdata/mobs.json";
|
std::string settings::MOBJSON = "tdata/mobs.json";
|
||||||
std::string settings::PATHJSON = "tdata/paths.json";
|
std::string settings::PATHJSON = "tdata/paths.json";
|
||||||
std::string settings::MOTDSTRING = "Welcome to OpenFusion!";
|
std::string settings::MOTDSTRING = "Welcome to OpenFusion!";
|
||||||
bool settings::GM = true;
|
int settings::ACCLEVEL = 1;
|
||||||
|
|
||||||
void settings::init() {
|
void settings::init() {
|
||||||
INIReader reader("config.ini");
|
INIReader reader("config.ini");
|
||||||
@ -55,5 +55,5 @@ void settings::init() {
|
|||||||
MOBJSON = reader.Get("shard", "mobdata", MOBJSON);
|
MOBJSON = reader.Get("shard", "mobdata", MOBJSON);
|
||||||
PATHJSON = reader.Get("shard", "pathdata", PATHJSON);
|
PATHJSON = reader.Get("shard", "pathdata", PATHJSON);
|
||||||
MOTDSTRING = reader.Get("shard", "motd", MOTDSTRING);
|
MOTDSTRING = reader.Get("shard", "motd", MOTDSTRING);
|
||||||
GM = reader.GetBoolean("shard", "gm", GM);
|
ACCLEVEL = reader.GetBoolean("shard", "accountlevel", ACCLEVEL);
|
||||||
}
|
}
|
||||||
|
@ -13,12 +13,12 @@ namespace settings {
|
|||||||
extern int SPAWN_Y;
|
extern int SPAWN_Y;
|
||||||
extern int SPAWN_Z;
|
extern int SPAWN_Z;
|
||||||
extern int SPAWN_ANGLE;
|
extern int SPAWN_ANGLE;
|
||||||
|
extern int ACCLEVEL;
|
||||||
extern std::string MOTDSTRING;
|
extern std::string MOTDSTRING;
|
||||||
extern std::string NPCJSON;
|
extern std::string NPCJSON;
|
||||||
extern std::string XDTJSON;
|
extern std::string XDTJSON;
|
||||||
extern std::string MOBJSON;
|
extern std::string MOBJSON;
|
||||||
extern std::string PATHJSON;
|
extern std::string PATHJSON;
|
||||||
extern bool GM;
|
|
||||||
|
|
||||||
void init();
|
void init();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user