// 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; } } } }
/// <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; } }
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; }
/// <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); }
void Start() { armAnimator.arm = gameObject.transform.Find("Arm"); spriteRenderer = GetComponent<SpriteRenderer>(); InvokeRepeating("Animate", 0, armAnimator.secondsPerFrame); InvokeRepeating("LowerCooldowns", 0, 0.01f); abilities = _abilities; }
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; }
void Start() { character = GetComponent<Character> (); navigation = GetComponent<Navigation>(); combatData = GetComponent<Combat>(); abilities = GetComponent<Abilities>(); }
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 : ""; }
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); }
/// <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(); }
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); } } }
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(); }
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); } }
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); }
///<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); }
public override void InitAbilities() { base.InitAbilities(); Abilities.Add(new EachBattleAbility()); }
public override void init() { controller = GetComponent<Hubert>(); abilities = GetComponent<Abilities>(); }
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); }
public MistRiasSonicGuardian() : base("Mist Rias, Sonic Guardian", 5, Civilization.Light, 2000, Subtype.Guardian) { Abilities.Add(new AnotherCreaturePutIntoBattleZoneAbility(new ControllerMayDrawCardsResolvable(1))); }
public TerrorPit() : base("Terror Pit", 6, Civilization.Darkness) { ShieldTrigger = true; Abilities.Add(new SpellAbility(new DestroyOpponentsCreatureResolvable(new AnyFilter()))); }
public Exercise(Abilities ability) { Ability = ability; }
public HunterCluster() : base("Hunter Cluster", 4, Civilization.Water, 1000, Subtype.CyberCluster) { ShieldTrigger = true; Abilities.Add(new BlockerAbility()); }
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; }
private Ability(Abilities name, int value) { Name = name; Value = value; Weight = 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()); }
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(); } }
public SariusVizierOfSuppression() : base("Sarius, Vizier of Suppression", 2, Civilization.Light, 3000, Subtype.Initiate) { Abilities.Add(new BlockerAbility()); Abilities.Add(new CannotAttackPlayersAbility()); }
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; }
// 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); }
public AquaSniper() : base("Aqua Sniper", 8, Civilization.Water, 5000, Subtype.LiquidPeople) { Abilities.Add(new WhenYouPutThisCreatureIntoTheBattleZoneAbility(new AquaSurferResolvable(2))); }
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); }
public Ability(Ability master, int CognitionValue) { Name = master.Name; Value = master.Value; Weight = FindWeight(CognitionValue); }
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()); } }
public Skill(string baseKey, string baseName, Abilities ability, bool canUseUntrained) : this(baseKey, baseName, string.Empty, ability, canUseUntrained) { }
private void ModuleClosed() { Abilities.Clear(); }
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; } }
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); } } }
public static int GetSkillBonus(this Skill skill, Abilities abilities, int otherBonuses) { return skill.Rank + abilities[skill.Ability].GetModifier() + otherBonuses; }
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); }
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"); } } }
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); } }
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); }
public Locomotiver() : base("Locomotiver", 4, Civilization.Darkness, 1000, Subtype.Hedrian) { ShieldTrigger = true; Abilities.Add(new WhenYouPutThisCreatureIntoTheBattleZoneAbility(new OpponentRandomDiscardResolvable())); }
/// <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)); }
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)); }
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); }