From c06d47322d2892a440dc11b94f06950da762e5bd Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期五, 21 六月 2019 19:41:43 +0800
Subject: [PATCH] 7413 宗门试炼评级通知
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py | 102 ++++++++++++++++++++++++++++++++-------------------
1 files changed, 64 insertions(+), 38 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 496f886..c9634b4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerFairyDomain.py
@@ -19,6 +19,7 @@
import ChConfig
import ChPyNetSendPack
import NetPackCommon
+import PlayerBossReborn
import ShareDefine
import GameWorld
import GameLogic_CrossGrassland
@@ -26,12 +27,14 @@
import IpyGameDataPY
import PlayerActivity
import ItemControler
+import ItemCommon
import PyGameData
import EventShell
+import FBCommon
+import NPCCommon
import copy
import random
-import FBCommon
#0-奇遇 1-宝藏 2-仙草 3-妖王 4-灵草
(
@@ -57,6 +60,12 @@
AdventuresType4,
) = range(1, 5)
+#事件副本类型
+(
+FDEventFBType_Client, #前端本0
+FDEventFBType_Server, #本服本1
+FDEventFBType_CrossServer, #跨服本2
+) = range(3)
def OnLogin(curPlayer):
NotifyVisitFairyDomainInfo(curPlayer)
@@ -105,7 +114,7 @@
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
otherCntRateList = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 2)
- maxEventCnt = max([info[1] for info in otherCntRateList]) + 1 #最大可出现事件个数
+ maxEventCnt = GetMaxEventCnt() #最大可出现事件个数
fairyDomainState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainState) #是否寻访中 0未寻访 1寻访中 2任务标记可寻访
if clientData.Type == 1: #结束寻访
if fairyDomainState != 1:
@@ -126,11 +135,11 @@
if fairyDomainState == 1:
GameWorld.DebugLog(" 正在寻访仙域中!请先退出寻访")
return
-
- if fairyDomainState != 2 and not PlayerActivity.AddDailyActionFinishCnt(curPlayer, dailyID):
- GameWorld.DebugLog(" 寻访仙域次数不足!")
+ costPoint = IpyGameDataPY.GetFuncCfg('ImmortalDomainActivePoint', 2)
+ if not PlayerActivity.CostActivityPoint(curPlayer, costPoint, True):
+ GameWorld.DebugLog(" 寻访仙域需要活跃点不足!costPoint=%s"%costPoint)
return
-
+
#随机事件 重置事件状态
visitCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainVisitCnt)
appointIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog('FairyDomainAppoint', visitCnt + 1)
@@ -140,18 +149,19 @@
fdEventIDList.append(appointIpyData.GetEventID())
else:
fdEventTypeDict = {}
- #先随机奇遇事件
- fortuitousEventRate = IpyGameDataPY.GetFuncCfg('ImmortalDomain')
- if GameWorld.CanHappen(fortuitousEventRate):
- fdEventTypeDict[FDEventType0] = 1
-
+ #先随机独立事件
+ singleEventRateDict = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 1, {})
+ for eventType, rate in singleEventRateDict.items():
+ if GameWorld.CanHappen(rate):
+ fdEventTypeDict[eventType] = 1
+
otherCnt = GameWorld.GetResultByRandomList(otherCntRateList, 0)
if otherCnt:
otherEventRateList = copy.deepcopy(IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 3))
unRepeatTypeList = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 4)
for _ in xrange(otherCnt):
- otherEventType = GameWorld.GetResultByRandomList(otherEventRateList, 0)
- if not otherEventType:
+ otherEventType = GameWorld.GetResultByRandomList(otherEventRateList)
+ if otherEventType is None:
continue
if otherEventType in unRepeatTypeList:
for index, info in enumerate(otherEventRateList):
@@ -175,6 +185,12 @@
#更新全服出现次数
msgStr = str(fdEventIDList)
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'AddFairyDomainEvent', msgStr, len(msgStr))
+ if not fdEventIDList:
+ fdEventIDList = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 5)
+ GameWorld.Log('寻访仙域, 没有随机出事件,使用默认事件!! playerLV=%s,visitCnt=%s,默认fdEventIDList=%s'%(curPlayer.GetLV(), visitCnt, fdEventIDList), curPlayer.GetID())
+ if not fdEventIDList:
+ return
+ PlayerActivity.CostActivityPoint(curPlayer, costPoint)
#奇遇事件 随机档位数据
openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
for fdEventID in fdEventIDList:
@@ -186,16 +202,12 @@
continue
conditionList = ipyData.GetCondition()
if not conditionList:
- fdEventIDList.remove(fdEventID)
- continue
- condition = random.choice(conditionList)
- index = conditionList.index(condition)
+ index = 0
+ else:
+ 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
-
+
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainVisitCnt, min(visitCnt + 1, ChConfig.Def_UpperLimit_DWord))
#设置事件
for i in xrange(maxEventCnt):
@@ -212,14 +224,16 @@
#通知
NotifyVisitFairyDomainInfo(curPlayer, fdEventIDList)
NotifyFairyAdventuresInfo(curPlayer)
+
+ PlayerBossReborn.AddBossRebornActionCnt(curPlayer, ChConfig.Def_BRAct_FairyDomain, 1)
return
def EndFairyDomain(curPlayer):
+ GameWorld.DebugLog("EndFairyDomain", curPlayer.GetID())
##结束寻访
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainState, 0)
- otherCntRateList = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 2)
- maxEventCnt = max([info[1] for info in otherCntRateList]) + 1 #最大可出现事件个数
+ maxEventCnt = GetMaxEventCnt() #最大可出现事件个数
for i in xrange(maxEventCnt):
fdEventID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventID % i)
if fdEventID:
@@ -301,14 +315,14 @@
return
if curState == state:
return True
-
+ ipyData = IpyGameDataPY.GetIpyGameData('FairyDomain', fdeventID)
+ if not ipyData:
+ return
if state == FDEventState_Visiting:
if curState != FDEventState_CanVisit:
GameWorld.DebugLog('缥缈仙域事件状态设置错误,fdeventID=%s, state=%s, curState=%s' % (fdeventID, state, curState))
return
- ipyData = IpyGameDataPY.GetIpyGameData('FairyDomain', fdeventID)
- if not ipyData:
- return
+
costEnergy = ipyData.GetCostEnergy()
curEnergy = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEnergy)
if curEnergy < costEnergy:
@@ -325,17 +339,16 @@
# if curState != FDEventState_Visiting:
# GameWorld.Log('缥缈仙域事件状态设置错误,fdeventID=%s, state=%s, curState=%s' % (fdeventID, state, curState))
# return
- EventShell.EventRespons_FairyDomain(curPlayer)
+ EventShell.EventRespons_FairyDomain(curPlayer, ipyData.GetEventType())
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FairyDomainEventState % fdeventID, state)
NotifyVisitFairyDomainInfo(curPlayer, [fdeventID], 0)
return True
-def NotifyVisitFairyDomainInfo(curPlayer, fdEventList=[], isAll=1):
+def NotifyVisitFairyDomainInfo(curPlayer, fdEventList=None, isAll=1):
if not fdEventList:
syncFDEventList = []
- otherCntRateList = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 2)
- maxEventCnt = max([info[1] for info in otherCntRateList]) + 1 #最大可出现事件个数
+ maxEventCnt = GetMaxEventCnt() #最大可出现事件个数
for i in xrange(maxEventCnt):
fdEventID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventID % i)
if fdEventID:
@@ -358,6 +371,11 @@
NetPackCommon.SendFakePack(curPlayer, packData)
return
+def GetMaxEventCnt():
+ # 最大可出现事件个数
+ otherCntRateList = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 2)
+ maxEventCnt = max([info[1] for info in otherCntRateList]) + len(IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain'))
+ return maxEventCnt
###=========================奇遇===============================
def NotifyFairyAdventuresInfo(curPlayer):
@@ -366,8 +384,7 @@
packData = ChPyNetSendPack.tagMCFairyAdventuresInfo()
packData.InfoList = []
- otherCntRateList = IpyGameDataPY.GetFuncEvalCfg('ImmortalDomain', 2)
- maxEventCnt = max([info[1] for info in otherCntRateList]) + 1 #最大可出现事件个数
+ maxEventCnt = GetMaxEventCnt() #最大可出现事件个数
for i in xrange(maxEventCnt):
fdEventID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FairyDomainEventID % i)
if fdEventID not in AdventuresTypeList:
@@ -431,12 +448,14 @@
gearAwardList = ipyData.GetGearAward()
if not gearAwardList:
return
- itemRateList = gearAwardList[index] if index < len(gearAwardList) else gearAwardList[-1]
- giveItemList = [GameWorld.GetResultByWeightList(itemRateList)]
+ giveItemList = []
+ itemRandomList = gearAwardList[index] if index < len(gearAwardList) else gearAwardList[-1]
+ for itemRateList in itemRandomList:
+ itemRateList = ItemCommon.GetWeightItemListByAlchemyDiffLV(curPlayer, itemRateList, 0)
+ giveItemList.append(GameWorld.GetResultByWeightList(itemRateList))
else:
giveItemList = [ipyData.GetBasicAward()]
-
- ItemControler.GivePlayerItemOrMail(curPlayer, giveItemList)
+ NPCCommon.DoGiveItemByVirtualDrop(curPlayer, giveItemList, 0)
msgDict = {FBCommon.Over_itemInfo:FBCommon.GetJsonItemList(giveItemList)}
FBCommon.Notify_FB_Over(curPlayer, msgDict)
GameWorld.DebugLog('缥缈奇遇领奖 msgDict=%s, fdeventID=%s' % (msgDict, fdeventID))
@@ -458,4 +477,11 @@
itemList.append([itemInfo[0][job], itemInfo[1], itemInfo[2]])
else:
itemList.append(itemInfo)
+
+ for itemRateList in ipyData.GetRandomAward():
+ itemRateList = ItemCommon.GetWeightItemListByAlchemyDiffLV(curPlayer, itemRateList, 1)
+ giveItem = GameWorld.GetResultByWeightList(itemRateList)
+ if not giveItem:
+ continue
+ itemList.append(giveItem)
return itemList
--
Gitblit v1.8.0