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;
|
||||
}
|
||||
|
||||
bool CQuestManager::IsEventFlagSet(const string& name)
|
||||
{
|
||||
return m_mapEventFlag.find(name) != m_mapEventFlag.end();
|
||||
}
|
||||
|
||||
void CQuestManager::BroadcastEventFlagOnLogin(LPCHARACTER ch)
|
||||
{
|
||||
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)
|
||||
{
|
||||
// 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);
|
||||
if (pChatScripts)
|
||||
|
||||
@@ -157,6 +157,7 @@ namespace quest
|
||||
|
||||
void SetEventFlag(const string& name, int value);
|
||||
int GetEventFlag(const string& name);
|
||||
bool IsEventFlagSet(const string& name); // Check if flag exists
|
||||
void BroadcastEventFlagOnLogin(LPCHARACTER ch);
|
||||
|
||||
void SendEventFlagList(LPCHARACTER ch);
|
||||
|
||||
@@ -457,6 +457,22 @@ namespace quest
|
||||
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 (test_server)
|
||||
@@ -870,7 +886,23 @@ namespace quest
|
||||
|
||||
bool NPC::OnChat(PC& pc)
|
||||
{
|
||||
if (pc.IsRunning())
|
||||
// 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 (test_server)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user