public override void RunAction()
        {
            var target    = this.Target.Unit;
            var initiator = this.Context.MaybeCaster;
            var result    = bonus + initiator.Descriptor.Progression.GetClassLevel(character_class) + initiator.Descriptor.Stats.GetStat <ModifiableValueAttributeStat>(stat_type).Bonus;

            if (!InspectUnitsHelper.IsInspectAllow(target))
            {
                return;
            }

            BlueprintUnit blueprintForInspection = target.Descriptor.BlueprintForInspection;

            InspectUnitsManager.UnitInfo info = Game.Instance.Player.InspectUnitsManager.GetInfo(blueprintForInspection);

            if (info == null)
            {
                return;
            }

            if (info.KnownPartsCount == 4)
            {
                return;
            }

            int dc = info.DC;

            Common.AddBattleLogMessage($"{initiator.CharacterName} forced DC {dc} monster lore check: {result}");
            info.SetCheck(result, initiator);
        }
        public override void RunAction()
        {
            var target    = this.Target.Unit;
            var initiator = this.Context.MaybeCaster;
            var result    = bonus + value.Calculate(this.Context);

            if (!InspectUnitsHelper.IsInspectAllow(target))
            {
                return;
            }

            BlueprintUnit blueprintForInspection = target.Descriptor.BlueprintForInspection;

            InspectUnitsManager.UnitInfo info = Game.Instance.Player.InspectUnitsManager.GetInfo(blueprintForInspection);

            if (info == null)
            {
                return;
            }



            int dc = info.DC;

            Common.AddBattleLogMessage($"{initiator.CharacterName} forced DC {dc} monster lore check: {result}");
            if (info.KnownPartsCount < 4)
            {
                info.SetCheck(result, initiator);
                EventBus.RaiseEvent <IKnowledgeHandler>((Action <IKnowledgeHandler>)(h => h.HandleKnowledgeUpdated(info)));
            }
        }
        public override void RunAction()
        {
            var target    = this.Target.Unit;
            var initiator = this.Context.MaybeCaster;

            if (!InspectUnitsHelper.IsInspectAllow(target))
            {
                return;
            }


            BlueprintUnit blueprintForInspection = target.Descriptor.BlueprintForInspection;

            InspectUnitsManager.UnitInfo info = Game.Instance.Player.InspectUnitsManager.GetInfo(blueprintForInspection);
            StatType statType = !(bool)((UnityEngine.Object)info.Blueprint.Type) ? StatType.SkillLoreNature : info.Blueprint.Type.KnowledgeStat;


            if (info == null)
            {
                return;
            }

            ModifiableValueSkill stat = initiator.Stats.GetStat <ModifiableValueSkill>(statType);
            int?nullable1;
            int?nullable2;

            if (stat == null)
            {
                nullable1 = new int?();
                nullable2 = nullable1;
            }
            else
            {
                nullable2 = new int?(stat.BaseValue);
            }
            nullable1 = nullable2;

            int dc    = info.DC;
            int bonus = value.Calculate(this.Context);

            if ((!nullable1.HasValue ? 0 : nullable1.Value) > 0 || (bool)initiator.Descriptor.State.Features.MakeKnowledgeCheckUntrained)
            {
                var skill_check = new RuleSkillCheck(initiator, statType, dc);
                skill_check.AddTemporaryModifier(initiator.Stats.GetStat(statType).AddModifier(bonus, null, descriptor));
                skill_check.IgnoreDifficultyBonusToDC = true;
                int rollResult = Rulebook.Trigger <RuleSkillCheck>(skill_check).RollResult;
                Common.AddBattleLogMessage($"{initiator.CharacterName} DC {dc} monster lore check: {rollResult}");

                if (dc <= rollResult && action_on_success != null)
                {
                    action_on_success.Run();
                }
                if (info.KnownPartsCount < 4)
                {
                    info.SetCheck(rollResult, initiator);
                    EventBus.RaiseEvent <IKnowledgeHandler>((Action <IKnowledgeHandler>)(h => h.HandleKnowledgeUpdated(info)));
                }
            }
        }
        public bool CanTarget(UnitEntityData caster, TargetWrapper target)
        {
            UnitEntityData unit = target.Unit;
            BlueprintUnit  blueprintForInspection = unit.BlueprintForInspection;

            InspectUnitsManager.UnitInfo info = Game.Instance.Player.InspectUnitsManager.GetInfo(blueprintForInspection);
            if (info == null)
            {
                return(false);
            }
            return(info.KnownPartsCount >= min_inspection_level);
        }