Restore some commits from trinitycore2 3.1.3
--HG-- branch : trunk
This commit is contained in:
+12
-11
@@ -1708,16 +1708,6 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement)
|
|||||||
{
|
{
|
||||||
Item* item = reward->itemId ? Item::CreateItem(reward->itemId,1,GetPlayer ()) : NULL;
|
Item* item = reward->itemId ? Item::CreateItem(reward->itemId,1,GetPlayer ()) : NULL;
|
||||||
|
|
||||||
MailItemsInfo mi;
|
|
||||||
if(item)
|
|
||||||
{
|
|
||||||
// save new item before send
|
|
||||||
item->SaveToDB(); // save for prevent lost at next mail load, if send fail then item will deleted
|
|
||||||
|
|
||||||
// item
|
|
||||||
mi.AddItem(item->GetGUIDLow(), item->GetEntry(), item);
|
|
||||||
}
|
|
||||||
|
|
||||||
int loc_idx = GetPlayer()->GetSession()->GetSessionDbLocaleIndex();
|
int loc_idx = GetPlayer()->GetSession()->GetSessionDbLocaleIndex();
|
||||||
|
|
||||||
// subject and text
|
// subject and text
|
||||||
@@ -1736,7 +1726,18 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement)
|
|||||||
|
|
||||||
uint32 itemTextId = objmgr.CreateItemText( text );
|
uint32 itemTextId = objmgr.CreateItemText( text );
|
||||||
|
|
||||||
WorldSession::SendMailTo(GetPlayer(), MAIL_CREATURE, MAIL_STATIONERY_NORMAL, reward->sender, GetPlayer()->GetGUIDLow(), subject, itemTextId , &mi, 0, 0, MAIL_CHECK_MASK_NONE);
|
MailDraft draft(subject, itemTextId);
|
||||||
|
|
||||||
|
if(item)
|
||||||
|
{
|
||||||
|
// save new item before send
|
||||||
|
item->SaveToDB(); // save for prevent lost at next mail load, if send fail then item will deleted
|
||||||
|
|
||||||
|
// item
|
||||||
|
draft.AddItem(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
draft.SendMailTo(GetPlayer(), MailSender(MAIL_CREATURE, reward->sender));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -922,10 +922,6 @@ void BattleGround::SendRewardMarkByMail(Player *plr,uint32 mark, uint32 count)
|
|||||||
// save new item before send
|
// save new item before send
|
||||||
markItem->SaveToDB(); // save for prevent lost at next mail load, if send fail then item will deleted
|
markItem->SaveToDB(); // save for prevent lost at next mail load, if send fail then item will deleted
|
||||||
|
|
||||||
// item
|
|
||||||
MailItemsInfo mi;
|
|
||||||
mi.AddItem(markItem->GetGUIDLow(), markItem->GetEntry(), markItem);
|
|
||||||
|
|
||||||
// subject: item name
|
// subject: item name
|
||||||
std::string subject = markProto->Name1;
|
std::string subject = markProto->Name1;
|
||||||
int loc_idx = plr->GetSession()->GetSessionDbLocaleIndex();
|
int loc_idx = plr->GetSession()->GetSessionDbLocaleIndex();
|
||||||
@@ -940,7 +936,9 @@ void BattleGround::SendRewardMarkByMail(Player *plr,uint32 mark, uint32 count)
|
|||||||
snprintf(textBuf,300,textFormat.c_str(),GetName(),GetName());
|
snprintf(textBuf,300,textFormat.c_str(),GetName(),GetName());
|
||||||
uint32 itemTextId = objmgr.CreateItemText( textBuf );
|
uint32 itemTextId = objmgr.CreateItemText( textBuf );
|
||||||
|
|
||||||
WorldSession::SendMailTo(plr, MAIL_CREATURE, MAIL_STATIONERY_NORMAL, bmEntry, plr->GetGUIDLow(), subject, itemTextId , &mi, 0, 0, MAIL_CHECK_MASK_NONE);
|
MailDraft(subject, itemTextId)
|
||||||
|
.AddItem(markItem)
|
||||||
|
.SendMailTo(plr, MailSender(MAIL_CREATURE, bmEntry));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
#include "Opcodes.h"
|
#include "Opcodes.h"
|
||||||
|
|
||||||
// Temporal fix to wintergrasp spirit guides till 3.2
|
// Temporal fix to wintergrasp spirit guides till 3.2
|
||||||
#include "Wintergrasp.h"
|
#include "OutdoorPvPWG.h"
|
||||||
#include "OutdoorPvPMgr.h"
|
#include "OutdoorPvPMgr.h"
|
||||||
// WG end
|
// WG end
|
||||||
|
|
||||||
@@ -604,7 +604,7 @@ void WorldSession::HandleAreaSpiritHealerQueryOpcode( WorldPacket & recv_data )
|
|||||||
{ // Wintergrasp Hack till 3.2 and it's implemented as BG
|
{ // Wintergrasp Hack till 3.2 and it's implemented as BG
|
||||||
if (GetPlayer()->GetZoneId() == 4197)
|
if (GetPlayer()->GetZoneId() == 4197)
|
||||||
{
|
{
|
||||||
OPvPWintergrasp *pvpWG = (OPvPWintergrasp*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197);
|
OutdoorPvPWG *pvpWG = (OutdoorPvPWG*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197);
|
||||||
if (pvpWG && pvpWG->isWarTime())
|
if (pvpWG && pvpWG->isWarTime())
|
||||||
pvpWG->SendAreaSpiritHealerQueryOpcode(_player, guid);
|
pvpWG->SendAreaSpiritHealerQueryOpcode(_player, guid);
|
||||||
}
|
}
|
||||||
@@ -635,7 +635,7 @@ void WorldSession::HandleAreaSpiritHealerQueueOpcode( WorldPacket & recv_data )
|
|||||||
{ // Wintergrasp Hack till 3.2 and it's implemented as BG
|
{ // Wintergrasp Hack till 3.2 and it's implemented as BG
|
||||||
if (GetPlayer()->GetZoneId() == 4197)
|
if (GetPlayer()->GetZoneId() == 4197)
|
||||||
{
|
{
|
||||||
OPvPWintergrasp *pvpWG = (OPvPWintergrasp*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197);
|
OutdoorPvPWG *pvpWG = (OutdoorPvPWG*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197);
|
||||||
if (pvpWG && pvpWG->isWarTime())
|
if (pvpWG && pvpWG->isWarTime())
|
||||||
pvpWG->AddPlayerToResurrectQueue(guid, _player->GetGUID());
|
pvpWG->AddPlayerToResurrectQueue(guid, _player->GetGUID());
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-8
@@ -40,7 +40,7 @@
|
|||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include "GlobalEvents.h"
|
#include "GlobalEvents.h"
|
||||||
#include "Wintergrasp.h"
|
#include "OutdoorPvPWG.h"
|
||||||
#include "OutdoorPvPMgr.h"
|
#include "OutdoorPvPMgr.h"
|
||||||
|
|
||||||
#include "TargetedMovementGenerator.h" // for HandleNpcUnFollowCommand
|
#include "TargetedMovementGenerator.h" // for HandleNpcUnFollowCommand
|
||||||
@@ -4240,7 +4240,7 @@ bool ChatHandler::HandleNpcSetLinkCommand(const char* args)
|
|||||||
|
|
||||||
bool ChatHandler::HandleWintergraspStatusCommand(const char* args)
|
bool ChatHandler::HandleWintergraspStatusCommand(const char* args)
|
||||||
{
|
{
|
||||||
OPvPWintergrasp *pvpWG = (OPvPWintergrasp*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197);
|
OutdoorPvPWG *pvpWG = (OutdoorPvPWG*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197);
|
||||||
|
|
||||||
if (!pvpWG || !sWorld.getConfig(CONFIG_OUTDOORPVP_WINTERGRASP_ENABLED))
|
if (!pvpWG || !sWorld.getConfig(CONFIG_OUTDOORPVP_WINTERGRASP_ENABLED))
|
||||||
{
|
{
|
||||||
@@ -4260,7 +4260,7 @@ bool ChatHandler::HandleWintergraspStatusCommand(const char* args)
|
|||||||
|
|
||||||
bool ChatHandler::HandleWintergraspStartCommand(const char* args)
|
bool ChatHandler::HandleWintergraspStartCommand(const char* args)
|
||||||
{
|
{
|
||||||
OPvPWintergrasp *pvpWG = (OPvPWintergrasp*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197);
|
OutdoorPvPWG *pvpWG = (OutdoorPvPWG*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197);
|
||||||
|
|
||||||
if (!pvpWG || !sWorld.getConfig(CONFIG_OUTDOORPVP_WINTERGRASP_ENABLED))
|
if (!pvpWG || !sWorld.getConfig(CONFIG_OUTDOORPVP_WINTERGRASP_ENABLED))
|
||||||
{
|
{
|
||||||
@@ -4275,7 +4275,7 @@ bool ChatHandler::HandleWintergraspStartCommand(const char* args)
|
|||||||
|
|
||||||
bool ChatHandler::HandleWintergraspStopCommand(const char* args)
|
bool ChatHandler::HandleWintergraspStopCommand(const char* args)
|
||||||
{
|
{
|
||||||
OPvPWintergrasp *pvpWG = (OPvPWintergrasp*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197);
|
OutdoorPvPWG *pvpWG = (OutdoorPvPWG*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197);
|
||||||
|
|
||||||
if (!pvpWG || !sWorld.getConfig(CONFIG_OUTDOORPVP_WINTERGRASP_ENABLED))
|
if (!pvpWG || !sWorld.getConfig(CONFIG_OUTDOORPVP_WINTERGRASP_ENABLED))
|
||||||
{
|
{
|
||||||
@@ -4293,7 +4293,7 @@ bool ChatHandler::HandleWintergraspEnableCommand(const char* args)
|
|||||||
if(!*args)
|
if(!*args)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
OPvPWintergrasp *pvpWG = (OPvPWintergrasp*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197);
|
OutdoorPvPWG *pvpWG = (OutdoorPvPWG*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197);
|
||||||
|
|
||||||
if (!pvpWG || !sWorld.getConfig(CONFIG_OUTDOORPVP_WINTERGRASP_ENABLED))
|
if (!pvpWG || !sWorld.getConfig(CONFIG_OUTDOORPVP_WINTERGRASP_ENABLED))
|
||||||
{
|
{
|
||||||
@@ -4335,7 +4335,7 @@ bool ChatHandler::HandleWintergraspTimerCommand(const char* args)
|
|||||||
if(!*args)
|
if(!*args)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
OPvPWintergrasp *pvpWG = (OPvPWintergrasp*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197);
|
OutdoorPvPWG *pvpWG = (OutdoorPvPWG*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197);
|
||||||
|
|
||||||
if (!pvpWG)
|
if (!pvpWG)
|
||||||
{
|
{
|
||||||
@@ -4368,7 +4368,7 @@ bool ChatHandler::HandleWintergraspTimerCommand(const char* args)
|
|||||||
|
|
||||||
bool ChatHandler::HandleWintergraspSwitchTeamCommand(const char* args)
|
bool ChatHandler::HandleWintergraspSwitchTeamCommand(const char* args)
|
||||||
{
|
{
|
||||||
OPvPWintergrasp *pvpWG = (OPvPWintergrasp*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197);
|
OutdoorPvPWG *pvpWG = (OutdoorPvPWG*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197);
|
||||||
|
|
||||||
if (!pvpWG)
|
if (!pvpWG)
|
||||||
{
|
{
|
||||||
@@ -4379,6 +4379,6 @@ bool ChatHandler::HandleWintergraspSwitchTeamCommand(const char* args)
|
|||||||
uint32 timer = pvpWG->GetTimer();
|
uint32 timer = pvpWG->GetTimer();
|
||||||
pvpWG->forceChangeTeam();
|
pvpWG->forceChangeTeam();
|
||||||
pvpWG->setTimer(timer);
|
pvpWG->setTimer(timer);
|
||||||
PSendSysMessage(LANG_BG_WG_SWITCH_FACTION, GetTrinityString(pvpWG->GetTeam() == TEAM_ALLIANCE ? LANG_BG_AB_ALLY : LANG_BG_AB_HORDE));
|
PSendSysMessage(LANG_BG_WG_SWITCH_FACTION, GetTrinityString(pvpWG->getDefenderTeam() == TEAM_ALLIANCE ? LANG_BG_AB_ALLY : LANG_BG_AB_HORDE));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
+22
-15
@@ -560,6 +560,7 @@ bool ChatHandler::HandleReloadAllCommand(const char*)
|
|||||||
HandleReloadAllLocalesCommand("");
|
HandleReloadAllLocalesCommand("");
|
||||||
|
|
||||||
HandleReloadAccessRequirementCommand("");
|
HandleReloadAccessRequirementCommand("");
|
||||||
|
HandleReloadMailLevelRewardCommand("");
|
||||||
HandleReloadCommandCommand("");
|
HandleReloadCommandCommand("");
|
||||||
HandleReloadReservedNameCommand("");
|
HandleReloadReservedNameCommand("");
|
||||||
HandleReloadTrinityStringCommand("");
|
HandleReloadTrinityStringCommand("");
|
||||||
@@ -881,12 +882,12 @@ bool ChatHandler::HandleReloadLootTemplatesProspectingCommand(const char*)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ChatHandler::HandleReloadLootTemplatesQuestMailCommand(const char*)
|
bool ChatHandler::HandleReloadLootTemplatesMailCommand(const char*)
|
||||||
{
|
{
|
||||||
sLog.outString( "Re-Loading Loot Tables... (`quest_mail_loot_template`)" );
|
sLog.outString( "Re-Loading Loot Tables... (`mail_loot_template`)" );
|
||||||
LoadLootTemplates_QuestMail();
|
LoadLootTemplates_Mail();
|
||||||
LootTemplates_QuestMail.CheckLootRefs();
|
LootTemplates_Mail.CheckLootRefs();
|
||||||
SendGlobalGMSysMessage("DB table `quest_mail_loot_template` reloaded.");
|
SendGlobalSysMessage("DB table `mail_loot_template` reloaded.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1366,6 +1367,14 @@ bool ChatHandler::HandleReloadLocalesQuestCommand(const char* /*arg*/)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ChatHandler::HandleReloadMailLevelRewardCommand(const char* /*arg*/)
|
||||||
|
{
|
||||||
|
sLog.outString( "Re-Loading Player level dependent mail rewards..." );
|
||||||
|
objmgr.LoadMailLevelRewards();
|
||||||
|
SendGlobalSysMessage("DB table `mail_level_reward` reloaded.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool ChatHandler::HandleLoadScriptsCommand(const char *args)
|
bool ChatHandler::HandleLoadScriptsCommand(const char *args)
|
||||||
{
|
{
|
||||||
if(!LoadScriptingModule(args)) return true;
|
if(!LoadScriptingModule(args)) return true;
|
||||||
@@ -7100,25 +7109,23 @@ bool ChatHandler::HandleSendItemsCommand(const char *args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// from console show not existed sender
|
// from console show not existed sender
|
||||||
uint32 sender_guidlo = m_session ? m_session->GetPlayer()->GetGUIDLow() : 0;
|
MailSender sender(MAIL_NORMAL,m_session ? m_session->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM);
|
||||||
|
|
||||||
uint32 messagetype = MAIL_NORMAL;
|
|
||||||
uint32 stationery = MAIL_STATIONERY_GM;
|
|
||||||
uint32 itemTextId = !text.empty() ? objmgr.CreateItemText( text ) : 0;
|
uint32 itemTextId = !text.empty() ? objmgr.CreateItemText( text ) : 0;
|
||||||
|
|
||||||
// fill mail
|
// fill mail
|
||||||
MailItemsInfo mi; // item list preparing
|
MailDraft draft(subject, itemTextId);
|
||||||
|
|
||||||
for (ItemPairs::const_iterator itr = items.begin(); itr != items.end(); ++itr)
|
for (ItemPairs::const_iterator itr = items.begin(); itr != items.end(); ++itr)
|
||||||
{
|
{
|
||||||
if(Item* item = Item::CreateItem(itr->first,itr->second,m_session ? m_session->GetPlayer() : 0))
|
if(Item* item = Item::CreateItem(itr->first,itr->second,m_session ? m_session->GetPlayer() : 0))
|
||||||
{
|
{
|
||||||
item->SaveToDB(); // save for prevent lost at next mail load, if send fail then item will deleted
|
item->SaveToDB(); // save for prevent lost at next mail load, if send fail then item will deleted
|
||||||
mi.AddItem(item->GetGUIDLow(), item->GetEntry(), item);
|
draft.AddItem(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WorldSession::SendMailTo(receiver,messagetype, stationery, sender_guidlo, GUID_LOPART(receiver_guid), subject, itemTextId, &mi, 0, 0, MAIL_CHECK_MASK_NONE);
|
draft.SendMailTo(MailReceiver(receiver,GUID_LOPART(receiver_guid)), sender);
|
||||||
|
|
||||||
std::string nameLink = playerLink(receiver_name);
|
std::string nameLink = playerLink(receiver_name);
|
||||||
PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str());
|
PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str());
|
||||||
@@ -7162,13 +7169,13 @@ bool ChatHandler::HandleSendMoneyCommand(const char *args)
|
|||||||
std::string text = msgText;
|
std::string text = msgText;
|
||||||
|
|
||||||
// from console show not existed sender
|
// from console show not existed sender
|
||||||
uint32 sender_guidlo = m_session ? m_session->GetPlayer()->GetGUIDLow() : 0;
|
MailSender sender(MAIL_NORMAL,m_session ? m_session->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM);
|
||||||
|
|
||||||
uint32 messagetype = MAIL_NORMAL;
|
|
||||||
uint32 stationery = MAIL_STATIONERY_GM;
|
|
||||||
uint32 itemTextId = !text.empty() ? objmgr.CreateItemText( text ) : 0;
|
uint32 itemTextId = !text.empty() ? objmgr.CreateItemText( text ) : 0;
|
||||||
|
|
||||||
WorldSession::SendMailTo(receiver,messagetype, stationery, sender_guidlo, GUID_LOPART(receiver_guid), subject, itemTextId, NULL, money, 0, MAIL_CHECK_MASK_NONE);
|
MailDraft(subject, itemTextId)
|
||||||
|
.AddMoney(money)
|
||||||
|
.SendMailTo(MailReceiver(receiver,GUID_LOPART(receiver_guid)),sender);
|
||||||
|
|
||||||
std::string nameLink = playerLink(receiver_name);
|
std::string nameLink = playerLink(receiver_name);
|
||||||
PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str());
|
PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str());
|
||||||
|
|||||||
+36
-72
@@ -2572,6 +2572,9 @@ void Player::GiveLevel(uint8 level)
|
|||||||
if (Pet* pet = GetPet())
|
if (Pet* pet = GetPet())
|
||||||
pet->SynchronizeLevelWithOwner();
|
pet->SynchronizeLevelWithOwner();
|
||||||
|
|
||||||
|
if (MailLevelReward const* mailReward = objmgr.GetMailLevelReward(level,getRaceMask()))
|
||||||
|
MailDraft(mailReward->mailTemplateId).SendMailTo(this,MailSender(MAIL_CREATURE,mailReward->senderEntry));
|
||||||
|
|
||||||
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL);
|
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_LEVEL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4152,27 +4155,38 @@ void Player::DeleteFromDB(uint64 playerguid, uint32 accountId, bool updateRealmC
|
|||||||
// remove signs from petitions (also remove petitions if owner);
|
// remove signs from petitions (also remove petitions if owner);
|
||||||
RemovePetitionsAndSigns(playerguid, 10);
|
RemovePetitionsAndSigns(playerguid, 10);
|
||||||
|
|
||||||
// return back all mails with COD and Item 0 1 2 3 4 5 6
|
// return back all mails with COD and Item 0 1 2 3 4 5 6 7
|
||||||
QueryResult *resultMail = CharacterDatabase.PQuery("SELECT id,mailTemplateId,sender,subject,itemTextId,money,has_items FROM mail WHERE receiver='%u' AND has_items<>0 AND cod<>0", guid);
|
QueryResult *resultMail = CharacterDatabase.PQuery("SELECT id,messageType,mailTemplateId,sender,subject,itemTextId,money,has_items FROM mail WHERE receiver='%u' AND has_items<>0 AND cod<>0", guid);
|
||||||
if(resultMail)
|
if(resultMail)
|
||||||
{
|
{
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
Field *fields = resultMail->Fetch();
|
Field *fields = resultMail->Fetch();
|
||||||
|
|
||||||
uint32 mail_id = fields[0].GetUInt32();
|
uint16 mailType = fields[1].GetUInt16();
|
||||||
uint16 mailTemplateId= fields[1].GetUInt16();
|
uint16 mailTemplateId= fields[2].GetUInt16();
|
||||||
uint32 sender = fields[2].GetUInt32();
|
uint32 sender = fields[3].GetUInt32();
|
||||||
std::string subject = fields[3].GetCppString();
|
std::string subject = fields[4].GetCppString();
|
||||||
uint32 itemTextId = fields[4].GetUInt32();
|
uint32 itemTextId = fields[5].GetUInt32();
|
||||||
uint32 money = fields[5].GetUInt32();
|
uint32 money = fields[6].GetUInt32();
|
||||||
bool has_items = fields[6].GetBool();
|
bool has_items = fields[7].GetBool();
|
||||||
|
|
||||||
//we can return mail now
|
//we can return mail now
|
||||||
//so firstly delete the old one
|
//so firstly delete the old one
|
||||||
CharacterDatabase.PExecute("DELETE FROM mail WHERE id = '%u'", mail_id);
|
CharacterDatabase.PExecute("DELETE FROM mail WHERE id = '%u'", mail_id);
|
||||||
|
|
||||||
MailItemsInfo mi;
|
// mail not from player
|
||||||
|
if (mailType != MAIL_NORMAL)
|
||||||
|
{
|
||||||
|
if(has_items)
|
||||||
|
CharacterDatabase.PExecute("DELETE FROM mail_items WHERE mail_id = '%u'", mail_id);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
MailDraft draft(subject, itemTextId);
|
||||||
|
if (mailTemplateId)
|
||||||
|
draft = MailDraft(mailTemplateId,false); // itesm already included
|
||||||
|
|
||||||
if(has_items)
|
if(has_items)
|
||||||
{
|
{
|
||||||
// data needs to be at first place for Item::LoadFromDB
|
// data needs to be at first place for Item::LoadFromDB
|
||||||
@@ -4201,7 +4215,7 @@ void Player::DeleteFromDB(uint64 playerguid, uint32 accountId, bool updateRealmC
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
mi.AddItem(item_guidlow, item_template, pItem);
|
draft.AddItem(pItem);
|
||||||
}
|
}
|
||||||
while (resultItems->NextRow());
|
while (resultItems->NextRow());
|
||||||
|
|
||||||
@@ -4213,7 +4227,7 @@ void Player::DeleteFromDB(uint64 playerguid, uint32 accountId, bool updateRealmC
|
|||||||
|
|
||||||
uint32 pl_account = objmgr.GetPlayerAccountIdByGUID(MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER));
|
uint32 pl_account = objmgr.GetPlayerAccountIdByGUID(MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER));
|
||||||
|
|
||||||
WorldSession::SendReturnToSender(MAIL_NORMAL, pl_account, guid, sender, subject, itemTextId, &mi, money, mailTemplateId);
|
draft.AddMoney(money).SendReturnToSender(pl_account, guid, sender);
|
||||||
}
|
}
|
||||||
while (resultMail->NextRow());
|
while (resultMail->NextRow());
|
||||||
|
|
||||||
@@ -7897,7 +7911,7 @@ void Player::SendLoot(uint64 guid, LootType loot_type)
|
|||||||
{
|
{
|
||||||
sLog.outDebug(" if(lootid)");
|
sLog.outDebug(" if(lootid)");
|
||||||
loot->clear();
|
loot->clear();
|
||||||
loot->FillLoot(lootid, LootTemplates_Gameobject, this, false, go->GetLootMode());
|
loot->FillLoot(lootid, LootTemplates_Gameobject, this, false, false, go->GetLootMode());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (loot_type == LOOT_FISHING)
|
if (loot_type == LOOT_FISHING)
|
||||||
@@ -8026,7 +8040,7 @@ void Player::SendLoot(uint64 guid, LootType loot_type)
|
|||||||
loot->clear();
|
loot->clear();
|
||||||
|
|
||||||
if (uint32 lootid = creature->GetCreatureInfo()->lootid)
|
if (uint32 lootid = creature->GetCreatureInfo()->lootid)
|
||||||
loot->FillLoot(lootid, LootTemplates_Creature, recipient, false, creature->GetLootMode());
|
loot->FillLoot(lootid, LootTemplates_Creature, recipient, false, false, creature->GetLootMode());
|
||||||
|
|
||||||
loot->generateMoneyLoot(creature->GetCreatureInfo()->mingold,creature->GetCreatureInfo()->maxgold);
|
loot->generateMoneyLoot(creature->GetCreatureInfo()->mingold,creature->GetCreatureInfo()->maxgold);
|
||||||
|
|
||||||
@@ -13379,56 +13393,8 @@ void Player::RewardQuest( Quest const *pQuest, uint32 reward, Object* questGiver
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Send reward mail
|
// Send reward mail
|
||||||
if (pQuest->GetRewMailTemplateId())
|
if (uint32 mail_template_id = pQuest->GetRewMailTemplateId())
|
||||||
{
|
MailDraft(mail_template_id).SendMailTo(this, questGiver, MAIL_CHECK_MASK_NONE, pQuest->GetRewMailDelaySecs());
|
||||||
MailMessageType mailType;
|
|
||||||
uint32 senderGuidOrEntry;
|
|
||||||
switch(questGiver->GetTypeId())
|
|
||||||
{
|
|
||||||
case TYPEID_UNIT:
|
|
||||||
mailType = MAIL_CREATURE;
|
|
||||||
senderGuidOrEntry = questGiver->GetEntry();
|
|
||||||
break;
|
|
||||||
case TYPEID_GAMEOBJECT:
|
|
||||||
mailType = MAIL_GAMEOBJECT;
|
|
||||||
senderGuidOrEntry = questGiver->GetEntry();
|
|
||||||
break;
|
|
||||||
case TYPEID_ITEM:
|
|
||||||
mailType = MAIL_ITEM;
|
|
||||||
senderGuidOrEntry = questGiver->GetEntry();
|
|
||||||
break;
|
|
||||||
case TYPEID_PLAYER:
|
|
||||||
mailType = MAIL_NORMAL;
|
|
||||||
senderGuidOrEntry = questGiver->GetGUIDLow();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
mailType = MAIL_NORMAL;
|
|
||||||
senderGuidOrEntry = GetGUIDLow();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
Loot questMailLoot;
|
|
||||||
|
|
||||||
questMailLoot.FillLoot(pQuest->GetQuestId(), LootTemplates_QuestMail, this,true);
|
|
||||||
|
|
||||||
// fill mail
|
|
||||||
MailItemsInfo mi; // item list preparing
|
|
||||||
|
|
||||||
uint32 max_slot = questMailLoot.GetMaxSlotInLootFor(this);
|
|
||||||
for (uint32 i = 0; mi.size() < MAX_MAIL_ITEMS && i < max_slot; ++i)
|
|
||||||
{
|
|
||||||
if (LootItem* lootitem = questMailLoot.LootItemInSlot(i,this))
|
|
||||||
{
|
|
||||||
if (Item* item = Item::CreateItem(lootitem->itemid,lootitem->count,this))
|
|
||||||
{
|
|
||||||
item->SaveToDB(); // save for prevent lost at next mail load, if send fail then item will deleted
|
|
||||||
mi.AddItem(item->GetGUIDLow(), item->GetEntry(), item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
WorldSession::SendMailTo(this, mailType, MAIL_STATIONERY_NORMAL, senderGuidOrEntry, GetGUIDLow(), "", 0, &mi, 0, 0, MAIL_CHECK_MASK_NONE,pQuest->GetRewMailDelaySecs(),pQuest->GetRewMailTemplateId());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pQuest->IsDaily())
|
if (pQuest->IsDaily())
|
||||||
{
|
{
|
||||||
@@ -15728,20 +15694,20 @@ void Player::_LoadInventory(QueryResult *result, uint32 timediff)
|
|||||||
// send by mail problematic items
|
// send by mail problematic items
|
||||||
while (!problematicItems.empty())
|
while (!problematicItems.empty())
|
||||||
{
|
{
|
||||||
|
std::string subject = GetSession()->GetMangosString(LANG_NOT_EQUIPPED_ITEM);
|
||||||
|
|
||||||
// fill mail
|
// fill mail
|
||||||
MailItemsInfo mi; // item list preparing
|
MailDraft draft(subject);
|
||||||
|
|
||||||
for (uint8 i = 0; !problematicItems.empty() && i < MAX_MAIL_ITEMS; ++i)
|
for (uint8 i = 0; !problematicItems.empty() && i < MAX_MAIL_ITEMS; ++i)
|
||||||
{
|
{
|
||||||
Item* item = problematicItems.front();
|
Item* item = problematicItems.front();
|
||||||
problematicItems.pop_front();
|
problematicItems.pop_front();
|
||||||
|
|
||||||
mi.AddItem(item->GetGUIDLow(), item->GetEntry(), item);
|
draft.AddItem(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string subject = GetSession()->GetTrinityString(LANG_NOT_EQUIPPED_ITEM);
|
draft.SendMailTo(this, MailSender(this, MAIL_STATIONERY_GM));
|
||||||
|
|
||||||
WorldSession::SendMailTo(this, MAIL_NORMAL, MAIL_STATIONERY_GM, GetGUIDLow(), GetGUIDLow(), subject, 0, &mi, 0, 0, MAIL_CHECK_MASK_NONE);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//if(isAlive())
|
//if(isAlive())
|
||||||
@@ -20172,8 +20138,6 @@ void Player::AutoUnequipOffhandIfNeed(bool force /*= false*/)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
MailItemsInfo mi;
|
|
||||||
mi.AddItem(offItem->GetGUIDLow(), offItem->GetEntry(), offItem);
|
|
||||||
MoveItemFromInventory(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND, true);
|
MoveItemFromInventory(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND, true);
|
||||||
CharacterDatabase.BeginTransaction();
|
CharacterDatabase.BeginTransaction();
|
||||||
offItem->DeleteFromInventoryDB(); // deletes item from character's inventory
|
offItem->DeleteFromInventoryDB(); // deletes item from character's inventory
|
||||||
@@ -20181,7 +20145,7 @@ void Player::AutoUnequipOffhandIfNeed(bool force /*= false*/)
|
|||||||
CharacterDatabase.CommitTransaction();
|
CharacterDatabase.CommitTransaction();
|
||||||
|
|
||||||
std::string subject = GetSession()->GetMangosString(LANG_NOT_EQUIPPED_ITEM);
|
std::string subject = GetSession()->GetMangosString(LANG_NOT_EQUIPPED_ITEM);
|
||||||
WorldSession::SendMailTo(this, MAIL_NORMAL, MAIL_STATIONERY_GM, GetGUIDLow(), GetGUIDLow(), subject, 0, &mi, 0, 0, MAIL_CHECK_MASK_NONE);
|
MailDraft(subject).AddItem(offItem).SendMailTo(this, MailSender(this, MAIL_STATIONERY_GM));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3609,6 +3609,7 @@ void AuraEffect::HandleAuraModShapeshift(bool apply, bool Real, bool changeAmoun
|
|||||||
case FORM_MOONKIN:
|
case FORM_MOONKIN:
|
||||||
case FORM_FLIGHT_EPIC:
|
case FORM_FLIGHT_EPIC:
|
||||||
case FORM_METAMORPHOSIS:
|
case FORM_METAMORPHOSIS:
|
||||||
|
case FORM_MASTER_ANGLER:
|
||||||
case FORM_AMBIENT:
|
case FORM_AMBIENT:
|
||||||
case FORM_SHADOW:
|
case FORM_SHADOW:
|
||||||
case FORM_STEALTH:
|
case FORM_STEALTH:
|
||||||
|
|||||||
+57
-34
@@ -1378,6 +1378,25 @@ void Spell::EffectDummy(uint32 i)
|
|||||||
m_caster->CastSpell(m_caster, 54586, true);
|
m_caster->CastSpell(m_caster, 54586, true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// Great Feast
|
||||||
|
case 57337:
|
||||||
|
{
|
||||||
|
if (!unitTarget)
|
||||||
|
return;
|
||||||
|
|
||||||
|
unitTarget->CastSpell(unitTarget, 58067, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
//Fish Feast
|
||||||
|
case 57397:
|
||||||
|
{
|
||||||
|
if (!unitTarget)
|
||||||
|
return;
|
||||||
|
|
||||||
|
unitTarget->CastSpell(unitTarget, 58648, true);
|
||||||
|
unitTarget->CastSpell(unitTarget, 57398, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 58418: // Portal to Orgrimmar
|
case 58418: // Portal to Orgrimmar
|
||||||
case 58420: // Portal to Stormwind
|
case 58420: // Portal to Stormwind
|
||||||
return; // implemented in EffectScript[0]
|
return; // implemented in EffectScript[0]
|
||||||
@@ -2787,6 +2806,21 @@ void Spell::SpellDamageHeal(uint32 /*i*/)
|
|||||||
//addhealth += tickheal * tickcount;
|
//addhealth += tickheal * tickcount;
|
||||||
//addhealth = caster->SpellHealingBonus(m_spellInfo, addhealth,HEAL, unitTarget);
|
//addhealth = caster->SpellHealingBonus(m_spellInfo, addhealth,HEAL, unitTarget);
|
||||||
}
|
}
|
||||||
|
// Glyph of Nourish
|
||||||
|
else if (m_spellInfo->SpellFamilyName == SPELLFAMILY_DRUID && m_spellInfo->SpellFamilyFlags[1] & 0x2000000)
|
||||||
|
{
|
||||||
|
addhealth = caster->SpellHealingBonus(unitTarget, m_spellInfo, addhealth, HEAL);
|
||||||
|
|
||||||
|
if (AuraEffect const* aurEff = m_caster->GetAuraEffect(62971, 0))
|
||||||
|
{
|
||||||
|
Unit::AuraEffectList const& Periodic = unitTarget->GetAurasByType(SPELL_AURA_PERIODIC_HEAL);
|
||||||
|
for (Unit::AuraEffectList::const_iterator i = Periodic.begin(); i != Periodic.end(); ++i)
|
||||||
|
{
|
||||||
|
if (m_caster->GetGUID() == (*i)->GetCasterGUID())
|
||||||
|
addhealth += addhealth * (*i)->GetParentAura()->GetStackAmount() * aurEff->GetAmount() / 100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
// Riptide - increase healing done by Chain Heal
|
// Riptide - increase healing done by Chain Heal
|
||||||
else if (m_spellInfo->SpellFamilyName==SPELLFAMILY_SHAMAN && m_spellInfo->SpellFamilyFlags[0] & 0x100)
|
else if (m_spellInfo->SpellFamilyName==SPELLFAMILY_SHAMAN && m_spellInfo->SpellFamilyFlags[0] & 0x100)
|
||||||
{
|
{
|
||||||
@@ -5463,6 +5497,26 @@ void Spell::EffectScriptEffect(uint32 effIndex)
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// Gigantic Feast
|
||||||
|
case 58466:
|
||||||
|
{
|
||||||
|
if (!unitTarget)
|
||||||
|
return;
|
||||||
|
|
||||||
|
unitTarget->CastSpell(unitTarget, 58648, true);
|
||||||
|
unitTarget->CastSpell(unitTarget, 58467, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Small Feast
|
||||||
|
case 58475:
|
||||||
|
{
|
||||||
|
if (!unitTarget)
|
||||||
|
return;
|
||||||
|
|
||||||
|
unitTarget->CastSpell(unitTarget, 58648, true);
|
||||||
|
unitTarget->CastSpell(unitTarget, 58477, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 58941: // Rock Shards
|
case 58941: // Rock Shards
|
||||||
if(unitTarget && m_originalCaster)
|
if(unitTarget && m_originalCaster)
|
||||||
{
|
{
|
||||||
@@ -5529,12 +5583,15 @@ void Spell::EffectScriptEffect(uint32 effIndex)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case 62428: // Load into Catapult
|
case 62428: // Load into Catapult
|
||||||
|
{
|
||||||
if(Vehicle *seat = m_caster->GetVehicleKit())
|
if(Vehicle *seat = m_caster->GetVehicleKit())
|
||||||
if(Unit *passenger = seat->GetPassenger(0))
|
if(Unit *passenger = seat->GetPassenger(0))
|
||||||
if(Unit *demolisher = m_caster->GetVehicleBase())
|
if(Unit *demolisher = m_caster->GetVehicleBase())
|
||||||
passenger->CastSpell(demolisher, damage, true);
|
passenger->CastSpell(demolisher, damage, true);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
case 62482: // Grab Crate
|
case 62482: // Grab Crate
|
||||||
|
{
|
||||||
if(unitTarget)
|
if(unitTarget)
|
||||||
{
|
{
|
||||||
if(Vehicle *seat = m_caster->GetVehicleKit())
|
if(Vehicle *seat = m_caster->GetVehicleKit())
|
||||||
@@ -5547,40 +5604,6 @@ void Spell::EffectScriptEffect(uint32 effIndex)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case 57337: //Great Feast
|
|
||||||
{
|
|
||||||
if (!unitTarget)
|
|
||||||
return;
|
|
||||||
|
|
||||||
unitTarget->CastSpell(unitTarget,58067,true);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 57397: //Fish Feast
|
|
||||||
{
|
|
||||||
if (!unitTarget)
|
|
||||||
return;
|
|
||||||
|
|
||||||
unitTarget->CastSpell(unitTarget,58648,true);
|
|
||||||
unitTarget->CastSpell(unitTarget,57398,true);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 58466: //Gigantic Feast
|
|
||||||
{
|
|
||||||
if (!unitTarget)
|
|
||||||
return;
|
|
||||||
|
|
||||||
unitTarget->CastSpell(unitTarget,58648,true);
|
|
||||||
unitTarget->CastSpell(unitTarget,58467,true);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 58475: //Small Feast
|
|
||||||
{
|
|
||||||
if (!unitTarget)
|
|
||||||
return;
|
|
||||||
|
|
||||||
unitTarget->CastSpell(unitTarget,58648,true);
|
|
||||||
unitTarget->CastSpell(unitTarget,58477,true);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case 60123: // Lightwell
|
case 60123: // Lightwell
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -15248,6 +15248,8 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form)
|
|||||||
return 21244;
|
return 21244;
|
||||||
case FORM_METAMORPHOSIS:
|
case FORM_METAMORPHOSIS:
|
||||||
return 25277;
|
return 25277;
|
||||||
|
case FORM_MASTER_ANGLER:
|
||||||
|
return 15234;
|
||||||
case FORM_TREE:
|
case FORM_TREE:
|
||||||
return 864;
|
return 864;
|
||||||
case FORM_SPIRITOFREDEMPTION:
|
case FORM_SPIRITOFREDEMPTION:
|
||||||
|
|||||||
@@ -206,6 +206,7 @@ enum ShapeshiftForm
|
|||||||
FORM_ZOMBIE = 0x15,
|
FORM_ZOMBIE = 0x15,
|
||||||
FORM_METAMORPHOSIS = 0x16,
|
FORM_METAMORPHOSIS = 0x16,
|
||||||
FORM_UNDEAD = 0x19,
|
FORM_UNDEAD = 0x19,
|
||||||
|
FORM_MASTER_ANGLER = 0x1A,
|
||||||
FORM_FLIGHT_EPIC = 0x1B,
|
FORM_FLIGHT_EPIC = 0x1B,
|
||||||
FORM_SHADOW = 0x1C,
|
FORM_SHADOW = 0x1C,
|
||||||
FORM_FLIGHT = 0x1D,
|
FORM_FLIGHT = 0x1D,
|
||||||
|
|||||||
@@ -1475,6 +1475,9 @@ void World::SetInitialWorldSettings()
|
|||||||
sLog.outString("Loading Player Corpses...");
|
sLog.outString("Loading Player Corpses...");
|
||||||
objmgr.LoadCorpses();
|
objmgr.LoadCorpses();
|
||||||
|
|
||||||
|
sLog.outString( "Loading Player level dependent mail rewards..." );
|
||||||
|
objmgr.LoadMailLevelRewards();
|
||||||
|
|
||||||
sLog.outString("Loading Disabled Spells...");
|
sLog.outString("Loading Disabled Spells...");
|
||||||
objmgr.LoadSpellDisabledEntrys();
|
objmgr.LoadSpellDisabledEntrys();
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,6 @@
|
|||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
#include "SharedDefines.h"
|
#include "SharedDefines.h"
|
||||||
|
|
||||||
class MailItemsInfo;
|
|
||||||
struct ItemPrototype;
|
struct ItemPrototype;
|
||||||
struct AuctionEntry;
|
struct AuctionEntry;
|
||||||
struct DeclinedName;
|
struct DeclinedName;
|
||||||
@@ -42,7 +41,6 @@ class Unit;
|
|||||||
class GameObject;
|
class GameObject;
|
||||||
class WorldPacket;
|
class WorldPacket;
|
||||||
class WorldSocket;
|
class WorldSocket;
|
||||||
class WorldSession;
|
|
||||||
class QueryResult;
|
class QueryResult;
|
||||||
class LoginQueryHolder;
|
class LoginQueryHolder;
|
||||||
class CharacterHandler;
|
class CharacterHandler;
|
||||||
@@ -225,13 +223,8 @@ class TRINITY_DLL_SPEC WorldSession
|
|||||||
m_TutorialsChanged = true;
|
m_TutorialsChanged = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//used with item_page table
|
||||||
//mail
|
|
||||||
//used with item_page table
|
|
||||||
bool SendItemInfo( uint32 itemid, WorldPacket data );
|
bool SendItemInfo( uint32 itemid, WorldPacket data );
|
||||||
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);
|
|
||||||
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);
|
|
||||||
|
|
||||||
//auction
|
//auction
|
||||||
void SendAuctionHello( uint64 guid, Creature * unit );
|
void SendAuctionHello( uint64 guid, Creature * unit );
|
||||||
void SendAuctionCommandResult( uint32 auctionId, uint32 Action, uint32 ErrorCode, uint32 bidError = 0);
|
void SendAuctionCommandResult( uint32 auctionId, uint32 Action, uint32 ErrorCode, uint32 bidError = 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user