Exemplo n.º 1
0
    IEnumerator StatusDelay(float duration, int startAttackRate, Damage.Resist startResist, float startSpeed, float startDamage)
    {
        yield return(new WaitForSeconds(duration));

        unit.attackRate     = startAttackRate;
        unit.resists        = startResist;
        unit.speed          = startSpeed;
        unit.damage         = startDamage;
        unit.StatusAffected = false;
    }
Exemplo n.º 2
0
    public void TakeStatus(Status.Packet packet)
    {
        if (unit.StatusAffected)
        {
            return;
        }
        int startAttackRate = unit.attackRate;

        Damage.Resist startResist = unit.resists;
        float         startSpeed  = unit.speed;
        float         startDamage = unit.damage;

        switch (packet.type)
        {
        case Status.Type.Shock:
            unit.resists.physResist      /= Status.shockDefenseMultiplier;
            unit.resists.lightningResist /= Status.shockDefenseMultiplier;
            unit.resists.coldResist      /= Status.shockDefenseMultiplier;
            unit.resists.fireResist      /= Status.shockDefenseMultiplier;
            unit.resists.chaosResist     /= Status.shockDefenseMultiplier;
            break;

        case Status.Type.Chill:
            unit.speed     *= (Status.chillMovespeedMultiplier);
            unit.attackRate = Mathf.FloorToInt(unit.attackRate / Status.chillAttackspeedMultiplier);
            break;

        case Status.Type.Freeze:
            unit.speed     *= Status.freezeMovespeedMultiplier;
            unit.attackRate = Mathf.FloorToInt(unit.attackRate / Status.freezeAttackspeedMultiplier);
            break;

        case Status.Type.Curse:
            unit.damage *= Status.curseDamageMultiplier;
            break;
        }
        unit.StatusAffected = true;
        StartCoroutine(StatusDelay(packet.duration, startAttackRate, startResist, startSpeed, startDamage));
    }