hch
2019-06-25 f12bbdcbaebff76914ae6dc735941d19f8f4e87f
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
@@ -33,6 +33,7 @@
import ShareDefine
import GameObj
import PassiveBuffEffMng
import IpyGameDataPY
#---------------------------------------------------------------------
#---------------------------------------------------------------------
@@ -98,6 +99,11 @@
    curSkill.SetLastUseTick(tick)
    coolDownTime = curSkill.GetCoolDownTime()
    remainTime = coolDownTime
    skillTypeID = curSkill.GetSkillTypeID()
    if atkObj and skillTypeID in IpyGameDataPY.GetFuncEvalCfg("SkillCD", 1):
        reduceSkillCDPer += PlayerControl.GetTheFBSkillsCD(atkObj)
    if isPassiveSkill(curSkill):
        if curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_GiftSkill:
            # 天赋有减CD效果
@@ -1222,18 +1228,15 @@
            
    return
## 技能伤血
#  @param curObj 当前对象
#  @param skillTypeID 技能类型ID
#  @param buffOwner buff拥有者
#  @param lostValue 丢失值
#  @param tick 当前时间
#  @param view 是否广播
#  @param reduce 是否扣血
#  @return None
#  @remarks 函数详细说明.
def SkillLostHP(curObj, skillTypeID, buffOwner, lostValue, tick, view=True, reduceHP=True,
                isDoAttackResult=True, hurtType=ChConfig.Def_HurtType_Normal):
## 直接扣血不走公式
# view 是否广播客户端飘血
# isDoAttackResult 是否立即处理结果,为False必须外层有处理
# hurtType 飘血类型
# skillAffect 默认True 会被各种技能BUFF盾等影响伤血数值
#             False代表一些特殊处理纯固定伤害飘字(如采集固定掉1点血)
def SkillLostHP(curObj, skillTypeID, buffOwner, lostValue, tick, view=True,
                isDoAttackResult=True, hurtType=ChConfig.Def_HurtType_Normal,
                skillAffect=True):
    if lostValue <= 0:
        GameWorld.Log('###技能伤害血量异常,数值错误 = %s,技能类型ID = %s' % (lostValue, skillTypeID))
        return
@@ -1257,34 +1260,38 @@
        # 没有血量不能再触发
        return
    
    if reduceHP :
        lostValue = AttackCommon.CalcAtkProDef(buffOwner, curObj, lostValue, curSkill, tick)
        # 血盾
        lostValue = AttackCommon.CalcBloodShield(buffOwner, curObj, lostValue)
        #剩余血量
        remainHP = max(curObjHP_BeforeAttack - lostValue , 0)
        #NPC处理
        if curObjType == IPY_GameWorld.gotNPC:
            #宠物特殊处理
            if curObj.GetGameNPCObjType() == IPY_GameWorld.gnotPet:
                PetControl.SetPetHP(curObj, remainHP)
    if skillAffect:
        lostValue = AttackCommon.CalcHurtHPWithBuff(buffOwner, curObj, lostValue, curSkill, tick)
    #剩余血量
    remainHP = max(curObjHP_BeforeAttack - lostValue , 0)
    #NPC处理
    if curObjType == IPY_GameWorld.gotNPC:
        #宠物特殊处理
        if curObj.GetGameNPCObjType() == IPY_GameWorld.gnotPet:
            PetControl.SetPetHP(curObj, remainHP)
        else:
            timeLostHPIpyData = IpyGameDataPY.GetIpyGameDataNotLog("NPCTimeLostHP", curObj.GetNPCID())
            if timeLostHPIpyData:
                AttackCommon.UpdateTimeMonsterHP(curObj, timeLostHPIpyData, tick)
            else:
                GameObj.SetHP(curObj, remainHP)
                if not view :   # 已广播的不重复
                    curObj.Notify_HPEx()
            if not view :   # 已广播的不重复
                curObj.Notify_HPEx()
        #其他对象逻辑处理
        else:
            # 已广播的不重复
            GameObj.SetHP(curObj, remainHP, not view)
    #其他对象逻辑处理
    else:
        # 已广播的不重复
        GameObj.SetHP(curObj, remainHP, not view)
    
    AttackCommon.WriteHurtLog(buffOwner, curObj, curSkill, lostValue, hurtType, "持续掉血")
    if view:
        #广播伤血类型
        AttackCommon.ChangeHPView(curObj, buffOwner, skillTypeID, notifyLostValue, hurtType)
        if buffOwner:
            PassiveBuffEffMng.OnPassiveSkillTrigger(buffOwner, curObj, curSkill, ChConfig.TriggerType_AttackOverPassive, tick)
        
    # 濒死状态触发技能
    if GameObj.GetHP(curObj) == 0:
@@ -1603,14 +1610,16 @@
    
    #---添加的Buff值---
    addBuffValue = 0
    #是否是持续性技能
    if curSkill.GetSkillType() in ChConfig.Def_LstBuff_List:
        callFunc = GameWorld.GetExecFunc(GameSkills, "SkillBuff_AddBuffValue.AddBuffValue")
        if callFunc != None:
            addBuffValue = int(callFunc(curObj, None, curSkill, tick))
        else:
            GameWorld.ErrLog("SkillBuff_AddBuffValue.AddBuffValue")
    #===========================================================================
    # #是否是持续性技能
    # if curSkill.GetSkillType() in ChConfig.Def_LstBuff_List:
    #    callFunc = GameWorld.GetExecFunc(GameSkills, "SkillBuff_AddBuffValue.AddBuffValue")
    #
    #    if callFunc != None:
    #        addBuffValue = int(callFunc(curObj, None, curSkill, tick))
    #    else:
    #        GameWorld.ErrLog("SkillBuff_AddBuffValue.AddBuffValue")
    #===========================================================================
    
    return BuffSkill.DoAddBuff(curObj , buffType, curSkill , tick, [addBuffValue])
@@ -1752,6 +1761,35 @@
    
    return returnInfo
def FindBuffByOwner(gameObj, skillTypeID, ownerID, ownerType):
    findSkill = GameWorld.GetGameData().GetSkillBySkillID(skillTypeID)
    buffType = GetBuffType(findSkill)
    buffTuple = GetBuffManagerByBuffType(gameObj, buffType)
    if buffTuple == ():
        return None
    buffManager = buffTuple[0]
    for i in range(0, buffManager.GetBuffCount()):
        curBuff = buffManager.GetBuff(i)
        if not curBuff:
            continue
        #判断是否拥有同一类型的技能
        if curBuff.GetSkill().GetSkillTypeID() != skillTypeID:
            continue
        #判断是否拥有同一类型的技能
        if curBuff.GetOwnerID() != ownerID:
            continue
        if curBuff.GetOwnerType() != ownerType:
            continue
        return curBuff
    return None
#---------------------------------------------------------------------
## 执行清空命令 参数:玩家, 保留技能类型列表
#  @param curPlayer 玩家
@@ -1840,6 +1878,7 @@
                                       ChConfig.Def_SkillType_PassiveActionBuff,  #被动触发的控制类buff 18
                                       ChConfig.Def_SkillType_PassiveLstPlsBuff,  #被动触发持续增益类buff 21
                                       ChConfig.Def_SkillType_PassiveLstDepBuff,  #被动触发持续减益类buff 22
                                       ChConfig.Def_SkillType_PassiveLstPlsBuffAtk,
                                       ]
## 被动触发的技能效果或者释放技能
@@ -1851,6 +1890,7 @@
                                       ChConfig.Def_SkillType_PassiveActionBuff,  #被动触发的控制类buff 18
                                       ChConfig.Def_SkillType_PassiveLstPlsBuff,  #被动触发持续增益类buff 21
                                       ChConfig.Def_SkillType_PassiveLstDepBuff,  #被动触发持续减益类buff 22
                                       ChConfig.Def_SkillType_PassiveLstPlsBuffAtk,
                                       ]
    
def isPassiveAttr(curSkill):
@@ -2096,6 +2136,7 @@
    #技能附加
    skillValue = curSkill.GetEffect(0).GetEffectValue(1)
    
    skillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(userObj, None, curSkill, ChConfig.TriggerType_AddHP)/float(ChConfig.Def_MaxRateValue)
    #公式计算治疗值 
    cureHP = int((cureBaseValue * skillPer + skillValue + addExValue) * curePercent)