From 48ec2df81fa8f88cd32d7a79b587603aedbd89e0 Mon Sep 17 00:00:00 2001 From: Subv Date: Sun, 1 Jun 2014 22:27:29 -0500 Subject: Core/Phases: Preliminary work with correctly implementing the phase system in 4.3.4 Put here for peer review. --- src/server/scripts/Commands/cs_debug.cpp | 8 ++++++-- src/server/scripts/Commands/cs_gobject.cpp | 7 +++++-- src/server/scripts/Commands/cs_modify.cpp | 9 ++------- src/server/scripts/Commands/cs_npc.cpp | 11 +++++++---- src/server/scripts/Commands/cs_wp.cpp | 28 ++++++++++++++++++++-------- 5 files changed, 40 insertions(+), 23 deletions(-) (limited to 'src/server/scripts/Commands') diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index d0a005f356e..52886d60c4b 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -934,6 +934,9 @@ public: return false; } + for (auto phase : handler->GetSession()->GetPlayer()->GetPhases()) + v->SetInPhase(phase, false, true); + map->AddToMap(v->ToCreature()); return true; @@ -962,13 +965,14 @@ public: std::set terrainswap; std::set phaseId; + std::set worldMapSwap; terrainswap.insert((uint32)atoi(t)); if (p) phaseId.insert((uint32)atoi(p)); - handler->GetSession()->SendSetPhaseShift(phaseId, terrainswap); + handler->GetSession()->SendSetPhaseShift(phaseId, terrainswap, worldMapSwap); return true; } @@ -1393,7 +1397,7 @@ public: if (unit && unit->GetTypeId() == TYPEID_PLAYER) player = unit->ToPlayer(); - player->GetPhaseMgr().SendDebugReportToPlayer(handler->GetSession()->GetPlayer()); + return true; } }; diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp index e556854c2ab..37961b040b3 100644 --- a/src/server/scripts/Commands/cs_gobject.cpp +++ b/src/server/scripts/Commands/cs_gobject.cpp @@ -152,12 +152,15 @@ public: GameObject* object = new GameObject; uint32 guidLow = sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT); - if (!object->Create(guidLow, objectInfo->entry, map, player->GetPhaseMgr().GetPhaseMaskForSpawn(), x, y, z, o, 0.0f, 0.0f, 0.0f, 0.0f, 0, GO_STATE_READY)) + if (!object->Create(guidLow, objectInfo->entry, map, player->GetPhaseMask(), x, y, z, o, 0.0f, 0.0f, 0.0f, 0.0f, 0, GO_STATE_READY)) { delete object; return false; } + for (auto phase : player->GetPhases()) + object->SetInPhase(phase, false, true); + if (spawntimeSecs) { uint32 value = atoi((char*)spawntimeSecs); @@ -165,7 +168,7 @@ public: } // fill the gameobject data and save to the db - object->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), player->GetPhaseMgr().GetPhaseMaskForSpawn()); + object->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), player->GetPhaseMask()); // delete the old object and do a clean load from DB with a fresh new GameObject instance. // this is required to avoid weird behavior and memory leaks delete object; diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp index d47ee20fac5..83b799f46bb 100644 --- a/src/server/scripts/Commands/cs_modify.cpp +++ b/src/server/scripts/Commands/cs_modify.cpp @@ -1277,14 +1277,9 @@ public: Unit* target = handler->getSelectedUnit(); if (target) - { - if (target->GetTypeId() == TYPEID_PLAYER) - target->ToPlayer()->GetPhaseMgr().SetCustomPhase(phasemask); - else - target->SetPhaseMask(phasemask, true); - } + target->SetPhaseMask(phasemask, true); else - handler->GetSession()->GetPlayer()->GetPhaseMgr().SetCustomPhase(phasemask); + handler->GetSession()->GetPlayer()->SetPhaseMask(phasemask, true); return true; } diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index fb465aaca16..a46db80600e 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -243,7 +243,7 @@ public: uint32 guid = sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT); CreatureData& data = sObjectMgr->NewOrExistCreatureData(guid); data.id = id; - data.phaseMask = chr->GetPhaseMgr().GetPhaseMaskForSpawn(); + data.phaseMask = chr->GetPhaseMask(); data.posX = chr->GetTransOffsetX(); data.posY = chr->GetTransOffsetY(); data.posZ = chr->GetTransOffsetZ(); @@ -251,20 +251,23 @@ public: Creature* creature = trans->CreateNPCPassenger(guid, &data); - creature->SaveToDB(trans->GetGOInfo()->moTransport.mapID, 1 << map->GetSpawnMode(), chr->GetPhaseMgr().GetPhaseMaskForSpawn()); + creature->SaveToDB(trans->GetGOInfo()->moTransport.mapID, 1 << map->GetSpawnMode(), chr->GetPhaseMask()); sObjectMgr->AddCreatureToGrid(guid, &data); return true; } Creature* creature = new Creature(); - if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMgr().GetPhaseMaskForSpawn(), id, x, y, z, o)) + if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMask(), id, x, y, z, o)) { delete creature; return false; } - creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMgr().GetPhaseMaskForSpawn()); + for (auto phase : chr->GetPhases()) + creature->SetInPhase(phase, false, true); + + creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMask()); uint32 db_guid = creature->GetDBTableGUIDLow(); diff --git a/src/server/scripts/Commands/cs_wp.cpp b/src/server/scripts/Commands/cs_wp.cpp index 5306e0e1d9e..210c47a7d3d 100644 --- a/src/server/scripts/Commands/cs_wp.cpp +++ b/src/server/scripts/Commands/cs_wp.cpp @@ -694,7 +694,7 @@ public: } // re-create Creature* wpCreature2 = new Creature(); - if (!wpCreature2->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMgr().GetPhaseMaskForSpawn(), VISUAL_WAYPOINT, chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), chr->GetOrientation())) + if (!wpCreature2->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMask(), VISUAL_WAYPOINT, chr->GetPositionX(), chr->GetPositionY(), chr->GetPositionZ(), chr->GetOrientation())) { handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, VISUAL_WAYPOINT); delete wpCreature2; @@ -702,7 +702,10 @@ public: return false; } - wpCreature2->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMgr().GetPhaseMaskForSpawn()); + for (auto phase : chr->GetPhases()) + wpCreature2->SetInPhase(phase, false, true); + + wpCreature2->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMask()); // To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells(); /// @todo Should we first use "Create" then use "LoadFromDB"? if (!wpCreature2->LoadCreatureFromDB(wpCreature2->GetDBTableGUIDLow(), map)) @@ -918,13 +921,16 @@ public: float o = chr->GetOrientation(); Creature* wpCreature = new Creature(); - if (!wpCreature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMgr().GetPhaseMaskForSpawn(), id, x, y, z, o)) + if (!wpCreature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMask(), id, x, y, z, o)) { handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id); delete wpCreature; return false; } + for (auto phase : chr->GetPhases()) + wpCreature->SetInPhase(phase, false, true); + // Set "wpguid" column to the visual waypoint PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_WAYPOINT_DATA_WPGUID); @@ -934,7 +940,7 @@ public: WorldDatabase.Execute(stmt); - wpCreature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMgr().GetPhaseMaskForSpawn()); + wpCreature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMask()); // To call _LoadGoods(); _LoadQuests(); CreateTrainerSpells(); if (!wpCreature->LoadCreatureFromDB(wpCreature->GetDBTableGUIDLow(), map)) { @@ -982,14 +988,17 @@ public: Map* map = chr->GetMap(); Creature* creature = new Creature(); - if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMgr().GetPhaseMaskForSpawn(), id, x, y, z, o)) + if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMask(), id, x, y, z, o)) { handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id); delete creature; return false; } - creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMgr().GetPhaseMaskForSpawn()); + for (auto phase : chr->GetPhases()) + creature->SetInPhase(phase, false, true); + + creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMask()); if (!creature->LoadCreatureFromDB(creature->GetDBTableGUIDLow(), map)) { handler->PSendSysMessage(LANG_WAYPOINT_VP_NOTCREATED, id); @@ -1031,14 +1040,17 @@ public: Map* map = chr->GetMap(); Creature* creature = new Creature(); - if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMgr().GetPhaseMaskForSpawn(), id, x, y, z, o)) + if (!creature->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMask(), id, x, y, z, o)) { handler->PSendSysMessage(LANG_WAYPOINT_NOTCREATED, id); delete creature; return false; } - creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMgr().GetPhaseMaskForSpawn()); + for (auto phase : chr->GetPhases()) + creature->SetInPhase(phase, false, true); + + creature->SaveToDB(map->GetId(), (1 << map->GetSpawnMode()), chr->GetPhaseMask()); if (!creature->LoadCreatureFromDB(creature->GetDBTableGUIDLow(), map)) { handler->PSendSysMessage(LANG_WAYPOINT_NOTCREATED, id); -- cgit v1.2.3 From 558642b26e1d5466708a96dee8a3e2b74275347f Mon Sep 17 00:00:00 2001 From: Subv Date: Mon, 2 Jun 2014 17:43:59 -0500 Subject: Core/Phases: Removed some phasemask handling, more to come --- src/server/game/Battlefield/Battlefield.cpp | 2 - src/server/game/Entities/Corpse/Corpse.cpp | 1 - src/server/game/Entities/Creature/Creature.cpp | 5 +- src/server/game/Entities/GameObject/GameObject.cpp | 2 - src/server/game/Entities/Player/Player.cpp | 1 - src/server/game/Globals/ObjectAccessor.cpp | 1 - src/server/game/Spells/Auras/SpellAuraEffects.cpp | 20 +----- src/server/scripts/Commands/cs_gobject.cpp | 4 +- src/server/scripts/Commands/cs_misc.cpp | 6 +- src/server/scripts/Commands/cs_modify.cpp | 8 +-- .../BlackwingLair/boss_nefarian.cpp | 1 - .../AzjolNerub/Ahnkahet/boss_herald_volazj.cpp | 71 ++++++++-------------- .../IcecrownCitadel/boss_valithria_dreamwalker.cpp | 2 +- .../scripts/Northrend/Naxxramas/boss_kelthuzad.cpp | 4 +- .../scripts/Northrend/zone_borean_tundra.cpp | 2 +- 15 files changed, 43 insertions(+), 87 deletions(-) (limited to 'src/server/scripts/Commands') diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp index 59633f87058..046af770aff 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -479,14 +479,12 @@ void Battlefield::HideNpc(Creature* creature) creature->CombatStop(); creature->SetReactState(REACT_PASSIVE); creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); - creature->SetPhaseMask(2, true); creature->DisappearAndDie(); creature->SetVisible(false); } void Battlefield::ShowNpc(Creature* creature, bool aggressive) { - creature->SetPhaseMask(1, true); creature->SetVisible(true); creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); if (!creature->IsAlive()) diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp index 2fa82acdaf5..b6b46ff45df 100644 --- a/src/server/game/Entities/Corpse/Corpse.cpp +++ b/src/server/game/Entities/Corpse/Corpse.cpp @@ -187,7 +187,6 @@ bool Corpse::LoadCorpseFromDB(uint32 guid, Field* fields) // place SetLocationInstanceId(instanceId); SetLocationMapId(mapId); - SetPhaseMask(phaseMask, false); Relocate(posX, posY, posZ, o); if (!IsPositionValid()) diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 51d2646b1c3..7ca34f02963 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -738,8 +738,7 @@ bool Creature::Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 entry, { ASSERT(map); SetMap(map); - SetPhaseMask(phaseMask, false); - + if (data && data->phaseid) SetInPhase(data->phaseid, false, true); @@ -1505,8 +1504,6 @@ void Creature::setDeathState(DeathState s) SetMeleeDamageSchool(SpellSchools(cinfo->dmgschool)); LoadCreaturesAddon(true); Motion_Initialize(); - if (GetCreatureData() && GetPhaseMask() != GetCreatureData()->phaseMask) - SetPhaseMask(GetCreatureData()->phaseMask, false); Unit::setDeathState(ALIVE); } } diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 736c39461cd..8cf12405969 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -188,8 +188,6 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map* map, uint32 phaseMa return false; } - SetPhaseMask(phaseMask, false); - SetZoneScript(); if (m_zoneScript) { diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 54d6f4436ea..07f62adfc44 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2898,7 +2898,6 @@ void Player::SetGameMaster(bool on) getHostileRefManager().setOnlineOfflineState(false); CombatStopWithPets(); - SetPhaseMask(uint32(PHASEMASK_ANYWHERE), false); // see and visible in all phases m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GM, GetSession()->GetSecurity()); } else diff --git a/src/server/game/Globals/ObjectAccessor.cpp b/src/server/game/Globals/ObjectAccessor.cpp index 7de319df07f..13609f8e949 100644 --- a/src/server/game/Globals/ObjectAccessor.cpp +++ b/src/server/game/Globals/ObjectAccessor.cpp @@ -371,7 +371,6 @@ Corpse* ObjectAccessor::ConvertCorpseForPlayer(uint64 player_guid, bool insignia // bones->m_time = m_time; // don't overwrite time // bones->m_type = m_type; // don't overwrite type bones->Relocate(corpse->GetPositionX(), corpse->GetPositionY(), corpse->GetPositionZ(), corpse->GetOrientation()); - bones->SetPhaseMask(corpse->GetPhaseMask(), false); bones->SetUInt32Value(CORPSE_FIELD_FLAGS, CORPSE_FLAG_UNK2 | CORPSE_FLAG_BONES); bones->SetUInt64Value(CORPSE_FIELD_OWNER, 0); diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 8c80c7687d5..ff7c650a8cf 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -1606,22 +1606,6 @@ void AuraEffect::HandlePhase(AuraApplication const* aurApp, uint8 mode, bool app Unit* target = aurApp->GetTarget(); - uint32 newPhase = 0; - Unit::AuraEffectList const& phases = target->GetAuraEffectsByType(SPELL_AURA_PHASE); - if (!phases.empty()) - for (Unit::AuraEffectList::const_iterator itr = phases.begin(); itr != phases.end(); ++itr) - newPhase |= (*itr)->GetMiscValue(); - - if (!newPhase) - { - newPhase = PHASEMASK_NORMAL; - if (Creature* creature = target->ToCreature()) - if (CreatureData const* data = sObjectMgr->GetCreatureData(creature->GetDBTableGUIDLow())) - newPhase = data->phaseMask; - } - - target->SetPhaseMask(newPhase, false); - target->SetInPhase(GetMiscValueB(), false, apply); // call functions which may have additional effects after chainging state of unit @@ -1634,6 +1618,7 @@ void AuraEffect::HandlePhase(AuraApplication const* aurApp, uint8 mode, bool app if (Player* player = target->ToPlayer()) player->UpdatePhasing(); + // need triggering visibility update base at phase update of not GM invisible (other GMs anyway see in any phases) if (target->IsVisible()) target->UpdateObjectVisibility(); @@ -1646,9 +1631,6 @@ void AuraEffect::HandlePhaseGroup(AuraApplication const* aurApp, uint8 mode, boo Unit* target = aurApp->GetTarget(); - if (target->GetTypeId() != TYPEID_PLAYER) - return; - std::set const& phases = GetPhasesForGroup(GetMiscValueB()); for (auto phase : phases) target->SetInPhase(phase, false, apply); diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp index 37961b040b3..b2b4235c1a3 100644 --- a/src/server/scripts/Commands/cs_gobject.cpp +++ b/src/server/scripts/Commands/cs_gobject.cpp @@ -510,7 +510,7 @@ public: //set phasemask for selected object static bool HandleGameObjectSetPhaseCommand(ChatHandler* handler, char const* args) { - // number or [name] Shift-click form |color|Hgameobject:go_id|h[name]|h|r + /*// number or [name] Shift-click form |color|Hgameobject:go_id|h[name]|h|r char* id = handler->extractKeyFromLink((char*)args, "Hgameobject"); if (!id) return false; @@ -542,7 +542,7 @@ public: } object->SetPhaseMask(phaseMask, true); - object->SaveToDB(); + object->SaveToDB();*/ return true; } diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index bff12d4330e..1d812a8f4eb 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -370,7 +370,8 @@ public: target->GetContactPoint(_player, x, y, z); _player->TeleportTo(target->GetMapId(), x, y, z, _player->GetAngle(target), TELE_TO_GM_MODE); - _player->SetPhaseMask(target->GetPhaseMask(), true); + for (auto phase : target->GetPhases()) + _player->SetInPhase(phase, true, true); } else { @@ -494,7 +495,8 @@ public: float x, y, z; handler->GetSession()->GetPlayer()->GetClosePoint(x, y, z, target->GetObjectSize()); target->TeleportTo(handler->GetSession()->GetPlayer()->GetMapId(), x, y, z, target->GetOrientation()); - target->SetPhaseMask(handler->GetSession()->GetPlayer()->GetPhaseMask(), true); + for (auto phase : handler->GetSession()->GetPlayer()->GetPhases()) + target->SetInPhase(phase, true, true); } else { diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp index 83b799f46bb..8d44068a00d 100644 --- a/src/server/scripts/Commands/cs_modify.cpp +++ b/src/server/scripts/Commands/cs_modify.cpp @@ -1267,19 +1267,19 @@ public: return true; } - //set temporary phase mask for player + // Toggles a phaseid on a player static bool HandleModifyPhaseCommand(ChatHandler* handler, const char* args) { if (!*args) return false; - uint32 phasemask = (uint32)atoi((char*)args); + uint32 phase = (uint32)atoi((char*)args); Unit* target = handler->getSelectedUnit(); if (target) - target->SetPhaseMask(phasemask, true); + target->SetInPhase(phase, true, !target->IsInPhase(phase)); else - handler->GetSession()->GetPlayer()->SetPhaseMask(phasemask, true); + handler->GetSession()->GetPlayer()->SetInPhase(phase, true, !handler->GetSession()->GetPlayer()->IsInPhase(phase)); return true; } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp index f7aedb42561..a3804f8b35a 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp @@ -178,7 +178,6 @@ public: _Reset(); me->SetVisible(true); - me->SetPhaseMask(1, true); me->SetUInt32Value(UNIT_NPC_FLAGS, 1); me->setFaction(35); me->SetStandState(UNIT_STAND_STATE_SIT_HIGH_CHAIR); diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp index 1c042f4d185..4b352b98af2 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp @@ -111,8 +111,14 @@ public: me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); me->SetControlled(true, UNIT_STATE_STUNNED); } - // phase mask - target->CastSpell(target, SPELL_INSANITY_TARGET+insanityHandled, true); + + // phase the player + target->CastSpell(target, SPELL_INSANITY_TARGET + insanityHandled, true); + + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(SPELL_INSANITY_TARGET + insanityHandled); + if (!spellInfo) + return; + // summon twisted party members for this target Map::PlayerList const &players = me->GetMap()->GetPlayers(); for (Map::PlayerList::const_iterator i = players.begin(); i != players.end(); ++i) @@ -125,21 +131,22 @@ public: { // clone player->CastSpell(summon, SPELL_CLONE_PLAYER, true); - // set phase - summon->SetPhaseMask((1<<(4+insanityHandled)), true); + // phase the summon + summon->SetInPhase(spellInfo->Effects[EFFECT_0].MiscValueB, true, true); } } ++insanityHandled; } } - void ResetPlayersPhaseMask() + void ResetPlayersPhase() { Map::PlayerList const &players = me->GetMap()->GetPlayers(); for (Map::PlayerList::const_iterator i = players.begin(); i != players.end(); ++i) { Player* player = i->GetSource(); - player->RemoveAurasDueToSpell(GetSpellForPhaseMask(player->GetPhaseMask())); + for (uint32 index = 0; index <= 4; ++index) + player->RemoveAurasDueToSpell(SPELL_INSANITY_TARGET + index); } } @@ -153,11 +160,14 @@ public: instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEV_QUICK_DEMISE_START_EVENT); // Visible for all players in insanity - me->SetPhaseMask((1|16|32|64|128|256), true); + me->SetInPhase(169, true, true); + for (uint32 i = 173; i <= 177; ++i) + me->SetInPhase(i, true, true); + // Used for Insanity handling insanityHandled = 0; - ResetPlayersPhaseMask(); + ResetPlayersPhase(); // Cleanup Summons.DespawnAll(); @@ -178,33 +188,8 @@ public: Summons.Summon(summon); } - uint32 GetSpellForPhaseMask(uint32 phase) - { - uint32 spell = 0; - switch (phase) - { - case 16: - spell = SPELL_INSANITY_PHASING_1; - break; - case 32: - spell = SPELL_INSANITY_PHASING_2; - break; - case 64: - spell = SPELL_INSANITY_PHASING_3; - break; - case 128: - spell = SPELL_INSANITY_PHASING_4; - break; - case 256: - spell = SPELL_INSANITY_PHASING_5; - break; - } - return spell; - } - void SummonedCreatureDespawn(Creature* summon) override { - uint32 phase = summon->GetPhaseMask(); uint32 nextPhase = 0; Summons.Despawn(summon); @@ -214,16 +199,17 @@ public: if (Creature* visage = ObjectAccessor::GetCreature(*me, *iter)) { // Not all are dead - if (phase == visage->GetPhaseMask()) + if (visage->IsInPhase(summon)) return; else - nextPhase = visage->GetPhaseMask(); + { + nextPhase = *visage->GetPhases().begin(); + break; + } } } // Roll Insanity - uint32 spell = GetSpellForPhaseMask(phase); - uint32 spell2 = GetSpellForPhaseMask(nextPhase); Map* map = me->GetMap(); if (!map) return; @@ -235,12 +221,9 @@ public: { if (Player* player = i->GetSource()) { - if (player->HasAura(spell)) - { - player->RemoveAurasDueToSpell(spell); - if (spell2) // if there is still some different mask cast spell for it - player->CastSpell(player, spell2, true); - } + for (uint32 index = 0; index <= 4; ++index) + player->RemoveAurasDueToSpell(SPELL_INSANITY_TARGET + index); + player->CastSpell(player, SPELL_INSANITY_TARGET + nextPhase - 173, true); } } } @@ -292,7 +275,7 @@ public: instance->SetBossState(DATA_HERALD_VOLAZJ, DONE); Summons.DespawnAll(); - ResetPlayersPhaseMask(); + ResetPlayersPhase(); } void KilledUnit(Unit* who) override diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index 0c504842c08..68344593434 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -618,7 +618,7 @@ class npc_the_lich_king_controller : public CreatureScript void JustSummoned(Creature* summon) override { // must not be in dream phase - summon->SetPhaseMask((summon->GetPhaseMask() & ~0x10), true); + summon->SetInPhase(173, true, false); if (summon->GetEntry() != NPC_SUPPRESSER) if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true)) summon->AI()->AttackStart(target); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp index 8b3ac64fb89..bbef671483d 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp @@ -305,7 +305,7 @@ public: if (GameObject* trigger = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_KELTHUZAD_TRIGGER))) { trigger->ResetDoorOrButton(); - trigger->SetPhaseMask(1, true); + trigger->SetLootState(GO_READY); } for (uint8 i = 0; i <= 3; ++i) @@ -398,7 +398,7 @@ public: break; case EVENT_TRIGGER: if (GameObject* trigger = ObjectAccessor::GetGameObject(*me, instance->GetData64(DATA_KELTHUZAD_TRIGGER))) - trigger->SetPhaseMask(2, true); + trigger->SetLootState(GO_JUST_DEACTIVATED); events.PopEvent(); break; case EVENT_PHASE: diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 38d73e0673d..08936df4589 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -1853,7 +1853,7 @@ public: me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); break; case 20: - me->SetPhaseMask(1, true); + me->SetInPhase(170, true, false); Talk(SAY_5); me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); player->GroupEventHappens(QUEST_ESCAPING_THE_MIST, me); -- cgit v1.2.3 From 2086f18f7b7e0cf811a4a6ab922403da942b0f51 Mon Sep 17 00:00:00 2001 From: Subv Date: Thu, 5 Jun 2014 13:05:29 -0500 Subject: Core/Phases: Removed more SetPhaseMask uses --- src/server/game/AI/SmartScripts/SmartScript.cpp | 25 ++++++++++---- src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 39 +++++++++++++++++++++- src/server/game/AI/SmartScripts/SmartScriptMgr.h | 15 ++++++--- src/server/scripts/Commands/cs_npc.cpp | 14 +++----- .../BlackwingLair/instance_blackwing_lair.cpp | 4 +-- .../HallsOfReflection/halls_of_reflection.cpp | 2 +- .../instance_halls_of_reflection.cpp | 2 +- .../Northrend/Nexus/Oculus/instance_oculus.cpp | 2 +- 8 files changed, 76 insertions(+), 27 deletions(-) (limited to 'src/server/scripts/Commands') diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 97fe3b80f10..d8fbd109af9 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -1043,7 +1043,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u delete targets; break; } - case SMART_ACTION_SET_INGAME_PHASE_MASK: + case SMART_ACTION_SET_INGAME_PHASE_ID: { ObjectList* targets = GetTargets(e, unit); @@ -1051,12 +1051,23 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u break; for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) - { - if (IsUnit(*itr)) - (*itr)->ToUnit()->SetPhaseMask(e.action.ingamePhaseMask.mask, true); - else if (IsGameObject(*itr)) - (*itr)->ToGameObject()->SetPhaseMask(e.action.ingamePhaseMask.mask, true); - } + (*itr)->SetInPhase(e.action.ingamePhaseId.id, true, e.action.ingamePhaseId.apply == 1); + + delete targets; + break; + } + case SMART_ACTION_SET_INGAME_PHASE_GROUP: + { + ObjectList* targets = GetTargets(e, unit); + + if (!targets) + break; + + std::set const& phases = GetPhasesForGroup(e.action.ingamePhaseGroup.id); + + for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) + for (auto phase : phases) + (*itr)->SetInPhase(phase, true, e.action.ingamePhaseGroup.apply == 1); delete targets; break; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 2e8453904a1..47100088f2f 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -1008,6 +1008,44 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) } break; } + case SMART_ACTION_SET_INGAME_PHASE_ID: + { + uint32 phaseId = e.action.ingamePhaseId.id; + uint32 apply = e.action.ingamePhaseId.apply; + + if (apply != 0 && apply != 1) + { + TC_LOG_ERROR("sql.sql", "SmartScript: SMART_ACTION_SET_INGAME_PHASE_ID uses invalid apply value %u (Should be 0 or 1) for creature %u, skipped", apply, e.entryOrGuid); + return false; + } + + PhaseEntry const* phase = sPhaseStore.LookupEntry(phaseId); + if (!phase) + { + TC_LOG_ERROR("sql.sql", "SmartScript: SMART_ACTION_SET_INGAME_PHASE_ID uses invalid phaseid %u for creature %u, skipped", phaseId, e.entryOrGuid); + return false; + } + break; + } + case SMART_ACTION_SET_INGAME_PHASE_GROUP: + { + uint32 phaseGroup = e.action.ingamePhaseGroup.id; + uint32 apply = e.action.ingamePhaseGroup.apply; + + if (apply != 0 && apply != 1) + { + TC_LOG_ERROR("sql.sql", "SmartScript: SMART_ACTION_SET_INGAME_PHASE_GROUP uses invalid apply value %u (Should be 0 or 1) for creature %u, skipped", apply, e.entryOrGuid); + return false; + } + + PhaseGroupEntry const* phase = sPhaseGroupStore.LookupEntry(phaseGroup); + if (!phase) + { + TC_LOG_ERROR("sql.sql", "SmartScript: SMART_ACTION_SET_INGAME_PHASE_GROUP uses invalid phase group id %u for creature %u, skipped", phaseGroup, e.entryOrGuid); + return false; + } + break; + } case SMART_ACTION_FOLLOW: case SMART_ACTION_SET_ORIENTATION: case SMART_ACTION_STORE_TARGET_LIST: @@ -1037,7 +1075,6 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) case SMART_ACTION_SET_RUN: case SMART_ACTION_SET_SWIM: case SMART_ACTION_FORCE_DESPAWN: - case SMART_ACTION_SET_INGAME_PHASE_MASK: case SMART_ACTION_SET_UNIT_FLAG: case SMART_ACTION_REMOVE_UNIT_FLAG: case SMART_ACTION_PLAYMOVIE: diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 5574e45c614..8ec2cdb1ff9 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -433,7 +433,7 @@ enum SMART_ACTION SMART_ACTION_THREAT_SINGLE_PCT = 13, // Threat% SMART_ACTION_THREAT_ALL_PCT = 14, // Threat% SMART_ACTION_CALL_AREAEXPLOREDOREVENTHAPPENS = 15, // QuestID - SMART_ACTION_UNUSED_16 = 16, // UNUSED + SMART_ACTION_SET_INGAME_PHASE_GROUP = 16, // phaseGroupId, apply SMART_ACTION_SET_EMOTE_STATE = 17, // emoteID SMART_ACTION_SET_UNIT_FLAG = 18, // Flags (may be more than one field OR'd together), Target SMART_ACTION_REMOVE_UNIT_FLAG = 19, // Flags (may be more than one field OR'd together), Target @@ -461,7 +461,7 @@ enum SMART_ACTION SMART_ACTION_FORCE_DESPAWN = 41, // timer SMART_ACTION_SET_INVINCIBILITY_HP_LEVEL = 42, // MinHpValue(+pct, -flat) SMART_ACTION_MOUNT_TO_ENTRY_OR_MODEL = 43, // Creature_template entry(param1) OR ModelId (param2) (or 0 for both to dismount) - SMART_ACTION_SET_INGAME_PHASE_MASK = 44, // mask + SMART_ACTION_SET_INGAME_PHASE_ID = 44, // PhaseId, apply SMART_ACTION_SET_DATA = 45, // Field, Data (only creature @todo) SMART_ACTION_MOVE_FORWARD = 46, // distance SMART_ACTION_SET_VISIBILITY = 47, // on/off @@ -728,9 +728,16 @@ struct SmartAction struct { - uint32 mask; - } ingamePhaseMask; + uint32 id; + uint32 apply; + } ingamePhaseId; + struct + { + uint32 groupId; + uint32 apply; + } ingamePhaseGroup; + struct { uint32 field; diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index a46db80600e..7833b3b5e5d 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -1074,20 +1074,14 @@ public: return true; } - //npc phasemask handling - //change phasemask of creature or pet + //npc phase handling + //change phase of creature or pet static bool HandleNpcSetPhaseCommand(ChatHandler* handler, char const* args) { if (!*args) return false; - uint32 phasemask = (uint32) atoi((char*)args); - if (phasemask == 0) - { - handler->SendSysMessage(LANG_BAD_VALUE); - handler->SetSentErrorMessage(true); - return false; - } + uint32 phase = (uint32) atoi((char*)args); Creature* creature = handler->getSelectedCreature(); if (!creature) @@ -1097,7 +1091,7 @@ public: return false; } - creature->SetPhaseMask(phasemask, true); + creature->SetInPhase(phase, true, !creature->IsInPhase(phase)); if (!creature->IsPet()) creature->SaveToDB(); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp index be8bc34acf1..8bd1ef26aec 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp @@ -155,7 +155,7 @@ public: { case 177807: // Egg if (GetBossState(BOSS_FIREMAW) == DONE) - go->SetPhaseMask(2, true); + go->SetLootState(GO_JUST_DEACTIVATED); else EggList.push_back(go->GetGUID()); break; @@ -201,7 +201,7 @@ public: { for (std::list::const_iterator itr = EggList.begin(); itr != EggList.end(); ++itr) if (GameObject* egg = instance->GetGameObject((*itr))) - egg->SetPhaseMask(2, true); + egg->SetLootState(GO_JUST_DEACTIVATED); } SetData(DATA_EGG_EVENT, NOT_STARTED); break; diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index ccdd92ae4ba..dfca72efa6a 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -636,7 +636,7 @@ class npc_jaina_or_sylvanas_intro_hor : public CreatureScript if (Creature* lichking = ObjectAccessor::GetCreature(*me, _lichkingGUID)) { if (GameObject* frostmourne = ObjectAccessor::GetGameObject(*me, _instance->GetData64(DATA_FROSTMOURNE))) - frostmourne->SetPhaseMask(2, true); + frostmourne->SetLootState(GO_JUST_DEACTIVATED); lichking->CastSpell(lichking, SPELL_TAKE_FROSTMOURNE, true); lichking->CastSpell(lichking, SPELL_FROSTMOURNE_VISUAL, true); } diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp index 6f33e80b92b..b17a5dbc8f5 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp @@ -248,7 +248,7 @@ class instance_halls_of_reflection : public InstanceMapScript case GO_FROSTMOURNE: FrostmourneGUID = go->GetGUID(); if (GetData(DATA_INTRO_EVENT) == DONE) - go->SetPhaseMask(2, true); + go->SetLootState(GO_JUST_DEACTIVATED); break; case GO_ENTRANCE_DOOR: EntranceDoorGUID = go->GetGUID(); diff --git a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp index bf84a267a27..80c71771c96 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp @@ -69,7 +69,7 @@ class instance_oculus : public InstanceMapScript case NPC_VAROS: VarosGUID = creature->GetGUID(); if (GetBossState(DATA_DRAKOS) == DONE) - creature->SetPhaseMask(1, true); + creature->SetPhaseMask(1, true); break; case NPC_UROM: UromGUID = creature->GetGUID(); -- cgit v1.2.3 From bbe51bbd130908603c0a5c0c5d14eae2f0495ede Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 7 Jun 2014 20:26:25 -0500 Subject: Core/Phases: Removed more of the old phasemasks --- src/server/game/Entities/GameObject/GameObject.cpp | 7 --- src/server/game/Entities/GameObject/GameObject.h | 1 - src/server/game/Entities/Object/Object.cpp | 6 +-- src/server/game/Entities/Transport/Transport.cpp | 18 ++++--- src/server/game/Entities/Unit/Unit.cpp | 57 ---------------------- src/server/game/Entities/Unit/Unit.h | 1 - src/server/game/Spells/SpellEffects.cpp | 8 +-- src/server/scripts/Commands/cs_gobject.cpp | 2 +- 8 files changed, 17 insertions(+), 83 deletions(-) (limited to 'src/server/scripts/Commands') diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 8cf12405969..9b931f0ba6a 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -2068,13 +2068,6 @@ void GameObject::SetInPhase(uint32 id, bool update, bool apply) EnableCollision(true); } -void GameObject::SetPhaseMask(uint32 newPhaseMask, bool update) -{ - WorldObject::SetPhaseMask(newPhaseMask, update); - if (m_model && m_model->isEnabled()) - EnableCollision(true); -} - void GameObject::EnableCollision(bool enable) { if (!m_model) diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index 2b24f29fe69..32ef5a44d6c 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -726,7 +726,6 @@ class GameObject : public WorldObject, public GridObject, public Map void SetGoAnimProgress(uint8 animprogress) { SetByteValue(GAMEOBJECT_BYTES_1, 3, animprogress); } static void SetGoArtKit(uint8 artkit, GameObject* go, uint32 lowguid = 0); - void SetPhaseMask(uint32 newPhaseMask, bool update); void SetInPhase(uint32 id, bool update, bool apply); void EnableCollision(bool enable); diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 77c02a7ed62..ee5e6a0faab 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2329,13 +2329,9 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert } } - uint32 phase = PHASEMASK_NORMAL; std::set phases; if (summoner) - { - phase = summoner->GetPhaseMask(); phases = summoner->GetPhases(); - } TempSummon* summon = NULL; switch (mask) @@ -2357,7 +2353,7 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert break; } - if (!summon->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), this, phase, entry, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), nullptr, vehId)) + if (!summon->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), this, 0, entry, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation(), nullptr, vehId)) { delete summon; return NULL; diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index 05b7c25ecde..1e367149113 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -283,6 +283,15 @@ Creature* Transport::CreateNPCPassenger(uint32 guid, CreatureData const* data) return NULL; } + if (data->phaseid) + creature->SetInPhase(data->phaseid, false, true); + else if (data->phaseGroup) + for (auto phase : GetPhasesForGroup(data->phaseGroup)) + creature->SetInPhase(phase, false, true); + else + for (auto phase : GetPhases()) // Set the creature to the transport's phases + creature->SetInPhase(phase, false, true); + if (!map->AddToMap(creature)) { delete creature; @@ -387,15 +396,10 @@ TempSummon* Transport::SummonPassenger(uint32 entry, Position const& pos, TempSu } } - uint32 phase = PHASEMASK_NORMAL; std::set phases; if (summoner) - { - phase = summoner->GetPhaseMask(); phases = summoner->GetPhases(); - } - - if (phases.empty()) + else phases = GetPhases(); // If there was no summoner, try to use the transport phases TempSummon* summon = NULL; @@ -422,7 +426,7 @@ TempSummon* Transport::SummonPassenger(uint32 entry, Position const& pos, TempSu pos.GetPosition(x, y, z, o); CalculatePassengerPosition(x, y, z, &o); - if (!summon->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, phase, entry, x, y, z, o, nullptr, vehId)) + if (!summon->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT), map, 0, entry, x, y, z, o, nullptr, vehId)) { delete summon; return NULL; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index c62765cbd07..7c042dad0c1 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -14576,63 +14576,6 @@ void Unit::SetInPhase(uint32 id, bool update, bool apply) summon->SetInPhase(id, true, apply); } -void Unit::SetPhaseMask(uint32 newPhaseMask, bool update) -{ - if (newPhaseMask == GetPhaseMask()) - return; - - if (IsInWorld()) - { - RemoveNotOwnSingleTargetAuras(newPhaseMask); // we can lost access to caster or target - - // modify hostile references for new phasemask, some special cases deal with hostile references themselves - if (GetTypeId() == TYPEID_UNIT || (!ToPlayer()->IsGameMaster() && !ToPlayer()->GetSession()->PlayerLogout())) - { - HostileRefManager& refManager = getHostileRefManager(); - HostileReference* ref = refManager.getFirst(); - - while (ref) - { - if (Unit* unit = ref->GetSource()->GetOwner()) - if (Creature* creature = unit->ToCreature()) - refManager.setOnlineOfflineState(creature, creature->InSamePhase(newPhaseMask)); - - ref = ref->next(); - } - - // modify threat lists for new phasemask - if (GetTypeId() != TYPEID_PLAYER) - { - std::list threatList = getThreatManager().getThreatList(); - std::list offlineThreatList = getThreatManager().getOfflineThreatList(); - - // merge expects sorted lists - threatList.sort(); - offlineThreatList.sort(); - threatList.merge(offlineThreatList); - - for (std::list::const_iterator itr = threatList.begin(); itr != threatList.end(); ++itr) - if (Unit* unit = (*itr)->getTarget()) - unit->getHostileRefManager().setOnlineOfflineState(ToCreature(), unit->InSamePhase(newPhaseMask)); - } - } - } - - WorldObject::SetPhaseMask(newPhaseMask, update); - - if (!IsInWorld()) - return; - - for (ControlList::const_iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr) - if ((*itr)->GetTypeId() == TYPEID_UNIT) - (*itr)->SetPhaseMask(newPhaseMask, true); - - for (uint8 i = 0; i < MAX_SUMMON_SLOT; ++i) - if (m_SummonSlot[i]) - if (Creature* summon = GetMap()->GetCreature(m_SummonSlot[i])) - summon->SetPhaseMask(newPhaseMask, true); -} - void Unit::UpdateObjectVisibility(bool forced) { if (!forced) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 9c03809b428..970c5ee30fc 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1928,7 +1928,6 @@ class Unit : public WorldObject void SetVisible(bool x); // common function for visibility checks for player/creatures with detection code - void SetPhaseMask(uint32 newPhaseMask, bool update);// overwrite WorldObject::SetPhaseMask void SetInPhase(uint32 id, bool update, bool apply); void UpdateObjectVisibility(bool forced = true); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index ab05cd235eb..d3257f29906 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -3868,7 +3868,7 @@ void Spell::EffectDuel(SpellEffIndex effIndex) Map* map = m_caster->GetMap(); if (!pGameObj->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), gameobject_id, - map, m_caster->GetPhaseMask(), + map, 0, m_caster->GetPositionX()+(unitTarget->GetPositionX()-m_caster->GetPositionX())/2, m_caster->GetPositionY()+(unitTarget->GetPositionY()-m_caster->GetPositionY())/2, m_caster->GetPositionZ(), @@ -4231,7 +4231,7 @@ void Spell::EffectSummonObject(SpellEffIndex effIndex) Map* map = m_caster->GetMap(); if (!go->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), go_id, map, - m_caster->GetPhaseMask(), x, y, z, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 0, GO_STATE_READY)) + 0, x, y, z, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 0, GO_STATE_READY)) { delete go; return; @@ -4863,7 +4863,7 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex) GameObject* pGameObj = new GameObject; if (!pGameObj->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), name_id, cMap, - m_caster->GetPhaseMask(), fx, fy, fz, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY)) + 0, fx, fy, fz, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY)) { delete pGameObj; return; @@ -4932,7 +4932,7 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex) { GameObject* linkedGO = new GameObject; if (linkedGO->Create(sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT), linkedEntry, cMap, - m_caster->GetPhaseMask(), fx, fy, fz, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY)) + 0, fx, fy, fz, m_caster->GetOrientation(), 0.0f, 0.0f, 0.0f, 0.0f, 100, GO_STATE_READY)) { for (auto phase : m_caster->GetPhases()) linkedGO->SetInPhase(phase, false, true); diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp index b2b4235c1a3..de23c33e591 100644 --- a/src/server/scripts/Commands/cs_gobject.cpp +++ b/src/server/scripts/Commands/cs_gobject.cpp @@ -152,7 +152,7 @@ public: GameObject* object = new GameObject; uint32 guidLow = sObjectMgr->GenerateLowGuid(HIGHGUID_GAMEOBJECT); - if (!object->Create(guidLow, objectInfo->entry, map, player->GetPhaseMask(), x, y, z, o, 0.0f, 0.0f, 0.0f, 0.0f, 0, GO_STATE_READY)) + if (!object->Create(guidLow, objectInfo->entry, map, 0, x, y, z, o, 0.0f, 0.0f, 0.0f, 0.0f, 0, GO_STATE_READY)) { delete object; return false; -- cgit v1.2.3