ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/CreateFamily.py
@@ -4,12 +4,12 @@
#
##@package GM.Commands.CreateFamily
#
# @todo:创建假仙盟
# @todo:创建假公会
# @author hxp
# @date 2025-05-09
# @version 1.0
#
# 详细描述: 创建假仙盟
# 详细描述: 创建假公会
#
#-------------------------------------------------------------------------------
#"""Version = 2025-05-09 12:20"""
@@ -20,31 +20,41 @@
import PlayerViewCache
import IPY_PlayerDefine
import PlayerFamily
import CrossPlayer
import DBDataMgr
import random
## 执行逻辑
#  @param curPlayer 当前玩家
#  @param gmList []
#  @return None
def GetGMServerIDList(curPlayer):
    ## 获取命令额外发送到其他服务器,如跨服
    crossServerID = DBDataMgr.GetFamilyMgr().GetCurCrossServerID()
    #GameWorld.DebugAnswer(curPlayer, "GetGMServerIDList: %s" % crossServerID)
    if crossServerID:
        return [crossServerID]
    return []
def OnExecCross(crossPlayer, gmList):
    ## 跨服执行命令
    GameWorld.DebugLog("OnExecCross %s" % gmList, crossPlayer.GetPlayerID())
    return
def OnExec(curPlayer, gmList):
    ## 游戏服执行命令
    
    if not gmList:
        #GameWorld.DebugAnswer(curPlayer, "创建跨服假仙盟: CreatFamily c 个数 [总战力 ServerID 等级 成员数]")
        #GameWorld.DebugAnswer(curPlayer, "删除跨服假仙盟: CreatFamily c 0")
        GameWorld.DebugAnswer(curPlayer, "建本服假仙盟: CreatFamily 个数 [总战力 ServerID 等级 成员数  是否审核 官职限制]")
        GameWorld.DebugAnswer(curPlayer, "删本服假仙盟: CreatFamily 0")
        GameWorld.DebugAnswer(curPlayer, "输出仙盟列表: CreatFamily pl [条数 从第x名]")
        GameWorld.DebugAnswer(curPlayer, "输出仙盟明细: CreatFamily pf 仙盟ID")
        GameWorld.DebugAnswer(curPlayer, "添加假申请人: CreatFamily j [申请数 仙盟ID]")
        GameWorld.DebugAnswer(curPlayer, "添加本盟成员: CreatFamily m 人数 [仙盟ID]")
        GameWorld.DebugAnswer(curPlayer, "创建假人公会: CreatFamily 个数 [总战力 ServerID 等级 成员数  是否审核 官职限制]")
        GameWorld.DebugAnswer(curPlayer, "删除假人公会: CreatFamily 0")
        GameWorld.DebugAnswer(curPlayer, "输出公会列表: CreatFamily pl [条数 从第x名]")
        GameWorld.DebugAnswer(curPlayer, "输出公会明细: CreatFamily pf 公会ID")
        GameWorld.DebugAnswer(curPlayer, "添加假申请人: CreatFamily sq [申请数 公会ID]")
        GameWorld.DebugAnswer(curPlayer, "添加公会成员: CreatFamily m 人数 [公会ID]")
        return
    crossPlayer = CrossPlayer.GetCrossPlayerMgr().FindCrossPlayer(curPlayer.GetPlayerID())
    if not crossPlayer:
        #GameWorld.DebugAnswer(curPlayer, "找不到crossPlayer")
        return
    
    value1 = gmList[0]
    if value1 == "c":
        # 跨服命令
        return
    if value1 == "pl":
        __printFamilyList(curPlayer, gmList)
        return
@@ -53,12 +63,12 @@
        __printFamilyInfo(curPlayer, gmList)
        return
    
    if value1 == "j":
    if value1 == "sq":
        __addFackRequestJoin(curPlayer, gmList)
        return
    
    if value1 == "m":
        __addFackMember(curPlayer, gmList)
        __addFackMember(curPlayer, gmList, crossPlayer)
        return
    
    creatCount = value1
@@ -68,14 +78,14 @@
    __createFackFamily(curPlayer, gmList)
    return
def __addFackMember(curPlayer, gmList):
def __addFackMember(curPlayer, gmList, crossPlayer):
    memCnt = gmList[1] if len(gmList) > 1 else 1
    familyID = gmList[2] if len(gmList) > 2 else curPlayer.GetFamilyID()
    
    familyMgr = DBDataMgr.GetFamilyMgr()
    curFamily = familyMgr.FindFamily(familyID)
    if not curFamily:
        GameWorld.DebugAnswer(curPlayer, "没有该仙盟: %s" % familyID)
        GameWorld.DebugAnswer(curPlayer, "没有该公会: %s" % familyID)
        return
    
    MemberMax = PlayerFamily.GetFamilySetting(curFamily.GetLV(), "MemberMax")
@@ -84,9 +94,15 @@
        return
    memCnt = min(memCnt, MemberMax - curFamily.GetCount())
    
    curZoneMgr = familyMgr.GetZoneFamilyMgrByFamilyID(familyID)
    if not curZoneMgr:
        return
    fackIDStart = 0
    for i in range(0, familyMgr.GetCount()):
        family = familyMgr.GetAt(i)
    for zoneID in familyMgr.GetZoneIDListThisServer():
        zoneMgr = familyMgr.GetZoneFamilyMgr(zoneID)
        for i in range(0, zoneMgr.GetCount()):
            family = zoneMgr.GetAt(i)
        for index in xrange(family.GetCount()):
            member = family.GetAt(index)
            memID = member.GetPlayerID()
@@ -102,8 +118,8 @@
        PlayerFamily.DoPlayerJionFamily(curFamily, fackID, None, broadcastFamilyChange=False)
        addCnt += 1
        
    familyMgr.Sort()
    PlayerFamily.Sync_FamilyInfo(curPlayer)
    curZoneMgr.Sort()
    PlayerFamily.Sync_FamilyInfo(crossPlayer)
    GameWorld.DebugAnswer(curPlayer, "增加成员数:%s, 总成员:%s" % (addCnt, curFamily.GetCount()))
    return
@@ -114,7 +130,7 @@
    familyMgr = DBDataMgr.GetFamilyMgr()
    family = familyMgr.FindFamily(familyID)
    if not family:
        GameWorld.DebugAnswer(curPlayer, "没有该仙盟: %s" % familyID)
        GameWorld.DebugAnswer(curPlayer, "没有该公会: %s" % familyID)
        return
    
    reqCnt = min(reqCnt, 100)
@@ -125,29 +141,33 @@
    for fackID in fackIDList:
        if fackID in reqDict:
            continue
        if familyMgr.GetPlayerFamilyID(fackID):
            continue
        family.AddReqJoinPlayerID(fackID)
        addCnt += 1
        if addCnt >= reqCnt:
            break
    # 广播给有招人权限的
    clientPack = PlayerFamily.GetPack_FamilyReqJoinInfo(familyID)
    PlayerFamily.Broadcast_FamilyPack(familyID, clientPack, PlayerFamily.FamilyPowerID_Call)
    PlayerFamily.SendFamilyReqJoinInfo(familyID)
    GameWorld.DebugAnswer(curPlayer, "增加申请数:%s, 总申请:%s" % (addCnt, len(family.GetReqJoinPlayerInfo())))
    return
def __printFamilyList(curPlayer, gmList):
    printCnt = gmList[1] if len(gmList) > 1 else 100
    printCnt = gmList[1] if len(gmList) > 1 else 20
    fromIndex = gmList[2] if len(gmList) > 2 else 0
    
    printAnswerCnt = 0
    familyMgr = DBDataMgr.GetFamilyMgr()
    familyMgr.Sort()
    familyCnt = familyMgr.GetCount()
    GameWorld.DebugAnswer(curPlayer, "----- 仙盟总数: %s -----" % (familyCnt))
    zoneIDList = familyMgr.GetZoneIDListThisServer()
    for zoneID in zoneIDList:
        zoneMgr = familyMgr.GetZoneFamilyMgr(zoneID)
        zoneMgr.Sort()
        familyCnt = zoneMgr.GetCount()
        GameWorld.DebugAnswer(curPlayer, "----- 【分区%s】公会总数: %s -----" % (zoneID, familyCnt))
    for index in range(fromIndex, fromIndex + printCnt):
        if index >= familyCnt:
            break
        family = familyMgr.GetAt(index)
            family = zoneMgr.GetAt(index)
        rank = index + 1
        
        text = "%s,ID:%s,LV:%s,战:%s,成:%s,审:%s,官:%s" % (rank, family.GetID(), family.GetLV(), family.GetFightPowerTotal(), family.GetCount(), family.GetJoinReview(), family.GetJoinLVMin())
@@ -165,11 +185,12 @@
    familyMgr = DBDataMgr.GetFamilyMgr()
    family = familyMgr.FindFamily(familyID)
    if not family:
        GameWorld.DebugAnswer(curPlayer, "仙盟不存在: %s" % familyID)
        GameWorld.DebugAnswer(curPlayer, "公会不存在: %s" % familyID)
        return
    
    zoneID = familyMgr.GetFamilyZoneID(familyID)
    GameWorld.DebugAnswer(curPlayer, "----- 【%s】 -----" % (GameWorld.CodeToGbk(family.GetName())))
    GameWorld.DebugAnswer(curPlayer, "仙盟ID:%s, ServerID:%s" % (familyID, family.GetServerID()))
    GameWorld.DebugAnswer(curPlayer, "公会ID:%s, ServerID:%s, 分区:%s" % (familyID, family.GetServerID(), zoneID))
    GameWorld.DebugAnswer(curPlayer, "LV:%s, Exp:%s" % (family.GetLV(), family.GetExp()))
    GameWorld.DebugAnswer(curPlayer, "审核:%s, 官职条件:%s, 申请数:%s" % (family.GetJoinReview(), family.GetJoinLVMin(), len(family.GetReqJoinPlayerInfo())))
    GameWorld.DebugAnswer(curPlayer, "战旗:%s, 旗号【%s】" % (family.GetEmblemID(), GameWorld.CodeToGbk(family.GetEmblemWord())))
@@ -187,17 +208,14 @@
    
    delCnt = 0
    familyMgr = DBDataMgr.GetFamilyMgr()
    for index in range(familyMgr.GetCount())[::-1]:
        family = familyMgr.GetAt(index)
        familyID = family.GetID()
    for familyID in familyMgr.GetFamilyIDList():
        if familyID > ShareDefine.FackFamilyIDMax:
            continue
        familyMgr.DelFamily(family.GetID())
        delCnt += 1
        familyMgr.DelFamily(familyID)
        
    if curPlayer:
        GameWorld.DebugAnswer(curPlayer, "删除假仙盟数: %s,剩余:%s" % (delCnt, familyMgr.GetCount()))
    elif GameWorld.IsCrossServer():
        GameWorld.DebugAnswer(None, "删除跨服假仙盟: %s,剩余:%s" % (delCnt, familyMgr.GetCount()))
    remainCnt = len(familyMgr.GetFamilyIDList())
    GameWorld.DebugAnswer(curPlayer, "删除假公会数: %s,剩余:%s" % (delCnt, remainCnt))
    return
def __createFackFamily(curPlayer, gmList):
@@ -205,7 +223,7 @@
    
    creatCount = gmList[0] if len(gmList) > 0 else 1 # 默认1个
    familyFightPower = gmList[1] if len(gmList) > 1 else 10000000
    serverID = gmList[2] if len(gmList) > 2 else random.randint(1, 200)
    serverID = gmList[2] if len(gmList) > 2 else GameWorld.GetGameWorld().GetServerID() #random.randint(1, 200)
    familyLV = gmList[3] if len(gmList) > 3 else 1 # 默认1级
    memberCnt = gmList[4] if len(gmList) > 4 else random.randint(1, 10)
    joinReview = gmList[5] if len(gmList) > 5 else 1
@@ -248,7 +266,7 @@
        fackFamily.SetJoinReview(joinReview) # 设置需要审核
        fackFamily.SetJoinLVMin(joinLVMin) # 官职
        
        GameWorld.DebugLog("创建假仙盟: fackFamilyID=%s,serverID=%s,familyFightPower=%s,memberCnt=%s"
        GameWorld.DebugLog("创建假公会: fackFamilyID=%s,serverID=%s,familyFightPower=%s,memberCnt=%s"
                           % (fackFamilyID, serverID, familyFightPower, memberCnt))
        for _ in range(memberCnt):
            
@@ -283,15 +301,11 @@
                memFightPowerTotal -= memFightPower
            viewCache = PlayerViewCache.FindViewCache(memID)
            viewCache.SetFightPowerTotal(memFightPower)
            GameWorld.DebugLog("    仙盟成员: memID=%s,memFightPower=%s,fmLV=%s" % (memID, memFightPower, fmLV))
            GameWorld.DebugLog("    公会成员: memID=%s,memFightPower=%s,fmLV=%s" % (memID, memFightPower, fmLV))
            member.RefreshMemberByID(memID)
            
        createOKCnt += 1
        familyFightPower += 10000
        
    familyMgr.Sort()
    if curPlayer:
        GameWorld.DebugAnswer(curPlayer, "成功创建假仙盟: %s,剩余:%s" % (creatCount, familyMgr.GetCount()))
    elif GameWorld.IsCrossServer():
        GameWorld.DebugAnswer(None, "成功创建跨服假仙盟: %s,总:%s" % (creatCount, familyMgr.GetCount()))
    GameWorld.DebugAnswer(curPlayer, "成功创建假公会: %s,总:%s" % (creatCount, len(familyMgr.GetFamilyIDList())))
    return