Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
Spell.h
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#ifndef SF_SPELL_H
7#define SF_SPELL_H
8
9#include "ByteBuffer.h"
10#include "GridDefines.h"
11#include "ObjectMgr.h"
12#include "PathGenerator.h"
13#include "SharedDefines.h"
14#include "SpellInfo.h"
15#include <list>
16#include <map>
17
18class Unit;
19class Player;
20class GameObject;
21class DynamicObject;
22class WorldObject;
23class Aura;
24class SpellScript;
25class ByteBuffer;
26
27#define SPELL_CHANNEL_UPDATE_INTERVAL (1 * IN_MILLISECONDS)
28
30{
31 CAST_FLAG_NONE = 0x00000000,
32 CAST_FLAG_PENDING = 0x00000001, // aoe combat log?
34 CAST_FLAG_UNKNOWN_3 = 0x00000004,
35 CAST_FLAG_UNKNOWN_4 = 0x00000008, // ignore AOE visual
36 CAST_FLAG_UNKNOWN_5 = 0x00000010,
38 CAST_FLAG_UNKNOWN_7 = 0x00000040,
39 CAST_FLAG_UNKNOWN_8 = 0x00000080,
40 CAST_FLAG_UNKNOWN_9 = 0x00000100,
53 CAST_FLAG_RUNE_LIST = 0x00200000,
58 CAST_FLAG_IMMUNITY = 0x04000000,
64};
65
67{
69 SPELL_RANGE_MELEE = 1, //melee
70 SPELL_RANGE_RANGED = 2 //hunter range and ranged weapon
71};
72
74{
76 SpellDestination(float x, float y, float z, float orientation = 0.0f, uint32 mapId = MAPID_INVALID);
77 SpellDestination(Position const& pos);
78 SpellDestination(WorldObject const& wObj);
79
83};
84
92
98
100{
101 std::list<ObjectGuid> Targets;
102 std::list<SpellLogEnergizeHelper> Energizes;
103 std::list<SpellLogExtraAttacksHelper> ExtraAttacks;
104 std::list<uint32> PetFeed;
105 std::list<uint32> CreatedItems;
106
108 {
109 Targets.push_back(guid);
110 }
111
113 {
114 CreatedItems.push_back(id);
115 }
116
117 void AddPetFeed(uint32 entry)
118 {
119 PetFeed.push_back(entry);
120 }
121
122 void AddEnergize(ObjectGuid guid, float multiplier, uint32 value, uint32 powerType)
123 {
125 helper.Value = value;
126 helper.Multiplier = multiplier;
127 helper.PowerType = powerType;
128 helper.Guid = guid;
129
130 Energizes.push_back(helper);
131 }
132
134 {
136 helper.Count = count;
137 helper.Guid = guid;
138
139 ExtraAttacks.push_back(helper);
140 }
141};
142
144{
145public:
147 SpellCastTargets(Unit* caster, uint32 targetMask, uint64 targetGuid, uint64 itemTargetGuid, uint64 srcTransportGuid, uint64 destTransportGuid, Position srcPos, Position destPos, float elevation, float missileSpeed, std::string targetString);
149
150 void Read(ByteBuffer& data, Unit* caster);
151 void Write(ByteBuffer& data);
152
153 void Initialize(uint32 flags, uint64 target, uint64 itemTarget, uint64 dest, WorldLocation destPos, uint64 src, WorldLocation srcPos)
154 {
155 m_targetMask = flags;
156 m_objectTargetGUID = target;
157 m_itemTargetGUID = itemTarget;
158
159 // dest
160 m_dst._transportGUID = dest;
161 m_dst._position = destPos;
162 if (dest)
163 m_dst._transportOffset = destPos;
164
165 // src
166 m_src._transportGUID = src;
167 m_src._position = srcPos;
168 if (src)
169 m_src._transportOffset = srcPos;
170 }
171
173 void SetTargetMask(uint32 newMask) { m_targetMask = newMask; }
174
176
178 Unit* GetUnitTarget() const;
179 void SetUnitTarget(Unit* target);
180
181 uint64 GetGOTargetGUID() const;
182 GameObject* GetGOTarget() const;
183 void SetGOTarget(GameObject* target);
184
186 Corpse* GetCorpseTarget() const;
187
190 void RemoveObjectTarget();
191
193 Item* GetItemTarget() const { return m_itemTarget; }
195 void SetItemTarget(Item* item);
196 void SetTradeItemTarget(Player* caster);
197 void UpdateTradeSlotItem();
198
199 SpellDestination const* GetSrc() const;
200 Position const* GetSrcPos() const;
201 void SetSrc(float x, float y, float z);
202 void SetSrc(Position const& pos);
203 void SetSrc(WorldObject const& wObj);
204 void ModSrc(Position const& pos);
205 void RemoveSrc();
206
207 SpellDestination const* GetDst() const;
208 WorldLocation const* GetDstPos() const;
209 void SetDst(float x, float y, float z, float orientation, uint32 mapId = MAPID_INVALID);
210 void SetDst(Position const& pos);
211 void SetDst(WorldObject const& wObj);
212 void SetDst(SpellCastTargets const& spellTargets);
213 void ModDst(Position const& pos);
214 void RemoveDst();
215
217 bool HasDst() const { return GetTargetMask() & TARGET_FLAG_DEST_LOCATION; }
218 bool HasTraj() const { return m_speed != 0; }
219
220 float GetElevation() const { return m_elevation; }
221 void SetElevation(float elevation) { m_elevation = elevation; }
222 float GetSpeed() const { return m_speed; }
223 void SetSpeed(float speed) { m_speed = speed; }
224
225 float GetDist2d() const { return m_src._position.GetExactDist2d(&m_dst._position); }
226 float GetSpeedXY() const { return m_speed * std::cos(m_elevation); }
227 float GetSpeedZ() const { return m_speed * std::sin(m_elevation); }
228
229 void Update(Unit* caster);
230 void OutDebug() const;
231
232 std::string const& GetTargetString() { return m_strTarget; }
233
234private:
236
237 // objects (can be used at spell creating and after Update at casting)
240
241 // object GUID/etc, can be used always
245
248
250 std::string m_strTarget;
251};
252
261
271
279
287
288class Spell
289{
290 friend void Unit::SetCurrentCastedSpell(Spell* pSpell);
291 friend class SpellScript;
292public:
293 void EffectNULL(SpellEffIndex effIndex);
294 void EffectUnused(SpellEffIndex effIndex);
295 void EffectDistract(SpellEffIndex effIndex);
296 void EffectPull(SpellEffIndex effIndex);
297 void EffectSchoolDMG(SpellEffIndex effIndex);
299 void EffectInstaKill(SpellEffIndex effIndex);
300 void EffectDummy(SpellEffIndex effIndex);
301 void EffectTeleportUnits(SpellEffIndex effIndex);
302 void EffectApplyAura(SpellEffIndex effIndex);
303 void EffectSendEvent(SpellEffIndex effIndex);
304 void EffectPowerBurn(SpellEffIndex effIndex);
305 void EffectPowerDrain(SpellEffIndex effIndex);
306 void EffectHeal(SpellEffIndex effIndex);
307 void EffectBind(SpellEffIndex effIndex);
308 void EffectHealthLeech(SpellEffIndex effIndex);
309 void EffectQuestComplete(SpellEffIndex effIndex);
310 void EffectCreateItem(SpellEffIndex effIndex);
311 void EffectCreateItem2(SpellEffIndex effIndex);
313 void EffectPersistentAA(SpellEffIndex effIndex);
314 void EffectEnergize(SpellEffIndex effIndex);
315 void EffectOpenLock(SpellEffIndex effIndex);
317 void EffectProficiency(SpellEffIndex effIndex);
318 void EffectApplyAreaAura(SpellEffIndex effIndex);
319 void EffectSummonType(SpellEffIndex effIndex);
320 void EffectLearnSpell(SpellEffIndex effIndex);
321 void EffectDispel(SpellEffIndex effIndex);
322 void EffectDualWield(SpellEffIndex effIndex);
323 void EffectPickPocket(SpellEffIndex effIndex);
324 void EffectAddFarsight(SpellEffIndex effIndex);
325 void EffectUntrainTalents(SpellEffIndex effIndex);
326 void EffectHealMechanical(SpellEffIndex effIndex);
327 void EffectJump(SpellEffIndex effIndex);
328 void EffectJumpDest(SpellEffIndex effIndex);
329 void EffectLeapBack(SpellEffIndex effIndex);
330 void EffectQuestClear(SpellEffIndex effIndex);
332 void EffectLearnSkill(SpellEffIndex effIndex);
333 void EffectPlayMovie(SpellEffIndex effIndex);
334 void EffectTradeSkill(SpellEffIndex effIndex);
336 void EffectEnchantItemTmp(SpellEffIndex effIndex);
337 void EffectTameCreature(SpellEffIndex effIndex);
338 void EffectSummonPet(SpellEffIndex effIndex);
339 void EffectLearnPetSpell(SpellEffIndex effIndex);
340 void EffectWeaponDmg(SpellEffIndex effIndex);
341 void EffectForceCast(SpellEffIndex effIndex);
342 void EffectTriggerSpell(SpellEffIndex effIndex);
344 void EffectThreat(SpellEffIndex effIndex);
345 void EffectHealMaxHealth(SpellEffIndex effIndex);
346 void EffectInterruptCast(SpellEffIndex effIndex);
348 void EffectScriptEffect(SpellEffIndex effIndex);
349 void EffectSanctuary(SpellEffIndex effIndex);
350 void EffectAddComboPoints(SpellEffIndex effIndex);
351 void EffectDuel(SpellEffIndex effIndex);
352 void EffectStuck(SpellEffIndex effIndex);
353 void EffectSummonPlayer(SpellEffIndex effIndex);
354 void EffectActivateObject(SpellEffIndex effIndex);
355 void EffectApplyGlyph(SpellEffIndex effIndex);
357 void EffectSummonObject(SpellEffIndex effIndex);
358 void EffectResurrect(SpellEffIndex effIndex);
359 void EffectDodge(SpellEffIndex effIndex);
360 void EffectParry(SpellEffIndex effIndex);
361 void EffectBlock(SpellEffIndex effIndex);
362 void EffectLeap(SpellEffIndex effIndex);
363 void EffectTransmitted(SpellEffIndex effIndex);
364 void EffectDisEnchant(SpellEffIndex effIndex);
365 void EffectInebriate(SpellEffIndex effIndex);
366 void EffectFeedPet(SpellEffIndex effIndex);
367 void EffectDismissPet(SpellEffIndex effIndex);
368 void EffectReputation(SpellEffIndex effIndex);
369 void EffectForceDeselect(SpellEffIndex effIndex);
370 void EffectSelfResurrect(SpellEffIndex effIndex);
371 void EffectSkinning(SpellEffIndex effIndex);
372 void EffectCharge(SpellEffIndex effIndex);
373 void EffectChargeDest(SpellEffIndex effIndex);
374 void EffectProspecting(SpellEffIndex effIndex);
375 void EffectMilling(SpellEffIndex effIndex);
376 void EffectRenamePet(SpellEffIndex effIndex);
377 void EffectSendTaxi(SpellEffIndex effIndex);
378 void EffectKnockBack(SpellEffIndex effIndex);
379 void EffectPullTowards(SpellEffIndex effIndex);
380 void EffectDispelMechanic(SpellEffIndex effIndex);
381 void EffectSummonDeadPet(SpellEffIndex effIndex);
384 void EffectSkill(SpellEffIndex effIndex);
385 void EffectTaunt(SpellEffIndex effIndex);
388 void EffectResurrectNew(SpellEffIndex effIndex);
390 void EffectSpiritHeal(SpellEffIndex effIndex);
394 void EffectHealPct(SpellEffIndex effIndex);
395 void EffectEnergizePct(SpellEffIndex effIndex);
400 void EffectKillCredit(SpellEffIndex effIndex);
401 void EffectQuestFail(SpellEffIndex effIndex);
402 void EffectQuestStart(SpellEffIndex effIndex);
403 void EffectRedirectThreat(SpellEffIndex effIndex);
407 void EffectActivateRune(SpellEffIndex effIndex);
408 void EffectCreateTamedPet(SpellEffIndex effIndex);
409 void EffectDiscoverTaxi(SpellEffIndex effIndex);
410 void EffectTitanGrip(SpellEffIndex effIndex);
412 void EffectPlayMusic(SpellEffIndex effIndex);
413 void EffectSpecCount(SpellEffIndex effIndex);
414 void EffectActivateSpec(SpellEffIndex effIndex);
415 void EffectPlaySound(SpellEffIndex effIndex);
416 void EffectRemoveAura(SpellEffIndex effIndex);
418 void EffectCastButtons(SpellEffIndex effIndex);
420 void EffectGiveCurrency(SpellEffIndex effIndex);
421 void EffectDestroyItem(SpellEffIndex effIndex);
424 void EffectRemoveTalent(SpellEffIndex effIndex);
427
428 typedef std::set<Aura*> UsedSpellMods;
429
430 Spell(Unit* caster, SpellInfo const* info, TriggerCastFlags triggerFlags, uint64 originalCasterGUID = 0, bool skipCheck = false);
431 ~Spell();
432
433 void InitExplicitTargets(SpellCastTargets const& targets);
435
436 void SelectSpellTargets();
437 void SelectEffectImplicitTargets(SpellEffIndex effIndex, SpellImplicitTargetInfo const& targetType, uint32& processedEffectMask);
439 void SelectImplicitNearbyTargets(SpellEffIndex effIndex, SpellImplicitTargetInfo const& targetType, uint32 effMask);
440 void SelectImplicitConeTargets(SpellEffIndex effIndex, SpellImplicitTargetInfo const& targetType, uint32 effMask);
441 void SelectImplicitAreaTargets(SpellEffIndex effIndex, SpellImplicitTargetInfo const& targetType, uint32 effMask);
447 void SelectImplicitChainTargets(SpellEffIndex effIndex, SpellImplicitTargetInfo const& targetType, WorldObject* target, uint32 effMask);
449
451
453 template<class SEARCHER> void SearchTargets(SEARCHER& searcher, uint32 containerMask, Unit* referer, Position const* pos, float radius);
454
455 WorldObject* SearchNearbyTarget(float range, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectionType, ConditionList* condList = NULL);
456 void SearchAreaTargets(std::list<WorldObject*>& targets, float range, Position const* position, Unit* referer, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectionType, ConditionList* condList);
457 void SearchChainTargets(std::list<WorldObject*>& targets, uint32 chainTargets, WorldObject* target, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectType, ConditionList* condList, bool isChainHeal);
458
460
461 void prepare(SpellCastTargets const* targets, AuraEffect const* triggeredByAura = NULL);
462 void cancel();
463 void update(uint32 difftime);
464 void cast(bool skipCheck = false);
465 void finish(bool ok = true);
466 void TakePower();
467
468 void TakeRunePower(bool didHit);
469 void TakeReagents();
470 void TakeCastItem();
471
472 SpellCastResult CheckCast(bool strict);
474
475 // handlers
476 void handle_immediate();
477 uint64 handle_delayed(uint64 t_offset);
478 // handler helpers
481
483 SpellCastResult CheckRange(bool strict);
488
489 int32 CalculateDamage(uint8 i, Unit const* target) const { return m_caster->CalculateSpellDamage(target, m_spellInfo, i, &m_spellValue->EffectBasePoints[i]); }
490
491 bool HaveTargetsForEffect(uint8 effect) const;
492 void Delayed();
493 void DelayedChannel();
494 uint32 getState() const { return m_spellState; }
495 void setState(uint32 state) { m_spellState = state; }
496
497 void DoCreateItem(uint32 i, uint32 itemtype);
498
499 bool CheckEffectTarget(Unit const* target, uint32 eff) const;
500 bool CanAutoCast(Unit* target);
501 void CheckSrc() { if (!m_targets.HasSrc()) m_targets.SetSrc(*m_caster); }
502 void CheckDst() { if (!m_targets.HasDst()) m_targets.SetDst(*m_caster); }
503
504 static void SendCastResult(Player* caster, SpellInfo const* spellInfo, uint8 cast_count, SpellCastResult result, SpellCustomErrors customError = SPELL_CUSTOM_ERROR_NONE, Opcodes opcode = SMSG_CAST_FAILED);
505 void SendCastResult(SpellCastResult result);
507 void SendSpellStart();
508 void SendSpellGo();
509 void SendSpellCooldown();
510 void SendLogExecute();
511 void ExecuteLogEffectTakeTargetPower(uint8 effIndex, Unit* target, uint32 powerType, uint32 powerTaken, float gainMultiplier);
512 void ExecuteLogEffectExtraAttacks(uint8 effIndex, Unit* victim, uint32 attCount);
513 void ExecuteLogEffectInterruptCast(uint8 effIndex, Unit* victim, uint32 spellId);
514 void ExecuteLogEffectDurabilityDamage(uint8 effIndex, Unit* victim, int32 itemId, int32 slot);
515 void ExecuteLogEffectOpenLock(uint8 effIndex, Object* obj);
516 void ExecuteLogEffectCreateItem(uint8 effIndex, uint32 entry);
517 void ExecuteLogEffectDestroyItem(uint8 effIndex, uint32 entry);
520 void ExecuteLogEffectResurrect(uint8 effIndex, Unit* target);
521 void SendInterrupted(uint8 result);
522 void SendChannelUpdate(uint32 time);
523 void SendChannelStart(uint32 duration);
524 void SendResurrectRequest(Player* target);
525
526 void HandleHolyPower(Player* caster);
527 void HandleEffects(Unit* pUnitTarget, Item* pItemTarget, GameObject* pGOTarget, uint32 i, SpellEffectHandleMode mode);
528 void HandleThreatSpells();
529
530 SpellInfo const* const m_spellInfo;
539
541
542 int32 GetCastTime() const { return m_casttime; }
543 bool IsAutoRepeat() const { return m_autoRepeat; }
544 void SetAutoRepeat(bool rep) { m_autoRepeat = rep; }
545 void ReSetTimer() { m_timer = m_casttime > 0 ? m_casttime : 0; }
546 bool IsNextMeleeSwingSpell() const;
548 bool IsChannelActive() const { return m_caster->GetUInt32Value(UNIT_FIELD_CHANNEL_SPELL) != 0; }
549 bool IsAutoActionResetSpell() const;
550
553 bool IsInterruptable() const { return !m_executedCurrently; }
556 void SetDelayStart(uint64 m_time) { m_delayStart = m_time; }
558
559 bool IsNeedSendToClient() const;
560
562
563 Unit* GetCaster() const { return m_caster; }
565 SpellInfo const* GetSpellInfo() const { return m_spellInfo; }
566 int32 GetPowerCost() const { return m_powerCost; }
567 int32 GetPowerType() const { return m_powerType; }
568
569 void UpdatePointers(); // must be used at call Spell code after time delay (non triggered spell cast/update spell call/etc)
570
571 void CleanupTargetList();
572
573 void SetSpellValue(SpellValueMod mod, int32 value);
574protected:
575 bool HasGlobalCooldown() const;
578
579 void SendLoot(uint64 guid, LootType loottype);
580
582
584
585 uint64 m_originalCasterGUID; // real source of cast (aura caster/etc), used for spell targets selection
586 // e.g. damage around area spell trigered by victim aura and damage enemies of aura caster
587 Unit* m_originalCaster; // cached pointer for m_originalCaster, updated at Spell::UpdatePointers()
588
589 Spell** m_selfContainer; // pointer to our spell container (if applicable)
590
591 //Spell data
592 SpellSchoolMask m_spellSchoolMask; // Spell school (can be overwrite for some spells (wand shoot for example)
593 WeaponAttackType m_attackType; // For weapon based attack
597 int32 m_powerCost; // Calculated spell cost initialized only in Spell::prepare
598 int32 m_casttime; // Calculated spell cast time initialized only in Spell::prepare
599 bool m_canReflect; // can reflect this spell?
602
605 {
606 if (m_delayAtDamageCount >= 2)
607 return true;
608
610 return false;
611 }
612
613 // Delayed spells system
614 uint64 m_delayStart; // time of spell delay start, filled by event handler, zero = just started
615 uint64 m_delayMoment; // moment of next delay call, used internally
616 bool m_immediateHandled; // were immediate actions handled? (used by delayed spells only)
617
618 // These vars are used in both delayed spell system and modified immediate spell system
619 bool m_referencedFromCurrentSpell; // mark as references to prevent deleted and access by dead pointers
620 bool m_executedCurrently; // mark as executed to prevent deleted and access by dead pointers
624
625 // Current targets, to be used in SpellEffects (MUST BE USED ONLY IN SPELL EFFECTS)
632 // used in effects handlers
634
635 // this is set in Spell Hit, but used in Apply Aura handler
638
639 // -------------------------------------------
641
642 // Damage and healing in effects need just calculate
643 int32 m_damage; // Damge in effects count here
644 int32 m_healing; // Healing in effects count here
645
646 // ******************************************
647 // Spell trigger system
648 // ******************************************
649 uint32 m_procAttacker; // Attacker trigger flags
650 uint32 m_procVictim; // Victim trigger flags
652 void prepareDataForTriggerSystem(AuraEffect const* triggeredByAura);
653
654 // *****************************************
655 // Spell target subsystem
656 // *****************************************
657 // Targets store structures and data
671 std::list<TargetInfo> m_UniqueTargetInfo;
672 uint8 m_channelTargetEffectMask; // Mask req. alive targets
673
681 std::list<GOTargetInfo> m_UniqueGOTargetInfo;
682
688 std::list<ItemTargetInfo> m_UniqueItemInfo;
689
691
692 void AddUnitTarget(Unit* target, uint32 effectMask, bool checkIfValid = true, bool implicit = true);
693 void AddGOTarget(GameObject* target, uint32 effectMask);
694 void AddItemTarget(Item* item, uint32 effectMask);
695 void AddDestTarget(SpellDestination const& dest, uint32 effIndex);
696
697 void DoAllEffectOnTarget(TargetInfo* target);
698 SpellMissInfo DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleAura);
699 void DoTriggersOnSpellHit(Unit* unit, uint32 effMask);
700 void DoAllEffectOnTarget(GOTargetInfo* target);
703 bool IsValidDeadOrAliveTarget(Unit const* target) const;
704 void HandleLaunchPhase();
705 void DoAllEffectOnLaunchTarget(TargetInfo& targetInfo, float* multiplier);
706
709
710 // spell execution log
711 void CheckEffectExecuteData() const;
712
713 // Scripting system
714 void LoadScripts();
724 void CallScriptObjectAreaTargetSelectHandlers(std::list<WorldObject*>& targets, SpellEffIndex effIndex);
726 bool CheckScriptEffectImplicitTargets(uint32 effIndex, uint32 effIndexToCheck);
727 std::list<SpellScript*> m_loadedScripts;
728
730 {
733 // uint8 triggeredByEffIdx This might be needed at a later stage - No need known for now
735 };
736
737 bool CanExecuteTriggersOnHit(uint32 effMask, SpellInfo const* triggeredByAura = NULL) const;
739 typedef std::list<HitTriggerSpell> HitTriggerSpellList;
741
742 // effect helpers
743 void SummonGuardian(uint32 i, uint32 entry, SummonPropertiesEntry const* properties, uint32 numSummons);
744 void CalculateJumpSpeeds(uint8 i, float dist, float& speedxy, float& speedz);
745
746 SpellCastResult CanOpenLock(uint32 effIndex, uint32 lockid, SkillType& skillid, int32& reqSkillValue, int32& skillValue);
747 // -------------------------------------------
748
751
753
754 // if need this can be replaced by Aura copy
755 // we can't store original aura link to prevent access to deleted auras
756 // and in same time need aura data and after aura deleting.
758
762
763 typedef std::map<uint32, SpellLogHelper> LogHelperMap;
765
766#ifdef MAP_BASED_RAND_GEN
767 int32 irand(int32 min, int32 max) { return int32(m_caster->GetMap()->mtRand.randInt(max - min)) + min; }
768 uint32 urand(uint32 min, uint32 max) { return m_caster->GetMap()->mtRand.randInt(max - min) + min; }
769 int32 rand32() { return m_caster->GetMap()->mtRand.randInt(); }
770 double rand_norm() { return m_caster->GetMap()->mtRand.randExc(); }
771 double rand_chance() { return m_caster->GetMap()->mtRand.randExc(100.0); }
772#endif
773private:
774 Spell(Spell const& right) = delete;
775 Spell& operator=(Spell const& right) = delete;
776};
777
778namespace Skyfire
779{
794
796 {
797 float _range;
799 WorldObjectSpellNearbyTargetCheck(float range, Unit* caster, SpellInfo const* spellInfo,
800 SpellTargetCheckTypes selectionType, ConditionList* condList);
801 bool operator()(WorldObject* target);
802 };
803
805 {
806 float _range;
808 WorldObjectSpellAreaTargetCheck(float range, Position const* position, Unit* caster,
809 Unit* referer, SpellInfo const* spellInfo, SpellTargetCheckTypes selectionType, ConditionList* condList);
810 bool operator()(WorldObject* target);
811 };
812
814 {
816 WorldObjectSpellConeTargetCheck(float coneAngle, float range, Unit* caster,
817 SpellInfo const* spellInfo, SpellTargetCheckTypes selectionType, ConditionList* condList);
818 bool operator()(WorldObject* target);
819 };
820
822 {
823 WorldObjectSpellTrajTargetCheck(float range, Position const* position, Unit* caster, SpellInfo const* spellInfo);
824 bool operator()(WorldObject* target);
825 };
826}
827
828typedef void(Spell::* pEffect)(SpellEffIndex effIndex);
829
830class SpellEvent : public BasicEvent
831{
832public:
833 SpellEvent(Spell* spell);
834 virtual ~SpellEvent();
835
836 virtual bool Execute(uint64 e_time, uint32 p_time);
837 virtual void Abort(uint64 e_time);
838 virtual bool IsDeletable() const;
839protected:
841};
842#endif
std::list< Condition * > ConditionList
#define MAX_SPELL_EFFECTS
std::int32_t int32
Definition Define.h:73
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
std::int8_t int8
Definition Define.h:75
std::uint64_t uint64
Definition Define.h:76
LootType
Definition LootMgr.h:66
#define MAPID_INVALID
Definition Object.h:531
SpellEffIndex
DiminishingGroup
SpellCustomErrors
@ SPELL_CUSTOM_ERROR_NONE
DiminishingLevels
SpellMissInfo
SkillType
SpellSchoolMask
SpellCastResult
SpellRangeFlag
Definition Spell.h:67
@ SPELL_RANGE_MELEE
Definition Spell.h:69
@ SPELL_RANGE_RANGED
Definition Spell.h:70
@ SPELL_RANGE_DEFAULT
Definition Spell.h:68
SpellEffectHandleMode
Definition Spell.h:273
@ SPELL_EFFECT_HANDLE_LAUNCH_TARGET
Definition Spell.h:275
@ SPELL_EFFECT_HANDLE_LAUNCH
Definition Spell.h:274
@ SPELL_EFFECT_HANDLE_HIT
Definition Spell.h:276
@ SPELL_EFFECT_HANDLE_HIT_TARGET
Definition Spell.h:277
SpellState
Definition Spell.h:263
@ SPELL_STATE_DELAYED
Definition Spell.h:269
@ SPELL_STATE_NULL
Definition Spell.h:264
@ SPELL_STATE_FINISHED
Definition Spell.h:267
@ SPELL_STATE_PREPARING
Definition Spell.h:265
@ SPELL_STATE_CASTING
Definition Spell.h:266
@ SPELL_STATE_IDLE
Definition Spell.h:268
SpellCastFlags
Definition Spell.h:30
@ CAST_FLAG_UNKNOWN_5
Definition Spell.h:36
@ CAST_FLAG_UNKNOWN_10
Definition Spell.h:41
@ CAST_FLAG_UNKNOWN_19
Definition Spell.h:50
@ CAST_FLAG_UNKNOWN_32
Definition Spell.h:63
@ CAST_FLAG_UNKNOWN_25
Definition Spell.h:56
@ CAST_FLAG_VISUAL_CHAIN
Definition Spell.h:51
@ CAST_FLAG_ADJUST_MISSILE
Definition Spell.h:49
@ CAST_FLAG_UNKNOWN_8
Definition Spell.h:39
@ CAST_FLAG_HEAL_PREDICTION
Definition Spell.h:62
@ CAST_FLAG_UNKNOWN_9
Definition Spell.h:40
@ CAST_FLAG_UNKNOWN_3
Definition Spell.h:34
@ CAST_FLAG_UNKNOWN_26
Definition Spell.h:57
@ CAST_FLAG_UNKNOWN_11
Definition Spell.h:42
@ CAST_FLAG_UNKNOWN_30
Definition Spell.h:61
@ CAST_FLAG_UNKNOWN_4
Definition Spell.h:35
@ CAST_FLAG_UNKNOWN_23
Definition Spell.h:54
@ CAST_FLAG_UNKNOWN_16
Definition Spell.h:47
@ CAST_FLAG_PROJECTILE
Definition Spell.h:37
@ CAST_FLAG_UNKNOWN_29
Definition Spell.h:60
@ CAST_FLAG_UNKNOWN_7
Definition Spell.h:38
@ CAST_FLAG_POWER_LEFT_SELF
Definition Spell.h:43
@ CAST_FLAG_UNKNOWN_13
Definition Spell.h:44
@ CAST_FLAG_UNKNOWN_28
Definition Spell.h:59
@ CAST_FLAG_UNKNOWN_24
Definition Spell.h:55
@ CAST_FLAG_HAS_TRAJECTORY
Definition Spell.h:33
@ CAST_FLAG_RUNE_LIST
Definition Spell.h:53
@ CAST_FLAG_UNKNOWN_14
Definition Spell.h:45
@ CAST_FLAG_UNKNOWN_15
Definition Spell.h:46
@ CAST_FLAG_PENDING
Definition Spell.h:32
@ CAST_FLAG_NONE
Definition Spell.h:31
@ CAST_FLAG_UNKNOWN_17
Definition Spell.h:48
@ CAST_FLAG_IMMUNITY
Definition Spell.h:58
@ CAST_FLAG_UNKNOWN_21
Definition Spell.h:52
void(Spell::* pEffect)(SpellEffIndex effIndex)
Definition Spell.h:828
SpellTargetCheckTypes
SpellCastTargetFlags
@ TARGET_FLAG_DEST_LOCATION
@ TARGET_FLAG_SOURCE_LOCATION
SpellTargetObjectTypes
WeaponAttackType
Definition Unit.h:572
SpellValueMod
Definition Unit.h:113
TriggerCastFlags
Definition Unit.h:415
@ TRIGGERED_FULL_MASK
Will ignore most target checks (mostly DBC target checks).
Definition Unit.h:435
CurrentSpellTypes
Definition Unit.h:1107
@ UNIT_FIELD_CHANNEL_SPELL
int32 rand32()
Definition Util.cpp:45
double rand_norm(void)
Definition Util.cpp:50
double rand_chance(void)
Definition Util.cpp:55
Definition Item.h:202
SpellDestination const * GetSrc() const
Definition Spell.cpp:332
void SetItemTarget(Item *item)
Definition Spell.cpp:303
void RemoveObjectTarget()
Definition Spell.cpp:296
WorldObject * GetObjectTarget() const
Definition Spell.cpp:286
void OutDebug() const
Definition Spell.cpp:469
uint64 GetGOTargetGUID() const
Definition Spell.cpp:238
uint64 GetObjectTargetGUID() const
Definition Spell.cpp:291
uint64 GetCorpseTargetGUID() const
Definition Spell.cpp:268
void ModDst(Position const &pos)
Definition Spell.cpp:412
GameObject * GetGOTarget() const
Definition Spell.cpp:251
void SetTradeItemTarget(Player *caster)
Definition Spell.cpp:314
SpellDestination m_dst
Definition Spell.h:247
bool HasSrc() const
Definition Spell.h:216
bool HasTraj() const
Definition Spell.h:218
Corpse * GetCorpseTarget() const
Definition Spell.cpp:279
uint64 m_objectTargetGUID
Definition Spell.h:242
void SetDst(float x, float y, float z, float orientation, uint32 mapId=MAPID_INVALID)
Definition Spell.cpp:388
void SetSpeed(float speed)
Definition Spell.h:223
uint64 m_itemTargetGUID
Definition Spell.h:243
void SetSrc(float x, float y, float z)
Definition Spell.cpp:342
void SetTargetFlag(SpellCastTargetFlags flag)
Definition Spell.h:175
SpellDestination const * GetDst() const
Definition Spell.cpp:378
float GetElevation() const
Definition Spell.h:220
void Initialize(uint32 flags, uint64 target, uint64 itemTarget, uint64 dest, WorldLocation destPos, uint64 src, WorldLocation srcPos)
Definition Spell.h:153
void SetTargetMask(uint32 newMask)
Definition Spell.h:173
void SetGOTarget(GameObject *target)
Definition Spell.cpp:258
std::string m_strTarget
Definition Spell.h:250
float m_speed
Definition Spell.h:249
void UpdateTradeSlotItem()
Definition Spell.cpp:323
SpellDestination m_src
Definition Spell.h:246
float GetSpeedZ() const
Definition Spell.h:227
float GetSpeed() const
Definition Spell.h:222
float m_elevation
Definition Spell.h:249
void SetUnitTarget(Unit *target)
Definition Spell.cpp:228
void Read(ByteBuffer &data, Unit *caster)
Definition Spell.cpp:117
uint32 m_targetMask
Definition Spell.h:235
bool HasDst() const
Definition Spell.h:217
WorldObject * m_objectTarget
Definition Spell.h:238
Item * GetItemTarget() const
Definition Spell.h:193
uint32 GetTargetMask() const
Definition Spell.h:172
void SetElevation(float elevation)
Definition Spell.h:221
uint32 GetItemTargetEntry() const
Definition Spell.h:194
Unit * GetUnitTarget() const
Definition Spell.cpp:221
float GetSpeedXY() const
Definition Spell.h:226
void Update(Unit *caster)
Definition Spell.cpp:430
uint64 GetUnitTargetGUID() const
Definition Spell.cpp:207
float GetDist2d() const
Definition Spell.h:225
uint32 m_itemTargetEntry
Definition Spell.h:244
uint64 GetItemTargetGUID() const
Definition Spell.h:192
void ModSrc(Position const &pos)
Definition Spell.cpp:360
void RemoveDst()
Definition Spell.cpp:425
void RemoveSrc()
Definition Spell.cpp:373
std::string const & GetTargetString()
Definition Spell.h:232
void Write(ByteBuffer &data)
Definition Spell.cpp:170
Position const * GetSrcPos() const
Definition Spell.cpp:337
WorldLocation const * GetDstPos() const
Definition Spell.cpp:383
Item * m_itemTarget
Definition Spell.h:239
virtual ~SpellEvent()
Definition Spell.cpp:7366
Spell * m_Spell
Definition Spell.h:840
virtual bool IsDeletable() const
Definition Spell.cpp:7477
SpellEvent(Spell *spell)
Definition Spell.cpp:7361
virtual void Abort(uint64 e_time)
Definition Spell.cpp:7470
virtual bool Execute(uint64 e_time, uint32 p_time)
Definition Spell.cpp:7383
Definition Spell.h:289
void SelectImplicitDestDestTargets(SpellEffIndex effIndex, SpellImplicitTargetInfo const &targetType)
Definition Spell.cpp:1488
void CheckDst()
Definition Spell.h:502
void UpdatePointers()
Definition Spell.cpp:7210
SpellInfo const * GetSpellInfo() const
Definition Spell.h:565
int8 m_comboPointGain
Definition Spell.h:536
void CallScriptAfterCastHandlers()
Definition Spell.cpp:7744
void HandleHolyPower(Player *caster)
Definition Spell.cpp:5482
void EffectHealPct(SpellEffIndex effIndex)
GameObject * SearchSpellFocus()
Definition Spell.cpp:2039
void EffectPowerBurn(SpellEffIndex effIndex)
void EffectSummonRaFFriend(SpellEffIndex effIndex)
void EffectDismissPet(SpellEffIndex effIndex)
GameObject * gameObjTarget
Definition Spell.h:628
void EffectModifyThreatPercent(SpellEffIndex effIndex)
void PrepareTriggersExecutedOnHit()
Definition Spell.cpp:7932
void EffectInebriate(SpellEffIndex effIndex)
bool m_referencedFromCurrentSpell
Definition Spell.h:619
bool m_canReflect
Definition Spell.h:599
uint32 m_procVictim
Definition Spell.h:650
void EffectDurabilityDamage(SpellEffIndex effIndex)
void EffectMilling(SpellEffIndex effIndex)
Unit * m_originalCaster
Definition Spell.h:587
void EffectApplyAura(SpellEffIndex effIndex)
void LoadScripts()
Definition Spell.cpp:7699
void EffectEnchantItemTmp(SpellEffIndex effIndex)
void EffectGiveCurrency(SpellEffIndex effIndex)
void EffectTriggerRitualOfSummoning(SpellEffIndex effIndex)
void EffectTameCreature(SpellEffIndex effIndex)
void EffectJump(SpellEffIndex effIndex)
void SummonGuardian(uint32 i, uint32 entry, SummonPropertiesEntry const *properties, uint32 numSummons)
void EffectDamageFromMaxHealthPCT(SpellEffIndex effIndex)
void cast(bool skipCheck=false)
Definition Spell.cpp:3266
void EffectSummonType(SpellEffIndex effIndex)
void EffectActivateSpec(SpellEffIndex effIndex)
void SendChannelStart(uint32 duration)
Definition Spell.cpp:5041
bool m_needComboPoints
Definition Spell.h:621
static void SendCastResult(Player *caster, SpellInfo const *spellInfo, uint8 cast_count, SpellCastResult result, SpellCustomErrors customError=SPELL_CUSTOM_ERROR_NONE, Opcodes opcode=SMSG_CAST_FAILED)
Definition Spell.cpp:3874
uint64 m_delayStart
Definition Spell.h:614
SpellCastTargets m_targets
Definition Spell.h:535
void EffectLearnSpell(SpellEffIndex effIndex)
void EffectOpenLock(SpellEffIndex effIndex)
void setState(uint32 state)
Definition Spell.h:495
void EffectNULL(SpellEffIndex effIndex)
void SendPetCastResult(SpellCastResult result)
Definition Spell.cpp:3862
void EffectDisEnchant(SpellEffIndex effIndex)
void EffectPlayMusic(SpellEffIndex effIndex)
void SearchChainTargets(std::list< WorldObject * > &targets, uint32 chainTargets, WorldObject *target, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectType, ConditionList *condList, bool isChainHeal)
Definition Spell.cpp:1943
void EffectResurrectNew(SpellEffIndex effIndex)
void EffectAddFarsight(SpellEffIndex effIndex)
Unit * GetCaster() const
Definition Spell.h:563
void EffectStuck(SpellEffIndex effIndex)
void EffectSendEvent(SpellEffIndex effIndex)
void EffectStealBeneficialBuff(SpellEffIndex effIndex)
void EffectQuestStart(SpellEffIndex effIndex)
void SelectEffectImplicitTargets(SpellEffIndex effIndex, SpellImplicitTargetInfo const &targetType, uint32 &processedEffectMask)
Definition Spell.cpp:819
void SelectExplicitTargets()
Definition Spell.cpp:701
void handle_immediate()
Definition Spell.cpp:3462
void SendSpellGo()
Definition Spell.cpp:4341
TriggerCastFlags _triggeredCastFlags
Definition Spell.h:752
bool IsAutoRepeat() const
Definition Spell.h:543
int32 damage
Definition Spell.h:630
void SetSpellValue(SpellValueMod mod, int32 value)
Definition Spell.cpp:7659
void prepareDataForTriggerSystem(AuraEffect const *triggeredByAura)
Definition Spell.cpp:2048
void EffectSummonPet(SpellEffIndex effIndex)
void EffectForceCast(SpellEffIndex effIndex)
void EffectLearnSkill(SpellEffIndex effIndex)
void ExecuteLogEffectSummonObject(uint8 effIndex, WorldObject *obj)
Definition Spell.cpp:4970
SpellCastResult CanOpenLock(uint32 effIndex, uint32 lockid, SkillType &skillid, int32 &reqSkillValue, int32 &skillValue)
Definition Spell.cpp:7597
void EffectJumpDest(SpellEffIndex effIndex)
void EffectDummy(SpellEffIndex effIndex)
SpellEffectHandleMode effectHandleMode
Definition Spell.h:631
void TakeReagents()
Definition Spell.cpp:5383
bool IsValidDeadOrAliveTarget(Unit const *target) const
Definition Spell.cpp:7482
void EffectDodge(SpellEffIndex effIndex)
Aura * m_spellAura
Definition Spell.h:633
uint32 GetSearcherTypeMask(SpellTargetObjectTypes objType, ConditionList *condList) const
Definition Spell.cpp:1853
void EffectThreat(SpellEffIndex effIndex)
bool IsNeedSendToClient() const
Definition Spell.cpp:7338
void EffectEnergizePct(SpellEffIndex effIndex)
SpellResearchData const * m_researchData
Definition Spell.h:538
void CallScriptObjectAreaTargetSelectHandlers(std::list< WorldObject * > &targets, SpellEffIndex effIndex)
Definition Spell.cpp:7869
void EffectEnchantItemPerm(SpellEffIndex effIndex)
void SelectImplicitConeTargets(SpellEffIndex effIndex, SpellImplicitTargetInfo const &targetType, uint32 effMask)
Definition Spell.cpp:1061
SpellDestination m_destTargets[MAX_SPELL_EFFECTS]
Definition Spell.h:690
void EffectPullTowards(SpellEffIndex effIndex)
void EffectTitanGrip(SpellEffIndex effIndex)
Unit *const m_caster
Definition Spell.h:581
bool IsInterruptable() const
Definition Spell.h:553
void _handle_finish_phase()
Definition Spell.cpp:3628
void PrepareTargetProcessing()
Definition Spell.cpp:7684
void EffectActivateObject(SpellEffIndex effIndex)
void SetExecutedCurrently(bool yes)
Definition Spell.h:554
void SendSpellStart()
Definition Spell.cpp:4012
int32 m_powerType
Definition Spell.h:594
Spell(Unit *caster, SpellInfo const *info, TriggerCastFlags triggerFlags, uint64 originalCasterGUID=0, bool skipCheck=false)
Definition Spell.cpp:500
void EffectChargeDest(SpellEffIndex effIndex)
uint8 m_delayAtDamageCount
Definition Spell.h:603
void EffectPickPocket(SpellEffIndex effIndex)
void SendChannelUpdate(uint32 time)
Definition Spell.cpp:5023
void EffectProspecting(SpellEffIndex effIndex)
void EffectResurrectWithAura(SpellEffIndex effIndex)
uint64 m_delayMoment
Definition Spell.h:615
std::list< HitTriggerSpell > HitTriggerSpellList
Definition Spell.h:739
void EffectSummonPlayer(SpellEffIndex effIndex)
SpellCastResult CheckItems()
Definition Spell.cpp:6695
void prepare(SpellCastTargets const *targets, AuraEffect const *triggeredByAura=NULL)
Definition Spell.cpp:2939
void EffectEnchantHeldItem(SpellEffIndex effIndex)
std::list< GOTargetInfo > m_UniqueGOTargetInfo
Definition Spell.h:681
void SendLogExecute()
Definition Spell.cpp:4804
WeaponAttackType m_attackType
Definition Spell.h:593
void EffectDurabilityDamagePCT(SpellEffIndex effIndex)
void SendInterrupted(uint8 result)
Definition Spell.cpp:4988
void EffectRemoveAura(SpellEffIndex effIndex)
uint64 m_originalCasterGUID
Definition Spell.h:585
void EffectDuel(SpellEffIndex effIndex)
bool m_immediateHandled
Definition Spell.h:616
uint32 m_spellState
Definition Spell.h:749
LogHelperMap m_effectExecuteData
Definition Spell.h:764
int32 GetCastTime() const
Definition Spell.h:542
bool IsDeletable() const
Definition Spell.h:551
bool UpdateChanneledTargetList()
Definition Spell.cpp:2882
void CleanupTargetList()
Definition Spell.cpp:2128
void TriggerGlobalCooldown()
Definition Spell.cpp:7979
int32 m_timer
Definition Spell.h:750
int32 m_casttime
Definition Spell.h:598
void SearchTargets(SEARCHER &searcher, uint32 containerMask, Unit *referer, Position const *pos, float radius)
Definition Spell.cpp:1888
void ExecuteLogEffectOpenLock(uint8 effIndex, Object *obj)
Definition Spell.cpp:4952
void EffectPersistentAA(SpellEffIndex effIndex)
void EffectCreateAreaTrigger(SpellEffIndex effIndex)
Item * itemTarget
Definition Spell.h:627
void AddGOTarget(GameObject *target, uint32 effectMask)
Definition Spell.cpp:2244
void EffectSummonDeadPet(SpellEffIndex effIndex)
void EffectBlock(SpellEffIndex effIndex)
void HandleThreatSpells()
Definition Spell.cpp:5431
void EffectParry(SpellEffIndex effIndex)
void SelectImplicitChainTargets(SpellEffIndex effIndex, SpellImplicitTargetInfo const &targetType, WorldObject *target, uint32 effMask)
Definition Spell.cpp:1588
uint8 m_cast_count
Definition Spell.h:533
int32 m_damage
Definition Spell.h:643
void ExecuteLogEffectTakeTargetPower(uint8 effIndex, Unit *target, uint32 powerType, uint32 powerTaken, float gainMultiplier)
Definition Spell.cpp:4902
void EffectCastButtons(SpellEffIndex effIndex)
void CancelGlobalCooldown()
Definition Spell.cpp:8013
void EffectTeleportUnits(SpellEffIndex effIndex)
int32 CalculateDamage(uint8 i, Unit const *target) const
Definition Spell.h:489
void EffectKillCreditPersonal(SpellEffIndex effIndex)
void EffectGameObjectDamage(SpellEffIndex effIndex)
uint32 getState() const
Definition Spell.h:494
bool m_executedCurrently
Definition Spell.h:620
void EffectEnchantItemPrismatic(SpellEffIndex effIndex)
void EffectInterruptCast(SpellEffIndex effIndex)
void EffectHealthLeech(SpellEffIndex effIndex)
void PrepareScriptHitHandlers()
Definition Spell.cpp:7776
DiminishingLevels m_diminishLevel
Definition Spell.h:636
void CallScriptOnCastHandlers()
Definition Spell.cpp:7731
void AddDestTarget(SpellDestination const &dest, uint32 effIndex)
Definition Spell.cpp:2340
std::map< uint32, SpellLogHelper > LogHelperMap
Definition Spell.h:763
void EffectCharge(SpellEffIndex effIndex)
void SelectImplicitTargetDestTargets(SpellEffIndex effIndex, SpellImplicitTargetInfo const &targetType)
Definition Spell.cpp:1461
void EffectTriggerMissileSpell(SpellEffIndex effIndex)
void EffectApplyAreaAura(SpellEffIndex effIndex)
float m_damageMultipliers[3]
Definition Spell.h:623
void EffectUnlearnSpecialization(SpellEffIndex effIndex)
bool HaveTargetsForEffect(uint8 effect) const
Definition Spell.cpp:7344
void HandleEffects(Unit *pUnitTarget, Item *pItemTarget, GameObject *pGOTarget, uint32 i, SpellEffectHandleMode mode)
Definition Spell.cpp:5517
void EffectDispel(SpellEffIndex effIndex)
void _handle_immediate_phase()
Definition Spell.cpp:3586
void SendSpellCooldown()
Definition Spell.cpp:3650
void EffectDiscoverTaxi(SpellEffIndex effIndex)
SpellCastResult CheckCasterAuras() const
Definition Spell.cpp:6398
void EffectLearnPetSpell(SpellEffIndex effIndex)
void DoAllEffectOnLaunchTarget(TargetInfo &targetInfo, float *multiplier)
Definition Spell.cpp:7547
void CallScriptBeforeCastHandlers()
Definition Spell.cpp:7718
uint8 m_auraScaleMask
Definition Spell.h:760
int32 m_periodicPowerCost
Definition Spell.h:596
void SelectImplicitAreaTargets(SpellEffIndex effIndex, SpellImplicitTargetInfo const &targetType, uint32 effMask)
Definition Spell.cpp:1111
void EffectCreateItem2(SpellEffIndex effIndex)
void HandleLaunchPhase()
Definition Spell.cpp:7491
void EffectKillCredit(SpellEffIndex effIndex)
void EffectPowerDrain(SpellEffIndex effIndex)
void EffectSummonChangeItem(SpellEffIndex effIndex)
SpellCustomErrors m_customError
Definition Spell.h:537
bool CallScriptEffectHandlers(SpellEffIndex effIndex, SpellEffectHandleMode mode)
Definition Spell.cpp:7782
Spell(Spell const &right)=delete
void SelectImplicitChannelTargets(SpellEffIndex effIndex, SpellImplicitTargetInfo const &targetType)
Definition Spell.cpp:925
void SelectImplicitTargetObjectTargets(SpellEffIndex effIndex, SpellImplicitTargetInfo const &targetType)
Definition Spell.cpp:1566
void CallScriptObjectTargetSelectHandlers(WorldObject *&target, SpellEffIndex effIndex)
Definition Spell.cpp:7883
void EffectSpecCount(SpellEffIndex effIndex)
void EffectLeap(SpellEffIndex effIndex)
void EffectTeleUnitsFaceCaster(SpellEffIndex effIndex)
void EffectRechargeManaGem(SpellEffIndex effIndex)
void EffectSchoolDMG(SpellEffIndex effIndex)
void EffectSkill(SpellEffIndex effIndex)
void EffectReputation(SpellEffIndex effIndex)
bool m_skipCheck
Definition Spell.h:759
void EffectDestroyItem(SpellEffIndex effIndex)
PathGenerator m_preGeneratedPath
Definition Spell.h:761
HitTriggerSpellList m_hitTriggerSpells
Definition Spell.h:740
int32 m_periodicPowerTimer
Definition Spell.h:595
int32 m_healing
Definition Spell.h:644
void EffectHealMechanical(SpellEffIndex effIndex)
bool CheckEffectTarget(Unit const *target, uint32 eff) const
Definition Spell.cpp:7263
void SetDelayStart(uint64 m_time)
Definition Spell.h:556
void EffectAddExtraAttacks(SpellEffIndex effIndex)
uint32 m_glyphIndex
Definition Spell.h:534
void EffectUnlockGuildVaultTab(SpellEffIndex effIndex)
SpellCastResult CheckPower()
Definition Spell.cpp:6659
SpellInfo const * m_triggeredByAuraSpell
Definition Spell.h:757
uint64 handle_delayed(uint64 t_offset)
Definition Spell.cpp:3517
void SearchAreaTargets(std::list< WorldObject * > &targets, float range, Position const *position, Unit *referer, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectionType, ConditionList *condList)
Definition Spell.cpp:1933
uint8 m_channelTargetEffectMask
Definition Spell.h:672
void SelectImplicitCasterObjectTargets(SpellEffIndex effIndex, SpellImplicitTargetInfo const &targetType)
Definition Spell.cpp:1521
CurrentSpellTypes GetCurrentContainer() const
Definition Spell.cpp:7251
std::list< TargetInfo > m_UniqueTargetInfo
Definition Spell.h:671
SpellMissInfo DoSpellHitOnUnit(Unit *unit, uint32 effectMask, bool scaleAura)
Definition Spell.cpp:2596
void AddUnitTarget(Unit *target, uint32 effectMask, bool checkIfValid=true, bool implicit=true)
Definition Spell.cpp:2136
Unit * unitTarget
Definition Spell.h:626
void Delayed()
Definition Spell.cpp:7124
SpellSchoolMask m_spellSchoolMask
Definition Spell.h:592
std::set< Aura * > UsedSpellMods
Definition Spell.h:428
void cancel()
Definition Spell.cpp:3210
std::list< SpellScript * > m_loadedScripts
Definition Spell.h:727
void EffectQuestClear(SpellEffIndex effIndex)
void ExecuteLogEffectUnsummonObject(uint8 effIndex, WorldObject *obj)
Definition Spell.cpp:4976
void EffectPlaySound(SpellEffIndex effIndex)
void SelectImplicitTrajTargets()
Definition Spell.cpp:1634
void SelectSpellTargets()
Definition Spell.cpp:730
void EffectEnergize(SpellEffIndex effIndex)
void ExecuteLogEffectInterruptCast(uint8 effIndex, Unit *victim, uint32 spellId)
Definition Spell.cpp:4914
void ExecuteLogEffectResurrect(uint8 effIndex, Unit *target)
Definition Spell.cpp:4982
bool IsChannelActive() const
Definition Spell.h:548
~Spell()
Definition Spell.cpp:604
void EffectUntrainTalents(SpellEffIndex effIndex)
void TakePower()
Definition Spell.cpp:5213
SpellCastResult CheckPetCast(Unit *target)
Definition Spell.cpp:6365
bool IsNextMeleeSwingSpell() const
Definition Spell.cpp:7327
void EffectWeaponDmg(SpellEffIndex effIndex)
void EffectEnvironmentalDMG(SpellEffIndex effIndex)
SpellCastResult CheckCast(bool strict)
Definition Spell.cpp:5539
Unit * GetOriginalCaster() const
Definition Spell.h:564
void EffectForceDeselect(SpellEffIndex effIndex)
void ReSetTimer()
Definition Spell.h:545
void SetAutoRepeat(bool rep)
Definition Spell.h:544
void EffectCreateItem(SpellEffIndex effIndex)
void EffectRenamePet(SpellEffIndex effIndex)
void EffectUnused(SpellEffIndex effIndex)
SpellCastResult CallScriptCheckCastHandlers()
Definition Spell.cpp:7757
void EffectRedirectThreat(SpellEffIndex effIndex)
void EffectLeapBack(SpellEffIndex effIndex)
std::list< ItemTargetInfo > m_UniqueItemInfo
Definition Spell.h:688
void SelectEffectTypeImplicitTargets(uint8 effIndex)
Definition Spell.cpp:1770
uint64 m_castItemGUID
Definition Spell.h:532
void ExecuteLogEffectCreateItem(uint8 effIndex, uint32 entry)
Definition Spell.cpp:4958
void InitExplicitTargets(SpellCastTargets const &targets)
Definition Spell.cpp:632
bool isDelayableNoMore()
Definition Spell.h:604
void EffectApplyGlyph(SpellEffIndex effIndex)
void EffectPull(SpellEffIndex effIndex)
void CallScriptBeforeHitHandlers()
Definition Spell.cpp:7830
void EffectGameObjectRepair(SpellEffIndex effIndex)
void EffectFeedPet(SpellEffIndex effIndex)
void CalculateJumpSpeeds(uint8 i, float dist, float &speedxy, float &speedz)
void EffectDestroyAllTotems(SpellEffIndex effIndex)
WorldLocation * destTarget
Definition Spell.h:629
void EffectResurrect(SpellEffIndex effIndex)
Spell ** m_selfContainer
Definition Spell.h:589
void EffectCreateTamedPet(SpellEffIndex effIndex)
void EffectSendTaxi(SpellEffIndex effIndex)
void EffectInstaKill(SpellEffIndex effIndex)
void EffectHealBattlePetPct(SpellEffIndex effIndex)
bool IsTriggered() const
Definition Spell.h:547
void EffectBattlePetsUnlock(SpellEffIndex effIndex)
uint8 m_applyMultiplierMask
Definition Spell.h:622
void DoTriggersOnSpellHit(Unit *unit, uint32 effMask)
Definition Spell.cpp:2790
void EffectCreateRandomItem(SpellEffIndex effIndex)
void SetReferencedFromCurrent(bool yes)
Definition Spell.h:552
void EffectRemoveTalent(SpellEffIndex effIndex)
bool CanExecuteTriggersOnHit(uint32 effMask, SpellInfo const *triggeredByAura=NULL) const
Definition Spell.cpp:7920
void EffectKnockBack(SpellEffIndex effIndex)
void EffectSummonObject(SpellEffIndex effIndex)
void ExecuteLogEffectDestroyItem(uint8 effIndex, uint32 entry)
Definition Spell.cpp:4964
void CheckEffectExecuteData() const
Definition Spell.cpp:7694
void update(uint32 difftime)
Definition Spell.cpp:3671
int32 GetPowerCost() const
Definition Spell.h:566
uint64 GetDelayStart() const
Definition Spell.h:555
void EffectBind(SpellEffIndex effIndex)
void SelectImplicitNearbyTargets(SpellEffIndex effIndex, SpellImplicitTargetInfo const &targetType, uint32 effMask)
Definition Spell.cpp:973
bool CheckScriptEffectImplicitTargets(uint32 effIndex, uint32 effIndexToCheck)
Definition Spell.cpp:7897
DiminishingGroup m_diminishGroup
Definition Spell.h:637
void EffectTriggerSpell(SpellEffIndex effIndex)
void EffectDualWield(SpellEffIndex effIndex)
void EffectDistract(SpellEffIndex effIndex)
uint32 m_procEx
Definition Spell.h:651
void SendLoot(uint64 guid, LootType loottype)
void EffectSummonObjectWild(SpellEffIndex effIndex)
Item * m_CastItem
Definition Spell.h:531
uint64 GetDelayMoment() const
Definition Spell.h:557
void AddItemTarget(Item *item, uint32 effectMask)
Definition Spell.cpp:2311
void EffectHealMaxHealth(SpellEffIndex effIndex)
void EffectSelfResurrect(SpellEffIndex effIndex)
UsedSpellMods m_appliedMods
Definition Spell.h:540
void TakeCastItem()
Definition Spell.cpp:5147
void CheckSrc()
Definition Spell.h:501
void EffectQuestComplete(SpellEffIndex effIndex)
SpellValue *const m_spellValue
Definition Spell.h:583
int32 m_powerCost
Definition Spell.h:597
void EffectSanctuary(SpellEffIndex effIndex)
void EffectGameObjectSetDestructionState(SpellEffIndex effIndex)
void SendResurrectRequest(Player *target)
Definition Spell.cpp:5108
void SelectImplicitCasterDestTargets(SpellEffIndex effIndex, SpellImplicitTargetInfo const &targetType)
Definition Spell.cpp:1378
void DoCreateItem(uint32 i, uint32 itemtype)
void EffectAddComboPoints(SpellEffIndex effIndex)
friend class SpellScript
Definition Spell.h:291
void EffectScriptEffect(SpellEffIndex effIndex)
void EffectPlayMovie(SpellEffIndex effIndex)
bool IsAutoActionResetSpell() const
Definition Spell.cpp:7332
void ExecuteLogEffectDurabilityDamage(uint8 effIndex, Unit *victim, int32 itemId, int32 slot)
Definition Spell.cpp:4946
void DelayedChannel()
Definition Spell.cpp:7170
uint32 m_procAttacker
Definition Spell.h:649
void EffectHeal(SpellEffIndex effIndex)
GameObject * focusObject
Definition Spell.h:640
void ExecuteLogEffectExtraAttacks(uint8 effIndex, Unit *victim, uint32 attCount)
Definition Spell.cpp:4908
void EffectSkinning(SpellEffIndex effIndex)
Spell & operator=(Spell const &right)=delete
void EffectDispelMechanic(SpellEffIndex effIndex)
WorldObject * SearchNearbyTarget(float range, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectionType, ConditionList *condList=NULL)
Definition Spell.cpp:1921
void finish(bool ok=true)
Definition Spell.cpp:3762
SpellCastResult CheckRange(bool strict)
Definition Spell.cpp:6599
void EffectActivateRune(SpellEffIndex effIndex)
SpellInfo const *const m_spellInfo
Definition Spell.h:530
int32 GetPowerType() const
Definition Spell.h:567
bool HasGlobalCooldown() const
Definition Spell.cpp:7968
void EffectSkinPlayerCorpse(SpellEffIndex effIndex)
uint8 m_runesState
Definition Spell.h:601
void FinishTargetProcessing()
Definition Spell.cpp:7689
void EffectTaunt(SpellEffIndex effIndex)
void EffectTradeSkill(SpellEffIndex effIndex)
void CallScriptOnHitHandlers()
Definition Spell.cpp:7843
bool m_autoRepeat
Definition Spell.h:600
void EffectProficiency(SpellEffIndex effIndex)
SpellCastResult CheckRuneCost(uint32 runeCostID)
Definition Spell.cpp:5273
void EffectTransmitted(SpellEffIndex effIndex)
void TakeRunePower(bool didHit)
Definition Spell.cpp:5320
void EffectSpiritHeal(SpellEffIndex effIndex)
SpellCastResult CheckArenaAndRatedBattlegroundCastRules()
Definition Spell.cpp:6528
void EffectQuestFail(SpellEffIndex effIndex)
void CallScriptAfterHitHandlers()
Definition Spell.cpp:7856
void DoAllEffectOnTarget(TargetInfo *target)
Definition Spell.cpp:2345
bool CanAutoCast(Unit *target)
Definition Spell.cpp:6559
Definition Unit.h:1367
void SetCurrentCastedSpell(Spell *pSpell)
Definition Unit.cpp:1289
Map * GetMap() const
Definition Object.h:740
Opcodes
List of Opcodes.
Definition Opcodes.h:21
@ SMSG_CAST_FAILED
Definition Opcodes.h:595
WorldObjectSpellAreaTargetCheck(float range, Position const *position, Unit *caster, Unit *referer, SpellInfo const *spellInfo, SpellTargetCheckTypes selectionType, ConditionList *condList)
Definition Spell.cpp:8122
bool operator()(WorldObject *target)
Definition Spell.cpp:8126
bool operator()(WorldObject *target)
Definition Spell.cpp:8137
WorldObjectSpellConeTargetCheck(float coneAngle, float range, Unit *caster, SpellInfo const *spellInfo, SpellTargetCheckTypes selectionType, ConditionList *condList)
Definition Spell.cpp:8133
WorldObjectSpellNearbyTargetCheck(float range, Unit *caster, SpellInfo const *spellInfo, SpellTargetCheckTypes selectionType, ConditionList *condList)
Definition Spell.cpp:8107
bool operator()(WorldObject *target)
Definition Spell.cpp:8111
WorldObjectSpellTargetCheck(Unit *caster, Unit *referer, SpellInfo const *spellInfo, SpellTargetCheckTypes selectionType, ConditionList *condList)
Definition Spell.cpp:8032
ConditionSourceInfo * _condSrcInfo
Definition Spell.h:786
bool operator()(WorldObject *target)
Definition Spell.cpp:8048
SpellTargetCheckTypes _targetSelectionType
Definition Spell.h:785
bool operator()(WorldObject *target)
Definition Spell.cpp:8160
WorldObjectSpellTrajTargetCheck(float range, Position const *position, Unit *caster, SpellInfo const *spellInfo)
Definition Spell.cpp:8157
uint64 targetGUID
Definition Spell.h:676
SpellInfo const * triggeredSpell
Definition Spell.h:731
SpellInfo const * triggeredByAura
Definition Spell.h:732
uint64 timeDelay
Definition Spell.h:661
SpellMissInfo missCondition
Definition Spell.h:662
uint64 targetGUID
Definition Spell.h:660
SpellMissInfo reflectResult
Definition Spell.h:663
uint8 effectMask
Definition Spell.h:664
WorldLocation _position
Definition Spell.h:80
uint64 _transportGUID
Definition Spell.h:81
WorldLocation _transportOffset
Definition Spell.h:82
ObjectGuid Guid
Definition Spell.h:90
std::list< SpellLogExtraAttacksHelper > ExtraAttacks
Definition Spell.h:103
void AddCreatedItem(uint32 id)
Definition Spell.h:112
void AddTarget(ObjectGuid guid)
Definition Spell.h:107
std::list< ObjectGuid > Targets
Definition Spell.h:101
std::list< uint32 > PetFeed
Definition Spell.h:104
std::list< SpellLogEnergizeHelper > Energizes
Definition Spell.h:102
void AddExtraAttacks(ObjectGuid guid, uint32 count)
Definition Spell.h:133
std::list< uint32 > CreatedItems
Definition Spell.h:105
void AddPetFeed(uint32 entry)
Definition Spell.h:117
void AddEnergize(ObjectGuid guid, float multiplier, uint32 value, uint32 powerType)
Definition Spell.h:122
uint32 fragmentCurrencyId
Definition Spell.h:284
uint32 fragmentCount
Definition Spell.h:285
uint32 keystoneItemId
Definition Spell.h:282
uint32 keystoneCount
Definition Spell.h:283
float RadiusMod
Definition Spell.h:258
SpellValue(SpellInfo const *proto)
Definition Spell.cpp:491
int32 EffectBasePoints[MAX_SPELL_EFFECTS]
Definition Spell.h:256
uint32 MaxAffectedTargets
Definition Spell.h:257
uint8 AuraStackAmount
Definition Spell.h:259