Exemple #1
0
 public void ApplyAllBuffRules(RaidRuleInfo raidRuleInfo)
 {
     for (int i = 0; i < BuffInfo.Count; i++)
     {
         ApplyBuffRule(BuffInfo[i], raidRuleInfo);
     }
 }
Exemple #2
0
 public void ApplySingleBuffRule(RaidRuleInfo raidRuleInfo, BuffRule rule)
 {
     for (int i = 0; i < BuffInfo.Count; i++)
     {
         if (BuffInfo[i].Buff.RuleType == rule)
         {
             ApplyBuffRule(BuffInfo[i], raidRuleInfo);
         }
     }
 }
Exemple #3
0
    protected void ApplyBuffRule(BuffInfo buffEntry, RaidRuleInfo raidRuleInfo)
    {
        switch (buffEntry.Buff.RuleType)
        {
        case BuffRule.Afflicted:     // done
            #region Afflicted
            if (buffEntry.Buff.IsFalseRule)
            {
                if (raidRuleInfo.Unit.Character.IsAfflicted)
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (raidRuleInfo.Unit.Character.IsAfflicted)
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;

            #endregion
        case BuffRule.Always:     // done
            #region Always
            if (buffEntry.Buff.IsFalseRule)
            {
                RevertBuff(buffEntry);
            }
            else
            {
                ApplyBuff(buffEntry);
            }
            break;

            #endregion
        case BuffRule.DeathsDoor:      // done
            #region DeathsDoor
            if (buffEntry.Buff.IsFalseRule)
            {
                if (raidRuleInfo.Unit.Character.AtDeathsDoor)
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (raidRuleInfo.Unit.Character.AtDeathsDoor)
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;

            #endregion
        case BuffRule.EnemyType:     // done
            #region EnemyType
            if (raidRuleInfo.Target == null || raidRuleInfo.Target.Character.IsMonster == false)
            {
                RevertBuff(buffEntry);
                break;
            }

            if (buffEntry.Buff.IsFalseRule)
            {
                if (raidRuleInfo.Target.Character.MonsterTypes.
                    Contains(CharacterHelper.StringToMonsterType(buffEntry.Buff.StringParam)))
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (raidRuleInfo.Target.Character.MonsterTypes.
                    Contains(CharacterHelper.StringToMonsterType(buffEntry.Buff.StringParam)))
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;

            #endregion
        case BuffRule.FirstRound:     // done
            #region FirstRound
            if (raidRuleInfo.BattleGround.BattleStatus != BattleStatus.Fighting)
            {
                RevertBuff(buffEntry);
                break;
            }

            if (buffEntry.Buff.IsFalseRule)
            {
                if (raidRuleInfo.BattleGround.Round.RoundNumber == 0)
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (raidRuleInfo.BattleGround.Round.RoundNumber == 0)
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;

            #endregion
        case BuffRule.HpAbove:     // done
            #region HpAbove
            if (buffEntry.Buff.IsFalseRule)
            {
                if (raidRuleInfo.Unit.Character.HealthRatio > buffEntry.Buff.SingleParam)
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (raidRuleInfo.Unit.Character.HealthRatio > buffEntry.Buff.SingleParam)
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;

            #endregion
        case BuffRule.HpBelow:      // done
            #region HpAbove
            if (buffEntry.Buff.IsFalseRule)
            {
                if (raidRuleInfo.Unit.Character.HealthRatio < buffEntry.Buff.SingleParam)
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (raidRuleInfo.Unit.Character.HealthRatio < buffEntry.Buff.SingleParam)
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;

            #endregion
        case BuffRule.InActivity:
            #region InActivity
            RevertBuff(buffEntry);
            break;

            #endregion
        case BuffRule.InCamp:
            #region InCamp
            if (buffEntry.Buff.IsFalseRule)
            {
                if (raidRuleInfo.IsDoingCamping)
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (raidRuleInfo.IsDoingCamping)
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;

            #endregion
        case BuffRule.InCorridor:      // done
            #region InCorridor
            if (buffEntry.Buff.IsFalseRule)
            {
                if (RaidSceneManager.SceneState == DungeonSceneState.Hall)
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (RaidSceneManager.SceneState == DungeonSceneState.Hall)
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;

            #endregion
        case BuffRule.InDungeon:      // done
            #region InDungeon
            if (buffEntry.Buff.IsFalseRule)
            {
                if (raidRuleInfo.Dungeon == buffEntry.Buff.StringParam)
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (raidRuleInfo.Dungeon == buffEntry.Buff.StringParam)
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;

            #endregion
        case BuffRule.InMode:      // done
            #region InMode
            if (raidRuleInfo.Unit.Character.InMode == false)
            {
                RevertBuff(buffEntry);
                break;
            }

            if (buffEntry.Buff.IsFalseRule)
            {
                if (raidRuleInfo.Unit.Character.Mode.Id == buffEntry.Buff.StringParam)
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (raidRuleInfo.Unit.Character.Mode.Id == buffEntry.Buff.StringParam)
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;

            #endregion
        case BuffRule.InRank:     // done
            #region InRank
            if (buffEntry.Buff.IsFalseRule)
            {
                if (raidRuleInfo.Unit.Rank == buffEntry.Buff.SingleParam + 1)
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (raidRuleInfo.Unit.Rank == buffEntry.Buff.SingleParam + 1)
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;

            #endregion
        case BuffRule.LightAbove:     // done
            #region LightAbove
            if (buffEntry.Buff.IsFalseRule)
            {
                if (raidRuleInfo.TorchMeter.TorchAmount > buffEntry.Buff.SingleParam)
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (raidRuleInfo.TorchMeter.TorchAmount > buffEntry.Buff.SingleParam)
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;

            #endregion
        case BuffRule.LightBelow:     // done
            #region LightBelow
            if (buffEntry.Buff.IsFalseRule)
            {
                if (raidRuleInfo.TorchMeter.TorchAmount < buffEntry.Buff.SingleParam)
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (raidRuleInfo.TorchMeter.TorchAmount < buffEntry.Buff.SingleParam)
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;

            #endregion
        case BuffRule.Melee:      // done
            #region Melee
            if (raidRuleInfo.Skill == null)
            {
                RevertBuff(buffEntry);
                break;
            }
            if (buffEntry.Buff.IsFalseRule)
            {
                if (raidRuleInfo.Skill.Type == "melee")
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (raidRuleInfo.Skill.Type == "melee")
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;

            #endregion
        case BuffRule.Ranged:      // done
            #region Ranged
            if (raidRuleInfo.Skill == null)
            {
                RevertBuff(buffEntry);
                break;
            }
            if (buffEntry.Buff.IsFalseRule)
            {
                if (raidRuleInfo.Skill.Type == "ranged")
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (raidRuleInfo.Skill.Type == "ranged")
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;

            #endregion
        case BuffRule.Riposting:      // done
            #region Riposting
            if (buffEntry.Buff.IsFalseRule)
            {
                if (raidRuleInfo.IsRiposting)
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (raidRuleInfo.IsRiposting)
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;

            #endregion
        case BuffRule.Size:      // done
            #region Size
            if (raidRuleInfo.Target == null)
            {
                RevertBuff(buffEntry);
                break;
            }

            if (buffEntry.Buff.IsFalseRule)
            {
                if (raidRuleInfo.Target.Size == buffEntry.Buff.SingleParam)
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (raidRuleInfo.Target.Size == buffEntry.Buff.SingleParam)
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;

            #endregion
        case BuffRule.Skill:      // done
            #region Skill
            if (raidRuleInfo.Skill == null)
            {
                RevertBuff(buffEntry);
                break;
            }

            if (buffEntry.Buff.IsFalseRule)
            {
                if (raidRuleInfo.Skill.Id == buffEntry.Buff.StringParam)
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (raidRuleInfo.Skill.Id == buffEntry.Buff.StringParam)
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;

            #endregion
        case BuffRule.Status:      // done
            #region Status
            if (raidRuleInfo.Target == null)
            {
                RevertBuff(buffEntry);
                break;
            }
            var targetStatus = CharacterHelper.StringToStatusType(buffEntry.Buff.StringParam);
            if (targetStatus == StatusType.None)
            {
                RevertBuff(buffEntry);
                break;
            }

            if (buffEntry.Buff.IsFalseRule)
            {
                if (raidRuleInfo.Target.Character[targetStatus].IsApplied)
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (raidRuleInfo.Target.Character[targetStatus].IsApplied)
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;

            #endregion
        case BuffRule.StressAbove:      // done
            #region StressAbove
            if (raidRuleInfo.Unit.Character.IsMonster)
            {
                RevertBuff(buffEntry);
                break;
            }

            if (buffEntry.Buff.IsFalseRule)
            {
                if (raidRuleInfo.Unit.Character.Stress.CurrentValue > buffEntry.Buff.SingleParam)
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (raidRuleInfo.Unit.Character.Stress.CurrentValue > buffEntry.Buff.SingleParam)
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;

            #endregion
        case BuffRule.StressBelow:      // done
            #region StressBelow
            if (raidRuleInfo.Unit.Character.IsMonster)
            {
                RevertBuff(buffEntry);
                break;
            }

            if (buffEntry.Buff.IsFalseRule)
            {
                if (raidRuleInfo.Unit.Character.Stress.CurrentValue < buffEntry.Buff.SingleParam)
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (raidRuleInfo.Unit.Character.Stress.CurrentValue < buffEntry.Buff.SingleParam)
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;

            #endregion
        case BuffRule.Virtued:     // done
            #region Virtued
            if (buffEntry.Buff.IsFalseRule)
            {
                if (raidRuleInfo.Unit.Character.IsVirtued)
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (raidRuleInfo.Unit.Character.IsVirtued)
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;

            #endregion
        case BuffRule.WalkBack:     // done
            #region WalkBack
            if (buffEntry.Buff.IsFalseRule)
            {
                if (raidRuleInfo.IsWalkingBack)
                {
                    RevertBuff(buffEntry);
                }
                else
                {
                    ApplyBuff(buffEntry);
                }
            }
            else
            {
                if (raidRuleInfo.IsWalkingBack)
                {
                    ApplyBuff(buffEntry);
                }
                else
                {
                    RevertBuff(buffEntry);
                }
            }
            break;
            #endregion
        }
    }