From 8991be83970f03f8f4baad83767f27586da0eafd Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 20 四月 2019 10:13:44 +0800
Subject: [PATCH] 6459 【后端】【2.0】缥缈仙域开发单(按时间掉血的NPC扣血公式调整)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossGrassland.py | 151 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 151 insertions(+), 0 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossGrassland.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossGrassland.py
index d9fc0c7..0aad972 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossGrassland.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossGrassland.py
@@ -14,3 +14,154 @@
#-------------------------------------------------------------------------------
#"""Version = 2019-04-15 16:30"""
#-------------------------------------------------------------------------------
+
+import GameWorld
+import GameWorldProcess
+import PlayerFairyDomain
+import NPCCustomRefresh
+import IpyGameDataPY
+import PyGameData
+import NPCCommon
+import PlayerControl
+import ChConfig
+
+def DoResetCrossGrassland(curPlayer, eventType, fdeventID):
+ ## 草园重置
+
+ resetCollectType = 10 + eventType
+ NPCCommon.DoResetCollectNPCTimeByType(curPlayer, [resetCollectType])
+
+ # 宝箱怪次数重置
+ if eventType == PlayerFairyDomain.FDEventType_GrasslandXian:
+ npcID = IpyGameDataPY.GetFuncCfg("CrossGrasslandCfg", 1)
+ if npcID:
+ NPCCommon.UpdateNPCAttackCount(curPlayer, npcID, 0)
+
+ return
+
+def __SetGrasslandVisitState(curPlayer, mapID, lineID, state):
+ ipyData = IpyGameDataPY.GetIpyGameDataByCondition("FairyDomain", {"MapID":mapID, "LineID":lineID})
+ if not ipyData:
+ return False
+ eventID = ipyData.GetID()
+ if not PlayerFairyDomain.SetFairyDomainEventState(curPlayer, eventID, state):
+ return False
+ return True
+
+def OnEnterFBEvent(curPlayer, mapID, lineID, tick):
+ if not __SetGrasslandVisitState(curPlayer, mapID, lineID, PlayerFairyDomain.FDEventState_Visiting):
+ return False
+ return True
+
+## 跨服功能线路数据缓存,下次开启同样功能线路时会用该数据进行还原之前的副本状态
+def OnGetCrossFuncLineDataCache():
+ refreshNPCInfo = NPCCustomRefresh.GetCopyMapRandomRefreshNPCInfo()
+ return refreshNPCInfo
+
+## 开启副本
+def OnOpenFB(tick):
+ gameWorld = GameWorld.GetGameWorld()
+ realMapID, copyMapID = gameWorld.GetRealMapID(), gameWorld.GetCopyMapID()
+ key = (realMapID, copyMapID)
+ if key in PyGameData.g_crossFuncLineDataCache:
+ refreshNPCInfo = PyGameData.g_crossFuncLineDataCache.pop(key)
+ GameWorld.DebugLog("副本开启根据保存的虚拟线路标试点刷怪信息刷怪: realMapID=%s,copyMapID=%s,refreshNPCInfo=%s" % (realMapID, copyMapID, refreshNPCInfo))
+ NPCCustomRefresh.OnFBOpenSetRandomRefreshNPCInfo(refreshNPCInfo, tick)
+
+ return
+
+def GetCurFBFuncLineID():
+ ## 获取本线路功能线路ID
+ return GameWorld.GetGameWorld().GetPropertyID() % 10000 / 10
+
+def GetCurFBLineZoneID():
+ ## 获取本线路所属跨服分区
+ return GameWorld.GetGameWorld().GetPropertyID() / 10000
+
+## 进副本
+def DoEnterFB(curPlayer, tick):
+ playerID = curPlayer.GetPlayerID()
+ zoneID = GetCurFBLineZoneID()
+ funcLineID = GetCurFBFuncLineID()
+ GameWorld.Log("DoEnterFB zoneID=%s,funcLineID=%s" % (zoneID, funcLineID), playerID)
+ return
+
+### 副本总逻辑计时器
+#def OnProcess(tick):
+# return
+#
+### 关闭副本
+#def OnCloseFB(tick):
+# return
+#
+### 玩家退出副本
+#def DoExitFB(curPlayer, tick):
+# return
+
+##玩家主动离开副本.
+def DoPlayerLeaveFB(curPlayer, tick):
+
+ gameWorld = GameWorld.GetGameWorld()
+ #最后一人退出副本则关闭地图
+ if gameWorld.GetMapCopyPlayerManager().GetPlayerCount() == 1:
+ GameWorldProcess.CloseFB(tick)
+
+ return
+
+## 客户端进入自定义场景
+def OnEnterCustomScene(curPlayer, mapID, lineID):
+ __SetGrasslandVisitState(curPlayer, mapID, lineID, PlayerFairyDomain.FDEventState_Visiting)
+ return
+
+def DoCheckUpdateGrasslandEnd(curPlayer):
+ ## 检查更新草园已拜访完成
+
+ grasslandMapIDList = [ChConfig.Def_FBMapID_CrossGrasslandLing, ChConfig.Def_FBMapID_CrossGrasslandXian]
+ crossMapID = PlayerControl.GetCrossMapID(curPlayer)
+ clientCustomSceneMapID = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomSceneMapID)
+ if crossMapID in grasslandMapIDList:
+ mapID = crossMapID
+ lineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqCrossFBFuncLine)
+ elif clientCustomSceneMapID in grasslandMapIDList:
+ mapID = clientCustomSceneMapID
+ lineID = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomSceneLineID)
+ else:
+ return
+
+ # 采集次数是否已用完
+ collNPCIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("MapRefreshNPC", mapID)
+ if not collNPCIpyDataList:
+ return
+
+ for collIpyData in collNPCIpyDataList:
+ npcIDList = collIpyData.GetNPCIDList()
+ for npcID in npcIDList:
+ collectNPCIpyData = IpyGameDataPY.GetIpyGameData("CollectNPC", npcID)
+ if not collectNPCIpyData:
+ return
+ limitMaxTime = collectNPCIpyData.GetMaxCollectCount()
+ totalCollTime = NPCCommon.GetTodayCollectCount(curPlayer, npcID)
+ if totalCollTime < limitMaxTime:
+ GameWorld.DebugLog("草园NPC采集次数未用完! npcID=%s,totalCollTime=%s < limitMaxTime=%s" % (npcID, totalCollTime, limitMaxTime))
+ return
+
+ # 宝箱怪攻击次数是否已用完
+ if mapID == ChConfig.Def_FBMapID_CrossGrasslandXian:
+ boxNPCID = IpyGameDataPY.GetFuncCfg("CrossGrasslandCfg", 1)
+ boxNPCIpyData = IpyGameDataPY.GetIpyGameDataNotLog("TreasureNPC", boxNPCID)
+ if not boxNPCIpyData:
+ return
+ attackCountDropWeightInfo = boxNPCIpyData.GetAttackCountDropWeightInfo()
+ if not attackCountDropWeightInfo:
+ return
+ maxAttackCount = max(attackCountDropWeightInfo)
+ attackCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_NPCAttackCount % boxNPCID)
+ if attackCount < maxAttackCount:
+ GameWorld.DebugLog("草园宝箱怪攻击次数未用完! boxNPCID=%s,attackCount=%s < maxAttackCount=%s" % (boxNPCID, attackCount, maxAttackCount))
+ return
+
+ __SetGrasslandVisitState(curPlayer, mapID, lineID, PlayerFairyDomain.FDEventState_Visited)
+ GameWorld.DebugLog("设置草园已完成!mapID=%s, lineID=%s" % (mapID, lineID))
+ return
+
+
--
Gitblit v1.8.0