5722 【后端】【1.5】跨服BOSS开发(跨服世界频道、区域频道聊天支持)
| | |
| | | RealmLV = 0 #(WORD RealmLV)//境界
|
| | | OnlineType = 0 #(BYTE OnlineType)//在线状态, 0 不在线 1在线
|
| | | IsInTeam = 0 #(BYTE IsInTeam)//是否有队伍
|
| | | ServerGroupID = 0 #(DWORD ServerGroupID)//服务器组ID
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | 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):
|
| | |
| | | self.RealmLV = 0
|
| | | self.OnlineType = 0
|
| | | self.IsInTeam = 0
|
| | | self.ServerGroupID = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | length += 2
|
| | | length += 1
|
| | | length += 1
|
| | | length += 4
|
| | |
|
| | | return length
|
| | |
|
| | |
| | | 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):
|
| | |
| | | LV:%d,
|
| | | RealmLV:%d,
|
| | | OnlineType:%d,
|
| | | IsInTeam:%d
|
| | | IsInTeam:%d,
|
| | | ServerGroupID:%d
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | |
| | | self.LV,
|
| | | self.RealmLV,
|
| | | self.OnlineType,
|
| | | self.IsInTeam
|
| | | self.IsInTeam,
|
| | | self.ServerGroupID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | ItemData = "" #(String ItemData)//物品记录
|
| | | PlusDataSize = 0 #(DWORD PlusDataSize)
|
| | | PlusData = "" #(String PlusData)//扩展记录
|
| | | CrossPlayer = 0 #(BYTE CrossPlayer)//是否跨服玩家
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | 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):
|
| | |
| | | self.ItemData = ""
|
| | | self.PlusDataSize = 0
|
| | | self.PlusData = ""
|
| | | self.CrossPlayer = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | length += len(self.ItemData)
|
| | | length += 4
|
| | | length += len(self.PlusData)
|
| | | length += 1
|
| | |
|
| | | return length
|
| | |
|
| | |
| | | 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):
|
| | |
| | | ItemDataSize:%d,
|
| | | ItemData:%s,
|
| | | PlusDataSize:%d,
|
| | | PlusData:%s,
|
| | | CrossPlayer:%d
|
| | | PlusData:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | |
| | | self.ItemDataSize,
|
| | | self.ItemData,
|
| | | self.PlusDataSize,
|
| | | self.PlusData,
|
| | | self.CrossPlayer
|
| | | self.PlusData
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | import GameWorldBoss
|
| | | import CrossRealmPK
|
| | | import PlayerQuery
|
| | | import PlayerTalk
|
| | | import CrossBoss
|
| | | import ChConfig
|
| | | import GMShell
|
| | |
| | |
|
| | | 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)
|
| | |
| | | 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)
|
| | |
|
| | |
| | | sendPack.ItemDataSize = len(sendPack.ItemData)
|
| | | sendPack.PlusData = PlusData
|
| | | sendPack.PlusDataSize = len(sendPack.PlusData)
|
| | | sendPack.CrossPlayer = 1
|
| | | NetPackCommon.SendFakePack(curPlayer, sendPack)
|
| | | return
|
| | |
|
| | |
| | | import ChPyNetSendPack
|
| | | import ShareDefine
|
| | | import PlayerViewCache
|
| | | import CrossRealmPlayer
|
| | | import CrossRealmMsg
|
| | | import ChNetSendPack
|
| | | import NetPackCommon
|
| | | import PlayerGeTui
|
| | |
| | | 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 当前时间
|
| | |
| | | # };
|
| | | #===============================================================================
|
| | | 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
|
| | |
|
| | |
|
| | |
| | | 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
|
| | |
|
| | |
|
| | |
| | | answerPack.LV = 1
|
| | | answerPack.RealmLV = 1
|
| | | answerPack.OnlineType = ChConfig.Def_Offline
|
| | | answerPack.ServerGroupID = 0
|
| | | else:
|
| | | cacheDict = eval(curCache.GetPropData())
|
| | |
|
| | |
| | | answerPack.LV = cacheDict["LV"]
|
| | | answerPack.RealmLV = cacheDict["RealmLV"]
|
| | | answerPack.OnlineType = ChConfig.Def_Offline
|
| | | answerPack.ServerGroupID = cacheDict.get("ServerGroupID", 0)
|
| | |
|
| | | else:
|
| | | answerPack.PlayerID = clientPack.PlayerID
|
| | |
| | | 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)
|
| | |
| | | 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)
|
| | |
|
| | | #聊天信息附加值中某信息数据所占位置
|
| | | #{聊天信息附加值类型:[起始位置(从左往右), 结束位置(不包含)]}
|
| | |
| | | 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], # 等级
|
| | | }
|
| | |
|
| | | # 聊天频道 暂用语音
|
| | |
| | | CrossServerMsg_CrossServerState = "CrossServerState" # 跨服服务器状态变更
|
| | | CrossServerMsg_ExitCrossServer = "ExitCrossServer" # 退出跨服服务器
|
| | | CrossServerMsg_Notify = "Notify" # 提示信息
|
| | | CrossServerMsg_ChatCrossWorld = "ChatCrossWorld" # 跨服世界聊天
|
| | | CrossServerMsg_ViewPlayerCacheRet = "ViewPlayerCacheRet"# 查看跨服玩家信息结果
|
| | | CrossServerMsg_PKMatchReqRet = "PKMatchReqRet" # 跨服PK匹配请求结果
|
| | | CrossServerMsg_PKMatchResult = "PKMatchResult" # 跨服PK匹配结果
|
| | |
| | |
|
| | | # 子服发送跨服信息定义
|
| | | ClientServerMsg_ServerInitOK = "ServerInitOK" # 子服启动成功
|
| | | ClientServerMsg_ChatCrossWorld = "ChatCrossWorld" # 跨服世界聊天
|
| | | ClientServerMsg_GMCMD = "GMCMD" # GM命令
|
| | | ClientServerMsg_ViewPlayerCache = "ViewPlayerCache" # 查看跨服玩家信息
|
| | | ClientServerMsg_PKMatch = "PKMatch" # 跨服PK匹配
|
| | |
| | | Writer = alee
|
| | | Releaser = alee
|
| | | RegType = 0
|
| | | RegisterPackCount = 5
|
| | | RegisterPackCount = 6
|
| | |
|
| | | PacketCMD_1=0x2
|
| | | PacketSubCMD_1=0x1
|
| | |
| | | PacketSubCMD_5=0x9
|
| | | PacketCallFunc_5=ChatMiFix
|
| | |
|
| | | PacketCMD_6=0x2
|
| | | PacketSubCMD_6=0x8
|
| | | PacketCallFunc_6=ChatCountry
|
| | |
|
| | |
|
| | | ;骠车
|
| | | [PlayerTruck]
|
| | |
| | | Writer = Mark
|
| | | Releaser = Mark
|
| | | RegType = 0
|
| | | RegisterPackCount = 6
|
| | | RegisterPackCount = 7
|
| | |
|
| | | PacketCMD_1=0x2
|
| | | PacketSubCMD_1=0x7
|
| | |
| | | PacketSubCMD_6=0x9
|
| | | PacketCallFunc_6=TalkPrivate
|
| | |
|
| | | PacketCMD_7=0x2
|
| | | PacketSubCMD_7=0x8
|
| | | PacketCallFunc_7=TalkCountry
|
| | |
|
| | |
|
| | | ;战斗
|
| | | [Battle]
|
| | |
| | | RealmLV = 0 #(WORD RealmLV)//境界
|
| | | OnlineType = 0 #(BYTE OnlineType)//在线状态, 0 不在线 1在线
|
| | | IsInTeam = 0 #(BYTE IsInTeam)//是否有队伍
|
| | | ServerGroupID = 0 #(DWORD ServerGroupID)//服务器组ID
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | 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):
|
| | |
| | | self.RealmLV = 0
|
| | | self.OnlineType = 0
|
| | | self.IsInTeam = 0
|
| | | self.ServerGroupID = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | length += 2
|
| | | length += 1
|
| | | length += 1
|
| | | length += 4
|
| | |
|
| | | return length
|
| | |
|
| | |
| | | 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):
|
| | |
| | | LV:%d,
|
| | | RealmLV:%d,
|
| | | OnlineType:%d,
|
| | | IsInTeam:%d
|
| | | IsInTeam:%d,
|
| | | ServerGroupID:%d
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | |
| | | self.LV,
|
| | | self.RealmLV,
|
| | | self.OnlineType,
|
| | | self.IsInTeam
|
| | | self.IsInTeam,
|
| | | self.ServerGroupID
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | ItemData = "" #(String ItemData)//物品记录
|
| | | PlusDataSize = 0 #(DWORD PlusDataSize)
|
| | | PlusData = "" #(String PlusData)//扩展记录
|
| | | CrossPlayer = 0 #(BYTE CrossPlayer)//是否跨服玩家
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | |
| | | 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):
|
| | |
| | | self.ItemData = ""
|
| | | self.PlusDataSize = 0
|
| | | self.PlusData = ""
|
| | | self.CrossPlayer = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | length += len(self.ItemData)
|
| | | length += 4
|
| | | length += len(self.PlusData)
|
| | | length += 1
|
| | |
|
| | | return length
|
| | |
|
| | |
| | | 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):
|
| | |
| | | ItemDataSize:%d,
|
| | | ItemData:%s,
|
| | | PlusDataSize:%d,
|
| | | PlusData:%s,
|
| | | CrossPlayer:%d
|
| | | PlusData:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | |
| | | self.ItemDataSize,
|
| | | self.ItemData,
|
| | | self.PlusDataSize,
|
| | | self.PlusData,
|
| | | self.CrossPlayer
|
| | | self.PlusData
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | #import ReadChConfig
|
| | | import ShareDefine
|
| | | import ChPyNetSendPack
|
| | | import CrossRealmPlayer
|
| | | import NetPackCommon
|
| | | import EventReport
|
| | | import PlayerSuccess
|
| | |
| | | # @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
|
| | |
|
| | | ## 联盟家族频道(封包参数)
|
| | |
| | | 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
|
| | |
|
| | |
|
| | |
| | | # };
|
| | | #===============================================================================
|
| | | 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
|
| | |
|
| | |
| | | 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()
|
| | |
| | | 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)
|
| | |
|
| | | #聊天信息附加值中某信息数据所占位置
|
| | | #{聊天信息附加值类型:[起始位置(从左往右), 结束位置(不包含)]}
|
| | |
| | | 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], # 等级
|
| | | }
|
| | |
|
| | | # 聊天频道 暂用语音
|
| | |
| | | CrossServerMsg_CrossServerState = "CrossServerState" # 跨服服务器状态变更
|
| | | CrossServerMsg_ExitCrossServer = "ExitCrossServer" # 退出跨服服务器
|
| | | CrossServerMsg_Notify = "Notify" # 提示信息
|
| | | CrossServerMsg_ChatCrossWorld = "ChatCrossWorld" # 跨服世界聊天
|
| | | CrossServerMsg_ViewPlayerCacheRet = "ViewPlayerCacheRet"# 查看跨服玩家信息结果
|
| | | CrossServerMsg_PKMatchReqRet = "PKMatchReqRet" # 跨服PK匹配请求结果
|
| | | CrossServerMsg_PKMatchResult = "PKMatchResult" # 跨服PK匹配结果
|
| | |
| | |
|
| | | # 子服发送跨服信息定义
|
| | | ClientServerMsg_ServerInitOK = "ServerInitOK" # 子服启动成功
|
| | | ClientServerMsg_ChatCrossWorld = "ChatCrossWorld" # 跨服世界聊天
|
| | | ClientServerMsg_GMCMD = "GMCMD" # GM命令
|
| | | ClientServerMsg_ViewPlayerCache = "ViewPlayerCache" # 查看跨服玩家信息
|
| | | ClientServerMsg_PKMatch = "PKMatch" # 跨服PK匹配
|