Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (2): [1] 2 »   

> Описание: Скрипт запускается и сразу останавливается, если в коде больше 10 функций
Bomjara
Отправлено: 30 Января, 2022 - 14:55:54
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2022  
Репутация: 0




Взял максимальную версию на 1 день (в основном, для использования больше 10 функций). Скрипт начал вылетать сразу же после запуска. Опытным путём установил, что это из-за количества функций. Баг или фича? Курю
 
 Top
Zireael
Отправлено: 30 Января, 2022 - 15:22:00
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
это из-за количества функций

Нет. Количество функций не ограничено.
Если вылетает значит где-то в вашем коде ошибка.
Включите отладку, галка под меню. В окне отладки последней будет строка, на которой произошёл вылет.
 
 Top
Bomjara
Отправлено: 30 Января, 2022 - 15:29:28
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2022  
Репутация: 0




 Zireael пишет:
 Цитата:
это из-за количества функций

Нет. Количество функций не ограничено.
Если вылетает значит где-то в вашем коде ошибка.
Включите отладку, галка под меню. В окне отладки последней будет строка, на которой произошёл вылет.


Отладка не поможет, увы. Вылет происходит сразу же после запуска и отладка ничего не захватывает. Вывод о том, что именно из-за кол-ва функций ошибка, сделал потому что, если удалить несколько функций (так, что-бы общее кол-во не превышало 10), то всё ок.
 
 Top
Zireael
Отправлено: 30 Января, 2022 - 15:37:51
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017  
Репутация: 585




Тогда нужен весь код, который не запускается.
 
 Top
Bomjara
Отправлено: 30 Января, 2022 - 15:59:18
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2022  
Репутация: 0




 Zireael пишет:
Тогда нужен весь код, который не запускается.


CODE:
//Константы изображений
#define ARENA 0
#define FIGHT 1
#define ARSENAL 2
#define MENU 3
#define LEVELUP 4
#define CLOSE 5
#define BALLS 6
#define DISTRIBUTEBALLS 7
#define NUMBER 8
#define SIZE 10
//######


//Константы клавиш
#define SPACE 32
//######


//Загрузка изображений
string root = "D:\Desktop\Kibor\project\";
string nameImages[NUMBER] = {"arena", "fight", "arsenal", "menu", "levelUp", "close", "balls", "distributeBalls"};
int images[NUMBER][SIZE][SIZE];
for (int i = 0; i < NUMBER; i++) loadimage(#images[i][0][0], root + nameImages[i] + ".bmp");
//######


function centerImage(int #position) //Получение центра изображения
{
for (int i = 0; i < 2; i++) position[i] = (2 * position[i] + SIZE) / 2;
}


function shortFindImage(int image, int #position) //Функция findimage, но короче и удобней
{
return findimage(1, #images[image][0][0], -1, #position[0], #position[1], 0, 0, wind.widthclient, wind.heightclient, wind);
}


function dynamicCheck(int image, int #position, int numberCheck, int delayCheck) //Проверка того, не двигается ли изображение
{
int oldPosition[2];
loop (numberCheck)
{
for (int i = 0; i < 2; i++) oldPosition[i] = position[i];
sleep(delayCheck);
shortFindImage(image, #position[0]);
if (oldPosition[0] == position[0] && oldPosition[1] == position[1]) return 1;
}
return 0;
}


function findImage(int image, int #position, int numberTries, int delayTries) //Поиск изображения
{
loop (numberTries)
{
if (shortFindImage(image, #position[0])) return 1;
sleep(delayTries);
}
return 0;
}


function clickImage(int image, int numberTries, int delayTries, int numberCheck, int delayCheck) //Вспомагательная функция. Поиск и нажатие на картинку
{
int position[2];
if (findImage(image, #position[0], numberTries, delayTries) == 0 ||
(numberCheck > 0 && dynamicCheck(image, #position[0], numberCheck, delayCheck) == 0)) return 0;
centerImage(#position[0]);
sendmouse(LEFT, position[0], position[1], wind);
return 1;
}


function checkImage(int image, int numberTries, int delayTries) //Вспомагательная функция. Проверка того, появилось ли изображение на экране.
{
int position[2];
return findImage(image, #position[0], numberTries, delayTries);
}


function sendKeyString(string _key, int number, int delay) //Нажатие клавиши с перерывом несколько раз (для клавиш, заданных строкой)
{
loop (number)
{
sendkey(_key, wind);
sleep(delay);
}
}


function sendKeyInt(int _key, int number, int delay) //Нажатие клавиши с перерывом несколько раз (для клавиш, заданных числом)
{
loop (number)
{
sendkey(_key, wind);
sleep(delay);
}
}


function a1() { return 0; }
function a2() { return 0; }
function a3() { return 0; }


//Скрипт
loop()
{
if (getkeystate(67)) break;
if (getkeystate(66)) close();
}

win wind = getwindow();
loop (1)
{
clickImage(ARENA, 50, 100, 0, 0);
clickImage(FIGHT, 50, 100, 50, 100);
checkImage(ARSENAL, 50, 100, 0, 0);
sendKeyString("c1", 1, 500);
sendKeyInt(SPACE, 1, 1500);
sendKeyString("z", 1, 5000);
while (clickImage(MENU, 1, 0, 0, 0) == 0) sendKeyString("9", 1, 50);
}
//######


Функции a1-a3 добавлены для примера. В таком виде не работает (11 функций в общем). Но если закомментить любую функцию, к примеру a3, то всё работает (10 функций в общем).
 
 Top
Zireael
Отправлено: 30 Января, 2022 - 16:12:25
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
string nameImages[NUMBER] = {"arena", "fight", "arsenal", "menu", "levelUp", "close", "balls", "distributeBalls"};

В кибор такое недопускается.

Либо указывайте число.
CODE:
string nameImages[8] = {"arena", "fight", "arsenal", "menu", "levelUp", "close", "balls", "distributeBalls"};

Либо используйте динамический массив, но инициализировать придётся каждый элемент отдельно.
CODE:
#define NUMBER 8
new string nameImages[NUMBER];
nameImages[0] = "arena";
nameImages[1] = "fight";

(Отредактировано автором: 30 Января, 2022 - 16:17:19)

 
 Top
Bomjara
Отправлено: 30 Января, 2022 - 16:56:56
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2022  
Репутация: 0




 Zireael пишет:
 Цитата:
string nameImages[NUMBER] = {"arena", "fight", "arsenal", "menu", "levelUp", "close", "balls", "distributeBalls"};

В кибор такое недопускается.

Либо указывайте число.
CODE:
string nameImages[8] = {"arena", "fight", "arsenal", "menu", "levelUp", "close", "balls", "distributeBalls"};

Либо используйте динамический массив, но инициализировать придётся каждый элемент отдельно.
CODE:
#define NUMBER 8
new string nameImages[NUMBER];
nameImages[0] = "arena";
nameImages[1] = "fight";


Нет, ты ошибаешься. #define NUMBER 8 - это директива препроцессора, которая заменяет в коде все места, где встречается NUMBER на число 8 до трансляции программы. То есть, NUMBER - это не переменная.
 
 Top
Dantes3000
Отправлено: 30 Января, 2022 - 17:09:49
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1489
Дата рег-ции: Июнь 2016  
Репутация: 58




Bomjara , это константа
 
 Top
Zireael
Отправлено: 30 Января, 2022 - 17:14:00
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
Нет, ты ошибаешься. #define NUMBER 8 - это директива препроцессора, которая заменяет в коде все места, где встречается NUMBER на число 8 до трансляции программы.

Замените:
 Цитата:
string root = "D:\Desktop\Kibor\project\";
string nameImages[NUMBER] = {"arena", "fight", "arsenal", "menu", "levelUp", "close", "balls", "distributeBalls"};
int images[NUMBER][SIZE][SIZE];
for (int i = 0; i < NUMBER; i++) loadimage(#images[i][0][0], root + nameImages[i] + ".bmp" );

На:
CODE:
string root = "D:\Desktop\Kibor\project\";
string nameImages[8] = {"arena", "fight", "arsenal", "menu", "levelUp", "close", "balls", "distributeBalls"};
int images[8][10][10];
for (int i = 0; i < 8; i++) loadimage(#images[i][0][0], root + nameImages[i] + ".bmp");

и код запустится.
 
 Top
Bomjara
Отправлено: 30 Января, 2022 - 17:17:17
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 6
Дата рег-ции: Янв. 2022  
Репутация: 0




 Zireael пишет:
 Цитата:
Нет, ты ошибаешься. #define NUMBER 8 - это директива препроцессора, которая заменяет в коде все места, где встречается NUMBER на число 8 до трансляции программы.

Замените:
 Цитата:
string root = "D:\Desktop\Kibor\project\";
string nameImages[NUMBER] = {"arena", "fight", "arsenal", "menu", "levelUp", "close", "balls", "distributeBalls"};
int images[NUMBER][SIZE][SIZE];
for (int i = 0; i < NUMBER; i++) loadimage(#images[i][0][0], root + nameImages[i] + ".bmp" );

На:
CODE:
string root = "D:\Desktop\Kibor\project\";
string nameImages[8] = {"arena", "fight", "arsenal", "menu", "levelUp", "close", "balls", "distributeBalls"};
int images[8][10][10];
for (int i = 0; i < 8; i++) loadimage(#images[i][0][0], root + nameImages[i] + ".bmp");

и код запустится.

Вынужден тебя огорчить...
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Отчет о ошибках »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by