Доброго времени суток форумчане. В общем суть проблемы такова, скачал я патч маил экстренел исправил его чтобы подходило под новую версию ТК, но такая трабла, что патч просто на просто не работает.... В чём может быть трабла? патч брал этот
Код
src/server/game/Mails/Mail.cpp @@ -279,3 +279,64 @@ void MailDraft::SendMailTo(SQLTransaction& trans, MailReceiver const& receiver, deleteIncludedItems(temp); } } + +void WorldSession::SendExternalMails() +{ + TC_LOG_DEBUG("mail", "External Mail> Sending mails in queue..."); + + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_GET_EXTERNAL_MAIL); + PreparedQueryResult result = CharacterDatabase.Query(stmt); + if (!result) + { + TC_LOG_DEBUG("mail", "External Mail> No mails in queue..."); + return; + } + + SQLTransaction trans = CharacterDatabase.BeginTransaction(); + + MailDraft* mail = NULL; + + do + { + Field* fields = result->Fetch(); + uint32 id = fields[0].GetUInt32(); + uint32 receiver_guid = fields[1].GetUInt32(); + std::string subject = fields[2].GetString(); + std::string body = fields[3].GetString(); + uint32 money = fields[4].GetUInt32(); + uint32 itemId = fields[5].GetUInt32(); + uint32 itemCount = fields[6].GetUInt32(); + + Player* receiver = ObjectAccessor::FindPlayer(receiver_guid); + + mail = new MailDraft(subject, body); + + if (money) + { + TC_LOG_DEBUG("mail", "External Mail> Adding money"); + mail->AddMoney(money); + } + + if (itemId) + { + TC_LOG_DEBUG("mail", "External Mail> Adding %u of item with id %u", itemCount, itemId); + if(Item* mailItem = Item::CreateItem(itemId, itemCount)) + { + mailItem->SaveToDB(trans); + mail->AddItem(mailItem); + } + } + + mail->SendMailTo(trans, receiver ? receiver : MailReceiver(receiver_guid), MailSender(MAIL_NORMAL, 0, MAIL_STATIONERY_GM), MAIL_CHECK_MASK_RETURNED); + delete mail; + + stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_EXTERNAL_MAIL); + stmt->setUInt32(0, id); + trans->Append(stmt); + + TC_LOG_DEBUG("mail", "External Mail> Mail sent"); + } while (result->NextRow()); + + CharacterDatabase.CommitTransaction(trans); + TC_LOG_DEBUG("mail", "External Mail> All Mails Sent..."); +} src/server/game/Server/WorldSession.h @@ -322,6 +322,7 @@ class WorldSession } } //used with item_page table + static void SendExternalMails(); bool SendItemInfo(uint32 itemid, WorldPacket data); //auction void SendAuctionHello(uint64 guid, Creature* unit); src/server/game/World/World.cpp @@ -1272,6 +1272,10 @@ void World::LoadConfigSettings(bool reload) // Management for channels with flag CHANNEL_DBC_FLAG_CITY_ONLY m_bool_configs[CONFIG_CHANNEL_ON_CITY_ONLY_FLAG] = sConfigMgr->GetBoolDefault("Channel.CityOnlyFlag", true); + + // External Mail + m_bool_configs[CONFIG_EXTERNAL_MAIL] = sConfigMgr->GetBoolDefault("ExternalMail", false); + m_int_configs[CONFIG_EXTERNAL_MAIL_INTERVAL] = sConfigMgr->GetIntDefault("ExternalMailInterval", 5); // call ScriptMgr if we're reloading the configuration if (reload) @@ -1763,6 +1767,9 @@ void World::SetInitialWorldSettings() tm localTm; ACE_OS::localtime_r(&m_gameTime, &localTm); mail_timer = ((((localTm.tm_hour + 20) % 24)* HOUR * IN_MILLISECONDS) / m_timers[WUPDATE_AUCTIONS].GetInterval()); + + extmail_timer.SetInterval(m_int_configs[CONFIG_EXTERNAL_MAIL_INTERVAL] * MINUTE * IN_MILLISECONDS); + //1440 mail_timer_expires = ((DAY * IN_MILLISECONDS) / (m_timers[WUPDATE_AUCTIONS].GetInterval())); TC_LOG_INFO("server.loading", "Mail timer set to: " UI64FMTD ", mail return is called every " UI64FMTD " minutes", uint64(mail_timer), uint64(mail_timer_expires)); @@ -1992,6 +1999,17 @@ void World::Update(uint32 diff) if (m_gameTime > m_NextRandomBGReset) ResetRandomBG(); + + // Handle external mail + if (sWorld->getBoolConfig(CONFIG_EXTERNAL_MAIL)) + { + extmail_timer.Update(diff); + if (extmail_timer.Passed()) + { + WorldSession::SendExternalMails(); + extmail_timer.Reset(); + } + } if (m_gameTime > m_NextGuildReset) ResetGuildCap(); src/server/game/World/World.h @@ -165,6 +165,7 @@ enum WorldBoolConfigs CONFIG_INSTANCES_RESET_ANNOUNCE, CONFIG_DUEL_RESET_ENABLE, CONFIG_CHANNEL_ON_CITY_ONLY_FLAG, + CONFIG_EXTERNAL_MAIL, BOOL_CONFIG_VALUE_COUNT }; @@ -341,6 +342,7 @@ enum WorldIntConfigs CONFIG_BG_REWARD_WINNER_ARENA_LAST, CONFIG_BG_REWARD_LOSER_HONOR_FIRST, CONFIG_BG_REWARD_LOSER_HONOR_LAST, + CONFIG_EXTERNAL_MAIL_INTERVAL, INT_CONFIG_VALUE_COUNT }; @@ -781,6 +783,7 @@ class World time_t m_startTime; time_t m_gameTime; IntervalTimer m_timers[WUPDATE_COUNT]; + IntervalTimer extmail_timer; time_t mail_timer; time_t mail_timer_expires; uint32 m_updateTime, m_updateTimeSum; src/server/shared/Database/Implementation/CharacterDatabase.cpp @@ -141,6 +141,8 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_UPD_MAIL_RETURNED, "UPDATE mail SET sender = ?, receiver = ?, expire_time = ?, deliver_time = ?, cod = 0, checked = ? WHERE id = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_MAIL_ITEM_RECEIVER, "UPDATE mail_items SET receiver = ? WHERE item_guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_ITEM_OWNER, "UPDATE item_instance SET owner_guid = ? WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_GET_EXTERNAL_MAIL, "SELECT id, receiver, subject, message, money, item, item_count FROM mail_external ORDER BY id ASC", CONNECTION_SYNCH); + PrepareStatement(CHAR_DEL_EXTERNAL_MAIL, "DELETE FROM mail_external WHERE id = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_ITEM_REFUNDS, "SELECT player_guid, paidMoney, paidExtendedCost FROM item_refund_instance WHERE item_guid = ? AND player_guid = ? LIMIT 1", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_ITEM_BOP_TRADE, "SELECT allowedPlayers FROM item_soulbound_trade_data WHERE itemGuid = ? LIMIT 1", CONNECTION_SYNCH); src/server/shared/Database/Implementation/CharacterDatabase.h @@ -139,6 +139,8 @@ enum CharacterDatabaseStatements CHAR_UPD_MAIL_RETURNED, CHAR_UPD_MAIL_ITEM_RECEIVER, CHAR_UPD_ITEM_OWNER, + CHAR_GET_EXTERNAL_MAIL, + CHAR_DEL_EXTERNAL_MAIL, CHAR_SEL_ITEM_REFUNDS, CHAR_SEL_ITEM_BOP_TRADE, CHAR_DEL_ITEM_BOP_TRADE, src/server/worldserver/worldserver.conf.dist @@ -2869,5 +2869,18 @@ Rate.XP.Explore.Premium = 2 Rate.Honor.Premium = 2 Rate.Reputation.Gain.Premium = 2 +# ExternalMail +# Enable external mail delivery from mail_external table. +# Default: 0 (disabled) +# 1 (enabled) +# +# ExternalMailInterval +# Mail delivery delay time for item sending from mail_external table, in minutes. +# Default: 5 minutes +# + +ExternalMail = 0 +ExternalMailInterval = 5 + # ###################################################################################################
мб есть у кого какие-то предположения? Или может кто поделится рабочим под ласт триньку?
Сообщение #
1 написано 26.08.2014 в 20:39
metatronus , как он по твоему должен работать?
Сообщение #
2 написано 26.08.2014 в 23:42
Должно приходить письмо в игре с личного кабинета, и дедатся запись в бд mail_external. Этого не происходит.Добавлено (27.08.2014, 19:02) --------------------------------------------- up!
Сообщение #
3 написано 27.08.2014 в 19:02
установился он у тебя без ошибок?
Сообщение #
4 написано 01.09.2014 в 04:44
Да, поправил накатился норм. Тему в корзину уже сделал)
Сообщение #
5 написано 01.09.2014 в 11:24
Цитата metatronus (
)
Да, поправил накатился норм. Тему в корзину уже сделал)
помоги поставить, а то не могу на linux, накатитьДобавлено (02.09.2014, 19:42) --------------------------------------------- Сделал)) кому нужна помощь пишите в лс
Сообщение #
6 написано 02.09.2014 в 19:42