#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
#-------------------------------------------------------------------------------
|
#
|
##@package SkillModule_23
|
#
|
# @todo: ŵ¶Õ¶
|
# @author whx
|
# @date 2012-05-23 17:30
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö:ŵ¶Õ¶
|
#
|
#------------------------------------------------------------------------------
|
"""Version = 2012-05-23 17:30"""
|
#------------------------------------------------------------------------------
|
#µ¼Èë
|
|
import ChConfig
|
import GameWorld
|
import BaseAttack
|
import PlayerControl
|
import IPY_GameWorld
|
import Player_Attack_Player
|
import GameObj
|
#---------------------------------------------------------------------
|
#È«¾Ö±äÁ¿
|
#---------------------------------------------------------------------
|
|
#---------------------------------------------------------------------
|
##ŵ¶Õ¶
|
# @param attacker ¹¥»÷ÕßʵÀý
|
# @param defender ·ÀÊØÕßʵÀý
|
# @param curSkill ¼¼ÄÜʵÀý
|
# @param tagRoundPosX ÇøÓò×ø±êX
|
# @param tagRoundPosY ÇøÓò×ø±êY
|
# @param isEnhanceSkill ÊÇ·ñΪ¸½¼Ó¼¼ÄÜ
|
# @param tick ʱ¼ä´Á
|
# @return ·µ»ØÖµÎªÕæ, Êͷųɹ¦
|
def UseSkill(attacker, defender, curSkill, tagRoundPosX, tagRoundPosY, isEnhanceSkill, tick):
|
destX = defender.GetPosX()
|
destY = defender.GetPosY()
|
|
if attacker.GetGameObjType() != IPY_GameWorld.gotPlayer:
|
GameWorld.ErrLog("·ÇÍæ¼Ò²»¿ÉÊÍ·Å")
|
return False
|
|
#ÏÈÅжϸÃÍæ¼ÒÄÜ·ñ¹¥»÷£¬·ÀÖ¹×ÔÉíѪÁ¿¿Û³ýµ«Ã»Óй¥»÷
|
if not Player_Attack_Player.GetCanAttack(attacker, defender, curSkill, tick):
|
return False
|
|
#ÊÇÕϰµã,²»ÄÜÊÍ·Å£¬Ìø³ö
|
if not GameWorld.GetMap().CanMove(destX, destY):
|
PlayerControl.NotifyCode(attacker, "04BBF813-7A30-47A8-927DE1ACCC4F378E")
|
return False
|
|
#ѪÁ¿ÉÏÏÞ
|
attackerMaxHP = GameObj.GetMaxHP(attacker)
|
defenderMaxHP = GameObj.GetMaxHP(defender)
|
disHP = max(0, attackerMaxHP - defenderMaxHP)
|
|
#Ч¹û1µÄAÖµ£ºÑªÁ¿²îµÄÍò·ÖÂÊ£¬BÖµ¹Ì¶¨É˺¦
|
skillEffect = curSkill.GetEffect(0)
|
skillPer = skillEffect.GetEffectValue(0) / float(ChConfig.Def_MaxRateValue)
|
addSkillHert = int(skillEffect.GetEffectValue(1) + disHP*skillPer)
|
|
#Ч¹û2µÄAÖµ£º×ÔÉíѪÁ¿µÄÍò·ÖÂÊ,BÖµ¹Ì¶¨É˺¦
|
selfSkillEffect = curSkill.GetEffect(1)
|
selfSkillPer = selfSkillEffect.GetEffectValue(0) / float(ChConfig.Def_MaxRateValue)
|
addSelfSkillHert = selfSkillEffect.GetEffectValue(1)
|
|
#Ïȿ۳ý×ÔÉíѪÁ¿
|
attackerHP = GameObj.GetHP(attacker)
|
#·ÀÖ¹²ß»®±íÅäÖÃΪ0
|
curHP = int(max(attackerHP * (1 - selfSkillPer) - addSelfSkillHert, 1))
|
GameObj.SetHP(attacker, curHP)
|
|
#ʹÓü¼ÄÜ
|
result = BaseAttack.Attack(attacker, defender, curSkill, tick, 0,
|
addSkillHert, 1, isEnhanceSkill)
|
|
#·þÎñ¶ËÖÃλ
|
GameWorld.ResetPlayerPos(attacker, destX, destY, curSkill.GetSkillID())
|
|
return result
|
|