Implemented ConeAngle from DB2

This commit is contained in:
hondacrx
2017-07-19 10:44:44 -04:00
parent 14eade07af
commit 19220d29d9
5 changed files with 25 additions and 16 deletions
-4
View File
@@ -952,10 +952,6 @@ namespace Game.Spells
if (GetSpellInfo().IsSingleTarget())
return false;
// Can't be saved - aura handler relies on calculated amount and changes it
if (HasEffectType(AuraType.ConvertRune))
return false;
// No point in saving this, since the stable dialog can't be open on aura load anyway.
if (HasEffectType(AuraType.OpenStable))
return false;
+7 -5
View File
@@ -478,8 +478,9 @@ namespace Game.Spells
WorldObject target = Global.ObjAccessor.GetUnit(m_caster, channelTarget);
CallScriptObjectTargetSelectHandlers(ref target, effIndex, targetType);
// unit target may be no longer avalible - teleported out of map for example
if (target && target.IsTypeId(TypeId.Unit))
AddUnitTarget(target.ToUnit(), 1u << (int)effIndex);
Unit unitTarget = target ? target.ToUnit() : null;
if (unitTarget)
AddUnitTarget(unitTarget, 1u << (int)effIndex);
else
Log.outDebug(LogFilter.Spells, "SPELL: cannot find channel spell target for spell ID {0}, effect {1}", m_spellInfo.Id, effIndex);
}
@@ -636,13 +637,12 @@ namespace Game.Spells
return;
var condList = effect.ImplicitTargetConditions;
float coneAngle = MathFunctions.PiOver2;
float radius = effect.CalcRadius(m_caster) * m_spellValue.RadiusMod;
GridMapTypeMask containerTypeMask = GetSearcherTypeMask(objectType, condList);
if (containerTypeMask != 0)
{
var spellCone = new WorldObjectSpellConeTargetCheck(coneAngle, radius, m_caster, m_spellInfo, selectionType, condList);
var spellCone = new WorldObjectSpellConeTargetCheck(MathFunctions.DegToRad(m_spellInfo.ConeAngle), radius, m_caster, m_spellInfo, selectionType, condList);
var searcher = new WorldObjectListSearcher(m_caster, targets, spellCone, containerTypeMask);
SearchTargets(searcher, containerTypeMask, m_caster, m_caster.GetPosition(), radius);
@@ -7637,7 +7637,9 @@ namespace Game.Spells
else
{
if (!_caster.IsWithinBoundaryRadius(target.ToUnit()))
if (!_caster.isInFront(target, _coneAngle))
// ConeAngle > 0 -> select targets in front
// ConeAngle < 0 -> select targets in back
if (_caster.HasInArc(_coneAngle, target) != MathFunctions.fuzzyGe(_coneAngle, 0.0f))
return false;
}
return base.Invoke(target);
+5 -1
View File
@@ -228,6 +228,8 @@ namespace Game.Spells
if (_target != null)
{
targets = (SpellCastTargetFlags)_target.Targets;
ConeAngle = _target.ConeAngle;
Width = _target.Width;
TargetCreatureType = _target.TargetCreatureType;
MaxAffectedTargets = _target.MaxAffectedTargets;
MaxTargetLevel = _target.MaxTargetLevel;
@@ -2629,6 +2631,8 @@ namespace Game.Spells
public uint IconFileDataId { get; set; }
public uint ActiveIconFileDataId { get; set; }
public LocalizedString SpellName { get; set; }
public float ConeAngle { get; set; }
public float Width { get; set; }
public uint MaxTargetLevel { get; set; }
public uint MaxAffectedTargets { get; set; }
public SpellFamilyNames SpellFamilyName { get; set; }
@@ -3640,7 +3644,7 @@ namespace Game.Spells
new StaticData(SpellTargetObjectTypes.None, SpellTargetReferenceTypes.Dest, SpellTargetSelectionCategories.Nyi, SpellTargetCheckTypes.Default, SpellTargetDirectionTypes.None), // 107 TARGET_UNK_DEST_AREA_UNK_107
new StaticData(SpellTargetObjectTypes.Gobj, SpellTargetReferenceTypes.Caster, SpellTargetSelectionCategories.Cone, SpellTargetCheckTypes.Default, SpellTargetDirectionTypes.Front), // 108 TARGET_GAMEOBJECT_CONE
new StaticData(SpellTargetObjectTypes.None, SpellTargetReferenceTypes.None, SpellTargetSelectionCategories.Nyi, SpellTargetCheckTypes.Default, SpellTargetDirectionTypes.None), // 109
new StaticData(SpellTargetObjectTypes.Unit, SpellTargetReferenceTypes.Caster, SpellTargetSelectionCategories.Cone, SpellTargetCheckTypes.Default, SpellTargetDirectionTypes.Front), // 110 TARGET_DEST_UNK_110
new StaticData(SpellTargetObjectTypes.Unit, SpellTargetReferenceTypes.Caster, SpellTargetSelectionCategories.Cone, SpellTargetCheckTypes.Entry , SpellTargetDirectionTypes.Front), // 110 TARGET_DEST_UNK_110
new StaticData(SpellTargetObjectTypes.None, SpellTargetReferenceTypes.None, SpellTargetSelectionCategories.Nyi, SpellTargetCheckTypes.Default, SpellTargetDirectionTypes.None), // 111
new StaticData(SpellTargetObjectTypes.Dest, SpellTargetReferenceTypes.Caster, SpellTargetSelectionCategories.Default, SpellTargetCheckTypes.Default, SpellTargetDirectionTypes.None), // 112
new StaticData(SpellTargetObjectTypes.None, SpellTargetReferenceTypes.None, SpellTargetSelectionCategories.Nyi, SpellTargetCheckTypes.Default, SpellTargetDirectionTypes.None), // 113
+4 -3
View File
@@ -2646,9 +2646,6 @@ namespace Game.Entities
if (!spellInfo._IsPositiveEffect(2, false))
spellInfo.AttributesCu |= SpellCustomAttributes.NegativeEff2;
if (spellInfo.GetSpellVisual() == 3879)
spellInfo.AttributesCu |= SpellCustomAttributes.ConeBack;
if (talentSpells.Contains(spellInfo.Id))
spellInfo.AttributesCu |= SpellCustomAttributes.IsTalent;
@@ -2680,6 +2677,10 @@ namespace Game.Entities
spellInfo.Speed = MotionMaster.SPEED_CHARGE;
break;
}
if (effect.TargetA.GetSelectionCategory() == SpellTargetSelectionCategories.Cone || effect.TargetB.GetSelectionCategory() == SpellTargetSelectionCategories.Cone)
if (MathFunctions.fuzzyEq(spellInfo.ConeAngle, 0.0f))
spellInfo.ConeAngle = 90.0f;
}
if (spellInfo.ActiveIconFileDataId == 135754) // flight