diff options
| author | Intel <chemicstry@gmail.com> | 2014-12-28 22:55:53 +0200 |
|---|---|---|
| committer | Intel <chemicstry@gmail.com> | 2014-12-28 22:55:53 +0200 |
| commit | a782515246d5583a4c0e5cc8834133d425920b56 (patch) | |
| tree | f181c34ad982c8f63b3772f2ddf0b90a4986740f /src/server/scripts/Commands | |
| parent | 0dec23b43ad8692189b511bb114ef3b772678fe3 (diff) | |
Core/Quests: Updated Quest System to new Format
All quest requirements are now in quest_objectives table
quest_template table contains _ONLY_ WDB data and must not be modified
Currently supported objectives are MONSTER, GAMEOBJECT, ITEM, TALKTO, CURRENCY, REPUTATION, MONEY, PLAYERKILLS, AREATRIGGER
Diffstat (limited to 'src/server/scripts/Commands')
| -rw-r--r-- | src/server/scripts/Commands/cs_lookup.cpp | 6 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_quest.cpp | 104 |
2 files changed, 52 insertions, 58 deletions
diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp index d746b07af75..f92e62f2aa9 100644 --- a/src/server/scripts/Commands/cs_lookup.cpp +++ b/src/server/scripts/Commands/cs_lookup.cpp @@ -599,9 +599,9 @@ public: uint8 ulocaleIndex = uint8(localeIndex); if (QuestLocale const* questLocale = sObjectMgr->GetQuestLocale(qInfo->GetQuestId())) { - if (questLocale->Title.size() > ulocaleIndex && !questLocale->Title[ulocaleIndex].empty()) + if (questLocale->LogTitle.size() > ulocaleIndex && !questLocale->LogTitle[ulocaleIndex].empty()) { - std::string title = questLocale->Title[ulocaleIndex]; + std::string title = questLocale->LogTitle[ulocaleIndex]; if (Utf8FitTo(title, wNamePart)) { @@ -647,7 +647,7 @@ public: } } - std::string title = qInfo->GetTitle(); + std::string title = qInfo->GetLogTitle(); if (title.empty()) continue; diff --git a/src/server/scripts/Commands/cs_quest.cpp b/src/server/scripts/Commands/cs_quest.cpp index 91ccd358f93..26806ce6785 100644 --- a/src/server/scripts/Commands/cs_quest.cpp +++ b/src/server/scripts/Commands/cs_quest.cpp @@ -180,67 +180,61 @@ public: return false; } - // Add quest items for quests that require items - for (uint8 x = 0; x < QUEST_ITEM_OBJECTIVES_COUNT; ++x) + for (uint32 i = 0; i < quest->Objectives.size(); ++i) { - uint32 id = quest->RequiredItemId[x]; - uint32 count = quest->RequiredItemCount[x]; - if (!id || !count) - continue; + QuestObjective const& obj = quest->Objectives[i]; - uint32 curItemCount = player->GetItemCount(id, true); - - ItemPosCountVec dest; - uint8 msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, id, count-curItemCount); - if (msg == EQUIP_ERR_OK) - { - Item* item = player->StoreNewItem(dest, id, true); - player->SendNewItem(item, count-curItemCount, true, false); - } - } - - // All creature/GO slain/cast (not required, but otherwise it will display "Creature slain 0/10") - for (uint8 i = 0; i < QUEST_OBJECTIVES_COUNT; ++i) - { - int32 creature = quest->RequiredNpcOrGo[i]; - uint32 creatureCount = quest->RequiredNpcOrGoCount[i]; - - if (creature > 0) + switch (obj.Type) { - if (CreatureTemplate const* creatureInfo = sObjectMgr->GetCreatureTemplate(creature)) - for (uint16 z = 0; z < creatureCount; ++z) - player->KilledMonster(creatureInfo, ObjectGuid::Empty); + case QUEST_OBJECTIVE_ITEM: + { + uint32 curItemCount = player->GetItemCount(obj.ObjectID, true); + ItemPosCountVec dest; + uint8 msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, obj.ObjectID, obj.Amount - curItemCount); + if (msg == EQUIP_ERR_OK) + { + Item* item = player->StoreNewItem(dest, obj.ObjectID, true); + player->SendNewItem(item, obj.Amount - curItemCount, true, false); + } + break; + } + case QUEST_OBJECTIVE_MONSTER: + { + if (CreatureTemplate const* creatureInfo = sObjectMgr->GetCreatureTemplate(obj.ObjectID)) + for (uint16 z = 0; z < obj.Amount; ++z) + player->KilledMonster(creatureInfo, ObjectGuid::Empty); + break; + } + case QUEST_OBJECTIVE_GAMEOBJECT: + { + for (uint16 z = 0; z < obj.Amount; ++z) + player->KillCreditGO(obj.ObjectID); + break; + } + case QUEST_OBJECTIVE_MIN_REPUTATION: + { + uint32 curRep = player->GetReputationMgr().GetReputation(obj.ObjectID); + if (curRep < uint32(obj.Amount)) + if (FactionEntry const* factionEntry = sFactionStore.LookupEntry(obj.ObjectID)) + player->GetReputationMgr().SetReputation(factionEntry, obj.Amount); + break; + } + case QUEST_OBJECTIVE_MAX_REPUTATION: + { + uint32 curRep = player->GetReputationMgr().GetReputation(obj.ObjectID); + if (curRep > uint32(obj.Amount)) + if (FactionEntry const* factionEntry = sFactionStore.LookupEntry(obj.ObjectID)) + player->GetReputationMgr().SetReputation(factionEntry, obj.Amount); + break; + } + case QUEST_OBJECTIVE_MONEY: + { + player->ModifyMoney(obj.Amount); + break; + } } - else if (creature < 0) - for (uint16 z = 0; z < creatureCount; ++z) - player->KillCreditGO(creature); } - // If the quest requires reputation to complete - if (uint32 repFaction = quest->GetRepObjectiveFaction()) - { - uint32 repValue = quest->GetRepObjectiveValue(); - uint32 curRep = player->GetReputationMgr().GetReputation(repFaction); - if (curRep < repValue) - if (FactionEntry const* factionEntry = sFactionStore.LookupEntry(repFaction)) - player->GetReputationMgr().SetReputation(factionEntry, repValue); - } - - // If the quest requires a SECOND reputation to complete - if (uint32 repFaction = quest->GetRepObjectiveFaction2()) - { - uint32 repValue2 = quest->GetRepObjectiveValue2(); - uint32 curRep = player->GetReputationMgr().GetReputation(repFaction); - if (curRep < repValue2) - if (FactionEntry const* factionEntry = sFactionStore.LookupEntry(repFaction)) - player->GetReputationMgr().SetReputation(factionEntry, repValue2); - } - - // If the quest requires money - int32 ReqOrRewMoney = quest->GetRewOrReqMoney(); - if (ReqOrRewMoney < 0) - player->ModifyMoney(-ReqOrRewMoney); - if (sWorld->getBoolConfig(CONFIG_QUEST_ENABLE_QUEST_TRACKER)) // check if Quest Tracker is enabled { // prepare Quest Tracker datas |
