1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package GM.Commands.Family
#
# @todo:¹«»á
# @author hxp
# @date 2025-10-10
# @version 1.0
#
# ÏêϸÃèÊö: ¹«»á
#
#-------------------------------------------------------------------------------
#"""Version = 2025-10-10 21:00"""
#-------------------------------------------------------------------------------
 
import GameWorld
import CreateFamily
import IpyGameDataPY
import PlayerFamilyEmblem
import PlayerControl
import PlayerFamily
import CrossPlayer
import DBDataMgr
import time
 
def GetGMServerIDList(curPlayer):
    ## »ñÈ¡ÃüÁî¶îÍâ·¢Ë͵½ÆäËû·þÎñÆ÷£¬Èç¿ç·þ
    crossServerID = DBDataMgr.GetFamilyMgr().GetCurCrossServerID()
    if crossServerID:
        GameWorld.DebugAnswer(curPlayer, "±¾·þ¹«»áÒÑ»¥Í¨¿ç·þID:%s" % crossServerID)
        return [crossServerID]
    GameWorld.DebugAnswer(curPlayer, "±¾·þ¹«»áδ»¥Í¨")
    return []
 
def OnExec(curPlayer, msgList):
    ## ÓÎÏ··þÖ´ÐÐÃüÁî
    
    isMainServer = GameWorld.IsMainServer()
    if not msgList:
        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]")
        GameWorld.DebugAnswer(curPlayer, "ÉèÖÃÀ뿪: Family l Ö÷¶¯À뿪´ÎÊý ±»Ìß´ÎÊý ÉÏ´ÎÊÇ·ñÖ÷¶¯  À뿪¶à¾ÃÁË")
        GameWorld.DebugAnswer(curPlayer, "Ìí¼Ó³ÉÔ±: Family m ÈËÊý [¹«»áID]")
        GameWorld.DebugAnswer(curPlayer, "³ÉÔ±ÀëÏß: Family ml ³ÉÔ±ID ÀëÏß·ÖÖÓÊý")
        GameWorld.DebugAnswer(curPlayer, "ÖØÖøÄÃû: Family n")
        GameWorld.DebugAnswer(curPlayer, "´´½¨¹«»áÏà¹ØÊ¹ÓÃÃüÁî: CreateFamily")
        return
    
    crossPlayer = CrossPlayer.GetCrossPlayerMgr().FindCrossPlayer(curPlayer.GetPlayerID())
    if not crossPlayer:
        return
    
    value = msgList[0]
    
    # ¶¼ÔÚ±¾·þÖ´ÐеÄ
    if value == "l":
        if not isMainServer:
            return
        leaveCnt = msgList[1] if len(msgList) > 1 else 0
        kickedCnt = msgList[2] if len(msgList) > 2 else 0
        lastVoluntarily = msgList[3] if len(msgList) > 3 else 0
        leavePassMinutes = msgList[4] if len(msgList) > 4 else 0
        leaveInfo = PlayerControl.SetLeaveFamilyInfo(curPlayer, leaveCnt, kickedCnt, lastVoluntarily)
        leaveTime = PlayerControl.SetLeaveFamilyTimeEx(curPlayer, int(time.time()) - leavePassMinutes * 60)
        GameWorld.DebugAnswer(curPlayer, "ÉèÖÃÀ뿪: Info=%s,%s" % (leaveInfo, GameWorld.ChangeTimeNumToStr(leaveTime)))
        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, "Íæ¼Òδ¼ÓÈ빫»á!")
        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))
            return
        curFamily.SetLV(lv)
        curFamily.SetExp(exp)
        GameWorld.DebugAnswer(crossPlayer, "ÉèÖù«»áµÈ¼¶:%s, exp=%s" % (lv, exp))
        
    elif value == "e":
        emblemID = msgList[1] if len(msgList) > 1 else 0
        setExpireTimes = msgList[2] if len(msgList) > 2 else None
        emblemActionObj = PlayerFamilyEmblem.AddFamilyEmblem(curFamily.GetID(), emblemID, setExpireTimes)
        if not emblemActionObj:
            GameWorld.DebugAnswer(crossPlayer, "¸Ã»ÕÕÂIDÎÞ·¨Ìí¼Ó")
            return
        endTime = PlayerFamilyEmblem.GetActionEmblemEndTime(emblemActionObj)
        GameWorld.DebugAnswer(crossPlayer, "Ìí¼Ó»ÕÕÂ(%s)µ½ÆÚ:%s" % (emblemID, GameWorld.ChangeTimeNumToStr(endTime)))
        return
    
    elif value == "m":
        CreateFamily.OnExec(crossPlayer, msgList)
        return
    
    elif value == "n":
        PlayerFamily.SetRenameTime(curFamily, 0)
        GameWorld.DebugAnswer(crossPlayer, "ÖØÖù«»á¸ÄÃûCD")
        
    elif value == "c":
        contribDay = msgList[1] if len(msgList) > 1 else 0
        contribTotal = msgList[2] if len(msgList) > 2 else 0
        memID = msgList[3] if len(msgList) > 3 else crossPlayer.GetPlayerID()
        member = curFamily.FindMember(memID)
        if not member:
            GameWorld.DebugAnswer(crossPlayer, "²»´æÔڸóÉÔ±ID:%s" % memID)
            return
        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
        logoutMinutes = msgList[2] if len(msgList) > 2 else 0
        member = curFamily.FindMember(memID)
        if not member:
            GameWorld.DebugAnswer(crossPlayer, "²»´æÔڸóÉÔ±ID:%s" % memID)
            return
        member.SetOffTime(int(time.time()) - logoutMinutes * 60)
        GameWorld.DebugAnswer(crossPlayer, "³ÉÔ±ID:%s,ÀëÏßʱ¼ä:%s" % (memID, GameWorld.ChangeTimeNumToStr(member.GetOffTime())))
        syncMemIDList.append(memID)
        
    isSyncMem = True if syncMemIDList else False
    PlayerFamily.Sync_FamilyInfo(crossPlayer, syncMemIDList=syncMemIDList, isSyncMem=isSyncMem)
    return