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
#!/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 DBFamily
import time
 
def GetGMServerIDList(curPlayer):
    ## »ñÈ¡ÃüÁî¶îÍâ·¢Ë͵½ÆäËû·þÎñÆ÷£¬Èç¿ç·þ
    crossServerID = DBDataMgr.GetFamilyMgr().GetCurCrossServerID()
    GameWorld.DebugAnswer(curPlayer, "±¾·þ¹«»á»¥Í¨¿ç·þID:%s" % crossServerID)
    if crossServerID:
        return [crossServerID]
    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):
    ## ÓÎÏ··þÖ´ÐÐÃüÁî
    
    if not msgList:
        if GameWorld.IsCrossServer():
            return
        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
    
    isMainServer = GameWorld.IsMainServer()
    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 and DBFamily.IsFamilyCross():
        GameWorld.DebugAnswer(curPlayer, "¹«»áÒÑ¿ç·þÓÉ¿ç·þÖ´ÐÐÃüÁî")
        return
    
    familyID = crossPlayer.GetFamilyID()
    familyMgr = DBDataMgr.GetFamilyMgr()
    curFamily = familyMgr.FindFamily(familyID) if familyID else None
    if not curFamily:
        GameWorld.DebugAnswer(crossPlayer, "Íæ¼Òδ¼ÓÈëÏÉÃË!")
        return
    
    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))
        
    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())))
        
    PlayerFamily.Sync_FamilyInfo(crossPlayer)
    return