hxp
2025-12-24 6f2c8b0e79e4963cc6aceda674847d04d23e02b2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -832,7 +832,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 +910,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
@@ -1348,16 +1348,21 @@
    # 统计击杀
    killObjList = [] # 击杀其他阵营目标列表
    dieObjList = [] # 死亡的单位列表,包含友方单位或自己
    nodeadObjList = [] # 不死的单位列表
    tagObjList = useSkill.GetTagObjList() # 主要目标列表
    tagObjListEx = useSkill.GetTagObjListEx() # 额外目标列表
    tagObjListAll = tagObjList + tagObjListEx
    for tagObj in tagObjListAll:
        tagID = tagObj.GetID()
        if tagObj.IsAlive() and tagObj.GetHP() <= 0:
            dieObjList.append(tagObj)
            if tagObj.GetFaction() != curObj.GetFaction():
                killObjList.append(tagObj)
            TurnAttack.SetObjKilled(turnFight, tagObj, curObj, useSkill)
            if tagObj.CanNoDead():
                tagObj.SetHP(1, True) # 触发不死,保留1点血量
                nodeadObjList.append(tagObj)
            else:
                dieObjList.append(tagObj)
                if tagObj.GetFaction() != curObj.GetFaction():
                    killObjList.append(tagObj)
                TurnAttack.SetObjKilled(turnFight, tagObj, curObj, useSkill)
    useSkill.SetKillObjList(killObjList)
    
    # 统计伤血,可能单个技能对同一目标造成多次伤害
@@ -1425,9 +1430,13 @@
            
    # 判断自己死亡,因为反弹、平摊伤害的原因,有可能自己干死自己
    if curObj.IsAlive() and curObj.GetHP() <= 0:
        dieObjList.append(curObj)
        killer = bounceObjList[0] if bounceObjList else None
        TurnAttack.SetObjKilled(turnFight, curObj, killer)
        if curObj.CanNoDead():
            curObj.SetHP(1, True) # 触发不死,保留1点血量
            nodeadObjList.append(curObj)
        else:
            dieObjList.append(curObj)
            killer = bounceObjList[0] if bounceObjList else None
            TurnAttack.SetObjKilled(turnFight, curObj, killer)
        
    # 记录最后一次总伤害,有伤害目标才记录
    if totalHurtValue:
@@ -1488,7 +1497,11 @@
                        # 己方单位死亡时
                        else:
                            TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendDie, dieObj, connSkill=useSkill, byFriendObj=dieObj)
    # 触发不死
    for tagObj in nodeadObjList:
        TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_NoDead, curObj, connSkill=useSkill)
    # 复活时
    for tagObj in reviveObjList:
        # 同步最新的怒气及buff,血量已经在技能中通知了
@@ -1522,6 +1535,10 @@
        if tagID in missObjIDList:
            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
@@ -1881,7 +1898,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: 由什么技能引起的
@@ -1931,12 +1948,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
@@ -1944,10 +1961,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
@@ -2260,7 +2277,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
@@ -2544,7 +2561,7 @@
            
            immuneHurt = immuneHurtDict.get(aveObjID)
            if immuneHurt == None:
                if aveObj.CheckInState(ChConfig.BatObjState_Wudi):
                if aveObj.CheckInState(ChConfig.ImmuneHurtStateList):
                    immuneHurt = 0
                else:
                    immuneHurt = -1 # 标记没有无敌
@@ -2796,6 +2813,9 @@
        cureHP += cureHPEx
        GameWorld.DebugLogEx("    额外治疗值(%s): cureType=%s,baseValue=%s,skillPer=%s,cureHP=%s", cureHPEx, cureType, baseValue, skillPer, cureHP)
        
    addCureMulti = TurnPassive.GetTriggerEffectValue(turnFight, userObj, tagObj, ChConfig.PassiveEff_AddCureMultiBySkillType, curSkill)
    if addCureMulti:
        multiValue += addCureMulti / 100.0
    if multiValue and multiValue != 1:
        cureHP = int(cureHP * multiValue)
        GameWorld.DebugLogEx("    治疗倍值: cureHP=%s,multiValue=%s", cureHP, multiValue)