Beispiel #1
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetButtonDown("SpikeAbility"))
            currentAbility = Abilities.Spike;
        if (Input.GetButtonDown("MineAbility"))
            currentAbility = Abilities.Mine;
        if (Input.GetButtonDown("LazorAbility"))
            currentAbility = Abilities.Lazor;

        if (Input.GetMouseButtonDown(0) && Network.isServer && spline != null)
        {
            Ray rayHitTest = cam.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            //Debug.DrawRay(rayHitTest);
            if(Physics.Raycast(rayHitTest, out hit, 1000, 1 << LayerMask.NameToLayer("Spline")))
            {
                float param = spline.GetClosestPointParamToRay(rayHitTest,10);
                switch (currentAbility) {
                    case Abilities.Spike:
                        placeSpike(param);
                        break;
                    case Abilities.Mine:
                        placeMine(param);
                        break;
                    case Abilities.Lazor:
                        placeLazor(param);
                        break;
                }
            }
        }
    }
Beispiel #2
0
        /// <summary>
        /// Get Player Abilities list
        /// </summary>
        /// <param name="playerId"></param>
        /// <returns></returns>
        public static Abilities GetPlayerAbility(int playerId, SkillType skillType)
        {
            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
                connection.Open();
                Abilities abilities = new Abilities();

                using (MySqlCommand command = connection.CreateCommand())
                {
                    command.CommandText = "GAME_PLAYER_ABILITY_GET";
                    command.CommandType = System.Data.CommandType.StoredProcedure;
                    command.Parameters.AddWithValue("@in_PlayerId", playerId);
                    command.Parameters.AddWithValue("@in_AbilityType", skillType);

                    var reader = command.ExecuteReader();

                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            int abilityId = reader.GetInt32(1);
                            int abilityLevel = reader.GetInt32(2);

                            abilities.AddAbility(abilityId, abilityLevel);
                        }
                    }
                }
                connection.Close();
                return abilities;
            }
        }
Beispiel #3
0
 public static Abilities fromList(ListOfAbilities _ability)
 {
     Abilities ability = new Abilities();
     switch (_ability){
     case ListOfAbilities.StrongLeadership:
         ability = new Abilities(){
             isActive = false,
             CostToLearn = 10000,
             AbilityName = "Strong Leadership",
             muhReturns = 0.01f,
             EnergyCost = 0
         };
         break;
     case ListOfAbilities.Phalanx:
         ability = new Abilities(){
             isActive = true,
             CostToLearn = 10000,
             AbilityName = "Phalanx",
             muhReturns = 0,
             EnergyCost = 30
         };
         break;
     }
     return ability;
 }
Beispiel #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="pudink.Brouk"/> class.
 /// </summary>
 /// <param name="texset">Texture set.</param>
 /// <param name="typ">Type.</param>
 public Brouk(TextureSet texset,Typ typ)
 {
     this.textureset = texset;
     this.typbug = typ;
     this.NastavTyp (typ);
     this.schopnosti = new Abilities (typ);
 }
Beispiel #5
0
    void Start()
    {
        armAnimator.arm = gameObject.transform.Find("Arm");
        spriteRenderer = GetComponent<SpriteRenderer>();
        InvokeRepeating("Animate", 0, armAnimator.secondsPerFrame);

        InvokeRepeating("LowerCooldowns", 0, 0.01f);
        abilities = _abilities;
    }
Beispiel #6
0
 public Captain(string prae, string nomina, string cogno, int age,  string _profession, Abilities[] _abilities)
 {
     Praenomina = prae;
     Nomina = nomina;
     Cognomina = cogno;
     Age = age;
     Profession = _profession;
     muhAbilities = _abilities;
 }
Beispiel #7
0
    void Start()
    {
        character = GetComponent<Character> ();

        navigation = GetComponent<Navigation>();

        combatData = GetComponent<Combat>();

        abilities = GetComponent<Abilities>();
    }
Beispiel #8
0
 public AbilityButton(Vector2 position, int number, bool centered, Abilities.Ability ab)
 {
     this.number = number;
     ability = ab;
     pos = position;
     if (centered)
     {
         pos.X -= Engine.CELLWIDTH / 2;//standard.texture.Width / 2;
         pos.Y -= Engine.CELLWIDTH / 2;//standard.texture.Height / 2;
     }
     this.caption = ab != null? ab.name : "";
 }
Beispiel #9
0
        public Context(bool isMock = false)
        {
            Abilities = new Abilities();
            Actions = new Actions();
            Characteristics = new Characteristics();
            Models = new Models();
            Spells = new Spells();
            Triggers = new Triggers();
            Weapons = new Weapons();

            LoadData(isMock);
        }
Beispiel #10
0
        /// <summary>
        /// Add or Update player abilities 
        /// </summary>
        /// <param name="player"></param>
        public static void SavePlayerAbility(Player player, SkillType skillType, bool update = true)
        {
            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
                connection.Open();
                Abilities Abilities = new Abilities();
                switch (skillType)
                {
                    case SkillType.Ascension:
                        Abilities = player.AscensionAbilities;
                        break;
                    case SkillType.Basic:
                        Abilities = player.Abilities;
                        break;
                }

                if (!update)
                {
                    foreach (var ability in Abilities.Values)
                    {
                        using (MySqlCommand command = connection.CreateCommand())
                        {
                            command.CommandText = "GAME_PLAYER_ABILITY_ADD";
                            command.CommandType = System.Data.CommandType.StoredProcedure;
                            command.Parameters.AddWithValue("@in_PlayerId", player.PlayerId);
                            command.Parameters.AddWithValue("@in_AbilityId", ability.Key);
                            command.Parameters.AddWithValue("@in_AbilityLevel", ability.Value);
                            command.Parameters.AddWithValue("@in_AbilityType", skillType);
                            command.ExecuteNonQuery();
                        }
                    }
                }
                else
                {
                    foreach (var ability in Abilities.Values)
                    {
                        using (MySqlCommand command = connection.CreateCommand())
                        {
                            command.CommandText = "GAME_PLAYER_ABILITY_UPDATE";
                            command.CommandType = System.Data.CommandType.StoredProcedure;
                            command.Parameters.AddWithValue("@in_PlayerId", player.PlayerId);
                            command.Parameters.AddWithValue("@in_AbilityId", ability.Key);
                            command.Parameters.AddWithValue("@in_AbilityLevel", ability.Value);
                            command.Parameters.AddWithValue("@in_AbilityType", skillType);
                            command.ExecuteNonQuery();
                        }
                    }
                }
                connection.Close();
            }
        }
        public static Obj_AI_Base GetEnemy(Abilities ability, GameObjectType type)
        {
            float range = 0;
            if (ability == Abilities.Q)
                range = Program.QRange;
            else if (ability == Abilities.W)
                range = Program.WRange;
            else if (ability == Abilities.Slice || ability == Abilities.Dice)
                range = Program.E.Range;

            return ObjectManager.Get<Obj_AI_Base>().OrderBy(a => a.Health).Where(a => a.IsEnemy
            && a.Type == type
            && a.Distance(Renekton) <= range
            && !a.IsDead
            && !a.IsInvulnerable
            && a.IsValidTarget(range)).FirstOrDefault();
        }
Beispiel #12
0
    void Start()
    {
        if (instance != null) {
            return;
        }
        instance = this;

        playerAbilities = new List<Ability>();
        abilities = new Dictionary<int, Ability>();
        Object[] abilityPrefabs = Resources.LoadAll("Content/Abilities");
        foreach (Object abilityPrefab in abilityPrefabs) {
            GameObject go = (GameObject) abilityPrefab;
            Ability abilityData = go.GetComponent<Ability>();
            if (!abilities.ContainsKey(abilityData.id)) {
                abilities.Add(abilityData.id, abilityData);
            }
        }
    }
Beispiel #13
0
 public Character(Guid characterId, string nameChoice)
 {
     Id = characterId;
     Name = nameChoice;
     Class = CharacterClass.Untrained;
     Experience = new Experience();
     Experience.Level = 1;
     Experience.Points = 0;
     Abilities = new Abilities();
     Abilities.Roll();
     Money = new Money();
     Health = new Health();
     Health.Damage = 0;
     Money.Gold = Dice.Roll(3, 6, 0) * 10;
     Equipment = new EquippedItems();
     Equipment.Armor = new LeatherArmor();
     Equipment.Weapon = new Longsword();
     Equipment.Shield = new Shield();
 }
Beispiel #14
0
        public Skill(string baseKey, string baseName, string variant, Abilities ability, bool canUseUntrained)
        {
            BaseKey = baseKey;
            BaseName = baseName;
            Variant = variant;
            Ability = ability;
            CanUseUntrained = canUseUntrained;

            if (string.IsNullOrEmpty(Variant))
            {
                Key = BaseKey;
                Name = BaseName;
            }
            else
            {
                Key = string.Format("{0}/{1}", BaseKey, Variant);
                Name = string.Format("{0} ({1})", BaseName, Variant);
            }
        }
Beispiel #15
0
        public AbilityScore GetAttributeScore(Abilities ability)
        {
            switch (ability)
            {
                case Abilities.Strength:
                    return Strength;
                case Abilities.Dexterity:
                    return Dexterity;
                case Abilities.Intelligence:
                    return Intelligence;
                case Abilities.Constitution:
                    return Constitution;
                case Abilities.Wisdom:
                    return Wisdom;
                case Abilities.Charisma:
                    return Charisma;
            }

            throw new ArgumentOutOfRangeException("ability", ability, "Unable to get attribute score for this attribute");
        }
        public static int AbilityModifierGet(this ClassModel cls, Abilities ability)
        {
            var abilityName = ability.ToString();
            System.Type type = cls.GetType();
            var properties = type.GetProperties();

            int abilityBase = 10;

            var prop = properties.FirstOrDefault(p => p.Name.Equals(abilityName));
            if (prop != null)
            {
                int test;
                if (int.TryParse(prop.GetValue(cls, null).ToString(), out test))
                {
                    abilityBase = test;
                }
            }

            return LevelConstants.AbilityModifier(abilityBase);
        }
Beispiel #17
0
        ///<summary>
        ///Used to check for a secondary hotbar set. Currently only used for wizards with Archon.
        ///</summary>
        internal override bool SecondaryHotbarBuffPresent()
        {
            bool ArchonBuffPresent = Hotbar.HasBuff(SNOPower.Wizard_Archon);

            //Confirm we don't have archon Ability without archon buff.
            bool RefreshNeeded = ((!ArchonBuffPresent && (Abilities.ContainsKey(SNOPower.Wizard_Archon_ArcaneBlast) || Abilities.ContainsKey(SNOPower.Wizard_Archon_ArcaneBlast_Fire) || Abilities.ContainsKey(SNOPower.Wizard_Archon_ArcaneBlast_Cold) || Abilities.ContainsKey(SNOPower.Wizard_Archon_ArcaneBlast_Lightning))) ||
                                  (ArchonBuffPresent && (!Abilities.ContainsKey(SNOPower.Wizard_Archon_ArcaneBlast) && !Abilities.ContainsKey(SNOPower.Wizard_Archon_ArcaneBlast_Fire) && !Abilities.ContainsKey(SNOPower.Wizard_Archon_ArcaneBlast_Cold) && !Abilities.ContainsKey(SNOPower.Wizard_Archon_ArcaneBlast_Lightning))));

            if (RefreshNeeded)
            {
                Logger.DBLog.InfoFormat("Updating Hotbar abilities!");
                Hotbar.RefreshHotbar();
                RecreateAbilities();
                return(true);
            }

            return(false);
        }
 public void GrandAbility(Abilities ability)
 {
     if (ability == Abilities.Invincibility)
     {
         this.Ability = ability;
         this.Body = new char[,]
         {
             {'{','}','-','-'},
             {'|','|','-','>'},
             {'{','}','-','-'}
         };
         this.IsCollidable = false;
     }
 }
 private async Task<bool> Cast(Abilities id)
 {
     return await Cast((uint)id);
 }
Beispiel #20
0
        public override void InitAbilities()
        {
            base.InitAbilities();

            Abilities.Add(new EachBattleAbility());
        }
 public override void init()
 {
     controller = GetComponent<Hubert>();
     abilities = GetComponent<Abilities>();
 }
Beispiel #22
0
        private void Setup()
        {
            try
            {
                if (BoltNetwork.isRunning)
                {
                    if (entity == null)
                    {
                        entity = transform.root.GetComponentInChildren <BoltEntity>();
                    }
                    if (entity == null)
                    {
                        entity = HealthScript.entity;
                    }
                    if (entity == null)
                    {
                        entity = transform.root.GetComponent <BoltEntity>();
                    }
                    EnemyManager.AddHostEnemy(this);
                }
                if (!EnemyManager.enemyByTransform.ContainsKey(transform))
                {
                    EnemyManager.enemyByTransform.Add(this.transform, this);
                }
            }
            catch (Exception ex)
            {
                ModAPI.Log.Write(ex.ToString());
            }

            //Assiging base health, if new enemy
            if (baseHealth == 0)
            {
                baseHealth = HealthScript.Health;
            }
            else                //reverting health to base health if reused enemy (in case enemies are pooled)
            {
                HealthScript.Health = baseHealth;
            }

            StopAllCoroutines();

            Steadfast          = 100;
            slows              = new Dictionary <int, EnemyDebuff>();
            dmgTakenDebuffs    = new Dictionary <int, EnemyDebuff>();
            dmgDealtDebuffs    = new Dictionary <int, EnemyDebuff>();
            FireDamageDebuffs  = new Dictionary <int, EnemyDebuff>();
            DamageOverTimeList = new List <DoT>();
            abilities          = new List <Abilities>();

            SetType();


            //picking abilities
            if ((UnityEngine.Random.value < 0.1 || (AIScript.creepy_boss && !AIScript.girlFullyTransformed) || ModSettings.difficulty == ModSettings.Difficulty.Hell) && enemyType != Enemy.Baby && ModSettings.AllowElites)
            {
                int abilityAmount = (int)ModSettings.difficulty > (int)ModSettings.Difficulty.Veteran ? UnityEngine.Random.Range(3, 7) : 2;
                if (AIScript.creepy_boss)
                {
                    abilityAmount = 10;
                }                   //Megan boss always has abilities, a lot of them.

                int   i            = 0;
                Array abilityArray = Enum.GetValues(typeof(Abilities));

                //Determining if enemy is Elite, Miniboss or Boss type of enemy
                if (abilityAmount > 6 && Random.value < 0.3f)
                {
                    _rarity = EnemyRarity.Boss;
                    abilities.Add(Abilities.BossSteadfast);
                }
                else if (abilityAmount > 4 && Random.value < 0.3f)
                {
                    abilities.Add(Abilities.EliteSteadfast);
                    _rarity = EnemyRarity.Miniboss;
                }
                else
                {
                    _rarity = EnemyRarity.Elite;
                }

                if (AIScript.creepy_boss && !AIScript.girlFullyTransformed)                    //Force adding BossSteadfast to Megan
                {
                    abilities.Clear();
                    _rarity = EnemyRarity.Boss;
                    abilities.Add(Abilities.BossSteadfast);
                }

                //Trial and error method of picking abilities
                while (i < abilityAmount)
                {
                    bool      canAdd = true;
                    Abilities ab     = (Abilities)abilityArray.GetValue(UnityEngine.Random.Range(0, abilityArray.Length));
                    if (ab == Abilities.Steadfast || ab == Abilities.EliteSteadfast || ab == Abilities.BossSteadfast)
                    {
                        if (abilities.Contains(Abilities.Steadfast) || abilities.Contains(Abilities.EliteSteadfast) || abilities.Contains(Abilities.BossSteadfast))
                        {
                            canAdd = false;
                        }
                    }
                    else if (ab == Abilities.Tiny || ab == Abilities.Huge)
                    {
                        if (AIScript.creepy_boss && ab == Abilities.Tiny)
                        {
                            canAdd = false;
                        }
                        else if (abilities.Contains(Abilities.Huge) || abilities.Contains(Abilities.Tiny))
                        {
                            canAdd = false;
                        }
                    }
                    else if (ab == Abilities.Undead && !(AIScript.creepy || AIScript.creepy_fat))
                    {
                        canAdd = false;
                    }
                    else if (ab == Abilities.ArcaneCataclysm || ab == Abilities.BlackHole || ab == Abilities.FireCataclysm || ab == Abilities.Meteor)
                    {
                        if ((int)ModSettings.difficulty < (int)ModSettings.Difficulty.Master)
                        {
                            canAdd = false;
                        }
                    }
                    if (abilities.Contains(ab))
                    {
                        canAdd = false;
                    }
                    if (canAdd)
                    {
                        i++;
                        abilities.Add(ab);
                    }
                }
            }
            else
            {
                _rarity = EnemyRarity.Normal;
            }

            SetLevel();
            RollName();
            //Assigning rest of stats
            int dif = (int)ModSettings.difficulty;

            DamageMult  = Mathf.Pow(Level, 3.5f) / 100f + 0.4f;
            DamageMult *= dif * 2f + 1;

            Armor          = Mathf.FloorToInt(Random.Range(Mathf.Pow(Level, 2.4f) * 0.36f + 1, Mathf.Pow(Level, 2.45f) + 20) * ModSettings.EnemyArmorMultiplier);
            Armor         *= dif / 2 + 1;
            ArmorReduction = 0;
            extraHealth    = (HealthScript.Health * Mathf.Pow((float)Level, 2.215f + (dif * 0.19f)) / 16);
            extraHealth   *= dif / 2 + 1;
            AnimSpeed      = 0.94f + (float)Level / 190;

            extraHealth *= ModSettings.EnemyHealthMultiplier;
            DamageMult  *= ModSettings.EnemyDamageMultiplier;
            AnimSpeed   *= ModSettings.EnemySpeedMultiplier;

            if (_rarity != EnemyRarity.Normal)
            {
                Armor *= 2;
            }
            //Extra health for boss type enemies
            switch (_rarity)
            {
            case EnemyRarity.Elite:
                extraHealth *= 2;

                break;

            case EnemyRarity.Miniboss:
                extraHealth *= 5;

                break;

            case EnemyRarity.Boss:
                extraHealth *= 10;
                if (!abilities.Contains(Abilities.Tiny))
                {
                    gameObject.transform.localScale *= 1.1f;
                }

                break;
            }
            extraHealth *= (float)(dif * 0.25f + 0.75f);
            if (dif > 3)
            {
                extraHealth *= 2.15f;
            }
            if (dif > 6)
            {
                extraHealth *= 3.4f;
            }
            //Applying some abilities
            if (abilities.Contains(Abilities.Huge))
            {
                Armor *= 2;
                gameObject.transform.localScale *= 2;
                extraHealth *= 2;
                DamageMult  *= 2;
                AnimSpeed   /= 1.6f;
            }
            else if (abilities.Contains(Abilities.Tiny))
            {
                gameObject.transform.localScale *= 0.35f;
                AnimSpeed  *= 1.1f;
                DamageMult *= 1.2f;
                BroadcastMessage("SetTriggerScaleForTiny", SendMessageOptions.DontRequireReceiver);
            }
            if (abilities.Contains(Abilities.Steadfast))
            {
                Steadfast = 5;
            }
            if (abilities.Contains(Abilities.EliteSteadfast))
            {
                Steadfast = 2f;
            }
            if (abilities.Contains(Abilities.BossSteadfast))
            {
                Steadfast = 0.25f;
            }
            if (abilities.Contains(Abilities.ExtraHealth))
            {
                extraHealth *= 3;
            }
            if (abilities.Contains(Abilities.ExtraDamage))
            {
                DamageMult *= 4f;
            }
            if (abilities.Contains(Abilities.RainEmpowerement))
            {
                prerainDmg   = DamageMult;
                prerainArmor = Armor;
            }
            if (abilities.Contains(Abilities.Juggernaut))
            {
                CCimmune   = true;
                AnimSpeed /= 1.15f;
            }
            if (abilities.Contains(Abilities.Avenger))
            {
                if (avengerability == null)
                {
                    avengerability = gameObject.AddComponent <Avenger>();
                }
                avengerability.progression = this;
                avengerability.Stacks      = 0;
            }
            else if (avengerability != null)
            {
                Destroy(avengerability);
            }
            if (abilities.Contains(Abilities.FireAura))
            {
                float aurDmg = (5 * Level + 1) * ((int)ModSettings.difficulty + 1.3f);
                FireAura.Cast(gameObject, aurDmg);
                if (BoltNetwork.isRunning)
                {
                    using (System.IO.MemoryStream answerStream = new System.IO.MemoryStream())
                    {
                        using (System.IO.BinaryWriter w = new System.IO.BinaryWriter(answerStream))
                        {
                            w.Write(8);
                            w.Write(2);
                            w.Write(entity.networkId.PackedValue);
                            w.Write(aurDmg);
                        }
                        ChampionsOfForest.Network.NetworkManager.SendLine(answerStream.ToArray(), ChampionsOfForest.Network.NetworkManager.Target.Clients);
                        answerStream.Close();
                    }
                }

                InvokeRepeating("SendFireAura", 20, 30);
            }
            else
            {
                var aura = gameObject.GetComponent <FireAura>();
                if (aura != null)
                {
                    Destroy(aura);
                }
            }
            //Clamping Health
            try
            {
                maxHealth = extraHealth;
                HealthScript.maxHealthFloat = extraHealth;
                Armor = Mathf.Min(Armor, int.MaxValue - 5);
                if (Armor < 0)
                {
                    Armor = int.MaxValue;
                }
                //Setting other health variables
                HealthScript.maxHealth = Mathf.RoundToInt(Mathf.Min(extraHealth, int.MaxValue - 5));
                HealthScript.Health    = Mathf.RoundToInt(Mathf.Min(extraHealth, int.MaxValue - 5));
                extraHealth           -= HealthScript.Health;
                DebuffDmgMult          = DamageMult;
                DualLifeSpend          = false;
                setupComplete          = true;
                OnDieCalled            = false;
                BaseDamageMult         = DamageMult;
                BaseAnimSpeed          = AnimSpeed;
            }
            catch (Exception e)
            {
                ModAPI.Log.Write(e.ToString());
                CotfUtils.Log(e.Message);
            }

            AssignBounty();

            SteadfastCap = Mathf.Max(Steadfast * 0.01f * maxHealth, 1f);
            if (SteadfastCap < 1)             // Making sure the enemy can be killed
            {
                SteadfastCap = 1;
            }

            CreationTime = Time.time;

            if (BoltNetwork.isRunning)
            {
                ulong id = entity.networkId.PackedValue;
                using (System.IO.MemoryStream answerStream = new System.IO.MemoryStream())
                {
                    using (System.IO.BinaryWriter w = new System.IO.BinaryWriter(answerStream))
                    {
                        w.Write(30);
                        w.Write(id);
                        w.Write(BaseDamageMult);
                        foreach (Abilities ability in abilities)
                        {
                            w.Write((int)ability);
                        }
                        w.Close();
                    }
                    ChampionsOfForest.Network.NetworkManager.SendLine(answerStream.ToArray(), ChampionsOfForest.Network.NetworkManager.Target.Clients);
                    answerStream.Close();
                }
            }
        }
        private static void CastCombo(Hero globalTarget, Ability laser, Ability rockets, bool singleCombo = false)
        {
            var myInventory = Members.MyHero.Inventory.Items.ToList();
            var allItems    = myInventory.Where(x =>
                                                Helper.IsItemEnable(x.StoredName()) && x.CanBeCasted()).ToList();
            var distance        = Members.MyHero.Distance2D(globalTarget);
            var daggerCastRange = 1150 + (myInventory.Any(x => x.StoredName() == "item_aether_lens") ? 200 : 0);
            var inventory       =
                allItems.Where(
                    x =>
                    ((x.StoredName() == "item_blink" && distance <= daggerCastRange + CloseRange) ||
                     (x.GetCastRange() > 0 && x.CanHit(globalTarget) /* && distance <= x.GetCastRange() + 150*/) ||
                     (x.GetCastRange() <= 0)) && Utils.SleepCheck($"{x.Handle}+item_usages"))
                .ToList();

            if (laser != null && Helper.IsAbilityEnable(laser.StoredName()) && laser.CanBeCasted() &&
                laser.CanHit(globalTarget) && !_spellSleeper.Sleeping(laser))
            {
                laser.UseAbility(globalTarget);
                _spellSleeper.Sleep(1000, laser);
            }
            var slarkMod = globalTarget.HasModifiers(new[] { "modifier_slark_dark_pact", "modifier_slark_dark_pact_pulses" }, false);

            foreach (var item in inventory.OrderByDescending(Helper.PriorityHelper))
            {
                var name = item.StoredName();
                if (name == "item_ethereal_blade")
                {
                    _ethereal.Sleep(1000);
                }
                if (name.Contains("dagon"))
                {
                    if (_ethereal.Sleeping && !globalTarget.HasModifier("modifier_item_ethereal_blade_ethereal"))
                    {
                        continue;
                    }
                }
                if (item.IsAbilityBehavior(AbilityBehavior.NoTarget))
                {
                    item.UseAbility();
                }
                else if (item.IsAbilityBehavior(AbilityBehavior.UnitTarget))
                {
                    if (item.TargetTeamType == TargetTeamType.Enemy || item.TargetTeamType == TargetTeamType.All ||
                        item.TargetTeamType == TargetTeamType.Custom)
                    {
                        if (item.IsDisable())
                        {
                            if (!slarkMod && !globalTarget.IsLinkensProtected())
                            {
                                item.UseAbility(globalTarget);
                            }

                            /*if (item.CastStun(globalTarget))
                             * {
                             *  Utils.Sleep(250, $"{item.Handle}+item_usages");
                             *  continue;
                             * }*/
                        }
                        else if (item.IsSilence())
                        {
                            if (!slarkMod)
                            {
                                if (!globalTarget.IsSilenced())
                                {
                                    item.UseAbility(globalTarget);
                                }
                            }
                        }
                        else if ((item.StoredName().Contains("dagon") || item.StoredName() == "item_ethereal_blade") &&
                                 globalTarget.HasModifiers(
                                     new[]
                        {
                            /*"modifier_templar_assassin_refraction_absorb",
                             * "modifier_templar_assassin_refraction_absorb_stacks",*/
                            "modifier_oracle_fates_edict",
                            "modifier_abaddon_borrowed_time"
                        }, false))
                        {
                            continue;
                        }
                        else
                        {
                            item.UseAbility(globalTarget);
                        }

                        /*item.UseAbility(target);
                         * Print($"[Using]: {item.Name} (3)", print: false);*/
                    }
                    else
                    {
                        item.UseAbility(Members.MyHero);
                    }
                }
                else
                {
                    if (name == "item_blink")
                    {
                        if (singleCombo || _spellSleeper.Sleeping("blink_fix"))
                        {
                            continue;
                        }
                        if (distance > daggerCastRange + CloseRange)
                        {
                            var angle = Members.MyHero.FindAngleBetween(globalTarget.Position, true);
                            var point = new Vector3(
                                (float)
                                (globalTarget.Position.X -
                                 daggerCastRange *
                                 Math.Cos(angle)),
                                (float)
                                (globalTarget.Position.Y -
                                 daggerCastRange *
                                 Math.Sin(angle)),
                                globalTarget.Position.Z);
                            var dist = Members.MyHero.Distance2D(point);
                            if (dist >= MinDistance && dist <= daggerCastRange)
                            {
                                item.UseAbility(point);
                                _spellSleeper.Sleep(250, "blink_fix");
                            }
                        }
                        else if (distance > MinDistance)
                        {
                            var angle = Members.MyHero.FindAngleBetween(globalTarget.Position, true);
                            var point = new Vector3(
                                (float)
                                (globalTarget.Position.X -
                                 ExtraDistance *
                                 Math.Cos(angle)),
                                (float)
                                (globalTarget.Position.Y -
                                 ExtraDistance *
                                 Math.Sin(angle)),
                                globalTarget.Position.Z);
                            item.UseAbility(point);
                            _spellSleeper.Sleep(250, "blink_fix");
                        }
                    }
                    else
                    {
                        item.UseAbility(globalTarget.NetworkPosition);
                    }
                }
                Utils.Sleep(150, $"{item.Handle}+item_usages");

                #region

                /*var name = item.StoredName();
                 * if (name == "item_ethereal_blade")
                 *  _ethereal.Sleep(500);
                 * if (name.Contains("dagon"))
                 *  if (_ethereal.Sleeping && !globalTarget.HasModifier("modifier_item_ethereal_blade_ethereal"))
                 *      continue;
                 * if (item.IsAbilityBehavior(AbilityBehavior.NoTarget))
                 *  item.UseAbility();
                 * else if (item.IsAbilityBehavior(AbilityBehavior.UnitTarget))
                 *  if (item.TargetTeamType == TargetTeamType.Enemy || item.TargetTeamType == TargetTeamType.All ||
                 *      item.TargetTeamType == TargetTeamType.Custom)
                 *      item.UseAbility(globalTarget);
                 *  else
                 *      item.UseAbility(Members.MyHero);
                 * else
                 * {
                 *  if (name == "item_blink")
                 *  {
                 *      if (singleCombo)
                 *          continue;
                 *      if (distance > 1150 + extraRange)
                 *      {
                 *          var angle = Members.MyHero.FindAngleBetween(globalTarget.Position, true);
                 *          var point = new Vector3(
                 *              (float)
                 *                  (globalTarget.Position.X -
                 *                   CloseRange*
                 *                   Math.Cos(angle)),
                 *              (float)
                 *                  (globalTarget.Position.Y -
                 *                   CloseRange*
                 *                   Math.Sin(angle)),
                 *              globalTarget.Position.Z);
                 *          var dist = Members.MyHero.Distance2D(point);
                 *          if (dist >= MinDistance && dist <= 1150)
                 *              item.UseAbility(point);
                 *      }
                 *      else if (distance > MinDistance)
                 *      {
                 *          var angle = Members.MyHero.FindAngleBetween(globalTarget.Position, true);
                 *          var point = new Vector3(
                 *              (float)
                 *                  (globalTarget.Position.X -
                 *                   ExtraDistance *
                 *                   Math.Cos(angle)),
                 *              (float)
                 *                  (globalTarget.Position.Y -
                 *                   ExtraDistance *
                 *                   Math.Sin(angle)),
                 *              globalTarget.Position.Z);
                 *          item.UseAbility(point);
                 *      }
                 *  }
                 *  else
                 *      item.UseAbility(globalTarget.NetworkPosition);
                 * }
                 *
                 * Utils.Sleep(250, $"{item.Handle}+item_usages");*/

                #endregion
            }
            if (rockets != null && Helper.IsAbilityEnable(rockets.StoredName()) && rockets.CanBeCasted() &&
                distance <= 2500 && !_spellSleeper.Sleeping(rockets) && Helper.CanRockedHit(globalTarget))
            {
                rockets.UseAbility();
                _spellSleeper.Sleep(500, rockets);

                /*if (_ethereal.Sleeping && !globalTarget.HasModifier("modifier_item_ethereal_blade_ethereal"))
                 * {
                 *
                 * }
                 * else
                 * {
                 *  rockets.UseAbility();
                 *  _spellSleeper.Sleep(500, rockets);
                 * }*/
            }
            if (singleCombo)
            {
                return;
            }
            var rearm = Abilities.FindAbility("tinker_rearm");

            if (inventory.Count != 0 ||
                (rockets.CanBeCasted() && Helper.IsAbilityEnable(rockets.StoredName()) &&
                 Helper.CanRockedHit(globalTarget)) ||
                (laser.CanBeCasted() && Helper.IsAbilityEnable(laser.StoredName()) && laser.CanHit(globalTarget)) || _spellSleeper.Sleeping("blink_fix"))
            {
                Printer.Print($"{inventory.Count}");
                return;
            }
            //Printer.Print($"{rearm != null}/{Helper.IsAbilityEnable(rearm.StoredName())}/{rearm.CanBeCasted()}/{!_spellSleeper.Sleeping(rearm)}/{!Members.MyHero.IsChanneling()}");
            if (rearm != null && Helper.IsAbilityEnable(rearm.StoredName()) && rearm.CanBeCasted() && !_spellSleeper.Sleeping(rearm) && !Members.MyHero.IsChanneling())
            {
                rearm.UseAbility();
                //_spellSleeper.Sleep(4000 - rearm.Level * 500, rearm);
                _spellSleeper.Sleep(750 + 530, rearm);
                //Printer.Print("use ream");
            }
        }
        //public List<int> battleAuxRes = new List<int>();

        private BattleState WhoWins(Abilities abilitie1, Abilities abilitie2)
        {
            var ab1 = (int)abilitie1;
            var ab2 = (int)abilitie2;

            //if (ab1 == ab2)
            //{
            //    return BattleState.Draw;
            //}

            //for (int i = 1; i <= NumberOfAbilities - 2; i++)
            //{
            //    var res1 = ab1 + i;
            //    if (res1 > NumberOfAbilities) {
            //        res1 -= 5;
            //    }
            //    battleAuxRes.Add(res1);
            //}
            //var res2 = ab1 - 1;
            //if (res2 <= 0) res2 += 5;
            //battleAuxRes.Add(res2);

            //foreach (var res in battleAuxRes)
            //{
            //    if (ab2 != res) continue;
            //    if (IsOdd(res))  return BattleState.Lost;
            //    if (IsEven(res)) return BattleState.Won;
            //}

            var res1 = ab1 + 2; //lose
            var res2 = ab1 + 1; //win
            var res3 = ab1 - 1; //Lose
            var res4 = ab1 + 3; //Win

            if (res1 > 5)
            {
                res1 -= 5;
            }
            if (res2 > 5)
            {
                res2 -= 5;
            }
            if (res3 < 0)
            {
                res3 += 5;
            }
            if (res4 > 5)
            {
                res4 -= 5;
            }

            if (ab1 == ab2)
            {
                return(BattleState.Draw);
            }
            if (res1 == ab2)
            {
                return(BattleState.Lost);
            }
            if (res2 == ab2)
            {
                return(BattleState.Won);
            }
            if (res3 == ab2)
            {
                return(BattleState.Lost);
            }
            return(res4 == ab2 ? BattleState.Won : BattleState.None);
            //return BattleState.None;
        }
 public void AddAttack(Abilities attack)
 {
     stack.Add(attack);
 }
Beispiel #26
0
 public MistRiasSonicGuardian() : base("Mist Rias, Sonic Guardian", 5, Civilization.Light, 2000, Subtype.Guardian)
 {
     Abilities.Add(new AnotherCreaturePutIntoBattleZoneAbility(new ControllerMayDrawCardsResolvable(1)));
 }
Beispiel #27
0
 public TerrorPit() : base("Terror Pit", 6, Civilization.Darkness)
 {
     ShieldTrigger = true;
     Abilities.Add(new SpellAbility(new DestroyOpponentsCreatureResolvable(new AnyFilter())));
 }
Beispiel #28
0
 public Exercise(Abilities ability)
 {
     Ability = ability;
 }
 public HunterCluster() : base("Hunter Cluster", 4, Civilization.Water, 1000, Subtype.CyberCluster)
 {
     ShieldTrigger = true;
     Abilities.Add(new BlockerAbility());
 }
Beispiel #30
0
 public AbilityData(string from, Abilities ability, string to)
 {
     From    = from;
     Ability = ability;
     To      = to;
 }
 public void IncludeAbilities(Abilities abilities)
 {
     masterAbilities.movePoints += abilities.movePoints;
     masterAbilities.jumpPoints += abilities.jumpPoints;
 }
Beispiel #32
0
 private Ability(Abilities name, int value)
 {
     Name   = name;
     Value  = value;
     Weight = 0;
 }
Beispiel #33
0
 public MikayRattlingDoll() : base("Mikay, Rattling Doll", 2, Civilization.Darkness, 2000, Subtype.DeathPuppet)
 {
     Abilities.Add(new BlockerAbility());
     Abilities.Add(new CannotAttackCreaturesAbility());
     Abilities.Add(new CannotAttackPlayersAbility());
 }
Beispiel #34
0
        public override void Randomize(BackgroundWorker backgroundWorker)
        {
            if (Flags.ItemFlags.EquipmentStatsPassives)
            {
                Flags.ItemFlags.EquipmentStatsPassives.SetRand();

                Dictionary <Item, PassiveSet> plandoPassives = main.equipPassivesPlando1.GetPassives();

                Dictionary <Item, Tuple <int[], int[]> > plandoStats = main.equipPlando1.GetEquipment();

                if (plandoPassives.Where(p => p.Value.LockingLevel == LockingLevel.SameType && p.Key.EquipPassive.Item1.Type != p.Value.Type).Count() > 0)
                {
                    KeyValuePair <Item, PassiveSet> pair = plandoPassives.Where(p => p.Key.EquipPassive.Item1.LockingLevel == LockingLevel.SameType && p.Key.EquipPassive.Item1.Type != p.Value.Type).First();
                    throw new Exception($"{pair.Value.GetPassives()[0].Name} on {pair.Key.Name} cannot be applied to this type of equipment ({pair.Key.EquipPassive.Item1.Type})");
                }

                Dictionary <PassiveSet, PassiveSet> mappings = GetMappings(plandoPassives);

                Dictionary <Character, List <PassiveSet> > sets = ((Character[])(Enum.GetValues(typeof(Character)))).ToDictionary(c => c, c =>
                {
                    List <PassiveSet> list = Passives.passives
                                             .Where(s => s.Type == PassiveType.Weapon)
                                             .Select(s => mappings[s])
                                             .Where(s => s.HasCharacter(Abilities.GetCharID(c.ToString().ToLower())) && s.LockingLevel > LockingLevel.Fixed)
                                             .ToList();
                    list = list.ShuffleWeighted(list.Select(s => s == Passives.None ? 3 : 1).ToList()).ToList();
                    return(list.Take(Items.items.Where(i => i.ID.StartsWith("wea") && i.EquipPassive.Item1 != Passives.Uncapped && GetCharacter(i.ID) == c && i.EquipPassive.Item1.LockingLevel > LockingLevel.Fixed && i.EquipPassive.Item2 == 0 && !plandoPassives.ContainsKey(i)).Select(i => i.EquipPassive.Item1).Count()).ToList());
                });

                Dictionary <Item, Tuple <float, float> > weaponMults = GetWeaponMults(plandoPassives, sets.ToDictionary(p => p.Key, p => new List <PassiveSet>(p.Value)));

                Dictionary <PassiveSet, int> tierCounts = Passives.passives.ToDictionary(s => s, s => Items.items.Where(i => (i.ID.StartsWith("wea") || i.ID.StartsWith("acc")) && i.EquipPassive.Item1 == s).Max(i => i.EquipPassive.Item2) + 1);

                plandoPassives.Keys.ToList().Where(i => equips[i].UpgradeInto != "").ForEach(i =>
                {
                    for (Item i2 = Items.items.Find(i3 => i3.ID == equips[i].UpgradeInto); ; i2 = Items.items.Find(i3 => i3.ID == equips[i2].UpgradeInto))
                    {
                        if (i2.EquipPassive.Item1 != i.EquipPassive.Item1)
                        {
                            break;
                        }
                        plandoPassives.Add(i2, plandoPassives[i]);
                        if (equips[i2].UpgradeInto == "")
                        {
                            break;
                        }
                    }
                });

                Items.items.Where(i => i.ID.StartsWith("wea") || i.ID.StartsWith("acc")).ForEach(i =>
                {
                    DataStoreEquip equip = equips[i];
                    Character curChar    = GetCharacter(i.ID);

                    int tier = i.EquipPassive.Item2;

                    PassiveSet initPassiveSet  = i.EquipPassive.Item1;
                    PassiveSet finalPassiveSet = i.EquipPassive.Item1;

                    Passive initPassive  = i.EquipPassive.Item1.GetPassive(Abilities.GetCharID(curChar.ToString().ToLower()), tier, tierCounts[i.EquipPassive.Item1]);
                    Passive finalPassive = initPassive;

                    if (i.EquipPassive.Item1.LockingLevel > LockingLevel.Fixed)
                    {
                        PassiveSet newSet;
                        if (plandoPassives.ContainsKey(i))
                        {
                            newSet = plandoPassives[i];
                        }
                        else
                        {
                            newSet = i.ID.StartsWith("wea") ? sets[curChar][0] : mappings[i.EquipPassive.Item1];
                        }

                        Passive passive          = newSet.GetPassive(Abilities.GetCharID(curChar.ToString().ToLower()), tier, tierCounts[i.EquipPassive.Item1]);
                        finalPassive             = passive;
                        finalPassiveSet          = newSet;
                        equip.Passive            = passive.ID;
                        equip.PassiveDisplayName = passive.PassiveDisplayName;
                        equip.HelpDisplay        = passive.PassiveHelp;
                        equip.StatType1          = passive.StatType1;
                        equip.StatType2          = passive.StatType2;
                        equip.StatInitial        = passive.StatInitial;
                    }

                    if (i.ID.StartsWith("wea"))
                    {
                        float strMult = (float)Math.Pow(finalPassive.StrengthModifier, 1f / Math.Pow(tier + 1, 1.2f)) * weaponMults[i].Item1;
                        float magMult = (float)Math.Pow(finalPassive.MagicModifier, 1f / Math.Pow(tier + 1, 1.2f)) * weaponMults[i].Item2;

                        float avgInit = ((initPassive.StrengthModifier == 0 ? 0 : equip.StrengthInitial / (float)Math.Pow(initPassive.StrengthModifier, 1f / Math.Pow(tier + 1, 1.2f))) + (initPassive.MagicModifier == 0 ? 0 : equip.MagicInitial / (float)Math.Pow(initPassive.MagicModifier, 1f / Math.Pow(tier + 1, 1.2f)))) / (equip.StrengthInitial == 0 || equip.MagicInitial == 0 || initPassive.StrengthModifier == 0 || initPassive.MagicModifier == 0 ? .75f : 2f);
                        float avgInc  = ((initPassive.StrengthModifier == 0 ? 0 : equip.StrengthIncrease / (float)Math.Pow(initPassive.StrengthModifier, 0.75f)) + (initPassive.MagicModifier == 0 ? 0 : equip.MagicIncrease / (float)Math.Pow(initPassive.MagicModifier, 0.75f))) / (equip.StrengthIncrease == 0 || equip.MagicIncrease == 0 || initPassive.StrengthModifier == 0 || initPassive.MagicModifier == 0 ? .75f : 2f);

                        equip.StrengthInitial  = (short)(avgInit * strMult);
                        equip.StrengthIncrease = (ushort)(avgInc * Math.Pow(strMult, 0.75f));
                        equip.MagicInitial     = (short)(avgInit * magMult);
                        equip.MagicIncrease    = (ushort)(avgInc * Math.Pow(magMult, 0.75f));

                        if (equips[i].UpgradeInto == "")
                        {
                            if (initPassiveSet.LockingLevel > LockingLevel.Fixed && !plandoPassives.ContainsKey(i))
                            {
                                sets[curChar].RemoveAt(0);
                            }
                        }
                    }

                    if (plandoStats.ContainsKey(i))
                    {
                        if (plandoStats[i].Item1[0] != -1)
                        {
                            equip.StrengthInitial = (short)plandoStats[i].Item1[0];
                        }
                        if (plandoStats[i].Item2[0] != -1)
                        {
                            equip.StrengthIncrease = (ushort)plandoStats[i].Item2[0];
                        }
                        if (plandoStats[i].Item1[1] != -1)
                        {
                            equip.MagicInitial = (short)plandoStats[i].Item1[1];
                        }
                        if (plandoStats[i].Item2[1] != -1)
                        {
                            equip.MagicIncrease = (ushort)plandoStats[i].Item2[1];
                        }
                        if (plandoStats[i].Item1[2] != -1)
                        {
                            equip.StatInitial = (short)plandoStats[i].Item1[2];
                        }
                        if (plandoStats[i].Item2[2] != -1)
                        {
                            equip.StatIncrease = (ushort)plandoStats[i].Item2[2];
                        }
                    }
                });
                RandomNum.ClearRand();
            }
        }
Beispiel #35
0
 public SariusVizierOfSuppression() : base("Sarius, Vizier of Suppression", 2, Civilization.Light, 3000, Subtype.Initiate)
 {
     Abilities.Add(new BlockerAbility());
     Abilities.Add(new CannotAttackPlayersAbility());
 }
Beispiel #36
0
        public void Initialize()
        {
            // Initialize properties that are normally only updated on property changed
            RefreshMovementTypes();
            RefreshMapPoint();


            if (this.UnitFaction == Faction.PlayerFaction)
            {
                var stompDamageEffectParameters = new DamageEffectParameters();
                stompDamageEffectParameters.SizeBiggerDamageMultiplier  = 1.5f;
                stompDamageEffectParameters.SizeSmallerDamageMultiplier = 0.8f;
                stompDamageEffectParameters.DamagePairs = new[] { new DamageEffectPairParameter {
                                                                      OffensiveAttribute = UnitAttribute.Physical, OffensiveAttributeMultiplier = 1, DefensiveAttribute = UnitAttribute.Defense, DefensiveAttributeMultiplier = 1
                                                                  } };
                stompDamageEffectParameters.TileDamage = 1;

                var abilityDataStomp = new AbilityData()
                {
                    IDName                   = "STOMP",
                    FriendlyName             = "Stomp",
                    FriendlyDescription      = "Deal extra damage to smaller units",
                    AbilityCategory          = AbilityCategory.Attack,
                    WeaponCategory           = WeaponAdvantageCategory.Physical,
                    RangeDistanceRule        = AbilityRangeDistanceRule.SizeRangeSmall,
                    RangeSpecialRule         = AbilityRangeSpecialRule.None,
                    MinRange                 = 1,
                    MaxRange                 = 1,
                    ActionConsumption        = AbilityActionConsumption.MajorAction,
                    MinorActionConsumptionID = String.Empty,
                    HPCost                   = 0,
                    SPCost                   = 0,
                    DurabilityCost           = 0,
                    Accuracy                 = 90,
                    RepeatCount              = 2,
                    TargetRule               = AbilityTargetRule.EnemiesOnly,
                    AreaPoints               = new[] { new MapPoint(0, 0, 1, 1) },
                    AbilityEffects           = new[] { new DamageEffect(stompDamageEffectParameters) },
                    CanBeCountered           = true,
                    CanCounterAttack         = true,
                };
                var abilityStomp = new Ability(this, abilityDataStomp);
                Abilities.Add(abilityStomp);


                var kickDamageEffectParameters = new DamageEffectParameters();
                kickDamageEffectParameters.SizeBiggerDamageMultiplier  = 0.8f;
                kickDamageEffectParameters.SizeSmallerDamageMultiplier = 1.5f;
                kickDamageEffectParameters.DamagePairs = new[] { new DamageEffectPairParameter {
                                                                     OffensiveAttribute = UnitAttribute.Physical, OffensiveAttributeMultiplier = 1, DefensiveAttribute = UnitAttribute.Defense, DefensiveAttributeMultiplier = 1
                                                                 } };
                kickDamageEffectParameters.TileDamage = 1;

                var abilityDataKick = new AbilityData()
                {
                    IDName                   = "KICK",
                    FriendlyName             = "Kick",
                    FriendlyDescription      = "Deal extra damage to larger units",
                    AbilityCategory          = AbilityCategory.Attack,
                    WeaponCategory           = WeaponAdvantageCategory.Physical,
                    RangeDistanceRule        = AbilityRangeDistanceRule.SizeRangeSmall,
                    RangeSpecialRule         = AbilityRangeSpecialRule.None,
                    MinRange                 = 1,
                    MaxRange                 = 1,
                    ActionConsumption        = AbilityActionConsumption.MajorAction,
                    MinorActionConsumptionID = String.Empty,
                    HPCost                   = 0,
                    SPCost                   = 0,
                    DurabilityCost           = 0,
                    Accuracy                 = 90,
                    RepeatCount              = 2,
                    TargetRule               = AbilityTargetRule.EnemiesOnly,
                    AreaPoints               = new[] { new MapPoint(0, 0, 1, 1) },
                    AbilityEffects           = new[] { new DamageEffect(kickDamageEffectParameters) },
                    CanBeCountered           = true,
                    CanCounterAttack         = true,
                };
                var abilityKick = new Ability(this, abilityDataKick);
                Abilities.Add(abilityKick);


                var rapidJabDamageEffectParameters = new DamageEffectParameters();
                rapidJabDamageEffectParameters.DamagePairs = new[] { new DamageEffectPairParameter {
                                                                         OffensiveAttribute = UnitAttribute.Physical, OffensiveAttributeMultiplier = 1.4f, DefensiveAttribute = UnitAttribute.Defense, DefensiveAttributeMultiplier = 1
                                                                     } };
                rapidJabDamageEffectParameters.TileDamage = 1;

                var abilityDataRapidJab = new AbilityData()
                {
                    IDName                   = "SCHOOL_RapidJab",
                    FriendlyName             = "Rapid Jab",
                    FriendlyDescription      = "Attack multiple times",
                    AbilityCategory          = AbilityCategory.Special,
                    WeaponCategory           = WeaponAdvantageCategory.Physical,
                    RangeDistanceRule        = AbilityRangeDistanceRule.SizeRangeSmall,
                    RangeSpecialRule         = AbilityRangeSpecialRule.None,
                    MinRange                 = 1,
                    MaxRange                 = 1,
                    ActionConsumption        = AbilityActionConsumption.MajorAction,
                    MinorActionConsumptionID = String.Empty,
                    HPCost                   = 0,
                    SPCost                   = 3,
                    DurabilityCost           = 0,
                    Accuracy                 = 80,
                    RepeatCount              = 4,
                    RepeatThreshold          = 3,
                    TargetRule               = AbilityTargetRule.EnemiesOnly,
                    AreaPoints               = new[] { new MapPoint(0, 0, 1, 1) },
                    AbilityEffects           = new[] { new DamageEffect(rapidJabDamageEffectParameters) },
                    CanBeCountered           = true,
                    CanCounterAttack         = false,
                };
                var abilityRapidJab = new Ability(this, abilityDataRapidJab);
                Abilities.Add(abilityRapidJab);



                var RoudnhouseDamageEffectParameters = new DamageEffectParameters();
                RoudnhouseDamageEffectParameters.DamagePairs = new[] { new DamageEffectPairParameter {
                                                                           OffensiveAttribute = UnitAttribute.Physical, OffensiveAttributeMultiplier = 1.5f, DefensiveAttribute = UnitAttribute.Defense, DefensiveAttributeMultiplier = 1
                                                                       } };
                RoudnhouseDamageEffectParameters.TileDamage = 1;

                var abilityDataRoundhouse = new AbilityData()
                {
                    IDName                   = "SCHOOL_Roundhouse",
                    FriendlyName             = "Roundhouse",
                    FriendlyDescription      = "Hit all enemies around user",
                    AbilityCategory          = AbilityCategory.Special,
                    WeaponCategory           = WeaponAdvantageCategory.Physical,
                    RangeDistanceRule        = AbilityRangeDistanceRule.SizeRangeSmall,
                    RangeSpecialRule         = AbilityRangeSpecialRule.Directional,
                    MinRange                 = 1,
                    MaxRange                 = 1,
                    ActionConsumption        = AbilityActionConsumption.MajorAction,
                    MinorActionConsumptionID = String.Empty,
                    HPCost                   = 0,
                    SPCost                   = 2,
                    DurabilityCost           = 0,
                    RepeatCount              = 1,
                    Accuracy                 = 95,
                    TargetRule               = AbilityTargetRule.EnemiesOnly,
                    AreaPoints               = new[] { new MapPoint(-1, 0, 3, 1), new MapPoint(0, -1, 1, 3) },
                    AbilityEffects           = new[] { new DamageEffect(RoudnhouseDamageEffectParameters) },
                    CanBeCountered           = true,
                    CanCounterAttack         = false,
                };
                var abilityRoundhouse = new Ability(this, abilityDataRoundhouse);
                Abilities.Add(abilityRoundhouse);



                var danceAbilityEffect = new RefreshActionEffect();

                var abilityDataDance = new AbilityData()
                {
                    IDName                   = "DANCER_Dance",
                    FriendlyName             = "Dance",
                    FriendlyDescription      = "Grant an ally another action",
                    AbilityCategory          = AbilityCategory.Special,
                    WeaponCategory           = WeaponAdvantageCategory.None,
                    RangeDistanceRule        = AbilityRangeDistanceRule.SizeRangeSmall,
                    RangeSpecialRule         = AbilityRangeSpecialRule.None,
                    MinRange                 = 1,
                    MaxRange                 = 3,
                    ActionConsumption        = AbilityActionConsumption.MajorAction,
                    MinorActionConsumptionID = String.Empty,
                    HPCost                   = 0,
                    SPCost                   = 2,
                    DurabilityCost           = 0,
                    Accuracy                 = 100,
                    SkipAccuracyCheck        = true,
                    TargetRule               = AbilityTargetRule.AlliesOnly,
                    AreaPoints               = new[] { new MapPoint(0, 0, 1, 1) },
                    AbilityEffects           = new[] { danceAbilityEffect },
                    CanBeCountered           = false,
                    CanCounterAttack         = false,
                };
                var abilityDance = new Ability(this, abilityDataDance);
                Abilities.Add(abilityDance);
            }
            else
            {
                var cannonFireDamageEffectParameters = new DamageEffectParameters();
                cannonFireDamageEffectParameters.DamagePairs = new[] { new DamageEffectPairParameter {
                                                                           OffensiveAttribute = UnitAttribute.Physical, OffensiveAttributeMultiplier = 1, DefensiveAttribute = UnitAttribute.Defense, DefensiveAttributeMultiplier = 1
                                                                       } };

                var abilityDataTankShot = new AbilityData()
                {
                    IDName                   = "TANK_SHOT",
                    FriendlyName             = "Cannon Fire",
                    FriendlyDescription      = "Not canon fire",
                    AbilityCategory          = AbilityCategory.Attack,
                    WeaponCategory           = WeaponAdvantageCategory.Weapon,
                    RangeDistanceRule        = AbilityRangeDistanceRule.Basic,
                    RangeSpecialRule         = AbilityRangeSpecialRule.None,
                    MinRange                 = 1,
                    MaxRange                 = 3,
                    ActionConsumption        = AbilityActionConsumption.MajorAction,
                    MinorActionConsumptionID = String.Empty,
                    HPCost                   = 0,
                    SPCost                   = 0,
                    DurabilityCost           = 0,
                    RepeatCount              = 2,
                    Accuracy                 = 90,
                    TargetRule               = AbilityTargetRule.EnemiesOnly,
                    AreaPoints               = new[] { new MapPoint(0, 0, 1, 1) },
                    AbilityEffects           = new[] { new DamageEffect(cannonFireDamageEffectParameters) },
                    CanBeCountered           = true,
                    CanCounterAttack         = true,
                };
                var abilityTankShot = new Ability(this, abilityDataTankShot);
                Abilities.Add(abilityTankShot);
            }
        }
 public static string AbilityModStringGet(this ClassModel cls, Abilities ability)
 {
     return cls.AbilityModifierGet(ability).AbilityModStringGet();
 }
 public void RemoveAbilities(Abilities abilities)
 {
     masterAbilities.movePoints -= abilities.movePoints;
     masterAbilities.jumpPoints -= abilities.jumpPoints;
 }
Beispiel #39
0
    // Get name of local player
    public override void OnStartLocalPlayer()
    {
        Debug.Log("Adding player object");
        isLocal = isLocalPlayer;
        Debug.Log("In player player name is " + PlayerPrefs.GetString("Player Name"));
        CmdChangeName(PlayerPrefs.GetString("Player Name"));
        Debug.Log("Player object Name is " + Name);
        CmdChangeColor((LobbyManager.singleton as LobbyManager).PlayerColor); // set local player color saved in lobby manager
        Debug.Log(isClient +  " Setting player color" + Color);

        // Initialize abilities for local player
        PAbilities = Abilities.EmptyAbilities;

        // Set local player object on ability selection controller
        GameObject.Find("AbilitySelectionController").GetComponent<AbilitySelectionController>().player = this;
        Debug.Log("Finding ability selection controller null?" + (GameObject.Find("AbilitySelectionController").GetComponent<AbilitySelectionController>() == null));

    }
	void Start () {
		s = this;
		gotAbilities = false;
		activateAbilities = false;
		fpc = GetComponent<FirstPersonController>();
	}
 private async Task<bool> CastAura(Abilities spellId, Auras auraId = Auras.None)
 {
     return await CastAura((uint)spellId, (int)auraId);
 }
Beispiel #42
0
 public AquaSniper() : base("Aqua Sniper", 8, Civilization.Water, 5000, Subtype.LiquidPeople)
 {
     Abilities.Add(new WhenYouPutThisCreatureIntoTheBattleZoneAbility(new AquaSurferResolvable(2)));
 }
Beispiel #43
0
 public void ProcessTurnEnd()
 {
     Abilities.ForEach(x => x.ProcessTurnEnd());
 }
        public static void Game_OnUpdate(EventArgs args)
        {
            if (!IsEnable)
            {
                return;
            }
            if (!Members.MyHero.IsAlive)
            {
                return;
            }
            //CalculateDamage();
            if (_attacker == null)
            {
                _attacker = new Sleeper();
            }
            if (_spellSleeper == null)
            {
                _spellSleeper = new MultiSleeper();
            }
            if (_ethereal == null)
            {
                _ethereal = new Sleeper();
            }
            var laser   = Abilities.FindAbility("tinker_laser");
            var rockets = Abilities.FindAbility("tinker_heat_seeking_missile");

            if (_spellSleeper.Sleeping(Abilities.FindAbility("tinker_rearm")))
            {
                return;
            }
            if (IsEnableKillSteal && !IsComboHero)
            {
                foreach (var x in Heroes.GetByTeam(Members.MyHero.GetEnemyTeam())
                         .Where(x => x.IsAlive && x.IsVisible && !x.IsIllusion() && !x.IsMagicImmune())
                         .Where(x => Helper.CalculateMyCurrentDamage(x, true) < 0))
                {
                    CastCombo(x, laser, rockets, true);
                }
            }

            if (!IsComboHero)
            {
                if (_globalTarget != null)
                {
                    Helper.UnHandleEffect(_globalTarget);
                }
                _globalTarget = null;
                return;
            }
            if (_globalTarget == null || !_globalTarget.IsValid)
            {
                _globalTarget = Helper.ClosestToMouse(Members.MyHero);
                return;
            }
            Helper.HandleEffect(_globalTarget);
            if (Members.MyHero.IsChanneling() || _globalTarget.Distance2D(Members.MyHero) > 2500)
            {
                return;
            }
            if (AutoAttack)
            {
                if (UseOrbWalkker)
                {
                    Orbwalking.Orbwalk(_globalTarget, followTarget: true);
                }
                else if (!Members.MyHero.IsAttacking() && !_attacker.Sleeping && !_globalTarget.IsAttackImmune())
                {
                    Members.MyHero.Attack(_globalTarget);
                    _attacker.Sleep(250);
                }
            }
            CastCombo(_globalTarget, laser, rockets);
        }
Beispiel #45
0
 public Ability(Ability master, int CognitionValue)
 {
     Name   = master.Name;
     Value  = master.Value;
     Weight = FindWeight(CognitionValue);
 }
Beispiel #46
0
        internal override void RecreateAbilities()
        {
            base.RecreateAbilities();

            //Check for buff Archon -- and if we should add Cancel to abilities.
            if (Abilities.ContainsKey(SNOPower.Wizard_Archon_ArcaneBlast) || Abilities.ContainsKey(SNOPower.Wizard_Archon_ArcaneBlast_Fire) || Abilities.ContainsKey(SNOPower.Wizard_Archon_ArcaneBlast_Cold) || Abilities.ContainsKey(SNOPower.Wizard_Archon_ArcaneBlast_Lightning))
            {
                Abilities.Add(SNOPower.Wizard_Archon_Cancel, new CancelArchonBuff());
            }
        }
Beispiel #47
0
 public Skill(string baseKey, string baseName, Abilities ability, bool canUseUntrained)
     : this(baseKey, baseName, string.Empty, ability, canUseUntrained)
 {
 }
Beispiel #48
0
 private void ModuleClosed()
 {
     Abilities.Clear();
 }
Beispiel #49
0
		public static Sprite getIconGrey(Abilities.AbilityType type, bool highres)
		{
			switch(type)
			{
				case Abilities.AbilityType.halfRoundTurn:
					if(highres)
						return abil_180x80_grey;
					return abil_180x70_grey;
					
				case Abilities.AbilityType.doubleThrottle:
					if(highres)
						return abil_double_throttlex80_grey;
					return abil_double_throttlex70_grey;
					
				case Abilities.AbilityType.gas:
					if(highres)
						return abil_gasx80_grey;
					return abil_gasx70_grey;
					
				case Abilities.AbilityType.homingMissle:
					if(highres)
						return abil_rocketx80_grey;
					return abil_rocketx70_grey;
					
				case Abilities.AbilityType.homingThorpede:
					if(highres)
						return abil_thorpedex80_grey;
					return abil_thorpedex70_grey;
					
				case Abilities.AbilityType.mines:
					if(highres)
						return abil_minesx80_grey;
					return abil_minesx70_grey;
					
				case Abilities.AbilityType.none:
					if(highres)
						return abil_commonx80_grey;
					return abil_commonx70_grey;
					
				case Abilities.AbilityType.shield:
					if(highres)
						return abil_shieldx80_grey;
					return abil_shieldx70_grey;
					
				case Abilities.AbilityType.turnAround:
					if(highres)
						return abil_360x80_grey;
					return abil_360x70_grey;
					
				default:
					return null;
			}
		}
Beispiel #50
0
        private static void DoSpiritsAim()
        {
            if (_globalTarget != null && _globalTarget.IsValid && _globalTarget.IsAlive)
            {
                _globalTarget2 = _globalTarget;
            }
            else
            {
                if (!IsComboAim)
                {
                    _globalTarget2 = null;
                    return;
                }
                if (_globalTarget2 == null || !_globalTarget2.IsValid || !_globalTarget2.IsAlive)
                {
                    _globalTarget2 = Helper.ClosestToMouse(Members.MyHero);
                    return;
                }
            }
            _trackList = _trackList.Where(x => !x.Ef.IsDestroyed).ToList();
            var wispList = _trackList;//ObjectManager.GetEntities<Unit>().Where(x => x.ClassId == ClassId.CDOTA_Wisp_Spirit && x.Team==Members.MyHero.Team && x.IsAlive).ToList();

            if (!wispList.Any())
            {
                return;
            }
            var spellIn  = Abilities.FindAbility("wisp_spirits_in");
            var spellOut = Abilities.FindAbility("wisp_spirits_out");

            //var spirits = Abilities.FindAbility("wisp_spirits");
            if (spellIn.IsHidden || spellOut.IsHidden)
            {
                return;
            }
            var firstWisp = wispList.First();

            /*Printer.Print($"----{wispList.Count}--------");
             * foreach (var unit in wispList)
             * {
             *  Printer.Print($"{unit.Health}/{unit.IsAlive}/{unit.UnitState}/{unit.Modifiers.Any()}");
             *  var str=new StringBuilder();
             *  foreach (var modifier in unit.Modifiers)
             *  {
             *      str.Append("/" + modifier.Name);
             *  }
             *  Printer.Print(str.ToString());
             * }*/

            var distanceWithWisp   = firstWisp.V.Distance2D(Members.MyHero);
            var distanceWithTarget = Members.MyHero.Distance2D(_globalTarget2);

            if (Math.Abs(distanceWithWisp - distanceWithTarget) <= 50)
            {
                if (!_multiSleeper.Sleeping("off") && (spellIn.IsToggled || spellOut.IsToggled))
                {
                    if (spellIn.IsToggled)
                    {
                        spellIn.ToggleAbility();
                    }
                    else
                    {
                        spellOut.ToggleAbility();
                    }
                    _multiSleeper.Sleep(250, "off");
                    _multiSleeper.Sleep(250, spellIn);
                    _multiSleeper.Sleep(250, spellOut);
                    return;
                }
            }
            if (distanceWithWisp > distanceWithTarget)
            {
                if (!_multiSleeper.Sleeping(spellIn) && !spellIn.IsToggled)
                {
                    spellIn.ToggleAbility();
                    //Printer.Print("spellIn");
                    _multiSleeper.Sleep(250, spellIn);
                }
            }
            else
            {
                if (!_multiSleeper.Sleeping(spellOut) && !spellOut.IsToggled)
                {
                    spellOut.ToggleAbility();
                    //Printer.Print("spellOut");
                    _multiSleeper.Sleep(250, spellOut);
                }
            }
        }
Beispiel #51
0
 public static int GetSkillBonus(this Skill skill, Abilities abilities, int otherBonuses)
 {
     return skill.Rank + abilities[skill.Ability].GetModifier() + otherBonuses;
 }
Beispiel #52
0
 void AddStuffToChief(Chief leader, string Name, string Surname, Trait trait, Abilities one, Abilities two, Abilities three,int atk, int def,int inte,int spd)
 {
     leader.SetName(Name);
     leader.SetSurname(Surname);
     leader.SetTrait(trait);
     leader.SetAbilityOne(one);
     leader.SetAbilityTwo(two);
     leader.SetAbilityThree(three);
     leader.SetAttack(atk);
     leader.SetDefense(def);
     leader.SetIntelligence(inte);
     leader.SetSpeed(spd);
 }
Beispiel #53
0
        private static void DoCombo()
        {
            if (!IsComboHero)
            {
                _globalTarget = null;
                return;
            }
            if (_globalTarget == null || !_globalTarget.IsValid || !_globalTarget.IsAlive)
            {
                _globalTarget = Helper.ClosestToMouse(Members.MyHero);
                return;
            }
            if (UseOrbWalkker)
            {
                Orbwalking.Orbwalk(_globalTarget, followTarget: true);
            }
            else if (!Members.MyHero.IsAttacking() && !_attacker.Sleeping)
            {
                Members.MyHero.Attack(_globalTarget);
                _attacker.Sleep(250);
            }

            var inventory =
                Members.MyHero.Inventory.Items.Where(
                    x =>
                    Helper.IsItemEnable(x.StoredName()) && x.CanBeCasted() &&
                    (x.GetCastRange() > 0 && x.CanHit(_globalTarget) ||
                     (x.GetCastRange() <= 0)) && Utils.SleepCheck($"{x.Handle}+item_usages"))
                .ToList();

            foreach (var item in inventory)
            {
                if (item.IsAbilityBehavior(AbilityBehavior.NoTarget))
                {
                    item.UseAbility();
                }
                else if (item.IsAbilityBehavior(AbilityBehavior.UnitTarget))
                {
                    if (item.TargetTeamType == TargetTeamType.Enemy || item.TargetTeamType == TargetTeamType.All ||
                        item.TargetTeamType == TargetTeamType.Custom)
                    {
                        item.UseAbility(_globalTarget);
                    }
                    else
                    {
                        item.UseAbility(Members.MyHero);
                    }
                }
                else
                {
                    item.UseAbility(_globalTarget.NetworkPosition);
                }
                Utils.Sleep(250, $"{item.Handle}+item_usages");
            }

            if (TetherInCombo)
            {
                var tether = Abilities.FindAbility("wisp_tether");
                if (tether == null || tether.Level == 0 || !tether.CanBeCasted() || tether.IsHidden)
                {
                    return;
                }
                var anyAllyHero =
                    Heroes.GetByTeam(Members.MyTeam)
                    .Where(x => !x.Equals(Members.MyHero) && x.IsAlive && tether.CanHit(x))
                    .OrderBy(y => y.Distance2D(_globalTarget));
                var anyAllyCreep =
                    ObjectManager.GetEntities <Unit>()
                    .Where(x => x != null && x.Team == Members.MyTeam && x.IsAlive && tether.CanHit(x))
                    .OrderBy(y => y.Distance2D(_globalTarget));

                var hero = anyAllyHero.FirstOrDefault();

                var creep = anyAllyCreep.FirstOrDefault();

                float dist1 = 0, dist2 = 0;
                if (hero != null)
                {
                    dist1 = hero.Distance2D(_globalTarget);
                }
                if (creep != null)
                {
                    dist2 = creep.Distance2D(_globalTarget);
                }
                var targetForTether = (dist1 > dist2) ? creep : hero;
                var mydist          = Members.MyHero.Distance2D(_globalTarget);
                if (targetForTether != null && !targetForTether.Equals(Members.MyHero) && dist1 <= mydist &&
                    dist2 <= mydist && !_multiSleeper.Sleeping(tether + "in combo"))
                {
                    tether.UseAbility(targetForTether);
                    _multiSleeper.Sleep(250, tether + "in combo");
                }
            }
        }
Beispiel #54
0
    public LocalObject(LocalShape localShape, string _uniqueName = "", Inventory _inventory = null)
    {
        uniqueName = _uniqueName;
        shape = new ShapeComponent(localShape, this);

        if (localShape.type == LocalType.Get("Destructible") || localShape.type == LocalType.Get("Container"))
        {
            hp = new HPComponent(this);
        }
        else if (localShape.type == LocalType.Get("Creature"))
        {
            hp = new HPComponent(this);
            movement = new Movement(this);
            defence = new Defence(this);
            attack = new Attack(this);
            abilities = new Abilities(this);
            fatigue = new Fatigue(this);
            eating = new Eating(this);
        }

        if (_inventory != null)
        {
            inventory = new Inventory(6, 1, "", false, null, this);
            _inventory.CopyTo(inventory);
        }
    }
Beispiel #55
0
    public LocalObject(string _uniqueName, Race _race, CharacterClass _cclass, Background _background, Origin _origin, int experience)
    {
        uniqueName = _uniqueName;
        race = _race;
        cclass = _cclass;
        background = _background;
        origin = _origin;

        xp = new Experience(experience, this);

        skills = new Skills(this);
        inventory = new Inventory(6, 1, "", true, null, this);

        hp = new HPComponent(this);
        movement = new Movement(this);
        defence = new Defence(this);
        attack = new Attack(this);
        abilities = new Abilities(this);
        fatigue = new Fatigue(this);
        eating = new Eating(this);
    }
Beispiel #56
0
 public Locomotiver() : base("Locomotiver", 4, Civilization.Darkness, 1000, Subtype.Hedrian)
 {
     ShieldTrigger = true;
     Abilities.Add(new WhenYouPutThisCreatureIntoTheBattleZoneAbility(new OpponentRandomDiscardResolvable()));
 }
Beispiel #57
0
        /// <summary>
        ///     Returns actual damage the unit takes
        /// </summary>
        /// <param name="target">
        ///     damaged unit
        /// </param>
        /// <param name="dmg">
        ///     amount of damage
        /// </param>
        /// <param name="dmgType">
        ///     Type of damage (Magical/Physical/Pure/Health removal)
        /// </param>
        /// <param name="source">
        ///     source of the damage
        /// </param>
        /// <param name="throughBKB">
        ///     true if the damage pierces magic immunity
        /// </param>
        /// <param name="minusArmor">
        ///     The minus Armor.
        /// </param>
        /// <param name="minusDamageResistancePerc">
        ///     The minus Damage Resistance Perc.
        /// </param>
        /// <param name="minusMagicResistancePerc">
        ///     The minus Magic Resistance Perc.
        /// </param>
        /// <returns>
        ///     The <see cref="float" />.
        /// </returns>
        public static float DamageTaken(
            this Unit target,
            float dmg,
            DamageType dmgType,
            Unit source,
            bool throughBKB   = false,
            double minusArmor = 0d,
            double minusDamageResistancePerc = 0d,
            double minusMagicResistancePerc  = 0d)
        {
            if (target.IsInvul())
            {
                return(0);
            }

            var tempDmg               = Math.Floor(dmg);
            var amp                   = 0d;
            var ampFromMe             = 0d;
            var reduceProc            = 0d;
            var reduceOther           = 0d;
            var reduceStatic          = 0d;
            var reduceBlock           = 0d;
            var manaShield            = 0d;
            var magOnly               = 0d;
            var aa                    = 0d;
            var modifiers             = target.Modifiers.ToList();
            var bristleback           = false;
            var centaurStampede       = false;
            var medusaManaShield      = false;
            var undyingFleshGolem     = false;
            var abaddonRedirect       = false;
            var kunkkaGhostShipAbsorb = false;
            var iceBlast              = false;

            if (dmgType == DamageType.Physical && target.IsAttackImmune())
            {
                return(0);
            }

            if ((dmgType == DamageType.Magical || dmgType == DamageType.Pure) && !throughBKB && target.IsMagicImmune())
            {
                return(0);
            }

            var damageBlockid       = target.Handle + 1;
            var damageBlockSleeping = modifierSleeper.Sleeping(damageBlockid);

            if (damageBlockSleeping)
            {
                reduceBlock = doubleDictionary[damageBlockid];
            }

            foreach (var modifier in modifiers)
            {
                var name = modifier.Name;

                if (!damageBlockSleeping && dmgType == DamageType.Physical)
                {
                    foreach (var damageBlock in DamageBlocksList)
                    {
                        if (damageBlock.ModifierName != name)
                        {
                            continue;
                        }

                        Ability ability = null;
                        foreach (var hero in Heroes.All)
                        {
                            if (!damageBlock.Item)
                            {
                                ability = hero.FindSpell(damageBlock.AbilityName, true);
                                if (ability != null)
                                {
                                    break;
                                }
                            }

                            ability = hero.FindItem(damageBlock.AbilityName, true);
                            if (ability != null)
                            {
                                break;
                            }
                        }

                        if (ability == null)
                        {
                            continue;
                        }

                        reduceBlock =
                            ability.GetAbilityData(target.IsRanged ? damageBlock.RangedBlock : damageBlock.MeleeBlock);
                        doubleDictionary[damageBlockid] = reduceBlock;
                        modifierSleeper.Sleep(50, damageBlockid);
                        break;
                    }
                }

                switch (name)
                {
                case "modifier_winter_wyvern_cold_embrace":
                    if (dmgType == DamageType.Physical)
                    {
                        return(0);
                    }

                    break;

                case "modifier_omninight_guardian_angel":
                    if (dmgType == DamageType.Physical)
                    {
                        return(0);
                    }

                    break;

                case "modifier_abaddon_borrowed_time":
                    return(0);

                case "modifier_bristleback_bristleback":
                    bristleback = true;
                    break;

                case "modifier_centaur_stampede":
                    centaurStampede = true;
                    break;

                case "modifier_medusa_mana_shield":
                    medusaManaShield = true;
                    break;

                case "modifier_undying_flesh_golem_plague_aura":
                    undyingFleshGolem = true;
                    break;

                case "modifier_abaddon_borrowed_time_damage_redirect":
                    abaddonRedirect = true;
                    break;

                case "modifier_kunkka_ghost_ship_damage_absorb":
                    kunkkaGhostShipAbsorb = true;
                    break;

                case "modifier_ice_blast":
                    iceBlast = true;
                    break;
                }
            }

            var ampId       = target.Handle + 2;
            var ampSleeping = modifierSleeper.Sleeping(ampId);

            if (ampSleeping)
            {
                amp = doubleDictionary[ampId];
            }
            else
            {
                foreach (var v in ExternalDmgAmps)
                {
                    if (modifiers.All(modifier => modifier.Name != v.ModifierName))
                    {
                        continue;
                    }

                    Ability ability = null;
                    foreach (var hero in Heroes.All)
                    {
                        if (v.HeroId == hero.HeroId || hero.HeroId == HeroId.npc_dota_hero_rubick)
                        {
                            ability = hero.FindSpell(v.SourceSpellName, true);
                            if (ability != null)
                            {
                                break;
                            }
                        }

                        ability = hero.FindItem(v.SourceSpellName, true);
                        if (ability != null)
                        {
                            break;
                        }
                    }

                    // var burst = 0f;
                    if (ability == null)
                    {
                        continue;
                    }

                    var owner = ability.Owner;
                    var level = ability.Level;

                    var burst = ability.GetAbilityData(v.Amp) / 100;
                    if (v.SourceTeam == -1 && owner.Team != target.Team)
                    {
                        amp += burst;
                    }
                    else if (v.SourceTeam == -2)
                    {
                        if (target.Distance2D(source) < 2200)
                        {
                            amp += burst;
                        }
                        else
                        {
                            amp += burst / 2;
                        }
                    }
                    else
                    {
                        amp += burst;
                    }
                }
            }

            if (!ampSleeping)
            {
                doubleDictionary[ampId] = amp;
                modifierSleeper.Sleep(50, ampId);
            }

            foreach (var v in ExternalDmgReductions)
            {
                var id       = target.Handle + v.ModifierName;
                var sleeping = modifierSleeper.Sleeping(id);
                if (sleeping && !modifierDictionary[id] || !sleeping && modifiers.All(x => x.Name != v.ModifierName))
                {
                    if (!sleeping)
                    {
                        modifierDictionary[id] = false;
                        modifierSleeper.Sleep(50, id);
                    }

                    continue;
                }

                if (!sleeping)
                {
                    modifierDictionary[id] = true;
                    modifierSleeper.Sleep(50, id);
                }

                Ability ability = null;
                foreach (var hero in Heroes.All)
                {
                    if (v.HeroID == hero.HeroId || hero.HeroId == HeroId.npc_dota_hero_rubick)
                    {
                        ability = hero.FindSpell(v.SourceSpellName, true);
                        if (ability != null)
                        {
                            break;
                        }
                    }

                    ability = hero.FindItem(v.SourceSpellName, true);
                    if (ability != null)
                    {
                        break;
                    }
                }

                // var burst = 0f;
                if (ability == null)
                {
                    continue;
                }

                var owner = ability.Owner;
                var level = ability.Level;

                var burst = Math.Abs(ability.GetAbilityData(v.Reduce) / 100);
                if (ability.StoredName() == "wisp_overcharge")
                {
                    burst = (float)new[] { 0.05, 0.10, 0.15, 0.20 }[level - 1];
                }

                if (ability.StoredName() == "templar_assassin_refraction")
                {
                    burst = 1;
                }

                if (v.Type == 1)
                {
                    if (v.SourceTeam == 1 && owner.Team == target.Team)
                    {
                        if (burst > 1)
                        {
                            reduceBlock += burst;
                        }
                        else
                        {
                            reduceProc += burst;
                        }
                    }
                    else if (v.SourceTeam == 0)
                    {
                        if (burst > 1)
                        {
                            reduceBlock += burst;
                        }
                        else
                        {
                            reduceProc += burst;
                        }
                    }
                }
                else if (v.Type == 2)
                {
                    if (v.SourceTeam == 1 && owner.Team == target.Team)
                    {
                        reduceBlock += burst * 100;
                    }
                    else if (v.SourceTeam == 0)
                    {
                        reduceBlock += burst * 100;
                    }
                }
                else if (!v.MagicOnly || dmgType == DamageType.Magical)
                {
                    if (v.SourceTeam == 1 && owner.Team == target.Team)
                    {
                        if (!v.MagicOnly)
                        {
                            reduceStatic += burst;
                        }
                        else
                        {
                            magOnly += burst;
                        }
                    }
                    else if (v.SourceTeam == 0)
                    {
                        if (!v.MagicOnly)
                        {
                            reduceStatic += burst;
                        }
                        else
                        {
                            magOnly += burst;
                        }
                    }
                }
                else
                {
                    reduceStatic += burst;
                }
            }

            if (bristleback)
            {
                var spell = target.FindSpell("bristleback_bristleback", true);
                if (spell != null)
                {
                    var burst = 0d;
                    var angle = target.FindRelativeAngle(source.Position) % (2 * Math.PI * 180) / Math.PI;
                    if (angle >= 110 && angle <= 250)
                    {
                        burst = (1 + spell.Level) * 0.08;
                    }
                    else if (angle >= 70 && angle <= 290)
                    {
                        burst = (1 + spell.Level) * 0.04;
                    }

                    reduceProc += burst;
                }
            }

            if (centaurStampede)
            {
                foreach (var x in Heroes.All)
                {
                    if (
                        !(x.IsValid && !x.IsIllusion() &&
                          (x.HeroId == HeroId.npc_dota_hero_centaur ||
                           x.HeroId == HeroId.npc_dota_hero_rubick) && x.AghanimState()))
                    {
                        continue;
                    }

                    reduceProc = reduceProc + 0.6;
                }
            }

            if (undyingFleshGolem)
            {
                var spell = Abilities.FindAbility("undying_flesh_golem");
                if (spell != null)
                {
                    var baseAmp = .05 * spell.Level;
                    var owner   = spell.Owner as Hero;

                    var distance = target.Distance2D(owner);
                    if (distance <= 200)
                    {
                        amp += baseAmp + 0.15;
                    }
                    else if (distance > 750)
                    {
                        amp += baseAmp;
                    }
                    else
                    {
                        amp += baseAmp + (750 - distance) * 0.03 / 110;
                    }
                }
            }

            if (abaddonRedirect)
            {
                reduceOther += 0.5;
            }
            else if (kunkkaGhostShipAbsorb)
            {
                var spell = Abilities.FindAbility("kunkka_ghostship");
                if (spell != null)
                {
                    reduceOther += spell.GetAbilityData("ghostship_absorb") / 100;
                }
            }

            var sourceModifiers      = source.Modifiers.ToList();
            var bloodseekerBloodrage = false;
            var silverEdge           = false;

            foreach (var modifier in sourceModifiers)
            {
                var name = modifier.Name;
                if (name == "modifier_bloodseeker_bloodrage")
                {
                    bloodseekerBloodrage = true;
                }
                else if (name == "modifier_silver_edge_debuff")
                {
                    silverEdge = true;
                }
            }

            if (bloodseekerBloodrage)
            {
                var spell = Abilities.FindAbility("bloodseeker_bloodrage");
                if (spell != null)
                {
                    var bloodrage = spell.GetAbilityData("damage_increase_pct") / 100;
                    if (target.Distance2D(source) > 2200)
                    {
                        bloodrage /= 2;
                    }

                    ampFromMe += bloodrage;
                }
            }

            if (silverEdge)
            {
                ampFromMe -= 0.5;
            }

            if (iceBlast)
            {
                var spell = Abilities.FindAbility("ancient_apparition_ice_blast", target.GetEnemyTeam());
                if (spell != null)
                {
                    var treshold = spell.GetAbilityData("kill_pct") / 100;
                    aa = Math.Floor(treshold / target.MaximumHealth);
                }
            }

            if (medusaManaShield)
            {
                var spell = target.FindSpell("medusa_mana_shield", true);
                if (spell != null)
                {
                    var    treshold = spell.GetAbilityData("damage_per_mana");
                    double burst;
                    if (target.Mana >= tempDmg * .6 / treshold)
                    {
                        burst = 0.6;
                    }
                    else
                    {
                        burst = target.Mana * treshold / tempDmg;
                    }

                    manaShield = burst;
                }
            }

            switch (dmgType)
            {
            case DamageType.Magical:

                // Console.WriteLine(minusMagicResistancePerc/100);
                var resist = 1 - (1 - target.MagicDamageResist) * (1 + (float)minusMagicResistancePerc / 100);
                tempDmg =
                    (float)
                    ((tempDmg * (1 - manaShield) * (1 - reduceOther) - magOnly) * (1 + amp - reduceProc)
                     * (1 + ampFromMe) * (1 - resist) - reduceStatic + aa);
                break;

            case DamageType.Pure:
                if (!throughBKB && target.IsMagicImmune())
                {
                    tempDmg = 0;
                }
                else
                {
                    tempDmg =
                        (float)
                        (tempDmg * (1 - manaShield) * (1 - reduceOther) * (1 + amp - reduceProc) * (1 + ampFromMe)
                         - reduceStatic + aa);
                }

                break;

            case DamageType.Physical:
                if (target.IsAttackImmune())
                {
                    return(0);
                }

                tempDmg =
                    (float)
                    ((tempDmg * (1 - manaShield) * (1 - reduceOther) - reduceBlock) * (1 + amp - reduceProc)
                     * (1 + ampFromMe) * (1 - target.DamageResist * (1 - minusDamageResistancePerc / 100))
                     + 0.06 * minusArmor / (1 + 0.06 * Math.Abs(minusArmor))) - reduceStatic + aa;
                break;

            case DamageType.HealthRemoval:
                break;
            }

            return((float)Math.Max(tempDmg, 0));
        }
Beispiel #58
0
        public static float CalculateMyCurrentDamage(Hero globalTarget, bool checkForRange = false)
        {
            var mana      = Members.MyHero.Mana;
            var laser     = Abilities.FindAbility("tinker_laser");
            var rocked    = Abilities.FindAbility("tinker_heat_seeking_missile");
            var allItems  = new List <Ability>();
            var allItems2 = new List <Ability>(Members.MyHero.Inventory.Items.Where(x =>
                                                                                    IsItemEnableNew(x.StoredName()) && (x.ManaCost > 0 || x.StoredName() == "item_soul_ring"))
                                               .OrderBy(PriorityHelper)
                                               .ToList());

            allItems.AddRange(allItems2);

            if (laser.Level > 0 && IsItemEnableNew(laser.StoredName()))
            {
                allItems.Add(laser);
            }

            if (rocked.Level > 0 && IsItemEnableNew(rocked.StoredName()))
            {
                allItems.Add(rocked);
            }

            var haveEb =
                allItems.Any(
                    x =>
                    x.StoredName() == "item_ethereal_blade" && x.CanBeCasted() &&
                    (x.CanHit(globalTarget) || !checkForRange));
            var haveVeil =
                allItems.Any(
                    x =>
                    x.StoredName() == "item_veil_of_discord" && x.CanBeCasted() &&
                    (x.CanHit(globalTarget) || !checkForRange));
            var myDmg       = 0f;
            var extraDamage = haveEb && !globalTarget.HasModifier("modifier_item_ethereal_blade_ethereal") ? 40 : 0;

            extraDamage += haveVeil && !globalTarget.HasModifier("modifier_item_veil_of_discord_debuff") ? 25 : 0;
            var ignoreList = new List <Ability>();
            var linkDef    = globalTarget.IsLinkensProtected();

            foreach (
                var x in
                allItems.Where(x => x.CanBeCasted() && !ignoreList.Contains(x))
                .Where(x => !checkForRange || x.CanHit(globalTarget)))
            {
                if (x.Equals(rocked))
                {
                    if (!CanRockedHit(globalTarget))
                    {
                        ignoreList.Add(rocked);
                        continue;
                    }
                }
                if (mana > x.ManaCost)
                {
                    if (x.StoredName() == "item_soul_ring")
                    {
                        mana += 150;
                        continue;
                    }
                    var mCost = x.ManaCost;
                    if (!(mana - mCost > 0))
                    {
                        break;
                    }
                    mana -= mCost;
                    var dmgFromSpell = AbilityDamage.CalculateDamage(x, Members.MyHero, globalTarget,
                                                                     minusMagicResistancePerc: extraDamage);
                    if (x.IsAbilityBehavior(AbilityBehavior.UnitTarget) && linkDef && !x.IsDisable())
                    {
                        dmgFromSpell = 0;
                        linkDef      = false;
                    }
                    myDmg += dmgFromSpell;
                }
            }
            return((int)(globalTarget.Health - myDmg));
        }
 public void TestAbbreviation(Abilities ability, string expectedAbbreviation)
 {
     Assert.That(ability.Abbreviation(), Is.EqualTo(expectedAbbreviation));
 }
Beispiel #60
0
        public static float CalculateMyDamage(Hero globalTarget)
        {
            var mana      = Members.MyHero.MaximumMana;
            var rearm     = Abilities.FindAbility("tinker_rearm");
            var laser     = Abilities.FindAbility("tinker_laser");
            var rocked    = Abilities.FindAbility("tinker_heat_seeking_missile");
            var allItems  = new List <Ability>();
            var allItems2 = new List <Ability>(Members.MyHero.Inventory.Items.Where(x =>
                                                                                    IsItemEnableNew(x.StoredName()) && (x.ManaCost > 0 || x.StoredName() == "item_soul_ring"))
                                               .OrderBy(PriorityHelper)
                                               .ToList());

            allItems.AddRange(allItems2);

            if (rocked.Level > 0 && IsItemEnableNew(rocked.StoredName()))
            {
                allItems.Add(rocked);
            }
            if (laser.Level > 0 && IsItemEnableNew(laser.StoredName()))
            {
                allItems.Add(laser);
            }
            if (rearm.Level > 0)
            {
                allItems.Add(rearm);
            }
            var haveEb      = allItems.Any(x => x.StoredName() == "item_ethereal_blade" && x.CanBeCasted());
            var haveVeil    = allItems.Any(x => x.StoredName() == "item_veil_of_discord" && x.CanBeCasted());
            var myDmg       = 0f;
            var extraDamage = haveEb && !globalTarget.HasModifier("modifier_item_ethereal_blade_ethereal") ? 40 : 0;

            extraDamage += haveVeil && !globalTarget.HasModifier("modifier_item_veil_of_discord_debuff") ? 25 : 0;
            if (allItems.Count == 0 || (rearm.Level == 0))
            {
                myDmg = allItems.Sum(
                    x =>
                    AbilityDamage.CalculateDamage(x, Members.MyHero, globalTarget,
                                                  minusMagicResistancePerc: extraDamage));
                return((int)(globalTarget.Health - myDmg));
            }

            //Printer.Print($"[mana]: init");
            Printer.ConsolePrint($"[mana]: Init. [count]: {allItems.Count}. [possible]: {allItems.Count(x => mana > x.ManaCost)}");
            var wasRearmed    = true;
            var templarStacks = globalTarget.FindModifier("modifier_templar_assassin_refraction_absorb_stacks");
            var stacks        = templarStacks?.StackCount ?? 0;
            var hasRainDrop   = globalTarget.FindItem("item_infused_raindrop", true)?.Cooldown <= 0;
            var wasNama       = mana;
            var linkDef       = globalTarget.IsLinkensProtected();

            while (mana > 5 && allItems.Count(x => mana > x.ManaCost) > 0 && wasRearmed && wasNama >= mana)
            {
                wasRearmed = false;
                foreach (var x in allItems)
                {
                    if (mana > x.ManaCost)
                    {
                        //Printer.ConsolePrint($"[mana]: {x.StoredName()} -> {x.ManaCost}/{mana}");
                        if (x.StoredName() == "item_soul_ring")
                        {
                            mana += 150;
                            Printer.ConsolePrint($"[mana]: {mana} (+150) soul ring");
                            continue;
                        }

                        var mCost = x.ManaCost;
                        if (!(mana - mCost > 0))
                        {
                            break;
                        }
                        mana -= mCost;

                        var dmgFromSpell = AbilityDamage.CalculateDamage(x, Members.MyHero, globalTarget,
                                                                         minusMagicResistancePerc: extraDamage);
                        if (x.GetAbilityId() == AbilityId.tinker_laser)
                        {
                            if (Members.LaserBuff)
                            {
                                dmgFromSpell += 100;
                            }
                        }
                        if (x.IsAbilityBehavior(AbilityBehavior.UnitTarget) && linkDef && !x.IsDisable())
                        {
                            dmgFromSpell = 0;
                            linkDef      = false;
                        }
                        if (stacks > 0)
                        {
                            stacks--;
                            myDmg += 0;
                        }
                        else
                        {
                            if (AbilityDamage.GetDamageType(x) == DamageType.Magical && hasRainDrop && dmgFromSpell > 50)
                            {
                                hasRainDrop   = false;
                                dmgFromSpell -= Math.Min(120, dmgFromSpell);
                                dmgFromSpell  = Math.Max(dmgFromSpell, 0);
                            }
                            myDmg += dmgFromSpell;
                        }
                        //Printer.Print($"[mana]: {mana} (-{mCost}) {x.StoredName()} -> damage: {myDmg}");

                        if (x.StoredName() == rearm.StoredName())
                        {
                            Printer.ConsolePrint($"[mana]: {mana} (-{mCost}) {x.StoredName()}");
                            wasRearmed = true;
                            continue;
                        }
                        Printer.ConsolePrint($"[mana]: {mana} (-{mCost}) {x.StoredName()} -> damage: {dmgFromSpell} || total:{myDmg}");
                    }
                    else
                    {
                        Printer.ConsolePrint($"[mana]: {x.StoredName()} -> {x.ManaCost}/{mana} cant cast this!");
                    }
                }

                /*Printer.ConsolePrint($"[mana]: {rearm.StoredName()} -> {rearm.ManaCost}/{mana}");
                 * mana -= rearm.ManaCost;*/
            }
            var healthAfterShit = (int)(globalTarget.Health - myDmg);

            return(healthAfterShit);
        }