|  |  | 
 |  |  | import NetPackCommon
 | 
 |  |  | import ShareDefine
 | 
 |  |  | import GameWorld
 | 
 |  |  | import GameLogic_CrossGrassland
 | 
 |  |  | import PlayerControl
 | 
 |  |  | import IpyGameDataPY
 | 
 |  |  | import PlayerActivity
 | 
 |  |  | import ItemControler
 | 
 |  |  | import ItemCommon
 | 
 |  |  | import PyGameData
 | 
 |  |  | import EventShell
 | 
 |  |  | 
 | 
 |  |  | import copy
 | 
 |  |  | import random
 | 
 |  |  | 
 |  |  | (
 | 
 |  |  | FDEventType0,
 | 
 |  |  | FDEventType1,
 | 
 |  |  | FDEventType2,
 | 
 |  |  | FDEventType_GrasslandXian,
 | 
 |  |  | FDEventType3,
 | 
 |  |  | FDEventType4,
 | 
 |  |  | FDEventType_GrasslandLing,
 | 
 |  |  | ) = range(5)
 | 
 |  |  | 
 | 
 |  |  | (
 | 
 |  |  | 
 |  |  | FDEventState_Visited,  #已拜访3
 | 
 |  |  | ) = range(4)
 | 
 |  |  | 
 | 
 |  |  | #1-等级奇遇 2-境界奇遇 3-战力奇遇 4-气运奇遇
 | 
 |  |  | AdventuresTypeList = (
 | 
 |  |  | AdventuresType1,
 | 
 |  |  | AdventuresType2,
 | 
 |  |  | AdventuresType3,
 | 
 |  |  | AdventuresType4,
 | 
 |  |  | ) = range(1, 5)
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | def OnLogin(curPlayer):
 | 
 |  |  |     NotifyVisitFairyDomainInfo(curPlayer)
 | 
 |  |  |     NotifyFairyAdventuresInfo(curPlayer)
 | 
 |  |  |     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
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  | #};
 | 
 |  |  | def OnVisitFairyDomain(index, clientData, tick):
 | 
 |  |  |     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
 | 
 |  |  |     dailyID = ShareDefine.DailyActionID_FairyDomain
 | 
 |  |  |     hasOpen = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_DailyActionState % dailyID)
 | 
 |  |  |     if not hasOpen:
 | 
 |  |  |         GameWorld.DebugLog("    寻访仙域活动未开启!")
 | 
 |  |  |         return
 | 
 |  |  |      | 
 |  |  |     otherCntRateList = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 2)
 | 
 |  |  |     maxEventCnt = max([info[1] for info in otherCntRateList]) + 1  #最大可出现事件个数
 | 
 |  |  |      | 
 |  |  |     fairyDomainState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainState)  #是否寻访中  0未寻访 1寻访中 2任务标记可寻访
 | 
 |  |  |     if clientData.Type == 1:  #结束寻访
 | 
 |  |  |         if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainState):
 | 
 |  |  |         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
 | 
 |  |  |     
 | 
 |  |  |     dailyID = ShareDefine.DailyActionID_FairyDomain
 | 
 |  |  |     hasOpen = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_DailyActionState % dailyID)
 | 
 |  |  |     if fairyDomainState != 2 and not hasOpen:
 | 
 |  |  |         GameWorld.DebugLog("    寻访仙域活动未开启!")
 | 
 |  |  |         return
 | 
 |  |  |      | 
 |  |  |     #是否寻访中
 | 
 |  |  |     if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainState):
 | 
 |  |  |     if fairyDomainState == 1:
 | 
 |  |  |         GameWorld.DebugLog("    正在寻访仙域中!请先退出寻访")
 | 
 |  |  |         return
 | 
 |  |  |     
 | 
 |  |  |     if not PlayerActivity.AddDailyActionFinishCnt(curPlayer, dailyID):
 | 
 |  |  |     if fairyDomainState != 2 and not PlayerActivity.AddDailyActionFinishCnt(curPlayer, dailyID):
 | 
 |  |  |         GameWorld.DebugLog("    寻访仙域次数不足!")
 | 
 |  |  |         return
 | 
 |  |  |     
 | 
 |  |  |     #随机事件 重置事件状态
 | 
 |  |  |     visitCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainVisitCnt)
 | 
 |  |  |     specialVisitDict = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 5, {})
 | 
 |  |  |     maxSpecialCnt = max(specialVisitDict) if specialVisitDict else 0
 | 
 |  |  |     if visitCnt + 1 in specialVisitDict:
 | 
 |  |  |         fdEventIDList = specialVisitDict[visitCnt + 1]
 | 
 |  |  |     appointIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog('FairyDomainAppoint', visitCnt + 1)
 | 
 |  |  |     if appointIpyDataList:
 | 
 |  |  |         fdEventIDList = []
 | 
 |  |  |         for appointIpyData in appointIpyDataList:
 | 
 |  |  |             fdEventIDList.append(appointIpyData.GetEventID())  | 
 |  |  |     else:
 | 
 |  |  |         fdEventTypeDict = {}
 | 
 |  |  |         #先随机奇遇事件
 | 
 |  |  | 
 |  |  |         for eventType, cnt in fdEventTypeDict.items():
 | 
 |  |  |             randomList = __RandomFDEventByType(curPlayer, eventType, cnt)
 | 
 |  |  |             if not randomList:
 | 
 |  |  |                 continue
 | 
 |  |  |              | 
 |  |  |             if eventType == FDEventType0:
 | 
 |  |  |                 #奇遇事件 随机档位数据
 | 
 |  |  |                 openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
 | 
 |  |  |                 for fdEventID in randomList:
 | 
 |  |  |                     ipyData = IpyGameDataPY.InterpolationSearch('FairyAdventures', 'OpenServerDay', openServerDay, {'EventID':randomList[0]})
 | 
 |  |  |                     if not ipyData:
 | 
 |  |  |                         GameWorld.ErrLog('寻访仙域, 奇遇事件没有随机出对应档位 randomList=%s,openServerDay=%s' % (randomList, openServerDay))
 | 
 |  |  |                         continue
 | 
 |  |  |                     conditionList = ipyData.GetCondition()
 | 
 |  |  |                     if not conditionList:
 | 
 |  |  |                         continue
 | 
 |  |  |                     condition = random.choice(conditionList)
 | 
 |  |  |                     index = conditionList.index(condition)
 | 
 |  |  |                     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyAdventuresData % fdEventID, ipyData.GetID() * 100 + index)
 | 
 |  |  |                 NotifyFairyAdventuresInfo(curPlayer)
 | 
 |  |  |                 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:
 | 
 |  |  |         if fdEventID not in AdventuresTypeList:
 | 
 |  |  |             continue
 | 
 |  |  |         ipyData = IpyGameDataPY.InterpolationSearch('FairyAdventures', 'OpenServerDay', openServerDay, {'EventID':fdEventID})
 | 
 |  |  |         if not ipyData:
 | 
 |  |  |             #GameWorld.ErrLog('寻访仙域, 奇遇事件没有随机出对应档位 randomList=%s,openServerDay=%s' % (randomList, openServerDay))
 | 
 |  |  |             continue
 | 
 |  |  |         conditionList = ipyData.GetCondition()
 | 
 |  |  |         if not conditionList:
 | 
 |  |  |             fdEventIDList.remove(fdEventID)
 | 
 |  |  |             continue
 | 
 |  |  |         condition = random.choice(conditionList)
 | 
 |  |  |         index = conditionList.index(condition)
 | 
 |  |  |         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyAdventuresData % fdEventID, ipyData.GetID() * 100 + index)
 | 
 |  |  |      | 
 |  |  |     if not fdEventIDList:
 | 
 |  |  |         GameWorld.Log('寻访仙域, 没有随机出事件!!')
 | 
 |  |  |         return
 | 
 |  |  |     
 | 
 |  |  |     if visitCnt < maxSpecialCnt:
 | 
 |  |  |         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainVisitCnt, visitCnt + 1)
 | 
 |  |  |     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainVisitCnt, min(visitCnt + 1, ChConfig.Def_UpperLimit_DWord))
 | 
 |  |  |     #设置事件
 | 
 |  |  |     for i in xrange(maxEventCnt):
 | 
 |  |  |         fdEventID = fdEventIDList[i] if i < len(fdEventIDList) else 0
 | 
 |  |  |         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventID % i, fdEventID)
 | 
 |  |  |         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventState % fdEventID, FDEventState_CanVisit)
 | 
 |  |  |         if fdEventID:
 | 
 |  |  |             PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventState % fdEventID, FDEventState_CanVisit)
 | 
 |  |  |     #设置寻访中
 | 
 |  |  |     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainState, 1)
 | 
 |  |  |     #设置初始体力
 | 
 |  |  | 
 |  |  |     GameWorld.DebugLog('寻访仙域  随机结果 fdEventIDList=%s, visitCnt=%s' % (fdEventIDList, visitCnt))
 | 
 |  |  |     #֪ͨ
 | 
 |  |  |     NotifyVisitFairyDomainInfo(curPlayer, fdEventIDList)
 | 
 |  |  |     NotifyFairyAdventuresInfo(curPlayer)
 | 
 |  |  |     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
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | 
 |  |  |         return []
 | 
 |  |  |     randomRateList = []
 | 
 |  |  |     rate = 0
 | 
 |  |  |     curAlchemyLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AlchemyLV)
 | 
 |  |  |     curLV = curPlayer.GetLV()
 | 
 |  |  |     for ipyData in ipyDataList:
 | 
 |  |  |         needAlchemyLV = ipyData.GetNeedAlchemyLV()
 | 
 |  |  |         curAlchemyLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AlchemyLV)
 | 
 |  |  |         if curAlchemyLV < needAlchemyLV - 1:
 | 
 |  |  |             #丹炉等级不足
 | 
 |  |  |             continue
 | 
 |  |  |         lvLimit = ipyData.GetNeedLV()
 | 
 |  |  |         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):
 | 
 |  |  | 
 |  |  |         GameWorld.Log('缥缈仙域事件状态设置错误,state=%s' % state)
 | 
 |  |  |         return
 | 
 |  |  |     curState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventState % fdeventID)
 | 
 |  |  |     if not curState:
 | 
 |  |  |         #没有该事件
 | 
 |  |  |         return
 | 
 |  |  |     if curState == state:
 | 
 |  |  |         return True
 | 
 |  |  |      | 
 |  |  |     if state == FDEventState_Visiting:
 | 
 |  |  |         if curState != FDEventState_CanVisit:
 | 
 |  |  |             GameWorld.Log('缥缈仙域事件状态设置错误,fdeventID=%s, state=%s, curState=%s' % (fdeventID, state, curState))
 | 
 |  |  |             GameWorld.DebugLog('缥缈仙域事件状态设置错误,fdeventID=%s, state=%s, curState=%s' % (fdeventID, state, curState))
 | 
 |  |  |             return
 | 
 |  |  |         ipyData = IpyGameDataPY.GetIpyGameData('FairyDomain', fdeventID)
 | 
 |  |  |         if not ipyData:
 | 
 |  |  | 
 |  |  |             GameWorld.Log('缥缈仙域事件状态设置,体力不足!,fdeventID=%s, costEnergy=%s, curEnergy=%s' % (fdeventID, costEnergy, curEnergy))
 | 
 |  |  |             return
 | 
 |  |  |         PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEnergy, curEnergy - costEnergy)
 | 
 |  |  |     elif state == FDEventState_Visited:
 | 
 |  |  |         if curState != FDEventState_Visiting:
 | 
 |  |  |             GameWorld.Log('缥缈仙域事件状态设置错误,fdeventID=%s, state=%s, curState=%s' % (fdeventID, state, curState))
 | 
 |  |  |             return
 | 
 |  |  |         
 | 
 |  |  |         # 草园重置
 | 
 |  |  |         if ipyData.GetEventType() in [FDEventType_GrasslandXian, FDEventType_GrasslandLing]:
 | 
 |  |  |             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
 | 
 |  |  |         EventShell.EventRespons_FairyDomain(curPlayer)
 | 
 |  |  |     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventState % fdeventID, state)
 | 
 |  |  |     NotifyVisitFairyDomainInfo(curPlayer, [fdeventID])
 | 
 |  |  |     NotifyVisitFairyDomainInfo(curPlayer, [fdeventID], 0)
 | 
 |  |  |     return True
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | def NotifyVisitFairyDomainInfo(curPlayer, fdEventList=[]):
 | 
 |  |  | def NotifyVisitFairyDomainInfo(curPlayer, fdEventList=[], isAll=1):
 | 
 |  |  |     if not fdEventList:
 | 
 |  |  |         syncFDEventList = []
 | 
 |  |  |         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:
 | 
 |  |  |                 fdEventList.append(fdEventID)
 | 
 |  |  |              | 
 |  |  |                 syncFDEventList.append(fdEventID)
 | 
 |  |  |     else:
 | 
 |  |  |         syncFDEventList = fdEventList
 | 
 |  |  | 
 | 
 |  |  |     packData = ChPyNetSendPack.tagMCFairyDomainInfo()
 | 
 |  |  |     packData.IsAll = isAll
 | 
 |  |  |     packData.State = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainState)
 | 
 |  |  |     packData.Energy = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEnergy)
 | 
 |  |  |     packData.VisitCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainVisitCnt)
 | 
 |  |  |     packData.InfoList = []
 | 
 |  |  |     for fdeventID in fdEventList:
 | 
 |  |  |     for fdeventID in syncFDEventList:
 | 
 |  |  |         fdeventData = ChPyNetSendPack.tagMCFairyDomainEvent()
 | 
 |  |  |         fdeventData.EventID = fdeventID
 | 
 |  |  |         fdeventData.EventState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventState % fdeventID)
 | 
 |  |  | 
 |  |  | ###=========================奇遇===============================
 | 
 |  |  | def NotifyFairyAdventuresInfo(curPlayer):
 | 
 |  |  |     ##通知奇遇信息
 | 
 |  |  |     visitCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainVisitCnt)
 | 
 |  |  | 
 | 
 |  |  |     packData = ChPyNetSendPack.tagMCFairyAdventuresInfo()
 | 
 |  |  |     packData.InfoList = []
 | 
 |  |  |     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 not in AdventuresTypeList:
 | 
 |  |  |             continue
 | 
 |  |  |         adventuresdata = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyAdventuresData % fdEventID)
 | 
 |  |  |         if not adventuresdata:
 | 
 |  |  |             continue
 | 
 |  |  | 
 |  |  |             continue
 | 
 |  |  |         conditionList = ipyData.GetCondition()
 | 
 |  |  |         index = adventuresdata % 100
 | 
 |  |  |         condition = conditionList[index] if index < len(conditionList) else 0
 | 
 |  |  |         if IpyGameDataPY.GetIpyGameDataByCondition('FairyDomainAppoint', {'Cnt':visitCnt, 'EventID':fdEventID}, False, False):
 | 
 |  |  |             condition = 0  #定制的条件为0
 | 
 |  |  |         else:
 | 
 |  |  |             condition = conditionList[index] if index < len(conditionList) else 0
 | 
 |  |  |         adventuresdata = ChPyNetSendPack.tagMCFairyAdventuresData()
 | 
 |  |  |         adventuresdata.Gear = index + 1
 | 
 |  |  |         adventuresdata.Condition = condition
 | 
 |  |  | 
 |  |  |         if fdeventID != ipyData.GetEventID():
 | 
 |  |  |             GameWorld.Log('奇遇领取奖励 事件ID错误!')
 | 
 |  |  |             return
 | 
 |  |  |         #1-等级奇遇 2-境界奇遇 3-战力奇遇 4-气运奇遇
 | 
 |  |  |         if fdeventID == 1:
 | 
 |  |  |             curData = curPlayer.GetLV()
 | 
 |  |  |         elif fdeventID == 2:
 | 
 |  |  |             curData = curPlayer.GetOfficialRank()
 | 
 |  |  |         elif fdeventID == 3:
 | 
 |  |  |             curData = curPlayer.GetFightPower()
 | 
 |  |  |         elif fdeventID == 4:
 | 
 |  |  |             curData = curPlayer.GetLuckValue()
 | 
 |  |  |         else:
 | 
 |  |  |             return
 | 
 |  |  |         if curData >= condition:
 | 
 |  |  |             gearAwardList = ipyData.GetGearAward()
 | 
 |  |  |             if not gearAwardList:
 | 
 |  |  |         giveItemList = GetFairyAppointAward(curPlayer, fdeventID)
 | 
 |  |  |         if not giveItemList:
 | 
 |  |  |             #1-等级奇遇 2-境界奇遇 3-战力奇遇 4-气运奇遇
 | 
 |  |  |             if fdeventID == AdventuresType1:
 | 
 |  |  |                 curData = curPlayer.GetLV()
 | 
 |  |  |             elif fdeventID == AdventuresType2:
 | 
 |  |  |                 curData = curPlayer.GetOfficialRank()
 | 
 |  |  |             elif fdeventID == AdventuresType3:
 | 
 |  |  |                 curData = curPlayer.GetFightPower()
 | 
 |  |  |             elif fdeventID == AdventuresType4:
 | 
 |  |  |                 curData = curPlayer.GetLuckValue()
 | 
 |  |  |             else:
 | 
 |  |  |                 return
 | 
 |  |  |             itemRateList = gearAwardList[index] if index < len(gearAwardList) else gearAwardList[-1]
 | 
 |  |  |             itemInfo = GameWorld.GetResultByWeightList(itemRateList)
 | 
 |  |  |         else:
 | 
 |  |  |             itemInfo = ipyData.GetBasicAward()
 | 
 |  |  |             if curData >= condition:
 | 
 |  |  |                 gearAwardList = ipyData.GetGearAward()
 | 
 |  |  |                 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()]
 | 
 |  |  |                 
 | 
 |  |  |         ItemControler.GivePlayerItemOrMail(curPlayer, [itemInfo])
 | 
 |  |  |         msgDict = {FBCommon.Over_itemInfo:FBCommon.GetJsonItemList([itemInfo])}
 | 
 |  |  |         ItemControler.GivePlayerItemOrMail(curPlayer, giveItemList)
 | 
 |  |  |         msgDict = {FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(giveItemList)}
 | 
 |  |  |         FBCommon.Notify_FB_Over(curPlayer, msgDict)
 | 
 |  |  |         GameWorld.DebugLog('缥缈奇遇领奖 msgDict=%s, fdeventID=%s' % (msgDict, fdeventID))
 | 
 |  |  |     return
 | 
 |  |  | 
 | 
 |  |  | 
 | 
 |  |  | def GetFairyAppointAward(curPlayer, fdEventID):
 | 
 |  |  |     ##获取事件定制奖励, 没有的给正常奖励
 | 
 |  |  |     visitCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainVisitCnt)
 | 
 |  |  |     ipyData = IpyGameDataPY.GetIpyGameDataByCondition('FairyDomainAppoint', {'Cnt':visitCnt, 'EventID':fdEventID}, False, False)
 | 
 |  |  |     if not ipyData:
 | 
 |  |  |         return
 | 
 |  |  |     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
 |