| | |
| | | import PlayerMail
|
| | | import PlayerTask
|
| | | import CrossPlayer
|
| | | import PlayerTalk
|
| | | import DirtyList
|
| | | import DBDataMgr
|
| | | import DBFamily
|
| | | import CrossMsg
|
| | | import CrossMgr
|
| | |
|
| | | import random
|
| | | import time
|
| | |
| | |
|
| | | def FamilyOnHour():
|
| | | if not GameWorld.IsMainServer() or DBFamily.IsFamilyCross():
|
| | | # 非游戏服或本服已跨服互通了不处理
|
| | | GameWorld.DebugLog("非游戏服或本服已跨服互通了不处理 FamilyOnHour")
|
| | | return
|
| | | __doFamilyOnHour()
|
| | | return
|
| | |
| | | ## 本服时间自己触发的onday逻辑
|
| | |
|
| | | if not GameWorld.IsMainServer() or DBFamily.IsFamilyCross():
|
| | | # 非游戏服或本服已跨服互通了不处理
|
| | | GameWorld.DebugLog("非游戏服或本服已跨服互通了不处理 FamilyOnDay")
|
| | | return
|
| | |
|
| | | __doFamilyOnDay()
|
| | |
| | | member.SetContribDay(0)
|
| | | member.SetDonateCntDay(0)
|
| | |
|
| | | Broadcast_FamilyInfo(familyID)
|
| | | Broadcast_FamilyInfo(familyID) # onday
|
| | | return
|
| | |
|
| | | def PlayerCrossCenterOnDay(curPlayer):
|
| | |
| | | def OnPlayerLogin(curPlayer, tick):
|
| | | Do_MapServer_PlayerLogin(curPlayer)
|
| | | if DBFamily.IsFamilyCross():
|
| | | #公会已跨服不处理,由所属跨服服务器处理成员登录逻辑
|
| | | GameWorld.DebugLog("公会已跨服不处理,由所属跨服服务器处理成员登录逻辑 OnPlayerLogin", curPlayer.GetPlayerID())
|
| | | return
|
| | | crossPlayer = CrossPlayer.GetCrossPlayerMgr().FindCrossPlayer(curPlayer.GetPlayerID())
|
| | | OnCrossPlayerLogin(crossPlayer)
|
| | |
| | | ## 玩家上线,游戏服跨服通用,流程上当做以前GameServer处理公会一样,处理后再通知地图(现在的游戏服)
|
| | | PlayerLoginRefreshFamily(crossPlayer)
|
| | | Sync_RequestAddFamilyInfo(crossPlayer, False)
|
| | | PlayerTalk.NotifyTalkCache(crossPlayer, [IPY_GameWorld.tcFamily]) # 公会聊天缓存
|
| | | #PlayerFamilyTaofa.OnPlayerLogin(curPlayer) 讨伐待修改
|
| | | return
|
| | |
|
| | | def OnPlayerLogout(curPlayer):
|
| | | if DBFamily.IsFamilyCross():
|
| | | #公会已跨服不处理,由所属跨服服务器处理成员登录逻辑
|
| | | GameWorld.DebugLog("公会已跨服不处理,由所属跨服服务器处理成员离线逻辑 OnPlayerLogout", curPlayer.GetPlayerID())
|
| | | return
|
| | | crossPlayer = CrossPlayer.GetCrossPlayerMgr().FindCrossPlayer(curPlayer.GetPlayerID())
|
| | | OnCrossPlayerLogout(crossPlayer)
|
| | |
| | | curMember.SetOffTime(int(time.time()))
|
| | |
|
| | | # 通知成员下线
|
| | | Broadcast_FamilyInfo(familyID, changeMemIDList=[playerID])
|
| | | Broadcast_FamilyInfo(familyID, changeMemIDList=[playerID]) # 成员下线
|
| | | return
|
| | |
|
| | | def SendToFamilyMapPlayer(crossPlayer, doType, doData):
|
| | |
| | | familyID = 0
|
| | |
|
| | | crossPlayer.SetFamilyID(familyID)
|
| | | # 同步更新查看缓存
|
| | | PlayerViewCache.UpdPlayerViewFamilyInfo(playerID, familyID, FamilyName, EmblemID, EmblemWord)
|
| | |
|
| | | doData = {"FamilyID":familyID}
|
| | | if familyID:
|
| | |
| | | refreshFamilyID = familyMgr.GetPlayerFamilyID(playerID)
|
| | | GameWorld.DebugLog("PlayerLoginRefreshFamily playerID=%s,refreshFamilyID=%s" % (playerID, refreshFamilyID))
|
| | | crossPlayer.SetFamilyID(refreshFamilyID)
|
| | | MapServer_FamilyRefresh(crossPlayer, refreshFamilyID)
|
| | | MapServer_FamilyRefresh(crossPlayer, refreshFamilyID) # 登录
|
| | | familyID = refreshFamilyID
|
| | | if not familyID:
|
| | | return
|
| | |
| | |
|
| | | Sync_FamilyInfo(crossPlayer) # 给自己同步完整的
|
| | | # 广播成员在线
|
| | | Broadcast_FamilyInfo(familyID, changeMemIDList=[playerID], excludeIDList=[playerID])
|
| | | Broadcast_FamilyInfo(familyID, changeMemIDList=[playerID], excludeIDList=[playerID]) # 成员登录
|
| | |
|
| | | #通知招人
|
| | | if GetFamilyMemberHasPow(curMember, FamilyPowerID_Call):
|
| | |
| | | __doFamilyPyPackRet(curPlayer, clientData, funcName, isOK)
|
| | | return
|
| | |
|
| | | ssServer = CrossMgr.GetSSServerMgr().GetSSServer(crossServerID)
|
| | | if not ssServer or not ssServer.IsServerOpen():
|
| | | PlayerControl.NotifyCode(curPlayer, "ServerNoOpen")
|
| | | return
|
| | | |
| | | # 转发请求CD验证
|
| | | if reqCD:
|
| | | reqTick = curPlayer.GetDictByKey("FamilyPyPackForwardingTick")
|
| | | reqTick = curPlayer.GetDictByKey(funcName) # 根据函数名单独处理CD,防止相互影响
|
| | | if reqTick and (tick - reqTick) < reqCD * 1000:
|
| | | PlayerControl.NotifyCode(curPlayer, "RequestLater")
|
| | | return
|
| | | curPlayer.SetDict("FamilyPyPackForwardingTick", tick)
|
| | | curPlayer.SetDict(funcName, tick)
|
| | |
|
| | | # 剩下的就是大于0
|
| | | dataMsg = {"funcName":funcName}
|
| | |
| | | curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
|
| | | if not curPlayer:
|
| | | return
|
| | | curPlayer.SetDict("FamilyPyPackForwardingTick", 0)
|
| | | |
| | | funcName = dataMsg["funcName"]
|
| | | packBuff = dataMsg.get("packBuff")
|
| | | |
| | | curPlayer.SetDict(funcName, 0) # 重置CD
|
| | | |
| | | clientData = None
|
| | | if packBuff:
|
| | | clientData = NetPackCommon.ReadRecPyPackData(packBuff)
|
| | |
| | | GameWorld.ErrLog("创建家族失败", playerID)
|
| | | return
|
| | | newFamilyID = curFamily.GetID()
|
| | | zoneMgr = familyMgr.GetZoneFamilyMgrByFamilyID(newFamilyID)
|
| | | zoneID = zoneMgr.GetZoneID() if zoneMgr else -1
|
| | | curFamily.SetLV(1)
|
| | | emblemIDList = PlayerFamilyEmblem.GetDefaultFamilyEmblemIDList()
|
| | | if not emblemID or emblemID not in emblemIDList:
|
| | | emblemID = random.choice(emblemIDList) # 从默认徽章中随机选择一个
|
| | | GameWorld.Log("创建公会: familyID=%s,playerID=%s,emblemID=%s,serverID=%s" % (newFamilyID, playerID, emblemID, serverID))
|
| | | GameWorld.Log("创建公会: familyID=%s,playerID=%s,emblemID=%s,serverID=%s,zoneID=%s" % (newFamilyID, playerID, emblemID, serverID, zoneID))
|
| | | curFamily.SetEmblemID(emblemID)
|
| | | curFamily.SetEmblemWord(emblemWord)
|
| | |
|
| | |
| | |
|
| | | #-设置家族成员属性
|
| | | DoPlayerJionFamily(curFamily, playerID, crossPlayer, IPY_PlayerDefine.fmlLeader)
|
| | | zoneMgr = familyMgr.GetZoneFamilyMgrByFamilyID(newFamilyID)
|
| | | zoneMgr and zoneMgr.Sort()
|
| | | |
| | | if zoneMgr:
|
| | | zoneMgr.Sort()
|
| | | |
| | | #XW_JZ_EstablishSud <n color="255,255,0">恭喜您,家族建立成功!</n> 25 - -
|
| | | #CrossPlayer.NotifyCode(crossPlayer, "XW_JZ_EstablishSud")
|
| | | #PlayerControl.WorldNotify(0, "jiazu_liubo_671654", [curPlayer.GetName(), fullFamilyName, newFamilyID])
|
| | |
| | | member = curFamily.AddMember(playerID)
|
| | | member.SetFmLV(jionFamilySetLv)
|
| | | member.RefreshMemberByID(playerID)
|
| | | curFamily.SetFightPowerTotal(curFamily.GetFightPowerTotal() + member.GetFightPowerTotal())
|
| | |
|
| | | if jionFamilySetLv == IPY_PlayerDefine.fmlLeader:
|
| | | curFamily.SetLeaderID(playerID)
|
| | |
|
| | | if broadcastFamilyChange:
|
| | | Broadcast_FamilyInfo(familyID, changeMemIDList=[playerID])
|
| | | # 广播其他在线成员
|
| | | Broadcast_FamilyInfo(familyID, changeMemIDList=[playerID], excludeIDList=[playerID]) # 成员加入
|
| | |
|
| | | familyMgr.DelPlayerReqJoinFamilyIDAll(playerID)
|
| | | #设置玩家身上保存的家族信息
|
| | | if crossPlayer:
|
| | | MapServer_FamilyRefresh(crossPlayer, familyID)
|
| | | MapServer_FamilyRefresh(crossPlayer, familyID) # 加入
|
| | | Sync_FamilyInfo(crossPlayer) # 给自己同步完整的
|
| | | Sync_RequestAddFamilyInfo(crossPlayer)
|
| | | PlayerFamilyTaofa.OnCrossPlayerEnterFamily(crossPlayer)
|
| | |
|
| | | #if jionFamilySetLv != IPY_PlayerDefine.fmlLeader:
|
| | | if jionFamilySetLv != IPY_PlayerDefine.fmlLeader:
|
| | | #通知所有家族成员, 这个人加入了家族
|
| | | #NotifyAllFamilyMemberMsg(familyID, "XW_JZ_EnterFamily", [member.GetPlayerName()], excludeIDList=[playerID])
|
| | | CrossPlayer.FamilyNotify(familyID, "XW_JZ_EnterFamily", [member.GetPlayerName()], excludeIDList=[playerID])
|
| | | #if jionPlayer:
|
| | | # PlayerControl.NotifyCode(jionPlayer, 'XW_JZ_EnterFamilyInfo', [family.GetName()])
|
| | |
|
| | |
| | | # return
|
| | | SendFamilyReqJoinInfo(familyID)
|
| | | if joinOKPlayerIDList:
|
| | | Broadcast_FamilyInfo(familyID, changeMemIDList=joinOKPlayerIDList)
|
| | | Broadcast_FamilyInfo(familyID, changeMemIDList=joinOKPlayerIDList, excludeIDList=joinOKPlayerIDList) # 审核
|
| | | return
|
| | |
|
| | | #// A6 22 修改收人方式 #tagCMChangeFamilyJoin
|
| | |
| | | GameWorld.DebugLog("修改招人设置: familyID=%s,joinReview=%s,joinLVMin=%s" % (familyID, joinReview, joinLVMin), playerID)
|
| | | family.SetJoinReview(joinReview)
|
| | | family.SetJoinLVMin(joinLVMin)
|
| | | Broadcast_FamilyInfo(familyID, isSyncMem=False)
|
| | | Broadcast_FamilyInfo(familyID, isSyncMem=False) # 修改招人
|
| | | return
|
| | |
|
| | | #// A6 23 修改家族公告 #tagCMChangeFamilyBroadcast
|
| | |
| | | return
|
| | | family.SetBroadcast(broadcast)
|
| | | GameWorld.DebugLog('更改公会公告: Family=%s,公告=%s' % (GameWorld.CodeToGbk(family.GetName()), GameWorld.CodeToGbk(broadcast)), playerID)
|
| | | Broadcast_FamilyInfo(familyID, isSyncMem=False)
|
| | | Broadcast_FamilyInfo(familyID, isSyncMem=False) # 修改公告
|
| | | return
|
| | |
|
| | | #// A6 24 修改家族徽章 #tagCMChangeFamilyEmblem
|
| | |
| | | GameWorld.DebugLog("修改的目标成员职位不能比自己高或平级! tagFmlv=%s" % tagMember.GetFmLV(), playerID)
|
| | | return
|
| | |
|
| | | changeMemIDList = [tagID]
|
| | | if changeFmlv == IPY_PlayerDefine.fmlLeader:
|
| | | ChangeFamilyLeader(family, tagMember)
|
| | | changeMemIDList.append(playerID)
|
| | |
|
| | | else:
|
| | | fmLVMemCnt = 0
|
| | |
| | |
|
| | | if isGMOP:
|
| | | family.SetBroadcast("")
|
| | | Broadcast_FamilyInfo(familyID, changeMemIDList=[tagID])
|
| | | Broadcast_FamilyInfo(familyID, changeMemIDList=changeMemIDList) # 修改职位
|
| | | return True
|
| | |
|
| | | def ChangeFamilyLeader(family, newLeaderMem):
|
| | |
| | |
|
| | | tagCrossPlayer = CrossPlayer.GetCrossPlayerMgr().FindCrossPlayer(tagID)
|
| | | if tagCrossPlayer:
|
| | | MapServer_FamilyRefresh(tagCrossPlayer, familyID)
|
| | | MapServer_FamilyRefresh(tagCrossPlayer, familyID) # 修改职位
|
| | | if GetFamilyMemberHasPow(tagMember, FamilyPowerID_Call):
|
| | | CrossPlayer.SendFakePack(tagCrossPlayer, GetPack_FamilyReqJoinInfo(familyID))
|
| | |
|
| | |
| | | [ShareDefine.Def_FamilyActionEvent_MemberChange, ShareDefine.Def_FamilyMemberChange_FMLV, changeFamilyLV, befFamilyLV], tick)
|
| | |
|
| | | #xx被任命为xx
|
| | | #NotifyAllFamilyMemberMsg(familyID, "XW_JZ_AppointFamily", [memName, changeFamilyLV])
|
| | | #GetFamilyMgr().SetSyncCrossFamilyUpd(familyMember.GetFamilyID(), familyMember.GetPlayerID(), syncNow=True) # 成员职位变更
|
| | | CrossPlayer.FamilyNotify(familyID, "XW_JZ_AppointFamily", [memName, changeFamilyLV])
|
| | | return
|
| | |
|
| | | def __AutoChangeLeader(curFamily):
|
| | |
| | | GameWorld.Log("公会自动传位: familyID=%s,leaderID=%s,offTime=%s,passHours=%s,newLeaderID=%s"
|
| | | % (familyID, leaderID, GameWorld.ChangeTimeNumToStr(offTime), passHours, newLeaderID))
|
| | | ChangeFamilyLeader(curFamily, toMember)
|
| | | Broadcast_FamilyInfo(familyID, changeMemIDList=[leaderID, newLeaderID])
|
| | | Broadcast_FamilyInfo(familyID, changeMemIDList=[leaderID, newLeaderID]) # 自动传位
|
| | |
|
| | | # 邮件通知
|
| | | toServerID = toMember.GetServerID()
|
| | |
| | | AddFamilyActionNote(crossPlayer.GetPlayerName(), familyID, ShareDefine.Def_ActionType_FamilyEvent,
|
| | | [ShareDefine.Def_FamilyActionEvent_MemberChange, ShareDefine.Def_FamilyMemberChange_Leave], tick)
|
| | |
|
| | | #XW_JZ_LeaveFamily <n color="0,190,255">{%S1%}</n><n color="255,255,0">退出了家族!</n> 25 - -
|
| | | #NotifyAllFamilyMemberMsg(familyID, "XW_JZ_LeaveFamily", [curPlayer.GetName()])
|
| | | |
| | | __DoPlayerLeaveFamilyByID(family, playerID, crossPlayer)
|
| | | MapServer_FamilyRefresh(crossPlayer, 0, 1)
|
| | | MapServer_FamilyRefresh(crossPlayer, 0, 1) # 主动退出
|
| | | CrossPlayer.SendFakePackByFamily(familyID, GetPack_FamilyDel(playerID, crossPlayer.GetPlayerName(), 1))
|
| | | CrossPlayer.FamilyNotify(familyID, "XW_JZ_LeaveFamily", [crossPlayer.GetPlayerName()])
|
| | | Broadcast_FamilyInfo(familyID, isSyncMem=False) # 退出
|
| | |
|
| | | if family.GetCount() == 0:
|
| | | #玩家离开后, 家族没有人了 , 删除这个家族
|
| | |
| | | [ShareDefine.Def_FamilyActionEvent_MemberChange, ShareDefine.Def_FamilyMemberChange_KickOut], tick)
|
| | |
|
| | | #XW_JZ_LeaveFamily <n color="0,190,255">{%S1%}</n><n color="255,255,0">退出了家族!</n> 25 - -
|
| | | #NotifyAllFamilyMemberMsg(familyID, "XW_JZ_LeaveFamily", [tagPlayerName])
|
| | | CrossPlayer.FamilyNotify(familyID, "XW_JZ_LeaveFamily", [tagPlayerName])
|
| | |
|
| | | #删除玩家
|
| | | crossPlayer = CrossPlayer.GetCrossPlayerMgr().FindCrossPlayer(tagMemberID)
|
| | | __DoPlayerLeaveFamilyByID(family, tagPlayerID, crossPlayer)
|
| | | if crossPlayer:
|
| | | MapServer_FamilyRefresh(crossPlayer, 0)
|
| | | tagCrossPlayer = CrossPlayer.GetCrossPlayerMgr().FindCrossPlayer(tagMemberID)
|
| | | __DoPlayerLeaveFamilyByID(family, tagPlayerID, tagCrossPlayer)
|
| | | if tagCrossPlayer:
|
| | | MapServer_FamilyRefresh(tagCrossPlayer, 0) # 被踢
|
| | | CrossPlayer.NotifyCode(tagCrossPlayer, "XW_JZ_LeaveFamilyKick", [curMember.GetPlayerName()])
|
| | |
|
| | | CrossPlayer.SendFakePackByFamily(familyID, GetPack_FamilyDel(tagMemberID, tagPlayerName, 0))
|
| | | Broadcast_FamilyInfo(familyID, isSyncMem=False) # 踢人
|
| | | return
|
| | |
|
| | | def __DoPlayerLeaveFamilyByID(curFamily, leavePlayerID, crossPlayer=None):
|
| | |
| | | memCrossPlayer = crossPlayerMgr.FindCrossPlayer(memID)
|
| | | if not memCrossPlayer:
|
| | | continue
|
| | | MapServer_FamilyRefresh(memCrossPlayer, familyID)
|
| | | MapServer_FamilyRefresh(memCrossPlayer, familyID) # 改名
|
| | | #player.Notify_FamilyNameRefresh() #//04 36 周围玩家家族名刷新#tagPlayerFamilyNameRefresh
|
| | |
|
| | | Broadcast_FamilyInfo(familyID, isSyncMem=False)
|
| | | Broadcast_FamilyInfo(familyID, isSyncMem=False) # 改名
|
| | | return True
|
| | |
|
| | | #// A6 19 查看目标公会 #tagCSViewTagFamily
|
| | | #
|
| | | #struct tagCSViewTagFamily
|
| | | #{
|
| | | # tagHead Head;
|
| | | # DWORD FamilyID;
|
| | | # DWORD DataServerID; //数据所在服务器ID
|
| | | #};
|
| | | def OnViewTagFamily(index, clientData, tick):
|
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | tagFamilyID = clientData.FamilyID
|
| | | dataServerID = clientData.DataServerID
|
| | | |
| | | # 本服或主服是本服
|
| | | if not dataServerID or dataServerID == GameWorld.GetGameWorld().GetServerID():
|
| | | NetPackCommon.SendFakePack(curPlayer, GetTagFamilyInfoPack(tagFamilyID))
|
| | | return
|
| | | |
| | | CrossMsg.SendToServer(ShareDefine.S2S_ViewTagFamily, {"tagFamilyID":tagFamilyID}, [dataServerID], ShareDefine.dirType_All, playerID)
|
| | | return
|
| | |
|
| | | def S2S_ViewTagFamily(dataMsg, fromServerID, playerID):
|
| | | tagFamilyID = dataMsg["tagFamilyID"]
|
| | | CrossPlayer.SendFakePackByID(playerID, GetTagFamilyInfoPack(tagFamilyID), fromServerID)
|
| | | return
|
| | |
|
| | | def GetTagFamilyInfoPack(tagFamilyID):
|
| | | familyMgr = DBDataMgr.GetFamilyMgr()
|
| | | family = familyMgr.FindFamily(tagFamilyID)
|
| | | if not family:
|
| | | GameWorld.ErrLog("本服数据找不到目标公会! tagFamilyID=%s" % tagFamilyID)
|
| | | return
|
| | | clientPack = ChPyNetSendPack.tagSCTagFamilyInfo()
|
| | | clientPack.FamilyID = family.GetID()
|
| | | clientPack.FamilyName = family.GetName()
|
| | | clientPack.FamilyNameLen = len(clientPack.FamilyName)
|
| | | clientPack.LeaderID = family.GetLeaderID()
|
| | | leaderMember = family.FindMember(clientPack.LeaderID)
|
| | | if leaderMember:
|
| | | clientPack.LeaderName = leaderMember.GetPlayerName()
|
| | | clientPack.LeaderNameLen = len(clientPack.LeaderName)
|
| | | clientPack.LeaderServerID = leaderMember.GetServerID()
|
| | | clientPack.FamilyLV = family.GetLV()
|
| | | clientPack.ServerID = family.GetServerID()
|
| | | clientPack.EmblemID = family.GetEmblemID()
|
| | | clientPack.EmblemWord = family.GetEmblemWord()
|
| | | clientPack.FightPower = family.GetFightPower()
|
| | | clientPack.FightPowerEx = family.GetFightPowerEx()
|
| | | clientPack.Broadcast = family.GetBroadcast()
|
| | | clientPack.BroadcastLen = len(clientPack.Broadcast)
|
| | | clientPack.MemberCount = family.GetCount()
|
| | | clientPack.DataServerID = GameWorld.GetGameWorld().GetServerID()
|
| | | return clientPack
|
| | |
|
| | | #// A6 20 搜索家族列表 #tagCMViewFamilyPage
|
| | | #
|
| | |
| | | leaderMember = family.FindMember(familyView.LeaderID)
|
| | | familyView.LeaderName = leaderMember.GetPlayerName() if leaderMember else ""
|
| | | familyView.LeaderNameLen = len(familyView.LeaderName)
|
| | | familyView.LeaderServerID = leaderMember.GetServerID() if leaderMember else family.GetServerID()
|
| | | familyView.FamilyLV = family.GetLV()
|
| | | familyView.JoinReview = family.GetJoinReview()
|
| | | familyView.JoinLVMin = family.GetJoinLVMin()
|
| | |
| | | curFamily.SetLV(updLV)
|
| | | curFamily.SetExp(updExp)
|
| | |
|
| | | Broadcast_FamilyInfo(familyID, isSyncMem=False)
|
| | | Broadcast_FamilyInfo(familyID, isSyncMem=False) # 公会经验
|
| | | return True
|
| | |
|
| | | def AddFamilyContrib(curPlayer, addContribValue):
|
| | |
| | | curMember.SetContribTotal(contribTotal)
|
| | | GameWorld.DebugLog("增加成员贡献: familyID=%s,addContribValue=%s,contribDay=%s,contribTotal=%s" % (familyID, addContribValue, contribDay, contribTotal), playerID)
|
| | |
|
| | | Broadcast_FamilyInfo(familyID, isSyncMem=False)
|
| | | Broadcast_FamilyInfo(familyID, isSyncMem=False) # 成员贡献
|
| | | return
|
| | |
|
| | | ## ------------------------------------------------------------------------------------------------
|
| | |
| | | CrossPlayer.SendFakePackByFamily(familyID, clientPack)
|
| | | return
|
| | |
|
| | | def OnFamilyTalk(curPlayer, familyID, talkPack, tick):
|
| | | clientData, tick = None, 0
|
| | | reqDataEx = {"talkBuffer":talkPack.GetBuffer()}
|
| | | FamilyPyPackForwarding(curPlayer, clientData, tick, "__OnFamilyTalk", reqCD=0, reqDataEx=reqDataEx)
|
| | | return
|
| | | def __OnFamilyTalk(crossPlayer, clientData, tick, fromServerID=0, reqDataEx=None):
|
| | | talkBuffer = reqDataEx["talkBuffer"]
|
| | | playerID = crossPlayer.GetPlayerID()
|
| | | familyID = crossPlayer.GetFamilyID()
|
| | | if not familyID or not talkBuffer:
|
| | | return
|
| | | clientPack = ChPyNetSendPack.tagMCTalk()
|
| | | clientPack.ReadData(talkBuffer)
|
| | | |
| | | CrossPlayer.SendFakePackByFamily(familyID, clientPack)
|
| | | |
| | | # 聊天缓存
|
| | | channelType = clientPack.ChannelType
|
| | | content = clientPack.Content
|
| | | bubbleBox = clientPack.BubbleBox
|
| | | PlayerTalk.DoTalkCache(channelType, playerID, content, bubbleBox, familyID)
|
| | | return
|
| | |
|
| | | ## -------------------------------------- 游戏服本服处理 --------------------------------------------
|
| | | '''
|
| | | 为方便本服、跨服互通公会逻辑统一,公会相关数据处理统一使用 CrossPlayer,视为以前的GameServer处理,这样本服跨服的公会管理通用
|
| | |
| | | return
|
| | |
|
| | | def Do_MapServer_PlayerLogin(curPlayer):
|
| | | DBFamily.Sync_FamilyCrossInfo(curPlayer)
|
| | | SyncDonateCntInfo(curPlayer)
|
| | | PlayerFamilyZhenbaoge.OnPlayerLogin(curPlayer)
|
| | | return
|