public static List <ExtraEffectStatus> GetInvocationList(List <ExtraEffectStatus> extraEffectStatuses, EffectStatusBase.EffectTriggerType effectTriggerType) { List <ExtraEffectStatus> list = new List <ExtraEffectStatus>(); foreach (ExtraEffectStatus extraEffectStatus in extraEffectStatuses) { EffectStatusBase.EffectTriggerType effectTrigger = (EffectStatusBase.EffectTriggerType)extraEffectStatus.EffectTrigger; if (effectTrigger == effectTriggerType) { list.Add(extraEffectStatus); } } List <ExtraEffectStatus> list2 = new List <ExtraEffectStatus>(); if (effectTriggerType != EffectStatusBase.EffectTriggerType.WaveStarted) { if (effectTriggerType != EffectStatusBase.EffectTriggerType.RoundEnd) { list2.AddRange(list); } else { List <ExtraEffectStatus> loopPlayExtraEffectStatusList = ExtraEffectStatus.GetLoopPlayExtraEffectStatusList(list, BattleStateManager.current.battleStateData.currentRoundNumber); list2.AddRange(loopPlayExtraEffectStatusList); } } else { int targetNumber = BattleStateManager.current.battleStateData.currentWaveNumber + 1; List <ExtraEffectStatus> loopPlayExtraEffectStatusList2 = ExtraEffectStatus.GetLoopPlayExtraEffectStatusList(list, targetNumber); list2.AddRange(loopPlayExtraEffectStatusList2); } return(list2); }
private static bool CheckStageEffectInvalid(CharacterStateControl chipTarget, ExtraEffectStatus extraEffectStatus) { BattleStateManager current = BattleStateManager.current; CharacterStateControl[] totalCharacters = current.battleStateData.GetTotalCharacters(); foreach (CharacterStateControl characterStateControl in totalCharacters) { if (!(characterStateControl == null)) { ChipEffectStatus.TargetType targetType = ChipEffectStatus.GetTargetType(characterStateControl, chipTarget); foreach (int num in characterStateControl.chipIds) { GameWebAPI.RespDataMA_ChipEffectM.ChipEffect[] array2 = ChipDataMng.GetChipEffectData(num.ToString()); array2 = ChipEffectStatus.GetStageEffectInvalidList(BattleStateManager.current.hierarchyData.areaId, array2, extraEffectStatus).ToArray(); if (array2.Length > 0) { List <GameWebAPI.RespDataMA_ChipEffectM.ChipEffect> totalChipEffectStatusList = ChipEffectStatus.GetTotalChipEffectStatusList(array2, chipTarget.isEnemy, chipTarget.characterStatus.monsterIntegrationIds, chipTarget.groupId, chipTarget.tolerance, chipTarget.characterDatas.tribe, chipTarget.characterDatas.growStep, null, null, targetType, EffectStatusBase.ExtraEffectType.StageEffextInvalid); if (totalChipEffectStatusList.Count > 0) { return(true); } } } } } return(false); }
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); }
private IEnumerator PlayDefaultEffect(ExtraEffectStatus extraEffectStatus) { List <CharacterStateControl> targetList = new List <CharacterStateControl>(); foreach (CharacterStateControl characterStateControl in base.battleStateData.GetTotalCharacters()) { if (!characterStateControl.isDied && extraEffectStatus.IsHitExtraEffect(characterStateControl, EffectStatusBase.ExtraEffectType.Skill)) { targetList.Add(characterStateControl); } } if (targetList.Count == 0) { yield break; } if (!this.isShowBattleStageEffect) { base.stateManager.uiControl.ShowBattleExtraEffect(BattleExtraEffectUI.AnimationType.Stage); yield return(null); while (base.stateManager.uiControl.IsBattleExtraEffect()) { yield return(null); } base.stateManager.uiControl.HideBattleExtraEffect(); this.isShowBattleStageEffect = true; } string key = ((int)extraEffectStatus.EffectValue).ToString(); SkillStatus status = base.hierarchyData.GetSkillStatus(key); IEnumerator playFunction = null; if (status != null) { playFunction = this.PlaySkill(status, targetList); } else { playFunction = this.PlayNotSkill(extraEffectStatus, targetList); } while (playFunction.MoveNext()) { yield return(null); } this.subStateEnemiesItemDroppingFunction.Init(targetList.Where((CharacterStateControl item) => item.isDied).ToArray <CharacterStateControl>()); base.SetState(this.subStateEnemiesItemDroppingFunction.GetType()); while (base.isWaitState) { yield return(null); } IEnumerator wait = base.stateManager.time.WaitForCertainPeriodTimeAction(base.stateManager.stateProperty.skillAfterWaitSecond, null, null); while (wait.MoveNext()) { object obj = wait.Current; yield return(obj); } base.stateManager.uiControl.HideCharacterHUDFunction(); base.stateManager.uiControl.ApplyHideHitIcon(); yield break; }
public static int GetExtraEffectCorrectionValue(int areaId, List <ExtraEffectStatus> extraEffectStatusList, int baseValue, MonsterData[] chipPlayers, MonsterData[] chipEnemys, MonsterData chipTarget, AffectEffectProperty affectEffectProperty, EffectStatusBase.ExtraEffectType effectType) { List <ExtraEffectStatus> list = ChipEffectStatus.CheckStageEffectInvalid(areaId, extraEffectStatusList, chipPlayers, chipEnemys, chipTarget); if (list.Count == 0) { return(baseValue); } bool flag = chipEnemys.Where((MonsterData item) => item.userMonster.userMonsterId == chipTarget.userMonster.userMonsterId).Any <MonsterData>(); GameWebAPI.RespDataMA_GetMonsterMG.MonsterM group = MonsterMaster.GetMonsterMasterByMonsterGroupId(chipTarget.monsterM.monsterGroupId).Group; GameWebAPI.RespDataMA_MonsterIntegrationGroupMaster responseMonsterIntegrationGroupMaster = MasterDataMng.Instance().ResponseMonsterIntegrationGroupMaster; GameWebAPI.RespDataMA_MonsterIntegrationGroupMaster.MonsterIntegrationGroup[] source = responseMonsterIntegrationGroupMaster.monsterIntegrationGroupM.Where((GameWebAPI.RespDataMA_MonsterIntegrationGroupMaster.MonsterIntegrationGroup item) => item.monsterId == chipTarget.monsterM.monsterId).ToArray <GameWebAPI.RespDataMA_MonsterIntegrationGroupMaster.MonsterIntegrationGroup>(); string[] monsterIntegrationIds = source.Select((GameWebAPI.RespDataMA_MonsterIntegrationGroupMaster.MonsterIntegrationGroup item) => item.monsterIntegrationId).ToArray <string>(); GameWebAPI.RespDataMA_GetMonsterResistanceM.MonsterResistanceM resistanceMaster = MonsterResistanceData.GetResistanceMaster(chipTarget.monsterM.resistanceId); List <GameWebAPI.RespDataMA_GetMonsterResistanceM.MonsterResistanceM> uniqueResistanceList = MonsterResistanceData.GetUniqueResistanceList(chipTarget.GetResistanceIdList()); GameWebAPI.RespDataMA_GetMonsterResistanceM.MonsterResistanceM data = MonsterResistanceData.AddResistanceFromMultipleTranceData(resistanceMaster, uniqueResistanceList); Tolerance tolerance = ServerToBattleUtility.ResistanceToTolerance(data); GrowStep growStep = MonsterGrowStepData.ToGrowStep(group.growStep); List <ExtraEffectStatus> totalExtraEffectStatusList = ExtraEffectStatus.GetTotalExtraEffectStatusList(list, monsterIntegrationIds, chipTarget.monsterM.monsterGroupId, tolerance, group.tribe, growStep, affectEffectProperty, null, (!flag) ? ExtraEffectStatus.ExtraTargetType.Player : ExtraEffectStatus.ExtraTargetType.Enemy, effectType); if (totalExtraEffectStatusList.Count > 0) { return((int)ExtraEffectStatus.GetCorrectionValue((float)baseValue, totalExtraEffectStatusList)); } return(baseValue); }
private static float GetExtraEffectCorrectionValue(List <ExtraEffectStatus> extraEffectStatusList, float baseValue, string[] monsterIntegrationIds, string groupId, Tolerance tolerance, string tribe, GrowStep growStep, AffectEffectProperty skillPropety, HaveSufferState currentSufferState, ExtraEffectStatus.ExtraTargetType targetType, EffectStatusBase.ExtraEffectType effectType) { List <ExtraEffectStatus> totalExtraEffectStatusList = ExtraEffectStatus.GetTotalExtraEffectStatusList(extraEffectStatusList, monsterIntegrationIds, groupId, tolerance, tribe, growStep, skillPropety, currentSufferState, targetType, effectType); if (totalExtraEffectStatusList.Count > 0) { return(ExtraEffectStatus.GetCorrectionValue(baseValue, totalExtraEffectStatusList)); } return(baseValue); }
public static int GetExtraEffectValue(List <ExtraEffectStatus> extraEffectStatusList, int baseValue, CharacterStateControl character, EffectStatusBase.ExtraEffectType effectType) { List <ExtraEffectStatus> list = ChipEffectStatus.CheckStageEffectInvalid(extraEffectStatusList, character); if (list.Count == 0) { return(baseValue); } return((int)ExtraEffectStatus.GetExtraEffectCorrectionValue(list, (float)baseValue, character.characterStatus.monsterIntegrationIds, character.groupId, character.tolerance, character.characterDatas.tribe, character.characterDatas.growStep, null, character.currentSufferState, ExtraEffectStatus.GetExtraTargetType(character), effectType)); }
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)); }
public static float GetSkillHitRateCorrectionValue(List <ExtraEffectStatus> extraEffectStatusList, AffectEffectProperty skillPropety, CharacterStateControl character) { List <ExtraEffectStatus> list = ChipEffectStatus.CheckStageEffectInvalid(extraEffectStatusList, character); if (list.Count == 0) { return(skillPropety.hitRate); } int num = ServerToBattleUtility.PercentageToPermillion(skillPropety.hitRate); float extraEffectCorrectionValue = ExtraEffectStatus.GetExtraEffectCorrectionValue(list, (float)num, character.characterStatus.monsterIntegrationIds, character.groupId, character.tolerance, character.characterDatas.tribe, character.characterDatas.growStep, skillPropety, character.currentSufferState, ExtraEffectStatus.GetExtraTargetType(character), EffectStatusBase.ExtraEffectType.SkillHit); return(ServerToBattleUtility.PermillionToPercentage((int)extraEffectCorrectionValue)); }
public bool IsHitExtraEffect(CharacterStateControl character, EffectStatusBase.ExtraEffectType extraEffectType) { List <ExtraEffectStatus> list = ChipEffectStatus.CheckStageEffectInvalid(new List <ExtraEffectStatus> { this }, character); if (list.Count == 0) { return(false); } List <ExtraEffectStatus> totalExtraEffectStatusList = ExtraEffectStatus.GetTotalExtraEffectStatusList(list, character.characterStatus.monsterIntegrationIds, character.groupId, character.tolerance, character.characterDatas.tribe, character.characterDatas.growStep, null, null, ExtraEffectStatus.GetExtraTargetType(character), extraEffectType); return(totalExtraEffectStatusList.Count > 0); }
private IEnumerator PlayLeaderChange(ExtraEffectStatus extraEffectStatus) { IEnumerator showBattleStageEffect = this.ShowBattleStageEffect(); while (showBattleStageEffect.MoveNext()) { yield return(null); } int leaderindex = (int)extraEffectStatus.EffectValue; bool isRandom = leaderindex <= 0 || leaderindex > 3; if (isRandom) { leaderindex = UnityEngine.Random.Range(0, 3); } else { leaderindex--; } IEnumerator function = null; BattleMode battleMode = base.battleMode; if (battleMode != BattleMode.Single) { if (battleMode != BattleMode.Multi) { if (battleMode == BattleMode.PvP) { function = this.PvPLeaderChangeSync(leaderindex); } } else { function = this.MultiLeaderChangeSync(leaderindex); } } else { function = this.SingleLeaderChangeSync(leaderindex); } while (function.MoveNext()) { yield return(null); } yield break; }
private void InitializeExtraStatus() { List <ExtraEffectStatus> extraEffectStatus = BattleStateManager.current.battleStateData.extraEffectStatus; List <ExtraEffectStatus> invocationList = ExtraEffectStatus.GetInvocationList(extraEffectStatus, EffectStatusBase.EffectTriggerType.Usually); int defaultMaxHpWithLeaderSkill = this.defaultMaxHpWithLeaderSkill; int attackPower = this._characterStatus.attackPower; int defencePower = this._characterStatus.defencePower; int specialAttackPower = this._characterStatus.specialAttackPower; int specialDefencePower = this._characterStatus.specialDefencePower; int speed = this._characterStatus.speed; this.m_extraMaxHp = ExtraEffectStatus.GetExtraEffectValue(invocationList, defaultMaxHpWithLeaderSkill, this, EffectStatusBase.ExtraEffectType.Hp); this.m_extraAttackPower = ExtraEffectStatus.GetExtraEffectValue(invocationList, attackPower, this, EffectStatusBase.ExtraEffectType.Atk); this.m_extraDefencePower = ExtraEffectStatus.GetExtraEffectValue(invocationList, defencePower, this, EffectStatusBase.ExtraEffectType.Def); this.m_extraSpecialAttackPower = ExtraEffectStatus.GetExtraEffectValue(invocationList, specialAttackPower, this, EffectStatusBase.ExtraEffectType.Satk); this.m_extraSpecialDefencePower = ExtraEffectStatus.GetExtraEffectValue(invocationList, specialDefencePower, this, EffectStatusBase.ExtraEffectType.Sdef); this.m_extraSpeed = ExtraEffectStatus.GetExtraEffectValue(invocationList, speed, this, EffectStatusBase.ExtraEffectType.Speed); }
private static List <ExtraEffectStatus> GetMonsterIntegrationGroupList(List <ExtraEffectStatus> extraEffectStatusList, string[] monsterIntegrationIds, ExtraEffectStatus.ExtraTargetType targetType, EffectStatusBase.ExtraEffectType effectType) { List <ExtraEffectStatus> list = new List <ExtraEffectStatus>(); List <ExtraEffectStatus> list2 = new List <ExtraEffectStatus>(); foreach (ExtraEffectStatus extraEffectStatus in extraEffectStatusList) { EffectStatusBase.ExtraTargetSubType targetSubType = (EffectStatusBase.ExtraTargetSubType)extraEffectStatus.TargetSubType; if (targetSubType == EffectStatusBase.ExtraTargetSubType.MonsterIntegrationGroup) { list2.Add(extraEffectStatus); } } while (list2.Count > 0) { ExtraEffectStatus extraEffectStatus2 = list2[0]; List <ExtraEffectStatus> list3 = new List <ExtraEffectStatus>(); List <ExtraEffectStatus> list4 = new List <ExtraEffectStatus>(); foreach (ExtraEffectStatus extraEffectStatus3 in list2) { if (extraEffectStatus3.TargetValue == extraEffectStatus2.TargetValue) { list3.Add(extraEffectStatus3); } else { list4.Add(extraEffectStatus3); } } string id = extraEffectStatus2.TargetValue.ToString(); bool flag = monsterIntegrationIds.Where((string item) => item == id).Any <string>(); if (flag) { List <ExtraEffectStatus> extraEffectStatusList2 = ExtraEffectStatus.GetExtraEffectStatusList(list3, targetType, EffectStatusBase.ExtraTargetSubType.MonsterIntegrationGroup, extraEffectStatus2.TargetValue, effectType); if (extraEffectStatusList2.Count > 0) { list.AddRange(extraEffectStatusList2); } } list2 = list4; } return(list); }
public void InitializeSkillExtraStatus() { List <ExtraEffectStatus> extraEffectStatus = BattleStateManager.current.battleStateData.extraEffectStatus; List <ExtraEffectStatus> invocationList = ExtraEffectStatus.GetInvocationList(extraEffectStatus, EffectStatusBase.EffectTriggerType.Usually); if (this.skillStatus.Length > 1) { AffectEffectProperty affectEffectFirst = this.skillStatus[1].GetAffectEffectFirst(); if (affectEffectFirst != null) { if (AffectEffectProperty.IsDamage(affectEffectFirst.type)) { this.m_extraDeathblowSkillPower = ExtraEffectStatus.GetSkillPowerCorrectionValue(invocationList, affectEffectFirst, this); } this.m_extraDeathblowSkillHitRate = ExtraEffectStatus.GetSkillHitRateCorrectionValue(invocationList, affectEffectFirst, this); } } if (this.skillStatus.Length > 2) { AffectEffectProperty affectEffectFirst2 = this.skillStatus[2].GetAffectEffectFirst(); if (affectEffectFirst2 != null) { if (AffectEffectProperty.IsDamage(affectEffectFirst2.type)) { this.m_extraInheritanceSkillPower = ExtraEffectStatus.GetSkillPowerCorrectionValue(invocationList, affectEffectFirst2, this); } this.m_extraInheritanceSkillHitRate = ExtraEffectStatus.GetSkillHitRateCorrectionValue(invocationList, affectEffectFirst2, this); } } if (this.skillStatus.Length > 3) { AffectEffectProperty affectEffectFirst3 = this.skillStatus[3].GetAffectEffectFirst(); if (affectEffectFirst3 != null) { if (AffectEffectProperty.IsDamage(affectEffectFirst3.type)) { this.m_extraInheritanceSkillPower2 = ExtraEffectStatus.GetSkillPowerCorrectionValue(invocationList, affectEffectFirst3, this); } this.m_extraInheritanceSkillHitRate2 = ExtraEffectStatus.GetSkillHitRateCorrectionValue(invocationList, affectEffectFirst3, this); } } }
private IEnumerator PlayStageEffect(EffectStatusBase.EffectTriggerType effectTriggerType) { bool isBigBoss = base.hierarchyData.batteWaves[base.battleStateData.currentWaveNumber].cameraType == 1; List <ExtraEffectStatus> extraEffectStatus = BattleStateManager.current.battleStateData.extraEffectStatus; List <ExtraEffectStatus> invocationList = ExtraEffectStatus.GetInvocationList(extraEffectStatus, effectTriggerType); if (invocationList.Count == 0) { yield break; } base.stateManager.uiControl.HideCharacterHUDFunction(); base.stateManager.SetBattleScreen(BattleScreen.PoisonHit); this.cameraKey = "0002_command"; if (isBigBoss) { this.cameraKey = "BigBoss/0002_command"; } base.stateManager.cameraControl.PlayCameraMotionAction(this.cameraKey, base.battleStateData.stageSpawnPoint, true); foreach (ExtraEffectStatus invocation in invocationList) { IEnumerator function = null; EffectStatusBase.ExtraEffectType effectType = (EffectStatusBase.ExtraEffectType)invocation.EffectType; if (effectType != EffectStatusBase.ExtraEffectType.LeaderChange) { function = this.PlayDefaultEffect(invocation); } else { function = this.PlayLeaderChange(invocation); } while (function.MoveNext()) { yield return(null); } if (base.stateManager.IsLastBattleAndAllDeath()) { break; } } base.stateManager.cameraControl.StopCameraMotionAction(this.cameraKey); yield break; }
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 void ApplySkillButtonData(SkillStatus skills, bool onEnable, bool onSkillLock, CharacterStateControl selectCharacter, int useCount) { List <ExtraEffectStatus> extraEffectStatus = BattleStateManager.current.battleStateData.extraEffectStatus; List <ExtraEffectStatus> invocationList = ExtraEffectStatus.GetInvocationList(extraEffectStatus, EffectStatusBase.EffectTriggerType.Usually); AffectEffectProperty affectEffectProperty = skills.GetAffectEffectFirst(); foreach (AffectEffectProperty affectEffectProperty2 in skills.affectEffect) { if (affectEffectProperty2.ThisSkillIsAttack) { affectEffectProperty = affectEffectProperty2; break; } } int num = 0; if (AffectEffectProperty.IsDamage(affectEffectProperty.type)) { num = ExtraEffectStatus.GetSkillPowerCorrectionValue(invocationList, affectEffectProperty, selectCharacter); } float num2 = ExtraEffectStatus.GetSkillHitRateCorrectionValue(invocationList, affectEffectProperty, selectCharacter); num2 = Mathf.Clamp01(num2); this.skillType = skills.skillType; this.skillName.text = skills.name; this.skillDescription.text = skills.description; int num3 = (int)Math.Round((double)(num2 * 100f), MidpointRounding.AwayFromZero); string @string = StringMaster.GetString("SystemPercent"); this.hitRate.text = string.Format(@string, num3); this.power.text = num.ToString(); int correctedAp = skills.GetCorrectedAp(selectCharacter); if (correctedAp <= selectCharacter.ap) { this.ap.text = string.Format(StringMaster.GetString("BattleSkillUI-01"), correctedAp); } else { this.ap.text = StringMaster.GetString("BattleSkillUI-02"); } if (skills.useCountValue > 0) { this.SetSkillUseCount(useCount); } this.SetAttributeIcon(skills.attribute); if (onSkillLock) { this.SetButtonType(BattleSkillBtn.Type.Invalid); this.SetSkillLock(onSkillLock); } else if (onEnable) { this.SetButtonType(BattleSkillBtn.Type.Off); this.SetSkillLock(false); } else { this.SetButtonType(BattleSkillBtn.Type.Invalid); this.SetSkillLock(false); } }
private static List <ExtraEffectStatus> GetTotalExtraEffectStatusList(List <ExtraEffectStatus> extraEffectStatusList, string[] monsterIntegrationIds, string groupId, Tolerance tolerance, string tribe, GrowStep growStep, AffectEffectProperty skillPropety, HaveSufferState currentSufferState, ExtraEffectStatus.ExtraTargetType targetType, EffectStatusBase.ExtraEffectType effectType) { List <ExtraEffectStatus> list = new List <ExtraEffectStatus>(); if (skillPropety != null) { bool flag = skillPropety.skillId.ToString() == BattleStateManager.PublicAttackSkillId; List <ExtraEffectStatus> list2 = new List <ExtraEffectStatus>(); foreach (ExtraEffectStatus extraEffectStatus in extraEffectStatusList) { if (extraEffectStatus.TargetValue2 == "0") { list2.Add(extraEffectStatus); } else if (extraEffectStatus.TargetValue2 == "1") { if (flag) { list2.Add(extraEffectStatus); } } else if (extraEffectStatus.TargetValue2 == "2" && !flag) { list2.Add(extraEffectStatus); } } ConstValue.ResistanceType skillResistanceType = EffectStatusBase.GetSkillResistanceType(skillPropety); list.AddRange(ExtraEffectStatus.GetExtraEffectStatusList(list2, targetType, EffectStatusBase.ExtraTargetSubType.SkillAttribute, 0, effectType)); list.AddRange(ExtraEffectStatus.GetExtraEffectStatusList(list2, targetType, EffectStatusBase.ExtraTargetSubType.SkillAttribute, (int)skillResistanceType, effectType)); list.AddRange(ExtraEffectStatus.GetExtraEffectStatusList(list2, targetType, EffectStatusBase.ExtraTargetSubType.SkillId, 0, effectType)); list.AddRange(ExtraEffectStatus.GetExtraEffectStatusList(list2, targetType, EffectStatusBase.ExtraTargetSubType.SkillId, skillPropety.skillId, effectType)); } list.AddRange(ExtraEffectStatus.GetExtraEffectStatusList(extraEffectStatusList, targetType, EffectStatusBase.ExtraTargetSubType.MonsterResistance, 0, effectType)); List <ConstValue.ResistanceType> attributeStrengthList = tolerance.GetAttributeStrengthList(); foreach (ConstValue.ResistanceType targetValue in attributeStrengthList) { list.AddRange(ExtraEffectStatus.GetExtraEffectStatusList(extraEffectStatusList, targetType, EffectStatusBase.ExtraTargetSubType.MonsterResistance, (int)targetValue, effectType)); } list.AddRange(ExtraEffectStatus.GetExtraEffectStatusList(extraEffectStatusList, targetType, EffectStatusBase.ExtraTargetSubType.MonsterTribe, 0, effectType)); list.AddRange(ExtraEffectStatus.GetExtraEffectStatusList(extraEffectStatusList, targetType, EffectStatusBase.ExtraTargetSubType.MonsterTribe, tribe.ToInt32(), effectType)); list.AddRange(ExtraEffectStatus.GetExtraEffectStatusList(extraEffectStatusList, targetType, EffectStatusBase.ExtraTargetSubType.MonsterGroup, 0, effectType)); list.AddRange(ExtraEffectStatus.GetExtraEffectStatusList(extraEffectStatusList, targetType, EffectStatusBase.ExtraTargetSubType.MonsterGroup, groupId.ToInt32(), effectType)); list.AddRange(ExtraEffectStatus.GetExtraEffectStatusList(extraEffectStatusList, targetType, EffectStatusBase.ExtraTargetSubType.GrowStep, 0, effectType)); list.AddRange(ExtraEffectStatus.GetExtraEffectStatusList(extraEffectStatusList, targetType, EffectStatusBase.ExtraTargetSubType.GrowStep, (int)growStep, effectType)); if (currentSufferState != null) { list.AddRange(ExtraEffectStatus.GetExtraEffectStatusList(extraEffectStatusList, targetType, EffectStatusBase.ExtraTargetSubType.Suffer, 0, effectType)); IEnumerator enumerator3 = Enum.GetValues(typeof(SufferStateProperty.SufferType)).GetEnumerator(); try { while (enumerator3.MoveNext()) { object obj = enumerator3.Current; SufferStateProperty.SufferType sufferType = (SufferStateProperty.SufferType)obj; if (sufferType != SufferStateProperty.SufferType.Null) { if (currentSufferState.FindSufferState(sufferType)) { list.AddRange(ExtraEffectStatus.GetExtraEffectStatusList(extraEffectStatusList, targetType, EffectStatusBase.ExtraTargetSubType.Suffer, (int)sufferType, effectType)); } } } } finally { IDisposable disposable; if ((disposable = (enumerator3 as IDisposable)) != null) { disposable.Dispose(); } } } list.AddRange(ExtraEffectStatus.GetMonsterIntegrationGroupList(extraEffectStatusList, monsterIntegrationIds, targetType, effectType)); return(list); }
private static List <GameWebAPI.RespDataMA_ChipEffectM.ChipEffect> GetStageEffectInvalidList(int areaId, GameWebAPI.RespDataMA_ChipEffectM.ChipEffect[] chipEffects, ExtraEffectStatus extraEffectStatus) { List <GameWebAPI.RespDataMA_ChipEffectM.ChipEffect> list = new List <GameWebAPI.RespDataMA_ChipEffectM.ChipEffect>(); foreach (GameWebAPI.RespDataMA_ChipEffectM.ChipEffect chipEffect in chipEffects) { bool flag = false; bool flag2 = false; if (chipEffect.effectTrigger.ToInt32() == 11 && chipEffect.effectTriggerValue.ToInt32() == areaId) { flag = true; } if (chipEffect.effectType.ToInt32() == 80 && chipEffect.effectValue == extraEffectStatus.WorldDungeonExtraEffectId) { flag2 = true; } if (flag && flag2) { list.Add(chipEffect); } } return(list); }
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 ExtraEffectStatusObject(ExtraEffectStatus item) { this._extraEffectStatus = item; }
private IEnumerator PlayNotSkill(ExtraEffectStatus extraEffectStatus, List <CharacterStateControl> targetList) { yield return(null); yield break; }