public static int GetSkillPowerCorrectionValue(List <ExtraEffectStatus> extraEffectStatusList, AffectEffectProperty skillPropety, CharacterStateControl character) { List <ExtraEffectStatus> list = ChipEffectStatus.CheckStageEffectInvalid(extraEffectStatusList, character); if (list.Count == 0) { return(skillPropety.GetPower(character)); } return((int)ExtraEffectStatus.GetExtraEffectCorrectionValue(list, (float)skillPropety.GetPower(character), character.characterStatus.monsterIntegrationIds, character.groupId, character.tolerance, character.characterDatas.tribe, character.characterDatas.growStep, skillPropety, character.currentSufferState, ExtraEffectStatus.GetExtraTargetType(character), EffectStatusBase.ExtraEffectType.SkillPower)); }
private static int GetExtraStageValue(int baseValue, MonsterData monsterData, MonsterData[] party, GameWebAPI.RespDataMA_GetWorldDungeonExtraEffectM.WorldDungeonExtraEffectM[] effectArray, AffectEffectProperty affectEffectProperty, EffectStatusBase.ExtraEffectType extraEffectType) { if (effectArray == null || effectArray.Length == 0) { return(baseValue); } List <ExtraEffectStatus> list = new List <ExtraEffectStatus>(); foreach (GameWebAPI.RespDataMA_GetWorldDungeonExtraEffectM.WorldDungeonExtraEffectM worldDungeonExtraEffectM in effectArray) { ExtraEffectStatus item = new ExtraEffectStatus(worldDungeonExtraEffectM); list.Add(item); } if (extraEffectType == EffectStatusBase.ExtraEffectType.SkillPower) { return(ExtraEffectStatus.GetExtraEffectCorrectionValue(ExtraEffectUtil.GetAreaId(), list, affectEffectProperty.GetPower(null), party, new MonsterData[0], monsterData, affectEffectProperty, extraEffectType)); } if (extraEffectType == EffectStatusBase.ExtraEffectType.SkillHit) { return(ExtraEffectStatus.GetExtraEffectCorrectionValue(ExtraEffectUtil.GetAreaId(), list, (int)(affectEffectProperty.hitRate * 100f), party, new MonsterData[0], monsterData, affectEffectProperty, extraEffectType)); } return(ExtraEffectStatus.GetExtraEffectCorrectionValue(ExtraEffectUtil.GetAreaId(), list, baseValue, party, new MonsterData[0], monsterData, null, extraEffectType)); }
public static void GetExtraEffectFluctuationValue(out int result, out int change, MonsterData monsterData, GameWebAPI.RespDataMA_GetWorldDungeonExtraEffectM.WorldDungeonExtraEffectM[] effectArray, EffectStatusBase.ExtraEffectType extraEffectType, int skillType = 0, bool isChipValue = true) { int num = (int)ExtraEffectUtil.GetStatusValue(extraEffectType, monsterData, skillType); int num2 = 0; if (isChipValue) { num2 = ExtraEffectUtil.GetExtraChipValue(monsterData, extraEffectType); } MonsterData[] party = new MonsterData[] { monsterData }; if (CMD_PartyEdit.instance != null) { MonsterData[] array = CMD_PartyEdit.instance.GetSelectedMD().ToArray(); bool flag = array.Where((MonsterData item) => item.userMonster.userMonsterId == monsterData.userMonster.userMonsterId).Any <MonsterData>(); if (flag) { party = array; } else { GameWebAPI.RespDataMN_GetDeckList.DeckList[] deckList = DataMng.Instance().RespDataMN_DeckList.deckList; string deckNoText = DataMng.Instance().RespDataMN_DeckList.selectDeckNum; GameWebAPI.RespDataMN_GetDeckList.DeckList deckList2 = deckList.Where((GameWebAPI.RespDataMN_GetDeckList.DeckList item) => item.deckNum == deckNoText.ToString()).SingleOrDefault <GameWebAPI.RespDataMN_GetDeckList.DeckList>(); bool flag2 = deckList2.monsterList.Where((GameWebAPI.RespDataMN_GetDeckList.MonsterList item) => item.userMonsterId == monsterData.userMonster.userMonsterId).Any <GameWebAPI.RespDataMN_GetDeckList.MonsterList>(); if (flag2) { List <MonsterData> list = new List <MonsterData>(); foreach (GameWebAPI.RespDataMN_GetDeckList.MonsterList monsterList2 in deckList2.monsterList) { MonsterData monsterDataByUserMonsterID = MonsterDataMng.Instance().GetMonsterDataByUserMonsterID(monsterList2.userMonsterId, false); list.Add(monsterDataByUserMonsterID); } party = list.ToArray(); } } } int num3 = 0; AffectEffectProperty affectEffectProperty = null; if (extraEffectType == EffectStatusBase.ExtraEffectType.SkillPower) { List <AffectEffectProperty> affectEffectPropertyListForUtil = BattleServerControl.GetAffectEffectPropertyListForUtil(num.ToString()); if (affectEffectPropertyListForUtil != null && affectEffectPropertyListForUtil.Count <AffectEffectProperty>() > 0) { affectEffectProperty = affectEffectPropertyListForUtil[0]; num = affectEffectProperty.GetPower(null); num3 = ExtraEffectUtil.GetExtraStageValue(num, monsterData, party, effectArray, affectEffectProperty, extraEffectType); } else { num = num3; } } else if (extraEffectType == EffectStatusBase.ExtraEffectType.SkillHit) { List <AffectEffectProperty> affectEffectPropertyListForUtil2 = BattleServerControl.GetAffectEffectPropertyListForUtil(num.ToString()); if (affectEffectPropertyListForUtil2 != null && affectEffectPropertyListForUtil2.Count <AffectEffectProperty>() > 0) { affectEffectProperty = affectEffectPropertyListForUtil2[0]; num = (int)(affectEffectProperty.hitRate * 100f); num3 = ExtraEffectUtil.GetExtraStageValue(num, monsterData, party, effectArray, affectEffectProperty, extraEffectType); } else { num = num3; } } else { num3 = ExtraEffectUtil.GetExtraStageValue(num, monsterData, party, effectArray, affectEffectProperty, extraEffectType); } result = num3 + num2; change = 0; if (num2 > 0 || num < num3) { change = 1; } else if (num2 < 0 || num > num3) { change = -1; } }
public void GetDifferenceExtraPram(out int upCount, out int downCount) { upCount = 0; downCount = 0; int num = this.extraMaxHp - this.maxHp; if (num > 0) { upCount++; } else if (num < 0) { downCount++; } num = this.extraAttackPower - this.attackPower; if (num > 0) { upCount++; } else if (num < 0) { downCount++; } num = this.extraDefencePower - this.defencePower; if (num > 0) { upCount++; } else if (num < 0) { downCount++; } num = this.extraSpecialAttackPower - this.specialAttackPower; if (num > 0) { upCount++; } else if (num < 0) { downCount++; } num = this.extraSpecialDefencePower - this.specialDefencePower; if (num > 0) { upCount++; } else if (num < 0) { downCount++; } num = this.extraSpeed - this.speed; if (num > 0) { upCount++; } else if (num < 0) { downCount++; } if (this.skillStatus.Length > 1) { AffectEffectProperty affectEffectFirst = this.skillStatus[1].GetAffectEffectFirst(); if (affectEffectFirst != null) { if (AffectEffectProperty.IsDamage(affectEffectFirst.type)) { int num2 = this.m_extraDeathblowSkillPower - affectEffectFirst.GetPower(this); if (num2 > 0) { upCount++; } else if (num2 < 0) { downCount++; } } float num3 = this.m_extraDeathblowSkillHitRate - affectEffectFirst.hitRate; if (num3 > 0f) { upCount++; } else if (num3 < 0f) { downCount++; } } } if (this.skillStatus.Length > 2) { AffectEffectProperty affectEffectFirst2 = this.skillStatus[2].GetAffectEffectFirst(); if (affectEffectFirst2 != null) { if (AffectEffectProperty.IsDamage(affectEffectFirst2.type)) { int num4 = this.m_extraInheritanceSkillPower - affectEffectFirst2.GetPower(this); if (num4 > 0) { upCount++; } else if (num4 < 0) { downCount++; } } float num5 = this.m_extraInheritanceSkillHitRate - affectEffectFirst2.hitRate; if (num5 > 0f) { upCount++; } else if (num5 < 0f) { downCount++; } } } if (this.skillStatus.Length > 3) { AffectEffectProperty affectEffectFirst3 = this.skillStatus[3].GetAffectEffectFirst(); if (affectEffectFirst3 != null) { if (AffectEffectProperty.IsDamage(affectEffectFirst3.type)) { int num6 = this.m_extraInheritanceSkillPower2 - affectEffectFirst3.GetPower(this); if (num6 > 0) { upCount++; } else if (num6 < 0) { downCount++; } } float num7 = this.m_extraInheritanceSkillHitRate2 - affectEffectFirst3.hitRate; if (num7 > 0f) { upCount++; } else if (num7 < 0f) { downCount++; } } } }
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); }
public int GetPowerFirst(CharacterStateControl characterStateControl = null) { AffectEffectProperty affectEffectAttackFirst = this.GetAffectEffectAttackFirst(); return((affectEffectAttackFirst == null) ? 0 : affectEffectAttackFirst.GetPower(characterStateControl)); }
public static int GetSkillPowerCorrectionValue(GameWebAPI.RespDataMA_ChipEffectM.ChipEffect[] chipEffects, AffectEffectProperty skillPropety, CharacterStateControl character, int attackNum = 0) { return((int)ChipEffectStatus.GetChipEffectValueToFloat(chipEffects, (float)skillPropety.GetPower(character), character.isEnemy, character.characterStatus.monsterIntegrationIds, character.groupId, character.tolerance, character.characterDatas.tribe, character.characterDatas.growStep, skillPropety, character.currentSufferState, ChipEffectStatus.GetTargetType(character, character), EffectStatusBase.ExtraEffectType.SkillPower, attackNum)); }