Beispiel #1
0
    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);
    }
Beispiel #2
0
    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);
    }
Beispiel #3
0
    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;
    }