Exemple #1
0
        public void RPC_UpSkillLv(int skillId, RPC.RPCForwardInfo fwd)
        {
            RPC.PackageWriter pkg = new RPC.PackageWriter();
            var sk    = SkillMgr.GetSkill(skillId);
            var sktpl = CSTable.SkillUtil.GetSkillTpl(skillId);

            if (sktpl == null)
            {
                pkg.Write((sbyte)eRet_UpSkillLv.NoSkill);
                pkg.DoReturnPlanes2Client(fwd);
                return;
            }
            if (sk == null)
            {
                //学习
                var sklvtpl = CSTable.SkillUtil.GetSkillLevelTpl(skillId, 1);
                if (sklvtpl == null)
                {
                    pkg.Write((sbyte)eRet_UpSkillLv.NoSkillLvTpl);
                    pkg.DoReturnPlanes2Client(fwd);
                    return;
                }
                sbyte result = (sbyte)eRet_UpSkillLv.Failure;
                switch ((CSCommon.eSkillType)sktpl.type)
                {
                case eSkillType.Active:
                    result = UpActiveSkill(sklvtpl);
                    break;

                case eSkillType.Cheats:    //秘籍通过副本开启
                    break;

                case eSkillType.BodyChannel:
                    result = UpBodyChannel(sklvtpl);
                    break;
                }
                if (result != (sbyte)eRet_UpSkillLv.Succeed)
                {
                    pkg.Write(result);
                    pkg.DoReturnPlanes2Client(fwd);
                    return;
                }
                SkillMgr.CreateSkillToBag(sklvtpl.id, (byte)sklvtpl.level);
            }
            else
            {
                //升级
                if (sk.Level >= PlayerData.RoleDetail.RoleLevel)
                {
                    pkg.Write((sbyte)eRet_UpSkillLv.LessRoleLv);
                    pkg.DoReturnPlanes2Client(fwd);
                    return;
                }
                if (sk.Level >= sk.Data.maxLv)
                {
                    pkg.Write((sbyte)eRet_UpSkillLv.MaxLv);
                    pkg.DoReturnPlanes2Client(fwd);
                    return;
                }
                //下级模板
                var sklvtpl = CSTable.SkillUtil.GetSkillLevelTpl(skillId, sk.Level + 1);
                if (sklvtpl == null)
                {
                    pkg.Write((sbyte)eRet_UpSkillLv.NoSkillLvTpl);
                    pkg.DoReturnPlanes2Client(fwd);
                    return;
                }
                sbyte result = (sbyte)eRet_UpSkillLv.Failure;
                switch ((CSCommon.eSkillType)sktpl.type)
                {
                case eSkillType.Active:
                case eSkillType.Hide:
                    result = UpActiveSkill(sklvtpl);
                    break;

                case eSkillType.Cheats:    //秘籍通过其他方法
                    break;

                case eSkillType.BodyChannel:
                    result = UpBodyChannel(sklvtpl);
                    break;
                }
                if (result != (sbyte)eRet_UpSkillLv.Succeed)
                {
                    pkg.Write(result);
                    pkg.DoReturnPlanes2Client(fwd);
                    return;
                }
                sk.Init(sklvtpl.id, (byte)sklvtpl.level);
                sk.SetOwner(this);
            }
            pkg.Write((sbyte)eRet_UpSkillLv.Succeed);
            pkg.DoReturnPlanes2Client(fwd);
        }