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
89
90
91
92
93
94
95
96
97
98
99
#!/usr/bin/python
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
#-------------------------------------------------------------------------------
#
##@package SkillModule_15
#
# @todo: NPCרÓÃÕÒµ½µ±Ç°³ðºÞÁбíÖÐ×î´ó³ðºÞÕߣ¬Èç¹ûÔÚÊÓÒ°ÖÐÔòË²ÒÆ¹ýÈ¥
# @author Alee
# @date 2011-02-25 17:30
# @version 1.2
#
# ÏêϸÃèÊö:NPCרÓÃÕÒµ½µ±Ç°³ðºÞÁбíÖÐ×î´ó³ðºÞÕߣ¬Èç¹ûÔÚÊÓÒ°ÖÐÔòË²ÒÆ¹ýÈ¥
 
# @change: "2011-03-08 16:30" Alee ÐÞ¸Ä×î´ó³ðºÞÕßÅжϣ¬²»Ò»¶¨ÊÇÍæ¼Ò
# @change: "2011-03-09 12:00" Alee »ñÈ¡¶ÔÏóʱºòÅжÏʵÀýÊÇ·ñ´æÔÚ
#------------------------------------------------------------------------------ 
"""Version = 2011-03-09 12:00"""
#------------------------------------------------------------------------------
#µ¼Èë
import GameWorld
import BaseAttack
import NPCCommon
import IPY_GameWorld
import GameMap
 
#---------------------------------------------------------------------
#È«¾Ö±äÁ¿
#---------------------------------------------------------------------
 
#---------------------------------------------------------------------
##NPCרÓÃÕÒµ½µ±Ç°³ðºÞÁбíÖÐ×î´ó³ðºÞÕߣ¬Èç¹ûÔÚÊÓÒ°ÖÐÔòË²ÒÆ¹ýÈ¥
# @param attacker ¹¥»÷ÕßʵÀý
# @param attacker ¹¥»÷ÕßʵÀý
# @param defender ·ÀÊØÕßʵÀý
# @param curSkill ¼¼ÄÜʵÀý
# @param tagRoundPosX ÇøÓò×ø±êX
# @param tagRoundPosY ÇøÓò×ø±êY
# @param isEnhanceSkill ÊÇ·ñΪ¸½¼Ó¼¼ÄÜ
# @param tick Ê±¼ä´Á
# @return ·µ»ØÖµÎªÕæ, Êͷųɹ¦
# @remarks NPCרÓÃÕÒµ½µ±Ç°³ðºÞÁбíÖÐ×î´ó³ðºÞÕߣ¬Èç¹ûÔÚÊÓÒ°ÖÐÔòË²ÒÆ¹ýÈ¥
def UseSkill(attacker, defender, curSkill, tagRoundPosX, tagRoundPosY, isEnhanceSkill, tick):
    #²»ÊÇNPC²»´¦Àí
    if attacker.GetGameObjType() != IPY_GameWorld.gotNPC:
        return
    
    #Ë²ÒÆÖÁ×î´ó³ðºÞÍæ¼ÒÅÔ±ß, Ê§°Ü²»ÉèÖÃCD
    if not ReSetPosToMaxAngryPlayer(attacker, tick):
        return 
    
    #´¦Àí¼¼ÄÜ´¥·¢ºÍ¹¥»÷³É¹¦Âß¼­
    return BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)
 
 
## Ë²ÒÆÖÁ×î´ó³ðºÞÍæ¼ÒÅÔ±ß
#  @param curNPC µ±Ç°NPC
#  @param tick µ±Ç°Ê±¼ä
#  @return ÊÇ·ñÊͷųɹ¦
#  @remarks Ë²ÒÆÖÁ×î´ó³ðºÞÍæ¼ÒÅÔ±ß
def ReSetPosToMaxAngryPlayer(curNPC, tick):
    #ÖØÅųðºÞÁбí
    curNPC.GetNPCAngry().Resort(tick)
 
    curMaxAngry = NPCCommon.NPCControl(curNPC).GetMaxAngryTag()
    if curMaxAngry == None:
        return False
 
    # Ä¿±êÔÚÊÓÒ°·¶Î§ÄÚ
    tagObj = GetMaxAngryObjInSight(curNPC, curMaxAngry)
    if tagObj == None:
        return False
    
    #---Ë²ÒÆµ½Ä¿±êÅÔ,¿É¹¥»÷·¶Î§---
    curFindPos = GameMap.GetEmptyPlaceInArea(tagObj.GetPosX(), tagObj.GetPosY(), curNPC.GetAtkDist())
    
    curNPC.ResetPos(curFindPos.GetPosX(), curFindPos.GetPosY(), 1)
    return  True
 
 
## ÅжÏÄ¿±êÊÇ·ñÔÚNPCÊÓÒ°·¶Î§ÄÚ
#  @param curNPC µ±Ç°NPC
#  @param curAngryTag ¹¥»÷³ðºÞÄ¿±ê
#  @return Íæ¼ÒʵÀý
#  @remarks ÅжÏÄ¿±êÊÇ·ñÔÚNPCÊÓÒ°·¶Î§ÄÚ
def GetMaxAngryObjInSight(curNPC, curAngryTag):
    tagObj = GameWorld.GetObj(curAngryTag.GetObjID(), curAngryTag.GetObjType())
    
    if tagObj == None:
        return tagObj
    
    #ÅжÏÄ¿±êÊÇ·ñÔÚÊÓÒ°ÄÚ
    if curNPC.GetSight() < GameWorld.GetDistEx(curNPC.GetPosX(), curNPC.GetPosY(), 
                                               tagObj.GetPosX(), tagObj.GetPosY()):
        return None
    
    return tagObj