Restore some commits from trinitycore2 3.1.3

--HG--
branch : trunk
This commit is contained in:
n0n4m3
2009-12-17 13:07:38 +01:00
parent 8b95981ed0
commit 89656d5749
12 changed files with 149 additions and 156 deletions
+12 -11
View File
@@ -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));
} }
} }
+3 -5
View File
@@ -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));
} }
} }
+3 -3
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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));
} }
} }
+1
View File
@@ -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
View File
@@ -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
{ {
+2
View File
@@ -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:
+1
View File
@@ -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,
+3
View File
@@ -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();
+1 -8
View File
@@ -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);