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

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

Ответ
 
KPOKODIL
В разработке
offline
Опыт: 10,262
Активность:
Ошибка компиляции : Expected Returns
Опять возникла проблемка с jass спелом.
При компиляции выдается ошибка Expected returns для функции DamageTarget

Вот собственно код:
» раскрыть
Код:
function SpellCheck takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('A016', GetAttacker()) > 0 ) ) then
        return false
    endif
    return true
endfunction

function BoolCheck takes nothing returns boolean
local unit u = GetFilterUnit()
    if ( not ( IsUnitAliveBJ(u) == true ) ) then
        u = null
        return false
    endif
    if ( not ( GetOwningPlayer(u) == Player(10) ) ) then
        u = null
        return false
    endif
    if ( not ( IsUnitType(GetEnumUnit(), UNIT_TYPE_GROUND) == true ) ) then
        u = null
        return false
    endif
    u = null
    return true
endfunction

function DamageTarget takes unit at unit tg returns nothing
    if ( BoolCheck() ) then
        call UnitDamageTargetBJ( at, tg , 25.00, ATTACK_TYPE_SIEGE, DAMAGE_TYPE_NORMAL )
    endif
endfunction

function TNTActions takes nothing returns nothing
local unit attacker = GetAttacker()
local unit target = GetAttackedUnitBJ()
local unit tnt = CreateNUnitsAtLoc( 1, 'e002', GetOwningPlayer(attacker), GetUnitLoc(target), bj_UNIT_FACING )
    call SetUnitTimeScalePercent( tnt, 0.00 )
    call TriggerSleepAction( 2 )
    call ForGroupBJ( GetUnitsInRangeOfLocAll(200.00, GetUnitLoc(tnt)), function DamageTarget(attacker,target) )
    call KillUnit( tnt )
endfunction

//===========================================================================
function InitTrig_TNT takes nothing returns nothing
    set gg_trg_TNT = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_TNT, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddCondition( gg_trg_TNT, Condition( function SpellCheck ) )
    call TriggerAddAction( gg_trg_TNT, function TNTActions )
endfunction
Старый 06.02.2012, 14:06
Hares
полупротосс
offline
Опыт: 6,966
Активность:
alpha:
Где ты тут добавил бы запятую?
Вотъ:
((код
function DamageTarget takes unit at, unit tg returns nothing
или
void DamageTarget(unit at, unit tg)
))
Ответ дан, мой вопрос имеет риторический характер alpha

Отредактировано ScorpioT1000, 06.02.2012 в 20:39.
Старый 06.02.2012, 18:44
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Ошибка здесь:
    call ForGroupBJ( GetUnitsInRangeOfLocAll(200.00, GetUnitLoc(tnt)), function DamageTarget(attacker,target) )
При передаче функции в качестве типа code не получится указывать ее аргументы. Кроме того, есть утечки. Здесь лучше будет сделать цикл по FirstOfGroup(), типа такого:
    local unit u = null
    local group g = null
    // ...
    call GroupEnumUnitsInRange(g, ...)
    loop
        set u = FirstOfGroup(g)
        exitwhen u == null
        call GroupRemoveUnit(g, u)
        // . . .
        // все действия и проверки
    endloop
Существует мнение, что логика работы кода, приведенного в первом сообщении, некорректная, и задумку автора можно сделать гораздо проще.

Отредактировано ShadoW DaemoN, 07.02.2012 в 13:55.
Старый 07.02.2012, 13:45
DioD

offline
Опыт: 45,134
Активность:
есть мнение что вложенные циклы и конструкции циклов куда медленнее чем нативки и передача данных из потока в поток стеком куда быстрее и эффективнее во всех отношениях.
Старый 11.02.2012, 06:45
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Оптимизацией нужно заниматься в высоконагруженных местах, а пытаться сэкономить такты, где и так запас - бред. И вообще, если у вас есть мнение, подтвердите его фактами.
Старый 11.02.2012, 13:13
DioD

offline
Опыт: 45,134
Активность:
подтвердите фактами что здесь есть запас, после я опубликую данные стопвоча.
Старый 12.02.2012, 17:53
alpha

offline
Опыт: 7,387
Активность:
смотря что в вашем понимании значит запас
Старый 12.02.2012, 17:57
ScorpioT1000
Работаем
online
Опыт: отключен
Солидарен с DioD - встроенный обход встроенного множества на низкоуровневом языке гораздо эффективнее юзерских циклов.
Я ошибся, видимо =))
Старый 13.02.2012, 12:33
reALien

offline
Опыт: 29,211
Активность:
Цитата:
Сообщение от Faion
Оптимизацией нужно заниматься в высоконагруженных местах, а пытаться сэкономить такты, где и так запас - бред. И вообще, если у вас есть мнение, подтвердите его фактами.

типа верно

Но это же действие при спелле -> может вызываться сколько угодно раз подряд и одновременно -> надо подумать об оптимизации, да
Старый 13.02.2012, 12:46
Ответ

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

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

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

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



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