BFA Update (still lots of testing to do tho)
This commit is contained in:
@@ -622,6 +622,7 @@ namespace Game.Entities
|
||||
damageInfo.damageSchoolMask = (uint)GetMeleeDamageSchoolMask();
|
||||
damageInfo.attackType = attType;
|
||||
damageInfo.damage = 0;
|
||||
damageInfo.originalDamage = 0;
|
||||
damageInfo.cleanDamage = 0;
|
||||
damageInfo.absorb = 0;
|
||||
damageInfo.resist = 0;
|
||||
@@ -835,7 +836,7 @@ namespace Game.Entities
|
||||
DamageInfo damageInfo1 = new DamageInfo(this, victim, damage, spellInfo, spellInfo.GetSchoolMask(), DamageEffectType.SpellDirect, WeaponAttackType.BaseAttack);
|
||||
victim.CalcAbsorbResist(damageInfo1);
|
||||
damage = damageInfo1.GetDamage();
|
||||
// No Unit.CalcAbsorbResist here - opcode doesn't send that data - this damage is probably not affected by that
|
||||
|
||||
victim.DealDamageMods(this, ref damage);
|
||||
|
||||
SpellDamageShield damageShield = new SpellDamageShield();
|
||||
@@ -843,6 +844,7 @@ namespace Game.Entities
|
||||
damageShield.Defender = GetGUID();
|
||||
damageShield.SpellID = spellInfo.Id;
|
||||
damageShield.TotalDamage = damage;
|
||||
damageShield.OriginalDamage = (int)damageInfo.originalDamage;
|
||||
damageShield.OverKill = (uint)Math.Max(damage - GetHealth(), 0);
|
||||
damageShield.SchoolMask = (uint)spellInfo.SchoolMask;
|
||||
damageShield.LogAbsorbed = damageInfo1.GetAbsorb();
|
||||
@@ -1183,6 +1185,7 @@ namespace Game.Entities
|
||||
dmgInfo.attacker = this;
|
||||
dmgInfo.target = target;
|
||||
dmgInfo.damage = Damage - AbsorbDamage - Resist - BlockedAmount;
|
||||
dmgInfo.originalDamage = Damage;
|
||||
dmgInfo.damageSchoolMask = (uint)damageSchoolMask;
|
||||
dmgInfo.absorb = AbsorbDamage;
|
||||
dmgInfo.resist = Resist;
|
||||
@@ -1197,6 +1200,7 @@ namespace Game.Entities
|
||||
packet.AttackerGUID = damageInfo.attacker.GetGUID();
|
||||
packet.VictimGUID = damageInfo.target.GetGUID();
|
||||
packet.Damage = (int)damageInfo.damage;
|
||||
packet.OriginalDamage = (int)damageInfo.originalDamage;
|
||||
int overkill = (int)(damageInfo.damage - damageInfo.target.GetHealth());
|
||||
packet.OverDamage = (overkill < 0 ? -1 : overkill);
|
||||
|
||||
@@ -1212,9 +1216,9 @@ namespace Game.Entities
|
||||
packet.BlockAmount = (int)damageInfo.blocked_amount;
|
||||
packet.LogData.Initialize(damageInfo.attacker);
|
||||
|
||||
SandboxScalingData sandboxScalingData = new SandboxScalingData();
|
||||
if (sandboxScalingData.GenerateDataForUnits(damageInfo.attacker, damageInfo.target))
|
||||
packet.SandboxScaling = sandboxScalingData;
|
||||
ContentTuningParams contentTuningParams = new ContentTuningParams();
|
||||
if (contentTuningParams.GenerateDataForUnits(damageInfo.attacker, damageInfo.target))
|
||||
packet.ContentTuning = contentTuningParams;
|
||||
|
||||
SendCombatLogMessage(packet);
|
||||
}
|
||||
@@ -1321,6 +1325,8 @@ namespace Game.Entities
|
||||
unit.SetInCombatState(PvP, enemy);
|
||||
unit.SetFlag(UnitFields.Flags, UnitFlags.PetInCombat);
|
||||
}
|
||||
|
||||
ProcSkillsAndAuras(enemy, ProcFlags.EnterCombat, ProcFlags.None, ProcFlagsSpellType.MaskAll, ProcFlagsSpellPhase.None, ProcFlagsHit.None, null, null, null);
|
||||
}
|
||||
|
||||
internal void SendCombatLogMessage(CombatLogServerPacket combatLog)
|
||||
@@ -1770,6 +1776,7 @@ namespace Game.Entities
|
||||
damageInfo.damageSchoolMask = (uint)SpellSchoolMask.Normal;
|
||||
damageInfo.attackType = attackType;
|
||||
damageInfo.damage = 0;
|
||||
damageInfo.originalDamage = 0;
|
||||
damageInfo.cleanDamage = 0;
|
||||
damageInfo.absorb = 0;
|
||||
damageInfo.resist = 0;
|
||||
@@ -1838,18 +1845,20 @@ namespace Game.Entities
|
||||
case MeleeHitOutcome.Evade:
|
||||
damageInfo.HitInfo |= HitInfo.Miss | HitInfo.SwingNoHitSound;
|
||||
damageInfo.TargetState = VictimState.Evades;
|
||||
|
||||
damageInfo.originalDamage = damageInfo.damage;
|
||||
damageInfo.damage = 0;
|
||||
damageInfo.cleanDamage = 0;
|
||||
return;
|
||||
case MeleeHitOutcome.Miss:
|
||||
damageInfo.HitInfo |= HitInfo.Miss;
|
||||
damageInfo.TargetState = VictimState.Intact;
|
||||
damageInfo.originalDamage = damageInfo.damage;
|
||||
damageInfo.damage = 0;
|
||||
damageInfo.cleanDamage = 0;
|
||||
break;
|
||||
case MeleeHitOutcome.Normal:
|
||||
damageInfo.TargetState = VictimState.Hit;
|
||||
damageInfo.originalDamage = damageInfo.damage;
|
||||
break;
|
||||
case MeleeHitOutcome.Crit:
|
||||
damageInfo.HitInfo |= HitInfo.CriticalHit;
|
||||
@@ -1862,19 +1871,25 @@ namespace Game.Entities
|
||||
|
||||
if (mod != 0)
|
||||
MathFunctions.AddPct(ref damageInfo.damage, mod);
|
||||
|
||||
damageInfo.originalDamage = damageInfo.damage;
|
||||
break;
|
||||
case MeleeHitOutcome.Parry:
|
||||
damageInfo.TargetState = VictimState.Parry;
|
||||
damageInfo.originalDamage = damageInfo.damage;
|
||||
damageInfo.cleanDamage += damageInfo.damage;
|
||||
damageInfo.damage = 0;
|
||||
break;
|
||||
case MeleeHitOutcome.Dodge:
|
||||
damageInfo.TargetState = VictimState.Dodge;
|
||||
damageInfo.originalDamage = damageInfo.damage;
|
||||
damageInfo.cleanDamage += damageInfo.damage;
|
||||
damageInfo.damage = 0;
|
||||
break;
|
||||
case MeleeHitOutcome.Block:
|
||||
damageInfo.TargetState = VictimState.Hit;
|
||||
damageInfo.HitInfo |= HitInfo.Block;
|
||||
damageInfo.originalDamage = damageInfo.damage;
|
||||
// 30% damage blocked, double blocked amount if block is critical
|
||||
damageInfo.blocked_amount = MathFunctions.CalculatePct(damageInfo.damage, damageInfo.target.isBlockCritical() ? damageInfo.target.GetBlockPercent() * 2 : damageInfo.target.GetBlockPercent());
|
||||
damageInfo.damage -= damageInfo.blocked_amount;
|
||||
@@ -1883,6 +1898,7 @@ namespace Game.Entities
|
||||
case MeleeHitOutcome.Glancing:
|
||||
damageInfo.HitInfo |= HitInfo.Glancing;
|
||||
damageInfo.TargetState = VictimState.Hit;
|
||||
damageInfo.originalDamage = damageInfo.damage;
|
||||
int leveldif = (int)victim.getLevel() - (int)getLevel();
|
||||
if (leveldif > 3)
|
||||
leveldif = 3;
|
||||
@@ -1896,6 +1912,7 @@ namespace Game.Entities
|
||||
damageInfo.TargetState = VictimState.Hit;
|
||||
// 150% normal damage
|
||||
damageInfo.damage += (damageInfo.damage / 2);
|
||||
damageInfo.originalDamage = damageInfo.damage;
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -2495,6 +2512,7 @@ namespace Game.Entities
|
||||
CleanDamage cleanDamage = new CleanDamage(splitDamage, 0, WeaponAttackType.BaseAttack, MeleeHitOutcome.Normal);
|
||||
DealDamage(caster, splitDamage, cleanDamage, DamageEffectType.Direct, damageInfo.GetSchoolMask(), itr.GetSpellInfo(), false);
|
||||
log.damage = splitDamage;
|
||||
log.originalDamage = splitDamage;
|
||||
log.absorb = split_absorb;
|
||||
SendSpellNonMeleeDamageLog(log);
|
||||
|
||||
@@ -2682,7 +2700,7 @@ namespace Game.Entities
|
||||
for (var i = SpellSchools.Holy; i < SpellSchools.Max; ++i)
|
||||
{
|
||||
if (Convert.ToBoolean((int)spellProto.GetSchoolMask() & (1 << (int)i)))
|
||||
maxModDamagePercentSchool = Math.Max(maxModDamagePercentSchool, GetFloatValue(PlayerFields.ModDamageDonePct + (int)i));
|
||||
maxModDamagePercentSchool = Math.Max(maxModDamagePercentSchool, GetFloatValue(ActivePlayerFields.ModDamageDonePct + (int)i));
|
||||
}
|
||||
|
||||
DoneTotalMod *= maxModDamagePercentSchool;
|
||||
|
||||
@@ -226,6 +226,7 @@ namespace Game.Entities
|
||||
m_attacker = attacker;
|
||||
m_victim = victim;
|
||||
m_damage = damage;
|
||||
m_originalDamage = damage;
|
||||
m_spellInfo = spellInfo;
|
||||
m_schoolMask = schoolMask;
|
||||
m_damageType = damageType;
|
||||
@@ -237,6 +238,7 @@ namespace Game.Entities
|
||||
m_attacker = dmgInfo.attacker;
|
||||
m_victim = dmgInfo.target;
|
||||
m_damage = dmgInfo.damage;
|
||||
m_originalDamage = dmgInfo.damage;
|
||||
m_spellInfo = null;
|
||||
m_schoolMask = (SpellSchoolMask)dmgInfo.damageSchoolMask;
|
||||
m_damageType = DamageEffectType.Direct;
|
||||
@@ -357,6 +359,7 @@ namespace Game.Entities
|
||||
DamageEffectType GetDamageType() { return m_damageType; }
|
||||
public WeaponAttackType GetAttackType() { return m_attackType; }
|
||||
public uint GetDamage() { return m_damage; }
|
||||
public uint GetOriginalDamage() { return m_originalDamage; }
|
||||
public uint GetAbsorb() { return m_absorb; }
|
||||
public uint GetResist() { return m_resist; }
|
||||
uint GetBlock() { return m_block; }
|
||||
@@ -365,6 +368,7 @@ namespace Game.Entities
|
||||
Unit m_attacker;
|
||||
Unit m_victim;
|
||||
uint m_damage;
|
||||
uint m_originalDamage;
|
||||
SpellInfo m_spellInfo;
|
||||
SpellSchoolMask m_schoolMask;
|
||||
DamageEffectType m_damageType;
|
||||
@@ -382,6 +386,7 @@ namespace Game.Entities
|
||||
_healer = healer;
|
||||
_target = target;
|
||||
_heal = heal;
|
||||
_originalHeal = heal;
|
||||
_spellInfo = spellInfo;
|
||||
_schoolMask = schoolMask;
|
||||
}
|
||||
@@ -400,6 +405,7 @@ namespace Game.Entities
|
||||
public Unit GetHealer() { return _healer; }
|
||||
public Unit GetTarget() { return _target; }
|
||||
public uint GetHeal() { return _heal; }
|
||||
public uint GetOriginalHeal() { return _originalHeal; }
|
||||
public uint GetEffectiveHeal() { return _effectiveHeal; }
|
||||
public uint GetAbsorb() { return _absorb; }
|
||||
public SpellInfo GetSpellInfo() { return _spellInfo; }
|
||||
@@ -409,6 +415,7 @@ namespace Game.Entities
|
||||
Unit _healer;
|
||||
Unit _target;
|
||||
uint _heal;
|
||||
uint _originalHeal;
|
||||
uint _effectiveHeal;
|
||||
uint _absorb;
|
||||
SpellInfo _spellInfo;
|
||||
@@ -422,6 +429,7 @@ namespace Game.Entities
|
||||
public Unit target { get; set; } // Target for damage
|
||||
public uint damageSchoolMask { get; set; }
|
||||
public uint damage;
|
||||
public uint originalDamage;
|
||||
public uint absorb;
|
||||
public uint resist;
|
||||
public uint blocked_amount { get; set; }
|
||||
@@ -454,6 +462,7 @@ namespace Game.Entities
|
||||
public uint SpellId;
|
||||
public uint SpellXSpellVisualID;
|
||||
public uint damage;
|
||||
public uint originalDamage;
|
||||
public SpellSchoolMask schoolMask;
|
||||
public uint absorb;
|
||||
public uint resist;
|
||||
@@ -528,10 +537,11 @@ namespace Game.Entities
|
||||
|
||||
public class SpellPeriodicAuraLogInfo
|
||||
{
|
||||
public SpellPeriodicAuraLogInfo(AuraEffect _auraEff, uint _damage, int _overDamage, uint _absorb, uint _resist, float _multiplier, bool _critical)
|
||||
public SpellPeriodicAuraLogInfo(AuraEffect _auraEff, uint _damage, uint _originalDamage, uint _overDamage, uint _absorb, uint _resist, float _multiplier, bool _critical)
|
||||
{
|
||||
auraEff = _auraEff;
|
||||
damage = _damage;
|
||||
originalDamage = _originalDamage;
|
||||
overDamage = _overDamage;
|
||||
absorb = _absorb;
|
||||
resist = _resist;
|
||||
@@ -541,7 +551,8 @@ namespace Game.Entities
|
||||
|
||||
public AuraEffect auraEff;
|
||||
public uint damage;
|
||||
public int overDamage; // overkill/overheal
|
||||
public uint originalDamage;
|
||||
public uint overDamage; // overkill/overheal
|
||||
public uint absorb;
|
||||
public uint resist;
|
||||
public float multiplier;
|
||||
|
||||
@@ -543,7 +543,8 @@ namespace Game.Entities
|
||||
return false;
|
||||
}
|
||||
|
||||
bool turn = (GetOrientation() != orientation);
|
||||
// Check if angular distance changed
|
||||
bool turn = MathFunctions.fuzzyGt(Math.PI - Math.Abs(Math.Abs(GetOrientation() - orientation) - Math.PI), 0.0f);
|
||||
// G3D::fuzzyEq won't help here, in some cases magnitudes differ by a little more than G3D::eps, but should be considered equal
|
||||
bool relocated = (teleport ||
|
||||
Math.Abs(GetPositionX() - x) > 0.001f ||
|
||||
@@ -1290,6 +1291,12 @@ namespace Game.Entities
|
||||
player.UnsummonPetTemporaryIfAny();
|
||||
}
|
||||
|
||||
// if we have charmed npc, stun him also (everywhere)
|
||||
Unit charm = player.GetCharm();
|
||||
if (charm)
|
||||
if (charm.GetTypeId() == TypeId.Unit)
|
||||
charm.SetFlag(UnitFields.Flags, UnitFlags.Stunned);
|
||||
|
||||
player.SendMovementSetCollisionHeight(player.GetCollisionHeight(true));
|
||||
}
|
||||
|
||||
@@ -1335,6 +1342,12 @@ namespace Game.Entities
|
||||
}
|
||||
else
|
||||
player.ResummonPetTemporaryUnSummonedIfAny();
|
||||
|
||||
// if we have charmed npc, remove stun also
|
||||
Unit charm = player.GetCharm();
|
||||
if (charm)
|
||||
if (charm.GetTypeId() == TypeId.Unit && charm.HasFlag(UnitFields.Flags, UnitFlags.Stunned) && !charm.HasUnitState(UnitState.Stunned))
|
||||
charm.RemoveFlag(UnitFields.Flags, UnitFlags.Stunned);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1345,7 +1358,7 @@ namespace Game.Entities
|
||||
return false;
|
||||
|
||||
m_vehicleKit = new Vehicle(this, vehInfo, creatureEntry);
|
||||
m_updateFlag |= UpdateFlag.Vehicle;
|
||||
m_updateFlag.Vehicle = true;
|
||||
m_unitTypeMask |= UnitTypeMask.Vehicle;
|
||||
|
||||
if (!loading)
|
||||
@@ -1366,7 +1379,7 @@ namespace Game.Entities
|
||||
|
||||
m_vehicleKit = null;
|
||||
|
||||
m_updateFlag &= ~UpdateFlag.Vehicle;
|
||||
m_updateFlag.Vehicle = false;
|
||||
m_unitTypeMask &= ~UnitTypeMask.Vehicle;
|
||||
RemoveFlag64(UnitFields.NpcFlags, NPCFlags.SpellClick | NPCFlags.PlayerVehicle);
|
||||
}
|
||||
|
||||
@@ -202,7 +202,7 @@ namespace Game.Entities
|
||||
{
|
||||
SetCritterGUID(minion.GetGUID());
|
||||
if (GetTypeId() == TypeId.Player)
|
||||
minion.SetGuidValue(UnitFields.BattlePetCompanionGuid, GetGuidValue(PlayerFields.SummonedBattlePetId));
|
||||
minion.SetGuidValue(UnitFields.BattlePetCompanionGuid, GetGuidValue(ActivePlayerFields.SummonedBattlePetId));
|
||||
}
|
||||
|
||||
// PvP, FFAPvP
|
||||
|
||||
@@ -47,7 +47,7 @@ namespace Game.Entities
|
||||
{
|
||||
if (IsTypeId(TypeId.Player))
|
||||
{
|
||||
float overrideSP = GetFloatValue(PlayerFields.OverrideSpellPowerByApPct);
|
||||
float overrideSP = GetFloatValue(ActivePlayerFields.OverrideSpellPowerByApPct);
|
||||
if (overrideSP > 0.0f)
|
||||
return (int)(MathFunctions.CalculatePct(GetTotalAttackPowerValue(WeaponAttackType.BaseAttack), overrideSP) + 0.5f);
|
||||
}
|
||||
@@ -190,7 +190,7 @@ namespace Game.Entities
|
||||
for (int i = 0; i < (int)SpellSchools.Max; ++i)
|
||||
{
|
||||
if (Convert.ToBoolean((int)spellProto.GetSchoolMask() & (1 << i)))
|
||||
maxModDamagePercentSchool = Math.Max(maxModDamagePercentSchool, GetFloatValue(PlayerFields.ModDamageDonePct + i));
|
||||
maxModDamagePercentSchool = Math.Max(maxModDamagePercentSchool, GetFloatValue(ActivePlayerFields.ModDamageDonePct + i));
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -338,7 +338,7 @@ namespace Game.Entities
|
||||
{
|
||||
if (IsTypeId(TypeId.Player))
|
||||
{
|
||||
float overrideSP = GetFloatValue(PlayerFields.OverrideSpellPowerByApPct);
|
||||
float overrideSP = GetFloatValue(ActivePlayerFields.OverrideSpellPowerByApPct);
|
||||
if (overrideSP > 0.0f)
|
||||
return (uint)(MathFunctions.CalculatePct(GetTotalAttackPowerValue(WeaponAttackType.BaseAttack), overrideSP) + 0.5f);
|
||||
}
|
||||
@@ -503,7 +503,7 @@ namespace Game.Entities
|
||||
return 1.0f;
|
||||
|
||||
if (IsPlayer())
|
||||
return GetFloatValue(PlayerFields.ModHealingDonePct);
|
||||
return GetFloatValue(ActivePlayerFields.ModHealingDonePct);
|
||||
|
||||
float DoneTotalMod = 1.0f;
|
||||
|
||||
@@ -640,7 +640,7 @@ namespace Game.Entities
|
||||
crit_chance = 0.0f;
|
||||
// For other schools
|
||||
else if (IsTypeId(TypeId.Player))
|
||||
crit_chance = GetFloatValue(PlayerFields.CritPercentage);
|
||||
crit_chance = GetFloatValue(ActivePlayerFields.CritPercentage);
|
||||
else
|
||||
crit_chance = m_baseSpellCritChance;
|
||||
|
||||
@@ -1588,11 +1588,13 @@ namespace Game.Entities
|
||||
var schoolList = m_spellImmune[(int)SpellImmunity.School];
|
||||
foreach (var pair in schoolList)
|
||||
{
|
||||
if ((pair.Key & (uint)spellInfo.GetSchoolMask()) == 0)
|
||||
continue;
|
||||
|
||||
SpellInfo immuneSpellInfo = Global.SpellMgr.GetSpellInfo(pair.Value);
|
||||
if (Convert.ToBoolean(pair.Key & (uint)spellInfo.GetSchoolMask())
|
||||
&& !(immuneSpellInfo != null && immuneSpellInfo.IsPositive() && spellInfo.IsPositive() && IsFriendlyTo(caster))
|
||||
&& !spellInfo.CanPierceImmuneAura(immuneSpellInfo))
|
||||
return true;
|
||||
if (!(immuneSpellInfo != null && immuneSpellInfo.IsPositive() && spellInfo.IsPositive() && caster && IsFriendlyTo(caster)))
|
||||
if (!spellInfo.CanPierceImmuneAura(immuneSpellInfo))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -2234,29 +2236,13 @@ namespace Game.Entities
|
||||
|
||||
spellHealLog.TargetGUID = healInfo.GetTarget().GetGUID();
|
||||
spellHealLog.CasterGUID = healInfo.GetHealer().GetGUID();
|
||||
|
||||
spellHealLog.SpellID = healInfo.GetSpellInfo().Id;
|
||||
spellHealLog.Health = healInfo.GetHeal();
|
||||
spellHealLog.OriginalHeal = (int)healInfo.GetOriginalHeal();
|
||||
spellHealLog.OverHeal = healInfo.GetHeal() - healInfo.GetEffectiveHeal();
|
||||
spellHealLog.Absorbed = healInfo.GetAbsorb();
|
||||
|
||||
spellHealLog.Crit = critical;
|
||||
|
||||
// @todo: 6.x Has to be implemented
|
||||
/*
|
||||
var hasCritRollMade = spellHealLog.WriteBit("HasCritRollMade");
|
||||
var hasCritRollNeeded = spellHealLog.WriteBit("HasCritRollNeeded");
|
||||
var hasLogData = spellHealLog.WriteBit("HasLogData");
|
||||
|
||||
if (hasCritRollMade)
|
||||
packet.ReadSingle("CritRollMade");
|
||||
|
||||
if (hasCritRollNeeded)
|
||||
packet.ReadSingle("CritRollNeeded");
|
||||
|
||||
if (hasLogData)
|
||||
SpellParsers.ReadSpellCastLogData(packet);
|
||||
*/
|
||||
spellHealLog.LogData.Initialize(healInfo.GetTarget());
|
||||
SendCombatLogMessage(spellHealLog);
|
||||
}
|
||||
@@ -2411,6 +2397,7 @@ namespace Game.Entities
|
||||
damage = 0;
|
||||
|
||||
damageInfo.damage = (uint)damage;
|
||||
damageInfo.originalDamage = (uint)damage;
|
||||
DamageInfo dmgInfo = new DamageInfo(damageInfo, DamageEffectType.SpellDirect, WeaponAttackType.BaseAttack, ProcFlagsHit.None);
|
||||
CalcAbsorbResist(dmgInfo);
|
||||
damageInfo.absorb = dmgInfo.GetAbsorb();
|
||||
@@ -2456,6 +2443,7 @@ namespace Game.Entities
|
||||
packet.CastID = log.castId;
|
||||
packet.SpellID = (int)log.SpellId;
|
||||
packet.Damage = (int)log.damage;
|
||||
packet.OriginalDamage = (int)log.originalDamage;
|
||||
if (log.damage > log.preHitHealth)
|
||||
packet.Overkill = (int)(log.damage - log.preHitHealth);
|
||||
else
|
||||
@@ -2468,9 +2456,9 @@ namespace Game.Entities
|
||||
packet.Periodic = log.periodicLog;
|
||||
packet.Flags = (int)log.HitInfo;
|
||||
|
||||
SandboxScalingData sandboxScalingData = new SandboxScalingData();
|
||||
if (sandboxScalingData.GenerateDataForUnits(log.attacker, log.target))
|
||||
packet.SandboxScaling.Set(sandboxScalingData);
|
||||
ContentTuningParams contentTuningParams = new ContentTuningParams();
|
||||
if (contentTuningParams.GenerateDataForUnits(log.attacker, log.target))
|
||||
packet.ContentTuning.Set(contentTuningParams);
|
||||
|
||||
SendCombatLogMessage(packet);
|
||||
}
|
||||
@@ -2488,6 +2476,7 @@ namespace Game.Entities
|
||||
SpellPeriodicAuraLog.SpellLogEffect spellLogEffect = new SpellPeriodicAuraLog.SpellLogEffect();
|
||||
spellLogEffect.Effect = (uint)aura.GetAuraType();
|
||||
spellLogEffect.Amount = info.damage;
|
||||
spellLogEffect.OriginalDamage = (int)info.originalDamage;
|
||||
spellLogEffect.OverHealOrKill = (uint)info.overDamage;
|
||||
spellLogEffect.SchoolMaskOrPower = (uint)aura.GetSpellInfo().GetSchoolMask();
|
||||
spellLogEffect.AbsorbedOrAmplitude = info.absorb;
|
||||
@@ -2495,11 +2484,10 @@ namespace Game.Entities
|
||||
spellLogEffect.Crit = info.critical;
|
||||
// @todo: implement debug info
|
||||
|
||||
SandboxScalingData sandboxScalingData = new SandboxScalingData();
|
||||
ContentTuningParams contentTuningParams = new ContentTuningParams();
|
||||
Unit caster = Global.ObjAccessor.GetUnit(this, aura.GetCasterGUID());
|
||||
if (caster)
|
||||
if (sandboxScalingData.GenerateDataForUnits(caster, this))
|
||||
spellLogEffect.SandboxScaling.Set(sandboxScalingData);
|
||||
if (caster && contentTuningParams.GenerateDataForUnits(caster, this))
|
||||
spellLogEffect.ContentTuning.Set(contentTuningParams);
|
||||
|
||||
data.Effects.Add(spellLogEffect);
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ namespace Game.Entities
|
||||
|
||||
objectTypeId = TypeId.Unit;
|
||||
objectTypeMask |= TypeMask.Unit;
|
||||
m_updateFlag = UpdateFlag.Living;
|
||||
m_updateFlag.MovementUpdate = true;
|
||||
|
||||
m_modAttackSpeedPct = new float[] { 1.0f, 1.0f, 1.0f };
|
||||
m_deathState = DeathState.Alive;
|
||||
@@ -2076,9 +2076,9 @@ namespace Game.Entities
|
||||
{
|
||||
return (Race)GetByteValue(UnitFields.Bytes0, 0);
|
||||
}
|
||||
public long getRaceMask()
|
||||
public ulong getRaceMask()
|
||||
{
|
||||
return (1 << ((int)GetRace() - 1));
|
||||
return (1ul << ((int)GetRace() - 1));
|
||||
}
|
||||
public Class GetClass()
|
||||
{
|
||||
@@ -2093,13 +2093,15 @@ namespace Game.Entities
|
||||
return (Gender)GetByteValue(UnitFields.Bytes0, 3);
|
||||
}
|
||||
|
||||
public void SetNativeDisplayId(uint modelId)
|
||||
public void SetNativeDisplayId(uint displayId, float displayScale = 1f)
|
||||
{
|
||||
SetUInt32Value(UnitFields.NativeDisplayId, modelId);
|
||||
SetUInt32Value(UnitFields.NativeDisplayId, displayId);
|
||||
SetFloatValue(UnitFields.NativeXDisplayScale, displayScale);
|
||||
}
|
||||
public virtual void SetDisplayId(uint modelId)
|
||||
public virtual void SetDisplayId(uint modelId, float displayScale = 1f)
|
||||
{
|
||||
SetUInt32Value(UnitFields.DisplayId, modelId);
|
||||
SetFloatValue(UnitFields.DisplayScale, displayScale);
|
||||
// Set Gender by modelId
|
||||
CreatureModelInfo minfo = Global.ObjectMgr.GetCreatureModelInfo(modelId);
|
||||
if (minfo != null)
|
||||
@@ -2109,7 +2111,10 @@ namespace Game.Entities
|
||||
{
|
||||
return GetUInt32Value(UnitFields.NativeDisplayId);
|
||||
}
|
||||
|
||||
public float GetNativeDisplayScale()
|
||||
{
|
||||
return GetFloatValue(UnitFields.NativeXDisplayScale);
|
||||
}
|
||||
public virtual Unit GetOwner()
|
||||
{
|
||||
ObjectGuid ownerid = GetOwnerGUID();
|
||||
@@ -2570,7 +2575,7 @@ namespace Game.Entities
|
||||
{
|
||||
CreatureTemplate ci = Global.ObjectMgr.GetCreatureTemplate((uint)eff.GetMiscValue());
|
||||
if (ci != null)
|
||||
if (!IsDisallowedMountForm(eff.GetId(), ShapeShiftForm.None, ObjectManager.ChooseDisplayId(ci)))
|
||||
if (!IsDisallowedMountForm(eff.GetId(), ShapeShiftForm.None, ObjectManager.ChooseDisplayId(ci).CreatureDisplayID))
|
||||
handledAura = eff;
|
||||
}
|
||||
}
|
||||
@@ -2642,7 +2647,7 @@ namespace Game.Entities
|
||||
if (target == this)
|
||||
visibleFlag |= UpdateFieldFlags.Private;
|
||||
else if (IsTypeId(TypeId.Player))
|
||||
valCount = (int)PlayerFields.EndNotSelf;
|
||||
valCount = (int)PlayerFields.End;
|
||||
|
||||
UpdateMask updateMask = new UpdateMask(valCount);
|
||||
|
||||
@@ -2684,8 +2689,6 @@ namespace Game.Entities
|
||||
}
|
||||
// FIXME: Some values at server stored in float format but must be sent to client in public uint format
|
||||
else if ((index >= (int)UnitFields.NegStat && index < (int)UnitFields.NegStat + (int)Stats.Max) ||
|
||||
(index >= (int)UnitFields.ResistanceBuffModsPositive && index < ((int)UnitFields.ResistanceBuffModsPositive + (int)SpellSchools.Max)) ||
|
||||
(index >= (int)UnitFields.ResistanceBuffModsNegative && index < ((int)UnitFields.ResistanceBuffModsNegative + (int)SpellSchools.Max)) ||
|
||||
(index >= (int)UnitFields.PosStat && index < (int)UnitFields.PosStat + (int)Stats.Max))
|
||||
{
|
||||
fieldBuffer.WriteUInt32((uint)GetFloatValue(index));
|
||||
@@ -2727,7 +2730,7 @@ namespace Game.Entities
|
||||
|
||||
if (cinfo.FlagsExtra.HasAnyFlag(CreatureFlagsExtra.Trigger))
|
||||
if (target.IsGameMaster())
|
||||
displayId = cinfo.GetFirstVisibleModel();
|
||||
displayId = cinfo.GetFirstVisibleModel().CreatureDisplayID;
|
||||
}
|
||||
|
||||
fieldBuffer.WriteUInt32(displayId);
|
||||
|
||||
Reference in New Issue
Block a user