mirror of
https://github.com/mangosfour/server.git
synced 2025-12-16 04:37:00 +00:00
[c12584] Implement spells 68987 and 69012
This commit is contained in:
parent
cda8f44cad
commit
e8006b50e3
4 changed files with 81 additions and 32 deletions
|
|
@ -7931,8 +7931,9 @@ void Spell::GetSpellRangeAndRadius(SpellEffectEntry const* spellEffect, float& r
|
||||||
case 67296: // Touch of Light (Mode 1)
|
case 67296: // Touch of Light (Mode 1)
|
||||||
case 67297: // Touch of Light (Mode 2)
|
case 67297: // Touch of Light (Mode 2)
|
||||||
case 67298: // Touch of Light (Mode 3)
|
case 67298: // Touch of Light (Mode 3)
|
||||||
case 68950: // Fear (FoS)
|
|
||||||
case 68912: // Wailing Souls (FoS)
|
case 68912: // Wailing Souls (FoS)
|
||||||
|
case 68950: // Fear (FoS)
|
||||||
|
case 68987: // Pursuit (PoS)
|
||||||
case 69048: // Mirrored Soul (FoS)
|
case 69048: // Mirrored Soul (FoS)
|
||||||
case 69057: // Bone Spike Graveyard (Icecrown Citadel, Lord Marrowgar) 10 man
|
case 69057: // Bone Spike Graveyard (Icecrown Citadel, Lord Marrowgar) 10 man
|
||||||
case 72088:
|
case 72088:
|
||||||
|
|
|
||||||
|
|
@ -1804,6 +1804,20 @@ void Aura::TriggerSpell()
|
||||||
// case 65422: break;
|
// case 65422: break;
|
||||||
// // Rolling Throw
|
// // Rolling Throw
|
||||||
// case 67546: break;
|
// case 67546: break;
|
||||||
|
case 69012: // Explosive Barrage
|
||||||
|
{
|
||||||
|
// Summon an Exploding Orb for each player in combat with the caster
|
||||||
|
ThreatList const& threatList = target->getThreatManager().getThreatList();
|
||||||
|
for (ThreatList::const_iterator itr = threatList.begin(); itr != threatList.end(); ++itr)
|
||||||
|
{
|
||||||
|
if (Unit* expectedTarget = target->GetMap()->GetUnit((*itr)->getUnitGuid()))
|
||||||
|
{
|
||||||
|
if (expectedTarget->GetTypeId() == TYPEID_PLAYER)
|
||||||
|
target->CastSpell(expectedTarget, 69015, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
// // Gunship Cannon Fire
|
// // Gunship Cannon Fire
|
||||||
// case 70017: break;
|
// case 70017: break;
|
||||||
// // Ice Tomb
|
// // Ice Tomb
|
||||||
|
|
@ -3116,6 +3130,19 @@ void Aura::HandleAuraDummy(bool apply, bool Real)
|
||||||
target->PlayDirectSound(14972, (Player*)target);
|
target->PlayDirectSound(14972, (Player*)target);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
case 68987: // Pursuit
|
||||||
|
{
|
||||||
|
Unit* caster = GetCaster();
|
||||||
|
if (!caster || target->GetTypeId() != TYPEID_PLAYER)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (apply)
|
||||||
|
caster->FixateTarget(target);
|
||||||
|
else if (target->GetObjectGuid() == caster->GetFixateTargetGuid())
|
||||||
|
caster->FixateTarget(NULL);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
case 27978:
|
case 27978:
|
||||||
case 40131:
|
case 40131:
|
||||||
if (apply)
|
if (apply)
|
||||||
|
|
|
||||||
|
|
@ -122,7 +122,8 @@ enum SpellModOp
|
||||||
// spellmod 25 unused
|
// spellmod 25 unused
|
||||||
SPELLMOD_FREQUENCY_OF_SUCCESS = 26, // Only used with SPELL_AURA_ADD_PCT_MODIFIER and affects used on proc spells
|
SPELLMOD_FREQUENCY_OF_SUCCESS = 26, // Only used with SPELL_AURA_ADD_PCT_MODIFIER and affects used on proc spells
|
||||||
SPELLMOD_MULTIPLE_VALUE = 27,
|
SPELLMOD_MULTIPLE_VALUE = 27,
|
||||||
SPELLMOD_RESIST_DISPEL_CHANCE = 28
|
SPELLMOD_RESIST_DISPEL_CHANCE = 28,
|
||||||
|
SPELLMOD_SPELL_COST_REFUND_ON_FAIL = 30,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_SPELLMOD 32
|
#define MAX_SPELLMOD 32
|
||||||
|
|
@ -178,7 +179,7 @@ enum UnitBytes1_Flags
|
||||||
UNIT_BYTE1_FLAG_ALL = 0xFF
|
UNIT_BYTE1_FLAG_ALL = 0xFF
|
||||||
};
|
};
|
||||||
|
|
||||||
// byte value (UNIT_FIELD_BYTES_2,0)
|
// byte value (UNIT_FIELD_BYTES_2,0) // TODO - solve conflicting with SharedDefines.h enum SheathTypes
|
||||||
enum SheathState
|
enum SheathState
|
||||||
{
|
{
|
||||||
SHEATH_STATE_UNARMED = 0, // non prepared weapon
|
SHEATH_STATE_UNARMED = 0, // non prepared weapon
|
||||||
|
|
@ -210,7 +211,7 @@ enum UnitRename
|
||||||
|
|
||||||
// byte flags value (UNIT_FIELD_BYTES_2,3) See enum ShapeshiftForm in SharedDefines.h
|
// byte flags value (UNIT_FIELD_BYTES_2,3) See enum ShapeshiftForm in SharedDefines.h
|
||||||
|
|
||||||
#define CREATURE_MAX_SPELLS 4
|
#define CREATURE_MAX_SPELLS 10
|
||||||
|
|
||||||
enum Swing
|
enum Swing
|
||||||
{
|
{
|
||||||
|
|
@ -325,7 +326,7 @@ enum AuraRemoveMode
|
||||||
AURA_REMOVE_BY_DELETE, // use for speedup and prevent unexpected effects at player logout/pet unsummon (must be used _only_ after save), delete.
|
AURA_REMOVE_BY_DELETE, // use for speedup and prevent unexpected effects at player logout/pet unsummon (must be used _only_ after save), delete.
|
||||||
AURA_REMOVE_BY_SHIELD_BREAK, // when absorb shield is removed by damage, heal absorb debuf
|
AURA_REMOVE_BY_SHIELD_BREAK, // when absorb shield is removed by damage, heal absorb debuf
|
||||||
AURA_REMOVE_BY_EXPIRE, // at duration end
|
AURA_REMOVE_BY_EXPIRE, // at duration end
|
||||||
|
AURA_REMOVE_BY_TRACKING, // aura is removed because of a conflicting tracked aura
|
||||||
};
|
};
|
||||||
|
|
||||||
enum UnitMods
|
enum UnitMods
|
||||||
|
|
@ -426,7 +427,14 @@ enum UnitState
|
||||||
UNIT_STAT_FOLLOW_MOVE = 0x00010000,
|
UNIT_STAT_FOLLOW_MOVE = 0x00010000,
|
||||||
UNIT_STAT_FLEEING = 0x00020000, // FleeMovementGenerator/TimedFleeingMovementGenerator active/onstack
|
UNIT_STAT_FLEEING = 0x00020000, // FleeMovementGenerator/TimedFleeingMovementGenerator active/onstack
|
||||||
UNIT_STAT_FLEEING_MOVE = 0x00040000,
|
UNIT_STAT_FLEEING_MOVE = 0x00040000,
|
||||||
UNIT_STAT_IGNORE_PATHFINDING = 0x00080000, // do not use pathfinding in any MovementGenerator
|
// More room for other MMGens
|
||||||
|
|
||||||
|
// High-Level states (usually only with Creatures)
|
||||||
|
UNIT_STAT_NO_COMBAT_MOVEMENT = 0x01000000, // Combat Movement for MoveChase stopped
|
||||||
|
UNIT_STAT_RUNNING = 0x02000000, // SetRun for waypoints and such
|
||||||
|
UNIT_STAT_WAYPOINT_PAUSED = 0x04000000, // Waypoint-Movement paused genericly (ie by script)
|
||||||
|
|
||||||
|
UNIT_STAT_IGNORE_PATHFINDING = 0x10000000, // do not use pathfinding in any MovementGenerator
|
||||||
|
|
||||||
// masks (only for check)
|
// masks (only for check)
|
||||||
|
|
||||||
|
|
@ -457,6 +465,8 @@ enum UnitState
|
||||||
// for real move using movegen check and stop (except unstoppable flight)
|
// for real move using movegen check and stop (except unstoppable flight)
|
||||||
UNIT_STAT_MOVING = UNIT_STAT_ROAMING_MOVE | UNIT_STAT_CHASE_MOVE | UNIT_STAT_FOLLOW_MOVE | UNIT_STAT_FLEEING_MOVE,
|
UNIT_STAT_MOVING = UNIT_STAT_ROAMING_MOVE | UNIT_STAT_CHASE_MOVE | UNIT_STAT_FOLLOW_MOVE | UNIT_STAT_FLEEING_MOVE,
|
||||||
|
|
||||||
|
UNIT_STAT_RUNNING_STATE = UNIT_STAT_CHASE_MOVE | UNIT_STAT_FLEEING_MOVE | UNIT_STAT_RUNNING,
|
||||||
|
|
||||||
UNIT_STAT_ALL_STATE = 0xFFFFFFFF
|
UNIT_STAT_ALL_STATE = 0xFFFFFFFF
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -522,7 +532,7 @@ enum UnitVisibility
|
||||||
VISIBILITY_GROUP_STEALTH = 2, // detect chance, seen and can see group members
|
VISIBILITY_GROUP_STEALTH = 2, // detect chance, seen and can see group members
|
||||||
VISIBILITY_GROUP_INVISIBILITY = 3, // invisibility, can see and can be seen only another invisible unit or invisible detection unit, set only if not stealthed, and in checks not used (mask used instead)
|
VISIBILITY_GROUP_INVISIBILITY = 3, // invisibility, can see and can be seen only another invisible unit or invisible detection unit, set only if not stealthed, and in checks not used (mask used instead)
|
||||||
VISIBILITY_GROUP_NO_DETECT = 4, // state just at stealth apply for update Grid state. Don't remove, otherwise stealth spells will break
|
VISIBILITY_GROUP_NO_DETECT = 4, // state just at stealth apply for update Grid state. Don't remove, otherwise stealth spells will break
|
||||||
VISIBILITY_RESPAWN = 5 // special totally not detectable visibility for force delete object at respawn command
|
VISIBILITY_REMOVE_CORPSE = 5 // special totally not detectable visibility for force delete object while removing a corpse
|
||||||
};
|
};
|
||||||
|
|
||||||
// Value masks for UNIT_FIELD_FLAGS
|
// Value masks for UNIT_FIELD_FLAGS
|
||||||
|
|
@ -611,6 +621,7 @@ enum NPCFlags
|
||||||
UNIT_NPC_FLAG_STABLEMASTER = 0x00400000, // 100%
|
UNIT_NPC_FLAG_STABLEMASTER = 0x00400000, // 100%
|
||||||
UNIT_NPC_FLAG_GUILD_BANKER = 0x00800000, // cause client to send 997 opcode
|
UNIT_NPC_FLAG_GUILD_BANKER = 0x00800000, // cause client to send 997 opcode
|
||||||
UNIT_NPC_FLAG_SPELLCLICK = 0x01000000, // cause client to send 1015 opcode (spell click), dynamic, set at loading and don't must be set in DB
|
UNIT_NPC_FLAG_SPELLCLICK = 0x01000000, // cause client to send 1015 opcode (spell click), dynamic, set at loading and don't must be set in DB
|
||||||
|
UNIT_NPC_FLAG_PLAYER_VEHICLE = 0x02000000, // players with mounts that have vehicle data should have it set
|
||||||
};
|
};
|
||||||
|
|
||||||
// used in most movement packets (send and received), 30 bits in client
|
// used in most movement packets (send and received), 30 bits in client
|
||||||
|
|
@ -1044,6 +1055,7 @@ struct CharmInfo
|
||||||
ReactStates GetReactState() { return m_reactState; }
|
ReactStates GetReactState() { return m_reactState; }
|
||||||
bool HasReactState(ReactStates state) { return (m_reactState == state); }
|
bool HasReactState(ReactStates state) { return (m_reactState == state); }
|
||||||
|
|
||||||
|
void InitVehicleCreateSpells();
|
||||||
void InitPossessCreateSpells();
|
void InitPossessCreateSpells();
|
||||||
void InitCharmCreateSpells();
|
void InitCharmCreateSpells();
|
||||||
void InitPetActionBar();
|
void InitPetActionBar();
|
||||||
|
|
@ -1113,8 +1125,9 @@ enum IgnoreUnitState
|
||||||
#define MAX_CREATURE_ATTACK_RADIUS 45.0f // max distance for creature aggro (use with CONFIG_FLOAT_RATE_CREATURE_AGGRO)
|
#define MAX_CREATURE_ATTACK_RADIUS 45.0f // max distance for creature aggro (use with CONFIG_FLOAT_RATE_CREATURE_AGGRO)
|
||||||
|
|
||||||
// Regeneration defines
|
// Regeneration defines
|
||||||
#define REGEN_TIME_FULL 2000 // For this time difference is computed regen value
|
#define REGEN_TIME_FULL 2000 // This determines how often regen value is computed
|
||||||
#define REGEN_TIME_PRECISE 500 // Used in Spell::CheckPower for precise regeneration in spell cast time
|
#define REGEN_TIME_PRECISE 500 // Used in Spell::CheckPower for precise regeneration in spell cast time
|
||||||
|
#define REGEN_TIME_HOLY_POWER 10000 // This determines how often holy power regen is processed
|
||||||
|
|
||||||
struct SpellProcEventEntry; // used only privately
|
struct SpellProcEventEntry; // used only privately
|
||||||
|
|
||||||
|
|
@ -1122,15 +1135,15 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef std::set<Unit*> AttackerSet;
|
typedef std::set<Unit*> AttackerSet;
|
||||||
typedef std::multimap< uint32, SpellAuraHolder*> SpellAuraHolderMap;
|
typedef std::multimap<uint32 /*spellId*/, SpellAuraHolder*> SpellAuraHolderMap;
|
||||||
typedef std::pair<SpellAuraHolderMap::iterator, SpellAuraHolderMap::iterator> SpellAuraHolderBounds;
|
typedef std::pair<SpellAuraHolderMap::iterator, SpellAuraHolderMap::iterator> SpellAuraHolderBounds;
|
||||||
typedef std::pair<SpellAuraHolderMap::const_iterator, SpellAuraHolderMap::const_iterator> SpellAuraHolderConstBounds;
|
typedef std::pair<SpellAuraHolderMap::const_iterator, SpellAuraHolderMap::const_iterator> SpellAuraHolderConstBounds;
|
||||||
typedef std::list<SpellAuraHolder*> SpellAuraHolderList;
|
typedef std::list<SpellAuraHolder*> SpellAuraHolderList;
|
||||||
typedef std::list<Aura*> AuraList;
|
typedef std::list<Aura*> AuraList;
|
||||||
typedef std::list<DiminishingReturn> Diminishing;
|
typedef std::list<DiminishingReturn> Diminishing;
|
||||||
typedef std::set<uint32> ComboPointHolderSet;
|
typedef std::set<uint32 /*playerGuidLow*/> ComboPointHolderSet;
|
||||||
typedef std::map<uint8, SpellAuraHolder*> VisibleAuraMap;
|
typedef std::map<uint8 /*slot*/, SpellAuraHolder* /*spellId*/> VisibleAuraMap;
|
||||||
typedef std::map<SpellEntry const*, ObjectGuid> SingleCastSpellTargetMap;
|
typedef std::map<SpellEntry const*, ObjectGuid /*targetGuid*/> TrackedAuraTargetMap;
|
||||||
|
|
||||||
virtual ~Unit();
|
virtual ~Unit();
|
||||||
|
|
||||||
|
|
@ -1260,6 +1273,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
||||||
int32 ModifyPower(Powers power, int32 val);
|
int32 ModifyPower(Powers power, int32 val);
|
||||||
void ApplyPowerMod(Powers power, uint32 val, bool apply);
|
void ApplyPowerMod(Powers power, uint32 val, bool apply);
|
||||||
void ApplyMaxPowerMod(Powers power, uint32 val, bool apply);
|
void ApplyMaxPowerMod(Powers power, uint32 val, bool apply);
|
||||||
|
void ResetHolyPowerRegenTimer() { m_holyPowerRegenTimer = REGEN_TIME_HOLY_POWER; }
|
||||||
|
|
||||||
static uint32 GetPowerIndexByClass(Powers power, uint32 classId);
|
static uint32 GetPowerIndexByClass(Powers power, uint32 classId);
|
||||||
static Powers GetPowerTypeByIndex(uint32 index, uint32 classId);
|
static Powers GetPowerTypeByIndex(uint32 index, uint32 classId);
|
||||||
|
|
@ -1315,7 +1329,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
||||||
|
|
||||||
VehicleInfo* GetVehicleInfo() { return m_vehicleInfo; }
|
VehicleInfo* GetVehicleInfo() { return m_vehicleInfo; }
|
||||||
bool IsVehicle() const { return m_vehicleInfo != NULL; }
|
bool IsVehicle() const { return m_vehicleInfo != NULL; }
|
||||||
void SetVehicleId(uint32 entry);
|
void SetVehicleId(uint32 entry, uint32 overwriteNpcEntry);
|
||||||
|
|
||||||
uint16 GetMaxSkillValueForLevel(Unit const* target = NULL) const { return (target ? GetLevelForTarget(target) : getLevel()) * 5; }
|
uint16 GetMaxSkillValueForLevel(Unit const* target = NULL) const { return (target ? GetLevelForTarget(target) : getLevel()) * 5; }
|
||||||
void DealDamageMods(Unit* pVictim, uint32& damage, uint32* absorb);
|
void DealDamageMods(Unit* pVictim, uint32& damage, uint32* absorb);
|
||||||
|
|
@ -1567,12 +1581,12 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
||||||
// removing specific aura stacks by diff reasons and selections
|
// removing specific aura stacks by diff reasons and selections
|
||||||
void RemoveAurasDueToSpell(uint32 spellId, SpellAuraHolder* except = NULL, AuraRemoveMode mode = AURA_REMOVE_BY_DEFAULT);
|
void RemoveAurasDueToSpell(uint32 spellId, SpellAuraHolder* except = NULL, AuraRemoveMode mode = AURA_REMOVE_BY_DEFAULT);
|
||||||
void RemoveAurasDueToItemSpell(Item* castItem, uint32 spellId);
|
void RemoveAurasDueToItemSpell(Item* castItem, uint32 spellId);
|
||||||
void RemoveAurasByCasterSpell(uint32 spellId, ObjectGuid casterGuid);
|
void RemoveAurasByCasterSpell(uint32 spellId, ObjectGuid casterGuid, AuraRemoveMode mode = AURA_REMOVE_BY_DEFAULT);
|
||||||
void RemoveAurasDueToSpellBySteal(uint32 spellId, ObjectGuid casterGuid, Unit* stealer);
|
void RemoveAurasDueToSpellBySteal(uint32 spellId, ObjectGuid casterGuid, Unit* stealer);
|
||||||
void RemoveAurasDueToSpellByCancel(uint32 spellId);
|
void RemoveAurasDueToSpellByCancel(uint32 spellId);
|
||||||
|
|
||||||
// removing unknown aura stacks by diff reasons and selections
|
// removing unknown aura stacks by diff reasons and selections
|
||||||
void RemoveNotOwnSingleTargetAuras(uint32 newPhase = 0x0);
|
void RemoveNotOwnTrackedTargetAuras(uint32 newPhase = 0x0);
|
||||||
void RemoveAurasAtMechanicImmunity(uint32 mechMask, uint32 exceptSpellId, bool non_positive = false);
|
void RemoveAurasAtMechanicImmunity(uint32 mechMask, uint32 exceptSpellId, bool non_positive = false);
|
||||||
void RemoveSpellsCausingAura(AuraType auraType);
|
void RemoveSpellsCausingAura(AuraType auraType);
|
||||||
void RemoveSpellsCausingAura(AuraType auraType, SpellAuraHolder* except);
|
void RemoveSpellsCausingAura(AuraType auraType, SpellAuraHolder* except);
|
||||||
|
|
@ -1585,6 +1599,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
||||||
void RemoveAllAuras(AuraRemoveMode mode = AURA_REMOVE_BY_DEFAULT);
|
void RemoveAllAuras(AuraRemoveMode mode = AURA_REMOVE_BY_DEFAULT);
|
||||||
void RemoveArenaAuras(bool onleave = false);
|
void RemoveArenaAuras(bool onleave = false);
|
||||||
void RemoveAllAurasOnDeath();
|
void RemoveAllAurasOnDeath();
|
||||||
|
void RemoveAllAurasOnEvade();
|
||||||
|
|
||||||
// removing specific aura FROM stack by diff reasons and selections
|
// removing specific aura FROM stack by diff reasons and selections
|
||||||
void RemoveAuraHolderFromStack(uint32 spellId, uint32 stackAmount = 1, ObjectGuid casterGuid = ObjectGuid(), AuraRemoveMode mode = AURA_REMOVE_BY_DEFAULT);
|
void RemoveAuraHolderFromStack(uint32 spellId, uint32 stackAmount = 1, ObjectGuid casterGuid = ObjectGuid(), AuraRemoveMode mode = AURA_REMOVE_BY_DEFAULT);
|
||||||
|
|
@ -1613,6 +1628,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
||||||
void SetCreateMana(uint32 val) { SetUInt32Value(UNIT_FIELD_BASE_MANA, val); }
|
void SetCreateMana(uint32 val) { SetUInt32Value(UNIT_FIELD_BASE_MANA, val); }
|
||||||
uint32 GetCreateMana() const { return GetUInt32Value(UNIT_FIELD_BASE_MANA); }
|
uint32 GetCreateMana() const { return GetUInt32Value(UNIT_FIELD_BASE_MANA); }
|
||||||
uint32 GetCreatePowers(Powers power) const;
|
uint32 GetCreatePowers(Powers power) const;
|
||||||
|
uint32 GetCreateMaxPowers(Powers power) const;
|
||||||
float GetPosStat(Stats stat) const { return GetFloatValue(UNIT_FIELD_POSSTAT0 + stat); }
|
float GetPosStat(Stats stat) const { return GetFloatValue(UNIT_FIELD_POSSTAT0 + stat); }
|
||||||
float GetNegStat(Stats stat) const { return GetFloatValue(UNIT_FIELD_NEGSTAT0 + stat); }
|
float GetNegStat(Stats stat) const { return GetFloatValue(UNIT_FIELD_NEGSTAT0 + stat); }
|
||||||
float GetCreateStat(Stats stat) const { return m_createStats[stat]; }
|
float GetCreateStat(Stats stat) const { return m_createStats[stat]; }
|
||||||
|
|
@ -1707,12 +1723,12 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
||||||
virtual bool IsVisibleInGridForPlayer(Player* pl) const = 0;
|
virtual bool IsVisibleInGridForPlayer(Player* pl) const = 0;
|
||||||
bool isInvisibleForAlive() const;
|
bool isInvisibleForAlive() const;
|
||||||
|
|
||||||
SingleCastSpellTargetMap& GetSingleCastSpellTargets() { return m_singleCastSpellTargets; }
|
TrackedAuraTargetMap& GetTrackedAuraTargets(TrackedAuraType type) { return m_trackedAuraTargets[type]; }
|
||||||
SingleCastSpellTargetMap const& GetSingleCastSpellTargets() const { return m_singleCastSpellTargets; }
|
TrackedAuraTargetMap const& GetTrackedAuraTargets(TrackedAuraType type) const { return m_trackedAuraTargets[type]; }
|
||||||
SpellImmuneList m_spellImmune[MAX_SPELL_IMMUNITY];
|
SpellImmuneList m_spellImmune[MAX_SPELL_IMMUNITY];
|
||||||
|
|
||||||
// Threat related methods
|
// Threat related methods
|
||||||
bool CanHaveThreatList() const;
|
bool CanHaveThreatList(bool ignoreAliveState = false) const;
|
||||||
void AddThreat(Unit* pVictim, float threat = 0.0f, bool crit = false, SpellSchoolMask schoolMask = SPELL_SCHOOL_MASK_NONE, SpellEntry const* threatSpell = NULL);
|
void AddThreat(Unit* pVictim, float threat = 0.0f, bool crit = false, SpellSchoolMask schoolMask = SPELL_SCHOOL_MASK_NONE, SpellEntry const* threatSpell = NULL);
|
||||||
float ApplyTotalThreatModifier(float threat, SpellSchoolMask schoolMask = SPELL_SCHOOL_MASK_NORMAL);
|
float ApplyTotalThreatModifier(float threat, SpellSchoolMask schoolMask = SPELL_SCHOOL_MASK_NORMAL);
|
||||||
void DeleteThreatList();
|
void DeleteThreatList();
|
||||||
|
|
@ -1720,6 +1736,8 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
||||||
bool SelectHostileTarget();
|
bool SelectHostileTarget();
|
||||||
void TauntApply(Unit* pVictim);
|
void TauntApply(Unit* pVictim);
|
||||||
void TauntFadeOut(Unit* taunter);
|
void TauntFadeOut(Unit* taunter);
|
||||||
|
void FixateTarget(Unit* pVictim);
|
||||||
|
ObjectGuid GetFixateTargetGuid() const { return m_fixateTargetGuid; }
|
||||||
ThreatManager& getThreatManager() { return m_ThreatManager; }
|
ThreatManager& getThreatManager() { return m_ThreatManager; }
|
||||||
ThreatManager const& getThreatManager() const { return m_ThreatManager; }
|
ThreatManager const& getThreatManager() const { return m_ThreatManager; }
|
||||||
void addHatedBy(HostileReference* pHostileReference) { m_HostileRefManager.insertFirst(pHostileReference); };
|
void addHatedBy(HostileReference* pHostileReference) { m_HostileRefManager.insertFirst(pHostileReference); };
|
||||||
|
|
@ -1745,6 +1763,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
||||||
|
|
||||||
Aura* GetAura(uint32 spellId, SpellEffectIndex effindex);
|
Aura* GetAura(uint32 spellId, SpellEffectIndex effindex);
|
||||||
Aura* GetAura(AuraType type, SpellFamily family, uint64 familyFlag, uint32 familyFlag2 = 0, ObjectGuid casterGuid = ObjectGuid());
|
Aura* GetAura(AuraType type, SpellFamily family, uint64 familyFlag, uint32 familyFlag2 = 0, ObjectGuid casterGuid = ObjectGuid());
|
||||||
|
Aura* GetTriggeredByClientAura(uint32 spellId) const;
|
||||||
SpellAuraHolder* GetSpellAuraHolder(uint32 spellid) const;
|
SpellAuraHolder* GetSpellAuraHolder(uint32 spellid) const;
|
||||||
SpellAuraHolder* GetSpellAuraHolder(uint32 spellid, ObjectGuid casterGUID) const;
|
SpellAuraHolder* GetSpellAuraHolder(uint32 spellid, ObjectGuid casterGUID) const;
|
||||||
|
|
||||||
|
|
@ -1863,11 +1882,9 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
||||||
|
|
||||||
void ApplySpellImmune(uint32 spellId, uint32 op, uint32 type, bool apply);
|
void ApplySpellImmune(uint32 spellId, uint32 op, uint32 type, bool apply);
|
||||||
void ApplySpellDispelImmunity(const SpellEntry* spellProto, DispelType type, bool apply);
|
void ApplySpellDispelImmunity(const SpellEntry* spellProto, DispelType type, bool apply);
|
||||||
virtual bool IsImmuneToSpell(SpellEntry const* spellInfo);
|
virtual bool IsImmuneToSpell(SpellEntry const* spellInfo, bool castOnSelf);
|
||||||
// redefined in Creature
|
|
||||||
bool IsImmunedToDamage(SpellSchoolMask meleeSchoolMask);
|
bool IsImmunedToDamage(SpellSchoolMask meleeSchoolMask);
|
||||||
virtual bool IsImmuneToSpellEffect(SpellEntry const* spellInfo, SpellEffectIndex index) const;
|
virtual bool IsImmuneToSpellEffect(SpellEntry const* spellInfo, SpellEffectIndex index, bool castOnSelf) const;
|
||||||
// redefined in Creature
|
|
||||||
|
|
||||||
uint32 CalcArmorReducedDamage(Unit* pVictim, const uint32 damage);
|
uint32 CalcArmorReducedDamage(Unit* pVictim, const uint32 damage);
|
||||||
void CalculateDamageAbsorbAndResist(Unit* pCaster, SpellSchoolMask schoolMask, DamageEffectType damagetype, const uint32 damage, uint32* absorb, uint32* resist, bool canReflect = false);
|
void CalculateDamageAbsorbAndResist(Unit* pCaster, SpellSchoolMask schoolMask, DamageEffectType damagetype, const uint32 damage, uint32* absorb, uint32* resist, bool canReflect = false);
|
||||||
|
|
@ -1889,7 +1906,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
||||||
|
|
||||||
uint32 CalcNotIgnoreAbsorbDamage(uint32 damage, SpellSchoolMask damageSchoolMask, SpellEntry const* spellInfo = NULL);
|
uint32 CalcNotIgnoreAbsorbDamage(uint32 damage, SpellSchoolMask damageSchoolMask, SpellEntry const* spellInfo = NULL);
|
||||||
uint32 CalcNotIgnoreDamageReduction(uint32 damage, SpellSchoolMask damageSchoolMask);
|
uint32 CalcNotIgnoreDamageReduction(uint32 damage, SpellSchoolMask damageSchoolMask);
|
||||||
int32 CalculateAuraDuration(SpellEntry const* spellProto, uint32 effectMask, int32 duration, Unit const* caster);
|
int32 CalculateAuraDuration(SpellEntry const* spellProto, uint32 effectMask, int32 duration, Unit const* caster, Spell const* spell = NULL);
|
||||||
|
|
||||||
float CalculateLevelPenalty(SpellEntry const* spellProto) const;
|
float CalculateLevelPenalty(SpellEntry const* spellProto) const;
|
||||||
|
|
||||||
|
|
@ -1910,7 +1927,6 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
||||||
void ClearComboPointHolders();
|
void ClearComboPointHolders();
|
||||||
|
|
||||||
///----------Pet responses methods-----------------
|
///----------Pet responses methods-----------------
|
||||||
void SendPetCastFail(uint32 spellid, SpellCastResult msg);
|
|
||||||
void SendPetActionFeedback(uint8 msg);
|
void SendPetActionFeedback(uint8 msg);
|
||||||
void SendPetTalk(uint32 pettalk);
|
void SendPetTalk(uint32 pettalk);
|
||||||
void SendPetAIReaction();
|
void SendPetAIReaction();
|
||||||
|
|
@ -1946,12 +1962,14 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
||||||
bool IsSplineEnabled() const;
|
bool IsSplineEnabled() const;
|
||||||
|
|
||||||
bool IsInWorgenForm(bool inPermanent = false) const;
|
bool IsInWorgenForm(bool inPermanent = false) const;
|
||||||
|
bool HasWorgenForm() const;
|
||||||
|
|
||||||
// Packet builders
|
// Packet builders
|
||||||
void BuildForceMoveRootPacket(WorldPacket* data, bool apply, uint32 value);
|
void BuildForceMoveRootPacket(WorldPacket* data, bool apply, uint32 value);
|
||||||
void BuildMoveWaterWalkPacket(WorldPacket* data, bool apply, uint32 value);
|
void BuildMoveWaterWalkPacket(WorldPacket* data, bool apply, uint32 value);
|
||||||
void BuildSendPlayVisualPacket(WorldPacket* data, uint32 value, bool impact);
|
void BuildSendPlayVisualPacket(WorldPacket* data, uint32 value, bool impact);
|
||||||
void BuildMoveSetCanFlyPacket(WorldPacket* data, bool apply, uint32 value);
|
void BuildMoveSetCanFlyPacket(WorldPacket* data, bool apply, uint32 value);
|
||||||
|
void BuildMoveFeatherFallPacket(WorldPacket* data, bool apply, uint32 value);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
explicit Unit();
|
explicit Unit();
|
||||||
|
|
@ -1973,7 +1991,8 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
||||||
AuraList m_deletedAuras; // auras removed while in ApplyModifier and waiting deleted
|
AuraList m_deletedAuras; // auras removed while in ApplyModifier and waiting deleted
|
||||||
SpellAuraHolderList m_deletedHolders;
|
SpellAuraHolderList m_deletedHolders;
|
||||||
|
|
||||||
SingleCastSpellTargetMap m_singleCastSpellTargets; // casted by unit single per-caster auras
|
// Store Auras for which the target must be tracked
|
||||||
|
TrackedAuraTargetMap m_trackedAuraTargets[MAX_TRACKED_AURA_TYPES];
|
||||||
|
|
||||||
GuidList m_dynObjGUIDs;
|
GuidList m_dynObjGUIDs;
|
||||||
|
|
||||||
|
|
@ -2001,6 +2020,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
||||||
|
|
||||||
uint32 m_reactiveTimer[MAX_REACTIVE];
|
uint32 m_reactiveTimer[MAX_REACTIVE];
|
||||||
uint32 m_regenTimer;
|
uint32 m_regenTimer;
|
||||||
|
uint32 m_holyPowerRegenTimer;
|
||||||
|
|
||||||
VehicleInfo* m_vehicleInfo;
|
VehicleInfo* m_vehicleInfo;
|
||||||
void DisableSpline();
|
void DisableSpline();
|
||||||
|
|
@ -2018,7 +2038,8 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
||||||
Unit* _GetTotem(TotemSlot slot) const; // for templated function without include need
|
Unit* _GetTotem(TotemSlot slot) const; // for templated function without include need
|
||||||
Pet* _GetPet(ObjectGuid guid) const; // for templated function without include need
|
Pet* _GetPet(ObjectGuid guid) const; // for templated function without include need
|
||||||
|
|
||||||
void JustKilledCreature(Creature* victim); // Wrapper called by DealDamage when a creature is killed
|
// Wrapper called by DealDamage when a creature is killed
|
||||||
|
void JustKilledCreature(Creature* victim, Player* responsiblePlayer);
|
||||||
|
|
||||||
uint32 m_state; // Even derived shouldn't modify
|
uint32 m_state; // Even derived shouldn't modify
|
||||||
uint32 m_CombatTimer;
|
uint32 m_CombatTimer;
|
||||||
|
|
@ -2045,6 +2066,8 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
||||||
|
|
||||||
ObjectGuid m_TotemSlot[MAX_TOTEM_SLOT];
|
ObjectGuid m_TotemSlot[MAX_TOTEM_SLOT];
|
||||||
|
|
||||||
|
ObjectGuid m_fixateTargetGuid; //< Stores the Guid of a fixated target
|
||||||
|
|
||||||
private: // Error traps for some wrong args using
|
private: // Error traps for some wrong args using
|
||||||
// this will catch and prevent build for any cases when all optional args skipped and instead triggered used non boolean type
|
// this will catch and prevent build for any cases when all optional args skipped and instead triggered used non boolean type
|
||||||
// no bodies expected for this declarations
|
// no bodies expected for this declarations
|
||||||
|
|
@ -2070,7 +2093,7 @@ void Unit::CallForAllControlledUnits(Func const& func, uint32 controlledMask)
|
||||||
func(pet);
|
func(pet);
|
||||||
|
|
||||||
if (controlledMask & CONTROLLED_MINIPET)
|
if (controlledMask & CONTROLLED_MINIPET)
|
||||||
if (Unit* mini = GetMiniPet())
|
if (Pet* mini = GetMiniPet())
|
||||||
func(mini);
|
func(mini);
|
||||||
|
|
||||||
if (controlledMask & CONTROLLED_GUARDIANS)
|
if (controlledMask & CONTROLLED_GUARDIANS)
|
||||||
|
|
@ -2092,7 +2115,6 @@ void Unit::CallForAllControlledUnits(Func const& func, uint32 controlledMask)
|
||||||
func(charm);
|
func(charm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<typename Func>
|
template<typename Func>
|
||||||
bool Unit::CheckAllControlledUnits(Func const& func, uint32 controlledMask) const
|
bool Unit::CheckAllControlledUnits(Func const& func, uint32 controlledMask) const
|
||||||
{
|
{
|
||||||
|
|
@ -2102,7 +2124,7 @@ bool Unit::CheckAllControlledUnits(Func const& func, uint32 controlledMask) cons
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (controlledMask & CONTROLLED_MINIPET)
|
if (controlledMask & CONTROLLED_MINIPET)
|
||||||
if (Unit const* mini = GetMiniPet())
|
if (Pet const* mini = GetMiniPet())
|
||||||
if (func(mini))
|
if (func(mini))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
@ -2112,7 +2134,6 @@ bool Unit::CheckAllControlledUnits(Func const& func, uint32 controlledMask) cons
|
||||||
if (Pet const* guardian = _GetPet(*(itr++)))
|
if (Pet const* guardian = _GetPet(*(itr++)))
|
||||||
if (func(guardian))
|
if (func(guardian))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (controlledMask & CONTROLLED_TOTEMS)
|
if (controlledMask & CONTROLLED_TOTEMS)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "12583"
|
#define REVISION_NR "12584"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue