aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
authorIntel <chemicstry@gmail.com>2014-12-28 22:55:53 +0200
committerIntel <chemicstry@gmail.com>2014-12-28 22:55:53 +0200
commita782515246d5583a4c0e5cc8834133d425920b56 (patch)
treef181c34ad982c8f63b3772f2ddf0b90a4986740f /src/server/scripts
parent0dec23b43ad8692189b511bb114ef3b772678fe3 (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')
-rw-r--r--src/server/scripts/Commands/cs_lookup.cpp6
-rw-r--r--src/server/scripts/Commands/cs_quest.cpp104
-rw-r--r--src/server/scripts/Northrend/zone_borean_tundra.cpp2
-rw-r--r--src/server/scripts/Northrend/zone_sholazar_basin.cpp9
-rw-r--r--src/server/scripts/World/go_scripts.cpp2
5 files changed, 58 insertions, 65 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
diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp
index 5585d09b0d6..f1d413c181c 100644
--- a/src/server/scripts/Northrend/zone_borean_tundra.cpp
+++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp
@@ -2052,7 +2052,7 @@ public:
{
Quest const* qInfo = sObjectMgr->GetQuestTemplate(QUEST_YOU_RE_NOT_SO_BIG_NOW);
if (qInfo)
- player->KilledMonsterCredit(qInfo->RequiredNpcOrGo[0]);
+ player->KilledMonsterCredit(qInfo->Objectives[0].ObjectID);
}
}
};
diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp
index f4275121101..21468ccce90 100644
--- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp
+++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp
@@ -493,16 +493,15 @@ public:
if (!quest)
return;
- QuestStatusMap::const_iterator itr = player->getQuestStatusMap().find(QUEST_TASTE_TEST);
- if (itr->second.Status != QUEST_STATUS_INCOMPLETE)
+ if (player->GetQuestStatus(QUEST_TASTE_TEST) != QUEST_STATUS_INCOMPLETE)
return;
- for (uint8 i = 0; i < 3; ++i)
+ for (uint32 i = 0; i < quest->Objectives.size(); ++i)
{
- if (uint32(quest->RequiredNpcOrGo[i]) != me->GetEntry())
+ if (uint32(quest->Objectives[i].ObjectID) != me->GetEntry())
continue;
- if (itr->second.CreatureOrGOCount[i] != 0)
+ if (player->GetQuestObjectiveData(quest, i) != 0)
continue;
player->KilledMonsterCredit(me->GetEntry());
diff --git a/src/server/scripts/World/go_scripts.cpp b/src/server/scripts/World/go_scripts.cpp
index 800b533d216..625a8fb05bf 100644
--- a/src/server/scripts/World/go_scripts.cpp
+++ b/src/server/scripts/World/go_scripts.cpp
@@ -898,7 +898,7 @@ public:
if (qInfo)
{
/// @todo prisoner should help player for a short period of time
- player->KilledMonsterCredit(qInfo->RequiredNpcOrGo[0]);
+ player->KilledMonsterCredit(qInfo->Objectives[0].ObjectID);
pPrisoner->DisappearAndDie();
}
return true;