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
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
##@package Skill.GameSkills.SkillModule_18
#
# @todo:ȺÌå˲¼ä»ØÑª
# @author hxp
# @date 2017-11-24
# @version 1.0
#
# ÏêϸÃèÊö: ÈºÌå˲¼ä»ØÑª
#
#-------------------------------------------------------------------------------
#"""Version = 2017-11-24 22:30"""
#-------------------------------------------------------------------------------
#µ¼Èë
import ChConfig
import SkillCommon
import BaseAttack
import GameObj
#---------------------------------------------------------------------
#È«¾Ö±äÁ¿
#---------------------------------------------------------------------
 
#---------------------------------------------------------------------
##ÊÍ·ÅÕßѪÁ¿ÉÏÏްٷֱȻØÑª
# @param attacker ¹¥»÷Õß
# @param defender ·ÀÊØÕß
# @param curSkill ¼¼ÄÜʵÀý
# @param tagRoundPosX ÇøÓò¼¼ÄÜÆðµãX
# @param tagRoundPosY ÇøÓò¼¼ÄÜÆðµãY
# @param tick Ê±¼ä´Á
# @return ·µ»ØÖµ, ÊÇ·ñÊͷųɹ¦
# @remarks ÊÍ·ÅÕßѪÁ¿ÉÏÏްٷֱȻØÑª
def UseSkill(attacker, defender, curSkill, tagRoundPosX, tagRoundPosY, isEnhanceSkill, tick):
    # Ð§¹û0Ϊ»Ö¸´ÊýÖµÉ趨£¬Ð§¹û1Ϊ»Ö¸´¹æÔòÉ趨
    
    cureSetEff = curSkill.GetEffect(1) # »Ö¸´¹æÔòÉ趨Ч¹û
    cureType = cureSetEff.GetEffectValue(0) # »Ö¸´ÀàÐÍ
    cureCount = cureSetEff.GetEffectValue(1) # »Ö¸´¶ÔÏó¸öÊý
    isSelfLimit = cureSetEff.GetEffectValue(2) # ÊÇ·ñÏÞÖÆ»Ö¸´×Ô¼º
    
    cureObjList = []
    if not isSelfLimit:
        curHPPer = GameObj.GetHP(attacker) / float(GameObj.GetMaxHP(attacker))
        cureObjList.append([curHPPer, attacker])
        
    srcPosX, srcPosY = attacker.GetPosX(), attacker.GetPosY()
    objList = BaseAttack.CheckAreaObjServer(attacker, curSkill, srcPosX, srcPosY, tick, BaseAttack.CheckTagIsBeInfection)
    
    for obj in objList:
        hpPer = GameObj.GetHP(obj) / float(GameObj.GetMaxHP(obj))
        cureObjList.append([hpPer, obj])
    cureObjList.sort() # °´µ±Ç°ÑªÁ¿°Ù·Ö±ÈÉýÐòÅÅ
    if not cureObjList:
        # Ã»ÓпÉÖÎÁƵÄÄ¿±ê
        return
    
    if cureObjList[0][0] >= 1:
        # ¶¼ÂúѪ
        #hpPer, obj = cureObjList[0]
        #GameWorld.DebugLog("¶¼ÂúѪ£¬²»ÐèÒªÊͷŻָ´¼¼ÄÜ£¡objCnt=%s,hpPer=%s,HP=%s,maxHP=%s" 
        #                   % (len(cureObjList), hpPer, GameObj.GetHP(attacker), GameObj.GetMaxHP(attacker)))
        return
    
    targetList = []
    valueList = []
    for cureObjInfo in cureObjList[:cureCount]:
        cureObj = cureObjInfo[1]
        addValue = SkillCommon.GetCureHP(attacker, cureObj, curSkill, cureType, largeNum=True)
        #GameWorld.DebugLog("¼ÓѪ: curHP=%s,maxHP=%s,addHP=%s" % (GameObj.GetHP(obj), GameObj.GetMaxHP(obj), addValue))
        #×ÜÁ¿ ×î´óÉúÃüÖµµÄ°Ù·Ö±È »ØÑª ¸½¼Ó¶àÉÙ 
        SkillCommon.SkillAddHP(cureObj, curSkill.GetSkillTypeID(), addValue, False)
        targetList.append(cureObj)
        valueList.append(addValue)
        
    return BaseAttack.DoAreaAttackSuccess(attacker, GameObj.GetHP(attacker), targetList, valueList, 
                                          curSkill, tick, ChConfig.Def_HurtTYpe_Recovery)