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

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

Ответ
 
ComotozNick
Активность: 666
offline
Опыт: 26,206
Активность:
Ошибка в коде?
Вот как-то не могу врубится... короче вот код триггера
Код:
function Trig_MineWithTimer_Func002Func003C takes nothing returns boolean
    if ( not ( GetUnitStateSwap(UNIT_STATE_LIFE, GetEnumUnit()) == 25.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_MineWithTimer_Func002Func004C takes nothing returns boolean
    if ( not ( GetUnitStateSwap(UNIT_STATE_LIFE, GetEnumUnit()) == 20.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_MineWithTimer_Func002Func005C takes nothing returns boolean
    if ( not ( GetUnitStateSwap(UNIT_STATE_LIFE, GetEnumUnit()) == 15.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_MineWithTimer_Func002Func006C takes nothing returns boolean
    if ( not ( GetUnitStateSwap(UNIT_STATE_LIFE, GetEnumUnit()) == 10.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_MineWithTimer_Func002Func007C takes nothing returns boolean
    if ( not ( GetUnitStateSwap(UNIT_STATE_LIFE, GetEnumUnit()) == 5.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_MineWithTimer_Func002Func008C takes nothing returns boolean
    if ( not ( GetUnitStateSwap(UNIT_STATE_LIFE, GetEnumUnit()) == 0.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_MineWithTimer_Func002A takes nothing returns nothing
    local effect e
    call SetUnitLifeBJ( GetEnumUnit(), ( GetUnitStateSwap(UNIT_STATE_LIFE, GetEnumUnit()) - 5.00 ) )
    if ( Trig_MineWithTimer_Func002Func003C() ) then
        call DestroyTextTagBJ( ty )
        call CreateTextTagLocBJ( "TRIGSTR_160", GetUnitLoc(GetEnumUnit()), 0, 14.00, 100, 0.00, 0.00, 0 )
        set ty = GetLastCreatedTextTag()
    else
    endif
    if ( Trig_MineWithTimer_Func002Func004C() ) then
        call DestroyTextTagBJ(ty)
        call CreateTextTagLocBJ( "TRIGSTR_161", GetUnitLoc(GetEnumUnit()), 0, 14.00, 100, 0.00, 0.00, 0 )
        set ty = GetLastCreatedTextTag()
    else
    endif
    if ( Trig_MineWithTimer_Func002Func005C() ) then
        call DestroyTextTagBJ(ty)
        call CreateTextTagLocBJ( "TRIGSTR_162", GetUnitLoc(GetEnumUnit()), 0, 14.00, 100, 0.00, 0.00, 0 )
        set ty = GetLastCreatedTextTag()
    else
    endif
    if ( Trig_MineWithTimer_Func002Func006C() ) then
        call DestroyTextTagBJ(ty)
        call CreateTextTagLocBJ( "TRIGSTR_163", GetUnitLoc(GetEnumUnit()), 0, 14.00, 100, 0.00, 0.00, 0 )
        set ty = GetLastCreatedTextTag()
    else
    endif
    if ( Trig_MineWithTimer_Func002Func007C() ) then
        call DestroyTextTagBJ( ty )
        call CreateTextTagLocBJ( "TRIGSTR_164", GetUnitLoc(GetEnumUnit()), 0, 14.00, 100, 0.00, 0.00, 0 )
        set ty = GetLastCreatedTextTag()
    else
    endif
    if ( Trig_MineWithTimer_Func002Func008C() ) then
        call DestroyTextTagBJ( ty )
        call AddSpecialEffectLocBJ( GetUnitLoc(GetEnumUnit()), "Objects\\Spawnmodels\\Human\\HCancelDeath\\HCancelDeath.mdl" )
        set e = GetLastCreatedEffectBJ()
        call UnitDamagePointLoc( GetEnumUnit(), 0, 250.00, GetUnitLoc(GetEnumUnit()), 2500.00, ATTACK_TYPE_SIEGE, DAMAGE_TYPE_NORMAL )
        call TriggerSleepAction( 1.00 )
        call DestroyEffectBJ( e )
        call DestroyTextTagBJ( ty )
    else
    endif
endfunction

function Trig_MineWithTimer_Actions takes nothing returns nothing
    local texttag ty
    call ForGroupBJ( GetUnitsOfTypeIdAll('n00C'), function Trig_MineWithTimer_Func002A )
endfunction

//===========================================================================
function InitTrig_MineWithTimer takes nothing returns nothing
    set gg_trg_MineWithTimer = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_MineWithTimer, 1.00 )
    call TriggerAddAction( gg_trg_MineWithTimer, function Trig_MineWithTimer_Actions )
endfunction


- выдает кучку ошибок - как я понял он не видит объявления локальной переменной ty - а теперь внимание вопрос - куда её поместить чтобы триггер работал?

Отредактировано ComotozNick, 18.06.2006 в 12:46.
Старый 17.06.2006, 23:58
DioD

offline
Опыт: 45,134
Активность:
Проверь сам в конце концов
Старый 18.06.2006, 03:33
Celebrate

offline
Опыт: 849
Активность:
ComotozNick ясное дело ругается ты же ty не объявляешь.
Все локальные переменные должны объявляться в начале функции.
И нах ты удаляешь тексттаг, когда его даже не создал?!
Старый 18.06.2006, 10:20
ComotozNick
Активность: 666
offline
Опыт: 26,206
Активность:
Celebrate а стойте это я видимо не совсем то дал....

Да я не оттуда скопировал, теперь исправил. (Даже таким образом ругается.) Ошибок выдает 10 - 12 штук - 2-х типов
1) Отсутствует название
2) Отсутствует название переменной

Отредактировано ComotozNick, 18.06.2006 в 12:24.
Старый 18.06.2006, 12:17
Celebrate

offline
Опыт: 849
Активность:
Код:
function Trig_MineWithTimer_Func002A takes nothing returns nothing
local effect e
call SetUnitLifeBJ...

ComotozNick а ty в этой функции не объявлена.
В каждой новой функции - свои локалки :)
Старый 18.06.2006, 12:37
ComotozNick
Активность: 666
offline
Опыт: 26,206
Активность:
ну смотри эффенктом все работает, в с этим нет... так где объявить локалку, чтобы она действовала во всем тригге...? (посмотри код я его немного поправил - сначала я забыл убрать из тригга глобалку...)
Старый 18.06.2006, 12:42
DioD

offline
Опыт: 45,134
Активность:
99% мусора и ничего больше, убири мусор и сразу увидишь в чём дело.
Старый 18.06.2006, 12:49
DioD

offline
Опыт: 45,134
Активность:
Вот именно что я знаю, просто если постоянно говорить готовый результат толку не будет.
Я даже прогу кинул специальную, скачай не пожалеешь.
Старый 18.06.2006, 13:03
ComotozNick
Активность: 666
offline
Опыт: 26,206
Активность:
DioD конечно спасибо (у проги посмотрел лучше интерфейс чем у той с которой я работал - JassEditor_1.1a) - щас попробую прогнать через прогу...
Старый 18.06.2006, 13:08
DioD

offline
Опыт: 45,134
Активность:
Возможности этой проги очень обширны, главное настроить её правильно.
Старый 18.06.2006, 13:24
Celebrate

offline
Опыт: 849
Активность:
Цитата:
так где объявить локалку, чтобы она действовала во всем тригге...?

А так нельзя :)
Можно либо совсем глобалку юзать, либо совсем локалку (только для одной ф-ции).

Проблема решается (в твоём случае) очень просто: нужно юзать не туеву хучу функций а одну. Только сначала нужно весь мусор удалить.
К примеру, вот эта фигня:
Код:
if ( not ( GetUnitStateSwap(UNIT_STATE_LIFE, GetEnumUnit()) == 20.00 ) ) then
        return false
    endif
    return true
заменяется на:
Код:
return GetUnitStateSwap(UNIT_STATE_LIFE, GetEnumUnit()) == 20.00

И так со всеми.

А вообще, у тебя далеко не самый лучший вариант. Лучше сделать зависимость вылазиющего тексттага от UNIT_STATE_LIFE и обойтись без ифов вообще.
Старый 18.06.2006, 15:00
Ответ

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

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

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

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



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