freest
offline
Опыт:
442Активность: |
Не пикает юнитов в группу ;[
Создается дамми который летит на определенное расстояние в направлении точки каста, и в радиусе 150 от дамми нужно пикать юнитов, и наносить урон.
но юниты не пикаются ;[ В чем может быть проблема?
((код jass
function arrow_cond takes nothing returns boolean
return GetSpellAbilityId() == 'A00B' endfunction function FilterUnit takes nothing returns boolean
return IsPlayerEnemy(GetOwningPlayer(GetSpellAbilityUnit()),GetOwningPlayer(GetFilterUnit())) and GetWidgetLife(GetFilterUnit())>=0.405 and not IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE) and not IsUnitType(GetFilterUnit(),UNIT_TYPE_MAGIC_IMMUNE)and not IsUnitType(GetFilterUnit(),UNIT_TYPE_FLYING) endfunction function arrow_damage takes nothing returns nothing
local integer lvl = GetUnitAbilityLevel(GetSpellAbilityUnit(), 'A00B') call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\ImmolationRed\\ImmolationRedDamage.mdl", GetEnumUnit(), "overhead")) call UnitDamageTargetBJ( GetSpellAbilityUnit(), GetEnumUnit(), (40*I2R(lvl)), ATTACK_TYPE_MAGIC, DAMAGE_TYPE_FIRE ) endfunction function arrow_move takes nothing returns nothing
local integer i = GetHandleId(GetExpiredTimer()) local unit d = LoadUnitHandle(udg_h, i, 0) local real a = LoadReal(udg_h, i, 1) local real x2 = GetUnitX(d) + 20.00 * Cos(a*bj_DEGTORAD) local real y2 = GetUnitY(d) + 20.00 * Sin(a*bj_DEGTORAD) local real x = LoadReal(udg_h, i, 2) local real y = LoadReal(udg_h, i, 3) local real dist = SquareRoot((x2-x)*(x2-x)+(y2-y)*(y2-y)) local group g = CreateGroup() call GroupEnumUnitsInRange(g, GetUnitX(d), GetUnitY(d), 150, Condition(function FilterUnit)) call ForGroup(g, function arrow_damage) if dist < 1800 then call SetUnitPosition(d, x2, y2) else call RemoveUnit(d) endif call DestroyGroup(g) set g = null set d = null endfunction function arrow_act takes nothing returns nothing
local timer t = CreateTimer() local unit c = GetSpellAbilityUnit() local real cx = GetUnitX(c) local real cy = GetUnitY(c) local real tx = GetLocationX(GetSpellTargetLoc()) local real ty = GetLocationY(GetSpellTargetLoc()) set udg_h=InitHashtable() call SaveUnitHandle(udg_h, GetHandleId(t), 0, CreateUnit(GetOwningPlayer(c), 'h003',cx , cy, bj_RADTODEG*Atan2(ty-cy,tx-cx) )) call SaveReal(udg_h, GetHandleId(t), 1, bj_RADTODEG*Atan2(ty-cy,tx-cx)) call SaveReal(udg_h, GetHandleId(t), 2, GetUnitX(GetSpellAbilityUnit())) call SaveReal(udg_h, GetHandleId(t), 3, GetUnitY(GetSpellAbilityUnit())) call TimerStart(t, 0.03125, true, function arrow_move) set t = null set c = null endfunction function InitTrig_Arrow takes nothing returns nothing
local trigger t = CreateTrigger() call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_CAST) call TriggerAddCondition(t, Condition(function arrow_cond)) call TriggerAddAction(t, function arrow_act) endfunction )) Отредактировано freest, 01.02.2012 в 18:09. |
01.02.2012, 18:02 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
alexprey
познающий Unity
offline
Опыт:
68,501Активность: |
GetTriggerUnit()
ниче не вернет. Вот в этом и ошибка alexprey добавил: Ну я про фильр |
01.02.2012, 18:06 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
freest
offline
Опыт:
442Активность: |
alexprey, заменил на GetSpellAbilityUnit() результат тот же |
01.02.2012, 18:08 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
alpha
offline
Опыт:
7,387Активность: |
В фильтре функция GetSpellAbilityUnit() и GetTriggerUnit() возвращает null, насколько я знаю. Делай через переменную |
01.02.2012, 18:13 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
freest
offline
Опыт:
442Активность: |
и как через переменную ? Отредактировано freest, 01.02.2012 в 18:19. |
01.02.2012, 18:13 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
alpha
offline
Опыт:
7,387Активность: |
Заноси при касте его в хэш, перед фильтром заноси в переменную.
Да и функции GetSpellAbilityUnit() и GetTriggerUnit() в функции которая запускается таймером изначально не должно быть |
01.02.2012, 18:28 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
freest
offline
Опыт:
442Активность: |
мм, globals - хз куда это писать, Jass2 не юзаю.
Использовал по типу: set udg_u = LoadUnitHandle(udg_h, i, 4) начал пикать, спасибо, клоуз |
01.02.2012, 18:32 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
alpha
offline
Опыт:
7,387Активность: |
Используй как тебе удобнее, я выразил суть алгоритма, который тут должен быть Закрыто |
01.02.2012, 18:40 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|