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

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

Ответ
 
GnomiD
Случайный прохожий
offline
Опыт: 574
Активность:
Нерабаотает код
В общем есть 2 триггера которые должны отвечать за респ мобов по их стартовым локациям, но дело в том, что триггер отказывается восстанавливать моба. P. S. Хеш-таблицы естественно инициализировал.
» Триггер номер раз
Код:
function SomeRespawnShit takes nothing returns nothing
    call SaveLocationHandle( udg_Hash[1], GetHandleId(GetEnumUnit()), 1, GetUnitLoc(GetEnumUnit()))
    call SaveReal( udg_Hash[2], GetHandleId(GetEnumUnit()), 1, GetUnitFacing(GetEnumUnit()))
endfunction

function Trig_CreepsRespawnInit_Actions takes nothing returns nothing
    local group g = GetUnitsInRectOfPlayer(bj_mapInitialPlayableArea, Player(PLAYER_NEUTRAL_AGGRESSIVE))
    call ForGroup( g, function SomeRespawnShit )
    call DestroyGroup(g)
    set g = null
endfunction

function InitTrig_CreepsRespawnInit takes nothing returns nothing
    set gg_trg_CreepsRespawnInit = CreateTrigger(  )
    call TriggerRegisterTimerEventSingle( gg_trg_CreepsRespawnInit, 2.00 )
    call TriggerAddAction( gg_trg_CreepsRespawnInit, function Trig_CreepsRespawnInit_Actions )
endfunction

» Триггер номер два
Код:
function Trig_CreepsRespawn_Conditions takes nothing returns boolean
    return GetOwningPlayer(GetDyingUnit()) == Player(PLAYER_NEUTRAL_AGGRESSIVE)
endfunction

function CR takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer i = LoadInteger(udg_Hash[5], GetHandleId(t), 1)
    local unit d = LoadUnitHandle (udg_Hash[4], i, 1)
    local location l = LoadLocationHandle( udg_Hash[1], i, 1)
    local real r = LoadReal( udg_Hash[2], i, 1)
    call CreateNUnitsAtLoc(1, GetUnitTypeId(d), Player(PLAYER_NEUTRAL_AGGRESSIVE), l, r)
    call BJDebugMsg(I2S(i))
    call SaveReal( udg_Hash[2], GetHandleId(bj_lastCreatedUnit), 1, r)
    call SaveLocationHandle( udg_Hash[1], GetHandleId(bj_lastCreatedUnit), 1, l)
    call FlushChildHashtable( udg_Hash[1], i)
    call FlushChildHashtable( udg_Hash[2], i)
    call FlushChildHashtable( udg_Hash[4], i)
    call FlushChildHashtable( udg_Hash[5], i)
    call DestroyTimer(t)
    set t = null
    set d = null
    set l = null
endfunction

function Trig_CreepsRespawn_Preparing takes nothing returns nothing
    local timer t = CreateTimer()
    call BJDebugMsg(I2S(GetHandleId(GetDyingUnit())))
    call SaveInteger(udg_Hash[5], GetHandleId(t), 1, GetHandleId(GetDyingUnit()))
    call SaveUnitHandle(udg_Hash[4], GetHandleId(GetDyingUnit()), 1, GetDyingUnit())
    call TimerStart(t, 10., false, function CR)
    set t = null
endfunction

function InitTrig_CreepsRespawn takes nothing returns nothing
    set gg_trg_CreepsRespawn = CreateTrigger(  )
    call TriggerRegisterPlayerUnitEventSimple( gg_trg_CreepsRespawn, Player(PLAYER_NEUTRAL_AGGRESSIVE), EVENT_PLAYER_UNIT_DEATH )
    call TriggerAddCondition( gg_trg_CreepsRespawn, Condition( function Trig_CreepsRespawn_Conditions ) )
    call TriggerAddAction( gg_trg_CreepsRespawn, function Trig_CreepsRespawn_Preparing )
endfunction
Старый 19.03.2010, 14:58
Mr_ILYAS
Kicked by XimikS
offline
Опыт: 492
Активность:
Я вообще не понимаю, зачем ты массив из хеш таблиц сделал?
она должна быть одна на всю игру
кстати что дебуги у тебя выдают? совпадения есть? или пишет нули?
И вообще опиши подробней как ты хочешь сделать.
Зачем, к примеру, тебе группа?

Отредактировано Mr_ILYAS, 19.03.2010 в 16:42.
Старый 19.03.2010, 16:32
GnomiD
Случайный прохожий
offline
Опыт: 574
Активность:
-Массив я сделал дабы окончательно не запутаться, т.к. я только начинаю свое знакомство с хеш-таблицами
-Насчет дебугов, показывает что есть совпадения, но я не пойму почему не работает.
-Как хочу сделать: моб умирает, проходит 30 секунд (меня сейчас в триггере 10 секунд), и на его месте, в той точке где он стоял изначально, появляется следующий, абсолютно в идентичном положении (вплоть до угла поворота) юнит.
-Так было показано в примере на хайве, я просто содрал от туда пиканье через группу.
Старый 19.03.2010, 17:07
XOR

offline
Опыт: 38,159
Активность:
Это спокойно реализуется массивами или одним хэшом. Код кривой. оптимизируем и читаем про хэш ( RazArt ) , agentex делал наработку.
Старый 19.03.2010, 17:14
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
GnomiD,
1)через одну хеш делают
2)чтобы не запутаться существуют ячейки\паренты
3)почитай это ссылка
4)
Цитата:
абсолютно в идентичном положении (вплоть до угла поворота) юнит

разве фасинг юнита остается после смерти?
Старый 19.03.2010, 17:19
GnomiD
Случайный прохожий
offline
Опыт: 574
Активность:
Дело не в том что кто-то делал, дело в том чтобы самому научится. А код да, пока кривой.
AlexKARASb, для этого я загонял его в хеш-таблицу
Старый 19.03.2010, 17:20
Ответ

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

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

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

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



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