Автокликер Clickermann :: Форум
Основной раздел => Ошибки => Архив => Topic started by: HolyKirka on December 28, 2012, 10:19:26 PM
-
(перепост с вконтакта)
А баг с логикой всетаки есть. Давайте всем миром найдем истину. Речь идет о версии 4.7SE.
Есть скрипт:
start:
$Pic1F = 1
$Pic2F = 1
$MLevelMin = 1
$MLevelMax = 8
IF ($Pic1F = 1)
prepare:
LOGWRITE("Поиск")
$MLevel = 0
$MLev = 0
mhunt:
// Тут функции инициализирующие переменные. На данном этапе пропишем их руками
$MLevel = 5
$MLev = 5
$MNameID = 505
$MName = "505"
$MFC = 0
$MChaos = 0
// ---
IF ($MLev=0)
LOGWRITE("Что-то не так, пробуем еще раз...")
END_IF
IF ($MLev = 10000)
LOGWRITE("Black")
END_IF
IF ($MLev = 20000)
LOGWRITE("Тут никого нет")
GOTO(start)
END_IF
IF ($MNameID = 0)
LOGWRITE("GETSCREEN")
END_IF
IF (($MLevel >0) AND ($MLevel < 11))
LOGWRITE($MName," [",$MLevel,"] (",$MFC,")...")
IF (($MNameID = 603) | ($MNameID = 903) | ($MChaos < 2))
LOGWRITE("Запрещено нападать. Пропускаем.")
GOTO(start)
END_IF
IF (($MLev < $MLevelMin) | ($MLev > $MLevelMax))
IF ($MLevel ! 0)
LOGWRITE("Не удовлетворяет требованиям. Пропускаем")
END_IF
ELSE
IF ($Pic2F = 1)
LOGWRITE("Сражение")
END_IF
END_IF
END_IF
END_IF
В данном виде мы в логе должны получить как минимум:
Охотимся...
505 [5] (0)...
Запрещено нападать. Пропускаем.
Но имеем только:
Охотимся...
505 [5] (0)...
Теперь инициализируем по другому переменные: $MChaos = 2
Тогда при выполнении скрипта должны получить в логе:
Охотимся...
505 [5] (0)...
Сражение
Но имеем только:
Охотимся...
505 [5] (0)...
Можно долго играться. Но логика не работает. Либо я не вижу очевидной ошибки в скрипте, либо в текущей версии кликкера не работает корректно логика.
PS скрипт тут приведенный можно скопировать и запустить и посмотреть на поведение. Результаты логов тут приведены того как оно все работает у меня.
PPS Если приведенный скрипт и описанные действия запускать на предыдущей версии CLICKERMANN то будет все как и должно быть.
-
очень хорошо что ты упростил скрипт
покрутив его я нашел один момент который кроме как глюком не назвать
дело не в логике (ее никто не трогал)
дело в строке №37
почему то если написано так как сейчас, то скрипт на ней тупо спотыкается (причем абсолютно молча) и все начинается с начала
однако если написать например так
LOGWRITE("", $MName," [",$MLevel,"] (",$MFC,")...")
то есть тупо выводить первой не переменную с провокационным значением вида "число в строке" а строковую константу (даже пустую, как в примере), то скрипт после этой строки идет дальше и работает уже как надо.
такие вот дела.
inb4: верни как было с $ и %
-
ОК. С этим можно поиграться. Но почему же этот глюк проявляется в 4.7SE и в предыдущей версии не проявляется? Могли ли изменениния внесенные в SE еще где-то вылезти такими неприятными последствиями?
С удовольствием помогу чем смогу :)
-
потому что предыдущая версия это предыдущая версия. от версии к версии исправляются старые ошибки и появляются новые. исправляется одно, вылезает другое. это программирование, тут частных случаев куда больше чем общих.
а данный баг вообще странный. вроде и ошибки не возникает и такой вот результат.
не знаю как это связано с нашей новой бедой - отделением строк от чисел\выражений.
-
А вот такие мысли. А как работает собственно LOGWRITE? Если его заменить на PRINT останется ли ошибка? Как LOGWRITE работает с аргументами? У него свой алгоритм или он сначала "вызывает" STRCONCAT? и т.д. и т.п.
Вопросов конечно много, и времени пока нет. Предновогодняя суета.
-
Стабильнее всего работает STRWRITELN
STRWRITELN ( logYuor.txt,StrConcat(" wascld false? switch to MMP --- ",44) )