diff options
Diffstat (limited to 'src/server/game/Globals/ObjectMgr.cpp')
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 75 |
1 files changed, 44 insertions, 31 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 7ca6602eace..5cc304223e6 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -52,7 +52,6 @@ #include "World.h" ScriptMapMap sQuestEndScripts; -ScriptMapMap sQuestStartScripts; ScriptMapMap sSpellScripts; ScriptMapMap sGameObjectScripts; ScriptMapMap sEventScripts; @@ -64,7 +63,6 @@ std::string GetScriptsTableNameByType(ScriptsType type) switch (type) { case SCRIPTS_QUEST_END: res = "quest_end_scripts"; break; - case SCRIPTS_QUEST_START: res = "quest_start_scripts";break; case SCRIPTS_SPELL: res = "spell_scripts"; break; case SCRIPTS_GAMEOBJECT: res = "gameobject_scripts"; break; case SCRIPTS_EVENT: res = "event_scripts"; break; @@ -80,7 +78,6 @@ ScriptMapMap* GetScriptsMapByType(ScriptsType type) switch (type) { case SCRIPTS_QUEST_END: res = &sQuestEndScripts; break; - case SCRIPTS_QUEST_START: res = &sQuestStartScripts; break; case SCRIPTS_SPELL: res = &sSpellScripts; break; case SCRIPTS_GAMEOBJECT: res = &sGameObjectScripts; break; case SCRIPTS_EVENT: res = &sEventScripts; break; @@ -3470,8 +3467,8 @@ void ObjectMgr::LoadQuests() "DetailsEmote1, DetailsEmote2, DetailsEmote3, DetailsEmote4, DetailsEmoteDelay1, DetailsEmoteDelay2, DetailsEmoteDelay3, DetailsEmoteDelay4, EmoteOnIncomplete, EmoteOnComplete, " // 164 165 166 167 168 169 170 171 "OfferRewardEmote1, OfferRewardEmote2, OfferRewardEmote3, OfferRewardEmote4, OfferRewardEmoteDelay1, OfferRewardEmoteDelay2, OfferRewardEmoteDelay3, OfferRewardEmoteDelay4, " - // 172 173 174 - "StartScript, CompleteScript, WDBVerified" + // 173 174 + "CompleteScript, WDBVerified" " FROM quest_template"); if (!result) { @@ -3538,6 +3535,15 @@ void ObjectMgr::LoadQuests() } } + if (qinfo->Flags & QUEST_SPECIAL_FLAGS_MONTHLY) + { + if (!(qinfo->Flags & QUEST_SPECIAL_FLAGS_REPEATABLE)) + { + sLog->outError(LOG_FILTER_SQL, "Monthly quest %u not marked as repeatable in `SpecialFlags`, added.", qinfo->GetQuestId()); + qinfo->Flags |= QUEST_SPECIAL_FLAGS_REPEATABLE; + } + } + if (qinfo->Flags & QUEST_FLAGS_AUTO_REWARDED) { // at auto-reward can be rewarded only RewardChoiceItemId[0] @@ -4632,18 +4638,6 @@ void ObjectMgr::LoadQuestEndScripts() } } -void ObjectMgr::LoadQuestStartScripts() -{ - LoadScripts(SCRIPTS_QUEST_START); - - // check ids - for (ScriptMapMap::const_iterator itr = sQuestStartScripts.begin(); itr != sQuestStartScripts.end(); ++itr) - { - if (!GetQuestTemplate(itr->first)) - sLog->outError(LOG_FILTER_SQL, "Table `quest_start_scripts` has not existing quest (Id: %u) as script id", itr->first); - } -} - void ObjectMgr::LoadSpellScripts() { LoadScripts(SCRIPTS_SPELL); @@ -6607,13 +6601,11 @@ void ObjectMgr::LoadReputationRewardRate() _repRewardRateStore.clear(); // for reload case - uint32 count = 0; // 0 1 2 3 - QueryResult result = WorldDatabase.Query("SELECT faction, quest_rate, creature_rate, spell_rate FROM reputation_reward_rate"); - + uint32 count = 0; // 0 1 2 3 4 5 6 + QueryResult result = WorldDatabase.Query("SELECT faction, quest_rate, quest_daily_rate, quest_weekly_rate, quest_monthly_rate, creature_rate, spell_rate FROM reputation_reward_rate"); if (!result) { sLog->outError(LOG_FILTER_SQL, ">> Loaded `reputation_reward_rate`, table is empty!"); - return; } @@ -6621,13 +6613,16 @@ void ObjectMgr::LoadReputationRewardRate() { Field* fields = result->Fetch(); - uint32 factionId = fields[0].GetUInt32(); + uint32 factionId = fields[0].GetUInt32(); RepRewardRate repRate; - repRate.quest_rate = fields[1].GetFloat(); - repRate.creature_rate = fields[2].GetFloat(); - repRate.spell_rate = fields[3].GetFloat(); + repRate.questRate = fields[1].GetFloat(); + repRate.questDailyRate = fields[2].GetFloat(); + repRate.questWeeklyRate = fields[3].GetFloat(); + repRate.questMonthlyRate = fields[4].GetFloat(); + repRate.creatureRate = fields[5].GetFloat(); + repRate.spellRate = fields[6].GetFloat(); FactionEntry const* factionEntry = sFactionStore.LookupEntry(factionId); if (!factionEntry) @@ -6636,21 +6631,39 @@ void ObjectMgr::LoadReputationRewardRate() continue; } - if (repRate.quest_rate < 0.0f) + if (repRate.questRate < 0.0f) + { + sLog->outError(LOG_FILTER_SQL, "Table reputation_reward_rate has quest_rate with invalid rate %f, skipping data for faction %u", repRate.questRate, factionId); + continue; + } + + if (repRate.questDailyRate < 0.0f) + { + sLog->outError(LOG_FILTER_SQL, "Table reputation_reward_rate has quest_daily_rate with invalid rate %f, skipping data for faction %u", repRate.questDailyRate, factionId); + continue; + } + + if (repRate.questWeeklyRate < 0.0f) + { + sLog->outError(LOG_FILTER_SQL, "Table reputation_reward_rate has quest_weekly_rate with invalid rate %f, skipping data for faction %u", repRate.questWeeklyRate, factionId); + continue; + } + + if (repRate.questMonthlyRate < 0.0f) { - sLog->outError(LOG_FILTER_SQL, "Table reputation_reward_rate has quest_rate with invalid rate %f, skipping data for faction %u", repRate.quest_rate, factionId); + sLog->outError(LOG_FILTER_SQL, "Table reputation_reward_rate has quest_monthly_rate with invalid rate %f, skipping data for faction %u", repRate.questMonthlyRate, factionId); continue; } - if (repRate.creature_rate < 0.0f) + if (repRate.creatureRate < 0.0f) { - sLog->outError(LOG_FILTER_SQL, "Table reputation_reward_rate has creature_rate with invalid rate %f, skipping data for faction %u", repRate.creature_rate, factionId); + sLog->outError(LOG_FILTER_SQL, "Table reputation_reward_rate has creature_rate with invalid rate %f, skipping data for faction %u", repRate.creatureRate, factionId); continue; } - if (repRate.spell_rate < 0.0f) + if (repRate.spellRate < 0.0f) { - sLog->outError(LOG_FILTER_SQL, "Table reputation_reward_rate has spell_rate with invalid rate %f, skipping data for faction %u", repRate.spell_rate, factionId); + sLog->outError(LOG_FILTER_SQL, "Table reputation_reward_rate has spell_rate with invalid rate %f, skipping data for faction %u", repRate.spellRate, factionId); continue; } |