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