Ejemplo n.º 1
0
    public bool Check(Character c)
    {
        this.lastAdd = this.add;
        this.lastActive = this.active;
        bool targetChange = false;

        // add check
        this.add = true;
        if(this.action != null && (!this.action.InRange() || !this.action.TargetAlive()))
        {
            this.add = false;
        }
        if(this.action != null && this.action.RangeDifference())
        {
            targetChange = true;
        }

        // active check
        this.active = true;
        // blocked
        if((BattleMenu.ATTACK == this.type && c.IsBlockAttack()) ||
            (BattleMenu.SKILL == this.type && c.IsBlockSkills()) ||
            (BattleMenu.ITEM == this.type && c.IsBlockItems()) ||
            (BattleMenu.DEFEND == this.type && c.IsBlockDefend()) ||
            (BattleMenu.ESCAPE == this.type && (c.IsBlockEscape() || !DataHolder.BattleSystem().canEscape)))
        {
            this.active = false;
        }
        // skill
        else if(this.isTarget && BattleMenu.SKILL == this.type &&
            this.id >= 0 && !DataHolder.Skill(this.id).CanUse(c, this.useLevel))
        {
            this.active = false;
        }
        // no skills
        else if(!this.isTarget && BattleMenu.SKILL == this.type && c.GetSkills().Length == 0)
        {
            this.active = false;
        }
        // no items
        else if(!this.isTarget && BattleMenu.ITEM == this.type && !GameHandler.HasItems())
        {
            this.active = false;
        }

        // active time checks
        if(this.active && DataHolder.BattleSystem().IsActiveTime())
        {
            if(BattleMenu.ATTACK == this.type && this.isTarget &&
                ((!DataHolder.BattleSystem().attackEndTurn &&
                c.usedTimeBar+DataHolder.BattleSystem().attackTimebarUse > DataHolder.BattleSystem().maxTimebar) ||
                (DataHolder.BattleSystem().attackEndTurn && c.usedTimeBar > 0)))
            {
                this.active = false;
            }
            else if(BattleMenu.SKILL == this.type && this.isTarget && this.id >= 0 &&
                ((!DataHolder.Skill(this.id).level[this.useLevel].endTurn &&
                c.usedTimeBar+DataHolder.Skill(this.id).level[this.useLevel].timebarUse > DataHolder.BattleSystem().maxTimebar) ||
                (DataHolder.Skill(this.id).level[this.useLevel].endTurn && c.usedTimeBar > 0)))
            {
                this.active = false;
            }
            else if(BattleMenu.ITEM == this.type && this.isTarget &&
                ((!DataHolder.BattleSystem().itemEndTurn &&
                c.usedTimeBar+DataHolder.BattleSystem().itemTimebarUse > DataHolder.BattleSystem().maxTimebar) ||
                (DataHolder.BattleSystem().itemEndTurn && c.usedTimeBar > 0)))
            {
                this.active = false;
            }
            else if(BattleMenu.DEFEND == this.type &&
                ((!DataHolder.BattleSystem().defendEndTurn &&
                c.usedTimeBar+DataHolder.BattleSystem().defendTimebarUse > DataHolder.BattleSystem().maxTimebar) ||
                (DataHolder.BattleSystem().defendEndTurn && c.usedTimeBar > 0)))
            {
                this.active = false;
            }
            else if(BattleMenu.ESCAPE == this.type &&
                ((!DataHolder.BattleSystem().escapeEndTurn &&
                c.usedTimeBar+DataHolder.BattleSystem().escapeTimebarUse > DataHolder.BattleSystem().maxTimebar) ||
                (DataHolder.BattleSystem().escapeEndTurn && c.usedTimeBar > 0)))
            {
                this.active = false;
            }
        }

        // should update check
        return this.lastAdd != this.add || this.lastActive != this.active || targetChange;
    }