mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-13 03:32:28 -04:00
Scripts: Fixed possible crashes caused by passing nullptr to Trinity::WorldObjectListSearcher constructor
This commit is contained in:
@@ -2625,8 +2625,7 @@ void UnitAura::FillTargetMap(std::unordered_map<Unit*, uint32>& targets, Unit* c
|
||||
if (uint32 containerTypeMask = Spell::GetSearcherTypeMask(m_spellInfo, spellEffectInfo, TARGET_OBJECT_TYPE_UNIT, condList))
|
||||
{
|
||||
Trinity::WorldObjectSpellAreaTargetCheck check(radius, unitOwner, ref, unitOwner, m_spellInfo, selectionType, condList, TARGET_OBJECT_TYPE_UNIT);
|
||||
Trinity::UnitListSearcher searcher(unitOwner, units, check);
|
||||
searcher.i_phaseShift = &PhasingHandler::GetAlwaysVisiblePhaseShift();
|
||||
Trinity::UnitListSearcher searcher(PhasingHandler::GetAlwaysVisiblePhaseShift(), units, check);
|
||||
Spell::SearchTargets(searcher, containerTypeMask, unitOwner, unitOwner, radius + extraSearchRadius);
|
||||
|
||||
// by design WorldObjectSpellAreaTargetCheck allows not-in-world units (for spells) but for auras it is not acceptable
|
||||
|
||||
@@ -2178,9 +2178,8 @@ WorldObject* Spell::SearchNearbyTarget(SpellEffectInfo const& spellEffectInfo, f
|
||||
return nullptr;
|
||||
|
||||
Trinity::WorldObjectSpellNearbyTargetCheck check(range, m_caster, m_spellInfo, selectionType, condList, objectType);
|
||||
Trinity::WorldObjectLastSearcher<Trinity::WorldObjectSpellNearbyTargetCheck> searcher(m_caster, target, check, containerTypeMask);
|
||||
searcher.i_phaseShift = &PhasingHandler::GetAlwaysVisiblePhaseShift();
|
||||
SearchTargets<Trinity::WorldObjectLastSearcher<Trinity::WorldObjectSpellNearbyTargetCheck>>(searcher, containerTypeMask, m_caster, m_caster, range);
|
||||
Trinity::WorldObjectLastSearcher searcher(PhasingHandler::GetAlwaysVisiblePhaseShift(), target, check, containerTypeMask);
|
||||
SearchTargets(searcher, containerTypeMask, m_caster, m_caster, range);
|
||||
return target;
|
||||
}
|
||||
|
||||
@@ -2194,9 +2193,8 @@ void Spell::SearchAreaTargets(std::list<WorldObject*>& targets, SpellEffectInfo
|
||||
|
||||
float extraSearchRadius = range > 0.0f ? EXTRA_CELL_SEARCH_RADIUS : 0.0f;
|
||||
Trinity::WorldObjectSpellAreaTargetCheck check(range, position, m_caster, referer, m_spellInfo, selectionType, condList, objectType, searchReason);
|
||||
Trinity::WorldObjectListSearcher<Trinity::WorldObjectSpellAreaTargetCheck> searcher(m_caster, targets, check, containerTypeMask);
|
||||
searcher.i_phaseShift = &PhasingHandler::GetAlwaysVisiblePhaseShift();
|
||||
SearchTargets<Trinity::WorldObjectListSearcher<Trinity::WorldObjectSpellAreaTargetCheck>>(searcher, containerTypeMask, m_caster, position, range + extraSearchRadius);
|
||||
Trinity::WorldObjectListSearcher searcher(PhasingHandler::GetAlwaysVisiblePhaseShift(), targets, check, containerTypeMask);
|
||||
SearchTargets(searcher, containerTypeMask, m_caster, position, range + extraSearchRadius);
|
||||
}
|
||||
|
||||
void Spell::SearchChainTargets(std::list<WorldObject*>& targets, uint32 chainTargets, WorldObject* target, SpellTargetObjectTypes objectType,
|
||||
|
||||
@@ -4647,8 +4647,8 @@ struct at_briarpatch_to_plains : AreaTriggerAI
|
||||
std::vector<WorldObject*> objs;
|
||||
|
||||
Trinity::ObjectEntryAndPrivateOwnerIfExistsCheck check(player->GetGUID(), conversationId);
|
||||
Trinity::WorldObjectListSearcher<Trinity::ObjectEntryAndPrivateOwnerIfExistsCheck> checker(nullptr, objs, check, GRID_MAP_TYPE_MASK_CONVERSATION);
|
||||
Cell::VisitGridObjects(player, checker, 100.0f);
|
||||
Trinity::WorldObjectListSearcher searcher(PhasingHandler::GetAlwaysVisiblePhaseShift(), objs, check, GRID_MAP_TYPE_MASK_CONVERSATION);
|
||||
Cell::VisitGridObjects(player, searcher, 100.0f);
|
||||
|
||||
if (objs.empty())
|
||||
Conversation::CreateConversation(conversationId, player, *player, player->GetGUID(), nullptr);
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "GridNotifiersImpl.h"
|
||||
#include "Map.h"
|
||||
#include "ObjectMgr.h"
|
||||
#include "PhasingHandler.h"
|
||||
#include "Player.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "WorldStatePackets.h"
|
||||
@@ -155,12 +156,12 @@ uint32 OPvPCapturePointNA::GetAliveGuardsCount() const
|
||||
{
|
||||
Position searchCenter = { -1572.57f, 7945.3f, -22.475f, 2.05949f };
|
||||
|
||||
std::vector<WorldObject*> guards;
|
||||
std::vector<Creature*> guards;
|
||||
Trinity::ObjectEntryAndPrivateOwnerIfExistsCheck check(ObjectGuid::Empty, GetControllingFaction() == HORDE ? 18192 : 18256);
|
||||
Trinity::WorldObjectListSearcher<Trinity::ObjectEntryAndPrivateOwnerIfExistsCheck> searcher(nullptr, guards, check, GRID_MAP_TYPE_MASK_CREATURE);
|
||||
Trinity::CreatureListSearcher searcher(PhasingHandler::GetEmptyPhaseShift(), guards, check);
|
||||
Cell::VisitGridObjects(searchCenter.GetPositionX(), searchCenter.GetPositionY(), m_PvP->GetMap(), searcher, SIZE_OF_GRIDS);
|
||||
|
||||
return std::count_if(guards.begin(), guards.end(), [](WorldObject* guard) { return guard->IsUnit() && guard->ToUnit()->IsAlive(); });
|
||||
return std::ranges::count_if(guards, [](Creature const* guard) { return guard->IsAlive(); });
|
||||
}
|
||||
|
||||
Team OPvPCapturePointNA::GetControllingFaction() const
|
||||
|
||||
Reference in New Issue
Block a user