476 【付费内容】时机礼包-服务端(自定义存储支持;)
| | |
| | | PacketSubCMD_4=
|
| | | PacketCallFunc_4=
|
| | |
|
| | | PacketCMD_5=
|
| | | PacketSubCMD_5=
|
| | | PacketCallFunc_5=
|
| | | PacketCMD_5=0xA1
|
| | | PacketSubCMD_5=0x31
|
| | | PacketCallFunc_5=OnSettingData
|
| | |
|
| | | PacketCMD_6=0xB4
|
| | | PacketSubCMD_6=0x0B
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A1 31 前端自定义保存设置内容 #tagCSSettingData
|
| | |
|
| | | class tagCSSettingData(Structure):
|
| | | Head = tagHead()
|
| | | KeyNum = 0 #(BYTE KeyNum)// 自定义key编号,后端使用数字key存储,前端自行进行转换定义,限制100个
|
| | | DataLen = 0 #(BYTE DataLen)
|
| | | SetData = "" #(String SetData)//自定义保存的内容
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA1
|
| | | self.Head.SubCmd = 0x31
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.KeyNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.DataLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.SetData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA1
|
| | | self.Head.SubCmd = 0x31
|
| | | self.KeyNum = 0
|
| | | self.DataLen = 0
|
| | | self.SetData = ""
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 1
|
| | | length += len(self.SetData)
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.KeyNum)
|
| | | data = CommFunc.WriteBYTE(data, self.DataLen)
|
| | | data = CommFunc.WriteString(data, self.DataLen, self.SetData)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | KeyNum:%d,
|
| | | DataLen:%d,
|
| | | SetData:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.KeyNum,
|
| | | self.DataLen,
|
| | | self.SetData
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCSSettingData=tagCSSettingData()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCSSettingData.Head.Cmd,m_NAtagCSSettingData.Head.SubCmd))] = m_NAtagCSSettingData
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #A1 03 设置是否成年 #tagCMAdult
|
| | |
|
| | | class tagCMAdult(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A1 31 前端自定义保存的设置内容信息 #tagSCSettingDataInfo
|
| | |
|
| | | class tagSCSettingData(Structure):
|
| | | KeyNum = 0 #(BYTE KeyNum)// 自定义key编号,后端使用数字key存储,前端自行进行转换定义,限制100个
|
| | | DataLen = 0 #(BYTE DataLen)
|
| | | SetData = "" #(String SetData)//自定义保存的内容
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.KeyNum,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.DataLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.SetData,_pos = CommFunc.ReadString(_lpData, _pos,self.DataLen)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.KeyNum = 0
|
| | | self.DataLen = 0
|
| | | self.SetData = ""
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 1
|
| | | length += 1
|
| | | length += len(self.SetData)
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteBYTE(data, self.KeyNum)
|
| | | data = CommFunc.WriteBYTE(data, self.DataLen)
|
| | | data = CommFunc.WriteString(data, self.DataLen, self.SetData)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | KeyNum:%d,
|
| | | DataLen:%d,
|
| | | SetData:%s
|
| | | '''\
|
| | | %(
|
| | | self.KeyNum,
|
| | | self.DataLen,
|
| | | self.SetData
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagSCSettingDataInfo(Structure):
|
| | | Head = tagHead()
|
| | | DataCnt = 0 #(WORD DataCnt)
|
| | | SettingDataList = list() #(vector<tagSCSettingData> SettingDataList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA1
|
| | | self.Head.SubCmd = 0x31
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.DataCnt,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | for i in range(self.DataCnt):
|
| | | temSettingDataList = tagSCSettingData()
|
| | | _pos = temSettingDataList.ReadData(_lpData, _pos)
|
| | | self.SettingDataList.append(temSettingDataList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA1
|
| | | self.Head.SubCmd = 0x31
|
| | | self.DataCnt = 0
|
| | | self.SettingDataList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 2
|
| | | for i in range(self.DataCnt):
|
| | | length += self.SettingDataList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteWORD(data, self.DataCnt)
|
| | | for i in range(self.DataCnt):
|
| | | data = CommFunc.WriteString(data, self.SettingDataList[i].GetLength(), self.SettingDataList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | DataCnt:%d,
|
| | | SettingDataList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.DataCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagSCSettingDataInfo=tagSCSettingDataInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCSettingDataInfo.Head.Cmd,m_NAtagSCSettingDataInfo.Head.SubCmd))] = m_NAtagSCSettingDataInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #A1 26 准备切换地图 #tagMCPrepareChangeMap
|
| | |
|
| | | class tagMCPrepareChangeMap(Structure):
|
| | |
| | | Sync_OpenServerDay(curPlayer)
|
| | | #通知玩家基本信息
|
| | | curPlayer.Sync_ClientPlayerLogin() #01 02 玩家初始化#tagCDBPlayer
|
| | | SyncSettingData(curPlayer)
|
| | |
|
| | | # 屏蔽跨服下关闭和子服重复的数据的发送 pushsend接口, notifyall正常发送
|
| | | # !!!必要发送的数据要注意位置
|
| | |
| | | curPlayer.SetSetting(setting)
|
| | | return
|
| | |
|
| | | #// A1 31 前端自定义保存设置内容 #tagCSSettingData
|
| | | #
|
| | | #struct tagCSSettingData
|
| | | #{
|
| | | # tagHead Head;
|
| | | # BYTE KeyNum; // 自定义key编号,后端使用数字key存储,前端自行进行转换定义,限制100个
|
| | | # BYTE DataLen; |
| | | # char SetData[DataLen]; //自定义保存的内容
|
| | | #};
|
| | | def OnSettingData(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | |
| | | keyNum = clientData.KeyNum
|
| | | setData = clientData.SetData
|
| | | setData = setData.replace(" ", "") # 去空格
|
| | | keyStr = str(keyNum)
|
| | | |
| | | gameRecMgr = DBDataMgr.GetGameRecMgr()
|
| | | preSetRecMgr = gameRecMgr.GetRecTypeIDMgr(ShareDefine.Def_GameRecType_Setting, playerID) |
| | | recData = preSetRecMgr.GetOneRecData(True)
|
| | | if not recData:
|
| | | return
|
| | | dataDict = recData.GetUserDict()
|
| | | |
| | | if not setData:
|
| | | dataDict.pop(keyStr, None)
|
| | | else:
|
| | | keyMax = 100
|
| | | if keyStr not in dataDict:
|
| | | if len(dataDict) >= keyMax:
|
| | | GameWorld.ErrLog("存储个数达到上限! keyMax=%s" % keyMax)
|
| | | return
|
| | | dataDict[keyStr] = setData
|
| | | |
| | | SyncSettingData(curPlayer, keyStr)
|
| | | return
|
| | |
|
| | | def SyncSettingData(curPlayer, keyStr=""):
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | gameRecMgr = DBDataMgr.GetGameRecMgr()
|
| | | preSetRecMgr = gameRecMgr.GetRecTypeIDMgr(ShareDefine.Def_GameRecType_Setting, playerID) |
| | | recData = preSetRecMgr.GetOneRecData()
|
| | | if not recData:
|
| | | return
|
| | | dataDict = recData.GetUserDict()
|
| | | |
| | | settingDataList = []
|
| | | syncKeyList = [keyStr] if keyStr else dataDict.keys()
|
| | | for keyStr in syncKeyList:
|
| | | if keyStr in dataDict:
|
| | | setData = dataDict[keyStr]
|
| | | else:
|
| | | setData = ""
|
| | | keyNum = GameWorld.ToIntDef(keyStr, None)
|
| | | if keyNum == None:
|
| | | continue
|
| | | sData = ChPyNetSendPack.tagSCSettingData()
|
| | | sData.KeyNum = keyNum
|
| | | sData.SetData = setData
|
| | | sData.DataLen = len(sData.SetData)
|
| | | settingDataList.append(sData)
|
| | | if not settingDataList:
|
| | | return
|
| | | clientPack = ChPyNetSendPack.tagSCSettingDataInfo()
|
| | | clientPack.SettingDataList = settingDataList
|
| | | clientPack.DataCnt = len(clientPack.SettingDataList)
|
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | return
|
| | |
|
| | | #// A2 29 设置小助手 #tagCMSetLittleHelper
|
| | | #
|
| | | #struct tagCMSetLittleHelper
|
| | |
| | | Def_GameRecType_PlayerOfflineUnprocessed, # 离线玩家待处理事件,playerID 307
|
| | | Def_GameRecType_ArenaRecord, # 演武场玩家挑战记录,playerID 308
|
| | | Def_GameRecType_BatPreset, # 战斗方案预设额外存储信息,playerID 309
|
| | | ) = range(300, 1 + 309)
|
| | | Def_GameRecType_Setting, # 前端自定义存储的设置内容,playerID 310
|
| | | ) = range(300, 1 + 310)
|
| | | #通用信息记录新 - 字典key配置,如果有配置,则可额外按对应记录Value值存储字典,方便快速取值,可配置Value编号 1~8,配空默认 Value1
|
| | | Def_GameRecValueKeyDict = {
|
| | | Def_GameRecType_Xiangong:[1],
|
| | | }
|
| | | #仅查看自己的记录
|
| | | Def_ViewGameRecSelfList = [Def_GameRecType_ArenaRecord, Def_GameRecType_BatPreset]
|
| | | Def_ViewGameRecSelfList = [Def_GameRecType_ArenaRecord, Def_GameRecType_BatPreset, Def_GameRecType_Setting]
|
| | |
|
| | | #UserData不使用json的记录类型
|
| | | UserDataNOJsonRecTypeList = []
|