hxp
3 天以前 67a84dc38db8f7d0f85b03e2b06ba728d95c1e82
476 【付费内容】时机礼包-服务端(自定义存储支持;)
5个文件已修改
274 ■■■■■ 已修改文件
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -346,9 +346,9 @@
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
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -677,6 +677,77 @@
#------------------------------------------------------
# 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):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -2386,6 +2386,127 @@
#------------------------------------------------------
# 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):
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -400,6 +400,7 @@
    Sync_OpenServerDay(curPlayer)
    #通知玩家基本信息
    curPlayer.Sync_ClientPlayerLogin()  #01 02 玩家初始化#tagCDBPlayer
    SyncSettingData(curPlayer)
    
    # 屏蔽跨服下关闭和子服重复的数据的发送 pushsend接口, notifyall正常发送
    # !!!必要发送的数据要注意位置
@@ -2267,6 +2268,76 @@
    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
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -830,13 +830,14 @@
                       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 = []