mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Core/Quests: Un-deprecate QUEST_SPECIAL_FLAGS_EXPLORATION_OR_EVENT
This commit is contained in:
@@ -1250,6 +1250,7 @@ CREATE TABLE `character_queststatus` (
|
||||
`guid` bigint(20) unsigned NOT NULL DEFAULT '0',
|
||||
`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',
|
||||
PRIMARY KEY (`guid`,`quest`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Player System';
|
||||
@@ -3852,7 +3853,8 @@ INSERT INTO `updates` VALUES
|
||||
('2020_11_16_00_characters.sql','33D5C7539E239132923D01F4B6EAD5F3EF3EEB69','RELEASED','2020-11-16 19:16:31',0),
|
||||
('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_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);
|
||||
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE `character_queststatus` ADD `explored` tinyint(3) unsigned NOT NULL DEFAULT '0' AFTER `status`;
|
||||
@@ -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, timer FROM character_queststatus WHERE guid = ? AND status <> 0", 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_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, timer) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_REP_CHAR_QUESTSTATUS, "REPLACE INTO character_queststatus (guid, quest, status, explored, timer) 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);
|
||||
|
||||
@@ -15059,6 +15059,9 @@ bool Player::CanCompleteQuest(uint32 quest_id, uint32 ignoredQuestObjectiveId /*
|
||||
}
|
||||
}
|
||||
|
||||
if (qInfo->HasSpecialFlag(QUEST_SPECIAL_FLAGS_EXPLORATION_OR_EVENT) && !q_status.Explored)
|
||||
return false;
|
||||
|
||||
if (qInfo->GetLimitTime() && q_status.Timer == 0)
|
||||
return false;
|
||||
|
||||
@@ -15306,7 +15309,9 @@ void Player::AddQuest(Quest const* quest, Object* questGiver)
|
||||
QuestStatus oldStatus = questStatusData.Status;
|
||||
|
||||
// check for repeatable quests status reset
|
||||
questStatusData.Slot = log_slot;
|
||||
questStatusData.Status = QUEST_STATUS_INCOMPLETE;
|
||||
questStatusData.Explored = false;
|
||||
|
||||
GiveQuestSourceItem(quest);
|
||||
AdjustQuestObjectiveProgress(quest);
|
||||
@@ -15360,7 +15365,6 @@ void Player::AddQuest(Quest const* quest, Object* questGiver)
|
||||
caster->CastSpell(this, spellInfo->Id, CastSpellExtraArgs(TRIGGERED_FULL_MASK).SetCastDifficulty(spellInfo->Difficulty));
|
||||
}
|
||||
|
||||
questStatusData.Slot = log_slot;
|
||||
SetQuestSlot(log_slot, quest_id, qtime);
|
||||
|
||||
m_QuestStatusSave[quest_id] = QUEST_DEFAULT_SAVE_TYPE;
|
||||
@@ -16701,23 +16705,16 @@ void Player::AreaExploredOrEventHappens(uint32 questId)
|
||||
{
|
||||
if (questId)
|
||||
{
|
||||
uint16 log_slot = FindQuestSlot(questId);
|
||||
if (log_slot < MAX_QUEST_LOG_SIZE)
|
||||
if (QuestStatusData* status = Trinity::Containers::MapGetValuePtr(m_QuestStatus, questId))
|
||||
{
|
||||
TC_LOG_ERROR("entities.player.quest", "Player::AreaExploredOrEventHappens:Deprecated function called for quest %u", questId);
|
||||
/** @todo
|
||||
This function was previously used for area triggers but now those are a part of quest objective system
|
||||
Currently this function is used to complete quests with no objectives (needs verifying) so probably rename it?
|
||||
|
||||
QuestStatusData& q_status = m_QuestStatus[questId];
|
||||
|
||||
if (!q_status.Explored)
|
||||
// Dont complete failed quest
|
||||
if (!status->Explored && status->Status != QUEST_STATUS_FAILED)
|
||||
{
|
||||
q_status.Explored = true;
|
||||
status->Explored = true;
|
||||
m_QuestStatusSave[questId] = QUEST_DEFAULT_SAVE_TYPE;
|
||||
|
||||
SendQuestComplete(questId);
|
||||
}**/
|
||||
}
|
||||
}
|
||||
if (CanCompleteQuest(questId))
|
||||
CompleteQuest(questId);
|
||||
@@ -17193,12 +17190,12 @@ bool Player::IsQuestObjectiveProgressBarComplete(uint16 slot, Quest const* quest
|
||||
return false;
|
||||
}
|
||||
|
||||
void Player::SendQuestComplete(Quest const* quest) const
|
||||
void Player::SendQuestComplete(uint32 questId) const
|
||||
{
|
||||
if (quest)
|
||||
if (questId)
|
||||
{
|
||||
WorldPackets::Quest::QuestUpdateComplete data;
|
||||
data.QuestID = quest->GetQuestId();
|
||||
data.QuestID = questId;
|
||||
SendDirectMessage(data.Write());
|
||||
}
|
||||
}
|
||||
@@ -19301,8 +19298,8 @@ void Player::_LoadQuestStatus(PreparedQueryResult result)
|
||||
{
|
||||
uint16 slot = 0;
|
||||
|
||||
//// 0 1 2
|
||||
//QueryResult* result = CharacterDatabase.PQuery("SELECT quest, status, timer WHERE guid = '%u' AND status <> 0", GetGUIDLow());
|
||||
//// 0 1 2 3
|
||||
//QueryResult* result = CharacterDatabase.PQuery("SELECT quest, status, explored, timer WHERE guid = '%u' AND status <> 0", GetGUIDLow());
|
||||
|
||||
if (result)
|
||||
{
|
||||
@@ -19328,6 +19325,8 @@ void Player::_LoadQuestStatus(PreparedQueryResult result)
|
||||
GetName().c_str(), GetGUID().ToString().c_str(), quest_id, qstatus);
|
||||
}
|
||||
|
||||
questStatusData.Explored = (fields[2].GetUInt8() > 0);
|
||||
|
||||
time_t quest_time = fields[2].GetInt64();
|
||||
|
||||
if (quest->GetLimitTime() && !GetQuestRewardStatus(quest_id))
|
||||
@@ -21029,7 +21028,8 @@ void Player::_SaveQuestStatus(CharacterDatabaseTransaction& trans)
|
||||
stmt->setUInt64(0, GetGUID().GetCounter());
|
||||
stmt->setUInt32(1, statusItr->first);
|
||||
stmt->setUInt8(2, uint8(qData.Status));
|
||||
stmt->setInt64(3, qData.Timer / IN_MILLISECONDS + GameTime::GetGameTime());
|
||||
stmt->setBool(3, qData.Explored);
|
||||
stmt->setInt64(4, qData.Timer / IN_MILLISECONDS + GameTime::GetGameTime());
|
||||
trans->Append(stmt);
|
||||
|
||||
// Save objectives
|
||||
|
||||
@@ -1550,7 +1550,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
|
||||
bool IsQuestObjectiveCompletable(uint16 slot, Quest const* quest, QuestObjective const& objective) const;
|
||||
bool IsQuestObjectiveComplete(uint16 slot, Quest const* quest, QuestObjective const& objective) const;
|
||||
bool IsQuestObjectiveProgressBarComplete(uint16 slot, Quest const* quest) const;
|
||||
void SendQuestComplete(Quest const* quest) const;
|
||||
void SendQuestComplete(uint32 questId) const;
|
||||
void SendQuestReward(Quest const* quest, Creature const* questGiver, uint32 xp, bool hideChatMessage) const;
|
||||
void SendQuestFailed(uint32 questID, InventoryResult reason = EQUIP_ERR_OK) const;
|
||||
void SendQuestTimerFailed(uint32 questID) const;
|
||||
|
||||
@@ -713,6 +713,7 @@ struct QuestStatusData
|
||||
uint16 Slot = MAX_QUEST_LOG_SIZE;
|
||||
QuestStatus Status = QUEST_STATUS_NONE;
|
||||
uint32 Timer = 0;
|
||||
bool Explored = false;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user