From c0c57b36817a87c7f80ca67cb604f1f2c91cab30 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 30 十二月 2025 15:50:06 +0800
Subject: [PATCH] 16 卡牌服务端(Hero 命令增加一键满级;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 46 +++++++++++++++++++++++++++++++---------------
1 files changed, 31 insertions(+), 15 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 2670102..8fd79b3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -426,6 +426,11 @@
aimObjList.sort(key=lambda o:(o.GetHP()), reverse=False)
#GameWorld.DebugLogEx("血量最低排序: %s", [[o.GetID(), o.GetHP(), o.GetMaxHP()] for o in aimObjList])
+ # 血量百分比最低
+ elif tagAffect == ChConfig.SkillTagAffect_HPPerLowest:
+ aimObjList.sort(key=lambda o:(o.GetHP() / float(o.GetMaxHP())), reverse=False)
+ #GameWorld.DebugLogEx("血量百分比最低排序: %s", [[o.GetID(), o.GetHP(), o.GetMaxHP(), o.GetHP() / float(o.GetMaxHP())] for o in aimObjList])
+
# 血量最高
elif tagAffect == ChConfig.SkillTagAffect_HPHighest:
aimObjList.sort(key=lambda o:(o.GetHP()), reverse=True)
@@ -832,7 +837,7 @@
tagID = tagObj.GetID()
if tagID == ChConfig.HeroID_Caoren:
continue
- if tagObj.CheckInState(ChConfig.BatObjState_Wudi):
+ if tagObj.CheckInState(ChConfig.ImmuneHurtStateList):
continue
if not caorenProtectObj or tagObj.GetHP() < caorenProtectObj.GetHP():
caorenProtectObj = tagObj
@@ -910,7 +915,7 @@
continue
if tagID == ChConfig.HeroID_Caoren:
continue
- if tagObj.CheckInState(ChConfig.BatObjState_Wudi):
+ if tagObj.CheckInState(ChConfig.ImmuneHurtStateList):
continue
if not caorenProtectObj or tagObj.GetHP() < caorenProtectObj.GetHP():
caorenProtectObj = tagObj
@@ -1367,7 +1372,7 @@
# 统计伤血,可能单个技能对同一目标造成多次伤害
totalHurtValue = 0
- isSuckHP = False
+ suckObjIDList = [] # 吸血的对象ID列表
missObjIDList, immuneObjIDList = [], [] # 闪避、免疫对象ID列表
stunObjIDList, superHitObjIDList, parryObjIDList = [], [], []
beHurtObjIDList = [] # 受伤的对象ID列表
@@ -1425,9 +1430,10 @@
if tagObj not in caorenProtectList:
caorenProtectList.append(tagObj)
- if hurtObj.GetSuckHP() > 0:
- isSuckHP = True
-
+ if hurtObj.GetSuckHP() > 0 and not hurtObj.HaveHurtType(ChConfig.HurtAtkType_PoisonCureSuck):
+ if hurtObjID not in suckObjIDList:
+ suckObjIDList.append(hurtObjID)
+
# 判断自己死亡,因为反弹、平摊伤害的原因,有可能自己干死自己
if curObj.IsAlive() and curObj.GetHP() <= 0:
if curObj.CanNoDead():
@@ -1447,7 +1453,7 @@
DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_SuperHit, relatedSkillID)
if stunObjIDList:
DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_Stun, relatedSkillID)
- if isSuckHP:
+ if suckObjIDList:
DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_SuckHP, relatedSkillID)
# 结算副本相关的攻击结果,仅主动发起玩家阵容武将触发
@@ -1536,6 +1542,10 @@
TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeMiss, tagObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Miss, curObj, connSkill=useSkill)
+ # 免疫
+ if tagID in immuneObjIDList:
+ TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_ImmuneHurt, curObj, connSkill=useSkill)
+
if tagID in effIgnoreObjIDList:
continue
@@ -1544,7 +1554,7 @@
# 掉血时
if tagID in beHurtObjIDList:
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeHurt, curObj, connSkill=useSkill)
- #TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_HurtTag, tagObj, connSkill=useSkill) 暂时用不到先屏蔽
+ TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_HurtTag, tagObj, connSkill=useSkill)
# 受到任意效果时(除直接攻击外的任意效果,如buff、dot、治疗、额外怒技)
if not isAttackDirect:
@@ -1589,6 +1599,12 @@
if tagID in parryObjIDList:
TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeParry, tagObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Parry, curObj, connSkill=useSkill)
+
+ # 吸血
+ if tagID in suckObjIDList:
+ if not triggerOne:
+ TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_SuckHPOne, tagObj, connSkill=useSkill)
+ TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeSuckHP, curObj, connSkill=useSkill)
# 连击
if batType == ChConfig.TurnBattleType_Combo:
@@ -1894,7 +1910,7 @@
OnUseSkill(turnFight, curBatObj, enhanceSkillData, batType=ChConfig.TurnBattleType_Enhance, bySkill=useSkill)
return
-def OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill=None, effSkillID=0, effectID=0, connBuff=None, **kwargs):
+def OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill=None, effSkillID=0, effectID=0, connBuff=None, batType=ChConfig.TurnBattleType_Passive, **kwargs):
'''被动触发使用技能
@param passiveSkill: 释放的被动技能 或 技能ID
@param connSkill: 由什么技能引起的
@@ -1944,12 +1960,12 @@
GameWorld.DebugLogEx(" 概率不触发: tagID=%s,happenRate=%s", tagID, happenRate)
return
passiveTagObjList = [tagObj]
- isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill, byBuff=connBuff, **kwargs)
+ isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=batType, bySkill=connSkill, byBuff=connBuff, **kwargs)
elif tagAim == ChConfig.SkillTagAim_MainSkillEx:
if not connSkill:
return
passiveTagObjList = connSkill.GetTagObjList()
- isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill, byBuff=connBuff, **kwargs)
+ isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=batType, bySkill=connSkill, byBuff=connBuff, **kwargs)
elif tagAim == ChConfig.SkillTagAim_MainSkillFriend:
if "byFriendObj" not in kwargs:
return
@@ -1957,10 +1973,10 @@
passiveTagObjList = [byFriendObj]
GameWorld.DebugLogEx("被动触发技能,针对来源友军! effSkillID=%s,effectID=%s,passiveSkillID=%s,bySkillID=%s,byFriendID=%s",
effSkillID, effectID, passiveSkillID, bySkillID, byFriendObj.GetID())
- isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill, byBuff=connBuff, **kwargs)
+ isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=batType, bySkill=connSkill, byBuff=connBuff, **kwargs)
else:
GameWorld.DebugLogEx("被动触发技能,重新锁定目标! effSkillID=%s,effectID=%s,passiveSkillID=%s,bySkillID=%s", effSkillID, effectID, passiveSkillID, bySkillID)
- isOK = OnUseSkill(turnFight, batObj, passiveSkill, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill, byBuff=connBuff, **kwargs)
+ isOK = OnUseSkill(turnFight, batObj, passiveSkill, batType=batType, bySkill=connSkill, byBuff=connBuff, **kwargs)
return isOK
@@ -2273,7 +2289,7 @@
return hurtValue, hurtTypes, immuneHurt
hurtValue = int(hurtValue)
- if defObj.CheckInState(ChConfig.BatObjState_Wudi):
+ if defObj.CheckInState(ChConfig.ImmuneHurtStateList):
hurtTypes |= pow(2, ChConfig.HurtAtkType_Immune) # 添加免疫
immuneHurt = hurtValue
hurtValue = 0
@@ -2557,7 +2573,7 @@
immuneHurt = immuneHurtDict.get(aveObjID)
if immuneHurt == None:
- if aveObj.CheckInState(ChConfig.BatObjState_Wudi):
+ if aveObj.CheckInState(ChConfig.ImmuneHurtStateList):
immuneHurt = 0
else:
immuneHurt = -1 # 标记没有无敌
--
Gitblit v1.8.0