diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 25 | ||||
| -rw-r--r-- | src/server/game/Handlers/QuestHandler.cpp | 11 | ||||
| -rw-r--r-- | src/server/game/World/World.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/World/World.h | 1 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_quest.cpp | 11 | ||||
| -rw-r--r-- | src/server/shared/Database/Implementation/CharacterDatabase.cpp | 5 | ||||
| -rw-r--r-- | src/server/shared/Database/Implementation/CharacterDatabase.h | 5 | ||||
| -rw-r--r-- | src/server/worldserver/worldserver.conf.dist | 8 | 
8 files changed, 68 insertions, 0 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 74863b7e6f2..5fa10578328 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -61,6 +61,7 @@  #include "Pet.h"  #include "QuestDef.h"  #include "ReputationMgr.h" +#include "revision.h"  #include "SkillDiscovery.h"  #include "SocialMgr.h"  #include "Spell.h" @@ -15235,6 +15236,19 @@ void Player::AddQuest(Quest const* quest, Object* questGiver)      StartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_QUEST, quest_id);      SendQuestUpdate(quest_id); + +    if (sWorld->getBoolConfig(CONFIG_QUEST_ENABLE_QUEST_TRACKER)) // check if Quest Tracker is enabled +    { +        // prepare Quest Tracker datas +        PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_QUEST_TRACK); +        stmt->setUInt32(0, quest_id); +        stmt->setUInt32(1, GetGUIDLow()); +        stmt->setString(2, _HASH); +        stmt->setString(3, _DATE); + +        // add to Quest Tracker +        CharacterDatabase.Execute(stmt); +    }  }  void Player::CompleteQuest(uint32 quest_id) @@ -15255,6 +15269,17 @@ void Player::CompleteQuest(uint32 quest_id)                  SendQuestComplete(quest_id);          }      } + +    if (sWorld->getBoolConfig(CONFIG_QUEST_ENABLE_QUEST_TRACKER)) // check if Quest Tracker is enabled +    { +        // prepare Quest Tracker datas +        PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_QUEST_TRACK_COMPLETE_TIME); +        stmt->setUInt32(0, quest_id); +        stmt->setUInt32(1, GetGUIDLow()); + +        // add to Quest Tracker +        CharacterDatabase.Execute(stmt); +    }  }  void Player::IncompleteQuest(uint32 quest_id) diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index e4e1c9988f1..7872ac6aed6 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -420,6 +420,17 @@ void WorldSession::HandleQuestLogRemoveQuest(WorldPacket& recvData)              _player->RemoveTimedAchievement(ACHIEVEMENT_TIMED_TYPE_QUEST, questId);              TC_LOG_INFO("network", "Player %u abandoned quest %u", _player->GetGUIDLow(), questId); + +            if (sWorld->getBoolConfig(CONFIG_QUEST_ENABLE_QUEST_TRACKER)) // check if Quest Tracker is enabled +            { +                // prepare Quest Tracker datas +                PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_QUEST_TRACK_ABANDON_TIME); +                stmt->setUInt32(0, questId); +                stmt->setUInt32(1, _player->GetGUIDLow()); + +                // add to Quest Tracker +                CharacterDatabase.Execute(stmt); +            }          }          _player->SetQuestSlot(slot, 0); diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 33c5042fc8d..ae474ef29b6 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -963,6 +963,8 @@ void World::LoadConfigSettings(bool reload)      m_int_configs[CONFIG_WORLD_BOSS_LEVEL_DIFF] = sConfigMgr->GetIntDefault("WorldBossLevelDiff", 3); +    m_bool_configs[CONFIG_QUEST_ENABLE_QUEST_TRACKER] = sConfigMgr->GetBoolDefault("Quests.EnableQuestTracker", false); +      // note: disable value (-1) will assigned as 0xFFFFFFF, to prevent overflow at calculations limit it to max possible player level MAX_LEVEL(100)      m_int_configs[CONFIG_QUEST_LOW_LEVEL_HIDE_DIFF] = sConfigMgr->GetIntDefault("Quests.LowLevelHideDiff", 4);      if (m_int_configs[CONFIG_QUEST_LOW_LEVEL_HIDE_DIFF] > MAX_LEVEL) diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index b9c30302f4d..5c97b8f5653 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -149,6 +149,7 @@ enum WorldBoolConfigs      CONFIG_PDUMP_NO_OVERWRITE,      CONFIG_QUEST_IGNORE_AUTO_ACCEPT,      CONFIG_QUEST_IGNORE_AUTO_COMPLETE, +    CONFIG_QUEST_ENABLE_QUEST_TRACKER,      CONFIG_WARDEN_ENABLED,      CONFIG_ENABLE_MMAPS,      CONFIG_WINTERGRASP_ENABLE, diff --git a/src/server/scripts/Commands/cs_quest.cpp b/src/server/scripts/Commands/cs_quest.cpp index dc75e0aedab..fb486128049 100644 --- a/src/server/scripts/Commands/cs_quest.cpp +++ b/src/server/scripts/Commands/cs_quest.cpp @@ -238,6 +238,17 @@ public:          if (ReqOrRewMoney < 0)              player->ModifyMoney(-ReqOrRewMoney); +        if (sWorld->getBoolConfig(CONFIG_QUEST_ENABLE_QUEST_TRACKER)) // check if Quest Tracker is enabled +        { +            // prepare Quest Tracker datas +            PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_QUEST_TRACK_GM_COMPLETE); +            stmt->setUInt32(0, quest->GetQuestId()); +            stmt->setUInt32(1, player->GetGUIDLow()); + +            // add to Quest Tracker +            CharacterDatabase.Execute(stmt); +        } +          player->CompleteQuest(entry);          return true;      } diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp index e5e563071ec..010ceb12d78 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp @@ -603,4 +603,9 @@ void CharacterDatabaseConnection::DoPrepareStatements()      PrepareStatement(CHAR_INS_PVPSTATS_BATTLEGROUND, "INSERT INTO pvpstats_battlegrounds (id, winner_faction, bracket_id, type, date) VALUES (?, ?, ?, ?, NOW())", CONNECTION_ASYNC);      PrepareStatement(CHAR_INS_PVPSTATS_PLAYER, "INSERT INTO pvpstats_players (battleground_id, character_guid, score_killing_blows, score_deaths, score_honorable_kills, score_bonus_honor, score_damage_done, score_healing_done, attr_1, attr_2, attr_3, attr_4, attr_5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); +    // QuestTracker +    PrepareStatement(CHAR_INS_QUEST_TRACK, "INSERT INTO quest_tracker (id, character_guid, quest_accept_time, core_hash, core_revision) VALUES (?, ?, NOW(), ?, ?)", CONNECTION_ASYNC); +    PrepareStatement(CHAR_UPD_QUEST_TRACK_GM_COMPLETE, "UPDATE quest_tracker SET completed_by_gm = 1 WHERE id = ? AND character_guid = ? ORDER BY quest_accept_time DESC LIMIT 1", CONNECTION_ASYNC); +    PrepareStatement(CHAR_UPD_QUEST_TRACK_COMPLETE_TIME, "UPDATE quest_tracker SET quest_complete_time = NOW() WHERE id = ? AND character_guid = ? ORDER BY quest_accept_time DESC LIMIT 1", CONNECTION_ASYNC); +    PrepareStatement(CHAR_UPD_QUEST_TRACK_ABANDON_TIME, "UPDATE quest_tracker SET quest_abandon_time = NOW() WHERE id = ? AND character_guid = ? ORDER BY quest_accept_time DESC LIMIT 1", CONNECTION_ASYNC);  } diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.h b/src/server/shared/Database/Implementation/CharacterDatabase.h index 9bc11e3f525..7305568d9ab 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.h +++ b/src/server/shared/Database/Implementation/CharacterDatabase.h @@ -536,6 +536,11 @@ enum CharacterDatabaseStatements      CHAR_INS_PVPSTATS_BATTLEGROUND,      CHAR_INS_PVPSTATS_PLAYER, +    CHAR_INS_QUEST_TRACK, +    CHAR_UPD_QUEST_TRACK_GM_COMPLETE, +    CHAR_UPD_QUEST_TRACK_COMPLETE_TIME, +    CHAR_UPD_QUEST_TRACK_ABANDON_TIME, +      MAX_CHARACTERDATABASE_STATEMENTS  }; diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index ac307a254e9..992ae4f8100 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -855,6 +855,14 @@ Instance.UnloadDelay = 1800000  InstancesResetAnnounce = false  # +#    Quests.EnableQuestTracker +#        Description: Store datas in the database about quest completion and abandonment to help finding out bugged quests. +#        Default:     0  - (Disabled) +#                     1  - (Enabled) + +Quests.EnableQuestTracker = 0 + +#  #    Quests.LowLevelHideDiff  #        Description: Level difference between player and quest level at which quests are  #                     considered low-level and are not shown via exclamation mark (!) at quest  | 
