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

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

Ответ
 
Diaboliko
Silenced by Diaboliko
offline
Опыт: 16,108
Активность:
Все ли верно? И что подправить ну и пара вопросов...
Сперва: если функция например
function Trulala takes nothing returns unit
возвращает этого юнита, я могу его использовать бесконечно ссылаясь на триггер?

И главное все ли верно тут(не до конца еще сделал, но все же ошибка есть...))
Код:
function Actions takes unit u returns nothing
if(GetUnitAbilityLevel(u,'B000')>0 and GetUnitState(u,UNIT_STATE_MANA)>=1)then
    call SetUnitState(u,UNIT_STATE_MANA,GetUnitState(u,UNIT_STATE_MANA)-1.00)
else
    call UnitRemoveAbility(u,'B000')
    // call TriggerClearConditions(GetTriggeringTrigger()) //
    // call TriggerClearActions(GetTriggeringTrigger()) //
    // call DestroyTrigger(GetTriggeringTrigger()) //
endif
endfunction

function TActions takes nothing returns unit
local unit u=GetSpellAbilityUnit()
local trigger t=null
if(GetUnitAbilityLevel(u,'B000')>0)then
    if(GetSpellAbilityId()=='A000' )then
            set t=CreateTrigger()
            call SetUnitState(u,UNIT_STATE_MANA,GetUnitState(u,UNIT_STATE_MANA)+20.00)
            call TriggerRegisterTimerEvent(t,0.10,true)
            call TriggerAddAction(t,function Actions)
            return u
        else
            call DoNothing()
        endif
    else
    call DoNothing()
endif
set u=null
return u
endfunction
//===========================================================================
function InitTrig_Rapid_Fire takes nothing returns nothing
    set gg_trg_Rapid_Fire=CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_Rapid_Fire,EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddAction(gg_trg_Rapid_Fire,function TActions)
endfunction
Старый 16.04.2010, 15:04
Doc

offline
Опыт: 63,163
Активность:
Глупее кода я в жизни не видел. Какое то левое создание тригера. Возвращение юнита там где его не должно быть. ДуНафинг и скобки в условиях. Ужас 1 словом.
Старый 16.04.2010, 15:22
Diaboliko
Silenced by Diaboliko
offline
Опыт: 16,108
Активность:
Спасибо кэп. Смени статус на кэп внезапность.

Diaboliko добавил:
Юнит возвращается т.к. ERROR
Старый 16.04.2010, 15:28
StoneHeartis
Kicked by ScorpioT1002
offline
Опыт: 1,009
Активность:
Лучше скажи, что ты хотел тут "сделать"? мб все намного проще т.т
И вообще. Зачем Экшнам возвращать юнита?
Разобрался. В общем вот:
function Trig_Spell_Conditions takes nothing returns boolean
return GetSpellAbilityId()=='A000' and GetUnitAbilityLevel(u,'B000')>0
endfunction

function Trig_Spell_T takes nothing returns nothing
	//Здравствуй, Хэш. Или как делать МУИ? http://xgm.ru/forum/showthread.php?t=30742
	//Опять же, если делатьь динамические триггеры, как ты пытался сделать, то для муи нужен -опять- снова хэш. Или луркай вджасс и юзай структуры о.о
local timer t=GetExpiredTimer()
    if GetUnitAbilityLevel(GetTriggerUnit(),'B000')>0 and GetUnitState(GetTriggerUnit(),UNIT_STATE_MANA)>=1 then
    call SetUnitState(GetTriggerUnit(),UNIT_STATE_MANA,GetUnitState(GetTriggerUnit(),UNIT_STATE_MANA)-1.00)
    else
    call UnitRemoveAbility(GetTriggerUnit(),'B000')
call DestroyTimer(t) 
    endif
set t=null
endfunction

function Trig_Spell_Actions takes nothing returns nothing
local timer t=CreateTmer()
    local unit u=GetTriggerUnit()
    call SetUnitState(u,UNIT_STATE_MANA,GetUnitState(u,UNIT_STATE_MANA)+20.00)
    call TimerStart(t, 0.10, true, function Trig_Spell_T)
    set u=null
set t=null
endfunction

//===========================================================================
function InitTrig_Rapid_Fire takes nothing returns nothing
    local trigger t=CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddAction(t,function Trig_Spell_Actions)
    call TriggerAddCondition(t, Condition(function Trig_Spell_Conditions))
    set t=null
endfunction

Отредактировано StoneHeartis, 16.04.2010 в 16:22.
Старый 16.04.2010, 15:50
Doc

offline
Опыт: 63,163
Активность:
Ты юмористичен до безобразия. Спрашивал все ли верно я и ответил.
Старый 16.04.2010, 16:16
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Не в силах выдержать несовершенство этого мира я закрыл свои очи.
Код в большинстве своем был правильным, за исключением возвращения юнита, неуместных затычек DoNothing() ну и естественно создания динамического триггера. Достаточно созать таймер с аттачем.
Товарищ StoneHeartis, в корне не прав якобы получая юнита под бафом через GetTriggerUnit() в момент срабатывания таймера, там явно будет не тот юнит, который нужен нам.
Нужного юнита нужно заатачить на таймер.
Ну и проверку id заклинания лучше производить в кондишене триггера, так логичнее (лишние касты сразу отсеиваются не доходя до TActions).
Старый 16.04.2010, 19:18
Elf_Stratigo

offline
Опыт: 4,699
Активность:
function Actions takes nothing returns nothing
local trigger t
local unit u = НАЙТИ ЧЕРЕЗ ХЕШ ЮНИТ
    if GetUnitAbilityLevel(u,'B000')>0 and GetUnitState(u,UNIT_STATE_MANA)>=1. then
      call SetUnitState(u,UNIT_STATE_MANA,GetUnitState(u,UNIT_STATE_MANA)-1.)
    else
        call UnitRemoveAbility(u,'B000')
        set t=GetTriggeringTrigger()
        call TriggerClearActions(t)
        call DestroyTrigger(t)
        set t=null
    endif
    set u=null
endfunction

function TActions takes nothing returns nothing
local unit u = GetSpellAbilityUnit()
local trigger t
    if GetSpellAbilityId()=='A000' and GetUnitAbilityLevel(u,'B000')>0 then
        set t=CreateTrigger()
        call SetUnitState(u,UNIT_STATE_MANA,GetUnitState(u,UNIT_STATE_MANA)+20.00)
        call TriggerRegisterTimerEvent(t,.10,true)
        call TriggerAddAction(t,function Actions)
        ПРИДЕЛАТЬ К ТРИГГЕРУ (ТАЙМЕРУ) ЮНИТ
        set t=null
    endif
    set u=null
endfunction
//===========================================================================
function InitTrig_Rapid_Fire takes nothing returns nothing
    set gg_trg_Rapid_Fire=CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_Rapid_Fire,EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddAction(gg_trg_Rapid_Fire,function TActions)
endfunction
смотри и думай
как сказано выше - нужно пользоваться хешой или другим альтернативным методом
ну и вместо триггера - таймер, хотя конечно зависит от случая
Старый 16.04.2010, 21:30
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Для периодических событий таймер всегда лучше однозначно.
Старый 16.04.2010, 21:38
Elf_Stratigo

offline
Опыт: 4,699
Активность:
если ему захочется туда впихать TriggerSleepAction то не лучше
конечно такое заклинание - ... - но потребность может возникнуть
Старый 16.04.2010, 21:40
Diaboliko
Silenced by Diaboliko
offline
Опыт: 16,108
Активность:
Ну вообще суть способности(триггерная) сжигать ману и отрубать бафф B000 способности A000 когда та становится=0.
Diaboliko добавил:
А хэш я просто не хочу использовать, все-таки над ним химичат)
Старый 17.04.2010, 10:38
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Цитата:
А хэш я просто не хочу использовать, все-таки над ним химичат)

так используй структуру тогда..
Старый 17.04.2010, 11:12
Diaboliko
Silenced by Diaboliko
offline
Опыт: 16,108
Активность:
Ни о каких структурах увы не слышал) можно ссыль и краткое объяснение?)
Старый 17.04.2010, 11:28
Ответ

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

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

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

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



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