From 857de8ae5da7e89ca7f3702579ceee2de176c851 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期一, 29 四月 2019 21:40:12 +0800
Subject: [PATCH] 6603 【后端】【2.0】增加新版的sp和被动技能 - 暴击概率
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py | 125 ++++++++++++++++++++++++++++++++++++++---
1 files changed, 114 insertions(+), 11 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
index d226d1e..ee6d852 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
@@ -18,9 +18,11 @@
import IPY_GameWorld
import PlayerControl
import GameWorldProcess
-import PlayerMergeEvent
+import CrossRealmPlayer
+import PlayerSuccess
import ReadChConfig
import ShareDefine
+import PyGameData
import FBCommon
import GameMap
import GameObj
@@ -484,6 +486,29 @@
def DoEnterFBLogic(curPlayer, tick):
curPlayerID = curPlayer.GetID()
+ if GameWorld.IsCrossServer():
+ mapID = GameWorld.GetMap().GetMapID()
+ mapID = FBCommon.GetRecordMapID(mapID)
+ if mapID in ChConfig.Def_CrossDynamicLineMap:
+ fbZoneID = FBCommon.GetCrossDynamicLineMapZoneID()
+ fbFuncLineID = FBCommon.GetCrossDynamicLineMapFuncLineID()
+ playerZoneID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqCrossFBZoneID)
+ playerFuncLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqCrossFBFuncLine)
+ if fbZoneID != playerZoneID or fbFuncLineID != playerFuncLineID:
+ GameWorld.ErrLog("DoEnterFB 玩家与当前副本线路所属分区或功能分线不同,踢出玩家!fbZoneID=%s,playerZoneID=%s,fbFuncLineID=%s,playerFuncLineID=%s"
+ % (fbZoneID, playerZoneID, fbFuncLineID, playerFuncLineID), curPlayerID)
+ CrossRealmPlayer.PlayerExitCrossServer(curPlayer)
+ return
+ GameWorld.Log("玩家进入跨服副本动态分配的线路: fbZoneID=%s,playerZoneID=%s,fbFuncLineID=%s,playerFuncLineID=%s"
+ % (fbZoneID, playerZoneID, fbFuncLineID, playerFuncLineID), curPlayerID)
+
+ gameWorld = GameWorld.GetGameWorld()
+ copyMapID = gameWorld.GetCopyMapID()
+ if copyMapID not in PyGameData.g_crossPlayerServerGroupIDInfo:
+ PyGameData.g_crossPlayerServerGroupIDInfo[copyMapID] = {}
+ playerServerGroupIDDict = PyGameData.g_crossPlayerServerGroupIDInfo[copyMapID]
+ playerServerGroupIDDict[curPlayerID] = PlayerControl.GetPlayerServerGroupID(curPlayer)
+
# 自伸缩副本根据玩家进入开启,主动调用一次,避免间隔调用时机未触发导致逻辑错乱
GameWorldProcess.EnterOpenFB(tick)
@@ -517,12 +542,15 @@
#注册玩家离开副本时间
gameFBMgr.SetPlayerLogoffTick(0)
+ PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_EnterMap, 1, [gameMapID])
+
if gameFBMgr.HaveFBPlayer(curPlayerID):
#已经注册了这个玩家, 不清除已注册的玩家的字典信息
return
#注册进入这个副本的玩家
gameFBMgr.AddFBPlayer(curPlayerID)
+
return
def DoEnterFB(curPlayer, tick):
@@ -695,9 +723,6 @@
if callFunc:
#GameWorld.Log("副本逻辑不可使用 GameLogic_%d"%(mapID))
callFunc(curPlayer , tick)
-
- #有玩家离开副本广播一次
- PlayerMergeEvent.BroadcastMergePlayerEvent()
#如果是最后一个人离开副本, 那么设置副本的离开时间, 5分钟后副本关闭
__PlayerLeaveSetPlayerLogoffTick(curPlayer, tick)
@@ -1229,7 +1254,11 @@
def PlayerLoginInFBCheck(curPlayer, tick):
gameMap = GameWorld.GetMap()
#如果此地图是自动释放的, 需要检查这个玩家
- if gameMap.GetMapFBType() in [IPY_GameWorld.fbtNull, IPY_GameWorld.fbtCrossVSRoom]:
+ if gameMap.GetMapFBType() in [IPY_GameWorld.fbtNull]:
+ return False
+
+ #跨服服务器是直接注册的地图ID数据,地图肯定没有该玩家,所以不判断
+ if GameWorld.IsCrossServer():
return False
#玩家 在副本中,并且副本不踢出玩家下线
@@ -1263,9 +1292,6 @@
# @return mapID
# @remarks 函数详细说明.
def __GetFBLogic_MapID(mapID):
- #ManorWarMapIDList = ReadChConfig.GetEvalChConfig("ManorWarMapID")
- #if mapID in ManorWarMapIDList:
- # return 'ManorWar'
mapID = FBCommon.GetRecordMapID(mapID)
for key, value in ChConfig.Def_FB_MapID.items():
if mapID in value:
@@ -1554,9 +1580,10 @@
callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnGetFBEnterPos"))
if callFunc == None:
- return
-
- posInfo = callFunc(curPlayer, mapID, lineId, ipyEnterPosInfo, tick)
+ posInfo = ipyEnterPosInfo
+ else:
+ posInfo = callFunc(curPlayer, mapID, lineId, ipyEnterPosInfo, tick)
+
if not posInfo:
return
enterX, enterY = posInfo[:2]
@@ -2142,6 +2169,82 @@
return callFunc(curPlayer, tick)
+## 客户端进入自定义场景
+def OnEnterCustomScene(curPlayer, mapID, lineID):
+ do_FBLogic_ID = __GetFBLogic_MapID(mapID)
+
+ callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnEnterCustomScene"))
+
+ if callFunc == None:
+ return
+
+ return callFunc(curPlayer, mapID, lineID)
+
+## 客户端发送刷新自定义副本奖励
+def OnRefreshCustomFBPrize(curPlayer, mapID, lineID):
+ do_FBLogic_ID = __GetFBLogic_MapID(mapID)
+
+ callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnRefreshCustomFBPrize"))
+
+ if callFunc == None:
+ return []
+
+ return callFunc(curPlayer, mapID, lineID)
+
+## 给自定义副本奖励后续处理
+## @return: 返回结算副本over信息字典,不含jsonItem信息
+def OnGiveCustomFBPrizeOK(curPlayer, mapID, lineID):
+ do_FBLogic_ID = __GetFBLogic_MapID(mapID)
+
+ callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnGiveCustomFBPrizeOK"))
+
+ if callFunc == None:
+ return {}
+
+ return callFunc(curPlayer, mapID, lineID)
+
+## 进入跨服副本注册数据前逻辑
+## @return: 是否可以注册前往跨服副本,次函数中可以写一些扣除消耗逻辑等
+def OnRegEnterCrossFB(curPlayer, mapID, lineID):
+ do_FBLogic_ID = __GetFBLogic_MapID(mapID)
+
+ callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnRegEnterCrossFB"))
+
+ if callFunc == None:
+ return True
+
+ return callFunc(curPlayer, mapID, lineID)
+
+## 结束跨服副本
+def OnEndCrossFB(curPlayer, mapID, lineID, exData):
+ do_FBLogic_ID = __GetFBLogic_MapID(mapID)
+
+ callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnEndCrossFB"))
+
+ if callFunc == None:
+ return
+
+ return callFunc(curPlayer, mapID, lineID, exData)
+
+## 跨服功能线路数据缓存,下次开启同样功能线路时会用该数据进行还原之前的副本状态
+def OnGetCrossFuncLineDataCache():
+ do_FBLogic_ID = __GetFBLogic_MapID(GameWorld.GetMap().GetMapID())
+ callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnGetCrossFuncLineDataCache"))
+ if callFunc == None:
+ return
+ return callFunc()
+
+## 是否需要做进入副本通用检查条件逻辑,默认需要检查
+def OnNeedCheckCanEnterFBComm(curPlayer, mapID, lineID):
+ do_FBLogic_ID = __GetFBLogic_MapID(mapID)
+
+ callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnNeedCheckCanEnterFBComm"))
+
+ if callFunc == None:
+ return True
+
+ return callFunc(curPlayer, mapID, lineID)
+
def OnPlayerLVUp(curPlayer):
## 玩家升级
do_FBLogic_ID = __GetFBLogic_MapID(GameWorld.GetMap().GetMapID())
--
Gitblit v1.8.0