mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-20 06:59:46 -04:00
Core/Mail: implement a way to specify NPC sender for mails when they should be different from the quest ender (#17601)
(cherry picked from commitd4e15f1aac) # Conflicts: # src/server/game/Quests/QuestDef.cpp # src/server/game/Quests/QuestDef.h Rename 9999_99_99_99_world.sql to sql/updates/world/3.3.5/2016_07_19_00_world.sql (cherry picked from commit3a77dec6e6)
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
--
|
||||
DROP TABLE IF EXISTS `quest_mail_sender`;
|
||||
CREATE TABLE `quest_mail_sender`
|
||||
(
|
||||
`QuestId` INT(5) UNSIGNED NOT NULL DEFAULT 0,
|
||||
`RewardMailSenderEntry` INT(5) UNSIGNED NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`QuestId`)
|
||||
);
|
||||
|
||||
INSERT INTO `quest_mail_sender` (`QuestId`, `RewardMailSenderEntry`) VALUES
|
||||
(8729, 11811), -- Quest The Wrath of Neptulon sends mail from Narain Soothfancy
|
||||
(10588, 18166), -- Quest The Cipher of Damnation sends mail from Archmage Khadgar
|
||||
(12085, 5885), -- Quest A Letter for Home (Horde) sends mail from Deino
|
||||
(12067, 2708), -- Quest A Letter for Home (Alliance) sends mail from Archmage Malin
|
||||
(12422, 27102), -- Quest Tactical Clemency sends mail from Gorgonna
|
||||
(12711, 28930), -- Quest Abandoned Mail sends mail from Dansel Adams
|
||||
(22817, 10967), -- Quest Back to the Orphanage (Blood Elf) sends mail from Blood Elf Orphan
|
||||
(22818, 10966), -- Quest Back to the Orphanage (Draenei) sends mail from Draenei Orphan
|
||||
(28879, 33533), -- Quest Back To The Orphanage (Oracle) sends mail from Oracle Orphan
|
||||
(28880, 33532); -- Quest Back To The Orphanage (Wolvar) sends mail from Wolvar Orphan
|
||||
@@ -15105,7 +15105,10 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
|
||||
{
|
||||
/// @todo Poor design of mail system
|
||||
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
||||
MailDraft(mail_template_id).SendMailTo(trans, this, questGiver, MAIL_CHECK_MASK_HAS_BODY, quest->GetRewMailDelaySecs());
|
||||
if (quest->GetRewMailSenderEntry() != 0)
|
||||
MailDraft(mail_template_id).SendMailTo(trans, this, quest->GetRewMailSenderEntry(), MAIL_CHECK_MASK_HAS_BODY, quest->GetRewMailDelaySecs());
|
||||
else
|
||||
MailDraft(mail_template_id).SendMailTo(trans, this, questGiver, MAIL_CHECK_MASK_HAS_BODY, quest->GetRewMailDelaySecs());
|
||||
CharacterDatabase.CommitTransaction(trans);
|
||||
}
|
||||
|
||||
|
||||
@@ -3885,8 +3885,8 @@ void ObjectMgr::LoadQuests()
|
||||
// Load `quest_template_addon`
|
||||
// 0 1 2 3 4 5 6 7 8
|
||||
result = WorldDatabase.Query("SELECT ID, MaxLevel, AllowableClasses, SourceSpellID, PrevQuestID, NextQuestID, ExclusiveGroup, RewardMailTemplateID, RewardMailDelay, "
|
||||
//9 10 11 12 13 14 15 16
|
||||
"RequiredSkillID, RequiredSkillPoints, RequiredMinRepFaction, RequiredMaxRepFaction, RequiredMinRepValue, RequiredMaxRepValue, ProvidedItemCount, SpecialFlags FROM quest_template_addon");
|
||||
//9 10 11 12 13 14 15 16 17
|
||||
"RequiredSkillID, RequiredSkillPoints, RequiredMinRepFaction, RequiredMaxRepFaction, RequiredMinRepValue, RequiredMaxRepValue, ProvidedItemCount, RewardMailSenderEntry, SpecialFlags FROM quest_template_addon LEFT JOIN quest_mail_sender ON Id=QuestId");
|
||||
|
||||
if (!result)
|
||||
{
|
||||
@@ -4449,6 +4449,7 @@ void ObjectMgr::LoadQuests()
|
||||
qinfo->GetQuestId(), qinfo->RewardMailTemplateId, qinfo->RewardMailTemplateId);
|
||||
qinfo->RewardMailTemplateId = 0; // no mail will send to player
|
||||
qinfo->RewardMailDelay = 0; // no mail will send to player
|
||||
qinfo->RewardMailSenderEntry = 0;
|
||||
}
|
||||
else if (usedMailTemplates.find(qinfo->RewardMailTemplateId) != usedMailTemplates.end())
|
||||
{
|
||||
@@ -4457,6 +4458,7 @@ void ObjectMgr::LoadQuests()
|
||||
qinfo->GetQuestId(), qinfo->RewardMailTemplateId, qinfo->RewardMailTemplateId, used_mt_itr->second);
|
||||
qinfo->RewardMailTemplateId = 0; // no mail will send to player
|
||||
qinfo->RewardMailDelay = 0; // no mail will send to player
|
||||
qinfo->RewardMailSenderEntry = 0;
|
||||
}
|
||||
else
|
||||
usedMailTemplates[qinfo->RewardMailTemplateId] = qinfo->GetQuestId();
|
||||
|
||||
@@ -73,6 +73,13 @@ MailSender::MailSender(Player* sender)
|
||||
m_senderId = sender->GetGUID().GetCounter();
|
||||
}
|
||||
|
||||
MailSender::MailSender(uint32 senderEntry)
|
||||
{
|
||||
m_messageType = MAIL_CREATURE;
|
||||
m_senderId = senderEntry;
|
||||
m_stationery = MAIL_STATIONERY_DEFAULT;
|
||||
}
|
||||
|
||||
MailReceiver::MailReceiver(Player* receiver) : m_receiver(receiver), m_receiver_lowguid(receiver->GetGUID().GetCounter()) { }
|
||||
|
||||
MailReceiver::MailReceiver(Player* receiver, ObjectGuid::LowType receiver_lowguid) : m_receiver(receiver), m_receiver_lowguid(receiver_lowguid)
|
||||
|
||||
@@ -94,6 +94,7 @@ class TC_GAME_API MailSender
|
||||
MailSender(AuctionEntry* sender);
|
||||
MailSender(BlackMarketEntry* sender);
|
||||
MailSender(Player* sender);
|
||||
MailSender(uint32 senderEntry);
|
||||
public: // Accessors
|
||||
MailMessageType GetMailMessageType() const { return m_messageType; }
|
||||
ObjectGuid::LowType GetSenderId() const { return m_senderId; }
|
||||
|
||||
@@ -206,7 +206,8 @@ void Quest::LoadQuestTemplateAddon(Field* fields)
|
||||
RequiredMinRepValue = fields[13].GetInt32();
|
||||
RequiredMaxRepValue = fields[14].GetInt32();
|
||||
SourceItemIdCount = fields[15].GetUInt8();
|
||||
SpecialFlags = fields[16].GetUInt8();
|
||||
RewardMailSenderEntry = fields[16].GetUInt32();
|
||||
SpecialFlags = fields[17].GetUInt8();
|
||||
|
||||
if (SpecialFlags & QUEST_SPECIAL_FLAGS_AUTO_ACCEPT)
|
||||
Flags |= QUEST_FLAGS_AUTO_ACCEPT;
|
||||
|
||||
@@ -359,6 +359,7 @@ class TC_GAME_API Quest
|
||||
uint32 GetRewSpell() const { return RewardSpell; }
|
||||
uint32 GetRewMailTemplateId() const { return RewardMailTemplateId; }
|
||||
uint32 GetRewMailDelaySecs() const { return RewardMailDelay; }
|
||||
uint32 GetRewMailSenderEntry() const { return RewardMailSenderEntry; }
|
||||
uint32 GetRewTitle() const { return RewardTitleId; }
|
||||
uint32 GetPOIContinent() const { return POIContinent; }
|
||||
float GetPOIx() const { return POIx; }
|
||||
@@ -510,6 +511,7 @@ class TC_GAME_API Quest
|
||||
uint32 RequiredMaxRepFaction = 0;
|
||||
int32 RequiredMaxRepValue = 0;
|
||||
uint32 SourceItemIdCount = 0;
|
||||
uint32 RewardMailSenderEntry = 0;
|
||||
uint32 SpecialFlags = 0; // custom flags, not sniffed/WDB
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user