| | |
| | | self.__dbData.FightPower = fightPowerTotal % ChConfig.Def_PerPointValue
|
| | | self.__dbData.FightPowerEx = fightPowerTotal / ChConfig.Def_PerPointValue
|
| | | return
|
| | | def GetServerID(self): return self.__dbData.ServerID
|
| | | def GetServerID(self): return int(self.__dbData.ServerID)
|
| | | def SetServerID(self, serverID): self.__dbData.ServerID = serverID
|
| | | def GetOffTime(self): return self.__dbData.OffTime
|
| | | def SetOffTime(self, offTime): self.__dbData.OffTime = offTime
|
| | |
| | |
|
| | | def GetID(self): return self.__dbData.ID
|
| | | def GetCreateTime(self): return self.__dbData.CreateTime
|
| | | def GetServerID(self): return self.__dbData.ServerID
|
| | | def GetServerID(self): return int(self.__dbData.ServerID)
|
| | | def GetName(self): return self.__dbData.Name
|
| | | def SetName(self, name): self.__dbData.Name = name
|
| | | def GetLeaderID(self): return self.__dbData.LeaderID
|
| | |
| | | self.__crossPlayerDict.pop(playerID, None)
|
| | | return
|
| | |
|
| | | def GetPlayerIDList(self): return self.__crossPlayerDict.keys()
|
| | | |
| | | def GetCrossPlayerMgr():
|
| | | mgr = PyGameData.g_crossPlayerMgr
|
| | | if mgr == None:
|
| | |
| | | SendFakePackToPlayerList(crossPlayerList, clientPack)
|
| | | return
|
| | |
|
| | | def SendFackPackToServerList(clientPack, serverIDList):
|
| | | ## 给服务器范围的在线玩家发送封包
|
| | | toCrossPlayerList = []
|
| | | crossPlayerMgr = GetCrossPlayerMgr()
|
| | | playerIDList = crossPlayerMgr.GetPlayerIDList()
|
| | | for playerID in playerIDList:
|
| | | crossPlayer = crossPlayerMgr.FindCrossPlayer(playerID)
|
| | | mainServerID = crossPlayer.GetMainServerID()
|
| | | if not GameWorld.CheckServerIDInList(mainServerID, serverIDList):
|
| | | continue
|
| | | curPlayer = crossPlayer.GetPlayer()
|
| | | if curPlayer: # 有玩家,一般只有游戏服有,可视为游戏服在线,直接发送
|
| | | curPlayer.SendFakePack(clientPack.GetBuffer(), clientPack.GetLength())
|
| | | continue
|
| | | toCrossPlayerList.append(crossPlayer)
|
| | | SendFakePackToPlayerList(toCrossPlayerList, clientPack)
|
| | | return
|
| | |
|
| | | def SendFakePackToPlayerList(crossPlayerList, clientPack):
|
| | | '''给crossPlayer玩家发送封包,适用于接受的玩家封包数据一致的,跨服、游戏服通用
|
| | | '''
|
| | |
| | | PlayerLoginRefreshFamily(crossPlayer) # 必须先刷新
|
| | | Sync_RequestAddFamilyInfo(crossPlayer, False)
|
| | | PlayerTalk.NotifyTalkCache(crossPlayer, [IPY_GameWorld.tcFamily]) # 公会聊天缓存
|
| | | if GameWorld.IsCrossServer():
|
| | | PlayerTalk.NotifyTalkCache(crossPlayer, [IPY_GameWorld.tcCountry]) # 跨服公会聊天缓存
|
| | | PlayerFamilyTaofa.OnCrossPlayerLogin(crossPlayer)
|
| | | return
|
| | |
|
| | |
| | | def OnFamilyTalk(curPlayer, familyID, talkPack, tick):
|
| | | clientData, tick = None, 0
|
| | | reqDataEx = {"talkBuffer":talkPack.GetBuffer()}
|
| | | FamilyPyPackForwarding(curPlayer, clientData, tick, "__OnFamilyTalk", reqCD=0, reqDataEx=reqDataEx)
|
| | | FamilyPyPackForwarding(curPlayer, clientData, tick, "__OnFamilyTalk", reqDataEx=reqDataEx)
|
| | | return
|
| | | def __OnFamilyTalk(crossPlayer, clientData, tick, fromServerID=0, reqDataEx=None):
|
| | | talkBuffer = reqDataEx["talkBuffer"]
|
| | |
| | | PlayerTalk.DoTalkCache(channelType, playerID, content, bubbleBox, familyID)
|
| | | return
|
| | |
|
| | | def OnCrossFamilyTalk(curPlayer, talkPack, tick):
|
| | | ## 跨服公会聊天,与跨服公会互通范围一致
|
| | | crossServerID = DBDataMgr.GetFamilyMgr().GetCurCrossServerID()
|
| | | if crossServerID <= 0:
|
| | | GameWorld.DebugLog("本服公会未互通,不允许跨服聊天")
|
| | | return
|
| | | clientData, tick = None, 0
|
| | | reqDataEx = {"talkBuffer":talkPack.GetBuffer()}
|
| | | FamilyPyPackForwarding(curPlayer, clientData, tick, "__OnCrossTalk", reqDataEx=reqDataEx)
|
| | | return
|
| | | def __OnCrossTalk(crossPlayer, clientData, tick, fromServerID=0, reqDataEx=None):
|
| | | talkBuffer = reqDataEx["talkBuffer"]
|
| | | playerID = crossPlayer.GetPlayerID()
|
| | | |
| | | if not talkBuffer:
|
| | | return
|
| | | |
| | | familyMgr = DBDataMgr.GetFamilyMgr()
|
| | | zoneID = familyMgr.GetZoneIDInThisServer(fromServerID)
|
| | | if zoneID < 0:
|
| | | GameWorld.ErrLog("找不到服务器ID在跨服中的公会分区! fromServerID=%s" % fromServerID)
|
| | | return
|
| | | zoneMgr = familyMgr.GetZoneFamilyMgr(zoneID)
|
| | | serverIDList = zoneMgr.GetZoneServerIDList()
|
| | | if not serverIDList:
|
| | | return
|
| | | |
| | | clientPack = ChPyNetSendPack.tagMCTalk()
|
| | | clientPack.ReadData(talkBuffer)
|
| | | CrossPlayer.SendFackPackToServerList(clientPack, serverIDList)
|
| | | |
| | | # 聊天缓存
|
| | | channelType = clientPack.ChannelType
|
| | | content = clientPack.Content
|
| | | bubbleBox = clientPack.BubbleBox
|
| | | PlayerTalk.DoTalkCache(channelType, playerID, content, bubbleBox)
|
| | | return
|
| | |
|
| | | ## -------------------------------------- 游戏服本服处理 --------------------------------------------
|
| | | '''
|
| | | 为方便本服、跨服互通公会逻辑统一,公会相关数据处理统一使用 CrossPlayer,视为以前的GameServer处理,这样本服跨服的公会管理通用
|
| | |
| | | #需要记录聊天缓存的频道对应限制最大条数
|
| | | ChannelCacheMax = {IPY_GameWorld.tcFamily:30,
|
| | | IPY_GameWorld.tcWorld:100,
|
| | | IPY_GameWorld.tcCountry:200,
|
| | | }
|
| | |
|
| | | def OnPlayerLogin(curPlayer):
|
| | |
| | | curPlayer.SetLastChatTick(tick)
|
| | | curPlayer.SetDict(ChConfig.Def_ChannelTalkTick % channelType, tick)
|
| | |
|
| | | if channelType == IPY_GameWorld.tcCountry:
|
| | | #发送到跨服,待扩展
|
| | | return
|
| | | |
| | | bubbleBox = PlayerControl.GetChatBox(curPlayer) # 气泡框
|
| | |
|
| | | clientPack = ChPyNetSendPack.tagMCTalk()
|
| | |
| | | DoTalkCache(channelType, playerID, content, bubbleBox, familyID)
|
| | | elif channelType == IPY_GameWorld.tcFamily:
|
| | | PlayerFamily.OnFamilyTalk(curPlayer, familyID, clientPack, tick)
|
| | | elif channelType == IPY_GameWorld.tcCountry:
|
| | | PlayerFamily.OnCrossFamilyTalk(curPlayer, clientPack, tick)
|
| | |
|
| | | return
|
| | |
|
| | |
| | | NetPackCommon.RecCrossServerNetPack(recvPack.Data)
|
| | | except:
|
| | | msg = error.formatMsg('error', error.ERROR_NO_172, "LogicProcessThread::OnCrossServerToServerPack Catch a unexpetcted exception, error = %s"%traceback.format_exc())
|
| | | mylog.error(msg)
|
| | | if GameWorld.GetGameWorld().GetDebugLevel():
|
| | | # debug下让其抛出异常报错,方便测试时发现排查问题
|
| | | raise Exception(msg)
|
| | | else:
|
| | | mylog.error(msg)
|
| | |
|
| | |
|
| | |
|