From 6343277477b190efbc389bab2706cf94eb09be8d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 07 二月 2026 20:59:32 +0800
Subject: [PATCH] 358 【内政】红颜系统-服务端(红颜时装默认解锁的状态也通知;红颜时装物品解锁改为直接取背包中的物品;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py | 159 ++++++++++++++++++-----------------------------------
1 files changed, 54 insertions(+), 105 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 01e4c7f..d62bc5b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBLogic.py
@@ -18,15 +18,9 @@
import IPY_GameWorld
import PlayerControl
import GameWorldProcess
-import CrossRealmPlayer
import DataRecordPack
-import IpyGameDataPY
-import PlayerSuccess
import ReadChConfig
-import ShareDefine
-import PyGameData
import FBCommon
-import GameMap
import GameObj
import random
@@ -485,36 +479,6 @@
def DoEnterFBLogic(curPlayer, tick):
curPlayerID = curPlayer.GetID()
- if GameWorld.IsCrossServer():
- mapID = GameWorld.GetMap().GetMapID()
- mapID = FBCommon.GetRecordMapID(mapID)
- gameWorld = GameWorld.GetGameWorld()
- copyMapID = gameWorld.GetCopyMapID()
- dataDict = {"PlayerID":curPlayer.GetPlayerID(), "PlayerName":curPlayer.GetPlayerName(), "AccID":curPlayer.GetAccID(),
- "recordMapID":mapID, "mapID":GameWorld.GetMap().GetMapID(), "realMapID":gameWorld.GetRealMapID(), "copyMapID":copyMapID}
- 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) and mapID not in [ChConfig.Def_FBMapID_CrossChampionship]:
- GameWorld.ErrLog("DoEnterFB 玩家与当前副本线路所属分区或功能分线不同,踢出玩家!fbZoneID=%s,playerZoneID=%s,fbFuncLineID=%s,playerFuncLineID=%s"
- % (fbZoneID, playerZoneID, fbFuncLineID, playerFuncLineID), curPlayerID)
- CrossRealmPlayer.PlayerExitCrossServer(curPlayer)
- dataDict.update({"Error":"zoneLineIDError"})
- DataRecordPack.SendEventPack("CrossFBEnter", dataDict, curPlayer)
- return
- GameWorld.Log("玩家进入跨服副本动态分配的线路: fbZoneID=%s,playerZoneID=%s,fbFuncLineID=%s,playerFuncLineID=%s"
- % (fbZoneID, playerZoneID, fbFuncLineID, playerFuncLineID), curPlayerID)
- dataDict.update({"fbZoneID":fbZoneID, "fbFuncLineID":fbFuncLineID, "playerZoneID":playerZoneID, "playerFuncLineID":playerFuncLineID})
-
- if copyMapID not in PyGameData.g_crossPlayerServerGroupIDInfo:
- PyGameData.g_crossPlayerServerGroupIDInfo[copyMapID] = {}
- playerServerGroupIDDict = PyGameData.g_crossPlayerServerGroupIDInfo[copyMapID]
- playerServerGroupIDDict[curPlayerID] = PlayerControl.GetPlayerServerGroupID(curPlayer)
- DataRecordPack.SendEventPack("CrossFBEnter", dataDict, curPlayer)
-
# 自伸缩副本根据玩家进入开启,主动调用一次,避免间隔调用时机未触发导致逻辑错乱
GameWorldProcess.EnterOpenFB(tick)
@@ -551,8 +515,6 @@
#注册玩家离开副本时间
gameFBMgr.SetPlayerLogoffTick(0)
-
- PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_FeastRedPack_EnterMap, 1, [gameMapID])
if gameFBMgr.HaveFBPlayer(curPlayerID):
#已经注册了这个玩家, 不清除已注册的玩家的字典信息
@@ -1069,13 +1031,6 @@
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:
callFunc(curPlayer)
@@ -1318,9 +1273,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
@@ -1489,21 +1441,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())
@@ -1530,20 +1467,21 @@
return callFunc(curPlayer, addExp, expViewType)
-## 副本扫荡询问
-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"))
@@ -1551,7 +1489,7 @@
if callFunc == None:
return False
- return callFunc(curPlayer, mapID, lineID, cnt, isFinish, dataEx)
+ return callFunc(curPlayer, mapID, lineID, cnt, dataEx, askRet)
## 开始公共CD副本扫荡
def OnStartPubCDFBSweep(curPlayer, mapID, lineID, cnt, dataEx):
@@ -1578,10 +1516,12 @@
def OnPlayerFBQuickPass(curPlayer, mapID, lineID):
'''副本快速过关验证
@param mapID: 数据地图ID
- @param lineID: 目标关卡线路ID,可一次性跳多关,由前端发包决定
- @return: (bossID, quickCnt) 或 None
- @note: bossID 目标NPCID - 目标关卡所需要挑战的主NPCID,一般是boss,用于验证战力是否满足快速过关
- @note: quickCnt 本次总共跳过几关 - 默认1
+ @param lineID: 目标关卡线路ID,可一次性跳多关,根据功能由前端发包决定或后端直接决定
+ @return: (lineID, quickCnt, quickFightPower, quickData) 或 None
+ @note: lineID 由后端决定的快速过关到哪,如果前端决定的则直接返回 lineID
+ @note: quickCnt 本次总共跳过几关
+ @note: quickFightPower 目标阵容战力,用于验证战力是否满足快速过关
+ @note: quickData 扩展数据,功能自定义,传给 OnPlayerFBQuickPassResult
'''
do_FBLogic_ID = __GetFBLogic_MapID(mapID)
@@ -1593,7 +1533,7 @@
return callFunc(curPlayer, mapID, lineID)
-def OnPlayerFBQuickPassResult(curPlayer, mapID, lineID):
+def OnPlayerFBQuickPassResult(curPlayer, mapID, lineID, quickData):
'''副本快速过关结果
'''
do_FBLogic_ID = __GetFBLogic_MapID(mapID)
@@ -1603,7 +1543,7 @@
if callFunc == None:
return
- return callFunc(curPlayer, mapID, lineID)
+ return callFunc(curPlayer, mapID, lineID, quickData)
#---------------------------------------------------------------------
@@ -2250,42 +2190,18 @@
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 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 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阵容相关
@@ -2298,6 +2214,28 @@
return callFunc(curPlayer, mapID, funcLineID)
+def GetFBNPCInitAttr(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(turnFight, npcObj)
+
+def OnFBNPCKilledBefore(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(turnFight, gameObj, killer, useSkill)
+
def OnPlayerLineupAttackResult(curPlayer, atkObj, killObjList, useSkill, mapID, funcLineID):
## 回合战斗主动发起的玩家阵容攻击结果额外处理 ,一般处理副本相关的掉落、奖励等
do_FBLogic_ID = __GetFBLogic_MapID(mapID)
@@ -2309,7 +2247,7 @@
return
-def OnTurnFightOver(curPlayer, turnFight, mapID, funcLineID, overMsg):
+def OnTurnFightOver(turnFight, mapID, funcLineID, overMsg):
## 回合战斗结束
do_FBLogic_ID = __GetFBLogic_MapID(mapID)
@@ -2319,5 +2257,16 @@
if callFunc == None:
return
- return callFunc(curPlayer, turnFight, mapID, funcLineID, overMsg)
+ return callFunc(turnFight, mapID, funcLineID, overMsg)
+def OnTurnFightAward(curPlayer, guid, mapID, funcLineID, winFaction, statMsg, dateStr, reqData, awardDict):
+ ## 回合战斗结算奖励
+
+ do_FBLogic_ID = __GetFBLogic_MapID(mapID)
+
+ callFunc = GameWorld.GetExecFunc(FBProcess, "GameLogic_%s.%s" % (do_FBLogic_ID, "OnTurnFightAward"))
+
+ if callFunc == None:
+ return
+
+ return callFunc(curPlayer, guid, mapID, funcLineID, winFaction, statMsg, dateStr, reqData, awardDict)
--
Gitblit v1.8.0