hxp
2023-10-12 7bd89df4994934b9a5810e6b62383e6773b8339b
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
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package PlayerFamilyZhenfa
#
# @todo:ÏÉÃËÕó·¨
# @author hxp
# @date 2023-10-11
# @version 1.0
#
# ÏêϸÃèÊö: ÏÉÃËÕó·¨
#
#-------------------------------------------------------------------------------
#"""Version = 2023-10-11 16:30"""
#-------------------------------------------------------------------------------
 
import ShareDefine
import IpyGameDataPY
import GameWorld
 
ActionType_FamilyZhenfa = ShareDefine.Def_ActionType_FamilyZhenfa
 
def GetZhenfaType(actionData): return actionData.GetValue1()
def SetZhenfaType(actionData, zhenfaType): actionData.SetValue1(zhenfaType)
def GetZhenfaLV(actionData): return actionData.GetValue2()
def SetZhenfaLV(actionData, lv): actionData.SetValue2(lv)
def GetZhenfaExp(actionData): return actionData.GetValue3()
def SetZhenfaExp(actionData, exp): actionData.SetValue3(exp)
 
## Íæ¼ÒµÇ¼
#  @param None
#  @return None
def OnPlayerLogin(curPlayer):
    return
 
def GetFamilyZhenfaData(familyID, zhenfaType):
    ## »ñÈ¡ÏÉÃËÕó·¨Êý¾Ý
    findActionData = None
    zhenfaAction = GameWorld.GetFamilyActionManager().GetFamilyAction(familyID, ActionType_FamilyZhenfa)
    for index in range(zhenfaAction.Count()):
        actionData = zhenfaAction.At(index)
        if zhenfaType == GetZhenfaType(actionData):
            findActionData = actionData
            break
    if not findActionData:
        findActionData = zhenfaAction.AddAction()
        findActionData.SetFamilyId(familyID)
        findActionData.SetActionType(ActionType_FamilyZhenfa)
        SetZhenfaType(findActionData, zhenfaType)
    return findActionData
 
def MapServer_FamilyZhenfa(curPlayer, msgList):
    familyID, playerID, msgType, msgData = msgList
    
    # ¼Ó¾­Ñé
    if msgType == "AddExp":
        __DoFamilyZhenfa_AddExp(familyID, playerID, msgType, msgData)
        
    return
 
def __DoFamilyZhenfa_AddExp(familyID, playerID, msgType, msgData):
    zhenfaType, addTotalExp = msgData
    
    actionData = GetFamilyZhenfaData(familyID, zhenfaType)
    zhenfaLV = GetZhenfaLV(actionData)
    zhenfaExp = GetZhenfaExp(actionData)
    
    ipyData = IpyGameDataPY.GetIpyGameData("FamilyZhenfa", zhenfaType, zhenfaLV)
    if not ipyData:
        return
    LVUpNeedExp = ipyData.GetLVUpNeedExp()
    if not LVUpNeedExp:
        GameWorld.DebugLog("¸ÃÕó·¨ÒÑÂú¼¶:familyID=%s,zhenfaType=%s,zhenfaLV=%s" % (familyID, zhenfaType, zhenfaLV), playerID)
        return
    
    curExp = zhenfaExp + addTotalExp
    GameWorld.DebugLog("Ö´ÐÐÕó·¨Éý¼¶: familyID=%s,zhenfaType=%s,zhenfaLV=%s,zhenfaExp=%s,addTotalExp=%s,curExp=%s" 
                       % (familyID, zhenfaType, zhenfaLV, zhenfaExp, addTotalExp, curExp), playerID)
    
    isLVUP = False
    # °²È«ÎªÖ÷²»ÓÃwhile
    for _ in xrange(100):
        if not LVUpNeedExp or curExp < LVUpNeedExp:
            break
        ipyData = IpyGameDataPY.GetIpyGameData("FamilyZhenfa", zhenfaType, zhenfaLV + 1)
        if not ipyData:
            break
        
        curExp = curExp - LVUpNeedExp
        zhenfaLV += 1
        isLVUP = True
        GameWorld.DebugLog("    Õó·¨Éý¼¶: LVUpNeedExp=%s,zhenfaLV=%s,curExp=%s" % (LVUpNeedExp, zhenfaLV, curExp), playerID)
        
        LVUpNeedExp = ipyData.GetLVUpNeedExp()
        
    SetZhenfaLV(actionData, zhenfaLV)
    SetZhenfaExp(actionData, curExp)
    GameWorld.DebugLog("    ¸üÐÂÕó·¨: familyID=%s,zhenfaType=%s,zhenfaLV=%s,curExp=%s" % (familyID, zhenfaType, zhenfaLV, curExp), playerID)
    
    # Í¬²½µØÍ¼
    SyncMap_FamilyZhenfaInfo(familyID, msgType, {"playerID":playerID, "refreshAttr":isLVUP})
    return
 
def GetSyncMapFamilyZhenfaInfo(familyID):
    info = {}
    zhenfaAction = GameWorld.GetFamilyActionManager().GetFamilyAction(familyID, ActionType_FamilyZhenfa)
    for index in range(zhenfaAction.Count()):
        actionData = zhenfaAction.At(index)
        zhenfaType = GetZhenfaType(actionData)
        info[zhenfaType] = {"LV":GetZhenfaLV(actionData), "Exp":GetZhenfaExp(actionData)}
    return info
 
def SyncMap_FamilyZhenfaInfo(familyID, msgType, dataEx={}):
    ## Í¬²½µ¥¸öÏÉÃËËùÓÐÕó·¨ÐÅÏ¢µ½µØÍ¼
    zhenfaInfo = {familyID:GetSyncMapFamilyZhenfaInfo(familyID)}
    syncDict = {"zhenfaInfo":zhenfaInfo, "msgType":msgType, "familyID":familyID}
    syncDict.update(dataEx)
    GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_FamilyZhenfaInfo, syncDict)
    return
 
def SyncMap_AllFamilyZhenfaInfo():
    ## Í¬²½ËùÓÐÏÉÃËÕó·¨ÐÅÏ¢µ½µØÍ¼
    zhenfaInfo = {}
    familyManager = GameWorld.GetFamilyManager()
    for i in range(familyManager.GetCount()):
        family = familyManager.GetAt(i)
        familyID = family.GetID()
        if not familyID:
            continue
        info = GetSyncMapFamilyZhenfaInfo(familyID)
        if info:
            zhenfaInfo[familyID] = info
    syncDict = {"zhenfaInfo":zhenfaInfo, "msgType":"allFamily"}
    GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_FamilyZhenfaInfo, syncDict)
    return
 
def OnMapServerInitOK():
    SyncMap_AllFamilyZhenfaInfo()
    return