From ac375fcebfe7bb5e4c5bccfea75946c0741ac692 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Tue, 11 May 2021 18:13:09 -0400 Subject: [PATCH] Core/Quests: Set quest accept time updatefield Port From (https://github.com/TrinityCore/TrinityCore/commit/d9d242bea4e9fd000098d24a5a5c5d11ea4725e4) --- .../Database/Databases/CharacterDatabase.cs | 4 +-- Source/Game/Entities/Player/Player.DB.cs | 18 ++++++---- Source/Game/Entities/Player/Player.Quest.cs | 34 +++++++++++++------ sql/base/characters_database.sql | 6 ++-- .../master/2021_05_11_00_characters.sql | 2 ++ 5 files changed, 42 insertions(+), 22 deletions(-) create mode 100644 sql/updates/characters/master/2021_05_11_00_characters.sql diff --git a/Source/Framework/Database/Databases/CharacterDatabase.cs b/Source/Framework/Database/Databases/CharacterDatabase.cs index 639b09ccd..3026fa1d4 100644 --- a/Source/Framework/Database/Databases/CharacterDatabase.cs +++ b/Source/Framework/Database/Databases/CharacterDatabase.cs @@ -92,7 +92,7 @@ namespace Framework.Database PrepareStatement(CharStatements.SEL_CHARACTER_AURAS, "SELECT casterGuid, itemGuid, spell, effectMask, recalculateMask, difficulty, stackCount, maxDuration, remainTime, remainCharges, castItemId, castItemLevel FROM character_aura WHERE guid = ?"); PrepareStatement(CharStatements.SEL_CHARACTER_AURA_EFFECTS, "SELECT casterGuid, itemGuid, spell, effectMask, effectIndex, amount, baseAmount FROM character_aura_effect WHERE guid = ?"); PrepareStatement(CharStatements.SEL_CHARACTER_SPELL, "SELECT spell, active, disabled FROM character_spell WHERE guid = ?"); - PrepareStatement(CharStatements.SEL_CHARACTER_QUESTSTATUS, "SELECT quest, status, explored, timer FROM character_queststatus WHERE guid = ? AND status <> 0"); + PrepareStatement(CharStatements.SEL_CHARACTER_QUESTSTATUS, "SELECT quest, status, explored, acceptTime, endTime FROM character_queststatus WHERE guid = ? AND status <> 0"); PrepareStatement(CharStatements.SEL_CHARACTER_QUESTSTATUS_OBJECTIVES, "SELECT quest, objective, data FROM character_queststatus_objectives WHERE guid = ?"); PrepareStatement(CharStatements.SEL_CHARACTER_QUESTSTATUS_OBJECTIVES_CRITERIA, "SELECT questObjectiveId FROM character_queststatus_objectives_criteria WHERE guid = ?"); PrepareStatement(CharStatements.SEL_CHARACTER_QUESTSTATUS_OBJECTIVES_CRITERIA_PROGRESS, "SELECT criteriaId, counter, date FROM character_queststatus_objectives_criteria_progress WHERE guid = ?"); @@ -645,7 +645,7 @@ namespace Framework.Database PrepareStatement(CharStatements.DEL_CHAR_INVENTORY_BY_ITEM, "DELETE FROM character_inventory WHERE item = ?"); PrepareStatement(CharStatements.DEL_CHAR_INVENTORY_BY_BAG_SLOT, "DELETE FROM character_inventory WHERE bag = ? AND slot = ? AND guid = ?"); PrepareStatement(CharStatements.UPD_MAIL, "UPDATE mail SET has_items = ?, expire_time = ?, deliver_time = ?, money = ?, cod = ?, checked = ? WHERE id = ?"); - PrepareStatement(CharStatements.REP_CHAR_QUESTSTATUS, "REPLACE INTO character_queststatus (guid, quest, status, explored, timer) VALUES (?, ?, ?, ?, ?)"); + PrepareStatement(CharStatements.REP_CHAR_QUESTSTATUS, "REPLACE INTO character_queststatus (guid, quest, status, explored, acceptTime, endTime) VALUES (?, ?, ?, ?, ?, ?)"); PrepareStatement(CharStatements.DEL_CHAR_QUESTSTATUS_BY_QUEST, "DELETE FROM character_queststatus WHERE guid = ? AND quest = ?"); PrepareStatement(CharStatements.REP_CHAR_QUESTSTATUS_OBJECTIVES, "REPLACE INTO character_queststatus_objectives (guid, quest, objective, data) VALUES (?, ?, ?, ?)"); PrepareStatement(CharStatements.DEL_CHAR_QUESTSTATUS_OBJECTIVES_BY_QUEST, "DELETE FROM character_queststatus_objectives WHERE guid = ? AND quest = ?"); diff --git a/Source/Game/Entities/Player/Player.DB.cs b/Source/Game/Entities/Player/Player.DB.cs index 3e56981c8..ff930b314 100644 --- a/Source/Game/Entities/Player/Player.DB.cs +++ b/Source/Game/Entities/Player/Player.DB.cs @@ -692,27 +692,30 @@ namespace Game.Entities GetName(), GetGUID().ToString(), quest_id, qstatus); } - questStatusData.Explored = (result.Read(2) > 0); + questStatusData.Explored = result.Read(2) > 0; - long quest_time = result.Read(3); + long acceptTime = result.Read(3); + long endTime = result.Read(4); if (quest.LimitTime != 0 && !GetQuestRewardStatus(quest_id)) { AddTimedQuest(quest_id); - if (quest_time <= GameTime.GetGameTime()) + if (endTime <= GameTime.GetGameTime()) questStatusData.Timer = 1; else - questStatusData.Timer = (uint)((quest_time - GameTime.GetGameTime()) * Time.InMilliseconds); + questStatusData.Timer = (uint)((endTime - GameTime.GetGameTime()) * Time.InMilliseconds); } else - quest_time = 0; + endTime = 0; // add to quest log if (slot < SharedConst.MaxQuestLogSize && questStatusData.Status != QuestStatus.None) { questStatusData.Slot = slot; - SetQuestSlot(slot, quest_id, (uint)quest_time); // cast can't be helped + SetQuestSlot(slot, quest_id); + SetQuestSlotEndTime(slot, endTime); + SetQuestSlotAcceptTime(slot, acceptTime); if (questStatusData.Status == QuestStatus.Complete) SetQuestSlotState(slot, QuestSlotStateMask.Complete); @@ -1951,7 +1954,8 @@ namespace Game.Entities stmt.AddValue(1, save.Key); stmt.AddValue(2, (byte)data.Status); stmt.AddValue(3, data.Explored); - stmt.AddValue(4, data.Timer / Time.InMilliseconds + GameTime.GetGameTime()); + stmt.AddValue(4, (long)GetQuestSlotAcceptTime(data.Slot)); + stmt.AddValue(5, (long)GetQuestSlotEndTime(data.Slot)); trans.Append(stmt); // Save objectives diff --git a/Source/Game/Entities/Player/Player.Quest.cs b/Source/Game/Entities/Player/Player.Quest.cs index 18f75e4cf..b9c588566 100644 --- a/Source/Game/Entities/Player/Player.Quest.cs +++ b/Source/Game/Entities/Player/Player.Quest.cs @@ -770,7 +770,7 @@ namespace Game.Entities } } - uint qtime = 0; + long endTime = 0; uint limittime = quest.LimitTime; if (limittime != 0) { @@ -780,7 +780,7 @@ namespace Game.Entities AddTimedQuest(quest_id); questStatusData.Timer = limittime * Time.InMilliseconds; - qtime = (uint)(GameTime.GetGameTime() + limittime); + endTime = GameTime.GetGameTime() + limittime; } else questStatusData.Timer = 0; @@ -805,7 +805,9 @@ namespace Game.Entities caster.CastSpell(this, spellInfo.Id, new CastSpellExtraArgs(TriggerCastFlags.FullMask).SetCastDifficulty(spellInfo.Difficulty)); } - SetQuestSlot(log_slot, quest_id, qtime); + SetQuestSlot(log_slot, quest_id); + SetQuestSlotEndTime(log_slot, endTime); + SetQuestSlotAcceptTime(log_slot, GameTime.GetGameTime()); m_QuestStatusSave[quest_id] = QuestSaveType.Default; @@ -1204,10 +1206,7 @@ namespace Game.Entities ushort log_slot = FindQuestSlot(questId); if (log_slot < SharedConst.MaxQuestLogSize) - { - SetQuestSlotTimer(log_slot, 1); SetQuestSlotState(log_slot, QuestSlotStateMask.Fail); - } if (quest.LimitTime != 0) { @@ -2028,11 +2027,16 @@ namespace Game.Entities return 0; } - public uint GetQuestSlotTime(ushort slot) + public uint GetQuestSlotEndTime(ushort slot) { return m_playerData.QuestLog[slot].EndTime; } + public uint GetQuestSlotAcceptTime(ushort slot) + { + return m_playerData.QuestLog[slot].AcceptTime; + } + bool GetQuestSlotObjectiveFlag(ushort slot, sbyte objectiveIndex) { if (objectiveIndex < SharedConst.MaxQuestCounts) @@ -2060,16 +2064,18 @@ namespace Game.Entities return GetQuestSlotObjectiveFlag(slot, objective.StorageIndex) ? 1 : 0; } - public void SetQuestSlot(ushort slot, uint quest_id, uint timer = 0) + public void SetQuestSlot(ushort slot, uint quest_id) { var questLogField = m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.QuestLog, slot); SetUpdateFieldValue(questLogField.ModifyValue(questLogField.QuestID), quest_id); SetUpdateFieldValue(questLogField.ModifyValue(questLogField.StateFlags), 0u); + SetUpdateFieldValue(questLogField.ModifyValue(questLogField.EndTime), 0u); + SetUpdateFieldValue(questLogField.ModifyValue(questLogField.AcceptTime), 0u); + SetUpdateFieldValue(questLogField.ModifyValue(questLogField.ObjectiveFlags), 0u); for (int i = 0; i < SharedConst.MaxQuestCounts; ++i) SetUpdateFieldValue(ref questLogField.ModifyValue(questLogField.ObjectiveProgress, i), (ushort)0); - SetUpdateFieldValue(questLogField.ModifyValue(questLogField.EndTime), timer); } public void SetQuestSlotCounter(ushort slot, byte counter, ushort count) @@ -2093,10 +2099,16 @@ namespace Game.Entities RemoveUpdateFieldFlagValue(questLogField.ModifyValue(questLogField.StateFlags), (uint)state); } - public void SetQuestSlotTimer(ushort slot, uint timer) + public void SetQuestSlotEndTime(ushort slot, long endTime) { QuestLog questLog = m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.QuestLog, slot); - SetUpdateFieldValue(questLog.ModifyValue(questLog.EndTime), timer); + SetUpdateFieldValue(questLog.ModifyValue(questLog.EndTime), (uint)endTime); + } + + public void SetQuestSlotAcceptTime(ushort slot, long acceptTime) + { + QuestLog questLog = m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.QuestLog, slot); + SetUpdateFieldValue(questLog.ModifyValue(questLog.AcceptTime), (uint)acceptTime); } void SetQuestSlotObjectiveFlag(ushort slot, sbyte objectiveIndex) diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index 1da375e45..280477bb1 100644 --- a/sql/base/characters_database.sql +++ b/sql/base/characters_database.sql @@ -1251,7 +1251,8 @@ CREATE TABLE `character_queststatus` ( `quest` int(10) unsigned NOT NULL DEFAULT '0', `status` tinyint(3) unsigned NOT NULL DEFAULT '0', `explored` tinyint(3) unsigned NOT NULL DEFAULT '0', - `timer` bigint(20) NOT NULL DEFAULT '0', + `acceptTime` bigint(20) NOT NULL DEFAULT '0', + `endTime` bigint(20) NOT NULL DEFAULT '0', PRIMARY KEY (`guid`,`quest`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Player System'; /*!40101 SET character_set_client = @saved_cs_client */; @@ -3854,7 +3855,8 @@ INSERT INTO `updates` VALUES ('2020_12_13_00_characters.sql','6AC743240033DED2C402ECB894A59D79EF607920','RELEASED','2020-12-13 18:36:58',0), ('2021_03_27_00_characters_aura_stored_location.sql','BF772ABC2DF186AF0A5DC56D5E824A2F4813BA69','RELEASED','2021-03-27 15:53:04',0), ('2021_04_05_00_characters.sql','33D656995E0F3578FFE1A658ED1692CA5310AB30','RELEASED','2021-04-05 23:44:54',0), -('2021_05_10_00_characters.sql','0A406242BC18BDA5A65CDE3E2AFEE760D79F819F','RELEASED','2021-05-10 23:30:34',0); +('2021_05_10_00_characters.sql','0A406242BC18BDA5A65CDE3E2AFEE760D79F819F','RELEASED','2021-05-10 23:30:34',0), +('2021_05_11_00_characters.sql','C3F0337CE8363F970AB4FDB9D23BBB7C650A0B0E','RELEASED','2021-05-11 15:39:26',0); /*!40000 ALTER TABLE `updates` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/characters/master/2021_05_11_00_characters.sql b/sql/updates/characters/master/2021_05_11_00_characters.sql new file mode 100644 index 000000000..a6d383daa --- /dev/null +++ b/sql/updates/characters/master/2021_05_11_00_characters.sql @@ -0,0 +1,2 @@ +ALTER TABLE `character_queststatus` ADD `acceptTime` bigint(20) NOT NULL DEFAULT '0' AFTER `explored`; +ALTER TABLE `character_queststatus` CHANGE `timer` `endTime` bigint(20) NOT NULL DEFAULT '0' AFTER `acceptTime`;