1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/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