public override object CalcUpgradedStats(List <DSPlayerSkill.SkillUpgrade> upgrades) { BashStats newStats = (BashStats)base.CalcUpgradedStats(upgrades); foreach (var upgrade in upgrades) { if (upgrade.isUpgradeToUnlock && upgrade.level > 0) { newStats.unlocked = true; } } return(newStats); }
public override bool Execute(object skillStats) { var res = base.Execute(skillStats); if (res) { BashStats stats = new BashStats(); try { stats = (BashStats)skillStats; } catch { Debug.Log("Были переданы статы не того скила... скорее всего... кароче сто то с приведением типа..."); return(false); } if (owner != null) { if (!(stats.BaschType == BashStats.Type.SHIELD && owner.Inventory.Shield.EquipmentStats.Empty)) { Coroutine cor = null; if (coroutines.ContainsKey(owner)) { cor = coroutines[owner]; } if (cor != null) { owner.StopCoroutine(cor); } coroutines[owner] = owner.StartCoroutine(ExecuteWithPhases(stats, owner)); } else { Debug.Log("Без щита незя бить щитом..."); Toast.Instance.Show(LocalizedStrings.toast_cant_use_skill_without_shields); res = false; } } else { Debug.Log("Без овнера этот скилл не работает..."); res = false; } } return(res); }
IEnumerator ExecuteWithPhases(BashStats stats, Squad owner) { //ждем задержку yield return(new WaitForSeconds(stats.Delay)); //первая фаза //добавляем модификатор owner.AddStatsModifier(stats.firstPhaseModifyer); //если оружием то оружием если нет то нет bool weapon; if (stats.BaschType == BashStats.Type.WEAPON) { weapon = true; } else { weapon = false; } //наносим удар врагу int cnt = owner.UnitCount; var pos = owner.UnitPositions; for (int i = 0; i < cnt; i++) { var unit = pos[i].Unit; if (!unit.Stanned) { var unitStats = unit.Stats; var enemyes = unit.FindEnemyes(weapon, false); int cnt2 = enemyes.Length; for (int j = 0; j < cnt2; j++) { if (!weapon) { enemyes[j].FallDown(); } enemyes[j].TakeHit(unitStats.Damage); } } } //ждем вторую фазу yield return(new WaitForSeconds(stats.firstPhaseDuration)); //вторая фаза //убираем прошлый модификатор и добавляем новый owner.RemoveStatsModifier(stats.firstPhaseModifyer); //если вторая фаза есть вообще if (stats.secondPhaseDuration > 0) { owner.AddStatsModifier(stats.secondPhaseModifyer); //ждем конца скилла yield return(new WaitForSeconds(stats.secondPhaseDuration)); //убираем модификатор owner.RemoveStatsModifier(stats.secondPhaseModifyer); } coroutines[owner] = null; }