ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFamily.py
@@ -31,6 +31,7 @@
import PlayerMail
import PlayerTask
import CrossPlayer
import PlayerTalk
import DirtyList
import DBDataMgr
import DBFamily
@@ -148,11 +149,10 @@
def __doPlayerOnDay(curPlayer):
    PlayerFamilyZhenbaoge.PlayerOnDay(curPlayer)
    PlayerFamilyTaofa.PlayerOnDay(curPlayer)
    Do_MapServer_PlayerOnDay(curPlayer)
    ResetDailyDonateCnt(curPlayer)
    return
def OnPlayerLogin(curPlayer, tick):
    Do_MapServer_PlayerLogin(curPlayer)
    if DBFamily.IsFamilyCross():
        GameWorld.DebugLog("公会已跨服不处理,由所属跨服服务器处理成员登录逻辑 OnPlayerLogin", curPlayer.GetPlayerID())
        return
@@ -162,9 +162,10 @@
def OnCrossPlayerLogin(crossPlayer):
    ## 玩家上线,游戏服跨服通用,流程上当做以前GameServer处理公会一样,处理后再通知地图(现在的游戏服)
    PlayerLoginRefreshFamily(crossPlayer)
    PlayerLoginRefreshFamily(crossPlayer) # 必须先刷新
    Sync_RequestAddFamilyInfo(crossPlayer, False)
    #PlayerFamilyTaofa.OnPlayerLogin(curPlayer) 讨伐待修改
    PlayerTalk.NotifyTalkCache(crossPlayer, [IPY_GameWorld.tcFamily]) # 公会聊天缓存
    PlayerFamilyTaofa.OnCrossPlayerLogin(crossPlayer)
    return
def OnPlayerLogout(curPlayer):
@@ -203,12 +204,13 @@
        C2S_FamilyMapPlayer(dataMsg, playerID)
    return
def MapServer_FamilyRefresh(crossPlayer, familyID, isVoluntarily=0):
def MapServer_FamilyRefresh(crossPlayer, familyID, isVoluntarily=0, isLogin=False):
    ''' 相当于GameServer调用 curPlayer.MapServer_FamilyRefresh()
    '''
    playerID = crossPlayer.GetPlayerID()
    FmLV = 0 # ְλ
    FamilyLV = 0 # 公会等级
    JoinTime = 0
    FamilyName = ""
    EmblemID, EmblemWord = 0, ""
    if familyID:
@@ -222,6 +224,7 @@
            member = curFamily.FindMember(playerID)
            if member:
                FmLV = member.GetFmLV()
                JoinTime = member.GetJoinTime()
        else:
            familyID = 0
                    
@@ -231,9 +234,11 @@
    
    doData = {"FamilyID":familyID}
    if familyID:
        doData.update({"FmLV":FmLV, "FamilyLV":FamilyLV, "FamilyName":FamilyName, "EmblemID":EmblemID, "EmblemWord":EmblemWord})
        doData.update({"FmLV":FmLV, "JoinTime":JoinTime, "FamilyLV":FamilyLV, "FamilyName":FamilyName, "EmblemID":EmblemID, "EmblemWord":EmblemWord})
    if isVoluntarily:
        doData["isVoluntarily"] = 1
    if isLogin:
        doData["isLogin"] = 1
    SendToFamilyMapPlayer(crossPlayer, "FamilyRefresh", doData)
    return
@@ -245,7 +250,7 @@
    refreshFamilyID = familyMgr.GetPlayerFamilyID(playerID)
    GameWorld.DebugLog("PlayerLoginRefreshFamily playerID=%s,refreshFamilyID=%s" % (playerID, refreshFamilyID))
    crossPlayer.SetFamilyID(refreshFamilyID)
    MapServer_FamilyRefresh(crossPlayer, refreshFamilyID) # 登录
    MapServer_FamilyRefresh(crossPlayer, refreshFamilyID, isLogin=True) # 登录
    familyID = refreshFamilyID
    if not familyID:
        return
@@ -1739,6 +1744,7 @@
        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()
@@ -1752,7 +1758,6 @@
        clientPack.FamilyCount = len(clientPack.FamilyList)
        if clientPack.FamilyCount >= showCount:
            break
    clientPack.DataServerID = GameWorld.GetGameWorld().GetServerID()
    CrossPlayer.SendFakePack(crossPlayer, clientPack)
    return
@@ -2014,6 +2019,29 @@
    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处理,这样本服跨服的公会管理通用
@@ -2031,27 +2059,20 @@
        Do_MapServer_FamilyRefresh(curPlayer, doData)
    return
def Do_MapServer_PlayerOnDay(curPlayer):
    ResetDailyDonateCnt(curPlayer)
    return
def Do_MapServer_PlayerLogin(curPlayer):
    DBFamily.Sync_FamilyCrossInfo(curPlayer)
    SyncDonateCntInfo(curPlayer)
    PlayerFamilyZhenbaoge.OnPlayerLogin(curPlayer)
    return
def Do_MapServer_FamilyRefresh(curPlayer, doData):
    tick = GameWorld.GetGameWorld().GetTick()
    playerID = curPlayer.GetPlayerID()
    refreshFamilyID = doData["FamilyID"]
    refreshFmLV = doData.get("FmLV", 0)
    refreshJoinTime = doData.get("JoinTime", 0)
    refreshFamilyLV = doData.get("FamilyLV", 0)
    refreshFamilyName = doData.get("FamilyName", "")
    refreshEmblemID = doData.get("EmblemID", 0)
    refreshEmblemWord = doData.get("EmblemWord", "")
    isLogin = doData.get("isLogin", 0) # 是否登录刷新的
    
    PlayerViewCache.UpdPlayerViewFamilyInfo(playerID, refreshFamilyID, refreshFamilyName, refreshEmblemID, refreshEmblemWord)
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FamilyJoinTime, refreshJoinTime)
    
    lastFamilyID = curPlayer.GetFamilyID()
    lastFamilyLV = curPlayer.GetFamilyLV() # 公会等级,非职位等级
@@ -2093,6 +2114,17 @@
        
    #---通知客户端刷新属性---
    curPlayer.View_FamilyInfoRefresh() #//04 30 玩家家族名字职位等信息刷新#tagPlayerInFamilyInfoRefresh
    if isLogin:
        Do_MapServer_PlayerLogin(curPlayer)
    return
def Do_MapServer_PlayerLogin(curPlayer):
    ## 地图公会玩家的登录逻辑由最新所属公会刷新后处理
    DBFamily.Sync_FamilyCrossInfo(curPlayer)
    SyncDonateCntInfo(curPlayer)
    PlayerFamilyZhenbaoge.OnPlayerLogin(curPlayer)
    PlayerFamilyTaofa.OnPlayerLogin(curPlayer)
    return
def __OnEnterFamily(curPlayer, tick):