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

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

Закрытая тема
 
Anufis

offline
Опыт: 6,290
Активность:
Оптимизирует ли варкрафт проверку условий
Оптимизирует ли варкрафт проверку условий?
К примеру в такой конструкции
Код:
if mode!=1 and mode!=2 and mode!=3 and IsUnitCrit(GetEventDamageSource(),GetTriggerUnit()) then

Если не выполняется первое условие, будет ли варкрафт проверять следующие?
P.S. Просто знаю, что в скриптовом языке Обливиона проверяет.
Старый 17.05.2010, 23:04
Sergarr

offline
Опыт: 4,677
Активность:
Если исходить из статей, находящихся на этом сайте, то нет.
Старый 17.05.2010, 23:08
SRes
1110101000
offline
Опыт: 9,997
Активность:
По сути не должен, т.к. and же, а если один and зафейлился, значит и все зафейлились, но это же скриптовый язык, возможно проверяет, проверь, возьми пару условий, а в одно засунь функцию, которая возвращает boolean и пишет строку на экране.
Как обычно, сделай сам.
Старый 17.05.2010, 23:09
ZeToX2007

offline
Опыт: 7,009
Активность:
Цитата:
Сообщение от Anufis
Если не выполняется первое условие, будет ли варкрафт проверять следующие?


Если 1 не выполняется, другие не будут. 110%

ZeToX2007 добавил:
ну так и поцепочки and'ов, будут проверятся, пока не встретится false
Старый 17.05.2010, 23:47
SRes
1110101000
offline
Опыт: 9,997
Активность:
Цитата:
110%

пруф карту в студию, иначе пустые слова, вар кривой во многих местах, в этом вполне может оказаться таким же.
Старый 17.05.2010, 23:52
agentex

offline
Опыт: 34,834
Активность:
никакого пруфа не надо. тока что проверил, zetox прав.
function test takes nothing returns boolean
call BJDebugMsg("OMG")
return true
endfunction

//...
if true and false and test() then

endif
//...
собсно ниче не выводится, значит условия дальше фэлс не проверяются
Старый 17.05.2010, 23:57
adic3x

offline
Опыт: 108,439
Активность:
Внимание: правильный ответ.
    if (ToD >= bj_TOD_DAWN and ToD < bj_TOD_DUSK) then
        call StartSound(bj_dayAmbientSound)
    endif
endfunction
Это кусок стандартной BJ.
08702BD8 SetAmbientDaySound+00E0 00 05 fa 0e  00000aed    MOV_VAR_REG ToD => #fa {real (5)}
08702BE0 SetAmbientDaySound+00E8 00 00 fa 13  00000000    PUSH #fa
08702BE8 SetAmbientDaySound+00F0 00 05 fb 0e  00000812    MOV_VAR_REG bj_TOD_DAWN => #fb {real (5)}
08702BF0 SetAmbientDaySound+00F8 00 00 fc 14  00000000    POP #fc
08702BF8 SetAmbientDaySound+0100 fb fc fc 1d  00000000    #fc = (#fc >= #fb)
08702C00 SetAmbientDaySound+0108 00 00 fc 2a  000000df    IF NOT(#fc) THEN JUMP SetAmbientDaySound+0x0148
08702C08 SetAmbientDaySound+0110 00 05 fd 0e  00000aed    MOV_VAR_REG ToD => #fd {real (5)}
08702C10 SetAmbientDaySound+0118 00 00 fd 13  00000000    PUSH #fd
08702C18 SetAmbientDaySound+0120 00 05 fe 0e  00000813    MOV_VAR_REG bj_TOD_DUSK => #fe {real (5)}
08702C20 SetAmbientDaySound+0128 00 00 ff 14  00000000    POP #ff
08702C28 SetAmbientDaySound+0130 fe ff ff 1e  00000000    #ff = (#ff < #fe)
08702C30 SetAmbientDaySound+0138 00 00 00 2b  000000e0    JUMP SetAmbientDaySound+0x0158
08702C38 SetAmbientDaySound+0140 00 00 00 28  000000df    STUB_LOOP WEAPON_TYPE_METAL_MEDIUM_SLICE
08702C40 SetAmbientDaySound+0148 00 08 ff 0c  00000000    MOV_VAL_REG 0 => #ff {boolean (8)}
08702C48 SetAmbientDaySound+0150 00 00 00 28  000000e0    STUB_LOOP WEAPON_TYPE_METAL_HEAVY_SLICE
08702C50 SetAmbientDaySound+0158 00 00 ff 2a  000000e1    IF NOT(#ff) THEN JUMP SetAmbientDaySound+0x0188
08702C58 SetAmbientDaySound+0160 00 07 01 0e  0000092a    MOV_VAR_REG bj_dayAmbientSound => #01 {handle (7)}
08702C60 SetAmbientDaySound+0168 00 00 01 13  00000000    PUSH #01
08702C68 SetAmbientDaySound+0170 00 00 00 15  0000073f    CALL_NATIVE StartSound
08702C70 SetAmbientDaySound+0178 00 00 00 2b  000000e2    JUMP SetAmbientDaySound+0x0190
08702C78 SetAmbientDaySound+0180 00 00 00 28  000000e1    STUB_LOOP WEAPON_TYPE_METAL_MEDIUM_BASH
08702C80 SetAmbientDaySound+0188 00 00 00 28  000000e2    STUB_LOOP WEAPON_TYPE_METAL_HEAVY_BASH
08702C88 SetAmbientDaySound+0190 00 00 00 27  00000000    RETURN
08702C90 SetAmbientDaySound+0198 00 00 00 04  00000000    STUB_FUNC_END
Это ее байт код. Все все поняли?)
ADOLF добавил:
Ответ - да.
Старый 18.05.2010, 00:12
alexmipt

offline
Опыт: 17
Активность:
для тех, кто хочет проверить
в карте жмете Esc, выполняется:
function proverka takes nothing returns boolean
	call DisplayTextToPlayer(GetTriggerPlayer(),0.,0.,"proverka")
	return true
endfunction

function func_onEsc takes nothing returns nothing
	call DisplayTextToPlayer(GetTriggerPlayer(),0.,0.,"start1")
	if true and false and proverka() then
	endif
	call DisplayTextToPlayer(GetTriggerPlayer(),0.,0.,"start2")
	if true and proverka() and false then
	endif
endfunction
Получаем на экране:
start1
start2
proverka
ЗЫ не подумайте, что я не понял байт кода)
Прикрепленные файлы
Тип файла: w3m 123.w3m (18.5 Кбайт, 7 просмотров )

Отредактировано ScorpioT1001, 18.05.2010 в 01:08.
Старый 18.05.2010, 00:55
ScorpioT1000
Работаем
offline
Опыт: отключен
ответ получен - да, он работает не по-идиоцки. закрыто
Старый 18.05.2010, 01:10
Закрытая тема

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

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

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

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



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