From 7333df76f1172b83238623969ae0b6f978801201 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 14 一月 2025 20:07:04 +0800 Subject: [PATCH] 10263 【越南】【英文】【BT】后端支持NPC仿真实玩家战斗和快速战斗(改为真实地图战斗;竞技场、跨服PK、跨服排位赛,测试地图100均已支持;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossChampionship.py | 117 +--------------------------------------------------------- 1 files changed, 3 insertions(+), 114 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossChampionship.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossChampionship.py index e9b8e42..bdc0472 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossChampionship.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_CrossChampionship.py @@ -14,117 +14,6 @@ #------------------------------------------------------------------------------- #"""Version = 2022-09-21 21:30""" #------------------------------------------------------------------------------- - -import GameWorld -import MirrorAttack -import IPY_GameWorld -import PlayerControl -import CrossRealmPlayer -import IpyGameDataPY -import ShareDefine -import FBCommon -import GameObj - - -###处理副本中杀死玩家逻辑 -def DoFBOnKill_Player(atkobj, defender, tick): - GameWorld.DebugLog("镜像切磋击杀玩家: defID=%s" % (defender.GetID()), atkobj.GetID()) - return True - -def OnMirrorBattleRequest(curPlayer, mapID, funcLineID): - ## 镜像战斗请求 - - playerID = curPlayer.GetPlayerID() - if GameWorld.IsCrossServer(): - return - - if not CrossRealmPlayer.IsCrossServerOpen(): - PlayerControl.NotifyCode(curPlayer, "CrossMatching18") - return - - if curPlayer.GetPlayerAction() == IPY_GameWorld.paDie or GameObj.GetHP(curPlayer) == 0: - GameWorld.DebugLog("已死亡,无法进行跨服排位赛!", playerID) - return - - stateError = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossChampionshipStateError) - if stateError: - GameWorld.ErrLog("跨服排位状态已经异常无法进入! stateError=%s" % stateError, playerID) - return - - state = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_CrossChampionshipState) - if state not in ShareDefine.CrossChampionshipEnterStateInfo: - GameWorld.ErrLog("当前状态非跨服排位战斗状态无法进入: state=%s" % state, playerID) - return - groupMark = ShareDefine.CrossChampionshipEnterStateInfo[state] - reqGroupMark = funcLineID % 100 - if reqGroupMark != groupMark: - GameWorld.ErrLog("当前状态与跨服排位战斗分组不一致无法进入: funcLineID=%s,reqGroupMark=%s != %s" % (funcLineID, reqGroupMark, groupMark), playerID) - return - - return True - -def OnMirrorBattleOver(battleID): - ## 镜像战斗结束 - - battle = MirrorAttack.GetMirrorBattleByID(battleID) - if not battle: - return - mapID = battle.mapID - funcLineID = battle.funcLineID - isWin = battle.isWin - curPlayerID = battle.requestID # 副本所属玩家ID,该玩家不一定参与实际战斗 - tagPlayerID = battle.GetTagPlayerID() - fightTickRemain = battle.fightTickRemain - curHPPer = 0 # 自己剩余血量百分比 0~100,支持小数点 - tagHPPer = 0 # 对方剩余血量百分比 0~100,支持小数点 - - curPlayer = None - playerMgr = GameWorld.GetMapCopyPlayerManager() - for playerID, faction in battle.playerFactionDict.items(): - player = playerMgr.FindPlayerByID(playerID) - if not player: - continue - realPlayerID = player.GetRealPlayerID() - hp = GameObj.GetHP(player) - hpMax = GameObj.GetMaxHP(player) - hpPer = hp / float(hpMax) * 100 - GameWorld.DebugLog(" 剩余血量: %s/%s,hpPer=%s%%,playerID=%s,realPlayerID=%s,faction=%s" - % (hp, hpMax, hpPer, playerID, realPlayerID, faction), battleID) - if not realPlayerID and curPlayerID == playerID: - curPlayer = player - curHPPer = hpPer - if tagPlayerID == realPlayerID: - tagHPPer = hpPer - - if not curPlayer: - return - - baseScoreList = IpyGameDataPY.GetFuncEvalCfg("CrossChamMirrorPK", 2) - baseScore = 0 - if baseScoreList and len(baseScoreList) == 2: - baseScore = baseScoreList[0] if battle.isWin else baseScoreList[1] - hpScore = int(eval(IpyGameDataPY.GetFuncCompileCfg("CrossChamMirrorPK", 3))) - GameWorld.DebugLog(" hpScore=%s,curHPPer=%s,tagHPPer=%s" % (hpScore, curHPPer, tagHPPer), battleID) - remainTimePer = fightTickRemain / float(battle.fightTickMax) * 100 # 剩余战斗时间百分比 - timeScore = int(eval(IpyGameDataPY.GetFuncCompileCfg("CrossChamMirrorPK", 4))) - addScore = baseScore + hpScore + timeScore - GameWorld.DebugLog(" timeScore=%s,remainTimePer=%s%%,fightTickRemain=%s,fightTickMax=%s" % (timeScore, remainTimePer, fightTickRemain, battle.fightTickMax), battleID) - - pkCountMax = IpyGameDataPY.GetFuncCfg("CrossChamMirrorPK", 1) - playerID = curPlayer.GetPlayerID() - dataMsg = { - "playerID":playerID, - "tagPlayerID":tagPlayerID, - "funcLineID":funcLineID, - "isWin":isWin, - "addScore":addScore, - "baseScore":baseScore, - "hpScore":hpScore, - "timeScore":timeScore, - "pkCountMax":pkCountMax, - } - GameWorld.SendMsgToCrossServer(ShareDefine.ClientServerMsg_ChampionshipPKOver, dataMsg) - overDict = {"isWin":isWin, "tagPlayerID":tagPlayerID, "addScore":addScore, "baseScore":baseScore, "hpScore":hpScore, "timeScore":timeScore} - FBCommon.NotifyFBOver(curPlayer, mapID, funcLineID, isWin, overDict) - return - +# +# 改为使用镜像PK,逻辑统一放 GameLogic_MirrorBattle +# \ No newline at end of file -- Gitblit v1.8.0