Author Topic: Ошибка хрен знает где CM4.7SE, Win7x64  (Read 6347 times)

0 Members and 1 Guest are viewing this topic.

HolyKirka

  • Зашел в гости
  • *
  • Posts: 16
    • View Profile
Ошибка хрен знает где CM4.7SE, Win7x64
« on: December 28, 2012, 10:19:26 PM »
(перепост с вконтакта)
А баг с логикой всетаки есть. Давайте всем миром найдем истину. Речь идет о версии 4.7SE.
Есть скрипт:

Code: (clickermann) [Select]
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 то будет все как и должно быть.
« Last Edit: December 29, 2012, 08:43:20 AM by Johnny »

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: Ошибка в логических выражениях CM4.7SE, Win7x64
« Reply #1 on: December 29, 2012, 07:03:12 AM »
очень хорошо что ты упростил скрипт
покрутив его я нашел один момент который кроме как глюком не назвать

дело не в логике (ее никто не трогал)
дело в строке №37

почему то если написано так как сейчас, то скрипт на ней тупо спотыкается (причем абсолютно молча) и все начинается с начала

однако если написать например так
Code: (clickermann) [Select]
LOGWRITE("", $MName," [",$MLevel,"] (",$MFC,")...")то есть тупо выводить первой не переменную с провокационным значением вида "число в строке" а строковую константу (даже пустую, как в примере), то скрипт после этой строки идет дальше и работает уже как надо.

такие вот дела.
inb4: верни как было с $ и %
« Last Edit: December 29, 2012, 07:12:52 AM by Johnny »

HolyKirka

  • Зашел в гости
  • *
  • Posts: 16
    • View Profile
Re: Ошибка в логических выражениях CM4.7SE, Win7x64
« Reply #2 on: December 29, 2012, 08:13:00 AM »
ОК. С этим можно поиграться. Но почему же этот глюк проявляется в 4.7SE и в предыдущей версии не проявляется? Могли  ли изменениния внесенные  в SE еще где-то вылезти такими неприятными последствиями?

С удовольствием помогу чем смогу :)

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: Ошибка хрен знает где CM4.7SE, Win7x64
« Reply #3 on: December 29, 2012, 11:58:32 AM »
потому что предыдущая версия это предыдущая версия. от версии к версии исправляются старые ошибки и появляются новые. исправляется одно, вылезает другое. это программирование, тут частных случаев куда больше чем общих.

а данный баг вообще странный. вроде и ошибки не возникает и такой вот результат.
не знаю как это связано с нашей новой бедой - отделением строк от чисел\выражений.

HolyKirka

  • Зашел в гости
  • *
  • Posts: 16
    • View Profile
Re: Ошибка хрен знает где CM4.7SE, Win7x64
« Reply #4 on: December 29, 2012, 12:11:46 PM »
А вот такие мысли. А как работает собственно LOGWRITE? Если его заменить на PRINT останется ли ошибка? Как LOGWRITE работает с аргументами? У него свой алгоритм или он сначала "вызывает" STRCONCAT? и т.д. и т.п.
Вопросов конечно много, и времени пока нет. Предновогодняя суета.

СлавьЯнИнъ

  • Активный участник
  • ***
  • Posts: 179
    • View Profile
Re: Ошибка хрен знает где CM4.7SE, Win7x64
« Reply #5 on: January 06, 2013, 10:47:56 AM »
Стабильнее всего работает STRWRITELN
Code: [Select]
STRWRITELN ( logYuor.txt,StrConcat(" wascld false? switch to MMP --- ",44) )
добрый смех равняет всех