From ee82685a9cf068539a065cc46403c6ef1c2d3889 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 02 四月 2024 18:34:37 +0800
Subject: [PATCH] 10019 【砍树】回合战斗(复活、多倍攻击、被动触发效果5010、5011、释放方式49、50、优化释放方式43) 1. 支持神通技能复活,区分灵宠触发复活或主角自身复活; 2. 新增被动触发效果5010,攻击有X%的概率造成X倍伤害,同个技能支持同时配置多个不同概率不同倍值;NPC支持多倍攻击; 3. 新增被动触发效果5011,回合战斗开始前触发; 4. 新增换血攻击释放方式49:消耗自身x%当前生命值,扣除敌方等额生命值,最高不超过自身x%攻击; 5. 新增结算灼烧释放方式50;优化原灼烧效果1034,支持结算灼烧伤害加成; 6. 优化原释放方式43:偷取对方属性,支持配置不超过自身属性百分比;NPC支持偷属性;优化原buff效果1015,
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1034.py | 6
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_49.py | 51 +++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5010.py | 47 ++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5011.py | 21 +++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py | 71 ++++++++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_1015.py | 27 +++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py | 5
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py | 23 ++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_43.py | 46 +++++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_50.py | 66 +++++++++
12 files changed, 330 insertions(+), 40 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
index cea0fbf..e8cd774 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/AttackLogic/AttackCommon.py
@@ -1348,8 +1348,11 @@
ChConfig.Def_HurtType_Zhuxian, ChConfig.Def_HurtType_DeadlyHit,
ChConfig.Def_HurtType_ThumpHit]
elif atkObjType == IPY_GameWorld.gotNPC:
- calcTypeList += [ChConfig.Def_HurtType_SuperHit]
-
+ if PetControl.IsPetNPC(atkObj):
+ calcTypeList += [ChConfig.Def_HurtType_SuperHit]
+ else:
+ calcTypeList += [ChConfig.Def_HurtType_SuperHit, ChConfig.Def_HurtType_DeadlyHit]
+
if defObjType == IPY_GameWorld.gotPlayer:
calcTypeList += [ChConfig.Def_HurtType_Parry]
@@ -2025,7 +2028,7 @@
if tick - defObj.GetDictByKey(ChConfig.Def_PlayerKey_SomersaultTime) < 500:
return 0, ChConfig.Def_HurtType_Miss
- multiValue = 1 # 伤害倍值
+ multiValue = 0 # 伤害倍值
summonAtkPer = 1 # 召唤继承提高基础攻击力,取表
summonAtkObj = atkwargs.get('orgAtkObj', None) if atkwargs.get('orgAtkObj', None) else atkObj
if summonAtkObj.GetGameObjType() == IPY_GameWorld.gotNPC and summonAtkObj.GetGameNPCObjType() == IPY_GameWorld.gnotSummon:
@@ -2397,13 +2400,17 @@
hurtFormula = hurtDist[hurtFormulaKey]
hurtValue = int(eval(FormulaControl.GetCompileFormula(hurtFormulaKey, hurtFormula)))
- if isDeadlyHit:
- hurtValue *= deadlyHitMultiValue
+ if isDeadlyHit and deadlyHitMultiValue != 1:
+ multiValue += deadlyHitMultiValue
if atkObjType == IPY_GameWorld.gotPlayer and defObjType == IPY_GameWorld.gotNPC and mapID == ChConfig.Def_FBMapID_CrossBattlefield:
- multiValue = FBLogic.GetFBPlayerHurtNPCMultiValue(atkObj, defObj)
-
- if multiValue != 1:
+ fbMultiValue = FBLogic.GetFBPlayerHurtNPCMultiValue(atkObj, defObj)
+ if fbMultiValue != 1:
+ multiValue += fbMultiValue
+
+ if multiValue:
+ GameWorld.DebugLog(" 多倍伤害: atkID=%s,defID=%s,skillID=%s,hurtValue=%s,multiValue=%s"
+ % (atkObj.GetID(), defObj.GetID(), skillID, hurtValue, multiValue))
hurtValue = int(hurtValue * multiValue)
#hurtValue = min(max(hurtValue, 0), ChConfig.Def_UpperLimit_DWord)
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 49e36b9..a8caea7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -48,9 +48,10 @@
# 回合战斗复活类型
(
-RebornType_PetSkill,
-RebornType_ElfSkill,
-) = range(1, 1 + 2)
+RebornType_PetSkill, # 灵兽复活,包含灵宠自身技能 或 由灵宠触发的技能
+RebornType_ElfSkill, # 精怪复活
+RebornType_ShentongSkill, # 神通复活 - 由主角自己触发,灵宠触发的神通技能归为灵宠复活
+) = range(1, 1 + 3)
def GetObjName(gameObj):
objName = gameObj.GetName()
@@ -201,7 +202,11 @@
# 战斗前初始化,可能会改变攻速,所以先初始化
for factionObjList in atkFactionList:
for gameObj in factionObjList:
- TurnFightObjStartInit(playerID, gameObj, tick)
+ if not gameObj:
+ continue
+ faction = GameObj.GetFaction(gameObj)
+ tagGameObj = objB if faction == 1 else objA
+ TurnFightObjStartInit(playerID, gameObj, tagGameObj, tick)
#一个回合攻击顺序,为了后续逻辑统一,都是先确定好顺序
sortType = 2 # 攻击顺序排序方式
@@ -420,8 +425,17 @@
continue
if skill.GetRemainTime():
continue
+ isPetTrigger, triggerPet = GetTriggerRebornPet(gameObj, skill) # 可能由灵宠触发的
+ if isPetTrigger:
+ if triggerPet:
+ return RebornType_PetSkill, triggerPet, skill
+ continue
+ if not CheckRoleStateCanUseRebornSkill(gameObj, skill):
+ continue
if skill.GetFuncType() == ChConfig.Def_SkillFuncType_ElfSkill:
return RebornType_ElfSkill, skill
+ if skill.GetFuncType() == ChConfig.Def_SkillFuncType_ShentongSkill:
+ return RebornType_ShentongSkill, skill
# 检查是否有灵宠复活技能
for index in range(gameObj.GetSummonCount()):
@@ -443,6 +457,29 @@
#GameWorld.DebugLog(" 没有可以复活的方式!")
return
+def GetTriggerRebornPet(gameObj, skill):
+ ## 获取灵宠触发的复活信息
+ # @return: 是否由灵宠触发, 触发的灵宠实例
+ isPetTrigger, triggerPet = False, None
+ if SkillShell.GetSkillAffectTag(skill) != ChConfig.Def_UseSkillTag_SummonMaster:
+ return isPetTrigger, triggerPet
+
+ isPetTrigger = True
+ for index in range(gameObj.GetSummonCount()):
+ curSummonNPC = gameObj.GetSummonNPCAt(index)
+ if not curSummonNPC:
+ continue
+ if PetControl.IsPetNPC(curSummonNPC):
+ triggerPet = curSummonNPC
+ break
+ return isPetTrigger, triggerPet
+
+def CheckRoleStateCanUseRebornSkill(gameObj, skill):
+ ## 检查主角当前状态是否可以使用复活技能
+
+ # 暂时默认可以,寻道冰冻状态不可以
+ return True
+
def DoReborn(gameObj, hpPer=ChConfig.Def_MaxRateValue):
## 执行复活
rebornTypeInfo = GetRebornTypeInfo(gameObj)
@@ -461,7 +498,7 @@
hpPer = skill.GetEffect(0).GetEffectValue(0)
rebornValue1 = petNPC.GetID()
rebornValue2 = skill.GetSkillID()
- elif rebornType == RebornType_ElfSkill:
+ elif rebornType in [RebornType_ElfSkill, RebornType_ShentongSkill]:
skill = rebornTypeInfo[1]
skill.SetRemainTime(skill.GetCoolDownTime())
hpPer = skill.GetEffect(0).GetEffectValue(0)
@@ -509,7 +546,7 @@
gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnFightTimeline, turnNum * 100 + actionNum)
return
-def TurnFightObjStartInit(playerID, gameObj, tick):
+def TurnFightObjStartInit(playerID, gameObj, tagObj, tick):
## 回合制战斗实例初始化
if not gameObj:
return
@@ -564,6 +601,8 @@
gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnAtkAddXPCount, 0)
gameObj.SetDict(ChConfig.Def_Obj_Dict_TurnXPFullTimeline, 0)
+ PassiveBuffEffMng.OnPassiveSkillTrigger(gameObj, tagObj, None, ChConfig.TriggerType_TurnFightStart, tick)
+
__logGameObjAttr(gameObj)
return
@@ -738,15 +777,23 @@
def AddTurnObjHurtValue(curObj, tagObj, hurtType, hurtValue, lostHP, curSkill=None):
if not curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnFightTimeline):
return
+ curID = curObj.GetID()
+ tagID = tagObj.GetID()
skillID = curSkill.GetSkillID() if curSkill else 0
totalHurtEx = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnTotalHurtEx) * ChConfig.Def_PerPointValue
- totalHurt = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnTotalHurt) + totalHurtEx + hurtValue
- curObj.SetDict(ChConfig.Def_Obj_Dict_TurnTotalHurt, totalHurt % ChConfig.Def_PerPointValue)
- curObj.SetDict(ChConfig.Def_Obj_Dict_TurnTotalHurtEx, totalHurt / ChConfig.Def_PerPointValue)
- GameWorld.DebugLog(" 伤血: curTD=%s,tagID=%s,skillID=%s,hurtType=%s,hurtValue=%s,totalHurt=%s,tagHP=%s"
- % (curObj.GetID(), tagObj.GetID(), skillID, hurtType, hurtValue, totalHurt, GameObj.GetHP(tagObj)))
+ totalHurt = curObj.GetDictByKey(ChConfig.Def_Obj_Dict_TurnTotalHurt) + totalHurtEx
+ if curID != tagID:
+ totalHurt += hurtValue
+ curObj.SetDict(ChConfig.Def_Obj_Dict_TurnTotalHurt, totalHurt % ChConfig.Def_PerPointValue)
+ curObj.SetDict(ChConfig.Def_Obj_Dict_TurnTotalHurtEx, totalHurt / ChConfig.Def_PerPointValue)
+ GameWorld.DebugLog(" 伤血: curTD=%s,tagID=%s,skillID=%s,hurtType=%s,hurtValue=%s,totalHurt=%s,lostHP=%s,tagHP=%s"
+ % (curID, tagID, skillID, hurtType, hurtValue, totalHurt, lostHP, GameObj.GetHP(tagObj)))
+ else:
+ # 如换血类技能,自残的伤害不算输出
+ GameWorld.DebugLog(" 自残: curTD=%s,tagID=%s,skillID=%s,hurtType=%s,hurtValue=%s,totalHurt=%s,lostHP=%s,curHP=%s"
+ % (curID, tagID, skillID, hurtType, hurtValue, totalHurt, lostHP, GameObj.GetHP(curObj)))
- if lostHP:
+ if lostHP and curID != tagID:
AddTurnFightXP(tagObj, __GetAddXP_Defender(tagObj, lostHP), "skillID:%s" % skillID)
AddTurnFightXP(curObj, __GetAddXP_Attack(curObj, curSkill), "skillID:%s" % skillID)
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index f0fb001..4d56b1a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -5137,7 +5137,8 @@
TriggerType_AttackOverPet, # 灵宠攻击(对敌技能)后被动技能被触发 97
TriggerType_XPAttackAddSkillPer, # 道法攻击增加伤害百分比 98
TriggerType_XPAttackOver, # 道法攻击后触发99
-) = range(1, 100)
+TriggerType_TurnFightStart, # 回合开场触发 100
+) = range(1, 101)
#不可以佩戴翅膀的地图
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1034.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1034.py
index a342279..7080813 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1034.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/BuffProcess_1034.py
@@ -94,8 +94,12 @@
count = curBuff.GetValue2()
#无剩余
if count > 0:
+ totalDecHP = curBuff.GetValue() * count
+ addBurnHurtPer = defender.GetDictByKey("addBurnHurtPer") # 灼烧伤害加成
+ if addBurnHurtPer:
+ totalDecHP = int(totalDecHP * (1 + addBurnHurtPer/float(ChConfig.Def_MaxRateValue)))
SkillCommon.SkillLostHP(defender, curSkill.GetSkillTypeID(), SkillCommon.GetBuffOwner(curBuff),
- curBuff.GetValue()*count, tick, hurtType=ChConfig.Def_HurtType_Burn)
+ totalDecHP, tick, hurtType=ChConfig.Def_HurtType_Burn)
if GameObj.GetHP(defender) <= 0:
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_1015.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_1015.py
index 3d62c4c..817a096 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_1015.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameBuffs/Buff_1015.py
@@ -14,8 +14,7 @@
#---------------------------------------------------------------------
import ChConfig
-import BuffSkill
-import IPY_GameWorld
+
#---------------------------------------------------------------------
## buff线性增加属性
@@ -26,8 +25,30 @@
def OnCalcBuffEx(defender, curEffect, calcDict, curBuff):
attrType = curEffect.GetEffectValue(0)
+ curSkill = curBuff.GetSkill()
+ if not curSkill:
+ return
+
+ valueIndex = None
+ for i in xrange(curSkill.GetEffectCount()):
+ curEffect = curSkill.GetEffect(i)
+ if curEffect.GetEffectValue(0) == attrType:
+ valueIndex = i
+ break
+
+ if valueIndex == None:
+ return
+
+ if attrType == ChConfig.TYPE_Calc_AttrATKMin:
+ # 最小攻击不处理,仅处理最大攻击,配置的时候只配置最大攻击即可,同步加最小攻击
+ return
+
vauleFunc = [curBuff.GetValue, curBuff.GetValue1, curBuff.GetValue2]
- calcDict[attrType] = calcDict.get(attrType, 0) + vauleFunc[min(2, curEffect.GetEffectValue(2))]()
+ addValue = vauleFunc[min(2, valueIndex)]()
+ calcDict[attrType] = calcDict.get(attrType, 0) + addValue
+ if attrType == ChConfig.TYPE_Calc_AttrATKMax:
+ calcDict[ChConfig.TYPE_Calc_AttrATKMin] = calcDict.get(ChConfig.TYPE_Calc_AttrATKMin, 0) + addValue
+
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
index d73897a..5c3cfd8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
@@ -1320,7 +1320,6 @@
if curSkill and GetSkillBattleType(curSkill) == ChConfig.Def_BattleRelationType_CommNoBoss and SkillShell.IsNPCSkillResist(curObj):
return
- notifyLostValue = lostValue
curObjHP_BeforeAttack = GameObj.GetHP(curObj)
if curObjHP_BeforeAttack == 0:
# 没有血量不能再触发
@@ -1363,7 +1362,7 @@
AttackCommon.WriteHurtLog(buffOwner, curObj, curSkill, lostValue, hurtType, "持续掉血")
if view:
#广播伤血类型
- AttackCommon.ChangeHPView(curObj, buffOwner, skillTypeID, notifyLostValue, hurtType)
+ AttackCommon.ChangeHPView(curObj, buffOwner, skillTypeID, lostValue, hurtType)
if buffOwner:
PassiveBuffEffMng.OnPassiveSkillTrigger(buffOwner, curObj, curSkill, ChConfig.TriggerType_AttackOverPassive, tick)
@@ -1417,7 +1416,7 @@
#统一调用攻击结束动作
if isDoAttackResult:
BaseAttack.DoLogic_AttackResult(buffOwner, curObj, None, tick)
- return
+ return lostHP
## 检查增加淬毒buff
# @param skillTypeID 使用的技能typeID
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_43.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_43.py
index 9460df8..c1937b5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_43.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_43.py
@@ -17,30 +17,54 @@
import BaseAttack
import BuffSkill
import IPY_GameWorld
-import SkillCommon
import EffGetSet
+import GameWorld
+import SkillCommon
-def UseSkill(attacker, defender, curSkill, tagRoundPosX, tagRoundPosY, isEnhanceSkill, tick):
+def UseBuff(attacker, defender, curSkill, tick, tagRoundPosX, tagRoundPosY):
+#def UseSkill(attacker, defender, curSkill, tagRoundPosX, tagRoundPosY, isEnhanceSkill, tick):
if not defender:
return
- if defender.GetGameObjType() != IPY_GameWorld.gotPlayer:
- return
+ atkObjType = attacker.GetGameObjType()
+ defObjType = defender.GetGameObjType()
+
+ attrIndexAllowList = [] # 存在NPC,仅允许偷取的属性类型
+ if atkObjType != IPY_GameWorld.gotPlayer or defObjType != IPY_GameWorld.gotPlayer:
+ attrIndexAllowList = [ChConfig.TYPE_Calc_AttrMaxHP, ChConfig.TYPE_Calc_AttrATKMin, ChConfig.TYPE_Calc_AttrATKMax,
+ ChConfig.TYPE_Calc_AttrDEF, ChConfig.TYPE_Calc_AttrAtkSpeed]
+
+ #GameWorld.DebugLog("偷取目标属性: atkID=%s,defID=%s,attrIndexAllowList=%s" % (attacker.GetID(), defender.GetID(), attrIndexAllowList))
addBuffValueList = []
# 效果ID | 属性项,万分率
- # 最多吸收目标3种属性 存入buffvalue
+ # 最多吸收目标3种属性 存入buffvalue,固定前3个效果
+ # A值-属性ID B值-吸取万分率 C值-最高不超过自身属性万分率,配0不限制
for i in range(3):
- attrIndex = curSkill.GetEffect(i).GetEffectValue(0)
+ effect = curSkill.GetEffect(i)
+ attrIndex = effect.GetEffectValue(0)
if not attrIndex:
- break
- curValue = EffGetSet.GetValueByEffIndex(defender, attrIndex)
- curValue = int(curValue * curSkill.GetEffect(i).GetEffectValue(1) / ChConfig.Def_MaxRateValue)
+ continue
+ if attrIndexAllowList and attrIndex not in attrIndexAllowList:
+ continue
- addBuffValueList.append(curValue)
+ attrRate = effect.GetEffectValue(1)
+ tagValue = EffGetSet.GetValueByEffIndex(defender, attrIndex)
+ addValue = int(tagValue * attrRate / float(ChConfig.Def_MaxRateValue))
+
+ maxRate = effect.GetEffectValue(2)
+ curValue = EffGetSet.GetValueByEffIndex(attacker, attrIndex)
+ if maxRate:
+ maxValue = int(curValue * maxRate / float(ChConfig.Def_MaxRateValue))
+ addValue = min(addValue, maxValue)
+
+ addBuffValueList.append(addValue)
+ GameWorld.DebugLog("偷取目标属性: atkID=%s,defID=%s,attrIndex=%s,attrRate=%s,addValue=%s,tagValue=%s,curValue=%s,maxRate=%s"
+ % (attacker.GetID(), defender.GetID(), attrIndex, attrRate, addValue, tagValue, curValue, maxRate))
buffType = SkillCommon.GetBuffType(curSkill)
BuffSkill.DoAddBuff(attacker, buffType, curSkill, tick, addBuffValueList, attacker)
+ return True
#处理技能触发和攻击成功逻辑
- return BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)
+ #return BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_49.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_49.py
new file mode 100644
index 0000000..dc88b19
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_49.py
@@ -0,0 +1,51 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.GameSkills.SkillModule_49
+#
+# @todo:换血攻击
+# @author hxp
+# @date 2024-04-02
+# @version 1.0
+#
+# 详细描述: 消耗自身x%当前生命值,扣除敌方等额生命值,最高不超过自身x%攻击。
+# 效果1: A值-消耗血量百分比,B值-最高不超过攻击百分比
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2024-04-02 19:00"""
+#-------------------------------------------------------------------------------
+
+import ChConfig
+import SkillCommon
+import BaseAttack
+import GameWorld
+import GameObj
+
+def UseSkill(attacker, defender, curSkill, tagRoundPosX, tagRoundPosY, isEnhanceSkill, tick):
+ if not defender:
+ return
+
+ curHP = GameObj.GetHP(attacker)
+ tagHP = GameObj.GetHP(defender)
+ if curHP <= 1 or tagHP <= 0:
+ return
+
+ skillEffect = curSkill.GetEffect(0)
+ lostHPPer = skillEffect.GetEffectValue(0)
+ maxAtkPer = skillEffect.GetEffectValue(1)
+
+ maxHP = GameObj.GetMaxHP(attacker)
+ maxAtk = attacker.GetMaxAtk()
+
+ hpHurtValue = int(maxHP * lostHPPer / float(ChConfig.Def_MaxRateValue))
+ atkHurtValue = int(maxAtk * maxAtkPer / float(ChConfig.Def_MaxRateValue))
+
+ hurtValue = min(hpHurtValue, atkHurtValue, tagHP, curHP - 1) # 至少保留1滴血
+
+ GameWorld.DebugLog(" 换血: atkID=%s,defID=%s,skillID=%s,hurtValue=%s,hpHurtValue=%s,atkHurtValue=%s,curHP=%s,tagHP=%s"
+ % (attacker.GetID(), defender.GetID(), curSkill.GetSkillID(), hurtValue, hpHurtValue, atkHurtValue, curHP, tagHP))
+ lostHP = SkillCommon.SkillLostHP(defender, curSkill.GetSkillTypeID(), attacker, hurtValue, tick, isDoAttackResult=False, skillAffect=False)
+ if lostHP:
+ SkillCommon.SkillLostHP(attacker, curSkill.GetSkillTypeID(), attacker, hurtValue, tick, isDoAttackResult=False, skillAffect=False)
+ return BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_50.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_50.py
new file mode 100644
index 0000000..464915a
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_50.py
@@ -0,0 +1,66 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.GameSkills.SkillModule_50
+#
+# @todo:结算灼烧
+# @author hxp
+# @date 2024-04-02
+# @version 1.0
+#
+# 详细描述: 结算灼烧 效果1: A值-伤害增加百分比
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2024-04-02 19:00"""
+#-------------------------------------------------------------------------------
+
+import ChConfig
+import GameWorld
+import BuffSkill
+import SkillShell
+
+def UseSkill(attacker, defender, curSkill, tagRoundPosX, tagRoundPosY, isEnhanceSkill, tick):
+ if not defender:
+ return
+
+ # 对存在灼烧效果ID的持续减益buff进行结算
+ buffState = defender.GetProcessDeBuffState()
+ buffStateCount = buffState.GetBuffCount()
+ if not buffStateCount:
+ return
+
+ skillEffect = curSkill.GetEffect(0)
+ addBurnHurtPer = skillEffect.GetEffectValue(0)
+ defender.SetDict("addBurnHurtPer", addBurnHurtPer)
+
+ isBurn = False
+ #buff持续效果,回合下可能删除buff,倒序遍历
+ for i in range(0, buffStateCount)[::-1]:
+ curBuff = buffState.GetBuff(i)
+ if not curBuff:
+ continue
+ isDel = False
+ curBuffSkill = curBuff.GetSkill()
+ for effIndex in range(0, curBuffSkill.GetEffectCount()):
+ #得到当前效果
+ curEffect = curBuffSkill.GetEffect(effIndex)
+ curEffectID = curEffect.GetEffectID()
+ if curEffectID == ChConfig.Def_Skill_Effect_Burn:
+ isDel = True
+ break
+ if not isDel:
+ continue
+ # 直接删除buff,由buff自身消失逻辑进行结算
+ GameWorld.DebugLog(" 立即结算灼烧buff: atkID=%s,defID=%s,skillID=%s,addBurnHurtPer=%s"
+ % (attacker.GetID(), defender.GetID(), curBuffSkill.GetSkillID(), addBurnHurtPer))
+ isBurn = True
+ skillID = curBuffSkill.GetSkillID()
+ skillTypeID = curBuffSkill.GetSkillTypeID()
+ ownerID, ownerType = curBuff.GetOwnerID(), curBuff.GetOwnerType()
+ BuffSkill.DoBuffDisApper(defender, curBuff, tick)
+ buffState.DeleteBuffByTypeID(skillTypeID)
+ SkillShell.ClearBuffEffectBySkillID(defender, skillID, ownerID, ownerType)
+
+ defender.SetDict("addBurnHurtPer", 0)
+ return isBurn
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5010.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5010.py
new file mode 100644
index 0000000..b2d4d0a
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5010.py
@@ -0,0 +1,47 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveBuff.PassiveSkill_5010
+#
+# @todo:攻击有X%的概率造成X倍伤害
+# @author hxp
+# @date 2024-04-02
+# @version 1.0
+#
+# 详细描述: 攻击有X%的概率造成X倍伤害,同个技能支持同时配置多个不同概率不同倍值;
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2024-04-02 19:00"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+
+g_multiValue = 0 # 倍值
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+ global g_multiValue
+ g_multiValue = 0
+
+ effID = effect.GetEffectID()
+ for i in range(0, curSkill.GetEffectCount()):
+ curEffect = curSkill.GetEffect(i)
+ curEffectID = curEffect.GetEffectID()
+ cValue = curEffect.GetEffectValue(2)
+ if curEffectID != effID and cValue != effID:
+ # 多组的话,其余的效果ID必须配0,且 效果ID 配置在C值,不然会导致同个被动技能概率重复计算多次(重复次数=配置的组数)
+ continue
+ rate = curEffect.GetEffectValue(0)
+ value = curEffect.GetEffectValue(1)
+ canHappen = GameWorld.CanHappen(rate)
+ #GameWorld.DebugLog("概率X倍: skillID=%s,effID=%s,rate=%s,value=%s,cValue=%s,canHappen=%s"
+ # % (curSkill.GetSkillID(), curEffectID, rate, value, cValue, canHappen))
+ # 取最高倍值
+ if canHappen and value > g_multiValue:
+ g_multiValue = value
+
+ return True if g_multiValue else False
+
+def GetValue(attacker, defender, effect):
+ #GameWorld.DebugLog(" g_multiValue=%s" % (g_multiValue))
+ return g_multiValue
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5011.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5011.py
new file mode 100644
index 0000000..05736f4
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_5011.py
@@ -0,0 +1,21 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveBuff.PassiveSkill_5011
+#
+# @todo:回合战斗开场时触发
+# @author hxp
+# @date 2024-04-02
+# @version 1.0
+#
+# 详细描述: 回合战斗开场时触发
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2024-04-02 19:00"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+
+def CheckCanHappen(attacker, defender, effect, curSkill):
+ return GameWorld.CanHappen(effect.GetEffectValue(0))
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
index 542511f..2d4ad2a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuffEffMng.py
@@ -447,6 +447,8 @@
5007:ChConfig.TriggerType_XPAttackAddSkillPer, # 道法攻击增加伤害百分比 98
5008:ChConfig.TriggerType_XPAttackOver, # 道法攻击后触发99
5009:ChConfig.TriggerType_BounceHPPer, # 受到攻击时,反弹伤害百分比值17
+ 5010:ChConfig.TriggerType_IsDealy, # 是否触发致命一击 72
+ 5011:ChConfig.TriggerType_TurnFightStart, # 回合开场触发 100
}
return tdict.get(effectID, -1)
#===========================================================================
@@ -1340,7 +1342,7 @@
continue
if triggerType == ChConfig.TriggerType_IsDealy:
- curValue = callFunc(attacker, defender, effect)
+ curValue = max(curValue, callFunc(attacker, defender, effect)) # 取最高倍值
else:
curValue += callFunc(attacker, defender, effect)
if skillTypeID not in Def_PassiveSkillValueNoCD:
--
Gitblit v1.8.0