From e19b08127ac798154fab5f8f11f782e54aaa025b Mon Sep 17 00:00:00 2001 From: xdh <xiefantasy@qq.com> Date: 星期日, 05 五月 2019 14:16:36 +0800 Subject: [PATCH] 6457 缥缈仙域事件设置结束暂不做限制,防止异常导致无法结束 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py | 137 ++++++++++++++++++++++++++++++++++++++------- 1 files changed, 114 insertions(+), 23 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py index 6a26e61..2bcdc4d 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py @@ -21,10 +21,12 @@ import NetPackCommon import ShareDefine import GameWorld +import GameLogic_CrossGrassland import PlayerControl import IpyGameDataPY import PlayerActivity import ItemControler +import PyGameData import EventShell import copy @@ -35,9 +37,9 @@ ( FDEventType0, FDEventType1, -FDEventType2, +FDEventType_GrasslandXian, FDEventType3, -FDEventType4, +FDEventType_GrasslandLing, ) = range(5) ( @@ -62,6 +64,36 @@ 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 @@ -79,15 +111,8 @@ 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 @@ -141,7 +166,15 @@ 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: @@ -168,7 +201,8 @@ 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) #设置初始体力 @@ -178,6 +212,20 @@ #通知 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 @@ -199,15 +247,47 @@ 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): @@ -235,10 +315,16 @@ 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 + #设置结束,暂不做限制,防止异常导致无法结束 +# 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) @@ -247,20 +333,23 @@ 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) @@ -281,6 +370,8 @@ 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 -- Gitblit v1.8.0