public void UpdateCount(SufferStateProperty.SufferType key, SkillStatus skillStatus = null)
    {
        List <SufferStatePropertyCounter.CountData> list = null;

        this.countDictionary.TryGetValue(key, out list);
        if (list == null || list.Count == 0)
        {
            return;
        }
        using (List <SufferStatePropertyCounter.CountData> .Enumerator enumerator = list.GetEnumerator())
        {
            while (enumerator.MoveNext())
            {
                SufferStatePropertyCounter.CountData countData = enumerator.Current;
                HaveSufferState currentSufferState             = countData.characterStateControl.currentSufferState;
                if (currentSufferState.FindSufferState(key))
                {
                    SufferStateProperty        sufferStateProperty = currentSufferState.GetSufferStateProperty(key);
                    SufferStateProperty.Data[] array = sufferStateProperty.GetNotIsMultiHitThroughDatas();
                    if (!string.IsNullOrEmpty(countData.id))
                    {
                        array = array.Where((SufferStateProperty.Data item) => countData.id == item.id).ToArray <SufferStateProperty.Data>();
                    }
                    if (array.Length > 0)
                    {
                        sufferStateProperty.AddCurrentKeepCount(array, -1, skillStatus, countData.characterStateControl);
                    }
                }
            }
        }
    }
    public HaveSufferState()
    {
        this.sufferStatePropertyDictionary = new Dictionary <SufferStateProperty.SufferType, SufferStateProperty>();
        Array       values     = Enum.GetValues(typeof(SufferStateProperty.SufferType));
        IEnumerator enumerator = values.GetEnumerator();

        try
        {
            while (enumerator.MoveNext())
            {
                object obj = enumerator.Current;
                SufferStateProperty.SufferType sufferType = (SufferStateProperty.SufferType)obj;
                SufferStateProperty            value      = new SufferStateProperty(sufferType);
                this.sufferStatePropertyDictionary.Add(sufferType, value);
            }
        }
        finally
        {
            IDisposable disposable;
            if ((disposable = (enumerator as IDisposable)) != null)
            {
                disposable.Dispose();
            }
        }
    }
Exemple #3
0
    private float GetSkillHitRateCorrectionValue(CharacterStateControl attacker)
    {
        float num = 0f;
        List <ExtraEffectStatus> extraEffectStatus = BattleStateManager.current.battleStateData.extraEffectStatus;
        List <ExtraEffectStatus> invocationList    = ExtraEffectStatus.GetInvocationList(extraEffectStatus, EffectStatusBase.EffectTriggerType.Usually);

        num += ExtraEffectStatus.GetSkillHitRateCorrectionValue(invocationList, this, attacker) - this.hitRate;
        num += attacker.chipAddHit;
        foreach (int num2 in attacker.potencyChipIdList.Keys)
        {
            GameWebAPI.RespDataMA_ChipEffectM.ChipEffect   chipEffectDataToId = ChipDataMng.GetChipEffectDataToId(num2.ToString());
            GameWebAPI.RespDataMA_ChipEffectM.ChipEffect[] chipEffects        = new GameWebAPI.RespDataMA_ChipEffectM.ChipEffect[]
            {
                chipEffectDataToId
            };
            num += ChipEffectStatus.GetSkillHitRateCorrectionValue(chipEffects, this, attacker);
        }
        SufferStateProperty sufferStateProperty = attacker.currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.HitRateUp);

        if (sufferStateProperty.isActive)
        {
            num += sufferStateProperty.upPercent;
        }
        SufferStateProperty sufferStateProperty2 = attacker.currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.HitRateDown);

        if (sufferStateProperty2.isActive)
        {
            num -= sufferStateProperty2.downPercent;
        }
        num += attacker.leaderSkillResult.hitRateUpPercent;
        return(num);
    }
    public IEnumerator RunSufferBeforeCommand(List <CharacterStateControl> sortedCharacters, CharacterStateControl sortedCharacter)
    {
        if (sortedCharacter.currentSufferState.FindSufferState(SufferStateProperty.SufferType.Stun))
        {
            this.onStun   = true;
            this.onFreeze = true;
            sortedCharacter.currentSufferState.RemoveSufferState(SufferStateProperty.SufferType.Stun, false);
        }
        if (sortedCharacter.currentSufferState.FindSufferState(SufferStateProperty.SufferType.Sleep))
        {
            this.onSleep  = true;
            this.onFreeze = true;
        }
        SufferStateProperty powerChargeSuffer = sortedCharacter.currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.PowerCharge);

        if (powerChargeSuffer.isActive)
        {
            this.onPowerCharge = true;
            if (!powerChargeSuffer.OnInvocationPowerChargeAttack)
            {
                this.onFreeze = true;
            }
        }
        if (sortedCharacter.currentSufferState.FindSufferState(SufferStateProperty.SufferType.Escape))
        {
            SufferStateProperty suffer = sortedCharacter.currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.Escape);
            if (suffer.GetNearCurrentKeepRound() < 1)
            {
                if (suffer.GetAheadEscapeResult())
                {
                    this.onEscape = true;
                    this.onFreeze = true;
                }
                else
                {
                    sortedCharacter.currentSufferState.RemoveSufferState(SufferStateProperty.SufferType.Escape, false);
                    string format = StringMaster.GetString("BattleNotice-21");
                    string str    = string.Format(format, sortedCharacter.characterDatas.name);
                    base.stateManager.uiControl.ApplyWarning(str, sortedCharacter.isEnemy);
                    IEnumerator animation = this.Animation(sortedCharacter);
                    while (animation.MoveNext())
                    {
                        yield return(null);
                    }
                }
            }
            else
            {
                string format2 = StringMaster.GetString("BattleNotice-19");
                string str2    = string.Format(format2, suffer.GetNearCurrentKeepRound());
                base.stateManager.uiControl.ApplyWarning(str2, sortedCharacter.isEnemy);
                IEnumerator animation2 = this.Animation(sortedCharacter);
                while (animation2.MoveNext())
                {
                    yield return(null);
                }
            }
        }
        yield break;
    }
Exemple #5
0
    protected override IEnumerator MainRoutine()
    {
        CharacterStateControl attacker = base.battleStateData.currentSelectCharacterState;

        if ((!attacker.isEnemy && !RandomExtension.Switch(base.hierarchyData.playerPursuitPercentage)) || (attacker.isEnemy && !RandomExtension.Switch(base.hierarchyData.enemyPursuitPercentage)))
        {
            yield break;
        }
        if (!attacker.currentSkillStatus.ThisSkillIsAttack)
        {
            yield break;
        }
        bool isConfusion = false;
        SufferStateProperty confusionSuffer = attacker.currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.Confusion);

        if (confusionSuffer.isActive && confusionSuffer.GetOccurrenceFreeze())
        {
            isConfusion = true;
        }
        CharacterStateControl[] targets;
        if (!isConfusion)
        {
            targets = ((!attacker.isEnemy) ? base.battleStateData.enemies : base.battleStateData.playerCharacters);
        }
        else
        {
            targets = (attacker.isEnemy ? base.battleStateData.enemies : base.battleStateData.playerCharacters);
        }
        int count = 0;

        for (int i = 0; i < targets.Length; i++)
        {
            if (targets[i].isDied)
            {
                count++;
            }
        }
        if (count == targets.Length)
        {
            yield break;
        }
        do
        {
            attacker.targetCharacter = targets[UnityEngine.Random.Range(0, targets.Length)];
        }while (attacker.targetCharacter.isDied);
        attacker.isSelectSkill = attacker.SkillIdToIndexOf(base.stateManager.publicAttackSkillId);
        base.SetState(typeof(SubStatePvPSkillDetailsFunction));
        while (base.isWaitState)
        {
            yield return(null);
        }
        yield break;
    }
    private static int CompareSpeedBase(CharacterStateControl x, CharacterStateControl y, bool checkRandom = false, bool checkBath = true)
    {
        if (x == y)
        {
            return(0);
        }
        float num  = (float)x.extraSpeed;
        float num2 = (float)y.extraSpeed;

        if (checkRandom)
        {
            num  = x.randomedSpeed;
            num2 = y.randomedSpeed;
        }
        else
        {
            num  += (float)x.extraSpeed * x.leaderSkillResult.speedUpPercent;
            num2 += (float)y.extraSpeed * y.leaderSkillResult.speedUpPercent;
        }
        if (checkBath)
        {
            SufferStateProperty sufferStateProperty = x.currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.SpeedUp);
            if (sufferStateProperty.isActive)
            {
                num += (float)x.extraSpeed * sufferStateProperty.upPercent;
            }
            SufferStateProperty sufferStateProperty2 = x.currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.SpeedDown);
            if (sufferStateProperty2.isActive)
            {
                num -= (float)x.extraSpeed * sufferStateProperty2.downPercent;
            }
            SufferStateProperty sufferStateProperty3 = y.currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.SpeedUp);
            if (sufferStateProperty3.isActive)
            {
                num2 += (float)y.extraSpeed * sufferStateProperty3.upPercent;
            }
            SufferStateProperty sufferStateProperty4 = y.currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.SpeedDown);
            if (sufferStateProperty4.isActive)
            {
                num2 -= (float)y.extraSpeed * sufferStateProperty4.downPercent;
            }
        }
        if (num > num2)
        {
            return(-1);
        }
        if (num < num2)
        {
            return(1);
        }
        return(0);
    }
    public void RoundUpdate()
    {
        SufferStateProperty.SufferType[] array = new SufferStateProperty.SufferType[]
        {
            SufferStateProperty.SufferType.Poison,
            SufferStateProperty.SufferType.Confusion,
            SufferStateProperty.SufferType.Paralysis,
            SufferStateProperty.SufferType.Sleep,
            SufferStateProperty.SufferType.Stun,
            SufferStateProperty.SufferType.SkillLock,
            SufferStateProperty.SufferType.AttackUp,
            SufferStateProperty.SufferType.AttackDown,
            SufferStateProperty.SufferType.DefenceUp,
            SufferStateProperty.SufferType.DefenceDown,
            SufferStateProperty.SufferType.SpAttackUp,
            SufferStateProperty.SufferType.SpAttackDown,
            SufferStateProperty.SufferType.SpDefenceUp,
            SufferStateProperty.SufferType.SpDefenceDown,
            SufferStateProperty.SufferType.SpeedUp,
            SufferStateProperty.SufferType.SpeedDown,
            SufferStateProperty.SufferType.Counter,
            SufferStateProperty.SufferType.Reflection,
            SufferStateProperty.SufferType.Protect,
            SufferStateProperty.SufferType.PowerCharge,
            SufferStateProperty.SufferType.HitRateUp,
            SufferStateProperty.SufferType.HitRateDown,
            SufferStateProperty.SufferType.SatisfactionRateUp,
            SufferStateProperty.SufferType.SatisfactionRateDown,
            SufferStateProperty.SufferType.ApRevival,
            SufferStateProperty.SufferType.ApConsumptionUp,
            SufferStateProperty.SufferType.ApConsumptionDown,
            SufferStateProperty.SufferType.TurnBarrier,
            SufferStateProperty.SufferType.DamageRateUp,
            SufferStateProperty.SufferType.DamageRateDown,
            SufferStateProperty.SufferType.Regenerate,
            SufferStateProperty.SufferType.TurnEvasion,
            SufferStateProperty.SufferType.Escape,
            SufferStateProperty.SufferType.ChangeToleranceUp,
            SufferStateProperty.SufferType.ChangeToleranceDown
        };
        foreach (SufferStateProperty.SufferType key in array)
        {
            this.sufferStatePropertyDictionary[key].AddCurrentKeepRound(-1);
        }
        SufferStateProperty sufferStateProperty = this.sufferStatePropertyDictionary[SufferStateProperty.SufferType.Escape];

        if (sufferStateProperty.isActive)
        {
            sufferStateProperty.SaveAheadEscapeResult();
        }
    }
    public int GetCorrectedAp(CharacterStateControl user)
    {
        int num = this.needAp;
        SufferStateProperty sufferStateProperty = user.currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.ApConsumptionUp);

        if (sufferStateProperty.isActive)
        {
            num += sufferStateProperty.upPower;
        }
        SufferStateProperty sufferStateProperty2 = user.currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.ApConsumptionDown);

        if (sufferStateProperty2.isActive)
        {
            num -= sufferStateProperty2.downPower;
        }
        return(num);
    }
    public void RunSufferAfterCommand(List <CharacterStateControl> sortedCharacters, CharacterStateControl sortedCharacter)
    {
        base.stateManager.uiControl.HideCharacterHUDFunction();
        SufferStateProperty sufferStateProperty = sortedCharacter.currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.Paralysis);

        if (sufferStateProperty.isActive && sufferStateProperty.GetOccurrenceFreeze())
        {
            this.onFreeze    = true;
            this.onParalysis = true;
        }
        SufferStateProperty sufferStateProperty2 = sortedCharacter.currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.Confusion);

        if (sufferStateProperty2.isActive && sufferStateProperty2.GetOccurrenceFreeze())
        {
            sortedCharacter.isSelectSkill = sortedCharacter.SkillIdToIndexOf(base.stateManager.publicAttackSkillId);
            this.onConfusion = true;
            CharacterStateControl characterStateControl;
            for (;;)
            {
                characterStateControl = sortedCharacters[UnityEngine.Random.Range(0, sortedCharacters.Count)];
                if (!characterStateControl.isDied)
                {
                    if (sortedCharacter.isEnemy)
                    {
                        if (characterStateControl.isEnemy)
                        {
                            break;
                        }
                    }
                    else if (!characterStateControl.isEnemy)
                    {
                        goto Block_8;
                    }
                }
            }
            sortedCharacter.targetCharacter = characterStateControl;
            return;

Block_8:
            sortedCharacter.targetCharacter = characterStateControl;
        }
    }
    public void AddCountDictionary(SufferStateProperty.SufferType key, CharacterStateControl value, string[] ids = null)
    {
        if (!this.countDictionary.ContainsKey(key))
        {
            this.countDictionary.Add(key, new List <SufferStatePropertyCounter.CountData>());
        }
        HaveSufferState currentSufferState = value.currentSufferState;

        if (currentSufferState.FindSufferState(key))
        {
            SufferStateProperty        sufferStateProperty = currentSufferState.GetSufferStateProperty(key);
            SufferStateProperty.Data[] array = sufferStateProperty.GetIsMultiHitThroughDatas();
            if (ids != null)
            {
                array = array.Where((SufferStateProperty.Data item) => ids.Contains(item.id)).ToArray <SufferStateProperty.Data>();
            }
            if (array.Length > 0)
            {
                sufferStateProperty.AddCurrentKeepCount(array, -1, null, null);
            }
            SufferStateProperty.Data[] array2 = sufferStateProperty.GetNotIsMultiHitThroughDatas();
            if (ids != null)
            {
                array2 = array2.Where((SufferStateProperty.Data item) => ids.Contains(item.id)).ToArray <SufferStateProperty.Data>();
            }
            if (array2.Length > 0)
            {
                SufferStateProperty.Data[] array3 = array2;
                for (int i = 0; i < array3.Length; i++)
                {
                    SufferStateProperty.Data notIsMultiHitThroughData = array3[i];
                    if (!this.countDictionary[key].Where((SufferStatePropertyCounter.CountData item) => item.characterStateControl == value && item.id == notIsMultiHitThroughData.id).Any <SufferStatePropertyCounter.CountData>())
                    {
                        SufferStatePropertyCounter.CountData countData = new SufferStatePropertyCounter.CountData();
                        countData.characterStateControl = value;
                        countData.id = notIsMultiHitThroughData.id;
                        this.countDictionary[key].Add(countData);
                    }
                }
            }
        }
    }
 private IEnumerator PlayStagingChipEffect(List <SubStatePlayChipEffect.ReturnData> returnDataList)
 {
     foreach (SubStatePlayChipEffect.ReturnData returnData in returnDataList)
     {
         foreach (KeyValuePair <int, List <GameWebAPI.RespDataMA_ChipEffectM.ChipEffect> > data in returnData.dictionary)
         {
             foreach (GameWebAPI.RespDataMA_ChipEffectM.ChipEffect chipEffect in data.Value)
             {
                 if (!returnData.characterStateControl.isDied || chipEffect.effectTrigger.ToInt32() == 6)
                 {
                     SufferStateProperty death = returnData.characterStateControl.currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.InstantDeath);
                     if (death == null || !death.isActive || death.isMiss || chipEffect.effectTrigger.ToInt32() == 6)
                     {
                         if (chipEffect.effectType.ToInt32() == 60 || chipEffect.effectType.ToInt32() == 56)
                         {
                             SkillStatus           status = base.hierarchyData.GetSkillStatus(chipEffect.effectValue);
                             CharacterStateControl target = this.GetTarget(returnData.characterStateControl, chipEffect);
                             if (status == null || target == null)
                             {
                                 returnData.characterStateControl.AddChipEffectCount(chipEffect.chipEffectId.ToInt32(), 1);
                             }
                             else
                             {
                                 IEnumerator function = this.ChipSkillDetailsFunction(returnData.characterStateControl, data.Key, chipEffect, status, target);
                                 while (function.MoveNext())
                                 {
                                     object obj = function.Current;
                                     yield return(obj);
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     yield break;
 }
    private static SufferStateProperty.DamageRateResult GetReduceDamageRate(AffectEffectProperty affectEffectProperty, CharacterStateControl attackerCharacter, CharacterStateControl targetCharacter)
    {
        HaveSufferState currentSufferState = targetCharacter.currentSufferState;

        SufferStateProperty.DamageRateResult damageRateResult = new SufferStateProperty.DamageRateResult();
        damageRateResult.damageRate = 1f;
        if (affectEffectProperty.powerType == PowerType.Percentage && currentSufferState.FindSufferState(SufferStateProperty.SufferType.CountGuard))
        {
            SufferStateProperty sufferStateProperty             = currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.CountGuard);
            SufferStateProperty.DamageRateResult caseDamageRate = sufferStateProperty.GetCaseDamageRate(affectEffectProperty, attackerCharacter);
            if (BattleStateManager.current.battleStateData.IsChipSkill())
            {
                CharacterStateControl autoCounterCharacter = BattleStateManager.current.battleStateData.GetAutoCounterCharacter();
                if (autoCounterCharacter.chipSkillId == SkillStatus.COUNTER_ATTACK_SKILL_ID)
                {
                    caseDamageRate.damageRate = 0f;
                }
            }
            float damageRate = Mathf.Max(1f - caseDamageRate.damageRate, 0f);
            damageRateResult.damageRate = damageRate;
            damageRateResult.dataList.AddRange(caseDamageRate.dataList);
        }
        return(damageRateResult);
    }
    private static int CompareGenreationStartTimingBase(CharacterStateControl x, CharacterStateControl y, SufferStateProperty.SufferType sufferType)
    {
        if (x == y)
        {
            return(0);
        }
        int num = 0;
        SufferStateProperty sufferStateProperty  = x.currentSufferState.GetSufferStateProperty(sufferType);
        SufferStateProperty sufferStateProperty2 = y.currentSufferState.GetSufferStateProperty(sufferType);

        if (sufferStateProperty.generationStartTiming < sufferStateProperty2.generationStartTiming)
        {
            num = -1;
        }
        else if (sufferStateProperty.generationStartTiming > sufferStateProperty2.generationStartTiming)
        {
            num = 1;
        }
        if (Mathf.Abs(num) == 1)
        {
            return(num);
        }
        return(RandomExtension.IntPlusMinus());
    }
Exemple #14
0
    private IEnumerator PoisonFunction()
    {
        List <CharacterStateControl> characters = this.GetSufferCharacters(SufferStateProperty.SufferType.Poison);

        if (characters.Count == 0)
        {
            yield break;
        }
        foreach (CharacterStateControl characterStateControl in base.stateManager.battleStateData.GetTotalCharacters())
        {
            base.stateManager.threeDAction.ShowAliveCharactersAction(new CharacterStateControl[]
            {
                characterStateControl
            });
            base.stateManager.threeDAction.PlayIdleAnimationUndeadCharactersAction(new CharacterStateControl[]
            {
                characterStateControl
            });
        }
        base.stateManager.SetBattleScreen(BattleScreen.PoisonHit);
        foreach (CharacterStateControl characterStateControl2 in this.GetTotalCharacters())
        {
            characterStateControl2.OnChipTrigger(EffectStatusBase.EffectTriggerType.DamagePossibility);
        }
        if (base.hierarchyData.batteWaves[base.battleStateData.currentWaveNumber].cameraType == 1)
        {
            base.stateManager.cameraControl.PlayCameraMotionAction("BigBoss/0002_command", base.battleStateData.stageSpawnPoint, true);
        }
        else
        {
            base.stateManager.cameraControl.PlayCameraMotionAction("0002_command", base.battleStateData.stageSpawnPoint, true);
        }
        List <CharacterStateControl> currentDeathCharacters = new List <CharacterStateControl>();
        List <int>            damage = new List <int>();
        List <bool>           isMiss = new List <bool>();
        CharacterStateControl currentDeathBigBoss = null;
        bool playedDeadSE = false;

        for (int k = 0; k < characters.Count; k++)
        {
            SufferStateProperty sufferStateProperty = characters[k].currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.Poison);
            int poisonDamageFluctuation             = sufferStateProperty.GetPoisonDamageFluctuation(characters[k]);
            characters[k].hp -= poisonDamageFluctuation;
            damage.Add(poisonDamageFluctuation);
            isMiss.Add(false);
            if (!characters[k].isDied)
            {
                base.stateManager.threeDAction.PlayAnimationCharacterAction(CharacterAnimationType.hit, new CharacterStateControl[]
                {
                    characters[k]
                });
            }
            else
            {
                if (base.hierarchyData.batteWaves[base.battleStateData.currentWaveNumber].cameraType == 1 && characters[k].isEnemy)
                {
                    base.stateManager.threeDAction.PlayAnimationCharacterAction(CharacterAnimationType.strongHit, new CharacterStateControl[]
                    {
                        characters[k]
                    });
                    currentDeathBigBoss = characters[k];
                }
                else
                {
                    Action deathEffectPlay = delegate()
                    {
                        if (!playedDeadSE)
                        {
                            this.stateManager.soundPlayer.PlayDeathSE();
                        }
                        playedDeadSE = true;
                    };
                    base.stateManager.threeDAction.PlayDeadAnimationCharacterAction(deathEffectPlay, characters[k]);
                }
                currentDeathCharacters.Add(characters[k]);
            }
            HitEffectParams item = BattleEffectManager.Instance.GetEffect(AffectEffect.Poison.ToString()) as HitEffectParams;
            this.use_effect_params_.Add(item);
            base.stateManager.threeDAction.PlayHitEffectAction(this.use_effect_params_[k], characters[k]);
        }
        foreach (CharacterStateControl characterStateControl3 in this.GetTotalCharacters())
        {
            characterStateControl3.ClearGutsData();
        }
        List <HitIcon> hitIconlist = new List <HitIcon>();

        Vector3[] hitIconPositions = this.GetHitIconPositions(characters);
        for (int m = 0; m < characters.Count; m++)
        {
            HitIcon item2 = base.stateManager.uiControl.ApplyShowHitIcon(m, hitIconPositions[m], AffectEffect.Poison, damage[m], Strength.None, isMiss[m], false, false, false, false, ExtraEffectType.Non, true, null);
            hitIconlist.Add(item2);
        }
        base.stateManager.uiControl.HideCharacterHUDFunction();
        base.stateManager.uiControl.ShowCharacterHUDFunction(characters.ToArray());
        if (this.use_effect_params_.Count > 0)
        {
            base.stateManager.soundPlayer.TryPlaySE(this.use_effect_params_[0]);
        }
        Action hudReposition = delegate()
        {
            foreach (CharacterStateControl characterStateControl5 in characters)
            {
                this.stateManager.uiControl.RepositionCharacterHUDPosition(new CharacterStateControl[]
                {
                    characterStateControl5
                });
            }
            for (int n = 0; n < characters.Count; n++)
            {
                Vector3 fixableCharacterCenterPosition2DFunction = this.stateManager.uiControl.GetFixableCharacterCenterPosition2DFunction(characters[n]);
                hitIconlist[n].HitIconReposition(fixableCharacterCenterPosition2DFunction);
            }
        };

        if (currentDeathBigBoss != null)
        {
            base.stateManager.uiControl.Fade(Color.white, 1f, 1f);
        }
        float       waitSecond = base.stateManager.stateProperty.poisonHitEffectWaitSecond + ((currentDeathCharacters.Count <= 0) ? 0f : 1f);
        IEnumerator wait       = base.stateManager.time.WaitForCertainPeriodTimeAction(waitSecond, hudReposition, null);

        while (wait.MoveNext())
        {
            yield return(null);
        }
        if (this.use_effect_params_.Count > 0)
        {
            base.stateManager.soundPlayer.TryStopSE(this.use_effect_params_[0]);
        }
        base.stateManager.soundPlayer.StopHitEffectSE();
        foreach (CharacterStateControl characterStateControl4 in currentDeathCharacters)
        {
            characterStateControl4.isDiedJustBefore = true;
        }
        if (base.battleMode != BattleMode.PvP)
        {
            if (currentDeathBigBoss != null)
            {
                base.stateManager.cameraControl.StopCameraMotionAction("0002_command");
                IEnumerator transitionCount = base.stateManager.threeDAction.BigBossExitAction(currentDeathBigBoss);
                while (transitionCount.MoveNext())
                {
                    yield return(null);
                }
            }
            this.subStateEnemiesItemDroppingFunction.Init(currentDeathCharacters.ToArray());
            base.SetState(this.subStateEnemiesItemDroppingFunction.GetType());
            while (base.isWaitState)
            {
                yield return(null);
            }
            if (currentDeathBigBoss != null)
            {
                base.stateManager.cameraControl.StopCameraMotionAction("skillA");
            }
        }
        yield break;
    }
    public static SkillResults GetSkillResults(AffectEffectProperty affectEffectProperty, CharacterStateControl attackerCharacter, CharacterStateControl targetCharacter, bool onRandomAttack = true, int attackNum = 0)
    {
        SkillResults      skillResults        = new SkillResults();
        LeaderSkillResult leaderSkillResult   = attackerCharacter.leaderSkillResult;
        HaveSufferState   currentSufferState  = attackerCharacter.currentSufferState;
        HaveSufferState   currentSufferState2 = targetCharacter.currentSufferState;

        float[] array = new float[2];
        skillResults.useAffectEffectProperty = affectEffectProperty;
        skillResults.hitIconAffectEffect     = AffectEffect.Damage;
        skillResults.attackCharacter         = attackerCharacter;
        skillResults.targetCharacter         = targetCharacter;
        if (targetCharacter.isDied)
        {
            return(skillResults);
        }
        skillResults.onWeakHit = ((!affectEffectProperty.canUseAttribute) ? Strength.None : targetCharacter.tolerance.GetAttributeStrength(affectEffectProperty.attribute));
        if (attackerCharacter.hittingTheTargetType == BattleInvariant.Type.Non)
        {
            skillResults.onMissHit = !affectEffectProperty.OnHit(attackerCharacter, targetCharacter);
        }
        else if (attackerCharacter.hittingTheTargetType == BattleInvariant.Type.Up)
        {
            skillResults.onMissHit = false;
        }
        else if (attackerCharacter.hittingTheTargetType == BattleInvariant.Type.Down)
        {
            skillResults.onMissHit = true;
        }
        if (skillResults.onWeakHit == Strength.None || skillResults.onWeakHit == Strength.Weak)
        {
            if (attackerCharacter.criticalTheTargetType == BattleInvariant.Type.Non)
            {
                float num = affectEffectProperty.satisfactionRate;
                SufferStateProperty sufferStateProperty = currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.SatisfactionRateUp);
                if (sufferStateProperty.isActive)
                {
                    num += sufferStateProperty.upPercent;
                }
                SufferStateProperty sufferStateProperty2 = currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.SatisfactionRateDown);
                if (sufferStateProperty2.isActive)
                {
                    num -= sufferStateProperty2.downPercent;
                }
                if (attackerCharacter.isSelectSkill > 0)
                {
                    num += leaderSkillResult.satisfactionRateUpPercent;
                }
                num += attackerCharacter.chipAddCritical;
                skillResults.onCriticalHit = RandomExtension.Switch(num);
            }
            else if (attackerCharacter.criticalTheTargetType == BattleInvariant.Type.Up)
            {
                skillResults.onCriticalHit = true;
            }
            else if (attackerCharacter.criticalTheTargetType == BattleInvariant.Type.Down)
            {
                skillResults.onCriticalHit = false;
            }
        }
        if (!skillResults.onMissHit)
        {
            if (affectEffectProperty.powerType == PowerType.Percentage && skillResults.onWeakHit == Strength.Invalid)
            {
                skillResults.hitIconAffectEffect = AffectEffect.Invalid;
                skillResults.onMissHit           = false;
                skillResults.onWeakHit           = Strength.Invalid;
                skillResults.onCriticalHit       = false;
            }
            else if (skillResults.targetCharacter.currentSufferState.FindSufferState(SufferStateProperty.SufferType.TurnBarrier))
            {
                skillResults.hitIconAffectEffect = AffectEffect.TurnBarrier;
                skillResults.onMissHit           = false;
                skillResults.onWeakHit           = Strength.None;
                skillResults.onCriticalHit       = false;
            }
            else if (skillResults.targetCharacter.currentSufferState.FindSufferState(SufferStateProperty.SufferType.CountBarrier))
            {
                skillResults.hitIconAffectEffect = AffectEffect.CountBarrier;
                skillResults.onMissHit           = false;
                skillResults.onWeakHit           = Strength.None;
                skillResults.onCriticalHit       = false;
            }
            else if (skillResults.targetCharacter.currentSufferState.FindSufferState(SufferStateProperty.SufferType.TurnEvasion))
            {
                skillResults.hitIconAffectEffect = AffectEffect.TurnEvasion;
                skillResults.onMissHit           = false;
                skillResults.onWeakHit           = Strength.None;
                skillResults.onCriticalHit       = false;
            }
            else if (skillResults.targetCharacter.currentSufferState.FindSufferState(SufferStateProperty.SufferType.CountEvasion))
            {
                skillResults.hitIconAffectEffect = AffectEffect.CountEvasion;
                skillResults.onMissHit           = false;
                skillResults.onWeakHit           = Strength.None;
                skillResults.onCriticalHit       = false;
            }
            else if (affectEffectProperty.type == AffectEffect.ReferenceTargetHpRate)
            {
                SufferStateProperty.DamageRateResult reduceDamageRate = SkillStatus.GetReduceDamageRate(affectEffectProperty, attackerCharacter, targetCharacter);
                skillResults.damageRateResult = reduceDamageRate;
                float attributeDamegeResult = SkillStatus.GetAttributeDamegeResult(skillResults.onWeakHit);
                float num2 = 1f;
                if (skillResults.onCriticalHit)
                {
                    num2 = 1.2f;
                }
                int num3 = (int)(affectEffectProperty.damagePercent * (float)targetCharacter.hp);
                for (int i = 0; i < array.Length; i++)
                {
                    array[i] = (float)num3 * attributeDamegeResult * num2 * reduceDamageRate.damageRate;
                }
            }
            else if (affectEffectProperty.type == AffectEffect.RefHpRateNonAttribute)
            {
                SufferStateProperty.DamageRateResult reduceDamageRate2 = SkillStatus.GetReduceDamageRate(affectEffectProperty, attackerCharacter, targetCharacter);
                skillResults.damageRateResult = reduceDamageRate2;
                float num4 = 1f;
                if (skillResults.onCriticalHit)
                {
                    num4 = 1.2f;
                }
                int num5 = (int)(affectEffectProperty.damagePercent * (float)targetCharacter.hp);
                for (int j = 0; j < array.Length; j++)
                {
                    array[j] = (float)num5 * num4 * reduceDamageRate2.damageRate;
                }
            }
            else if (affectEffectProperty.powerType == PowerType.Percentage)
            {
                bool  flag = affectEffectProperty.techniqueType == TechniqueType.Physics;
                float attributeDamegeResult2 = SkillStatus.GetAttributeDamegeResult(skillResults.onWeakHit);
                float num6 = 1f;
                if (skillResults.onCriticalHit)
                {
                    num6 = 1.2f;
                }
                float num7 = 1f;
                if (onRandomAttack)
                {
                    num7 = UnityEngine.Random.Range(0.85f, 1f);
                }
                SufferStateProperty.DamageRateResult reduceDamageRate3 = SkillStatus.GetReduceDamageRate(affectEffectProperty, attackerCharacter, targetCharacter);
                skillResults.damageRateResult = reduceDamageRate3;
                float num8 = 1f;
                if (flag)
                {
                    SufferStateProperty sufferStateProperty3 = targetCharacter.currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.Counter);
                    if (sufferStateProperty3.isActive)
                    {
                        num8 *= sufferStateProperty3.recieveDamageRate;
                    }
                }
                else
                {
                    SufferStateProperty sufferStateProperty4 = targetCharacter.currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.Reflection);
                    if (sufferStateProperty4.isActive)
                    {
                        num8 *= sufferStateProperty4.recieveDamageRate;
                    }
                }
                float num9 = 1f;
                SufferStateProperty sufferStateProperty5 = currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.PowerCharge);
                if (sufferStateProperty5.isActive)
                {
                    if (flag)
                    {
                        num9 *= sufferStateProperty5.physicUpPercent;
                    }
                    else
                    {
                        num9 *= sufferStateProperty5.specialUpPercent;
                    }
                }
                float num10 = 1f;
                float num11 = 0f;
                float num12 = 0f;
                SufferStateProperty sufferStateProperty6 = currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.DamageRateUp);
                if (sufferStateProperty6.isActive)
                {
                    SufferStateProperty.DamageRateResult caseDamageRate = sufferStateProperty6.GetCaseDamageRate(affectEffectProperty, targetCharacter);
                    num11 += caseDamageRate.damageRate;
                }
                SufferStateProperty sufferStateProperty7 = currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.DamageRateDown);
                if (sufferStateProperty7.isActive)
                {
                    SufferStateProperty.DamageRateResult caseDamageRate2 = sufferStateProperty7.GetCaseDamageRate(affectEffectProperty, targetCharacter);
                    num12 += caseDamageRate2.damageRate;
                }
                num10 = Mathf.Max(0f, num10 + num11 - num12);
                for (int k = 0; k < array.Length; k++)
                {
                    int   num13 = 0;
                    float num14 = 1f;
                    foreach (int num15 in attackerCharacter.potencyChipIdList.Keys)
                    {
                        GameWebAPI.RespDataMA_ChipEffectM.ChipEffect chipEffectDataToId = ChipDataMng.GetChipEffectDataToId(num15.ToString());
                        if (k != 0 || chipEffectDataToId.effectTrigger.ToInt32() != 11)
                        {
                            GameWebAPI.RespDataMA_ChipEffectM.ChipEffect[] chipEffects = new GameWebAPI.RespDataMA_ChipEffectM.ChipEffect[]
                            {
                                chipEffectDataToId
                            };
                            num13 += ChipEffectStatus.GetSkillPowerCorrectionValue(chipEffects, affectEffectProperty, attackerCharacter, attackNum);
                            num14 += ChipEffectStatus.GetSkillDamageCorrectionValue(chipEffects, affectEffectProperty, attackerCharacter);
                        }
                    }
                    float num16 = 1f;
                    foreach (int num17 in targetCharacter.potencyChipIdList.Keys)
                    {
                        GameWebAPI.RespDataMA_ChipEffectM.ChipEffect chipEffectDataToId2 = ChipDataMng.GetChipEffectDataToId(num17.ToString());
                        if (k != 0 || chipEffectDataToId2.effectTrigger.ToInt32() != 11)
                        {
                            GameWebAPI.RespDataMA_ChipEffectM.ChipEffect[] chipEffects2 = new GameWebAPI.RespDataMA_ChipEffectM.ChipEffect[]
                            {
                                chipEffectDataToId2
                            };
                            num16 += ChipEffectStatus.GetSkillDamageCorrectionValue(chipEffects2, affectEffectProperty, targetCharacter);
                        }
                    }
                    float num18 = 0f;
                    float num19 = 0f;
                    SkillStatus.CalculationBasePower(ref num18, ref num19, flag, k == 0, attackerCharacter, targetCharacter);
                    int num20;
                    if (k == 0)
                    {
                        num20 = affectEffectProperty.GetPower(attackerCharacter);
                    }
                    else
                    {
                        List <ExtraEffectStatus> extraEffectStatus = BattleStateManager.current.battleStateData.extraEffectStatus;
                        List <ExtraEffectStatus> invocationList    = ExtraEffectStatus.GetInvocationList(extraEffectStatus, EffectStatusBase.EffectTriggerType.Usually);
                        num20 = ExtraEffectStatus.GetSkillPowerCorrectionValue(invocationList, affectEffectProperty, attackerCharacter);
                    }
                    if (affectEffectProperty.type == AffectEffect.DefenseThroughDamage || affectEffectProperty.type == AffectEffect.SpDefenseThroughDamage)
                    {
                        num19 = (float)affectEffectProperty.DefenseThrough;
                    }
                    if (num18 <= 0f)
                    {
                        array[k] = 0f;
                    }
                    else
                    {
                        num18 = Mathf.Max(num18, 0f);
                        num19 = Mathf.Max(num19, 1f);
                        float num21 = (float)attackerCharacter.level * 0.01f + 1f;
                        float num22 = (float)(num20 + num13) * (1f + leaderSkillResult.damageUpPercent);
                        float num23 = num21 * num22 * num18 * num9 / num19 + 2f;
                        float num24 = num14 * num16 * reduceDamageRate3.damageRate * num8 * num7 * num6 * attributeDamegeResult2 * num10;
                        array[k] = num23 * num24;
                    }
                }
            }
            else if (affectEffectProperty.powerType == PowerType.Fixable)
            {
                for (int l = 0; l < array.Length; l++)
                {
                    array[l] = (float)affectEffectProperty.damagePower;
                }
                skillResults.onWeakHit = Strength.None;
            }
        }
        skillResults.originalAttackPower = Mathf.FloorToInt(array[0]);
        skillResults.attackPower         = Mathf.FloorToInt(array[1]);
        if (skillResults.hitIconAffectEffect == AffectEffect.Damage && skillResults.attackPower <= 0)
        {
            skillResults.onMissHit     = true;
            skillResults.onCriticalHit = false;
        }
        if (skillResults.onWeakHit != Strength.Drain)
        {
            targetCharacter.hp -= skillResults.attackPower;
        }
        else
        {
            targetCharacter.hp += skillResults.attackPower;
        }
        if (skillResults.attackPower < skillResults.originalAttackPower)
        {
            skillResults.extraEffectType = ExtraEffectType.Down;
        }
        else if (skillResults.attackPower > skillResults.originalAttackPower)
        {
            skillResults.extraEffectType = ExtraEffectType.Up;
        }
        else
        {
            skillResults.extraEffectType = ExtraEffectType.Non;
        }
        return(skillResults);
    }
Exemple #16
0
    private IEnumerator InstantDeathFunction()
    {
        List <CharacterStateControl> characters = BattleFunctionUtility.GetSufferCharacters(SufferStateProperty.SufferType.InstantDeath, base.battleStateData);
        bool playedDeadSE = false;
        Dictionary <CharacterStateControl, bool> hit = new Dictionary <CharacterStateControl, bool>(characters.Count);

        if (characters.Count == 0)
        {
            yield break;
        }
        List <HitIcon> hitIconlist = new List <HitIcon>();

        Vector3[] hitIconPositions = BattleFunctionUtility.GetHitIconPositions(base.stateManager.uiControl, characters);
        for (int i = 0; i < characters.Count; i++)
        {
            SufferStateProperty sufferStateProperty = characters[i].currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.InstantDeath);
            hit.Add(characters[i], sufferStateProperty.isMiss);
            HitIcon item = base.stateManager.uiControl.ApplyShowHitIcon(i, hitIconPositions[i], AffectEffect.InstantDeath, 0, Strength.None, sufferStateProperty.isMiss, false, false, false, false, ExtraEffectType.Non, true, null);
            hitIconlist.Add(item);
        }
        this.ShowDigimon(characters);
        this.PlayCamera(characters);
        base.stateManager.cameraControl.PlayCameraShake();
        base.stateManager.uiControl.ShowCharacterHUDFunction(characters.ToArray());
        Action hudReposition = delegate()
        {
            foreach (CharacterStateControl characterStateControl2 in characters)
            {
                this.stateManager.uiControl.RepositionCharacterHUDPosition(new CharacterStateControl[]
                {
                    characterStateControl2
                });
            }
            for (int j = 0; j < characters.Count; j++)
            {
                Vector3 fixableCharacterCenterPosition2DFunction = this.stateManager.uiControl.GetFixableCharacterCenterPosition2DFunction(characters[j]);
                hitIconlist[j].HitIconReposition(fixableCharacterCenterPosition2DFunction);
            }
        };
        float       waitSecond = base.stateManager.stateProperty.skillAfterWaitSecond;
        IEnumerator wait       = base.stateManager.time.WaitForCertainPeriodTimeAction(waitSecond, hudReposition, null);

        while (wait.MoveNext())
        {
            yield return(null);
        }
        base.stateManager.cameraControl.StopCameraShake();
        foreach (CharacterStateControl characterStateControl in characters)
        {
            if (!hit[characterStateControl])
            {
                Action deathEffectPlay = delegate()
                {
                    if (!playedDeadSE)
                    {
                        this.stateManager.soundPlayer.PlayDeathSE();
                    }
                    playedDeadSE = true;
                };
                base.stateManager.threeDAction.PlayDeadAnimationCharacterAction(deathEffectPlay, characterStateControl);
                characterStateControl.Kill();
                characterStateControl.isDiedJustBefore = true;
            }
            characterStateControl.currentSufferState.RemoveSufferState(SufferStateProperty.SufferType.InstantDeath, false);
        }
        IEnumerator end_wait = base.stateManager.time.WaitForCertainPeriodTimeAction(base.stateManager.stateProperty.skillAfterWaitSecond, null, null);

        while (end_wait.MoveNext())
        {
            yield return(null);
        }
        yield break;
    }
    private static void CalculationBasePower(ref float attackCalced, ref float defenceCalced, bool isPhysics, bool isExtra, CharacterStateControl attackerCharacter, CharacterStateControl targetCharacter)
    {
        HaveSufferState currentSufferState  = attackerCharacter.currentSufferState;
        HaveSufferState currentSufferState2 = targetCharacter.currentSufferState;
        float           num  = 0f;
        float           num2 = 0f;
        float           num3 = 0f;
        float           num4 = 0f;
        int             num5;
        int             num6;

        if (isExtra)
        {
            num5 = ((!isPhysics) ? attackerCharacter.specialAttackPower : attackerCharacter.attackPower);
            num6 = ((!isPhysics) ? targetCharacter.specialDefencePower : targetCharacter.defencePower);
        }
        else
        {
            num5 = ((!isPhysics) ? attackerCharacter.extraSpecialAttackPower : attackerCharacter.extraAttackPower);
            num6 = ((!isPhysics) ? targetCharacter.extraSpecialDefencePower : targetCharacter.extraDefencePower);
        }
        float num7  = (!isPhysics) ? attackerCharacter.leaderSkillResult.specialAttackUpPercent : attackerCharacter.leaderSkillResult.attackUpPercent;
        float num8  = (!isPhysics) ? targetCharacter.leaderSkillResult.specialDefenceUpPercent : targetCharacter.leaderSkillResult.defenceUpPercent;
        float num9  = num7 * (float)num5;
        float num10 = num8 * (float)num6;

        global::Debug.Log(string.Format("onLeaderAttackUp {0} | onLeaderDefenceUp {1}", num9, num10));
        SufferStateProperty.SufferType sufferType  = SufferStateProperty.SufferType.AttackUp;
        SufferStateProperty.SufferType sufferType2 = SufferStateProperty.SufferType.AttackDown;
        SufferStateProperty.SufferType sufferType3 = SufferStateProperty.SufferType.DefenceUp;
        SufferStateProperty.SufferType sufferType4 = SufferStateProperty.SufferType.DefenceDown;
        if (!isPhysics)
        {
            sufferType  = SufferStateProperty.SufferType.SpAttackUp;
            sufferType2 = SufferStateProperty.SufferType.SpAttackDown;
            sufferType3 = SufferStateProperty.SufferType.SpDefenceUp;
            sufferType4 = SufferStateProperty.SufferType.SpDefenceDown;
        }
        SufferStateProperty sufferStateProperty = currentSufferState.GetSufferStateProperty(sufferType);

        if (sufferStateProperty.isActive)
        {
            num = sufferStateProperty.upPercent * (float)num5;
        }
        SufferStateProperty sufferStateProperty2 = currentSufferState.GetSufferStateProperty(sufferType2);

        if (sufferStateProperty2.isActive)
        {
            num2 = sufferStateProperty2.downPercent * (float)num5;
        }
        SufferStateProperty sufferStateProperty3 = currentSufferState2.GetSufferStateProperty(sufferType3);

        if (sufferStateProperty3.isActive)
        {
            num3 = sufferStateProperty3.upPercent * (float)num6;
        }
        SufferStateProperty sufferStateProperty4 = currentSufferState2.GetSufferStateProperty(sufferType4);

        if (sufferStateProperty4.isActive)
        {
            num4 = sufferStateProperty4.downPercent * (float)num6;
        }
        attackCalced  = (float)num5 + num - num2 + num9;
        defenceCalced = (float)num6 + num3 - num4 + num10;
        attackCalced  = Mathf.Min(attackCalced, (float)num5 * 3f);
        attackCalced  = Mathf.Max(attackCalced, 0f);
        defenceCalced = Mathf.Min(defenceCalced, (float)num6 * 3f);
        defenceCalced = Mathf.Max(defenceCalced, 0f);
        global::Debug.Log("=========================================");
        global::Debug.Log("onAttackUp : " + num);
        global::Debug.Log("onAttackDown : " + num2);
        global::Debug.Log("onDefenceUp : " + num3);
        global::Debug.Log("onDefenceDown : " + num4);
        global::Debug.Log(string.Format("攻撃 {0}/(上限{1}/下限{2}/基礎{3})", new object[]
        {
            attackCalced,
            (float)num5 * 3f,
            0f,
            num5
        }));
        global::Debug.Log(string.Format("防御 {0}/(上限{1}/下限{2}/基礎{3})", new object[]
        {
            defenceCalced,
            (float)num6 * 3f,
            0f,
            num6
        }));
    }
Exemple #18
0
    private IEnumerator HitEffectFunction(SufferStateProperty.SufferType[] sufferTypes, CharacterAnimationType characterAnimationType)
    {
        List <CharacterStateControl> characters = new List <CharacterStateControl>();

        foreach (SufferStateProperty.SufferType sufferType in sufferTypes)
        {
            List <CharacterStateControl> sufferCharacters = this.GetSufferCharacters(sufferType);
            foreach (CharacterStateControl characterStateControl in sufferCharacters)
            {
                SufferStateProperty sufferStateProperty = characterStateControl.currentSufferState.GetSufferStateProperty(sufferType);
                if (sufferStateProperty.isTurnRate && !characters.Contains(characterStateControl))
                {
                    characters.Add(characterStateControl);
                }
            }
        }
        if (characters.Count == 0)
        {
            yield break;
        }
        base.stateManager.uiControl.HideCharacterHUDFunction();
        base.stateManager.SetBattleScreen(BattleScreen.PoisonHit);
        if (base.hierarchyData.batteWaves[base.battleStateData.currentWaveNumber].cameraType == 1)
        {
            base.stateManager.cameraControl.PlayCameraMotionAction("BigBoss/0002_command", base.battleStateData.stageSpawnPoint, true);
        }
        else
        {
            base.stateManager.cameraControl.PlayCameraMotionAction("0002_command", base.battleStateData.stageSpawnPoint, true);
        }
        HitEffectParams[] hitEffectParams = null;
        foreach (SufferStateProperty.SufferType sufferType2 in sufferTypes)
        {
            string            key     = sufferType2.ToString();
            HitEffectParams[] @object = base.battleStateData.hitEffects.GetObject(key);
            if (@object != null)
            {
                hitEffectParams = @object;
                break;
            }
        }
        base.stateManager.soundPlayer.TryPlaySE(hitEffectParams[0]);
        for (int k = 0; k < characters.Count; k++)
        {
            base.stateManager.threeDAction.PlayAnimationCharacterAction(characterAnimationType, new CharacterStateControl[]
            {
                characters[k]
            });
            base.stateManager.threeDAction.PlayHitEffectAction(hitEffectParams[k], characters[k]);
        }
        float       waitSecond = base.stateManager.stateProperty.poisonHitEffectWaitSecond;
        IEnumerator wait       = base.stateManager.time.WaitForCertainPeriodTimeAction(waitSecond, null, null);

        while (wait.MoveNext())
        {
            yield return(null);
        }
        for (int l = 0; l < characters.Count; l++)
        {
            base.stateManager.threeDAction.StopHitEffectAction(new HitEffectParams[]
            {
                hitEffectParams[l]
            });
        }
        base.stateManager.soundPlayer.TryStopSE(hitEffectParams[0]);
        base.stateManager.soundPlayer.StopHitEffectSE();
        yield break;
    }
Exemple #19
0
    public int[] getOverrideTolerances(ref bool doOverrideData)
    {
        int[] array = new int[14];
        SufferStateProperty sufferStateProperty = this.currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.ChangeToleranceUp);

        if (sufferStateProperty.dataDictionary.Count != 0)
        {
            doOverrideData = true;
            foreach (List <SufferStateProperty.Data> list in sufferStateProperty.dataDictionary.Values)
            {
                foreach (SufferStateProperty.Data data in list)
                {
                    if (data.isActive)
                    {
                        for (int i = 0; i < array.Length; i++)
                        {
                            if ((int)data.toleranceValue[i] >= 100)
                            {
                                if (array[i] < 100)
                                {
                                    array[i] = (int)data.toleranceValue[i];
                                }
                            }
                            else if (array[i] < 100)
                            {
                                array[i] += (int)data.toleranceValue[i];
                            }
                        }
                    }
                }
            }
        }
        sufferStateProperty = this.currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.ChangeToleranceDown);
        if (sufferStateProperty.dataDictionary.Count != 0)
        {
            doOverrideData = true;
            foreach (List <SufferStateProperty.Data> list2 in sufferStateProperty.dataDictionary.Values)
            {
                foreach (SufferStateProperty.Data data2 in list2)
                {
                    if (data2.isActive)
                    {
                        for (int j = 0; j < array.Length; j++)
                        {
                            if ((int)data2.toleranceValue[j] >= 100)
                            {
                                if (array[j] < 100)
                                {
                                    array[j] = (int)data2.toleranceValue[j];
                                }
                            }
                            else if (array[j] < 100)
                            {
                                array[j] += (int)data2.toleranceValue[j];
                            }
                        }
                    }
                }
            }
        }
        return(array);
    }
    protected override IEnumerator MainRoutine()
    {
        CharacterStateControl attacker = base.battleStateData.currentSelectCharacterState;

        if ((!attacker.isEnemy && !RandomExtension.Switch(base.hierarchyData.playerPursuitPercentage)) || (attacker.isEnemy && !RandomExtension.Switch(base.hierarchyData.enemyPursuitPercentage)))
        {
            yield break;
        }
        if (!attacker.currentSkillStatus.ThisSkillIsAttack)
        {
            yield break;
        }
        bool isConfusion = false;
        SufferStateProperty confusionSuffer = attacker.currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.Confusion);

        if (confusionSuffer.isActive && confusionSuffer.GetOccurrenceFreeze())
        {
            isConfusion = true;
        }
        CharacterStateControl[] targets;
        if (!isConfusion)
        {
            targets = ((!attacker.isEnemy) ? base.battleStateData.enemies : base.battleStateData.playerCharacters);
        }
        else
        {
            targets = (attacker.isEnemy ? base.battleStateData.enemies : base.battleStateData.playerCharacters);
        }
        int count = 0;

        for (int i = 0; i < targets.Length; i++)
        {
            if (targets[i].isDied)
            {
                count++;
            }
        }
        if (count == targets.Length)
        {
            yield break;
        }
        int index = 0;

        do
        {
            index = UnityEngine.Random.Range(0, targets.Length);
            attacker.targetCharacter = targets[index];
        }while (attacker.targetCharacter.isDied);
        base.stateManager.uiControl.ApplyTurnActionBarSwipeout(true);
        base.stateManager.uiControl.ApplySkillName(true, StringMaster.GetString("BattleUI-46"), attacker);
        IEnumerator wait2 = base.stateManager.time.WaitForCertainPeriodTimeAction(0.5f, null, null);

        while (wait2.MoveNext())
        {
            object obj = wait2.Current;
            yield return(obj);
        }
        base.stateManager.uiControl.ApplyTurnActionBarSwipeout(false);
        attacker.isSelectSkill = attacker.SkillIdToIndexOf(base.stateManager.publicAttackSkillId);
        attacker.isMultiAreaRandomDamageSkill = true;
        base.SetState(typeof(SubStateMultiSkillDetailsFunction));
        while (base.isWaitState)
        {
            yield return(null);
        }
        base.SetState(typeof(SubStatePlayChipEffect));
        while (base.isWaitState)
        {
            yield return(null);
        }
        attacker.isMultiAreaRandomDamageSkill = false;
        yield break;
    }
Exemple #21
0
    private IEnumerator RegenerateFunction()
    {
        List <CharacterStateControl> characters = this.GetSufferCharacters(SufferStateProperty.SufferType.Regenerate);

        if (characters.Count == 0)
        {
            yield break;
        }
        foreach (CharacterStateControl characterStateControl in base.stateManager.battleStateData.GetTotalCharacters())
        {
            base.stateManager.threeDAction.ShowAliveCharactersAction(new CharacterStateControl[]
            {
                characterStateControl
            });
            base.stateManager.threeDAction.PlayIdleAnimationUndeadCharactersAction(new CharacterStateControl[]
            {
                characterStateControl
            });
        }
        base.stateManager.uiControl.HideCharacterHUDFunction();
        base.stateManager.SetBattleScreen(BattleScreen.PoisonHit);
        if (base.hierarchyData.batteWaves[base.battleStateData.currentWaveNumber].cameraType == 1)
        {
            base.stateManager.cameraControl.PlayCameraMotionAction("BigBoss/0002_command", base.battleStateData.stageSpawnPoint, true);
        }
        else
        {
            base.stateManager.cameraControl.PlayCameraMotionAction("0002_command", base.battleStateData.stageSpawnPoint, true);
        }
        HitEffectParams regenerate_effect = BattleEffectManager.Instance.GetEffect(AffectEffect.HpRevival.ToString()) as HitEffectParams;

        this.use_effect_params_.Add(regenerate_effect);
        List <int>  damage = new List <int>();
        List <bool> isMiss = new List <bool>();

        for (int j = 0; j < characters.Count; j++)
        {
            SufferStateProperty sufferStateProperty = characters[j].currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.Regenerate);
            int regenerate = sufferStateProperty.GetRegenerate(characters[j]);
            characters[j].hp += regenerate;
            damage.Add(regenerate);
            isMiss.Add(false);
            base.stateManager.threeDAction.PlayAnimationCharacterAction(CharacterAnimationType.revival, new CharacterStateControl[]
            {
                characters[j]
            });
        }
        base.stateManager.soundPlayer.TryPlaySE(regenerate_effect);
        List <HitIcon> hitIconlist = new List <HitIcon>();

        Vector3[] hitIconPositions = this.GetHitIconPositions(characters);
        for (int k = 0; k < characters.Count; k++)
        {
            HitIcon item = base.stateManager.uiControl.ApplyShowHitIcon(k, hitIconPositions[k], AffectEffect.Regenerate, damage[k], Strength.None, isMiss[k], false, false, false, false, ExtraEffectType.Non, true, null);
            hitIconlist.Add(item);
        }
        base.stateManager.uiControl.ShowCharacterHUDFunction(characters.ToArray());
        Action hudReposition = delegate()
        {
            foreach (CharacterStateControl characterStateControl2 in characters)
            {
                this.stateManager.uiControl.RepositionCharacterHUDPosition(new CharacterStateControl[]
                {
                    characterStateControl2
                });
            }
            for (int l = 0; l < characters.Count; l++)
            {
                Vector3 fixableCharacterCenterPosition2DFunction = this.stateManager.uiControl.GetFixableCharacterCenterPosition2DFunction(characters[l]);
                hitIconlist[l].HitIconReposition(fixableCharacterCenterPosition2DFunction);
            }
        };
        float       waitSecond = base.stateManager.stateProperty.poisonHitEffectWaitSecond;
        IEnumerator wait       = base.stateManager.time.WaitForCertainPeriodTimeAction(waitSecond, hudReposition, null);

        while (wait.MoveNext())
        {
            yield return(null);
        }
        base.stateManager.soundPlayer.TryStopSE(regenerate_effect);
        base.stateManager.soundPlayer.StopHitEffectSE();
        yield break;
    }
    public void SetSufferState(SufferStateProperty.Data data, CharacterStateControl status = null)
    {
        SufferStateProperty sufferStateProperty = this.sufferStatePropertyDictionary[data.sufferType];

        sufferStateProperty.AddSufferStateProperty(data);
    }
Exemple #23
0
 public void RoundCountingFunction(CharacterStateControl[] totalCharacters, int[] apRevivals)
 {
     foreach (CharacterStateControl characterStateControl in this.GetTotalCharacters())
     {
         if (!characterStateControl.isDied)
         {
             SufferStateProperty sufferStateProperty = characterStateControl.currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.Sleep);
             if (sufferStateProperty.isActive && sufferStateProperty.GetSleepGetupOccurrence())
             {
                 characterStateControl.currentSufferState.RemoveSufferState(SufferStateProperty.SufferType.Sleep, false);
             }
         }
     }
     for (int j = 0; j < totalCharacters.Length; j++)
     {
         CharacterStateControl characterStateControl2 = totalCharacters[j];
         if (!characterStateControl2.isDied)
         {
             bool flag = false;
             if (characterStateControl2.currentSufferState.FindSufferState(SufferStateProperty.SufferType.ApRevival))
             {
                 int revivalAp = characterStateControl2.currentSufferState.GetSufferStateProperty(SufferStateProperty.SufferType.ApRevival).GetRevivalAp(characterStateControl2.maxAp);
                 characterStateControl2.ap   += revivalAp;
                 characterStateControl2.upAp += revivalAp;
                 flag = true;
             }
             if (apRevivals != null)
             {
                 int num = apRevivals[j];
                 if (num > 0)
                 {
                     flag = true;
                     characterStateControl2.ap   += num;
                     characterStateControl2.upAp += num;
                 }
             }
             if (characterStateControl2.StartMyRoundApUp() || flag)
             {
                 int num2;
                 if (characterStateControl2.isEnemy)
                 {
                     num2 = base.battleStateData.playerCharacters.Length + characterStateControl2.myIndex;
                 }
                 else
                 {
                     num2 = characterStateControl2.myIndex;
                 }
                 base.battleStateData.isRoundStartApRevival[num2] = true;
             }
         }
         else
         {
             characterStateControl2.ApZero();
         }
         characterStateControl2.HateReset();
     }
     base.battleStateData.totalRoundNumber++;
     if (!base.battleStateData.GetCharactersDeath(true))
     {
         base.battleStateData.currentRoundNumber++;
     }
     base.stateManager.uiControl.ApplyWaveAndRound(base.battleStateData.currentWaveNumber, base.battleStateData.currentRoundNumber);
     foreach (CharacterStateControl characterStateControl3 in this.GetTotalCharacters())
     {
         if (!characterStateControl3.isDied)
         {
             characterStateControl3.currentSufferState.RoundUpdate();
         }
     }
 }