Ejemplo n.º 1
0
 public StageSimulatorSheets(
     MaterialItemSheet materialItemSheet,
     SkillSheet skillSheet,
     SkillBuffSheet skillBuffSheet,
     BuffSheet buffSheet,
     CharacterSheet characterSheet,
     CharacterLevelSheet characterLevelSheet,
     EquipmentItemSetEffectSheet equipmentItemSetEffectSheet,
     StageSheet stageSheet,
     StageWaveSheet stageWaveSheet,
     EnemySkillSheet enemySkillSheet
     ) : base(
         materialItemSheet,
         skillSheet,
         skillBuffSheet,
         buffSheet,
         characterSheet,
         characterLevelSheet,
         equipmentItemSetEffectSheet
         )
 {
     StageSheet      = stageSheet;
     StageWaveSheet  = stageWaveSheet;
     EnemySkillSheet = enemySkillSheet;
 }
Ejemplo n.º 2
0
        // info: 스킬 쿨다운을 적용하는 것과 별개로, 버프에 대해서 꼼꼼하게 걸러낼 필요가 생길 때 참고하기 위해서 유닛 테스트와 함께 남깁니다.
        public Skill.Skill Select(IRandom random, Dictionary <int, Buff.Buff> buffs, SkillBuffSheet skillBuffSheet,
                                  BuffSheet buffSheet)
        {
            var skills = GetSelectableSkills();

            if (!(buffs is null) &&
                !(skillBuffSheet is null) &&
                !(buffSheet is null))
            {
                // 기존에 걸려 있는 버프들과 겹치지 않는 스킬만 골라내기.
                skills = skills.Where(skill =>
                {
                    var skillId = skill.SkillRow.Id;

                    // 버프가 없는 스킬이면 포함한다.
                    if (!skillBuffSheet.TryGetValue(skillId, out var row))
                    {
                        return(true);
                    }

                    // 이 스킬을 포함해야 하는가? 기본 네.
                    var shouldContain = true;
                    foreach (var buffId in row.BuffIds)
                    {
                        // 기존 버프 중 ID가 같은 것이 있을 경우 아니오.
                        if (buffs.Values.Any(buff => buff.RowData.Id == buffId))
                        {
                            shouldContain = false;
                            break;
                        }

                        // 버프 정보 얻어오기 실패.
                        if (!buffSheet.TryGetValue(buffId, out var buffRow))
                        {
                            continue;
                        }

                        // 기존 버프 중 그룹 ID가 같고, ID가 크거나 같은 것이 있을 경우 아니오.
                        if (buffs.Values.Any(buff =>
                                             buff.RowData.GroupId == buffRow.GroupId &&
                                             buff.RowData.Id >= buffRow.Id))
                        {
                            shouldContain = false;
                            break;
                        }
                    }

                    return(shouldContain);
                }).ToList();

                // 기존 버프와 중복하는 것을 걷어내고 나니 사용할 스킬이 없는 경우에는 전체를 다시 고려한다.
                if (!skills.Any())
                {
                    skills = GetSelectableSkills();
                }
            }

            return(PostSelect(random, skills));
        }
Ejemplo n.º 3
0
 protected SimulatorSheets(
     MaterialItemSheet materialItemSheet,
     SkillSheet skillSheet,
     SkillBuffSheet skillBuffSheet,
     BuffSheet buffSheet,
     CharacterSheet characterSheet,
     CharacterLevelSheet characterLevelSheet,
     EquipmentItemSetEffectSheet equipmentItemSetEffectSheet
     )
 {
     MaterialItemSheet           = materialItemSheet;
     SkillSheet                  = skillSheet;
     SkillBuffSheet              = skillBuffSheet;
     BuffSheet                   = buffSheet;
     CharacterSheet              = characterSheet;
     CharacterLevelSheet         = characterLevelSheet;
     EquipmentItemSetEffectSheet = equipmentItemSetEffectSheet;
 }
Ejemplo n.º 4
0
 protected Simulator(
     IRandom random,
     AvatarState avatarState,
     List <Guid> foods,
     SimulatorSheets simulatorSheets
     )
 {
     Random                      = random;
     MaterialItemSheet           = simulatorSheets.MaterialItemSheet;
     SkillSheet                  = simulatorSheets.SkillSheet;
     SkillBuffSheet              = simulatorSheets.SkillBuffSheet;
     BuffSheet                   = simulatorSheets.BuffSheet;
     CharacterSheet              = simulatorSheets.CharacterSheet;
     CharacterLevelSheet         = simulatorSheets.CharacterLevelSheet;
     EquipmentItemSetEffectSheet = simulatorSheets.EquipmentItemSetEffectSheet;
     Log    = new BattleLog();
     Player = new Player(avatarState, this);
     Player.Use(foods);
     Player.Stats.EqualizeCurrentHPWithHP();
 }
Ejemplo n.º 5
0
 public RankingSimulatorSheets(
     MaterialItemSheet materialItemSheet,
     SkillSheet skillSheet,
     SkillBuffSheet skillBuffSheet,
     BuffSheet buffSheet,
     CharacterSheet characterSheet,
     CharacterLevelSheet characterLevelSheet,
     EquipmentItemSetEffectSheet equipmentItemSetEffectSheet,
     WeeklyArenaRewardSheet weeklyArenaRewardSheet
     ) : base(
         materialItemSheet,
         skillSheet,
         skillBuffSheet,
         buffSheet,
         characterSheet,
         characterLevelSheet,
         equipmentItemSetEffectSheet
         )
 {
     WeeklyArenaRewardSheet = weeklyArenaRewardSheet;
 }
Ejemplo n.º 6
0
        public static IList <Buff> GetBuffs(
            Skill.Skill skill,
            SkillBuffSheet skillBuffSheet,
            BuffSheet buffSheet)
        {
            var buffs = new List <Buff>();

            if (!skillBuffSheet.TryGetValue(skill.SkillRow.Id, out var skillBuffRow))
            {
                return(buffs);
            }

            foreach (var buffId in skillBuffRow.BuffIds)
            {
                if (!buffSheet.TryGetValue(buffId, out var buffRow))
                {
                    continue;
                }

                buffs.Add(Get(buffRow));
            }

            return(buffs);
        }