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

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

Закрытая тема
 
Alonix
*null*
offline
Опыт: 26,861
Активность:
Помощь с реализацией спелла
Всем привет! Помогите мне, пожалуйста, с реализацией спелла:
"Герой кидает свой чакрум в указанную точку. После того, как он достигнет цели, он вернется обратно. Если во время полета чакрум заденет врага, то он нанесет ему 50/100/150ед. урона."
Мне нужен план реализации (например 1-ый тригер с таким-то событие, в нем делаешь то, 2-ой с таким-то событием, в нем делаешь другое). Заранее спасибо
Старый 28.11.2010, 10:05
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
ну как бы делается одним тригером
событие юнит применил спелл
создали дамми
сохраняешь всё нужное в хэш
запустили тамер вызывающий функию х
функция х
загружаем из хэша
в ней
наносишь урон юнитам
проверяешь дистанцию между дамми и точкой если больше 60 например то направление угол между дамми и точкой
если меньше то ставишь логическую на да и уже проверяешь расстояние между кастеров и дамми ну и угол между ними когда дамми долетит до кастера очищаешь хэш удаляешь таймер дамми
Старый 28.11.2010, 10:15
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
16GB, ты про дамаг забыл. Kakashi23, потом создаёшь отряд, пикаешь всех вокруг чакрума, если кто-то есть (обычно я использую FirstOfGroup()) то наносишь ему дамаг и всё ломаешь (таймер, хэш флушишь и т.д.
Старый 28.11.2010, 10:20
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
Rampage:
обычно я использую FirstOfGroup())
да это удобнее не надо делать функции к пику
Старый 28.11.2010, 10:23
Doc

offline
Опыт: 63,163
Активность:
Ага, а также нужно записывать что-то на юнита которому нанесли урон, чтобы врагов не убивало мгновенно.
Старый 28.11.2010, 10:46
Alonix
*null*
offline
Опыт: 26,861
Активность:
16GB, я с хэшем работать не умею =(
Старый 28.11.2010, 10:49
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
Doc, ломать таймер и т.д. - действие не продолжится. Ведь нужно чтобы чакрум сломался, при столкновении.
Старый 28.11.2010, 10:51
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
Старый 28.11.2010, 10:52
Alonix
*null*
offline
Опыт: 26,861
Активность:
Rampage, нет, чакрум не должен ломаться.
Старый 28.11.2010, 10:53
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
Kakashi23, извиняюсь, не заметил. Тогда в группу засовывать того, кого покусало.
Старый 28.11.2010, 10:57
Alonix
*null*
offline
Опыт: 26,861
Активность:
Скоро примусь за создание способности. Ждите, возможно, будут вопросы =)
Старый 28.11.2010, 11:01
Alonix
*null*
offline
Опыт: 26,861
Активность:
Вот действие
call SetUnitX(udg_dammy,x+40*Cos(r))
Выдает ошибку "Отсутсвует название". Почему? r = Atan2(y2-y1,x2-x1), а x ничему не равен. Может это из-за него?
Старый 28.11.2010, 21:03
Klop
Папа римский
offline
Опыт: 13,006
Активность:
Kakashi23:
Выдает ошибку "Отсутсвует название". Почему?
переменную X обьявил?
Старый 28.11.2010, 21:05
Alonix
*null*
offline
Опыт: 26,861
Активность:
Mr_KLOP, а что именно нужно объявить как X?
Старый 28.11.2010, 21:08
Klop
Папа римский
offline
Опыт: 13,006
Активность:
Kakashi23, GetUnitX(udg_dammy)
Старый 28.11.2010, 21:10
Alonix
*null*
offline
Опыт: 26,861
Активность:
Mr_KLOP, получилось. Спасибо, тему не закрывайте, я продолжаю работу.
Старый 28.11.2010, 21:12
Alonix
*null*
offline
Опыт: 26,861
Активность:
Вот еще вопрос: у меня есть 3 триггера. 1-ый триггер включает 2-ой, второй двигает чакрум в точку и включает 3-ий, а 3-ий двигает чакрум обратно и выключается. Так вот, первые 2 триггера работают нормально, а 3-ий не двигает чакрум. То есть двигает в одной точке ( туда-сюда ) и юнит не может выбраться. Вопрос: как исправить?
Код триггеров ниже:
1-ый триггер
function Trig_Chakrum_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'AUcs'
endfunction

function Trig_Chakrum_Actions takes nothing returns nothing
    local location loc
    local real Face
    set udg_caster = GetTriggerUnit()
    set loc = GetUnitLoc(udg_caster)
    set Face = GetUnitFacing (udg_caster)
    call CreateNUnitsAtLoc( 1, 'hpea', GetOwningPlayer(udg_caster), loc, Face)
    set udg_dammy = GetLastCreatedUnit()
    set udg_x2 = GetLocationX(GetSpellTargetLoc())
    set udg_y2 = GetLocationY(GetSpellTargetLoc())
    call EnableTrigger( gg_trg_ChakrumMove )
    call RemoveLocation(loc)
endfunction

//===========================================================================
function InitTrig_Chakrum takes nothing returns nothing
    set gg_trg_Chakrum = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Chakrum, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Chakrum, Condition( function Trig_Chakrum_Conditions ) )
    call TriggerAddAction( gg_trg_Chakrum, function Trig_Chakrum_Actions )
endfunction
2-ой триггер
function Trig_ChakrumMove_Actions takes nothing returns nothing
    local real x1 = GetUnitX(udg_dammy)
    local real y1 = GetUnitY(udg_dammy)
    local real r  = Atan2(udg_y2-y1,udg_x2-x1)
    if  x1 != udg_x2 and y1!= udg_y2 then
    call SetUnitX(udg_dammy,x1+20*Cos(r))
    call SetUnitY(udg_dammy,y1+20*Sin(r))
    else
    if  x1 == udg_x2 and y1== udg_y2 then
call DisableTrigger(gg_trg_ChakrumMove)
call EnableTrigger (gg_trg_ChakrumMoveBack)
endif
endif  
endfunction          
//===========================================================================
function InitTrig_ChakrumMove takes nothing returns nothing
    set gg_trg_ChakrumMove = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_ChakrumMove, 0.04 )
    call TriggerAddAction( gg_trg_ChakrumMove, function Trig_ChakrumMove_Actions )
endfunction
3-ий триггер
function Trig_ChakrumMoveBack_Actions takes nothing returns nothing
    local real x1 = GetUnitX(udg_dammy)
    local real y1 = GetUnitY(udg_dammy)
    local real x2 = GetUnitX(udg_caster)
    local real y2 = GetUnitY(udg_caster)
    local real r  = Atan2(y2-y1,x2-x1)
    if  x1 != x2 and y1!= y2 then
    call SetUnitX(udg_dammy,x1+20*Cos(r))
    call SetUnitY(udg_dammy,y1+20*Sin(r))
    else
call RemoveUnit(udg_dammy)
call DisableTrigger( gg_trg_ChakrumMoveBack)
endif 
endfunction
//===========================================================================
function InitTrig_ChakrumMoveBack takes nothing returns nothing
    set gg_trg_ChakrumMoveBack = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_ChakrumMoveBack, 0.04 )
    call TriggerAddAction( gg_trg_ChakrumMoveBack, function Trig_ChakrumMoveBack_Actions )
endfunction
Ниже прикреплена карта с этим спеллом.
Прикрепленные файлы
Тип файла: w3m Chakrum.w3m (17.3 Кбайт, 10 просмотров )
Старый 29.11.2010, 05:02
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
Всё делается в один триггер, в несколько функций.
Rampage добавил:
a глобалку вообще одну можно использовать. Щас я тебе сделаю чакрум.
Rampage добавил:
Вообще, смотрится как гуи. Даже не таймеры а периодик триггер используешь.
Старый 29.11.2010, 05:43
Klop
Папа римский
offline
Опыт: 13,006
Активность:
1.пользуйся таймерами(один спелл = один триггер)
2.не используй BJ функции
3.Проверяй координаты с радиусом потому что точно он врятли совпадут
что то типо такого
GetUnixX(u)>=x-10 or GetUnitX(u) <= x+10 and Аналогично с Y
4.Зачем локация
У тебя вар не 1.24+???
там есть GetSpellTargetX() и GetSpellTargetY()
Старый 29.11.2010, 06:14
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
xgm.ru/forum/showthread.php?p=939261#post939261 вот чакрум, старался.
Старый 29.11.2010, 08:32
Закрытая тема

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

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

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

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



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