· 8 years ago · Jul 12, 2018, 08:34 AM
1diff -r 8a84e9f5f8a5 sql/updates/XXX_characters_extmail.sql
2--- /dev/null Thu Jan 01 00:00:00 1970 +0000
3+++ b/sql/updates/XXX_characters_extmail.sql Fri Sep 04 12:38:27 2009 -0400
4@@ -0,0 +1,21 @@
5+DROP TABLE IF EXISTS `mail_external`;
6+
7+CREATE TABLE `mail_external` (
8+ `id` bigint(20) NOT NULL,
9+ `sender` bigint(20) default NULL,
10+ `receiver` bigint(20) default NULL,
11+ `subject` varchar(200) collate latin1_general_ci default NULL,
12+ `message` varchar(500) collate latin1_general_ci default NULL,
13+ `money` bigint(20) default NULL,
14+ `stationery` int(10) default '41',
15+ `sent` tinyint(4) default '0',
16+PRIMARY KEY (`id`)
17+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
18+
19+DROP TABLE IF EXISTS `mail_external_items`;
20+
21+CREATE TABLE `mail_external_items` (
22+ `mail_id` bigint(20) default NULL,
23+ `item` bigint(20) default NULL
24+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
25+
26diff -r 8a84e9f5f8a5 src/game/Mail.cpp
27--- a/src/game/Mail.cpp Fri Sep 04 10:11:23 2009 -0500
28+++ b/src/game/Mail.cpp Fri Sep 04 12:38:27 2009 -0400
29@@ -903,3 +903,55 @@
30 CharacterDatabase.CommitTransaction();
31 }
32
33+void WorldSession::SendExternalMails()
34+{
35+ sLog.outString("Load External mails...");
36+ QueryResult *result = CharacterDatabase.Query("SELECT id,sender,receiver,subject,message,money,stationery FROM mail_external WHERE sent=0");
37+ if(!result)
38+ {
39+ sLog.outString("...No New Mails...");
40+ delete result;
41+ return;
42+ }else{
43+ do{
44+ Field *fields = result->Fetch();
45+ uint32 id = fields[0].GetUInt32();
46+ sLog.outString("Working Mail #%u",id);
47+ uint32 senderGUID = fields[1].GetUInt32();
48+ uint32 receiverGUID = fields[2].GetUInt32();
49+ char const* subject = fields[3].GetString();
50+ char const* message = fields[4].GetString();
51+ uint32 money = fields[5].GetUInt32();
52+ uint8 stationery = fields[6].GetUInt8();
53+ Player* Receiver=objmgr.GetPlayer(receiverGUID);
54+ uint32 NewItemTextID=objmgr.CreateItemText(message);
55+
56+ MailItemsInfo MailItems;
57+
58+ QueryResult *result2 = CharacterDatabase.PQuery("SELECT item FROM mail_external_items WHERE mail_id=%u",id);
59+ if (result2)
60+ {
61+ sLog.outString("Mail has Items...");
62+ do{
63+ Field *itemfields = result2->Fetch();
64+ uint32 ItemID=itemfields[0].GetUInt32();
65+ Item* ToMailItem=Item::CreateItem(ItemID,1,Receiver);
66+ ToMailItem->SaveToDB();
67+ MailItems.AddItem(ToMailItem->GetGUIDLow(),ToMailItem->GetEntry(),ToMailItem);
68+ sLog.outString("Generated Item:%u, GUID:%u",ItemID,ToMailItem->GetGUID());
69+ }while(result2->NextRow());
70+ sLog.outString("..Done Items");
71+ }
72+
73+ delete result2;
74+ sLog.outString("...Send Mail #%u, Stationery #%u...",id,stationery);
75+ WorldSession::SendMailTo(Receiver,MAIL_NORMAL,stationery ,senderGUID,Receiver->GetGUIDLow(),subject,NewItemTextID,&MailItems,money,0,MAIL_CHECK_MASK_RETURNED);
76+
77+ sLog.outString("...Update Mail #%u to sent...",id);
78+ CharacterDatabase.PExecute("UPDATE mail_external SET sent=1 WHERE id=%u",id);
79+ sLog.outString("...Done Mail #%u...",id);
80+ }while(result->NextRow());
81+ }
82+ delete result;
83+ sLog.outString("...End Load External mails");
84+}
85diff -r 8a84e9f5f8a5 src/game/World.cpp
86--- a/src/game/World.cpp Fri Sep 04 10:11:23 2009 -0500
87+++ b/src/game/World.cpp Fri Sep 04 12:38:27 2009 -0400
88@@ -1827,6 +1827,7 @@
89 {
90 mail_timer = 0;
91 objmgr.ReturnOrDeleteOldMails(true);
92+ WorldSession::SendExternalMails();
93 }
94
95 ///- Handle expired auctions
96diff -r 8a84e9f5f8a5 src/game/WorldSession.h
97--- a/src/game/WorldSession.h Fri Sep 04 10:11:23 2009 -0500
98+++ b/src/game/WorldSession.h Fri Sep 04 12:38:27 2009 -0400
99@@ -226,6 +226,7 @@
100 //used with item_page table
101 bool SendItemInfo( uint32 itemid, WorldPacket data );
102 static void SendReturnToSender(uint8 messageType, uint32 sender_acc, uint32 sender_guid, uint32 receiver_guid, const std::string& subject, uint32 itemTextId, MailItemsInfo *mi, uint32 money, uint16 mailTemplateId = 0);
103+ static void SendExternalMails();
104 static void SendMailTo(Player* receiver, uint8 messageType, uint8 stationery, uint32 sender_guidlow_or_entry, uint32 received_guidlow, std::string subject, uint32 itemTextId, MailItemsInfo* mi, uint32 money, uint32 COD, uint32 checked, uint32 deliver_delay = 0, uint16 mailTemplateId = 0);
105
106 //auction
107
108
109
110
111
112
113diff -r 8a84e9f5f8a5 sql/updates/XXX_characters_extmail.sql
114--- /dev/null Thu Jan 01 00:00:00 1970 +0000
115+++ b/sql/updates/XXX_characters_extmail.sql Fri Sep 04 12:31:09 2009 -0400
116@@ -0,0 +1,21 @@
117+DROP TABLE IF EXISTS `mail_external`;
118+
119+CREATE TABLE `mail_external` (
120+ `id` bigint(20) NOT NULL,
121+ `sender` bigint(20) default NULL,
122+ `receiver` bigint(20) default NULL,
123+ `subject` varchar(200) collate latin1_general_ci default NULL,
124+ `message` varchar(500) collate latin1_general_ci default NULL,
125+ `money` bigint(20) default NULL,
126+ `stationery` int(10) default '41',
127+ `sent` tinyint(4) default '0',
128+PRIMARY KEY (`id`)
129+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
130+
131+DROP TABLE IF EXISTS `mail_external_items`;
132+
133+CREATE TABLE `mail_external_items` (
134+ `mail_id` bigint(20) default NULL,
135+ `item` bigint(20) default NULL
136+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
137+
138diff -r 8a84e9f5f8a5 src/game/Mail.cpp
139--- a/src/game/Mail.cpp Fri Sep 04 10:11:23 2009 -0500
140+++ b/src/game/Mail.cpp Fri Sep 04 12:31:09 2009 -0400
141@@ -903,3 +903,55 @@ void WorldSession::SendMailTo(Player* re
142 CharacterDatabase.CommitTransaction();
143 }
144
145+void WorldSession::SendExternalMails()
146+{
147+ sLog.outString("Load External mails...");
148+ QueryResult *result = CharacterDatabase.Query("SELECT id,sender,receiver,subject,message,money,stationery FROM mail_external WHERE sent=0");
149+ if(!result)
150+ {
151+ sLog.outString("...No New Mails...");
152+ delete result;
153+ return;
154+ }else{
155+ do{
156+ Field *fields = result->Fetch();
157+ uint32 id = fields[0].GetUInt32();
158+ sLog.outString("Working Mail #%u",id);
159+ uint32 senderGUID = fields[1].GetUInt32();
160+ uint32 receiverGUID = fields[2].GetUInt32();
161+ char const* subject = fields[3].GetString();
162+ char const* message = fields[4].GetString();
163+ uint32 money = fields[5].GetUInt32();
164+ uint8 stationery = fields[6].GetUInt8();
165+ Player* Receiver=objmgr.GetPlayer(receiverGUID);
166+ uint32 NewItemTextID=objmgr.CreateItemText(message);
167+
168+ MailItemsInfo MailItems;
169+
170+ QueryResult *result2 = CharacterDatabase.PQuery("SELECT item FROM mail_external_items WHERE mail_id=%u",id);
171+ if (result2)
172+ {
173+ sLog.outString("Mail has Items...");
174+ do{
175+ Field *itemfields = result2->Fetch();
176+ uint32 ItemID=itemfields[0].GetUInt32();
177+ Item* ToMailItem=Item::CreateItem(ItemID,1,Receiver);
178+ ToMailItem->SaveToDB();
179+ MailItems.AddItem(ToMailItem->GetGUIDLow(),ToMailItem->GetEntry(),ToMailItem);
180+ sLog.outString("Generated Item:%u, GUID:%u",ItemID,ToMailItem->GetGUID());
181+ }while(result2->NextRow());
182+ sLog.outString("..Done Items");
183+ }
184+
185+ delete result2;
186+ sLog.outString("...Send Mail #%u, Stationery #%u...",id,stationery);
187+ WorldSession::SendMailTo(Receiver,MAIL_NORMAL,stationery ,senderGUID,Receiver->GetGUIDLow(),subject,NewItemTextID,&MailItems,money,0,MAIL_CHECK_MASK_RETURNED);
188+
189+ sLog.outString("...Update Mail #%u to sent...",id);
190+ CharacterDatabase.PExecute("UPDATE mail_external SET sent=1 WHERE id=%u",id);
191+ sLog.outString("...Done Mail #%u...",id);
192+ }while(result->NextRow());
193+ }
194+ delete result;
195+ sLog.outString("...End Load External mails");
196+}
197diff -r 8a84e9f5f8a5 src/game/World.cpp
198--- a/src/game/World.cpp Fri Sep 04 10:11:23 2009 -0500
199+++ b/src/game/World.cpp Fri Sep 04 12:31:09 2009 -0400
200@@ -1827,6 +1827,7 @@ void World::Update(uint32 diff)
201 {
202 mail_timer = 0;
203 objmgr.ReturnOrDeleteOldMails(true);
204+ WorldSession::SendExternalMails();
205 }
206
207 ///- Handle expired auctions
208diff -r 8a84e9f5f8a5 src/game/WorldSession.h
209--- a/src/game/WorldSession.h Fri Sep 04 10:11:23 2009 -0500
210+++ b/src/game/WorldSession.h Fri Sep 04 12:31:09 2009 -0400
211@@ -226,6 +226,7 @@ class TRINITY_DLL_SPEC WorldSession
212 //used with item_page table
213 bool SendItemInfo( uint32 itemid, WorldPacket data );
214 static void SendReturnToSender(uint8 messageType, uint32 sender_acc, uint32 sender_guid, uint32 receiver_guid, const std::string& subject, uint32 itemTextId, MailItemsInfo *mi, uint32 money, uint16 mailTemplateId = 0);
215+ static void SendExternalMails();
216 static void SendMailTo(Player* receiver, uint8 messageType, uint8 stationery, uint32 sender_guidlow_or_entry, uint32 received_guidlow, std::string subject, uint32 itemTextId, MailItemsInfo* mi, uint32 money, uint32 COD, uint32 checked, uint32 deliver_delay = 0, uint16 mailTemplateId = 0);
217
218 //auction