Author Topic: Не срабатывает условие  (Read 3153 times)

0 Members and 2 Guests are viewing this topic.

MacKlaud

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Не срабатывает условие
« on: August 25, 2019, 01:38:55 PM »
Собственно приведу весь скрипт, может поможете его оптимизировать. Он нужен для упрощения создания скринов в игре. И должен прописывать координаты.

Code: [Select]
#name "Скриншот"

$h = hgetpid($_hwnd_self)
HSET($h,0)

$pos_x1 = 0
$pos_y1 = 0
$pos_x2 = 840
$pos_y2 = 0

$width = 840
$height = 610

$win_l = HGET (377, 200)
WNDPOS ($win_l, $pos_x1, $pos_y1)
WNDSIZE ($win_l, $width, $height)

HSET($win_l,1)

$no_line = 0

$file = inputbox("Введите название скриншота", "", 100)

$z = dialogbox("Наведите на левый верхний угол", 1, 100 )
if ($z = 2)
   halt
end_if

$x1 = $_xmouse
$y1 = $_ymouse
$z = dialogbox("Наведите на нижний правый угол", 1, 100 )
$x2 = $_xmouse
$y2 = $_ymouse


sub(screen_1)
   
   $z = dialogbox("Уберите мышку и нажмите ОК", 1, 5000)
   
   MOVE (0,0)
   
   GETSCREEN
   SCREENSHOTFIX ($x1,$y1, $x2,$y2, StrConcat($file, ".bmp"))
   
end_sub


screen_1()

TFREADARR("var.cms", $arr)
print($arr[0])
FOR($a=0, $a < arrsize($arr))
   IF(STRPOS($arr[$a], StrConcat("$",$file,"_x1")) != 0)
      print("Замена")
      INC($a)
      TFDELETE("var.cms", $a)
      TFWRITE("var.cms",StrConcat("$",$file,"_x1 = ",$x1),$a)
      TFDELETE("var.cms", $a+1)
      TFWRITE("var.cms",StrConcat("$",$file,"_y1 = ",$y1),$a+1)
      TFDELETE("var.cms", $a+2)
      TFWRITE("var.cms",StrConcat("$",$file,"_x2 = ",$x2),$a+2)
      TFDELETE("var.cms", $a+3)
      TFWRITE("var.cms",StrConcat("$",$file,"_y2 = ",$y2),$a+3)
      $no_line = 1
      //$a = arrsize($arr)+1
   END_IF
   INC($a)
END_CYC

IF($no_line = 0)
   print("нет замены")
   TFWrite("var.cms",StrConcat("$",$file,"_x1 = ",$x1))
   TFWrite("var.cms",StrConcat("$",$file,"_y1 = ",$y1))
   TFWrite("var.cms",StrConcat("$",$file,"_x2 = ",$x2))
   TFWrite("var.cms",StrConcat("$",$file,"_y2 = ",$y2))
   TFWrite("var.cms","")
END_IF

halt

А проблема главная в этом месте.
Code: [Select]
TFREADARR("var.cms", $arr)
print($arr[0])
FOR($a=0, $a < arrsize($arr))
   IF(STRPOS($arr[$a], StrConcat("$",$file,"_x1")) != 0)
      print("Замена")
      INC($a)
      TFDELETE("var.cms", $a)
      TFWRITE("var.cms",StrConcat("$",$file,"_x1 = ",$x1),$a)
      TFDELETE("var.cms", $a+1)
      TFWRITE("var.cms",StrConcat("$",$file,"_y1 = ",$y1),$a+1)
      TFDELETE("var.cms", $a+2)
      TFWRITE("var.cms",StrConcat("$",$file,"_x2 = ",$x2),$a+2)
      TFDELETE("var.cms", $a+3)
      TFWRITE("var.cms",StrConcat("$",$file,"_y2 = ",$y2),$a+3)
      $no_line = 1
      //$a = arrsize($arr)+1
   END_IF
   INC($a)
END_CYC

Почему то не всегда находит строку в IF и соответственно дублирует координаты.
Для проверки писал имя 1, первый раз не нашел, последующие находил и заменял. При этом дубль уже сделался.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Не срабатывает условие
« Reply #1 on: August 25, 2019, 02:08:43 PM »
Зачем такие извраты?! Просто напиши в "var.cms" чтение всех необходимых параметров из INI файла.
В INI должны быть координаты и имя картинки, все что нужно.
В результате править нужно только этот INI файл.

MacKlaud

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: Не срабатывает условие
« Reply #2 on: August 25, 2019, 02:34:20 PM »
Зачем такие извраты?! Просто напиши в "var.cms" чтение всех необходимых параметров из INI файла.
В INI должны быть координаты и имя картинки, все что нужно.
В результате править нужно только этот INI файл.

С INI еще не разбирался. А var.cms это просто выведеный из основного скрипта набор координат, которые я вводил до этого вручную, чтобы не мешался в основе. А этот скрипт написан для удобства обновления координат. Попробую с INI, где почитать про него?
И все же нет ответа на вопрос, почему IF работает через раз.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Не срабатывает условие
« Reply #3 on: August 25, 2019, 02:46:23 PM »
С INI еще не разбирался. А var.cms это просто выведеный из основного скрипта набор координат, которые я вводил до этого вручную, чтобы не мешался в основе. А этот скрипт написан для удобства обновления координат. Попробую с INI, где почитать про него?
И все же нет ответа на вопрос, почему IF работает через раз

Простое чтение из INI куда проще того что ты нагородил. Об INI как и об всем остальном написано в справке.
Нужно делать и смотреть записи в лог что он читает. Тебе там виднее что не так. Может дело в кодировке.

MacKlaud

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: Не срабатывает условие
« Reply #4 on: August 25, 2019, 03:00:59 PM »
Простое чтение из INI куда проще того что ты нагородил. Об INI как и об всем остальном написано в справке.
Нужно делать и смотреть записи в лог что он читает. Тебе там виднее что не так. Может дело в кодировке.

Можно использовать #include "var.ini"?
Больше 200 параметров выводить по одному не очень.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Не срабатывает условие
« Reply #5 on: August 25, 2019, 04:03:33 PM »
Простое чтение из INI куда проще того что ты нагородил. Об INI как и об всем остальном написано в справке.
Нужно делать и смотреть записи в лог что он читает. Тебе там виднее что не так. Может дело в кодировке.

Можно использовать #include "var.ini"?
Больше 200 параметров выводить по одному не очень.

Конечно нет! INI это внешний файл параметров, он не может быть частью скрипта, у него совершенно другой синтаксис.

 

MacKlaud

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: Не срабатывает условие
« Reply #6 on: August 25, 2019, 04:33:40 PM »
Конечно нет! INI это внешний файл параметров, он не может быть частью скрипта, у него совершенно другой синтаксис.

var.cms имел вид:
$hide_x1 = 515
$hide_y1 = 565
$hide_x2 = 640
$hide_y2 = 585

$present_x1 = 624
$present_y1 = 251
$present_x2 = 675
$present_y2 = 281
........

Скопировал его в var.ini. Проверил замену координат при новом скриншоте(там переделал скрипт для записи INI). И в основном скрипте вписал #include "var.ini". Все читается и координаты работают. Так как я не собираюсь туда кроме координат выносить ничего, то все нормально.
Если будет нужен именно конфиг, то он будет отдельным.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Не срабатывает условие
« Reply #7 on: August 26, 2019, 01:55:35 PM »
Ты сделал простой #include "var.cms" никакого ini здесь нет.
Переименуй чтоб никто не путался.

Так как и то и другое простой текстовый формат, а при импорте  расширения не проверяются ты импортировал часть скрипта, хоть и простого.


MacKlaud

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: Не срабатывает условие
« Reply #8 on: August 26, 2019, 02:15:56 PM »
Ты сделал простой #include "var.cms" никакого ini здесь нет.
Переименуй чтоб никто не путался.

Так как и то и другое простой текстовый формат, а при импорте  расширения не проверяются ты импортировал часть скрипта, хоть и простого.

Я переименовал var.cms в var.ini. Туда и впрямь проще вставлять и менять значения переменных. Но вытаскивать параметры по одному или циклом не стал, а просто попробовал include. Все получилось, о чем и написал.

И спасибо Oraven`у за напоминание про ini. Теперь начал оптимизировать скрипт, вынося многие параметры в конфиг.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Не срабатывает условие
« Reply #9 on: August 26, 2019, 02:33:41 PM »
У тебя нет ini.
ini это определённая структура. Секции и т.д.

У тебя простой код кликера который ты заинклюдил. Расширение может быть любое, хоть txt оно его схавает. Но нормально если будет .cms, потому, что внутренности должны соответствовать синтаксису cms.


MacKlaud

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: Не срабатывает условие
« Reply #10 on: August 26, 2019, 06:24:27 PM »
У тебя нет ini.
ini это определённая структура. Секции и т.д.

У тебя простой код кликера который ты заинклюдил. Расширение может быть любое, хоть txt оно его схавает. Но нормально если будет .cms, потому, что внутренности должны соответствовать синтаксису cms.

Ты читал мой первый пост про скрипт Скриншот? Я пытался работать именно с cms. Там возникла проблема с IF, не всегда мог найти строку и дублировал данные.
Oraven написал про ini. Я почитал по нему и проверил. INIWrite абсолютно заменил цикл с IF и помог мне именно обновлением данных без дублирования. А то что его запихал инклюдом и он работает, я уже понял.
А насчет синтаксиса, там всего одна секция дефолт и все данные это переменные, которых больше 200, из-за чего я их и вынес из основного кода.