Пишу самый простой скрипт для линейки- мейн кидает пати бд, тот танцует, ливает из пати и привязывается к мейну.
Столкнулся с неожиданной проблемой - прога не видит разницы между двумя окнами, название у них одинаковые, - прога обращается по очереди то к одному то к другому.
При попытке поменяться название окна, они возвращаются назад при первом обращении на "Lineage II".
Нет ли способа определять окно по HWND как в кликермане?
1. ionich123 - 18 Июля, 2013 - 13:05:24 - перейти к сообщению
2. Kibor - 18 Июля, 2013 - 13:26:17 - перейти к сообщению
win и есть HWND. По каким параметрам определяется win?
Как вариант могу предложить сделать окна в разных размерах, получить эти размеры с помощью CTRL+SHIFT+S и определять win для каждого окна не по одинаковому для них названия и классу а по размерам. К примеру так:
win w1=window ("имя окна игры", "класс окна игры", -1, -1, 800, 600, -1);
win w2=window ("имя окна игры", "класс окна игры", -1, -1, 900, 700, -1);
Это такая защита в игре?
Если имя можно все же сменить хоть и до обращения к игре то можно сделать так:
win w1=window ("имя окна игры", "класс окна игры", -1);
w1.name ="новое имя окна игры";
movewindow(w1);
sleep(1000);
win w2=window ("имя окна игры", "класс окна игры", -1);
И работать с w1 и w2. Они должны указывать на разные окна.
Как вариант могу предложить сделать окна в разных размерах, получить эти размеры с помощью CTRL+SHIFT+S и определять win для каждого окна не по одинаковому для них названия и классу а по размерам. К примеру так:
win w1=window ("имя окна игры", "класс окна игры", -1, -1, 800, 600, -1);
win w2=window ("имя окна игры", "класс окна игры", -1, -1, 900, 700, -1);
ionich123 пишет:
При попытке поменяться название окна, они возвращаются назад при первом обращении на "Lineage II".
Это такая защита в игре?
Если имя можно все же сменить хоть и до обращения к игре то можно сделать так:
win w1=window ("имя окна игры", "класс окна игры", -1);
w1.name ="новое имя окна игры";
movewindow(w1);
sleep(1000);
win w2=window ("имя окна игры", "класс окна игры", -1);
И работать с w1 и w2. Они должны указывать на разные окна.
3. ionich123 - 18 Июля, 2013 - 14:17:29 - перейти к сообщению
Kibor пишет:
win и есть HWND. По каким параметрам определяется win?
Как вариант могу предложить сделать окна в разных размерах, получить эти размеры с помощью CTRL+SHIFT+S и определять win для каждого окна не по одинаковому для них названия и классу а по размерам. К примеру так:
win w1=window ("имя окна игры", "класс окна игры", -1, -1, 800, 600, -1);
win w2=window ("имя окна игры", "класс окна игры", -1, -1, 900, 700, -1);
Как вариант могу предложить сделать окна в разных размерах, получить эти размеры с помощью CTRL+SHIFT+S и определять win для каждого окна не по одинаковому для них названия и классу а по размерам. К примеру так:
win w1=window ("имя окна игры", "класс окна игры", -1, -1, 800, 600, -1);
win w2=window ("имя окна игры", "класс окна игры", -1, -1, 900, 700, -1);
Спасибо за помощь, теперь различаю окна по слегка разным местоположениям и скрипт всегда узнает нужное-)
насчет второго способа- я делал то же самое с помощью sendtext, при его испоьзовании окно меняет название когда к нему обращаешься, при способе w1.name ="новое имя окна игры"; тут же возвращается назад на ""Lineage II".
4. Kibor - 18 Июля, 2013 - 14:46:51 - перейти к сообщению
ionich123 пишет:
я делал то же самое с помощью sendtext, при его испоьзовании окно меняет название когда к нему обращаешься
Так и пусть меняет. Главное чтоб мы успели получить win(hwnd) обеих окон до того как оно поменяет назад.
Проверьте все же такой скрипт:
win w1=window ("имя окна игры", "класс окна игры", -1);
sendtext("новое имя окна игры", w1);
sleep(1000);
//На этот момент обращений к w1 нет и окно должно иметь новое название
win w2=window ("имя окна игры", "класс окна игры", -1);//Пока названия окон разные получаем указатель на второе
Возможно сработает.
5. ionich123 - 18 Июля, 2013 - 15:11:03 - перейти к сообщению
CODE:
win w1=window ("Lineage II", "l2UnrealWWindowsViewportWindow", -1);
sendtext("1", w1);
sleep(1000);
win w2=window ("Lineage II", "l2UnrealWWindowsViewportWindow", -1);
key("waerty",1,1,w1);
key(RETURN,1,1,w1);
key("wa1212erty",1,1,w2);
key(RETURN,1,1,w2);
win w1=window ("Lineage II", "l2UnrealWWindowsViewportWindow", -1);
sendtext("1", w1);
sleep(1000);
win w2=window ("Lineage II", "l2UnrealWWindowsViewportWindow", -1);
key("waerty",1,1,w1);
key(RETURN,1,1,w1);
key("wa1212erty",1,1,w2);
key(RETURN,1,1,w2);
Работает, только приходится эксперементировать с чатом, чтобы понять кто w1 а кто w2.
Почему-то не работает у меня команда messagebox, просто с переменными работает, а при смешении текста и переменных("text"+var) ничего не происходит.
6. Kibor - 18 Июля, 2013 - 15:18:04 - перейти к сообщению
ionich123 пишет:
приходится эксперементировать с чатом
Походу первым w будет окно которое первым запустилось.
ionich123 пишет:
не работает у меня команда messagebox, просто с переменными работает, а при смешении текста и переменных("text"+var)
var имеет какой тип?
Подробнее об операциях с переменными: Математические и строковые операции
string можно соединять только с string или char
7. ionich123 - 18 Июля, 2013 - 15:28:11 - перейти к сообщению
Я немного писал на С#, там есть метод MessageBox.Show(), где можно мешать текст и переменные в любом виде - я думал здесь так же. Насчет var- хотел чтобы выходили сообщения вида ("X= " +X[k-1] "Y= " +Y[k-1])
8. Kibor - 18 Июля, 2013 - 15:32:44 - перейти к сообщению
Надо сделать форматирование чисел в string, но не дошли руки. Пока такой возможности в Кибор нет.
9. ionich123 - 18 Июля, 2013 - 15:55:28 - перейти к сообщению
Вообще хочу бота написать под х1 серв ла2...на нем не работает "next target"
Использовать поиск по картинке, даже по динамической, кажется мне слишком сложным- практически невозможно 100% обезопаситься от того, что не схватишь агров пока бежишь к мобу, или же не схватишь 2-х разом. гораздо проще находить места с ограниченным кол-вом мобов и с помощью команд /target monster_name выпиливать сначала агров, потом остальных...не боясь, что таргет уведет тебя в глухомань куда-нить-)
Использовать поиск по картинке, даже по динамической, кажется мне слишком сложным- практически невозможно 100% обезопаситься от того, что не схватишь агров пока бежишь к мобу, или же не схватишь 2-х разом. гораздо проще находить места с ограниченным кол-вом мобов и с помощью команд /target monster_name выпиливать сначала агров, потом остальных...не боясь, что таргет уведет тебя в глухомань куда-нить-)
10. Kibor - 18 Июля, 2013 - 16:22:17 - перейти к сообщению
Хе хе...
Я вообще то в линейку не играл. Набросал скрипт исходя из того что нащупал из управления когда зашел в игру. Про эту команду не знал даже.
Эта игра просто создана для написания ботов...
Будут вопросы - обращайтесь.
Я вообще то в линейку не играл. Набросал скрипт исходя из того что нащупал из управления когда зашел в игру. Про эту команду не знал даже.
Эта игра просто создана для написания ботов...
Будут вопросы - обращайтесь.