From dae842ad6e4a43d66255251e3ca60880af8d08bb Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 09 十月 2025 16:26:25 +0800
Subject: [PATCH] 242 【福利内容】每日签到-服务端
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py | 80 ++++++++++++++++++++++++++++++++++------
1 files changed, 68 insertions(+), 12 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 111c080..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", {})
@@ -750,7 +771,7 @@
heroID = heroInfo.get("HeroID", 0)
skinID = heroInfo.get("SkinID", 0)
lv = heroInfo.get("LV", 1)
- specialty, atkDistType, country, sex = 0, 1, 0, 1
+ specialty, atkDistType, country, sex, job = 0, 1, 0, 1, 0
heroIpyData = IpyGameDataPY.GetIpyGameData("Hero", heroID) if heroID else None
if heroIpyData:
objName = heroIpyData.GetName()
@@ -758,6 +779,7 @@
atkDistType = heroIpyData.GetAtkDistType()
country = heroIpyData.GetCountry()
sex = heroIpyData.GetSex()
+ job = heroIpyData.GetJob()
if lineupPlayerID:
fightPower = heroInfo.get("FightPower", 0)
@@ -789,6 +811,7 @@
batObj.SetSpecialty(specialty)
batObj.SetCountry(country)
batObj.SetSex(sex)
+ batObj.SetJob(job)
batObj.SetHero(heroID, skinID)
skillManager = batObj.GetSkillManager()
@@ -798,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
@@ -860,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
@@ -875,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
@@ -1405,7 +1450,7 @@
#GameWorld.DebugLog(" 永久buff不处理! curID=%s,index=%s,skillID=%s" % (curID, index, skillID))
continue
calcTimeline = buff.GetCalcTime()
- passTurn = __calcPassturn(calcTimeline, nowTimeline, False)
+ passTurn = __calcPassturn(calcTimeline, nowTimeline, True)
if passTurn <= 0:
#GameWorld.DebugLog(" passTurn <= 0 passTurn=%s,calcTimeline=%s,nowTimeline=%s,skillID=%s" % (passTurn, calcTimeline, nowTimeline, skillID))
continue
@@ -1424,7 +1469,7 @@
def __calcPassturn(calcTimeline, nowTimeline, equalOK):
## 计算已经过了的回合数
- # @param equalOK: 时间节点相同时是否算1回合,一般技能可以算,buff不算
+ # @param equalOK: 时间节点相同时是否算1回合,一般技能可以算,buff可算可不算,具体看需求调整
calcTurnNum = calcTimeline / TimelineSet
calcTimeNode = calcTimeline % TimelineSet
nowTurnNum = nowTimeline / TimelineSet
@@ -1514,7 +1559,7 @@
% (curID, tagID, skillID, hurtValue, lostHP, curBatObj.GetHP()))
return
-def OnObjAction(turnFight, curBatObj):
+def OnObjAction(turnFight, curBatObj, isExtra=False):
## 战斗单位行动
if not curBatObj:
return
@@ -1530,12 +1575,12 @@
# 是否可行动状态判断
canAction = curBatObj.CanAction()
if not canAction:
- GameWorld.DebugLog("★回合%s %s 当前状态不可行动!" % (turnNum, objName))
+ GameWorld.DebugLog("★回合%s %s 当前状态不可行动! isExtra=%s" % (turnNum, objName, isExtra))
return
atk = curBatObj.GetAtk()
curXP = curBatObj.GetXP()
- GameWorld.DebugLog("★回合%s %s 行动 : atk=%s,curHP=%s/%s,curXP=%s" % (turnNum, objName, atk, curHP, curBatObj.GetMaxHP(), curXP))
+ GameWorld.DebugLog("★回合%s %s %s行动 : atk=%s,curHP=%s/%s,curXP=%s" % (turnNum, objName, "额外" if isExtra else "", atk, curHP, curBatObj.GetMaxHP(), curXP))
turnFight.syncObjAction(turnNum, objID)
TurnPassive.OnTriggerPassiveEffect(turnFight, curBatObj, ChConfig.TriggerWay_HeroActionStart)
@@ -1582,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
@@ -1594,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)
@@ -1640,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)
@@ -1656,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