Ejemplo n.º 1
0
    void Awake()
    {
        Instance = this;
        DontDestroyOnLoad(gameObject);

        LoadAbilityData();
    }
Ejemplo n.º 2
0
        public static void AddAllHeals(Ability[] spells, Item[] myItems1)
        {
            HealsToggler = new Dictionary <string, bool>();
            foreach (var spell in
                     from spell in spells
                     let data = AbilityDatabase.Find(spell.Name)
                                where data != null && data.IsHeal
                                select spell)
            {
                AddHeal(spell);
                RangeDrawing.AddRange(spell);
            }

            foreach (var spell in
                     from spell in myItems1
                     let data = AbilityDatabase.Find(spell.Name)
                                where data != null && data.IsHeal
                                select spell)
            {
                if (MyAbilities.DefensiveAbilities.ContainsKey(spell.Name + "heal"))
                {
                    continue;
                }

                AddHeal(spell);
                RangeDrawing.AddRange(spell);
            }

            if (HealsTogglerCreated)
            {
                MainMenu.Menu.AddItem(new MenuItem("healsToggler", "Heals:").SetValue(new AbilityToggler(HealsToggler)));
            }
        }
Ejemplo n.º 3
0
        public static void AddAllNukes(Ability[] spells, Item[] myItems1)
        {
            NukesToggler = new Dictionary <string, bool>();
            foreach (var spell in
                     from spell in spells
                     let data = AbilityDatabase.Find(spell.Name)
                                where data != null && data.IsNuke
                                select spell)
            {
                AddNuke(spell);
                RangeDrawing.AddRange(spell);
            }

            foreach (var spell in
                     from spell in myItems1
                     let data = AbilityDatabase.Find(spell.Name)
                                where data != null && (data.IsNuke || spell.StoredName() == "item_urn_of_shadows")
                                select spell)
            {
                AddNuke(spell);
                RangeDrawing.AddRange(spell);
            }

            if (NukesTogglerCreated)
            {
                MainMenu.Menu.AddItem(new MenuItem("nukesToggler", "Nukes:").SetValue(new AbilityToggler(NukesToggler)));
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        ///     Checks all aspects and returns full delay before target gets hit by given ability
        /// </summary>
        /// <param name="ability"></param>
        /// <param name="target"></param>
        /// <param name="abilityName"></param>
        /// <returns></returns>
        public static double GetHitDelay(this Ability ability, Unit target, string abilityName = null)
        {
            var         name = abilityName ?? ability.Name;
            AbilityInfo data;

            if (!AbilityDamage.DataDictionary.TryGetValue(ability, out data))
            {
                data = AbilityDatabase.Find(name);
                AbilityDamage.DataDictionary.Add(ability, data);
            }
            var owner = ability.Owner as Unit;
            var delay = ability.GetCastDelay(owner as Hero, target, true, abilityName: name);

            if (data != null)
            {
                delay += data.AdditionalDelay;
            }
            var speed  = ability.GetProjectileSpeed(name);
            var radius = ability.GetRadius(name);

            if (!ability.IsAbilityBehavior(AbilityBehavior.NoTarget, name) && speed < 6000 && speed > 0)
            {
                var xyz = ability.GetPrediction(target, abilityName: name);
                delay += (Math.Max((owner.Distance2D(xyz) - radius / 2), 100) / speed);
            }
            if (name == "tinker_heat_seeking_missile")
            {
                var xyz = ability.GetPrediction(target, abilityName: name);
                delay += (Math.Max((owner.Distance2D(xyz)), 100) / speed);
            }
            return(delay);
        }
Ejemplo n.º 5
0
        public static Menu Create(string name, Ability ability)
        {
            var menu = new Menu(name, name, textureName: name);

            if (name == "rubick_spell_steal")
            {
                return(menu);
            }

            menu.AddItem(Togglers.OnSight(name));
            var data         = AbilityDatabase.Find(name);
            var defaultValue = ability.AbilityType != AbilityType.Ultimate;

            if (data != null)
            {
                if (data.TrueSight)
                {
                    menu.AddItem(Togglers.OnInvisible(name, defaultValue));
                }

                if (data.IsPurge)
                {
                    menu.AddItem(Togglers.OnPurgable(name, defaultValue));
                }

                if (data.WeakensEnemy)
                {
                    menu.AddItem(Togglers.OnAttack(name, defaultValue));
                }
            }

            menu.AddItem(Sliders.MinManaCheck(name));
            menu.AddItem(Sliders.MinManaCheck(name, true));
            return(menu);
        }
Ejemplo n.º 6
0
                private static void InGameObject_OnCreate(InGameObject inGameObject)
                {
                    var baseTypes = inGameObject.GetBaseTypes().ToArray();

                    if (baseTypes.Contains("CurveProjectile") || baseTypes.Contains("CurveProjectile2"))
                    {
                        var data = AbilityDatabase.Get(inGameObject.ObjectName);
                        if (data == null)
                        {
                            return;
                        }
                        var pos        = LocalPlayer.Instance.Pos();
                        var projectile = inGameObject.Get <CurveProjectileObject>();

                        var closest = GeometryLib.NearestPointOnFiniteLine(projectile.Position,
                                                                           projectile.TargetPosition, pos);
                        if (pos.Distance(closest) > 6)
                        {
                            return;
                        }

                        var tp = new TrackedCurveProjectile(projectile, data);
                        AddAfterFrame.Add(tp);
                    }
                }
Ejemplo n.º 7
0
        private static void Update(EventArgs args)
        {
            if (!MenuHandler.Enabled || !_shouldUse || !_isCasting || Game.CurrentMatchState != MatchState.InRound)
            {
                return;
            }
            var skill = ActiveSkills.Get(_castingId);

            if (skill == null)
            {
                return;
            }

            if (MenuHandler.Get(skill.Slot))
            {
                if (OrbLogic(skill, true))
                {
                    return;
                }
                var pred = TargetSelection.GetTargetPrediction(skill, AbilityDatabase.Get(_castingId));
                if (!pred.CanHit && !OrbLogic(skill))
                {
                    if (MenuHandler.Interrupt)
                    {
                        LocalPlayer.PressAbility(AbilitySlot.Interrupt, true);
                    }
                    LocalPlayer.EditAimPosition = false;
                    return;
                }

                LocalPlayer.EditAimPosition = true;
                LocalPlayer.Aim(pred.CastPosition);
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        ///     Returns projectile speed of the ability
        /// </summary>
        /// <param name="ability"></param>
        /// <returns></returns>
        public static float GetProjectileSpeed(this Ability ability)
        {
            float speed;

            if (!SpeedDictionary.TryGetValue(ability.Name + " " + ability.Level, out speed))
            {
                AbilityInfo data;
                if (!AbilityDamage.DataDictionary.TryGetValue(ability, out data))
                {
                    data = AbilityDatabase.Find(ability.Name);
                    AbilityDamage.DataDictionary.Add(ability, data);
                }
                if (data == null)
                {
                    speed = float.MaxValue;
                    SpeedDictionary.Add(ability.Name + " " + ability.Level, speed);
                    return(speed);
                }
                if (data.Speed != null)
                {
                    speed = ability.GetAbilityData(data.Speed);
                    SpeedDictionary.Add(ability.Name + " " + ability.Level, speed);
                }
            }
            return(speed);
        }
Ejemplo n.º 9
0
        public static void AddAllShields(Ability[] spells, Item[] myItems1)
        {
            ShieldsToggler = new Dictionary <string, bool>();
            foreach (var spell in
                     from spell in spells
                     let data = AbilityDatabase.Find(spell.Name)
                                where data != null && data.IsShield
                                select spell)
            {
                AddShield(spell);
                RangeDrawing.AddRange(spell);
            }

            foreach (var spell in
                     from spell in myItems1
                     let data = AbilityDatabase.Find(spell.Name)
                                where data != null && data.IsShield
                                select spell)
            {
                AddShield(spell);
                RangeDrawing.AddRange(spell);
            }

            if (ShieldsTogglerCreated)
            {
                MainMenu.Menu.AddItem(
                    new MenuItem("shieldsToggler", "Shields:").SetValue(new AbilityToggler(ShieldsToggler)));
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        ///     Checks all aspects and returns full delay before target gets hit by given ability
        /// </summary>
        /// <param name="ability"></param>
        /// <param name="target"></param>
        /// <returns></returns>
        public static double GetHitDelay(this Ability ability, Unit target)
        {
            AbilityInfo data;

            if (!AbilityDamage.DataDictionary.TryGetValue(ability, out data))
            {
                data = AbilityDatabase.Find(ability.Name);
                AbilityDamage.DataDictionary.Add(ability, data);
            }
            var owner = ability.Owner as Unit;
            var delay = ability.GetCastDelay(owner as Hero, target, true);

            if (data != null)
            {
                delay += data.AdditionalDelay;
            }
            var speed  = ability.GetProjectileSpeed();
            var radius = ability.GetRadius();

            if (!ability.AbilityBehavior.HasFlag(AbilityBehavior.NoTarget) && speed < 6000 && speed > 0)
            {
                var xyz = ability.GetPrediction(target);
                delay += (Math.Max((owner.Distance2D(xyz) - radius / 2), 100) / speed);
            }
            return(delay);
        }
Ejemplo n.º 11
0
        private static void DodgeWithAbilities(TrackedDash dash)
        {
            var timeToImpact = dash.EstimatedImpact - Time.time;

            if (PlayerIsSafe(timeToImpact))
            {
                return;
            }
            foreach (var ability in AbilityDatabase.GetDodge(LocalPlayer.Instance.CharName).OrderBy(a => a.Priority))
            {
                if (!ability.UseInEvade || timeToImpact > ability.CastTime + 0.25f || timeToImpact < ability.CastTime + 0.05f)
                {
                    continue;
                }
                if (ability.ShouldUse() && ability.IsReady() && ability.GetDanger() <= dash.Data.GetDanger() &&
                    (dash.Data.CanCounter || ability.AbilityType != DodgeAbilityType.Counter) &&
                    (dash.Data.CanCounter || ability.AbilityType != DodgeAbilityType.Shield) &&
                    (ability.AbilityType != DodgeAbilityType.KnockAway || dash.DashObject.GameObject.ObjectName == "Rush"))
                {
                    if (ability.NeedsSelfCast)
                    {
                        LocalPlayer.PressAbility(ability.AbilitySlot, true);
                    }
                    else
                    {
                        LocalPlayer.PressAbility(ability.AbilitySlot, true);
                    }

                    return;
                }
            }
        }
Ejemplo n.º 12
0
        private static void DodgeWithAbilities(TrackedProjectile projectile)
        {
            var timeToImpact = projectile.EstimatedImpact - Time.time;

            if (PlayerIsSafe(timeToImpact))
            {
                return;
            }
            foreach (var ability in AbilityDatabase.GetDodge(LocalPlayer.Instance.CharName).OrderBy(a => a.Priority))
            {
                if (!ability.UseInEvade || timeToImpact > ability.CastTime + 0.25f || timeToImpact < ability.CastTime + 0.05f)
                {
                    continue;
                }
                if (ability.ShouldUse() && ability.IsReady() && ability.GetDanger() <= projectile.Data.GetDanger())
                {
                    if (ability.NeedsSelfCast)
                    {
                        LocalPlayer.PressAbility(ability.AbilitySlot, true);
                    }
                    else
                    {
                        LocalPlayer.PressAbility(ability.AbilitySlot, true);
                    }

                    return;
                }
            }
        }
Ejemplo n.º 13
0
 public Torrent(Ability ability)
 {
     Ability         = ability;
     CastPoint       = (float)ability.FindCastPoint();
     AdditionalDelay = AbilityDatabase.Find(ability.Name).AdditionalDelay;
     Radius          = ability.GetRadius() + 25;
 }
Ejemplo n.º 14
0
    public static AbilityDatabase InitSetting()
    {
        string path = Application.persistentDataPath + "/Xml/Ability.Xml";

        if (!System.IO.File.Exists(path))
        {
            string folderPath;
            folderPath = Application.persistentDataPath + "/Xml";
            DirectoryInfo di = new DirectoryInfo(folderPath);
            if (di.Exists == false)
            {
                di.Create();
            }
            TextAsset   _xml   = Resources.Load <TextAsset>("XmlData/Ability");
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(_xml.text);
            if (_xml != null)
            {
                XmlSerializer   serializer = new XmlSerializer(typeof(AbilityDatabase));
                var             reader     = new StringReader(_xml.text);
                AbilityDatabase abilityDB  = serializer.Deserialize(reader) as AbilityDatabase;
                reader.Close();
                CreateXml(path);
                Debugging.Log("AbilityDatabase 최초 생성 성공");
                return(abilityDB);
            }
        }
        Debugging.Log("AbilityDatabase 최초 생성 실패");
        return(null);
    }
Ejemplo n.º 15
0
    public static AbilityDatabase LoadUser()
    {
        string path = Application.persistentDataPath + "/Xml/Ability.Xml";

        if (System.IO.File.Exists(path))
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(System.IO.File.ReadAllText(path));
            //복호화////
            XmlElement elmRoot     = xmlDoc.DocumentElement;
            var        decrpytData = DataSecurityManager.DecryptData(elmRoot.InnerText);
            elmRoot.InnerXml = decrpytData;
            //////////
            string _xml;
            using (var stringWriter = new StringWriter())
                using (var xmlTextWriter = XmlWriter.Create(stringWriter))
                {
                    xmlDoc.WriteTo(xmlTextWriter);
                    xmlTextWriter.Flush();
                    _xml = stringWriter.GetStringBuilder().ToString();
                }
            if (_xml != null)
            {
                XmlSerializer   serializer = new XmlSerializer(typeof(AbilityDatabase));
                var             reader     = new StringReader(_xml);
                AbilityDatabase abilityDB  = serializer.Deserialize(reader) as AbilityDatabase;
                reader.Close();
                Debugging.Log("AbilityDatabase 기존 파일 로드");
                return(abilityDB);
            }
        }
        Debugging.LogSystemWarning("AbilityDatabase wasn't loaded. >> " + path + " is null. >>");
        return(null);
    }
Ejemplo n.º 16
0
        /// <summary>
        ///     Returns cast range of ability, if ability is NonTargeted it will return its radius!
        /// </summary>
        /// <param name="ability"></param>
        /// <returns></returns>
        public static float GetCastRange(this Ability ability)
        {
            if (ability.Name == "templar_assassin_meld")
            {
                return((ability.Owner as Hero).GetAttackRange() + 50);
            }
            if (!ability.AbilityBehavior.HasFlag(AbilityBehavior.NoTarget))
            {
                var castRange  = ability.CastRange;
                var bonusRange = 0;
                if (castRange <= 0)
                {
                    castRange = 999999;
                }
                if (ability.Name == "dragon_knight_dragon_tail" &&
                    (ability.Owner as Hero).Modifiers.Any(x => x.Name == "modifier_dragon_knight_dragon_form"))
                {
                    bonusRange = 250;
                }
                else if (ability.Name == "beastmaster_primal_roar" && (ability.Owner as Hero).AghanimState())
                {
                    bonusRange = 350;
                }
                return(castRange + bonusRange + 100);
            }
            var         radius = 0f;
            AbilityInfo data;

            if (!AbilityDamage.DataDictionary.TryGetValue(ability, out data))
            {
                data = AbilityDatabase.Find(ability.Name);
                AbilityDamage.DataDictionary.Add(ability, data);
            }
            if (data == null)
            {
                return(ability.CastRange);
            }
            if (!data.FakeCastRange)
            {
                if (data.Width != null)
                {
                    radius = ability.GetAbilityData(data.Width);
                }
                if (data.StringRadius != null)
                {
                    radius = ability.GetAbilityData(data.StringRadius);
                }
                if (data.Radius > 0)
                {
                    radius = data.Radius;
                }
            }
            else
            {
                radius = ability.GetAbilityData(data.RealCastRange);
            }
            return(radius + 50);
        }
Ejemplo n.º 17
0
 private void SpellInit()
 {
     if (LocalPlayer.Instance.CharName == "Shen Rao" || string.IsNullOrEmpty(LocalPlayer.Instance.CharName))
     {
         ActiveSkills.AddFromDatabase();
         AM1Info    = AbilityDatabase.Get("LightningBolt");
         AscendedM1 = new SkillBase(AbilitySlot.Ability1, SkillType.Circle, AM1Info.Range, AM1Info.Speed, AM1Info.Radius, AM1Info.FixedDelay);
     }
 }
Ejemplo n.º 18
0
        /// <summary>
        ///     Returns cast range of ability, if ability is NonTargeted it will return its radius!
        /// </summary>
        /// <param name="ability"></param>
        /// <param name="abilityName"></param>
        /// <returns></returns>
        public static float GetCastRange(this Ability ability, string abilityName = null)
        {
            var name = abilityName ?? ability.Name;

            if (name == "templar_assassin_meld")
            {
                return((ability.Owner as Hero).GetAttackRange() + 50);
            }
            if (!ability.IsAbilityBehavior(AbilityBehavior.NoTarget, name))
            {
                var castRange  = ability.CastRange;
                var bonusRange = 0f;
                if (castRange <= 0)
                {
                    castRange = 999999;
                }
                var owner = ability.Owner as Hero;
                if (name == "dragon_knight_dragon_tail" &&
                    owner.Modifiers.Any(x => x.Name == "modifier_dragon_knight_dragon_form"))
                {
                    bonusRange = 250;
                }
                else if (name == "beastmaster_primal_roar" && owner.AghanimState())
                {
                    bonusRange = 350;
                }
                var aetherLens = owner.FindItem("item_aether_lens");
                if (aetherLens != null)
                {
                    bonusRange += aetherLens.GetAbilityData("cast_range_bonus");
                }
                return(castRange + bonusRange);
            }

            var         radius = 0f;
            AbilityInfo data;

            if (!AbilityDamage.DataDictionary.TryGetValue(ability, out data))
            {
                data = AbilityDatabase.Find(name);
                AbilityDamage.DataDictionary.Add(ability, data);
            }
            if (data == null)
            {
                return(ability.CastRange);
            }
            if (!data.FakeCastRange)
            {
                radius = ability.GetRadius(name);
            }
            else
            {
                radius = ability.GetAbilityData(data.RealCastRange, abilityName: name);
            }
            return(radius);
        }
Ejemplo n.º 19
0
 /// <summary>
 ///     The load.
 /// </summary>
 private static void Load()
 {
     AbilityDatabase.Init();
     AbilityDamage.Init();
     AbilityExtensions.Init();
     HeroExtensions.Init();
     UnitExtensions.Init();
     Names.Init();
     Abilities.Init();
 }
Ejemplo n.º 20
0
 private static void OnMatchStart(EventArgs args)
 {
     AbilityStates.Clear();
     foreach (var character in EntitiesManager.EnemyTeam)
     {
         var abilities = AbilityDatabase.GetDodge(character.CharName);
         var dict      = abilities.ToDictionary(abilityInfo => abilityInfo.AbilityId, abilityInfo => true);
         AbilityStates.Add(character.CharName, dict);
     }
 }
Ejemplo n.º 21
0
                private static void InGameObject_OnCreate(InGameObject inGameObject)
                {
                    var data = AbilityDatabase.GetObstacle(inGameObject.ObjectName);

                    if (data == null)
                    {
                        return;
                    }
                    AddAfterFrame.Add(new TrackedObstacleObject(inGameObject.Get <MapGameObject>(), data));
                }
Ejemplo n.º 22
0
 private void Awake()
 {
     instance = this;
     CollisionManager.InitializeCollisionManager();
     ItemDatabase.InitializeDatabase();
     AbilityDatabase.InitializeDatabase();
     EnemyDatabase.LoadDatabase();
     MapDatabase.InitializeDatabase();
     RoomDatabase.InitializeDatabase();
 }
Ejemplo n.º 23
0
        public static void AddFromDatabase(AbilitySlot slot)
        {
            var data = AbilityDatabase.Get(LocalPlayer.Instance.CharName, slot)[0];

            if (data != null)
            {
                Active.Add(new SkillBase(slot, data.AbilityType.ToSkillType(), data.Range == 0 ? data.MaxRange : data.Range, data.Speed, data.Radius, data.FixedDelay));
                ActiveInfos.Add(data);
            }
        }
Ejemplo n.º 24
0
 private static void InitUserData(string localId, string name)
 {
     SaveSystem.InitPlayer(localId, name);
     ItemDatabase.InitSetting();
     HeroDatabase.InitSetting();
     AbilityDatabase.InitSetting();
     SkillDatabase.InitSetting();
     MissionDatabase.InitSetting();
     MapDatabase.InitSetting();
     SaveData();
 }
Ejemplo n.º 25
0
 public void SetDataToCloud(string socialUserId, string socialName, string saveTime)
 {
     localId       = socialUserId;
     name          = socialName;
     lastSavedTime = saveTime;
     UserData      = SaveSystem.GetUserDataToCloud();
     ItemData      = ItemDatabase.GetItemDataToCloud();
     HeroData      = HeroDatabase.GetHeroDataToCloud();
     AbilityData   = AbilityDatabase.GetAbilityDataToCloud();
     SkillData     = SkillDatabase.GetSkillDataToCloud();
     MissionData   = MissionDatabase.GetMissionDataToCloud();
     MapData       = MapDatabase.GetMapDataToCloud();
 }
Ejemplo n.º 26
0
 /// <summary>
 ///     The load.
 /// </summary>
 private static void Load()
 {
     AbilityDatabase.Init();
     AbilityDamage.Init();
     AbilityExtensions.Init();
     HeroExtensions.Init();
     UnitExtensions.Init();
     Names.Init();
     Abilities.Init();
     Calculations.Init();
     EntityExtensions.Init();
     Orbwalking.Events_OnLoad(null, null);
     Utils.Sleeps = new Dictionary <string, double>();
 }
Ejemplo n.º 27
0
                private static void SpellDetector_OnSpellCast(SpellCastArgs args)
                {
                    if (args.Caster.Team == BattleRight.Core.Enumeration.Team.Enemy)
                    {
                        return;
                    }
                    var data = AbilityDatabase.Get(args.Caster.AbilitySystem.CastingAbilityId);

                    if (data == null)
                    {
                        return;
                    }
                    TrackedCasts.Add(new TrackedCast(args.AbilityIndex, args.Caster, data));
                }
Ejemplo n.º 28
0
 // Use this for initialization
 private void Awake()
 {
     GameController.GetInstance().SetPlayerScript(this);
     mMainCamera = Camera.main;
     mAbilities  = new GameObject[6];
     AbilityDatabase.GetInstance().GetAbility(0).GetComponent <Projectile>().mSpawnPosition  = transform;
     AbilityDatabase.GetInstance().GetAbility(0).GetComponent <Projectile>().mSpawnDirection = mCrosshair.transform;
     mAbilities[0] = Instantiate(AbilityDatabase.GetInstance().GetAbility(0), gameObject.transform);
     mAbilities[1] = Instantiate(AbilityDatabase.GetInstance().GetAbility(1), gameObject.transform);
     mAbilities[2] = Instantiate(AbilityDatabase.GetInstance().GetAbility(2), gameObject.transform);
     mAbilities[3] = Instantiate(AbilityDatabase.GetInstance().GetAbility(3), gameObject.transform);
     mAbilities[4] = Instantiate(AbilityDatabase.GetInstance().GetAbility(4), gameObject.transform);
     mAbilities[5] = Instantiate(AbilityDatabase.GetInstance().GetAbility(5), gameObject.transform);
 }
Ejemplo n.º 29
0
 /// <summary>
 ///     The load.
 /// </summary>
 private static void Init()
 {
     AbilityDatabase.Init();
     AbilityDamage.Init();
     AbilityExtensions.Init();
     HeroExtensions.Init();
     UnitExtensions.Init();
     Names.Init();
     Abilities.Init();
     Calculations.Init();
     EntityExtensions.Init();
     Utils.Sleeps = new Dictionary <string, double>();
     NotifiedSubscribers.Clear();
 }
Ejemplo n.º 30
0
        /// <summary>
        ///     Returns prediction for given target after given ability hit delay
        /// </summary>
        /// <param name="ability"></param>
        /// <param name="target"></param>
        /// <param name="customDelay">enter your custom delay</param>
        /// <param name="abilityName"></param>
        /// <returns></returns>
        public static Vector3 GetPrediction(
            this Ability ability,
            Unit target,
            double customDelay = 0,
            string abilityName = null)
        {
            var         name = abilityName ?? ability.Name;
            AbilityInfo data;

            if (!AbilityDamage.DataDictionary.TryGetValue(ability, out data))
            {
                data = AbilityDatabase.Find(name);
                AbilityDamage.DataDictionary.Add(ability, data);
            }
            var owner = ability.Owner as Unit;
            var delay = ability.GetCastDelay(owner as Hero, target, true, abilityName: name, useChannel: true);

            if (data != null)
            {
                delay += data.AdditionalDelay;
            }
            var     speed  = ability.GetProjectileSpeed(name);
            var     radius = ability.GetRadius(name);
            Vector3 xyz;

            if (speed > 0 && speed < 6000)
            {
                xyz = Prediction.SkillShotXYZ(
                    owner,
                    target,
                    (float)((delay + owner.GetTurnTime(target.Position)) * 1000),
                    speed,
                    radius);
                if (!ability.IsAbilityBehavior(AbilityBehavior.NoTarget, name))
                {
                    xyz = Prediction.SkillShotXYZ(
                        owner,
                        target,
                        (float)((delay + (float)owner.GetTurnTime(xyz)) * 1000),
                        speed,
                        radius);
                }
            }
            else
            {
                xyz = Prediction.PredictedXYZ(target, (float)(delay * 1000));
            }
            return(xyz);
        }
Ejemplo n.º 31
0
    public void Initialize(MyCharacterController controller)
    {
        characterStats.setChar(this);
        this.topDownController = controller;

        skillMenu = GameObject.Find("Food Skills").GetComponent<SkillMenu>();
        skillMenu.SetCharacter(this);
        abDB = GameObject.Find("Databases").GetComponent<AbilityDatabase>();
        SkillMenu characterSkills = GameObject.Find("Character Skills").GetComponent<SkillMenu>();
        characterSkills.SetCharacter(this);

        for (int i = 0; i < charAbilitiesIndex.Count; i++)
            addCharAbilities(abDB.getAbilityById(charAbilitiesIndex[i]));

        tasteTranslater = new SimpleTasteTranslation();
        skillMenu.updateSkillList();
        characterSkills.updateSkillList();
        //to refresh their setter
        characterStats.MovementSpeed = characterStats.MovementSpeed;
        characterStats.AttackSpeed = characterStats.AttackSpeed;

        DamageOverTime dot = new DamageOverTime();
        dot.duration = 6;
        dot.damage = 20;
        dot.hitsPerSecond = 1;
        dot.ChanceOfApplying = 25;
        dot.typeOfDamage = TypeOfEffects.fire;
        onHitStatusEffects.Add(dot);
    }