HomeServer/lualib-src/Server-main/AllServer/GameServer/Personal.lua

126 lines
4.4 KiB
Lua
Raw Normal View History

2024-11-20 15:41:09 +08:00
local skynet = require "skynet"
local oo = require "Class"
local log = require "Log"
local pb = require "pb"
local dataType = require "DataType"
local errorInfo = require "ErrorInfo"
local Personal = oo.class()
Personal.MaxClothesType = 8 --最大服饰类型
Personal.MaxColorType = 3 --最大颜色类型
--初始数据
function Personal:InitData( player )
player.gameData.personal.isInit = false
player.gameData.personal.clothesData = {}
player.gameData.personal.colorData = {}
if not player.gameData.personal.isInit then
--所有数据默认为0
for i = 1, self.MaxClothesType , 1 do
player.gameData.personal.clothesData[ i ] = 0
end
for i = 1, self.MaxColorType, 1 do
player.gameData.personal.colorData[ i ] = 0
end
--默认服饰 2,3,10,14,17,16
local cfgDefalutClothes = skynet.server.gameConfig.SValue.characterDefalutClothes
local cfgClothes = skynet.server.gameConfig.Clothes
for k1, v1 in pairs( cfgDefalutClothes ) do
for k2, v2 in pairs( cfgClothes ) do
if v1 == v2.id then
player.gameData.personal.clothesData[ v2.type ] = v1
break
end
end
--将该商品赠送到玩家背包里
skynet.server.bag:AddGoods( player , dataType.GoodsType_Clothes , v1 , 1)
end
--默认颜色 1 6 26
local cfgDefalutColor = skynet.server.gameConfig.SValue.characterDefalutColor
local cfgColor = skynet.server.gameConfig.Color
for k1, v1 in pairs( cfgDefalutColor ) do
for k2, v2 in pairs( cfgColor ) do
if v1 == v2.id then
player.gameData.personal.colorData[ v2.types ] = v1
break
end
end
end
player.gameData.personal.isInit = true
end
end
--个人特征展示
function Personal:Show( player , c2sData , s2cData )
c2sData.data = assert(pb.decode("C2SPersonalShow", c2sData.data ))
local data ={}
data.personalInfo = self:GetData( player )
s2cData.cmd = pb.enum("MsgType","CMD_S2C_PersonalShow")
s2cData.data = assert(pb.encode("S2CPersonalShow", data))
end
--个人特征改变
function Personal:Change( player , c2sData , s2cData )
c2sData.data = assert(pb.decode("C2SPersonalChange", c2sData.data ))
local personalInfo = c2sData.data.personalInfo
local data ={}
if not personalInfo or not personalInfo.nickName or not personalInfo.clothesData or not personalInfo.colorData then
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
else
player.gameData.nickName = personalInfo.nickName
--更新服装数据
for k, v in pairs( personalInfo.clothesData ) do
--背包中没有该商品并且商品id不等于0
if player:IsBuyGoods( dataType.GoodsType_Clothes , v ) or 0 == v then
player.gameData.personal.clothesData[ k ] = v
skynet.server.levelTask:Modify( player , 22 , 1 )
end
end
--更新色彩数据
for k, v in pairs( personalInfo.colorData ) do
--背包中没有该商品并且商品id不等于0
if skynet.server.gameConfig:GetColorCfg( v ) then
player.gameData.personal.colorData[ k ] = v
end
end
end
data.personalInfo = self:GetData( player )
s2cData.cmd = pb.enum("MsgType","CMD_S2C_PersonalChange")
s2cData.data = assert(pb.encode("S2CPersonalChange", data))
end
--个人特征改变
function Personal:Rename( player , c2sData , s2cData )
c2sData.data = assert(pb.decode("C2SPersonalRename", c2sData.data ))
local nickName = c2sData.data.nickName
local data ={}
if not nickName then
s2cData.code = errorInfo.ErrorCode.ErrRequestParam
else
player.gameData.nickName = nickName
end
data.nickName = nickName
s2cData.cmd = pb.enum("MsgType","CMD_S2C_PersonalRename")
s2cData.data = assert(pb.encode("S2CPersonalRename", data))
end
--获取数据
function Personal:GetData( player )
local data = {}
data.nickName = player.gameData.nickName
data.clothesData = player.gameData.personal.clothesData
data.colorData = player.gameData.personal.colorData
return data
end
skynet.server.personal = Personal
return Personal