#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#
|
# @todo: ÓÉ·þÎñ¶ËÖ÷µ¼É˺¦µÄ³ÖÐøÐÔ¼¼ÄÜ
|
#
|
# @author: Alee
|
# @date 2017-11-3 ÏÂÎç04:22:55
|
# @version 1.0
|
#
|
# @note: 2017-12-08 Ìí¼Ó±»¶¯Ôö¼Ó¼¼ÄÜÉ˺¦
|
#
|
#---------------------------------------------------------------------
|
|
|
#µ¼Èë
|
import GameWorld
|
import SkillCommon
|
import BaseAttack
|
import ChConfig
|
import PassiveBuffEffMng
|
import SkillShell
|
import GameObj
|
import IPY_GameWorld
|
|
def ProcessBuff(tagObj, curBuff, curEffect, processBuffTick, tick):
|
Attack(tagObj, curBuff, tick)
|
|
#¼ä¸ô¹¥»÷£¬buffvalueµÚÒ»¸öֵΪ¹¥»÷´ÎÊý
|
def Attack(tagObj, curBuff, tick):
|
if curBuff.GetValue() == 0:
|
return
|
|
curSkill = curBuff.GetSkill()
|
srcPosX, srcPosY = tagObj.GetPosX(), tagObj.GetPosY()
|
|
#¹¥»÷Ч¹û
|
skillEffect = SkillCommon.GetSkillEffectByEffectID(curSkill, ChConfig.Def_Skill_Effect_Attack)
|
skillPer = 1
|
skillEnhance = 0
|
|
if skillEffect != None:
|
#¼¼ÄÜÔöÇ¿°Ù·Ö±È
|
skillPer = (skillEffect.GetEffectValue(0)) / float(ChConfig.Def_MaxRateValue)
|
multiple = curSkill.GetEffect(0).GetEffectValue(0) - curBuff.GetValue() + 1 # µÚ¼¸´Î¹¥»÷
|
skillPer += multiple*PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(tagObj, None, curSkill, ChConfig.TriggerType_AddSingleSkillPer)
|
#¼¼ÄÜÔöǿֵ
|
skillEnhance = skillEffect.GetEffectValue(1)
|
else:
|
GameWorld.ErrLog("ûÓй¥»÷Ч¹ûÏî%s ID=%s, Lv=%s"%(ChConfig.Def_Skill_Effect_Attack,
|
curSkill.GetSkillID(), curSkill.GetSkillLV()))
|
skillMatrix = None
|
if curSkill.GetAtkType() == 12: # ÓнǶȹ¥»÷
|
attackRad = curSkill.GetAtkRadius()
|
|
attackMatrix = ChConfig.Def_Angle_MatrixDict.get(attackRad)
|
if attackMatrix == None:
|
GameWorld.ErrLog("ÀàÐÍ´íÎó(%s), ÓнǶȵĹ¥»÷¾ØÕó"%attackRad)
|
return False
|
|
srcPosX, srcPosY = tagObj.GetPosX(), tagObj.GetPosY()
|
tagRoundPosX, tagRoundPosY = tagObj.GetUseSkillPosX(), tagObj.GetUseSkillPosY()
|
skillMatrix = GameWorld.MatrixCircle(attackMatrix, srcPosX, srcPosY, tagRoundPosX, tagRoundPosY)
|
|
#¼ÆËãÆ«ÒÆ²úÉú¶µã£¬²¹×ãÄ¿±êµã
|
desDist = GameWorld.GetDist(srcPosX, srcPosY, tagRoundPosX, tagRoundPosY)
|
atkDist = curSkill.GetAtkDist()
|
if atkDist != 0 and desDist <= atkDist:
|
insertIndex = int(desDist/float(atkDist)*len(skillMatrix))
|
if (tagRoundPosX, tagRoundPosY) not in skillMatrix:
|
skillMatrix.insert(insertIndex, (tagRoundPosX, tagRoundPosY))
|
|
#¹¥»÷´ÎÊý´¦Àí£¬ÅäÖÃΪ0µÄ˵Ã÷ÊÇÒÔ³ÖÐøÊ±¼äΪÖ÷
|
# SwordStormAttack ¿ÉÄÜÒò±»¶¯µ¼ÖÂ×Ô¼ºËÀÍö£¬ËùÒÔ²»ÄÜÔÚ¹¥»÷ºó´¦Àí
|
curBuff.SetValue(max(curBuff.GetValue() - 1, 0))
|
|
|
BaseAttack.SwordStormAttack(tagObj, srcPosX, srcPosY, curSkill, skillPer,
|
skillEnhance, skillMatrix, tick)
|
|
|
|
|
#buffvalueµÚÒ»¸öֵΪ¹¥»÷´ÎÊý£¬ µÚ¶þ¸öֵΪ±»¶¯ÔöÇ¿
|
def CalcBuffValue(attacker, defender, curSkill, changeBuffValueDict):
|
curEffect = curSkill.GetEffect(0)
|
return [curEffect.GetEffectValue(0)]
|
|
|
## Ìí¼ÓBUFFºóµÄÂß¼
|
# @param None
|
# @return None
|
def DoAddBuffOver(curObj, addBuff, curEffect, tick):
|
Attack(curObj, addBuff, tick) #Á¢¼´Ö´ÐÐÒ»´Î¹¥»÷
|
if GameObj.GetHP(curObj) != 0:
|
addBuff.SetProcessInterval(tick)
|
return
|
|
|
|
#===============================================================================
|
# def OnBuffDisappear(defender, curSkill, curBuff, curEffect, tick):
|
# # ÊÓÒ°ÄÚbuffÖÖ×Ó±¬Õ¨
|
# # ¶àÖÖÖÖ×ÓµÄÇé¿ö²»Ö§³Ö
|
# skillID = PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(defender, None, curSkill, ChConfig.TriggerType_BeBoomSeed)
|
# seedSkill = GameWorld.GetGameData().GetSkillBySkillID(skillID)
|
# if not seedSkill:
|
# return
|
#
|
# SkillShell.UsePassiveTriggerSkill(defender, seedSkill, None, tick)
|
# return
|
#===============================================================================
|
|
|
|