Beispiel #1
0
        private void failCond(Unit target, CondEffect effect, ConditionEffectTypes effect_type, EUnitCondition condition, LogMapTrick.TargetInfo log_mt_ti)
        {
            SceneBattle instance = SceneBattle.Instance;

            if (UnityEngine.Object.op_Implicit((UnityEngine.Object)instance))
            {
                BattleCore battle = instance.Battle;
                if (battle != null)
                {
                    LogFailCondition logFailCondition = battle.Log <LogFailCondition>();
                    logFailCondition.self      = target;
                    logFailCondition.source    = (Unit)null;
                    logFailCondition.condition = condition;
                    TacticsUnitController unitController = instance.FindUnitController(target);
                    if (UnityEngine.Object.op_Implicit((UnityEngine.Object)unitController))
                    {
                        unitController.LockUpdateBadStatus(condition, false);
                    }
                }
            }
            CondAttachment condAttachment = this.createCondAttachment(target, effect, effect_type, condition);

            target.SetCondAttachment(condAttachment);
            if (log_mt_ti == null || !target.IsUnitCondition(condition))
            {
                return;
            }
            log_mt_ti.IsEffective    = true;
            log_mt_ti.FailCondition |= condition;
        }
Beispiel #2
0
        private CondAttachment createCondAttachment(Unit target, CondEffect effect, ConditionEffectTypes type, EUnitCondition condition)
        {
            if (type == ConditionEffectTypes.None)
            {
                return((CondAttachment)null);
            }
            if (effect == null)
            {
                return((CondAttachment)null);
            }
            CondAttachment condAttachment = new CondAttachment(effect.param);

            condAttachment.user         = (Unit)null;
            condAttachment.skill        = (SkillData)null;
            condAttachment.skilltarget  = SkillEffectTargets.Self;
            condAttachment.CondId       = effect.param.iname;
            condAttachment.IsPassive    = (OBool)false;
            condAttachment.UseCondition = ESkillCondition.None;
            condAttachment.CondType     = type;
            condAttachment.Condition    = condition;
            condAttachment.turn         = effect.turn;
            condAttachment.CheckTiming  = effect.param.chk_timing;
            condAttachment.CheckTarget  = target;
            if (condAttachment.IsFailCondition())
            {
                condAttachment.IsCurse = effect.IsCurse;
            }
            condAttachment.SetupLinkageBuff();
            return(condAttachment);
        }
Beispiel #3
0
        private void setup(string iname, int grid_x, int grid_y, string tag, Unit creator, int create_clock, int rank, int rankcap)
        {
            if (string.IsNullOrEmpty(iname))
            {
                return;
            }
            GameManager instanceDirect = MonoSingleton <GameManager> .GetInstanceDirect();

            if (!UnityEngine.Object.op_Implicit((UnityEngine.Object)instanceDirect))
            {
                return;
            }
            this.mTrickParam = instanceDirect.MasterParam.GetTrickParam(iname);
            if (this.mTrickParam == null)
            {
                return;
            }
            this.mRankCap         = (OInt)Math.Max(rankcap, 1);
            this.mRank            = (OInt)Math.Min(rank, (int)this.mRankCap);
            this.mBuffEffect      = BuffEffect.CreateBuffEffect(instanceDirect.MasterParam.GetBuffEffectParam(this.mTrickParam.BuffId), (int)this.mRank, (int)this.mRankCap);
            this.mCondEffect      = CondEffect.CreateCondEffect(instanceDirect.MasterParam.GetCondEffectParam(this.mTrickParam.CondId), (int)this.mRank, (int)this.mRankCap);
            this.mCreateUnit      = creator;
            this.mGridX           = (OInt)grid_x;
            this.mGridY           = (OInt)grid_y;
            this.mTag             = tag;
            this.mRestActionCount = this.mTrickParam.ActionCount;
            this.mCreateClock     = (OInt)create_clock;
            this.mValid           = (OBool)true;
        }
Beispiel #4
0
        public int GetTotalFailConditionCount()
        {
            CondEffect condEffect = this.skill.GetCondEffect(SkillEffectTargets.Target);

            if (condEffect == null || condEffect.param == null || condEffect.param.conditions == null || condEffect.param.type != ConditionEffectTypes.FailCondition && condEffect.param.type != ConditionEffectTypes.ForcedFailCondition && condEffect.param.type != ConditionEffectTypes.RandomFailCondition)
            {
                return(0);
            }
            int num1 = 0;
            int num2 = 0;

            if (this.self.AI != null)
            {
                num2 = (int)this.self.AI.cond_border;
            }
            if (num2 > 0 && (int)condEffect.rate > 0 && (int)condEffect.rate < num2)
            {
                return(0);
            }
            for (int index1 = 0; index1 < this.targets.Count; ++index1)
            {
                for (int index2 = 0; index2 < condEffect.param.conditions.Length; ++index2)
                {
                    Unit           target    = this.targets[index1].target;
                    EUnitCondition condition = condEffect.param.conditions[index2];
                    if (!target.IsUnitCondition(condition) && !target.IsDisableUnitCondition(condition) && (num2 <= 0 || Math.Max((int)condEffect.value - (int)target.CurrentStatus.enchant_resist[condition], 0) >= num2))
                    {
                        ++num1;
                    }
                }
            }
            return(num1);
        }
Beispiel #5
0
        private CondAttachment createCondAttachment(Unit target, CondEffect effect, ConditionEffectTypes type, EUnitCondition condition)
        {
            if (type == ConditionEffectTypes.None)
            {
                return((CondAttachment)null);
            }
            CondAttachment condAttachment = new CondAttachment();

            condAttachment.user         = (Unit)null;
            condAttachment.skill        = (SkillData)null;
            condAttachment.IsPassive    = (OBool)(effect.param.chk_timing == EffectCheckTimings.Eternal);
            condAttachment.UseCondition = ESkillCondition.Weather;
            condAttachment.CondType     = type;
            condAttachment.Condition    = condition;
            int num = (int)effect.turn;

            if (num < 2)
            {
                num = 2;
            }
            condAttachment.turn        = (OInt)num;
            condAttachment.CheckTiming = effect.param.chk_timing;
            condAttachment.CheckTarget = target;
            if (condAttachment.IsFailCondition())
            {
                condAttachment.IsCurse = effect.IsCurse;
            }
            return(condAttachment);
        }
Beispiel #6
0
        private void setup(string iname, Unit modify_unit, int rank, int rankcap)
        {
            if (string.IsNullOrEmpty(iname))
            {
                return;
            }
            GameManager instanceDirect = MonoSingleton <GameManager> .GetInstanceDirect();

            if (!UnityEngine.Object.op_Implicit((UnityEngine.Object)instanceDirect))
            {
                return;
            }
            this.mWeatherParam = instanceDirect.MasterParam.GetWeatherParam(iname);
            if (this.mWeatherParam == null)
            {
                return;
            }
            this.mRankCap = (OInt)Math.Max(rankcap, 1);
            this.mRank    = (OInt)Math.Min(rank, (int)this.mRankCap);
            this.mBuffEffectLists.Clear();
            using (List <string> .Enumerator enumerator = this.mWeatherParam.BuffIdLists.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    string     current    = enumerator.Current;
                    BuffEffect buffEffect = BuffEffect.CreateBuffEffect(instanceDirect.MasterParam.GetBuffEffectParam(current), rank, rankcap);
                    if (buffEffect != null)
                    {
                        this.mBuffEffectLists.Add(buffEffect);
                    }
                }
            }
            this.mCondEffectLists.Clear();
            using (List <string> .Enumerator enumerator = this.mWeatherParam.CondIdLists.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    string     current    = enumerator.Current;
                    CondEffect condEffect = CondEffect.CreateCondEffect(instanceDirect.MasterParam.GetCondEffectParam(current), rank, rankcap);
                    if (condEffect != null)
                    {
                        this.mCondEffectLists.Add(condEffect);
                    }
                }
            }
            this.mModifyUnit = modify_unit;
        }
Beispiel #7
0
        public int GetTotalDisableConditionCount()
        {
            CondEffect condEffect = this.skill.GetCondEffect(SkillEffectTargets.Target);

            if (condEffect == null || condEffect.param == null || (condEffect.param.conditions == null || condEffect.param.type != ConditionEffectTypes.DisableCondition))
            {
                return(0);
            }
            int num = 0;

            for (int index1 = 0; index1 < this.targets.Count; ++index1)
            {
                Unit target = this.targets[index1].target;
                for (int index2 = 0; index2 < condEffect.param.conditions.Length; ++index2)
                {
                    switch (condEffect.param.conditions[index2])
                    {
                    case EUnitCondition.DisableBuff:
                        if (target.CheckActionSkillBuffAttachments(BuffTypes.Buff))
                        {
                            goto default;
                        }
                        else
                        {
                            break;
                        }

                    case EUnitCondition.DisableDebuff:
                        if (target.CheckActionSkillBuffAttachments(BuffTypes.Debuff))
                        {
                            goto default;
                        }
                        else
                        {
                            break;
                        }

                    default:
                        ++num;
                        break;
                    }
                }
            }
            return(num);
        }
Beispiel #8
0
 public void Setup(string iname, int rank, int rankcap = 1, MasterParam master = null)
 {
     if (string.IsNullOrEmpty(iname))
     {
         this.Reset();
     }
     else
     {
         if (master == null)
         {
             master = MonoSingleton <GameManager> .GetInstanceDirect().MasterParam;
         }
         this.mSkillParam       = master.GetSkillParam(iname);
         this.mRankCap          = (int)this.mSkillParam.lvcap != 0 ? (OInt)Math.Max((int)this.mSkillParam.lvcap, 1) : (OInt)Math.Max(rankcap, 1);
         this.mRank             = (OInt)Math.Min(rank, (int)this.mRankCap);
         this.mTargetBuffEffect = BuffEffect.CreateBuffEffect(master.GetBuffEffectParam(this.SkillParam.target_buff_iname), (int)this.mRank, (int)this.mRankCap);
         this.mSelfBuffEffect   = BuffEffect.CreateBuffEffect(master.GetBuffEffectParam(this.SkillParam.self_buff_iname), (int)this.mRank, (int)this.mRankCap);
         this.mTargetCondEffect = CondEffect.CreateCondEffect(master.GetCondEffectParam(this.SkillParam.target_cond_iname), (int)this.mRank, (int)this.mRankCap);
         this.mSelfCondEffect   = CondEffect.CreateCondEffect(master.GetCondEffectParam(this.SkillParam.self_cond_iname), (int)this.mRank, (int)this.mRankCap);
         this.UpdateParam();
     }
 }
Beispiel #9
0
        private void failCond(Unit target, CondEffect effect, ConditionEffectTypes effect_type, EUnitCondition condition)
        {
            CondAttachment condAttachment     = this.createCondAttachment(target, effect, effect_type, condition);
            CondAttachment sameCondAttachment = this.getSameCondAttachment(target, condAttachment);

            if (sameCondAttachment != null)
            {
                sameCondAttachment.turn = condAttachment.turn;
            }
            else
            {
                target.SetCondAttachment(condAttachment);
                if (!WeatherData.mIsEntryConditionLog)
                {
                    return;
                }
                SceneBattle instance = SceneBattle.Instance;
                if (!UnityEngine.Object.op_Implicit((UnityEngine.Object)instance))
                {
                    return;
                }
                BattleCore battle = instance.Battle;
                if (battle == null)
                {
                    return;
                }
                LogFailCondition logFailCondition = battle.Log <LogFailCondition>();
                logFailCondition.self      = target;
                logFailCondition.source    = (Unit)null;
                logFailCondition.condition = condition;
                TacticsUnitController unitController = instance.FindUnitController(target);
                if (!UnityEngine.Object.op_Implicit((UnityEngine.Object)unitController))
                {
                    return;
                }
                unitController.LockUpdateBadStatus(condition, false);
            }
        }
Beispiel #10
0
        public int GetTotalCureConditionCount()
        {
            CondEffect condEffect = this.skill.GetCondEffect(SkillEffectTargets.Target);

            if (condEffect == null || condEffect.param == null || (condEffect.param.conditions == null || condEffect.param.type != ConditionEffectTypes.CureCondition))
            {
                return(0);
            }
            int num = 0;

            for (int index1 = 0; index1 < this.targets.Count; ++index1)
            {
                for (int index2 = 0; index2 < condEffect.param.conditions.Length; ++index2)
                {
                    EUnitCondition condition = condEffect.param.conditions[index2];
                    if (this.targets[index1].target.IsUnitCondition(condition) && !this.targets[index1].target.IsPassiveUnitCondition(condition))
                    {
                        ++num;
                    }
                }
            }
            return(num);
        }
Beispiel #11
0
        private bool actionCond(Unit target, RandXorshift rand, LogMapTrick.TargetInfo log_mt_ti)
        {
            CondEffect mCondEffect = this.mCondEffect;

            if (rand == null || mCondEffect == null || (mCondEffect.param == null || mCondEffect.param.conditions == null))
            {
                return(false);
            }
            ConditionEffectTypes conditionEffectTypes = ConditionEffectTypes.None;

            if (!mCondEffect.CheckEnableCondTarget(target))
            {
                return(true);
            }
            if (mCondEffect.param.type != ConditionEffectTypes.None && mCondEffect.param.conditions != null)
            {
                int rate = (int)mCondEffect.rate;
                if (0 < rate && rate < 100 && (int)(rand.Get() % 100U) > rate)
                {
                    return(true);
                }
                conditionEffectTypes = mCondEffect.param.type;
            }
            switch (conditionEffectTypes)
            {
            case ConditionEffectTypes.CureCondition:
                for (int index = 0; index < mCondEffect.param.conditions.Length; ++index)
                {
                    EUnitCondition condition = mCondEffect.param.conditions[index];
                    this.cureCond(target, condition, log_mt_ti);
                }
                break;

            case ConditionEffectTypes.FailCondition:
                if ((int)mCondEffect.value != 0)
                {
                    EnchantParam enchantResist = target.CurrentStatus.enchant_resist;
                    for (int index = 0; index < mCondEffect.param.conditions.Length; ++index)
                    {
                        EUnitCondition condition = mCondEffect.param.conditions[index];
                        if (!target.IsDisableUnitCondition(condition) && this.checkFailCond(target, (int)mCondEffect.value, (int)enchantResist[condition], condition, rand))
                        {
                            this.failCond(target, mCondEffect, conditionEffectTypes, condition, log_mt_ti);
                        }
                    }
                    break;
                }
                break;

            case ConditionEffectTypes.ForcedFailCondition:
                for (int index = 0; index < mCondEffect.param.conditions.Length; ++index)
                {
                    EUnitCondition condition = mCondEffect.param.conditions[index];
                    this.failCond(target, mCondEffect, conditionEffectTypes, condition, log_mt_ti);
                }
                break;

            case ConditionEffectTypes.RandomFailCondition:
                if ((int)mCondEffect.value != 0)
                {
                    EnchantParam   enchantResist = target.CurrentStatus.enchant_resist;
                    int            index         = (int)((long)rand.Get() % (long)mCondEffect.param.conditions.Length);
                    EUnitCondition condition     = mCondEffect.param.conditions[index];
                    if (!target.IsDisableUnitCondition(condition) && this.checkFailCond(target, (int)mCondEffect.value, (int)enchantResist[condition], condition, rand))
                    {
                        this.failCond(target, mCondEffect, conditionEffectTypes, condition, log_mt_ti);
                        break;
                    }
                    break;
                }
                break;

            case ConditionEffectTypes.DisableCondition:
                for (int index = 0; index < mCondEffect.param.conditions.Length; ++index)
                {
                    CondAttachment condAttachment = this.createCondAttachment(target, mCondEffect, conditionEffectTypes, mCondEffect.param.conditions[index]);
                    target.SetCondAttachment(condAttachment);
                }
                break;
            }
            return(true);
        }
Beispiel #12
0
        private bool attachCond(WeatherData.eCondAttachType cond_at_type, Unit target, RandXorshift rand = null)
        {
            bool flag = false;

            using (List <CondEffect> .Enumerator enumerator = this.mCondEffectLists.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    CondEffect current = enumerator.Current;
                    if (current != null && current.param != null && current.param.conditions != null)
                    {
                        switch (cond_at_type)
                        {
                        case WeatherData.eCondAttachType.PASSIVE:
                            if (current.param.chk_timing == EffectCheckTimings.Eternal)
                            {
                                break;
                            }
                            continue;

                        case WeatherData.eCondAttachType.TURN:
                            if (current.param.chk_timing != EffectCheckTimings.Eternal)
                            {
                                break;
                            }
                            continue;
                        }
                        if (current.CheckEnableCondTarget(target))
                        {
                            ConditionEffectTypes type = current.param.type;
                            switch (type)
                            {
                            case ConditionEffectTypes.CureCondition:
                                for (int index = 0; index < current.param.conditions.Length; ++index)
                                {
                                    EUnitCondition condition = current.param.conditions[index];
                                    this.cureCond(target, condition);
                                }
                                break;

                            case ConditionEffectTypes.FailCondition:
                                if ((int)current.value != 0)
                                {
                                    EnchantParam enchantResist = target.CurrentStatus.enchant_resist;
                                    for (int index = 0; index < current.param.conditions.Length; ++index)
                                    {
                                        EUnitCondition condition = current.param.conditions[index];
                                        if (!target.IsDisableUnitCondition(condition) && this.checkFailCond(target, (int)current.value, (int)enchantResist[condition], condition, rand))
                                        {
                                            this.failCond(target, current, type, condition);
                                        }
                                    }
                                    break;
                                }
                                break;

                            case ConditionEffectTypes.ForcedFailCondition:
                                for (int index = 0; index < current.param.conditions.Length; ++index)
                                {
                                    EUnitCondition condition = current.param.conditions[index];
                                    this.failCond(target, current, type, condition);
                                }
                                break;

                            case ConditionEffectTypes.RandomFailCondition:
                                if ((int)current.value != 0)
                                {
                                    EnchantParam   enchantResist = target.CurrentStatus.enchant_resist;
                                    int            index         = rand == null ? 0 : (int)((long)rand.Get() % (long)current.param.conditions.Length);
                                    EUnitCondition condition     = current.param.conditions[index];
                                    if (!target.IsDisableUnitCondition(condition) && this.checkFailCond(target, (int)current.value, (int)enchantResist[condition], condition, rand))
                                    {
                                        this.failCond(target, current, type, condition);
                                        break;
                                    }
                                    break;
                                }
                                break;

                            case ConditionEffectTypes.DisableCondition:
                                for (int index = 0; index < current.param.conditions.Length; ++index)
                                {
                                    CondAttachment condAttachment     = this.createCondAttachment(target, current, type, current.param.conditions[index]);
                                    CondAttachment sameCondAttachment = this.getSameCondAttachment(target, condAttachment);
                                    if (sameCondAttachment != null)
                                    {
                                        sameCondAttachment.turn = condAttachment.turn;
                                    }
                                    else
                                    {
                                        target.SetCondAttachment(condAttachment);
                                    }
                                }
                                break;
                            }
                            flag = true;
                        }
                    }
                }
            }
            return(flag);
        }