mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Quests: Set quest accept time updatefield
This commit is contained in:
@@ -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`;
|
||||
@@ -95,7 +95,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
|
||||
PrepareStatement(CHAR_SEL_CHARACTER_AURAS, "SELECT casterGuid, itemGuid, spell, effectMask, recalculateMask, difficulty, stackCount, maxDuration, remainTime, remainCharges, castItemId, castItemLevel FROM character_aura WHERE guid = ?", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_SEL_CHARACTER_AURA_EFFECTS, "SELECT casterGuid, itemGuid, spell, effectMask, effectIndex, amount, baseAmount FROM character_aura_effect WHERE guid = ?", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_SEL_CHARACTER_SPELL, "SELECT spell, active, disabled FROM character_spell WHERE guid = ?", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_SEL_CHARACTER_QUESTSTATUS, "SELECT quest, status, explored, timer FROM character_queststatus WHERE guid = ? AND status <> 0", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_SEL_CHARACTER_QUESTSTATUS, "SELECT quest, status, explored, acceptTime, endTime FROM character_queststatus WHERE guid = ? AND status <> 0", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_SEL_CHARACTER_QUESTSTATUS_OBJECTIVES, "SELECT quest, objective, data FROM character_queststatus_objectives WHERE guid = ?", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_SEL_CHARACTER_QUESTSTATUS_OBJECTIVES_CRITERIA, "SELECT questObjectiveId FROM character_queststatus_objectives_criteria WHERE guid = ?", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_SEL_CHARACTER_QUESTSTATUS_OBJECTIVES_CRITERIA_PROGRESS, "SELECT criteriaId, counter, date FROM character_queststatus_objectives_criteria_progress WHERE guid = ?", CONNECTION_ASYNC);
|
||||
@@ -652,7 +652,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
|
||||
PrepareStatement(CHAR_DEL_CHAR_INVENTORY_BY_ITEM, "DELETE FROM character_inventory WHERE item = ?", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_DEL_CHAR_INVENTORY_BY_BAG_SLOT, "DELETE FROM character_inventory WHERE bag = ? AND slot = ? AND guid = ?", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_UPD_MAIL, "UPDATE mail SET has_items = ?, expire_time = ?, deliver_time = ?, money = ?, cod = ?, checked = ? WHERE id = ?", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_REP_CHAR_QUESTSTATUS, "REPLACE INTO character_queststatus (guid, quest, status, explored, timer) VALUES (?, ?, ?, ?, ?)", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_REP_CHAR_QUESTSTATUS, "REPLACE INTO character_queststatus (guid, quest, status, explored, acceptTime, endTime) VALUES (?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_DEL_CHAR_QUESTSTATUS_BY_QUEST, "DELETE FROM character_queststatus WHERE guid = ? AND quest = ?", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_REP_CHAR_QUESTSTATUS_OBJECTIVES, "REPLACE INTO character_queststatus_objectives (guid, quest, objective, data) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_DEL_CHAR_QUESTSTATUS_OBJECTIVES_BY_QUEST, "DELETE FROM character_queststatus_objectives WHERE guid = ? AND quest = ?", CONNECTION_ASYNC);
|
||||
|
||||
@@ -15336,7 +15336,7 @@ void Player::AddQuest(Quest const* quest, Object* questGiver)
|
||||
}
|
||||
}
|
||||
|
||||
uint32 qtime = 0;
|
||||
time_t endTime = 0;
|
||||
if (uint32 limittime = quest->GetLimitTime())
|
||||
{
|
||||
// shared timed quest
|
||||
@@ -15345,7 +15345,7 @@ void Player::AddQuest(Quest const* quest, Object* questGiver)
|
||||
|
||||
AddTimedQuest(quest_id);
|
||||
questStatusData.Timer = limittime * IN_MILLISECONDS;
|
||||
qtime = static_cast<uint32>(GameTime::GetGameTime()) + limittime;
|
||||
endTime = GameTime::GetGameTime() + limittime;
|
||||
}
|
||||
else
|
||||
questStatusData.Timer = 0;
|
||||
@@ -15367,7 +15367,9 @@ void Player::AddQuest(Quest const* quest, Object* questGiver)
|
||||
caster->CastSpell(this, spellInfo->Id, CastSpellExtraArgs(TRIGGERED_FULL_MASK).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] = QUEST_DEFAULT_SAVE_TYPE;
|
||||
|
||||
@@ -15775,10 +15777,7 @@ void Player::FailQuest(uint32 questId)
|
||||
uint16 log_slot = FindQuestSlot(questId);
|
||||
|
||||
if (log_slot < MAX_QUEST_LOG_SIZE)
|
||||
{
|
||||
SetQuestSlotTimer(log_slot, 1);
|
||||
SetQuestSlotState(log_slot, QUEST_STATE_FAIL);
|
||||
}
|
||||
|
||||
if (quest->GetLimitTime())
|
||||
{
|
||||
@@ -16598,11 +16597,16 @@ uint16 Player::GetQuestSlotCounter(uint16 slot, uint8 counter) const
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32 Player::GetQuestSlotTime(uint16 slot) const
|
||||
uint32 Player::GetQuestSlotEndTime(uint16 slot) const
|
||||
{
|
||||
return m_playerData->QuestLog[slot].EndTime;
|
||||
}
|
||||
|
||||
uint32 Player::GetQuestSlotAcceptTime(uint16 slot) const
|
||||
{
|
||||
return m_playerData->QuestLog[slot].AcceptTime;
|
||||
}
|
||||
|
||||
bool Player::GetQuestSlotObjectiveFlag(uint16 slot, int8 objectiveIndex) const
|
||||
{
|
||||
if (objectiveIndex < MAX_QUEST_COUNTS)
|
||||
@@ -16632,14 +16636,16 @@ int32 Player::GetQuestSlotObjectiveData(uint16 slot, QuestObjective const& objec
|
||||
return GetQuestSlotObjectiveFlag(slot, objective.StorageIndex) ? 1 : 0;
|
||||
}
|
||||
|
||||
void Player::SetQuestSlot(uint16 slot, uint32 quest_id, uint32 timer /*= 0*/)
|
||||
void Player::SetQuestSlot(uint16 slot, uint32 quest_id)
|
||||
{
|
||||
auto questLogField = m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::QuestLog, slot);
|
||||
SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::QuestID), quest_id);
|
||||
SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::StateFlags), 0);
|
||||
SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::EndTime), 0);
|
||||
SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::AcceptTime), 0);
|
||||
SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::ObjectiveFlags), 0);
|
||||
for (uint32 i = 0; i < MAX_QUEST_COUNTS; ++i)
|
||||
SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::ObjectiveProgress, i), 0);
|
||||
SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::EndTime), timer);
|
||||
}
|
||||
|
||||
void Player::SetQuestSlotCounter(uint16 slot, uint8 counter, uint16 count)
|
||||
@@ -16666,11 +16672,18 @@ void Player::RemoveQuestSlotState(uint16 slot, uint32 state)
|
||||
.ModifyValue(&UF::QuestLog::StateFlags), state);
|
||||
}
|
||||
|
||||
void Player::SetQuestSlotTimer(uint16 slot, uint32 timer)
|
||||
void Player::SetQuestSlotEndTime(uint16 slot, time_t endTime)
|
||||
{
|
||||
SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData)
|
||||
.ModifyValue(&UF::PlayerData::QuestLog, slot)
|
||||
.ModifyValue(&UF::QuestLog::EndTime), timer);
|
||||
.ModifyValue(&UF::QuestLog::EndTime), uint32(endTime));
|
||||
}
|
||||
|
||||
void Player::SetQuestSlotAcceptTime(uint16 slot, time_t acceptTime)
|
||||
{
|
||||
SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData)
|
||||
.ModifyValue(&UF::PlayerData::QuestLog, slot)
|
||||
.ModifyValue(&UF::QuestLog::AcceptTime), uint32(acceptTime));
|
||||
}
|
||||
|
||||
void Player::SetQuestSlotObjectiveFlag(uint16 slot, int8 objectiveIndex)
|
||||
@@ -19305,8 +19318,8 @@ void Player::_LoadQuestStatus(PreparedQueryResult result)
|
||||
{
|
||||
uint16 slot = 0;
|
||||
|
||||
//// 0 1 2 3
|
||||
//QueryResult* result = CharacterDatabase.PQuery("SELECT quest, status, explored, timer WHERE guid = '%u' AND status <> 0", GetGUIDLow());
|
||||
//// 0 1 2 3 4
|
||||
//QueryResult* result = CharacterDatabase.PQuery("SELECT quest, status, explored, acceptTime, endTime WHERE guid = '%u' AND status <> 0", GetGUIDLow());
|
||||
|
||||
if (result)
|
||||
{
|
||||
@@ -19334,25 +19347,28 @@ void Player::_LoadQuestStatus(PreparedQueryResult result)
|
||||
|
||||
questStatusData.Explored = (fields[2].GetUInt8() > 0);
|
||||
|
||||
time_t quest_time = fields[2].GetInt64();
|
||||
time_t acceptTime = time_t(fields[3].GetInt64());
|
||||
time_t endTime = time_t(fields[4].GetInt64());
|
||||
|
||||
if (quest->GetLimitTime() && !GetQuestRewardStatus(quest_id))
|
||||
{
|
||||
AddTimedQuest(quest_id);
|
||||
|
||||
if (quest_time <= GameTime::GetGameTime())
|
||||
if (endTime <= GameTime::GetGameTime())
|
||||
questStatusData.Timer = 1;
|
||||
else
|
||||
questStatusData.Timer = uint32((quest_time - GameTime::GetGameTime()) * IN_MILLISECONDS);
|
||||
questStatusData.Timer = uint32((endTime - GameTime::GetGameTime()) * IN_MILLISECONDS);
|
||||
}
|
||||
else
|
||||
quest_time = 0;
|
||||
endTime = 0;
|
||||
|
||||
// add to quest log
|
||||
if (slot < MAX_QUEST_LOG_SIZE && questStatusData.Status != QUEST_STATUS_NONE)
|
||||
{
|
||||
questStatusData.Slot = slot;
|
||||
SetQuestSlot(slot, quest_id, uint32(quest_time)); // cast can't be helped
|
||||
SetQuestSlot(slot, quest_id);
|
||||
SetQuestSlotEndTime(slot, endTime);
|
||||
SetQuestSlotAcceptTime(slot, acceptTime);
|
||||
|
||||
if (questStatusData.Status == QUEST_STATUS_COMPLETE)
|
||||
SetQuestSlotState(slot, QUEST_STATE_COMPLETE);
|
||||
@@ -21015,17 +21031,15 @@ void Player::_SaveQuestStatus(CharacterDatabaseTransaction& trans)
|
||||
if (!isTransaction)
|
||||
trans = CharacterDatabase.BeginTransaction();
|
||||
|
||||
QuestStatusSaveMap::iterator saveItr;
|
||||
QuestStatusMap::iterator statusItr;
|
||||
CharacterDatabasePreparedStatement* stmt;
|
||||
|
||||
bool keepAbandoned = !(sWorld->GetCleaningFlags() & CharacterDatabaseCleaner::CLEANING_FLAG_QUESTSTATUS);
|
||||
|
||||
for (saveItr = m_QuestStatusSave.begin(); saveItr != m_QuestStatusSave.end(); ++saveItr)
|
||||
for (auto saveItr = m_QuestStatusSave.begin(); saveItr != m_QuestStatusSave.end(); ++saveItr)
|
||||
{
|
||||
if (saveItr->second == QUEST_DEFAULT_SAVE_TYPE)
|
||||
{
|
||||
statusItr = m_QuestStatus.find(saveItr->first);
|
||||
auto statusItr = m_QuestStatus.find(saveItr->first);
|
||||
if (statusItr != m_QuestStatus.end() && (keepAbandoned || statusItr->second.Status != QUEST_STATUS_NONE))
|
||||
{
|
||||
QuestStatusData const& qData = statusItr->second;
|
||||
@@ -21036,7 +21050,8 @@ void Player::_SaveQuestStatus(CharacterDatabaseTransaction& trans)
|
||||
stmt->setUInt32(1, statusItr->first);
|
||||
stmt->setUInt8(2, uint8(qData.Status));
|
||||
stmt->setBool(3, qData.Explored);
|
||||
stmt->setInt64(4, qData.Timer / IN_MILLISECONDS + GameTime::GetGameTime());
|
||||
stmt->setInt64(4, GetQuestSlotAcceptTime(qData.Slot));
|
||||
stmt->setInt64(5, GetQuestSlotEndTime(qData.Slot));
|
||||
trans->Append(stmt);
|
||||
|
||||
// Save objectives
|
||||
@@ -21079,7 +21094,7 @@ void Player::_SaveQuestStatus(CharacterDatabaseTransaction& trans)
|
||||
|
||||
m_QuestStatusSave.clear();
|
||||
|
||||
for (saveItr = m_RewardedQuestsSave.begin(); saveItr != m_RewardedQuestsSave.end(); ++saveItr)
|
||||
for (auto saveItr = m_RewardedQuestsSave.begin(); saveItr != m_RewardedQuestsSave.end(); ++saveItr)
|
||||
{
|
||||
if (saveItr->second == QUEST_DEFAULT_SAVE_TYPE)
|
||||
{
|
||||
|
||||
@@ -1513,14 +1513,16 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
|
||||
uint32 GetQuestSlotQuestId(uint16 slot) const;
|
||||
uint32 GetQuestSlotState(uint16 slot) const;
|
||||
uint16 GetQuestSlotCounter(uint16 slot, uint8 counter) const;
|
||||
uint32 GetQuestSlotTime(uint16 slot) const;
|
||||
uint32 GetQuestSlotEndTime(uint16 slot) const;
|
||||
uint32 GetQuestSlotAcceptTime(uint16 slot) const;
|
||||
bool GetQuestSlotObjectiveFlag(uint16 slot, int8 objectiveIndex) const;
|
||||
int32 GetQuestSlotObjectiveData(uint16 slot, QuestObjective const& objective) const;
|
||||
void SetQuestSlot(uint16 slot, uint32 quest_id, uint32 timer = 0);
|
||||
void SetQuestSlot(uint16 slot, uint32 quest_id);
|
||||
void SetQuestSlotCounter(uint16 slot, uint8 counter, uint16 count);
|
||||
void SetQuestSlotState(uint16 slot, uint32 state);
|
||||
void RemoveQuestSlotState(uint16 slot, uint32 state);
|
||||
void SetQuestSlotTimer(uint16 slot, uint32 timer);
|
||||
void SetQuestSlotEndTime(uint16 slot, time_t endTime);
|
||||
void SetQuestSlotAcceptTime(uint16 slot, time_t acceptTime);
|
||||
void SetQuestSlotObjectiveFlag(uint16 slot, int8 objectiveIndex);
|
||||
void RemoveQuestSlotObjectiveFlag(uint16 slot, int8 objectiveIndex);
|
||||
void SetQuestCompletedBit(uint32 questBit, bool completed);
|
||||
|
||||
Reference in New Issue
Block a user