Kibor |
Отправлено: 31 Марта, 2013 - 19:31:00
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Warspear Online - многопользовательская мобильная онлайн игра.
Так же в нее можно играть на ПК.
Вышел новый бот для Warspear..
Бот для Warspear..
Нажмите для увеличения
За подробностями и тестом в личку ко мне.
ниже все демо скрипты с открытым исходным кодом..
Полноценный скрипт учебного бота и посмотреть его работу можно на странице:Бот для Варспиар
Ниже приведен учебный упрощенный скрипт.
Данный пример демонстрирует написание бота к Warspear. На видео с помощью антонаций подробно объясняется каждый шаг работы с программой Кибор во время создания этого бота.
Видео демонстрирующее учебное создание бота для игры Warspear Online
За пять минут код бота был написан с нуля, продемонстрирована работа с встроенным графическим редактором Кибор и подготовленны графические материалы и бот был продемонстрирован в работе.
Это учебный пример. Для ясности и уменьшения размера видео логика бота упрощена.
Скрипт бота:
CODE:
win w=window ("Warspear Online", "Warspear", -1);//Указатель на окно игры Warspear Online
int Image_0[16][10];//Масив, в котором хранится изображение искомого моба
loadimage (#Image_0[0][0], "C:\Image_0.bmp");//Загрузка изображения с .bmp файла в память
int PosX_0[1], PosY_0[1];//Переменные, в которые записаны будут координаты X и Y левого верхнего угла найденой картинки моба
n: if (findimage(1, #Image_0[0][0], 255, #PosX_0[0], #PosY_0[0], 0, 0, 780, 520, w)==1) // Функция поиска изображения в окне игры
{
mouse (LEFT, PosX_0[0]+8, PosY_0[0]+5, 1, w);//Если найдено кликнуть по центру картинки, сместив координаты клика по X и Y на половину размера картинки
sleep(1000);// Ждем секунду
}
goto n; // Повторяем поиск моба
Это рабочий бот. Для его запуска надо Скачать программу Кибор и запустить в нем скрипт. Надо добавить один скрин с ником. Описание тут:
Kibor пишет: win w=window ("Warspear Online", "Warspear", -1);//Указатель на окно игры Warspear Online
int Pok_LS=0; //вывордить сообщение о личном сообщение = 1
int Pok_SYMK=0; //вывордить сообщение о сумке полной = 1
int LYT=1; //брать лут = 1
int Storona1[50][50], Storona2[50][50], Storona3[50][50], Storona4[50][50];
int Ryka[12][6], Mech[14][12], Image_net[34][14], net_mesta[32][18], Skil[8][10], Nik[200][50];
int PosX[1], PosY[1];
int rx1, ry1, rx2, ry2, rx3, ry3, rx4, ry4;
int p=200;
int t=150;//увеличить если не определяется курсор над лутом в виде руки
int LS=0;
int mech_kyrs=0;
int jdat;
int kryg_es=1;
int Poisk_Pers=1;//0 - поиск лута начинается от точки атаки, 1 - поиск лута начинается от перса
int KliK_nik_X=30;//Надо подобрать что бы клик был на самом персе под ногами
int KliK_nik_Y=90;//Надо подобрать что бы клик был на самом персе под ногами
int kr;
int kol_kr=2;//Количество кругов поиска лута (расширяемых)
/////////////////////////////////////////////////////////////////////////////////////
activate (w) ;
load_image();
rash_image();
n: prov_tab();
if (getcolor(65, 32, w)!=6248447){sleep(100); prov_tab(); goto n;}//Уровень жизни
if (getcolor(366, 413, w)==3127271 && getcolor(413, 455, w)==2589631){key('1');sleep(500);}//если активен скил . деактиваровать
if (kryg_es==1)
{
kryg_es=0;
if (okryga(1)==1)//просканировать круг на поиск лута или моба
{
if (mech_kyrs==1)boi(0, 0, 0, 0, 0);// если меч. над мобом
goto n;
}
if (okryga(2)==1)//просканировать круг на поиск лута или моба
{
if (mech_kyrs==1)boi(0, 0, 0, 0, 0);// если меч. над мобом
goto n;
}
}
if (findimage(1, #Storona1[0][0], 0, #PosX[0], #PosY[0], 0, 0, 780, 520, w)==1) // Первая сторона
{
boi(PosX[0], PosY[0], rx1, ry1, 1);
goto n;
}
if (findimage(1, #Storona2[0][0], 0, #PosX[0], #PosY[0], 0, 0, 780, 520, w)==1) // Вторая сторона
{
boi(PosX[0], PosY[0], rx2, ry2. 1);
goto n;
}
if (findimage(1, #Storona3[0][0], 0, #PosX[0], #PosY[0], 0, 0, 780, 520, w)==1) // Третья сторона
{
boi(PosX[0], PosY[0], rx3, ry3, 1);
goto n;
}
if (findimage(1, #Storona4[0][0], 0, #PosX[0], #PosY[0], 0, 0, 780, 520, w)==1) // Четвертая сторона
{
boi(PosX[0], PosY[0], rx4, ry4, 1);
goto n ;
}
goto n; // Повторяем поиск моба
///////////////////////////////////////////////////////////////////////////////////////////
function okryga(int n)//просканировать круг на поиск лута или моба
{
int n1;
if (Ryka_es()==1) return 1;
key(UP); sleep(t); if (Ryka_es()==1) return 1;
n1=0; f1: if(n1
n1=0; f2: if(n1
n1=0; f3: if(n1
n1=0; f4: if(n1
n1=0; f5: if(n1
n1=0; f6: if(n1
n1=0; f7: if(n1
n1=0; f8: if(n1
return 0;
}
///////////////////////
function prov_tab()//проверить таблички и закрыть их
{
if (findimage(1, #Image_net[0][0], 0, #PosX[0], #PosY[0], 0, 0, 780, 520, w)==1)mouse (LEFT, PosX[0], PosY[0], 1, w);//Нажать кнопку НЕТ
////////
if (Pok_LS==1)
{
if (LS==0)
{
if (getcolor(750, 441, w)==12580855 && getcolor(755, 441, w)==4151135 && getcolor(764, 446, w)==10481647)//Лич.. сооб.
{
LS=1;
messagebox ("Личное сообщение.");
activate (w) ;
}
}
}
//////
}
///////////////////////
function Ryka_es()//Курсор как рука. над лутом
{
mech_kyrs=0;
if (findimage(1, #Ryka[0][0], 0, #PosX[0], #PosY[0], 0, 0, 780, 520, w)==1)return 1;
if (findimage(1, #Mech[0][0], 0, #PosX[0], #PosY[0], 0, 0, 780, 520, w)==1)
{
mech_kyrs=1;
if (getcolor(65, 32, w)==6248447)return 1;
}
if (findimage(1, #Skil[0][0], 0, #PosX[0], #PosY[0], 0, 0, 780, 520, w)==1)
{
mech_kyrs=1;
if (getcolor(65, 32, w)==6248447)return 1;
}
return 0;
}
///////////////////////
function boi(int px, int py, int rx, int ry, int par)//Старт боя
{
if (par==0)key(RETURN);
if (par==1)mouse (LEFT, px+rx, py+ry, 1, w);//Если найдено кликнуть по центру картинки, сместив координаты клика по X и Y
sleep(p);
u: if (getcolor(528, 146, w)==4147047){key(RETURN);sleep(p);}//Если несколько мобов (табличка)
if (getcolor(366, 413, w)==3127271 && getcolor(413, 455, w)==2589631){key('1');sleep(500);}//если активен скил . деактиваровать
j: if (getcolor(756, 41, w)==15197159 && getcolor(761, 39, w)==16777215 && getcolor(769, 40, w)==15197159){sleep(50);if (getcolor(732, 34, w)!=3616767)key('1'); prov_tab(); goto j;}//Пока моб жив
LS=0;
if (LYT==1)//лут если берется пауза после смерти моба
{
jdat=0;jd: sleep(50);prov_tab();jdat++;if (jdat<30)goto jd;
}
if (getcolor(366, 413, w)==3127271 && getcolor(413, 455, w)==2589631){key('1');sleep(500);}//если активен скил . деактиваровать
if (LYT==1)//лут если берется пауза после смерти моба
{
if (Poisk_Pers==1)//0 - поиск лута начинается от точки атаки, 1 - поиск лута начинается от перса
{
if (findimage(1, #Nik[0][0], 0, #PosX[0], #PosY[0], 0, 25, 780, 520, w)==1)
{
mouse (LEFT, PosX[0]+KliK_nik_X, 25+PosY[0]+KliK_nik_Y, 1, w);//Нажать на перса
sleep(500);
}
}
}
kr=0;
t: if (okryga(kr+1)==1)//1 . скан по кругу
{
if (mech_kyrs==1)// если меч. над мобом
{
mech_kyrs=0;
key(RETURN);
sleep(500);
goto u;
}
kryg_es=0;
if (LYT==1)// если подобрать лут
{
if (mech_kyrs==0)//2// если рука
{
key(RETURN);
jdat=0;
r: if (getcolor(217, 55, w)==11003879 && getcolor(564, 434, w)==4174807)goto d;//если табличка брать лут
sleep(50);
prov_tab();
jdat++;
if (jdat<100)goto r;
else return;
d: kryg_es=1;
sleep(500);
key(RETURN);sleep(500);
if (findimage(1, #net_mesta[0][0], 0, #PosX[0], #PosY[0], 0, 0, 780, 520, w)==1)//если сумка полная
{
if (Pok_SYMK==1)messagebox ("Нет в сумке места.");
activate (w) ;
sleep(500);
prov_tab();
sleep(500);
if (getcolor(27, 491, w)==6806527 && getcolor(132, 494, w)==6806527)mouse (LEFT, 80, 489, 1, w);//Нажать закрыть в меню
}
//key(RETURN);
}//2
}
}//1
kr++;
if (kr
}
///////////////////////
function load_image()
{
loadimage (#Image_net[0][0], "C:\warspear\net.bmp");//Кнопка нет
loadimage (#Ryka[0][0], "C:\warspear\Ryka.bmp");//Рука на луте
loadimage (#net_mesta[0][0], "C:\warspear\net_mesta.bmp");//нет в сумке мест
loadimage (#Mech[0][0], "C:\warspear\Mech.bmp");//Меч (атака)
loadimage (#Skil[0][0], "C:\warspear\Skil.bmp");//Скил (атака)
loadimage (#Nik[0][0], "C:\warspear\Nik.bmp");//Ник
loadimage (#Storona1[0][0], "C:\warspear\Image_0.bmp");//Первая сторона моба
loadimage (#Storona2[0][0], "C:\warspear\Image_1.bmp");//Вторая сторона моба
loadimage (#Storona3[0][0], "C:\warspear\Image_2.bmp");//Третья сторона моба
loadimage (#Storona4[0][0], "C:\warspear\Image_3.bmp");//Четвертая сторона моба
}
///////////////////////
function rash_image()
{
rx1=imagewidth(#Storona1[0][0])/2;
ry1=imageheight(#Storona1[0][0]);
rx2=imagewidth(#Storona2[0][0])/2;
ry2=imageheight(#Storona2[0][0]);
rx3=imagewidth(#Storona3[0][0])/2;
ry3=imageheight(#Storona3[0][0]);
rx4=imagewidth(#Storona4[0][0])/2;
ry4=imageheight(#Storona4[0][0]);
} |
|
|
Kibor |
Отправлено: 12 Августа, 2013 - 07:15:13
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
mechanik пишет: 1. поиск убитого моба начинался непосредственно около перса; 2. изменить (увеличить) радиус поиска "трупа" (получилось изменить только начальный радиус поиска)
Добавил пару строк...
Поиск перса происходит по его нику. Для этого надо с помощью графического редактора Кибор создать еще один рисунок и назвать его Nik.bmp. Рисунок помещается в папку со скриптом.
На рисунке должно быть изображено часть ника перса который у него над головой. При создание рисунка надо следить что бы в него не попал фон карты.
Управление этой функцией происходит через переменные:
int Poisk_Pers=1;//0 - поиск лута начинается от точки атаки, 1 - поиск лута начинается от перса
int KliK_nik_X=30;//Надо подобрать что бы клик был на самом персе под ногами
int KliK_nik_Y=90;//Надо подобрать что бы клик был на самом персе под ногами
Увеличить количество радиус поиска трупика моба можно изменив
int kol_kr=2;//Количество кругов поиска лута (расширяемых)
Вот обновленный скрипт. красным выделено обновление:
Kibor пишет: win w=window ("Warspear Online", "Warspear", -1);//Указатель на окно игры Warspear Online
int Pok_LS=0; //вывордить сообщение о личном сообщение = 1
int Pok_SYMK=0; //вывордить сообщение о сумке полной = 1
int LYT=1; //брать лут = 1
int Storona1[50][50], Storona2[50][50], Storona3[50][50], Storona4[50][50];
int Ryka[12][6], Mech[14][12], Image_net[34][14], net_mesta[32][18], Skil[8][10], Nik[200][50];
int PosX[1], PosY[1];
int rx1, ry1, rx2, ry2, rx3, ry3, rx4, ry4;
int p=200;
int t=150;//увеличить если не определяется курсор над лутом в виде руки
int LS=0;
int mech_kyrs=0;
int jdat;
int kryg_es=1;
int Poisk_Pers=1;//0 - поиск лута начинается от точки атаки, 1 - поиск лута начинается от перса
int KliK_nik_X=30;//Надо подобрать что бы клик был на самом персе под ногами
int KliK_nik_Y=90;//Надо подобрать что бы клик был на самом персе под ногами
int kr;
int kol_kr=2;//Количество кругов поиска лута (расширяемых)
/////////////////////////////////////////////////////////////////////////////////////
activate (w) ;
load_image();
rash_image();
n: prov_tab();
if (getcolor(65, 32, w)!=6248447){sleep(100); prov_tab(); goto n;}//Уровень жизни
if (getcolor(366, 413, w)==3127271 && getcolor(413, 455, w)==2589631){key('1');sleep(500);}//если активен скил . деактиваровать
if (kryg_es==1)
{
kryg_es=0;
if (okryga(1)==1)//просканировать круг на поиск лута или моба
{
if (mech_kyrs==1)boi(0, 0, 0, 0, 0);// если меч. над мобом
goto n;
}
if (okryga(2)==1)//просканировать круг на поиск лута или моба
{
if (mech_kyrs==1)boi(0, 0, 0, 0, 0);// если меч. над мобом
goto n;
}
}
if (findimage(1, #Storona1[0][0], 0, #PosX[0], #PosY[0], 0, 0, 780, 520, w)==1) // Первая сторона
{
boi(PosX[0], PosY[0], rx1, ry1, 1);
goto n;
}
if (findimage(1, #Storona2[0][0], 0, #PosX[0], #PosY[0], 0, 0, 780, 520, w)==1) // Вторая сторона
{
boi(PosX[0], PosY[0], rx2, ry2. 1);
goto n;
}
if (findimage(1, #Storona3[0][0], 0, #PosX[0], #PosY[0], 0, 0, 780, 520, w)==1) // Третья сторона
{
boi(PosX[0], PosY[0], rx3, ry3, 1);
goto n;
}
if (findimage(1, #Storona4[0][0], 0, #PosX[0], #PosY[0], 0, 0, 780, 520, w)==1) // Четвертая сторона
{
boi(PosX[0], PosY[0], rx4, ry4, 1);
goto n ;
}
goto n; // Повторяем поиск моба
///////////////////////////////////////////////////////////////////////////////////////////
function okryga(int n)//просканировать круг на поиск лута или моба
{
int n1;
if (Ryka_es()==1) return 1;
key(UP); sleep(t); if (Ryka_es()==1) return 1;
n1=0; f1: if(n1
n1=0; f2: if(n1
n1=0; f3: if(n1
n1=0; f4: if(n1
n1=0; f5: if(n1
n1=0; f6: if(n1
n1=0; f7: if(n1
n1=0; f8: if(n1
return 0;
}
///////////////////////
function prov_tab()//проверить таблички и закрыть их
{
if (findimage(1, #Image_net[0][0], 0, #PosX[0], #PosY[0], 0, 0, 780, 520, w)==1)mouse (LEFT, PosX[0], PosY[0], 1, w);//Нажать кнопку НЕТ
////////
if (Pok_LS==1)
{
if (LS==0)
{
if (getcolor(750, 441, w)==12580855 && getcolor(755, 441, w)==4151135 && getcolor(764, 446, w)==10481647)//Лич.. сооб.
{
LS=1;
messagebox ("Личное сообщение.");
activate (w) ;
}
}
}
//////
}
///////////////////////
function Ryka_es()//Курсор как рука. над лутом
{
mech_kyrs=0;
if (findimage(1, #Ryka[0][0], 0, #PosX[0], #PosY[0], 0, 0, 780, 520, w)==1)return 1;
if (findimage(1, #Mech[0][0], 0, #PosX[0], #PosY[0], 0, 0, 780, 520, w)==1)
{
mech_kyrs=1;
if (getcolor(65, 32, w)==6248447)return 1;
}
if (findimage(1, #Skil[0][0], 0, #PosX[0], #PosY[0], 0, 0, 780, 520, w)==1)
{
mech_kyrs=1;
if (getcolor(65, 32, w)==6248447)return 1;
}
return 0;
}
///////////////////////
function boi(int px, int py, int rx, int ry, int par)//Старт боя
{
if (par==0)key(RETURN);
if (par==1)mouse (LEFT, px+rx, py+ry, 1, w);//Если найдено кликнуть по центру картинки, сместив координаты клика по X и Y
sleep(p);
u: if (getcolor(528, 146, w)==4147047){key(RETURN);sleep(p);}//Если несколько мобов (табличка)
if (getcolor(366, 413, w)==3127271 && getcolor(413, 455, w)==2589631){key('1');sleep(500);}//если активен скил . деактиваровать
j: if (getcolor(756, 41, w)==15197159 && getcolor(761, 39, w)==16777215 && getcolor(769, 40, w)==15197159){sleep(50);if (getcolor(732, 34, w)!=3616767)key('1'); prov_tab(); goto j;}//Пока моб жив
LS=0;
if (LYT==1)//лут если берется пауза после смерти моба
{
jdat=0;jd: sleep(50);prov_tab();jdat++;if (jdat<30)goto jd;
}
if (getcolor(366, 413, w)==3127271 && getcolor(413, 455, w)==2589631){key('1');sleep(500);}//если активен скил . деактиваровать
if (LYT==1)//лут если берется пауза после смерти моба
{
if (Poisk_Pers==1)//0 - поиск лута начинается от точки атаки, 1 - поиск лута начинается от перса
{
if (findimage(1, #Nik[0][0], 0, #PosX[0], #PosY[0], 0, 25, 780, 520, w)==1)
{
mouse (LEFT, PosX[0]+KliK_nik_X, 25+PosY[0]+KliK_nik_Y, 1, w);//Нажать на перса
sleep(500);
}
}
}
kr=0;
t: if (okryga(kr+1)==1)//1 . скан по кругу
{
if (mech_kyrs==1)// если меч. над мобом
{
mech_kyrs=0;
key(RETURN);
sleep(500);
goto u;
}
kryg_es=0;
if (LYT==1)// если подобрать лут
{
if (mech_kyrs==0)//2// если рука
{
key(RETURN);
jdat=0;
r: if (getcolor(217, 55, w)==11003879 && getcolor(564, 434, w)==4174807)goto d;//если табличка брать лут
sleep(50);
prov_tab();
jdat++;
if (jdat<100)goto r;
else return;
d: kryg_es=1;
sleep(500);
key(RETURN);sleep(500);
if (findimage(1, #net_mesta[0][0], 0, #PosX[0], #PosY[0], 0, 0, 780, 520, w)==1)//если сумка полная
{
if (Pok_SYMK==1)messagebox ("Нет в сумке места.");
activate (w) ;
sleep(500);
prov_tab();
sleep(500);
if (getcolor(27, 491, w)==6806527 && getcolor(132, 494, w)==6806527)mouse (LEFT, 80, 489, 1, w);//Нажать закрыть в меню
}
//key(RETURN);
}//2
}
}//1
kr++;
if (kr
}
///////////////////////
function load_image()
{
loadimage (#Image_net[0][0], "C:\warspear\net.bmp");//Кнопка нет
loadimage (#Ryka[0][0], "C:\warspear\Ryka.bmp");//Рука на луте
loadimage (#net_mesta[0][0], "C:\warspear\net_mesta.bmp");//нет в сумке мест
loadimage (#Mech[0][0], "C:\warspear\Mech.bmp");//Меч (атака)
loadimage (#Skil[0][0], "C:\warspear\Skil.bmp");//Скил (атака)
loadimage (#Nik[0][0], "C:\warspear\Nik.bmp");//Ник
loadimage (#Storona1[0][0], "C:\warspear\Image_0.bmp");//Первая сторона моба
loadimage (#Storona2[0][0], "C:\warspear\Image_1.bmp");//Вторая сторона моба
loadimage (#Storona3[0][0], "C:\warspear\Image_2.bmp");//Третья сторона моба
loadimage (#Storona4[0][0], "C:\warspear\Image_3.bmp");//Четвертая сторона моба
}
///////////////////////
function rash_image()
{
rx1=imagewidth(#Storona1[0][0])/2;
ry1=imageheight(#Storona1[0][0]);
rx2=imagewidth(#Storona2[0][0])/2;
ry2=imageheight(#Storona2[0][0]);
rx3=imagewidth(#Storona3[0][0])/2;
ry3=imageheight(#Storona3[0][0]);
rx4=imagewidth(#Storona4[0][0])/2;
ry4=imageheight(#Storona4[0][0]);
} |
|
|
|