XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Raptor2108

offline
Опыт: 195
Активность:
Спел Jass
вот делаю спел который создает юнита дамми который летит в тчоку создания заклинания и юзает спел стол богня тем самым нанося там поверждения. Пчоемуто не двигается после создания не знаю в чем ошибка.:
function Trig_spell_Conditions takes nothing returns boolean
        return GetSpellAbilityId() == 'A000'
endfunction

function timerv takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer ID = GetHandleId(t)
local unit d = LoadUnitHandle(udg_Hash,ID, 1)
local location l1 = LoadLocationHandle(udg_Hash,ID, 2)
local location l2 = GetUnitLoc(d)
local real x = GetLocationX(l1)
local real y = GetLocationY(l1)
local real TX = GetUnitX(d)
local real TY = GetUnitY(d)
local real ang = Atan2(y-TY, x -TX)

     if DistanceBetweenPoints(l1, l2) > 40 then
call SetUnitX(d, TX + 25*Cos(ang))
call SetUnitY(d, TY + 25*Sin(ang))
     else
call PauseTimer(t)
call FlushChildHashtable(udg_Hash, ID)
call DestroyTimer(t)
call UnitAddAbility(d, 'A001')
call IssuePointOrder(d, "Spell dumm", GetLocationX(l1), GetLocationY(l1))
call UnitApplyTimedLife(d, 'BTLF', 0.5)
endif

call RemoveLocation(l1)
call RemoveLocation(l2)
set l1 = null
set l2 = null
set t = null
set d = null
endfunction

function Trig_spell_Actions takes nothing returns nothing
local unit u = GetSpellAbilityUnit()
local unit d
local location l = GetSpellTargetLoc()
local timer t = CreateTimer()
local integer ID = GetHandleId(t)

call CreateUnit(GetOwningPlayer(u), 'u000', GetUnitX(u), GetUnitY(u), 0)
set d = GetLastCreatedUnit()
call SaveUnitHandle(udg_Hash, ID, 1, d)
call SaveLocationHandle(udg_Hash,ID, 2, l)

call TimerStart(t, 0.04, true, function timerv)

call RemoveLocation(l)
set l = null
set u = null
set d = null
set t = null

endfunction

//===========================================================================
function InitTrig_spell takes nothing returns nothing
    set gg_trg_spell = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_spell, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_spell, Condition( function Trig_spell_Conditions ) )
    call TriggerAddAction( gg_trg_spell, function Trig_spell_Actions )
endfunction

Отредактировано Hanabishi, 08.05.2011 в 13:43.
Старый 08.05.2011, 13:27
Banzay89

offline
Опыт: 11,155
Активность:
call CreateUnit(GetOwningPlayer(u), 'u000', GetUnitX(u), GetUnitY(u), 0)
set d = GetLastCreatedUnit()
set d=CreateUnit(GetOwningPlayer(u), 'u000', GetUnitX(u), GetUnitY(u), 0)
Старый 08.05.2011, 13:32
Helpmeplz

offline
Опыт: 11,738
Активность:
нативка CreateUnit() не возвращает никаких bj_LastCreatedUnit поэтому запись
Код:
call CreateUnit(GetOwningPlayer(u), 'u000', GetUnitX(u), GetUnitY(u), 0)
set d = GetLastCreatedUnit()

неуместна
замени на
Код:
set d = CreateUnit(GetOwningPlayer(u), 'u000', GetUnitX(u), GetUnitY(u), 0)
Старый 08.05.2011, 13:32
Banzay89

offline
Опыт: 11,155
Активность:
Raptor2108:
local location l = GetSpellTargetLoc()
зачем это?
Старый 08.05.2011, 13:33
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
еще таки хочется добавить что нет смысла использовать локации. Используй координаты )
Старый 08.05.2011, 13:34
Raptor2108

offline
Опыт: 195
Активность:
Теперь он стал исчезать видимо все работает как надо только нет движения
Старый 08.05.2011, 13:43
Helpmeplz

offline
Опыт: 11,738
Активность:
Код:
call PauseTimer(t)

вообще ненужен
Код:
call IssuePointOrder(d, "Spell dumm", GetLocationX(l1), GetLocationY(l1))

что есть "Spell dumm"? на этом месте должен быть ордер столба огня.
Код:
call UnitApplyTimedLife(d, 'BTLF', 0.5)

0.5c на каст может не хватит, учти
Код:
call SetUnitX(d, TX + 25*Cos(ang))
call SetUnitY(d, TY + 25*Sin(ang))

на
Код:
call SetUnitX(d, TX + 25.*Cos(ang*bj_DEGTORAD))
call SetUnitY(d, TY + 25.*Sin(ang*bj_DEGTORAD))
Старый 08.05.2011, 13:56
Raptor2108

offline
Опыт: 195
Активность:
Терь она летит всегда строго вправо
Старый 08.05.2011, 15:10
Helpmeplz

offline
Опыт: 11,738
Активность:
я бы посоветол расчитывать угол при касте заклинания а не в таймере
Старый 08.05.2011, 15:28
Hanabishi
COOL STATUS
offline
Опыт: отключен
Helpmeplz, ты дезинформировал человека, у него угол и так в радианах расчитывается
Старый 08.05.2011, 16:22
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 15:30.