From 96c0ba31f74064e59c746921fcd1386cddf78d42 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 12 六月 2025 18:26:49 +0800
Subject: [PATCH] 121 【武将】武将系统-服务端(武将锁定、解锁;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py | 21 ++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 12 ++++--
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py | 10 ++--
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 56 ++++++++++++++++++++++++++++
4 files changed, 90 insertions(+), 9 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index f0662d7..5b58cd3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -1910,7 +1910,7 @@
Writer = hxp
Releaser = hxp
RegType = 0
-RegisterPackCount = 8
+RegisterPackCount = 10
PacketCMD_1=0xB2
PacketSubCMD_1=0x30
@@ -1944,6 +1944,10 @@
PacketSubCMD_8=0x37
PacketCallFunc_8=OnHeroBookUP
-PacketCMD_9=0xB4
-PacketSubCMD_9=0x12
-PacketCallFunc_9=OnHeroBattlePosSave
+PacketCMD_9=0xB2
+PacketSubCMD_9=0x38
+PacketCallFunc_9=OnHeroLock
+
+PacketCMD_10=0xB4
+PacketSubCMD_10=0x12
+PacketCallFunc_10=OnHeroBattlePosSave
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 89d132b..324f86d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -17484,6 +17484,62 @@
#------------------------------------------------------
+# B2 38 武将锁定 #tagCSHeroLock
+
+class tagCSHeroLock(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("ItemIndex", c_ushort), #武将物品所在武将背包位置索引
+ ("IsLock", c_ubyte), #0-解锁;1-锁定
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xB2
+ self.SubCmd = 0x38
+ 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 = 0xB2
+ self.SubCmd = 0x38
+ self.ItemIndex = 0
+ self.IsLock = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCSHeroLock)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// B2 38 武将锁定 //tagCSHeroLock:
+ Cmd:%s,
+ SubCmd:%s,
+ ItemIndex:%d,
+ IsLock:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.ItemIndex,
+ self.IsLock
+ )
+ return DumpString
+
+
+m_NAtagCSHeroLock=tagCSHeroLock()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCSHeroLock.Cmd,m_NAtagCSHeroLock.SubCmd))] = m_NAtagCSHeroLock
+
+
+#------------------------------------------------------
# B2 30 武将升级 #tagCSHeroLVUP
class tagCSHeroLVUP(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
index 4b2cec1..2700dd6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -1661,11 +1661,11 @@
if endIndex == 0:
endIndex = curPack.GetCount() - 1
#检查是否能整理
- for i in range(0, curPack.GetCount()):
- curItem = curPack.GetAt(i)
- if curItem.GetIsLocked():
- #GameWorld.Log("物品有锁, 不允许重整")
- return
+ #for i in range(0, curPack.GetCount()):
+ # curItem = curPack.GetAt(i)
+ # if curItem.GetIsLocked():
+ # #GameWorld.Log("物品有锁, 不允许重整")
+ # return
# 整理方式不同区分
if packIndex == ShareDefine.rptHero:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
index 6801516..0a0aee9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
@@ -281,6 +281,9 @@
if heroID != useHeroID:
GameWorld.DebugLog("武将材料非本体,无法升星!", playerID)
return
+ if useItem.GetIsLocked():
+ GameWorld.DebugLog("材料卡锁定中,无法升星! useItemIndex=%s,heroID=%s" % (useItemIndex, heroID), playerID)
+ return
washIDCnt = heroItem.GetUserAttrCount(ShareDefine.Def_IudetHeroTalentWashID)
if washIDCnt:
GameWorld.ErrLog("武将洗炼结果未处理,无法升星! itemIndex=%s,heroID=%s" % (itemIndex, heroID), playerID)
@@ -969,6 +972,24 @@
return
+#// B2 38 武将锁定 #tagCSHeroLock
+#
+#struct tagCSHeroLock
+#{
+# tagHead Head;
+# WORD ItemIndex; //武将物品所在武将背包位置索引
+# BYTE IsLock; //0-解锁;1-锁定
+#};
+def OnHeroLock(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ itemIndex = clientData.ItemIndex
+ isLock = clientData.IsLock
+ heroItem = GetHeroItem(curPlayer, itemIndex)
+ if not heroItem:
+ return
+ heroItem.SetIsLocked(1 if isLock else 0)
+ return
+
#// B4 12 战斗阵型保存 #tagCSHeroBattlePosSave
#
#struct tagCSHeroBattlePos
--
Gitblit v1.8.0