Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.x

This commit is contained in:
Machiavelli
2011-12-10 15:21:55 +01:00
21 changed files with 201 additions and 105 deletions
@@ -0,0 +1,12 @@
-- fixing conflict in number of gossip_menu_option.menu_id -- compare 2011_10_23_04_world_sai.sql with 2011_10_23_07_world_sai.sql
SET @ENTRY := 18417;
SET @OLDGOSSIP := 21304;
SET @NEWGOSSIP := 21312;
SET @QUEST_PUPIL := 10646;
-- Fixing smart_scripts
UPDATE `smart_scripts` SET `event_param1`=@NEWGOSSIP WHERE `entryorguid`=@ENTRY AND `source_type`=0 AND `id`=2 AND `action_param1`=@QUEST_PUPIL;
-- Fixing gossip_menu_option
UPDATE `gossip_menu_option` SET `action_menu_id`=@NEWGOSSIP WHERE `menu_id`=@OLDGOSSIP+5;
DELETE FROM `gossip_menu_option` WHERE `menu_id`=@NEWGOSSIP;
INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`) VALUES
(@NEWGOSSIP,0,0,"There was something else I wanted to ask you, Altruis.",1,3,@OLDGOSSIP+0);
@@ -0,0 +1,71 @@
-- Missing achievement data (checked via DBC files)
DELETE FROM `player_factionchange_achievement` WHERE `alliance_id` IN (35,41,58,202,206,220,225,230,246,388,433,434,435,436,437,438,439,440,441,442,470,471,472,473,707,764,907,908,1167,1169,1172,1262,1466,1563,1681,1737,1752,1757,1762,1782,2016,2194,2536,2760,2761,2762,2763,2764,2770,2777,2778,2779,2780,2781,2782,2817,3356,3478,3676,3846,3851,3856,3857,4156,4296,4298,4784,4786);
INSERT INTO `player_factionchange_achievement` (`alliance_id`,`horde_id`) VALUES
(35,1359),
(41,1360),
(58,593),
(202,1502),
(206,1252),
(220,873),
(225,1164),
(230,1175),
(246,1005),
(388,1006),
(433,443),
(434,445),
(435,444),
(436,447),
(437,448),
(438,469),
(439,451),
(440,452),
(441,450),
(442,454),
(470,468),
(471,453),
(472,449),
(473,446),
(707,706),
(764,763),
(907,714),
(908,909),
(1167,1168),
(1169,1170),
(1172,1173),
(1262,1274),
(1466,926),
(1563,1784),
(1681,1682),
(1737,2476),
(1752,2776),
(1757,2200),
(1762,2192),
(1782,1783),
(2016,2017),
(2194,2195),
(2536,2537),
(2760,2768),
(2761,2767),
(2762,2766),
(2763,2769),
(2764,2765),
(2770,2771),
(2777,2786),
(2778,2785),
(2779,2784),
(2780,2787),
(2781,2783),
(2782,2788),
(2817,2816),
(3356,3357),
(3478,3656),
(3676,3677),
(3846,4176),
(3851,4177),
(3856,4256),
(3857,3957),
(4156,4079),
(4296,3778),
(4298,4297),
(4784,4785),
(4786,4790);
@@ -0,0 +1,11 @@
-- Fix the HP sharing of Twin Valkyr - All Modes
DELETE FROM `creature_template_addon` WHERE `entry` IN (34497,35350,35351,35352,34496,35347,35348,35349);
INSERT INTO `creature_template_addon` (`entry`,`auras`) VALUES
(34497,'66133'),
(35350,'66133'),
(35351,'66133'),
(35352,'66133'),
(34496,'66132'),
(35347,'66132'),
(35348,'66132'),
(35349,'66132');
+1 -1
View File
@@ -707,7 +707,7 @@ void SmartAI::SetRun(bool run)
me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
else else
me->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); me->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
me->SendMovementFlagUpdate();
mRun = run; mRun = run;
} }
@@ -1493,7 +1493,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
else if (GameObject* goTarget = (*itr)->ToGameObject()) else if (GameObject* goTarget = (*itr)->ToGameObject())
{ {
if (IsSmartGO(goTarget)) if (IsSmartGO(goTarget))
CAST_AI(SmartGameObjectAI, target->AI())->SetScript9(e, e.action.timedActionList.id, GetLastInvoker()); CAST_AI(SmartGameObjectAI, goTarget->AI())->SetScript9(e, e.action.timedActionList.id, GetLastInvoker());
} }
} }
@@ -1610,7 +1610,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
else if (GameObject* goTarget = (*itr)->ToGameObject()) else if (GameObject* goTarget = (*itr)->ToGameObject())
{ {
if (IsSmartGO(goTarget)) if (IsSmartGO(goTarget))
CAST_AI(SmartGameObjectAI, target->AI())->SetScript9(e, id, GetLastInvoker()); CAST_AI(SmartGameObjectAI, goTarget->AI())->SetScript9(e, id, GetLastInvoker());
} }
} }
@@ -1640,7 +1640,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
else if (GameObject* goTarget = (*itr)->ToGameObject()) else if (GameObject* goTarget = (*itr)->ToGameObject())
{ {
if (IsSmartGO(goTarget)) if (IsSmartGO(goTarget))
CAST_AI(SmartGameObjectAI, target->AI())->SetScript9(e, id, GetLastInvoker()); CAST_AI(SmartGameObjectAI, goTarget->AI())->SetScript9(e, id, GetLastInvoker());
} }
} }
@@ -1786,8 +1786,8 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (!GetBaseObject()) if (!GetBaseObject())
return; return;
sLog->outDebug(LOG_FILTER_DATABASE_AI, "SmartScript::ProcessAction:: SMART_ACTION_SEND_GOSSIP_MENU: gossipMenuId %d, gossip_option_id %d", sLog->outDebug(LOG_FILTER_DATABASE_AI, "SmartScript::ProcessAction:: SMART_ACTION_SEND_GOSSIP_MENU: gossipMenuId %d, gossipNpcTextId %d",
e.action.sendGossipMenu.gossipMenuId, e.action.sendGossipMenu.gossipOptionId); e.action.sendGossipMenu.gossipMenuId, e.action.sendGossipMenu.gossipNpcTextId);
ObjectList* targets = GetTargets(e, unit); ObjectList* targets = GetTargets(e, unit);
if (!targets) if (!targets)
@@ -1801,7 +1801,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
else else
player->PlayerTalkClass->ClearMenus(); player->PlayerTalkClass->ClearMenus();
player->SEND_GOSSIP_MENU(e.action.sendGossipMenu.gossipOptionId, GetBaseObject()->GetGUID()); player->SEND_GOSSIP_MENU(e.action.sendGossipMenu.gossipNpcTextId, GetBaseObject()->GetGUID());
} }
delete targets; delete targets;
@@ -863,7 +863,7 @@ struct SmartAction
struct struct
{ {
uint32 gossipMenuId; uint32 gossipMenuId;
uint32 gossipOptionId; uint32 gossipNpcTextId;
} sendGossipMenu; } sendGossipMenu;
struct struct
+3 -4
View File
@@ -1600,7 +1600,7 @@ bool WorldObject::canSeeOrDetect(WorldObject const* obj, bool ignoreStealth, boo
bool corpseVisibility = false; bool corpseVisibility = false;
if (distanceCheck) if (distanceCheck)
{ {
if (const Player* thisPlayer = ToPlayer()) if (Player const* thisPlayer = ToPlayer())
{ {
if (thisPlayer->isDead() && thisPlayer->GetHealth() > 0 && // Cheap way to check for ghost state if (thisPlayer->isDead() && thisPlayer->GetHealth() > 0 && // Cheap way to check for ghost state
!(obj->m_serverSideVisibility.GetValue(SERVERSIDE_VISIBILITY_GHOST) & m_serverSideVisibility.GetValue(SERVERSIDE_VISIBILITY_GHOST) & GHOST_VISIBILITY_GHOST)) !(obj->m_serverSideVisibility.GetValue(SERVERSIDE_VISIBILITY_GHOST) & m_serverSideVisibility.GetValue(SERVERSIDE_VISIBILITY_GHOST) & GHOST_VISIBILITY_GHOST))
@@ -1633,9 +1633,9 @@ bool WorldObject::canSeeOrDetect(WorldObject const* obj, bool ignoreStealth, boo
if (!corpseVisibility && !(obj->m_serverSideVisibility.GetValue(SERVERSIDE_VISIBILITY_GHOST) & m_serverSideVisibilityDetect.GetValue(SERVERSIDE_VISIBILITY_GHOST))) if (!corpseVisibility && !(obj->m_serverSideVisibility.GetValue(SERVERSIDE_VISIBILITY_GHOST) & m_serverSideVisibilityDetect.GetValue(SERVERSIDE_VISIBILITY_GHOST)))
{ {
// Alive players can see dead players in some cases, but other objects can't do that // Alive players can see dead players in some cases, but other objects can't do that
if (const Player* thisPlayer = ToPlayer()) if (Player const* thisPlayer = ToPlayer())
{ {
if (const Player* objPlayer = obj->ToPlayer()) if (Player const* objPlayer = obj->ToPlayer())
{ {
if (thisPlayer->GetTeam() != objPlayer->GetTeam() || !thisPlayer->IsGroupVisibleFor(objPlayer)) if (thisPlayer->GetTeam() != objPlayer->GetTeam() || !thisPlayer->IsGroupVisibleFor(objPlayer))
return false; return false;
@@ -1976,7 +1976,6 @@ void WorldObject::SendMessageToSet(WorldPacket* data, bool self)
SendMessageToSetInRange(data, GetVisibilityRange(), self); SendMessageToSetInRange(data, GetVisibilityRange(), self);
} }
void WorldObject::SendMessageToSetInRange(WorldPacket* data, float dist, bool /*self*/) void WorldObject::SendMessageToSetInRange(WorldPacket* data, float dist, bool /*self*/)
{ {
Trinity::MessageDistDeliverer notifier(this, data, dist); Trinity::MessageDistDeliverer notifier(this, data, dist);
+28 -20
View File
@@ -6062,6 +6062,16 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
triggered_spell_id = 37378; triggered_spell_id = 37378;
break; break;
} }
// Glyph of Succubus
case 56250:
{
if (!target)
return false;
target->RemoveAurasByType(SPELL_AURA_PERIODIC_DAMAGE, 0, target->GetAura(32409)); // SW:D shall not be removed.
target->RemoveAurasByType(SPELL_AURA_PERIODIC_DAMAGE_PERCENT);
target->RemoveAurasByType(SPELL_AURA_PERIODIC_LEECH);
return true;
}
} }
break; break;
} }
@@ -6490,6 +6500,16 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
triggered_spell_id = 32747; triggered_spell_id = 32747;
break; break;
} }
case 57934: // Tricks of the Trade
{
Unit* redirectTarget = GetMisdirectionTarget();
RemoveAura(57934);
if (!redirectTarget)
break;
redirectTarget->CastSpell(this,59628,true);
CastSpell(redirectTarget,57933,true);
break;
}
} }
switch (dummySpell->SpellIconID) switch (dummySpell->SpellIconID)
@@ -15629,29 +15649,17 @@ void Unit::Kill(Unit* victim, bool durabilityLoss)
} }
// Hook for OnPVPKill Event // Hook for OnPVPKill Event
if (GetTypeId() == TYPEID_PLAYER) if (Player* killerPlr = ToPlayer())
{ {
if (victim->GetTypeId() == TYPEID_PLAYER) if (Player* killedPlr = victim->ToPlayer())
{ sScriptMgr->OnPVPKill(killerPlr, killedPlr);
Player* killer = ToPlayer(); else if (Creature* killedCre = victim->ToCreature())
Player* killed = victim->ToPlayer(); sScriptMgr->OnCreatureKill(killerPlr, killedCre);
sScriptMgr->OnPVPKill(killer, killed);
} }
else if (victim->GetTypeId() == TYPEID_UNIT) else if (Creature* killerCre = ToCreature())
{ {
Player* killer = ToPlayer(); if (Player* killed = victim->ToPlayer())
Creature* killed = victim->ToCreature(); sScriptMgr->OnPlayerKilledByCreature(killerCre, killed);
sScriptMgr->OnCreatureKill(killer, killed);
}
}
else if (GetTypeId() == TYPEID_UNIT)
{
if (victim->GetTypeId() == TYPEID_PLAYER)
{
Creature* killer = ToCreature();
Player* killed = victim->ToPlayer();
sScriptMgr->OnPlayerKilledByCreature(killer, killed);
}
} }
if (victim->GetVehicle()) if (victim->GetVehicle())
+2 -6
View File
@@ -225,9 +225,7 @@ void ObjectAccessor::RemoveCorpse(Corpse* corpse)
// build mapid*cellid -> guid_set map // build mapid*cellid -> guid_set map
CellCoord cellCoord = Trinity::ComputeCellCoord(corpse->GetPositionX(), corpse->GetPositionY()); CellCoord cellCoord = Trinity::ComputeCellCoord(corpse->GetPositionX(), corpse->GetPositionY());
uint32 cell_id = (cellCoord.y_coord * TOTAL_NUMBER_OF_CELLS_PER_MAP) + cellCoord.x_coord; sObjectMgr->DeleteCorpseCellData(corpse->GetMapId(), cellCoord.GetId(), GUID_LOPART(corpse->GetOwnerGUID()));
sObjectMgr->DeleteCorpseCellData(corpse->GetMapId(), cell_id, GUID_LOPART(corpse->GetOwnerGUID()));
i_player2corpse.erase(iter); i_player2corpse.erase(iter);
} }
@@ -246,9 +244,7 @@ void ObjectAccessor::AddCorpse(Corpse* corpse)
// build mapid*cellid -> guid_set map // build mapid*cellid -> guid_set map
CellCoord cellCoord = Trinity::ComputeCellCoord(corpse->GetPositionX(), corpse->GetPositionY()); CellCoord cellCoord = Trinity::ComputeCellCoord(corpse->GetPositionX(), corpse->GetPositionY());
uint32 cell_id = (cellCoord.y_coord * TOTAL_NUMBER_OF_CELLS_PER_MAP) + cellCoord.x_coord; sObjectMgr->AddCorpseCellData(corpse->GetMapId(), cellCoord.GetId(), GUID_LOPART(corpse->GetOwnerGUID()), corpse->GetInstanceId());
sObjectMgr->AddCorpseCellData(corpse->GetMapId(), cell_id, GUID_LOPART(corpse->GetOwnerGUID()), corpse->GetInstanceId());
} }
} }
+8 -16
View File
@@ -533,7 +533,7 @@ void ObjectMgr::LoadCreatureTemplateAddons()
if (!result) if (!result)
{ {
sLog->outString(">> Loaded 0 creature template addon definitions. DB table `creature_addon` is empty."); sLog->outString(">> Loaded 0 creature template addon definitions. DB table `creature_template_addon` is empty.");
sLog->outString(); sLog->outString();
return; return;
} }
@@ -567,7 +567,7 @@ void ObjectMgr::LoadCreatureTemplateAddons()
SpellInfo const* AdditionalSpellInfo = sSpellMgr->GetSpellInfo(uint32(atol(*itr))); SpellInfo const* AdditionalSpellInfo = sSpellMgr->GetSpellInfo(uint32(atol(*itr)));
if (!AdditionalSpellInfo) if (!AdditionalSpellInfo)
{ {
sLog->outErrorDb("Creature (GUID: %u) has wrong spell %u defined in `auras` field in `creature_addon`.", entry, uint32(atol(*itr))); sLog->outErrorDb("Creature (Entry: %u) has wrong spell %u defined in `auras` field in `creature_template_addon`.", entry, uint32(atol(*itr)));
continue; continue;
} }
creatureAddon.auras[i++] = uint32(atol(*itr)); creatureAddon.auras[i++] = uint32(atol(*itr));
@@ -577,13 +577,13 @@ void ObjectMgr::LoadCreatureTemplateAddons()
{ {
if (!sCreatureDisplayInfoStore.LookupEntry(creatureAddon.mount)) if (!sCreatureDisplayInfoStore.LookupEntry(creatureAddon.mount))
{ {
sLog->outErrorDb("Creature (GUID: %u) has invalid displayInfoId (%u) for mount defined in `creature_addon`", entry, creatureAddon.mount); sLog->outErrorDb("Creature (Entry: %u) has invalid displayInfoId (%u) for mount defined in `creature_template_addon`", entry, creatureAddon.mount);
creatureAddon.mount = 0; creatureAddon.mount = 0;
} }
} }
if (!sEmotesStore.LookupEntry(creatureAddon.emote)) if (!sEmotesStore.LookupEntry(creatureAddon.emote))
sLog->outErrorDb("Creature (GUID: %u) has invalid emote (%u) defined in `creature_addon`.", entry, creatureAddon.emote); sLog->outErrorDb("Creature (Entry: %u) has invalid emote (%u) defined in `creature_template_addon`.", entry, creatureAddon.emote);
++count; ++count;
} }
@@ -1573,9 +1573,7 @@ void ObjectMgr::AddCreatureToGrid(uint32 guid, CreatureData const* data)
if (mask & 1) if (mask & 1)
{ {
CellCoord cellCoord = Trinity::ComputeCellCoord(data->posX, data->posY); CellCoord cellCoord = Trinity::ComputeCellCoord(data->posX, data->posY);
uint32 cell_id = (cellCoord.y_coord*TOTAL_NUMBER_OF_CELLS_PER_MAP) + cellCoord.x_coord; CellObjectGuids& cell_guids = mMapObjectGuids[MAKE_PAIR32(data->mapid, i)][cellCoord.GetId()];
CellObjectGuids& cell_guids = mMapObjectGuids[MAKE_PAIR32(data->mapid, i)][cell_id];
cell_guids.creatures.insert(guid); cell_guids.creatures.insert(guid);
} }
} }
@@ -1589,9 +1587,7 @@ void ObjectMgr::RemoveCreatureFromGrid(uint32 guid, CreatureData const* data)
if (mask & 1) if (mask & 1)
{ {
CellCoord cellCoord = Trinity::ComputeCellCoord(data->posX, data->posY); CellCoord cellCoord = Trinity::ComputeCellCoord(data->posX, data->posY);
uint32 cell_id = (cellCoord.y_coord*TOTAL_NUMBER_OF_CELLS_PER_MAP) + cellCoord.x_coord; CellObjectGuids& cell_guids = mMapObjectGuids[MAKE_PAIR32(data->mapid, i)][cellCoord.GetId()];
CellObjectGuids& cell_guids = mMapObjectGuids[MAKE_PAIR32(data->mapid, i)][cell_id];
cell_guids.creatures.erase(guid); cell_guids.creatures.erase(guid);
} }
} }
@@ -1882,9 +1878,7 @@ void ObjectMgr::AddGameobjectToGrid(uint32 guid, GameObjectData const* data)
if (mask & 1) if (mask & 1)
{ {
CellCoord cellCoord = Trinity::ComputeCellCoord(data->posX, data->posY); CellCoord cellCoord = Trinity::ComputeCellCoord(data->posX, data->posY);
uint32 cell_id = (cellCoord.y_coord*TOTAL_NUMBER_OF_CELLS_PER_MAP) + cellCoord.x_coord; CellObjectGuids& cell_guids = mMapObjectGuids[MAKE_PAIR32(data->mapid, i)][cellCoord.GetId()];
CellObjectGuids& cell_guids = mMapObjectGuids[MAKE_PAIR32(data->mapid, i)][cell_id];
cell_guids.gameobjects.insert(guid); cell_guids.gameobjects.insert(guid);
} }
} }
@@ -1898,9 +1892,7 @@ void ObjectMgr::RemoveGameobjectFromGrid(uint32 guid, GameObjectData const* data
if (mask & 1) if (mask & 1)
{ {
CellCoord cellCoord = Trinity::ComputeCellCoord(data->posX, data->posY); CellCoord cellCoord = Trinity::ComputeCellCoord(data->posX, data->posY);
uint32 cell_id = (cellCoord.y_coord*TOTAL_NUMBER_OF_CELLS_PER_MAP) + cellCoord.x_coord; CellObjectGuids& cell_guids = mMapObjectGuids[MAKE_PAIR32(data->mapid, i)][cellCoord.GetId()];
CellObjectGuids& cell_guids = mMapObjectGuids[MAKE_PAIR32(data->mapid, i)][cell_id];
cell_guids.gameobjects.erase(guid); cell_guids.gameobjects.erase(guid);
} }
} }
+5
View File
@@ -135,6 +135,11 @@ struct CoordPair
return *this; return *this;
} }
uint32 GetId() const
{
return y_coord * LIMIT + x_coord;
}
uint32 x_coord; uint32 x_coord;
uint32 y_coord; uint32 y_coord;
}; };
+8 -22
View File
@@ -44,6 +44,7 @@ void ObjectGridEvacuator::Visit(CreatureMapType &m)
} }
// for loading world object at grid loading (Corpses) // for loading world object at grid loading (Corpses)
//TODO: to implement npc on transport, also need to load npcs at grid loading
class ObjectWorldLoader class ObjectWorldLoader
{ {
public: public:
@@ -138,38 +139,23 @@ void LoadHelper(CellCorpseSet const& cell_corpses, CellCoord &cell, CorpseMapTyp
void ObjectGridLoader::Visit(GameObjectMapType &m) void ObjectGridLoader::Visit(GameObjectMapType &m)
{ {
uint32 x = (i_cell.GridX()*MAX_NUMBER_OF_CELLS) + i_cell.CellX(); CellCoord cellCoord = i_cell.GetCellCoord();
uint32 y = (i_cell.GridY()*MAX_NUMBER_OF_CELLS) + i_cell.CellY(); CellObjectGuids const& cell_guids = sObjectMgr->GetCellObjectGuids(i_map->GetId(), i_map->GetSpawnMode(), cellCoord.GetId());
CellCoord cellCoord(x, y);
uint32 cell_id = (cellCoord.y_coord*TOTAL_NUMBER_OF_CELLS_PER_MAP) + cellCoord.x_coord;
CellObjectGuids const& cell_guids = sObjectMgr->GetCellObjectGuids(i_map->GetId(), i_map->GetSpawnMode(), cell_id);
LoadHelper(cell_guids.gameobjects, cellCoord, m, i_gameObjects, i_map); LoadHelper(cell_guids.gameobjects, cellCoord, m, i_gameObjects, i_map);
} }
void void ObjectGridLoader::Visit(CreatureMapType &m)
ObjectGridLoader::Visit(CreatureMapType &m)
{ {
uint32 x = (i_cell.GridX()*MAX_NUMBER_OF_CELLS) + i_cell.CellX(); CellCoord cellCoord = i_cell.GetCellCoord();
uint32 y = (i_cell.GridY()*MAX_NUMBER_OF_CELLS) + i_cell.CellY(); CellObjectGuids const& cell_guids = sObjectMgr->GetCellObjectGuids(i_map->GetId(), i_map->GetSpawnMode(), cellCoord.GetId());
CellCoord cellCoord(x, y);
uint32 cell_id = (cellCoord.y_coord*TOTAL_NUMBER_OF_CELLS_PER_MAP) + cellCoord.x_coord;
CellObjectGuids const& cell_guids = sObjectMgr->GetCellObjectGuids(i_map->GetId(), i_map->GetSpawnMode(), cell_id);
LoadHelper(cell_guids.creatures, cellCoord, m, i_creatures, i_map); LoadHelper(cell_guids.creatures, cellCoord, m, i_creatures, i_map);
} }
void ObjectWorldLoader::Visit(CorpseMapType &m) void ObjectWorldLoader::Visit(CorpseMapType &m)
{ {
uint32 x = (i_cell.GridX()*MAX_NUMBER_OF_CELLS) + i_cell.CellX(); CellCoord cellCoord = i_cell.GetCellCoord();
uint32 y = (i_cell.GridY()*MAX_NUMBER_OF_CELLS) + i_cell.CellY();
CellCoord cellCoord(x, y);
uint32 cell_id = (cellCoord.y_coord*TOTAL_NUMBER_OF_CELLS_PER_MAP) + cellCoord.x_coord;
// corpses are always added to spawn mode 0 and they are spawned by their instance id // corpses are always added to spawn mode 0 and they are spawned by their instance id
CellObjectGuids const& cell_guids = sObjectMgr->GetCellObjectGuids(i_map->GetId(), 0, cell_id); CellObjectGuids const& cell_guids = sObjectMgr->GetCellObjectGuids(i_map->GetId(), 0, cellCoord.GetId());
LoadHelper(cell_guids.corpses, cellCoord, m, i_corpses, i_map); LoadHelper(cell_guids.corpses, cellCoord, m, i_corpses, i_map);
} }
+1
View File
@@ -1993,6 +1993,7 @@ bool Guild::Validate()
} }
} }
} }
if (broken_ranks) if (broken_ranks)
{ {
m_ranks.clear(); m_ranks.clear();
+6 -11
View File
@@ -685,8 +685,7 @@ void Map::RemoveFromMap(T *obj, bool remove)
} }
} }
void void Map::PlayerRelocation(Player* player, float x, float y, float z, float orientation)
Map::PlayerRelocation(Player* player, float x, float y, float z, float orientation)
{ {
ASSERT(player); ASSERT(player);
@@ -710,8 +709,7 @@ Map::PlayerRelocation(Player* player, float x, float y, float z, float orientati
player->UpdateObjectVisibility(false); player->UpdateObjectVisibility(false);
} }
void void Map::CreatureRelocation(Creature* creature, float x, float y, float z, float ang, bool respawnRelocationOnFail)
Map::CreatureRelocation(Creature* creature, float x, float y, float z, float ang, bool respawnRelocationOnFail)
{ {
ASSERT(CheckGridIntegrity(creature, false)); ASSERT(CheckGridIntegrity(creature, false));
@@ -1826,7 +1824,7 @@ bool Map::CheckGridIntegrity(Creature* c, bool moved) const
return true; return true;
} }
const char* Map::GetMapName() const char const* Map::GetMapName() const
{ {
return i_mapEntry ? i_mapEntry->name : "UNNAMEDMAP\x0"; return i_mapEntry ? i_mapEntry->name : "UNNAMEDMAP\x0";
} }
@@ -2623,20 +2621,17 @@ void BattlegroundMap::RemoveAllPlayers()
player->TeleportTo(player->GetBattlegroundEntryPoint()); player->TeleportTo(player->GetBattlegroundEntryPoint());
} }
Creature* Creature* Map::GetCreature(uint64 guid)
Map::GetCreature(uint64 guid)
{ {
return ObjectAccessor::GetObjectInMap(guid, this, (Creature*)NULL); return ObjectAccessor::GetObjectInMap(guid, this, (Creature*)NULL);
} }
GameObject* GameObject* Map::GetGameObject(uint64 guid)
Map::GetGameObject(uint64 guid)
{ {
return ObjectAccessor::GetObjectInMap(guid, this, (GameObject*)NULL); return ObjectAccessor::GetObjectInMap(guid, this, (GameObject*)NULL);
} }
DynamicObject* DynamicObject* Map::GetDynamicObject(uint64 guid)
Map::GetDynamicObject(uint64 guid)
{ {
return ObjectAccessor::GetObjectInMap(guid, this, (DynamicObject*)NULL); return ObjectAccessor::GetObjectInMap(guid, this, (DynamicObject*)NULL);
} }
@@ -469,6 +469,7 @@ void WorldSession::HandleAuctionListBidderItems(WorldPacket & recv_data)
if (!creature) if (!creature)
{ {
sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: HandleAuctionListBidderItems - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(guid))); sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: HandleAuctionListBidderItems - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(guid)));
recv_data.rfinish();
return; return;
} }
@@ -1184,15 +1184,17 @@ void WorldSession::HandleSetFactionInactiveOpcode(WorldPacket & recv_data)
_player->GetReputationMgr().SetInactive(replistid, inactive); _player->GetReputationMgr().SetInactive(replistid, inactive);
} }
void WorldSession::HandleShowingHelmOpcode(WorldPacket & /*recv_data*/) void WorldSession::HandleShowingHelmOpcode(WorldPacket& recv_data)
{ {
sLog->outStaticDebug("CMSG_SHOWING_HELM for %s", _player->GetName()); sLog->outStaticDebug("CMSG_SHOWING_HELM for %s", _player->GetName());
recv_data.read_skip<uint8>(); // unknown, bool?
_player->ToggleFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_HELM); _player->ToggleFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_HELM);
} }
void WorldSession::HandleShowingCloakOpcode(WorldPacket & /*recv_data*/) void WorldSession::HandleShowingCloakOpcode(WorldPacket& recv_data)
{ {
sLog->outStaticDebug("CMSG_SHOWING_CLOAK for %s", _player->GetName()); sLog->outStaticDebug("CMSG_SHOWING_CLOAK for %s", _player->GetName());
recv_data.read_skip<uint8>(); // unknown, bool?
_player->ToggleFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_CLOAK); _player->ToggleFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_CLOAK);
} }
@@ -420,7 +420,10 @@ void WorldSession::HandleQuestPOIQuery(WorldPacket& recv_data)
recv_data >> count; // quest count, max=25 recv_data >> count; // quest count, max=25
if (count >= MAX_QUEST_LOG_SIZE) if (count >= MAX_QUEST_LOG_SIZE)
{
recv_data.rfinish();
return; return;
}
WorldPacket data(SMSG_QUEST_POI_QUERY_RESPONSE, 4+(4+4)*count); WorldPacket data(SMSG_QUEST_POI_QUERY_RESPONSE, 4+(4+4)*count);
data << uint32(count); // count data << uint32(count); // count
@@ -4793,6 +4793,10 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
case 71563: case 71563:
if (Aura* newAura = target->AddAura(71564, target)) if (Aura* newAura = target->AddAura(71564, target))
newAura->SetStackAmount(newAura->GetSpellInfo()->StackAmount); newAura->SetStackAmount(newAura->GetSpellInfo()->StackAmount);
break;
case 59628: // Tricks of the Trade
target->SetReducedThreatPercent(100,caster->GetGUID());
break;
} }
} }
// AT REMOVE // AT REMOVE
@@ -4940,6 +4944,15 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
if (GetId() == 61777) if (GetId() == 61777)
target->CastSpell(target, GetAmount(), true); target->CastSpell(target, GetAmount(), true);
break; break;
case SPELLFAMILY_ROGUE:
// Tricks of the trade
switch(GetId())
{
case 59628:
case 57934:
target->SetReducedThreatPercent(0,0);
break;
}
default: default:
break; break;
} }
+6 -5
View File
@@ -6378,14 +6378,15 @@ void Spell::EffectSummonDeadPet(SpellEffIndex /*effIndex*/)
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT) if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT)
return; return;
if (m_caster->GetTypeId() != TYPEID_PLAYER) Player* _player = m_caster->ToPlayer()
if (!_player)
return; return;
Player* _player = m_caster->ToPlayer();
Pet* pet = _player->GetPet(); Pet* pet = _player->GetPet();
if (!pet) if (!pet || pet->isAlive())
return;
if (pet->isAlive())
return; return;
if (damage < 0) if (damage < 0)
return; return;
+1 -1
View File
@@ -1395,7 +1395,7 @@ void World::SetInitialWorldSettings()
sLog->outString("Loading pet default spells additional to levelup spells..."); sLog->outString("Loading pet default spells additional to levelup spells...");
sSpellMgr->LoadPetDefaultSpells(); sSpellMgr->LoadPetDefaultSpells();
sLog->outString("Loading Creature Template Addon Data..."); sLog->outString("Loading Creature Addon Data...");
sObjectMgr->LoadCreatureAddons(); // must be after LoadCreatureTemplates() and LoadCreatures() sObjectMgr->LoadCreatureAddons(); // must be after LoadCreatureTemplates() and LoadCreatures()
sLog->outString("Loading Creature Respawn Data..."); // must be after PackInstances() sLog->outString("Loading Creature Respawn Data..."); // must be after PackInstances()
@@ -364,8 +364,8 @@ static const Animation DemonTransformation[10]=
{0, SPELL_DEMON_TRANSFORM_3, 0, 0, 0, 8, true} {0, SPELL_DEMON_TRANSFORM_3, 0, 0, 0, 8, true}
}; };
#define EMOTE_SETS_GAZE_ON "sets its gaze on $N!" #define EMOTE_SETS_GAZE_ON "%s sets its gaze on $N!"
#define EMOTE_UNABLE_TO_SUMMON "is unable to summon Maiev Shadowsong and enter Phase 4. Resetting Encounter." #define EMOTE_UNABLE_TO_SUMMON "%s is unable to summon Maiev Shadowsong and enter Phase 4. Resetting Encounter."
class mob_flame_of_azzinoth : public CreatureScript class mob_flame_of_azzinoth : public CreatureScript
{ {