Можно ли в JASS использовать переменные в событиях? И будет ли триггер обновляться при изменении значений этих переменных? Если нет, то есть ли обратная функция TriggerAddAction, чтобы удалить или может очистить все события триггера?

Принятый ответ

+, JASS API откпывал? Там вначале:
	boolean
	code
	handle
	integer
	real
	string
Перечислены типы данных языка JASS, тут приведены типы данных, логическая, код (тебе рано об этом типе), хендл (ссылка на обьект), целочисленная, вещественная, строка.
handle это обьект, причем не важно юнит, локация, или триггер - это все обькты, они поделены на поддтипы для удобства. События требют только handle (кропе пары отбитых, на тип real но они работают криво, их никто не использует)
Так что статьи в помощь.
И кстати забыл написать, у одного триггера может быть множество событий, условий и действий, причем совершенно разных.
0
19
7 лет назад
0
Похожие вопросы:

ответ
Объясню, почему я удалил код: после проведённого за кодом времени, я понял, что сильно погорячился, задав такой глупый вопрос. Стоило отдохнуть, проветрить голову, и решение нашлось. Тем, кто столкнулся с хоть самую малость, но похожей проблемой, дам совет: всегда проверяйте соответствия заклинаний, написанных в коде jass (CTRL + D, если кто не знает, как узнать id заклинания) и ,конечно, сам синтаксис. Также посоветую не утраивать "свалку" в коде, как это сделал я. В общем, если кому интересно, как я решил проблему, пишите - расскажу или даже помогу если у вас она схожая.(Всё дело во внимательности)...
Сброшу код триггера таким, каким я его хотел видеть изначально:
function MU_Check_lvl_four takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 4 ) ) then
        return false
    endif
    return true
endfunction

function MU_Check_lvl_three takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 3 ) ) then
        return false
    endif
    return true
endfunction

function MU_Check_lvl_two takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 2 ) ) then
        return false
    endif
    return true
endfunction

function MU_Check_lvl_one takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A011', udg_Akame_Killer) == 1 ) ) then
        return false
    endif
    return true
endfunction

function MU_Second_Conditions takes nothing returns boolean
    if ( not ( UnitHasBuffBJ(GetEventDamageSource(), 'B008') == true ) ) then
        return false
    endif
    if ( not ( GetEventDamageSource() == udg_Akame_Killer ) ) then
        return false
    endif
    return true
endfunction

function MU_Start_Conditions takes nothing returns boolean
    if ( not ( UnitHasBuffBJ(GetAttacker(), 'B008') == true ) ) then
        return false
    endif
    if ( not ( GetAttacker() == udg_Akame_Killer ) ) then
        return false
    endif
    return true
endfunction

function Trig_MU_Conditions takes nothing returns boolean
    if ( not MU_Start_Conditions() ) then
        return false
    endif
    return true
endfunction

function MU_Venum_Check takes nothing returns boolean
    if ( not ( udg_MU_Venum_counter == 2 ) ) then
        return false
    endif
    return true
endfunction

function MU_del takes nothing returns nothing 
    if ( MU_Check_lvl_one() ) then
        call SetPlayerAbilityAvailableBJ( true, 'A00X', GetOwningPlayer(GetEventDamageSource()) )
        call UnitRemoveAbilityBJ( 'A00X', GetEventDamageSource() )
    else
        if ( MU_Check_lvl_two() ) then
            call SetPlayerAbilityAvailableBJ( true, 'A00U', GetOwningPlayer(GetEventDamageSource()) )
            call UnitRemoveAbilityBJ( 'A00U', GetEventDamageSource() )
        else
            if ( MU_Check_lvl_three() ) then
                call SetPlayerAbilityAvailableBJ( true, 'A00Y', GetOwningPlayer(GetEventDamageSource()) )
                call UnitRemoveAbilityBJ( 'A00Y', GetEventDamageSource() )
            else
                if ( MU_Check_lvl_four() ) then
                    call SetPlayerAbilityAvailableBJ( true, 'A013', GetOwningPlayer(GetEventDamageSource()) )
                    call UnitRemoveAbilityBJ( 'A013', GetEventDamageSource() )
                else
                    call DoNothing(  )
                endif
            endif
        endif
    endif
endfunction


function Trig_MU_Actions takes nothing returns nothing
    call DestroyTrigger(udg_MU_trig)
    set udg_MU_Venum_counter = GetRandomInt(1, 5)
    set udg_MU_TG = GetAttackedUnitBJ()
    if ( MU_Venum_Check() ) then
        if ( MU_Check_lvl_one() ) then
        call UnitAddAbilityBJ( 'A00X', udg_Akame_Killer )
        call SetPlayerAbilityAvailableBJ( false, 'A00X', GetOwningPlayer(udg_Akame_Killer) )
    else
        if ( MU_Check_lvl_two() ) then
            call UnitAddAbilityBJ( 'A00U', udg_Akame_Killer )
            call SetPlayerAbilityAvailableBJ( false, 'A00U', GetOwningPlayer(udg_Akame_Killer) )
        else
            if ( MU_Check_lvl_three() ) then
                call UnitAddAbilityBJ( 'A00Y', udg_Akame_Killer )
                call SetPlayerAbilityAvailableBJ( false, 'A00Y', GetOwningPlayer(udg_Akame_Killer) )
            else
                if ( MU_Check_lvl_four() ) then
                    call UnitAddAbilityBJ( 'A013', udg_Akame_Killer )
                    call SetPlayerAbilityAvailableBJ( false, 'A013', GetOwningPlayer(udg_Akame_Killer) )
                else
                    call DoNothing(  )
                endif
            endif
        endif
    endif
    set udg_MU_trig = CreateTrigger()
    call TriggerRegisterUnitEvent( udg_MU_trig, udg_MU_TG, EVENT_UNIT_DAMAGED )
    call TriggerAddCondition( udg_MU_trig, Condition( function MU_Second_Conditions ) )
    call TriggerAddAction( udg_MU_trig, function MU_del )
    else
        call DoNothing(  )
    endif
endfunction

//===========================================================================
function InitTrig_MU takes nothing returns nothing
    set gg_trg_MU = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_MU, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddCondition( gg_trg_MU, Condition( function Trig_MU_Conditions ) )
    call TriggerAddAction( gg_trg_MU, function Trig_MU_Actions )
endfunction
Суть триггера:
Имеется способность с четырьмя уровнями. На каждом уровне урон способности разный, а шанс срабатывания всегда 25%. При атаке герой, имеющий такую способность имеет шанс (25%) на отравление противника.
Переменная udg_Akame_killer равносильна GetEventDamageSource()
P.S. Возможно кому-то даже пригодится этот код... Сделан полнейшим неумехой в плане jass, так что не судите строго!
ответ
в гуи есть триггер-добавить событие
в триггере с событием инициализация 
если триггерная область == null (нету области)
	пробегаем циклом по массиву областей
	триггер - добавить событие этому триггеру (Юнит входит в область (Rect[А]))
иначе
	делаем то что надо делать при входе в 1 из 50 областей
иначе никак
ответ
отменять постройку юнита если технология уже ап
либо как сразу говорили через ап здания
где каждому твоему зданию будет соответствовать такое же здание но с дополнительным слотом
с продажей юнита открываешь доту и смотришь как там сделан спелл передать предметы у куры
он сделан как раз через продажу юнита
иначе никак
если не нравится пожалуйся богу об этом
или близардам
пусть выпустят новый патч специально для тебя
ответ
Sacar777, выведи после MultiboardGetItem(udg_JC_Board, i-1, 1)
на экран следующий текст
I2S(GetHandleId(q1))
I2S(GetHandleId(q2))
если q2 по каким то причинам не создаётся то это скажет об этом
стоп
а какой у тебя размер столбца стоит?
мб просто ячейка q1 перекрывает собой ячейку q2
и размер 10 это очень много
ведь в отличие от гуи тут размер в сотых указывается
то есть если в гуи размер 10 то тут должен быть 0.1
поставь в MultiboardSetItemWidth(q1, 10.00)
вместо 10.00 0.1 и проверь
если 0.1 не сработает то поставь 0.02
если и это не сработает то отпиши сюда
я тогда раскапаю свой старый мультибоард и сравню с твоим
ответ
Это события с опткодом, больше меньше или равно значению в какой то переменной, эти недособытия кривые и работают не везде, порой тупо не срабатывают, я долго возился с событием игровое время равно ... чтобы отследить ночь и день, в сингле это работало в муи были постоянные баги, событие тупо не срабатывало в итоге сделал периодическим таймером.

0
28
7 лет назад
0
переменные в триггерах?
ты имеешь ввиду getTriggerUnit и подобные?
2
14
7 лет назад
2
вот так можно
Загруженные файлы
0
10
7 лет назад
0
Дико извиняюсь, перепутал слово. Переменные в событиях триггера*
0
32
7 лет назад
0
Простите а что вы вдруг собрались делать что вам вдруг события с переменными нужны или вовсе удалять события.
Есть несколько типов событий, события на конкретный обьект, событие на целую группу обьектов. К примеру есть событие - конкретный юнит отдал приказ без указания цели, а есть похоже событие для всех юнитов конкретного игрока.
Событие крепится к обьекту а не к триггеру, удалить там ничего нельзя.
Для событий нужен обьект, на котором будет висеть событие. Нельзя вот так просто записать 1 раз событие на переменную а потом записывать туда всех юнитов, хрен вам! Нет ну конечно можно написать так TriggerRegisterUnitEvent( trg, udg_TemUnit, EVENT_UNIT_DAMAGED ) но событие повесится на того юнита, что был записан в переменной udg_TempUnit в момент вызова TriggerRegisterUnitEvent, дальше меняй не меняй юнита в переменной ничего не изменится.
0
28
7 лет назад
0
Morkoffka, переменные использовать можно везде
вот только ты вообще не знаешь что такое переменные
переменная просто хранит данные
функции работают с данными
т.е. когда ты вызываешь функцию то из переменной читаются данные и уже эти данные передаются в функцию
для примера возьмём листок бумаги на котором записано число(пускай 3)
листок бумаги это переменная
число это данные
если дать человеку прочитать число с листка то он будет знать только число которое было записано на листке(3)
потом число убрали корректором и написали другое число(5) и показали его другому человеку
таким образом первый человек знает число 3 а второй число 5
а сам листок уже давно использовали как туалетную бумагу
0
32
7 лет назад
0
TriggerAddAction ваще никак не связана с событием, это действия триггера, их можно добавлять и удалять одному и тому же триггеру сколько угодно раз.
Вот только не думаю что если вы задаете такие вопросы то сможите осилить динамическую смену действий триггера.
Все функции для работы с триггерами, а так же с их условиями или действиями можно посмотреть jass_API
0
28
7 лет назад
0
quq_CCCP, да тут незнание основ а ты api и принципы работы триггеров пихаешь
0
32
7 лет назад
0
nvc123:
quq_CCCP, да тут незнание основ а ты api и принципы работы триггеров пихаешь
Ну пусть учит, раз задает вопрос по типу - есть или нет такая то функция, смотришь в jass API там все функции языка JASS2 + есть коментарии разработчиков насчет отдельных функций, думаю даже обезьяна поймет, что к чему.
0
10
7 лет назад
0
nvc123:
quq_CCCP, да тут незнание основ а ты api и принципы работы триггеров пихаешь
Я и имел ввиду, будет ли событие триггера изменятся, если изменяется значение переменной(уже не вопрос)
Что касается TriggerAddAction, снова напутал(второй раз), речь шла о функциях работы с событиями триггера
Спасибо за Jass Api. Как ни странно о функциях я узнавал конвертом с гуи
0
32
7 лет назад
0
Как то странно ты задал вопрос, + напутал события с действиями.
Событие требует обьект по определению а не переменную.
0
10
7 лет назад
0
по определению
Можно подробнее? Объекты это тоже основы?
0
32
7 лет назад
Отредактирован quq_CCCP
0
+, JASS API откпывал? Там вначале:
	boolean
	code
	handle
	integer
	real
	string
Перечислены типы данных языка JASS, тут приведены типы данных, логическая, код (тебе рано об этом типе), хендл (ссылка на обьект), целочисленная, вещественная, строка.
handle это обьект, причем не важно юнит, локация, или триггер - это все обькты, они поделены на поддтипы для удобства. События требют только handle (кропе пары отбитых, на тип real но они работают криво, их никто не использует)
Так что статьи в помощь.
И кстати забыл написать, у одного триггера может быть множество событий, условий и действий, причем совершенно разных.
Принятый ответ
0
10
7 лет назад
0
quq_CCCP:
+, JASS API откпывал? Там вначале:
	boolean
	code
	handle
	integer
	real
	string
Перечислены типы данных языка JASS, тут приведены типы данных, логическая, код (тебе рано об этом типе), хендл (ссылка на обьект), целочисленная, вещественная, строка.
handle это обьект, причем не важно юнит, локация, или триггер - это все обькты, они поделены на поддтипы для удобства. События требют только handle (кропе пары отбитых, на тип real но они работают криво, их никто не использует)
Так что статьи в помощь.
И кстати забыл написать, у одного триггера может быть множество событий, условий и действий, причем совершенно разных.
Обязательно прочитаю, спасибо
nvc123:
Morkoffka, переменные использовать можно везде
вот только ты вообще не знаешь что такое переменные
переменная просто хранит данные
функции работают с данными
т.е. когда ты вызываешь функцию то из переменной читаются данные и уже эти данные передаются в функцию
для примера возьмём листок бумаги на котором записано число(пускай 3)
листок бумаги это переменная
число это данные
если дать человеку прочитать число с листка то он будет знать только число которое было записано на листке(3)
потом число убрали корректором и написали другое число(5) и показали его другому человеку
таким образом первый человек знает число 3 а второй число 5
а сам листок уже давно использовали как туалетную бумагу
Хорошо. Есть человек, который следит за проезжающими машинами. Если в номере машины содержится цифра(заранее известная человеку), то он останавливает машину. Этот человек - событие триггера. Каждое утро, цифра(заранее известная человеку) меняется. Меняет её какой либо триггер. Так вот как реализовать такого человека - событие и как менять эту загадочную цифру в Jass?
У нас нет события, при котором машина просто проезжает. Есть только событие в котором заранее указана нужная цифра номера
Кстати, только сейчас я понял, что проблему можно решить по-другому
1
32
7 лет назад
1
Morkoffka, неправильно мыслишь, событие - в данном случае ссылка, которая добавлена в структуру обьекта, тут не челеовек следит за машиной как у тебя, а машина следит что еслить ли человек и заставляет его остановить.
Внутренний обработчик обьекта срабатывая на событие (их множество, их даже больше чем предоставлено в jass) вызывает триггер, глядя на список ссылок обьекта.
Так что что либо поменять нельзя, события не удаляются. Можно удалить триггер и связанный с ним обьект, но никак нельзя удалить событие триггера оставив триггер и\или обьект на котором и весит событие.
0
28
7 лет назад
0
Morkoffka, если цифра меняется то надо чтобы ктото каждое утро говорил человеку новую цифру
Чтобы оставить комментарий, пожалуйста, войдите на сайт.