From 4440c4c4cdcfe8db174b9df9dab19e822a8aca57 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 11 五月 2019 14:58:33 +0800
Subject: [PATCH] 6647 【2.0】【开发】1级登录不设置视野可见
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py | 150 ++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 126 insertions(+), 24 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..8ce2716 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,13 @@
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
@@ -35,9 +38,9 @@
(
FDEventType0,
FDEventType1,
-FDEventType2,
+FDEventType_GrasslandXian,
FDEventType3,
-FDEventType4,
+FDEventType_GrasslandLing,
) = range(5)
(
@@ -62,6 +65,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 +112,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 +167,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 +202,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 +213,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 +248,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 +316,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 +334,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 +371,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
@@ -341,6 +433,7 @@
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()]
@@ -358,4 +451,13 @@
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
--
Gitblit v1.8.0