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

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

Ответ
 
Spaier

offline
Опыт: 128
Активность:
FireBall проблема
Второй спелл на Jass. Хотел сделать фаерболл, но дамми телепортируется вместо движения. Сам проблему найти не смог.
» раскрыть

library F
hashtable H = InitHashtable()
function DBT takes real x1, real y1, real x2, real y2 returns real
return SquareRoot((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
endfunction
endlibrary

library Firaga takes F
private integer FD = 'h000' //Дамми
private real DMG = 100 //Урон
private integer Firaga = 'A002' //Способность
private real speed = 20 //Скорость
private string se = "Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl" //Взрыв
function FCond takes nothing returns boolean
return GetSpellAbilityId() == Firaga
endfunction


function Handler takes nothing returns nothing
timer t = GetExpiredTimer()
int id = GetHandleId(H)
unit u = LoadUnitHandle(H, id, 0)
unit ue = LoadUnitHandle(H, id, 1)
unit d = LoadUnitHandle(H, id, 2)
real xd = GetUnitX(d)
real yd = GetUnitY(d)
real x1 = GetUnitX(ue)
real y1 = GetUnitY(ue)
real a = Atan2(y1-yd, x1-xd)
BJDebugMsg("3")
if (DBT(xd, yd, x1, y1)>40.) then
SetUnitX(d, xd+speed*Cos(a))
SetUnitY(d, yd+speed*Sin(a))
BJDebugMsg("4")
else
DestroyEffect(AddSpecialEffect(se, x1, y1))
UnitDamageTarget(u,ue,DMG,false,false,null,null,null)
BJDebugMsg("5")
RemoveUnit(d)
FlushChildHashtable(H,id)
PauseTimer(t)
DestroyTimer(t)
endif
d = null
ue = null
u = null
t = null
endfunction

function TrigFiraga takes nothing returns nothing
timer t = CreateTimer()
int id = GetHandleId(H)
unit u = GetSpellAbilityUnit()
unit ue = GetSpellTargetUnit()
real x = GetUnitX(u)
real y = GetUnitY(u)
real f = GetUnitFacing(u)
BJDebugMsg("1")
SaveUnitHandle(H, id, 0, u)
SaveUnitHandle(H, id, 1, ue)
SaveUnitHandle(H, id, 2, CreateUnit(GetOwningPlayer(u),FD, x+50.*Cos(f*bj_DEGTORAD), y+50.*Sin(f*bj_DEGTORAD), f))
TimerStart(t, 0.025, true, function Handler)
BJDebugMsg("2")
u = null
ue = null
t = null
endfunction
function InitTrig_Firaga takes nothing returns nothing
set gg_trg_Firaga = CreateTrigger( )
TriggerRegisterAnyUnitEventBJ(gg_trg_Firaga, EVENT_PLAYER_UNIT_SPELL_EFFECT)
TriggerAddCondition(gg_trg_Firaga, Condition(function FCond))
call TriggerAddAction( gg_trg_Firaga, function TrigFiraga )
endfunction
endlibrary

Заменил код, не то кидал.

Отредактировано Spaier, 16.07.2014 в 16:36.
Старый 16.07.2014, 15:54
16GB
GhostOne User
offline
Опыт: 59,317
Активность:
отладка где?
Старый 16.07.2014, 16:09
Spaier

offline
Опыт: 128
Активность:
Я вставлял BJDebugMsg
между различными частями кода, всё показывалось.

Spaier добавил:
Проблема решилась пересозданием дамми, как закрыть тему?
Старый 16.07.2014, 16:56
nvc123
new status
offline
Опыт: 59,284
Активность:
Spaier, боже
куча таймеров
хэш
при 20 фаерболах одновременно будут лаги
а при 100 вообще фатал
Старый 16.07.2014, 19:42
Hate
конь вакуумный
offline
Опыт: 43,124
Активность:
куча лишних телодвижений в коде, к слову, можно использовать отладку с умом а не бездумно тыкать циферки где попало
Старый 16.07.2014, 19:44
16GB
GhostOne User
offline
Опыт: 59,317
Активность:
nvc123,
у меня в карте все спелы на таймерах сделаны. ничего не лагает.
Старый 19.07.2014, 01:37
Ответ

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

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

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

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



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