Exemple #1
0
        /// <inheritdoc />
        public void ChangeJob(IPlayerEntity player, DefineJob.Job newJob)
        {
            if (!_gameResources.Jobs.TryGetValue(newJob, out JobData jobData))
            {
                throw new KeyNotFoundException($"Cannot find job '{newJob}'.");
            }

            IEnumerable <SkillInfo> jobSkills = _skillSystem.GetSkillsByJob(newJob);

            var skillTree = new List <SkillInfo>();

            foreach (SkillInfo skill in jobSkills)
            {
                SkillInfo playerSkill = player.SkillTree.GetSkill(skill.SkillId);

                if (playerSkill != null)
                {
                    skillTree.Add(playerSkill);
                }
                else
                {
                    skillTree.Add(new SkillInfo(skill.SkillId, player.PlayerData.Id, skill.Data));
                }
            }

            player.PlayerData.JobData = jobData;
            player.SkillTree.Skills   = skillTree.ToList();

            _playerPacketFactory.SendPlayerJobUpdate(player);
            _specialEffectPacketFactory.SendSpecialEffect(player, DefineSpecialEffects.XI_GEN_LEVEL_UP01, false);
        }
Exemple #2
0
        public IEnumerable <SkillInfo> GetSkillsByJob(DefineJob.Job job)
        {
            var skillsList = new List <SkillInfo>();

            if (_gameResources.Jobs.TryGetValue(job, out JobData jobData) && jobData.Parent != null)
            {
                skillsList.AddRange(GetSkillsByJob(jobData.Parent.Id));
            }

            IEnumerable <SkillInfo> jobSkills = from x in _gameResources.Skills.Values
                                                where x.Job == jobData.Id &&
                                                x.JobType != DefineJob.JobType.JTYPE_COMMON &&
                                                x.JobType != DefineJob.JobType.JTYPE_TROUPE
                                                select new SkillInfo(x.Id, -1, x);

            skillsList.AddRange(jobSkills);

            return(skillsList);
        }