From b9bef849ab19b8a3d6e889e82c687eec736cbd2a Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 10 十月 2025 20:42:29 +0800
Subject: [PATCH] 66 【公会】基础主体-服务端(徽章旗帜、旗号;捐献;公会加经验、加贡献度;搜索支持公会编号;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py | 66 ++++++++++++++++++++++++++++++---
1 files changed, 60 insertions(+), 6 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 06c2a8d..f6db1f1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -36,6 +36,7 @@
import TurnPassive
import TurnSkill
import TurnBuff
+import FBCommon
import CommFunc
import ObjPool
import FBLogic
@@ -73,6 +74,7 @@
self.lingshouObjIDDict = {} # 灵兽战斗单位 {位置编号:batObjID, ...}
self.beautyObjIDDict = {} # 红颜战斗单位 {位置编号:batObjID, ...}
self.actionNum = ActionNumStart # 行动位置,从1开始
+ self.totalHurt = 0 # 阵容总输出
return
def getPlayerID(self): return self.turnFight.playerID # 发起的玩家ID
@@ -102,6 +104,7 @@
self.lingshouObjIDDict = {}
self.beautyObjIDDict = {}
self.fightPower = 0
+ self.totalHurt = 0
return
class BatFaction():
@@ -111,6 +114,7 @@
self.turnFight = turnFight # TurnFight
self.faction = faction
self.lineupDict = {} # 该阵营所有阵容信息 {编号:BatLineup, ...}
+ self.totalHurt = 0 # 阵营总输出
return
def getBatlineup(self, num=1):
@@ -122,6 +126,8 @@
lineup = BatLineup(self.faction, num, self.turnFight)
self.lineupDict[num] = lineup
return lineup
+
+ def getTotalHurt(self): return self.totalHurt # 阵营总输出
def clearLineups(self):
## 清除所有战斗阵容
@@ -155,6 +161,7 @@
self.batBuffer = "" # 战报buffer,战报暂时只保留最后一个小队的
self.isNeedReport = isNeedReport # 是否需要战报
self.msgDict = {} # 扩展信息字典,一般由MapID绑定的功能决定信息内容 {k:v, ...}
+ self._kvDict = {} # 自定义信息字典,不会被重置 {k:v, ...}
self.factionDict = {} # 战斗阵营 {faction:BatFaction, ...},一般是只有两个阵营,faction为1或2,每个阵营支持多个阵容
self.actionSortList = [] # 阵容行动顺序 [[faction, num], ...]
@@ -184,6 +191,7 @@
self.setPVE()
self.setPVP()
self.msgDict = {}
+ self._kvDict = {}
self.nextTurnFight(msgDict)
return
@@ -198,6 +206,13 @@
self.tagPlayerID = tagPlayerID
self.tagViewCache = tagViewCache
return
+
+ def isFBMap(self):
+ ## 是否副本地图中,非主线的均视为副本
+ return self.mapID not in [ChConfig.Def_FBMapID_Main, ChConfig.Def_FBMapID_MainBoss]
+
+ def GetDictByKey(self, key): return self._kvDict.get(key, 0)
+ def SetDict(self, key, value): self._kvDict[key] = value
#def setPVPTeam(self):
# return
@@ -381,6 +396,11 @@
clientPack.FactionList.append(tfFaction)
clientPack.FactionCnt = len(clientPack.FactionList)
self.addBatPack(clientPack)
+ return
+
+ def syncHelp(self, msgDict):
+ ## 通知帮助信息,一般是副本用
+ self.syncState(self.state, msgDict)
return
def syncState(self, state, msgDict={}):
@@ -732,7 +752,8 @@
if not curPlayer:
return
- tfGUID = batLineup.turnFight.guid
+ turnFight = batLineup.turnFight
+ tfGUID = turnFight.guid
lineupPlayerID = lineupInfo.get("PlayerID", 0) # 阵容所属玩家ID
heroDict = lineupInfo.get("Hero", {})
@@ -800,6 +821,12 @@
batLineup.posObjIDDict[posNum] = objID
GameWorld.DebugLog("AddBatObj %s,skill=%s" % (GetObjName(batObj), skillManager.GetSkillIDList()))
+ if npcID:
+ #副本指定NPC属性
+ fbNPCInitAttrDict = FBLogic.GetFBNPCInitAttr(curPlayer, turnFight, batObj)
+ if fbNPCInitAttrDict:
+ GameWorld.DebugLog("副本指定NPC初始化属性: npcID=%s, %s" % (npcID, fbNPCInitAttrDict))
+ attrDict = {str(k):v for k, v in fbNPCInitAttrDict.items()} # 统一格式
batObj.InitBatAttr({int(k):v for k, v in attrDict.items()}, initXP)
return
@@ -862,6 +889,15 @@
GameWorld.DebugLog("回合制战斗请求: mapID=%s,funcLineID=%s,tagType=%s,tagID=%s,valueList=%s"
% (mapID, funcLineID, tagType, tagID, valueList), curPlayer.GetPlayerID())
+ fbIpyData = FBCommon.GetFBIpyData(mapID)
+ fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, funcLineID, False)
+ if fbIpyData:
+ if not fbLineIpyData:
+ GameWorld.DebugLog("不存在该副本功能线路! mapID=%s,funcLineID=%s" % (mapID, funcLineID))
+ return
+ if FBCommon.CheckCanEnterFBComm(curPlayer, mapID, funcLineID, fbIpyData, fbLineIpyData) != ShareDefine.EntFBAskRet_OK:
+ return
+
reqRet = FBLogic.OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList)
if not reqRet:
return
@@ -877,10 +913,17 @@
# NPC
else:
- ret = FBLogic.GetFBNPCLineupInfo(curPlayer, mapID, funcLineID)
- if not ret:
- return
- npcLineupIDList, strongerLV, difficulty = ret
+ npcLineupIDList, strongerLV, difficulty = [], 0, 0
+ if fbLineIpyData:
+ npcLineupIDList = fbLineIpyData.GetLineupIDList()
+ strongerLV = fbLineIpyData.GetNPCLV()
+ difficulty = fbLineIpyData.GetDifficulty()
+
+ if not npcLineupIDList:
+ ret = FBLogic.GetFBNPCLineupInfo(curPlayer, mapID, funcLineID)
+ if not ret:
+ return
+ npcLineupIDList, strongerLV, difficulty = ret
OnTurnFightVSNPC(curPlayer, mapID, funcLineID, atkLineupID, npcLineupIDList, strongerLV, difficulty)
return
@@ -1584,6 +1627,14 @@
return True
def SetObjKilled(turnFight, gameObj, killer=None, useSkill=None):
+ curPlayer = turnFight.curPlayer
+ npcID = gameObj.GetNPCID()
+
+ # 非主线的PVE目标怪物
+ if npcID and curPlayer and turnFight.isFBMap() and gameObj.GetFaction() != ChConfig.Def_FactionA:
+ if not FBLogic.OnFBNPCKilledBefore(curPlayer, turnFight, gameObj, killer):
+ return
+
objID = gameObj.GetID()
killerObjID = killer.GetID() if killer else 0
skillID = useSkill.GetSkillID() if useSkill else 0
@@ -1596,7 +1647,6 @@
clientPack.SkillID = skillID
turnFight.addBatPack(clientPack)
- curPlayer = turnFight.curPlayer
# 暂时只算主线小怪
if curPlayer and turnFight.mapID == ChConfig.Def_FBMapID_Main and gameObj.GetFaction() != ChConfig.Def_FactionA:
PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_KillNPC, 1)
@@ -1642,11 +1692,13 @@
statInfo[str(faction)] = {}
facStatInfo = statInfo[str(faction)]
batFaction = turnFight.getBatFaction(faction)
+ batFaction.totalHurt = 0
for num in batFaction.lineupDict.keys():
if str(num) not in facStatInfo:
facStatInfo[str(num)] = {}
lineupStatInfo = facStatInfo[str(num)]
batLineup = batFaction.getBatlineup(num)
+ batLineup.totalHurt = 0
GameWorld.DebugLog("阵容明细: faction=%s,num=%s" % (faction, num))
for posNum, objID in batLineup.posObjIDDict.items():
batObj = batObjMgr.getBatObj(objID)
@@ -1658,6 +1710,8 @@
atkHurt = batObj.hurtStat
defHurt = batObj.defStat
cureHP = batObj.cureStat
+ batLineup.totalHurt += atkHurt
+ batFaction.totalHurt += atkHurt
GameWorld.DebugLog(" Pos:%s ID=%s,npcID=%s,heroID=%s,HP=%s/%s, 输出=%s,承伤=%s,治疗=%s"
% (posNum, objID, npcID, heroID, batObj.GetHP(), batObj.GetMaxHP(), atkHurt, defHurt, cureHP))
lineupStatInfo[str(posNum)] = {"ObjID":objID, "HeroID":heroID, "NPCID":npcID, "AtkHurt":atkHurt, "DefHurt":defHurt, "CureHP":cureHP}
--
Gitblit v1.8.0