From cd1c6abe4db4c87fbd7dcd827d2af58a36496cb0 Mon Sep 17 00:00:00 2001 From: hch <305670599@qq.com> Date: 星期五, 26 四月 2019 22:58:25 +0800 Subject: [PATCH] 6613 子 【开发】【2.0】增加重击字体战斗飘字 / 【后端】【2.0】增加重击属性 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 110 insertions(+), 7 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 6d8d8c7..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 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) @@ -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