From b0a1a6c78f4f7b3a2b83544b9e1bb664878179fc Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 07 一月 2026 19:26:40 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(支持查看NPC属性;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py | 87 ++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 84 insertions(+), 3 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
index cc9639b..5829731 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -646,11 +646,12 @@
lineupInfo = {"PlayerID":playerID, "FightPower":lineup.fightPower, "ShapeType":lineup.shapeType, "Hero":heroDict}
return lineupInfo
-def GetNPCLineupInfo(lineupID, strongerLV=0, difficulty=0, isLog=True):
+def GetNPCLineupInfo(lineupID, strongerLV=0, difficulty=0, isLog=True, viewNPCID=0):
## 获取NPC阵容信息
# @param lineupID: 阵容ID
# @param npcLV: 成长NPC等级
# @param difficulty: 成长NPC难度系数
+ # @param viewNPCID: 查看指定的NPCID,供前端查询NPC属性用
# @return: 阵容全部信息json字典,前端通用格式
lineupInfo = GetGMTestNPCLineupInfo(lineupID, strongerLV, difficulty)
if lineupInfo:
@@ -668,10 +669,14 @@
npcID = getattr(ipyData, "GetPosNPCID%s" % posNum)()
if not npcID:
continue
+ if viewNPCID and viewNPCID != npcID:
+ continue
battleDict = GetNPCBattleDict(ipyData, npcID, strongerLV, difficulty, isLog)
if not battleDict:
continue
heroDict[str(posNum)] = battleDict
+ if viewNPCID:
+ break
lineupInfo = {"NPCLineupID":lineupID, "Hero":heroDict, "BossID":bossID, "BossPosView":bossPosView}
return lineupInfo
@@ -850,8 +855,8 @@
"SkinID":skinID,
"LV":npcLV,
"Star":star,
- #"BreakLV":breakLV,
- #"AwakeLV":awakeLV,
+ "BreakLV":breakLV,
+ "AwakeLV":awakeLV,
"AttrDict":{str(k):v for k, v in batAttrDict.items() if v > 0},
"SkillIDList":skillIDList,
}
@@ -2185,6 +2190,82 @@
PlayerControl.NotifyCode(curPlayer, "FightReportExpired")
return
+#// B4 16 查看NPC属性 #tagCSViewNPCAttr
+#
+#struct tagCSViewNPCAttr
+#{
+# tagHead Head;
+# DWORD MapID; // 自定义地图ID,可用于绑定战斗地图场景功能(如主线boss、爬塔、竞技场等)
+# DWORD FuncLineID; // MapID对应的扩展值,如具体某个关卡等
+# DWORD ViewNPCID; // 指定查看某个NPCID,发0则查看该关卡阵容所有NPC
+#};
+def OnViewNPCAttr(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ mapID = clientData.MapID
+ funcLineID = clientData.FuncLineID
+ viewNPCID = clientData.ViewNPCID
+ SyncLineupNPCAttr(curPlayer, mapID, funcLineID, viewNPCID)
+ return
+
+def SyncLineupNPCAttr(curPlayer, mapID, funcLineID, viewNPCID=0):
+ lineupIDList = []
+ strongerLV, difficulty = 0, 0
+
+ if mapID == ChConfig.Def_FBMapID_MainBoss:
+ chapterID = funcLineID / 100
+ levelNum = funcLineID % 100
+ levelIpyData = IpyGameDataPY.GetIpyGameData("MainLevel", chapterID, levelNum)
+ if not levelIpyData:
+ return
+ lineupIDList = levelIpyData.GetBossLineupIDList() # Boss波阵容ID列表,小队1阵容ID|小队2阵容ID|...
+ strongerLV = levelIpyData.GetNPCLV()
+ difficulty = levelIpyData.GetDifficulty()
+
+ else:
+ fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, funcLineID)
+ if fbLineIpyData:
+ lineupIDList = fbLineIpyData.GetLineupIDList()
+ strongerLV = fbLineIpyData.GetNPCLV()
+ difficulty = fbLineIpyData.GetDifficulty()
+ else:
+ ret = FBLogic.GetFBNPCLineupInfo(curPlayer, mapID, funcLineID)
+ if not ret:
+ return
+ lineupIDList, strongerLV, difficulty = ret
+
+ if not lineupIDList:
+ return
+
+ npcAttrList = []
+ for lineupID in lineupIDList:
+ lineupInfo = GetNPCLineupInfo(lineupID, strongerLV, difficulty, False, viewNPCID=viewNPCID)
+ if not lineupInfo:
+ continue
+ heroDict = lineupInfo["Hero"]
+ for posNum, attrInfo in heroDict.items():
+ posNum = int(posNum)
+ npcAttr = ChPyNetSendPack.tagSCViewNPCAttr()
+ npcAttr.PosNum = posNum
+ npcAttr.NPCID = attrInfo["NPCID"]
+ npcAttr.HeroID = attrInfo["HeroID"]
+ npcAttr.LV = attrInfo["LV"]
+ npcAttr.Star = attrInfo["Star"]
+ npcAttr.BreakLV = attrInfo["BreakLV"]
+ npcAttr.AwakeLV = attrInfo["AwakeLV"]
+ npcAttr.AttrMsg = json.dumps(attrInfo["AttrDict"], ensure_ascii=False).replace(" ", "")
+ npcAttr.AttrLen = len(npcAttr.AttrMsg)
+ npcAttrList.append(npcAttr)
+ if not npcAttrList:
+ return
+ clientPack = ChPyNetSendPack.tagSCViewNPCAttrRet()
+ clientPack.MapID = mapID
+ clientPack.FuncLineID = funcLineID
+ clientPack.ViewNPCID = viewNPCID
+ clientPack.NPCAttrList = npcAttrList
+ clientPack.NPCCnt = len(clientPack.NPCAttrList)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
+
def SyncTurnFightReport(curPlayer, guid, reprot):
## 通知完整战报
clientPack = ChPyNetSendPack.tagSCTurnFightReport()
--
Gitblit v1.8.0