From 6343277477b190efbc389bab2706cf94eb09be8d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 07 二月 2026 20:59:32 +0800
Subject: [PATCH] 358 【内政】红颜系统-服务端(红颜时装默认解锁的状态也通知;红颜时装物品解锁改为直接取背包中的物品;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 112 ++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 85 insertions(+), 27 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 135eb26..6debe17 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -163,8 +163,8 @@
angerOverflow = curBatObj.GetAngerOverflow()
bySkillID = bySkill.GetSkillID() if bySkill else 0
- GameWorld.DebugLogEx("◆使用技能: curID=%s,skillID=%s,tagCnt=%s,batType=%s,bySkillID=%s,HP:%s/%s,angerOverflow=%s,curXP=%s,oneActionUseCnt=%s",
- objID, skillID, len(tagObjList), batType, bySkillID, curBatObj.GetHP(), curBatObj.GetMaxHP(), angerOverflow, curXP, oneActionUseCnt)
+ GameWorld.DebugLogEx("◆使用技能: skillID=%s,curID=%s,tagCnt=%s,batType=%s,bySkillID=%s,HP:%s/%s,angerOverflow=%s,curXP=%s,oneActionUseCnt=%s",
+ skillID, objID, len(tagObjList), batType, bySkillID, curBatObj.GetHP(), curBatObj.GetMaxHP(), angerOverflow, curXP, oneActionUseCnt)
# 以下为技能可以使用的处理,之后的逻辑默认技能使用成功
if isinstance(useSkill, IpyGameDataPY.IPY_Skill):
@@ -1569,6 +1569,10 @@
# ========== 以下触发被动 ==========
+ curBatLineup = curObj.GetTFBatLineup()
+ curMGObj = curBatLineup.getMinggeObj()
+ mgTriggerWayList = [] # 命格本次技能已触发方式列表,命格固定只触发一次
+
# buff消失后置处理的被动,优先处理,如破盾,区别于被动方式 ChConfig.TriggerWay_BuffDel(立即触发)
for buffObjID, buff, tagObjID, afterTriggerData in delBuffAfterEffList:
triggerWay, effInfoList = afterTriggerData
@@ -1615,6 +1619,9 @@
TurnBuff.DoBuffByRevive(turnFight, tagObj)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Revive, curObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_InBattlefield, curObj, connSkill=useSkill)
+ if reviveObjList and curMGObj:
+ tagObj = reviveObjList[0]
+ TurnPassive.OnTriggerPassiveEffect(turnFight, curMGObj, ChConfig.TriggerWay_Revive, tagObj, connSkill=useSkill, byFriendObj=curObj)
# 曹仁防护触发,暂写死
for tagObj in caorenProtectList:
@@ -1633,9 +1640,6 @@
triggerOne = False
batType = useSkill.GetBatType()
isAttackDirect = (isUseSkill and SkillCommon.isAttackDirectSkill(useSkill)) # 是否直接攻击
- curBatLineup = curObj.GetTFBatLineup()
- curMGObj = curBatLineup.getMinggeObj()
- mgTriggerWayList = [] # 命格本次技能已触发方式列表,命格固定只触发一次
for tagObj in tagObjListAll:
tagID = tagObj.GetID()
@@ -1643,7 +1647,11 @@
if tagID in missObjIDList:
TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeMiss, tagObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Miss, curObj, connSkill=useSkill)
-
+ tagMGObj = tagObj.GetTFBatLineup().getMinggeObj()
+ if tagMGObj and ChConfig.TriggerWay_Miss not in mgTriggerWayList:
+ mgTriggerWayList.append(ChConfig.TriggerWay_Miss)
+ TurnPassive.OnTriggerPassiveEffect(turnFight, tagMGObj, ChConfig.TriggerWay_Miss, curObj, connSkill=useSkill, byBatObj=tagObj)
+
# 免疫
if tagID in immuneObjIDList:
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_ImmuneHurt, curObj, connSkill=useSkill)
@@ -1691,7 +1699,10 @@
if tagID in stunObjIDList:
TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Stun, tagObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeStun, curObj, connSkill=useSkill)
-
+ if curMGObj and ChConfig.TriggerWay_Stun not in mgTriggerWayList:
+ mgTriggerWayList.append(ChConfig.TriggerWay_Stun)
+ TurnPassive.OnTriggerPassiveEffect(turnFight, curMGObj, ChConfig.TriggerWay_Stun, tagObj, connSkill=useSkill, byBatObj=curObj)
+
# 控制
if tagID in beControlledHardDict:
buff = beControlledHardDict[tagID]
@@ -1711,22 +1722,35 @@
if tagID in superHitObjIDList:
TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_SuperHit, tagObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeSuperHit, curObj, connSkill=useSkill)
-
+ if curMGObj and ChConfig.TriggerWay_SuperHit not in mgTriggerWayList:
+ mgTriggerWayList.append(ChConfig.TriggerWay_SuperHit)
+ TurnPassive.OnTriggerPassiveEffect(turnFight, curMGObj, ChConfig.TriggerWay_SuperHit, tagObj, connSkill=useSkill, byBatObj=curObj)
+
# 格挡
if tagID in parryObjIDList:
TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeParry, tagObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Parry, curObj, connSkill=useSkill)
-
+ tagMGObj = tagObj.GetTFBatLineup().getMinggeObj()
+ if tagMGObj and ChConfig.TriggerWay_Parry not in mgTriggerWayList:
+ mgTriggerWayList.append(ChConfig.TriggerWay_Parry)
+ TurnPassive.OnTriggerPassiveEffect(turnFight, tagMGObj, ChConfig.TriggerWay_Parry, curObj, connSkill=useSkill, byBatObj=tagObj)
+
# 吸血
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 curMGObj and ChConfig.TriggerWay_SuckHPOne not in mgTriggerWayList:
+ mgTriggerWayList.append(ChConfig.TriggerWay_SuckHPOne)
+ TurnPassive.OnTriggerPassiveEffect(turnFight, curMGObj, ChConfig.TriggerWay_SuckHPOne, tagObj, connSkill=useSkill, byBatObj=curObj)
+
# 连击
if batType == ChConfig.TurnBattleType_Combo:
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:
+ mgTriggerWayList.append(ChConfig.TriggerWay_Combo)
+ TurnPassive.OnTriggerPassiveEffect(turnFight, curMGObj, ChConfig.TriggerWay_Combo, tagObj, connSkill=useSkill, byBatObj=curObj)
# 追击
elif batType == ChConfig.TurnBattleType_Pursue:
TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Pursue, tagObj, connSkill=useSkill)
@@ -2060,9 +2084,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
@@ -2128,6 +2154,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:
@@ -2144,23 +2172,33 @@
isAngerSkill = SkillCommon.isAngerSkill(curSkill)
isDot = ("damageoftime" in kwargs)
- mustHit = False # 是否必命中
- if not isTurnNormalSkill: # 仅普攻判断是否闪避
- mustHit = True
-
- angerOverflow = atkObj.GetAngerOverflow() # 怒气溢出值
-
- #命中公式 攻击方类型不同,公式不同
- if not mustHit and not curSkill.GetEffectByID(ChConfig.SkillEff_MustHit) and not defObj.IsInControlledHard():
+ # 常规闪避 - 仅针对普攻
+ if isTurnNormalSkill and not curSkill.GetEffectByID(ChConfig.SkillEff_MustHit) and not defObj.IsInControlledHard():
aMissRateDef = atkObj.GetBatAttrValue(ChConfig.AttrID_MissRateDef) #atkObj.GetHit() # 抗闪避率 - 命中
dMissRate = defObj.GetBatAttrValue(ChConfig.AttrID_MissRate) # 闪避率
missNum = curSkill.GetTagMissNum(defID)
missRate = eval(IpyGameDataPY.GetFuncCompileCfg("MissCfg", 1))
if GameWorld.CanHappen(missRate):
GameWorld.DebugLogEx("闪避了! missRate=%s,dMissRate=%s,aMissRateDef=%s,missNum=%s", missRate, dMissRate, aMissRateDef, missNum)
- curSkill.SetTagMissNum(defID, missRate + 1)
+ curSkill.SetTagMissNum(defID, missNum + 1)
return 0, pow(2, ChConfig.HurtAtkType_Miss)
+ # 绝对闪避 - 除dot外的所有技能,因为绝对闪避不触发常规闪避的被动,所以在常规闪避后判断
+ 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))
+ if GameWorld.CanHappen(missRate):
+ GameWorld.DebugLogEx("绝对闪避了! missRate=%s,dAbsoluteMissRate=%s,aAbsoluteMissRateDef=%s,missNum=%s", missRate, dMissRate, aMissRateDef, missNum)
+ curSkill.SetTagMissNum(defID, missNum + 1)
+ return 0, pow(2, ChConfig.HurtAtkType_AbsoluteMiss)
+
+ angerOverflow = atkObj.GetAngerOverflow() # 怒气溢出值
+
hurtTypes = pow(2, ChConfig.HurtAtkType_Hurt)
isSuperHit, isParry, isStun = False, False, False
@@ -2179,7 +2217,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:
@@ -2208,6 +2247,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)
@@ -2255,6 +2297,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 # 战斗增减伤
@@ -2262,7 +2306,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)
@@ -2286,12 +2332,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)
@@ -2891,10 +2940,16 @@
damBackPer = 0
buffMgr = defObj.GetBuffManager()
for buff in buffMgr.FindBuffListByState(ChConfig.BatObjState_DamBackShield):
- damBackPer += buff.GetValue1()
+ damBackPer += buff.GetValue1() * max(1, buff.GetLayer())
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
@@ -2923,7 +2978,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