ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Family.py
@@ -4,12 +4,12 @@
#
##@package GM.Commands.Family
#
# @todo:仙盟
# @todo:公会
# @author hxp
# @date 2025-10-10
# @version 1.0
#
# 详细描述: 仙盟
# 详细描述: 公会
#
#-------------------------------------------------------------------------------
#"""Version = 2025-10-10 21:00"""
@@ -23,33 +23,25 @@
import PlayerFamily
import CrossPlayer
import DBDataMgr
import DBFamily
import time
def GetGMServerIDList(curPlayer):
    ## 获取命令额外发送到其他服务器,如跨服
    crossServerID = DBDataMgr.GetFamilyMgr().GetCurCrossServerID()
    GameWorld.DebugAnswer(curPlayer, "本服公会互通跨服ID:%s" % crossServerID)
    if crossServerID:
        GameWorld.DebugAnswer(curPlayer, "本服公会已互通跨服ID:%s" % crossServerID)
        return [crossServerID]
    GameWorld.DebugAnswer(curPlayer, "本服公会未互通")
    return []
def OnExecCross(crossPlayer, gmList):
    ## 跨服执行命令
    playerID = crossPlayer.GetPlayerID()
    familyMgr = DBDataMgr.GetFamilyMgr()
    familyID = familyMgr.GetPlayerFamilyID(playerID)
    zoneID = familyMgr.GetFamilyZoneID(familyID)
    GameWorld.DebugAnswer(crossPlayer, "跨服公会ID:%s,zoneID=%s" % (familyID, zoneID))
    OnExec(crossPlayer, gmList)
    return
def OnExec(curPlayer, msgList):
    ## 游戏服执行命令
    
    isMainServer = GameWorld.IsMainServer()
    if not msgList:
        if GameWorld.IsCrossServer():
        if not isMainServer:
            return
        GameWorld.DebugAnswer(curPlayer, "-----%s-----" % GameWorld.GetCurrentDataTimeStr())
        GameWorld.DebugAnswer(curPlayer, "设置等级: Family lv 等级 经验")
        GameWorld.DebugAnswer(curPlayer, "设置徽章: Family e 徽章ID [剩余时间秒]")
        GameWorld.DebugAnswer(curPlayer, "设置贡献: Family c 今日贡献 累计贡献 [成员ID]")
@@ -64,8 +56,9 @@
    if not crossPlayer:
        return
    
    isMainServer = GameWorld.IsMainServer()
    value = msgList[0]
    # 都在本服执行的
    if value == "l":
        if not isMainServer:
            return
@@ -78,26 +71,33 @@
        GameWorld.DebugAnswer(curPlayer, "设置离开: Info=%s,%s" % (leaveInfo, GameWorld.ChangeTimeNumToStr(leaveTime)))
        return
    
    if isMainServer and DBFamily.IsFamilyCross():
        GameWorld.DebugAnswer(curPlayer, "公会已跨服由跨服执行命令")
        return
    if isMainServer:
        crossServerID = DBDataMgr.GetFamilyMgr().GetCurCrossServerID()
        if crossServerID:
            # 本服公会已互通不再执行本服命令
            return
    familyID = crossPlayer.GetFamilyID()
    familyMgr = DBDataMgr.GetFamilyMgr()
    curFamily = familyMgr.FindFamily(familyID) if familyID else None
    if not curFamily:
        GameWorld.DebugAnswer(crossPlayer, "玩家未加入仙盟!")
        GameWorld.DebugAnswer(crossPlayer, "玩家未加入公会!")
        return
    
    if GameWorld.IsCrossServer():
        zoneID = familyMgr.GetFamilyZoneID(familyID)
        GameWorld.DebugAnswer(crossPlayer, "跨服公会ID:%s,zoneID=%s" % (familyID, zoneID))
    syncMemIDList = []
    if value == "lv":
        lv = msgList[1] if len(msgList) > 1 else 1
        exp = msgList[2] if len(msgList) > 2 else 0
        if not IpyGameDataPY.GetIpyGameData("Family", lv):
            GameWorld.DebugAnswer(crossPlayer, "仙盟等级不存在: %s" % (lv))
            GameWorld.DebugAnswer(crossPlayer, "公会等级不存在: %s" % (lv))
            return
        curFamily.SetLV(lv)
        curFamily.SetExp(exp)
        GameWorld.DebugAnswer(crossPlayer, "设置仙盟等级:%s, exp=%s" % (lv, exp))
        GameWorld.DebugAnswer(crossPlayer, "设置公会等级:%s, exp=%s" % (lv, exp))
        
    elif value == "e":
        emblemID = msgList[1] if len(msgList) > 1 else 0
@@ -116,7 +116,7 @@
    
    elif value == "n":
        PlayerFamily.SetRenameTime(curFamily, 0)
        GameWorld.DebugAnswer(crossPlayer, "重置改名CD")
        GameWorld.DebugAnswer(crossPlayer, "重置公会改名CD")
        
    elif value == "c":
        contribDay = msgList[1] if len(msgList) > 1 else 0
@@ -129,6 +129,7 @@
        member.SetContribDay(contribDay)
        member.SetContribTotal(contribTotal)
        GameWorld.DebugAnswer(crossPlayer, "设置贡献:%s/%s, ID:%s" % (contribDay, contribTotal, memID))
        syncMemIDList.append(memID)
        
    elif value == "ml":
        memID = msgList[1] if len(msgList) > 1 else 0
@@ -139,6 +140,8 @@
            return
        member.SetOffTime(int(time.time()) - logoutMinutes * 60)
        GameWorld.DebugAnswer(crossPlayer, "成员ID:%s,离线时间:%s" % (memID, GameWorld.ChangeTimeNumToStr(member.GetOffTime())))
        syncMemIDList.append(memID)
        
    PlayerFamily.Sync_FamilyInfo(crossPlayer)
    isSyncMem = True if syncMemIDList else False
    PlayerFamily.Sync_FamilyInfo(crossPlayer, syncMemIDList=syncMemIDList, isSyncMem=isSyncMem)
    return