aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSnapperRy <snapperryen@gmail.com>2016-07-19 09:02:01 +0200
committerjoschiwald <joschiwald.trinity@gmail.com>2017-02-11 15:19:42 +0100
commit13bac539d6c19b366be714c712c1acbcd4d1fb16 (patch)
tree768d388f24719f3f6a3a5fca23a8d36558f8e584 /src
parent8d45095e28911a9e832467141ca30336b53f83a2 (diff)
Core/Mail: implement a way to specify NPC sender for mails when they should be different from the quest ender (#17601)
(cherry picked from commit d4e15f1aac3159bb5e17808ee06efb847fdd4789) # 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 commit 3a77dec6e6fac47fedeb0aeddd09dfe12c3817a2)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp5
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp6
-rw-r--r--src/server/game/Mails/Mail.cpp7
-rw-r--r--src/server/game/Mails/Mail.h1
-rw-r--r--src/server/game/Quests/QuestDef.cpp3
-rw-r--r--src/server/game/Quests/QuestDef.h2
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 08b4aac5fa0..1c07334c671 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -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);
}
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index ee7b23f9a88..05ebcbb8c04 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -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();
diff --git a/src/server/game/Mails/Mail.cpp b/src/server/game/Mails/Mail.cpp
index 47c02f4b5a0..5b796042369 100644
--- a/src/server/game/Mails/Mail.cpp
+++ b/src/server/game/Mails/Mail.cpp
@@ -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)
diff --git a/src/server/game/Mails/Mail.h b/src/server/game/Mails/Mail.h
index 8b0d4a1c024..71f9e25f915 100644
--- a/src/server/game/Mails/Mail.h
+++ b/src/server/game/Mails/Mail.h
@@ -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; }
diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp
index 4ba5e08f447..0dea1ed5335 100644
--- a/src/server/game/Quests/QuestDef.cpp
+++ b/src/server/game/Quests/QuestDef.cpp
@@ -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;
diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h
index 5cd67cab954..c8449d8dba6 100644
--- a/src/server/game/Quests/QuestDef.h
+++ b/src/server/game/Quests/QuestDef.h
@@ -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
};