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

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

Закрытая тема
 
ssbbssc

offline
Опыт: 16,816
Активность:
Как запихать в Events переменную Unit?
Копался в этой теме, и захотел сделать такой спелл. Взял за основу спелл Ледяная Броня (Frost Armor, не автокаст), выставил там свои настройки.
Создал триггер, в котром при старте эффекта заклинания в переменную cr_armor_target записывается цель заклинания. Потом влезаю в труд Extremator'a (xgm.ru/forum/attachment.php?attachmentid=112621), удаляю первые два условия, хочу создать свое - и впадаю в ступор, ибо в событии specific unit event => unit => variables нету моей переменной unit (переменная с названием cr_armor_target, тип unit, изначально пустая). Во вкладке variables есть только 2 юнита, которые автор спелла изначально на карту поставил. А я хочу впихнуть туда переменную. Есть способ?
Старый 24.06.2013, 15:25
DioD

offline
Опыт: 45,134
Активность:
так как вы хотите не будет, событие будет создано на юнита который будет в этой переменной в момент старта карты, чтобы создать на переменную требуется делать динамические триггеры
Старый 24.06.2013, 15:52
ssbbssc

offline
Опыт: 16,816
Активность:
попробовал вылечить проблему так - компильнул триг екстрематора в джасс, и заменил переменную Каеля gg_unit_Hblm_0020 на свою переменную udg_cr_armor_target
ошибок компиляции нету, но триггер не отлечивает вообще никакой урон.
вот получившийся код -
function Trig_c_Copy_Func001Func001C takes nothing returns boolean
    if ( not ( ( GetEventDamage() + 1.34 ) > GetUnitStateSwap(UNIT_STATE_MAX_LIFE, udg_cr_armor_target) ) ) then
        return false
    endif
    return true
endfunction

function Trig_c_Copy_Func001C takes nothing returns boolean
    if ( not ( ( GetUnitStateSwap(UNIT_STATE_LIFE, udg_cr_armor_target) + GetEventDamage() ) > GetUnitStateSwap(UNIT_STATE_MAX_LIFE, udg_cr_armor_target) ) ) then
        return false
    endif
    return true
endfunction

function Trig_c_Copy_Actions takes nothing returns nothing
    if ( Trig_c_Copy_Func001C() ) then
        if ( Trig_c_Copy_Func001Func001C() ) then
            set udg_HP = GetUnitStateSwap(UNIT_STATE_LIFE, udg_cr_armor_target)
            call UnitAddAbilityBJ( 'A004', udg_cr_armor_target )
            call SetUnitLifeBJ( udg_cr_armor_target, ( udg_HP + GetEventDamage() ) )
            call AddSpecialEffectTargetUnitBJ( "chest", udg_cr_armor_target, "Abilities\\Spells\\Undead\\AbsorbMana\\AbsorbManaBirthMissile.mdl" )
            call DestroyEffectBJ( GetLastCreatedEffectBJ() )
            call PolledWait( 0.10 )
            set udg_HP = GetUnitStateSwap(UNIT_STATE_LIFE, udg_cr_armor_target)
            call UnitRemoveAbilityBJ( 'A004', udg_cr_armor_target )
            call SetUnitLifeBJ( udg_cr_armor_target, udg_HP )
        else
            call PolledWait( 0.10 )
            call SetUnitLifeBJ( udg_cr_armor_target, ( GetUnitStateSwap(UNIT_STATE_LIFE, udg_cr_armor_target) + GetEventDamage() ) )
            call AddSpecialEffectTargetUnitBJ( "chest", udg_cr_armor_target, "Abilities\\Spells\\Undead\\AbsorbMana\\AbsorbManaBirthMissile.mdl" )
            call DestroyEffectBJ( GetLastCreatedEffectBJ() )
        endif
    else
        call SetUnitLifeBJ( udg_cr_armor_target, ( GetUnitStateSwap(UNIT_STATE_LIFE, udg_cr_armor_target) + GetEventDamage() ) )
        call AddSpecialEffectTargetUnitBJ( "chest", udg_cr_armor_target, "Abilities\\Spells\\Undead\\AbsorbMana\\AbsorbManaBirthMissile.mdl" )
        call DestroyEffectBJ( GetLastCreatedEffectBJ() )
    endif
endfunction

//===========================================================================
function InitTrig_c_Copy takes nothing returns nothing
    set gg_trg_c_Copy = CreateTrigger(  )
    call DisableTrigger( gg_trg_c_Copy )
    call TriggerRegisterUnitEvent( gg_trg_c_Copy, udg_cr_armor_target, EVENT_UNIT_DAMAGED )
    call TriggerAddAction( gg_trg_c_Copy, function Trig_c_Copy_Actions )
endfunction
это сам код скилла, еще есть триггер, который его включает, он работает без ошибок.
c turn on
    Events
        Unit - A unit Starts the effect of an ability
    Conditions
        (Ability being cast) Equal to Кристаллическая Броня 
    Actions
        Game - Display to (All players) the text: Включена к...
        Set cr_armor_target = (Target unit of ability being cast)
        Game - Display to (All players) the text: (цель заклинания  + (Name of cr_armor_target))
        Trigger - Turn on c Copy <gen>
        Game - Display to (All players) the text: включили т...
        Wait 10.00 seconds
        Trigger - Turn off c Copy <gen>
        Game - Display to (All players) the text: выключили ...
ssbbssc добавил:
call DisableTrigger( gg_trg_c_Copy ) - убрал, не помогло
ssbbssc добавил:
помогите, ироды >_< . с меня плюс в репу и большое спасибо
Старый 24.06.2013, 17:39
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
есть такое замечательное действие,как
Триггер - Добавить событие(specific unit event(юнит получает урон))
Старый 24.06.2013, 17:47
ssbbssc

offline
Опыт: 16,816
Активность:
ssbbssc:
в событии specific unit event => unit => variables нету моей переменной unit (переменная с названием cr_armor_target, тип unit, изначально пустая). Во вкладке variables есть только 2 юнита, которые автор спелла изначально на карту поставил. А я хочу впихнуть туда переменную?
Старый 24.06.2013, 17:58
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,324
Активность:
ssbbssc, события не работают на переменные, они создаются на конкретных юнитов, тоесть каждый раз нужно создавать новое событие для каждого нового юнита...
Старый 24.06.2013, 18:05
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
m-|
триггер - новое действие - и уже В ДЕЙСТВИЯХ есть список действий под названием Триггер - вот там Триггер - Добавить событие к триггеру
Старый 24.06.2013, 18:06
Variecs

offline
Опыт: 2,508
Активность:
Создаете триггер с событием на каст заклинания. Если индекс кастуемого заклинания правильный, добавляете к описанному Вами триггеру событие (цель каста) получает урон.
Профит. И не нужно никаких дополнительных переменных.
Старый 24.06.2013, 18:35
ssbbssc

offline
Опыт: 16,816
Активность:
у этой каки убираем события
c
    Events
    Conditions
    Actions
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            If - Conditions
                ((Life of (Triggering unit)) + (Damage taken)) Greater than (Max life of (Triggering unit))
            Then - Actions
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        ((Damage taken) + 1.34) Greater than (Max life of (Triggering unit))
                    Then - Actions
                        Set HP = (Life of (Triggering unit))
                        Unit - Add &#208;&#376;&#209;€&#208;µ&#208;&#180;&#208;&#188;&#208;µ&#2​09;‚: &#209;&#402;&#208;&#178;&#208;µ&#208;»&#208;&#184;&#209;‡&#2​08;µ&#208;&#189;&#208;&#184;&#208;µ &#208;·&#208;°&#208;&#191;&#208;°&#209;&#129;&#208;° &#208;·&#208;&#180;&#208;&#190;&#209;€&#208;&#190;&#208;&#17​8;&#209;&#338;&#209;&#143; +1000000  to (Triggering unit)
                        Unit - Set life of (Triggering unit) to (HP + (Damage taken))
                        Special Effect - Create a special effect attached to the chest of (Triggering unit) using Abilities\Spells\Undead\AbsorbMana\AbsorbManaBirthMissile.mdl
                        Special Effect - Destroy (Last created special effect)
                        Wait 0.10 game-time seconds
                        Set HP = (Life of (Triggering unit))
                        Unit - Remove &#208;&#376;&#209;€&#208;µ&#208;&#180;&#208;&#188;&#208;µ&#2​09;‚: &#209;&#402;&#208;&#178;&#208;µ&#208;»&#208;&#184;&#209;‡&#2​08;µ&#208;&#189;&#208;&#184;&#208;µ &#208;·&#208;°&#208;&#191;&#208;°&#209;&#129;&#208;° &#208;·&#208;&#180;&#208;&#190;&#209;€&#208;&#190;&#208;&#17​8;&#209;&#338;&#209;&#143; +1000000  from (Triggering unit)
                        Unit - Set life of (Triggering unit) to HP
                    Else - Actions
                        Wait 0.10 game-time seconds
                        Unit - Set life of (Triggering unit) to ((Life of (Triggering unit)) + (Damage taken))
                        Special Effect - Create a special effect attached to the chest of (Triggering unit) using Abilities\Spells\Undead\AbsorbMana\AbsorbManaBirthMissile.mdl
                        Special Effect - Destroy (Last created special effect)
            Else - Actions
                Unit - Set life of (Triggering unit) to ((Life of (Triggering unit)) + (Damage taken))
                Special Effect - Create a special effect attached to the chest of (Triggering unit) using Abilities\Spells\Undead\AbsorbMana\AbsorbManaBirthMissile.mdl
                Special Effect - Destroy (Last created special effect)
и в довесок делаем такую каку
c turn on
    Events
        Unit - A unit Begins casting an ability
    Conditions
        (Ability being cast) Equal to Frost Armor rc
    Actions
        Trigger - Add to c <gen> the event (Unit - (Target unit of ability being cast) Takes damage)
сейчас проверю
появились 2 проблемы
1ая - триг перестал запоминать текущее хп и как-то умудряется лечить на вдвое большее.
2ая - юнит постоянно будет под действием этой способности
и еще вопрос - почему не работал вариант на джазе?
ssbbssc добавил:
отзовитесь, еретики!!!!!!!!!!
Старый 24.06.2013, 22:38
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
суть в том,что я бы вам посоветовал:
1.проштудировать поиск на данную тему отлова и блока урона
2.взять листик и ручку,воспроизвести все действия и срабатывания триггера
+
вам надо делать проверки,повешен ли триггер по отлову урона на цель каста,если нет - то вешать
научиться ставить задачи и обдумывать пути решения
орудовать с переменными,возможно с хеш-таблицей
Старый 25.06.2013, 22:38
ssbbssc

offline
Опыт: 16,816
Активность:
Nerevar:
суть в том,что я бы вам посоветовал:
1.проштудировать поиск на данную тему отлова и блока урона
2.взять листик и ручку,воспроизвести все действия и срабатывания триггера
+
вам надо делать проверки,повешен ли триггер по отлову урона на цель каста,если нет - то вешать
научиться ставить задачи и обдумывать пути решения
орудовать с переменными,возможно с хеш-таблицей
поиск проштудирован почти весь, здешний и на хайве.
можете указать, почему не работает мой вариант в джазе? мне кажется, это самый легкий способ получить желаемое, но я не могу понять, почему он не работает, ведь все вроде правильно...
смысл в проверке, если я 1 тригом записываю цель в переменную или добавляю в событие? и от цели\переменной уже и триг пляшет?
попробую еще раз, как вы сказали, но и вас прошу глянуть код.
з.ы.
ой, слушайте, одно дело, когда человек флудит, а вы как бабка у меня на проходной, придираетесь из-за хрени
Старый 25.06.2013, 23:40
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
сим сялябим
есть 3 трига на отлов всего урона
в первом событие инициализации карты,пикаем всех юнитов,добавляем событие пикнутый урон получает урон в 3 триг
во втором триге событие юнит входит в игровую зону,добавляем событие вошедший юнит получает урон в 3 триг
третий триг изначально без событий,но в нем обрабатывается все что должно происходить после получения урона
итого в 3 триггера ты знаешь когда юнит получает и сколько урона
дальше сами
поиск вы не юзали потому что такой логики я не увидел
готовых решений никто вам не даст
Старый 26.06.2013, 10:15
Закрытая тема

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

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

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

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



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