bool ChatHandler::HandleQuestDelFinishCommand(const char * args, WorldSession * m_session) { if(!*args) return false; uint64 guid = m_session->GetPlayer()->GetSelection(); if (guid == 0) { SystemMessage(m_session, "You must target an npc."); return false; } Creature *unit = m_session->GetPlayer()->GetMapMgr()->GetCreature(GET_LOWGUID_PART(guid)); if(!unit) { SystemMessage(m_session, "You must target an npc."); return false; } if (!unit->isQuestGiver()) { SystemMessage(m_session, "Unit is not a valid quest giver."); return false; } uint32 quest_id = atol(args); Quest * qst = QuestStorage.LookupEntry(quest_id); if (qst == NULL) { SystemMessage(m_session, "Invalid Quest selected."); return false; } std::string quest_giver = MyConvertIntToString(unit->GetEntry()); std::string my_query1 = "SELECT id FROM creature_quest_finisher WHERE id = " + quest_giver + " AND quest = " + string(args); QueryResult *selectResult1 = WorldDatabase.Query(my_query1.c_str()); if (selectResult1) delete selectResult1; else { SystemMessage(m_session, "Quest was NOT found for the specified NPC."); return true; } std::string my_delete1 = "DELETE FROM creature_quest_finisher WHERE id = " + quest_giver + " AND quest = " + string(args); QueryResult *deleteResult1 = WorldDatabase.Query(my_delete1.c_str()); if (deleteResult1) delete deleteResult1; std::string my_query2 = "SELECT id FROM gameobject_quest_finisher WHERE id = " + quest_giver + " AND quest = " + string(args); QueryResult *selectResult2 = WorldDatabase.Query(my_query2.c_str()); if (selectResult2) { delete selectResult2; std::string my_delete2 = "DELETE FROM gameobject_quest_finisher WHERE id = " + quest_giver + " AND quest = " + string(args); QueryResult *deleteResult2 = WorldDatabase.Query(my_delete2.c_str()); if (deleteResult2) delete deleteResult2; } sQuestMgr.LoadExtraQuestStuff(); QuestRelation *qstrel = new QuestRelation; qstrel->qst = qst; qstrel->type = QUESTGIVER_QUEST_END; uint8 qstrelid = (uint8)unit->GetQuestRelation(quest_id); unit->FindQuest(quest_id, qstrelid); unit->DeleteQuest(qstrel); unit->_LoadQuests(); const char * qname = qst->title; std::string recout = "|cff00ff00Deleted Quest from NPC: "; recout += "|cff00ccff"; recout += qname; recout += "\n\n"; SendMultilineMessage(m_session, recout.c_str()); return true; }
bool ChatHandler::HandleQuestAddFinishCommand(const char * args, WorldSession * m_session) { if(!*args) return false; uint64 guid = m_session->GetPlayer()->GetSelection(); if (guid == 0) { SystemMessage(m_session, "You must target an npc."); return false; } Creature *unit = m_session->GetPlayer()->GetMapMgr()->GetCreature(GET_LOWGUID_PART(guid)); if(!unit) { SystemMessage(m_session, "You must target an npc."); return false; } if (!unit->isQuestGiver()) { SystemMessage(m_session, "Unit is not a valid quest giver."); return false; } uint32 quest_id = atol(args); if(quest_id== 0) { quest_id = GetQuestIDFromLink(args); if(quest_id== 0) return false; } Quest * qst = QuestStorage.LookupEntry(quest_id); if (qst == NULL) { SystemMessage(m_session, "Invalid quest selected, unable to add quest to the specified NPC."); return false; } std::string quest_giver = MyConvertIntToString(unit->GetEntry()); std::string my_query1 = "SELECT id FROM creature_quest_finisher WHERE id = " + quest_giver + " AND quest = " + string(args); QueryResult *selectResult1 = WorldDatabase.Query(my_query1.c_str()); if (selectResult1) { delete selectResult1; SystemMessage(m_session, "Quest was already found for the specified NPC."); } else { std::string my_insert1 = "INSERT INTO creature_quest_finisher (id, quest) VALUES (" + quest_giver + "," + string(args) + ")"; QueryResult *insertResult1 = WorldDatabase.Query(my_insert1.c_str()); if (insertResult1) delete insertResult1; } sQuestMgr.LoadExtraQuestStuff(); QuestRelation *qstrel = new QuestRelation; qstrel->qst = qst; qstrel->type = QUESTGIVER_QUEST_END; uint8 qstrelid; if ( unit->HasQuests() ) { qstrelid = (uint8)unit->GetQuestRelation(quest_id); unit->DeleteQuest(qstrel); } unit->_LoadQuests(); const char * qname = qst->title; std::string recout = "|cff00ff00Added Quest to NPC as finisher: "; recout += "|cff00ccff"; recout += qname; recout += "\n\n"; SendMultilineMessage(m_session, recout.c_str()); sGMLog.writefromsession( m_session, "added finisher of quest %u [%s] to NPC %u [%s]", qst->id, qst->title, unit->GetEntry(), unit->GetCreatureInfo()->Name ); delete qstrel; return true; }