From d254a370d14e560470889eb69537bd21532bc254 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 02 三月 2026 18:58:56 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(郭嘉所有技能;增加触发类型62、63、64、65;增加效果6038;增加技能类型16-减益光环,对自己无效,原类型10为增益光环对自己有效;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 69 ++++++++++++++++++++++++++++------
1 files changed, 56 insertions(+), 13 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 3636b76..04d2139 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -755,7 +755,7 @@
#执行添加buff
#光环技能,需先添加施法者
- if useSkill.GetSkillType() == ChConfig.Def_SkillType_Halo:
+ if useSkill.GetSkillType() in ChConfig.Def_HaloSkill_List:
curID = curBatObj.GetID()
skillID = useSkill.GetSkillID()
GameWorld.DebugLogEx("光环技能先给施法者添加光源buff! skillID=%s,ownerID=%s", skillID, curID)
@@ -1640,6 +1640,7 @@
triggerOne = False
batType = useSkill.GetBatType()
isAttackDirect = (isUseSkill and SkillCommon.isAttackDirectSkill(useSkill)) # 是否直接攻击
+ objTriigerWayInfo = {} # 敌友已触发的列表,一般用于控制每人只触发一次的 {objID:{triggerWay:triggerCnt, ...}}
for tagObj in tagObjListAll:
tagID = tagObj.GetID()
@@ -1746,6 +1747,8 @@
# 连击
if batType == ChConfig.TurnBattleType_Combo:
+ if not triggerOne:
+ TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_ComboOne, tagObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Combo, tagObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeCombo, curObj, connSkill=useSkill)
if curMGObj and ChConfig.TriggerWay_Combo not in mgTriggerWayList:
@@ -1772,6 +1775,10 @@
if not lineupObj.IsAlive():
continue
+ if lineupObjID not in objTriigerWayInfo:
+ objTriigerWayInfo[lineupObjID] = {}
+ objTriigerWayCntDict = objTriigerWayInfo[lineupObjID]
+
# 直接攻击
if isAttackDirect:
if not triggerOne:
@@ -1783,17 +1790,26 @@
if not triggerOne:
TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendDotHurt, tagObj, connSkill=useSkill, byFriendObj=curObj)
- # 敌方被控时
+ # 敌方被控时 - 默认为友军造成的
if tagID in beControlledHardDict and lineupObj.GetFaction() != tagObj.GetFaction():
TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_EnemyBeControlledHard, tagObj, connSkill=useSkill)
-
+ tagBuff = beControlledHardDict[tagID]
+ # 敌方被冰冻
+ if tagBuff.GetCurBuffState() == ChConfig.BatObjState_Frozen:
+ if ChConfig.TriggerWay_FriendCausesFrozen not in objTriigerWayCntDict:
+ objTriigerWayCntDict[ChConfig.TriggerWay_FriendCausesFrozen] = 1
+ TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendCausesFrozen, tagObj, connSkill=useSkill)
+
# 连击
if batType == ChConfig.TurnBattleType_Combo:
TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendCombo, tagObj, connSkill=useSkill, byFriendObj=curObj)
-
+ if isAttackDirect:
+ TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendComboHurt, tagObj, connSkill=useSkill, byFriendObj=curObj)
# 追击
elif batType == ChConfig.TurnBattleType_Pursue:
TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendPursue, tagObj, connSkill=useSkill, byFriendObj=curObj)
+ if isAttackDirect:
+ TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendPursueHurt, tagObj, connSkill=useSkill, byFriendObj=curObj)
triggerOne = True # 设置已经触发过一次
@@ -1858,10 +1874,10 @@
fightPoint = max(curPlayer.GetFightPoint(), 1) # 主线战斗消耗倍值,默认1
costZhanchuiTotal = costZhanchui * fightPoint
- if not PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_Xiantao, costZhanchuiTotal, isNotify=False):
+ if not PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_Xiantao, costZhanchuiTotal, "UseSkill", isNotify=False):
# 不足时,有多少扣多少
nowMoney = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_Xiantao)
- PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_Xiantao, min(nowMoney, costZhanchuiTotal), isNotify=False)
+ PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_Xiantao, min(nowMoney, costZhanchuiTotal), "UseSkill", isNotify=False)
return
@@ -2084,9 +2100,11 @@
bySkillID = connBuff.GetSkillID()
passiveSkillID = passiveSkill.GetSkillID()
if passiveSkillID == bySkillID:
- #GameWorld.DebugLogEx("###被动触发技能不触发自身,防止死循环! effSkillID=%s,effectID=%s,passiveSkillID=%s", effSkillID, effectID, passiveSkillID)
- return
-
+ if not connSkill or connSkill.GetObjID() == batObj.GetID():
+ GameWorld.DebugLogEx("###被动触发技能不触发自身,防止死循环! effSkillID=%s,effectID=%s,passiveSkillID=%s", effSkillID, effectID, passiveSkillID)
+ return
+ # 不同施法者的相同技能ID可触发,如双方都有相同武将相同技能的情况下,如吕玲绮
+
if hasattr(passiveSkill, "GetRemainTime") and passiveSkill.GetRemainTime() > 0:
#GameWorld.DebugLogEx("被动触发技能CD中! skillID=%s,RemainTime=%s", passiveSkillID, passiveSkill.GetRemainTime())
return
@@ -2152,6 +2170,8 @@
pmType = GetPMType(atkObj, curSkill)
ignoreDef = IsIgnoreDef(curSkill)
batType = curSkill.GetBatType()
+ atkMGObj = atkObj.GetTFBatLineup().getMinggeObj()
+ defMGObj = defObj.GetTFBatLineup().getMinggeObj()
changeHurtType = TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_ChangeHurtType, curSkill)
if not changeHurtType:
@@ -2183,6 +2203,8 @@
if not isDot:
aMissRateDef = atkObj.GetBatAttrValue(ChConfig.AttrID_AbsoluteMissRateDef)
dMissRate = defObj.GetBatAttrValue(ChConfig.AttrID_AbsoluteMissRate)
+ if defMGObj:
+ dMissRate += defMGObj.GetBatAttrValue(ChConfig.AttrID_AbsoluteMissRate)
missNum = curSkill.GetTagMissNum(defID)
if dMissRate > 0:
missRate = eval(IpyGameDataPY.GetFuncCompileCfg("MissCfg", 1))
@@ -2211,7 +2233,8 @@
aSuperDamPer = IpyGameDataPY.GetFuncCfg("SuperHitCfg", 2) * 10000
aSuperDamPer += atkObj.GetBatAttrValue(ChConfig.AttrID_SuperDamPer)
aSuperDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_SuperDamPer, curSkill)
-
+ if atkMGObj:
+ aSuperDamPer += atkMGObj.GetBatAttrValue(ChConfig.AttrID_SuperDamPer)
dSuperDamPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_SuperDamPerDef)
if isParry:
@@ -2240,6 +2263,9 @@
aFinalDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddFinalDamPer, curSkill)
aFinalDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_FinalDamPer, curSkill)
+ if defMGObj:
+ dFinalDamPerDef += defMGObj.GetBatAttrValue(ChConfig.AttrID_FinalDamPerDef)
+
#招架 - 无视攻击方最终增伤百分比
dZhaojia = defObj.GetBatAttrValue(ChConfig.AttrID_Zhaojia)
aZhaojiaDef = atkObj.GetBatAttrValue(ChConfig.AttrID_ZhaojiaDef)
@@ -2287,6 +2313,8 @@
aDOTPer += atkObj.GetBatAttrValue(ChConfig.AttrID_DOTBurnPer)
dDOTPerDef += defObj.GetBatAttrValue(ChConfig.AttrID_DOTBurnPerDef)
GameWorld.DebugLogEx("是灼烧: aDOTPer=%s,dDOTPerDef=%s", aDOTPer, dDOTPerDef)
+ if atkMGObj:
+ aDOTPer += atkMGObj.GetBatAttrValue(ChConfig.AttrID_DOTPer)
#aAddSkillPer = 0 # 技能增伤
dBatDamPerDef = 0 # 战斗增减伤
@@ -2294,7 +2322,9 @@
aBatDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_BatDamPer, curSkill)
aBatDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddBatDamPerByTagLostHP, curSkill)
aBatDamPer += addBatDamPer
-
+ if atkMGObj:
+ aBatDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkMGObj, defObj, ChConfig.AttrID_BatDamPer, curSkill)
+
# 物法增减伤
if pmType == IPY_GameWorld.ghtMag: # 法伤
aPMDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_MagDamPer)
@@ -2318,12 +2348,15 @@
if batType == ChConfig.TurnBattleType_Combo:
aComboDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_ComboDamPer)
dComboDamPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_ComboDamPerDef)
-
+ if atkMGObj:
+ aComboDamPer += atkMGObj.GetBatAttrValue(ChConfig.AttrID_ComboDamPer)
aPursueDamPer, dPursueDamPerDef = 0, 0 # 追击增伤
if batType == ChConfig.TurnBattleType_Pursue:
aPursueDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_PursueDamPer)
dPursueDamPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_PursueDamPerDef)
-
+ if atkMGObj:
+ aPursueDamPer += atkMGObj.GetBatAttrValue(ChConfig.AttrID_PursueDamPer)
+
aPVPDamPer, dPVPDamPerDef = 0, 0 # PVP
if turnFight.isPVP() > 0:
aPVPDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_PVPDamPer)
@@ -2438,6 +2471,7 @@
atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByBuffLayer, curSkill)
atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByDeadTeammate, curSkill)
atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByBuffState, curSkill)
+ atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByBeFrozenCnt, curSkill)
return atkSkillPer
def CanSuperHit(turnFight, atkObj, defObj, curSkill):
@@ -2927,6 +2961,12 @@
connSkillTypeID = buff.GetSkillTypeID()
damBackPer += TurnPassive.GetTriggerEffectValue(turnFight, defObj, atkObj, ChConfig.PassiveEff_AddDamBackPerByBuffLayer, connSkillTypeID=connSkillTypeID)
+ defMGObj = defObj.GetTFBatLineup().getMinggeObj()
+ if defMGObj:
+ mgBuffMgr = defMGObj.GetBuffManager()
+ for buff in mgBuffMgr.FindBuffListByState(ChConfig.BatObjState_DamBackShield):
+ damBackPer += buff.GetValue1() * max(1, buff.GetLayer())
+
if damBackPer <= 0:
return
@@ -2955,7 +2995,10 @@
# dot施法者已死亡不再吸血
return
+ atkMGObj = atkObj.GetTFBatLineup().getMinggeObj()
aSuckHPPer = atkObj.GetBatAttrValue(ChConfig.AttrID_SuckHPPer)
+ if atkMGObj:
+ aSuckHPPer += atkMGObj.GetBatAttrValue(ChConfig.AttrID_SuckHPPer)
aCurePer = atkObj.GetBatAttrValue(ChConfig.AttrID_CurePer)
dSuckHPPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_SuckHPPerDef)
--
Gitblit v1.8.0