kusanagy

mail_external

Sep 23rd, 2017
310
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 10.80 KB | None | 0 0
  1. From 2244452ba2f8dc34abf5a63a2ccb58e74c3b15d2 Mon Sep 17 00:00:00 2001
  2. From: Neket007 <[email protected]>
  3. Date: Mon, 24 Sep 2012 21:52:06 +1000
  4. Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B8=D1=82=D0?=
  5.  =?UTF-8?q?=B5=D0=BB=D1=8C=D0=BD=D0=BE:=20=D0=98=D0=BC=D0=BF=D0=BB=D0=B5=D0=BC?=
  6.  =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D1=8F=20External=20Mail?=
  7. MIME-Version: 1.0
  8. Content-Type: text/plain; charset=UTF-8
  9. Content-Transfer-Encoding: 8bit
  10.  
  11. ---
  12. sql/updates/SliceCore/characters.sql               |   13 ++++-
  13.  src/server/game/Mails/Mail.cpp                     |   61 ++++++++++++++++++++
  14.  src/server/game/Server/WorldSession.h              |    1 +
  15.  src/server/game/World/World.cpp                    |   19 +++++-
  16.  src/server/game/World/World.h                      |    3 +
  17.  .../Database/Implementation/CharacterDatabase.cpp  |    2 +
  18.  .../Database/Implementation/CharacterDatabase.h    |    2 +
  19.  src/server/worldserver/worldserver.conf.dist       |   14 +++++
  20.  8 files changed, 113 insertions(+), 2 deletions(-)
  21.  
  22. diff --git a/sql/updates/SliceCore/characters.sql b/sql/updates/SliceCore/characters.sql
  23. index 1c8560d..26e42a7 100644
  24. --- a/sql/updates/SliceCore/characters.sql
  25. +++ b/sql/updates/SliceCore/characters.sql
  26. @@ -1,2 +1,13 @@
  27.  ALTER TABLE `item_instance`
  28. -ADD COLUMN `displayId` mediumint(8) unsigned NOT NULL DEFAULT '0' AFTER `itemEntry`;
  29. \ No newline at end of file
  30. +ADD COLUMN `displayId` mediumint(8) unsigned NOT NULL DEFAULT '0' AFTER `itemEntry`;
  31. +
  32. +CREATE TABLE `mail_external` (
  33. +  `id` bigint(20) unsigned NOT NULL auto_increment,
  34. +  `receiver` bigint(20) unsigned NOT NULL,
  35. +  `subject` varchar(200) default 'Support Message',
  36. +  `message` varchar(500) default 'Support Message',
  37. +  `money` bigint(20) unsigned NOT NULL default '0',
  38. +  `item` bigint(20) unsigned NOT NULL default '0',
  39. +  `item_count` bigint(20) unsigned NOT NULL default '0',
  40. +  PRIMARY KEY  (`id`)
  41. +) ENGINE=MyISAM AUTO_INCREMENT=7525 DEFAULT CHARSET=utf8;
  42. \ No newline at end of file
  43. diff --git a/src/server/game/Mails/Mail.cpp b/src/server/game/Mails/Mail.cpp
  44. index 929a1d8..f27cedb 100755
  45. --- a/src/server/game/Mails/Mail.cpp
  46. +++ b/src/server/game/Mails/Mail.cpp
  47. @@ -277,3 +277,64 @@ void MailDraft::SendMailTo(SQLTransaction& trans, MailReceiver const& receiver,
  48.          deleteIncludedItems(temp);
  49.      }
  50.  }
  51. +
  52. +void WorldSession::SendExternalMails()
  53. +{
  54. +    sLog->outDebug(LOG_FILTER_CHARACTER, "External Mail> Sending mails in queue...");
  55. +  
  56. +    PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_GET_EXTERNAL_MAIL);
  57. +    PreparedQueryResult result = CharacterDatabase.Query(stmt);
  58. +    if (!result)
  59. +    {
  60. +        sLog->outDebug(LOG_FILTER_CHARACTER, "External Mail> No mails in queue...");
  61. +        return;
  62. +    }
  63. +
  64. +    SQLTransaction trans = CharacterDatabase.BeginTransaction();
  65. +
  66. +    MailDraft* mail = NULL;
  67. +
  68. +    do
  69. +    {
  70. +        Field *fields = result->Fetch();
  71. +        uint32 id = fields[0].GetUInt32();
  72. +        uint32 receiver_guid = fields[1].GetUInt32();
  73. +        std::string subject = fields[2].GetString();
  74. +        std::string body = fields[3].GetString();
  75. +        uint32 money = fields[4].GetUInt32();
  76. +        uint32 itemId = fields[5].GetUInt32();
  77. +        uint32 itemCount = fields[6].GetUInt32()
  78. +
  79. +        Player *receiver = ObjectAccessor::FindPlayer(receiver_guid);
  80. +
  81. +        mail = new MailDraft(subject, body);  
  82. +  
  83. +        if (money)
  84. +        {
  85. +            sLog->outDebug(LOG_FILTER_CHARACTER, "External Mail> Adding money");
  86. +            mail->AddMoney(money);
  87. +        }
  88. +
  89. +        if (itemId)   
  90. +        {
  91. +             sLog->outDebug(LOG_FILTER_CHARACTER, "External Mail> Adding %u of item with id %u", itemCount, itemId);
  92. +             if(Item* mailItem = Item::CreateItem(itemId, itemCount)) 
  93. +             {
  94. +                 mailItem->SaveToDB(trans);   
  95. +                 mail->AddItem(mailItem);
  96. +             }
  97. +        } 
  98. +
  99. +        mail->SendMailTo(trans, receiver ? receiver : MailReceiver(receiver_guid), MailSender(MAIL_NORMAL, 0, MAIL_STATIONERY_GM), MAIL_CHECK_MASK_RETURNED);
  100. +        delete mail;
  101. +
  102. +        stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_EXTERNAL_MAIL);
  103. +        stmt->setUInt32(0, id);
  104. +        trans->Append(stmt);
  105. +
  106. +        sLog->outDebug(LOG_FILTER_CHARACTER, "External Mail> Mail sent");
  107. +   } while (result->NextRow());
  108. +  
  109. +   CharacterDatabase.CommitTransaction(trans);
  110. +   sLog->outDebug(LOG_FILTER_CHARACTER, "External Mail> All Mails Sent...");  
  111. +}
  112. diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
  113. index 6b9cfb3..a6dbed6 100755
  114. --- a/src/server/game/Server/WorldSession.h
  115. +++ b/src/server/game/Server/WorldSession.h
  116. @@ -342,6 +342,7 @@ class WorldSession
  117.              }
  118.          }
  119.          //used with item_page table
  120. +        static void SendExternalMails();
  121.          bool SendItemInfo(uint32 itemid, WorldPacket data);
  122.          //auction
  123.          void SendAuctionHello(uint64 guid, Creature* unit);
  124. diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
  125. index 244c65a..1b662da 100755
  126. --- a/src/server/game/World/World.cpp
  127. +++ b/src/server/game/World/World.cpp
  128. @@ -1239,6 +1239,10 @@ void World::LoadConfigSettings(bool reload)
  129.      // Management for channels with flag CHANNEL_DBC_FLAG_CITY_ONLY
  130.      m_bool_configs[CONFIG_CHANNEL_ON_CITY_ONLY_FLAG]  = ConfigMgr::GetBoolDefault("Channel.CityOnlyFlag", true);
  131.  
  132. +   // External Mail
  133. +    m_bool_configs[CONFIG_EXTERNAL_MAIL_ENABLE] = ConfigMgr::GetBoolDefault("External.Mail.Enable", false);
  134. +    m_int_configs[CONFIG_EXTERNAL_MAIL_INTERVAL] = ConfigMgr::GetIntDefault("External.Mail.Interval", 1);
  135. +
  136.      if (reload)
  137.          sScriptMgr->OnConfigLoad(reload);
  138.  }
  139. @@ -1724,7 +1728,9 @@ void World::SetInitialWorldSettings()
  140.      //one second is 1000 -(tested on win system)
  141.      //TODO: Get rid of magic numbers
  142.      mail_timer = ((((localtime(&m_gameTime)->tm_hour + 20) % 24)* HOUR * IN_MILLISECONDS) / m_timers[WUPDATE_AUCTIONS].GetInterval());
  143. -                                                            //1440
  144. +    
  145. +    extmail_timer.SetInterval(m_int_configs[CONFIG_EXTERNAL_MAIL_INTERVAL] * MINUTE * IN_MILLISECONDS);
  146. +    
  147.      mail_timer_expires = ((DAY * IN_MILLISECONDS) / (m_timers[WUPDATE_AUCTIONS].GetInterval()));
  148.      sLog->outInfo(LOG_FILTER_SERVER_LOADING, "Mail timer set to: " UI64FMTD ", mail return is called every " UI64FMTD " minutes", uint64(mail_timer), uint64(mail_timer_expires));
  149.  
  150. @@ -1942,6 +1948,17 @@ void World::Update(uint32 diff)
  151.  
  152.      if (m_gameTime > m_NextRandomBGReset)
  153.          ResetRandomBG();
  154. +        
  155. +     // Handle external mail
  156. +    if (sWorld->getBoolConfig(CONFIG_EXTERNAL_MAIL_ENABLE))
  157. +    {
  158. +        extmail_timer.Update(diff);
  159. +        if (extmail_timer.Passed())
  160. +        {
  161. +            WorldSession::SendExternalMails();
  162. +            extmail_timer.Reset();
  163. +        } 
  164. +    } 
  165.  
  166.      /// <ul><li> Handle auctions when the timer has passed
  167.      if (m_timers[WUPDATE_AUCTIONS].Passed())
  168. diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
  169. index 242a80a..b7f165e 100755
  170. --- a/src/server/game/World/World.h
  171. +++ b/src/server/game/World/World.h
  172. @@ -176,6 +176,7 @@ enum WorldBoolConfigs
  173.     CONFIG_VIP_TAXI_COMMAND,
  174.     CONFIG_VIP_HOME_COMMAND,
  175.     CONFIG_VIP_CAPITAL_COMMAND,
  176. +   CONFIG_EXTERNAL_MAIL_ENABLE,
  177.      BOOL_CONFIG_VALUE_COUNT
  178.  };
  179.  
  180. @@ -336,6 +337,7 @@ enum WorldIntConfigs
  181.      CONFIG_WINTERGRASP_BATTLETIME,
  182.      CONFIG_WINTERGRASP_NOBATTLETIME,
  183.      CONFIG_WINTERGRASP_RESTART_AFTER_CRASH,
  184. +   CONFIG_EXTERNAL_MAIL_INTERVAL,
  185.      INT_CONFIG_VALUE_COUNT
  186.  };
  187.  
  188. @@ -805,6 +807,7 @@ class World
  189.          time_t m_startTime;
  190.          time_t m_gameTime;
  191.          IntervalTimer m_timers[WUPDATE_COUNT];
  192. +        IntervalTimer extmail_timer;
  193.          time_t mail_timer;
  194.          time_t mail_timer_expires;
  195.          uint32 m_updateTime, m_updateTimeSum;
  196. diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
  197. index c31f733..cf752e0 100644
  198. --- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp
  199. +++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
  200. @@ -125,6 +125,8 @@ void CharacterDatabaseConnection::DoPrepareStatements()
  201.      PREPARE_STATEMENT(CHAR_UPD_MAIL_RETURNED, "UPDATE mail SET sender = ?, receiver = ?, expire_time = ?, deliver_time = ?, cod = 0, checked = ? WHERE id = ?", CONNECTION_ASYNC)
  202.      PREPARE_STATEMENT(CHAR_UPD_MAIL_ITEM_RECEIVER, "UPDATE mail_items SET receiver = ? WHERE item_guid = ?", CONNECTION_ASYNC)
  203.      PREPARE_STATEMENT(CHAR_UPD_ITEM_OWNER, "UPDATE item_instance SET owner_guid = ? WHERE guid = ?", CONNECTION_ASYNC)
  204. +    PREPARE_STATEMENT(CHAR_GET_EXTERNAL_MAIL, "SELECT id, receiver, subject, message, money, item, item_count FROM mail_external ORDER BY id ASC", CONNECTION_SYNCH)
  205. +    PREPARE_STATEMENT(CHAR_DEL_EXTERNAL_MAIL, "DELETE FROM mail_external WHERE id = ?", CONNECTION_ASYNC)
  206.  
  207.      PREPARE_STATEMENT(CHAR_SEL_ITEM_REFUNDS, "SELECT player_guid, paidMoney, paidExtendedCost FROM item_refund_instance WHERE item_guid = ? AND player_guid = ? LIMIT 1", CONNECTION_SYNCH)
  208.      PREPARE_STATEMENT(CHAR_SEL_ITEM_BOP_TRADE, "SELECT allowedPlayers FROM item_soulbound_trade_data WHERE itemGuid = ? LIMIT 1", CONNECTION_SYNCH)
  209. diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.h b/src/server/shared/Database/Implementation/CharacterDatabase.h
  210. index 823ad87..6deb042 100644
  211. --- a/src/server/shared/Database/Implementation/CharacterDatabase.h
  212. +++ b/src/server/shared/Database/Implementation/CharacterDatabase.h
  213. @@ -135,6 +135,8 @@ enum CharacterDatabaseStatements
  214.      CHAR_UPD_MAIL_RETURNED,
  215.      CHAR_UPD_MAIL_ITEM_RECEIVER,
  216.      CHAR_UPD_ITEM_OWNER,
  217. +    CHAR_GET_EXTERNAL_MAIL,
  218. +    CHAR_DEL_EXTERNAL_MAIL,
  219.      CHAR_SEL_ITEM_REFUNDS,
  220.      CHAR_SEL_ITEM_BOP_TRADE,
  221.      CHAR_DEL_ITEM_BOP_TRADE,
  222. diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist
  223. index ff654a1..188f663 100644
  224. --- a/src/server/worldserver/worldserver.conf.dist
  225. +++ b/src/server/worldserver/worldserver.conf.dist
  226. @@ -2697,6 +2697,20 @@ Vip.Home.Command = 1
  227.  Vip.Capital.Command = 1
  228.  
  229.  #
  230. +#    External.Mail.Enable
  231. +#        Enable external mail delivery from mail_external table.
  232. +#        Default: 0 (disabled)
  233. +#                 1 (enabled)
  234. +#
  235. +#    External.Mail.Interval
  236. +#        Mail delivery delay time for item sending from mail_external table, in minutes.
  237. +#        Default: 5 minutes
  238. +#
  239. +
  240. +External.Mail.Enable = 1
  241. +External.Mail.Interval = 5
  242. +
  243. +#
  244.  ###################################################################################################
  245.  
  246.  ###################################################################################################
  247. --
  248. 1.7.10
Advertisement
Add Comment
Please, Sign In to add comment