Dinoza

External Mail

Feb 19th, 2012
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 7.21 KB | None | 0 0
  1. diff -r 488d9bb52a5e -r a544fb76ced8 src/server/game/Globals/ObjectMgr.cpp
  2. --- a/src/server/game/Globals/ObjectMgr.cpp Fri Dec 02 21:34:28 2011 +0200
  3. +++ b/src/server/game/Globals/ObjectMgr.cpp Fri Dec 02 21:44:17 2011 +0200
  4. @@ -5439,6 +5439,98 @@
  5.      sLog->outString();
  6.  }
  7.  
  8. +void ObjectMgr::SendExternalMails()
  9. +{
  10. +   QueryResult result = CharacterDatabase.PQuery("SELECT id, receiver, subject, message, money, item, item_count FROM mail_external");
  11. +   if(!result)
  12. +   {
  13. +       sLog->outString("ExternalMail: No Mails in Queue...");
  14. +       return;
  15. +   }
  16. +
  17. +   sLog->outString("ExternalMail: Send Mails from Queue...");
  18. +
  19. +   do
  20. +   {
  21. +       Field *fields = result->Fetch();
  22. +       uint32 id = fields[0].GetUInt32();
  23. +       uint32 receiver_guid = fields[1].GetUInt32();
  24. +       std::string subject = fields[2].GetString();
  25. +       std::string message = fields[3].GetString();
  26. +       uint32 money = fields[4].GetUInt32();
  27. +       uint32 ItemID = fields[5].GetUInt32();
  28. +       uint32 ItemCount = fields[6].GetUInt32();
  29. +       Player *receiver = NULL;
  30. +       uint64 rec_guid = 0;
  31. +
  32. +       if (!receiver_guid)
  33. +       {
  34. +           sLog->outError("ExternalMail: Unknown player GUID, skip mail.");
  35. +           continue;
  36. +       }
  37. +
  38. +       rec_guid = MAKE_NEW_GUID(receiver_guid, 0, HIGHGUID_PLAYER);
  39. +
  40. +       receiver = sObjectMgr->GetPlayerByLowGUID(receiver_guid);
  41. +
  42. +       MailSender sender(MAIL_NORMAL, 0, MAIL_STATIONERY_GM);
  43. +       MailDraft draft(subject, message);
  44. +
  45. +       Item* ToMailItem = NULL;
  46. +       ItemTemplate const* item_proto = NULL;
  47. +
  48. +       SQLTransaction trans = CharacterDatabase.BeginTransaction();
  49. +
  50. +       if (ItemID)
  51. +           item_proto = sObjectMgr->GetItemTemplate(ItemID);
  52. +
  53. +       if(item_proto)
  54. +       {
  55. +           if ( ItemCount < 1 || (item_proto->MaxCount > 0 && ItemCount > uint32(item_proto->MaxCount)) )
  56. +           {
  57. +               sLog->outDetail("ExternalMail: Warning: invalid ItemCount of %u, setting to 1", ItemCount);
  58. +               ItemCount = 1;
  59. +           }
  60. +
  61. +           if ( ItemCount > 1 && ItemCount > item_proto->GetMaxStackSize() )
  62. +           {
  63. +               sLog->outDetail("ExternalMail: Warning: invalid ItemCount of %u, setting to %u.", ItemCount, item_proto->GetMaxStackSize());
  64. +               ItemCount = item_proto->GetMaxStackSize();
  65. +           }
  66. +
  67. +           ToMailItem = Item::CreateItem(ItemID, ItemCount, receiver);
  68. +       }
  69. +
  70. +       if (ToMailItem)
  71. +       {
  72. +           ToMailItem->SaveToDB(trans);
  73. +           draft.AddItem(ToMailItem);
  74. +
  75. +           sLog->outString("ExternalMail: Sending mail to player %s. Attached item: %u", receiver ? receiver->GetName() : "", ItemID);            
  76. +       }
  77. +       else
  78. +       {
  79. +           sLog->outString("ExternalMail: Sending mail to player %s.", receiver ? receiver->GetName() : "");
  80. +       }
  81. +
  82. +       if (money)
  83. +           draft.AddMoney(money);
  84. +
  85. +       draft.SendMailTo(trans, MailReceiver(receiver, GUID_LOPART(rec_guid)), sender);
  86. +
  87. +       std::ostringstream ss;
  88. +
  89. +       ss << "DELETE FROM mail_external WHERE id = " << id << ";";
  90. +
  91. +       trans->Append(ss.str().c_str());
  92. +
  93. +       CharacterDatabase.CommitTransaction(trans);
  94. +
  95. +   } while(result->NextRow());
  96. +
  97. +   sLog->outString("ExternalMail: All Mails Sent.");
  98. +}
  99. +
  100.  void ObjectMgr::LoadQuestAreaTriggers()
  101.  {
  102.      uint32 oldMSTime = getMSTime();
  103. diff -r 488d9bb52a5e -r a544fb76ced8 src/server/game/Globals/ObjectMgr.h
  104. --- a/src/server/game/Globals/ObjectMgr.h   Fri Dec 02 21:34:28 2011 +0200
  105. +++ b/src/server/game/Globals/ObjectMgr.h   Fri Dec 02 21:44:17 2011 +0200
  106. @@ -929,6 +929,8 @@
  107.  
  108.          void ReturnOrDeleteOldMails(bool serverUp);
  109.  
  110. +        void SendExternalMails();
  111. +
  112.          CreatureBaseStats const* GetCreatureBaseStats(uint8 level, uint8 unitClass);
  113.  
  114.          void SetHighestGuids();
  115. diff -r 488d9bb52a5e -r a544fb76ced8 src/server/game/World/World.cpp
  116. --- a/src/server/game/World/World.cpp   Fri Dec 02 21:34:28 2011 +0200
  117. +++ b/src/server/game/World/World.cpp   Fri Dec 02 21:44:17 2011 +0200
  118. @@ -903,6 +903,10 @@
  119.      m_int_configs[CONFIG_MAIL_DELIVERY_DELAY] = ConfigMgr::GetIntDefault("MailDeliveryDelay", HOUR);
  120.  
  121.      m_int_configs[CONFIG_UPTIME_UPDATE] = ConfigMgr::GetIntDefault("UpdateUptimeInterval", 10);
  122. +
  123. +    m_bool_configs[CONFIG_EXTERNAL_MAIL] = ConfigMgr::GetBoolDefault("ExternalMail", false);
  124. +    m_int_configs[CONFIG_EXTERNAL_MAIL_INTERVAL] = ConfigMgr::GetIntDefault("ExternalMailInterval", 5);
  125. +
  126.      if (int32(m_int_configs[CONFIG_UPTIME_UPDATE]) <= 0)
  127.      {
  128.          sLog->outError("UpdateUptimeInterval (%i) must be > 0, set to default 10.", m_int_configs[CONFIG_UPTIME_UPDATE]);
  129. @@ -1752,6 +1756,9 @@
  130.      mail_timer_expires = ((DAY * IN_MILLISECONDS) / (m_timers[WUPDATE_AUCTIONS].GetInterval()));
  131.      sLog->outDetail("Mail timer set to: " UI64FMTD ", mail return is called every " UI64FMTD " minutes", uint64(mail_timer), uint64(mail_timer_expires));
  132.  
  133. +    // handle timer for external mail
  134. +    m_timers[WUPDATE_EXTMAIL].SetInterval(m_int_configs[CONFIG_EXTERNAL_MAIL_INTERVAL] * MINUTE * IN_MILLISECONDS);
  135. +
  136.      ///- Initilize static helper structures
  137.      AIRegistry::Initialize();
  138.      Player::InitVisibleBits();
  139. @@ -1973,6 +1980,16 @@
  140.      if (m_gameTime > m_NextRandomBGReset)
  141.          ResetRandomBG();
  142.  
  143. +    /// Handle external mail
  144. +    if (m_bool_configs[CONFIG_EXTERNAL_MAIL])
  145. +    {
  146. +        if (m_timers[WUPDATE_EXTMAIL].Passed())
  147. +        {
  148. +            sObjectMgr->SendExternalMails();
  149. +            m_timers[WUPDATE_EXTMAIL].Reset();
  150. +        }
  151. +    }
  152. +
  153.      /// <ul><li> Handle auctions when the timer has passed
  154.      if (m_timers[WUPDATE_AUCTIONS].Passed())
  155.      {
  156. diff -r 488d9bb52a5e -r a544fb76ced8 src/server/game/World/World.h
  157. --- a/src/server/game/World/World.h Fri Dec 02 21:34:28 2011 +0200
  158. +++ b/src/server/game/World/World.h Fri Dec 02 21:44:17 2011 +0200
  159. @@ -75,6 +75,7 @@
  160.      WUPDATE_CLEANDB,
  161.      WUPDATE_AUTOBROADCAST,
  162.      WUPDATE_MAILBOXQUEUE,
  163. +    WUPDATE_EXTMAIL,
  164.      WUPDATE_DELETECHARS,
  165.      WUPDATE_PINGDB,
  166.      WUPDATE_COUNT
  167. @@ -108,6 +109,7 @@
  168.      CONFIG_ALLOW_GM_GROUP,
  169.      CONFIG_ALLOW_GM_FRIEND,
  170.      CONFIG_GM_LOWER_SECURITY,
  171. +    CONFIG_EXTERNAL_MAIL,
  172.      CONFIG_SKILL_PROSPECTING,
  173.      CONFIG_SKILL_MILLING,
  174.      CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY,
  175. @@ -331,6 +333,7 @@
  176.      CONFIG_PERSISTENT_CHARACTER_CLEAN_FLAGS,
  177.      CONFIG_ANTICHEAT_REPORTS_INGAME_NOTIFICATION,
  178.      CONFIG_ANTICHEAT_MAX_REPORTS_FOR_DAILY_REPORT,
  179. +    CONFIG_EXTERNAL_MAIL_INTERVAL,
  180.      CONFIG_MAX_INSTANCES_PER_HOUR,
  181.      CONFIG_ANTICHEAT_DETECTIONS_ENABLED,
  182.      CONFIG_OUTDOORPVP_WINTERGRASP_START_TIME,
  183. diff -r 488d9bb52a5e -r a544fb76ced8 src/server/worldserver/worldserver.conf.dist
  184. --- a/src/server/worldserver/worldserver.conf.dist  Fri Dec 02 21:34:28 2011 +0200
  185. +++ b/src/server/worldserver/worldserver.conf.dist  Fri Dec 02 21:44:17 2011 +0200
  186. @@ -3112,3 +3112,24 @@
  187.  
  188.  #
  189.  ###################################################################################################
  190. +
  191. +###################################################################################################
  192. +# EXTERNAL MAIL CONFIG
  193. +#
  194. +#    ExternalMail
  195. +#        Enable external mail delivery from mail_external table.
  196. +#        Default: 0 (disabled)
  197. +#                 1 (enabled)
  198. +
  199. +ExternalMail = 0
  200. +
  201. +#
  202. +#    ExternalMailInterval
  203. +#        Mail delivery delay time for item sending from mail_external table, in minutes.
  204. +#        Default: 5 minutes
  205. +#
  206. +
  207. +ExternalMailInterval = 5
  208. +
  209. +#
  210. +###################################################################################################
Advertisement
Add Comment
Please, Sign In to add comment