feat(Core/Creature): Implement HasFlagsExtra() helper to creature (#21362)
This commit is contained in:
@@ -525,7 +525,7 @@ bool Creature::InitEntry(uint32 Entry, const CreatureData* data)
|
|||||||
|
|
||||||
SetFloatValue(UNIT_FIELD_HOVERHEIGHT, cinfo->HoverHeight);
|
SetFloatValue(UNIT_FIELD_HOVERHEIGHT, cinfo->HoverHeight);
|
||||||
|
|
||||||
SetCanDualWield(cinfo->flags_extra & CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK);
|
SetCanDualWield(cinfo->HasFlagsExtra(CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK));
|
||||||
|
|
||||||
// checked at loading
|
// checked at loading
|
||||||
m_defaultMovementType = MovementGeneratorType(cinfo->MovementType);
|
m_defaultMovementType = MovementGeneratorType(cinfo->MovementType);
|
||||||
@@ -556,7 +556,7 @@ bool Creature::UpdateEntry(uint32 Entry, const CreatureData* data, bool changele
|
|||||||
uint32 npcflag, unit_flags, dynamicflags;
|
uint32 npcflag, unit_flags, dynamicflags;
|
||||||
ObjectMgr::ChooseCreatureFlags(cInfo, npcflag, unit_flags, dynamicflags, data);
|
ObjectMgr::ChooseCreatureFlags(cInfo, npcflag, unit_flags, dynamicflags, data);
|
||||||
|
|
||||||
if (cInfo->flags_extra & CREATURE_FLAG_EXTRA_WORLDEVENT)
|
if (cInfo->HasFlagsExtra(CREATURE_FLAG_EXTRA_WORLDEVENT))
|
||||||
ReplaceAllNpcFlags(NPCFlags(npcflag | sGameEventMgr->GetNPCFlag(this)));
|
ReplaceAllNpcFlags(NPCFlags(npcflag | sGameEventMgr->GetNPCFlag(this)));
|
||||||
else
|
else
|
||||||
ReplaceAllNpcFlags(NPCFlags(npcflag));
|
ReplaceAllNpcFlags(NPCFlags(npcflag));
|
||||||
@@ -571,7 +571,7 @@ bool Creature::UpdateEntry(uint32 Entry, const CreatureData* data, bool changele
|
|||||||
|
|
||||||
ReplaceAllDynamicFlags(dynamicflags);
|
ReplaceAllDynamicFlags(dynamicflags);
|
||||||
|
|
||||||
SetCanDualWield(cInfo->flags_extra & CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK);
|
SetCanDualWield(cInfo->HasFlagsExtra(CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK));
|
||||||
|
|
||||||
SetAttackTime(BASE_ATTACK, cInfo->BaseAttackTime);
|
SetAttackTime(BASE_ATTACK, cInfo->BaseAttackTime);
|
||||||
SetAttackTime(OFF_ATTACK, cInfo->BaseAttackTime);
|
SetAttackTime(OFF_ATTACK, cInfo->BaseAttackTime);
|
||||||
@@ -637,7 +637,7 @@ bool Creature::UpdateEntry(uint32 Entry, const CreatureData* data, bool changele
|
|||||||
|
|
||||||
InitializeReactState();
|
InitializeReactState();
|
||||||
|
|
||||||
if (!IsPet() && cInfo->flags_extra & CREATURE_FLAG_EXTRA_NO_TAUNT)
|
if (!IsPet() && cInfo->HasFlagsExtra(CREATURE_FLAG_EXTRA_NO_TAUNT))
|
||||||
{
|
{
|
||||||
ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true);
|
ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true);
|
||||||
ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, true);
|
ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_ATTACK_ME, true);
|
||||||
@@ -1200,7 +1200,7 @@ bool Creature::Create(ObjectGuid::LowType guidlow, Map* map, uint32 phaseMask, u
|
|||||||
|
|
||||||
LastUsedScriptID = GetScriptId();
|
LastUsedScriptID = GetScriptId();
|
||||||
|
|
||||||
if (IsSpiritHealer() || IsSpiritGuide() || (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_GHOST_VISIBILITY))
|
if (IsSpiritHealer() || IsSpiritGuide() || HasFlagsExtra(CREATURE_FLAG_EXTRA_GHOST_VISIBILITY))
|
||||||
{
|
{
|
||||||
m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST);
|
m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST);
|
||||||
m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST);
|
m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST);
|
||||||
@@ -1213,7 +1213,7 @@ bool Creature::Create(ObjectGuid::LowType guidlow, Map* map, uint32 phaseMask, u
|
|||||||
if (Entry == VISUAL_WAYPOINT)
|
if (Entry == VISUAL_WAYPOINT)
|
||||||
SetVisible(false);
|
SetVisible(false);
|
||||||
|
|
||||||
if (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_IGNORE_PATHFINDING)
|
if (HasFlagsExtra(CREATURE_FLAG_EXTRA_IGNORE_PATHFINDING))
|
||||||
AddUnitState(UNIT_STATE_IGNORE_PATHFINDING);
|
AddUnitState(UNIT_STATE_IGNORE_PATHFINDING);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -2174,12 +2174,8 @@ void Creature::ForcedDespawn(uint32 timeMSToDespawn, Seconds forceRespawnTimer)
|
|||||||
RemoveCorpse(true);
|
RemoveCorpse(true);
|
||||||
|
|
||||||
if (forceRespawnTimer > Seconds::zero())
|
if (forceRespawnTimer > Seconds::zero())
|
||||||
{
|
|
||||||
if (GetMap())
|
if (GetMap())
|
||||||
{
|
|
||||||
GetMap()->ScheduleCreatureRespawn(GetGUID(), forceRespawnTimer);
|
GetMap()->ScheduleCreatureRespawn(GetGUID(), forceRespawnTimer);
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Creature::DespawnOrUnsummon(Milliseconds msTimeToDespawn /*= 0*/, Seconds forcedRespawnTimer)
|
void Creature::DespawnOrUnsummon(Milliseconds msTimeToDespawn /*= 0*/, Seconds forcedRespawnTimer)
|
||||||
@@ -3183,8 +3179,7 @@ bool Creature::IsDungeonBoss() const
|
|||||||
if (GetOwnerGUID().IsPlayer())
|
if (GetOwnerGUID().IsPlayer())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(GetEntry());
|
return HasFlagsExtra(CREATURE_FLAG_EXTRA_DUNGEON_BOSS);
|
||||||
return cinfo && (cinfo->flags_extra & CREATURE_FLAG_EXTRA_DUNGEON_BOSS);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Creature::IsImmuneToKnockback() const
|
bool Creature::IsImmuneToKnockback() const
|
||||||
@@ -3192,8 +3187,7 @@ bool Creature::IsImmuneToKnockback() const
|
|||||||
if (GetOwnerGUID().IsPlayer())
|
if (GetOwnerGUID().IsPlayer())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(GetEntry());
|
return HasFlagsExtra(CREATURE_FLAG_EXTRA_IMMUNITY_KNOCKBACK);
|
||||||
return cinfo && (cinfo->flags_extra & CREATURE_FLAG_EXTRA_IMMUNITY_KNOCKBACK);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Creature::HasWeapon(WeaponAttackType type) const
|
bool Creature::HasWeapon(WeaponAttackType type) const
|
||||||
@@ -3463,7 +3457,7 @@ void Creature::UpdateMovementFlags()
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// Creatures with CREATURE_FLAG_EXTRA_NO_MOVE_FLAGS_UPDATE should control MovementFlags in your own scripts
|
// Creatures with CREATURE_FLAG_EXTRA_NO_MOVE_FLAGS_UPDATE should control MovementFlags in your own scripts
|
||||||
if (info->flags_extra & CREATURE_FLAG_EXTRA_NO_MOVE_FLAGS_UPDATE)
|
if (info->HasFlagsExtra(CREATURE_FLAG_EXTRA_NO_MOVE_FLAGS_UPDATE))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
float ground = GetFloorZ();
|
float ground = GetFloorZ();
|
||||||
@@ -3819,7 +3813,7 @@ void Creature::ModifyThreatPercentTemp(Unit* victim, int32 percent, Milliseconds
|
|||||||
|
|
||||||
bool Creature::IsDamageEnoughForLootingAndReward() const
|
bool Creature::IsDamageEnoughForLootingAndReward() const
|
||||||
{
|
{
|
||||||
return (m_creatureInfo->flags_extra & CREATURE_FLAG_EXTRA_NO_PLAYER_DAMAGE_REQ) || (_playerDamageReq == 0 && _damagedByPlayer);
|
return m_creatureInfo->HasFlagsExtra(CREATURE_FLAG_EXTRA_NO_PLAYER_DAMAGE_REQ) || (_playerDamageReq == 0 && _damagedByPlayer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Creature::LowerPlayerDamageReq(uint32 unDamage, bool damagedByPlayer /*= true*/)
|
void Creature::LowerPlayerDamageReq(uint32 unDamage, bool damagedByPlayer /*= true*/)
|
||||||
|
|||||||
@@ -70,10 +70,11 @@ public:
|
|||||||
void SetCorpseDelay(uint32 delay) { m_corpseDelay = delay; }
|
void SetCorpseDelay(uint32 delay) { m_corpseDelay = delay; }
|
||||||
void SetCorpseRemoveTime(uint32 delay);
|
void SetCorpseRemoveTime(uint32 delay);
|
||||||
[[nodiscard]] uint32 GetCorpseDelay() const { return m_corpseDelay; }
|
[[nodiscard]] uint32 GetCorpseDelay() const { return m_corpseDelay; }
|
||||||
|
[[nodiscard]] bool HasFlagsExtra(uint32 flag) const { return GetCreatureTemplate()->HasFlagsExtra(flag); }
|
||||||
[[nodiscard]] bool IsRacialLeader() const { return GetCreatureTemplate()->RacialLeader; }
|
[[nodiscard]] bool IsRacialLeader() const { return GetCreatureTemplate()->RacialLeader; }
|
||||||
[[nodiscard]] bool IsCivilian() const { return GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_CIVILIAN; }
|
[[nodiscard]] bool IsCivilian() const { return HasFlagsExtra(CREATURE_FLAG_EXTRA_CIVILIAN); }
|
||||||
[[nodiscard]] bool IsTrigger() const { return GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER; }
|
[[nodiscard]] bool IsTrigger() const { return HasFlagsExtra(CREATURE_FLAG_EXTRA_TRIGGER); }
|
||||||
[[nodiscard]] bool IsGuard() const { return GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_GUARD; }
|
[[nodiscard]] bool IsGuard() const { return HasFlagsExtra(CREATURE_FLAG_EXTRA_GUARD); }
|
||||||
CreatureMovementData const& GetMovementTemplate() const;
|
CreatureMovementData const& GetMovementTemplate() const;
|
||||||
[[nodiscard]] bool CanWalk() const { return GetMovementTemplate().IsGroundAllowed(); }
|
[[nodiscard]] bool CanWalk() const { return GetMovementTemplate().IsGroundAllowed(); }
|
||||||
[[nodiscard]] bool CanSwim() const override;
|
[[nodiscard]] bool CanSwim() const override;
|
||||||
@@ -127,7 +128,7 @@ public:
|
|||||||
|
|
||||||
[[nodiscard]] bool IsDungeonBoss() const;
|
[[nodiscard]] bool IsDungeonBoss() const;
|
||||||
[[nodiscard]] bool IsImmuneToKnockback() const;
|
[[nodiscard]] bool IsImmuneToKnockback() const;
|
||||||
[[nodiscard]] bool IsAvoidingAOE() const { return GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_AVOID_AOE; }
|
[[nodiscard]] bool IsAvoidingAOE() const { return HasFlagsExtra(CREATURE_FLAG_EXTRA_AVOID_AOE); }
|
||||||
|
|
||||||
uint8 getLevelForTarget(WorldObject const* target) const override; // overwrite Unit::getLevelForTarget for boss level support
|
uint8 getLevelForTarget(WorldObject const* target) const override; // overwrite Unit::getLevelForTarget for boss level support
|
||||||
|
|
||||||
@@ -272,7 +273,7 @@ public:
|
|||||||
bool HasSearchedAssistance() { return m_AlreadySearchedAssistance; }
|
bool HasSearchedAssistance() { return m_AlreadySearchedAssistance; }
|
||||||
bool CanAssistTo(Unit const* u, Unit const* enemy, bool checkfaction = true) const;
|
bool CanAssistTo(Unit const* u, Unit const* enemy, bool checkfaction = true) const;
|
||||||
bool _IsTargetAcceptable(Unit const* target) const;
|
bool _IsTargetAcceptable(Unit const* target) const;
|
||||||
[[nodiscard]] bool CanIgnoreFeignDeath() const { return (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_IGNORE_FEIGN_DEATH) != 0; }
|
[[nodiscard]] bool CanIgnoreFeignDeath() const { return HasFlagsExtra(CREATURE_FLAG_EXTRA_IGNORE_FEIGN_DEATH); }
|
||||||
|
|
||||||
// pussywizard: Updated at faction change, disable move in line of sight if actual faction is not hostile to anyone
|
// pussywizard: Updated at faction change, disable move in line of sight if actual faction is not hostile to anyone
|
||||||
void UpdateMoveInLineOfSightState();
|
void UpdateMoveInLineOfSightState();
|
||||||
|
|||||||
@@ -12710,17 +12710,11 @@ bool Player::isHonorOrXPTarget(Unit* victim) const
|
|||||||
|
|
||||||
// Victim level less gray level
|
// Victim level less gray level
|
||||||
if (v_level <= k_grey)
|
if (v_level <= k_grey)
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
if (victim->IsCreature())
|
if (victim->IsCreature())
|
||||||
{
|
if (victim->IsTotem() || victim->IsCritter() || victim->IsPet() || victim->ToCreature()->HasFlagsExtra(CREATURE_FLAG_EXTRA_NO_XP))
|
||||||
if (victim->IsTotem() || victim->IsCritter() || victim->IsPet() || (victim->ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_XP))
|
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -979,9 +979,7 @@ void Player::UpdateWeaponSkill(Unit* victim, WeaponAttackType attType, Item* ite
|
|||||||
if (GetShapeshiftForm() == FORM_TREE)
|
if (GetShapeshiftForm() == FORM_TREE)
|
||||||
return; // use weapon but not skill up
|
return; // use weapon but not skill up
|
||||||
|
|
||||||
if (victim->IsCreature() &&
|
if (victim->IsCreature() && victim->ToCreature()->HasFlagsExtra(CREATURE_FLAG_EXTRA_NO_SKILL_GAINS))
|
||||||
(victim->ToCreature()->GetCreatureTemplate()->flags_extra &
|
|
||||||
CREATURE_FLAG_EXTRA_NO_SKILL_GAINS))
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
uint32 weapon_skill_gain = sWorld->getIntConfig(CONFIG_SKILL_GAIN_WEAPON);
|
uint32 weapon_skill_gain = sWorld->getIntConfig(CONFIG_SKILL_GAIN_WEAPON);
|
||||||
|
|||||||
@@ -2856,7 +2856,7 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst(Unit const* victim, WeaponAttackTy
|
|||||||
//LOG_DEBUG("entities.unit", "RollMeleeOutcomeAgainst: attack came from behind and victim was a player.");
|
//LOG_DEBUG("entities.unit", "RollMeleeOutcomeAgainst: attack came from behind and victim was a player.");
|
||||||
}
|
}
|
||||||
// Xinef: do not allow to dodge with CREATURE_FLAG_EXTRA_NO_DODGE flag
|
// Xinef: do not allow to dodge with CREATURE_FLAG_EXTRA_NO_DODGE flag
|
||||||
else if (victim->IsPlayer() || !(victim->ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_DODGE))
|
else if (victim->IsPlayer() || !(victim->ToCreature()->HasFlagsExtra(CREATURE_FLAG_EXTRA_NO_DODGE)))
|
||||||
{
|
{
|
||||||
// Reduce dodge chance by attacker expertise rating
|
// Reduce dodge chance by attacker expertise rating
|
||||||
if (IsPlayer())
|
if (IsPlayer())
|
||||||
@@ -2898,7 +2898,7 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst(Unit const* victim, WeaponAttackTy
|
|||||||
else
|
else
|
||||||
parry_chance -= GetTotalAuraModifier(SPELL_AURA_MOD_EXPERTISE) * 25;
|
parry_chance -= GetTotalAuraModifier(SPELL_AURA_MOD_EXPERTISE) * 25;
|
||||||
|
|
||||||
if (victim->IsPlayer() || !(victim->ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_PARRY))
|
if (victim->IsPlayer() || !(victim->ToCreature()->HasFlagsExtra(CREATURE_FLAG_EXTRA_NO_PARRY)))
|
||||||
{
|
{
|
||||||
tmp = parry_chance;
|
tmp = parry_chance;
|
||||||
|
|
||||||
@@ -2915,7 +2915,7 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst(Unit const* victim, WeaponAttackTy
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (victim->IsPlayer() || !(victim->ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_BLOCK))
|
if (victim->IsPlayer() || !(victim->ToCreature()->HasFlagsExtra(CREATURE_FLAG_EXTRA_NO_BLOCK)))
|
||||||
{
|
{
|
||||||
tmp = block_chance;
|
tmp = block_chance;
|
||||||
|
|
||||||
@@ -2957,7 +2957,7 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst(Unit const* victim, WeaponAttackTy
|
|||||||
if (getLevelForTarget(victim) >= victim->getLevelForTarget(this) + 4 &&
|
if (getLevelForTarget(victim) >= victim->getLevelForTarget(this) + 4 &&
|
||||||
// can be from by creature (if can) or from controlled player that considered as creature
|
// can be from by creature (if can) or from controlled player that considered as creature
|
||||||
!IsControlledByPlayer() &&
|
!IsControlledByPlayer() &&
|
||||||
!(IsCreature() && ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_CRUSHING_BLOWS))
|
!(IsCreature() && ToCreature()->HasFlagsExtra(CREATURE_FLAG_EXTRA_NO_CRUSHING_BLOWS)))
|
||||||
{
|
{
|
||||||
// when their weapon skill is 15 or more above victim's defense skill
|
// when their weapon skill is 15 or more above victim's defense skill
|
||||||
tmp = victimDefenseSkill;
|
tmp = victimDefenseSkill;
|
||||||
@@ -2984,10 +2984,8 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst(Unit const* victim, WeaponAttackTy
|
|||||||
if (tmp > 0 && roll < (sum += tmp))
|
if (tmp > 0 && roll < (sum += tmp))
|
||||||
{
|
{
|
||||||
LOG_DEBUG("entities.unit", "RollMeleeOutcomeAgainst: CRIT <{}, {})", sum - tmp, sum);
|
LOG_DEBUG("entities.unit", "RollMeleeOutcomeAgainst: CRIT <{}, {})", sum - tmp, sum);
|
||||||
if (IsCreature() && (ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_CRIT))
|
if (IsCreature() && (ToCreature()->HasFlagsExtra(CREATURE_FLAG_EXTRA_NO_CRIT)))
|
||||||
{
|
|
||||||
LOG_DEBUG("entities.unit", "RollMeleeOutcomeAgainst: CRIT DISABLED)");
|
LOG_DEBUG("entities.unit", "RollMeleeOutcomeAgainst: CRIT DISABLED)");
|
||||||
}
|
|
||||||
else
|
else
|
||||||
return MELEE_HIT_CRIT;
|
return MELEE_HIT_CRIT;
|
||||||
}
|
}
|
||||||
@@ -3122,7 +3120,7 @@ bool Unit::isSpellBlocked(Unit* victim, SpellInfo const* spellProto, WeaponAttac
|
|||||||
{
|
{
|
||||||
// Check creatures flags_extra for disable block
|
// Check creatures flags_extra for disable block
|
||||||
if (victim->IsCreature() &&
|
if (victim->IsCreature() &&
|
||||||
victim->ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_BLOCK)
|
victim->ToCreature()->HasFlagsExtra(CREATURE_FLAG_EXTRA_NO_BLOCK))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
float blockChance = victim->GetUnitBlockChance();
|
float blockChance = victim->GetUnitBlockChance();
|
||||||
@@ -10436,10 +10434,9 @@ bool Unit::Attack(Unit* victim, bool meleeAttack)
|
|||||||
creature->SendAIReaction(AI_REACTION_HOSTILE);
|
creature->SendAIReaction(AI_REACTION_HOSTILE);
|
||||||
|
|
||||||
/// @todo: Implement aggro range, detection range and assistance range templates
|
/// @todo: Implement aggro range, detection range and assistance range templates
|
||||||
if (!(creature->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_DONT_CALL_ASSISTANCE))
|
if (!(creature->HasFlagsExtra(CREATURE_FLAG_EXTRA_DONT_CALL_ASSISTANCE)))
|
||||||
{
|
|
||||||
creature->CallAssistance();
|
creature->CallAssistance();
|
||||||
}
|
|
||||||
creature->SetAssistanceTimer(sWorld->getIntConfig(CONFIG_CREATURE_FAMILY_ASSISTANCE_PERIOD));
|
creature->SetAssistanceTimer(sWorld->getIntConfig(CONFIG_CREATURE_FAMILY_ASSISTANCE_PERIOD));
|
||||||
|
|
||||||
SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
|
SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
|
||||||
@@ -15127,7 +15124,7 @@ float Unit::ApplyDiminishingToDuration(DiminishingGroup group, int32& duration,
|
|||||||
Unit const* source = casterOwner ? casterOwner : caster;
|
Unit const* source = casterOwner ? casterOwner : caster;
|
||||||
|
|
||||||
if ((target->IsPlayer()
|
if ((target->IsPlayer()
|
||||||
|| target->ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_ALL_DIMINISH)
|
|| target->ToCreature()->HasFlagsExtra(CREATURE_FLAG_EXTRA_ALL_DIMINISH))
|
||||||
&& source->IsPlayer())
|
&& source->IsPlayer())
|
||||||
duration = limitduration;
|
duration = limitduration;
|
||||||
}
|
}
|
||||||
@@ -15136,7 +15133,7 @@ float Unit::ApplyDiminishingToDuration(DiminishingGroup group, int32& duration,
|
|||||||
|
|
||||||
if (group == DIMINISHING_TAUNT)
|
if (group == DIMINISHING_TAUNT)
|
||||||
{
|
{
|
||||||
if (IsCreature() && (ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_OBEYS_TAUNT_DIMINISHING_RETURNS))
|
if (IsCreature() && (ToCreature()->HasFlagsExtra(CREATURE_FLAG_EXTRA_OBEYS_TAUNT_DIMINISHING_RETURNS)))
|
||||||
{
|
{
|
||||||
DiminishingLevels diminish = Level;
|
DiminishingLevels diminish = Level;
|
||||||
switch (diminish)
|
switch (diminish)
|
||||||
@@ -15163,7 +15160,7 @@ float Unit::ApplyDiminishingToDuration(DiminishingGroup group, int32& duration,
|
|||||||
// Some diminishings applies to mobs too (for example, Stun)
|
// Some diminishings applies to mobs too (for example, Stun)
|
||||||
else if ((GetDiminishingReturnsGroupType(group) == DRTYPE_PLAYER
|
else if ((GetDiminishingReturnsGroupType(group) == DRTYPE_PLAYER
|
||||||
&& ((targetOwner ? (targetOwner->IsPlayer()) : (IsPlayer()))
|
&& ((targetOwner ? (targetOwner->IsPlayer()) : (IsPlayer()))
|
||||||
|| (IsCreature() && ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_ALL_DIMINISH)))
|
|| (IsCreature() && ToCreature()->HasFlagsExtra(CREATURE_FLAG_EXTRA_ALL_DIMINISH))))
|
||||||
|| GetDiminishingReturnsGroupType(group) == DRTYPE_ALL)
|
|| GetDiminishingReturnsGroupType(group) == DRTYPE_ALL)
|
||||||
{
|
{
|
||||||
DiminishingLevels diminish = Level;
|
DiminishingLevels diminish = Level;
|
||||||
@@ -18038,7 +18035,7 @@ void Unit::Kill(Unit* killer, Unit* victim, bool durabilityLoss, WeaponAttackTyp
|
|||||||
|
|
||||||
if (instanceMap->IsDungeon() && player)
|
if (instanceMap->IsDungeon() && player)
|
||||||
if (instanceMap->IsRaidOrHeroicDungeon())
|
if (instanceMap->IsRaidOrHeroicDungeon())
|
||||||
if (creature->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_INSTANCE_BIND)
|
if (creature->HasFlagsExtra(CREATURE_FLAG_EXTRA_INSTANCE_BIND))
|
||||||
instanceMap->ToInstanceMap()->PermBindAllPlayers();
|
instanceMap->ToInstanceMap()->PermBindAllPlayers();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -20966,16 +20963,12 @@ void Unit::PatchValuesUpdate(ByteBuffer& valuesUpdateBuf, BuildValuesCachePosPoi
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cinfo->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER)
|
if (cinfo->HasFlagsExtra(CREATURE_FLAG_EXTRA_TRIGGER))
|
||||||
{
|
{
|
||||||
if (target->IsGameMaster() && target->GetSession()->IsGMAccount())
|
if (target->IsGameMaster() && target->GetSession()->IsGMAccount())
|
||||||
{
|
|
||||||
displayId = cinfo->GetFirstVisibleModel()->CreatureDisplayID;
|
displayId = cinfo->GetFirstVisibleModel()->CreatureDisplayID;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
displayId = cinfo->GetFirstInvisibleModel()->CreatureDisplayID;
|
displayId = cinfo->GetFirstInvisibleModel()->CreatureDisplayID;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1651,7 +1651,7 @@ CreatureModel const* ObjectMgr::ChooseDisplayId(CreatureTemplate const* cinfo, C
|
|||||||
if (CreatureModel const* model = cinfo->GetModelWithDisplayId(data->displayid))
|
if (CreatureModel const* model = cinfo->GetModelWithDisplayId(data->displayid))
|
||||||
return model;
|
return model;
|
||||||
|
|
||||||
if (!(cinfo->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER))
|
if (!cinfo->HasFlagsExtra(CREATURE_FLAG_EXTRA_TRIGGER))
|
||||||
if (CreatureModel const* model = cinfo->GetRandomValidModel())
|
if (CreatureModel const* model = cinfo->GetRandomValidModel())
|
||||||
return model;
|
return model;
|
||||||
|
|
||||||
@@ -2233,7 +2233,7 @@ void ObjectMgr::LoadCreatures()
|
|||||||
data.equipmentId = 0;
|
data.equipmentId = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((cInfo->flags_extra & CREATURE_FLAG_EXTRA_INSTANCE_BIND) || (data.id2 && cInfo2->flags_extra & CREATURE_FLAG_EXTRA_INSTANCE_BIND) || (data.id3 && cInfo3->flags_extra & CREATURE_FLAG_EXTRA_INSTANCE_BIND))
|
if (cInfo->HasFlagsExtra(CREATURE_FLAG_EXTRA_INSTANCE_BIND) || (data.id2 && cInfo2->HasFlagsExtra(CREATURE_FLAG_EXTRA_INSTANCE_BIND)) || (data.id3 && cInfo3->HasFlagsExtra(CREATURE_FLAG_EXTRA_INSTANCE_BIND)))
|
||||||
{
|
{
|
||||||
if (!mapEntry->IsDungeon())
|
if (!mapEntry->IsDungeon())
|
||||||
LOG_ERROR("sql.sql", "Table `creature` have creature (SpawnId: {} Entries: {}, {}, {}) with a `creature_template`.`flags_extra` in one or more entries including CREATURE_FLAG_EXTRA_INSTANCE_BIND but creature are not in instance.",
|
LOG_ERROR("sql.sql", "Table `creature` have creature (SpawnId: {} Entries: {}, {}, {}) with a `creature_template`.`flags_extra` in one or more entries including CREATURE_FLAG_EXTRA_INSTANCE_BIND but creature are not in instance.",
|
||||||
|
|||||||
@@ -743,7 +743,7 @@ void WorldSession::HandleSellItemOpcode(WorldPacket& recvData)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((creature->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_SELL_VENDOR) != 0)
|
if (creature->HasFlagsExtra(CREATURE_FLAG_EXTRA_NO_SELL_VENDOR))
|
||||||
{
|
{
|
||||||
_player->SendSellError(SELL_ERR_CANT_SELL_TO_THIS_MERCHANT, creature, itemguid, 0);
|
_player->SendSellError(SELL_ERR_CANT_SELL_TO_THIS_MERCHANT, creature, itemguid, 0);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -3723,9 +3723,7 @@ void Map::ScheduleCreatureRespawn(ObjectGuid creatureGuid, Milliseconds respawnT
|
|||||||
_creatureRespawnScheduler.Schedule(respawnTimer, [this, creatureGuid](TaskContext)
|
_creatureRespawnScheduler.Schedule(respawnTimer, [this, creatureGuid](TaskContext)
|
||||||
{
|
{
|
||||||
if (Creature* creature = GetCreature(creatureGuid))
|
if (Creature* creature = GetCreature(creatureGuid))
|
||||||
{
|
|
||||||
creature->Respawn();
|
creature->Respawn();
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ uint32 Acore::XP::Gain(Player* player, Unit* unit, bool isBattleGround /*= false
|
|||||||
uint32 gain = 0;
|
uint32 gain = 0;
|
||||||
|
|
||||||
if (!creature || (!creature->IsTotem() && !creature->IsPet() && !creature->IsCritter() &&
|
if (!creature || (!creature->IsTotem() && !creature->IsPet() && !creature->IsCritter() &&
|
||||||
!(creature->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_XP)))
|
!creature->HasFlagsExtra(CREATURE_FLAG_EXTRA_NO_XP)))
|
||||||
{
|
{
|
||||||
float xpMod = 1.0f;
|
float xpMod = 1.0f;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user