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

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

Ответ
 
Sansaney
Что??
offline
Опыт: 20,876
Активность:
Ошибки в коде
Мой первый джасс-код, так что просьба не кидать в меня... ничего, плиз.
» Код
function Trig_Farsaken_Mill_Conditions takes nothing returns boolean
    if ( not ( GetUnitTypeId(GetTransportUnitBJ()) == 'u01B' ) ) then
        return false
    endif
    return true
endfunction

function Trig_Farsaken_Mill_Distance takes nothing returns boolean
    return ( DistanceBetweenPoints(GetUnitLoc(mill), GetDestructableLoc(CurrentTree)) <= 700.00 )
endfunction

function Trig_Farsaken_Mill_PreConditions takes nothing returns boolean
    return GetBooleanAnd( Trig_Farsaken_Mill_Distance(), Trig_Farsaken_Mill_Tree_Alive() )
endfunction


function Trig_Farsaken_Mill_FinalCon takes nothing returns boolean
    return GetBooleanAnd( Trig_Farsaken_Mill_PreConditions(), Trig_Farsaken_Mill_FuncTypes() )
endfunction

function Trig_Farsaken_Mill_Tree_Dead takes nothing returns boolean
    if ( not ( IsDestructableDeadBJ(CurrentTree) == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Farsaken_Mill_Tree_Alive takes nothing returns boolean
    if ( not ( IsDestructableAliveBJ(CurrentTree) == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Farsaken_Mill_FuncTypes takes nothing returns boolean
    if ( ( GetDestructableTypeId(GetFilterDestructable()) == 'B007' )) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'ATtr' )) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'B008' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'OTtw' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'JTct' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'YTst' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'YTwt' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'YTct' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'YTft' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'B00C' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'VTlt' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'NTtw' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'DTsh' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'GTsh' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'BTtw' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'JTtw' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'WTst' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'WTtw' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'LTlt' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'FTtw' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'B00H' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'KTtw' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'CTtr' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'ATtc' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'ITtc' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'NTtc' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'BTtc' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'ZTtc' ) ) then
        return true
    endif
    if (( GetDestructableTypeId(GetFilterDestructable()) == 'CTtc' ) ) then
        return true
    endif
    return false
endfunction


function Trig_Farsaken_Mill_Actions takes nothing returns nothing
    local unit mill=GetTransportUnitBJ()
    local destructable CurrentTree= RandomDestructableInRectBJ(RectFromCenterSizeBJ(GetUnitLoc(mill), 1400.00, 1400.00), Condition(function Trig_Farsaken_Mill_FinalCon))
    loop
        exitwhen ( IsUnitDeadBJ(mill) == true )
        set CurrentTree= RandomDestructableInRectBJ(RectFromCenterSizeBJ(GetUnitLoc(mill), 1400.00, 1400.00), Condition(function Trig_Farsaken_Mill_FinalCon))
        call IssueTargetOrder( mill, "attack", RandomDestructableInRectBJ(RectFromCenterSizeBJ(GetUnitLoc(mill), 1400.00, 1400.00), Condition(function Trig_Farsaken_Mill_FuncTypes)) )
        loop
            exitwhen ( Trig_Farsaken_Mill_Tree_Dead() )
            call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 0.1))
        endloop
        call AdjustPlayerStateBJ( 120, GetOwningPlayer(mill), PLAYER_STATE_RESOURCE_LUMBER )
        call CreateTextTagUnitBJ( "TRIGSTR_795", mill, 0, 10, 10.00, 100.00, 10.00, 0 )
        call SetTextTagVelocityBJ( GetLastCreatedTextTag(), 50.00, 90 )
        call SetTextTagPermanentBJ( GetLastCreatedTextTag(), false )
        call SetTextTagLifespanBJ( GetLastCreatedTextTag(), 3.00 )
        call SetTextTagFadepointBJ( GetLastCreatedTextTag(), 2.50 )
    endloop
endfunction

//===========================================================================
function InitTrig_Farsaken_Mill takes nothing returns nothing
    set gg_trg_Farsaken_Mill = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Farsaken_Mill, EVENT_PLAYER_UNIT_LOADED )
    call TriggerAddCondition( gg_trg_Farsaken_Mill, Condition( function Trig_Farsaken_Mill_Conditions ) )
    call TriggerAddAction( gg_trg_Farsaken_Mill, function Trig_Farsaken_Mill_Actions )
endfunction

На рисунке показаны ошибки. Помогите их исправить пожалуйста. Кое где кое что непонятно.
Например, почему в первой ошибке он не видит локалку и тд
Sansaney добавил:
Простите за дабл... прошу писать в эту тему.
Миниатюры
Кликните на картинку для увеличения
Название:  1.JPG
Просмотров: 30
Размер:  64.9 Кбайт  
Старый 01.10.2011, 22:24
Praudmur
в поисках идей...
offline
Опыт: 3,604
Активность:
первая ошибка потому, что локальные переменные действуют ТОЛЬКО в пределах одной функции.
Praudmur добавил:
Запомни, юный кодер: BJ - аки злобный змий, что наполняет тебя пороком. Не поддавайся ему и следуй путём нативок!
Praudmur добавил:
Кстати: что это за интересные функции с условиями? Они нигде не используются, как я заметил!
Ты напиши, что хотел сделать
Старый 01.10.2011, 22:36
Sansaney
Что??
offline
Опыт: 20,876
Активность:
Praudmur:
Запомни, юный кодер: BJ - аки злобный змий, что наполняет тебя пороком. Не поддавайся ему и следуй путём нативок!
Я в курсе. Если напишешь эквиваленты нативок, то буду благодарен.
Praudmur:
Кстати: что это за интересные функции с условиями? Они нигде не используются, как я заметил!
У меня все условия используются. Какие ты имеешь в виду?
Praudmur:
первая ошибка потому, что локальные переменные действуют ТОЛЬКО в пределах одной функции.
Хм... а я всегда думал, что в одном ТРИГГЕРЕ
Praudmur:
Ты напиши, что хотел сделать
Ну в общем если воин входит в здание, то это здание начинает атаковать рандомное дерево в радиусе 700 АоЕ, а когда оно его убьет, то игроку дадут дерево, появится флоатинг текст и если здание еще живо, то триггер начнется заново.
Старый 01.10.2011, 22:46
Praudmur
в поисках идей...
offline
Опыт: 3,604
Активность:
Нативки смотри в JassCraft или NJGP. Там есть список функций и из чего они состоят.
Старый 01.10.2011, 22:50
Sansaney
Что??
offline
Опыт: 20,876
Активность:
Praudmur, а что насчет ошибок скажешь?
Старый 01.10.2011, 22:56
Praudmur
в поисках идей...
offline
Опыт: 3,604
Активность:
локалки всё-таки действуют только в функциях
Старый 01.10.2011, 22:58
Sansaney
Что??
offline
Опыт: 20,876
Активность:
Praudmur, у меня нужно уместить 3 условия AND, но для них нужна локалка, которая используется в других функциях (точнее две: mill и CurrentTree) В принципе это главная проблема.
Старый 01.10.2011, 23:01
Praudmur
в поисках идей...
offline
Опыт: 3,604
Активность:
записывай в хеш-таблицу и загружай нужные тебе локалки из неё.
Старый 01.10.2011, 23:03
Sansaney
Что??
offline
Опыт: 20,876
Активность:
Praudmur:
записывай в хеш-таблицу и загружай нужные тебе локалки из неё.
Пфф... Я и хэш еще не знаю...
Можешь в двух словах сказать, что там надо делать?
Praudmur:
Нативки смотри в JassCraft или NJGP. Там есть список функций и из чего они состоят.
Не найду рандомную декорацию...
Старый 01.10.2011, 23:05
Hanabishi
COOL STATUS
offline
Опыт: отключен
Можешь в двух словах сказать, что там надо делать?
Почитай статейку.
Старый 02.10.2011, 09:39
Амбидекстрия
Silenced by ScorpioT1000
offline
Опыт: 8,237
Активность:
Sansaney:
Можешь в двух словах сказать, что там надо делать?
xgm.ru/forum/showthread.php?t=30742 подробная статья для новичков, если что-то непонятно напиши сюда.
Srezik добавил:
всмысле в ЭТУ тему.
Srezik добавил:
Да, статья ханабиши тоже крута, только разные примеры там.
Старый 02.10.2011, 09:52
Lipen

offline
Опыт: 1,550
Активность:
Можно и без хэша.
» Тык...
globals
    unit Mill
endglobals

function Farsaken_Mill_Conditions takes nothing returns boolean
    return GetUnitTypeId(GetTransportUnit()) == 'u01B'
endfunction

function Farsaken_Mill_Enum takes nothing returns boolean
    local destructable CurrentTree = GetFilterDestructable()
    local real xT = GetDestructableX(CurrentTree)
    local real yT = GetDestructableY(CurrentTree)
    local real xM = GetUnitX(Mill)
    local real yM = GetUnitY(Mill)
    local integer i = GetDestructableTypeId(CurrentTree)
    local boolean b = SquareRoot((xT - xM) * (xT - xM) + (yT - yM) * (yT - yM)) <= 700  and GetDestructableLife(CurrentTree) > 0.405 and (i == 'B007' or i == 'ATtr' or i == 'B008' or i == 'OTtw' or i == 'JTct' or i == 'YTst' or i == 'YTwt' or i == 'YTct' or i == 'YTft' or i == 'B00C' or i == 'VTlt' or i == 'NTtw' or i == 'DTsh' or i == 'GTsh' or i == 'BTtw' or i == 'JTtw' or i == 'WTst' or i == 'LTlt' or i == 'FTtw' or i == 'B00H' or i == 'CTtw' or i == 'CTtr' or i == 'ATtc' or i == 'ITtc' or i == 'NTtc' or i == 'BTtc' or i == 'ZTtc' or i == 'CTtc')
    set CurrentTree = null
    return b
endfunction

function Farsaken_Mill_Actions takes nothing returns nothing
    local unit mill=GetTransportUnit()
    local real x = GetUnitX(mill)
    local real y = GetUnitY(mill)
    local rect R = Rect(x - 700, y - 700, x + 700, y + 700)
    local destructable CurrentTree
    local player p = GetOwningPlayer(mill)
    local texttag tt

    loop
        exitwhen GetWidgetLife(mill) <= 0.405
        set Mill = mill
        set CurrentTree = RandomDestructableInRectBJ(R, Filter(function Farsaken_Mill_Enum))
        loop
            exitwhen GetDestructableLife(CurrentTree) < 0.405
            call IssueTargetOrder(mill, "attack", CurrentTree)
            call TriggerSleepAction(0.1)
        endloop
        call SetPlayerState(p, PLAYER_STATE_RESOURCE_LUMBER, GetPlayerState(p, PLAYER_STATE_RESOURCE_LUMBER) + 120)
        set tt = CreateTextTag()
        call SetTextTagColor(tt, 25, 255, 25, 0)
        call SetTextTagText(tt, "+ |cFF00C850120 lumber|n", 0.023)
        call SetTextTagPermanent(tt, false)
        call SetTextTagVelocity(tt, 0.06, 0.027)
        call SetTextTagFadepoint(tt, 1.)
        call SetTextTagLifespan(tt, 3.)
        call SetTextTagPos(tt, x, y, 0.)
    endloop

    set mill = null
    set CurrentTree = null
    set R = null
    set tt = null
endfunction

function InitTrig_Farsaken_Mill takes nothing returns nothing
    local trigger trg = CreateTrigger()
    local integer i = 0

    loop
    exitwhen i > 11
        call TriggerRegisterPlayerUnitEvent( trg, Player(i), EVENT_PLAYER_UNIT_LOADED, null )
        set i = i + 1
    endloop
    call TriggerAddCondition( trg, Condition( function Farsaken_Mill_Conditions ) )
    call TriggerAddAction( trg, function Farsaken_Mill_Actions )

    set trg = null
endfunction
Старый 02.10.2011, 11:06
Sansaney
Что??
offline
Опыт: 20,876
Активность:
Lipen, а у меня таких зданий много будет, так что глобалка не катит.
Старый 02.10.2011, 11:17
Lipen

offline
Опыт: 1,550
Активность:
Она записывается и тут же используется в другой функции, так что всё нормально.
Старый 02.10.2011, 11:24
Oxygen D
Вернулся
offline
Опыт: 5,180
Активность:
Lipen:
RandomDestructableInRectBJ
Remove please this.
Старый 02.10.2011, 11:48
Lipen

offline
Опыт: 1,550
Активность:
Как-то так?
» Тык
globals
    unit Mill
    destructable Tree
endglobals

function Farsaken_Mill_Conditions takes nothing returns boolean
    return GetUnitTypeId(GetTransportUnit()) == 'u01B'
endfunction

function Farsaken_Mill_Filter takes nothing returns boolean
    local destructable CurrentTree = GetFilterDestructable()
    local real xT = GetDestructableX(CurrentTree)
    local real yT = GetDestructableY(CurrentTree)
    local real xM = GetUnitX(Mill)
    local real yM = GetUnitY(Mill)
    local integer i = GetDestructableTypeId(CurrentTree)
    local boolean b = SquareRoot((xT - xM) * (xT - xM) + (yT - yM) * (yT - yM)) <= 700  and GetDestructableLife(CurrentTree) > 0.405 and (i == 'B007' or i == 'ATtr' or i == 'B008' or i == 'OTtw' or i == 'JTct' or i == 'YTst' or i == 'YTwt' or i == 'YTct' or i == 'YTft' or i == 'B00C' or i == 'VTlt' or i == 'NTtw' or i == 'DTsh' or i == 'GTsh' or i == 'BTtw' or i == 'JTtw' or i == 'WTst' or i == 'LTlt' or i == 'FTtw' or i == 'B00H' or i == 'CTtw' or i == 'CTtr' or i == 'ATtc' or i == 'ITtc' or i == 'NTtc' or i == 'BTtc' or i == 'ZTtc' or i == 'CTtc')
    set CurrentTree = null
    return b
endfunction

function Farsaken_Mill_Enum takes nothing returns nothing
    set Tree = GetEnumDestructable()
endfunction

function Farsaken_Mill_Actions takes nothing returns nothing
    local unit mill=GetTransportUnit()
    local real x = GetUnitX(mill)
    local real y = GetUnitY(mill)
    local rect R = Rect(x - 700, y - 700, x + 700, y + 700)
    local destructable CurrentTree
    local player p = GetOwningPlayer(mill)
    local texttag tt

    loop
        exitwhen GetWidgetLife(mill) <= 0.405
        set Mill = mill
        EnumDestructablesInRect(R, Filter(function Farsaken_Mill_Filter), function Farsaken_Mill_Enum)
        set CurrentTree = Tree
        loop
            exitwhen GetDestructableLife(CurrentTree) < 0.405
            call IssueTargetOrder(mill, "attack", CurrentTree)
            call TriggerSleepAction(0.1)
        endloop
        call SetPlayerState(p, PLAYER_STATE_RESOURCE_LUMBER, GetPlayerState(p, PLAYER_STATE_RESOURCE_LUMBER) + 120)
        set tt = CreateTextTag()
        call SetTextTagColor(tt, 25, 255, 25, 0)
        call SetTextTagText(tt, "+ |cFF00C850120 lumber|n", 0.023)
        call SetTextTagPermanent(tt, false)
        call SetTextTagVelocity(tt, 0.06, 0.027)
        call SetTextTagFadepoint(tt, 1.)
        call SetTextTagLifespan(tt, 3.)
        call SetTextTagPos(tt, x, y, 0.)
    endloop
    set mill = null
    set CurrentTree = null
    set R = null
    set tt = null
endfunction

function InitTrig_Farsaken_Mill takes nothing returns nothing
    local trigger trg = CreateTrigger()
    local integer i = 0
    loop
    exitwhen i > 11
        call TriggerRegisterPlayerUnitEvent( trg, Player(i), EVENT_PLAYER_UNIT_LOADED, null )
        set i = i + 1
    endloop
    call TriggerAddCondition( trg, Condition( function Farsaken_Mill_Conditions ) )
    call TriggerAddAction( trg, function Farsaken_Mill_Actions )
    set trg = null
endfunction
Старый 02.10.2011, 11:57
Sansaney
Что??
offline
Опыт: 20,876
Активность:
Lipen, спс. Сейчас буду разбираться.
Sansaney добавил:
Lipen, ты проверял на джасс хелпере? Там полно ошибок
Старый 02.10.2011, 13:26
Lipen

offline
Опыт: 1,550
Активность:
Проверял, естественно, ни одной ошибки нету.
Старый 02.10.2011, 13:43
Sansaney
Что??
offline
Опыт: 20,876
Активность:
Lipen, у тебя JNPG? У меня в твоем коде находит ошибок 15.
Сейчас скину скрин
Миниатюры
Кликните на картинку для увеличения
Название:  1.JPG
Просмотров: 12
Размер:  145.1 Кбайт  
Старый 02.10.2011, 13:48
Lipen

offline
Опыт: 1,550
Активность:
Да, а у кого-то его ещё нету? Без него же никуда :)
Припиши в этой строке call. Привык не писать его :)
Старый 02.10.2011, 13:50
Ответ

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

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

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

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



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