Кибор » Кибор - Интегрированная среда разработки ботов » Готовые скрипты » Бот для Warspear Online

Страниц (13): [1] 2 3 4 5 6 7 8 9 ... » В конец
 

1. Kibor - 31 Марта, 2013 - 11:31:00 - перейти к сообщению
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]);
}
2. ZloiGeni - 17 Июня, 2013 - 07:22:59 - перейти к сообщению
Странно, но вот после уничтожения и после сбор лута стоит задерка в 5 секунд, а я там sleep(5000) не вижу! (в более полном боте)
3. Kibor - 18 Июня, 2013 - 14:28:21 - перейти к сообщению
Странно, видео снято по работе данного скрипта.
4. mechanik - 11 Августа, 2013 - 21:59:01 - перейти к сообщению
доброго времени суток.. помогите, пожалуйста, разобраться со скриптом к warspear.. перс дальнего боя.. после убийства моба поиск "трупа" происходит вокруг точки, где был нанесён первый удар по мобу (но это логично только для мобов, которые бьют на расстоянии или для персов ближнего боя).. остальные же мобы подходят непосредственно к персу.. суть вопроса в следующем, что и где нужно изменить для того чтобы: 1. поиск убитого моба начинался непосредственно около перса; 2. изменить (увеличить) радиус поиска "трупа" (получилось изменить только начальный радиус поиска).. заранее спасибо..
5. Kibor - 11 Августа, 2013 - 23:15:13 - перейти к сообщению
 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]);
}
6. Impulse - 29 Августа, 2013 - 15:44:27 - перейти к сообщению
почему при старте скрипта вылетает окошко с ошибкой: failed to open DIB file....и пусть к скринам мобов Не понял и так все скрины подряд, вроде делал все правильно скрипт готовый, только картинки других мобов поставил...кстати пробовал с теми что в архиве, та же беда, вылетает Растерялся в итоге курсором бегает секунд 5-7 и замирает..в чем может быть проблема ??? помогите плз...
7. Kibor - 30 Августа, 2013 - 14:25:59 - перейти к сообщению
 Impulse пишет:
почему при старте скрипта вылетает окошко с ошибкой: failed to open DIB file....и пусть к скринам мобов

C:\warspear\net.bmp и т.д.
Проверьте где лежат изображения
8. Mycik - 23 Сентября, 2013 - 08:24:35 - перейти к сообщению
Спасибо огромное за скрипт! Хи
9. Impulse - 28 Сентября, 2013 - 11:54:37 - перейти к сообщению
все поставил, картинки залил, бегает курсор типа ищет, на моба не реагирует....пробовал менять картинку меча, думал неправильно пиксели оставил...не помогло Недовольство, огорчение
просто я думал надо только скрипт запустить да картинки поставить...в самом коде что то надо менять ?
10. Kibor - 28 Сентября, 2013 - 12:10:45 - перейти к сообщению
Ничего в скрипте не надо менять. И меч не трогать.
Надо правильно картинки сделать.

Powered by ExBB FM 1.0 Final