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; }