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