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

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

Закрытая тема
 
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Jass. Расмотрение\обучение оператора if\then\else
И еще раз доброго всем вечера
Хотел бы разобраться с оператором иф\зен\елс в написании на jass
Просто делая карту столкнулся с вещью, я преобразовал оператор с ГУИ в jass, почему-то создается дополнительная ф-ция, непонял почему, ведь можно было записать, что в этой функции просто сразу под иф =\.
Вот я сделал простой для себя пример: юнит применяет дух воды, если уровень заклинания у кастера >0 то дать сумону этот спел
Код:
function Trig_test_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'AHwe' ) ) then
        return false
    endif
    return true
endfunction

function Trig_test_Func004C takes nothing returns boolean
    if ( not ( GetUnitAbilityLevelSwapped('AHds', udg_Caster) > 0 ) ) then
        return false
    endif
    return true
endfunction

function Trig_test_Actions takes nothing returns nothing
    set udg_Caster = GetSpellAbilityUnit()
    set udg_unit = GetSummoningUnit()
    if ( Trig_test_Func004C() ) then
        call UnitAddAbilityBJ( 'AHds', udg_unit )
    else
    endif
endfunction

1)обьясните почему создается дополнительная функция?
2)как код записать более адекватно?

правильно я ли его преобразовал ф-цию для иф?
Код:
\\ function Trig_test_Func004C takes nothing returns boolean  заменю эт под один иф

function Trig_test_Actions takes nothing returns nothing
set udg_Caster = GetSpellAbilityUnit()
    set udg_unit = GetSummoningUnit()
    if GetUnitAbilityLevelSwapped('AHds', udg_Caster) > 0 then
        call UnitAddAbilityBJ( 'AHds', udg_unit )
    endif
endfunction
Старый 26.01.2010, 00:04
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
function Trig_test_Actions takes nothing returns nothing
    if GetUnitAbilityLevel(GetSpellAbilityUnit(),'AHds') > 0 then
        call UnitAddAbility(GetSummoningUnit(),'AHds')
    endif
endfunction
Вот, вполне оптимально. Ответ на твой вопрос: потому что это ГУИ.
Старый 26.01.2010, 00:07
Doc

offline
Опыт: 63,163
Активность:
  1. Гуи просто уг поэтому много дополнительных функций
2.не используй бж
3.преобразовал правильно
Старый 26.01.2010, 00:07
ManWhoKnows
just another wc3 modmaker
offline
Опыт: 915
Активность:
почему не использовать бж ??
Старый 26.01.2010, 03:29
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
ManWhoKnows, потому что мы все ненавидим близардовцев!
ManWhoKnows, потому что, как правило, бж функции неоптимальны для конкретно взятых случаев и их можно и нужно оптимизировать.
Старый 26.01.2010, 04:47
DioD

offline
Опыт: 45,134
Активность:
как правило БЖ тупо переставляет параметры местами и не несёт никакой смысловой нагрузки.
Старый 26.01.2010, 07:31
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
все ясно спасибо
Старый 26.01.2010, 14:14
adic3x

offline
Опыт: 108,439
Активность:
как правило БЖ тупо переставляет параметры местами и не несёт никакой смысловой нагрузки.
они являются затычками, с другой стороны близы возможно закладывали возможность изменять "движок" игры как раз редактированием бж функций (что бы не трогать карты)
Старый 26.01.2010, 14:24
XOR

offline
Опыт: 38,159
Активность:
Но они сделали это невероятно криво =/ автору советую писать сразу на jass, без конвертаций, и использовать сjass авторства ADOLF 'a)
Старый 26.01.2010, 14:44
DioD

offline
Опыт: 45,134
Активность:
Если бы близы не хотели "не менять карты" то не убивали бы ретурн баг.
Старый 26.01.2010, 16:14
9thNerZul
forum/warcraft3
offline
Опыт: 4,869
Активность:
DioD:
Если бы близы не хотели "не менять карты" то не убивали бы ретурн баг.
Ретурн баг, был убран из за возможности делать с компьютером игрока немыслимые вещи, поэтому его и убрали)
Старый 27.01.2010, 10:19
DioD

offline
Опыт: 45,134
Активность:
ретурн баг имел угрозу только в отношении типа code который прекрасно выпиливается из функций запретом возвращать этот тип.
Старый 27.01.2010, 11:56
XOR

offline
Опыт: 38,159
Активность:
Не немыслимые вещи, а просто байткод.
Старый 27.01.2010, 12:29
DioD

offline
Опыт: 45,134
Активность:
если бы байткод был дозволен на нативном уровне, атата было бы, самоконструирующиеся функции как раз то что позволило бы АИ саморазвиваться обновляя своё ядро по мере необходимости.
Старый 27.01.2010, 12:32
ManWhoKnows
just another wc3 modmaker
offline
Опыт: 915
Активность:
не надо тереть мои сообщения! мне действительно нужно узнать - если я просто уберу bj из названия функии - она будет исполнятся намного быстрей??
Старый 27.01.2010, 17:12
DioD

offline
Опыт: 45,134
Активность:
если ты просто уберёшь бж из названия функции твоя карта не запуститься вообще так как будет выдана синтаксическая ошибка.
Старый 27.01.2010, 17:15
FaB0SS

offline
Опыт: 2,504
Активность:
Нужно заменять BJ-фукции на аналогичные без BJ
Старый 27.01.2010, 19:04
adic3x

offline
Опыт: 108,439
Активность:
ретурн баг имел угрозу только в отношении типа code который прекрасно выпиливается из функций запретом возвращать этот тип
я писал фикс круче, там короче можно выравнивать аддресс функции при образовании code к реальному аддрессу
близы сфейлили, это факт
Старый 27.01.2010, 22:25
MF
Что-то вокруг не так
offline
Опыт: 26,594
Активность:
AlexKARASb:
все ясно спасибо
Как всегда...
После этой фразы считаю тему исчерпанной, закрыто.
Старый 28.01.2010, 04:49
Закрытая тема

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

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

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

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



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