Core/Unit: UNIT_FLAG renames
Port From (https://github.com/TrinityCore/TrinityCore/commit/f1ac141f25500a0f6ffd3c32b1185de2d9f9c940)
This commit is contained in:
@@ -51,7 +51,7 @@ namespace Framework.Constants
|
||||
ServerControlled = 0x01,
|
||||
NonAttackable = 0x02,
|
||||
RemoveClientControl = 0x04, // This is a legacy flag used to disable movement player's movement while controlling other units, SMSG_CLIENT_CONTROL replaces this functionality clientside now. CONFUSED and FLEEING flags have the same effect on client movement asDISABLE_MOVE_CONTROL in addition to preventing spell casts/autoattack (they all allow climbing steeper hills and emotes while moving)
|
||||
PvpAttackable = 0x08,
|
||||
PlayerControlled = 0x08, //controlled by player, use _IMMUNE_TO_PC instead of _IMMUNE_TO_NPC
|
||||
Rename = 0x10,
|
||||
Preparation = 0x20,
|
||||
Unk6 = 0x40,
|
||||
@@ -72,7 +72,7 @@ namespace Framework.Constants
|
||||
Disarmed = 0x200000,
|
||||
Confused = 0x400000,
|
||||
Fleeing = 0x800000,
|
||||
PlayerControlled = 0x1000000,
|
||||
Possessed = 0x1000000, // under direct client control by a player (possess or vehicle)
|
||||
NotSelectable = 0x2000000,
|
||||
Skinnable = 0x4000000,
|
||||
Mount = 0x8000000,
|
||||
|
||||
@@ -81,7 +81,7 @@ namespace Game.Chat
|
||||
|
||||
player.SetPvpFlags(UnitPVPStateFlags.PvP);
|
||||
|
||||
player.SetUnitFlags(UnitFlags.PvpAttackable);
|
||||
player.SetUnitFlags(UnitFlags.PlayerControlled);
|
||||
|
||||
//-1 is default value
|
||||
player.SetWatchedFactionIndex(0xFFFFFFFF);
|
||||
|
||||
@@ -158,8 +158,8 @@ namespace Game.Combat
|
||||
if (!IsInCombatWith(refe.Key))
|
||||
{
|
||||
Unit target = refe.Value.GetOther(who);
|
||||
if ((_owner.IsImmuneToPC() && target.HasUnitFlag(UnitFlags.PvpAttackable)) ||
|
||||
(_owner.IsImmuneToNPC() && !target.HasUnitFlag(UnitFlags.PvpAttackable)))
|
||||
if ((_owner.IsImmuneToPC() && target.HasUnitFlag(UnitFlags.PlayerControlled)) ||
|
||||
(_owner.IsImmuneToNPC() && !target.HasUnitFlag(UnitFlags.PlayerControlled)))
|
||||
continue;
|
||||
SetInCombatWith(target);
|
||||
}
|
||||
@@ -169,8 +169,8 @@ namespace Game.Combat
|
||||
if (!IsInCombatWith(refe.Key))
|
||||
{
|
||||
Unit target = refe.Value.GetOther(who);
|
||||
if ((_owner.IsImmuneToPC() && target.HasUnitFlag(UnitFlags.PvpAttackable)) ||
|
||||
(_owner.IsImmuneToNPC() && !target.HasUnitFlag(UnitFlags.PvpAttackable)))
|
||||
if ((_owner.IsImmuneToPC() && target.HasUnitFlag(UnitFlags.PlayerControlled)) ||
|
||||
(_owner.IsImmuneToNPC() && !target.HasUnitFlag(UnitFlags.PlayerControlled)))
|
||||
continue;
|
||||
SetInCombatWith(target);
|
||||
}
|
||||
|
||||
@@ -782,7 +782,7 @@ namespace Game.Combat
|
||||
if (a.IsCreature() && a.ToCreature().IsTrigger())
|
||||
return false;
|
||||
|
||||
if (a.HasUnitFlag(UnitFlags.PvpAttackable))
|
||||
if (a.HasUnitFlag(UnitFlags.PlayerControlled))
|
||||
{
|
||||
if (b.HasUnitFlag(UnitFlags.ImmuneToPc))
|
||||
return false;
|
||||
|
||||
@@ -1693,7 +1693,7 @@ namespace Game.Entities
|
||||
return false;
|
||||
|
||||
// This set of checks is should be done only for creatures
|
||||
if ((IsImmuneToNPC() && !who.HasUnitFlag(UnitFlags.PvpAttackable)) || (IsImmuneToPC() && who.HasUnitFlag(UnitFlags.PvpAttackable)))
|
||||
if ((IsImmuneToNPC() && !who.HasUnitFlag(UnitFlags.PlayerControlled)) || (IsImmuneToPC() && who.HasUnitFlag(UnitFlags.PlayerControlled)))
|
||||
return false;
|
||||
|
||||
// Do not attack non-combat pets
|
||||
|
||||
@@ -2085,9 +2085,9 @@ namespace Game.Entities
|
||||
|
||||
Unit unit = ToUnit();
|
||||
Unit targetUnit = target.ToUnit();
|
||||
if (unit && unit.HasUnitFlag(UnitFlags.PvpAttackable))
|
||||
if (unit && unit.HasUnitFlag(UnitFlags.PlayerControlled))
|
||||
{
|
||||
if (targetUnit && targetUnit.HasUnitFlag(UnitFlags.PvpAttackable))
|
||||
if (targetUnit && targetUnit.HasUnitFlag(UnitFlags.PlayerControlled))
|
||||
{
|
||||
if (selfPlayerOwner && targetPlayerOwner)
|
||||
{
|
||||
@@ -2341,24 +2341,24 @@ namespace Game.Entities
|
||||
// ignore immunity flags when assisting
|
||||
if (bySpell == null || (isPositiveSpell && !bySpell.HasAttribute(SpellAttr6.AssistIgnoreImmuneFlag)))
|
||||
{
|
||||
if (unit != null && !unit.HasUnitFlag(UnitFlags.PvpAttackable) && unitTarget != null && unitTarget.IsImmuneToNPC())
|
||||
if (unit != null && !unit.HasUnitFlag(UnitFlags.PlayerControlled) && unitTarget != null && unitTarget.IsImmuneToNPC())
|
||||
return false;
|
||||
|
||||
if (unitTarget != null && !unitTarget.HasUnitFlag(UnitFlags.PvpAttackable) && unit && unit.IsImmuneToNPC())
|
||||
if (unitTarget != null && !unitTarget.HasUnitFlag(UnitFlags.PlayerControlled) && unit && unit.IsImmuneToNPC())
|
||||
return false;
|
||||
|
||||
if (bySpell == null || !bySpell.HasAttribute(SpellAttr8.AttackIgnoreImmuneToPCFlag))
|
||||
{
|
||||
if (unit != null && unit.HasUnitFlag(UnitFlags.PvpAttackable) && unitTarget && unitTarget.IsImmuneToPC())
|
||||
if (unit != null && unit.HasUnitFlag(UnitFlags.PlayerControlled) && unitTarget && unitTarget.IsImmuneToPC())
|
||||
return false;
|
||||
|
||||
if (unitTarget != null && unitTarget.HasUnitFlag(UnitFlags.PvpAttackable) && unit && unit.IsImmuneToPC())
|
||||
if (unitTarget != null && unitTarget.HasUnitFlag(UnitFlags.PlayerControlled) && unit && unit.IsImmuneToPC())
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// CvC case - can attack each other only when one of them is hostile
|
||||
if (unit && !unit.HasUnitFlag(UnitFlags.PvpAttackable) && unitTarget != null && !unitTarget.HasUnitFlag(UnitFlags.PvpAttackable))
|
||||
if (unit && !unit.HasUnitFlag(UnitFlags.PlayerControlled) && unitTarget != null && !unitTarget.HasUnitFlag(UnitFlags.PlayerControlled))
|
||||
return IsHostileTo(target) || target.IsHostileTo(this);
|
||||
|
||||
// PvP, PvC, CvP case
|
||||
@@ -2366,8 +2366,8 @@ namespace Game.Entities
|
||||
if (IsFriendlyTo(target) || target.IsFriendlyTo(this))
|
||||
return false;
|
||||
|
||||
Player playerAffectingAttacker = unit != null && unit.HasUnitFlag(UnitFlags.PvpAttackable) ? GetAffectingPlayer() : null;
|
||||
Player playerAffectingTarget = unitTarget != null && unitTarget.HasUnitFlag(UnitFlags.PvpAttackable) ? target.GetAffectingPlayer() : null;
|
||||
Player playerAffectingAttacker = unit != null && unit.HasUnitFlag(UnitFlags.PlayerControlled) ? GetAffectingPlayer() : null;
|
||||
Player playerAffectingTarget = unitTarget != null && unitTarget.HasUnitFlag(UnitFlags.PlayerControlled) ? target.GetAffectingPlayer() : null;
|
||||
|
||||
// Not all neutral creatures can be attacked (even some unfriendly faction does not react aggresive to you, like Sporaggar)
|
||||
if ((playerAffectingAttacker && !playerAffectingTarget) || (!playerAffectingAttacker && playerAffectingTarget))
|
||||
@@ -2408,7 +2408,7 @@ namespace Game.Entities
|
||||
|
||||
// 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
|
||||
if (unitTarget && unitTarget.HasUnitFlag(UnitFlags.PvpAttackable) && unit && unit.HasUnitFlag(UnitFlags.PvpAttackable) && (unitTarget.IsInSanctuary() || unit.IsInSanctuary()))
|
||||
if (unitTarget && unitTarget.HasUnitFlag(UnitFlags.PlayerControlled) && unit && unit.HasUnitFlag(UnitFlags.PlayerControlled) && (unitTarget.IsInSanctuary() || unit.IsInSanctuary()))
|
||||
return false;
|
||||
|
||||
// additional checks - only PvP case
|
||||
@@ -2477,7 +2477,7 @@ namespace Game.Entities
|
||||
|
||||
if (isNegativeSpell || bySpell == null || !bySpell.HasAttribute(SpellAttr6.AssistIgnoreImmuneFlag))
|
||||
{
|
||||
if (unit != null && unit.HasUnitFlag(UnitFlags.PvpAttackable))
|
||||
if (unit != null && unit.HasUnitFlag(UnitFlags.PlayerControlled))
|
||||
{
|
||||
if (bySpell == null || !bySpell.HasAttribute(SpellAttr8.AttackIgnoreImmuneToPCFlag))
|
||||
if (unitTarget != null && unitTarget.IsImmuneToPC())
|
||||
@@ -2495,10 +2495,10 @@ namespace Game.Entities
|
||||
return false;
|
||||
|
||||
// PvP case
|
||||
if (unitTarget != null && unitTarget.HasUnitFlag(UnitFlags.PvpAttackable))
|
||||
if (unitTarget != null && unitTarget.HasUnitFlag(UnitFlags.PlayerControlled))
|
||||
{
|
||||
Player targetPlayerOwner = target.GetAffectingPlayer();
|
||||
if (unit != null && unit.HasUnitFlag(UnitFlags.PvpAttackable))
|
||||
if (unit != null && unit.HasUnitFlag(UnitFlags.PlayerControlled))
|
||||
{
|
||||
Player selfPlayerOwner = GetAffectingPlayer();
|
||||
if (selfPlayerOwner != null && targetPlayerOwner != null)
|
||||
@@ -2519,7 +2519,7 @@ namespace Game.Entities
|
||||
}
|
||||
// PvC case - player can assist creature only if has specific type flags
|
||||
// !target.HasFlag(UNIT_FIELD_FLAGS, UnitFlags.PvpAttackable) &&
|
||||
else if (unit != null && unit.HasUnitFlag(UnitFlags.PvpAttackable))
|
||||
else if (unit != null && unit.HasUnitFlag(UnitFlags.PlayerControlled))
|
||||
{
|
||||
if (bySpell == null || !bySpell.HasAttribute(SpellAttr6.AssistIgnoreImmuneFlag))
|
||||
{
|
||||
|
||||
@@ -209,14 +209,14 @@ namespace Game.Entities
|
||||
petlevel = owner.GetLevel();
|
||||
|
||||
SetClass(Class.Mage);
|
||||
SetUnitFlags(UnitFlags.PvpAttackable); // this enables popup window (pet dismiss, cancel)
|
||||
SetUnitFlags(UnitFlags.PlayerControlled); // this enables popup window (pet dismiss, cancel)
|
||||
break;
|
||||
case PetType.Hunter:
|
||||
SetClass(Class.Warrior);
|
||||
SetGender(Gender.None);
|
||||
SetSheath(SheathState.Melee);
|
||||
SetPetFlags(result.Read<bool>(9) ? UnitPetFlags.CanBeAbandoned : UnitPetFlags.CanBeRenamed | UnitPetFlags.CanBeAbandoned);
|
||||
SetUnitFlags(UnitFlags.PvpAttackable); // this enables popup window (pet abandon, cancel)
|
||||
SetUnitFlags(UnitFlags.PlayerControlled); // this enables popup window (pet abandon, cancel)
|
||||
break;
|
||||
default:
|
||||
if (!IsPetGhoul())
|
||||
|
||||
@@ -217,7 +217,7 @@ namespace Game.Entities
|
||||
if ((RealmType)WorldConfig.GetIntValue(WorldCfg.GameType) == RealmType.PVP || (RealmType)WorldConfig.GetIntValue(WorldCfg.GameType) == RealmType.RPPVP)
|
||||
{
|
||||
AddPvpFlag(UnitPVPStateFlags.PvP);
|
||||
AddUnitFlag(UnitFlags.PvpAttackable);
|
||||
AddUnitFlag(UnitFlags.PlayerControlled);
|
||||
}
|
||||
|
||||
AddUnitFlag2(UnitFlags2.RegeneratePower);
|
||||
@@ -5814,7 +5814,7 @@ namespace Game.Entities
|
||||
UnitFlags.Stunned | UnitFlags.InCombat | UnitFlags.Disarmed |
|
||||
UnitFlags.Confused | UnitFlags.Fleeing | UnitFlags.NotSelectable |
|
||||
UnitFlags.Skinnable | UnitFlags.Mount | UnitFlags.TaxiFlight);
|
||||
AddUnitFlag(UnitFlags.PvpAttackable); // must be set
|
||||
AddUnitFlag(UnitFlags.PlayerControlled); // must be set
|
||||
|
||||
AddUnitFlag2(UnitFlags2.RegeneratePower);// must be set
|
||||
|
||||
|
||||
@@ -517,7 +517,7 @@ namespace Game.Entities
|
||||
if (attType != WeaponAttackType.BaseAttack && attType != WeaponAttackType.OffAttack)
|
||||
return;
|
||||
|
||||
if (IsTypeId(TypeId.Unit) && !HasUnitFlag(UnitFlags.PlayerControlled) && !HasUnitFlag2(UnitFlags2.DisableTurn))
|
||||
if (IsTypeId(TypeId.Unit) && !HasUnitFlag(UnitFlags.Possessed) && !HasUnitFlag2(UnitFlags2.DisableTurn))
|
||||
SetFacingToObject(victim, false); // update client side facing to face the target (prevents visual glitches when casting untargeted spells)
|
||||
|
||||
// melee attack spell casted at main hand attack only - no normal melee dmg dealt
|
||||
@@ -600,7 +600,7 @@ namespace Game.Entities
|
||||
if (attType != WeaponAttackType.BaseAttack && attType != WeaponAttackType.OffAttack)
|
||||
return; // ignore ranged case
|
||||
|
||||
if (IsTypeId(TypeId.Unit) && !HasUnitFlag(UnitFlags.PlayerControlled) && !HasUnitFlag2(UnitFlags2.DisableTurn))
|
||||
if (IsTypeId(TypeId.Unit) && !HasUnitFlag(UnitFlags.Possessed) && !HasUnitFlag2(UnitFlags2.DisableTurn))
|
||||
SetFacingToObject(victim, false); // update client side facing to face the target (prevents visual glitches when casting untargeted spells)
|
||||
|
||||
CalcDamageInfo damageInfo = new();
|
||||
|
||||
@@ -54,7 +54,7 @@ namespace Game.Entities
|
||||
// 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 (HasUnitFlag(UnitFlags.CannotSwim))
|
||||
return false;
|
||||
if (HasUnitFlag(UnitFlags.PvpAttackable)) // is player
|
||||
if (HasUnitFlag(UnitFlags.PlayerControlled)) // is player
|
||||
return true;
|
||||
if (HasUnitFlag2((UnitFlags2)0x1000000))
|
||||
return false;
|
||||
|
||||
@@ -147,7 +147,7 @@ namespace Game.Entities
|
||||
if (IsTypeId(TypeId.Player))
|
||||
{
|
||||
minion.m_ControlledByPlayer = true;
|
||||
minion.AddUnitFlag(UnitFlags.PvpAttackable);
|
||||
minion.AddUnitFlag(UnitFlags.PlayerControlled);
|
||||
}
|
||||
|
||||
// Can only have one pet. If a new one is summoned, dismiss the old one.
|
||||
@@ -406,12 +406,12 @@ namespace Game.Entities
|
||||
switch (type)
|
||||
{
|
||||
case CharmType.Vehicle:
|
||||
AddUnitFlag(UnitFlags.PlayerControlled);
|
||||
AddUnitFlag(UnitFlags.Possessed);
|
||||
playerCharmer.SetClientControl(this, true);
|
||||
playerCharmer.VehicleSpellInitialize();
|
||||
break;
|
||||
case CharmType.Possess:
|
||||
AddUnitFlag(UnitFlags.PlayerControlled);
|
||||
AddUnitFlag(UnitFlags.Possessed);
|
||||
charmer.AddUnitFlag(UnitFlags.RemoveClientControl);
|
||||
playerCharmer.SetClientControl(this, true);
|
||||
playerCharmer.PossessSpellInitialize();
|
||||
@@ -507,14 +507,14 @@ namespace Game.Entities
|
||||
case CharmType.Vehicle:
|
||||
playerCharmer.SetClientControl(this, false);
|
||||
playerCharmer.SetClientControl(charmer, true);
|
||||
RemoveUnitFlag(UnitFlags.PlayerControlled);
|
||||
RemoveUnitFlag(UnitFlags.Possessed);
|
||||
break;
|
||||
case CharmType.Possess:
|
||||
ClearUnitState(UnitState.Possessed);
|
||||
playerCharmer.SetClientControl(this, false);
|
||||
playerCharmer.SetClientControl(charmer, true);
|
||||
charmer.RemoveUnitFlag(UnitFlags.RemoveClientControl);
|
||||
RemoveUnitFlag(UnitFlags.PlayerControlled);
|
||||
RemoveUnitFlag(UnitFlags.Possessed);
|
||||
break;
|
||||
case CharmType.Charm:
|
||||
if (IsTypeId(TypeId.Unit) && charmer.GetClass() == Class.Warlock)
|
||||
@@ -594,7 +594,7 @@ namespace Game.Entities
|
||||
|
||||
charm.m_ControlledByPlayer = true;
|
||||
// @todo maybe we can use this flag to check if controlled by player
|
||||
charm.AddUnitFlag(UnitFlags.PvpAttackable);
|
||||
charm.AddUnitFlag(UnitFlags.PlayerControlled);
|
||||
}
|
||||
else
|
||||
charm.m_ControlledByPlayer = false;
|
||||
@@ -635,19 +635,19 @@ namespace Game.Entities
|
||||
if (charm.IsTypeId(TypeId.Player))
|
||||
{
|
||||
charm.m_ControlledByPlayer = true;
|
||||
charm.AddUnitFlag(UnitFlags.PvpAttackable);
|
||||
charm.AddUnitFlag(UnitFlags.PlayerControlled);
|
||||
charm.ToPlayer().UpdatePvPState();
|
||||
}
|
||||
else if (player)
|
||||
{
|
||||
charm.m_ControlledByPlayer = true;
|
||||
charm.AddUnitFlag(UnitFlags.PvpAttackable);
|
||||
charm.AddUnitFlag(UnitFlags.PlayerControlled);
|
||||
charm.SetPvpFlags(player.GetPvpFlags());
|
||||
}
|
||||
else
|
||||
{
|
||||
charm.m_ControlledByPlayer = false;
|
||||
charm.RemoveUnitFlag(UnitFlags.PvpAttackable);
|
||||
charm.RemoveUnitFlag(UnitFlags.PlayerControlled);
|
||||
charm.SetPvpFlags(UnitPVPStateFlags.None);
|
||||
}
|
||||
|
||||
@@ -791,7 +791,7 @@ namespace Game.Entities
|
||||
pet.SetCreatedBySpell(spell_id);
|
||||
|
||||
if (IsTypeId(TypeId.Player))
|
||||
pet.AddUnitFlag(UnitFlags.PvpAttackable);
|
||||
pet.AddUnitFlag(UnitFlags.PlayerControlled);
|
||||
|
||||
if (!pet.InitStatsForLevel(level))
|
||||
{
|
||||
|
||||
@@ -2843,11 +2843,11 @@ namespace Game.Entities
|
||||
{
|
||||
List<CombatReference> toEnd = new();
|
||||
foreach (var pair in m_combatManager.GetPvECombatRefs())
|
||||
if (pair.Value.GetOther(this).HasUnitFlag(UnitFlags.PvpAttackable))
|
||||
if (pair.Value.GetOther(this).HasUnitFlag(UnitFlags.PlayerControlled))
|
||||
toEnd.Add(pair.Value);
|
||||
|
||||
foreach (var pair in m_combatManager.GetPvPCombatRefs())
|
||||
if (pair.Value.GetOther(this).HasUnitFlag(UnitFlags.PvpAttackable))
|
||||
if (pair.Value.GetOther(this).HasUnitFlag(UnitFlags.PlayerControlled))
|
||||
toEnd.Add(pair.Value);
|
||||
|
||||
foreach (CombatReference refe in toEnd)
|
||||
@@ -2877,11 +2877,11 @@ namespace Game.Entities
|
||||
{
|
||||
List<CombatReference> toEnd = new();
|
||||
foreach (var pair in m_combatManager.GetPvECombatRefs())
|
||||
if (!pair.Value.GetOther(this).HasUnitFlag(UnitFlags.PvpAttackable))
|
||||
if (!pair.Value.GetOther(this).HasUnitFlag(UnitFlags.PlayerControlled))
|
||||
toEnd.Add(pair.Value);
|
||||
|
||||
foreach (var pair in m_combatManager.GetPvPCombatRefs())
|
||||
if (!pair.Value.GetOther(this).HasUnitFlag(UnitFlags.PvpAttackable))
|
||||
if (!pair.Value.GetOther(this).HasUnitFlag(UnitFlags.PlayerControlled))
|
||||
toEnd.Add(pair.Value);
|
||||
|
||||
foreach (CombatReference refe in toEnd)
|
||||
|
||||
@@ -4543,13 +4543,13 @@ namespace Game.Spells
|
||||
{
|
||||
target.SetFaction((uint)GetMiscValue());
|
||||
if (target.IsTypeId(TypeId.Player))
|
||||
target.RemoveUnitFlag(UnitFlags.PvpAttackable);
|
||||
target.RemoveUnitFlag(UnitFlags.PlayerControlled);
|
||||
}
|
||||
else
|
||||
{
|
||||
target.RestoreFaction();
|
||||
if (target.IsTypeId(TypeId.Player))
|
||||
target.AddUnitFlag(UnitFlags.PvpAttackable);
|
||||
target.AddUnitFlag(UnitFlags.PlayerControlled);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1935,7 +1935,7 @@ namespace Game.Spells
|
||||
|
||||
if (m_originalCaster && unit.IsInCombat() && m_spellInfo.HasInitialAggro())
|
||||
{
|
||||
if (m_originalCaster.HasUnitFlag(UnitFlags.PvpAttackable)) // only do explicit combat forwarding for PvP enabled units
|
||||
if (m_originalCaster.HasUnitFlag(UnitFlags.PlayerControlled)) // only do explicit combat forwarding for PvP enabled units
|
||||
m_originalCaster.GetCombatManager().InheritCombatStatesFrom(unit); // for creature v creature combat, the threat forward does it for us
|
||||
unit.GetThreatManager().ForwardThreatForAssistingMe(m_originalCaster, 0.0f, null, true);
|
||||
}
|
||||
@@ -2337,7 +2337,7 @@ namespace Game.Spells
|
||||
}
|
||||
|
||||
// focus if not controlled creature
|
||||
if (m_caster.GetTypeId() == TypeId.Unit && !m_caster.ToUnit().HasUnitFlag(UnitFlags.PlayerControlled))
|
||||
if (m_caster.GetTypeId() == TypeId.Unit && !m_caster.ToUnit().HasUnitFlag(UnitFlags.Possessed))
|
||||
{
|
||||
if (!(m_spellInfo.IsNextMeleeSwingSpell() || IsAutoRepeat()))
|
||||
{
|
||||
@@ -2600,7 +2600,7 @@ namespace Game.Spells
|
||||
|
||||
// if the spell allows the creature to turn while casting, then adjust server-side orientation to face the target now
|
||||
// client-side orientation is handled by the client itself, as the cast target is targeted due to Creature::FocusTarget
|
||||
if (m_caster.IsTypeId(TypeId.Unit) && !m_caster.ToUnit().HasUnitFlag(UnitFlags.PlayerControlled))
|
||||
if (m_caster.IsTypeId(TypeId.Unit) && !m_caster.ToUnit().HasUnitFlag(UnitFlags.Possessed))
|
||||
{
|
||||
if (!m_spellInfo.HasAttribute(SpellAttr5.DontTurnDuringCast))
|
||||
{
|
||||
|
||||
@@ -1021,7 +1021,7 @@ namespace Scripts.World.NpcSpecial
|
||||
if (Patient)
|
||||
{
|
||||
//303, this flag appear to be required for client side item.spell to work (TARGET_SINGLE_FRIEND)
|
||||
Patient.AddUnitFlag(UnitFlags.PvpAttackable);
|
||||
Patient.AddUnitFlag(UnitFlags.PlayerControlled);
|
||||
|
||||
Patients.Add(Patient.GetGUID());
|
||||
((npc_injured_patient)Patient.GetAI()).DoctorGUID = me.GetGUID();
|
||||
|
||||
Reference in New Issue
Block a user