private static void OnCreateMissileDelay(MissileClient missile, Obj_AI_Base caster, SpellData data) { var spellArgs = new SpellArgs(); OnCreateSpell?.Invoke(caster, missile, data, spellArgs); if (spellArgs.NoProcess) { return; } if (spellArgs.NewData != null) { data = spellArgs.NewData; } AddSpell(caster, missile.StartPosition, missile.EndPosition, data, missile); }
//public static int CreateTestSpell(SpellPoint spell, SpellData data) //{ // if (spell.StartPosition.Distance(MyHero.Position) < data.Range + ConfigValue.ExtraDetectionRange.GetInt()) // { // Vector2 startPosition = spell.StartPosition.To2D(); // Vector2 endPosition = spell.EndPosition.To2D(); // Vector2 direction = (endPosition - startPosition).Normalized(); // float endTick = 0; // if (data.FixedRange) //for diana q // { // if (endPosition.Distance(startPosition) > data.Range) // { // endPosition = startPosition + direction*data.Range; // } // } // if (data.SpellType == SpellType.Line) // { // endTick = data.SpellDelay + (data.Range/data.ProjectileSpeed)*1000; // endPosition = startPosition + direction*data.Range; // if (data.UseEndPosition) // { // var range = endPosition.Distance(startPosition); // endTick = data.SpellDelay + (range/data.ProjectileSpeed)*1000; // } // } // else if (data.SpellType == SpellType.Circular) // { // endTick = data.SpellDelay; // if (data.ProjectileSpeed == 0) // { // endPosition = startPosition; // } // else if (data.ProjectileSpeed > 0) // { // if (data.SpellType == SpellType.Line && // data.HasEndExplosion && // data.UseEndPosition == false) // { // endPosition = startPosition + direction*data.Range; // } // endTick = endTick + 1000*startPosition.Distance(endPosition)/data.ProjectileSpeed; // } // } // else if (data.SpellType == SpellType.Arc) // { // endTick = endTick + 1000*startPosition.Distance(endPosition)/data.ProjectileSpeed; // } // else if (data.SpellType == SpellType.Cone) // { // return 0; // } // else // { // return 0; // } // Spell newSpell = new Spell(); // newSpell.StartTime = EvadeUtils.TickCount; // newSpell.EndTime = EvadeUtils.TickCount + endTick; // newSpell.StartPos = startPosition; // newSpell.EndPos = endPosition; // newSpell.Height = spell.EndPosition.Z + data.ExtraDrawHeight; // newSpell.Direction = direction; // newSpell.HeroId = 0; // newSpell.Info = data; // newSpell.SpellType = data.SpellType; // newSpell.Radius = data.Radius > 0 ? data.Radius : newSpell.GetSpellRadius(); // int spellId = CreateSpell(newSpell); // Core.DelayAction(() => DeleteSpell(spellId), (int) (endTick + data.ExtraEndTime)); // return spellId; // } // return 0; //} private static int CreateSpell(Spell newSpell, bool processSpell = true) { //Debug.DrawTopLeft(newSpell); int spellId = _spellIdCount++; newSpell.SpellId = spellId; newSpell.UpdateSpellInfo(); DetectedSpells.Add(spellId, newSpell); if (processSpell) { CheckSpellCollision(); AddDetectedSpells(); } if (OnCreateSpell != null) { OnCreateSpell.Invoke(newSpell); } return(spellId); }