Core/Quests: Set quest accept time updatefield

Port From (https://github.com/TrinityCore/TrinityCore/commit/d9d242bea4e9fd000098d24a5a5c5d11ea4725e4)
This commit is contained in:
hondacrx
2021-05-11 18:13:09 -04:00
parent 6e896c8829
commit ac375fcebf
5 changed files with 42 additions and 22 deletions
@@ -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 = ?");
+11 -7
View File
@@ -692,27 +692,30 @@ namespace Game.Entities
GetName(), GetGUID().ToString(), quest_id, qstatus);
}
questStatusData.Explored = (result.Read<byte>(2) > 0);
questStatusData.Explored = result.Read<byte>(2) > 0;
long quest_time = result.Read<long>(3);
long acceptTime = result.Read<long>(3);
long endTime = result.Read<long>(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
+23 -11
View File
@@ -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)
+4 -2
View File
@@ -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;
@@ -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`;