AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
spell_entropius_black_hole_effect Class Reference
Inheritance diagram for spell_entropius_black_hole_effect:
SpellScript _SpellScript

Private Member Functions

 PrepareSpellScript (spell_entropius_black_hole_effect)
 
float RaycastToObstacle (Unit *unit, float angle, float z, float maxDist=20.0f)
 
void HandlePull (SpellEffIndex effIndex)
 
void Register () override
 

Additional Inherited Members

- Public Member Functions inherited from SpellScript
bool _Validate (SpellInfo const *entry) override
 
bool _Load (Spell *spell)
 
void _InitHit ()
 
bool _IsEffectPrevented (SpellEffIndex effIndex)
 
bool _IsDefaultEffectPrevented (SpellEffIndex effIndex)
 
void _PrepareScriptCall (SpellScriptHookType hookType)
 
void _FinishScriptCall ()
 
bool IsInCheckCastHook () const
 
bool IsInTargetHook () const
 
bool IsInHitPhase () const
 
bool IsInEffectHook () const
 
Unit * GetCaster ()
 
GameObject * GetGObjCaster ()
 
Unit * GetOriginalCaster ()
 
SpellInfo const * GetSpellInfo ()
 
SpellValue const * GetSpellValue ()
 
WorldLocation const * GetExplTargetDest ()
 
void SetExplTargetDest (WorldLocation &loc)
 
WorldObject * GetExplTargetWorldObject ()
 
Unit * GetExplTargetUnit ()
 
GameObject * GetExplTargetGObj ()
 
Item * GetExplTargetItem ()
 
Unit * GetHitUnit ()
 
Creature * GetHitCreature ()
 
Player * GetHitPlayer ()
 
Item * GetHitItem ()
 
GameObject * GetHitGObj ()
 
WorldLocation * GetHitDest ()
 
int32 GetHitDamage ()
 
void SetHitDamage (int32 damage)
 
void PreventHitDamage ()
 
int32 GetHitHeal ()
 
void SetHitHeal (int32 heal)
 
void PreventHitHeal ()
 
Spell * GetSpell ()
 
Aura * GetHitAura ()
 
void PreventHitAura ()
 
void PreventHitEffect (SpellEffIndex effIndex)
 
void PreventHitDefaultEffect (SpellEffIndex effIndex)
 
int32 GetEffectValue () const
 
void SetEffectValue (int32 value)
 
Item * GetCastItem ()
 
void CreateItem (uint32 effIndex, uint32 itemId)
 
SpellInfo const * GetTriggeringSpell ()
 
void FinishCast (SpellCastResult result)
 
void Cancel ()
 
void SetCustomCastResultMessage (SpellCustomErrors result)
 
- Public Member Functions inherited from _SpellScript
 _SpellScript ()
 
virtual ~_SpellScript ()
 
virtual void _Register ()
 
virtual void _Unload ()
 
virtual void _Init (std::string const *scriptname, uint32 spellId)
 
std::string const * _GetScriptName () const
 
virtual bool Validate (SpellInfo const *)
 
virtual bool Load ()
 
virtual void Unload ()
 
- Static Public Member Functions inherited from _SpellScript
static bool ValidateSpellInfo (std::initializer_list< uint32 > spellIds)
 
template<class T >
static bool ValidateSpellInfo (T const &spellIds)
 
- Public Attributes inherited from SpellScript
HookList< CastHandler > BeforeCast
 
HookList< CastHandler > OnCast
 
HookList< CastHandler > AfterCast
 
HookList< CheckCastHandler > OnCheckCast
 
HookList< EffectHandler > OnEffectLaunch
 
HookList< EffectHandler > OnEffectLaunchTarget
 
HookList< EffectHandler > OnEffectHit
 
HookList< EffectHandler > OnEffectHitTarget
 
HookList< BeforeHitHandler > BeforeHit
 
HookList< HitHandler > OnHit
 
HookList< HitHandler > AfterHit
 
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
 
HookList< ObjectTargetSelectHandler > OnObjectTargetSelect
 
HookList< DestinationTargetSelectHandler > OnDestinationTargetSelect
 
- Protected Attributes inherited from _SpellScript
uint8 m_currentScriptState
 
std::string const * m_scriptName
 
uint32 m_scriptSpellId
 

Detailed Description

Member Function Documentation

◆ HandlePull()

void spell_entropius_black_hole_effect::HandlePull ( SpellEffIndex  effIndex)
inlineprivate
453 {
454 PreventHitDefaultEffect(effIndex);
455 Unit* target = GetHitUnit();
456 if (!target)
457 return;
458 Position pos;
459 if (target->GetDistance(GetCaster()) < 5.0f)
460 {
461 float o = frand(0, 2 * M_PI);
462 float z = GetCaster()->GetPositionZ() + frand(1.0f, 2.0f);
463 float safeDistance = RaycastToObstacle(GetCaster(), o, z, 10.0f);
464 float actualDistance = std::min(8.0f, safeDistance * 0.8f);
465
466 pos.Relocate(
467 GetCaster()->GetPositionX() + actualDistance * cos(o),
468 GetCaster()->GetPositionY() + actualDistance * sin(o),
469 z
470 );
471 }
472 else
473 pos.Relocate(GetCaster()->GetPositionX(), GetCaster()->GetPositionY(), GetCaster()->GetPositionZ() + 1.0f);
474
475 float speedXY = float(GetSpellInfo()->Effects[effIndex].MiscValue) * 0.1f;
476 float speedZ = target->GetDistance(pos) / speedXY * 0.5f * Movement::gravity;
477 target->GetMotionMaster()->MoveJump(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), speedXY, speedZ);
478 }
float frand(float min, float max)
Definition Random.cpp:57
void MoveJump(Position const &pos, float speedXY, float speedZ, uint32 id=0)
Definition MotionMaster.h:257
SpellInfo const * GetSpellInfo()
Definition SpellScript.cpp:416
void PreventHitDefaultEffect(SpellEffIndex effIndex)
Definition SpellScript.cpp:595
Unit * GetHitUnit()
Definition SpellScript.cpp:453
Unit * GetCaster()
Definition SpellScript.cpp:401
Definition Unit.h:665
MotionMaster * GetMotionMaster()
Definition Unit.h:1761
float GetDistance(WorldObject const *obj) const
Definition Object.cpp:1304
float RaycastToObstacle(Unit *unit, float angle, float z, float maxDist=20.0f)
Definition boss_muru.cpp:430
double gravity
Definition MovementUtil.cpp:24
Definition Position.h:27
float GetPositionZ() const
Definition Position.h:123
float GetPositionX() const
Definition Position.h:121
float GetPositionY() const
Definition Position.h:122
void Relocate(float x, float y)
Definition Position.h:77

References frand(), SpellScript::GetCaster(), WorldObject::GetDistance(), SpellScript::GetHitUnit(), Unit::GetMotionMaster(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), SpellScript::GetSpellInfo(), Movement::gravity, MotionMaster::MoveJump(), SpellScript::PreventHitDefaultEffect(), RaycastToObstacle(), and Position::Relocate().

Referenced by Register().

◆ PrepareSpellScript()

spell_entropius_black_hole_effect::PrepareSpellScript ( spell_entropius_black_hole_effect  )
private

◆ RaycastToObstacle()

float spell_entropius_black_hole_effect::RaycastToObstacle ( Unit *  unit,
float  angle,
float  z,
float  maxDist = 20.0f 
)
inlineprivate
431 {
432 float baseX = unit->GetPositionX();
433 float baseY = unit->GetPositionY();
434 float targetX = baseX + maxDist * cos(angle);
435 float targetY = baseY + maxDist * sin(angle);
436 float hitX, hitY, hitZ;
438 baseX, baseY, z,
439 targetX, targetY, z,
440 hitX, hitY, hitZ,
441 0.0f))
442 {
443 return std::sqrt(
444 std::pow(hitX - baseX, 2) +
445 std::pow(hitY - baseY, 2) +
446 std::pow(hitZ - z, 2)
447 );
448 }
449 return maxDist;
450 }
StaticVMapCollisionData & GetStaticTree()
Definition MapCollisionData.h:84
MapCollisionData & GetMapCollisionData()
Definition Map.h:573
bool GetObjectHitPos(float x1, float y1, float z1, float x2, float y2, float z2, float &rx, float &ry, float &rz, float modifyDist) const
Definition MapCollisionData.cpp:89
Map * GetMap() const
Definition Object.h:637

References WorldObject::GetMap(), Map::GetMapCollisionData(), StaticVMapCollisionData::GetObjectHitPos(), Position::GetPositionX(), Position::GetPositionY(), and MapCollisionData::GetStaticTree().

Referenced by HandlePull().

◆ Register()

void spell_entropius_black_hole_effect::Register ( )
inlineoverrideprivatevirtual

Implements _SpellScript.

481 {
483 }
@ EFFECT_0
Definition SharedDefines.h:31
@ SPELL_EFFECT_PULL_TOWARDS_DEST
Definition SharedDefines.h:911
#define SpellEffectFn(F, I, N)
Definition SpellScript.h:337
HookList< EffectHandler > OnEffectHitTarget
Definition SpellScript.h:336
void HandlePull(SpellEffIndex effIndex)
Definition boss_muru.cpp:452

References EFFECT_0, HandlePull(), SpellScript::OnEffectHitTarget, SPELL_EFFECT_PULL_TOWARDS_DEST, and SpellEffectFn.


The documentation for this class was generated from the following file: