int QuestParserCollection::EventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data, std::vector<void*> *extra_pointers) { std::map<uint32, uint32>::iterator iter = _spell_quest_status.find(spell_id); if(iter != _spell_quest_status.end()) { //loaded or failed to load if(iter->second != QuestFailedToLoad) { std::map<uint32, QuestInterface*>::iterator qiter = _interfaces.find(iter->second); int ret = DispatchEventSpell(evt, npc, client, spell_id, extra_data, extra_pointers); int i = qiter->second->EventSpell(evt, npc, client, spell_id, extra_data, extra_pointers); if(i != 0) { ret = i; } return ret; } return DispatchEventSpell(evt, npc, client, spell_id, extra_data, extra_pointers); } else { std::string filename; QuestInterface *qi = GetQIBySpellQuest(spell_id, filename); if(qi) { _spell_quest_status[spell_id] = qi->GetIdentifier(); qi->LoadSpellScript(filename, spell_id); int ret = DispatchEventSpell(evt, npc, client, spell_id, extra_data, extra_pointers); int i = qi->EventSpell(evt, npc, client, spell_id, extra_data, extra_pointers); if(i != 0) { ret = i; } return ret; } else { _spell_quest_status[spell_id] = QuestFailedToLoad; return DispatchEventSpell(evt, npc, client, spell_id, extra_data, extra_pointers); } } return 0; }
bool QuestParserCollection::SpellHasQuestSub(uint32 spell_id, QuestEventID evt) { std::map<uint32, uint32>::iterator iter = _spell_quest_status.find(spell_id); if(iter != _spell_quest_status.end()) { //loaded or failed to load if(iter->second != QuestFailedToLoad) { std::map<uint32, QuestInterface*>::iterator qiter = _interfaces.find(iter->second); return qiter->second->SpellHasQuestSub(spell_id, evt); } } else { std::string filename; QuestInterface *qi = GetQIBySpellQuest(spell_id, filename); if(qi) { _spell_quest_status[spell_id] = qi->GetIdentifier(); qi->LoadSpellScript(filename, spell_id); return qi->SpellHasQuestSub(spell_id, evt); } else { _spell_quest_status[spell_id] = QuestFailedToLoad; } } return false; }