9415 【BT】【后端】古神战场(召集队伍可设置是否仅召集本服玩家)

# Conflicts:
# ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossRealmMsg.py
9个文件已修改
235 ■■■■■ 已修改文件
ServerPython/CoreServerGroup/GameServer/PyNetPack.ini 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBattlefield.py 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossBattlefield.py 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServerPython/CoreServerGroup/GameServer/PyNetPack.ini
@@ -369,7 +369,7 @@
Writer = hxp
Releaser = hxp
RegType = 0
RegisterPackCount = 2
RegisterPackCount = 3
PacketCMD_1=0xC0
PacketSubCMD_1=0x07
@@ -379,6 +379,10 @@
PacketSubCMD_2=0x08
PacketCallFunc_2=OnCrossBattlefieldCallKick
PacketCMD_3=0xC0
PacketSubCMD_3=0x03
PacketCallFunc_3=OnCrossBattlefieldCallChange
[CrossRealmPK]
ScriptName = GameWorldLogic\CrossRealmPK.py
Writer = hxp
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -3987,6 +3987,66 @@
#------------------------------------------------------
# C0 09 跨服战场召集场次修改 #tagCGCrossBattlefieldCallChange
class  tagCGCrossBattlefieldCallChange(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Hour", c_ubyte),    #战场开启时
                  ("Minute", c_ubyte),    #战场开启分
                  ("ServerOnly", c_ubyte),    #是否仅本服玩家可加入,0-否,1-是
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xC0
        self.SubCmd = 0x09
        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 = 0xC0
        self.SubCmd = 0x09
        self.Hour = 0
        self.Minute = 0
        self.ServerOnly = 0
        return
    def GetLength(self):
        return sizeof(tagCGCrossBattlefieldCallChange)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// C0 09 跨服战场召集场次修改 //tagCGCrossBattlefieldCallChange:
                                Cmd:%s,
                                SubCmd:%s,
                                Hour:%d,
                                Minute:%d,
                                ServerOnly:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.Hour,
                                self.Minute,
                                self.ServerOnly
                                )
        return DumpString
m_NAtagCGCrossBattlefieldCallChange=tagCGCrossBattlefieldCallChange()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCrossBattlefieldCallChange.Cmd,m_NAtagCGCrossBattlefieldCallChange.SubCmd))] = m_NAtagCGCrossBattlefieldCallChange
#------------------------------------------------------
# C0 08 跨服战场召集场次踢人 #tagCGCrossBattlefieldCallKick
class  tagCGCrossBattlefieldCallKick(Structure):
@@ -19071,6 +19131,7 @@
                  ("Hour", c_ubyte),    #战场开启时
                  ("Minute", c_ubyte),    #战场开启分
                  ("Faction", c_ubyte),    #阵营 1-红;2-蓝
                  ("ServerOnly", c_ubyte),    #是否仅本服玩家可加入,0-否,1-是
                  ]
    def __init__(self):
@@ -19090,6 +19151,7 @@
        self.Hour = 0
        self.Minute = 0
        self.Faction = 0
        self.ServerOnly = 0
        return
    def GetLength(self):
@@ -19104,14 +19166,16 @@
                                SubCmd:%s,
                                Hour:%d,
                                Minute:%d,
                                Faction:%d
                                Faction:%d,
                                ServerOnly:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.Hour,
                                self.Minute,
                                self.Faction
                                self.Faction,
                                self.ServerOnly
                                )
        return DumpString
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -12373,6 +12373,7 @@
class  tagGCCrossBattlefieldBuyPlayer(Structure):
    BuyPlayerID = 0    #(DWORD BuyPlayerID)//购买的玩家ID,即召集人
    Faction = 0    #(BYTE Faction)//阵营 1-红;2-蓝
    ServerOnly = 0    #(BYTE ServerOnly)//是否仅本服玩家可加入,0-否,1-是
    FactionPlayerCount = 0    #(BYTE FactionPlayerCount)
    FactionPlayerList = list()    #(vector<tagGCCrossBattlefieldPlayer> FactionPlayerList)//阵营所有玩家列表,包含召集人
    data = None
@@ -12385,6 +12386,7 @@
        self.Clear()
        self.BuyPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Faction,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.ServerOnly,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.FactionPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.FactionPlayerCount):
            temFactionPlayerList = tagGCCrossBattlefieldPlayer()
@@ -12395,6 +12397,7 @@
    def Clear(self):
        self.BuyPlayerID = 0
        self.Faction = 0
        self.ServerOnly = 0
        self.FactionPlayerCount = 0
        self.FactionPlayerList = list()
        return
@@ -12402,6 +12405,7 @@
    def GetLength(self):
        length = 0
        length += 4
        length += 1
        length += 1
        length += 1
        for i in range(self.FactionPlayerCount):
@@ -12413,6 +12417,7 @@
        data = ''
        data = CommFunc.WriteDWORD(data, self.BuyPlayerID)
        data = CommFunc.WriteBYTE(data, self.Faction)
        data = CommFunc.WriteBYTE(data, self.ServerOnly)
        data = CommFunc.WriteBYTE(data, self.FactionPlayerCount)
        for i in range(self.FactionPlayerCount):
            data = CommFunc.WriteString(data, self.FactionPlayerList[i].GetLength(), self.FactionPlayerList[i].GetBuffer())
@@ -12422,12 +12427,14 @@
        DumpString = '''
                                BuyPlayerID:%d,
                                Faction:%d,
                                ServerOnly:%d,
                                FactionPlayerCount:%d,
                                FactionPlayerList:%s
                                '''\
                                %(
                                self.BuyPlayerID,
                                self.Faction,
                                self.ServerOnly,
                                self.FactionPlayerCount,
                                "..."
                                )
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/CrossBattlefield.py
@@ -54,6 +54,7 @@
value2:hmNum            时分场次编号
value3:playerID        购买的玩家ID
value4:factionID        所选择的阵营ID
value5:serverOnly        是否仅本服玩家可加入,0-否,1-是
StrValue3:[callPlayerID,...]    召集来的玩家ID,包含自己
'''
@@ -71,6 +72,7 @@
        self.zoneID = 0
        self.playerID = 0
        self.factionID = 0
        self.serverOnly = 0
        self.callPlayerIDList = []
        
        # 子服用,跨服服务器同步数据时负值; 不存库,玩家属性缓存信息,本服玩家取自己服务器最新缓存
@@ -88,7 +90,7 @@
                                             "RealmLV":cacheDict["RealmLV"], "FightPower":cacheDict["FightPower"]}
            
        return {"buyTime":self.buyTime, "hmNum":self.hmNum, "zoneID":self.zoneID, "playerID":self.playerID, "factionID":self.factionID,
                "callPlayerIDList":self.callPlayerIDList, "callPlayerDict":self.callPlayerDict}
                "serverOnly":self.serverOnly, "callPlayerIDList":self.callPlayerIDList, "callPlayerDict":self.callPlayerDict}
        
    def SetAttr(self, attrDict):
        for k, v in attrDict.items():
@@ -112,6 +114,7 @@
        hmNum = recData.GetValue2()
        playerID = recData.GetValue3()
        factionID = recData.GetValue4()
        serverOnly = recData.GetValue5()
        
        strValue3 = recData.GetStrValue3()
            
@@ -121,6 +124,7 @@
        buyRec.hmNum = hmNum
        buyRec.playerID = playerID
        buyRec.factionID = factionID
        buyRec.serverOnly = serverOnly
        buyRec.callPlayerIDList = eval(strValue3) if strValue3 else []
        
        buyPlayerInfo = GetBuyPlayerInfo(zoneID, hmNum)
@@ -152,6 +156,7 @@
                recData.SetValue2(buyRec.hmNum)
                recData.SetValue3(buyRec.playerID)
                recData.SetValue4(buyRec.factionID)
                recData.SetValue5(buyRec.serverOnly)
                
                recData.SetStrValue3(str(buyRec.callPlayerIDList).replace(" ", ""))
                
@@ -655,6 +660,7 @@
    openHour = msgData["openHour"]
    openMinute = msgData["openMinute"]
    faction = msgData["faction"]
    serverOnly = msgData.get("serverOnly", 0)
    
    hmNum = GetHMNum(openHour, openMinute)
    
@@ -707,9 +713,11 @@
    buyRec.playerID = playerID
    buyRec.factionID = faction
    buyRec.callPlayerIDList = [playerID]
    buyRec.serverOnly = serverOnly
    buyPlayerInfo[playerID] = buyRec
    
    GameWorld.DebugLog("玩家购买开启召集场次! zoneID=%s,openHour=%s,openMinute=%s" % (zoneID, openHour, openMinute), playerID)
    GameWorld.DebugLog("玩家购买开启召集场次! zoneID=%s,openHour=%s,openMinute=%s,faction=%s,serverOnly=%s"
                       % (zoneID, openHour, openMinute, faction, serverOnly), playerID)
    
    # 上榜
    billboardCallCountLimit = IpyGameDataPY.GetFuncCfg("CrossBattlefieldBillboard", 1) # 周召集榜上榜至少次数
@@ -817,6 +825,36 @@
    
    serverGroupIDList = zoneIpyData.GetServerGroupIDList()
    msgData.update({"opType":"CallKick"})
    Send_CrossServerMsg_BattlefieldBuy(zoneID, serverGroupIDList, msgData)
    return
def ClientServerMsg_BattlefieldCallChange(serverGroupID, msgData):
    openHour = msgData["openHour"]
    openMinute = msgData["openMinute"]
    serverOnly = msgData["serverOnly"]
    playerID = msgData["playerID"]
    zoneIpyData = CrossRealmPK.GetCrossPKServerGroupZone(serverGroupID)
    if not zoneIpyData:
        return
    zoneID = zoneIpyData.GetZoneID()
    hmNum = GetHMNum(openHour, openMinute)
    buyPlayerInfo = GetBuyPlayerInfo(zoneID, hmNum)
    if playerID not in buyPlayerInfo:
        GameWorld.ErrLog("跨服战场不存在该玩家的召集队伍! hmNum=%s,playerID=%s" % (hmNum, playerID), playerID)
        return
    buyRec = buyPlayerInfo[playerID]
    buyRec.serverOnly = 1 if serverOnly else 0
    GameWorld.DebugLog("玩家召集队伍修改! zoneID=%s,openHour=%s,openMinute=%s,serverOnly=%s"
                       % (zoneID, openHour, openMinute, serverOnly), playerID)
    #SyncMapServerCrossBattlefieldBuyInfo()
    serverGroupIDList = zoneIpyData.GetServerGroupIDList()
    msgData.update({"opType":"CallChange"})
    Send_CrossServerMsg_BattlefieldBuy(zoneID, serverGroupIDList, msgData)
    return
@@ -1019,6 +1057,9 @@
    elif opType == "CallKick":
        pass
    
    elif opType == "CallChange":
        pass
    return
def SyncCrossBattlefieldBuyInfo(curPlayer, zoneID, hmNum=None):
@@ -1041,6 +1082,7 @@
            buyPlayerPack = ChPyNetSendPack.tagGCCrossBattlefieldBuyPlayer()
            buyPlayerPack.BuyPlayerID = buyPlayerID
            buyPlayerPack.Faction = buyRec.factionID
            buyPlayerPack.ServerOnly = buyRec.serverOnly
            buyPlayerPack.FactionPlayerList = []
            
            for callPlayerID in buyRec.callPlayerIDList:
@@ -1126,6 +1168,11 @@
        GameWorld.DebugLog("召集人数已满! hmNum=%s,buyPlayerID=%s,callPlayerIDList=%s" % (hmNum, buyPlayerID, buyRec.callPlayerIDList), playerID)
        return
    
    if buyRec.serverOnly and not PlayerControl.GetDBPlayerAccIDByID(buyPlayerID):
        PlayerControl.NotifyCode(curPlayer, "CrossBattlefieldCallServerOnly")
        #GameWorld.DebugLog("非本服玩家,无法加入其购买的召集队伍! hmNum=%s,buyPlayerID=%s,serverOnly=%s" % (hmNum, buyPlayerID, buyRec.serverOnly), playerID)
        return
    # 请求查询跨服服务器
    dataMsg = {"openHour":openHour, "openMinute":openMinute, "buyPlayerID":buyPlayerID, "tagPlayerID":tagPlayerID, "playerID":playerID}
    CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_BattlefieldCallJoin, dataMsg)
@@ -1190,3 +1237,26 @@
    CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_BattlefieldCallKick, dataMsg)
    return
#// C0 09 跨服战场召集场次修改 #tagCGCrossBattlefieldCallChange
#
#struct    tagCGCrossBattlefieldCallChange
#{
#    tagHead        Head;
#    BYTE    Hour;        //战场开启时
#    BYTE    Minute;        //战场开启分
#    BYTE    ServerOnly;    //是否仅本服玩家可加入,0-否,1-是
#};
def OnCrossBattlefieldCallChange(index, clientData, tick):
    if GameWorld.IsCrossServer():
        return
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    playerID = curPlayer.GetPlayerID()
    openHour = clientData.Hour
    openMinute = clientData.Minute
    serverOnly = clientData.ServerOnly
    # 请求查询跨服服务器
    dataMsg = {"openHour":openHour, "openMinute":openMinute, "serverOnly":serverOnly, "playerID":playerID}
    CrossRealmMsg.SendMsgToCrossServer(ShareDefine.ClientServerMsg_BattlefieldCallChange, dataMsg)
    return
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -1414,6 +1414,7 @@
ClientServerMsg_AddBuff = "AddBuff"                     # 添加BUFF
ClientServerMsg_LuckyCloudBuy = "LuckyCloudBuy"         # 幸运云购
ClientServerMsg_BattlefieldBuyOpen = "BattlefieldBuyOpen"   # 跨服战场购买召集
ClientServerMsg_BattlefieldCallChange = "BattlefieldCallChange"  # 跨服战场召集 - 修改
ClientServerMsg_BattlefieldCallJoin = "BattlefieldCallJoin"   # 跨服战场召集 - 加入
ClientServerMsg_BattlefieldCallKick = "BattlefieldCallKick"   # 跨服战场召集 - 踢出
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -3987,6 +3987,66 @@
#------------------------------------------------------
# C0 09 跨服战场召集场次修改 #tagCGCrossBattlefieldCallChange
class  tagCGCrossBattlefieldCallChange(Structure):
    _pack_ = 1
    _fields_ = [
                  ("Cmd", c_ubyte),
                  ("SubCmd", c_ubyte),
                  ("Hour", c_ubyte),    #战场开启时
                  ("Minute", c_ubyte),    #战场开启分
                  ("ServerOnly", c_ubyte),    #是否仅本服玩家可加入,0-否,1-是
                  ]
    def __init__(self):
        self.Clear()
        self.Cmd = 0xC0
        self.SubCmd = 0x09
        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 = 0xC0
        self.SubCmd = 0x09
        self.Hour = 0
        self.Minute = 0
        self.ServerOnly = 0
        return
    def GetLength(self):
        return sizeof(tagCGCrossBattlefieldCallChange)
    def GetBuffer(self):
        return string_at(addressof(self), self.GetLength())
    def OutputString(self):
        DumpString = '''// C0 09 跨服战场召集场次修改 //tagCGCrossBattlefieldCallChange:
                                Cmd:%s,
                                SubCmd:%s,
                                Hour:%d,
                                Minute:%d,
                                ServerOnly:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.Hour,
                                self.Minute,
                                self.ServerOnly
                                )
        return DumpString
m_NAtagCGCrossBattlefieldCallChange=tagCGCrossBattlefieldCallChange()
ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCGCrossBattlefieldCallChange.Cmd,m_NAtagCGCrossBattlefieldCallChange.SubCmd))] = m_NAtagCGCrossBattlefieldCallChange
#------------------------------------------------------
# C0 08 跨服战场召集场次踢人 #tagCGCrossBattlefieldCallKick
class  tagCGCrossBattlefieldCallKick(Structure):
@@ -19071,6 +19131,7 @@
                  ("Hour", c_ubyte),    #战场开启时
                  ("Minute", c_ubyte),    #战场开启分
                  ("Faction", c_ubyte),    #阵营 1-红;2-蓝
                  ("ServerOnly", c_ubyte),    #是否仅本服玩家可加入,0-否,1-是
                  ]
    def __init__(self):
@@ -19090,6 +19151,7 @@
        self.Hour = 0
        self.Minute = 0
        self.Faction = 0
        self.ServerOnly = 0
        return
    def GetLength(self):
@@ -19104,14 +19166,16 @@
                                SubCmd:%s,
                                Hour:%d,
                                Minute:%d,
                                Faction:%d
                                Faction:%d,
                                ServerOnly:%d
                                '''\
                                %(
                                self.Cmd,
                                self.SubCmd,
                                self.Hour,
                                self.Minute,
                                self.Faction
                                self.Faction,
                                self.ServerOnly
                                )
        return DumpString
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -12373,6 +12373,7 @@
class  tagGCCrossBattlefieldBuyPlayer(Structure):
    BuyPlayerID = 0    #(DWORD BuyPlayerID)//购买的玩家ID,即召集人
    Faction = 0    #(BYTE Faction)//阵营 1-红;2-蓝
    ServerOnly = 0    #(BYTE ServerOnly)//是否仅本服玩家可加入,0-否,1-是
    FactionPlayerCount = 0    #(BYTE FactionPlayerCount)
    FactionPlayerList = list()    #(vector<tagGCCrossBattlefieldPlayer> FactionPlayerList)//阵营所有玩家列表,包含召集人
    data = None
@@ -12385,6 +12386,7 @@
        self.Clear()
        self.BuyPlayerID,_pos = CommFunc.ReadDWORD(_lpData, _pos)
        self.Faction,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.ServerOnly,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        self.FactionPlayerCount,_pos = CommFunc.ReadBYTE(_lpData, _pos)
        for i in range(self.FactionPlayerCount):
            temFactionPlayerList = tagGCCrossBattlefieldPlayer()
@@ -12395,6 +12397,7 @@
    def Clear(self):
        self.BuyPlayerID = 0
        self.Faction = 0
        self.ServerOnly = 0
        self.FactionPlayerCount = 0
        self.FactionPlayerList = list()
        return
@@ -12402,6 +12405,7 @@
    def GetLength(self):
        length = 0
        length += 4
        length += 1
        length += 1
        length += 1
        for i in range(self.FactionPlayerCount):
@@ -12413,6 +12417,7 @@
        data = ''
        data = CommFunc.WriteDWORD(data, self.BuyPlayerID)
        data = CommFunc.WriteBYTE(data, self.Faction)
        data = CommFunc.WriteBYTE(data, self.ServerOnly)
        data = CommFunc.WriteBYTE(data, self.FactionPlayerCount)
        for i in range(self.FactionPlayerCount):
            data = CommFunc.WriteString(data, self.FactionPlayerList[i].GetLength(), self.FactionPlayerList[i].GetBuffer())
@@ -12422,12 +12427,14 @@
        DumpString = '''
                                BuyPlayerID:%d,
                                Faction:%d,
                                ServerOnly:%d,
                                FactionPlayerCount:%d,
                                FactionPlayerList:%s
                                '''\
                                %(
                                self.BuyPlayerID,
                                self.Faction,
                                self.ServerOnly,
                                self.FactionPlayerCount,
                                "..."
                                )
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCrossBattlefield.py
@@ -64,6 +64,7 @@
#    BYTE    Hour;        //战场开启时
#    BYTE    Minute;        //战场开启分
#    BYTE    Faction;        //阵营 1-红;2-蓝
#    BYTE    ServerOnly;    //是否仅本服玩家可加入,0-否,1-是
#};
def OnCrossBattlefieldBuyOpen(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
@@ -71,6 +72,7 @@
    hour = clientData.Hour
    minute = clientData.Minute
    faction = clientData.Faction
    serverOnly = clientData.ServerOnly
    
    if GameWorld.IsCrossServer():
        GameWorld.DebugLog("跨服服务器无法发起匹配!", playerID)
@@ -124,6 +126,7 @@
        return
    
    dataMsg = {"openHour":hour, "openMinute":minute, "faction":faction, "todayBuyOpenCount":todayBuyOpenCount,
               "serverOnly":serverOnly,
               "accID":curPlayer.GetAccID(),
               "playerID":playerID,
               "playerName":CrossRealmPlayer.GetCrossPlayerName(curPlayer),
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1414,6 +1414,7 @@
ClientServerMsg_AddBuff = "AddBuff"                     # 添加BUFF
ClientServerMsg_LuckyCloudBuy = "LuckyCloudBuy"         # 幸运云购
ClientServerMsg_BattlefieldBuyOpen = "BattlefieldBuyOpen"   # 跨服战场购买召集
ClientServerMsg_BattlefieldCallChange = "BattlefieldCallChange"  # 跨服战场召集 - 修改
ClientServerMsg_BattlefieldCallJoin = "BattlefieldCallJoin"   # 跨服战场召集 - 加入
ClientServerMsg_BattlefieldCallKick = "BattlefieldCallKick"   # 跨服战场召集 - 踢出