#!/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