From b11ed32bcfead464663f369408c7d69727a1cf40 Mon Sep 17 00:00:00 2001 From: KimLS Date: Fri, 5 Jul 2013 01:46:24 -0700 Subject: [PATCH] Removed quest queue from perl parser, should do events properly recursively --- zone/embparser.cpp | 51 +--------------------------------------------- zone/embparser.h | 19 ----------------- zone/embperl.cpp | 7 +------ 3 files changed, 2 insertions(+), 75 deletions(-) diff --git a/zone/embparser.cpp b/zone/embparser.cpp index 209d8ebcf..3547bad2d 100644 --- a/zone/embparser.cpp +++ b/zone/embparser.cpp @@ -114,7 +114,7 @@ const char *QuestEventSubroutines[_LargestEventID] = { "EVENT_DEATH_COMPLETE" }; -PerlembParser::PerlembParser() : perl(nullptr), event_queue_in_use_(false) { +PerlembParser::PerlembParser() : perl(nullptr) { global_npc_quest_status_ = questUnloaded; player_quest_status_ = questUnloaded; global_player_quest_status_ = questUnloaded; @@ -161,11 +161,6 @@ void PerlembParser::EventCommon(QuestEventID event, uint32 objid, const char * d if(event >= _LargestEventID) return; - if(perl->InUse()) { - AddQueueEvent(event, objid, data, npcmob, iteminst, mob, extradata, global, extra_pointers); - return; - } - bool isPlayerQuest = false; bool isGlobalPlayerQuest = false; bool isGlobalNPC = false; @@ -212,8 +207,6 @@ void PerlembParser::EventCommon(QuestEventID event, uint32 objid, const char * d else { SendCommands(package_name.c_str(), sub_name, objid, npcmob, mob, nullptr); } - - HandleQueue(); } int PerlembParser::EventNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data, @@ -762,48 +755,6 @@ void PerlembParser::MapFunctions() { ); } -void PerlembParser::HandleQueue() { - if(event_queue_in_use_) - return; - - event_queue_in_use_ = true; - - while(!event_queue_.empty()) { - EventRecord e = event_queue_.front(); - event_queue_.pop(); - - EventCommon(e.event, e.objid, e.data.c_str(), e.npcmob, e.iteminst, e.mob, e.extradata, e.global, &e.extra_pointers); - - for(size_t i = 0; i < e.extra_pointers.size(); ++i) { - delete e.extra_pointers[i]; - } - } - - event_queue_in_use_ = false; -} - -void PerlembParser::AddQueueEvent(QuestEventID event, uint32 objid, const char * data, NPC* npcmob, ItemInst* iteminst, Mob* mob, - uint32 extradata, bool global, std::vector *extra_pointers) -{ - EventRecord e; - e.event = event; - e.objid = objid; - e.data = data; - e.npcmob = npcmob; - e.iteminst = iteminst; - e.mob = mob; - e.extradata = extradata; - e.global = global; - - if(extra_pointers) { - for(size_t i = 0; i < extra_pointers->size(); ++i) { - e.extra_pointers.push_back(reinterpret_cast(extra_pointers->at(i))->Clone()); - } - } - - event_queue_.push(e); -} - void PerlembParser::GetQuestTypes(bool &isPlayerQuest, bool &isGlobalPlayerQuest, bool &isGlobalNPC, bool &isItemQuest, bool &isSpellQuest, QuestEventID event, NPC* npcmob, ItemInst* iteminst, Mob* mob, bool global) { diff --git a/zone/embparser.h b/zone/embparser.h index 3e429c243..5e0a2c7bf 100644 --- a/zone/embparser.h +++ b/zone/embparser.h @@ -40,18 +40,6 @@ typedef enum } PerlQuestStatus; class PerlembParser : public QuestInterface { - typedef struct { - QuestEventID event; - uint32 objid; - std::string data; - NPC* npcmob; - ItemInst* iteminst; - Mob* mob; - uint32 extradata; - bool global; - std::vector extra_pointers; - } EventRecord; - public: PerlembParser(); ~PerlembParser(); @@ -102,10 +90,6 @@ private: void SendCommands(const char *pkgprefix, const char *event, uint32 npcid, Mob* other, Mob* mob, ItemInst *iteminst); void MapFunctions(); - void HandleQueue(); - void AddQueueEvent(QuestEventID event, uint32 objid, const char * data, NPC* npcmob, ItemInst* iteminst, Mob* mob, - uint32 extradata, bool global, std::vector *extra_pointers); - void GetQuestTypes(bool &isPlayerQuest, bool &isGlobalPlayerQuest, bool &isGlobalNPC, bool &isItemQuest, bool &isSpellQuest, QuestEventID event, NPC* npcmob, ItemInst* iteminst, Mob* mob, bool global); void GetQuestPackageName(bool &isPlayerQuest, bool &isGlobalPlayerQuest, bool &isGlobalNPC, bool &isItemQuest, @@ -128,9 +112,6 @@ private: std::map item_quest_status_; std::map spell_quest_status_; - bool event_queue_in_use_; - std::queue event_queue_; - std::map vars_; SV *_empty_sv; }; diff --git a/zone/embperl.cpp b/zone/embperl.cpp index bbfbfd981..e088ce42c 100644 --- a/zone/embperl.cpp +++ b/zone/embperl.cpp @@ -259,12 +259,7 @@ void Embperl::eval_file(const char * packagename, const char * filename) } void Embperl::dosub(const char * subname, const std::vector * args, int mode) -{//as seen in perlembed docs -#if EQDEBUG >= 5 - if(InUse()) { - LogFile->write(EQEMuLog::Debug, "Warning: Perl dosub called for %s when perl is allready in use.\n", subname); - } -#endif +{ in_use = true; bool err = false; dSP; /* initialize stack pointer */