From 4a95dde4662769711a7ba2a21e32567711ced1d6 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期一, 01 七月 2019 16:18:59 +0800
Subject: [PATCH] 7678 【2.0.200】【后端】灵器系统
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py | 72 ++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 6 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 52 ++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 52 ++++++++++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 52 ++++++++++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 52 ++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 8 +
7 files changed, 291 insertions(+), 3 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 1938000..b2c6d08 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -6774,6 +6774,58 @@
#------------------------------------------------------
+# A3 18 灵器突破 #tagCMLingQiEquipBreak
+
+class tagCMLingQiEquipBreak(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("ItemID", c_int), #突破的物品ID
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA3
+ self.SubCmd = 0x18
+ 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 = 0xA3
+ self.SubCmd = 0x18
+ self.ItemID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMLingQiEquipBreak)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A3 18 灵器突破 //tagCMLingQiEquipBreak:
+ Cmd:%s,
+ SubCmd:%s,
+ ItemID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.ItemID
+ )
+ return DumpString
+
+
+m_NAtagCMLingQiEquipBreak=tagCMLingQiEquipBreak()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLingQiEquipBreak.Cmd,m_NAtagCMLingQiEquipBreak.SubCmd))] = m_NAtagCMLingQiEquipBreak
+
+
+#------------------------------------------------------
#A3 02 丢弃背包物品 #tagPlayerDropItem
class tagPlayerDropItem(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index e1aa30b..e1abbfd 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -21502,6 +21502,58 @@
#------------------------------------------------------
+# A8 15 灵器突破结果 #tagMCLingQiEquipBreakResult
+
+class tagMCLingQiEquipBreakResult(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("MakeItemID", c_int), #突破后的物品ID
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA8
+ 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 = 0xA8
+ self.SubCmd = 0x15
+ self.MakeItemID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCLingQiEquipBreakResult)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A8 15 灵器突破结果 //tagMCLingQiEquipBreakResult:
+ Cmd:%s,
+ SubCmd:%s,
+ MakeItemID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.MakeItemID
+ )
+ return DumpString
+
+
+m_NAtagMCLingQiEquipBreakResult=tagMCLingQiEquipBreakResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLingQiEquipBreakResult.Cmd,m_NAtagMCLingQiEquipBreakResult.SubCmd))] = m_NAtagMCLingQiEquipBreakResult
+
+
+#------------------------------------------------------
# A8 14 合成结果通知 #tagMCMakeItemAnswer
class tagMCMakeItemAnswer(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index af60936..b38ec1a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -1221,12 +1221,16 @@
Writer = xdh
Releaser = xdh
RegType = 0
-RegisterPackCount = 1
+RegisterPackCount = 2
PacketCMD_1=0xA5
PacketSubCMD_1=0x03
PacketCallFunc_1=OnActiveAllEquipAttr
+PacketCMD_2=0xA3
+PacketSubCMD_2=0x18
+PacketCallFunc_2=OnLingQiEquipBreak
+
;仙盟抢boss
[FamilyRobBoss]
ScriptName = GameWorldLogic\FamilyRobBoss.py
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 4e24f69..566fa0a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4780,7 +4780,8 @@
ItemGive_Chests, # 宝箱
ItemGive_TrialExchange, # 宗门兑换
ItemGive_LuckyTreasure, #幸运鉴宝
-) = range(1000, 1000 + 21)
+ItemGive_LingQiEquipBreak, #灵器突破
+) = range(1000, 1000 + 22)
# 物品获得类型对应信息 {类型:eventName, ...}
ItemGiveTypeDict = {
@@ -4805,6 +4806,7 @@
ItemGive_Chests:"Chests",
ItemGive_TrialExchange:"TrialExchange",
ItemGive_LuckyTreasure:"LuckyTreasure",
+ ItemGive_LingQiEquipBreak:"LingQiEquipBreak",
}
## 物品扣除类型定义,与获得类型不重复,类型定义为 2000 ~ 2999
@@ -4849,7 +4851,8 @@
ItemDel_2037,
ItemDel_EquipStarUp, # 装备升星
ItemDel_EquipPlusEvolve, # 装备强化进化
-) = range(2000, 2000 + 40)
+ItemDel_LingQiEquipBreak, # 灵器突破
+) = range(2000, 2000 + 41)
# 物品扣除类型对应信息 {类型:eventName, ...}
ItemDelTypeDict = {
@@ -4892,6 +4895,7 @@
ItemDel_CoatDecompose:"CoatDecompose",
ItemDel_EquipStarUp:"EquipStarUp",
ItemDel_EquipPlusEvolve:"EquipPlusEvolve",
+ ItemDel_LingQiEquipBreak:"LingQiEquipBreak",
}
##==================================================================================================
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 1938000..b2c6d08 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -6774,6 +6774,58 @@
#------------------------------------------------------
+# A3 18 灵器突破 #tagCMLingQiEquipBreak
+
+class tagCMLingQiEquipBreak(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("ItemID", c_int), #突破的物品ID
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA3
+ self.SubCmd = 0x18
+ 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 = 0xA3
+ self.SubCmd = 0x18
+ self.ItemID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMLingQiEquipBreak)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A3 18 灵器突破 //tagCMLingQiEquipBreak:
+ Cmd:%s,
+ SubCmd:%s,
+ ItemID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.ItemID
+ )
+ return DumpString
+
+
+m_NAtagCMLingQiEquipBreak=tagCMLingQiEquipBreak()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMLingQiEquipBreak.Cmd,m_NAtagCMLingQiEquipBreak.SubCmd))] = m_NAtagCMLingQiEquipBreak
+
+
+#------------------------------------------------------
#A3 02 丢弃背包物品 #tagPlayerDropItem
class tagPlayerDropItem(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index e1aa30b..e1abbfd 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -21502,6 +21502,58 @@
#------------------------------------------------------
+# A8 15 灵器突破结果 #tagMCLingQiEquipBreakResult
+
+class tagMCLingQiEquipBreakResult(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("MakeItemID", c_int), #突破后的物品ID
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xA8
+ 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 = 0xA8
+ self.SubCmd = 0x15
+ self.MakeItemID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCLingQiEquipBreakResult)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// A8 15 灵器突破结果 //tagMCLingQiEquipBreakResult:
+ Cmd:%s,
+ SubCmd:%s,
+ MakeItemID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.MakeItemID
+ )
+ return DumpString
+
+
+m_NAtagMCLingQiEquipBreakResult=tagMCLingQiEquipBreakResult()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLingQiEquipBreakResult.Cmd,m_NAtagMCLingQiEquipBreakResult.SubCmd))] = m_NAtagMCLingQiEquipBreakResult
+
+
+#------------------------------------------------------
# A8 14 合成结果通知 #tagMCMakeItemAnswer
class tagMCMakeItemAnswer(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
index 241dda4..94b076e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py
@@ -573,6 +573,78 @@
return
+#// A3 18 灵器突破 #tagCMLingQiEquipBreak
+#
+#struct tagCMLingQiEquipBreak
+#{
+# tagHead Head;
+# DWORD ItemID; //突破的物品ID
+#};
+def OnLingQiEquipBreak(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ breakItemID = clientData.ItemID
+ ipyData = IpyGameDataPY.GetIpyGameData('LingQiAttr', breakItemID)
+ if not ipyData:
+ return
+ nextItemID = ipyData.GetNextItemID() #突破后的物品ID
+ if not IpyGameDataPY.GetIpyGameData('LingQiAttr', nextItemID):
+ return
+ breakItemData = GameWorld.GetGameData().GetItemByTypeID(breakItemID)
+ nextItemData = GameWorld.GetGameData().GetItemByTypeID(nextItemID)
+ if not breakItemData or not nextItemData:
+ return
+ equipIndex = ItemCommon.GetEquipPackIndex(breakItemData)
+ if equipIndex != ItemCommon.GetEquipPackIndex(nextItemData):
+ GameWorld.DebugLog("突破的物品和突破后的物品不是同个装备位!breakItemID=%s,nextItemID=%s"
+ % (breakItemID, nextItemID))
+ return
+ equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
+ curEquip = equipPack.GetAt(equipIndex)
+ if not curEquip or curEquip.IsEmpty():
+ GameWorld.DebugLog("突破的物品未穿戴!breakItemID=%s"
+ % (breakItemID))
+ return
+ if curEquip.GetEndureReduceType():
+ GameWorld.DebugLog("突破的物品是时效物品!breakItemID=%s"
+ % (breakItemID))
+ return
+ if curEquip.GetItemTypeID() != breakItemID:
+ GameWorld.DebugLog("突破的物品未穿戴!breakItemID=%s"
+ % (breakItemID))
+ return
+
+
+ costItemDict = ipyData.GetUpCostItem()
+ itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+ lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(costItemDict, itemPack)
+ if lackItemDict:
+ GameWorld.DebugLog("突破消耗物品不足!breakItemID=%s,costItemDict=%s,lackItemDict=%s"
+ % (breakItemID, costItemDict, lackItemDict))
+ return
+
+ #扣消耗
+ ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, 'LingQiEquipBreak')
+ ItemCommon.DelItem(curPlayer, curEquip, 1, False, ChConfig.ItemDel_LingQiEquipBreak, {}, True)
+ #给物品
+ ItemControler.GivePlayerItem(curPlayer, nextItemID, 1, 0, [IPY_GameWorld.rptEquip],
+ event=[ChConfig.ItemGive_LingQiEquipBreak, False, {}])
+ changeItemID = curEquip.GetItemTypeID()
+ changeItemStarLV = 0 #curItem.GetItemStarLV()
+ changeItemStoneCnt = 0 #curItem.GetUseStoneCount()
+ changeItemHoleCnt = 0 #curItem.GetCanPlaceStoneCount()
+ changeItemUseData = curEquip.GetUserData()
+ curPlayer.ChangeEquip(changeItemID, equipIndex, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData)
+ #刷属性
+ RefreshPlayerLingQiEquipAttr(curPlayer)
+ playControl = PlayerControl.PlayerControl(curPlayer)
+ playControl.RefreshPlayerAttrState()
+ #通知结果
+ resultPack = ChPyNetSendPack.tagMCLingQiEquipBreakResult()
+ resultPack.Clear()
+ resultPack.MakeItemID = nextItemID
+ NetPackCommon.SendFakePack(curPlayer, resultPack)
+ return
+
def RefreshPlayerLingQiEquipAttr(curPlayer):
''' 刷新玩家灵器装备属性
'''
--
Gitblit v1.8.0