From 416c1dc316df0be2aafa00657350ffca525c868f Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 31 十月 2025 10:48:43 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(词条技能:增加属性类技能支持;增加触发方式24-掉血时触发;增加效果7009-限制技能最多触发次数;效果5011增加验证当前生命支持;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 41 +++++++++++++++++++++++++++++++++++++++--
1 files changed, 39 insertions(+), 2 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
index 0f82ce0..c3fe775 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -68,6 +68,9 @@
GameWorld.DebugLog("技能使用处于buff状态限制中! skillID=%s,buffStateGroups=%s,limitState=%s" % (skillID, buffStateGroups, limitState))
return
+ if CheckSkillUseCntLimit(curBatObj, useSkill):
+ return
+
#没有指定目标,则按技能自身的目标逻辑
if not tagObjList:
tagObjList = GetSkillTags(turnFight, curBatObj, useSkill)
@@ -157,6 +160,32 @@
if usePoolSkill:
poolMgr.release(useSkill)
return True
+
+def CheckSkillUseCntLimit(batObj, useSkill):
+ ## 检查技能使用次数是否受限
+ # @return: 是否受限
+ if not hasattr(useSkill, "GetEffectByID"):
+ return
+ effect = useSkill.GetEffectByID(ChConfig.SkillEff_SkillUseCntLimit)
+ if not effect:
+ return
+ useCntLimit = effect.GetEffectValue(0) # 每场战斗最大次数,0不限
+ turnUseCntLimit = effect.GetEffectValue(1) # 每大回合最大次数,0不限
+
+ skillID = useSkill.GetSkillID()
+ if useCntLimit:
+ useCnt = batObj.GetSkillUseCnt(skillID)
+ if useCnt >= useCntLimit:
+ GameWorld.DebugLog("技能每场战斗使用次数受限! skillID=%s,useCnt=%s >= %s" % (skillID, useCnt, useCntLimit))
+ return True
+
+ if turnUseCntLimit:
+ turnUseCnt = batObj.GetSkillTurnUseCnt(skillID)
+ if turnUseCnt >= turnUseCntLimit:
+ GameWorld.DebugLog("技能每大回合使用次数受限! skillID=%s,turnUseCnt=%s >= %s" % (skillID, turnUseCnt, turnUseCntLimit))
+ return True
+
+ return
def IsNeedSyncSkill(useSkill):
## 使用需要同步B427使用技能
@@ -976,7 +1005,8 @@
# 统计伤血,可能单个技能对同一目标造成多次伤害
totalHurtValue = 0
isSuperHit, isStun, isSuckHP = False, False, False
- missObjIDList, immuneObjIDList = [], []
+ missObjIDList, immuneObjIDList = [], [] # 闪避、免疫对象ID列表
+ beHurtObjIDList = [] # 受伤的对象ID列表
for hurtObj in useSkill.GetHurtObjList():
hurtObjID = hurtObj.GetObjID()
tagObj = batObjMgr.getBatObj(hurtObjID)
@@ -988,7 +1018,10 @@
if hurtObj.HaveHurtType(ChConfig.HurtType_Normal):
totalHurtValue += hurtObj.GetHurtHP()
-
+ if hurtObj.GetLostHP() > 0: # 有掉血的
+ if hurtObjID not in beHurtObjIDList:
+ beHurtObjIDList.append(hurtObjID)
+
if hurtObj.HaveHurtType(ChConfig.HurtType_Miss):
if hurtObjID not in missObjIDList:
missObjIDList.append(hurtObjID)
@@ -1054,6 +1087,10 @@
if tagID in effIgnoreObjIDList:
continue
+ # 掉血时
+ if tagID in beHurtObjIDList:
+ TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeHurt, curObj, connSkill=useSkill)
+
# 直接攻击
if isAttackDirect:
if not triggerOne:
--
Gitblit v1.8.0