From 89656d5749f72803edbdd5f9840ba6b4c21f3987 Mon Sep 17 00:00:00 2001 From: n0n4m3 Date: Thu, 17 Dec 2009 13:07:38 +0100 Subject: Restore some commits from trinitycore2 3.1.3 --HG-- branch : trunk --- src/game/AchievementMgr.cpp | 23 +++++---- src/game/BattleGround.cpp | 8 ++- src/game/BattleGroundHandler.cpp | 6 +-- src/game/Level2.cpp | 16 +++--- src/game/Level3.cpp | 37 ++++++++------ src/game/Player.cpp | 108 +++++++++++++-------------------------- src/game/SpellAuras.cpp | 1 + src/game/SpellEffects.cpp | 91 +++++++++++++++++++++------------ src/game/Unit.cpp | 2 + src/game/Unit.h | 1 + src/game/World.cpp | 3 ++ src/game/WorldSession.h | 9 +--- 12 files changed, 149 insertions(+), 156 deletions(-) (limited to 'src') diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index 8326029703d..37fc507dd89 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -1708,16 +1708,6 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement) { 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(); // subject and text @@ -1736,7 +1726,18 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement) 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)); } } diff --git a/src/game/BattleGround.cpp b/src/game/BattleGround.cpp index 767d3581ef8..bdbcfc63bac 100644 --- a/src/game/BattleGround.cpp +++ b/src/game/BattleGround.cpp @@ -922,10 +922,6 @@ void BattleGround::SendRewardMarkByMail(Player *plr,uint32 mark, uint32 count) // save new item before send 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 std::string subject = markProto->Name1; 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()); 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)); } } diff --git a/src/game/BattleGroundHandler.cpp b/src/game/BattleGroundHandler.cpp index 8d24be21dee..3944d4e0bfc 100644 --- a/src/game/BattleGroundHandler.cpp +++ b/src/game/BattleGroundHandler.cpp @@ -36,7 +36,7 @@ #include "Opcodes.h" // Temporal fix to wintergrasp spirit guides till 3.2 -#include "Wintergrasp.h" +#include "OutdoorPvPWG.h" #include "OutdoorPvPMgr.h" // WG end @@ -604,7 +604,7 @@ void WorldSession::HandleAreaSpiritHealerQueryOpcode( WorldPacket & recv_data ) { // Wintergrasp Hack till 3.2 and it's implemented as BG if (GetPlayer()->GetZoneId() == 4197) { - OPvPWintergrasp *pvpWG = (OPvPWintergrasp*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197); + OutdoorPvPWG *pvpWG = (OutdoorPvPWG*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197); if (pvpWG && pvpWG->isWarTime()) 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 if (GetPlayer()->GetZoneId() == 4197) { - OPvPWintergrasp *pvpWG = (OPvPWintergrasp*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197); + OutdoorPvPWG *pvpWG = (OutdoorPvPWG*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197); if (pvpWG && pvpWG->isWarTime()) pvpWG->AddPlayerToResurrectQueue(guid, _player->GetGUID()); } diff --git a/src/game/Level2.cpp b/src/game/Level2.cpp index f86553dd99b..cfdd8d2e0ff 100644 --- a/src/game/Level2.cpp +++ b/src/game/Level2.cpp @@ -40,7 +40,7 @@ #include #include #include "GlobalEvents.h" -#include "Wintergrasp.h" +#include "OutdoorPvPWG.h" #include "OutdoorPvPMgr.h" #include "TargetedMovementGenerator.h" // for HandleNpcUnFollowCommand @@ -4240,7 +4240,7 @@ bool ChatHandler::HandleNpcSetLinkCommand(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)) { @@ -4260,7 +4260,7 @@ bool ChatHandler::HandleWintergraspStatusCommand(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)) { @@ -4275,7 +4275,7 @@ bool ChatHandler::HandleWintergraspStartCommand(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)) { @@ -4293,7 +4293,7 @@ bool ChatHandler::HandleWintergraspEnableCommand(const char* args) if(!*args) return false; - OPvPWintergrasp *pvpWG = (OPvPWintergrasp*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197); + OutdoorPvPWG *pvpWG = (OutdoorPvPWG*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197); if (!pvpWG || !sWorld.getConfig(CONFIG_OUTDOORPVP_WINTERGRASP_ENABLED)) { @@ -4335,7 +4335,7 @@ bool ChatHandler::HandleWintergraspTimerCommand(const char* args) if(!*args) return false; - OPvPWintergrasp *pvpWG = (OPvPWintergrasp*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197); + OutdoorPvPWG *pvpWG = (OutdoorPvPWG*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197); if (!pvpWG) { @@ -4368,7 +4368,7 @@ bool ChatHandler::HandleWintergraspTimerCommand(const char* args) bool ChatHandler::HandleWintergraspSwitchTeamCommand(const char* args) { - OPvPWintergrasp *pvpWG = (OPvPWintergrasp*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197); + OutdoorPvPWG *pvpWG = (OutdoorPvPWG*)sOutdoorPvPMgr.GetOutdoorPvPToZoneId(4197); if (!pvpWG) { @@ -4379,6 +4379,6 @@ bool ChatHandler::HandleWintergraspSwitchTeamCommand(const char* args) uint32 timer = pvpWG->GetTimer(); pvpWG->forceChangeTeam(); 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; } diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index 35c73617b56..e4adb4c6550 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -560,6 +560,7 @@ bool ChatHandler::HandleReloadAllCommand(const char*) HandleReloadAllLocalesCommand(""); HandleReloadAccessRequirementCommand(""); + HandleReloadMailLevelRewardCommand(""); HandleReloadCommandCommand(""); HandleReloadReservedNameCommand(""); HandleReloadTrinityStringCommand(""); @@ -881,12 +882,12 @@ bool ChatHandler::HandleReloadLootTemplatesProspectingCommand(const char*) return true; } -bool ChatHandler::HandleReloadLootTemplatesQuestMailCommand(const char*) +bool ChatHandler::HandleReloadLootTemplatesMailCommand(const char*) { - sLog.outString( "Re-Loading Loot Tables... (`quest_mail_loot_template`)" ); - LoadLootTemplates_QuestMail(); - LootTemplates_QuestMail.CheckLootRefs(); - SendGlobalGMSysMessage("DB table `quest_mail_loot_template` reloaded."); + sLog.outString( "Re-Loading Loot Tables... (`mail_loot_template`)" ); + LoadLootTemplates_Mail(); + LootTemplates_Mail.CheckLootRefs(); + SendGlobalSysMessage("DB table `mail_loot_template` reloaded."); return true; } @@ -1366,6 +1367,14 @@ bool ChatHandler::HandleReloadLocalesQuestCommand(const char* /*arg*/) 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) { if(!LoadScriptingModule(args)) return true; @@ -7100,25 +7109,23 @@ bool ChatHandler::HandleSendItemsCommand(const char *args) } // 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; // fill mail - MailItemsInfo mi; // item list preparing + MailDraft draft(subject, itemTextId); 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)) { 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); PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str()); @@ -7162,13 +7169,13 @@ bool ChatHandler::HandleSendMoneyCommand(const char *args) std::string text = msgText; // 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; - 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); PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str()); diff --git a/src/game/Player.cpp b/src/game/Player.cpp index c38835b7237..cfc9d3c93bd 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -2572,6 +2572,9 @@ void Player::GiveLevel(uint8 level) if (Pet* pet = GetPet()) 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); } @@ -4152,27 +4155,38 @@ void Player::DeleteFromDB(uint64 playerguid, uint32 accountId, bool updateRealmC // remove signs from petitions (also remove petitions if owner); RemovePetitionsAndSigns(playerguid, 10); - // return back all mails with COD and Item 0 1 2 3 4 5 6 - 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); + // return back all mails with COD and Item 0 1 2 3 4 5 6 7 + 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) { do { Field *fields = resultMail->Fetch(); - uint32 mail_id = fields[0].GetUInt32(); - uint16 mailTemplateId= fields[1].GetUInt16(); - uint32 sender = fields[2].GetUInt32(); - std::string subject = fields[3].GetCppString(); - uint32 itemTextId = fields[4].GetUInt32(); - uint32 money = fields[5].GetUInt32(); - bool has_items = fields[6].GetBool(); + uint16 mailType = fields[1].GetUInt16(); + uint16 mailTemplateId= fields[2].GetUInt16(); + uint32 sender = fields[3].GetUInt32(); + std::string subject = fields[4].GetCppString(); + uint32 itemTextId = fields[5].GetUInt32(); + uint32 money = fields[6].GetUInt32(); + bool has_items = fields[7].GetBool(); //we can return mail now //so firstly delete the old one 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) { // data needs to be at first place for Item::LoadFromDB @@ -4201,7 +4215,7 @@ void Player::DeleteFromDB(uint64 playerguid, uint32 accountId, bool updateRealmC continue; } - mi.AddItem(item_guidlow, item_template, pItem); + draft.AddItem(pItem); } 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)); - WorldSession::SendReturnToSender(MAIL_NORMAL, pl_account, guid, sender, subject, itemTextId, &mi, money, mailTemplateId); + draft.AddMoney(money).SendReturnToSender(pl_account, guid, sender); } while (resultMail->NextRow()); @@ -7897,7 +7911,7 @@ void Player::SendLoot(uint64 guid, LootType loot_type) { sLog.outDebug(" if(lootid)"); 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) @@ -8026,7 +8040,7 @@ void Player::SendLoot(uint64 guid, LootType loot_type) loot->clear(); 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); @@ -13379,56 +13393,8 @@ void Player::RewardQuest( Quest const *pQuest, uint32 reward, Object* questGiver } // Send reward mail - if (pQuest->GetRewMailTemplateId()) - { - 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 (uint32 mail_template_id = pQuest->GetRewMailTemplateId()) + MailDraft(mail_template_id).SendMailTo(this, questGiver, MAIL_CHECK_MASK_NONE, pQuest->GetRewMailDelaySecs()); if (pQuest->IsDaily()) { @@ -15728,20 +15694,20 @@ void Player::_LoadInventory(QueryResult *result, uint32 timediff) // send by mail problematic items while (!problematicItems.empty()) { + std::string subject = GetSession()->GetMangosString(LANG_NOT_EQUIPPED_ITEM); + // fill mail - MailItemsInfo mi; // item list preparing + MailDraft draft(subject); for (uint8 i = 0; !problematicItems.empty() && i < MAX_MAIL_ITEMS; ++i) { Item* item = problematicItems.front(); problematicItems.pop_front(); - mi.AddItem(item->GetGUIDLow(), item->GetEntry(), item); + draft.AddItem(item); } - std::string subject = GetSession()->GetTrinityString(LANG_NOT_EQUIPPED_ITEM); - - WorldSession::SendMailTo(this, MAIL_NORMAL, MAIL_STATIONERY_GM, GetGUIDLow(), GetGUIDLow(), subject, 0, &mi, 0, 0, MAIL_CHECK_MASK_NONE); + draft.SendMailTo(this, MailSender(this, MAIL_STATIONERY_GM)); } } //if(isAlive()) @@ -20172,8 +20138,6 @@ void Player::AutoUnequipOffhandIfNeed(bool force /*= false*/) } else { - MailItemsInfo mi; - mi.AddItem(offItem->GetGUIDLow(), offItem->GetEntry(), offItem); MoveItemFromInventory(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND, true); CharacterDatabase.BeginTransaction(); offItem->DeleteFromInventoryDB(); // deletes item from character's inventory @@ -20181,7 +20145,7 @@ void Player::AutoUnequipOffhandIfNeed(bool force /*= false*/) CharacterDatabase.CommitTransaction(); 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)); } } diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 04ce483ad6f..7f54d5ad294 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -3609,6 +3609,7 @@ void AuraEffect::HandleAuraModShapeshift(bool apply, bool Real, bool changeAmoun case FORM_MOONKIN: case FORM_FLIGHT_EPIC: case FORM_METAMORPHOSIS: + case FORM_MASTER_ANGLER: case FORM_AMBIENT: case FORM_SHADOW: case FORM_STEALTH: diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index fb298918230..c3a633c5ffc 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -1378,6 +1378,25 @@ void Spell::EffectDummy(uint32 i) m_caster->CastSpell(m_caster, 54586, true); 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 58420: // Portal to Stormwind return; // implemented in EffectScript[0] @@ -2787,6 +2806,21 @@ void Spell::SpellDamageHeal(uint32 /*i*/) //addhealth += tickheal * tickcount; //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 else if (m_spellInfo->SpellFamilyName==SPELLFAMILY_SHAMAN && m_spellInfo->SpellFamilyFlags[0] & 0x100) { @@ -5463,6 +5497,26 @@ void Spell::EffectScriptEffect(uint32 effIndex) 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 if(unitTarget && m_originalCaster) { @@ -5529,12 +5583,15 @@ void Spell::EffectScriptEffect(uint32 effIndex) return; } case 62428: // Load into Catapult + { if(Vehicle *seat = m_caster->GetVehicleKit()) if(Unit *passenger = seat->GetPassenger(0)) if(Unit *demolisher = m_caster->GetVehicleBase()) passenger->CastSpell(demolisher, damage, true); return; + } case 62482: // Grab Crate + { if(unitTarget) { if(Vehicle *seat = m_caster->GetVehicleKit()) @@ -5547,40 +5604,6 @@ void Spell::EffectScriptEffect(uint32 effIndex) } } 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 { diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 881457286d9..457439e3d08 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -15248,6 +15248,8 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form) return 21244; case FORM_METAMORPHOSIS: return 25277; + case FORM_MASTER_ANGLER: + return 15234; case FORM_TREE: return 864; case FORM_SPIRITOFREDEMPTION: diff --git a/src/game/Unit.h b/src/game/Unit.h index 4c2df52c530..b439cf35dc6 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -206,6 +206,7 @@ enum ShapeshiftForm FORM_ZOMBIE = 0x15, FORM_METAMORPHOSIS = 0x16, FORM_UNDEAD = 0x19, + FORM_MASTER_ANGLER = 0x1A, FORM_FLIGHT_EPIC = 0x1B, FORM_SHADOW = 0x1C, FORM_FLIGHT = 0x1D, diff --git a/src/game/World.cpp b/src/game/World.cpp index e1e27f3a6a3..23e45e6ba77 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -1475,6 +1475,9 @@ void World::SetInitialWorldSettings() sLog.outString("Loading Player Corpses..."); objmgr.LoadCorpses(); + sLog.outString( "Loading Player level dependent mail rewards..." ); + objmgr.LoadMailLevelRewards(); + sLog.outString("Loading Disabled Spells..."); objmgr.LoadSpellDisabledEntrys(); diff --git a/src/game/WorldSession.h b/src/game/WorldSession.h index 3762c4ee741..dcd5a9f86ee 100644 --- a/src/game/WorldSession.h +++ b/src/game/WorldSession.h @@ -28,7 +28,6 @@ #include "Common.h" #include "SharedDefines.h" -class MailItemsInfo; struct ItemPrototype; struct AuctionEntry; struct DeclinedName; @@ -42,7 +41,6 @@ class Unit; class GameObject; class WorldPacket; class WorldSocket; -class WorldSession; class QueryResult; class LoginQueryHolder; class CharacterHandler; @@ -225,13 +223,8 @@ class TRINITY_DLL_SPEC WorldSession m_TutorialsChanged = true; } } - - //mail - //used with item_page table + //used with item_page table 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 void SendAuctionHello( uint64 guid, Creature * unit ); void SendAuctionCommandResult( uint32 auctionId, uint32 Action, uint32 ErrorCode, uint32 bidError = 0); -- cgit v1.2.3