From 3372c42f7017bbe6f8e111197ef64476014e21e6 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 25 十一月 2025 17:38:24 +0800
Subject: [PATCH] 358 【内政】红颜系统-服务端(增加游历系统;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTravel.py | 504 +++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Travel.py | 56 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 454 +--------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 1390 ++-----------------------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBeauty.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 28
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 83 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 53 -
PySysDB/PySysDBPY.h | 31
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 5
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 9
14 files changed, 862 insertions(+), 1,765 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index fdf790c..139a4a8 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1003,6 +1003,28 @@
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
@@ -2703,15 +2725,6 @@
DWORD NeedExp; //升级需要经验
dict AttrInfo; //属性
BYTE SkinIndex; //外观
-};
-
-//协助感谢礼盒表
-
-struct tagAssistThanksGift
-{
- DWORD _GiftID; //礼盒物品ID
- list RequestPlayerAward; // 发布奖励物品 物品ID|个数
- list AssistPlayerAward; // 协助奖励物品 物品ID|个数
};
//功能特权奖励表
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index 0b0154c..54f27c9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -394,13 +394,13 @@
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
@@ -1152,6 +1152,22 @@
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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 6084922..a04cbe8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3518,6 +3518,15 @@
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,用于补发上次活动用
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 3874002..470ff06 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -10601,115 +10601,6 @@
#------------------------------------------------------
-# 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):
@@ -10930,19 +10821,21 @@
#------------------------------------------------------
-#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):
@@ -10952,17 +10845,71 @@
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
'''\
@@ -10973,221 +10920,8 @@
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
#------------------------------------------------------
@@ -11260,66 +10994,6 @@
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
#------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 32086a3..8841653 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -30193,896 +30193,6 @@
#------------------------------------------------------
-# 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):
@@ -31305,21 +30415,20 @@
#------------------------------------------------------
-# 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):
@@ -31328,434 +30437,157 @@
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
#------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Travel.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Travel.py
new file mode 100644
index 0000000..8a9978e
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Travel.py
@@ -0,0 +1,56 @@
+#!/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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 235b16d..c408770 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -834,6 +834,22 @@
("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),
@@ -2125,12 +2141,6 @@
("BYTE", "SkinIndex", 0),
),
- "AssistThanksGift":(
- ("DWORD", "GiftID", 1),
- ("list", "RequestPlayerAward", 0),
- ("list", "AssistPlayerAward", 0),
- ),
-
"FuncSysPrivilege":(
("BYTE", "FuncSysID", 1),
("BYTE", "DayNum", 0),
@@ -3377,6 +3387,32 @@
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():
@@ -5359,17 +5395,6 @@
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():
@@ -5639,6 +5664,8 @@
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)
@@ -5777,7 +5804,6 @@
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)
@@ -6518,6 +6544,20 @@
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")
@@ -7484,13 +7524,6 @@
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")
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index 6592bf1..1107e1b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -131,6 +131,7 @@
import PlayerHero
import PlayerOnline
import PlayerBeauty
+import PlayerTravel
import TurnAttack
import PlayerHJG
import ObjPool
@@ -731,6 +732,7 @@
PlayerActivity.OnPlayerLogin(curPlayer)
PlayerLLMJ.OnPlayerLogin(curPlayer)
PlayerBeauty.OnPlayerLogin(curPlayer)
+ PlayerTravel.OnPlayerLogin(curPlayer)
# 上线查询一次充值订单
curPlayer.SendDBQueryRecharge()
@@ -3112,54 +3114,6 @@
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)
@@ -3399,6 +3353,9 @@
elif adAwardType == 3:
treasureType = adAwardValue
PlayerTreasure.DoTreasure(curPlayer, treasureType, PlayerTreasure.CostType_ADFree)
+ # 游历体力
+ elif adAwardType == 4:
+ PlayerTravel.AddTravelEnergy(curPlayer, adAwardValue)
return
def ADCntOnDay(curPlayer):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
index cb52de0..667d289 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/GameFuncComm.py
@@ -31,9 +31,8 @@
import PlayerActBuyCountGift
import PlayerActLoginNew
import PlayerActTask
-import IPY_GameWorld
-import ItemCommon
import ItemControler
+import PlayerTravel
import PlayerHorse
import PlayerArena
import PlayerTask
@@ -45,6 +44,7 @@
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)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBeauty.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBeauty.py
index 413f347..7c358e6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBeauty.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBeauty.py
@@ -25,10 +25,10 @@
import PlayerGoldRush
import NetPackCommon
import ItemControler
+import PyGameData
import PlayerTask
import FBCommon
import ObjPool
-import PyGameData
# 红颜解锁方式
(
@@ -188,7 +188,7 @@
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)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index 6bcaf3f..9572b02 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -2945,8 +2945,9 @@
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:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
index 81fc54f..9df0805 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
@@ -37,6 +37,7 @@
import PlayerBackup
import PlayerOnline
import PlayerGoldRush
+import PlayerTravel
import PlayerHorse
import PlayerHJG
@@ -1049,6 +1050,8 @@
#PlayerFlashSale.ProcessFlashSaleMail(curPlayer, tick)
#淘金
PlayerGoldRush.OnProcess(curPlayer)
+ #游历
+ PlayerTravel.OnProcess(curPlayer)
return
def ProcessPlayerMinute(curPlayer, tick):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTravel.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTravel.py
new file mode 100644
index 0000000..b4ea635
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTravel.py
@@ -0,0 +1,504 @@
+#!/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
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 198d05d..3ec5a8f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -239,8 +239,6 @@
Def_Notify_WorldKey_HurtLog = 'HurtLog' # 战斗伤害日志
-Def_Notify_WorldKey_AssistBoss = "AssistBoss" # 协助boss
-
Def_Notify_WorldKey_CoupleInfo = "CoupleInfo" # 伴侣信息
#活动类型定义
@@ -807,6 +805,7 @@
GameFuncID_Shop = 16 # 商城,坊市
GameFuncID_Arena = 27 # 竞技场
GameFuncID_Horse = 37 # 坐骑
+GameFuncID_Travel = 44 # 游历
# 以下为暂时无用的
GameFuncID_Pet = -1 # 宠物,灵宠 6
--
Gitblit v1.8.0