|  |  | 
 |  |  | import IpyGameDataPY
 | 
 |  |  | import PlayerActivity
 | 
 |  |  | import ItemControler
 | 
 |  |  | import ItemCommon
 | 
 |  |  | import PyGameData
 | 
 |  |  | import EventShell
 | 
 |  |  | 
 | 
 |  |  | import copy
 | 
 |  |  | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | def OnHour(curPlayer):
 | 
 |  |  |     __ResetFairyDomainCntLimit(curPlayer, 1)
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | def OnDay(curPlayer):
 | 
 |  |  |     __ResetFairyDomainCntLimit(curPlayer, 2)
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | def __ResetFairyDomainCntLimit(curPlayer, resetType):
 | 
 |  |  |     ## 重置个人缥缈事件出现次数记录
 | 
 |  |  |     ipyMgr = IpyGameDataPY.IPY_Data()
 | 
 |  |  |     for i in xrange(ipyMgr.GetFairyDomainCount()):
 | 
 |  |  |         ipyData = ipyMgr.GetFairyDomainByIndex(i)
 | 
 |  |  |         eventID = ipyData.GetID()
 | 
 |  |  |         appearCntInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventAppearCnt % eventID)
 | 
 |  |  |         if not appearCntInfo:
 | 
 |  |  |             continue
 | 
 |  |  |         hourAppearCntPri, dayAppearCntPri = appearCntInfo % 1000, appearCntInfo / 1000
 | 
 |  |  |         if resetType == 1:
 | 
 |  |  |             updAppearCntInfo = dayAppearCntPri * 1000
 | 
 |  |  |         elif resetType == 2:
 | 
 |  |  |             updAppearCntInfo = hourAppearCntPri
 | 
 |  |  |         else:
 | 
 |  |  |             return
 | 
 |  |  |         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventAppearCnt % eventID, updAppearCntInfo)
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | #// A5 26 寻访仙域 #tagCMVisitFairyDomain
 | 
 |  |  | #
 | 
 |  |  | #struct    tagCMVisitFairyDomain
 | 
 |  |  | 
 |  |  |         if fairyDomainState != 1:
 | 
 |  |  |             GameWorld.DebugLog("    未开始寻访仙域, 无法结束")
 | 
 |  |  |             return
 | 
 |  |  |         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainState, 0)
 | 
 |  |  |          | 
 |  |  |         for i in xrange(maxEventCnt):
 | 
 |  |  |             fdEventID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventID % i)
 | 
 |  |  |             if fdEventID:
 | 
 |  |  |                 PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventID % i, 0)
 | 
 |  |  |                 PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventState % fdEventID, 0)
 | 
 |  |  |                 PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyAdventuresData % fdEventID, 0)
 | 
 |  |  |                  | 
 |  |  |         EndFairyDomain(curPlayer)
 | 
 |  |  |                          | 
 |  |  |         NotifyVisitFairyDomainInfo(curPlayer)
 | 
 |  |  |         return
 | 
 |  |  |     
 | 
 |  |  | 
 |  |  |             if not randomList:
 | 
 |  |  |                 continue                
 | 
 |  |  |             fdEventIDList += randomList
 | 
 |  |  |      | 
 |  |  |         #更新个人出现次数
 | 
 |  |  |         for fdEventID in fdEventIDList:
 | 
 |  |  |             appearCntInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventAppearCnt % fdEventID)
 | 
 |  |  |             hourAppearCntPri, dayAppearCntPri = appearCntInfo % 1000, appearCntInfo / 1000
 | 
 |  |  |             updAppearCntInfo = (dayAppearCntPri + 1) * 1000 + (hourAppearCntPri + 1)
 | 
 |  |  |             PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventAppearCnt % fdEventID, updAppearCntInfo)
 | 
 |  |  |         #更新全服出现次数
 | 
 |  |  |         msgStr = str(fdEventIDList)
 | 
 |  |  |         GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'AddFairyDomainEvent', msgStr, len(msgStr))
 | 
 |  |  |     #奇遇事件 随机档位数据
 | 
 |  |  |     openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
 | 
 |  |  |     for fdEventID in fdEventIDList:
 | 
 |  |  | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | def EndFairyDomain(curPlayer):
 | 
 |  |  |     ##结束寻访
 | 
 |  |  |     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainState, 0)
 | 
 |  |  |     otherCntRateList = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 2)
 | 
 |  |  |     maxEventCnt = max([info[1] for info in otherCntRateList]) + 1  #最大可出现事件个数
 | 
 |  |  |     for i in xrange(maxEventCnt):
 | 
 |  |  |         fdEventID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventID % i)
 | 
 |  |  |         if fdEventID:
 | 
 |  |  |             PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventID % i, 0)
 | 
 |  |  |             PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventState % fdEventID, 0)
 | 
 |  |  |             PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyAdventuresData % fdEventID, 0)
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | def __RandomFDEventByType(curPlayer, eventType, cnt):
 | 
 |  |  |     ##根据事件类型随机事件
 | 
 |  |  |     ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('FairyDomain', {'EventType':eventType}, True)
 | 
 |  |  | 
 |  |  |         if lvLimit and not (lvLimit[0] <= curLV <= lvLimit[1]):
 | 
 |  |  |             #等级范围不满足
 | 
 |  |  |             continue
 | 
 |  |  |          | 
 |  |  |         eventID = ipyData.GetID()
 | 
 |  |  |         appearCntInfo = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventAppearCnt % eventID)
 | 
 |  |  |         hourAppearCntPri, dayAppearCntPri = appearCntInfo % 1000, appearCntInfo / 1000
 | 
 |  |  |         hourCntPriLimit, dayCntPriLimit = ipyData.GetHourCntPriLimit(), ipyData.GetDayCntPriLimit()
 | 
 |  |  |         if hourCntPriLimit and hourAppearCntPri >= hourCntPriLimit:
 | 
 |  |  |             #超过本小时个人可出现次数上限
 | 
 |  |  |             continue
 | 
 |  |  |         if dayCntPriLimit and dayAppearCntPri >= dayCntPriLimit:
 | 
 |  |  |             #超过今日个人可出现次数上限
 | 
 |  |  |             continue
 | 
 |  |  |         if eventID in PyGameData.g_fairyDomainLimit:
 | 
 |  |  |             #超过全服可出现次数
 | 
 |  |  |             continue
 | 
 |  |  |         rate += ipyData.GetWeight()
 | 
 |  |  |         randomRateList.append([rate, ipyData.GetID()])
 | 
 |  |  |     if not randomRateList:
 | 
 |  |  |         GameWorld.DebugLog('    缥缈仙域刷新池 随机库获取错误 !eventType=%s' % eventType, curPlayer.GetID())
 | 
 |  |  |         GameWorld.DebugLog('    缥缈仙域刷新池 该类型没有符合条件的事件!eventType=%s' % eventType, curPlayer.GetID())
 | 
 |  |  |         return []
 | 
 |  |  |     randomResultList = GameWorld.GetResultByRandomListEx(randomRateList, cnt, [])
 | 
 |  |  |          | 
 |  |  |     realCnt = min(len(randomRateList), cnt)
 | 
 |  |  |     randomResultList = GameWorld.GetResultByRandomListEx(randomRateList, realCnt, [])
 | 
 |  |  |     GameWorld.DebugLog('eventType=%s, cnt=%s,randomRateList=%s,randomResultList=%s' % (eventType, cnt, randomRateList, randomResultList))
 | 
 |  |  |     return randomResultList
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | def GetFairyDomainFBEventState(curPlayer, mapID, lineID):
 | 
 |  |  |     ## 获取缥缈相关副本寻访状态
 | 
 |  |  |     ipyData = IpyGameDataPY.GetIpyGameDataByCondition("FairyDomain", {"MapID":mapID, "LineID":lineID})
 | 
 |  |  |     if not ipyData:
 | 
 |  |  |         return FDEventState_No
 | 
 |  |  |     fdeventID = ipyData.GetID()
 | 
 |  |  |     curState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventState % fdeventID)
 | 
 |  |  |     return curState
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | def SetFairyDomainFBEventState(curPlayer, mapID, lineID, state):
 | 
 |  |  |     ## 设置缥缈相关副本寻访状态
 | 
 |  |  |     ipyData = IpyGameDataPY.GetIpyGameDataByCondition("FairyDomain", {"MapID":mapID, "LineID":lineID})
 | 
 |  |  |     if not ipyData:
 | 
 |  |  |         return False
 | 
 |  |  |     fdeventID = ipyData.GetID()
 | 
 |  |  |     return SetFairyDomainEventState(curPlayer, fdeventID, state)
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | def SetFairyDomainEventState(curPlayer, fdeventID, state):
 | 
 |  |  | 
 |  |  |             GameLogic_CrossGrassland.DoResetCrossGrassland(curPlayer, ipyData.GetEventType(), fdeventID)
 | 
 |  |  |             
 | 
 |  |  |     elif state == FDEventState_Visited:
 | 
 |  |  |         if curState != FDEventState_Visiting:
 | 
 |  |  |             GameWorld.Log('缥缈仙域事件状态设置错误,fdeventID=%s, state=%s, curState=%s' % (fdeventID, state, curState))
 | 
 |  |  |             return
 | 
 |  |  |         #设置结束,暂不做限制,防止异常导致无法结束
 | 
 |  |  | #        if curState != FDEventState_Visiting:
 | 
 |  |  | #            GameWorld.Log('缥缈仙域事件状态设置错误,fdeventID=%s, state=%s, curState=%s' % (fdeventID, state, curState))
 | 
 |  |  | #            return
 | 
 |  |  |         EventShell.EventRespons_FairyDomain(curPlayer)
 | 
 |  |  |     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventState % fdeventID, state)
 | 
 |  |  |     NotifyVisitFairyDomainInfo(curPlayer, [fdeventID], 0)
 | 
 |  |  | 
 |  |  |                 if not gearAwardList:
 | 
 |  |  |                     return
 | 
 |  |  |                 itemRateList = gearAwardList[index] if index < len(gearAwardList) else gearAwardList[-1]
 | 
 |  |  |                 itemRateList = ItemCommon.GetWeightItemListByAlchemyDiffLV(curPlayer, itemRateList, 1)
 | 
 |  |  |                 giveItemList = [GameWorld.GetResultByWeightList(itemRateList)]
 | 
 |  |  |             else:
 | 
 |  |  |                 giveItemList = [ipyData.GetBasicAward()]
 | 
 |  |  | 
 |  |  |     ipyData = IpyGameDataPY.GetIpyGameDataByCondition('FairyDomainAppoint', {'Cnt':visitCnt, 'EventID':fdEventID}, False, False)
 | 
 |  |  |     if not ipyData:
 | 
 |  |  |         return
 | 
 |  |  |     return ipyData.GetAward()
 | 
 |  |  |     job = curPlayer.GetJob()
 | 
 |  |  |     itemList = []
 | 
 |  |  |     for itemInfo in ipyData.GetAward():
 | 
 |  |  |         if type(itemInfo[0]) == dict:
 | 
 |  |  |             if job not in itemInfo[0]:
 | 
 |  |  |                 continue
 | 
 |  |  |             itemList.append([itemInfo[0][job], itemInfo[1], itemInfo[2]])
 | 
 |  |  |         else:
 | 
 |  |  |             itemList.append(itemInfo)
 | 
 |  |  |     return itemList
 |