Кибор » Кибор - Интегрированная среда разработки ботов » Отчет о ошибках » Вылет скрипта

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

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

Нет. Количество функций не ограничено.
Если вылетает значит где-то в вашем коде ошибка.
Включите отладку, галка под меню. В окне отладки последней будет строка, на которой произошёл вылет.
3. Bomjara - 30 Января, 2022 - 07:29:28 - перейти к сообщению
 Zireael пишет:
 Цитата:
это из-за количества функций

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


Отладка не поможет, увы. Вылет происходит сразу же после запуска и отладка ничего не захватывает. Вывод о том, что именно из-за кол-ва функций ошибка, сделал потому что, если удалить несколько функций (так, что-бы общее кол-во не превышало 10), то всё ок.
4. Zireael - 30 Января, 2022 - 07:37:51 - перейти к сообщению
Тогда нужен весь код, который не запускается.
5. Bomjara - 30 Января, 2022 - 07:59:18 - перейти к сообщению
 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 функций в общем).
6. Zireael - 30 Января, 2022 - 08:12:25 - перейти к сообщению
 Цитата:
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";
7. Bomjara - 30 Января, 2022 - 08:56:56 - перейти к сообщению
 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 - это не переменная.
8. Dantes3000 - 30 Января, 2022 - 09:09:49 - перейти к сообщению
Bomjara , это константа
9. Zireael - 30 Января, 2022 - 09:14:00 - перейти к сообщению
 Цитата:
Нет, ты ошибаешься. #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");

и код запустится.
10. Bomjara - 30 Января, 2022 - 09:17:17 - перейти к сообщению
 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");

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

Вынужден тебя огорчить...

Powered by ExBB FM 1.0 Final