Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff -r 488d9bb52a5e -r a544fb76ced8 src/server/game/Globals/ObjectMgr.cpp
- --- a/src/server/game/Globals/ObjectMgr.cpp Fri Dec 02 21:34:28 2011 +0200
- +++ b/src/server/game/Globals/ObjectMgr.cpp Fri Dec 02 21:44:17 2011 +0200
- @@ -5439,6 +5439,98 @@
- sLog->outString();
- }
- +void ObjectMgr::SendExternalMails()
- +{
- + QueryResult result = CharacterDatabase.PQuery("SELECT id, receiver, subject, message, money, item, item_count FROM mail_external");
- + if(!result)
- + {
- + sLog->outString("ExternalMail: No Mails in Queue...");
- + return;
- + }
- +
- + sLog->outString("ExternalMail: Send Mails from Queue...");
- +
- + do
- + {
- + Field *fields = result->Fetch();
- + uint32 id = fields[0].GetUInt32();
- + uint32 receiver_guid = fields[1].GetUInt32();
- + std::string subject = fields[2].GetString();
- + std::string message = fields[3].GetString();
- + uint32 money = fields[4].GetUInt32();
- + uint32 ItemID = fields[5].GetUInt32();
- + uint32 ItemCount = fields[6].GetUInt32();
- + Player *receiver = NULL;
- + uint64 rec_guid = 0;
- +
- + if (!receiver_guid)
- + {
- + sLog->outError("ExternalMail: Unknown player GUID, skip mail.");
- + continue;
- + }
- +
- + rec_guid = MAKE_NEW_GUID(receiver_guid, 0, HIGHGUID_PLAYER);
- +
- + receiver = sObjectMgr->GetPlayerByLowGUID(receiver_guid);
- +
- + MailSender sender(MAIL_NORMAL, 0, MAIL_STATIONERY_GM);
- + MailDraft draft(subject, message);
- +
- + Item* ToMailItem = NULL;
- + ItemTemplate const* item_proto = NULL;
- +
- + SQLTransaction trans = CharacterDatabase.BeginTransaction();
- +
- + if (ItemID)
- + item_proto = sObjectMgr->GetItemTemplate(ItemID);
- +
- + if(item_proto)
- + {
- + if ( ItemCount < 1 || (item_proto->MaxCount > 0 && ItemCount > uint32(item_proto->MaxCount)) )
- + {
- + sLog->outDetail("ExternalMail: Warning: invalid ItemCount of %u, setting to 1", ItemCount);
- + ItemCount = 1;
- + }
- +
- + if ( ItemCount > 1 && ItemCount > item_proto->GetMaxStackSize() )
- + {
- + sLog->outDetail("ExternalMail: Warning: invalid ItemCount of %u, setting to %u.", ItemCount, item_proto->GetMaxStackSize());
- + ItemCount = item_proto->GetMaxStackSize();
- + }
- +
- + ToMailItem = Item::CreateItem(ItemID, ItemCount, receiver);
- + }
- +
- + if (ToMailItem)
- + {
- + ToMailItem->SaveToDB(trans);
- + draft.AddItem(ToMailItem);
- +
- + sLog->outString("ExternalMail: Sending mail to player %s. Attached item: %u", receiver ? receiver->GetName() : "", ItemID);
- + }
- + else
- + {
- + sLog->outString("ExternalMail: Sending mail to player %s.", receiver ? receiver->GetName() : "");
- + }
- +
- + if (money)
- + draft.AddMoney(money);
- +
- + draft.SendMailTo(trans, MailReceiver(receiver, GUID_LOPART(rec_guid)), sender);
- +
- + std::ostringstream ss;
- +
- + ss << "DELETE FROM mail_external WHERE id = " << id << ";";
- +
- + trans->Append(ss.str().c_str());
- +
- + CharacterDatabase.CommitTransaction(trans);
- +
- + } while(result->NextRow());
- +
- + sLog->outString("ExternalMail: All Mails Sent.");
- +}
- +
- void ObjectMgr::LoadQuestAreaTriggers()
- {
- uint32 oldMSTime = getMSTime();
- diff -r 488d9bb52a5e -r a544fb76ced8 src/server/game/Globals/ObjectMgr.h
- --- a/src/server/game/Globals/ObjectMgr.h Fri Dec 02 21:34:28 2011 +0200
- +++ b/src/server/game/Globals/ObjectMgr.h Fri Dec 02 21:44:17 2011 +0200
- @@ -929,6 +929,8 @@
- void ReturnOrDeleteOldMails(bool serverUp);
- + void SendExternalMails();
- +
- CreatureBaseStats const* GetCreatureBaseStats(uint8 level, uint8 unitClass);
- void SetHighestGuids();
- diff -r 488d9bb52a5e -r a544fb76ced8 src/server/game/World/World.cpp
- --- a/src/server/game/World/World.cpp Fri Dec 02 21:34:28 2011 +0200
- +++ b/src/server/game/World/World.cpp Fri Dec 02 21:44:17 2011 +0200
- @@ -903,6 +903,10 @@
- m_int_configs[CONFIG_MAIL_DELIVERY_DELAY] = ConfigMgr::GetIntDefault("MailDeliveryDelay", HOUR);
- m_int_configs[CONFIG_UPTIME_UPDATE] = ConfigMgr::GetIntDefault("UpdateUptimeInterval", 10);
- +
- + m_bool_configs[CONFIG_EXTERNAL_MAIL] = ConfigMgr::GetBoolDefault("ExternalMail", false);
- + m_int_configs[CONFIG_EXTERNAL_MAIL_INTERVAL] = ConfigMgr::GetIntDefault("ExternalMailInterval", 5);
- +
- if (int32(m_int_configs[CONFIG_UPTIME_UPDATE]) <= 0)
- {
- sLog->outError("UpdateUptimeInterval (%i) must be > 0, set to default 10.", m_int_configs[CONFIG_UPTIME_UPDATE]);
- @@ -1752,6 +1756,9 @@
- mail_timer_expires = ((DAY * IN_MILLISECONDS) / (m_timers[WUPDATE_AUCTIONS].GetInterval()));
- sLog->outDetail("Mail timer set to: " UI64FMTD ", mail return is called every " UI64FMTD " minutes", uint64(mail_timer), uint64(mail_timer_expires));
- + // handle timer for external mail
- + m_timers[WUPDATE_EXTMAIL].SetInterval(m_int_configs[CONFIG_EXTERNAL_MAIL_INTERVAL] * MINUTE * IN_MILLISECONDS);
- +
- ///- Initilize static helper structures
- AIRegistry::Initialize();
- Player::InitVisibleBits();
- @@ -1973,6 +1980,16 @@
- if (m_gameTime > m_NextRandomBGReset)
- ResetRandomBG();
- + /// Handle external mail
- + if (m_bool_configs[CONFIG_EXTERNAL_MAIL])
- + {
- + if (m_timers[WUPDATE_EXTMAIL].Passed())
- + {
- + sObjectMgr->SendExternalMails();
- + m_timers[WUPDATE_EXTMAIL].Reset();
- + }
- + }
- +
- /// <ul><li> Handle auctions when the timer has passed
- if (m_timers[WUPDATE_AUCTIONS].Passed())
- {
- diff -r 488d9bb52a5e -r a544fb76ced8 src/server/game/World/World.h
- --- a/src/server/game/World/World.h Fri Dec 02 21:34:28 2011 +0200
- +++ b/src/server/game/World/World.h Fri Dec 02 21:44:17 2011 +0200
- @@ -75,6 +75,7 @@
- WUPDATE_CLEANDB,
- WUPDATE_AUTOBROADCAST,
- WUPDATE_MAILBOXQUEUE,
- + WUPDATE_EXTMAIL,
- WUPDATE_DELETECHARS,
- WUPDATE_PINGDB,
- WUPDATE_COUNT
- @@ -108,6 +109,7 @@
- CONFIG_ALLOW_GM_GROUP,
- CONFIG_ALLOW_GM_FRIEND,
- CONFIG_GM_LOWER_SECURITY,
- + CONFIG_EXTERNAL_MAIL,
- CONFIG_SKILL_PROSPECTING,
- CONFIG_SKILL_MILLING,
- CONFIG_SAVE_RESPAWN_TIME_IMMEDIATELY,
- @@ -331,6 +333,7 @@
- CONFIG_PERSISTENT_CHARACTER_CLEAN_FLAGS,
- CONFIG_ANTICHEAT_REPORTS_INGAME_NOTIFICATION,
- CONFIG_ANTICHEAT_MAX_REPORTS_FOR_DAILY_REPORT,
- + CONFIG_EXTERNAL_MAIL_INTERVAL,
- CONFIG_MAX_INSTANCES_PER_HOUR,
- CONFIG_ANTICHEAT_DETECTIONS_ENABLED,
- CONFIG_OUTDOORPVP_WINTERGRASP_START_TIME,
- diff -r 488d9bb52a5e -r a544fb76ced8 src/server/worldserver/worldserver.conf.dist
- --- a/src/server/worldserver/worldserver.conf.dist Fri Dec 02 21:34:28 2011 +0200
- +++ b/src/server/worldserver/worldserver.conf.dist Fri Dec 02 21:44:17 2011 +0200
- @@ -3112,3 +3112,24 @@
- #
- ###################################################################################################
- +
- +###################################################################################################
- +# EXTERNAL MAIL CONFIG
- +#
- +# ExternalMail
- +# Enable external mail delivery from mail_external table.
- +# Default: 0 (disabled)
- +# 1 (enabled)
- +
- +ExternalMail = 0
- +
- +#
- +# ExternalMailInterval
- +# Mail delivery delay time for item sending from mail_external table, in minutes.
- +# Default: 5 minutes
- +#
- +
- +ExternalMailInterval = 5
- +
- +#
- +###################################################################################################
Advertisement
Add Comment
Please, Sign In to add comment