mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 17:51:28 +00:00
Export quest::is_content_flag_enabled and quest::set_content_flag
This commit is contained in:
parent
50c266982f
commit
a4b027db58
@ -48,21 +48,6 @@ void WorldContentService::SetExpansionContext()
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldContentService::SetCurrentExpansion(int current_expansion)
|
|
||||||
{
|
|
||||||
WorldContentService::current_expansion = current_expansion;
|
|
||||||
}
|
|
||||||
|
|
||||||
const std::vector<std::string> &WorldContentService::GetContentFlags() const
|
|
||||||
{
|
|
||||||
return content_flags;
|
|
||||||
}
|
|
||||||
|
|
||||||
void WorldContentService::SetContentFlags(std::vector<std::string> content_flags)
|
|
||||||
{
|
|
||||||
WorldContentService::content_flags = content_flags;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string WorldContentService::GetCurrentExpansionName()
|
std::string WorldContentService::GetCurrentExpansionName()
|
||||||
{
|
{
|
||||||
if (content_service.GetCurrentExpansion() == Expansion::EXPANSION_ALL) {
|
if (content_service.GetCurrentExpansion() == Expansion::EXPANSION_ALL) {
|
||||||
@ -75,3 +60,42 @@ std::string WorldContentService::GetCurrentExpansionName()
|
|||||||
|
|
||||||
return "Unknown Expansion";
|
return "Unknown Expansion";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param current_expansion
|
||||||
|
*/
|
||||||
|
void WorldContentService::SetCurrentExpansion(int current_expansion)
|
||||||
|
{
|
||||||
|
WorldContentService::current_expansion = current_expansion;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
const std::vector<std::string> &WorldContentService::GetContentFlags() const
|
||||||
|
{
|
||||||
|
return content_flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param content_flags
|
||||||
|
*/
|
||||||
|
void WorldContentService::SetContentFlags(std::vector<std::string> content_flags)
|
||||||
|
{
|
||||||
|
WorldContentService::content_flags = content_flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param content_flag
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
bool WorldContentService::IsContentFlagEnabled(const std::string& content_flag)
|
||||||
|
{
|
||||||
|
for (auto &flag : GetContentFlags()) {
|
||||||
|
if (flag == content_flag) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|||||||
@ -159,10 +159,11 @@ public:
|
|||||||
bool IsCurrentExpansionTormentOfVelious() { return current_expansion == Expansion::ExpansionNumber::TormentOfVelious; }
|
bool IsCurrentExpansionTormentOfVelious() { return current_expansion == Expansion::ExpansionNumber::TormentOfVelious; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int current_expansion;
|
int current_expansion{};
|
||||||
std::vector<std::string> content_flags;
|
std::vector<std::string> content_flags;
|
||||||
public:
|
public:
|
||||||
const std::vector<std::string> &GetContentFlags() const;
|
const std::vector<std::string> &GetContentFlags() const;
|
||||||
|
bool IsContentFlagEnabled(const std::string& content_flag);
|
||||||
void SetContentFlags(std::vector<std::string> content_flags);
|
void SetContentFlags(std::vector<std::string> content_flags);
|
||||||
void SetExpansionContext();
|
void SetExpansionContext();
|
||||||
};
|
};
|
||||||
|
|||||||
@ -4883,6 +4883,34 @@ XS(XS__IsCurrentExpansionTormentOfVelious) {
|
|||||||
XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1);
|
XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
XS(XS__IsContentFlagEnabled);
|
||||||
|
XS(XS__IsContentFlagEnabled) {
|
||||||
|
dXSARGS;
|
||||||
|
if (items != 1) {
|
||||||
|
Perl_croak(aTHX_ "Usage: quest::is_content_flag_enabled(string flag_name)");
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string flag_name = (std::string) SvPV_nolen(ST(0));
|
||||||
|
|
||||||
|
bool RETVAL; dXSTARG;
|
||||||
|
RETVAL = content_service.IsContentFlagEnabled(flag_name);
|
||||||
|
XSprePUSH; PUSHu((IV) RETVAL); XSRETURN(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
XS(XS__SetContentFlag);
|
||||||
|
XS(XS__SetContentFlag)
|
||||||
|
{
|
||||||
|
dXSARGS;
|
||||||
|
if (items != 2) {
|
||||||
|
Perl_croak(aTHX_ "Usage: quest::set_content_flag(string flag_name, enabled)");
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string flag_name = (std::string) SvPV_nolen(ST(0));
|
||||||
|
bool enabled = (int) SvIV(ST(1)) != 0;
|
||||||
|
ZoneStore::SetContentFlag(flag_name, enabled);
|
||||||
|
XSRETURN_EMPTY;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This is the callback perl will look for to setup the
|
This is the callback perl will look for to setup the
|
||||||
quest package's XSUBs
|
quest package's XSUBs
|
||||||
@ -5216,6 +5244,12 @@ EXTERN_C XS(boot_quest) {
|
|||||||
newXS(strcpy(buf, "is_current_expansion_the_burning_lands"), XS__IsCurrentExpansionTheBurningLands, file);
|
newXS(strcpy(buf, "is_current_expansion_the_burning_lands"), XS__IsCurrentExpansionTheBurningLands, file);
|
||||||
newXS(strcpy(buf, "is_current_expansion_torment_of_velious"), XS__IsCurrentExpansionTormentOfVelious, file);
|
newXS(strcpy(buf, "is_current_expansion_torment_of_velious"), XS__IsCurrentExpansionTormentOfVelious, file);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Content flags
|
||||||
|
*/
|
||||||
|
newXS(strcpy(buf, "is_content_flag_enabled"), XS__IsContentFlagEnabled, file);
|
||||||
|
newXS(strcpy(buf, "set_content_flag"), XS__SetContentFlag, file);
|
||||||
|
|
||||||
XSRETURN_YES;
|
XSRETURN_YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1726,6 +1726,14 @@ bool lua_is_current_expansion_torment_of_velious() {
|
|||||||
return content_service.IsCurrentExpansionTormentOfVelious();
|
return content_service.IsCurrentExpansionTormentOfVelious();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool lua_is_content_flag_enabled(std::string content_flag){
|
||||||
|
return content_service.IsContentFlagEnabled(content_flag);
|
||||||
|
}
|
||||||
|
|
||||||
|
void lua_set_content_flag(std::string flag_name, bool enabled){
|
||||||
|
ZoneStore::SetContentFlag(flag_name, enabled);
|
||||||
|
}
|
||||||
|
|
||||||
#define LuaCreateNPCParse(name, c_type, default_value) do { \
|
#define LuaCreateNPCParse(name, c_type, default_value) do { \
|
||||||
cur = table[#name]; \
|
cur = table[#name]; \
|
||||||
if(luabind::type(cur) != LUA_TNIL) { \
|
if(luabind::type(cur) != LUA_TNIL) { \
|
||||||
@ -2205,7 +2213,13 @@ luabind::scope lua_register_general() {
|
|||||||
luabind::def("is_current_expansion_empires_of_kunark", &lua_is_current_expansion_empires_of_kunark),
|
luabind::def("is_current_expansion_empires_of_kunark", &lua_is_current_expansion_empires_of_kunark),
|
||||||
luabind::def("is_current_expansion_ring_of_scale", &lua_is_current_expansion_ring_of_scale),
|
luabind::def("is_current_expansion_ring_of_scale", &lua_is_current_expansion_ring_of_scale),
|
||||||
luabind::def("is_current_expansion_the_burning_lands", &lua_is_current_expansion_the_burning_lands),
|
luabind::def("is_current_expansion_the_burning_lands", &lua_is_current_expansion_the_burning_lands),
|
||||||
luabind::def("is_current_expansion_torment_of_velious", &lua_is_current_expansion_torment_of_velious)
|
luabind::def("is_current_expansion_torment_of_velious", &lua_is_current_expansion_torment_of_velious),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Content flags
|
||||||
|
*/
|
||||||
|
luabind::def("is_content_flag_enabled", (bool(*)(std::string*))&lua_is_content_flag_enabled),
|
||||||
|
luabind::def("set_content_flag", (void(*)(std::string*, bool*))&lua_set_content_flag)
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -409,20 +409,7 @@ int main(int argc, char** argv) {
|
|||||||
|
|
||||||
content_service.SetExpansionContext();
|
content_service.SetExpansionContext();
|
||||||
|
|
||||||
std::vector<std::string> set_content_flags;
|
ZoneStore::LoadContentFlags();
|
||||||
auto content_flags = ContentFlagsRepository::GetWhere("enabled = 1");
|
|
||||||
set_content_flags.reserve(content_flags.size());
|
|
||||||
|
|
||||||
for (auto &flags: content_flags) {
|
|
||||||
set_content_flags.push_back(flags.flag_name);
|
|
||||||
|
|
||||||
LogInfo(
|
|
||||||
"Enabled content flag [{}]",
|
|
||||||
flags.flag_name
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
content_service.SetContentFlags(set_content_flags);
|
|
||||||
|
|
||||||
#ifdef BOTS
|
#ifdef BOTS
|
||||||
LogInfo("Loading bot commands");
|
LogInfo("Loading bot commands");
|
||||||
|
|||||||
@ -19,6 +19,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "zone_store.h"
|
#include "zone_store.h"
|
||||||
|
#include "../common/repositories/content_flags_repository.h"
|
||||||
|
#include "../common/content/world_content_service.h"
|
||||||
|
|
||||||
ZoneStore::ZoneStore() = default;
|
ZoneStore::ZoneStore() = default;
|
||||||
ZoneStore::~ZoneStore() = default;
|
ZoneStore::~ZoneStore() = default;
|
||||||
@ -28,6 +30,10 @@ void ZoneStore::LoadZones()
|
|||||||
zones = ZoneRepository::All();
|
zones = ZoneRepository::All();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param in_zone_name
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
uint32 ZoneStore::GetZoneID(const char *in_zone_name)
|
uint32 ZoneStore::GetZoneID(const char *in_zone_name)
|
||||||
{
|
{
|
||||||
if (in_zone_name == nullptr) {
|
if (in_zone_name == nullptr) {
|
||||||
@ -39,6 +45,10 @@ uint32 ZoneStore::GetZoneID(const char *in_zone_name)
|
|||||||
return GetZoneID(zone_name);
|
return GetZoneID(zone_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param zone_name
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
uint32 ZoneStore::GetZoneID(std::string zone_name)
|
uint32 ZoneStore::GetZoneID(std::string zone_name)
|
||||||
{
|
{
|
||||||
for (auto &z: zones) {
|
for (auto &z: zones) {
|
||||||
@ -130,3 +140,53 @@ ZoneRepository::Zone ZoneStore::GetZone(const char *in_zone_name)
|
|||||||
|
|
||||||
return ZoneRepository::Zone();
|
return ZoneRepository::Zone();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
void ZoneStore::LoadContentFlags()
|
||||||
|
{
|
||||||
|
std::vector<std::string> set_content_flags;
|
||||||
|
auto content_flags = ContentFlagsRepository::GetWhere("enabled = 1");
|
||||||
|
|
||||||
|
for (auto &flags: content_flags) {
|
||||||
|
set_content_flags.push_back(flags.flag_name);
|
||||||
|
|
||||||
|
LogInfo(
|
||||||
|
"Enabled content flag [{}]",
|
||||||
|
flags.flag_name
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
content_service.SetContentFlags(set_content_flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the value in the database and proceeds to load content flags into the server context again
|
||||||
|
*
|
||||||
|
* @param content_flag_name
|
||||||
|
* @param enabled
|
||||||
|
*/
|
||||||
|
void ZoneStore::SetContentFlag(const std::string &content_flag_name, bool enabled)
|
||||||
|
{
|
||||||
|
auto content_flags = ContentFlagsRepository::GetWhere(
|
||||||
|
fmt::format("flag_name = '{}'", content_flag_name)
|
||||||
|
);
|
||||||
|
|
||||||
|
auto content_flag = ContentFlagsRepository::NewEntity();
|
||||||
|
if (!content_flags.empty()) {
|
||||||
|
content_flag = content_flags.front();
|
||||||
|
}
|
||||||
|
|
||||||
|
content_flag.enabled = enabled ? 1 : 0;
|
||||||
|
content_flag.flag_name = content_flag_name;
|
||||||
|
|
||||||
|
if (!content_flags.empty()) {
|
||||||
|
ContentFlagsRepository::UpdateOne(content_flag);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ContentFlagsRepository::InsertOne(content_flag);
|
||||||
|
}
|
||||||
|
|
||||||
|
LoadContentFlags();
|
||||||
|
}
|
||||||
|
|||||||
@ -23,6 +23,7 @@
|
|||||||
|
|
||||||
#include "zonedb.h"
|
#include "zonedb.h"
|
||||||
#include "../common/repositories/zone_repository.h"
|
#include "../common/repositories/zone_repository.h"
|
||||||
|
#include "../common/repositories/base/base_content_flags_repository.h"
|
||||||
|
|
||||||
class ZoneStore {
|
class ZoneStore {
|
||||||
public:
|
public:
|
||||||
@ -40,6 +41,9 @@ public:
|
|||||||
std::string GetZoneName(uint32 zone_id);
|
std::string GetZoneName(uint32 zone_id);
|
||||||
std::string GetZoneLongName(uint32 zone_id);
|
std::string GetZoneLongName(uint32 zone_id);
|
||||||
const char *GetZoneName(uint32 zone_id, bool error_unknown = false);
|
const char *GetZoneName(uint32 zone_id, bool error_unknown = false);
|
||||||
|
|
||||||
|
static void LoadContentFlags();
|
||||||
|
static void SetContentFlag(const std::string& content_flag_name, bool enabled);
|
||||||
};
|
};
|
||||||
|
|
||||||
extern ZoneStore zone_store;
|
extern ZoneStore zone_store;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user