diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 23 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 3 | ||||
-rw-r--r-- | src/server/game/Maps/Map.cpp | 9 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.h | 4 | ||||
-rw-r--r-- | src/server/game/Spells/SpellHistory.cpp | 4 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_item.cpp | 12 |
7 files changed, 31 insertions, 29 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 7610c9981c5..a8369728fe8 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1496,23 +1496,18 @@ void WorldObject::UpdateAllowedPositionZ(float x, float y, float &z) const float WorldObject::GetGridActivationRange() const { - if (ToPlayer()) + if (isActiveObject()) { - if (ToPlayer()->GetCinematicMgr()->IsOnCinematic()) - return DEFAULT_VISIBILITY_INSTANCE; + if (GetTypeId() == TYPEID_PLAYER && ToPlayer()->GetCinematicMgr()->IsOnCinematic()) + return std::max(DEFAULT_VISIBILITY_INSTANCE, GetMap()->GetVisibilityRange()); + return GetMap()->GetVisibilityRange(); } - else if (ToCreature()) - return ToCreature()->m_SightDistance; - else if (ToDynObject()) - { - if (isActiveObject()) - return GetMap()->GetVisibilityRange(); - else - return 0.0f; - } - else - return 0.0f; + + if (Creature const* thisCreature = ToCreature()) + return thisCreature->m_SightDistance; + + return 0.0f; } float WorldObject::GetVisibilityRange() const diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 86eefa043cd..9e969887ba6 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -4711,6 +4711,9 @@ void Player::BuildPlayerRepop() // set and clear other SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND); + + // OnPlayerRepop hook + sScriptMgr->OnPlayerRepop(this); } void Player::ResurrectPlayer(float restore_percent, bool applySickness) diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index d2bc9cdfb51..943f4bd759b 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -721,14 +721,9 @@ void Map::Update(const uint32 t_diff) VisitNearbyCellsOf(player, grid_object_update, world_object_update); - // If player is using far sight, visit that object too + // If player is using far sight or mind vision, visit that object too if (WorldObject* viewPoint = player->GetViewpoint()) - { - if (Creature* viewCreature = viewPoint->ToCreature()) - VisitNearbyCellsOf(viewCreature, grid_object_update, world_object_update); - else if (DynamicObject* viewObject = viewPoint->ToDynObject()) - VisitNearbyCellsOf(viewObject, grid_object_update, world_object_update); - } + VisitNearbyCellsOf(viewPoint, grid_object_update, world_object_update); // Handle updates for creatures in combat with player and are more than 60 yards away if (player->IsInCombat()) diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 621580a689b..f04f288a828 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -2160,6 +2160,11 @@ void ScriptMgr::OnQuestStatusChange(Player* player, uint32 questId) FOREACH_SCRIPT(PlayerScript)->OnQuestStatusChange(player, questId); } +void ScriptMgr::OnPlayerRepop(Player* player) +{ + FOREACH_SCRIPT(PlayerScript)->OnPlayerRepop(player); +} + // Account void ScriptMgr::OnAccountLogin(uint32 accountId) { diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 996a6579cf6..c47c75f3a9a 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -742,6 +742,9 @@ class TC_GAME_API PlayerScript : public UnitScript // Called after a player's quest status has been changed virtual void OnQuestStatusChange(Player* /*player*/, uint32 /*questId*/) { } + + // Called when a player presses release when he died + virtual void OnPlayerRepop(Player* /*player*/) { } }; class TC_GAME_API AccountScript : public ScriptObject @@ -1072,6 +1075,7 @@ class TC_GAME_API ScriptMgr void OnPlayerBindToInstance(Player* player, Difficulty difficulty, uint32 mapid, bool permanent, uint8 extendState); void OnPlayerUpdateZone(Player* player, uint32 newZone, uint32 newArea); void OnQuestStatusChange(Player* player, uint32 questId); + void OnPlayerRepop(Player* player); public: /* AccountScript */ diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp index de7414a66d7..a3c30f02329 100644 --- a/src/server/game/Spells/SpellHistory.cpp +++ b/src/server/game/Spells/SpellHistory.cpp @@ -308,10 +308,10 @@ void SpellHistory::StartCooldown(SpellInfo const* spellInfo, uint32 itemId, Spel // Now we have cooldown data (if found any), time to apply mods if (Player* modOwner = _owner->GetSpellModOwner()) { - if (cooldown > 0) + if (cooldown >= 0) modOwner->ApplySpellMod<SPELLMOD_COOLDOWN>(spellInfo->Id, cooldown, spell); - if (categoryCooldown > 0 && !spellInfo->HasAttribute(SPELL_ATTR6_IGNORE_CATEGORY_COOLDOWN_MODS)) + if (categoryCooldown >= 0 && !spellInfo->HasAttribute(SPELL_ATTR6_IGNORE_CATEGORY_COOLDOWN_MODS)) modOwner->ApplySpellMod<SPELLMOD_COOLDOWN>(spellInfo->Id, categoryCooldown, spell); } diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index 53ad94a9fc5..8a030ebafdb 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -4602,7 +4602,7 @@ public: Unit* target = GetCaster(); if (target->getPowerType() == POWER_MANA) - availableElixirs.push_back(28509); // Elixir of Major Mageblood (22840) + availableElixirs.push_back(28509); // Elixir of Major Mageblood (22840) uint32 chosenElixir = Trinity::Containers::SelectRandomContainerElement(availableElixirs); @@ -4614,13 +4614,13 @@ public: if (sSpellMgr->IsSpellMemberOfSpellGroup(chosenElixir, SPELL_GROUP_ELIXIR_GUARDIAN)) chosenSpellGroup = SPELL_GROUP_ELIXIR_GUARDIAN; // If another spell of the same group is already active the elixir should not be cast - if (chosenSpellGroup) + if (chosenSpellGroup != SPELL_GROUP_NONE) { - Unit::AuraApplicationMap& Auras = target->GetAppliedAuras(); - for (Unit::AuraApplicationMap::iterator itr = Auras.begin(); itr != Auras.end(); ++itr) + Unit::AuraApplicationMap const& auraMap = target->GetAppliedAuras(); + for (auto itr = auraMap.begin(); itr != auraMap.end(); ++itr) { - uint32 spell_id = itr->second->GetBase()->GetId(); - if (sSpellMgr->IsSpellMemberOfSpellGroup(spell_id, chosenSpellGroup) && spell_id != chosenElixir) + uint32 spellId = itr->second->GetBase()->GetId(); + if (sSpellMgr->IsSpellMemberOfSpellGroup(spellId, chosenSpellGroup) && spellId != chosenElixir) { useElixir = false; break; |