From 0b314dd1d9f0c39e8d86de7e996c62836aa19aca Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 03 十一月 2025 15:01:04 +0800
Subject: [PATCH] 16 卡牌服务端(删除翅膀;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py | 366 ++++++++++-----------------------------------------
1 files changed, 73 insertions(+), 293 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 f30cd89..abb555a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
@@ -20,14 +20,10 @@
import GameWorldProcess
import CrossRealmPlayer
import DataRecordPack
-import IpyGameDataPY
-import PlayerSuccess
import ReadChConfig
-import PlayerAssist
import ShareDefine
import PyGameData
import FBCommon
-import GameMap
import GameObj
import random
@@ -275,12 +271,6 @@
# @return None
# @remarks 函数详细说明.
def DoFB_Player_KillNPC(curPlayer , curNPC , tick):
- mapID = PlayerControl.GetCustomMapID(curPlayer)
- lineID = PlayerControl.GetCustomLineID(curPlayer)
- if mapID:
- DoCustomScene_Player_KillNPC(curPlayer, curNPC, mapID, lineID)
- return
-
do_FBLogic_ID = __GetFBLogic_MapID(GameWorld.GetMap().GetMapID())
callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "DoFB_Player_KillNPC"))
@@ -368,9 +358,7 @@
# @return None
# @remarks 函数详细说明.
def DoFBOnKill_Player(curPlayer, defender, tick):
- mapID = PlayerControl.GetCustomMapID(curPlayer)
- if not mapID:
- mapID = GameWorld.GetMap().GetMapID()
+ mapID = GameWorld.GetMap().GetMapID()
do_FBLogic_ID = __GetFBLogic_MapID(mapID)
callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "DoFBOnKill_Player"))
@@ -441,23 +429,7 @@
callFunc(curPlayer, rebornType, tick)
return
-#---------------------------------------------------------------------
-## 获得副本当前信息
-# @param curPlayer 当前玩家
-# @param tick 当前时间
-# @return None
-# @remarks 函数详细说明.
-def DoGetFBState(curPlayer, tick):
- do_FBLogic_ID = __GetFBLogic_MapID(GameWorld.GetMap().GetMapID())
-
- callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "DoGetFBState"))
-
- if callFunc:
- #GameWorld.Log("副本逻辑不可使用 GameLogic_%d"%(mapID))
- return callFunc(curPlayer, tick)
-
- return
-#---------------------------------------------------------------------
+
## 获得副本帮助
# @param curPlayer 当前玩家
# @param tick 当前时间
@@ -523,7 +495,7 @@
playerZoneID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqCrossFBZoneID)
playerFuncLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ReqCrossFBFuncLine)
# 跨服排位分区与玩家分区可能不一样
- if (fbZoneID != playerZoneID or fbFuncLineID != playerFuncLineID) and mapID not in [ChConfig.Def_FBMapID_CrossChampionship]:
+ if (fbZoneID != playerZoneID or fbFuncLineID != playerFuncLineID) and mapID not in []:
GameWorld.ErrLog("DoEnterFB 玩家与当前副本线路所属分区或功能分线不同,踢出玩家!fbZoneID=%s,playerZoneID=%s,fbFuncLineID=%s,playerFuncLineID=%s"
% (fbZoneID, playerZoneID, fbFuncLineID, playerFuncLineID), curPlayerID)
CrossRealmPlayer.PlayerExitCrossServer(curPlayer)
@@ -557,7 +529,6 @@
#成长NPC所需数据初始化
InitFBNPCStrengthenData(curPlayer, gameMap)
- PlayerAssist.OnPlayerEnterAssistFB(curPlayer, gameMapID, reqFuncLineID)
DoEnterFB(curPlayer, tick)
RecordFirstEnterMap(curPlayer, gameMapID)
@@ -577,8 +548,6 @@
#注册玩家离开副本时间
gameFBMgr.SetPlayerLogoffTick(0)
-
- PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_EnterMap, 1, [gameMapID])
if gameFBMgr.HaveFBPlayer(curPlayerID):
#已经注册了这个玩家, 不清除已注册的玩家的字典信息
@@ -600,18 +569,6 @@
#扣费一般都是在进入副本逻辑里处理,免费只有一次性的,所以放在后面进行重置,防止一直免费
if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFBFree):
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_EnterFBFree, 0)
- return
-
-def OnCallHelpBattleOK(curPlayer, tick):
- ## 召唤助战完成
- do_FBLogic_ID = __GetFBLogic_MapID(GameWorld.GetMap().GetMapID())
-
- callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnCallHelpBattleOK"))
-
- if callFunc != None:
- GameWorld.Log("OnCallHelpBattleOK...", curPlayer.GetPlayerID())
- callFunc(curPlayer, tick)
-
return
def InitFBNPCStrengthenData(curPlayer, gameMap):
@@ -977,18 +934,6 @@
callFunc(tick)
return
-def OnCustomSceneProcess(curPlayer, tick):
- customMapID = PlayerControl.GetCustomMapID(curPlayer)
- if not customMapID:
- return
- customLineID = PlayerControl.GetCustomLineID(curPlayer)
- do_FBLogic_ID = __GetFBLogic_MapID(customMapID)
- callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnCustomSceneProcess"))
- if callFunc:
- callFunc(curPlayer, customMapID, customLineID, tick)
-
- return
-
## 开始采集
# @param curPlayer 当前玩家
# @param curNPC 当前NPC
@@ -1118,13 +1063,6 @@
def OnFBPlayerOnDay(curPlayer, onDayType):
for key, mapIDList in ChConfig.Def_FB_MapID.items():
if not mapIDList:
- continue
- mapID = mapIDList[0]
- ipyData = FBCommon.GetFBIpyData(mapID)
- if ipyData and ipyData.GetDayResetType():
- if onDayType != ipyData.GetDayResetType():
- continue
- elif onDayType != ShareDefine.Def_OnEventTypeEx:
continue
callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (key, "OnFBPlayerOnDay"))
if callFunc:
@@ -1317,23 +1255,6 @@
return callFunc(curPlayer)
#---------------------------------------------------------------------
-## 玩家主动离开副本
-# @param curPlayer 当前玩家
-# @param tick 当前时间
-# @return None or False
-# @remarks 函数详细说明.
-def OnExitEvent(curPlayer, tick):
- do_FBLogic_ID = __GetFBLogic_MapID(GameWorld.GetMap().GetMapID())
-
- callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnExitEvent"))
-
- if callFunc == None:
- #GameWorld.Log("副本逻辑不可使用 GameLogic_%d"%(mapID))
- return False
-
- callFunc(curPlayer, tick)
- return
-#---------------------------------------------------------------------
## 玩家刚登陆时,要判断玩家是否还属于这个副本
# @param curPlayer 当前玩家
# @param tick 当前时间
@@ -1385,9 +1306,6 @@
if mapID in value:
return key
- if mapID in FBCommon.GetGeneralTrainMapIDList():
- return "GeneralTrain"
-
#for key , value in ReadChConfig.GetEvalChConfig("MapID_ProcessPy").items():
# if mapID in value:
# return key
@@ -1556,21 +1474,6 @@
return callFunc()
-
-## 获得特殊副本npc掉落金钱
-# @param curPlayer
-# @return None
-def OnGetNPCExp(curPlayer, curNPC):
- do_FBLogic_ID = __GetFBLogic_MapID(GameWorld.GetMap().GetMapID())
-
- callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnGetNPCExp"))
-
- if not callFunc:
- return 0
-
-
- return callFunc(curPlayer, curNPC)
-
## 获得外层经验倍率
def OnGetOuterExpRate(curPlayer):
do_FBLogic_ID = __GetFBLogic_MapID(GameWorld.GetMap().GetMapID())
@@ -1597,36 +1500,21 @@
return callFunc(curPlayer, addExp, expViewType)
-## 获得多倍副本奖励
-# @param curPlayer 当前玩家
-# @param mapID
-# @param lineID
-# @param prizeExLV 额外奖励百分比等级
-# @return
-def OnGetMultiFBPrize(curPlayer, mapID, lineID, prizeExLV):
- do_FBLogic_ID = __GetFBLogic_MapID(mapID)
-
- callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnGetMultiFBPrize"))
-
- if callFunc == None:
- return
-
- return callFunc(curPlayer, mapID, lineID, prizeExLV)
-
-## 副本扫荡询问
-def OnPlayerFBSweepAsk(curPlayer, mapID, lineID, cnt, isFinish, dataEx):
+def OnPlayerFBSweepAsk(curPlayer, mapID, lineID, cnt, dataEx):
+ ## 副本扫荡询问
+ # @return: None - 不可扫荡
+ # @return: 非None - 可以扫荡,且返回值直接传给 OnPlayerFBSweepResult
do_FBLogic_ID = __GetFBLogic_MapID(mapID)
callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnPlayerFBSweepAsk"))
- # 没有额外条件判断默认返回True
if callFunc == None:
- return True
+ return
- return callFunc(curPlayer, mapID, lineID, cnt, isFinish, dataEx)
+ return callFunc(curPlayer, mapID, lineID, cnt, dataEx)
-## 副本扫荡结果
-def OnPlayerFBSweepResult(curPlayer, mapID, lineID, cnt, isFinish, dataEx):
+def OnPlayerFBSweepResult(curPlayer, mapID, lineID, cnt, dataEx, askRet):
+ ## 副本扫荡结果
do_FBLogic_ID = __GetFBLogic_MapID(mapID)
callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnPlayerFBSweepResult"))
@@ -1634,18 +1522,7 @@
if callFunc == None:
return False
- return callFunc(curPlayer, mapID, lineID, cnt, isFinish, dataEx)
-
-## 副本助战扫荡结果
-def OnPlayerFBHelpBattleSweepResult(curPlayer, mapID, lineID, helpBattlePlayerDict):
- do_FBLogic_ID = __GetFBLogic_MapID(mapID)
-
- callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnPlayerFBHelpBattleSweepResult"))
-
- if callFunc == None:
- return False
-
- return callFunc(curPlayer, mapID, lineID, helpBattlePlayerDict)
+ return callFunc(curPlayer, mapID, lineID, cnt, dataEx, askRet)
## 开始公共CD副本扫荡
def OnStartPubCDFBSweep(curPlayer, mapID, lineID, cnt, dataEx):
@@ -1842,22 +1719,6 @@
return
-## NPC攻击成功后FB处理(说明:进入这个函数的时候,怪物已经死亡,掉落经验等都处理过了)
-# @param curNPC 攻击方
-# @param target 防守方
-# @param tick 当前时间
-# @return None
-# @remarks 函数详细说明.
-def DoOverNPCAttackSuccess(curNPC, target, tick):
- do_FBLogic_ID = __GetFBLogic_MapID(GameWorld.GetMap().GetMapID())
-
- callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "DoOverNPCAttackSuccess"))
-
- if callFunc:
- callFunc(curNPC, target, tick)
-
- return
-
## 玩家死亡
# @param curPlayer:死亡的玩家
# @return None
@@ -1948,24 +1809,7 @@
return ''
return callFunc(curPlayer, lineId)
-#---------------------------------------------------------------------
-##副本使用特殊功能(技能)
-# @param curPlayer 玩家实例
-# @param useType 使用类型
-# @param useState 使用状态
-# @return 无意义
-# @remarks 副本使用特殊技能
-def UseFBSpecilSkill(curPlayer, useType, useState, tick):
- do_FBLogic_ID = __GetFBLogic_MapID(GameWorld.GetMap().GetMapID())
-
- callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "UseFBSpecilSkill"))
-
- if callFunc == None:
- return
-
- return callFunc(curPlayer, useType, useState, tick)
-
##副本有NPC重生
# @param curNPC:
# @param tick:tick
@@ -2346,72 +2190,6 @@
callFunc(curPlayer, curNPC, tick)
return
-## 客户端发送结束副本
-def OnClientEndFB(curPlayer, mapID, lineID, dataList):
- do_FBLogic_ID = __GetFBLogic_MapID(mapID)
-
- callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnClientEndFB"))
-
- if callFunc == None:
- return False
-
- return callFunc(curPlayer, mapID, lineID, dataList)
-
-## 客户端发送开始副本
-def OnClientStartFB(curPlayer, tick):
- do_FBLogic_ID = __GetFBLogic_MapID(GameWorld.GetMap().GetMapID())
-
- callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnClientStartFB"))
-
- if callFunc == None:
- return False
-
- 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 OnCanSummonPriWoodPile(curPlayer, mapID, lineID, npcID, count):
- do_FBLogic_ID = __GetFBLogic_MapID(mapID)
-
- callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnCanSummonPriWoodPile"))
-
- if callFunc == None:
- return True
-
- return callFunc(curPlayer, mapID, lineID, npcID, count)
-
-## 自定义场景副本击杀NPC
-def DoCustomScene_Player_KillNPC(curPlayer, curNPC, mapID, lineID):
- do_FBLogic_ID = __GetFBLogic_MapID(mapID)
-
- callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "DoCustomScene_Player_KillNPC"))
-
- if callFunc:
- callFunc(curPlayer, curNPC, mapID, lineID)
-
- return
-
-## 自定义场景采集OK,需自带是否允许采集的判断
-def OnCustomSceneCollectOK(curPlayer, mapID, lineID, npcID):
- do_FBLogic_ID = __GetFBLogic_MapID(mapID)
-
- callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnCustomSceneCollectOK"))
-
- if callFunc:
- return callFunc(curPlayer, mapID, lineID, npcID)
-
- return
-
## 进入跨服副本注册数据前逻辑
## @return: 是否可以注册前往跨服副本,次函数中可以写一些扣除消耗逻辑等
def OnRegEnterCrossFB(curPlayer, mapID, lineID):
@@ -2443,41 +2221,78 @@
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())
- callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnPlayerLVUp"))
- if callFunc == None:
- return False
- return callFunc(curPlayer)
-
def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList):
## 回合战斗请求 - 地图验证
- # @return: 是否允许
+ # @return: 是否允许, 后端验证通过的funcLineID
do_FBLogic_ID = __GetFBLogic_MapID(mapID)
callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnTurnFightRequest"))
if callFunc == None:
# 默认不限制
- return True
+ return True, funcLineID
return callFunc(curPlayer, mapID, funcLineID, tagType, tagID, valueList)
-def OnTurnFightOver(curPlayer, mapID, funcLineID, tagType, tagID, valueList, fightRet):
+def GetFBPlayerLineupID(curPlayer, mapID, funcLineID):
+ ## 获取玩家使用的攻防阵容ID
+ # @return: 攻击方阵容ID, 防守方阵容ID
+ do_FBLogic_ID = __GetFBLogic_MapID(mapID)
+
+ callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "GetFBPlayerLineupID"))
+
+ if callFunc == None:
+ # 默认不限制
+ return ShareDefine.Lineup_Main, ShareDefine.Lineup_Main
+
+ return callFunc(curPlayer, mapID, funcLineID)
+
+def GetFBNPCLineupInfo(curPlayer, mapID, funcLineID):
+ ## 获取NPC阵容相关
+ # @return: npcLineupIDList, strongerLV, difficulty
+ do_FBLogic_ID = __GetFBLogic_MapID(mapID)
+
+ callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "GetFBNPCLineupInfo"))
+ if callFunc == None:
+ return
+
+ return callFunc(curPlayer, mapID, funcLineID)
+
+def GetFBNPCInitAttr(curPlayer, turnFight, npcObj):
+ ## 获取副本指定NPC初始化属性
+ do_FBLogic_ID = __GetFBLogic_MapID(turnFight.mapID)
+
+ callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "GetFBNPCInitAttr"))
+ if callFunc == None:
+ return
+
+ return callFunc(curPlayer, turnFight, npcObj)
+
+def OnFBNPCKilledBefore(curPlayer, turnFight, gameObj, killer=None, useSkill=None):
+ ## 副本NPC被击杀前处理,一般用于处理一些不被击杀的副本NPC逻辑
+ # @return: 可否被正常击杀
+ do_FBLogic_ID = __GetFBLogic_MapID(turnFight.mapID)
+
+ callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnFBNPCKilledBefore"))
+ if callFunc == None:
+ # 不需要逻辑时默认可被正常击杀
+ return True
+
+ return callFunc(curPlayer, turnFight, gameObj, killer, useSkill)
+
+def OnPlayerLineupAttackResult(curPlayer, atkObj, killObjList, useSkill, mapID, funcLineID):
+ ## 回合战斗主动发起的玩家阵容攻击结果额外处理 ,一般处理副本相关的掉落、奖励等
+ do_FBLogic_ID = __GetFBLogic_MapID(mapID)
+
+ callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnPlayerLineupAttackResult"))
+
+ if callFunc:
+ callFunc(curPlayer, atkObj, killObjList, useSkill, mapID, funcLineID)
+
+ return
+
+def OnTurnFightOver(curPlayer, turnFight, mapID, funcLineID, overMsg):
## 回合战斗结束
- # @return: 是否需要同步GameServer, 奖励列表
do_FBLogic_ID = __GetFBLogic_MapID(mapID)
@@ -2486,40 +2301,5 @@
if callFunc == None:
return
- return callFunc(curPlayer, mapID, funcLineID, tagType, tagID, valueList, fightRet)
+ return callFunc(curPlayer, turnFight, mapID, funcLineID, overMsg)
-def OnTurnFightOver_GameServerRet(curPlayer, mapID, funcLineID, tagType, tagID, valueList, fightRet, awardItemList, ret):
- ## 回合战斗结束 - GameServer处理完毕返回
-
- do_FBLogic_ID = __GetFBLogic_MapID(mapID)
-
- callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnTurnFightOver_GameServerRet"))
-
- if callFunc == None:
- return
-
- return callFunc(curPlayer, mapID, funcLineID, tagType, tagID, valueList, fightRet, awardItemList, ret)
-
-def OnMirrorBattleRequest(curPlayer, mapID, funcLineID, factionPlayerList):
- ## 镜像战斗请求
- do_FBLogic_ID = __GetFBLogic_MapID(mapID)
-
- callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnMirrorBattleRequest"))
-
- if callFunc == None:
- # 默认允许
- return True
-
- return callFunc(curPlayer, mapID, funcLineID, factionPlayerList)
-
-def OnMirrorBattleOver(battleID, mapID):
- ## 镜像战斗结束
-
- do_FBLogic_ID = __GetFBLogic_MapID(mapID)
-
- callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnMirrorBattleOver"))
-
- if callFunc == None:
- return
-
- return callFunc(battleID)
--
Gitblit v1.8.0