#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#
|
#
|
##@package SkillModule_24.py
|
#
|
# @todo:ÊÍ·ÅÁú¾í·ç
|
#
|
# @author jiang
|
# @date 2012-07-13
|
# @version 1.1
|
# @note:
|
#
|
# @change: "2012-07-19 17:30" jiang DoLogic_NPC_UseSkill_SummonNPC²ÎÊýÐÞ¸Ä
|
#------------------------------------------------------------------------------
|
"""Version = 2012-07-19 17:30"""
|
#------------------------------------------------------------------------------
|
# µ¼Èë
|
import GameWorld
|
import IPY_GameWorld
|
import SkillCommon
|
import math
|
import BaseAttack
|
import ChConfig
|
#------------------------------------------------------------------------------
|
|
## Áú¾í·ç
|
# @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):
|
curSummonID = curSkill.GetEffect(0).GetEffectValue(0) # ÕÙ»½ÊÞID
|
if curSummonID == 0:
|
return
|
|
curSummon = GameWorld.GetGameData().FindNPCDataByID(curSummonID)
|
if not curSummon:
|
GameWorld.ErrLog("skillId = %s Error ÕÒ²»µ½idΪ%sµÄnpc"(curSkill.GetSkillID(), curSummonID))
|
return
|
|
maxAngryCount = attacker.GetNPCAngry().GetAngryCount()
|
|
attackerPosX = attacker.GetPosX()
|
attackerPosY = attacker.GetPosY()
|
|
#ÕÙ»½
|
wayCount = curSkill.GetEffect(0).GetEffectValue(1) # N·½Ïò
|
for index in range(0, wayCount):
|
angle = index * 360/wayCount
|
posX = int(attackerPosX + GameWorld.MyRound(math.cos(3.14*(angle/180.0))))
|
posY = int(attackerPosY + GameWorld.MyRound(math.sin(3.14*(angle/180.0))))
|
if not GameWorld.GetMap().IsValidPos(posX, posY):
|
#×ø±êµã³¬³öµØÍ¼±ß½ç
|
continue
|
|
summonNpc = SkillCommon.DoLogic_NPC_UseSkill_SummonNPC(attacker, curSkill, curSummonID, wayCount,
|
maxAngryCount, tick, False, rebornPosX = posX, rebornPosY = posY)
|
if not summonNpc:
|
continue
|
|
runDist = curSkill.GetAtkRadius()
|
tagPosX = int(attackerPosX + GameWorld.MyRound(math.cos(3.14*(angle/180.0)) * runDist))
|
tagPosY = int(attackerPosY + GameWorld.MyRound(math.sin(3.14*(angle/180.0)) * runDist))
|
if not GameWorld.GetMap().IsValidPos(tagPosX, tagPosY):
|
#×ø±êµã³¬³öµØÍ¼±ß½ç
|
continue
|
|
#¼Ç¼¸ÃNPCÖÕµã×ø±ê
|
summonNpc.SetDict(ChConfig.Def_NPC_Dict_CycloneTagPosX, tagPosX)
|
summonNpc.SetDict(ChConfig.Def_NPC_Dict_CycloneTagPosY, tagPosY)
|
|
#´¦Àí¼¼ÄÜ´¥·¢ºÍ¹¥»÷³É¹¦Âß¼
|
return BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)
|
|