| | |
| | | import NetPackCommon
|
| | | import ShareDefine
|
| | | import GameWorld
|
| | | import GameLogic_CrossGrassland
|
| | | import PlayerControl
|
| | | import IpyGameDataPY
|
| | | import PlayerActivity
|
| | | import ItemControler
|
| | | import PyGameData
|
| | | import EventShell
|
| | |
|
| | | import copy
|
| | |
| | | (
|
| | | 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
|
| | |
|
| | |
|
| | |
| | |
|
| | | otherCntRateList = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 2)
|
| | | maxEventCnt = max([info[1] for info in otherCntRateList]) + 1 #最大可出现事件个数
|
| | | fairyDomainState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainState) #是否寻访中 0未寻访 1寻访中 2任务标记可寻访
|
| | | fairyDomainState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainState) #是否寻访中 0未寻访 1寻访中 2任务标记可寻访
|
| | | if clientData.Type == 1: #结束寻访
|
| | | 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
|
| | |
|
| | |
| | |
|
| | | #随机事件 重置事件状态
|
| | | visitCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainVisitCnt)
|
| | | appointIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog('FairyDomainAppoint', visitCnt+1)
|
| | | appointIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog('FairyDomainAppoint', visitCnt + 1)
|
| | | if appointIpyDataList:
|
| | | fdEventIDList = []
|
| | | for appointIpyData in appointIpyDataList:
|
| | |
| | | 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:
|
| | | 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))
|
| | |
| | | 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('寻访仙域, 没有随机出事件!!')
|
| | |
| | | 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)
|
| | | #设置初始体力
|
| | |
| | | #֪ͨ
|
| | | 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
|
| | |
|
| | |
|
| | |
| | | #丹炉等级不足
|
| | | continue
|
| | | lvLimit = ipyData.GetNeedLV()
|
| | | if lvLimit and not (lvLimit[0]<=curLV<=lvLimit[1]):
|
| | | 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('缥缈仙域事件状态设置,体力不足!,fdeventID=%s, costEnergy=%s, curEnergy=%s' % (fdeventID, costEnergy, curEnergy))
|
| | | return
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEnergy, curEnergy - costEnergy)
|
| | | |
| | | # 草园重置
|
| | | 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=[]):
|
| | | isAll = 0
|
| | | def NotifyVisitFairyDomainInfo(curPlayer, fdEventList=[], isAll=1):
|
| | | if not fdEventList:
|
| | | isAll = 1
|
| | | 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)
|
| | |
| | | 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
|
| | |
| | | conditionList = ipyData.GetCondition()
|
| | | index = adventuresdata % 100
|
| | | if IpyGameDataPY.GetIpyGameDataByCondition('FairyDomainAppoint', {'Cnt':visitCnt, 'EventID':fdEventID}, False, False):
|
| | | condition = 0 #定制的条件为0
|
| | | condition = 0 #定制的条件为0
|
| | | else:
|
| | | condition = conditionList[index] if index < len(conditionList) else 0
|
| | | adventuresdata = ChPyNetSendPack.tagMCFairyAdventuresData()
|
| | |
| | | giveItemList = GetFairyAppointAward(curPlayer, fdeventID)
|
| | | if not giveItemList:
|
| | | #1-等级奇遇 2-境界奇遇 3-战力奇遇 4-气运奇遇
|
| | | if fdeventID == 1:
|
| | | if fdeventID == AdventuresType1:
|
| | | curData = curPlayer.GetLV()
|
| | | elif fdeventID == 2:
|
| | | elif fdeventID == AdventuresType2:
|
| | | curData = curPlayer.GetOfficialRank()
|
| | | elif fdeventID == 3:
|
| | | elif fdeventID == AdventuresType3:
|
| | | curData = curPlayer.GetFightPower()
|
| | | elif fdeventID == 4:
|
| | | elif fdeventID == AdventuresType4:
|
| | | curData = curPlayer.GetLuckValue()
|
| | | else:
|
| | | return
|
| | |
| | | ipyData = IpyGameDataPY.GetIpyGameDataByCondition('FairyDomainAppoint', {'Cnt':visitCnt, 'EventID':fdEventID}, False, False)
|
| | | if not ipyData:
|
| | | return
|
| | | return ipyData.GetAward() |
| | | return ipyData.GetAward()
|