30#include "G3DPosition.hpp"
59#include <G3D/Vector3.h>
148 flags.ThisIsYou =
true;
149 flags.ActivePlayer =
true;
155 if (!
flags.MovementUpdate && !worldObject->m_movementInfo.transport.guid.IsEmpty())
156 flags.MovementTransport =
true;
158 if (worldObject->GetAIAnimKitId() || worldObject->GetMovementAnimKitId() || worldObject->GetMeleeAnimKitId())
159 flags.AnimKit =
true;
161 if (worldObject->GetSmoothPhasing() && worldObject->GetSmoothPhasing()->GetInfoForSeer(target->
GetGUID()))
162 flags.SmoothPhasing =
true;
167 flags.PlayHoverAnim = unit->IsPlayingHoverAnim();
169 if (unit->GetVictim())
170 flags.CombatVictim =
true;
174 buf <<
uint8(updateType);
176 buf <<
uint8(objectType);
257 std::vector<uint32>
const* PauseTimes =
nullptr;
259 PauseTimes = go->GetPauseTimes();
281 if (
flags.MovementUpdate)
312 data->
WriteBit(HasStandingOnGameObjectGUID);
324 if (HasStandingOnGameObjectGUID)
345 if (data->
WriteBit(HasFallDirection))
365 *data <<
uint32(movementForces->GetForces()->size());
366 *data << float(movementForces->GetModMagnitude());
371 *data << float(1.0f);
374 *data << float(2.0f);
375 *data << float(65.0f);
376 *data << float(1.0f);
377 *data << float(3.0f);
378 *data << float(10.0f);
379 *data << float(100.0f);
380 *data << float(90.0f);
381 *data << float(140.0f);
382 *data << float(180.0f);
383 *data << float(360.0f);
384 *data << float(90.0f);
385 *data << float(270.0f);
386 *data << float(30.0f);
387 *data << float(80.0f);
388 *data << float(2.75f);
389 *data << float(7.0f);
390 *data << float(0.4f);
396 for (
MovementForce const& force : *movementForces->GetForces())
403 *data <<
uint32(PauseTimes ? PauseTimes->size() : 0);
405 if (
flags.Stationary)
414 if (
flags.CombatVictim)
417 if (
flags.ServerTime)
438 if (PauseTimes && !PauseTimes->empty())
439 data->
append(PauseTimes->data(), PauseTimes->size());
441 if (
flags.MovementTransport)
447 if (
flags.AreaTrigger)
463 bool hasUnknown1025 =
false;
465 bool hasScaleCurveID = createProperties && createProperties->
ScaleCurveId != 0;
466 bool hasMorphCurveID = createProperties && createProperties->
MorphCurveId != 0;
467 bool hasFacingCurveID = createProperties && createProperties->
FacingCurveId != 0;
468 bool hasMoveCurveID = createProperties && createProperties->
MoveCurveId != 0;
469 bool hasAreaTriggerSphere = shape.
IsSphere();
470 bool hasAreaTriggerBox = shape.
IsBox();
471 bool hasAreaTriggerPolygon = createProperties && shape.
IsPolygon();
472 bool hasAreaTriggerCylinder = shape.
IsCylinder();
473 bool hasDisk = shape.
IsDisk();
475 bool hasAreaTriggerSpline = areaTrigger->
HasSplines();
476 bool hasOrbit = areaTrigger->
HasOrbit();
477 bool hasMovementScript =
false;
479 data->
WriteBit(hasAbsoluteOrientation);
486 data->
WriteBit(hasTargetRollPitchYaw);
491 data->
WriteBit(hasAreaTriggerSphere);
493 data->
WriteBit(hasAreaTriggerPolygon);
494 data->
WriteBit(hasAreaTriggerCylinder);
497 data->
WriteBit(hasAreaTriggerSpline);
503 if (hasAreaTriggerSpline)
511 if (hasTargetRollPitchYaw)
520 if (hasFacingCurveID)
526 if (hasAreaTriggerSphere)
532 if (hasAreaTriggerBox)
542 if (hasAreaTriggerPolygon)
556 if (hasAreaTriggerCylinder)
593 if (
flags.GameObject)
608 if (
flags.SmoothPhasing)
611 ASSERT(smoothPhasingInfo);
621 if (
flags.SceneObject)
731 if (
flags.ActivePlayer)
738 data->
WriteBit(HasSceneInstanceIDs);
741 if (HasSceneInstanceIDs)
745 *data <<
uint32(itr.first);
752 *data <<
uint8((1 << maxRunes) - 1);
754 *data <<
uint32(maxRunes);
755 for (
uint32 i = 0; i < maxRunes; ++i)
760 if (
flags.Conversation)
777 std::size_t sizePos = data->
wpos();
804 UpdateDataMapType::iterator iter = data_map.find(player);
806 if (iter == data_map.end())
808 std::pair<UpdateDataMapType::iterator, bool> p = data_map.emplace(player,
UpdateData(player->
GetMapId()));
818 std::stringstream sstr;
875m_movementInfo(), m_name(), m_isActive(false), m_isFarVisible(false), m_isStoredInWorldObjectGridContainer(isWorldObject), m_zoneScript(nullptr),
877m_currMap(nullptr), m_InstanceId(0), _dbPhase(0), m_notifyflags(0)
890 TC_LOG_FATAL(
"misc",
"WorldObject::~WorldObject Corpse Type: {} ({}) deleted but still in map!!",
987 transport->RemovePassenger(
this);
1052 float dist = dz - sizefactor;
1053 return (dist > 0 ? dist : 0);
1058 float sizefactor = 0;
1061 float maxdist = dist2compare + sizefactor;
1063 Position const* thisOrTransport =
this;
1064 Position const* objOrObjTransport = obj;
1073 return thisOrTransport->
IsInDist(objOrObjTransport, maxdist);
1075 return thisOrTransport->
IsInDist2d(objOrObjTransport, maxdist);
1081 return d > 0.0f ? d : 0.0f;
1087 return d > 0.0f ? d : 0.0f;
1093 return d > 0.0f ? d : 0.0f;
1099 return d > 0.0f ? d : 0.0f;
1105 return d > 0.0f ? d : 0.0f;
1144 return obj &&
_IsWithinDist(obj, dist2compare, is3D, incOwnRadius, incTargetRadius);
1219 float distsq1 = dx1*dx1 + dy1*dy1;
1228 float distsq2 = dx2*dx2 + dy2*dy2;
1235 return distsq1 < distsq2;
1242 float distsq = dx*dx + dy*dy;
1252 if (minRange > 0.0f)
1254 float mindist = minRange + sizefactor;
1255 if (distsq < mindist * mindist)
1259 float maxdist = maxRange + sizefactor;
1260 return distsq < maxdist * maxdist;
1267 float distsq = dx*dx + dy*dy;
1272 if (minRange > 0.0f)
1274 float mindist = minRange + sizefactor;
1275 if (distsq < mindist * mindist)
1279 float maxdist = maxRange + sizefactor;
1280 return distsq < maxdist * maxdist;
1288 float distsq = dx*dx + dy*dy + dz*dz;
1293 if (minRange > 0.0f)
1295 float mindist = minRange + sizefactor;
1296 if (distsq < mindist * mindist)
1300 float maxdist = maxRange + sizefactor;
1301 return distsq < maxdist * maxdist;
1342 new_dist = distance * (new_dist > 1 ? new_dist - 2 : new_dist);
1344 rand_x = pos.
m_positionX + new_dist * std::cos(angle);
1345 rand_y = pos.
m_positionY + new_dist * std::sin(angle);
1367 z += unit->GetHoverOffset();
1384 if (!unit->CanFly())
1386 bool canSwim = unit->CanSwim();
1397 float hoverOffset = unit->GetHoverOffset();
1398 max_z += hoverOffset;
1399 ground_z += hoverOffset;
1403 else if (z < ground_z)
1408 *groundZ = ground_z;
1412 float ground_z =
GetMapHeight(x, y, z) + unit->GetHoverOffset();
1417 *groundZ = ground_z;
1427 *groundZ = ground_z;
1442 return thisCreature->m_SightDistance;
1467 else if (
ToPlayer()->GetCinematicMgr()->IsOnCinematic())
1529 if (smoothPhasing->IsBeingReplacedForSeer(
GetGUID()))
1535 bool corpseVisibility =
false;
1538 bool corpseCheck =
false;
1541 if (thisPlayer->isDead() && thisPlayer->GetHealth() > 0 &&
1544 if (
Corpse* corpse = thisPlayer->GetCorpse())
1547 if (corpse->IsWithinDist(thisPlayer,
GetSightRange(obj),
false))
1549 corpseVisibility =
true;
1557 if (!thisPlayer->HaveAtClient(vehicle))
1591 if (!thisPlayer->IsGroupVisibleFor(objPlayer))
1604 if (!
CanDetect(obj, implicitDetect, checkAlert))
1623 if (thisUnit->isPossessing())
1654 if (!(mask & (
uint64(1) << i)))
1661 if (ownInvisibilityDetectValue < objInvisibilityValue)
1678 float combatReach = 0.0f;
1684 if (distance < combatReach)
1706 int32 detectionValue = 30;
1717 detectionValue -=
int32(owner->GetLevelForTarget(
this) - 1) * 5;
1722 float visibilityRange = float(detectionValue) * 0.3f + combatReach;
1730 visibilityRange += (visibilityRange * 0.08f) + 1.5f;
1737 if (distance > visibilityRange)
1788 combatLogSender(self);
1886 Unit* summonerUnit = summoner ? summoner->
ToUnit() :
nullptr;
1892 summon =
new TempSummon(properties, summoner,
false);
1895 summon =
new Guardian(properties, summonerUnit,
false);
1898 summon =
new Puppet(properties, summonerUnit);
1901 summon =
new Totem(properties, summonerUnit);
1904 summon =
new Minion(properties, summonerUnit,
false);
1908 if (!summon->
Create(GenerateLowGuid<HighGuid::Creature>(),
this, entry, pos,
nullptr, vehId,
true))
1937 if (smoothPhasingInfo)
1945 replacedObject->GetOrCreateSmoothPhasing()->SetViewerDependentInfo(privateObjectOwner, originalSmoothPhasingInfo);
1986 for (std::vector<TempSummonData>::const_iterator itr = data->begin(); itr != data->end(); ++itr)
1989 list->push_back(summon);
1997 return reinterpret_cast<ZoneScript*
>(instanceMap->GetInstanceScript());
1999 return reinterpret_cast<ZoneScript*
>(bgMap->GetBG());
2000 if (!map->IsBattlegroundOrArena())
2020 return instanceMap->GetInstanceScenario();
2029 if (
TempSummon* summon = map->
SummonCreature(entry, pos,
nullptr, despawnTime,
this, spellId, vehId, privateObjectOwner))
2045 return SummonCreature(
id, { x,y,z,o }, despawnType, despawnTime, 0, 0, privateObjectOwner);
2050 ASSERT(privateObjectOwner);
2057 summon->SetTempSummonType(despawnType);
2073 TC_LOG_ERROR(
"sql.sql",
"Gameobject template {} not found in database!", entry);
2142 for (std::vector<TempSummonData>::const_iterator itr = data->begin(); itr != data->end(); ++itr)
2145 list->push_back(summon);
2212 Player* target =
nullptr;
2283 return owner->ToPlayer();
2290 return owner->ToPlayer();
2302 return spellEffectInfo.
CalcValue(
this, basePoints, target, variance, castItemId, itemLevel);
2365 if (minduration <= 0)
2369 if (minduration == maxduration)
2382 return powerEntry && powerEntry->PowerType == POWER_COMBO_POINTS && (!powerEntry->RequiredAuraSpellID || unit->HasAura(powerEntry->RequiredAuraSpellID));
2388 auto consumedItr = std::find_if(powerCosts->begin(), powerCosts->end(),
2389 [](
SpellPowerCost const& consumed) { return consumed.Power == POWER_COMBO_POINTS; });
2390 if (consumedItr == powerCosts->end())
2393 int32 baseComboCost = (*itr)->ManaCost + (*itr)->OptionalCost;
2395 baseComboCost +=
int32(
CalculatePct(powerTypeEntry->MaxBasePower, (*itr)->PowerCostPct + (*itr)->OptionalCostPct));
2397 float durationPerComboPoint = float(maxduration - minduration) / baseComboCost;
2398 return minduration +
int32(durationPerComboPoint * consumedItr->Amount);
2419 auto mechanicCheck = [mechanicMask](
AuraEffect const* aurEff) ->
bool
2421 if (mechanicMask & (
UI64LIT(1) << aurEff->GetMiscValue()))
2432 int32 durationMod = std::min(durationMod_always, durationMod_not_stack);
2433 if (durationMod != 0)
2434 AddPct(duration, durationMod);
2440 durationMod = std::min(durationMod_always, durationMod_not_stack);
2441 if (durationMod != 0)
2442 AddPct(duration, durationMod);
2463 return std::max(duration, 0);
2468 if (!spellInfo || castTime < 0)
2492 if (!spellInfo || duration < 0)
2510 duration =
int32(
float(duration) * unitCaster->
m_unitData->ModCastingSpeed);
2534 float missChance = [&]()
2544 thisLevel = std::max<int32>(thisLevel, spellInfo->
SpellLevel);
2546 int32 levelBasedHitDiff = leveldif;
2549 int32 modHitChance = 100;
2550 if (levelBasedHitDiff >= 0)
2554 modHitChance = 94 - 3 * std::min(levelBasedHitDiff, 3);
2555 levelBasedHitDiff -= 3;
2559 modHitChance = 96 - std::min(levelBasedHitDiff, 2);
2560 levelBasedHitDiff -= 2;
2562 if (levelBasedHitDiff > 0)
2563 modHitChance -= lchance * std::min(levelBasedHitDiff, 7);
2566 modHitChance = 97 - levelBasedHitDiff;
2592 if (tmp > 0 && rand < tmp)
2599 if (resist_chance > 0 && rand < (tmp += resist_chance))
2606 if (deflect_chance > 0 && rand < (tmp += deflect_chance))
2673 spellMissLog.
SpellID = spellID;
2691 TC_LOG_ERROR(
"entities.unit",
"Creature (template id: {}) has invalid faction (faction template Id) #{}",
ToCreature()->GetCreatureTemplate()->
Entry, factionId);
2695 TC_LOG_ERROR(
"entities.faction",
"GameObject (template id: {}) has invalid faction (faction template Id) #{}",
ToGameObject()->GetGOInfo()->entry, factionId);
2713 auto isAttackableBySummoner = [&](
Unit const* me,
ObjectGuid const& targetGuid)
2740 if (selfPlayerOwner)
2746 else if (targetPlayerOwner)
2753 Unit const* unit = Coalesce<const Unit>(
ToUnit(), selfPlayerOwner);
2754 Unit const* targetUnit = Coalesce<const Unit>(target->
ToUnit(), targetPlayerOwner);
2759 if (selfPlayerOwner && targetPlayerOwner)
2762 if (selfPlayerOwner == targetPlayerOwner)
2780 if (selfPlayerOwner)
2790 if (targetFactionEntry->CanHaveReputation())
2816 if (!factionTemplateEntry)
2820 if (!targetFactionTemplateEntry)
2829 if (
ReputationRank const* repRank = targetPlayerOwner->GetReputationMgr().GetForcedRankIfAny(factionTemplateEntry))
2835 if (factionEntry->CanHaveReputation())
2838 ReputationRank repRank = targetPlayerOwner->GetReputationMgr().GetRank(factionEntry);
2839 if (targetPlayerOwner->GetReputationMgr().IsAtWar(factionEntry))
2848 if (factionTemplateEntry->
IsHostileTo(targetFactionTemplateEntry))
2850 if (factionTemplateEntry->
IsFriendlyTo(targetFactionTemplateEntry))
2852 if (targetFactionTemplateEntry->
IsFriendlyTo(factionTemplateEntry))
2937 if (withSourceOrientation)
2950 playOrphanSpellVisual.
Target = target;
2962 if (withSourceOrientation)
2996 bool isPositiveSpell = bySpell && bySpell->
IsPositive();
2999 if (!bySpell &&
this == target)
3044 Unit const* unitOrOwner = unit;
3090 if (!playerAffectingAttacker && unitTarget && unitTarget->
IsPet() && playerAffectingTarget && playerAffectingTarget->
IsMounted())
3094 if ((playerAffectingAttacker && !playerAffectingTarget) || (!playerAffectingAttacker && playerAffectingTarget))
3096 Player const* player = playerAffectingAttacker ? playerAffectingAttacker : playerAffectingTarget;
3098 if (
Unit const* creature = playerAffectingAttacker ? unitTarget : unit)
3115 if (playerAffectingAttacker && playerAffectingTarget)
3116 if (playerAffectingAttacker->
duel && playerAffectingAttacker->
duel->Opponent == playerAffectingTarget && playerAffectingAttacker->
duel->State ==
DUEL_STATE_IN_PROGRESS)
3128 if (playerAffectingAttacker && playerAffectingTarget)
3133 if (playerAffectingAttacker->
IsFFAPvP() && playerAffectingTarget->
IsFFAPvP())
3149 bool isNegativeSpell = bySpell && !bySpell->
IsPositive();
3166 if (unit && unitTarget && unit->
GetVehicle())
3220 if (selfPlayerOwner && targetPlayerOwner)
3223 if (selfPlayerOwner != targetPlayerOwner && targetPlayerOwner->
duel)
3241 if (unitTarget && !unitTarget->
IsPvP())
3258 if (
Unit* magnet = aurEff->GetBase()->GetCaster())
3268 hitDelay += spellInfo->
Speed;
3269 else if (spellInfo->
Speed > 0.0f)
3291template <
typename Container>
3299template <
typename Container>
3311template <
typename Container>
3319template <
typename Container>
3331template <
typename Container>
3347 if (
this != searcher)
3349 float myHover = 0.0f, searcherHover = 0.0f;
3351 myHover = unit->GetHoverOffset();
3352 if (
Unit const* searchUnit = searcher->
ToUnit())
3353 searcherHover = searchUnit->GetHoverOffset();
3355 float hoverDelta = myHover - searcherHover;
3356 if (hoverDelta != 0.0f)
3357 effectiveReach = std::sqrt(std::max(effectiveReach * effectiveReach - hoverDelta * hoverDelta, 0.0f));
3361 x =
GetPositionX() + (effectiveReach + distance2d) * std::cos(absAngle);
3362 y =
GetPositionY() + (effectiveReach + distance2d) * std::sin(absAngle);
3388 for (
float angle =
float(
M_PI) / 8; angle < float(
M_PI) * 2; angle += float(
M_PI) / 8)
3439 float destx, desty, destz, ground, floor;
3446 TC_LOG_FATAL(
"misc",
"WorldObject::MovePosition: Object {} has invalid coordinates X: {} and Y: {} were passed!",
3455 float step = dist/10.0f;
3457 for (
uint8 j = 0; j < 10; ++j)
3462 destx -= step * std::cos(angle);
3463 desty -= step * std::sin(angle);
3485 float destx, desty, destz;
3493 TC_LOG_FATAL(
"misc",
"WorldObject::MovePositionToFirstCollision invalid coordinates X: {} and Y: {} were passed!", destx, desty);
3507 G3D::Vector3 result = path.
GetPath().back();
3521 destx, desty, destz + halfHeight,
3522 destx, desty, destz, -0.5f);
3524 destz -= halfHeight;
3538 destx, desty, destz + halfHeight,
3539 destx, desty, destz, -0.5f);
3541 destz -= halfHeight;
3571 pos.
m_positionZ = gridHeight + unit->GetHoverOffset();
3628 std::list<Player*> targets;
3632 for (std::list<Player*>::const_iterator iter = targets.begin(); iter != targets.end(); ++iter)
3634 Player* player = (*iter);
3666 Player* source =
nullptr;
3669 source = iter->GetSource();
3687 source = iter->GetSource();
3702 source = iter->GetSource();
3709 if (*caster->m_activePlayerData->FarsightObject == source->
GetGUID())
3764 bool swimming = [&]()
3787 std::stringstream sstr;
DB2Storage< FactionTemplateEntry > sFactionTemplateStore("FactionTemplate.db2", &FactionTemplateLoadInfo::Instance)
DB2Storage< AreaTableEntry > sAreaTableStore("AreaTable.db2", &AreaTableLoadInfo::Instance)
DB2Storage< FactionEntry > sFactionStore("Faction.db2", &FactionLoadInfo::Instance)
@ FACTION_TEMPLATE_FLAG_HOSTILE_BY_DEFAULT
@ FACTION_TEMPLATE_FLAG_CONTESTED_GUARD
std::chrono::seconds Seconds
Seconds shorthand typedef.
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
#define VMAP_INVALID_HEIGHT_VALUE
#define VMAP_INVALID_HEIGHT
#define TC_LOG_WARN(filterType__,...)
#define TC_LOG_DEBUG(filterType__,...)
#define TC_LOG_ERROR(filterType__,...)
#define TC_LOG_FATAL(filterType__,...)
#define MAX_VISIBILITY_DISTANCE
#define DEFAULT_VISIBILITY_DISTANCE
@ TEMPSUMMON_DEAD_DESPAWN
@ TEMPSUMMON_TIMED_DESPAWN
#define VISIBILITY_DISTANCE_LARGE
#define VISIBILITY_DISTANCE_TINY
@ GO_SUMMON_TIMED_OR_CORPSE_DESPAWN
#define DEFAULT_VISIBILITY_INSTANCE
#define VISIBILITY_DISTANCE_GIGANTIC
#define VISIBILITY_DISTANCE_SMALL
std::set< ObjectGuid > GuidSet
@ SUMMONER_TYPE_GAMEOBJECT
constexpr float VisibilityDistances[AsUnderlyingType(VisibilityDistanceType::Max)]
std::unordered_map< Player *, UpdateData > UpdateDataMapType
@ PATHFIND_FARFROMPOLY_END
@ PATHFIND_NOT_USING_PATH
@ PLAYER_FLAGS_CONTESTED_PVP
int32 irand(int32 min, int32 max)
bool roll_chance_i(int chance)
@ SERVERSIDE_VISIBILITY_GM
@ SERVERSIDE_VISIBILITY_GHOST
@ SPELL_ATTR9_SPECIAL_DELAY_CALCULATION
@ SPELL_ATTR7_REFLECTION_ONLY_DEFENDS
@ SPELL_ATTR7_NO_ATTACK_MISS
@ SPELL_ATTR7_NO_TARGET_DURATION_MOD
@ SPELL_ATTR5_IGNORE_AREA_EFFECT_PVP_CHECK
@ SPELL_ATTR5_SPELL_HASTE_AFFECTS_PERIODIC
@ SPELL_ATTR2_AUTO_REPEAT
@ SPELL_ATTR2_RETAIN_ITEM_CAST
@ TOTAL_INVISIBILITY_TYPES
@ SPELL_ATTR1_NO_REDIRECTION
@ SPELL_ATTR3_NO_AVOIDANCE
@ SPELL_ATTR3_IGNORE_CASTER_MODIFIERS
@ SPELL_DAMAGE_CLASS_RANGED
@ SPELL_DAMAGE_CLASS_MAGIC
@ SPELL_DAMAGE_CLASS_NONE
@ SPELL_DAMAGE_CLASS_MELEE
@ SPELL_ATTR0_IS_TRADESKILL
@ SPELL_ATTR0_NO_IMMUNITIES
@ SPELL_ATTR0_USES_RANGED_SLOT
@ SPELL_FAILED_BAD_TARGETS
@ SPELL_FAILED_SPELL_UNAVAILABLE
constexpr float Z_OFFSET_FIND_HEIGHT
@ SUMMON_CATEGORY_VEHICLE
@ CREATURE_TYPE_FLAG_CAN_ASSIST
@ SPELL_ATTR8_IGNORE_SANCTUARY
@ SPELL_ATTR8_MELEE_HASTE_AFFECTS_PERIODIC
@ SPELL_ATTR8_CAN_ATTACK_IMMUNE_PC
@ SPELL_ATTR6_CAN_TARGET_UNTARGETABLE
@ SPELL_ATTR6_IGNORE_PHASE_SHIFT
@ SPELL_ATTR6_CAN_ASSIST_IMMUNE_PC
@ SPELL_AURA_MOD_AURA_DURATION_BY_DISPEL_NOT_STACK
@ SPELL_AURA_MECHANIC_DURATION_MOD_NOT_STACK
@ SPELL_AURA_REFLECT_SPELLS
@ SPELL_AURA_IGNORE_HIT_DIRECTION
@ SPELL_AURA_DEFLECT_SPELLS
@ SPELL_AURA_MOD_AURA_DURATION_BY_DISPEL
@ SPELL_AURA_MECHANIC_DURATION_MOD
@ SPELL_AURA_DETECT_STEALTH
@ SPELL_AURA_SPELL_MAGNET
@ SPELL_AURA_MOD_ATTACKER_SPELL_HIT_CHANCE
@ SPELL_AURA_REFLECT_SPELLS_SCHOOL
bool IsPartOfSkillLine(uint32 skillId, uint32 spellId)
@ SPELL_GROUP_ELIXIR_BATTLE
@ SPELL_GROUP_ELIXIR_GUARDIAN
@ UNIT_FLAG2_IGNORE_REPUTATION
@ UNIT_FLAG2_GIGANTIC_AOI
@ UNIT_FLAG2_INFINITE_AOI
@ MOVEMENTFLAG_SPLINE_ELEVATION
@ MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING
@ UNIT_FLAG_NON_ATTACKABLE
@ UNIT_FLAG_NON_ATTACKABLE_2
@ UNIT_FLAG_NOT_ATTACKABLE_1
@ UNIT_FLAG_PLAYER_CONTROLLED
#define MAX_PLAYER_STEALTH_DETECT_RANGE
@ UNIT_STATE_UNATTACKABLE
@ UPDATETYPE_CREATE_OBJECT
@ UPDATETYPE_CREATE_OBJECT2
T RoundToInterval(T &num, T floor, T ceil)
constexpr std::underlying_type< E >::type AsUnderlyingType(E enumValue)
T CalculatePct(T base, U pct)
EnumFlag< AreaTriggerCreatePropertiesFlag > Flags
uint32 GetTimeSinceCreated() const
AreaTriggerShapeInfo const & GetShape() const
uint32 GetTimeToTarget() const
Optional< AreaTriggerOrbitInfo > const & GetOrbit() const
uint32 GetElapsedTimeForMovement() const
::Movement::Spline< int32 > const & GetSpline() const
Position const & GetTargetRollPitchYaw() const
Position const & GetRollPitchYaw() const
AreaTriggerCreateProperties const * GetCreateProperties() const
ObjectGuid GetCastItemGUID() const
void put(std::size_t pos, T value)
uint32 GetTextureKitId() const
void SetHomePosition(float x, float y, float z, float o)
float GetAttackDistance(Unit const *player) const
bool IsEvadingAttacks() const
bool AIM_Initialize(CreatureAI *ai=nullptr)
bool Create(ObjectGuid::LowType guidlow, Map *map, uint32 entry, Position const &pos, CreatureData const *data, uint32 vehId, bool dynamic=false)
ObjectGuid GetCasterGUID() const
constexpr bool HasFlag(T flag) const
void KillAllEvents(bool force)
void Update(uint32 p_time)
T_VALUES GetValue(FLAG_TYPE flag) const
void SetValue(FLAG_TYPE flag, T_VALUES value)
static GameObject * CreateGameObject(uint32 entry, Map *map, Position const &pos, QuaternionData const &rotation, uint32 animProgress, GOState goState, uint32 artKit=0)
void SetRespawnTime(int32 respawn)
void SetSpawnedByDefault(bool b)
GameobjectTypes GetGoType() const
QuaternionData GetWorldRotation() const
uint32 GetWorldEffectID() const
void AddObjectToRemoveList(WorldObject *obj)
void RemoveFromActive(WorldObject *obj)
void RemoveUpdateObject(Object *obj)
bool isInLineOfSight(PhaseShift const &phaseShift, float x1, float y1, float z1, float x2, float y2, float z2, LineOfSightChecks checks, VMAP::ModelIgnoreFlags ignoreFlags) const
TempSummon * SummonCreature(uint32 entry, Position const &pos, SummonPropertiesEntry const *properties=nullptr, Milliseconds duration=0ms, WorldObject *summoner=nullptr, uint32 spellId=0, uint32 vehId=0, ObjectGuid privateObjectOwner=ObjectGuid::Empty, SmoothPhasingInfo const *smoothPhasingInfo=nullptr)
void GetZoneAndAreaId(PhaseShift const &phaseShift, uint32 &zoneid, uint32 &areaid, float x, float y, float z)
bool getObjectHitPos(PhaseShift const &phaseShift, float x1, float y1, float z1, float x2, float y2, float z2, float &rx, float &ry, float &rz, float modifyDist)
void AddWorldObject(WorldObject *obj)
void GetFullTerrainStatusForPosition(PhaseShift const &phaseShift, float x, float y, float z, PositionFullTerrainStatus &data, Optional< map_liquidHeaderTypeFlags > reqLiquidType={}, float collisionHeight=2.03128f)
float GetWaterOrGroundLevel(PhaseShift const &phaseShift, float x, float y, float z, float *ground=nullptr, bool swim=false, float collisionHeight=2.03128f)
BattlegroundMap * ToBattlegroundMap()
void SummonCreatureGroup(uint8 group, std::list< TempSummon * > *list=nullptr)
void RemoveWorldObject(WorldObject *obj)
float GetVisibilityRange() const
float GetHeight(PhaseShift const &phaseShift, float x, float y, float z, bool vmap=true, float maxSearchDist=DEFAULT_HEIGHT_SEARCH)
InstanceMap * ToInstanceMap()
float GetGridHeight(PhaseShift const &phaseShift, float x, float y)
uint32 GetInstanceId() const
void AddToActive(WorldObject *obj)
void AddUpdateObject(Object *obj)
void AddObjectToSwitchList(WorldObject *obj, bool on)
static ObjectGuid const Empty
std::string ToString() const
void BuildFieldsUpdate(Player *, UpdateDataMapType &) const
void BuildValuesUpdateBlockForPlayer(UpdateData *data, Player const *target) const
static Creature * ToCreature(Object *o)
Trinity::unique_trackable_ptr< Object > m_scriptRef
DynamicObject * ToDynObject()
virtual void BuildValuesUpdateWithFlag(ByteBuffer *data, UF::UpdateFieldFlag flags, Player const *target) const
static Unit * ToUnit(Object *o)
static GameObject * ToGameObject(Object *o)
ObjectGuid const & GetGUID() const
UF::UpdateField< UF::ObjectData, 0, TYPEID_OBJECT > m_objectData
void AddToObjectUpdateIfNeeded()
void BuildDestroyUpdateBlock(UpdateData *data) const
void BuildValuesUpdateBlockForPlayerWithFlag(UpdateData *data, UF::UpdateFieldFlag flags, Player const *target) const
void SendOutOfRangeForPlayer(Player *target) const
Conversation * ToConversation()
virtual void BuildCreateUpdateBlockForPlayer(UpdateData *data, Player *target) const
virtual bool AddToObjectUpdate()=0
virtual void DestroyForPlayer(Player *target) const
CreateObjectBits m_updateFlag
virtual void BuildValuesCreate(ByteBuffer *data, Player const *target) const =0
bool IsGameObject() const
AreaTrigger * ToAreaTrigger()
virtual void ClearUpdateMask(bool remove)
GameObject * ToGameObject()
UF::UpdateFieldHolder m_values
virtual std::string GetDebugInfo() const
virtual void BuildValuesUpdate(ByteBuffer *data, Player const *target) const =0
void _Create(ObjectGuid const &guid)
ByteBuffer & PrepareValuesUpdateBuffer(UpdateData *data) const
virtual void RemoveFromObjectUpdate()=0
virtual void AddToWorld()
virtual void RemoveFromWorld()
static ObjectGuid GetGUID(Object const *o)
void BuildOutOfRangeUpdateBlock(UpdateData *data) const
void SendUpdateToPlayer(Player *player)
virtual UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const *target) const
void BuildMovementUpdate(ByteBuffer *data, CreateObjectBits flags, Player *target) const
static Player * ToPlayer(Object *o)
void SetUseRaycast(bool useRaycast)
Movement::PointsArray const & GetPath() const
PathType GetPathType() const
bool CalculatePath(float destX, float destY, float destZ, bool forceDest=false)
static uint32 GetTerrainMapId(PhaseShift const &phaseShift, uint32 mapId, TerrainInfo const *terrain, float x, float y)
static void InheritPhaseShift(WorldObject *target, WorldObject const *source)
static PhaseShift const & GetAlwaysVisiblePhaseShift()
bool HaveAtClient(Object const *u) const
void SendDirectMessage(WorldPacket const *data) const
uint32 GetRuneBaseCooldown() const
GuidUnorderedSet m_clientGUIDs
uint8 GetRunesState() const
bool GetCommandStatus(uint32 command) const
WorldObject * GetViewpoint() const
uint32 GetRuneCooldown(uint8 index) const
bool IsGameMaster() const
bool IsAdvancedCombatLoggingEnabled() const
bool HasPlayerFlag(PlayerFlags flags) const
std::unique_ptr< DuelInfo > duel
ReputationMgr & GetReputationMgr()
FactionState const * GetState(FactionEntry const *factionEntry) const
bool IsAtWar(uint32 faction_id) const
ReputationRank const * GetForcedRankIfAny(FactionTemplateEntry const *factionTemplateEntry) const
SceneTemplateByInstance const & GetSceneTemplateByInstanceMap() const
void SetSingleInfo(SmoothPhasingInfo const &info)
int32 CalcValue(WorldObject const *caster=nullptr, int32 const *basePoints=nullptr, Unit const *target=nullptr, float *variance=nullptr, uint32 castItemId=0, int32 itemLevel=-1) const
std::array< SpellPowerEntry const *, MAX_POWERS_PER_SPELL > PowerCosts
uint32 GetSpellXSpellVisualId(WorldObject const *caster=nullptr, WorldObject const *viewer=nullptr) const
float GetMaxRange(bool positive=false, WorldObject *caster=nullptr, Spell *spell=nullptr) const
SpellRangeEntry const * RangeEntry
bool HasOnlyDamageEffects() const
float GetMinRange(bool positive=false) const
int32 GetMaxDuration() const
bool IsAllowingDeadTarget() const
SpellSchoolMask GetSchoolMask() const
bool HasAttribute(SpellAttr0 attribute) const
uint64 GetSpellMechanicMaskByEffectMask(uint32 effectMask) const
int32 GetDuration() const
SpellEffectInfo const & GetEffect(SpellEffIndex index) const
SpellCastResult CheckExplicitTarget(WorldObject const *caster, WorldObject const *target, Item const *itemTarget=nullptr) const
bool IsAffectingArea() const
void SetSpellValue(SpellValueMod mod, int32 value)
SpellCastResult prepare(SpellCastTargets const &targets, AuraEffect const *triggeredByAura=nullptr)
virtual void InitStats(WorldObject *summoner, Milliseconds duration)
ObjectGuid GetSummonerGUID() const
void SetTempSummonType(TempSummonType type)
virtual void InitSummon(WorldObject *summoner)
SummonPropertiesEntry const *const m_Properties
virtual ObjectGuid GetTransportGUID() const =0
virtual TransportBase * RemovePassenger(WorldObject *passenger)=0
virtual void CalculatePassengerOffset(float &x, float &y, float &z, float *o=nullptr) const =0
This method transforms supplied global coordinates into local offsets.
virtual void AddPassenger(WorldObject *passenger)=0
void ClearChangesMask(UpdateField< T, BlockBit, Bit >(Derived::*field))
Unit * GetCharmed() const
Vehicle * GetVehicle() const
AuraEffectList const & GetAuraEffectsByType(AuraType type) const
bool HasPvpFlag(UnitPVPStateFlags flags) const
uint32 GetUnitMovementFlags() const
float GetSpeed(UnitMoveType mtype) const
bool HasAuraTypeWithMiscvalue(AuraType auraType, int32 miscValue) const
UF::UpdateField< UF::UnitData, 0, TYPEID_UNIT > m_unitData
void SetFaction(uint32 faction) override
std::forward_list< AuraEffect * > AuraEffectList
bool IsImmunedToSpell(SpellInfo const *spellInfo, WorldObject const *caster, bool requireImmunityPurgesEffectAttribute=false) const
Unit * GetVehicleBase() const
bool HasUnitFlag(UnitFlags flags) const
void SetCreatedBySpell(int32 spellId)
bool CanInstantCast() const
MovementForces const * GetMovementForces() const
int32 GetMaxNegativeAuraModifier(AuraType auraType) const
bool HasUnitFlag2(UnitFlags2 flags) const
bool IsInSanctuary() const
void SetDemonCreatorGUID(ObjectGuid guid)
bool IsSplineEnabled() const
float GetCombatReach() const override
int32 GetMaxPower(Powers power) const
TempSummon * ToTempSummon()
int32 GetMechanicResistChance(SpellInfo const *spellInfo) const
virtual bool HasSpell(uint32) const
int32 GetTotalAuraModifierByMiscMask(AuraType auraType, uint32 misc_mask) const
bool IsOnVehicle(Unit const *vehicle) const
bool IsImmuneToNPC() const
int32 GetMaxNegativeAuraModifierByMiscValue(AuraType auraType, int32 misc_value) const
Unit * GetCharmerOrOwner() const
void AddGameObject(GameObject *gameObj)
SharedVisionList const & GetSharedVisionList()
bool HasUnitMovementFlag(uint32 f) const
bool HasAuraType(AuraType auraType) const
uint8 GetLevelForTarget(WorldObject const *) const override
int32 GetTotalAuraModifier(AuraType auraType) const
virtual uint32 GetPowerIndex(Powers power) const =0
uint32 GetExtraUnitMovementFlags() const
bool IsImmunedToDamage(SpellSchoolMask meleeSchoolMask) const
bool HasUnitState(const uint32 f) const
bool IsInRaidWith(Unit const *unit) const
void SetLevel(uint8 lvl, bool sendUpdate=true)
std::unique_ptr< Movement::MoveSpline > movespline
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
int32 GetTotalAuraModifierByMiscValue(AuraType auraType, int32 misc_value) const
std::array< float, MAX_ATTACK > m_modAttackSpeedPct
ObjectGuid GetCharmerGUID() const
bool IsUninteractible() const
Vehicle * GetVehicleKit() const
uint32 GetExtraUnitMovementFlags2() const
bool IsImmuneToPC() const
void AddDestroyObject(ObjectGuid guid)
void AddOutOfRangeGUID(GuidSet &guids)
bool BuildPacket(WorldPacket *packet)
static VMapManager2 * createOrGetVMapManager()
bool getObjectHitPos(unsigned int mapId, float x1, float y1, float z1, float x2, float y2, float z2, float &rx, float &ry, float &rz, float modifyDist) override
VehicleEntry const * GetVehicleInfo() const
std::string GetDebugInfo() const
constexpr uint32 GetMapId() const
Unit * GetMagicHitRedirectTarget(Unit *victim, SpellInfo const *spellInfo)
bool InSamePhase(PhaseShift const &phaseShift) const
virtual uint16 GetMeleeAnimKitId() const
TempSummon * SummonPersonalClone(Position const &pos, TempSummonType despawnType=TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime=0s, uint32 vehId=0, uint32 spellId=0, Player *privateObjectOwner=nullptr)
ZLiquidStatus m_liquidStatus
virtual uint16 GetMovementAnimKitId() const
void GetPlayerListInGrid(Container &playerContainer, float maxSearchRange, bool alive=true) const
virtual bool IsInvisibleDueToDespawn(WorldObject const *seer) const
Player * SelectNearestPlayer(float range) const
bool IsInRange3d(float x, float y, float z, float minRange, float maxRange) const
void PlayDirectSound(uint32 soundId, Player const *target=nullptr, uint32 broadcastTextId=0) const
bool IsWithinDist2d(float x, float y, float dist) const
bool IsWithinDist3d(float x, float y, float z, float dist) const
GameObject * FindNearestGameObject(uint32 entry, float range, bool spawnedOnly=true) const
virtual void SendMessageToSet(WorldPacket const *data, bool self) const
bool CanDetect(WorldObject const *obj, bool ignoreStealth, bool checkAlert=false) const
Scenario * GetScenario() const
ZoneScript * FindZoneScript() const
void GetGameObjectListWithOptionsInGrid(Container &gameObjectContainer, float maxSearchRange, FindGameObjectOptions const &options) const
Creature * FindNearestCreatureWithOptions(float range, FindCreatureOptions const &options) const
void UpdateAllowedPositionZ(float x, float y, float &z, float *groundZ=nullptr) const
void AddToWorld() override
virtual float GetCollisionHeight() const
virtual bool IsAlwaysVisibleFor(WorldObject const *seer) const
Unit * GetCharmerOrOwner() const
void RemoveFromWorld() override
virtual float GetStationaryO() const
InstanceScript * GetInstanceScript() const
virtual uint8 GetLevelForTarget(WorldObject const *) const
virtual void UpdateObjectVisibilityOnDestroy()
void SendSpellMiss(Unit *target, uint32 spellID, SpellMissInfo missInfo)
Unit * GetCharmerOrOwnerOrSelf() const
bool CheckPrivateObjectOwnerVisibility(WorldObject const *seer) const
bool IsWithinLOS(float x, float y, float z, LineOfSightChecks checks=LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags ignoreFlags=VMAP::ModelIgnoreFlags::Nothing) const
bool IsInRange2d(float x, float y, float minRange, float maxRange) const
void BuildUpdate(UpdateDataMapType &) override
void SendCombatLogMessage(WorldPackets::CombatLog::CombatLogServerPacket *combatLog) const
virtual SpellMissInfo MeleeSpellHitResult(Unit *victim, SpellInfo const *spellInfo) const
Position GetHitSpherePointFor(Position const &dest) const
void GetCreatureListWithEntryInGrid(Container &creatureContainer, uint32 entry, float maxSearchRange=250.0f) const
void GetNearPoint(WorldObject const *searcher, float &x, float &y, float &z, float distance2d, float absAngle) const
ObjectGuid GetPrivateObjectOwner() const
float GetGridActivationRange() const
void GetClosePoint(float &x, float &y, float &z, float size, float distance2d=0, float relAngle=0) const
void GetGameObjectListWithEntryInGrid(Container &gameObjectContainer, uint32 entry, float maxSearchRange=250.0f) const
GameObject * FindNearestGameObjectOfType(GameobjectTypes type, float range) const
float GetMapHeight(float x, float y, float z, bool vmap=true, float distanceToSearch=50.0f) const
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
void PlayDirectMusic(uint32 musicId, Player const *target=nullptr) const
float GetMapWaterOrGroundLevel(float x, float y, float z, float *ground=nullptr) const
std::string GetDebugInfo() const override
bool IsValidAttackTarget(WorldObject const *target, SpellInfo const *bySpell=nullptr) const
bool IsHostileToPlayers() const
virtual bool IsAlwaysDetectableFor(WorldObject const *seer) const
bool IsHostileTo(WorldObject const *target) const
bool IsVisibilityOverridden() const
virtual ObjectGuid GetCharmerOrOwnerGUID() const
SmoothPhasing * GetOrCreateSmoothPhasing()
void MovePositionToFirstCollision(Position &pos, float dist, float angle)
TempSummon * SummonCreature(uint32 entry, Position const &pos, TempSummonType despawnType=TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime=0s, uint32 vehId=0, uint32 spellId=0, ObjectGuid privateObjectOwner=ObjectGuid::Empty)
PhaseShift & GetPhaseShift()
FlaggedValuesArray32< int32, uint64, InvisibilityType, TOTAL_INVISIBILITY_TYPES > m_invisibility
int32 CalcSpellDuration(SpellInfo const *spellInfo, std::vector< SpellPowerCost > const *powerCosts) const
bool isActiveObject() const
bool IsSelfOrInSameMap(WorldObject const *obj) const
TransportBase * GetTransport() const
bool GetDistanceOrder(WorldObject const *obj1, WorldObject const *obj2, bool is3D=true) const
bool IsPrivateObject() const
FlaggedValuesArray32< int32, uint64, InvisibilityType, TOTAL_INVISIBILITY_TYPES > m_invisibilityDetect
bool isInFront(WorldObject const *target, float arc=float(M_PI)) const
void setActive(bool isActiveObject)
void SetPrivateObjectOwner(ObjectGuid const &owner)
bool CanSeeOrDetect(WorldObject const *obj, bool implicitDetect=false, bool distanceCheck=false, bool checkAlert=false) const
Position GetNearPosition(float dist, float angle)
float GetDistance2d(WorldObject const *obj) const
Creature * SummonTrigger(float x, float y, float z, float ang, Milliseconds despawnTime, CreatureAI *(*GetAI)(Creature *)=nullptr)
ZoneScript * m_zoneScript
GameObject * SummonGameObject(uint32 entry, Position const &pos, QuaternionData const &rot, Seconds respawnTime, GOSummonType summonType=GO_SUMMON_TIMED_OR_CORPSE_DESPAWN)
ObjectGuid GetCharmerOrOwnerOrOwnGUID() const
Position GetRandomNearPosition(float radius)
int32 ModSpellDuration(SpellInfo const *spellInfo, WorldObject const *target, int32 duration, bool positive, uint32 effectMask) const
SmoothPhasing * GetSmoothPhasing()
float GetSightRange(WorldObject const *target=nullptr) const
virtual uint16 GetAIAnimKitId() const
static ReputationRank GetFactionReactionTo(FactionTemplateEntry const *factionTemplateEntry, WorldObject const *target)
void PlayDistanceSound(uint32 soundId, Player const *target=nullptr) const
std::string const & GetName() const
virtual void SetMap(Map *map)
bool IsFarVisible() const
void SendPlayOrphanSpellVisual(ObjectGuid const &target, uint32 spellVisualId, float travelSpeed, bool speedAsTime=false, bool withSourceOrientation=false)
void SetFarVisible(bool on)
virtual float GetStationaryX() const
bool IsInBetween(Position const &pos1, Position const &pos2, float size=0) const
int32 CalculateSpellDamage(Unit const *target, SpellEffectInfo const &spellEffectInfo, int32 const *basePoints=nullptr, float *variance=nullptr, uint32 castItemId=0, int32 itemLevel=-1) const
void AddObjectToRemoveList()
void GetNearPoint2D(WorldObject const *searcher, float &x, float &y, float distance, float absAngle) const
bool IsWithinLOSInMap(WorldObject const *obj, LineOfSightChecks checks=LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags ignoreFlags=VMAP::ModelIgnoreFlags::Nothing) const
WorldObject(bool isWorldObject)
bool CanDetectStealthOf(WorldObject const *obj, bool checkAlert=false) const
virtual void ProcessPositionDataChanged(PositionFullTerrainStatus const &data)
SpellMissInfo MagicSpellHitResult(Unit *victim, SpellInfo const *spellInfo) const
void GetContactPoint(WorldObject const *obj, float &x, float &y, float &z, float distance2d=CONTACT_DISTANCE) const
bool CanDetectInvisibilityOf(WorldObject const *obj) const
virtual ObjectGuid GetTransGUID() const
GameObject * FindNearestGameObjectWithOptions(float range, FindGameObjectOptions const &options) const
bool const m_isStoredInWorldObjectGridContainer
void DestroyForNearbyPlayers()
GameObject * FindNearestUnspawnedGameObject(uint32 entry, float range) const
bool isInBack(WorldObject const *target, float arc=float(M_PI)) const
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPES > m_stealthDetect
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
bool IsNeutralToAll() const
void UpdatePositionData()
void UpdateGroundPositionZ(float x, float y, float &z) const
bool IsStoredInWorldObjectGridContainer() const
Player * GetSpellModOwner() const
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
ReputationRank GetReactionTo(WorldObject const *target) const
void SetIsStoredInWorldObjectGridContainer(bool apply)
bool IsInWorldPvpZone() const
bool IsValidAssistTarget(WorldObject const *target, SpellInfo const *bySpell=nullptr) const
bool IsInRange(WorldObject const *obj, float minRange, float maxRange, bool is3D=true) const
std::unique_ptr< SmoothPhasing > _smoothPhasing
virtual bool _IsWithinDist(WorldObject const *obj, float dist2compare, bool is3D, bool incOwnRadius=true, bool incTargetRadius=true) const
float GetVisibilityRange() const
double ApplyEffectModifiers(SpellInfo const *spellInfo, uint8 effIndex, double value) const
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPES > m_stealth
virtual uint32 GetCastSpellXSpellVisualId(SpellInfo const *spellInfo) const
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPES > m_serverSideVisibilityDetect
void SendCancelOrphanSpellVisual(uint32 id)
float GetSpellMinRangeForTarget(Unit const *target, SpellInfo const *spellInfo) const
virtual uint32 GetFaction() const =0
SpellMissInfo SpellHitResult(Unit *victim, SpellInfo const *spellInfo, bool canReflect=false) const
float GetDistance(WorldObject const *obj) const
Optional< float > m_visibilityDistanceOverride
ObjectGuid _privateObjectOwner
virtual ObjectGuid GetOwnerGUID() const =0
void SetVisibilityDistanceOverride(VisibilityDistanceType type)
void StopDistanceSound(Player const *target=nullptr) const
virtual bool CanNeverSee(WorldObject const *obj) const
virtual void SendMessageToSetInRange(WorldPacket const *data, float dist, bool self) const
Position GetFirstCollisionPosition(float dist, float angle)
MovementInfo m_movementInfo
Optional< WmoLocation > m_currentWmo
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPES > m_serverSideVisibility
float GetDistanceZ(WorldObject const *obj) const
void PlayObjectSound(int32 soundKitId, ObjectGuid targetObject, Player const *target=nullptr, int32 broadcastTextId=0) const
virtual bool IsNeverVisibleFor(WorldObject const *seer, bool allowServersideObjects=false) const
void GetCreatureListWithOptionsInGrid(Container &creatureContainer, float maxSearchRange, FindCreatureOptions const &options) const
float GetSpellMaxRangeForTarget(Unit const *target, SpellInfo const *spellInfo) const
bool IsWithinDist(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
virtual float GetStationaryY() const
void SummonCreatureGroup(uint8 group, std::list< TempSummon * > *list=nullptr)
void ModSpellCastTime(SpellInfo const *spellInfo, int32 &castTime, Spell *spell=nullptr) const
bool IsFriendlyTo(WorldObject const *target) const
virtual float GetCombatReach() const
virtual float GetStationaryZ() const
Player * GetAffectingPlayer() const
virtual bool CanAlwaysSee(WorldObject const *) const
bool IsInMap(WorldObject const *obj) const
virtual void Update(uint32 diff)
void MovePosition(Position &pos, float dist, float angle)
void GetRandomPoint(Position const &srcPos, float distance, float &rand_x, float &rand_y, float &rand_z) const
FactionTemplateEntry const * GetFactionTemplateEntry() const
bool AddToObjectUpdate() override
virtual void UpdateObjectVisibility(bool forced=true)
virtual void CleanupsBeforeDelete(bool finalCleanup=true)
void RemoveFromObjectUpdate() override
virtual float MeleeSpellMissChance(Unit const *victim, WeaponAttackType attType, SpellInfo const *spellInfo) const
void ModSpellDurationTime(SpellInfo const *spellInfo, int32 &durationTime, Spell *spell=nullptr) const
WorldPacket const * GetFullLogPacket() const
WorldPacket const * GetBasicLogPacket() const
std::vector< SpellLogMissEntry > Entries
WorldPacket const * Write() override
WorldPacket const * Write() override
TaggedPosition<::Position::XYZ > Position
ObjectGuid TargetObjectGUID
ObjectGuid SourceObjectGUID
static void WriteCreateObjectSplineDataBlock(::Movement::MoveSpline const &moveSpline, ByteBuffer &data)
static void WriteCreateObjectAreaTriggerSpline(::Movement::Spline< int32 > const &spline, ByteBuffer &data)
static void WriteMovementForceWithDirection(MovementForce const &movementForce, ByteBuffer &data, Position const *objectPosition=nullptr)
virtual WorldPacket const * Write()=0
WorldPacket const * Write() override
TaggedPosition< Position::XYZ > SourceRotation
TaggedPosition< Position::XYZ > TargetLocation
TaggedPosition< Position::XYZ > SourceLocation
WorldPacket const * Write() override
@ CONFIG_DETECT_POS_COLLISION
TC_GAME_API std::string MovementFlags_ToString(uint32 flags)
TC_GAME_API std::string MovementFlagsExtra_ToString(uint32 flags)
TC_GAME_API WorldObject * GetWorldObject(WorldObject const &, ObjectGuid const &)
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
TC_GAME_API Player * FindPlayer(ObjectGuid const &)
TC_GAME_API Player * GetPlayer(Map const *, ObjectGuid const &guid)
std::string ToString(Type &&val, Params &&... params)
bool IsValidMapCoord(float c)
void NormalizeMapCoord(float &c)
constexpr std::size_t size()
struct AreaTriggerShapeInfo::@199::@203 BoxDatas
struct AreaTriggerShapeInfo::@199::@207 BoundedPlaneDatas
std::vector< TaggedPosition< Position::XY > > PolygonVertices
struct AreaTriggerShapeInfo::@199::@202 SphereDatas
float LocationZOffsetTarget
std::vector< TaggedPosition< Position::XY > > PolygonVerticesTarget
struct AreaTriggerShapeInfo::@199::@205 CylinderDatas
struct AreaTriggerShapeInfo::@199::@204 PolygonDatas
struct AreaTriggerShapeInfo::@199::@206 DiskDatas
bool IsBoundedPlane() const
Optional< SpellCastTargets > Targets
static void VisitAllObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)
static void VisitGridObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)
static void VisitWorldObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)
CombatLogSender(WorldPackets::CombatLog::CombatLogServerPacket *msg)
WorldPackets::CombatLog::CombatLogServerPacket const * i_message
void operator()(Player const *player) const
bool IsHostileToPlayers() const
bool IsNeutralToAll() const
bool IsFriendlyTo(FactionTemplateEntry const *entry) const
bool IsHostileTo(FactionTemplateEntry const *entry) const
Optional< Inertia > inertia
Optional< ObjectGuid > standingOnGameObjectGUID
struct MovementInfo::JumpInfo jump
float stepUpStartElevation
struct MovementInfo::TransportInfo transport
Optional< AdvFlying > advFlying
Optional< WmoLocation > wmoLocation
ZLiquidStatus liquidStatus
constexpr void SetOrientation(float orientation)
constexpr float GetPositionX() const
constexpr float GetPositionY() const
float GetExactDist2d(const float x, const float y) const
constexpr bool IsInDist2d(float x, float y, float dist) const
std::string ToString() const
float GetExactDist(float x, float y, float z) const
constexpr Position(float x=0, float y=0, float z=0, float o=0)
bool HasInArc(float arcangle, Position const *pos, float border=2.0f) const
float GetAbsoluteAngle(float x, float y) const
Streamer< XYZ > PositionXYZStream()
constexpr float GetExactDist2dSq(const float x, const float y) const
constexpr void GetPosition(float &x, float &y) const
constexpr void Relocate(float x, float y)
constexpr Position GetPosition() const
constexpr bool IsInDist(float x, float y, float z, float dist) const
constexpr float GetOrientation() const
constexpr float GetPositionZ() const
void toEulerAnglesZYX(float &Z, float &Y, float &X) const
Optional< ObjectGuid > ReplaceObject
std::array< float, 2 > RangeMin
std::array< float, 2 > RangeMax
EnumFlag< SummonPropertiesFlags > GetFlags() const
PhaseShift const * i_phaseShift
PhaseShift const * i_phaseShift
UpdateDataMapType & i_updateDatas
WorldObjectChangeAccumulator(WorldObject &obj, UpdateDataMapType &d)
void Visit(GridRefManager< SKIP > &)
void Visit(PlayerMapType &m)
void Visit(DynamicObjectMapType &m)
void BuildPacket(Player *player)
void Visit(CreatureMapType &m)