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); }