Merge pull request #43 from savisxss/eventflag
Add EventFlag-based quest enable/disable system
This commit is contained in:
@@ -1501,6 +1501,11 @@ namespace quest
|
|||||||
return it->second;
|
return it->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CQuestManager::IsEventFlagSet(const string& name)
|
||||||
|
{
|
||||||
|
return m_mapEventFlag.find(name) != m_mapEventFlag.end();
|
||||||
|
}
|
||||||
|
|
||||||
void CQuestManager::BroadcastEventFlagOnLogin(LPCHARACTER ch)
|
void CQuestManager::BroadcastEventFlagOnLogin(LPCHARACTER ch)
|
||||||
{
|
{
|
||||||
int iEventFlagValue;
|
int iEventFlagValue;
|
||||||
@@ -1569,6 +1574,27 @@ namespace quest
|
|||||||
|
|
||||||
bool CQuestManager::ExecuteQuestScript(PC& pc, const string& quest_name, const int state, const char* code, const int code_size, vector<AArgScript*>* pChatScripts, bool bUseCache)
|
bool CQuestManager::ExecuteQuestScript(PC& pc, const string& quest_name, const int state, const char* code, const int code_size, vector<AArgScript*>* pChatScripts, bool bUseCache)
|
||||||
{
|
{
|
||||||
|
// Check if quest is enabled via event flag
|
||||||
|
// Only blocks if flag is explicitly set to 0 (default is enabled)
|
||||||
|
string quest_flag = "quest_" + quest_name + "_enabled";
|
||||||
|
|
||||||
|
if (CQuestManager::instance().IsEventFlagSet(quest_flag)
|
||||||
|
&& CQuestManager::instance().GetEventFlag(quest_flag) == 0)
|
||||||
|
{
|
||||||
|
if (test_server)
|
||||||
|
sys_log(0, "QUEST: Quest %s is disabled via event flag %s", quest_name.c_str(), quest_flag.c_str());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check global quest disable flag (only if explicitly set)
|
||||||
|
if (CQuestManager::instance().IsEventFlagSet("quests_global_enabled")
|
||||||
|
&& CQuestManager::instance().GetEventFlag("quests_global_enabled") == 0)
|
||||||
|
{
|
||||||
|
if (test_server)
|
||||||
|
sys_log(0, "QUEST: All quests are disabled via quests_global_enabled flag");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// 실행공간을 생성
|
// 실행공간을 생성
|
||||||
QuestState qs = CQuestManager::instance().OpenState(quest_name, state);
|
QuestState qs = CQuestManager::instance().OpenState(quest_name, state);
|
||||||
if (pChatScripts)
|
if (pChatScripts)
|
||||||
|
|||||||
@@ -157,6 +157,7 @@ namespace quest
|
|||||||
|
|
||||||
void SetEventFlag(const string& name, int value);
|
void SetEventFlag(const string& name, int value);
|
||||||
int GetEventFlag(const string& name);
|
int GetEventFlag(const string& name);
|
||||||
|
bool IsEventFlagSet(const string& name); // Check if flag exists
|
||||||
void BroadcastEventFlagOnLogin(LPCHARACTER ch);
|
void BroadcastEventFlagOnLogin(LPCHARACTER ch);
|
||||||
|
|
||||||
void SendEventFlagList(LPCHARACTER ch);
|
void SendEventFlagList(LPCHARACTER ch);
|
||||||
|
|||||||
@@ -457,6 +457,22 @@ namespace quest
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if NPC quests are disabled via event flag
|
||||||
|
// Only blocks if flag is explicitly set to 0 (default is enabled)
|
||||||
|
if (m_vnum > 0)
|
||||||
|
{
|
||||||
|
string npc_flag_str = "quest_npc_" + std::to_string(m_vnum) + "_enabled";
|
||||||
|
|
||||||
|
// Only check if flag is explicitly set
|
||||||
|
if (CQuestManager::instance().IsEventFlagSet(npc_flag_str)
|
||||||
|
&& CQuestManager::instance().GetEventFlag(npc_flag_str) == 0)
|
||||||
|
{
|
||||||
|
if (test_server)
|
||||||
|
sys_log(0, "QUEST: NPC %u quests are disabled via event flag %s", m_vnum, npc_flag_str.c_str());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (pc.IsRunning())
|
if (pc.IsRunning())
|
||||||
{
|
{
|
||||||
if (test_server)
|
if (test_server)
|
||||||
@@ -870,6 +886,22 @@ namespace quest
|
|||||||
|
|
||||||
bool NPC::OnChat(PC& pc)
|
bool NPC::OnChat(PC& pc)
|
||||||
{
|
{
|
||||||
|
// Check if NPC quests are disabled via event flag
|
||||||
|
// Only blocks if flag is explicitly set to 0 (default is enabled)
|
||||||
|
if (m_vnum > 0)
|
||||||
|
{
|
||||||
|
string npc_flag_str = "quest_npc_" + std::to_string(m_vnum) + "_enabled";
|
||||||
|
|
||||||
|
// Only check if flag is explicitly set
|
||||||
|
if (CQuestManager::instance().IsEventFlagSet(npc_flag_str)
|
||||||
|
&& CQuestManager::instance().GetEventFlag(npc_flag_str) == 0)
|
||||||
|
{
|
||||||
|
if (test_server)
|
||||||
|
sys_log(0, "QUEST: NPC %u chat quests are disabled via event flag %s", m_vnum, npc_flag_str.c_str());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (pc.IsRunning())
|
if (pc.IsRunning())
|
||||||
{
|
{
|
||||||
if (test_server)
|
if (test_server)
|
||||||
|
|||||||
Reference in New Issue
Block a user