#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#
|
# @todo:
|
#
|
# @author: Alee
|
# @date 2017-12-7 ÏÂÎç05:18:11
|
# @version 1.0
|
#
|
# @note: ³ÖÐø¶¾É˺¦£¬ÕæÊµ¼ÆËã
|
#
|
#---------------------------------------------------------------------
|
#µ¼Èë
|
import SkillCommon
|
import GameWorld
|
import ChConfig
|
import GameObj
|
import AttackCommon
|
import SkillShell
|
import PassiveBuffEffMng
|
import BaseAttack
|
import BuffSkill
|
#---------------------------------------------------------------------
|
#È«¾Ö±äÁ¿
|
#---------------------------------------------------------------------
|
|
#---------------------------------------------------------------------
|
#Â߼ʵÏÖ
|
## ³ÖÐøÐÔBuff´¦Àí
|
# @param defender ³ÐÊÜÕß
|
# @param curBuff µ±Ç°Buff
|
# @param curEffect BuffЧ¹û
|
# @param tick µ±Ç°Ê±¼ä
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def ProcessBuff(defender, curBuff, curEffect, processBuffTick, tick):
|
if curBuff.GetValue2() == 0:
|
return
|
|
layer = max(curBuff.GetLayer(), 1)
|
#µ¥´ÎÉ˺¦, ¶¾Óв㼶µÄÇé¿ö
|
singleDecHP = curBuff.GetValue()*layer
|
#GameWorld.DebugLog("1033---------%s-%s-%s-%s"%(curBuff.GetValue(), layer, hurtPer, singleDecHP ) )
|
#buffÓµÓÐÕß
|
buffOwner = SkillCommon.GetBuffOwner(curBuff)
|
|
curBuffSkillID = curBuff.GetSkill().GetSkillTypeID()
|
|
# SkillLostHPǰµ÷Óà ËÀÍö»òÕ߯äËûÇé¿ö»áÈ¡ÏûcurBuff
|
curBuff.SetValue2(max(curBuff.GetValue2() - 1, 0))
|
SkillCommon.SkillLostHP(defender, curBuffSkillID, buffOwner, singleDecHP, tick, hurtType=ChConfig.Def_HurtType_Bleed)
|
|
return
|
|
|
##³ÖÐøÉ˺¦Buff, ¸ù¾Ý¹¥»÷ÕßÉ˺¦¼ÆËã
|
# @param attacker ¹¥»÷ÕßʵÀý
|
# @param curSkill ¼¼ÄÜʵÀý
|
# @param curEffect µ±Ç°¼¼ÄÜЧ¹û1
|
# @return ×ÜÖµ
|
def CalcBuffValue(attacker, defender, curSkill, changeBuffValueDict):
|
curEffect = curSkill.GetEffect(0)
|
skillPer = curEffect.GetEffectValue(0)/float(ChConfig.Def_MaxRateValue)
|
skillEnhance = curEffect.GetEffectValue(1)
|
|
# ¿Í»§¶Ë±íÏÖÆ®×ÖΪÁ÷Ѫ£¬ÎÞÐè֪ͨÆäËûÉËѪÀàÐÍ
|
hurtValue, hurtType = AttackCommon.CalcHurtHP(attacker, defender, curSkill,
|
skillEnhance, skillPer, GameWorld.GetGameWorld().GetTick(),
|
ChConfig.Def_Skill_HappenState_HitOn)
|
|
|
# µ¥´ÎÉ˺¦Öµ£¬É˺¦ÀàÐÍ
|
return [hurtValue, hurtType]
|
|
# ´ÎÊý£¨ÅäºÏЧ¹ûID9999µÄ¼ä¸ô£©
|
def DoAddBuffOver(curObj, curBuff, curEffect, tick, buffOwner):
|
if not buffOwner:
|
return
|
buffTick = SkillShell.GetProcessBuffTick(curBuff.GetSkill(), buffOwner)
|
|
curBuff.SetValue2(curBuff.GetRemainTime()/buffTick)
|
return
|
|
# ÏûʧǰÈçÓÐδִÐдÎÊýÔò²¹ÉÏ
|
# @param defender ³ÐÊÜÕß
|
def OnBuffDisappear(defender, curSkill, curBuff, curEffect, tick):
|
#ÒѾËÀÍö²»´¥·¢
|
if GameObj.GetHP(defender) <= 0:
|
return
|
|
count = curBuff.GetValue2()
|
#ÎÞÊ£Óà
|
if count > 0:
|
|
SkillCommon.SkillLostHP(defender, curSkill.GetSkillTypeID(), SkillCommon.GetBuffOwner(curBuff),
|
curBuff.GetValue()*count, tick, hurtType=ChConfig.Def_HurtType_Bleed)
|
#ÒѾËÀÍö²»´¥·¢
|
if GameObj.GetHP(defender) <= 0:
|
return
|
|
BuffBoom(defender, curSkill, curBuff, tick)
|
return
|
|
# buff±¬Õ¨£¬É˺¦ËãÊÍ·ÅbuffÕߣ¬Í¨Öª¿Í»§¶Ë±íÏÖΪÖÐBUFFÕß,ĿǰֻÄÜ´¦ÀíÒ»ÖÖ±¬Õ¨
|
def BuffBoom(defender, curSkill, curBuff, tick):
|
#buffÓµÓÐÕß
|
attacker = SkillCommon.GetBuffOwner(curBuff)
|
if not attacker:
|
return
|
|
skills = PassiveBuffEffMng.GetPassiveSkillByTriggerType(attacker, defender, curSkill, ChConfig.TriggerType_BuffBoom)
|
|
if not skills:
|
return
|
|
boomSkill = skills[0]
|
curEffect = curSkill.GetEffect(0)
|
skillPer = curEffect.GetEffectValue(0)
|
skillEnhance = curEffect.GetEffectValue(1)
|
|
BaseAttack.AttackAreaDefenderNotify(attacker, defender, defender.GetPosX(), defender.GetPosY(), boomSkill,
|
skillPer, skillEnhance, tick)
|
|
return
|
|
|
|
|
|