Skip to content

Commit

Permalink
Port quest tracking over from TC (TrinityCore/TrinityCore#13353) (#72)
Browse files Browse the repository at this point in the history
Co-authored-by: Francesco Borzì borzifrancesco@gmail.com
  • Loading branch information
i-am-fyre committed Mar 19, 2023
1 parent 0c0442a commit 488b190
Show file tree
Hide file tree
Showing 8 changed files with 75 additions and 3 deletions.
2 changes: 1 addition & 1 deletion cmake/MangosParams.cmake
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
set(MANGOS_EXP "CATA")
set(MANGOS_PKG "Mangos Three")
set(MANGOS_WORLD_VER 2023020100)
set(MANGOS_WORLD_VER 2023031800)
set(MANGOS_REALM_VER 2021010100)
set(MANGOS_AHBOT_VER 2021010100)
14 changes: 14 additions & 0 deletions src/game/ChatCommands/QuestCommands.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include "Chat.h"
#include "Language.h"
#include "ObjectMgr.h"
#include "World.h"
#include "SQLStorages.h"

bool ChatHandler::HandleQuestAddCommand(char* args)
Expand Down Expand Up @@ -232,6 +233,19 @@ bool ChatHandler::HandleQuestCompleteCommand(char* args)
player->ModifyMoney(-ReqOrRewMoney);
}

if (sWorld.getConfig(CONFIG_BOOL_ENABLE_QUEST_TRACKER)) // check if Quest Tracker is enabled
{
DEBUG_LOG("QUEST TRACKER: Quest Completed by GM.");
static SqlStatementID CHAR_UPD_QUEST_TRACK_GM_COMPLETE;
// prepare Quest Tracker datas
SqlStatement stmt = CharacterDatabase.CreateStatement(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");
stmt.addUInt32(pQuest->GetQuestId());
stmt.addUInt32(player->GetGUIDLow());

// add to Quest Tracker
stmt.Execute();
}

player->CompleteQuest(entry, QUEST_STATUS_FORCE_COMPLETE);
return true;
}
30 changes: 30 additions & 0 deletions src/game/Object/Player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
#include "OutdoorPvP/OutdoorPvP.h"
#include "ArenaTeam.h"
#include "Chat.h"
#include "revision_data.h"
#include "Database/DatabaseImpl.h"
#include "Spell.h"
#include "ScriptMgr.h"
Expand Down Expand Up @@ -15894,6 +15895,22 @@ void Player::AddQuest(Quest const* pQuest, Object* questGiver)
}

UpdateForQuestWorldObjects();

if (sWorld.getConfig(CONFIG_BOOL_ENABLE_QUEST_TRACKER)) // check if Quest Tracker is enabled
{
DEBUG_LOG("QUEST TRACKER: Quest Added.");

static SqlStatementID CHAR_INS_QUEST_TRACK;
// prepare Quest Tracker datas
SqlStatement stmt = CharacterDatabase.CreateStatement(CHAR_INS_QUEST_TRACK, "INSERT INTO `quest_tracker` (`id`, `character_guid`, `quest_accept_time`, `core_hash`, `core_revision`) VALUES (?, ?, NOW(), ?, ?)");
stmt.addUInt32(quest_id);
stmt.addUInt32(GetGUIDLow());
stmt.addString(REVISION_HASH);
stmt.addString(REVISION_DATE);

// add to Quest Tracker
stmt.Execute();
}
}

void Player::CompleteQuest(uint32 quest_id, QuestStatus status)
Expand All @@ -15916,6 +15933,19 @@ void Player::CompleteQuest(uint32 quest_id, QuestStatus status)
}
}
}

if (sWorld.getConfig(CONFIG_BOOL_ENABLE_QUEST_TRACKER)) // check if Quest Tracker is enabled
{
DEBUG_LOG("QUEST TRACKER: Quest Completed.");
static SqlStatementID CHAR_UPD_QUEST_TRACK_COMPLETE_TIME;
// prepare Quest Tracker datas
SqlStatement stmt = CharacterDatabase.CreateStatement(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");
stmt.addUInt32(quest_id);
stmt.addUInt32(GetGUIDLow());

// add to Quest Tracker
stmt.Execute();
}
}

void Player::RewardQuest(Quest const* pQuest, uint32 reward, Object* questGiver, bool announce)
Expand Down
13 changes: 13 additions & 0 deletions src/game/WorldHandlers/QuestHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,19 @@ void WorldSession::HandleQuestLogRemoveQuest(WorldPacket& recv_data)

_player->SetQuestStatus(quest, QUEST_STATUS_NONE);

if (sWorld.getConfig(CONFIG_BOOL_ENABLE_QUEST_TRACKER)) // check if Quest Tracker is enabled
{
DEBUG_LOG("QUEST TRACKER: Quest Abandoned.");
static SqlStatementID CHAR_UPD_QUEST_TRACK_ABANDON_TIME;
// prepare Quest Tracker datas
SqlStatement stmt = CharacterDatabase.CreateStatement(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");
stmt.addUInt32(quest);
stmt.addUInt32(_player->GetGUIDLow());

// add to Quest Tracker
stmt.Execute();
}

// Used by Eluna
#ifdef ENABLE_ELUNA
sEluna->OnQuestAbandon(_player, quest);
Expand Down
2 changes: 2 additions & 0 deletions src/game/WorldHandlers/World.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -897,6 +897,8 @@ void World::LoadConfigSettings(bool reload)

setConfig(CONFIG_BOOL_PET_UNSUMMON_AT_MOUNT, "PetUnsummonAtMount", true);

setConfig(CONFIG_BOOL_ENABLE_QUEST_TRACKER, "QuestTracker.Enable", 0);

// Warden
/* badly broken on m3 :( - this causes all these defaults to be set to 0
setConfig(CONFIG_BOOL_WARDEN_WIN_ENABLED, "Warden.WinEnabled", true);
Expand Down
2 changes: 2 additions & 0 deletions src/game/WorldHandlers/World.h
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,8 @@ enum eConfigBoolValues
CONFIG_BOOL_ELUNA_ENABLED,
CONFIG_BOOL_PLAYER_COMMANDS,
CONFIG_BOOL_GUILD_LEVELING_ENABLED,
CONFIG_BOOL_ENABLE_QUEST_TRACKER,

// Warden
CONFIG_BOOL_WARDEN_WIN_ENABLED,
CONFIG_BOOL_WARDEN_OSX_ENABLED,
Expand Down
11 changes: 11 additions & 0 deletions src/mangosd/mangosd.conf.dist.in
Original file line number Diff line number Diff line change
Expand Up @@ -1806,6 +1806,17 @@ Currency.ResetHour = 6
Currency.ConquestPointsDefaultWeekCap = 135000
Currency.ConquestPointsArenaReward = 12000

###################################################################################################
# QUEST TRACKER
# QuestTracker.Enable
# Description: Store data in the database about quest completion and abandonment to help find bugged quests.
# Default: 0 - (Disabled)
# 1 - (Enabled)
#
###################################################################################################

QuestTracker.Enable= 0

###################################################################################################
# WARDEN SETTINGS
#
Expand Down
4 changes: 2 additions & 2 deletions src/shared/revision_data.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@

#define CHAR_DB_VERSION_NR "22"
#define CHAR_DB_STRUCTURE_NR "3"
#define CHAR_DB_CONTENT_NR "1"
#define CHAR_DB_UPDATE_DESCRIPT "Character_Ticket"
#define CHAR_DB_CONTENT_NR "2"
#define CHAR_DB_UPDATE_DESCRIPT "Add_Quest_Tracker_Table"

#define WORLD_DB_VERSION_NR "22"
#define WORLD_DB_STRUCTURE_NR "4"
Expand Down

0 comments on commit 488b190

Please sign in to comment.