Iron
Листовой
offline
Опыт:
23,587Активность: |
Распространенная ошибка в конструкции If-Then-Else
Не знаю куда это кинуть, так что создам тему. Замечаньице действительно мааааалюсенькое. Но незнание его мне уже достаточно много крови попортило. И вот, буквально пару месяцев назад, я понял почему мои триггеры часто работают не так как рассчитываешь (ранше я бывало перелапачивал весь код, искал проблеммы, но в итоге переделывал все заново). Нет, вы не подумайте, я втриггерах секу. Но просто очень странно, что я не видел ни одного упомянания об этом баге близов.
Собственно по делу. Если вы исспользуете If (multiple conditions), то если then или else у вас пустое, то ОБЯЗАТЕЛЬНО необходимо ставить Do nothing в нем, иначе следующий If будет работать не корректно. Вот какое короткое замечаньице, но я не разу не слышал упоминаний о нем. Я сам пупею с того, что так долго об этом не знал. А представьте себе новичков, чуствую добрая часть жалоб на неработоспособность триггеров в карте поступает именно из-за незнания данного бага. Впехните его куды небудь в заметное место. Iron добавил: Блин. Я ошибался. В общем я обнаружил, что вставка Do nothing не дает никакого эффекта. Вот карта. Если запустить ее в таком виде как она щас, то все пашет нормально, а если выключить up и down триггеры и включить триггеры up bagged и down bagged, то работает не корректно. Вот карта, скрины ниже в моем посте на этой странице. Почему это происходит? Смотри ниже для обьяснения эффекта Отредактировано NETRAT, 24.11.2006 в 02:06. |
21.11.2006, 18:30 | #1
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Dark Legioner
offline
Опыт:
817Активность: |
Я конечно не МАСТЕР в триггерах, но о таком уже давно знал. Вот только слово некорректно можно заменить словом непонятно. Например поставил спел, суть в котором была следующая: -когда кастуется спел то шанс вызвать на цели случайное проклятие (минус броня минус урон и т.д) Так вот когда я опробую етот спел (естественно в триггере есть строчка if then else) то оказываеся что тип, который должен кастовать random проклетие попросту не вызывается так как нет в строчке условия then do nothing (то есть если там тыры пыры )) нихрена не делать). |
21.11.2006, 18:48 | #2
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Iron
Листовой
offline
Опыт:
23,587Активность: |
Dark Legioner, да я просто не предпологал что этого близзы не учли.
|
21.11.2006, 19:52 | #3
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
free0n
Бумбарявка
offline
Опыт:
4,736Активность: |
Iron как раз они это учли: Добавили действие "Do nothing". Просто они не могли даже подумать о том что необязательно там вообще что-то писать если ничего делать ненадо(в смысле после "else"). Буржуи - что с них взять. =)))
|
21.11.2006, 21:07 | #4
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Zeratul
Cat Casino
offline
Опыт:
3,638Активность: |
Iron, спс, теперь моя карта работает!
|
21.11.2006, 22:18 | #5
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
DFlyer
<3 MJ
offline
Опыт:
44,079Активность: |
А я видел на некоторых картах вставляли "Do nothing". Думал, нафиг? Я не стал вставлять, код лишним текстом нагружать! А оказывается, вот зачем!... |
21.11.2006, 22:23 | #6
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
NECros88
offline
Опыт:
15,951Активность: |
Я лично всегда ставил! Просто для завершённости, а про баг не знал)) |
21.11.2006, 22:34 | #7
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Dead Jay
Братег Дракончег
offline
Опыт:
8,475Активность: |
Iron я так и думал! Я всегда ставлю Do nothing...Как чуял
|
22.11.2006, 12:11 | #8
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
J
expert
offline
Опыт:
48,747Активность: |
Я вроде никогда не замечал... т.к. если else пустое то я его не пишу:)
А если не ставить никаких действий, как будет некоректно работать следующий if ?? |
22.11.2006, 14:56 | #9
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
NECros88
offline
Опыт:
15,951Активность: |
Да, небудет работать. |
22.11.2006, 16:06 | #10
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Iron
Листовой
offline
Опыт:
23,587Активность: |
Jon, вот тут полная чепуха. Иногда в некоторых триггерах следующий if возвращает, например, вместо true - false. Иногда следующий иф ваще игнорируется и действуют ВСЕ действия, что в then, что в else. А иногда ничего не пашет. Причемэто случается не рандомно, а если в триггере проявился 1-й случай, то всегда будет 1-й, если 2-й, то 2-й.
|
22.11.2006, 23:44 | #11
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
хочешь сказать
if true then
elseif false then else endif убъёт процесс?
так знай что это бред. |
23.11.2006, 13:11 | #12
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
adic3x
offline
Опыт:
107,539Активность: |
Хоть они и Близзы, но Ду Нотинг Видно не зря сделали... Спасибо Iron'у, просветил что к чему)))
|
23.11.2006, 14:33 | #13
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Iron
Листовой
offline
Опыт:
23,587Активность: |
DioD, хошь я специально для тебя сделаю карту с данным багом? Просто поставь
Set "i" = random number "1" to "2" If (multiple conditions) - - Conditions: i == 1 - - Then: (Любые действия 1) - - Else: (пустое) If (multiple conditions) - - Conditions: i == 2 - - Then: (Любые действия 2) - - Else: (пустое) И наслаждайся тем, что срабатывает только 1-й иф (т.е. если выпадет i = 2 , то (действия 2) не произойдут. Так что нуна Do nothing в Else запихать. |
23.11.2006, 16:41 | #14
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
J
expert
offline
Опыт:
48,747Активность: |
Iron стоит признатся что у тя туповатый WE:) так как у мя все работает, и даже летает...
Jon добавил: вот.. посмотри мою карту... я ее делал очень давно.. потому не говори что выглядит будто ее делал нуб... http://xgm.guru/maps.php?id=719 , там куча ифоф, и с пустым "иначе", о все работает гладко... Отредактировано Jon, 24.11.2006 в 04:35. |
23.11.2006, 17:08 | #15
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Iron
Листовой
offline
Опыт:
23,587Активность: |
Jon, ну я же не говорю что это тотальный баг. Возможно с булеанами все нормально пашет. У тебя там тока булеаны.
Проверь как я сказал и увидишь, что будет лагать (и то не всегда). В общем когда сталкнешься с такой проблемой, еще спасибо мне скажешь. Ща покажу пример карты где данный баг будет. Iron добавил: Блин. Я ошибался. Но и ты ошибался тоже. В общем я обнаружил, что вставка Do nothing не дает никакого эффекта. Вот карта. Если запустить ее в таком виде как она щас, то все пашет нормально, а если выключить up и down триггеры и включить триггеры up bagged и down bagged, то работает не корректно. Приложил 2-а скрина с обычным и bagged Up триггером. Посмотрите сами. Разницы в действиях не должно быть никакой, а лагает. DEAD URL DEAD URL Iron добавил: А почему это происходит? |
23.11.2006, 20:03 | #16
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
ArchWorm
Матрица незалежности
offline
Опыт:
4,675Активность: |
Баг действительно есть. Похоже, что надо связывать условия. |
23.11.2006, 20:19 | #17
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Iron
Листовой
offline
Опыт:
23,587Активность: |
ArchWorm12612, зачем констатировать и так явный факт? Ты бы лучше обьяснил почему есть этот баг.
|
23.11.2006, 20:20 | #18
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
ArchWorm
Матрица незалежности
offline
Опыт:
4,675Активность: |
Iron, йа думаю!
o_o _________ В общем так, уважаемый Утюг. В JASS'e написанное тоже самое работает без проблем. Например Код:
выводит строчку исправно два раза. Отсюда вывод, что скорее всего, виноваты паровозные триговые функции-условия. Но это неточно я пока не закончил тестинг. Отредактировано ArchWorm12612, 23.11.2006 в 20:53. |
23.11.2006, 20:25 | #19
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Iron
Листовой
offline
Опыт:
23,587Активность: |
Червяк, ненадо мне доказывать что все нормально, и что это просто руки у меня кривые. Я же тебе показал карту где этот баг есть, и ты его сам видел. Ты мне обьясни почему там такой баг и получишь конфетку.
|
23.11.2006, 20:55 | #20
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|