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

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

Ответ
 
skiper

offline
Опыт: 333
Активность:
Unit enters rect event?
Собственно сам я в джассе ни бельмеса не понимаю, пару систем для своей карты согласовывал с их создателями, и фиксил для себя по данному экземпляру. Стыдно из-за такого пустяка опять беспокоить автора одной из известных FSI систем, нужно сделать следующую вещь.
У меня есть код, где инвентарь дается тому юниту, кого собсно и ставит строчкой:
set hero = CreateUnit(Player(i), 'Hpal', 0., 0., 0.)
Мне же нужно дать инвентарь тому юниту, которого игрок пикает сам. Так что я заменил строчку на:
set hero = GetEnteringUnit()
Вроде хелпер не ругается, теперь мне нужно узнать, как всунуть в код отслеживание события 'Unit enters playable map area'? Буду благодарен любой помощи.
Старый 03.08.2010, 09:15
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
создавай триггер, добавляй событие "юнит enters region", добавляй проверку на его typeId, добавляй действие
Цитата:
set hero = GetEnteringUnit()
выключай триггер, profit!

Отредактировано bee, 07.08.2010 в 21:02.
Старый 03.08.2010, 10:27
ScorpioT1000
Работаем
offline
Опыт: отключен
GetTriggerUnit()
Старый 03.08.2010, 10:37
skiper

offline
Опыт: 333
Активность:
bee:
создавай триггер, добавляй событие "юнит enters region", добавляй проверку на его typeId, добавляй действиевыключай триггер, profit!
Не понял, в чем соль? Пытался ставить в триггере это событие, затем конвертировать в кастом текст, и вставлять евент-часть в код, но ничего не вышло. Вот то, что было на последней попытке:
scope test initializer init

function Trig_Now_Conditions takes nothing returns boolean
    if ( not ( GetPlayerController(GetOwningPlayer(GetEnteringUnit())) == MAP_CONTROL_USER ) ) then
        return false
    endif
    return true
endfunction

        private function Trig_Now_Actions takes nothing returns nothing
        local unit fakeInv = null
        local unit hero = null
        local integer i = 0
        
        loop
            exitwhen i >= 12

            if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING and GetPlayerController(Player(i)) == MAP_CONTROL_USER then
                set fakeInv = CreateInventoryUnit(Player(i), 'h000')
                set hero = GetEnteringUnit()
                call CreateInventoryUI(hero, fakeInv)
            endif
        
            set i = i +1
        endloop
    endfunction


endscope

//===========================================================================
function InitTrig_Now takes nothing returns nothing
    set gg_trg_Now = CreateTrigger(  )
    call TriggerRegisterEnterRectSimple( gg_trg_Now, GetPlayableMapRect() )
    call TriggerAddCondition( gg_trg_Now, Condition( function Trig_Now_Conditions ) )
    call TriggerAddAction( gg_trg_Now, function Trig_Now_Actions )
endfunction
[+] замечание от ScorpioT1002: используй тег кода - двойные кавычки

Отредактировано ScorpioT1002, 09.08.2010 в 01:08.
Старый 04.08.2010, 14:27
Daemonik

offline
Опыт: 5,084
Активность:
call TriggerRegisterEnterRectSimple( gg_trg_Now, GetPlayableMapRect() )
GetPlayableMapRect()
Ну что это такое?!
Пиши тот регион, в который входит юнит. А не GetPlayableMapRect(), то есть bj_mapInitialPlayableArea.
Уже vJass используешь, а такую глупость пишешь. И да, оптимизируй код.
Старый 07.08.2010, 15:18
skiper

offline
Опыт: 333
Активность:
Постоянно пишет "Unable to find initializer: init" на строчку "endscope" >_<
Насчет моего понимания кода написано в первом посте.
Старый 09.08.2010, 10:17
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
function init takes nothing returns nothing
    set gg_trg_Now = CreateTrigger(  )
    call TriggerRegisterEnterRectSimple( gg_trg_Now, GetPlayableMapRect() )
    call TriggerAddCondition( gg_trg_Now, Condition( function Trig_Now_Conditions ) )
    call TriggerAddAction( gg_trg_Now, function Trig_Now_Actions )
endfunction
потому что scope "Имя области" initializer "Имя функции, которую вар начнет читать при загрузке карты."
раз ты ее задал, а ее нет, вот и пишет компилятор.
Старый 09.08.2010, 10:19
Ответ

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

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

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

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



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