Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Пытливый

Pages: [1] 2
1
Странная штука. Если стартовать кликер через сохраненный скрипт, то скрипт практически не работает. Не помогает и повторная загрузка скрипта. Только запуск кликера с нуля помогает все вернуть в штатный режим. А вот интерфейс кликера при таком запуске меня порадовал, он на мой взгляд функциональнее.

2
Что так делать "стремно" я понимаю, но вот как сделать иначе не могу сообразить, уж очень сильно я в рекурсию "врос". То что код сработал как хотелось бы, а не как ожидаемо - не мой стиль, поэтому я и задал вопрос. :) Как курьез его можно использовать, но ни в коем случае как готовое решение.

3
Странная ситуация, не пойму почему код работает правильно. :)
В общем не получилось с рекурсией, я попробовал сделать это иным способом:
Code: [Select]
ArrPush($AActionName, "Город")
ArrPush($AActionName, "Таверна")
ArrPush($AActionName, 100)
ArrPush($AActionName, 100)
ArrPush($AActionName, "Таверна")
ArrPush($AActionName, "Окорок")
ArrPush($AActionName, 10)
ArrPush($AActionName, 10)

sub(Activate, $ActionName)
EnterToSubActivate:
   print($ActionName)
   $ActionIndex = 0
   $ActionRecognized = 1
   while (($ActionRecognized = 1) & ($ActionIndex < ArrSize($AActionName)/4))
      if ($AActionName[$ActionIndex*4+1] = $ActionName)
         $ActionRecognized = 0
         
         ArrPush($ActivateVar, $ActionName)
         ArrPush($ActivateVar, $ActionIndex)
         ArrPush($ActivateVar, $ActionRecognized)
         $ActionName = $AActionName[$ActionIndex*4]
         Goto(EnterToSubActivate)
ExitFromSubActivate:         
         $ActionRecognized = ArrPop($ActivateVar)
         $ActionIndex = ArrPop($ActivateVar)
         $ActionName = ArrPop($ActivateVar)
         
         Move($AActionName[$ActionIndex*4+2], $AActionName[$ActionIndex*4+3])
         LClick(-1, -1)
      else
         Inc($ActionIndex)
      end_if
   end_cyc
   Goto(ExitFromSubActivate)
end_sub

print("Start")
Activate("Окорок")
print("Finish")
Я не пойму, почему код у меня завершается? 
Инструкция Goto(ExitFromSubActivate) должна в вечный цикл загонять код, но нет, все завершается вполне пристойно. ???
По ошибке внутренней что-ли?

4
Общие вопросы / Re: Рекурсия возможна?
« on: October 08, 2017, 03:41:14 PM »
Quote
Название темы не соответствует содержанию.
Несколько странное утверждение. Мы на форуме по Кликерману и вопросы на этом форуме предполагают именно его использование.
Quote
но зачем пытаться вызывать подпрограмму внутри собственного описания?
Рекурсия подразумевает вызов самой себя при описании. Что-то иное рекурсией не является.
Ну что-же, ответ я получил, хотя и не такой как хотелось бы. Тему думаю можно закрыть.

5
Общие вопросы / Re: Рекурсия возможна?
« on: October 08, 2017, 11:29:37 AM »
Что-то не нашел я в справке ничего о предварительном описании заголовков подпрограмм. Как это выглядит? Примерчик такого описания можно увидеть?

6
Общие вопросы / Рекурсия возможна?
« on: October 07, 2017, 09:26:44 PM »
Не работает такой код. Вроде и стек имитирую, а вот не хочет работать :( Ошибка при вызове функции Pop
Code: [Select]
sub(Recursion, $Var)
 print($Var)
 if ($Var > 0)
ArrPush($AVar, $Var)
Recursion($Var-1)
$Var = ArrPop($AVar)
 end_if
end_sub

Recursion(10)

7
Да вот неудобно мне это очень. Я при старте кликера постоянно меняю значение количества повторов с неограниченного на фиксированное.
И потом, а как собственно из скрипта это значение изменить?

8
Собственно в этом проблема, не смог найти эту опцию в конфигурации. По идее она должна быть в config.ini, но ничего похожего там не нашел.

9
Общие вопросы / Re: Метки в 4.12 работают?
« on: September 16, 2017, 03:20:04 PM »
Я читал эту статью, когда искал решение выхода из цикла, приведенные примеры, как я и написал ранее касаются в первую очередь подпрограмм, вызовы которых помещаются в стек и goto последовательность снятия с вершины стека нарушает. А вот в приведенном мной примере стек не используется, а потому такое прерывание вполне допустимо, хотя и стремно. Сам не люблю goto и использую их только при отсутствии других вариантов.

10
Общие вопросы / Re: Метки в 4.12 работают?
« on: September 16, 2017, 02:18:26 PM »
Выпрыгиваю потому-что надо его прервать по условию. Конструкция while не очень подходит под мою задачу, а стандартного Break не предусмотрено синтаксисом разработчика.
Криминала в прерывании цикла таким способом я не вижу, а вот если бы я метку поставил вне тела подпрограммы, тогда мы получили бы потенциальную проблему.
Но я от goto тоже отказался, в пользу установки счетчика цикла в максимальное значение.

11
Общие вопросы / Re: Метки в 4.12 работают?
« on: September 16, 2017, 12:33:06 PM »
Я уже сам понял, что двоеточие не с той стороны, хотя вроде раз 10 примеры посмотрел. Разные языки, разный синтаксис. Бывает.

12
Общие вопросы / Метки в 4.12 работают?
« on: September 16, 2017, 12:20:03 PM »
Code: [Select]
print("Start")
goto(EndFor)
for($n=0, $n<3)
  print($n)
if ($n=1)
goto(EndFor)
//$n=3
end_if
end_cyc
:EndFor
print("Finish")
Наблюдается полный игнор goto
Возможно конечно что я как-то неправильно с метками работаю. Тогда где я косячу?

13
Ну тут вы правы, я в основном пишу на других языках, подчиняющихся общим стандартизированным правилам работы с переменными. Не могу даже припомнить где еще подобная реализация работы с переменными была... хотя вроде в начальных версиях фортрана, была схожая реализация. Ну да ладно, принял к сведению эту информацию. Проверил на простеньком примере, насладился результатом:
Code: [Select]
sub(Test0)
 for ($i=0, $i<5)
   print("Test0",$i)
 end_cyc
end_sub

sub(Test1)
 for ($i=0, $i<5)
Test0()
   print("Test1",$i)
 end_cyc
end_sub

LogClear()
Test1()

Остался в легком недоумении, а как народ тогда пишет многомодульные скрипты с вложениями? Пересматривать весь код, каждый раз как потребуется ввести новую переменную? 

14
прекращайте уже писать бред на форуме.
Если ваши ФИО БУДУТ ПОЛНОСТЬЮ СОВПАДАТЬ С параметрами вашей матери это по вашему тоже будет полезная фича?
С чего вы сделали вывод, что должно быть, а чего нет?
Совершенно нормально и самоочевидно, для нормальных людей, что название параметра подпрограммы и переменной совпадать не должны.
 Встречались до вас извращенцы, которые подпрограмму поток и точку перехода совершенно одинаково называли, но у них хоть хватало ума не заявлять, что это полезная фича.
Спокойнее и без оскорблений. Я признаю, что я не прав, если вы мне процитируете справку где сказано что ВСЕ переменные в рамках ВСЕГО скрипта должны иметь уникальные имена, включая и имена параметров в подпрограммах. Я такого не нашел. А вот то что есть в справке относительно подпрограмм и их параметрах говорит о ином:
Quote
После выполнения подпрограммы, сценарий продолжится с момента вызова подпрограммы. Локальные переменные подпрограммы (параметры) при этом будут уничтожены.
Заметьте локальные переменные и параметры подпрограммы. Это общепринятое поведение подпрограммы, подчищающей за собой. А в приведенном мной примере ничего нормального нет - это баг.

15
Версия 4.12.001
Собственно вот такой код:
Code: [Select]
sub (SubTest1, $x, $y)
 $x = 1
 $y = 1
end_sub

sub (SubTest2, $x1, $y1)
 $x1 = 1
 $y1 = 1
end_sub

LogClear
$x = 5
$y = 5
print($x, " ", $y) // Результат 0 0
SubTest1($x, $y)
print($x, " ", $y) // Результат 5 5
$x = 5
$y = 5
SubTest2($x, $y)
print($x, " ", $y)
Как видно, совпадение имени внешней переменной с именем параметра подпрограммы приводит к обнулению внешней переменной, чего не должно быть. А вот если бы она не обнулялась, а сохраняла результат вычисления в подпрограмме это была бы очень полезная фича с передачей параметра по ссылке.

Pages: [1] 2