From 103b3e459dccf87e3985911a36882d07b8f63efa Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 30 八月 2018 18:04:33 +0800
Subject: [PATCH] Add: 增加仙盟召集功能; Fix:修复击杀进度同步错误问题;
---
ServerPython/CoreServerGroup/GameServer/PyNetPack.ini | 6 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 52 +++++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FamilyRobBoss.py | 8 ++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 52 +++++++++++++++++
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py | 28 +++++++++
5 files changed, 143 insertions(+), 3 deletions(-)
diff --git a/ServerPython/CoreServerGroup/GameServer/PyNetPack.ini b/ServerPython/CoreServerGroup/GameServer/PyNetPack.ini
index 6b0a4e7..e07f7b6 100644
--- a/ServerPython/CoreServerGroup/GameServer/PyNetPack.ini
+++ b/ServerPython/CoreServerGroup/GameServer/PyNetPack.ini
@@ -319,7 +319,7 @@
Writer = xdh
Releaser = xdh
RegType = 0
-RegisterPackCount = 2
+RegisterPackCount = 3
PacketCMD_1=0xA9
PacketSubCMD_1=0x03
@@ -329,6 +329,10 @@
PacketSubCMD_2=0x04
PacketCallFunc_2=OnQueryAllFamilyBossHurt
+PacketCMD_3=0xAC
+PacketSubCMD_3=0x05
+PacketCallFunc_3=OnCallupFamilyMemberToBoss
+
[PlayerXMZZ]
ScriptName = Player\PlayerXMZZ.py
Writer = xdh
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 80a331a..6bc333c 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -1359,6 +1359,58 @@
#------------------------------------------------------
+# AC 05 召集仙盟成员打boss #tagCGCallupFamilyMemberToBoss
+
+class tagCGCallupFamilyMemberToBoss(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("NPCID", c_int),
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xAC
+ self.SubCmd = 0x05
+ 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 = 0xAC
+ self.SubCmd = 0x05
+ self.NPCID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCGCallupFamilyMemberToBoss)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AC 05 召集仙盟成员打boss //tagCGCallupFamilyMemberToBoss:
+ Cmd:%s,
+ SubCmd:%s,
+ NPCID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.NPCID
+ )
+ return DumpString
+
+
+m_NAtagCGCallupFamilyMemberToBoss=tagCGCallupFamilyMemberToBoss()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCallupFamilyMemberToBoss.Cmd,m_NAtagCGCallupFamilyMemberToBoss.SubCmd))] = m_NAtagCGCallupFamilyMemberToBoss
+
+
+#------------------------------------------------------
# AC 02 仙魔之争战斗结束 #tagCGXMZZOver
class tagCGXMZZOver(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py
index dd7e024..9fdc15c 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py
@@ -45,6 +45,7 @@
import PyGameData
import PlayerGeTui
import time
+import IPY_GameServer
@@ -178,7 +179,7 @@
Sync_BossInfo(None, [bossID])
# 仙盟归属boss的重置
- if bossID in PyGameData.g_familyOwnerBossInfo:
+ if isAlive and bossID in PyGameData.g_familyOwnerBossInfo:
PyGameData.g_familyOwnerBossInfo.pop(bossID)
return
@@ -1050,6 +1051,7 @@
return
PyGameData.g_familyOwnerBossInfo.update(msgInfo)
+ #GameWorld.DebugLog(" PyGameData.g_familyOwnerBossInfo=%s" % PyGameData.g_familyOwnerBossInfo)
return
#// AC 04 查询仙盟抢Boss所有Boss当前进度 #tagCGQueryAllFamilyBossHurt
@@ -1079,3 +1081,27 @@
NetPackCommon.SendFakePack(curPlayer, hurtPack)
return
+#// AC 05 召集仙盟成员打boss #tagCGCallupFamilyMemberToBoss
+#
+#struct tagCGCallupFamilyMemberToBoss
+#{
+# tagHead Head;
+# DWORD NPCID;
+#};
+def OnCallupFamilyMemberToBoss(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ playerID = curPlayer.GetPlayerID()
+ npcID = clientData.NPCID
+
+ curFamily = curPlayer.GetFamily()
+ if curFamily == None:
+ return
+ curMember = curFamily.FindMember(playerID)
+ if curMember == None:
+ return
+ if curMember.GetFamilyLV() == IPY_GameServer.fmlMember:
+ GameWorld.DebugLog("普通成员无法召集!", playerID)
+ return
+ PlayerControl.FamilyNotify(curFamily.GetID(), "FairyGrabBossHelp", [npcID])
+ return
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 80a331a..6bc333c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -1359,6 +1359,58 @@
#------------------------------------------------------
+# AC 05 召集仙盟成员打boss #tagCGCallupFamilyMemberToBoss
+
+class tagCGCallupFamilyMemberToBoss(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("NPCID", c_int),
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xAC
+ self.SubCmd = 0x05
+ 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 = 0xAC
+ self.SubCmd = 0x05
+ self.NPCID = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagCGCallupFamilyMemberToBoss)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AC 05 召集仙盟成员打boss //tagCGCallupFamilyMemberToBoss:
+ Cmd:%s,
+ SubCmd:%s,
+ NPCID:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.NPCID
+ )
+ return DumpString
+
+
+m_NAtagCGCallupFamilyMemberToBoss=tagCGCallupFamilyMemberToBoss()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCallupFamilyMemberToBoss.Cmd,m_NAtagCGCallupFamilyMemberToBoss.SubCmd))] = m_NAtagCGCallupFamilyMemberToBoss
+
+
+#------------------------------------------------------
# AC 02 仙魔之争战斗结束 #tagCGXMZZOver
class tagCGXMZZOver(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FamilyRobBoss.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FamilyRobBoss.py
index 5113087..d6f129b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FamilyRobBoss.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FamilyRobBoss.py
@@ -244,9 +244,11 @@
npcFamilyHisHurtDict = hurtMgr.familyHisHurtDict.get(key, {})
npcFamilyPlayerIDDict = hurtMgr.familyPlayerIDDict.get(key, {})
+ ownerFamilyName = ""
if ownerFamilyID in npcFamilyHisHurtDict:
ownerFamilyHisHurt = npcFamilyHisHurtDict[ownerFamilyID]
- PlayerControl.WorldNotify(0, "FairyGrabBossDead", [ownerFamilyHisHurt.name, bossID])
+ ownerFamilyName = ownerFamilyHisHurt.name
+ PlayerControl.WorldNotify(0, "FairyGrabBossDead", [ownerFamilyName, bossID])
# 击杀结算前强制排序历史玩家伤血
npcHisHurtPlayerList = npcPlayerHisHurtDict.values()
@@ -304,6 +306,10 @@
if curPlayer:
NetPackCommon.SendFakePack(curPlayer, hurtPack)
+ # 击杀时主动同步进度
+ syncMsg = str({bossID:[0, maxHP, ownerFamilyID, ownerFamilyName]})
+ GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "FamilyOwnerBossInfo", syncMsg, len(syncMsg))
+
# 伤血在NPCCommon统一清
return
--
Gitblit v1.8.0