refactor(Core/Misc): Define & Rename Attributes and flags (#5193)
This commit is contained in:
@@ -616,7 +616,7 @@ void SmartAI::EnterEvadeMode()
|
|||||||
if (!me->IsAlive() || me->IsInEvadeMode())
|
if (!me->IsAlive() || me->IsInEvadeMode())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (IS_PLAYER_GUID(me->GetCharmerGUID()) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED))
|
if (IS_PLAYER_GUID(me->GetCharmerGUID()) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_POSSESSED))
|
||||||
{
|
{
|
||||||
me->AttackStop();
|
me->AttackStop();
|
||||||
return;
|
return;
|
||||||
@@ -783,7 +783,7 @@ void SmartAI::JustSummoned(Creature* creature)
|
|||||||
void SmartAI::AttackStart(Unit* who)
|
void SmartAI::AttackStart(Unit* who)
|
||||||
{
|
{
|
||||||
// xinef: dont allow charmed npcs to act on their own
|
// xinef: dont allow charmed npcs to act on their own
|
||||||
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED))
|
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_POSSESSED))
|
||||||
{
|
{
|
||||||
if (who && mCanAutoAttack)
|
if (who && mCanAutoAttack)
|
||||||
me->Attack(who, true);
|
me->Attack(who, true);
|
||||||
|
|||||||
@@ -980,7 +980,7 @@ bool Creature::Create(uint32 guidlow, Map* map, uint32 phaseMask, uint32 Entry,
|
|||||||
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);
|
||||||
}
|
}
|
||||||
else if (cinfo->type_flags & CREATURE_TYPE_FLAG_GHOST_VISIBLE) // Xinef: Add ghost visibility for ghost units
|
else if (cinfo->type_flags & CREATURE_TYPE_FLAG_VISIBLE_TO_GHOSTS) // Xinef: Add ghost visibility for ghost units
|
||||||
m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_ALIVE | GHOST_VISIBILITY_GHOST);
|
m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_ALIVE | GHOST_VISIBILITY_GHOST);
|
||||||
|
|
||||||
if (Entry == VISUAL_WAYPOINT)
|
if (Entry == VISUAL_WAYPOINT)
|
||||||
|
|||||||
@@ -32,22 +32,22 @@ enum CreatureFlagsExtra : uint32
|
|||||||
CREATURE_FLAG_EXTRA_NO_PARRY = 0x00000004, // creature can't parry
|
CREATURE_FLAG_EXTRA_NO_PARRY = 0x00000004, // creature can't parry
|
||||||
CREATURE_FLAG_EXTRA_NO_PARRY_HASTEN = 0x00000008, // creature can't counter-attack at parry
|
CREATURE_FLAG_EXTRA_NO_PARRY_HASTEN = 0x00000008, // creature can't counter-attack at parry
|
||||||
CREATURE_FLAG_EXTRA_NO_BLOCK = 0x00000010, // creature can't block
|
CREATURE_FLAG_EXTRA_NO_BLOCK = 0x00000010, // creature can't block
|
||||||
CREATURE_FLAG_EXTRA_NO_CRUSH = 0x00000020, // creature can't do crush attacks
|
CREATURE_FLAG_EXTRA_NO_CRUSHING_BLOWS = 0x00000020, // creature can't do crush attacks
|
||||||
CREATURE_FLAG_EXTRA_NO_XP_AT_KILL = 0x00000040, // creature kill not provide XP
|
CREATURE_FLAG_EXTRA_NO_XP = 0x00000040, // creature kill does not provide XP
|
||||||
CREATURE_FLAG_EXTRA_TRIGGER = 0x00000080, // trigger creature
|
CREATURE_FLAG_EXTRA_TRIGGER = 0x00000080, // trigger creature
|
||||||
CREATURE_FLAG_EXTRA_NO_TAUNT = 0x00000100, // creature is immune to taunt auras and effect attack me
|
CREATURE_FLAG_EXTRA_NO_TAUNT = 0x00000100, // creature is immune to taunt auras and 'attack me' effects
|
||||||
CREATURE_FLAG_EXTRA_UNUSED_10 = 0x00000200, // TODO: Implement CREATURE_FLAG_EXTRA_NO_MOVE_FLAGS_UPDATE (creature won't update movement flags)
|
CREATURE_FLAG_EXTRA_UNUSED_10 = 0x00000200, // TODO: Implement CREATURE_FLAG_EXTRA_NO_MOVE_FLAGS_UPDATE (creature won't update movement flags)
|
||||||
CREATURE_FLAG_EXTRA_GHOST_VISIBILITY = 0x00000400, // creature will be only visible for dead players
|
CREATURE_FLAG_EXTRA_GHOST_VISIBILITY = 0x00000400, // creature will only be visible to dead players
|
||||||
CREATURE_FLAG_EXTRA_UNUSED_12 = 0x00000800, // TODO: Implement CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK (creature will use offhand attacks)
|
CREATURE_FLAG_EXTRA_UNUSED_12 = 0x00000800, // TODO: Implement CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK (creature will use offhand attacks)
|
||||||
CREATURE_FLAG_EXTRA_NO_SELL_VENDOR = 0x00001000, // players can't sell items to this vendor
|
CREATURE_FLAG_EXTRA_NO_SELL_VENDOR = 0x00001000, // players can't sell items to this vendor
|
||||||
CREATURE_FLAG_EXTRA_UNUSED_14 = 0x00002000,
|
CREATURE_FLAG_EXTRA_IGNORE_COMBAT = 0x00002000,
|
||||||
CREATURE_FLAG_EXTRA_WORLDEVENT = 0x00004000, // custom flag for world event creatures (left room for merging)
|
CREATURE_FLAG_EXTRA_WORLDEVENT = 0x00004000, // custom flag for world event creatures (left room for merging)
|
||||||
CREATURE_FLAG_EXTRA_GUARD = 0x00008000, // Creature is guard
|
CREATURE_FLAG_EXTRA_GUARD = 0x00008000, // Creature is guard
|
||||||
CREATURE_FLAG_EXTRA_UNUSED_17 = 0x00010000,
|
CREATURE_FLAG_EXTRA_UNUSED_17 = 0x00010000,
|
||||||
CREATURE_FLAG_EXTRA_NO_CRIT = 0x00020000, // creature can't do critical strikes
|
CREATURE_FLAG_EXTRA_NO_CRIT = 0x00020000, // creature can't do critical strikes
|
||||||
CREATURE_FLAG_EXTRA_NO_SKILLGAIN = 0x00040000, // creature won't increase weapon skills
|
CREATURE_FLAG_EXTRA_NO_SKILL_GAINS = 0x00040000, // creature won't increase weapon skills
|
||||||
CREATURE_FLAG_EXTRA_TAUNT_DIMINISH = 0x00080000, // Taunt is a subject to diminishing returns on this creautre
|
CREATURE_FLAG_EXTRA_OBEYS_TAUNT_DIMINISHING_RETURNS = 0x00080000, // Taunt is subject to diminishing returns on this creature
|
||||||
CREATURE_FLAG_EXTRA_ALL_DIMINISH = 0x00100000, // Creature is subject to all diminishing returns as player are
|
CREATURE_FLAG_EXTRA_ALL_DIMINISH = 0x00100000, // creature is subject to all diminishing returns as players are
|
||||||
CREATURE_FLAG_EXTRA_UNUSED_22 = 0x00200000,
|
CREATURE_FLAG_EXTRA_UNUSED_22 = 0x00200000,
|
||||||
CREATURE_FLAG_EXTRA_AVOID_AOE = 0x00400000, // pussywizard: ignored by aoe attacks (for icc blood prince council npc - Dark Nucleus)
|
CREATURE_FLAG_EXTRA_AVOID_AOE = 0x00400000, // pussywizard: ignored by aoe attacks (for icc blood prince council npc - Dark Nucleus)
|
||||||
CREATURE_FLAG_EXTRA_NO_DODGE = 0x00800000, // xinef: target cannot dodge
|
CREATURE_FLAG_EXTRA_NO_DODGE = 0x00800000, // xinef: target cannot dodge
|
||||||
@@ -61,10 +61,9 @@ enum CreatureFlagsExtra : uint32
|
|||||||
CREATURE_FLAG_EXTRA_UNUSED_32 = 0x80000000,
|
CREATURE_FLAG_EXTRA_UNUSED_32 = 0x80000000,
|
||||||
|
|
||||||
// Masks
|
// Masks
|
||||||
CREATURE_FLAG_EXTRA_UNUSED = (CREATURE_FLAG_EXTRA_UNUSED_10 | CREATURE_FLAG_EXTRA_UNUSED_12 |
|
CREATURE_FLAG_EXTRA_UNUSED = (CREATURE_FLAG_EXTRA_UNUSED_10 | CREATURE_FLAG_EXTRA_UNUSED_12 | CREATURE_FLAG_EXTRA_UNUSED_17 |
|
||||||
CREATURE_FLAG_EXTRA_UNUSED_14 | CREATURE_FLAG_EXTRA_UNUSED_17 | CREATURE_FLAG_EXTRA_UNUSED_22 |
|
CREATURE_FLAG_EXTRA_UNUSED_22 | CREATURE_FLAG_EXTRA_UNUSED_25 | CREATURE_FLAG_EXTRA_UNUSED_26 |
|
||||||
CREATURE_FLAG_EXTRA_UNUSED_25 | CREATURE_FLAG_EXTRA_UNUSED_26 | CREATURE_FLAG_EXTRA_UNUSED_27 |
|
CREATURE_FLAG_EXTRA_UNUSED_27 | CREATURE_FLAG_EXTRA_UNUSED_28 | CREATURE_FLAG_EXTRA_UNUSED_32),
|
||||||
CREATURE_FLAG_EXTRA_UNUSED_28 | CREATURE_FLAG_EXTRA_UNUSED_32),
|
|
||||||
CREATURE_FLAG_EXTRA_DB_ALLOWED = (0xFFFFFFFF & ~(CREATURE_FLAG_EXTRA_UNUSED | CREATURE_FLAG_EXTRA_DUNGEON_BOSS))
|
CREATURE_FLAG_EXTRA_DB_ALLOWED = (0xFFFFFFFF & ~(CREATURE_FLAG_EXTRA_UNUSED | CREATURE_FLAG_EXTRA_DUNGEON_BOSS))
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -146,11 +145,11 @@ struct CreatureTemplate
|
|||||||
// helpers
|
// helpers
|
||||||
[[nodiscard]] SkillType GetRequiredLootSkill() const
|
[[nodiscard]] SkillType GetRequiredLootSkill() const
|
||||||
{
|
{
|
||||||
if (type_flags & CREATURE_TYPE_FLAG_HERB_SKINNING_SKILL)
|
if (type_flags & CREATURE_TYPE_FLAG_SKIN_WITH_HERBALISM)
|
||||||
return SKILL_HERBALISM;
|
return SKILL_HERBALISM;
|
||||||
else if (type_flags & CREATURE_TYPE_FLAG_MINING_SKINNING_SKILL)
|
else if (type_flags & CREATURE_TYPE_FLAG_SKIN_WITH_MINING)
|
||||||
return SKILL_MINING;
|
return SKILL_MINING;
|
||||||
else if (type_flags & CREATURE_TYPE_FLAG_ENGINEERING_SKINNING_SKILL)
|
else if (type_flags & CREATURE_TYPE_FLAG_SKIN_WITH_ENGINEERING)
|
||||||
return SKILL_ENGINEERING;
|
return SKILL_ENGINEERING;
|
||||||
else
|
else
|
||||||
return SKILL_SKINNING; // normal case
|
return SKILL_SKINNING; // normal case
|
||||||
@@ -158,16 +157,16 @@ struct CreatureTemplate
|
|||||||
|
|
||||||
[[nodiscard]] bool IsExotic() const
|
[[nodiscard]] bool IsExotic() const
|
||||||
{
|
{
|
||||||
return (type_flags & CREATURE_TYPE_FLAG_EXOTIC_PET) != 0;
|
return (type_flags & CREATURE_TYPE_FLAG_TAMEABLE_EXOTIC) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] bool IsTameable(bool exotic) const
|
[[nodiscard]] bool IsTameable(bool exotic) const
|
||||||
{
|
{
|
||||||
if (type != CREATURE_TYPE_BEAST || family == 0 || (type_flags & CREATURE_TYPE_FLAG_TAMEABLE_PET) == 0)
|
if (type != CREATURE_TYPE_BEAST || family == 0 || (type_flags & CREATURE_TYPE_FLAG_TAMEABLE) == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// if can tame exotic then can tame any tameable
|
// if can tame exotic then can tame any tameable
|
||||||
return exotic || (type_flags & CREATURE_TYPE_FLAG_EXOTIC_PET) == 0;
|
return exotic || (type_flags & CREATURE_TYPE_FLAG_TAMEABLE_EXOTIC) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitializeQueryData();
|
void InitializeQueryData();
|
||||||
|
|||||||
@@ -1903,8 +1903,8 @@ void GameObject::CastSpell(Unit* target, uint32 spellId)
|
|||||||
// needed for GO casts for proper target validation checks
|
// needed for GO casts for proper target validation checks
|
||||||
trigger->SetOwnerGUID(owner->GetGUID());
|
trigger->SetOwnerGUID(owner->GetGUID());
|
||||||
// xinef: fixes some duel bugs with traps]
|
// xinef: fixes some duel bugs with traps]
|
||||||
if (owner->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE))
|
if (owner->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED))
|
||||||
trigger->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
|
trigger->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
||||||
if (owner->IsFFAPvP())
|
if (owner->IsFFAPvP())
|
||||||
trigger->SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP);
|
trigger->SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP);
|
||||||
|
|
||||||
|
|||||||
@@ -1095,7 +1095,7 @@ bool Player::Create(uint32 guidlow, CharacterCreateInfo* createInfo)
|
|||||||
if (sWorld->getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_PVP || sWorld->getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_RPPVP)
|
if (sWorld->getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_PVP || sWorld->getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_RPPVP)
|
||||||
{
|
{
|
||||||
SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_PVP);
|
SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_PVP);
|
||||||
SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
|
SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
||||||
}
|
}
|
||||||
SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_REGENERATE_POWER);
|
SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_REGENERATE_POWER);
|
||||||
SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f); // fix cast time showed in spell tooltip on client
|
SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f); // fix cast time showed in spell tooltip on client
|
||||||
@@ -1632,7 +1632,7 @@ void Player::Update(uint32 p_time)
|
|||||||
UpdateAfkReport(now);
|
UpdateAfkReport(now);
|
||||||
|
|
||||||
// Xinef: update charm AI only if we are controlled by creature or non-posses player charm
|
// Xinef: update charm AI only if we are controlled by creature or non-posses player charm
|
||||||
if (IsCharmed() && !HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED))
|
if (IsCharmed() && !HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_POSSESSED))
|
||||||
{
|
{
|
||||||
m_charmUpdateTimer += p_time;
|
m_charmUpdateTimer += p_time;
|
||||||
if (m_charmUpdateTimer >= 1000)
|
if (m_charmUpdateTimer >= 1000)
|
||||||
@@ -2967,11 +2967,11 @@ Creature* Player::GetNPCIfCanInteractWith(uint64 guid, uint32 npcflagmask)
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
// Deathstate checks
|
// Deathstate checks
|
||||||
if (!IsAlive() && !(creature->GetCreatureTemplate()->type_flags & CREATURE_TYPE_FLAG_GHOST_VISIBLE))
|
if (!IsAlive() && !(creature->GetCreatureTemplate()->type_flags & CREATURE_TYPE_FLAG_VISIBLE_TO_GHOSTS))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
// alive or spirit healer
|
// alive or spirit healer
|
||||||
if (!creature->IsAlive() && !(creature->GetCreatureTemplate()->type_flags & CREATURE_TYPE_FLAG_CAN_INTERACT_WHILE_DEAD))
|
if (!creature->IsAlive() && !(creature->GetCreatureTemplate()->type_flags & CREATURE_TYPE_FLAG_INTERACT_WHILE_DEAD))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
// appropriate npc type
|
// appropriate npc type
|
||||||
@@ -3563,7 +3563,7 @@ void Player::InitStatsForLevel(bool reapplyMods)
|
|||||||
UNIT_FLAG_STUNNED | UNIT_FLAG_IN_COMBAT | UNIT_FLAG_DISARMED |
|
UNIT_FLAG_STUNNED | UNIT_FLAG_IN_COMBAT | UNIT_FLAG_DISARMED |
|
||||||
UNIT_FLAG_CONFUSED | UNIT_FLAG_FLEEING | UNIT_FLAG_NOT_SELECTABLE |
|
UNIT_FLAG_CONFUSED | UNIT_FLAG_FLEEING | UNIT_FLAG_NOT_SELECTABLE |
|
||||||
UNIT_FLAG_SKINNABLE | UNIT_FLAG_MOUNT | UNIT_FLAG_TAXI_FLIGHT );
|
UNIT_FLAG_SKINNABLE | UNIT_FLAG_MOUNT | UNIT_FLAG_TAXI_FLIGHT );
|
||||||
SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); // must be set
|
SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED); // must be set
|
||||||
|
|
||||||
SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_REGENERATE_POWER);// must be set
|
SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_REGENERATE_POWER);// must be set
|
||||||
|
|
||||||
@@ -6520,7 +6520,7 @@ void Player::UpdateWeaponSkill(WeaponAttackType attType)
|
|||||||
if (GetShapeshiftForm() == FORM_TREE)
|
if (GetShapeshiftForm() == FORM_TREE)
|
||||||
return; // use weapon but not skill up
|
return; // use weapon but not skill up
|
||||||
|
|
||||||
if (victim && victim->GetTypeId() == TYPEID_UNIT && (victim->ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_SKILLGAIN))
|
if (victim && victim->GetTypeId() == TYPEID_UNIT && (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);
|
||||||
@@ -24696,7 +24696,7 @@ bool Player::isHonorOrXPTarget(Unit* victim) const
|
|||||||
{
|
{
|
||||||
if (victim->IsTotem() ||
|
if (victim->IsTotem() ||
|
||||||
victim->IsPet() ||
|
victim->IsPet() ||
|
||||||
victim->ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_XP_AT_KILL)
|
victim->ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_XP)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -2509,7 +2509,7 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst(const Unit* 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() &&
|
||||||
!(GetTypeId() == TYPEID_UNIT && ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_CRUSH))
|
!(GetTypeId() == TYPEID_UNIT && ToCreature()->GetCreatureTemplate()->flags_extra & 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;
|
||||||
@@ -9636,9 +9636,9 @@ ReputationRank Unit::GetReactionTo(Unit const* target) const
|
|||||||
return *repRank;
|
return *repRank;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE))
|
if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED))
|
||||||
{
|
{
|
||||||
if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE))
|
if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED))
|
||||||
{
|
{
|
||||||
if (selfPlayerOwner && targetPlayerOwner)
|
if (selfPlayerOwner && targetPlayerOwner)
|
||||||
{
|
{
|
||||||
@@ -10202,7 +10202,7 @@ void Unit::SetMinion(Minion* minion, bool apply)
|
|||||||
if (GetTypeId() == TYPEID_PLAYER)
|
if (GetTypeId() == TYPEID_PLAYER)
|
||||||
{
|
{
|
||||||
minion->m_ControlledByPlayer = true;
|
minion->m_ControlledByPlayer = true;
|
||||||
minion->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
|
minion->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Can only have one pet. If a new one is summoned, dismiss the old one.
|
// Can only have one pet. If a new one is summoned, dismiss the old one.
|
||||||
@@ -10385,7 +10385,7 @@ void Unit::SetCharm(Unit* charm, bool apply)
|
|||||||
|
|
||||||
charm->m_ControlledByPlayer = true;
|
charm->m_ControlledByPlayer = true;
|
||||||
// TODO: maybe we can use this flag to check if controlled by player
|
// TODO: maybe we can use this flag to check if controlled by player
|
||||||
charm->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
|
charm->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
charm->m_ControlledByPlayer = false;
|
charm->m_ControlledByPlayer = false;
|
||||||
@@ -10415,13 +10415,13 @@ void Unit::SetCharm(Unit* charm, bool apply)
|
|||||||
if (charm->GetTypeId() == TYPEID_PLAYER)
|
if (charm->GetTypeId() == TYPEID_PLAYER)
|
||||||
{
|
{
|
||||||
charm->m_ControlledByPlayer = true;
|
charm->m_ControlledByPlayer = true;
|
||||||
charm->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
|
charm->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
||||||
charm->ToPlayer()->UpdatePvPState();
|
charm->ToPlayer()->UpdatePvPState();
|
||||||
}
|
}
|
||||||
else if (Player* player = charm->GetCharmerOrOwnerPlayerOrPlayerItself())
|
else if (Player* player = charm->GetCharmerOrOwnerPlayerOrPlayerItself())
|
||||||
{
|
{
|
||||||
charm->m_ControlledByPlayer = true;
|
charm->m_ControlledByPlayer = true;
|
||||||
charm->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
|
charm->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
||||||
charm->SetByteValue(UNIT_FIELD_BYTES_2, 1, player->GetByteValue(UNIT_FIELD_BYTES_2, 1));
|
charm->SetByteValue(UNIT_FIELD_BYTES_2, 1, player->GetByteValue(UNIT_FIELD_BYTES_2, 1));
|
||||||
|
|
||||||
// Xinef: skip controlled erase if charmed unit is owned by charmer
|
// Xinef: skip controlled erase if charmed unit is owned by charmer
|
||||||
@@ -10431,7 +10431,7 @@ void Unit::SetCharm(Unit* charm, bool apply)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
charm->m_ControlledByPlayer = false;
|
charm->m_ControlledByPlayer = false;
|
||||||
charm->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
|
charm->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
||||||
charm->SetByteValue(UNIT_FIELD_BYTES_2, 1, 0);
|
charm->SetByteValue(UNIT_FIELD_BYTES_2, 1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -13005,7 +13005,7 @@ void Unit::SetInCombatState(bool PvP, Unit* enemy, uint32 duration)
|
|||||||
UpdateSpeed(MOVE_FLIGHT, true);
|
UpdateSpeed(MOVE_FLIGHT, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(creature->GetCreatureTemplate()->type_flags & CREATURE_TYPE_FLAG_MOUNTED_COMBAT_ALLOWED))
|
if (!(creature->GetCreatureTemplate()->type_flags & CREATURE_TYPE_FLAG_ALLOW_MOUNTED_COMBAT))
|
||||||
Dismount();
|
Dismount();
|
||||||
if (!IsStandState()) // pussywizard: already done in CombatStart(target, initialAggro) for the target, but when aggro'ing from MoveInLOS CombatStart is not called!
|
if (!IsStandState()) // pussywizard: already done in CombatStart(target, initialAggro) for the target, but when aggro'ing from MoveInLOS CombatStart is not called!
|
||||||
SetStandState(UNIT_STAND_STATE_STAND);
|
SetStandState(UNIT_STAND_STATE_STAND);
|
||||||
@@ -13133,15 +13133,15 @@ bool Unit::_IsValidAttackTarget(Unit const* target, SpellInfo const* bySpell, Wo
|
|||||||
}
|
}
|
||||||
// check flags
|
// check flags
|
||||||
if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_TAXI_FLIGHT | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_NON_ATTACKABLE_2)
|
if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_TAXI_FLIGHT | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_NON_ATTACKABLE_2)
|
||||||
|| (!HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC))
|
|| (!HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED) && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC))
|
||||||
|| (!target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC))
|
|| (!target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED) && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC))
|
||||||
|| (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC))
|
|| (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED) && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC))
|
||||||
// check if this is a world trigger cast - GOs are using world triggers to cast their spells, so we need to ignore their immunity flag here, this is a temp workaround, needs removal when go cast is implemented properly
|
// check if this is a world trigger cast - GOs are using world triggers to cast their spells, so we need to ignore their immunity flag here, this is a temp workaround, needs removal when go cast is implemented properly
|
||||||
|| (GetEntry() != WORLD_TRIGGER && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC)))
|
|| (GetEntry() != WORLD_TRIGGER && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED) && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// CvC case - can attack each other only when one of them is hostile
|
// CvC case - can attack each other only when one of them is hostile
|
||||||
if (!HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) && !target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE))
|
if (!HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED) && !target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED))
|
||||||
return GetReactionTo(target) <= REP_HOSTILE || target->GetReactionTo(this) <= REP_HOSTILE;
|
return GetReactionTo(target) <= REP_HOSTILE || target->GetReactionTo(this) <= REP_HOSTILE;
|
||||||
|
|
||||||
// PvP, PvC, CvP case
|
// PvP, PvC, CvP case
|
||||||
@@ -13180,8 +13180,8 @@ bool Unit::_IsValidAttackTarget(Unit const* target, SpellInfo const* bySpell, Wo
|
|||||||
if (creatureAttacker && creatureAttacker->GetCreatureTemplate()->type_flags & CREATURE_TYPE_FLAG_TREAT_AS_RAID_UNIT)
|
if (creatureAttacker && creatureAttacker->GetCreatureTemplate()->type_flags & CREATURE_TYPE_FLAG_TREAT_AS_RAID_UNIT)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
Player const* playerAffectingAttacker = HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) ? GetAffectingPlayer() : nullptr;
|
Player const* playerAffectingAttacker = HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED) ? GetAffectingPlayer() : nullptr;
|
||||||
Player const* playerAffectingTarget = target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) ? target->GetAffectingPlayer() : nullptr;
|
Player const* playerAffectingTarget = target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED) ? target->GetAffectingPlayer() : nullptr;
|
||||||
|
|
||||||
// check duel - before sanctuary checks
|
// check duel - before sanctuary checks
|
||||||
if (playerAffectingAttacker && playerAffectingTarget)
|
if (playerAffectingAttacker && playerAffectingTarget)
|
||||||
@@ -13190,7 +13190,7 @@ bool Unit::_IsValidAttackTarget(Unit const* target, SpellInfo const* bySpell, Wo
|
|||||||
|
|
||||||
// PvP case - can't attack when attacker or target are in sanctuary
|
// PvP case - can't attack when attacker or target are in sanctuary
|
||||||
// however, 13850 client doesn't allow to attack when one of the unit's has sanctuary flag and is pvp
|
// however, 13850 client doesn't allow to attack when one of the unit's has sanctuary flag and is pvp
|
||||||
if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) && (target->IsInSanctuary() || IsInSanctuary()))
|
if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED) && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED) && (target->IsInSanctuary() || IsInSanctuary()))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// additional checks - only PvP case
|
// additional checks - only PvP case
|
||||||
@@ -13250,7 +13250,7 @@ bool Unit::_IsValidAssistTarget(Unit const* target, SpellInfo const* bySpell) co
|
|||||||
if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
|
if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE))
|
if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED))
|
||||||
{
|
{
|
||||||
if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC))
|
if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC))
|
||||||
return false;
|
return false;
|
||||||
@@ -13269,10 +13269,10 @@ bool Unit::_IsValidAssistTarget(Unit const* target, SpellInfo const* bySpell) co
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
// PvP case
|
// PvP case
|
||||||
if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE))
|
if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED))
|
||||||
{
|
{
|
||||||
Player const* targetPlayerOwner = target->GetAffectingPlayer();
|
Player const* targetPlayerOwner = target->GetAffectingPlayer();
|
||||||
if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE))
|
if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED))
|
||||||
{
|
{
|
||||||
Player const* selfPlayerOwner = GetAffectingPlayer();
|
Player const* selfPlayerOwner = GetAffectingPlayer();
|
||||||
if (selfPlayerOwner && targetPlayerOwner)
|
if (selfPlayerOwner && targetPlayerOwner)
|
||||||
@@ -13293,8 +13293,8 @@ bool Unit::_IsValidAssistTarget(Unit const* target, SpellInfo const* bySpell) co
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// PvC case - player can assist creature only if has specific type flags
|
// PvC case - player can assist creature only if has specific type flags
|
||||||
// !target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) &&
|
// !target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED) &&
|
||||||
else if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE)
|
else if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED)
|
||||||
&& (!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG))
|
&& (!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG))
|
||||||
&& !target->IsPvP())
|
&& !target->IsPvP())
|
||||||
{
|
{
|
||||||
@@ -13562,7 +13562,7 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced)
|
|||||||
if (GetTypeId() == TYPEID_UNIT)
|
if (GetTypeId() == TYPEID_UNIT)
|
||||||
{
|
{
|
||||||
Unit* pOwner = GetCharmerOrOwner();
|
Unit* pOwner = GetCharmerOrOwner();
|
||||||
if (pOwner && !IsInCombat() && !IsVehicle() && !HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED) && (IsPet() || IsGuardian() || GetGUID() == pOwner->GetCritterGUID() || GetCharmerGUID() == pOwner->GetGUID()))
|
if (pOwner && !IsInCombat() && !IsVehicle() && !HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_POSSESSED) && (IsPet() || IsGuardian() || GetGUID() == pOwner->GetCritterGUID() || GetCharmerGUID() == pOwner->GetGUID()))
|
||||||
{
|
{
|
||||||
if (pOwner->GetTypeId() != TYPEID_PLAYER)
|
if (pOwner->GetTypeId() != TYPEID_PLAYER)
|
||||||
{
|
{
|
||||||
@@ -13721,7 +13721,7 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
|
|||||||
pet = GetCharm();
|
pet = GetCharm();
|
||||||
|
|
||||||
// xinef: do not affect vehicles and possesed pets
|
// xinef: do not affect vehicles and possesed pets
|
||||||
if (pet && (pet->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED) || pet->IsVehicle()))
|
if (pet && (pet->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_POSSESSED) || pet->IsVehicle()))
|
||||||
pet = nullptr;
|
pet = nullptr;
|
||||||
|
|
||||||
if (pet && pet->GetTypeId() == TYPEID_UNIT && !pet->IsInCombat() && pet->GetMotionMaster()->GetCurrentMovementGeneratorType() == FOLLOW_MOTION_TYPE)
|
if (pet && pet->GetTypeId() == TYPEID_UNIT && !pet->IsInCombat() && pet->GetMotionMaster()->GetCurrentMovementGeneratorType() == FOLLOW_MOTION_TYPE)
|
||||||
@@ -14298,7 +14298,7 @@ float Unit::ApplyDiminishingToDuration(DiminishingGroup group, int32& duration,
|
|||||||
|
|
||||||
if (group == DIMINISHING_TAUNT)
|
if (group == DIMINISHING_TAUNT)
|
||||||
{
|
{
|
||||||
if (GetTypeId() == TYPEID_UNIT && (ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_TAUNT_DIMINISH))
|
if (GetTypeId() == TYPEID_UNIT && (ToCreature()->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_OBEYS_TAUNT_DIMINISHING_RETURNS))
|
||||||
{
|
{
|
||||||
DiminishingLevels diminish = Level;
|
DiminishingLevels diminish = Level;
|
||||||
switch (diminish)
|
switch (diminish)
|
||||||
@@ -16652,7 +16652,7 @@ bool Unit::InitTamedPet(Pet* pet, uint8 level, uint32 spell_id)
|
|||||||
pet->SetUInt32Value(UNIT_CREATED_BY_SPELL, spell_id);
|
pet->SetUInt32Value(UNIT_CREATED_BY_SPELL, spell_id);
|
||||||
|
|
||||||
if (GetTypeId() == TYPEID_PLAYER)
|
if (GetTypeId() == TYPEID_PLAYER)
|
||||||
pet->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
|
pet->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
||||||
|
|
||||||
if (!pet->InitStatsForLevel(level))
|
if (!pet->InitStatsForLevel(level))
|
||||||
{
|
{
|
||||||
@@ -17482,9 +17482,9 @@ void Unit::DisableRotate(bool apply)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (apply)
|
if (apply)
|
||||||
SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_POSSESSED);
|
||||||
else if (!HasUnitState(UNIT_STATE_POSSESSED))
|
else if (!HasUnitState(UNIT_STATE_POSSESSED))
|
||||||
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_POSSESSED);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Unit::SetFeared(bool apply)
|
void Unit::SetFeared(bool apply)
|
||||||
@@ -17694,7 +17694,7 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au
|
|||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case CHARM_TYPE_VEHICLE:
|
case CHARM_TYPE_VEHICLE:
|
||||||
SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_POSSESSED);
|
||||||
AddUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD);
|
AddUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD);
|
||||||
playerCharmer->SetClientControl(this, true); // verified
|
playerCharmer->SetClientControl(this, true); // verified
|
||||||
playerCharmer->VehicleSpellInitialize();
|
playerCharmer->VehicleSpellInitialize();
|
||||||
@@ -17702,7 +17702,7 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au
|
|||||||
case CHARM_TYPE_POSSESS:
|
case CHARM_TYPE_POSSESS:
|
||||||
AddUnitState(UNIT_STATE_POSSESSED);
|
AddUnitState(UNIT_STATE_POSSESSED);
|
||||||
AddUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD);
|
AddUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD);
|
||||||
SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_POSSESSED);
|
||||||
charmer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
|
charmer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
|
||||||
playerCharmer->SetClientControl(this, true); // verified
|
playerCharmer->SetClientControl(this, true); // verified
|
||||||
playerCharmer->PossessSpellInitialize();
|
playerCharmer->PossessSpellInitialize();
|
||||||
@@ -17827,14 +17827,14 @@ void Unit::RemoveCharmedBy(Unit* charmer)
|
|||||||
case CHARM_TYPE_VEHICLE:
|
case CHARM_TYPE_VEHICLE:
|
||||||
playerCharmer->SetClientControl(this, false);
|
playerCharmer->SetClientControl(this, false);
|
||||||
playerCharmer->SetClientControl(charmer, true); // verified
|
playerCharmer->SetClientControl(charmer, true); // verified
|
||||||
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_POSSESSED);
|
||||||
ClearUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD);
|
ClearUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD);
|
||||||
break;
|
break;
|
||||||
case CHARM_TYPE_POSSESS:
|
case CHARM_TYPE_POSSESS:
|
||||||
playerCharmer->SetClientControl(this, false);
|
playerCharmer->SetClientControl(this, false);
|
||||||
playerCharmer->SetClientControl(charmer, true); // verified
|
playerCharmer->SetClientControl(charmer, true); // verified
|
||||||
charmer->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
|
charmer->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
|
||||||
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_POSSESSED);
|
||||||
ClearUnitState(UNIT_STATE_POSSESSED);
|
ClearUnitState(UNIT_STATE_POSSESSED);
|
||||||
ClearUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD);
|
ClearUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD);
|
||||||
break;
|
break;
|
||||||
@@ -19094,7 +19094,7 @@ bool Unit::CanSwim() const
|
|||||||
// Mirror client behavior, if this method returns false then client will not use swimming animation and for players will apply gravity as if there was no water
|
// Mirror client behavior, if this method returns false then client will not use swimming animation and for players will apply gravity as if there was no water
|
||||||
if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CANNOT_SWIM))
|
if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CANNOT_SWIM))
|
||||||
return false;
|
return false;
|
||||||
if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED)) // is player
|
if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_POSSESSED)) // is player
|
||||||
return true;
|
return true;
|
||||||
if (HasFlag(UNIT_FIELD_FLAGS_2, 0x1000000))
|
if (HasFlag(UNIT_FIELD_FLAGS_2, 0x1000000))
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -280,20 +280,21 @@ enum HitInfo
|
|||||||
HITINFO_FULL_RESIST = 0x00000080,
|
HITINFO_FULL_RESIST = 0x00000080,
|
||||||
HITINFO_PARTIAL_RESIST = 0x00000100,
|
HITINFO_PARTIAL_RESIST = 0x00000100,
|
||||||
HITINFO_CRITICALHIT = 0x00000200, // critical hit
|
HITINFO_CRITICALHIT = 0x00000200, // critical hit
|
||||||
// 0x00000400
|
HITINFO_UNK10 = 0x00000400,
|
||||||
// 0x00000800
|
HITINFO_UNK11 = 0x00000800,
|
||||||
// 0x00001000
|
HITINFO_UNK12 = 0x00001000,
|
||||||
HITINFO_BLOCK = 0x00002000, // blocked damage
|
HITINFO_BLOCK = 0x00002000, // blocked damage
|
||||||
// 0x00004000 // Hides worldtext for 0 damage
|
HITINFO_UNK14 = 0x00004000, // set only if meleespellid is present// no world text when victim is hit for 0 dmg(HideWorldTextForNoDamage?)
|
||||||
// 0x00008000 // Related to blood visual
|
HITINFO_UNK15 = 0x00008000, // player victim?// something related to blod sprut visual (BloodSpurtInBack?)
|
||||||
HITINFO_GLANCING = 0x00010000,
|
HITINFO_GLANCING = 0x00010000,
|
||||||
HITINFO_CRUSHING = 0x00020000,
|
HITINFO_CRUSHING = 0x00020000,
|
||||||
HITINFO_NO_ANIMATION = 0x00040000,
|
HITINFO_NO_ANIMATION = 0x00040000,
|
||||||
// 0x00080000
|
HITINFO_UNK19 = 0x00080000,
|
||||||
// 0x00100000
|
HITINFO_UNK20 = 0x00100000,
|
||||||
HITINFO_SWINGNOHITSOUND = 0x00200000, // unused?
|
HITINFO_SWINGNOHITSOUND = 0x00200000, // unused?
|
||||||
// 0x00400000
|
HITINFO_UNK22 = 0x00400000,
|
||||||
HITINFO_RAGE_GAIN = 0x00800000
|
HITINFO_RAGE_GAIN = 0x00800000,
|
||||||
|
HITINFO_FAKE_DAMAGE = 0x01000000 // enables damage animation even if no damage done, set only if no damage
|
||||||
};
|
};
|
||||||
|
|
||||||
//i would like to remove this: (it is defined in item.h
|
//i would like to remove this: (it is defined in item.h
|
||||||
@@ -584,11 +585,11 @@ enum UnitFlags
|
|||||||
UNIT_FLAG_SERVER_CONTROLLED = 0x00000001, // set only when unit movement is controlled by server - by SPLINE/MONSTER_MOVE packets, together with UNIT_FLAG_STUNNED; only set to units controlled by client; client function CGUnit_C::IsClientControlled returns false when set for owner
|
UNIT_FLAG_SERVER_CONTROLLED = 0x00000001, // set only when unit movement is controlled by server - by SPLINE/MONSTER_MOVE packets, together with UNIT_FLAG_STUNNED; only set to units controlled by client; client function CGUnit_C::IsClientControlled returns false when set for owner
|
||||||
UNIT_FLAG_NON_ATTACKABLE = 0x00000002, // not attackable
|
UNIT_FLAG_NON_ATTACKABLE = 0x00000002, // not attackable
|
||||||
UNIT_FLAG_DISABLE_MOVE = 0x00000004,
|
UNIT_FLAG_DISABLE_MOVE = 0x00000004,
|
||||||
UNIT_FLAG_PVP_ATTACKABLE = 0x00000008, // allow apply pvp rules to attackable state in addition to faction dependent state
|
UNIT_FLAG_PLAYER_CONTROLLED = 0x00000008, // controlled by player, use _IMMUNE_TO_PC instead of _IMMUNE_TO_NPC
|
||||||
UNIT_FLAG_RENAME = 0x00000010,
|
UNIT_FLAG_RENAME = 0x00000010,
|
||||||
UNIT_FLAG_PREPARATION = 0x00000020, // don't take reagents for spells with SPELL_ATTR5_NO_REAGENT_WHILE_PREP
|
UNIT_FLAG_PREPARATION = 0x00000020, // don't take reagents for spells with SPELL_ATTR5_NO_REAGENT_WHILE_PREP
|
||||||
UNIT_FLAG_UNK_6 = 0x00000040,
|
UNIT_FLAG_UNK_6 = 0x00000040,
|
||||||
UNIT_FLAG_NOT_ATTACKABLE_1 = 0x00000080, // ?? (UNIT_FLAG_PVP_ATTACKABLE | UNIT_FLAG_NOT_ATTACKABLE_1) is NON_PVP_ATTACKABLE
|
UNIT_FLAG_NOT_ATTACKABLE_1 = 0x00000080, // ?? (UNIT_FLAG_PLAYER_CONTROLLED | UNIT_FLAG_NOT_ATTACKABLE_1) is NON_PVP_ATTACKABLE
|
||||||
UNIT_FLAG_IMMUNE_TO_PC = 0x00000100, // disables combat/assistance with PlayerCharacters (PC) - see Unit::_IsValidAttackTarget, Unit::_IsValidAssistTarget
|
UNIT_FLAG_IMMUNE_TO_PC = 0x00000100, // disables combat/assistance with PlayerCharacters (PC) - see Unit::_IsValidAttackTarget, Unit::_IsValidAssistTarget
|
||||||
UNIT_FLAG_IMMUNE_TO_NPC = 0x00000200, // disables combat/assistance with NonPlayerCharacters (NPC) - see Unit::_IsValidAttackTarget, Unit::_IsValidAssistTarget
|
UNIT_FLAG_IMMUNE_TO_NPC = 0x00000200, // disables combat/assistance with NonPlayerCharacters (NPC) - see Unit::_IsValidAttackTarget, Unit::_IsValidAssistTarget
|
||||||
UNIT_FLAG_LOOTING = 0x00000400, // loot animation
|
UNIT_FLAG_LOOTING = 0x00000400, // loot animation
|
||||||
@@ -605,12 +606,12 @@ enum UnitFlags
|
|||||||
UNIT_FLAG_DISARMED = 0x00200000, // 3.0.3, disable melee spells casting..., "Required melee weapon" added to melee spells tooltip.
|
UNIT_FLAG_DISARMED = 0x00200000, // 3.0.3, disable melee spells casting..., "Required melee weapon" added to melee spells tooltip.
|
||||||
UNIT_FLAG_CONFUSED = 0x00400000,
|
UNIT_FLAG_CONFUSED = 0x00400000,
|
||||||
UNIT_FLAG_FLEEING = 0x00800000,
|
UNIT_FLAG_FLEEING = 0x00800000,
|
||||||
UNIT_FLAG_PLAYER_CONTROLLED = 0x01000000, // used in spell Eyes of the Beast for pet... let attack by controlled creature
|
UNIT_FLAG_POSSESSED = 0x01000000, // under direct client control by a player (possess or vehicle)
|
||||||
UNIT_FLAG_NOT_SELECTABLE = 0x02000000,
|
UNIT_FLAG_NOT_SELECTABLE = 0x02000000,
|
||||||
UNIT_FLAG_SKINNABLE = 0x04000000,
|
UNIT_FLAG_SKINNABLE = 0x04000000,
|
||||||
UNIT_FLAG_MOUNT = 0x08000000,
|
UNIT_FLAG_MOUNT = 0x08000000,
|
||||||
UNIT_FLAG_UNK_28 = 0x10000000,
|
UNIT_FLAG_UNK_28 = 0x10000000,
|
||||||
UNIT_FLAG_UNK_29 = 0x20000000, // used in Feing Death spell
|
UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT = 0x20000000, // Prevent automatically playing emotes from parsing chat text, for example "lol" in /say, ending message with ? or !, or using /yell
|
||||||
UNIT_FLAG_SHEATHE = 0x40000000,
|
UNIT_FLAG_SHEATHE = 0x40000000,
|
||||||
UNIT_FLAG_IMMUNE = 0x80000000, // Immune to damage
|
UNIT_FLAG_IMMUNE = 0x80000000, // Immune to damage
|
||||||
};
|
};
|
||||||
@@ -619,11 +620,11 @@ enum UnitFlags
|
|||||||
enum UnitFlags2
|
enum UnitFlags2
|
||||||
{
|
{
|
||||||
UNIT_FLAG2_FEIGN_DEATH = 0x00000001,
|
UNIT_FLAG2_FEIGN_DEATH = 0x00000001,
|
||||||
UNIT_FLAG2_UNK1 = 0x00000002, // Hide unit model (show only player equip)
|
UNIT_FLAG2_HIDE_BODY = 0x00000002, // Hide unit model (show only player equip)
|
||||||
UNIT_FLAG2_IGNORE_REPUTATION = 0x00000004,
|
UNIT_FLAG2_IGNORE_REPUTATION = 0x00000004,
|
||||||
UNIT_FLAG2_COMPREHEND_LANG = 0x00000008,
|
UNIT_FLAG2_COMPREHEND_LANG = 0x00000008,
|
||||||
UNIT_FLAG2_MIRROR_IMAGE = 0x00000010,
|
UNIT_FLAG2_MIRROR_IMAGE = 0x00000010,
|
||||||
UNIT_FLAG2_INSTANTLY_APPEAR_MODEL = 0x00000020, // Unit model instantly appears when summoned (does not fade in)
|
UNIT_FLAG2_DO_NOT_FADE_IN = 0x00000020, // Unit model instantly appears when summoned (does not fade in)
|
||||||
UNIT_FLAG2_FORCE_MOVEMENT = 0x00000040,
|
UNIT_FLAG2_FORCE_MOVEMENT = 0x00000040,
|
||||||
UNIT_FLAG2_DISARM_OFFHAND = 0x00000080,
|
UNIT_FLAG2_DISARM_OFFHAND = 0x00000080,
|
||||||
UNIT_FLAG2_DISABLE_PRED_STATS = 0x00000100, // Player has disabled predicted stats (Used by raid frames)
|
UNIT_FLAG2_DISABLE_PRED_STATS = 0x00000100, // Player has disabled predicted stats (Used by raid frames)
|
||||||
@@ -632,7 +633,7 @@ enum UnitFlags2
|
|||||||
UNIT_FLAG2_RESTRICT_PARTY_INTERACTION = 0x00001000, // Restrict interaction to party or raid
|
UNIT_FLAG2_RESTRICT_PARTY_INTERACTION = 0x00001000, // Restrict interaction to party or raid
|
||||||
UNIT_FLAG2_PREVENT_SPELL_CLICK = 0x00002000, // Prevent spellclick
|
UNIT_FLAG2_PREVENT_SPELL_CLICK = 0x00002000, // Prevent spellclick
|
||||||
UNIT_FLAG2_ALLOW_ENEMY_INTERACT = 0x00004000,
|
UNIT_FLAG2_ALLOW_ENEMY_INTERACT = 0x00004000,
|
||||||
UNIT_FLAG2_DISABLE_TURN = 0x00008000,
|
UNIT_FLAG2_CANNOT_TURN = 0x00008000,
|
||||||
UNIT_FLAG2_UNK2 = 0x00010000,
|
UNIT_FLAG2_UNK2 = 0x00010000,
|
||||||
UNIT_FLAG2_PLAY_DEATH_ANIM = 0x00020000, // Plays special death animation upon death
|
UNIT_FLAG2_PLAY_DEATH_ANIM = 0x00020000, // Plays special death animation upon death
|
||||||
UNIT_FLAG2_ALLOW_CHEAT_SPELLS = 0x00040000, // Allows casting spells with AttributesEx7 & SPELL_ATTR7_IS_CHEAT_SPELL
|
UNIT_FLAG2_ALLOW_CHEAT_SPELLS = 0x00040000, // Allows casting spells with AttributesEx7 & SPELL_ATTR7_IS_CHEAT_SPELL
|
||||||
@@ -641,34 +642,34 @@ enum UnitFlags2
|
|||||||
/// Non Player Character flags
|
/// Non Player Character flags
|
||||||
enum NPCFlags
|
enum NPCFlags
|
||||||
{
|
{
|
||||||
UNIT_NPC_FLAG_NONE = 0x00000000,
|
UNIT_NPC_FLAG_NONE = 0x00000000, // SKIP
|
||||||
UNIT_NPC_FLAG_GOSSIP = 0x00000001, // 100%
|
UNIT_NPC_FLAG_GOSSIP = 0x00000001, // TITLE has gossip menu DESCRIPTION 100%
|
||||||
UNIT_NPC_FLAG_QUESTGIVER = 0x00000002, // guessed, probably ok
|
UNIT_NPC_FLAG_QUESTGIVER = 0x00000002, // TITLE is quest giver DESCRIPTION guessed, probably ok
|
||||||
UNIT_NPC_FLAG_UNK1 = 0x00000004,
|
UNIT_NPC_FLAG_UNK1 = 0x00000004,
|
||||||
UNIT_NPC_FLAG_UNK2 = 0x00000008,
|
UNIT_NPC_FLAG_UNK2 = 0x00000008,
|
||||||
UNIT_NPC_FLAG_TRAINER = 0x00000010, // 100%
|
UNIT_NPC_FLAG_TRAINER = 0x00000010, // TITLE is trainer DESCRIPTION 100%
|
||||||
UNIT_NPC_FLAG_TRAINER_CLASS = 0x00000020, // 100%
|
UNIT_NPC_FLAG_TRAINER_CLASS = 0x00000020, // TITLE is class trainer DESCRIPTION 100%
|
||||||
UNIT_NPC_FLAG_TRAINER_PROFESSION = 0x00000040, // 100%
|
UNIT_NPC_FLAG_TRAINER_PROFESSION = 0x00000040, // TITLE is profession trainer DESCRIPTION 100%
|
||||||
UNIT_NPC_FLAG_VENDOR = 0x00000080, // 100%
|
UNIT_NPC_FLAG_VENDOR = 0x00000080, // TITLE is vendor (generic) DESCRIPTION 100%
|
||||||
UNIT_NPC_FLAG_VENDOR_AMMO = 0x00000100, // 100%, general goods vendor
|
UNIT_NPC_FLAG_VENDOR_AMMO = 0x00000100, // TITLE is vendor (ammo) DESCRIPTION 100%, general goods vendor
|
||||||
UNIT_NPC_FLAG_VENDOR_FOOD = 0x00000200, // 100%
|
UNIT_NPC_FLAG_VENDOR_FOOD = 0x00000200, // TITLE is vendor (food) DESCRIPTION 100%
|
||||||
UNIT_NPC_FLAG_VENDOR_POISON = 0x00000400, // guessed
|
UNIT_NPC_FLAG_VENDOR_POISON = 0x00000400, // TITLE is vendor (poison) DESCRIPTION guessed
|
||||||
UNIT_NPC_FLAG_VENDOR_REAGENT = 0x00000800, // 100%
|
UNIT_NPC_FLAG_VENDOR_REAGENT = 0x00000800, // TITLE is vendor (reagents) DESCRIPTION 100%
|
||||||
UNIT_NPC_FLAG_REPAIR = 0x00001000, // 100%
|
UNIT_NPC_FLAG_REPAIR = 0x00001000, // TITLE can repair DESCRIPTION 100%
|
||||||
UNIT_NPC_FLAG_FLIGHTMASTER = 0x00002000, // 100%
|
UNIT_NPC_FLAG_FLIGHTMASTER = 0x00002000, // TITLE is flight master DESCRIPTION 100%
|
||||||
UNIT_NPC_FLAG_SPIRITHEALER = 0x00004000, // guessed
|
UNIT_NPC_FLAG_SPIRITHEALER = 0x00004000, // TITLE is spirit healer DESCRIPTION guessed
|
||||||
UNIT_NPC_FLAG_SPIRITGUIDE = 0x00008000, // guessed
|
UNIT_NPC_FLAG_SPIRITGUIDE = 0x00008000, // TITLE is spirit guide DESCRIPTION guessed
|
||||||
UNIT_NPC_FLAG_INNKEEPER = 0x00010000, // 100%
|
UNIT_NPC_FLAG_INNKEEPER = 0x00010000, // TITLE is innkeeper
|
||||||
UNIT_NPC_FLAG_BANKER = 0x00020000, // 100%
|
UNIT_NPC_FLAG_BANKER = 0x00020000, // TITLE is banker DESCRIPTION 100%
|
||||||
UNIT_NPC_FLAG_PETITIONER = 0x00040000, // 100% 0xC0000 = guild petitions, 0x40000 = arena team petitions
|
UNIT_NPC_FLAG_PETITIONER = 0x00040000, // TITLE handles guild/arena petitions DESCRIPTION 100% 0xC0000 = guild petitions, 0x40000 = arena team petitions
|
||||||
UNIT_NPC_FLAG_TABARDDESIGNER = 0x00080000, // 100%
|
UNIT_NPC_FLAG_TABARDDESIGNER = 0x00080000, // TITLE is guild tabard designer DESCRIPTION 100%
|
||||||
UNIT_NPC_FLAG_BATTLEMASTER = 0x00100000, // 100%
|
UNIT_NPC_FLAG_BATTLEMASTER = 0x00100000, // TITLE is battlemaster DESCRIPTION 100%
|
||||||
UNIT_NPC_FLAG_AUCTIONEER = 0x00200000, // 100%
|
UNIT_NPC_FLAG_AUCTIONEER = 0x00200000, // TITLE is auctioneer DESCRIPTION 100%
|
||||||
UNIT_NPC_FLAG_STABLEMASTER = 0x00400000, // 100%
|
UNIT_NPC_FLAG_STABLEMASTER = 0x00400000, // TITLE is stable master DESCRIPTION 100%
|
||||||
UNIT_NPC_FLAG_GUILD_BANKER = 0x00800000, // cause client to send 997 opcode
|
UNIT_NPC_FLAG_GUILD_BANKER = 0x00800000, // TITLE is guild banker DESCRIPTION cause client to send 997 opcode
|
||||||
UNIT_NPC_FLAG_SPELLCLICK = 0x01000000, // cause client to send 1015 opcode (spell click)
|
UNIT_NPC_FLAG_SPELLCLICK = 0x01000000, // TITLE has spell click enabled DESCRIPTION cause client to send 1015 opcode (spell click)
|
||||||
UNIT_NPC_FLAG_PLAYER_VEHICLE = 0x02000000, // players with mounts that have vehicle data should have it set
|
UNIT_NPC_FLAG_PLAYER_VEHICLE = 0x02000000, // TITLE is player vehicle DESCRIPTION players with mounts that have vehicle data should have it set
|
||||||
UNIT_NPC_FLAG_MAILBOX = 0x04000000 //
|
UNIT_NPC_FLAG_MAILBOX = 0x04000000 // TITLE is mailbox
|
||||||
};
|
};
|
||||||
|
|
||||||
enum MovementFlags
|
enum MovementFlags
|
||||||
|
|||||||
@@ -180,7 +180,7 @@ uint8 WorldSession::HandleLoadPetFromDBFirstCallback(PreparedQueryResult result,
|
|||||||
else
|
else
|
||||||
pet->SetUInt32Value(UNIT_FIELD_BYTES_0, 0x800); // class = mage
|
pet->SetUInt32Value(UNIT_FIELD_BYTES_0, 0x800); // class = mage
|
||||||
|
|
||||||
pet->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
|
pet->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
||||||
// this enables popup window (pet dismiss, cancel)
|
// this enables popup window (pet dismiss, cancel)
|
||||||
break;
|
break;
|
||||||
case HUNTER_PET:
|
case HUNTER_PET:
|
||||||
@@ -188,7 +188,7 @@ uint8 WorldSession::HandleLoadPetFromDBFirstCallback(PreparedQueryResult result,
|
|||||||
pet->SetSheath(SHEATH_STATE_MELEE);
|
pet->SetSheath(SHEATH_STATE_MELEE);
|
||||||
pet->SetByteFlag(UNIT_FIELD_BYTES_2, 2, fields[9].GetBool() ? UNIT_CAN_BE_ABANDONED : UNIT_CAN_BE_RENAMED | UNIT_CAN_BE_ABANDONED);
|
pet->SetByteFlag(UNIT_FIELD_BYTES_2, 2, fields[9].GetBool() ? UNIT_CAN_BE_ABANDONED : UNIT_CAN_BE_RENAMED | UNIT_CAN_BE_ABANDONED);
|
||||||
|
|
||||||
pet->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
|
pet->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
||||||
// this enables popup window (pet abandon, cancel)
|
// this enables popup window (pet abandon, cancel)
|
||||||
pet->SetMaxPower(POWER_HAPPINESS, pet->GetCreatePowers(POWER_HAPPINESS));
|
pet->SetMaxPower(POWER_HAPPINESS, pet->GetCreatePowers(POWER_HAPPINESS));
|
||||||
pet->SetPower(POWER_HAPPINESS, fields[12].GetUInt32());
|
pet->SetPower(POWER_HAPPINESS, fields[12].GetUInt32());
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ namespace acore
|
|||||||
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_AT_KILL)))
|
!(creature->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_XP)))
|
||||||
{
|
{
|
||||||
float xpMod = 1.0f;
|
float xpMod = 1.0f;
|
||||||
|
|
||||||
|
|||||||
@@ -327,7 +327,7 @@ enum SpellAttr1
|
|||||||
SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY = 0x00008000, // TITLE Immunity cancels preapplied auras DESCRIPTION For immunity spells, cancel all auras that this spell would make you immune to when the spell is applied
|
SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY = 0x00008000, // TITLE Immunity cancels preapplied auras DESCRIPTION For immunity spells, cancel all auras that this spell would make you immune to when the spell is applied
|
||||||
SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE = 0x00010000, // TITLE Unaffected by school immunities DESCRIPTION Will not pierce Divine Shield, Ice Block and other full invulnerabilities
|
SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE = 0x00010000, // TITLE Unaffected by school immunities DESCRIPTION Will not pierce Divine Shield, Ice Block and other full invulnerabilities
|
||||||
SPELL_ATTR1_UNAUTOCASTABLE_BY_PET = 0x00020000, // TITLE Cannot be autocast by pet
|
SPELL_ATTR1_UNAUTOCASTABLE_BY_PET = 0x00020000, // TITLE Cannot be autocast by pet
|
||||||
SPELL_ATTR1_UNK18 = 0x00040000, // TITLE Unknown attribute 18@Attr1 DESCRIPTION Stun, Polymorph, Daze, Hex - CC?
|
SPELL_ATTR1_PREVENTS_ANIM = 0x00040000, // TITLE NYI, auras apply UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT
|
||||||
SPELL_ATTR1_CANT_TARGET_SELF = 0x00080000, // TITLE Cannot be self-cast
|
SPELL_ATTR1_CANT_TARGET_SELF = 0x00080000, // TITLE Cannot be self-cast
|
||||||
SPELL_ATTR1_REQ_COMBO_POINTS1 = 0x00100000, // TITLE Requires combo points (type 1)
|
SPELL_ATTR1_REQ_COMBO_POINTS1 = 0x00100000, // TITLE Requires combo points (type 1)
|
||||||
SPELL_ATTR1_UNK21 = 0x00200000, // TITLE Unknown attribute 21@Attr1
|
SPELL_ATTR1_UNK21 = 0x00200000, // TITLE Unknown attribute 21@Attr1
|
||||||
@@ -2571,27 +2571,27 @@ enum CreatureFamily
|
|||||||
|
|
||||||
enum CreatureTypeFlags
|
enum CreatureTypeFlags
|
||||||
{
|
{
|
||||||
CREATURE_TYPE_FLAG_TAMEABLE_PET = 0x00000001, // Makes the mob tameable (must also be a beast and have family set)
|
CREATURE_TYPE_FLAG_TAMEABLE = 0x00000001, // Makes the mob tameable (must also be a beast and have family set)
|
||||||
CREATURE_TYPE_FLAG_GHOST_VISIBLE = 0x00000002, // Creature are also visible for not alive player. Allow gossip interaction if npcflag allow?
|
CREATURE_TYPE_FLAG_VISIBLE_TO_GHOSTS = 0x00000002, // Creature is also visible for not alive player. Allows gossip interaction if npcflag allows?
|
||||||
CREATURE_TYPE_FLAG_BOSS_MOB = 0x00000004, // Changes creature's visible level to "??" in the creature's portrait - Immune Knockback.
|
CREATURE_TYPE_FLAG_BOSS_MOB = 0x00000004, // Changes creature's visible level to "??" in the creature's portrait - Immune Knockback.
|
||||||
CREATURE_TYPE_FLAG_DO_NOT_PLAY_WOUND_PARRY_ANIMATION = 0x00000008,
|
CREATURE_TYPE_FLAG_DO_NOT_PLAY_WOUND_PARRY_ANIMATION = 0x00000008,
|
||||||
CREATURE_TYPE_FLAG_HIDE_FACTION_TOOLTIP = 0x00000010,
|
CREATURE_TYPE_FLAG_NO_FACTION_TOOLTIP = 0x00000010,
|
||||||
CREATURE_TYPE_FLAG_UNK5 = 0x00000020, // Sound related
|
CREATURE_TYPE_FLAG_MORE_AUDIBLE = 0x00000020, // Sound related
|
||||||
CREATURE_TYPE_FLAG_SPELL_ATTACKABLE = 0x00000040,
|
CREATURE_TYPE_FLAG_SPELL_ATTACKABLE = 0x00000040,
|
||||||
CREATURE_TYPE_FLAG_CAN_INTERACT_WHILE_DEAD = 0x00000080, // Player can interact with the creature if its dead (not player dead)
|
CREATURE_TYPE_FLAG_INTERACT_WHILE_DEAD = 0x00000080, // Player can interact with the creature if creature is dead (not if player is dead)
|
||||||
CREATURE_TYPE_FLAG_HERB_SKINNING_SKILL = 0x00000100, // Can be looted by herbalist
|
CREATURE_TYPE_FLAG_SKIN_WITH_HERBALISM = 0x00000100, // Can be looted by herbalist
|
||||||
CREATURE_TYPE_FLAG_MINING_SKINNING_SKILL = 0x00000200, // Can be looted by miner
|
CREATURE_TYPE_FLAG_SKIN_WITH_MINING = 0x00000200, // Can be looted by miner
|
||||||
CREATURE_TYPE_FLAG_DO_NOT_LOG_DEATH = 0x00000400, // Death event will not show up in combat log
|
CREATURE_TYPE_FLAG_NO_DEATH_MESSAGE = 0x00000400, // Death event will not show up in combat log
|
||||||
CREATURE_TYPE_FLAG_MOUNTED_COMBAT_ALLOWED = 0x00000800, // Creature can remain mounted when entering combat
|
CREATURE_TYPE_FLAG_ALLOW_MOUNTED_COMBAT = 0x00000800, // Creature can remain mounted when entering combat
|
||||||
CREATURE_TYPE_FLAG_CAN_ASSIST = 0x00001000, // ? Can aid any player in combat if in range?
|
CREATURE_TYPE_FLAG_CAN_ASSIST = 0x00001000, // ? Can aid any player in combat if in range?
|
||||||
CREATURE_TYPE_FLAG_IS_PET_BAR_USED = 0x00002000,
|
CREATURE_TYPE_FLAG_NO_PET_BAR = 0x00002000,
|
||||||
CREATURE_TYPE_FLAG_MASK_UID = 0x00004000,
|
CREATURE_TYPE_FLAG_MASK_UID = 0x00004000,
|
||||||
CREATURE_TYPE_FLAG_ENGINEERING_SKINNING_SKILL = 0x00008000, // Can be looted by engineer
|
CREATURE_TYPE_FLAG_SKIN_WITH_ENGINEERING = 0x00008000, // Can be looted by engineer
|
||||||
CREATURE_TYPE_FLAG_EXOTIC_PET = 0x00010000, // Can be tamed by hunter as exotic pet
|
CREATURE_TYPE_FLAG_TAMEABLE_EXOTIC = 0x00010000, // Can be tamed by hunter as exotic pet
|
||||||
CREATURE_TYPE_FLAG_USE_DEFAULT_COLLISION_BOX = 0x00020000, // Collision related. (always using default collision box?)
|
CREATURE_TYPE_FLAG_USE_MODEL_COLLISION_SIZE = 0x00020000, // Collision related. (always using default collision box?)
|
||||||
CREATURE_TYPE_FLAG_IS_SIEGE_WEAPON = 0x00040000,
|
CREATURE_TYPE_FLAG_ALLOW_INTERACTION_WHILE_IN_COMBAT = 0x00040000,
|
||||||
CREATURE_TYPE_FLAG_CAN_COLLIDE_WITH_MISSILES = 0x00080000, // Projectiles can collide with this creature - interacts with TARGET_DEST_TRAJ
|
CREATURE_TYPE_FLAG_COLLIDE_WITH_MISSILES = 0x00080000, // Projectiles can collide with this creature - interacts with TARGET_DEST_TRAJ
|
||||||
CREATURE_TYPE_FLAG_HIDE_NAME_PLATE = 0x00100000,
|
CREATURE_TYPE_FLAG_NO_NAME_PLATE = 0x00100000,
|
||||||
CREATURE_TYPE_FLAG_DO_NOT_PLAY_MOUNTED_ANIMATIONS = 0x00200000,
|
CREATURE_TYPE_FLAG_DO_NOT_PLAY_MOUNTED_ANIMATIONS = 0x00200000,
|
||||||
CREATURE_TYPE_FLAG_IS_LINK_ALL = 0x00400000,
|
CREATURE_TYPE_FLAG_IS_LINK_ALL = 0x00400000,
|
||||||
CREATURE_TYPE_FLAG_INTERACT_ONLY_WITH_CREATOR = 0x00800000,
|
CREATURE_TYPE_FLAG_INTERACT_ONLY_WITH_CREATOR = 0x00800000,
|
||||||
|
|||||||
@@ -2462,7 +2462,7 @@ void AuraEffect::HandleFeignDeath(AuraApplication const* aurApp, uint8 mode, boo
|
|||||||
if (aurApp->GetRemoveMode())
|
if (aurApp->GetRemoveMode())
|
||||||
return;
|
return;
|
||||||
// blizz like 2.0.x
|
// blizz like 2.0.x
|
||||||
target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29);
|
target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT);
|
||||||
// blizz like 2.0.x
|
// blizz like 2.0.x
|
||||||
target->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
target->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
||||||
// blizz like 2.0.x
|
// blizz like 2.0.x
|
||||||
@@ -2479,7 +2479,7 @@ void AuraEffect::HandleFeignDeath(AuraApplication const* aurApp, uint8 mode, boo
|
|||||||
target->SendMessageToSet(&data, true);
|
target->SendMessageToSet(&data, true);
|
||||||
*/
|
*/
|
||||||
// blizz like 2.0.x
|
// blizz like 2.0.x
|
||||||
target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29);
|
target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT);
|
||||||
// blizz like 2.0.x
|
// blizz like 2.0.x
|
||||||
target->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
target->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
||||||
// blizz like 2.0.x
|
// blizz like 2.0.x
|
||||||
@@ -5482,13 +5482,13 @@ void AuraEffect::HandleAuraModFaction(AuraApplication const* aurApp, uint8 mode,
|
|||||||
{
|
{
|
||||||
target->setFaction(GetMiscValue());
|
target->setFaction(GetMiscValue());
|
||||||
if (target->GetTypeId() == TYPEID_PLAYER)
|
if (target->GetTypeId() == TYPEID_PLAYER)
|
||||||
target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
|
target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
target->RestoreFaction();
|
target->RestoreFaction();
|
||||||
if (target->GetTypeId() == TYPEID_PLAYER)
|
if (target->GetTypeId() == TYPEID_PLAYER)
|
||||||
target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
|
target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2817,7 +2817,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA
|
|||||||
|
|
||||||
// Increase Diminishing on unit, current informations for actually casts will use values above
|
// Increase Diminishing on unit, current informations for actually casts will use values above
|
||||||
if ((type == DRTYPE_PLAYER && (
|
if ((type == DRTYPE_PLAYER && (
|
||||||
unit->GetCharmerOrOwnerPlayerOrPlayerItself() || flagsExtra & CREATURE_FLAG_EXTRA_ALL_DIMINISH || (m_diminishGroup == DIMINISHING_TAUNT && (flagsExtra & CREATURE_FLAG_EXTRA_TAUNT_DIMINISH))
|
unit->GetCharmerOrOwnerPlayerOrPlayerItself() || flagsExtra & CREATURE_FLAG_EXTRA_ALL_DIMINISH || (m_diminishGroup == DIMINISHING_TAUNT && (flagsExtra & CREATURE_FLAG_EXTRA_OBEYS_TAUNT_DIMINISHING_RETURNS))
|
||||||
)) || type == DRTYPE_ALL)
|
)) || type == DRTYPE_ALL)
|
||||||
unit->IncrDiminishing(m_diminishGroup);
|
unit->IncrDiminishing(m_diminishGroup);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ public:
|
|||||||
|
|
||||||
player->SetByteValue(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_PVP);
|
player->SetByteValue(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_PVP);
|
||||||
|
|
||||||
player->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
|
player->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
||||||
|
|
||||||
//-1 is default value
|
//-1 is default value
|
||||||
player->SetUInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX, uint32(-1));
|
player->SetUInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX, uint32(-1));
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ public:
|
|||||||
|
|
||||||
void removeFeignDeath()
|
void removeFeignDeath()
|
||||||
{
|
{
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29);
|
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT);
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
||||||
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
|
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
|
||||||
@@ -147,7 +147,7 @@ public:
|
|||||||
killer = attacker;
|
killer = attacker;
|
||||||
events.ScheduleEvent(EVENT_IGNITE, 10000);
|
events.ScheduleEvent(EVENT_IGNITE, 10000);
|
||||||
me->SetHealth(1);
|
me->SetHealth(1);
|
||||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29);
|
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT);
|
||||||
me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
||||||
me->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
me->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
||||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
|
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
|
||||||
@@ -204,7 +204,7 @@ public:
|
|||||||
{
|
{
|
||||||
Talk(EMOTE_IGNITE);
|
Talk(EMOTE_IGNITE);
|
||||||
me->SetFullHealth();
|
me->SetFullHealth();
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29);
|
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT);
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
||||||
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
|
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
|
||||||
|
|||||||
@@ -164,7 +164,7 @@ public:
|
|||||||
float z = 159.65f;
|
float z = 159.65f;
|
||||||
creature->SetWalk(true);
|
creature->SetWalk(true);
|
||||||
creature->GetMotionMaster()->MovePoint(0, x, y, z);
|
creature->GetMotionMaster()->MovePoint(0, x, y, z);
|
||||||
creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
|
creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ public:
|
|||||||
{
|
{
|
||||||
if (Spell->SpellFamilyFlags[2] & 0x080000000)
|
if (Spell->SpellFamilyFlags[2] & 0x080000000)
|
||||||
{
|
{
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
|
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
||||||
me->SetStandState(UNIT_STAND_STATE_STAND);
|
me->SetStandState(UNIT_STAND_STATE_STAND);
|
||||||
|
|
||||||
DoCast(me, SPELL_STUNNED, true);
|
DoCast(me, SPELL_STUNNED, true);
|
||||||
|
|||||||
+2
-2
@@ -141,7 +141,7 @@ public:
|
|||||||
summons.clear();
|
summons.clear();
|
||||||
|
|
||||||
me->CastSpell(me, SPELL_BK_FEIGN_DEATH, true);
|
me->CastSpell(me, SPELL_BK_FEIGN_DEATH, true);
|
||||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29);
|
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT);
|
||||||
me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
||||||
me->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
me->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
||||||
me->AddUnitState(UNIT_STATE_DIED);
|
me->AddUnitState(UNIT_STATE_DIED);
|
||||||
@@ -183,7 +183,7 @@ public:
|
|||||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||||
me->SetControlled(false, UNIT_STATE_STUNNED);
|
me->SetControlled(false, UNIT_STATE_STUNNED);
|
||||||
|
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29);
|
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT);
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
||||||
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
||||||
me->ClearUnitState(UNIT_STATE_DIED);
|
me->ClearUnitState(UNIT_STATE_DIED);
|
||||||
|
|||||||
@@ -405,7 +405,7 @@ public:
|
|||||||
c->CastSpell(c, 69753, false);
|
c->CastSpell(c, 69753, false);
|
||||||
|
|
||||||
me->SetReactState(REACT_PASSIVE);
|
me->SetReactState(REACT_PASSIVE);
|
||||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29 | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||||
me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
||||||
me->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
me->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
||||||
me->AddUnitState(UNIT_STATE_DIED);
|
me->AddUnitState(UNIT_STATE_DIED);
|
||||||
|
|||||||
@@ -1095,7 +1095,7 @@ public:
|
|||||||
{
|
{
|
||||||
npc_pos_freed_slaveAI(Creature* creature) : SmartAI(creature)
|
npc_pos_freed_slaveAI(Creature* creature) : SmartAI(creature)
|
||||||
{
|
{
|
||||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
|
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
||||||
// immune to falling icicles
|
// immune to falling icicles
|
||||||
me->ApplySpellImmune(0, IMMUNITY_ID, 69425, true);
|
me->ApplySpellImmune(0, IMMUNITY_ID, 69425, true);
|
||||||
me->ApplySpellImmune(0, IMMUNITY_ID, 70827, true);
|
me->ApplySpellImmune(0, IMMUNITY_ID, 70827, true);
|
||||||
|
|||||||
@@ -354,7 +354,7 @@ public:
|
|||||||
{
|
{
|
||||||
case ACTION_STAND_UP:
|
case ACTION_STAND_UP:
|
||||||
summons.DespawnEntry(WORLD_TRIGGER);
|
summons.DespawnEntry(WORLD_TRIGGER);
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||||
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
||||||
me->SetReactState(REACT_AGGRESSIVE);
|
me->SetReactState(REACT_AGGRESSIVE);
|
||||||
@@ -623,7 +623,7 @@ public:
|
|||||||
{
|
{
|
||||||
case ACTION_STAND_UP:
|
case ACTION_STAND_UP:
|
||||||
summons.DespawnEntry(WORLD_TRIGGER);
|
summons.DespawnEntry(WORLD_TRIGGER);
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||||
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
||||||
me->SetReactState(REACT_AGGRESSIVE);
|
me->SetReactState(REACT_AGGRESSIVE);
|
||||||
@@ -916,7 +916,7 @@ public:
|
|||||||
{
|
{
|
||||||
case ACTION_STAND_UP:
|
case ACTION_STAND_UP:
|
||||||
summons.DespawnEntry(WORLD_TRIGGER);
|
summons.DespawnEntry(WORLD_TRIGGER);
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
|
||||||
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
||||||
me->SetReactState(REACT_AGGRESSIVE);
|
me->SetReactState(REACT_AGGRESSIVE);
|
||||||
|
|||||||
@@ -734,7 +734,7 @@ public:
|
|||||||
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
||||||
me->UpdateEntry(NPC_REANIMATED_FANATIC);
|
me->UpdateEntry(NPC_REANIMATED_FANATIC);
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE);
|
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT | UNIT_FLAG_NOT_SELECTABLE);
|
||||||
me->SetReactState(REACT_AGGRESSIVE);
|
me->SetReactState(REACT_AGGRESSIVE);
|
||||||
DoZoneInCombat(me);
|
DoZoneInCombat(me);
|
||||||
me->CastSpell(me, SPELL_FANATIC_S_DETERMINATION);
|
me->CastSpell(me, SPELL_FANATIC_S_DETERMINATION);
|
||||||
@@ -748,7 +748,7 @@ public:
|
|||||||
me->CastSpell(me, SPELL_FULL_HEAL, true);
|
me->CastSpell(me, SPELL_FULL_HEAL, true);
|
||||||
me->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
me->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
||||||
me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
||||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE);
|
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT | UNIT_FLAG_NOT_SELECTABLE);
|
||||||
Reset();
|
Reset();
|
||||||
events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM_REVIVE, 6000);
|
events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM_REVIVE, 6000);
|
||||||
break;
|
break;
|
||||||
@@ -855,7 +855,7 @@ public:
|
|||||||
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
||||||
me->UpdateEntry(NPC_REANIMATED_ADHERENT);
|
me->UpdateEntry(NPC_REANIMATED_ADHERENT);
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE);
|
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT | UNIT_FLAG_NOT_SELECTABLE);
|
||||||
me->SetReactState(REACT_AGGRESSIVE);
|
me->SetReactState(REACT_AGGRESSIVE);
|
||||||
DoZoneInCombat(me);
|
DoZoneInCombat(me);
|
||||||
me->CastSpell(me, SPELL_ADHERENT_S_DETERMINATION);
|
me->CastSpell(me, SPELL_ADHERENT_S_DETERMINATION);
|
||||||
@@ -869,7 +869,7 @@ public:
|
|||||||
me->CastSpell(me, SPELL_FULL_HEAL, true);
|
me->CastSpell(me, SPELL_FULL_HEAL, true);
|
||||||
me->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
me->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
||||||
me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
||||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE);
|
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT | UNIT_FLAG_NOT_SELECTABLE);
|
||||||
Reset();
|
Reset();
|
||||||
events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM_REVIVE, 6000);
|
events.ScheduleEvent(EVENT_CULTIST_DARK_MARTYRDOM_REVIVE, 6000);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -1127,7 +1127,7 @@ public:
|
|||||||
{
|
{
|
||||||
Talk(EMOTE_SVALNA_IMPALE, target);
|
Talk(EMOTE_SVALNA_IMPALE, target);
|
||||||
summon->CastCustomSpell(VEHICLE_SPELL_RIDE_HARDCODED, SPELLVALUE_BASE_POINT0, 1, target, false);
|
summon->CastCustomSpell(VEHICLE_SPELL_RIDE_HARDCODED, SPELLVALUE_BASE_POINT0, 1, target, false);
|
||||||
summon->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_UNK1 | UNIT_FLAG2_ALLOW_ENEMY_INTERACT);
|
summon->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_HIDE_BODY | UNIT_FLAG2_ALLOW_ENEMY_INTERACT);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -929,7 +929,7 @@ public:
|
|||||||
|
|
||||||
if (drake)
|
if (drake)
|
||||||
{
|
{
|
||||||
drake->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
drake->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_POSSESSED);
|
||||||
drake->RemoveAurasDueToSpell(GetId());
|
drake->RemoveAurasDueToSpell(GetId());
|
||||||
drake->RemoveAurasDueToSpell(SPELL_SOAR_TRIGGER);
|
drake->RemoveAurasDueToSpell(SPELL_SOAR_TRIGGER);
|
||||||
drake->RemoveAurasDueToSpell(SPELL_RUBY_EVASIVE_AURA);
|
drake->RemoveAurasDueToSpell(SPELL_RUBY_EVASIVE_AURA);
|
||||||
|
|||||||
@@ -391,7 +391,7 @@ public:
|
|||||||
case ACTION_START_INTRO:
|
case ACTION_START_INTRO:
|
||||||
{
|
{
|
||||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
|
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
|
||||||
me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_INSTANTLY_APPEAR_MODEL);
|
me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_DO_NOT_FADE_IN);
|
||||||
me->SetDisableGravity(true);
|
me->SetDisableGravity(true);
|
||||||
me->CastSpell(me, SPELL_ARRIVAL, true);
|
me->CastSpell(me, SPELL_ARRIVAL, true);
|
||||||
me->CastSpell(me, SPELL_RIDE_THE_LIGHTNING, true);
|
me->CastSpell(me, SPELL_RIDE_THE_LIGHTNING, true);
|
||||||
|
|||||||
@@ -194,14 +194,14 @@ public:
|
|||||||
if (apply)
|
if (apply)
|
||||||
{
|
{
|
||||||
me->SetStandState(UNIT_STAND_STATE_DEAD);
|
me->SetStandState(UNIT_STAND_STATE_DEAD);
|
||||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29);
|
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT);
|
||||||
me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
||||||
me->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
me->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
me->SetStandState(UNIT_STAND_STATE_STAND);
|
me->SetStandState(UNIT_STAND_STATE_STAND);
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29);
|
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT);
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
||||||
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -269,7 +269,7 @@ public:
|
|||||||
me->GetMotionMaster()->MoveIdle();
|
me->GetMotionMaster()->MoveIdle();
|
||||||
me->StopMoving();
|
me->StopMoving();
|
||||||
me->SetStandState(UNIT_STAND_STATE_DEAD);
|
me->SetStandState(UNIT_STAND_STATE_DEAD);
|
||||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29);
|
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT);
|
||||||
me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
||||||
me->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
me->SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
||||||
events.RescheduleEvent(EVENT_RESURRECT, 12000);
|
events.RescheduleEvent(EVENT_RESURRECT, 12000);
|
||||||
@@ -311,7 +311,7 @@ public:
|
|||||||
events.DelayEvents(3500);
|
events.DelayEvents(3500);
|
||||||
DoCast(me, SPELL_SCOURGE_RESURRECTION, true);
|
DoCast(me, SPELL_SCOURGE_RESURRECTION, true);
|
||||||
me->SetStandState(UNIT_STAND_STATE_STAND);
|
me->SetStandState(UNIT_STAND_STATE_STAND);
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29);
|
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREVENT_EMOTES_FROM_CHAT_TEXT);
|
||||||
me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH);
|
||||||
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
me->RemoveFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
|
||||||
events.RescheduleEvent(EVENT_RESURRECT_2, 3000);
|
events.RescheduleEvent(EVENT_RESURRECT_2, 3000);
|
||||||
|
|||||||
@@ -1178,7 +1178,7 @@ void npc_doctor::npc_doctorAI::UpdateAI(uint32 diff)
|
|||||||
if (Creature* Patient = me->SummonCreature(patientEntry, point->x, point->y, point->z, point->o, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000))
|
if (Creature* Patient = me->SummonCreature(patientEntry, point->x, point->y, point->z, point->o, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000))
|
||||||
{
|
{
|
||||||
//303, this flag appear to be required for client side item->spell to work (TARGET_SINGLE_FRIEND)
|
//303, this flag appear to be required for client side item->spell to work (TARGET_SINGLE_FRIEND)
|
||||||
Patient->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
|
Patient->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
|
||||||
|
|
||||||
Patients.push_back(Patient->GetGUID());
|
Patients.push_back(Patient->GetGUID());
|
||||||
CAST_AI(npc_injured_patient::npc_injured_patientAI, Patient->AI())->DoctorGUID = me->GetGUID();
|
CAST_AI(npc_injured_patient::npc_injured_patientAI, Patient->AI())->DoctorGUID = me->GetGUID();
|
||||||
|
|||||||
Reference in New Issue
Block a user