Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: Hito on March 05, 2019, 09:19:47 PM

Title: Связь кликеров в нескольких виртуальных машинах
Post by: Hito on March 05, 2019, 09:19:47 PM
Ребят, можно как-то с кликера, запущенного с виртуалки (не из расшаренной папки, а именно - расположенного в виртуалке), получить данные, или записать данный в ини-файл, расположенный уже в расшаренной папке...? Это очень нужно, но у меня что-то нифига не получается...
Title: Re: Устал об стену головой биться...
Post by: dramster on March 05, 2019, 09:26:40 PM
А через сетевой диск пробовал?
Title: Re: Устал об стену головой биться...
Post by: Hito on March 05, 2019, 09:35:33 PM
А через сетевой диск пробовал?
Так расшаренная папка на сетевом диске же и находится...
Title: Re: Устал об стену головой биться...
Post by: dramster on March 05, 2019, 09:41:43 PM
ААА, я подумал ты про обычный общий длоступ
(https://i.imgur.com/1A5KE7o.png)

И далее както там через сеть, рабочая группа или както  уже непомню как.

 Через сетевой диск должно работать  ???
Title: Re: Устал об стену головой биться...
Post by: Hito on March 05, 2019, 09:42:16 PM
Просто как бы у меня во всех виртуалках скрипт запускается сейчас с расшаренной папки и все картинки, которые нужны для работы скрипта, естественно находятся в этой же директории, но + еще папка. Вот если с виртуалки запустить этот скрипт, то все нормально работает, но цикл скрипта очень долгий и проц виртуалки он грузит не слабо. Но если всю папку со скриптом и прочим барахлом перенести на виртуалку, то скрипт работает в разы быстрее и проц практически не грузит, но возникает проблема - он не работает с ини-файлами, которые лежат в расшаренной папке, а ини эти переносить на виртуалку нельзя, так как через эти ини скрипты в разных виртуалках "общаются".
Title: Re: Устал об стену головой биться...
Post by: Hito on March 05, 2019, 09:46:52 PM
ААА, я подумал ты про обычный общий длоступ
(https://i.imgur.com/1A5KE7o.png)

И далее както там через сеть, рабочая группа или както  уже непомню как.

 Через сетевой диск должно работать  ???
Я что-то не пойму - о чем ты... У меня сетевой диск на виртуалке выглядит вот так:
(http://imglink.ru/pictures/05-03-19/deea89a6ae68ec09a41aabff7b561214.jpg)
Title: Re: Устал об стену головой биться...
Post by: dramster on March 05, 2019, 09:49:07 PM
но возникает проблема - он не работает с ини-файлами, которые лежат в расшаренной папке, а ини эти переносить на виртуалку нельзя, так как через эти ини скрипты в разных виртуалках "общаются".

Может дело в неправильном написании пути к этим ини файлам?
Title: Re: Устал об стену головой биться...
Post by: dramster on March 05, 2019, 09:50:35 PM
Я что-то не пойму - о чем ты... У меня сетевой диск на виртуалке выглядит вот так:
(http://imglink.ru/pictures/05-03-19/deea89a6ae68ec09a41aabff7b561214.jpg)

Я просто по началу подумал что ты не используешь сетевой диск, а просто разрешаешь доступ в сети к отдельным папкам.

С сетевым диском все должно работать, главно путь к файлу ини правильно прописать. Я конечно не пробовал, но должно работать. Ну и в настройках ВМ не забудь разрешить запись в этих папках, может стоять только чтение.
Title: Re: Устал об стену головой биться...
Post by: Hito on March 05, 2019, 09:55:10 PM
С сетевым диском все должно работать, главно путь к файлу ини правильно прописать. Я конечно не пробовал, но должно работать.
Должно, но не работает... В том-то и проблема... Выдает ошибку интерпритации строки, которая обращается к ини-файлу.
Ну, например - INIWRITE("Z:\variables.ini", "2", "3", "1")
Ну и в настройках ВМ не забудь разрешить запись в этих папках, может стоять только чтение.
Все разрешено.
Title: Re: Устал об стену головой биться...
Post by: dramster on March 05, 2019, 10:09:07 PM
Тут дело и не в сетевом диске, кликерман походу вообще не хочет писать в ини по полному пути к нему.

К примеру попробуй так INIWRITE("C:\variables.ini", "2", "3", "1"), тоже ошибка  :(


Гдето уже было упомянуто на форуме об этом...
Title: Re: Устал об стену головой биться...
Post by: Hito on March 05, 2019, 10:14:00 PM
Тут дело и не в сетевом диске, кликерман походу вообще не хочет писать в ини по полному пути к нему.

К примеру попробуй так INIWRITE("C:\variables.ini", "2", "3", "1"), тоже ошибка  :(
Очень плохо...
Title: Re: Устал об стену головой биться...
Post by: Hito on March 05, 2019, 10:17:07 PM
Я мог бы оставить скрипт в расшаренной папке, а вот картинки вынести на диск "С" виртуалки, но тогда ошибки лезут при IF_PICTURE_IN... :'(
Title: Re: Устал об стену головой биться...
Post by: dramster on March 05, 2019, 10:21:24 PM
Я мог бы оставить скрипт в расшаренной папке, а вот картинки вынести на диск "С" виртуалки, но тогда ошибки лезут при IF_PICTURE_IN... :'(

 ;D ;D ;D И снова ищем костыли. Пишем ДЛЛ для записи в ини на сетевом диске  ;D

А чтение, интересно, работает, если путь полный к ини?
Title: Re: Устал об стену головой биться...
Post by: Hito on March 05, 2019, 10:28:01 PM
;D ;D ;D И снова ищем костыли. Пишем ДЛЛ для записи в ини на сетевом диске  ;D
В попу это костыль... Я его уже намутил, но он запись делает за 30-40мс... При чем бОльшее время уходит на формирование массива, передающего строку в длл...
А чтение, интересно, работает, если путь полный к ини?
Естественно нет.
Title: Re: Устал об стену головой биться...
Post by: Hito on March 05, 2019, 10:38:45 PM
;D ;D ;D И снова ищем костыли. Пишем ДЛЛ для записи в ини на сетевом диске  ;D
В попу это костыль... Я его уже намутил, но он запись делает за 30-40мс... При чем бОльшее время уходит на формирование массива, передающего строку в длл...
Это если только зодавать еще один ини, в который кликер будет вносить данные для длл, Потом запускать эту длл, а длл будет брать данные из того ини и тогда уже вносить их в другой ини, но это уже что-то даже не смешно...
Title: Re: Устал об стену головой биться...
Post by: dramster on March 06, 2019, 12:49:28 AM
Это если только зодавать еще один ини, в который кликер будет вносить данные для длл, Потом запускать эту длл, а длл будет брать данные из того ини и тогда уже вносить их в другой ини, но это уже что-то даже не смешно...

Ну почему же? Мы же научились передавать в длл все что можно и не можно.  Пожалуйста, передаем строку с путем к ини файлу (что не обязательно, можно прописать в длл). , далее идет пару строковых параметров (имя параметра, значение и тд....), как и обсуждали ранее, каждую строку можно разделить каким-нибудь разделителем, и в конце метка конца последнего параметра. Ничего сложного  ;)

Title: Re: Устал об стену головой биться...
Post by: Hito on March 06, 2019, 01:13:39 AM
Это если только зодавать еще один ини, в который кликер будет вносить данные для длл, Потом запускать эту длл, а длл будет брать данные из того ини и тогда уже вносить их в другой ини, но это уже что-то даже не смешно...

Ну почему же? Мы же научились передавать в длл все что можно и не можно.  Пожалуйста, передаем строку с путем к ини файлу (что не обязательно, можно прописать в длл). , далее идет пару строковых параметров (имя параметра, значение и тд....), как и обсуждали ранее, каждую строку можно разделить каким-нибудь разделителем, и в конце метка конца последнего параметра. Ничего сложного  ;)
40мс на всю эту байду уходит. Что не допустимо...
Title: Re: Устал об стену головой биться...
Post by: ya12 on March 06, 2019, 09:37:31 AM
Нафиг ini. Работай с названиями каталогов в шаре. Там возможен затык только если 2 кликера изменяют название одновременно.

Code: (clickermann) [Select]
THREAD(udal_uprav, 0) //удаленное управление
   
   UNDEFINE($arr2)
   getdirlist($arr2, "ini\gnom*")
   for($ia2=0, $ia2< arrsize($arr2))
      if($arr2[$ia2]="gnom_b-0")   //назад
         $_gnom_b = 0
      end_if
     
      if($arr2[$ia2]="gnom_b-1")  //вперед
         $_gnom_b = 1
         $_baf20 = 0
      end_if
     
      if($arr2[$ia2]="gnom_b-8")  //test
         $_gnom_b = 8
         SETTHREAD(beg_8, 1)
      end_if
     
      if($arr2[$ia2]="gnom-9")   //halt
         EXECUTE("nircmd.exe", " execmd ren ini\gnom-9 gnom-0")
         #include "otp_kn.cms"
         halt
      end_if
     
      if($arr2[$ia2] = "gnom-1")   //пати
         EXECUTE("nircmd.exe", " execmd ren ini\gnom-1 gnom-0")
         
         m_MOVE($_patyX,$_patyY)
         LDOWN($_patyX,$_patyY)
         waitms(RND(200,220))
         LUP($_patyX,$_patyY)
         waitms(RND(200,220))
      end_if
   end_cyc
   
   if(($_gnom_b=1)and($_gnom_b2=0))  //вперед по точкам
      $_gnom_b2 = 1
     
      print("--------------------START")
      $start = $_ms
     
      SETTHREAD(boy, 1) // 0 - Пауза, 1 - Старт, 2 - Стоп
      SETTHREAD(vpered, 1)
      SETTHREAD(nazad, 1)
      SETTHREAD(tab_mob, 1) //выборка из памяти таблицы мобов и подтягивание ближайшего из списка
   END_IF
   
   if(($_gnom_b = 0) & ($_gnom_b2 = 1)) //назад по точкам
      $_gnom_b2 = 0
      $_VpN = 0 - 1
      print("<-------------------НАЗАД<-------------------")
      BEEP(800,200)
   end_if
   
   wait(5)
END_THREAD

Пример каталога во вложении.
Title: Re: Устал об стену головой биться...
Post by: Hito on March 06, 2019, 09:49:35 AM
Там возможен затык только если 2 кликера изменяют название одновременно.
Уже не подходит. У меня, как минимум, 15 кликеров одновременно работают в 15-ти виртуалках. В том-то и суть, что эти 15 кликеров должны "общаться" между собой...
Title: Re: Устал об стену головой биться...
Post by: ya12 on March 06, 2019, 09:53:02 AM
Значит нужно 2 каталога на 1 изменяемую запись. В первом флаг записи, во втором значение.
А читать они могут одновременно.
Title: Re: Устал об стену головой биться...
Post by: Hito on March 06, 2019, 09:58:10 AM
Значит нужно 2 каталога на 1 изменяемую запись. В первом флаг записи, во втором значение.
А читать они могут одновременно.
Там все не так просто... Есть записи, которые один кликер делает, а другой их принимает и изменяет.
Title: Re: Устал об стену головой биться...
Post by: Hito on March 06, 2019, 10:07:16 AM
Объясню, как один из примеров... Бывает, что окна игры ловят дисконект и тогда в тех окнах, где персы что-то делают, вылазиет оповещение об этом, но есть одно окно, в котором перс просто стоит и ничего не делает. Не смотря на то, что он ничего не делает, если он не будет находится в онлайне в определенных координатах, то все остальные окна будут грузить процессор в холостую - боты в них ничего не смогут сделать. Так как перс в этом окне ничего не делает, в нем очень часто оповещение о дисконекте не появляется. Визуально перс просто стоит, как стоял и ни по каким параметрам не понять, что на самом деле перс уже не онлайн. В таком случае у меня каждое окно, которое поймало дисконект, делает запись в ини, что оно дисконектнулось. Скрипт того перса, что стоит на месте, ловит эту запись и изменяет опять на ноль, так как он ее уже поймал, а перс начинает юзать банку хп в течении 10 секунд. Если в эти 10 секунд банка юзнется, то перс просто продолжает стоять, а если нет, то перезапуск игры. Вот эта метка о дисконекте одна на всех. То есть, все окна, которые ловят дисконект, в одну и ту же строку в ини делают запись об этом, а главное окно просматривает эту запись и правит.
Title: Re: Устал об стену головой биться...
Post by: Hito on March 06, 2019, 10:14:51 AM
То же самое, если персы погибают. Просто они могут погибать в нескольких случаях, одним из которых является - отсутствие стоящего перса на месте. Если рабочий перс погибает, он делает метку в ини, а стоящий перс проверяет - онлайн он, или нет. Ну, и соответственно правит метку.
Title: Re: Устал об стену головой биться...
Post by: ya12 on March 06, 2019, 10:21:35 AM
Делай метку не 1 на всех, а у каждого. Сделай 1 управляющий центр.

ps В линейке фигня с отсутствием сообщения дисконекта не активного перса тоже есть, но там достаточно открыть рюкзак. Клиент запрашивает сервер, не получает данных и дисконектится.
Title: Re: Устал об стену головой биться...
Post by: Hito on March 06, 2019, 10:40:01 AM
Делай метку не 1 на всех, а у каждого.
Тогда персу, который стоит, за раз не один параметр смотреть, а уже 15 парметров в ини...
ps В линейке фигня с отсутствием сообщения дисконекта не активного перса тоже есть, но там достаточно открыть рюкзак. Клиент запрашивает сервер, не получает данных и дисконектится.
Я не в линейке...))) У меня не достаточно - открыть рюкзак )
Title: Re: Устал об стену головой биться...
Post by: ya12 on March 06, 2019, 10:51:46 AM
У верблюда 2 горба потому, что жизнь борьба.

Должен быть способ определения дисконекта попроще. Типа взять что-нибудь в таргет, написать в чат, узнать текущее время и координаты. В общем сделать что нибудь не обременительное, что потребует ответа от сервера. Ответа нет ловишь дисконект.
Title: Re: Устал об стену головой биться...
Post by: Hito on March 06, 2019, 11:09:16 AM
Типа взять что-нибудь в таргет, написать в чат, узнать текущее время и координаты. В общем сделать что нибудь не обременительное, что потребует ответа от сервера. Ответа нет ловишь дисконект.
Стоять и каждую секунду брать в таргет и отменять таргет, чтобы понять - онлайн бот, или нет... Как-то гниленько... Каждую секунду писать в чат - то же самое... И я напоминаю, что я привел ОДИН из примеров...
Title: Re: Устал об стену головой биться...
Post by: Hito on March 06, 2019, 11:15:05 AM
И кстати... В таргет брать мобов перс может, даже если он на самом деле поймал дисконект. Дисконект проявится, если перс попытается ударить, взятого в таргет, моба, но ему этого делать нельзя. Я же говорил, что когда он стоит в дисконекте, картинка ничем не отличается. Те мобы, которые стояли рядом, так и стоят. И даже персы, которые были в онлайне в других окнах, в этом окне визуально продолжают работать.
Title: Re: Устал об стену головой биться...
Post by: dramster on March 06, 2019, 11:26:42 AM
Вернемся к общению между кликерами между виртуальными машинами.

А может стоит попробовать FWRITEDATA/FREADDATA ? там с полным путем к файлу проблем нет. Когда я тестил его (с большими файлами), работал шустро.
Разделишь этот файл на нужные  секции и пиши-читай. Если нужное значение для записи превышает 255, то можно и два байта задействовать для него.
Title: Re: Связь кликеров в нескольких виртуальных машинах
Post by: Hito on March 06, 2019, 12:55:00 PM
Я все же попробую сегодня перевести скрипт на запись в ини через длл. Вроде удалось снизить время записи до 10-15мс... Скрипт пишет данные для длл в текстовый файл. Длл считывает строки из этого файла и уже пишет в ини.
Title: Re: Связь кликеров в нескольких виртуальных машинах
Post by: Hito on March 06, 2019, 09:44:21 PM
В общем если кому понадобится вдруг...
Code: (clickermann) [Select]
//============================================= Запись в ини
SUB(INI_WRITE, $file, $identifikator, $znachenie, $razdel)
   TFCLEAR("working_ini.txt", 0)
   STRWRITELN ("working_ini.txt", "write")
   STRWRITELN ("working_ini.txt", $file)
   STRWRITELN ("working_ini.txt", $razdel)
   STRWRITELN ("working_ini.txt", $identifikator)
   STRWRITELN ("working_ini.txt", $znachenie)
   CALL ("working_ini.dll")
END_SUB
//============================================= Чтение из ини (ТОЛЬКО числовые значения)
SUB(INI_READ, $file, $identifikator, $razdel)
   TFCLEAR("working_ini.txt", 0)
   STRWRITELN ("working_ini.txt", "read")
   STRWRITELN ("working_ini.txt", $file)
   STRWRITELN ("working_ini.txt", $razdel)
   STRWRITELN ("working_ini.txt", $identifikator)
   CALL ("working_ini.dll")
END_SUB

//============================================= Запись в ини
INI_WRITE("C:\variables.ini", "identifikator", "1", "razdel")
//============================================= Чтение из ини (ТОЛЬКО числовые значения)
INI_READ("C:\variables.ini", "identifikator", "razdel")
LOGWRITE ($_return1)

HALT

dll-ку в папку со скриптом - https://yadi.sk/d/w_pOKkyzD-WHOQ (https://yadi.sk/d/w_pOKkyzD-WHOQ)
Если нужен $_return1 от какой-либо предыдущей процедуры, то сохраняйте его в какую-либо переменную, до использования INI_WRITE или INI_READ!
Title: Re: Связь кликеров в нескольких виртуальных машинах
Post by: Hito on March 06, 2019, 10:03:04 PM
Забыл сказать... Ну, и естественно 32-битную версию кликера.