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
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
#-------------------------------------------------------------------------------
#
##@package PlayerFairyDomain
#
# @todo:çÎç¿ÏÉÓò
# @author xdh
# @date 2019-04-23
# @version 1.0
#
#
# ÏêϸÃèÊö: çÎç¿ÏÉÓò
#
#---------------------------------------------------------------------
"""Version = 2019-04-23 17:00"""
 
import GameWorld
import ShareDefine
import IpyGameDataPY
'''
Value1:ʼþID
Value2:Сʱ¶Î³öÏÖ´ÎÊý
Value3:½ñÈÕ³öÏÖ´ÎÊý
'''
RecType = ShareDefine.Def_UniversalGameRecType_FairyDomain
 
 
def AddFairyDomainEvent(fdEventIDList):
    fdEventLimitDict = {}
    for fdEventID in fdEventIDList:
        ipyData = IpyGameDataPY.GetIpyGameDataNotLog('FairyDomain', fdEventID)
        if not ipyData:
            continue
        hourCntLimit, dayCntLimit = ipyData.GetHourCntPubLimit(), ipyData.GetDayCntPubLimit()
        if not hourCntLimit and not dayCntLimit:
            continue
        fdEventLimitDict[fdEventID] = [hourCntLimit, dayCntLimit]
    if not fdEventLimitDict:
        return
    addfdRecList = fdEventLimitDict.keys()
    universalRecMgr = GameWorld.GetUniversalRecMgr()
    recTypeListData = universalRecMgr.GetTypeList(RecType)
 
    addFDEventList = []
    for index in xrange(recTypeListData.Count()):
        recData = recTypeListData.At(index)
        curID = recData.GetValue1()
        if curID in fdEventLimitDict:
            addfdRecList.remove(curID)
            curHourAppearCnt = recData.GetValue2()
            curDayAppearCnt = recData.GetValue3()
            hourCntLimit, dayCntLimit = fdEventLimitDict[curID]
            if curHourAppearCnt >= hourCntLimit or curDayAppearCnt >= dayCntLimit:
                continue
            recData.SetValue2(curHourAppearCnt +1)
            recData.SetValue3(curDayAppearCnt + 1)
            if curHourAppearCnt +1 >= hourCntLimit or curDayAppearCnt + 1 >= dayCntLimit:
                addFDEventList.append(curID)
    for fdid in addfdRecList:
        recData = recTypeListData.AddRec()
        recData.SetValue1(fdid)
        recData.SetValue2(1)
        recData.SetValue3(1)
        hourCntLimit, dayCntLimit = fdEventLimitDict[fdid]
        if 1 >= hourCntLimit or 1 >= dayCntLimit:
            addFDEventList.append(fdid)
    if addFDEventList:
        #ͬ²½µØÍ¼
        GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_FairyDomainLimit, [1, addFDEventList])
      
    return
 
def OnHour():
    __ResetFairyDomainCnt(1)
    return
 
def OnDayEx():
    __ResetFairyDomainCnt(2)
    return
 
def OnMapServerInitOK():
    __ResetFairyDomainCnt(0)
    return
 
def __ResetFairyDomainCnt(resetType):
    curLimitEventIDList = []
    delCnt = 0
    universalRecMgr = GameWorld.GetUniversalRecMgr()
    recTypeListData = universalRecMgr.GetTypeList(RecType)
    for index in xrange(recTypeListData.Count()):
        dataIndex = index - delCnt
        recData = recTypeListData.At(dataIndex)
        if resetType == 1:
            recData.SetValue2(0)
        elif resetType == 2:
            recData.SetValue3(0)
        curID = recData.GetValue1()
        hourAppearCnt = recData.GetValue2()
        dayAppearCnt = recData.GetValue3()
        ipyData = IpyGameDataPY.GetIpyGameDataNotLog('FairyDomain', curID)
        if not ipyData:
            continue
        hourCntLimit, dayCntLimit = ipyData.GetHourCntPubLimit(), ipyData.GetDayCntPubLimit()
        if not hourCntLimit and not dayCntLimit:
            recTypeListData.Delete(dataIndex)
            delCnt +=1
            continue
        if hourAppearCnt >= hourCntLimit or dayAppearCnt >= dayCntLimit:
            curLimitEventIDList.append(curID)
    #ͬ²½µØÍ¼
    GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_FairyDomainLimit, [0, curLimitEventIDList])
    return