From 37287e325c81b011929b4f91dda1c73666099e85 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 15 一月 2019 16:56:13 +0800
Subject: [PATCH] 5722 【后端】【1.5】跨服BOSS开发(跨服世界频道、区域频道聊天支持)

---
 ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py                    |    7 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTalk.py          |  140 +++++++---------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini                           |    6 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                |    8 
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py                          |    3 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py            |   22 +-
 ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py                               |  201 +++++++++++++++---------
 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py                                     |    8 
 ServerPython/CoreServerGroup/GameServer/ServerCommScript.ini                                      |    6 
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py                                 |   22 +-
 ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py                         |    1 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py |    1 
 12 files changed, 243 insertions(+), 182 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index 8f1f990..702c9eb 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -5881,6 +5881,7 @@
     RealmLV = 0    #(WORD RealmLV)//境界
     OnlineType = 0    #(BYTE OnlineType)//在线状态, 0 不在线 1在线
     IsInTeam = 0    #(BYTE IsInTeam)//是否有队伍
+    ServerGroupID = 0    #(DWORD ServerGroupID)//服务器组ID
     data = None
 
     def __init__(self):
@@ -5899,6 +5900,7 @@
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.OnlineType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.IsInTeam,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ServerGroupID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -5913,6 +5915,7 @@
         self.RealmLV = 0
         self.OnlineType = 0
         self.IsInTeam = 0
+        self.ServerGroupID = 0
         return
 
     def GetLength(self):
@@ -5925,6 +5928,7 @@
         length += 2
         length += 1
         length += 1
+        length += 4
 
         return length
 
@@ -5938,6 +5942,7 @@
         data = CommFunc.WriteWORD(data, self.RealmLV)
         data = CommFunc.WriteBYTE(data, self.OnlineType)
         data = CommFunc.WriteBYTE(data, self.IsInTeam)
+        data = CommFunc.WriteDWORD(data, self.ServerGroupID)
         return data
 
     def OutputString(self):
@@ -5949,7 +5954,8 @@
                                 LV:%d,
                                 RealmLV:%d,
                                 OnlineType:%d,
-                                IsInTeam:%d
+                                IsInTeam:%d,
+                                ServerGroupID:%d
                                 '''\
                                 %(
                                 self.Head.OutputString(),
@@ -5959,7 +5965,8 @@
                                 self.LV,
                                 self.RealmLV,
                                 self.OnlineType,
-                                self.IsInTeam
+                                self.IsInTeam,
+                                self.ServerGroupID
                                 )
         return DumpString
 
@@ -18777,7 +18784,6 @@
     ItemData = ""    #(String ItemData)//物品记录
     PlusDataSize = 0    #(DWORD PlusDataSize)
     PlusData = ""    #(String PlusData)//扩展记录    
-    CrossPlayer = 0    #(BYTE CrossPlayer)//是否跨服玩家
     data = None
 
     def __init__(self):
@@ -18796,7 +18802,6 @@
         self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize)
         self.PlusDataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.PlusData,_pos = CommFunc.ReadString(_lpData, _pos,self.PlusDataSize)
-        self.CrossPlayer,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -18811,7 +18816,6 @@
         self.ItemData = ""
         self.PlusDataSize = 0
         self.PlusData = ""
-        self.CrossPlayer = 0
         return
 
     def GetLength(self):
@@ -18824,7 +18828,6 @@
         length += len(self.ItemData)
         length += 4
         length += len(self.PlusData)
-        length += 1
 
         return length
 
@@ -18838,7 +18841,6 @@
         data = CommFunc.WriteString(data, self.ItemDataSize, self.ItemData)
         data = CommFunc.WriteDWORD(data, self.PlusDataSize)
         data = CommFunc.WriteString(data, self.PlusDataSize, self.PlusData)
-        data = CommFunc.WriteBYTE(data, self.CrossPlayer)
         return data
 
     def OutputString(self):
@@ -18850,8 +18852,7 @@
                                 ItemDataSize:%d,
                                 ItemData:%s,
                                 PlusDataSize:%d,
-                                PlusData:%s,
-                                CrossPlayer:%d
+                                PlusData:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
@@ -18861,8 +18862,7 @@
                                 self.ItemDataSize,
                                 self.ItemData,
                                 self.PlusDataSize,
-                                self.PlusData,
-                                self.CrossPlayer
+                                self.PlusData
                                 )
         return DumpString
 
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py
index 3e3616b..8291317 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py
@@ -23,6 +23,7 @@
 import GameWorldBoss
 import CrossRealmPK
 import PlayerQuery
+import PlayerTalk
 import CrossBoss
 import ChConfig
 import GMShell
@@ -62,6 +63,9 @@
             
         elif msgType == ShareDefine.ClientServerMsg_PKBillboard:
             CrossRealmPK.ClientServerMsg_PKBillboard(serverGroupID, msgData)
+                        
+        elif msgType == ShareDefine.ClientServerMsg_ChatCrossWorld:
+            PlayerTalk.ClientServerMsg_ChatCrossWorld(serverGroupID, msgData, tick)
                         
         elif msgType == ShareDefine.ClientServerMsg_GMCMD:
             GMShell.ClientServerMsg_GMCMD(msgData, tick)
@@ -165,6 +169,9 @@
         elif msgType == ShareDefine.CrossServerMsg_Notify:
             PlayerControl.CrossServerMsg_Notify(msgData)
             
+        elif msgType == ShareDefine.CrossServerMsg_ChatCrossWorld:
+            PlayerTalk.CrossServerMsg_ChatCrossWorld(msgData)
+            
         elif msgType == ShareDefine.CrossServerMsg_ViewPlayerCacheRet:
             CrossRealmPlayer.CrossServerMsg_ViewPlayerCacheRet(msgData, tick)
             
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py
index 2ae44ba..187061c 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/CrossRealmPlayer.py
@@ -316,7 +316,6 @@
     sendPack.ItemDataSize = len(sendPack.ItemData)
     sendPack.PlusData = PlusData
     sendPack.PlusDataSize = len(sendPack.PlusData)
-    sendPack.CrossPlayer = 1
     NetPackCommon.SendFakePack(curPlayer, sendPack)
     return
 
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py
index 9845f9c..9a8e18d 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerTalk.py
@@ -24,6 +24,8 @@
 import ChPyNetSendPack
 import ShareDefine
 import PlayerViewCache
+import CrossRealmPlayer
+import CrossRealmMsg
 import ChNetSendPack
 import NetPackCommon
 import PlayerGeTui
@@ -160,6 +162,47 @@
         NetPackCommon.SendFakePack(curPlayer, chatPack)
     return
 
+## 国家频(封包参数)
+#  @param index 玩家索引 
+#  @param tick 当前时间
+#  @return None
+#  @remarks 函数详细说明.
+def ChatCountry(index, tick):
+    ## 跨服频道
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    playerID = curPlayer.GetPlayerID()
+    sendPack = IPY_GameServer.IPY_GTalkCountry()
+    content = sendPack.GetContent()
+    extraValue = sendPack.GetExtraValue()
+    extras = sendPack.GetExtras()
+    
+    ## 发送到跨服服务器,直接使用跨服boss的分区配置
+    dataMsg = {"PlayerID":playerID, "Content":content, "ExtraValue":extraValue, "Extras":extras}
+    CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_ChatCrossWorld, dataMsg)
+    return
+
+def ClientServerMsg_ChatCrossWorld(serverGroupID, msgData, tick):
+    ## 收到子服跨服世界频道聊天
+    zoneIpyData = CrossRealmPlayer.GetServerCrossZoneIpyData(ChConfig.Def_FBMapID_CrossPenglai, serverGroupID)
+    if not zoneIpyData:
+        return
+    serverGroupIDList = zoneIpyData.GetServerGroupIDList()
+    CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_ChatCrossWorld, msgData, serverGroupIDList)
+    return
+
+def CrossServerMsg_ChatCrossWorld(msgData):
+    ## 收到跨服世界频道聊天
+    
+    playerID = msgData["PlayerID"]
+    content = msgData["Content"]
+    extraValue = msgData["ExtraValue"]
+    extras = msgData["Extras"]
+    
+    curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
+    if curPlayer:
+        curPlayer.ChatCountry(content, extraValue, extras)
+    return
+
 ## 公频(封包参数)
 #  @param index 玩家索引 
 #  @param tick 当前时间
@@ -282,83 +325,83 @@
 # };
 #===============================================================================
 def OnVoiceChat(index, clientPack, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    if not CheckTalk(curPlayer, tick):
-        return
-    
-    sendPack = ChPyNetSendPack.tagGCVoiceChat()
-    sendPack.Clear()
-    sendPack.ChannelType = clientPack.ChannelType
-    sendPack.SrcName = curPlayer.GetName()
-    sendPack.SrcNameLen = len(curPlayer.GetName())
-    sendPack.PlayerID = curPlayer.GetID()
-    sendPack.Len = clientPack.Len
-    sendPack.Content = clientPack.Content
-    sendPack.Extras = GetTalkExtraValue(curPlayer)
-    sendPack.ExtraValue = len(sendPack.Extras)
-    
-    playerManager = GameWorld.GetPlayerManager()
-    if clientPack.ChannelType == ShareDefine.Def_ChannelChat_World:
-        # 世界频道
-        curPlayer.BroadCastAll(sendPack.GetBuffer(), len(sendPack.GetBuffer()))
-    elif clientPack.ChannelType == ShareDefine.Def_ChannelChat_Family:
-        # 家族频道
-        curFamily = curPlayer.GetFamily()
-        if curFamily == None:
-            return
-        for i in range(0, curFamily.GetCount()):
-            notifyMember = curFamily.GetAt(i)
-            notifyPlayer = playerManager.FindPlayerByID(notifyMember.GetPlayerID())
-            
-            if notifyPlayer == None or not notifyPlayer.GetInitOK():
-                continue
-            
-            if PlayerControl.GetIsTJG(notifyPlayer):
-                continue
-            #===================================================================
-            # if notifyPlayer.GetPlayerID() == curPlayer.GetPlayerID():
-            #    #不包括自己
-            #    continue
-            #===================================================================
-
-            NetPackCommon.SendFakePack(notifyPlayer, sendPack)
-    elif clientPack.ChannelType == ShareDefine.Def_ChannelChat_Team:
-        # 队伍
-        curTeam = curPlayer.GetTeam()
-        if curTeam == None:
-            return
-        for index in xrange(curTeam.GetMemberCount()):
-            curMember = curTeam.GetMemberPlayer(index)
-            if not curMember or not curMember.GetPlayerID():
-                continue
-
-            #===================================================================
-            # if curMember.GetPlayerID() == curPlayer.GetPlayerID():
-            #    #不包括自己
-            #    continue
-            #===================================================================
-
-            if PlayerControl.GetIsTJG(curMember):
-                continue
-            NetPackCommon.SendFakePack(curMember, sendPack)
-            
-    elif clientPack.ChannelType == ShareDefine.Def_ChannelChat_Private:
-        # 私聊
-        tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(clientPack.TargetID)
-        if not tagPlayer:
-            tagPlayer = GameWorld.GetPlayerManager().FindPlayerByName(clientPack.TargetName)
-        if tagPlayer == None:
-            return
-        
-        # 黑名单检查
-        if PyDataManager.GetBlacklistManager().CheckBlacklistBoth(curPlayer.GetID(), tagPlayer.GetID(), curPlayer):
-            return
-        
-        sendPack.ToName = tagPlayer.GetName()
-        sendPack.ToNameLen = len(tagPlayer.GetName())
-        sendPack.ToPlayerID = tagPlayer.GetID()
-        NetPackCommon.SendFakePack(tagPlayer, sendPack)
-        NetPackCommon.SendFakePack(curPlayer, sendPack)
+#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+#    if not CheckTalk(curPlayer, tick):
+#        return
+#    
+#    sendPack = ChPyNetSendPack.tagGCVoiceChat()
+#    sendPack.Clear()
+#    sendPack.ChannelType = clientPack.ChannelType
+#    sendPack.SrcName = curPlayer.GetName()
+#    sendPack.SrcNameLen = len(curPlayer.GetName())
+#    sendPack.PlayerID = curPlayer.GetID()
+#    sendPack.Len = clientPack.Len
+#    sendPack.Content = clientPack.Content
+#    sendPack.Extras = GetTalkExtraValue(curPlayer)
+#    sendPack.ExtraValue = len(sendPack.Extras)
+#    
+#    playerManager = GameWorld.GetPlayerManager()
+#    if clientPack.ChannelType == ShareDefine.Def_ChannelChat_World:
+#        # 世界频道
+#        curPlayer.BroadCastAll(sendPack.GetBuffer(), len(sendPack.GetBuffer()))
+#    elif clientPack.ChannelType == ShareDefine.Def_ChannelChat_Family:
+#        # 家族频道
+#        curFamily = curPlayer.GetFamily()
+#        if curFamily == None:
+#            return
+#        for i in range(0, curFamily.GetCount()):
+#            notifyMember = curFamily.GetAt(i)
+#            notifyPlayer = playerManager.FindPlayerByID(notifyMember.GetPlayerID())
+#            
+#            if notifyPlayer == None or not notifyPlayer.GetInitOK():
+#                continue
+#            
+#            if PlayerControl.GetIsTJG(notifyPlayer):
+#                continue
+#            #===================================================================
+#            # if notifyPlayer.GetPlayerID() == curPlayer.GetPlayerID():
+#            #    #不包括自己
+#            #    continue
+#            #===================================================================
+#
+#            NetPackCommon.SendFakePack(notifyPlayer, sendPack)
+#    elif clientPack.ChannelType == ShareDefine.Def_ChannelChat_Team:
+#        # 队伍
+#        curTeam = curPlayer.GetTeam()
+#        if curTeam == None:
+#            return
+#        for index in xrange(curTeam.GetMemberCount()):
+#            curMember = curTeam.GetMemberPlayer(index)
+#            if not curMember or not curMember.GetPlayerID():
+#                continue
+#
+#            #===================================================================
+#            # if curMember.GetPlayerID() == curPlayer.GetPlayerID():
+#            #    #不包括自己
+#            #    continue
+#            #===================================================================
+#
+#            if PlayerControl.GetIsTJG(curMember):
+#                continue
+#            NetPackCommon.SendFakePack(curMember, sendPack)
+#            
+#    elif clientPack.ChannelType == ShareDefine.Def_ChannelChat_Private:
+#        # 私聊
+#        tagPlayer = GameWorld.GetPlayerManager().FindPlayerByID(clientPack.TargetID)
+#        if not tagPlayer:
+#            tagPlayer = GameWorld.GetPlayerManager().FindPlayerByName(clientPack.TargetName)
+#        if tagPlayer == None:
+#            return
+#        
+#        # 黑名单检查
+#        if PyDataManager.GetBlacklistManager().CheckBlacklistBoth(curPlayer.GetID(), tagPlayer.GetID(), curPlayer):
+#            return
+#        
+#        sendPack.ToName = tagPlayer.GetName()
+#        sendPack.ToNameLen = len(tagPlayer.GetName())
+#        sendPack.ToPlayerID = tagPlayer.GetID()
+#        NetPackCommon.SendFakePack(tagPlayer, sendPack)
+#        NetPackCommon.SendFakePack(curPlayer, sendPack)
     return
 
 
@@ -379,6 +422,10 @@
     extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_JOB)% job
     # 气泡框
     extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_BubbleBox) % PlayerControl.GetChatBubbleBox(player)
+    # 服务器组ID
+    extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_ServerGroupID) % PlayerControl.GetPlayerServerGroupID(player)
+    # 等级
+    extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_LV) % player.GetLV()
     return extraValueStr
 
 
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py
index 8f0db15..bffd6cb 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/Player/PlayerViewCache.py
@@ -274,6 +274,7 @@
             answerPack.LV = 1
             answerPack.RealmLV = 1
             answerPack.OnlineType = ChConfig.Def_Offline
+            answerPack.ServerGroupID = 0
         else:
             cacheDict = eval(curCache.GetPropData())
     
@@ -283,6 +284,7 @@
             answerPack.LV = cacheDict["LV"]
             answerPack.RealmLV = cacheDict["RealmLV"]
             answerPack.OnlineType = ChConfig.Def_Offline
+            answerPack.ServerGroupID = cacheDict.get("ServerGroupID", 0)
             
     else:
         answerPack.PlayerID = clientPack.PlayerID
@@ -292,6 +294,7 @@
         answerPack.RealmLV = tagPlayer.GetOfficialRank()
         answerPack.OnlineType = ChConfig.Def_Online
         answerPack.IsInTeam = tagPlayer.GetTeamID() > 0
+        answerPack.ServerGroupID = PlayerControl.GetPlayerServerGroupID(tagPlayer)
 
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
     NetPackCommon.SendFakePack(curPlayer, answerPack)
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 090b5b2..d561aec 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -900,7 +900,9 @@
 Def_TalkExtraValue_Bit_GM,            #GM
 Def_TalkExtraValue_Bit_JOB, #job
 Def_TalkExtraValue_Bit_BubbleBox, #气泡框
-) = range(0, 4)
+Def_TalkExtraValue_Bit_ServerGroupID, #服务器组ID
+Def_TalkExtraValue_Bit_LV, #等级
+) = range(0, 6)
 
 #聊天信息附加值中某信息数据所占位置
 #{聊天信息附加值类型:[起始位置(从左往右), 结束位置(不包含)]}
@@ -909,6 +911,8 @@
      Def_TalkExtraValue_Bit_GM:[2, 3],  # GM
      Def_TalkExtraValue_Bit_JOB:[3, 4],  # job
      Def_TalkExtraValue_Bit_BubbleBox:[4, 6],  # 气泡框
+     Def_TalkExtraValue_Bit_ServerGroupID:[6, 13],  # 服务器组ID
+     Def_TalkExtraValue_Bit_LV:[13, 17],  # 等级
      }
 
 # 聊天频道 暂用语音
@@ -1191,6 +1195,7 @@
 CrossServerMsg_CrossServerState = "CrossServerState"    # 跨服服务器状态变更
 CrossServerMsg_ExitCrossServer = "ExitCrossServer"      # 退出跨服服务器
 CrossServerMsg_Notify = "Notify"                        # 提示信息
+CrossServerMsg_ChatCrossWorld = "ChatCrossWorld"        # 跨服世界聊天
 CrossServerMsg_ViewPlayerCacheRet = "ViewPlayerCacheRet"# 查看跨服玩家信息结果
 CrossServerMsg_PKMatchReqRet = "PKMatchReqRet"          # 跨服PK匹配请求结果
 CrossServerMsg_PKMatchResult = "PKMatchResult"          # 跨服PK匹配结果
@@ -1210,6 +1215,7 @@
 
 # 子服发送跨服信息定义
 ClientServerMsg_ServerInitOK = "ServerInitOK"           # 子服启动成功
+ClientServerMsg_ChatCrossWorld = "ChatCrossWorld"       # 跨服世界聊天
 ClientServerMsg_GMCMD = "GMCMD"                         # GM命令
 ClientServerMsg_ViewPlayerCache = "ViewPlayerCache"     # 查看跨服玩家信息
 ClientServerMsg_PKMatch = "PKMatch"                     # 跨服PK匹配
diff --git a/ServerPython/CoreServerGroup/GameServer/ServerCommScript.ini b/ServerPython/CoreServerGroup/GameServer/ServerCommScript.ini
index e4d2304..0e77a02 100644
--- a/ServerPython/CoreServerGroup/GameServer/ServerCommScript.ini
+++ b/ServerPython/CoreServerGroup/GameServer/ServerCommScript.ini
@@ -41,7 +41,7 @@
 Writer = alee
 Releaser = alee
 RegType = 0
-RegisterPackCount = 5
+RegisterPackCount = 6
 
 PacketCMD_1=0x2
 PacketSubCMD_1=0x1
@@ -63,6 +63,10 @@
 PacketSubCMD_5=0x9
 PacketCallFunc_5=ChatMiFix
 
+PacketCMD_6=0x2
+PacketSubCMD_6=0x8
+PacketCallFunc_6=ChatCountry
+
 
 ;骠车
 [PlayerTruck]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini
index d9196dc..4dd4ed1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script.ini
@@ -491,7 +491,7 @@
 Writer = Mark
 Releaser = Mark
 RegType = 0
-RegisterPackCount = 6
+RegisterPackCount = 7
 
 PacketCMD_1=0x2
 PacketSubCMD_1=0x7
@@ -519,6 +519,10 @@
 PacketSubCMD_6=0x9
 PacketCallFunc_6=TalkPrivate
 
+PacketCMD_7=0x2
+PacketSubCMD_7=0x8
+PacketCallFunc_7=TalkCountry
+
 
 ;战斗
 [Battle]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 8f1f990..702c9eb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -5881,6 +5881,7 @@
     RealmLV = 0    #(WORD RealmLV)//境界
     OnlineType = 0    #(BYTE OnlineType)//在线状态, 0 不在线 1在线
     IsInTeam = 0    #(BYTE IsInTeam)//是否有队伍
+    ServerGroupID = 0    #(DWORD ServerGroupID)//服务器组ID
     data = None
 
     def __init__(self):
@@ -5899,6 +5900,7 @@
         self.RealmLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
         self.OnlineType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         self.IsInTeam,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+        self.ServerGroupID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -5913,6 +5915,7 @@
         self.RealmLV = 0
         self.OnlineType = 0
         self.IsInTeam = 0
+        self.ServerGroupID = 0
         return
 
     def GetLength(self):
@@ -5925,6 +5928,7 @@
         length += 2
         length += 1
         length += 1
+        length += 4
 
         return length
 
@@ -5938,6 +5942,7 @@
         data = CommFunc.WriteWORD(data, self.RealmLV)
         data = CommFunc.WriteBYTE(data, self.OnlineType)
         data = CommFunc.WriteBYTE(data, self.IsInTeam)
+        data = CommFunc.WriteDWORD(data, self.ServerGroupID)
         return data
 
     def OutputString(self):
@@ -5949,7 +5954,8 @@
                                 LV:%d,
                                 RealmLV:%d,
                                 OnlineType:%d,
-                                IsInTeam:%d
+                                IsInTeam:%d,
+                                ServerGroupID:%d
                                 '''\
                                 %(
                                 self.Head.OutputString(),
@@ -5959,7 +5965,8 @@
                                 self.LV,
                                 self.RealmLV,
                                 self.OnlineType,
-                                self.IsInTeam
+                                self.IsInTeam,
+                                self.ServerGroupID
                                 )
         return DumpString
 
@@ -18777,7 +18784,6 @@
     ItemData = ""    #(String ItemData)//物品记录
     PlusDataSize = 0    #(DWORD PlusDataSize)
     PlusData = ""    #(String PlusData)//扩展记录    
-    CrossPlayer = 0    #(BYTE CrossPlayer)//是否跨服玩家
     data = None
 
     def __init__(self):
@@ -18796,7 +18802,6 @@
         self.ItemData,_pos = CommFunc.ReadString(_lpData, _pos,self.ItemDataSize)
         self.PlusDataSize,_pos = CommFunc.ReadDWORD(_lpData, _pos)
         self.PlusData,_pos = CommFunc.ReadString(_lpData, _pos,self.PlusDataSize)
-        self.CrossPlayer,_pos = CommFunc.ReadBYTE(_lpData, _pos)
         return _pos
 
     def Clear(self):
@@ -18811,7 +18816,6 @@
         self.ItemData = ""
         self.PlusDataSize = 0
         self.PlusData = ""
-        self.CrossPlayer = 0
         return
 
     def GetLength(self):
@@ -18824,7 +18828,6 @@
         length += len(self.ItemData)
         length += 4
         length += len(self.PlusData)
-        length += 1
 
         return length
 
@@ -18838,7 +18841,6 @@
         data = CommFunc.WriteString(data, self.ItemDataSize, self.ItemData)
         data = CommFunc.WriteDWORD(data, self.PlusDataSize)
         data = CommFunc.WriteString(data, self.PlusDataSize, self.PlusData)
-        data = CommFunc.WriteBYTE(data, self.CrossPlayer)
         return data
 
     def OutputString(self):
@@ -18850,8 +18852,7 @@
                                 ItemDataSize:%d,
                                 ItemData:%s,
                                 PlusDataSize:%d,
-                                PlusData:%s,
-                                CrossPlayer:%d
+                                PlusData:%s
                                 '''\
                                 %(
                                 self.Head.OutputString(),
@@ -18861,8 +18862,7 @@
                                 self.ItemDataSize,
                                 self.ItemData,
                                 self.PlusDataSize,
-                                self.PlusData,
-                                self.CrossPlayer
+                                self.PlusData
                                 )
         return DumpString
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTalk.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTalk.py
index 32ebc56..f51d7d3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTalk.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerTalk.py
@@ -20,6 +20,7 @@
 #import ReadChConfig
 import ShareDefine
 import ChPyNetSendPack
+import CrossRealmPlayer
 import NetPackCommon
 import EventReport
 import PlayerSuccess
@@ -113,44 +114,29 @@
 #  @return None
 #  @remarks 函数详细说明.
 def TalkCountry(index, tick):
-    #===========================================================================
-    # #20150918 hxp目前作为跨服阵营聊天频道
-    # #20151009 hxp增加py自定义聊天频道
-    # return
-    # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    # 
-    # 
-    # #等级判断
-    # #if curPlayer.GetLV() < ChConfig.Def_PlayerTalkCountryLV:
-    # #    PlayerControl.NotifyCode(curPlayer, "PlayerCall_Error_NoCountry")
-    # #    return
-    # 
-    # #获得国家频封包
-    # sendPack = IPY_GameWorld.IPY_CTalkCountry()
-    # #玩家聊天内容
-    # content = sendPack.GetContent()
-    # 
-    # #通用判断
-    # if not __CheckTalk(curPlayer, content, sendPack.GetLen(), tick):
-    #    return
-    # 
-    # #国王说话免费
-    # #if PlayerCountry.CheckIsCountryKing(curPlayer.GetCountry() , curPlayer.GetID()):
-    # #    PlayerControl.NotifyCode(curPlayer , "C16615EF-FDBC-49AF-9285668F7C8930AA")
-    # #else:
-    # #    moneyType = curPlayer.GetUseSilverType()
-    # #    #金钱判定
-    # #    if not PlayerControl.PayMoney(curPlayer, moneyType, ChConfig.Def_PlayerTalkCoutryMoney):
-    # #        return False
-    # 
-    # #通用设置
-    # SetTalkTime(curPlayer, content, IPY_GameWorld.tcCountry, tick)
-    # 
-    # #说话
-    # extraValue = GetTalkExtraValue(curPlayer)
-    # extras = ''
-    # curPlayer.ChatCountry(content, extraValue, extras)
-    #===========================================================================
+    ## 跨服世界频道
+    if GameWorld.IsCrossServer():
+        return
+    
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    
+    if not CrossRealmPlayer.IsCrossServerOpen():
+        PlayerControl.NotifyCode(curPlayer, "CrossMatching18")
+        return
+    
+    sendPack = IPY_GameWorld.IPY_CTalkCountry()
+    #玩家聊天内容
+    content = sendPack.GetContent()
+    
+    #通用检测
+    if not __CheckTalk(curPlayer, content, sendPack.GetLen(), tick, checkSameMsg = False):
+        return
+    
+    #通用设置
+    SetTalkTime(curPlayer, content, IPY_GameWorld.tcCountry, tick)
+    #发送聊天内容
+    extras = GetTalkExtraValue(curPlayer)
+    curPlayer.ChatCountry(content, 0, extras)
     return
 
 ## 联盟家族频道(封包参数)
@@ -375,12 +361,10 @@
     extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_JOB)% job
     # 气泡框
     extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_BubbleBox) % PlayerControl.GetChatBubbleBox(objTalk)
-    
-    # 新手指导员
-    #extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_NewGuider)% (freshmanGuiderDay > 0)
-    # QQ会员
-    #operateInfo = int(objTalk.GetOperateInfo())
-    #extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_QQOperate)% (operateInfo)
+    # 服务器组ID
+    extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_ServerGroupID) % PlayerControl.GetPlayerServerGroupID(objTalk)
+    # 等级
+    extraValueStr += GetTalkExtraValueStar(ShareDefine.Def_TalkExtraValue_Bit_LV) % objTalk.GetLV()
     return extraValueStr
 
 
@@ -552,39 +536,39 @@
 # };
 #===============================================================================
 def OnVoiceChat(index, clientPack, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    if GetGMToolForbidTalk(curPlayer):
-        return
-    if clientPack.ChannelType != ShareDefine.Def_ChannelChat_Area:
-        return
-    sendPack = ChPyNetSendPack.tagGCVoiceChat()
-    sendPack.Clear()
-    sendPack.ChannelType = clientPack.ChannelType
-    sendPack.SrcName = curPlayer.GetName()
-    sendPack.SrcNameLen = len(curPlayer.GetName())
-    sendPack.PlayerID = curPlayer.GetID()
-    sendPack.Len = clientPack.Len
-    sendPack.Content = clientPack.Content
-    sendPack.Extras = GetTalkExtraValue(curPlayer)
-    sendPack.ExtraValue = len(sendPack.Extras)
-    
-    # 区域频道
-    
-    #如果在普通地图, 就广播, 如果在副本就单个通知
-    if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull:
-        curPlayer.BroadCastAll(sendPack.GetBuffer(), len(sendPack.GetBuffer()))
-    else:
-        playerManager = GameWorld.GetMapCopyPlayerManager()
-        
-        for index in range(0 , playerManager.GetPlayerCount()):
-            #广播玩家
-            tempPlayer = playerManager.GetPlayerByIndex(index)
-            if not tempPlayer.GetPlayerID():
-                continue
-            
-            if PlayerTJG.GetIsTJG(tempPlayer):
-                continue
-                
-            NetPackCommon.SendFakePack(tempPlayer, sendPack)
+#    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+#    if GetGMToolForbidTalk(curPlayer):
+#        return
+#    if clientPack.ChannelType != ShareDefine.Def_ChannelChat_Area:
+#        return
+#    sendPack = ChPyNetSendPack.tagGCVoiceChat()
+#    sendPack.Clear()
+#    sendPack.ChannelType = clientPack.ChannelType
+#    sendPack.SrcName = curPlayer.GetName()
+#    sendPack.SrcNameLen = len(curPlayer.GetName())
+#    sendPack.PlayerID = curPlayer.GetID()
+#    sendPack.Len = clientPack.Len
+#    sendPack.Content = clientPack.Content
+#    sendPack.Extras = GetTalkExtraValue(curPlayer)
+#    sendPack.ExtraValue = len(sendPack.Extras)
+#    
+#    # 区域频道
+#    
+#    #如果在普通地图, 就广播, 如果在副本就单个通知
+#    if GameWorld.GetMap().GetMapFBType() == IPY_GameWorld.fbtNull:
+#        curPlayer.BroadCastAll(sendPack.GetBuffer(), len(sendPack.GetBuffer()))
+#    else:
+#        playerManager = GameWorld.GetMapCopyPlayerManager()
+#        
+#        for index in range(0 , playerManager.GetPlayerCount()):
+#            #广播玩家
+#            tempPlayer = playerManager.GetPlayerByIndex(index)
+#            if not tempPlayer.GetPlayerID():
+#                continue
+#            
+#            if PlayerTJG.GetIsTJG(tempPlayer):
+#                continue
+#                
+#            NetPackCommon.SendFakePack(tempPlayer, sendPack)
     return
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
index 9d6b53e..971bab8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerViewCacheTube.py
@@ -96,6 +96,7 @@
     curPlayerPropDict["FightPower"] = curPlayer.GetFightPower()
     curPlayerPropDict["AppID"] = GameWorld.GetPlayerPlatform(curPlayer)
     curPlayerPropDict["EquipShowSwitch"] = curPlayer.GetEquipShowSwitch()
+    curPlayerPropDict["ServerGroupID"] = PlayerControl.GetPlayerServerGroupID(curPlayer)
     #仙魔之争所需属性
     curPlayerPropDict["MinAtk"] = curPlayer.GetMinAtk()
     curPlayerPropDict["MaxAtk"] = curPlayer.GetMaxAtk()
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 090b5b2..d561aec 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -900,7 +900,9 @@
 Def_TalkExtraValue_Bit_GM,            #GM
 Def_TalkExtraValue_Bit_JOB, #job
 Def_TalkExtraValue_Bit_BubbleBox, #气泡框
-) = range(0, 4)
+Def_TalkExtraValue_Bit_ServerGroupID, #服务器组ID
+Def_TalkExtraValue_Bit_LV, #等级
+) = range(0, 6)
 
 #聊天信息附加值中某信息数据所占位置
 #{聊天信息附加值类型:[起始位置(从左往右), 结束位置(不包含)]}
@@ -909,6 +911,8 @@
      Def_TalkExtraValue_Bit_GM:[2, 3],  # GM
      Def_TalkExtraValue_Bit_JOB:[3, 4],  # job
      Def_TalkExtraValue_Bit_BubbleBox:[4, 6],  # 气泡框
+     Def_TalkExtraValue_Bit_ServerGroupID:[6, 13],  # 服务器组ID
+     Def_TalkExtraValue_Bit_LV:[13, 17],  # 等级
      }
 
 # 聊天频道 暂用语音
@@ -1191,6 +1195,7 @@
 CrossServerMsg_CrossServerState = "CrossServerState"    # 跨服服务器状态变更
 CrossServerMsg_ExitCrossServer = "ExitCrossServer"      # 退出跨服服务器
 CrossServerMsg_Notify = "Notify"                        # 提示信息
+CrossServerMsg_ChatCrossWorld = "ChatCrossWorld"        # 跨服世界聊天
 CrossServerMsg_ViewPlayerCacheRet = "ViewPlayerCacheRet"# 查看跨服玩家信息结果
 CrossServerMsg_PKMatchReqRet = "PKMatchReqRet"          # 跨服PK匹配请求结果
 CrossServerMsg_PKMatchResult = "PKMatchResult"          # 跨服PK匹配结果
@@ -1210,6 +1215,7 @@
 
 # 子服发送跨服信息定义
 ClientServerMsg_ServerInitOK = "ServerInitOK"           # 子服启动成功
+ClientServerMsg_ChatCrossWorld = "ChatCrossWorld"       # 跨服世界聊天
 ClientServerMsg_GMCMD = "GMCMD"                         # GM命令
 ClientServerMsg_ViewPlayerCache = "ViewPlayerCache"     # 查看跨服玩家信息
 ClientServerMsg_PKMatch = "PKMatch"                     # 跨服PK匹配

--
Gitblit v1.8.0