358 【内政】红颜系统-服务端(增加游历系统;)
| | |
| | | list AttrPerStarAddList; //每星加成值列表
|
| | | };
|
| | |
|
| | | //游历事件表
|
| | |
|
| | | struct TravelEvent
|
| | | {
|
| | | WORD _EventID;
|
| | | DWORD EventWeight; //事件权重
|
| | | DWORD AwardItemID; //奖励物品ID
|
| | | DWORD AwardItemCnt; //奖励物品数量
|
| | | };
|
| | |
|
| | | //游历景观奖励表
|
| | |
|
| | | struct TravelScenery
|
| | | {
|
| | | BYTE _SceneryType; //景观类型
|
| | | BYTE AwardQuality; //景观品质
|
| | | DWORD UpRate; //升下个品质概率
|
| | | list AwardItemRandCntList; //奖励物品随机个数列表 [[物品ID, 随机数量A, 到B], ...]
|
| | | list AwardItemExWeightList; //额外奖励物品权重 [[权重,物品ID,个数], ...]
|
| | | BYTE AwardItemExCnt; //额外奖励物品数
|
| | | };
|
| | |
|
| | | //玩家等级表
|
| | |
|
| | | struct PlayerLV
|
| | |
| | | DWORD NeedExp; //升级需要经验
|
| | | dict AttrInfo; //属性
|
| | | BYTE SkinIndex; //外观
|
| | | };
|
| | |
|
| | | //协助感谢礼盒表
|
| | |
|
| | | struct tagAssistThanksGift
|
| | | {
|
| | | DWORD _GiftID; //礼盒物品ID
|
| | | list RequestPlayerAward; // 发布奖励物品 物品ID|个数
|
| | | list AssistPlayerAward; // 协助奖励物品 物品ID|个数
|
| | | };
|
| | |
|
| | | //功能特权奖励表
|
| | |
| | | PacketSubCMD_3=0x11
|
| | | PacketCallFunc_3=OnQueryBossHurtList
|
| | |
|
| | | PacketCMD_4=0xB0
|
| | | PacketSubCMD_4=0x24
|
| | | PacketCallFunc_4=ReceiveFamilyArrestAward
|
| | | PacketCMD_4=
|
| | | PacketSubCMD_4=
|
| | | PacketCallFunc_4=
|
| | |
|
| | | PacketCMD_5=0xB0
|
| | | PacketSubCMD_5=0x26
|
| | | PacketCallFunc_5=QueryFamilyArrestAwardReceiveState
|
| | | PacketCMD_5=
|
| | | PacketSubCMD_5=
|
| | | PacketCallFunc_5=
|
| | |
|
| | | PacketCMD_6=0xB4
|
| | | PacketSubCMD_6=0x0B
|
| | |
| | | PacketSubCMD_3=0x21
|
| | | PacketCallFunc_3=OnBeautySkinOP
|
| | |
|
| | | ;游历
|
| | | [PlayerTravel]
|
| | | ScriptName = Player\PlayerTravel.py
|
| | | Writer = hxp
|
| | | Releaser = hxp
|
| | | RegType = 0
|
| | | RegisterPackCount = 2
|
| | |
|
| | | PacketCMD_1=0xB0
|
| | | PacketSubCMD_1=0x40
|
| | | PacketCallFunc_1=OnTravelClick
|
| | |
|
| | | PacketCMD_2=0xB0
|
| | | PacketSubCMD_2=0x41
|
| | | PacketCallFunc_2=OnTravelSceneryUP
|
| | |
|
| | | ;主线战斗
|
| | | [GameLogic_MainLevel]
|
| | | ScriptName = GameWorldLogic\FBProcess\GameLogic_MainLevel.py
|
| | |
| | | Def_PDict_BeautyAwardLV = "BeautyAwardLV_%s" # 红颜已领取到的奖励等级,参数(红颜ID)
|
| | | Def_PDict_BeautySkinInfo = "BeautySkinInfo_%s" # 红颜时装信息,参数(时装ID) 星级*100+是否使用+是否已激活
|
| | |
|
| | | #游历
|
| | | Def_PDict_TravelEnergy = "TravelEnergy" # 剩余体力
|
| | | Def_PDict_TravelEnergyTime = "TravelEnergyTime" # 上次恢复体力时间戳
|
| | | Def_PDict_TravelCnt = "TravelCnt" # 累计游历次数
|
| | | Def_PDict_TravelScenery = "TravelScenery" # 景观信息,景观左上角所在格子索引 * 10 + 景观类型
|
| | | Def_PDict_TravelSceneryLVInfo = "TravelSceneryLVInfo" # 景观等级信息,个位数-第1次升级成功与否,1-成功,2-失败;十位-第2次 ...
|
| | | Def_PDict_TravelGridInfo = "TravelGridInfo_%s_%s" # 格子信息,参数(行, 列) 事件ID*100+是否双倍*10+开启状态
|
| | | Def_PDict_TravelState = "TravelState" # 本盘游历记录,1-已领取景观奖励
|
| | |
|
| | | #周狂欢
|
| | | Def_PDict_WeekPartyActID = "WeekPartyActID" # 玩家身上的活动ID,唯一标识,取活动开始日期time值
|
| | | Def_PDict_WeekPartyID = "WeekPartyID" # 玩家身上的活动ID,配置ID,用于补发上次活动用
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B0 13 取消协助Boss #tagCGCancelAssistBoss
|
| | |
|
| | | class tagCGCancelAssistBoss(Structure):
|
| | | Head = tagHead()
|
| | | AssistGUID = "" #(char AssistGUID[40])//协助GUID
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xB0
|
| | | self.Head.SubCmd = 0x13
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xB0
|
| | | self.Head.SubCmd = 0x13
|
| | | self.AssistGUID = ""
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 40
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteString(data, 40, self.AssistGUID)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | AssistGUID:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.AssistGUID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCGCancelAssistBoss=tagCGCancelAssistBoss()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCancelAssistBoss.Head.Cmd,m_NAtagCGCancelAssistBoss.Head.SubCmd))] = m_NAtagCGCancelAssistBoss
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B0 15 接收协助感谢礼物 #tagCGGetAssistThanksGift
|
| | |
|
| | | class tagCGGetAssistThanksGift(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("IsPreview", c_ubyte), #是否预览,非预览即确认领取,无额外奖励确认时也需要回复领取包代表已读
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB0
|
| | | self.SubCmd = 0x15
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB0
|
| | | self.SubCmd = 0x15
|
| | | self.IsPreview = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCGGetAssistThanksGift)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B0 15 接收协助感谢礼物 //tagCGGetAssistThanksGift:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | IsPreview:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.IsPreview
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCGGetAssistThanksGift=tagCGGetAssistThanksGift()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGGetAssistThanksGift.Cmd,m_NAtagCGGetAssistThanksGift.SubCmd))] = m_NAtagCGGetAssistThanksGift
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B0 39 自动淘金免费使用 #tagCSGoldRushAutoFreeUse
|
| | |
|
| | | class tagCSGoldRushAutoFreeUse(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #B0 26 请求家族悬赏奖励领取情况 #tagQueryFamilyArrestAwardReceiveState
|
| | | # B0 40 游历点击 #tagCSTravelClick
|
| | |
|
| | | class tagQueryFamilyArrestAwardReceiveState(Structure):
|
| | | class tagCSTravelClick(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("Row", c_ubyte), #行,从1开始
|
| | | ("Col", c_ubyte), #列,从1开始
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB0
|
| | | self.SubCmd = 0x26
|
| | | self.SubCmd = 0x40
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | |
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB0
|
| | | self.SubCmd = 0x26
|
| | | self.SubCmd = 0x40
|
| | | self.Row = 0
|
| | | self.Col = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagQueryFamilyArrestAwardReceiveState)
|
| | | return sizeof(tagCSTravelClick)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''//B0 26 请求家族悬赏奖励领取情况 //tagQueryFamilyArrestAwardReceiveState:
|
| | | DumpString = '''// B0 40 游历点击 //tagCSTravelClick:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | Row:%d,
|
| | | Col:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.Row,
|
| | | self.Col
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCSTravelClick=tagCSTravelClick()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCSTravelClick.Cmd,m_NAtagCSTravelClick.SubCmd))] = m_NAtagCSTravelClick
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B0 41 游历景观升级 #tagCSTravelSceneryUP
|
| | |
|
| | | class tagCSTravelSceneryUP(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB0
|
| | | self.SubCmd = 0x41
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB0
|
| | | self.SubCmd = 0x41
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCSTravelSceneryUP)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B0 41 游历景观升级 //tagCSTravelSceneryUP:
|
| | | Cmd:%s,
|
| | | SubCmd:%s
|
| | | '''\
|
| | |
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagQueryFamilyArrestAwardReceiveState=tagQueryFamilyArrestAwardReceiveState()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagQueryFamilyArrestAwardReceiveState.Cmd,m_NAtagQueryFamilyArrestAwardReceiveState.SubCmd))] = m_NAtagQueryFamilyArrestAwardReceiveState
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #B0 25 请求家族悬赏任务完成情况 #tagQueryFamilyArrestOverState
|
| | |
|
| | | class tagQueryFamilyArrestOverState(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB0
|
| | | self.SubCmd = 0x25
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB0
|
| | | self.SubCmd = 0x25
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagQueryFamilyArrestOverState)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''//B0 25 请求家族悬赏任务完成情况 //tagQueryFamilyArrestOverState:
|
| | | Cmd:%s,
|
| | | SubCmd:%s
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagQueryFamilyArrestOverState=tagQueryFamilyArrestOverState()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagQueryFamilyArrestOverState.Cmd,m_NAtagQueryFamilyArrestOverState.SubCmd))] = m_NAtagQueryFamilyArrestOverState
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #B0 24 领取家族悬赏奖励 #tagReceiveFamilyArrestAward
|
| | |
|
| | | class tagReceiveFamilyArrestAward(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("ArrestID", c_int), #悬赏任务ID
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB0
|
| | | self.SubCmd = 0x24
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB0
|
| | | self.SubCmd = 0x24
|
| | | self.ArrestID = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagReceiveFamilyArrestAward)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''//B0 24 领取家族悬赏奖励 //tagReceiveFamilyArrestAward:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | ArrestID:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.ArrestID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagReceiveFamilyArrestAward=tagReceiveFamilyArrestAward()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagReceiveFamilyArrestAward.Cmd,m_NAtagReceiveFamilyArrestAward.SubCmd))] = m_NAtagReceiveFamilyArrestAward
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B0 12 开始协助Boss #tagCGStartAssistBoss
|
| | |
|
| | | class tagCGStartAssistBoss(Structure):
|
| | | Head = tagHead()
|
| | | AssistGUID = "" #(char AssistGUID[40])//协助GUID
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xB0
|
| | | self.Head.SubCmd = 0x12
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xB0
|
| | | self.Head.SubCmd = 0x12
|
| | | self.AssistGUID = ""
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 40
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteString(data, 40, self.AssistGUID)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | AssistGUID:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.AssistGUID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCGStartAssistBoss=tagCGStartAssistBoss()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGStartAssistBoss.Head.Cmd,m_NAtagCGStartAssistBoss.Head.SubCmd))] = m_NAtagCGStartAssistBoss
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B0 14 使用协助感谢礼盒 #tagCGUseAssistThanksGift
|
| | |
|
| | | class tagCGUseAssistThanksGift(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("ItemID", c_int), |
| | | ("IsPreview", c_ubyte), #是否预览,非预览即确认使用
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB0
|
| | | self.SubCmd = 0x14
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB0
|
| | | self.SubCmd = 0x14
|
| | | self.ItemID = 0
|
| | | self.IsPreview = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCGUseAssistThanksGift)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B0 14 使用协助感谢礼盒 //tagCGUseAssistThanksGift:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | ItemID:%d,
|
| | | IsPreview:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.ItemID,
|
| | | self.IsPreview
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCGUseAssistThanksGift=tagCGUseAssistThanksGift()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGUseAssistThanksGift.Cmd,m_NAtagCGUseAssistThanksGift.SubCmd))] = m_NAtagCGUseAssistThanksGift
|
| | | m_NAtagCSTravelSceneryUP=tagCSTravelSceneryUP()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCSTravelSceneryUP.Cmd,m_NAtagCSTravelSceneryUP.SubCmd))] = m_NAtagCSTravelSceneryUP
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | | m_NAtagCMWorldTransfer=tagCMWorldTransfer()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMWorldTransfer.Cmd,m_NAtagCMWorldTransfer.SubCmd))] = m_NAtagCMWorldTransfer
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B0 20 请求膜拜玩家 #tagCGWorship
|
| | |
|
| | | class tagCGWorship(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("PlayerID", c_int), # 目标玩家ID
|
| | | ("WorshipType", c_ubyte), # 膜拜类型
|
| | | ("WorshipValue", c_int), # 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB0
|
| | | self.SubCmd = 0x20
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB0
|
| | | self.SubCmd = 0x20
|
| | | self.PlayerID = 0
|
| | | self.WorshipType = 0
|
| | | self.WorshipValue = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagCGWorship)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B0 20 请求膜拜玩家 //tagCGWorship:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | PlayerID:%d,
|
| | | WorshipType:%d,
|
| | | WorshipValue:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.PlayerID,
|
| | | self.WorshipType,
|
| | | self.WorshipValue
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCGWorship=tagCGWorship()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGWorship.Cmd,m_NAtagCGWorship.SubCmd))] = m_NAtagCGWorship
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B0 27 活跃放置信息 #tagMCActivityPlaceInfo
|
| | |
|
| | | class tagMCActivityPlaceInfo(Structure):
|
| | | Head = tagHead()
|
| | | StartTime = 0 #(DWORD StartTime)// 开始探索time时间戳,完成一次探索会自动下一次探索并更新该时间
|
| | | PlaceCount = 0 #(BYTE PlaceCount)// 剩余未完成探索次数
|
| | | RewardCount = 0 #(BYTE RewardCount)// 累计未领取探索奖励次数
|
| | | RewardLen = 0 #(BYTE RewardLen)
|
| | | RewardInfo = "" #(String RewardInfo)//累计未领取探索奖励 [[itemID, count], ...]
|
| | | TodayExp = 0 #(DWORD TodayExp)
|
| | | TodayExpPoint = 0 #(DWORD TodayExpPoint)
|
| | | YestordayExp = 0 #(DWORD YestordayExp)
|
| | | YestordayExpPoint = 0 #(DWORD YestordayExpPoint)
|
| | | TotalCount = 0 #(DWORD TotalCount)// 累计活跃放置次数
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xB0
|
| | | self.Head.SubCmd = 0x27
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.StartTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.PlaceCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.RewardCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.RewardLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.RewardInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.RewardLen)
|
| | | self.TodayExp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.TodayExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.YestordayExp,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.YestordayExpPoint,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.TotalCount,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xB0
|
| | | self.Head.SubCmd = 0x27
|
| | | self.StartTime = 0
|
| | | self.PlaceCount = 0
|
| | | self.RewardCount = 0
|
| | | self.RewardLen = 0
|
| | | self.RewardInfo = ""
|
| | | self.TodayExp = 0
|
| | | self.TodayExpPoint = 0
|
| | | self.YestordayExp = 0
|
| | | self.YestordayExpPoint = 0
|
| | | self.TotalCount = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 4
|
| | | length += 1
|
| | | length += 1
|
| | | length += 1
|
| | | length += len(self.RewardInfo)
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteDWORD(data, self.StartTime)
|
| | | data = CommFunc.WriteBYTE(data, self.PlaceCount)
|
| | | data = CommFunc.WriteBYTE(data, self.RewardCount)
|
| | | data = CommFunc.WriteBYTE(data, self.RewardLen)
|
| | | data = CommFunc.WriteString(data, self.RewardLen, self.RewardInfo)
|
| | | data = CommFunc.WriteDWORD(data, self.TodayExp)
|
| | | data = CommFunc.WriteDWORD(data, self.TodayExpPoint)
|
| | | data = CommFunc.WriteDWORD(data, self.YestordayExp)
|
| | | data = CommFunc.WriteDWORD(data, self.YestordayExpPoint)
|
| | | data = CommFunc.WriteDWORD(data, self.TotalCount)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | StartTime:%d,
|
| | | PlaceCount:%d,
|
| | | RewardCount:%d,
|
| | | RewardLen:%d,
|
| | | RewardInfo:%s,
|
| | | TodayExp:%d,
|
| | | TodayExpPoint:%d,
|
| | | YestordayExp:%d,
|
| | | YestordayExpPoint:%d,
|
| | | TotalCount:%d
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.StartTime,
|
| | | self.PlaceCount,
|
| | | self.RewardCount,
|
| | | self.RewardLen,
|
| | | self.RewardInfo,
|
| | | self.TodayExp,
|
| | | self.TodayExpPoint,
|
| | | self.YestordayExp,
|
| | | self.YestordayExpPoint,
|
| | | self.TotalCount
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCActivityPlaceInfo=tagMCActivityPlaceInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCActivityPlaceInfo.Head.Cmd,m_NAtagMCActivityPlaceInfo.Head.SubCmd))] = m_NAtagMCActivityPlaceInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B0 01 新增协助 #tagGCAssistInfoList
|
| | |
|
| | | class tagGCAssistInfo(Structure):
|
| | | AssistGUID = "" #(char AssistGUID[40])//协助GUID
|
| | | PlayerID = 0 #(DWORD PlayerID)
|
| | | PlayerName = "" #(char PlayerName[33])
|
| | | Job = 0 #(BYTE Job)
|
| | | LV = 0 #(WORD LV)//等级
|
| | | RealmLV = 0 #(BYTE RealmLV)//境界
|
| | | Face = 0 #(DWORD Face)//基本脸型
|
| | | FacePic = 0 #(DWORD FacePic)//头像框
|
| | | MapID = 0 #(DWORD MapID)
|
| | | LineID = 0 #(DWORD LineID)
|
| | | NPCID = 0 #(DWORD NPCID)
|
| | | ExDataLen = 0 #(WORD ExDataLen)
|
| | | ExData = "" #(String ExData)//其他自定义数据
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
|
| | | self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
|
| | | self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.AssistGUID = ""
|
| | | self.PlayerID = 0
|
| | | self.PlayerName = ""
|
| | | self.Job = 0
|
| | | self.LV = 0
|
| | | self.RealmLV = 0
|
| | | self.Face = 0
|
| | | self.FacePic = 0
|
| | | self.MapID = 0
|
| | | self.LineID = 0
|
| | | self.NPCID = 0
|
| | | self.ExDataLen = 0
|
| | | self.ExData = ""
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 40
|
| | | length += 4
|
| | | length += 33
|
| | | length += 1
|
| | | length += 2
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 2
|
| | | length += len(self.ExData)
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, 40, self.AssistGUID)
|
| | | data = CommFunc.WriteDWORD(data, self.PlayerID)
|
| | | data = CommFunc.WriteString(data, 33, self.PlayerName)
|
| | | data = CommFunc.WriteBYTE(data, self.Job)
|
| | | data = CommFunc.WriteWORD(data, self.LV)
|
| | | data = CommFunc.WriteBYTE(data, self.RealmLV)
|
| | | data = CommFunc.WriteDWORD(data, self.Face)
|
| | | data = CommFunc.WriteDWORD(data, self.FacePic)
|
| | | data = CommFunc.WriteDWORD(data, self.MapID)
|
| | | data = CommFunc.WriteDWORD(data, self.LineID)
|
| | | data = CommFunc.WriteDWORD(data, self.NPCID)
|
| | | data = CommFunc.WriteWORD(data, self.ExDataLen)
|
| | | data = CommFunc.WriteString(data, self.ExDataLen, self.ExData)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | AssistGUID:%s,
|
| | | PlayerID:%d,
|
| | | PlayerName:%s,
|
| | | Job:%d,
|
| | | LV:%d,
|
| | | RealmLV:%d,
|
| | | Face:%d,
|
| | | FacePic:%d,
|
| | | MapID:%d,
|
| | | LineID:%d,
|
| | | NPCID:%d,
|
| | | ExDataLen:%d,
|
| | | ExData:%s
|
| | | '''\
|
| | | %(
|
| | | self.AssistGUID,
|
| | | self.PlayerID,
|
| | | self.PlayerName,
|
| | | self.Job,
|
| | | self.LV,
|
| | | self.RealmLV,
|
| | | self.Face,
|
| | | self.FacePic,
|
| | | self.MapID,
|
| | | self.LineID,
|
| | | self.NPCID,
|
| | | self.ExDataLen,
|
| | | self.ExData
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCAssistInfoList(Structure):
|
| | | Head = tagHead()
|
| | | Count = 0 #(BYTE Count)
|
| | | AssistInfoList = list() #(vector<tagGCAssistInfo> AssistInfoList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xB0
|
| | | self.Head.SubCmd = 0x01
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.Count):
|
| | | temAssistInfoList = tagGCAssistInfo()
|
| | | _pos = temAssistInfoList.ReadData(_lpData, _pos)
|
| | | self.AssistInfoList.append(temAssistInfoList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xB0
|
| | | self.Head.SubCmd = 0x01
|
| | | self.Count = 0
|
| | | self.AssistInfoList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.Count):
|
| | | length += self.AssistInfoList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.Count)
|
| | | for i in range(self.Count):
|
| | | data = CommFunc.WriteString(data, self.AssistInfoList[i].GetLength(), self.AssistInfoList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Count:%d,
|
| | | AssistInfoList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Count,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCAssistInfoList=tagGCAssistInfoList()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistInfoList.Head.Cmd,m_NAtagGCAssistInfoList.Head.SubCmd))] = m_NAtagGCAssistInfoList
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B0 03 正在进行中的协助 #tagGCAssistingInfo
|
| | |
|
| | | class tagGCAssistingInfo(Structure):
|
| | | Head = tagHead()
|
| | | AssistGUID = "" #(char AssistGUID[40])//协助GUID
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xB0
|
| | | self.Head.SubCmd = 0x03
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xB0
|
| | | self.Head.SubCmd = 0x03
|
| | | self.AssistGUID = ""
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 40
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteString(data, 40, self.AssistGUID)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | AssistGUID:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.AssistGUID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCAssistingInfo=tagGCAssistingInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistingInfo.Head.Cmd,m_NAtagGCAssistingInfo.Head.SubCmd))] = m_NAtagGCAssistingInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B0 08 协助结束 #tagGCAssistOver
|
| | |
|
| | | class tagGCAssistOver(Structure):
|
| | | Head = tagHead()
|
| | | IsTagPlayerReason = 0 #(BYTE IsTagPlayerReason)//是否发布方原因
|
| | | ReasonLen = 0 #(BYTE ReasonLen)
|
| | | Reason = "" #(String Reason)//原因
|
| | | AssistGUID = "" #(char AssistGUID[40])//协助GUID
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xB0
|
| | | self.Head.SubCmd = 0x08
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.IsTagPlayerReason,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.ReasonLen,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Reason,_pos = CommFunc.ReadString(_lpData, _pos,self.ReasonLen)
|
| | | self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xB0
|
| | | self.Head.SubCmd = 0x08
|
| | | self.IsTagPlayerReason = 0
|
| | | self.ReasonLen = 0
|
| | | self.Reason = ""
|
| | | self.AssistGUID = ""
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 1
|
| | | length += len(self.Reason)
|
| | | length += 40
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.IsTagPlayerReason)
|
| | | data = CommFunc.WriteBYTE(data, self.ReasonLen)
|
| | | data = CommFunc.WriteString(data, self.ReasonLen, self.Reason)
|
| | | data = CommFunc.WriteString(data, 40, self.AssistGUID)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | IsTagPlayerReason:%d,
|
| | | ReasonLen:%d,
|
| | | Reason:%s,
|
| | | AssistGUID:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.IsTagPlayerReason,
|
| | | self.ReasonLen,
|
| | | self.Reason,
|
| | | self.AssistGUID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCAssistOver=tagGCAssistOver()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCAssistOver.Head.Cmd,m_NAtagGCAssistOver.Head.SubCmd))] = m_NAtagGCAssistOver
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B0 06 可接收协助感谢礼物个数 #tagGCCanGetAssistThanksGiftCount
|
| | |
|
| | | class tagGCCanGetAssistThanksGiftCount(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("CanGetCount", c_ubyte), |
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB0
|
| | | self.SubCmd = 0x06
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB0
|
| | | self.SubCmd = 0x06
|
| | | self.CanGetCount = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagGCCanGetAssistThanksGiftCount)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B0 06 可接收协助感谢礼物个数 //tagGCCanGetAssistThanksGiftCount:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | CanGetCount:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.CanGetCount
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCCanGetAssistThanksGiftCount=tagGCCanGetAssistThanksGiftCount()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCCanGetAssistThanksGiftCount.Cmd,m_NAtagGCCanGetAssistThanksGiftCount.SubCmd))] = m_NAtagGCCanGetAssistThanksGiftCount
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B0 02 删除协助 #tagGCClearAssist
|
| | |
|
| | | class tagGCClearAssist(Structure):
|
| | | Head = tagHead()
|
| | | AssistGUID = "" #(char AssistGUID[40])//协助GUID
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xB0
|
| | | self.Head.SubCmd = 0x02
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.AssistGUID,_pos = CommFunc.ReadString(_lpData, _pos,40)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xB0
|
| | | self.Head.SubCmd = 0x02
|
| | | self.AssistGUID = ""
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 40
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteString(data, 40, self.AssistGUID)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | AssistGUID:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.AssistGUID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCClearAssist=tagGCClearAssist()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCClearAssist.Head.Cmd,m_NAtagGCClearAssist.Head.SubCmd))] = m_NAtagGCClearAssist
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #B0 25 家族悬赏任务奖励领取情况 #tagFamilyArrestAwardReceiveState
|
| | |
|
| | | class tagFamilyArrestAwardReceiveState(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("ReceiveState", c_int), #悬赏任务奖励领取情况
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB0
|
| | | self.SubCmd = 0x25
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB0
|
| | | self.SubCmd = 0x25
|
| | | self.ReceiveState = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagFamilyArrestAwardReceiveState)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''//B0 25 家族悬赏任务奖励领取情况 //tagFamilyArrestAwardReceiveState:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | ReceiveState:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.ReceiveState
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagFamilyArrestAwardReceiveState=tagFamilyArrestAwardReceiveState()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagFamilyArrestAwardReceiveState.Cmd,m_NAtagFamilyArrestAwardReceiveState.SubCmd))] = m_NAtagFamilyArrestAwardReceiveState
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | #B0 26 家族悬赏任务完成情况 #tagFamilyArrestOverStateInfo
|
| | |
|
| | | class tagFamilyArrestOverState(Structure):
|
| | | ID = 0 #(DWORD ID)//悬赏任务ID
|
| | | NameLen = 0 #(WORD NameLen)//名字长度
|
| | | Name = "" #(String Name)//size = NameLen
|
| | | OverState = 0 #(DWORD OverState)//任务完成情况
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.ID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.NameLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.Name,_pos = CommFunc.ReadString(_lpData, _pos,self.NameLen)
|
| | | self.OverState,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.ID = 0
|
| | | self.NameLen = 0
|
| | | self.Name = ""
|
| | | self.OverState = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 4
|
| | | length += 2
|
| | | length += len(self.Name)
|
| | | length += 4
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteDWORD(data, self.ID)
|
| | | data = CommFunc.WriteWORD(data, self.NameLen)
|
| | | data = CommFunc.WriteString(data, self.NameLen, self.Name)
|
| | | data = CommFunc.WriteDWORD(data, self.OverState)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | ID:%d,
|
| | | NameLen:%d,
|
| | | Name:%s,
|
| | | OverState:%d
|
| | | '''\
|
| | | %(
|
| | | self.ID,
|
| | | self.NameLen,
|
| | | self.Name,
|
| | | self.OverState
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagFamilyArrestOverStateInfo(Structure):
|
| | | Head = tagHead()
|
| | | Count = 0 #(WORD Count)
|
| | | ArrestOverStateInfo = list() #(vector<tagFamilyArrestOverState> ArrestOverStateInfo)///size = Count |
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xB0
|
| | | self.Head.SubCmd = 0x26
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | for i in range(self.Count):
|
| | | temArrestOverStateInfo = tagFamilyArrestOverState()
|
| | | _pos = temArrestOverStateInfo.ReadData(_lpData, _pos)
|
| | | self.ArrestOverStateInfo.append(temArrestOverStateInfo)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xB0
|
| | | self.Head.SubCmd = 0x26
|
| | | self.Count = 0
|
| | | self.ArrestOverStateInfo = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 2
|
| | | for i in range(self.Count):
|
| | | length += self.ArrestOverStateInfo[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteWORD(data, self.Count)
|
| | | for i in range(self.Count):
|
| | | data = CommFunc.WriteString(data, self.ArrestOverStateInfo[i].GetLength(), self.ArrestOverStateInfo[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Count:%d,
|
| | | ArrestOverStateInfo:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Count,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagFamilyArrestOverStateInfo=tagFamilyArrestOverStateInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagFamilyArrestOverStateInfo.Head.Cmd,m_NAtagFamilyArrestOverStateInfo.Head.SubCmd))] = m_NAtagFamilyArrestOverStateInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B0 05 接收协助感谢礼物预览 #tagGCGetAssistThanksGiftPreview
|
| | |
|
| | | class tagGCGetAssistThanksGiftPreview(Structure):
|
| | | Head = tagHead()
|
| | | ItemID = 0 #(DWORD ItemID)//礼盒ID
|
| | | PlayerID = 0 #(DWORD PlayerID)//发起玩家ID
|
| | | PlayerName = "" #(char PlayerName[33])
|
| | | Job = 0 #(BYTE Job)
|
| | | LV = 0 #(WORD LV)
|
| | | RealmLV = 0 #(BYTE RealmLV)//境界
|
| | | Face = 0 #(DWORD Face)//基本脸型
|
| | | FacePic = 0 #(DWORD FacePic)//头像框
|
| | | MapID = 0 #(DWORD MapID)
|
| | | LineID = 0 #(DWORD LineID)
|
| | | NPCID = 0 #(DWORD NPCID)
|
| | | ExDataLen = 0 #(WORD ExDataLen)
|
| | | ExData = "" #(String ExData)//其他自定义数据
|
| | | TimeStr = "" #(char TimeStr[19])//协助时间yyyy-MM-dd hh:mm:ss
|
| | | ExtraAward = 0 #(BYTE ExtraAward)//是否有额外奖励
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xB0
|
| | | self.Head.SubCmd = 0x05
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
|
| | | self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen)
|
| | | self.TimeStr,_pos = CommFunc.ReadString(_lpData, _pos,19)
|
| | | self.ExtraAward,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xB0
|
| | | self.Head.SubCmd = 0x05
|
| | | self.ItemID = 0
|
| | | self.PlayerID = 0
|
| | | self.PlayerName = ""
|
| | | self.Job = 0
|
| | | self.LV = 0
|
| | | self.RealmLV = 0
|
| | | self.Face = 0
|
| | | self.FacePic = 0
|
| | | self.MapID = 0
|
| | | self.LineID = 0
|
| | | self.NPCID = 0
|
| | | self.ExDataLen = 0
|
| | | self.ExData = ""
|
| | | self.TimeStr = ""
|
| | | self.ExtraAward = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 4
|
| | | length += 4
|
| | | length += 33
|
| | | length += 1
|
| | | length += 2
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 2
|
| | | length += len(self.ExData)
|
| | | length += 19
|
| | | length += 1
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteDWORD(data, self.ItemID)
|
| | | data = CommFunc.WriteDWORD(data, self.PlayerID)
|
| | | data = CommFunc.WriteString(data, 33, self.PlayerName)
|
| | | data = CommFunc.WriteBYTE(data, self.Job)
|
| | | data = CommFunc.WriteWORD(data, self.LV)
|
| | | data = CommFunc.WriteBYTE(data, self.RealmLV)
|
| | | data = CommFunc.WriteDWORD(data, self.Face)
|
| | | data = CommFunc.WriteDWORD(data, self.FacePic)
|
| | | data = CommFunc.WriteDWORD(data, self.MapID)
|
| | | data = CommFunc.WriteDWORD(data, self.LineID)
|
| | | data = CommFunc.WriteDWORD(data, self.NPCID)
|
| | | data = CommFunc.WriteWORD(data, self.ExDataLen)
|
| | | data = CommFunc.WriteString(data, self.ExDataLen, self.ExData)
|
| | | data = CommFunc.WriteString(data, 19, self.TimeStr)
|
| | | data = CommFunc.WriteBYTE(data, self.ExtraAward)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | ItemID:%d,
|
| | | PlayerID:%d,
|
| | | PlayerName:%s,
|
| | | Job:%d,
|
| | | LV:%d,
|
| | | RealmLV:%d,
|
| | | Face:%d,
|
| | | FacePic:%d,
|
| | | MapID:%d,
|
| | | LineID:%d,
|
| | | NPCID:%d,
|
| | | ExDataLen:%d,
|
| | | ExData:%s,
|
| | | TimeStr:%s,
|
| | | ExtraAward:%d
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.ItemID,
|
| | | self.PlayerID,
|
| | | self.PlayerName,
|
| | | self.Job,
|
| | | self.LV,
|
| | | self.RealmLV,
|
| | | self.Face,
|
| | | self.FacePic,
|
| | | self.MapID,
|
| | | self.LineID,
|
| | | self.NPCID,
|
| | | self.ExDataLen,
|
| | | self.ExData,
|
| | | self.TimeStr,
|
| | | self.ExtraAward
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCGetAssistThanksGiftPreview=tagGCGetAssistThanksGiftPreview()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCGetAssistThanksGiftPreview.Head.Cmd,m_NAtagGCGetAssistThanksGiftPreview.Head.SubCmd))] = m_NAtagGCGetAssistThanksGiftPreview
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B0 37 淘金营地信息 #tagSCGoldRushCampInfo
|
| | |
|
| | | class tagSCGoldRushCamp(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B0 07 今日协助活跃令信息 #tagMCTodayAssistMoneyInfo
|
| | | # B0 40 游历信息 #tagSCTravelInfo
|
| | |
|
| | | class tagMCTodayAssistMoneyInfo(Structure):
|
| | | class tagSCTravelGrid(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("TodayAssistMoney", c_ushort), #今日已获得活跃令,不含社交加成
|
| | | ("SocialMoney", c_ushort), #社交额外加成
|
| | | ("Row", c_ubyte), #行,从1开始
|
| | | ("Col", c_ubyte), #列,从1开始
|
| | | ("State", c_ubyte), #状态:0-未点击;1-已开启;2-裂纹
|
| | | ("Multi", c_ubyte), #奖励倍值: 默认1倍;2-双倍;...
|
| | | ("EventID", c_ushort), #事件ID
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB0
|
| | | self.SubCmd = 0x07
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | |
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB0
|
| | | self.SubCmd = 0x07
|
| | | self.TodayAssistMoney = 0
|
| | | self.SocialMoney = 0
|
| | | self.Row = 0
|
| | | self.Col = 0
|
| | | self.State = 0
|
| | | self.Multi = 0
|
| | | self.EventID = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCTodayAssistMoneyInfo)
|
| | | return sizeof(tagSCTravelGrid)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B0 07 今日协助活跃令信息 //tagMCTodayAssistMoneyInfo:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | TodayAssistMoney:%d,
|
| | | SocialMoney:%d
|
| | | DumpString = '''// B0 40 游历信息 //tagSCTravelInfo:
|
| | | Row:%d,
|
| | | Col:%d,
|
| | | State:%d,
|
| | | Multi:%d,
|
| | | EventID:%d
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.TodayAssistMoney,
|
| | | self.SocialMoney
|
| | | self.Row,
|
| | | self.Col,
|
| | | self.State,
|
| | | self.Multi,
|
| | | self.EventID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCTodayAssistMoneyInfo=tagMCTodayAssistMoneyInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCTodayAssistMoneyInfo.Cmd,m_NAtagMCTodayAssistMoneyInfo.SubCmd))] = m_NAtagMCTodayAssistMoneyInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B0 04 使用协助感谢礼盒预览 #tagGCUseAssistThanksGiftPreview
|
| | |
|
| | | class tagGCAssistPlayerInfo(Structure):
|
| | | PlayerID = 0 #(DWORD PlayerID)
|
| | | PlayerName = "" #(char PlayerName[33])
|
| | | Job = 0 #(BYTE Job)
|
| | | LV = 0 #(WORD LV)
|
| | | RealmLV = 0 #(BYTE RealmLV)//境界
|
| | | Face = 0 #(DWORD Face)//基本脸型
|
| | | FacePic = 0 #(DWORD FacePic)//头像框
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.PlayerName,_pos = CommFunc.ReadString(_lpData, _pos,33)
|
| | | self.Job,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.LV,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.RealmLV,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.Face,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.FacePic,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.PlayerID = 0
|
| | | self.PlayerName = ""
|
| | | self.Job = 0
|
| | | self.LV = 0
|
| | | self.RealmLV = 0
|
| | | self.Face = 0
|
| | | self.FacePic = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 4
|
| | | length += 33
|
| | | length += 1
|
| | | length += 2
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteDWORD(data, self.PlayerID)
|
| | | data = CommFunc.WriteString(data, 33, self.PlayerName)
|
| | | data = CommFunc.WriteBYTE(data, self.Job)
|
| | | data = CommFunc.WriteWORD(data, self.LV)
|
| | | data = CommFunc.WriteBYTE(data, self.RealmLV)
|
| | | data = CommFunc.WriteDWORD(data, self.Face)
|
| | | data = CommFunc.WriteDWORD(data, self.FacePic)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | PlayerID:%d,
|
| | | PlayerName:%s,
|
| | | Job:%d,
|
| | | LV:%d,
|
| | | RealmLV:%d,
|
| | | Face:%d,
|
| | | FacePic:%d
|
| | | '''\
|
| | | %(
|
| | | self.PlayerID,
|
| | | self.PlayerName,
|
| | | self.Job,
|
| | | self.LV,
|
| | | self.RealmLV,
|
| | | self.Face,
|
| | | self.FacePic
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCUseAssistThanksGiftPreview(Structure):
|
| | | class tagSCTravelInfo(Structure):
|
| | | Head = tagHead()
|
| | | ItemID = 0 #(DWORD ItemID)//礼盒ID
|
| | | MapID = 0 #(DWORD MapID)
|
| | | LineID = 0 #(DWORD LineID)
|
| | | NPCID = 0 #(DWORD NPCID)
|
| | | ExDataLen = 0 #(WORD ExDataLen)
|
| | | ExData = "" #(String ExData)//其他自定义数据
|
| | | AssistPlayerCount = 0 #(BYTE AssistPlayerCount)
|
| | | AssistPlayerList = list() #(vector<tagGCAssistPlayerInfo> AssistPlayerList)//协助玩家列表
|
| | | Energy = 0 #(BYTE Energy)//剩余体力
|
| | | EnergyTime = 0 #(DWORD EnergyTime)//上次恢复体力时间戳
|
| | | TravelCnt = 0 #(DWORD TravelCnt)//累计游历次数
|
| | | SceneryType = 0 #(BYTE SceneryType)//景观类型
|
| | | SceneryRow = 0 #(BYTE SceneryRow)//景观左上角所在行,从1开始
|
| | | SceneryCol = 0 #(BYTE SceneryCol)//景观左上角所在列,从1开始
|
| | | SceneryLVInfo = 0 #(DWORD SceneryLVInfo)//景观升级信息:0-还未处理景观升级;个位数-第1次升级成功与否,1-成功,2-失败;十位-第2次 ...
|
| | | Result = 0 #(BYTE Result)//后端处理:0-无;1-常规;2-马车炸弹;3-传送门;4-景观;5-重置开始
|
| | | GridCnt = 0 #(BYTE GridCnt)
|
| | | GridList = list() #(vector<tagSCTravelGrid> GridList)//格子信息列表,只同步变化的
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xB0
|
| | | self.Head.SubCmd = 0x04
|
| | | self.Head.SubCmd = 0x40
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.ItemID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.MapID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.LineID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.NPCID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.ExDataLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.ExData,_pos = CommFunc.ReadString(_lpData, _pos,self.ExDataLen)
|
| | | self.AssistPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.AssistPlayerCount):
|
| | | temAssistPlayerList = tagGCAssistPlayerInfo()
|
| | | _pos = temAssistPlayerList.ReadData(_lpData, _pos)
|
| | | self.AssistPlayerList.append(temAssistPlayerList)
|
| | | self.Energy,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.EnergyTime,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.TravelCnt,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.SceneryType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.SceneryRow,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.SceneryCol,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.SceneryLVInfo,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.Result,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.GridCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.GridCnt):
|
| | | temGridList = tagSCTravelGrid()
|
| | | _pos = temGridList.ReadData(_lpData, _pos)
|
| | | self.GridList.append(temGridList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xB0
|
| | | self.Head.SubCmd = 0x04
|
| | | self.ItemID = 0
|
| | | self.MapID = 0
|
| | | self.LineID = 0
|
| | | self.NPCID = 0
|
| | | self.ExDataLen = 0
|
| | | self.ExData = ""
|
| | | self.AssistPlayerCount = 0
|
| | | self.AssistPlayerList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 4
|
| | | length += 2
|
| | | length += len(self.ExData)
|
| | | length += 1
|
| | | for i in range(self.AssistPlayerCount):
|
| | | length += self.AssistPlayerList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteDWORD(data, self.ItemID)
|
| | | data = CommFunc.WriteDWORD(data, self.MapID)
|
| | | data = CommFunc.WriteDWORD(data, self.LineID)
|
| | | data = CommFunc.WriteDWORD(data, self.NPCID)
|
| | | data = CommFunc.WriteWORD(data, self.ExDataLen)
|
| | | data = CommFunc.WriteString(data, self.ExDataLen, self.ExData)
|
| | | data = CommFunc.WriteBYTE(data, self.AssistPlayerCount)
|
| | | for i in range(self.AssistPlayerCount):
|
| | | data = CommFunc.WriteString(data, self.AssistPlayerList[i].GetLength(), self.AssistPlayerList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | ItemID:%d,
|
| | | MapID:%d,
|
| | | LineID:%d,
|
| | | NPCID:%d,
|
| | | ExDataLen:%d,
|
| | | ExData:%s,
|
| | | AssistPlayerCount:%d,
|
| | | AssistPlayerList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.ItemID,
|
| | | self.MapID,
|
| | | self.LineID,
|
| | | self.NPCID,
|
| | | self.ExDataLen,
|
| | | self.ExData,
|
| | | self.AssistPlayerCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCUseAssistThanksGiftPreview=tagGCUseAssistThanksGiftPreview()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCUseAssistThanksGiftPreview.Head.Cmd,m_NAtagGCUseAssistThanksGiftPreview.Head.SubCmd))] = m_NAtagGCUseAssistThanksGiftPreview
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B0 20 膜拜信息列表 #tagGCWorshipInfoList
|
| | |
|
| | | class tagGCWorshipInfo(Structure):
|
| | | PlayerID = 0 #(DWORD PlayerID)// 目标玩家ID
|
| | | WorshipType = 0 #(BYTE WorshipType)// 膜拜类型
|
| | | WorshipValue = 0 #(DWORD WorshipValue)// 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义
|
| | | InfoLen = 0 #(WORD InfoLen)
|
| | | PlayerInfo = "" #(String PlayerInfo)// 玩家信息{k:v, ...}
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | self.PlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.WorshipType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | self.WorshipValue,_pos = CommFunc.ReadDWORD(_lpData, _pos)
|
| | | self.InfoLen,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.PlayerInfo,_pos = CommFunc.ReadString(_lpData, _pos,self.InfoLen)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.PlayerID = 0
|
| | | self.WorshipType = 0
|
| | | self.WorshipValue = 0
|
| | | self.InfoLen = 0
|
| | | self.PlayerInfo = ""
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += 4
|
| | | length += 1
|
| | | length += 4
|
| | | length += 2
|
| | | length += len(self.PlayerInfo)
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteDWORD(data, self.PlayerID)
|
| | | data = CommFunc.WriteBYTE(data, self.WorshipType)
|
| | | data = CommFunc.WriteDWORD(data, self.WorshipValue)
|
| | | data = CommFunc.WriteWORD(data, self.InfoLen)
|
| | | data = CommFunc.WriteString(data, self.InfoLen, self.PlayerInfo)
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | PlayerID:%d,
|
| | | WorshipType:%d,
|
| | | WorshipValue:%d,
|
| | | InfoLen:%d,
|
| | | PlayerInfo:%s
|
| | | '''\
|
| | | %(
|
| | | self.PlayerID,
|
| | | self.WorshipType,
|
| | | self.WorshipValue,
|
| | | self.InfoLen,
|
| | | self.PlayerInfo
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagGCWorshipInfoList(Structure):
|
| | | Head = tagHead()
|
| | | WorshipCount = 0 #(BYTE WorshipCount)
|
| | | WorshipInfoList = list() #(vector<tagGCWorshipInfo> WorshipInfoList)
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xB0
|
| | | self.Head.SubCmd = 0x20
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.WorshipCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.WorshipCount):
|
| | | temWorshipInfoList = tagGCWorshipInfo()
|
| | | _pos = temWorshipInfoList.ReadData(_lpData, _pos)
|
| | | self.WorshipInfoList.append(temWorshipInfoList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xB0
|
| | | self.Head.SubCmd = 0x20
|
| | | self.WorshipCount = 0
|
| | | self.WorshipInfoList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.WorshipCount):
|
| | | length += self.WorshipInfoList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.WorshipCount)
|
| | | for i in range(self.WorshipCount):
|
| | | data = CommFunc.WriteString(data, self.WorshipInfoList[i].GetLength(), self.WorshipInfoList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | WorshipCount:%d,
|
| | | WorshipInfoList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.WorshipCount,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCWorshipInfoList=tagGCWorshipInfoList()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCWorshipInfoList.Head.Cmd,m_NAtagGCWorshipInfoList.Head.SubCmd))] = m_NAtagGCWorshipInfoList
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # B0 21 膜拜结果 #tagGCWorshipResult
|
| | |
|
| | | class tagGCWorshipResult(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("Cmd", c_ubyte),
|
| | | ("SubCmd", c_ubyte),
|
| | | ("PlayerID", c_int), # 目标玩家ID
|
| | | ("WorshipType", c_ubyte), # 膜拜类型
|
| | | ("WorshipValue", c_int), # 膜拜类型对应的功能值,如名次或其他,由具体膜拜类型定义对应值含义
|
| | | ("Result", c_ubyte), # 膜拜结果:0-成功;1-不存在该膜拜类型;2-不存在该目标膜拜;3-不能膜拜该目标;
|
| | | ("MoneyType", c_ubyte), # 货币类型
|
| | | ("MoneyValue", c_int), # 货币奖励
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Cmd = 0xB0
|
| | | self.SubCmd = 0x21
|
| | | return
|
| | |
|
| | | def ReadData(self, stringData, _pos=0, _len=0):
|
| | | self.Clear()
|
| | | memmove(addressof(self), stringData[_pos:], self.GetLength())
|
| | | return _pos + self.GetLength()
|
| | |
|
| | | def Clear(self):
|
| | | self.Cmd = 0xB0
|
| | | self.SubCmd = 0x21
|
| | | self.PlayerID = 0
|
| | | self.WorshipType = 0
|
| | | self.WorshipValue = 0
|
| | | self.Head.SubCmd = 0x40
|
| | | self.Energy = 0
|
| | | self.EnergyTime = 0
|
| | | self.TravelCnt = 0
|
| | | self.SceneryType = 0
|
| | | self.SceneryRow = 0
|
| | | self.SceneryCol = 0
|
| | | self.SceneryLVInfo = 0
|
| | | self.Result = 0
|
| | | self.MoneyType = 0
|
| | | self.MoneyValue = 0
|
| | | self.GridCnt = 0
|
| | | self.GridList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagGCWorshipResult)
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | length += 4
|
| | | length += 4
|
| | | length += 1
|
| | | length += 1
|
| | | length += 1
|
| | | length += 4
|
| | | length += 1
|
| | | length += 1
|
| | | for i in range(self.GridCnt):
|
| | | length += self.GridList[i].GetLength()
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteBYTE(data, self.Energy)
|
| | | data = CommFunc.WriteDWORD(data, self.EnergyTime)
|
| | | data = CommFunc.WriteDWORD(data, self.TravelCnt)
|
| | | data = CommFunc.WriteBYTE(data, self.SceneryType)
|
| | | data = CommFunc.WriteBYTE(data, self.SceneryRow)
|
| | | data = CommFunc.WriteBYTE(data, self.SceneryCol)
|
| | | data = CommFunc.WriteDWORD(data, self.SceneryLVInfo)
|
| | | data = CommFunc.WriteBYTE(data, self.Result)
|
| | | data = CommFunc.WriteBYTE(data, self.GridCnt)
|
| | | for i in range(self.GridCnt):
|
| | | data = CommFunc.WriteString(data, self.GridList[i].GetLength(), self.GridList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// B0 21 膜拜结果 //tagGCWorshipResult:
|
| | | Cmd:%s,
|
| | | SubCmd:%s,
|
| | | PlayerID:%d,
|
| | | WorshipType:%d,
|
| | | WorshipValue:%d,
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Energy:%d,
|
| | | EnergyTime:%d,
|
| | | TravelCnt:%d,
|
| | | SceneryType:%d,
|
| | | SceneryRow:%d,
|
| | | SceneryCol:%d,
|
| | | SceneryLVInfo:%d,
|
| | | Result:%d,
|
| | | MoneyType:%d,
|
| | | MoneyValue:%d
|
| | | GridCnt:%d,
|
| | | GridList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Cmd,
|
| | | self.SubCmd,
|
| | | self.PlayerID,
|
| | | self.WorshipType,
|
| | | self.WorshipValue,
|
| | | self.Head.OutputString(),
|
| | | self.Energy,
|
| | | self.EnergyTime,
|
| | | self.TravelCnt,
|
| | | self.SceneryType,
|
| | | self.SceneryRow,
|
| | | self.SceneryCol,
|
| | | self.SceneryLVInfo,
|
| | | self.Result,
|
| | | self.MoneyType,
|
| | | self.MoneyValue
|
| | | self.GridCnt,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagGCWorshipResult=tagGCWorshipResult()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagGCWorshipResult.Cmd,m_NAtagGCWorshipResult.SubCmd))] = m_NAtagGCWorshipResult
|
| | | m_NAtagSCTravelInfo=tagSCTravelInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCTravelInfo.Head.Cmd,m_NAtagSCTravelInfo.Head.SubCmd))] = m_NAtagSCTravelInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package GM.Commands.Travel
|
| | | #
|
| | | # @todo:游历
|
| | | # @author hxp
|
| | | # @date 2025-11-25
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 游历
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2025-11-25 17:30"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import GameWorld
|
| | | import IpyGameDataPY
|
| | | import PlayerControl
|
| | | import PlayerTravel
|
| | | import ChConfig
|
| | |
|
| | | import time
|
| | |
|
| | | def OnExec(curPlayer, msgList):
|
| | | |
| | | if not msgList:
|
| | | GameWorld.DebugAnswer(curPlayer, "重刷游历: Travel 0 [指定景观类型]")
|
| | | GameWorld.DebugAnswer(curPlayer, "游历次数: Travel t 累计游历次数")
|
| | | GameWorld.DebugAnswer(curPlayer, "设置体力: Travel e 体力 [差几秒可恢复体力]")
|
| | | return
|
| | | |
| | | value1 = msgList[0]
|
| | | if value1 == 0:
|
| | | sceneryType = msgList[1] if len(msgList) > 1 else 0 |
| | | sceneryType, randRow, randCol = PlayerTravel.ResetTravelGrid(curPlayer, sceneryType)
|
| | | GameWorld.DebugAnswer(curPlayer, "重刷游历景观类型:%s,行:%s,列:%s" % (sceneryType, randRow, randCol))
|
| | | |
| | | elif value1 == "t":
|
| | | travelCnt = msgList[1] if len(msgList) > 1 else 0 |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelCnt, travelCnt)
|
| | | GameWorld.DebugAnswer(curPlayer, "累计游历次数: %s" % travelCnt)
|
| | | PlayerTravel.SyncTravelInfo(curPlayer)
|
| | | |
| | | elif value1 == "e":
|
| | | energy = msgList[1] if len(msgList) > 1 else 0
|
| | | remainSeconds = msgList[2] if len(msgList) > 2 else 0
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelEnergy, energy)
|
| | | if remainSeconds:
|
| | | cdSeconds = IpyGameDataPY.GetFuncCfg("TravelSet", 2) * 60
|
| | | energyTime = int(time.time()) - cdSeconds + remainSeconds
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelEnergyTime, energyTime)
|
| | | GameWorld.DebugAnswer(curPlayer, "设置体力: %s" % (energy))
|
| | | PlayerTravel.SyncTravelInfo(curPlayer)
|
| | | return
|
| | |
| | | ("list", "AttrPerStarAddList", 0),
|
| | | ),
|
| | |
|
| | | "TravelEvent":(
|
| | | ("WORD", "EventID", 1),
|
| | | ("DWORD", "EventWeight", 0),
|
| | | ("DWORD", "AwardItemID", 0),
|
| | | ("DWORD", "AwardItemCnt", 0),
|
| | | ),
|
| | |
|
| | | "TravelScenery":(
|
| | | ("BYTE", "SceneryType", 1),
|
| | | ("BYTE", "AwardQuality", 0),
|
| | | ("DWORD", "UpRate", 0),
|
| | | ("list", "AwardItemRandCntList", 0),
|
| | | ("list", "AwardItemExWeightList", 0),
|
| | | ("BYTE", "AwardItemExCnt", 0),
|
| | | ),
|
| | |
|
| | | "PlayerLV":(
|
| | | ("WORD", "LV", 1),
|
| | | ("DWORD", "Exp", 0),
|
| | |
| | | ("BYTE", "SkinIndex", 0),
|
| | | ),
|
| | |
|
| | | "AssistThanksGift":(
|
| | | ("DWORD", "GiftID", 1),
|
| | | ("list", "RequestPlayerAward", 0),
|
| | | ("list", "AssistPlayerAward", 0),
|
| | | ),
|
| | |
|
| | | "FuncSysPrivilege":(
|
| | | ("BYTE", "FuncSysID", 1),
|
| | | ("BYTE", "DayNum", 0),
|
| | |
| | | def GetAttrIDList(self): return self.attrTuple[7] # 属性ID列表 list
|
| | | def GetInitAttrValueList(self): return self.attrTuple[8] # 初始属性值列表 list
|
| | | def GetAttrPerStarAddList(self): return self.attrTuple[9] # 每星加成值列表 list |
| | | |
| | | # 游历事件表 |
| | | class IPY_TravelEvent(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetEventID(self): return self.attrTuple[0] # WORD
|
| | | def GetEventWeight(self): return self.attrTuple[1] # 事件权重 DWORD
|
| | | def GetAwardItemID(self): return self.attrTuple[2] # 奖励物品ID DWORD
|
| | | def GetAwardItemCnt(self): return self.attrTuple[3] # 奖励物品数量 DWORD |
| | | |
| | | # 游历景观奖励表 |
| | | class IPY_TravelScenery(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetSceneryType(self): return self.attrTuple[0] # 景观类型 BYTE
|
| | | def GetAwardQuality(self): return self.attrTuple[1] # 景观品质 BYTE
|
| | | def GetUpRate(self): return self.attrTuple[2] # 升下个品质概率 DWORD
|
| | | def GetAwardItemRandCntList(self): return self.attrTuple[3] # 奖励物品随机个数列表 [[物品ID, 随机数量A, 到B], ...] list
|
| | | def GetAwardItemExWeightList(self): return self.attrTuple[4] # 额外奖励物品权重 [[权重,物品ID,个数], ...] list
|
| | | def GetAwardItemExCnt(self): return self.attrTuple[5] # 额外奖励物品数 BYTE |
| | | |
| | | # 玩家等级表 |
| | | class IPY_PlayerLV(): |
| | |
| | | def GetAttrInfo(self): return self.attrTuple[4] # 属性 dict
|
| | | def GetSkinIndex(self): return self.attrTuple[5] # 外观 BYTE |
| | | |
| | | # 协助感谢礼盒表 |
| | | class IPY_AssistThanksGift(): |
| | | |
| | | def __init__(self): |
| | | self.attrTuple = None |
| | | return |
| | | |
| | | def GetGiftID(self): return self.attrTuple[0] # 礼盒物品ID DWORD
|
| | | def GetRequestPlayerAward(self): return self.attrTuple[1] # 发布奖励物品 物品ID|个数 list
|
| | | def GetAssistPlayerAward(self): return self.attrTuple[2] # 协助奖励物品 物品ID|个数 list |
| | | |
| | | # 功能特权奖励表 |
| | | class IPY_FuncSysPrivilege(): |
| | | |
| | |
| | | self.__LoadFileData("Beauty", onlyCheck)
|
| | | self.__LoadFileData("BeautyQualityLV", onlyCheck)
|
| | | self.__LoadFileData("BeautySkin", onlyCheck)
|
| | | self.__LoadFileData("TravelEvent", onlyCheck)
|
| | | self.__LoadFileData("TravelScenery", onlyCheck)
|
| | | self.__LoadFileData("PlayerLV", onlyCheck)
|
| | | self.__LoadFileData("SpecMapPlayerAttrFormat", onlyCheck)
|
| | | self.__LoadFileData("GMAttr", onlyCheck)
|
| | |
| | | self.__LoadFileData("LoveRing", onlyCheck)
|
| | | self.__LoadFileData("LoveCharm", onlyCheck)
|
| | | self.__LoadFileData("HorsePetSkin", onlyCheck)
|
| | | self.__LoadFileData("AssistThanksGift", onlyCheck)
|
| | | self.__LoadFileData("FuncSysPrivilege", onlyCheck)
|
| | | self.__LoadFileData("HistoryRechargeAward", onlyCheck)
|
| | | self.__LoadFileData("CustomAward", onlyCheck)
|
| | |
| | | def GetBeautySkinByIndex(self, index): |
| | | self.CheckLoadData("BeautySkin") |
| | | return self.ipyBeautySkinCache[index]
|
| | | |
| | | def GetTravelEventCount(self): |
| | | self.CheckLoadData("TravelEvent") |
| | | return self.ipyTravelEventLen
|
| | | def GetTravelEventByIndex(self, index): |
| | | self.CheckLoadData("TravelEvent") |
| | | return self.ipyTravelEventCache[index]
|
| | | |
| | | def GetTravelSceneryCount(self): |
| | | self.CheckLoadData("TravelScenery") |
| | | return self.ipyTravelSceneryLen
|
| | | def GetTravelSceneryByIndex(self, index): |
| | | self.CheckLoadData("TravelScenery") |
| | | return self.ipyTravelSceneryCache[index]
|
| | | |
| | | def GetPlayerLVCount(self): |
| | | self.CheckLoadData("PlayerLV") |
| | |
| | | def GetHorsePetSkinByIndex(self, index): |
| | | self.CheckLoadData("HorsePetSkin") |
| | | return self.ipyHorsePetSkinCache[index]
|
| | | |
| | | def GetAssistThanksGiftCount(self): |
| | | self.CheckLoadData("AssistThanksGift") |
| | | return self.ipyAssistThanksGiftLen
|
| | | def GetAssistThanksGiftByIndex(self, index): |
| | | self.CheckLoadData("AssistThanksGift") |
| | | return self.ipyAssistThanksGiftCache[index]
|
| | | |
| | | def GetFuncSysPrivilegeCount(self): |
| | | self.CheckLoadData("FuncSysPrivilege") |
| | |
| | | import PlayerHero
|
| | | import PlayerOnline
|
| | | import PlayerBeauty
|
| | | import PlayerTravel
|
| | | import TurnAttack
|
| | | import PlayerHJG
|
| | | import ObjPool
|
| | |
| | | PlayerActivity.OnPlayerLogin(curPlayer)
|
| | | PlayerLLMJ.OnPlayerLogin(curPlayer)
|
| | | PlayerBeauty.OnPlayerLogin(curPlayer)
|
| | | PlayerTravel.OnPlayerLogin(curPlayer)
|
| | |
|
| | | # 上线查询一次充值订单
|
| | | curPlayer.SendDBQueryRecharge()
|
| | |
| | | curPlayer.Syn_OfflineTimeQueryResult() # 通知客服端离线时间
|
| | | return
|
| | |
|
| | |
|
| | | #//B0 24 领取家族悬赏奖励 #tagReceiveFamilyArrestAward
|
| | | #
|
| | | #struct tagReceiveFamilyArrestAward
|
| | | #
|
| | | #{
|
| | | # tagHead Head;
|
| | | # DWORD ArrestID; //悬赏任务ID
|
| | | #};
|
| | | ## 领取家族悬赏奖励
|
| | | # @param index: 玩家索引
|
| | | # @param clientData: 封包结构体
|
| | | # @param tick: 时间戳
|
| | | # @return: None
|
| | | def ReceiveFamilyArrestAward(index, clientData, tick):
|
| | | return
|
| | |
|
| | |
|
| | | #//B0 26 请求家族悬赏奖励领取情况 #tagQueryFamilyArrestAwardReceiveState
|
| | | #
|
| | | #struct tagQueryFamilyArrestAwardReceiveState
|
| | | #
|
| | | #{
|
| | | # tagHead Head;
|
| | | #};
|
| | | ## 请求家族悬赏奖励领取情况
|
| | | # @param index: 玩家索引
|
| | | # @param clientData: 封包结构体
|
| | | # @param tick: 时间戳
|
| | | # @return: None
|
| | | def QueryFamilyArrestAwardReceiveState(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | Sync_FamilyArrestAwardReceiveState(curPlayer)
|
| | | return
|
| | |
|
| | |
|
| | | ## 通知客户端家族悬赏任务奖励领取情况
|
| | | # @param curPlayer: 玩家实例
|
| | | # @return: None
|
| | | def Sync_FamilyArrestAwardReceiveState(curPlayer):
|
| | | awardReceiveState = ChPyNetSendPack.tagFamilyArrestAwardReceiveState()
|
| | | awardReceiveState.Clear()
|
| | | |
| | | state = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FamilyArrestAwardState)
|
| | | awardReceiveState.ReceiveState = state
|
| | | NetPackCommon.SendFakePack(curPlayer, awardReceiveState)
|
| | | return
|
| | |
|
| | | def PlayerOnDay(curPlayer):
|
| | | #玩法前瞻奖励
|
| | | gameNoticeAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GameNoticeAwardState)
|
| | |
| | | elif adAwardType == 3:
|
| | | treasureType = adAwardValue
|
| | | PlayerTreasure.DoTreasure(curPlayer, treasureType, PlayerTreasure.CostType_ADFree)
|
| | | # 游历体力
|
| | | elif adAwardType == 4:
|
| | | PlayerTravel.AddTravelEnergy(curPlayer, adAwardValue)
|
| | | return
|
| | |
|
| | | def ADCntOnDay(curPlayer):
|
| | |
| | | import PlayerActBuyCountGift
|
| | | import PlayerActLoginNew
|
| | | import PlayerActTask
|
| | | import IPY_GameWorld
|
| | | import ItemCommon
|
| | | import ItemControler
|
| | | import PlayerTravel
|
| | | import PlayerHorse
|
| | | import PlayerArena
|
| | | import PlayerTask
|
| | |
| | | ShareDefine.GameFuncID_Arena:lambda curObj:PlayerArena.DoArenaOpen(curObj),
|
| | | ShareDefine.GameFuncID_Shop:lambda curObj:FunctionNPCCommon.DoShopOpen(curObj),
|
| | | ShareDefine.GameFuncID_Horse:lambda curObj:PlayerHorse.DoHorseOpen(curObj),
|
| | | ShareDefine.GameFuncID_Travel:lambda curObj:PlayerTravel.DoTravelOpen(curObj),
|
| | | }
|
| | |
|
| | | def GetFuncOpenLVIpyData(funcID): return IpyGameDataPY.GetIpyGameData("FuncOpenLV", funcID)
|
| | |
| | | import PlayerGoldRush
|
| | | import NetPackCommon
|
| | | import ItemControler
|
| | | import PyGameData
|
| | | import PlayerTask
|
| | | import FBCommon
|
| | | import ObjPool
|
| | | import PyGameData
|
| | |
|
| | | # 红颜解锁方式
|
| | | (
|
| | |
| | | return
|
| | |
|
| | | elif unlockWay == UnlockWay_TravelCnt:
|
| | | travelCnt = 0
|
| | | travelCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelCnt)
|
| | | needTravelCnt = unlockNeedCnt
|
| | | if travelCnt < needTravelCnt:
|
| | | GameWorld.DebugLog("激活红颜所需游历次数不足! beautyID=%s,travelCnt=%s < %s" % (beautyID, travelCnt, needTravelCnt), playerID)
|
| | |
| | | return
|
| | | SetMoney(curPlayer, priceType, updPlayerGold)
|
| | |
|
| | | if isGiveBourseMoney and updPlayerGold > 0:
|
| | | GiveMoney(curPlayer, ShareDefine.TYPE_Price_BourseMoney, min(value, updPlayerGold))
|
| | | #废弃交易所额度
|
| | | #if isGiveBourseMoney and updPlayerGold > 0:
|
| | | # GiveMoney(curPlayer, ShareDefine.TYPE_Price_BourseMoney, min(value, updPlayerGold))
|
| | | addDataDict["BourseMoney"] = GetMoney(curPlayer, ShareDefine.TYPE_Price_BourseMoney)
|
| | |
|
| | | elif priceType == IPY_GameWorld.TYPE_Price_Gold_Paper:
|
| | |
| | | import PlayerBackup
|
| | | import PlayerOnline
|
| | | import PlayerGoldRush
|
| | | import PlayerTravel
|
| | | import PlayerHorse
|
| | | import PlayerHJG
|
| | |
|
| | |
| | | #PlayerFlashSale.ProcessFlashSaleMail(curPlayer, tick)
|
| | | #淘金
|
| | | PlayerGoldRush.OnProcess(curPlayer)
|
| | | #游历
|
| | | PlayerTravel.OnProcess(curPlayer)
|
| | | return
|
| | |
|
| | | def ProcessPlayerMinute(curPlayer, tick):
|
| New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Player.PlayerTravel
|
| | | #
|
| | | # @todo:游历
|
| | | # @author hxp
|
| | | # @date 2025-11-25
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 游历
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2025-11-25 17:30"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | import ChConfig
|
| | | import PlayerControl
|
| | | import IpyGameDataPY
|
| | | import ChPyNetSendPack
|
| | | import NetPackCommon
|
| | | import ItemControler
|
| | | import PlayerBeauty
|
| | | import GameWorld
|
| | | import ObjPool
|
| | |
|
| | | import random
|
| | | import time
|
| | |
|
| | | GridState_None = 0 # 未点击
|
| | | GridState_Opend = 1 # 已打开
|
| | | GridState_Crack = 2 # 裂纹的,需再次点击开启
|
| | |
|
| | | # 景观类型相关设置 {景观类型:[占地行,列], ...}
|
| | | SceneryTypeSet = {
|
| | | 1:[1, 1],
|
| | | 4:[2, 2],
|
| | | 6:[3, 2],
|
| | | }
|
| | |
|
| | | # 小于99的为景观行列编号事件标记: 1~n
|
| | | EventID_Portal = 99 # 传送门
|
| | | EventID_Blank = 100 # 空白
|
| | | EventID_Bomb = 101 # 十字炸弹
|
| | |
|
| | | #固定的特殊事件ID
|
| | | SpecEventIDList = [EventID_Portal, EventID_Blank, EventID_Bomb]
|
| | |
|
| | | # 后端处理
|
| | | (
|
| | | Result_None, # 无,后端主动同步,如登录、GM等 0
|
| | | Result_Comm, # 常规点击返回 1
|
| | | Result_Bomb, # 马车炸弹 2
|
| | | Result_Portal, # 点击传送门 3
|
| | | Result_SceneryUp, # 升级景观 4
|
| | | Result_Reset, # 重新开始 5
|
| | | ) = range(6)
|
| | |
|
| | | def DoTravelOpen(curPlayer):
|
| | | energy = IpyGameDataPY.GetFuncCfg("TravelSet", 1)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelEnergy, energy)
|
| | | ResetTravelGrid(curPlayer)
|
| | | return
|
| | |
|
| | | def OnPlayerLogin(curPlayer):
|
| | | if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelState) == 2:
|
| | | ResetTravelGrid(curPlayer)
|
| | | else:
|
| | | SyncTravelInfo(curPlayer, isAll=True)
|
| | | return
|
| | |
|
| | | ## Def_PDict_TravelGridInfo 格子信息, 事件ID*100+是否双倍*10+开启状态
|
| | | def GetGridState(curPlayer, row, col):
|
| | | ## 格子状态: 0-未开启;1-已开启;2-裂纹
|
| | | return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelGridInfo % (row, col)) % 10
|
| | | def SetGridState(curPlayer, row, col, state):
|
| | | dataValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelGridInfo % (row, col))
|
| | | updValue = dataValue / 10 * 10 + min(state, 9)
|
| | | return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelGridInfo % (row, col), updValue)
|
| | | def GetGridMulti(curPlayer, row, col):
|
| | | ## 奖励倍值
|
| | | dataValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelGridInfo % (row, col))
|
| | | return max(1, GameWorld.GetValue(dataValue, 2, 1))
|
| | | def SetGridMulti(curPlayer, row, col, multi=1):
|
| | | dataValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelGridInfo % (row, col))
|
| | | updValue = GameWorld.SetValue(dataValue, 2, 1, multi)
|
| | | return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelGridInfo % (row, col), updValue)
|
| | | def GetGridEventID(curPlayer, row, col):
|
| | | ## 格子事件ID
|
| | | return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelGridInfo % (row, col)) / 100
|
| | | def SetGridEventID(curPlayer, row, col, eventID):
|
| | | dataValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelGridInfo % (row, col))
|
| | | updValue = eventID * 100 + dataValue % 100
|
| | | return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelGridInfo % (row, col), updValue)
|
| | |
|
| | | def ResetTravelGrid(curPlayer, sceneryType=0):
|
| | | ## 重置游历网格
|
| | | |
| | | rowMax, colMax = IpyGameDataPY.GetFuncEvalCfg("TravelSet", 3) # 行列
|
| | | for row in range(1, 1 + rowMax):
|
| | | for col in range(1, 1 + colMax):
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelGridInfo % (row, col), 0)
|
| | | |
| | | # 初始化景观类型、位置
|
| | | if sceneryType in SceneryTypeSet:
|
| | | # GM指定了类型
|
| | | pass
|
| | | else:
|
| | | sceneryTypeWeightList = IpyGameDataPY.GetFuncEvalCfg("TravelRate", 3)
|
| | | sceneryType = GameWorld.GetResultByWeightList(sceneryTypeWeightList)
|
| | | if sceneryType not in SceneryTypeSet:
|
| | | sceneryType = SceneryTypeSet.keys()[0] |
| | | rowSet, colSet = SceneryTypeSet[sceneryType]
|
| | | |
| | | randRowMax = rowMax - rowSet + 1
|
| | | randColMax = colMax - colSet + 1
|
| | | GameWorld.DebugLog("重置游历网格: sceneryType=%s,rowSet=%s,colSet=%s,randRowMax=%s,randColMax=%s" % (sceneryType, rowSet, colSet, randRowMax, randColMax))
|
| | | randRow = random.randint(1, randRowMax)
|
| | | randCol = random.randint(1, randColMax)
|
| | | sceneryValue = randRow * 100 + randCol * 10 + sceneryType
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelScenery, sceneryValue)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelSceneryLVInfo, 0)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelState, 0)
|
| | | GameWorld.DebugLog(" 景观位置: randRow=%s,randCol=%s,sceneryValue=%s" % (randRow, randCol, sceneryValue))
|
| | | |
| | | for row in range(randRow, randRow + rowSet):
|
| | | for col in range(randCol, randCol + colSet):
|
| | | eventID = (row - randRow) * colSet + (col - randCol) + 1 # 景观各位置对应事件ID,1~n
|
| | | SetGridEventID(curPlayer, row, col, eventID) |
| | | GameWorld.DebugLog(" row=%s,col=%s,eventID=%s" % (row, col, eventID))
|
| | | |
| | | SyncTravelInfo(curPlayer, result=Result_Reset, isAll=True)
|
| | | return sceneryType, randRow, randCol
|
| | |
|
| | | def __getSceneryInfo(curPlayer):
|
| | | sceneryValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelScenery)
|
| | | sRow = sceneryValue / 100
|
| | | sCol = sceneryValue % 100 / 10
|
| | | sceneryType = sceneryValue % 10
|
| | | return sceneryType, sRow, sCol
|
| | |
|
| | | def __checkSceneryOpend(curPlayer):
|
| | | ## 检查景观相关格子是否已全部打开
|
| | | sceneryType, sRow, sCol = __getSceneryInfo(curPlayer)
|
| | | if sceneryType not in SceneryTypeSet:
|
| | | return
|
| | | rowSet, colSet = SceneryTypeSet[sceneryType]
|
| | | for row in range(sRow, sRow + rowSet):
|
| | | for col in range(sCol, sCol + colSet):
|
| | | gridState = GetGridState(curPlayer, row, col)
|
| | | if gridState != GridState_Opend:
|
| | | GameWorld.DebugLog("还有景观格子未开启: row=%s,col=%s,gridState=%s" % (row, col, gridState))
|
| | | return
|
| | | return True
|
| | |
|
| | | def OnProcess(curPlayer):
|
| | | CheckTravelEnergyRecover(curPlayer)
|
| | | return
|
| | |
|
| | | def GetTravelEnergyMax(curPlayer):
|
| | | initEnergy = IpyGameDataPY.GetFuncCfg("TravelSet", 1)
|
| | | addEnergy = PlayerBeauty.GetBeautyEffInfo(curPlayer, PlayerBeauty.EffType_TravelEnergy)[0]
|
| | | return initEnergy + addEnergy
|
| | |
|
| | | def CheckTravelEnergyRecover(curPlayer, isNotify=True):
|
| | | ## 检查体力恢复
|
| | | maxEnergy = GetTravelEnergyMax(curPlayer)
|
| | | curEnergy = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelEnergy)
|
| | | lastRecoverTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelEnergyTime)
|
| | | if curEnergy >= maxEnergy:
|
| | | if lastRecoverTime:
|
| | | GameWorld.DebugLog("游历体力已满! curEnergy=%s/%s" % (curEnergy, maxEnergy))
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelEnergyTime, 0)
|
| | | isNotify and SyncTravelInfo(curPlayer)
|
| | | return
|
| | | |
| | | curTime = int(time.time())
|
| | | passSeconds = curTime - lastRecoverTime
|
| | | if not lastRecoverTime or passSeconds < 0:
|
| | | GameWorld.DebugLog("重设游历体力恢复时间! curEnergy=%s/%s" % (curEnergy, maxEnergy))
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelEnergyTime, curTime)
|
| | | isNotify and SyncTravelInfo(curPlayer)
|
| | | return
|
| | | |
| | | cdSeconds = IpyGameDataPY.GetFuncCfg("TravelSet", 2) * 60
|
| | | if passSeconds < cdSeconds:
|
| | | return
|
| | | recoverCnt = passSeconds / cdSeconds
|
| | | recoverCnt = min(recoverCnt, maxEnergy - curEnergy)
|
| | | updEnergy = curEnergy + recoverCnt
|
| | | updRecoverTime = curTime - passSeconds % cdSeconds
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelEnergy, updEnergy)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelEnergyTime, updRecoverTime)
|
| | | GameWorld.DebugLog("恢复游历体力: %s,curEnergy=%s,updEnergy=%s/%s,passSeconds=%s,上次恢复:%s" |
| | | % (recoverCnt, curEnergy, updEnergy, maxEnergy, passSeconds, GameWorld.ChangeTimeNumToStr(lastRecoverTime)))
|
| | | if updEnergy >= maxEnergy:
|
| | | GameWorld.DebugLog("体力已满!")
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelEnergyTime, 0)
|
| | | isNotify and SyncTravelInfo(curPlayer)
|
| | | return
|
| | |
|
| | | def AddTravelEnergy(curPlayer, addEnergy):
|
| | | ## 增加体力
|
| | | energy = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelEnergy)
|
| | | updEnergy = energy + addEnergy
|
| | | updEnergy = PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelEnergy, updEnergy)
|
| | | SyncTravelInfo(curPlayer)
|
| | | return
|
| | |
|
| | | #// B0 40 游历点击 #tagCSTravelClick
|
| | | #
|
| | | #struct tagCSTravelClick
|
| | | #{
|
| | | # tagHead Head;
|
| | | # BYTE Row; //行,从1开始
|
| | | # BYTE Col; //列,从1开始
|
| | | #};
|
| | | def OnTravelClick(index, curPackData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | row = curPackData.Row
|
| | | col = curPackData.Col
|
| | | |
| | | if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelState) == 2:
|
| | | GameWorld.DebugLog("请求重置游历格子")
|
| | | ResetTravelGrid(curPlayer)
|
| | | return
|
| | | |
| | | gridState = GetGridState(curPlayer, row, col)
|
| | | GameWorld.DebugLog("游历点击: row=%s,col=%s,gridState=%s" % (row, col, gridState))
|
| | | |
| | | rowMax, colMax = IpyGameDataPY.GetFuncEvalCfg("TravelSet", 3) # 行列
|
| | | if row <= 0 or col <= 0 or row > rowMax or col > colMax:
|
| | | GameWorld.DebugLog("不存在该格子: row=%s,col=%s,rowMax=%s,colMax=%s" % (row, col, rowMax, colMax))
|
| | | return
|
| | | |
| | | if gridState in [GridState_None, GridState_Crack]:
|
| | | energy = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelEnergy)
|
| | | if not energy:
|
| | | GameWorld.DebugLog("游历没有体力")
|
| | | return
|
| | | |
| | | __doClickUnOpendGrid(curPlayer, row, col)
|
| | | |
| | | energy -= 1
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelEnergy, energy)
|
| | | |
| | | travelCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelCnt) + 1
|
| | | travelCnt = PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelCnt, travelCnt)
|
| | | GameWorld.DebugLog("更新体力: energy=%s,travelCnt=%s" % (energy, travelCnt))
|
| | | CheckTravelEnergyRecover(curPlayer, False)
|
| | | SyncTravelInfo(curPlayer, [[row, col]], Result_Comm)
|
| | | else:
|
| | | __doClickGridEvent(curPlayer, row, col)
|
| | | |
| | | return
|
| | |
|
| | | def __doClickUnOpendGrid(curPlayer, row, col):
|
| | | ## 执行点击未开启的格子
|
| | | gridState = GetGridState(curPlayer, row, col)
|
| | | if gridState == GridState_None:
|
| | | crackRate = IpyGameDataPY.GetFuncCfg("TravelRate", 1)
|
| | | if GameWorld.CanHappen(crackRate):
|
| | | GameWorld.DebugLog("触发裂纹: row=%s,col=%s,crackRate=%s" % (row, col, crackRate))
|
| | | SetGridState(curPlayer, row, col, GridState_Crack)
|
| | | else:
|
| | | __openGridRandEvent(curPlayer, row, col)
|
| | | |
| | | # 再次点击裂纹
|
| | | elif gridState == GridState_Crack:
|
| | | __openGridRandEvent(curPlayer, row, col)
|
| | | else:
|
| | | return
|
| | | return True
|
| | |
|
| | | def __openGridRandEvent(curPlayer, row, col):
|
| | | ## 执行打开格子随机生成事件
|
| | | SetGridState(curPlayer, row, col, GridState_Opend)
|
| | | eventID = GetGridEventID(curPlayer, row, col)
|
| | | if eventID:
|
| | | GameWorld.DebugLog("该游历格子已经有事件ID了! row=%s,col=%s,eventID=%s" % (row, col, eventID))
|
| | | return
|
| | | |
| | | # 生成事件ID
|
| | | eventWeightList = []
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | for index in range(ipyDataMgr.GetTravelEventCount()):
|
| | | ipyData = ipyDataMgr.GetTravelEventByIndex(index)
|
| | | eventID = ipyData.GetEventID()
|
| | | eventWeight = ipyData.GetEventWeight()
|
| | | eventWeightList.append([eventWeight, ipyData])
|
| | | |
| | | multi = 1
|
| | | ipyData = GameWorld.GetResultByWeightList(eventWeightList)
|
| | | if not ipyData:
|
| | | eventID = EventID_Blank
|
| | | else:
|
| | | eventID = ipyData.GetEventID()
|
| | | if ipyData.GetAwardItemID():
|
| | | multiRate = IpyGameDataPY.GetFuncCfg("TravelRate", 2)
|
| | | if GameWorld.CanHappen(multiRate):
|
| | | multi = 2
|
| | | SetGridMulti(curPlayer, row, col, multi)
|
| | | SetGridEventID(curPlayer, row, col, eventID)
|
| | | GameWorld.DebugLog("随机格子事件: row=%s,col=%s,eventID=%s,multi=%s" % (row, col, eventID, multi))
|
| | | return
|
| | |
|
| | | def __doClickGridEvent(curPlayer, row, col):
|
| | | ## 点击结算格子的事件
|
| | | eventID = GetGridEventID(curPlayer, row, col)
|
| | | if not eventID:
|
| | | GameWorld.DebugLog("该游历格子还未生成事件! row=%s,col=%s,eventID=%s" % (row, col, eventID))
|
| | | return
|
| | | |
| | | if eventID == EventID_Blank:
|
| | | GameWorld.DebugLog("空白事件不处理! row=%s,col=%s,eventID=%s" % (row, col, eventID))
|
| | | return
|
| | | |
| | | syncGridList = []
|
| | | # 十字炸弹
|
| | | if eventID == EventID_Bomb:
|
| | | GameWorld.DebugLog("点击马车炸弹! row=%s,col=%s,eventID=%s" % (row, col, eventID))
|
| | | result = Result_Bomb
|
| | | rowMax, colMax = IpyGameDataPY.GetFuncEvalCfg("TravelSet", 3) # 行列
|
| | | # 同行
|
| | | for c in range(1, 1 + colMax):
|
| | | if __doClickUnOpendGrid(curPlayer, row, c):
|
| | | syncGridList.append([row, c])
|
| | | # 同列
|
| | | for r in range(1, 1 + rowMax):
|
| | | if __doClickUnOpendGrid(curPlayer, r, col):
|
| | | syncGridList.append([r, col])
|
| | | |
| | | # 传送门
|
| | | elif eventID == EventID_Portal:
|
| | | GameWorld.DebugLog("点击传送门! row=%s,col=%s,eventID=%s" % (row, col, eventID))
|
| | | result = Result_Portal
|
| | | __giveAwardEvent(curPlayer, syncGridList, "TravelPortal")
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelState, 2) # 标记已点传送门
|
| | | if not syncGridList:
|
| | | GameWorld.DebugLog("点击传送门时没有未领取的,直接重新开始")
|
| | | ResetTravelGrid(curPlayer)
|
| | | return
|
| | | |
| | | # 景观
|
| | | elif eventID < EventID_Portal:
|
| | | GameWorld.DebugLog("点击景观! row=%s,col=%s,eventID=%s" % (row, col, eventID))
|
| | | result = Result_SceneryUp
|
| | | if not __checkSceneryOpend(curPlayer):
|
| | | return
|
| | | |
| | | # 其他默认按物品奖励处理
|
| | | else:
|
| | | GameWorld.DebugLog("领取所有已开启的格子奖励! row=%s,col=%s,eventID=%s" % (row, col, eventID))
|
| | | result = Result_Comm
|
| | | __giveAwardEvent(curPlayer, syncGridList, "TravelAward")
|
| | | |
| | | SyncTravelInfo(curPlayer, syncGridList, result)
|
| | | return
|
| | |
|
| | | def __giveAwardEvent(curPlayer, syncGridList, eventName):
|
| | | ## 结算所有未领取的奖励事件
|
| | | itemDict = {}
|
| | | rowMax, colMax = IpyGameDataPY.GetFuncEvalCfg("TravelSet", 3)
|
| | | for row in range(1, 1 + rowMax):
|
| | | for col in range(1, 1 + colMax):
|
| | | eventID = GetGridEventID(curPlayer, row, col)
|
| | | if eventID in SpecEventIDList or eventID < EventID_Portal:
|
| | | continue
|
| | | ipyData = IpyGameDataPY.GetIpyGameDataNotLog("TravelEvent", eventID)
|
| | | if not ipyData:
|
| | | continue
|
| | | itemID = ipyData.GetAwardItemID()
|
| | | itemCount = ipyData.GetAwardItemCnt()
|
| | | if not itemID or not itemCount:
|
| | | continue
|
| | | multi = GetGridMulti(curPlayer, row, col)
|
| | | itemDict[itemID] = itemDict.get(itemID, 0) + itemCount * multi
|
| | | SetGridEventID(curPlayer, row, col, EventID_Blank) # 处理完奖励后设置为空白
|
| | | syncGridList.append([row, col])
|
| | | GameWorld.DebugLog(" 格子奖励: row=%s,col=%s,eventID=%s,itemID=%s,itemCount=%s,multi=%s,%s" |
| | | % (row, col, eventID, itemID, itemCount, multi, itemDict))
|
| | | if not itemDict:
|
| | | return
|
| | | |
| | | itemList = [[itemID, itemCount] for itemID, itemCount in itemDict.items()]
|
| | | GameWorld.DebugLog(" 奖励汇总: itemList=%s" % (itemList))
|
| | | ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=[eventName, False, {}])
|
| | | return
|
| | |
|
| | | #// B0 41 游历景观升级 #tagCSTravelSceneryUP
|
| | | #
|
| | | #struct tagCSTravelSceneryUP
|
| | | #{
|
| | | # tagHead Head;
|
| | | #};
|
| | | def OnTravelSceneryUP(index, curPackData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | |
| | | if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelState):
|
| | | GameWorld.DebugLog("景观奖励已经结算过了!")
|
| | | return
|
| | | |
| | | if not __checkSceneryOpend(curPlayer):
|
| | | return
|
| | | |
| | | sceneryType, sRow, sCol = __getSceneryInfo(curPlayer)
|
| | | ipyDataList = IpyGameDataPY.GetIpyGameDataList("TravelScenery", sceneryType)
|
| | | if not ipyDataList:
|
| | | return
|
| | | qualityCnt = len(ipyDataList)
|
| | | sceneryLVInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelSceneryLVInfo)
|
| | | GameWorld.DebugLog("景观升级: sceneryType=%s,sRow=%s,sCol=%s,qualityCnt=%s,sceneryLVInfo=%s" % (sceneryType, sRow, sCol, qualityCnt, sceneryLVInfo))
|
| | | |
| | | upRetList = [] # 升级结果列表
|
| | | upSuccCnt = 0
|
| | | for upBit in range(1, qualityCnt):
|
| | | upRet = GameWorld.GetValue(sceneryLVInfo, upBit, 1)
|
| | | if not upRet:
|
| | | break
|
| | | upRetList.append(upRet)
|
| | | if upRet == 1:
|
| | | upSuccCnt += 1
|
| | | |
| | | awardIpyData = ipyDataList[upSuccCnt] if len(ipyDataList) > upSuccCnt else ipyDataList[-1]
|
| | | awardQuality = awardIpyData.GetAwardQuality()
|
| | | GameWorld.DebugLog("upSuccCnt=%s,upRetList=%s,awardQuality=%s" % (upSuccCnt, upRetList, awardQuality))
|
| | | if len(upRetList) < qualityCnt - 1:
|
| | | upRate = awardIpyData.GetUpRate()
|
| | | upRet = 1 if GameWorld.CanHappen(upRate) else 2
|
| | | updSceneryLVInfo = GameWorld.SetValue(sceneryLVInfo, len(upRetList) + 1, 1, upRet)
|
| | | GameWorld.DebugLog("升级结果=%s,upRate=%s,updSceneryLVInfo=%s" % (upRet, upRate, updSceneryLVInfo))
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelSceneryLVInfo, updSceneryLVInfo)
|
| | | SyncTravelInfo(curPlayer, result=Result_SceneryUp)
|
| | | return
|
| | | |
| | | GameWorld.DebugLog("景观升级次数已达上限,直接发放奖励!")
|
| | | awardItemList = []
|
| | | awardItemRandCntList = awardIpyData.GetAwardItemRandCntList()
|
| | | for itemID, itemCntA, itemCntB in awardItemRandCntList:
|
| | | awardItemList.append([itemID, random.randint(itemCntA, itemCntB)])
|
| | | GameWorld.DebugLog("随机物品个数奖励: %s" % awardItemList)
|
| | | |
| | | awardItemExWeightList = awardIpyData.GetAwardItemExWeightList()
|
| | | awardItemExCnt = awardIpyData.GetAwardItemExCnt()
|
| | | for _ in range(awardItemExCnt):
|
| | | randItemInfo = GameWorld.GetResultByWeightList(awardItemExWeightList)
|
| | | if not randItemInfo or len(randItemInfo) != 2:
|
| | | continue
|
| | | itemID, itemCount = randItemInfo
|
| | | awardItemList.append([itemID, itemCount])
|
| | | GameWorld.DebugLog("附加额外物品奖励: %s" % awardItemList)
|
| | | |
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TravelState, 1) # 标记已领取景观奖励
|
| | | ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["TravelScenery", False, {}])
|
| | | |
| | | # 景观替换为传送门
|
| | | syncGridList = []
|
| | | rowSet, colSet = SceneryTypeSet[sceneryType]
|
| | | for row in range(sRow, sRow + rowSet):
|
| | | for col in range(sCol, sCol + colSet):
|
| | | if row == sRow and col == sCol:
|
| | | GameWorld.DebugLog("设置为传送门: row=%s,col=%s" % (row, col))
|
| | | SetGridEventID(curPlayer, row, col, EventID_Portal)
|
| | | syncGridList.append([row, col])
|
| | | else:
|
| | | GameWorld.DebugLog("设置为空白: row=%s,col=%s" % (row, col))
|
| | | SetGridEventID(curPlayer, row, col, EventID_Blank)
|
| | | syncGridList.append([row, col])
|
| | | SyncTravelInfo(curPlayer, syncGridList, result=Result_SceneryUp)
|
| | | return
|
| | |
|
| | | def SyncTravelInfo(curPlayer, syncGridList=[], result=Result_None, isAll=False):
|
| | | if isAll:
|
| | | syncGridList = []
|
| | | rowMax, colMax = IpyGameDataPY.GetFuncEvalCfg("TravelSet", 3)
|
| | | for row in range(1, 1 + rowMax):
|
| | | for col in range(1, 1 + colMax):
|
| | | syncGridList.append([row, col])
|
| | | |
| | | gridList = []
|
| | | for row, col in syncGridList:
|
| | | grid = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCTravelGrid)
|
| | | grid.Row = row
|
| | | grid.Col = col
|
| | | grid.State = GetGridState(curPlayer, row, col)
|
| | | grid.Multi = GetGridMulti(curPlayer, row, col)
|
| | | grid.EventID = GetGridEventID(curPlayer, row, col)
|
| | | gridList.append(grid)
|
| | | |
| | | sceneryType, sRow, sCol = __getSceneryInfo(curPlayer)
|
| | | clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCTravelInfo)
|
| | | clientPack.Energy = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelEnergy)
|
| | | clientPack.EnergyTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelEnergyTime)
|
| | | clientPack.TravelCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelCnt)
|
| | | clientPack.SceneryType = sceneryType
|
| | | clientPack.SceneryRow = sRow
|
| | | clientPack.SceneryCol = sCol
|
| | | clientPack.SceneryLVInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TravelSceneryLVInfo)
|
| | | clientPack.Result = result
|
| | | clientPack.GridList = gridList
|
| | | clientPack.GridCnt = len(clientPack.GridList)
|
| | | NetPackCommon.SendFakePack(curPlayer, clientPack)
|
| | | return
|
| | |
| | |
|
| | | Def_Notify_WorldKey_HurtLog = 'HurtLog' # 战斗伤害日志
|
| | |
|
| | | Def_Notify_WorldKey_AssistBoss = "AssistBoss" # 协助boss
|
| | |
|
| | | Def_Notify_WorldKey_CoupleInfo = "CoupleInfo" # 伴侣信息
|
| | |
|
| | | #活动类型定义
|
| | |
| | | GameFuncID_Shop = 16 # 商城,坊市
|
| | | GameFuncID_Arena = 27 # 竞技场
|
| | | GameFuncID_Horse = 37 # 坐骑
|
| | | GameFuncID_Travel = 44 # 游历
|
| | |
|
| | | # 以下为暂时无用的
|
| | | GameFuncID_Pet = -1 # 宠物,灵宠 6
|