diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 5 | ||||
| -rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 6 | ||||
| -rw-r--r-- | src/server/game/Mails/Mail.cpp | 7 | ||||
| -rw-r--r-- | src/server/game/Mails/Mail.h | 1 | ||||
| -rw-r--r-- | src/server/game/Quests/QuestDef.cpp | 3 | ||||
| -rw-r--r-- | src/server/game/Quests/QuestDef.h | 2 |
6 files changed, 20 insertions, 4 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index a42fdea2b9f..b177a193afd 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -14983,7 +14983,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); } diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index eb1010a07a1..01c3235805b 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -4097,8 +4097,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) { @@ -4602,6 +4602,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()) { @@ -4610,6 +4611,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(); diff --git a/src/server/game/Mails/Mail.cpp b/src/server/game/Mails/Mail.cpp index bc31a3c8c06..0fc49eba05e 100644 --- a/src/server/game/Mails/Mail.cpp +++ b/src/server/game/Mails/Mail.cpp @@ -70,6 +70,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) diff --git a/src/server/game/Mails/Mail.h b/src/server/game/Mails/Mail.h index ee1a0aae2c9..ad14e3cecf9 100644 --- a/src/server/game/Mails/Mail.h +++ b/src/server/game/Mails/Mail.h @@ -90,6 +90,7 @@ class TC_GAME_API MailSender MailSender(CalendarEvent* sender); MailSender(AuctionEntry* sender); MailSender(Player* sender); + MailSender(uint32 senderEntry); public: // Accessors MailMessageType GetMailMessageType() const { return m_messageType; } ObjectGuid::LowType GetSenderId() const { return m_senderId; } diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index 505c6803e54..91a7b87eec7 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -196,7 +196,8 @@ void Quest::LoadQuestTemplateAddon(Field* fields) RequiredMinRepValue = fields[13].GetInt32(); RequiredMaxRepValue = fields[14].GetInt32(); StartItemCount = 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; diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h index 23a7792db25..dc6d22deab0 100644 --- a/src/server/game/Quests/QuestDef.h +++ b/src/server/game/Quests/QuestDef.h @@ -257,6 +257,7 @@ class TC_GAME_API Quest int32 GetRewSpellCast() const { return RewardSpell; } uint32 GetRewMailTemplateId() const { return RewardMailTemplateId; } uint32 GetRewMailDelaySecs() const { return RewardMailDelay; } + uint32 GetRewMailSenderEntry() const { return RewardMailSenderEntry; } uint32 GetPOIContinent() const { return POIContinent; } float GetPOIx() const { return POIx; } float GetPOIy() const { return POIy; } @@ -374,6 +375,7 @@ class TC_GAME_API Quest uint32 RequiredMaxRepFaction = 0; int32 RequiredMaxRepValue = 0; uint32 StartItemCount = 0; + uint32 RewardMailSenderEntry = 0; uint32 SpecialFlags = 0; // custom flags, not sniffed/WDB }; |
