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

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

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

> Без описания
Eddi
Отправлено: 21 Ноября, 2016 - 13:40:10
Post Id



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


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




При запуске пишет "Ошибка идентификации указателя #maskey Возможно, совпадают имена функций и переменных". Не могу найти ошибку. Help, люди! Вот код:
CODE:

//---------------------------------Настройки резервирования------------------------------------

int CountHotBarSlots=36;//может принимать значения, кратные 12 до 36
int CountMapCheckPoints=10;
int CountCritPoints=10;

//-----------------------------Используемые переменные и массивы-------------------------------

int MinPressPeriod=80;

int HotbarIcons[CountHotBarSlots][33][33];
int HotbarIconPos[CountHotBarSlots][2];
int HotbarDefine[CountHotBarSlots+1];
int maskey[CountHotBarSlots][4];
FillMassive2(#maskey[0][0],CountHotBarSlots,4,0);
FillMassive(#HotbarDefine[0],CountHotBarSlots+1,-1);

int MapCheckPoints[CountMapCheckPoints][2];
int MapScreens[CountMapCheckPoints][71][14];
int MapDefine[CountMapCheckPoints+1];
FillMassive(#MapDefine[0],CountMapCheckPoints+1,-1);

int CritPointXY[CountCritPoints][2];
int CritPointAssoc[CountCritPoints];
int CritPointClr[CountCritPoints];
int CritPointDefine[CountCritPoints+1];
FillMassive(#CritPointDefine[0],CountCritPoints+1,-1);

int UserInput;
int MoveNow[71][14];
int MoveOld[71][14];

//Номера кнопок

int TargetKey=32;

sleep(3000);
main:
NewAutoSlot();
sleep(1000);
goto main;


function DefineIconsPosition()//Расчитывает экранные координаты иконок на горячей панели
{int n;
//задаем координаты 1й иконки для первых 12 слотов
if (HotbarDefine[1]>=12)
{HotbarIconPos[1][1]=402;
HotbarIconPos[1][2]=683;
//вычисляем позиции остальных иконок по формуле начиная со 2й
n=2;
loop(11){
HotbarIconPos[n][1]=HotbarIconPos[n][1]+35;
HotbarIconPos[n][2]=683;n++;}}

//задаем координаты 1й иконки для cледующих 12 слотов
if (HotbarDefine[1]>=24)
{HotbarIconPos[1][1]=402;
HotbarIconPos[1][2]=718;
//вычисляем позиции остальных иконок по формуле начиная со 2й
n++;
loop(11){
HotbarIconPos[n][1]=HotbarIconPos[n][1]+35;
HotbarIconPos[n][2]=718;n++;}}

//задаем координаты 1й иконки для cледующих 12 слотов
if (HotbarDefine[1]=36)
{HotbarIconPos[1][1]=402;
HotbarIconPos[1][2]=757;
//вычисляем позиции остальных иконок по формуле начиная со 2й
n++;
loop(11){
HotbarIconPos[n][1]=HotbarIconPos[n][1]+35;
HotbarIconPos[n][2]=757;n++;}}
}

function NewCritPoint()//создает новую критическую точку маны\здоровья
{int AssocNum;
int FreeSlot=FindFreeSlot(#CritPointDefine[0]);//поиск свободного слота и резервирование
if (FreeSlot==0){resettextout(1);textout(1, 20, 0, "Не осталось свободных слотов", 0);}
resettextout(1);textout(1, 20, 0, "Укажите точку на шкале здоровья\маны (обязательно левее числогого значения) ниже которой должен использоваться предмет", 0);
WaitForKey(1);
getmouse(CritPointXY[FreeSlot][1], CritPointXY[FreeSlot][2]);
CritPointClr[FreeSlot]=getmousecolor();
resettextout(1);textout(1, 20, 0, "Кликните левой клавишей по слоту, из которого должен использоваться предмет или скилл", 0);
CritPointAssoc[FreeSlot]=DetermineClickedSlot();}


function NewAutoSlot()//заполняет данные, необходимые для авто-использования предмета\скила
{int SlotNum;
resettextout(1);textout(1, 20, 0, "Кликните левой клавишей по слоту, из которого должен использоваться предмет или скилл", 0);
SlotNum=DetermineClickedSlot();
resettextout(1);textout(1, 20, 0, "Если нужно, дождитесь отката скила, уберите курсор с его иконки и нажмите F10", 0);
WaitForKey(121);
SkreenIcon(SlotNum);
resettextout(1);textout(1, 20, 0, "Нажмите и отпустите клавишу\сочетание клавиш этого скила. НЕ НАЖИМАЙТЕ посторонних кнопок", 0);
DefineShortcut(SlotNum);
HotbarDefine[SlotNum+1]=1;
resettextout(1);textout(1, 20, 0, "Скилл\предмет определен.", 0);}

//--------------------------------Основные функции-------------------------------------------
function IsInMove(int period=100)//по изменению координат на радаре определяет, движется ли персонаж
{screen (#MoveNow[0][0], 909, 176, 980, 190, -1);
DoubleImageMassive(#MoveNow[0][0], #MoveOld[0][0], 71, 14);
sleep(period);
screen (#MoveNow[0][0], 909, 176, 980, 190, -1);
if (findimage(1, #MoveOld[0][0], -1, #x[0], #y[0], 0, 0, 71, 14,#MoveNow[0][0])!=0)
return 1;
return 0;}

function IsFight()//определяет, выбран ли какой-либо моб, обьект или персонаж
{if(getcolor(447,46)==10856101)
return 1;
return 0;}

function MobHP()//определяет, обьем здоровья выделенного обьекта (погрешность +-0.5%)
{int n=0;
int x=464;
int y=50;
int color=getcolor(465,50);
while(scanpixel(x+n, y, color, 100, 100, 60, 60, 60, 60, -1)>0){
n++;}
return n/1.2;}

function TargetSearch()//выбирает ближайшую цель, возвращая 1, если целей не найдено возвращает 0
{mysendkey(TargetKey);
if (IsFight==1){return 1;}
return 0;}

function SkreenIcon(int num)//делает скриншот иконки под номером num
{screen(#HotbarIcons[num][0][0], HotbarIconPos[num][1], HotbarIconPos[num][2], HotbarIconPos[num][1]+33, HotbarIconPos[num][2]+33, -1);}

(Добавление)
Вторая часть (форум брыкается, не хочет в одно сообщение весь код пихать):
CODE:

//-----------------------------Вспомогательные функци-----------------------------------------
function MapInPix(int NumCheckPoint)//переводит игровые координаты в пиксельные координаты
{MapCheckPoints[NumCheckPoint][1]=(MapCheckPoints[NumCheckPoint][1]*2,75)+248;
MapCheckPoints[NumCheckPoint][2]=522-(MapCheckPoints[NumCheckPoint][2]*2,75);}

function mysendkey(int mykey)//отправляет нажатие заданной клавиши
{keydown(mykey);
sleep(rand(MinPressPeriod-10, MinPressPeriod+10));
keyup(mykey);}

function DoubleImageMassive(int #Massive1,int #Massive2,int Xcount, int Ycount)//дублирует изображение из одного массива в другой
{int thisX=0;
int thisY=0;
loop(Xcount){
thisY=0;
loop(Ycount){
Massive2[thisX][thisY]=Massive1[thisX][thisY];
thisY++;}
thisX++;}}

function WaitForKey(int mkey)//ожидает нажатия и отпускания заданной клавиши
{while(getkeystate(mkey)==0)
sleep(1);
while(getkeystate(mkey)>0)
sleep(1);}

function getmousecolor()//получает цвет пиксела под курсором, отодвигая его (иначе он перекрывает заданный пиксел)
{int x;
int y;
int color;
getmouse(x, y);
mousemove(x+1, y+1);
color=getcolor(x, y);
mousemove(x, y);
return color;}

function FillMassive(int #massive, int MassiveLength, int vaule)//заполняет заданный одномерный массив заданным значением, указывая его длинну в первой ячейке
{int n=2;
massive[1]=MassiveLength;
loop(MassiveLength+1){
massive[n]=vaule;
n++;}}

function FillMassive2(int #massive[0][0], int MassiveLength, int MassiveLength2, int vaule)//заполняет заданный двумерный массив заданным значением
{int n1=1;
loop(MassiveLength)
{int n2=1;
loop(MassiveLength2){massive[n1][n2]=vaule;n2++;}
n1++;}}

function FindFreeSlot(int #massive)//ищет свободный слот в массиве, резервирует его и возвращает его номер, если слотов нет, возвращает 0
{int n=1;loop(massive[1]-1){n++;if (massive[n]==-1){massive[n]=1;return n-1;}}return 0;}

function DetermineClickedSlot()//Определяет, по какому слоту хотбара кликнул пользователь и возвращает номер слота
{DCSStart:
int x;
int y;
int n=0;
WaitForKey(1);
getmouse(x, y);
loop(HotbarDefine[1]){n++; if((x>=HotbarIconPos[n][1])&&(y>=HotbarIconPos[n][2]&&(x<=HotbarIconPos[n][1]+33)&&(y<=HotbarIconPos[n][2]+33))return n;}
resettextout(1);textout(1, 20, 0, "Вы кликнули не по иконке, повторите попытку", 0);goto DCSStart;}

function ClearAll_ExpectColor(int #massive, int ExpectedColor, int XSize, YSize)//Удаляет из массива-изображения все цвета, кроме заданного
{int thisX=0;
int thisY=0;
loop(XSize){
thisY=0;
loop(YSize){
if (massive[thisX][thisY]!=ExpectedColor);massive[thisX][thisY]=0
thisY++;}
thisX++;}}

function DefineShortcut(int num)//определяет нажатое пользователем сочетание клавиш (до 4х)
{int n=1;int k=1;
while(getkeystate(maskey[num][1])==0){
while(n<=221){
if (getkeystate(n)==1){maskey[num][k]=n;k++;}
n++;}sleep(1);n=1;}
while((getkeystate(maskey[num][1])==1)||(getkeystate(maskey[num][2])==1)){
while(n<=221){
if ((getkeystate(n)==1)&&(n!=maskey[num][1])&&(n!=maskey[num][2])){maskey[num][k]=n;k++;}
n++;}sleep(1);n=1;}
messagebox(format(maskey[num][1])+" "+format(maskey[num][2])+" "+format(maskey[num][3])+" "+format(maskey[num][4]));
}

function PressShortcut(int num)//нажимает сочетание клавиш из массива maskey под номером num
{keydown(maskey[num][1]);
sleep(10);
keydown(maskey[num][2]);
sleep(10);
keydown(maskey[num][3]);
sleep(10);
keydown(maskey[num][4]);
sleep(rand(MinPressPeriod-10, MinPressPeriod+10));
keyup(maskey[num][4]);
sleep(10);
keyup(maskey[num][4]);
sleep(10);
keyup(maskey[num][2]);
sleep(10);
keyup(maskey[num][1]);
}
 
 Top
Kibor
Отправлено: 21 Ноября, 2016 - 20:31:31
Post Id



Администратор
Эксперт


Просматривает форум
Сообщений всего: 8191
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




int HotbarIcons[CountHotBarSlots][33][33];
int HotbarIconPos[CountHotBarSlots][2];
int HotbarDefine[CountHotBarSlots+1];
int maskey[CountHotBarSlots][4];

это что?
при объявление массива надо задавать четкие числовые размеры.
 
 Top
Eddi
Отправлено: 21 Ноября, 2016 - 21:03:32
Post Id



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


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




Фикус в том, что бы в 3 переменных задать количество элементов в целой куче массивов, причем так, что бы потом не надо было переписывать весь скрипт заново с учетом изменившегося размера массива, если приспичит увеличить его размер. Тем более, что переменные CountБлаБлаБла обьявляются в самом начале скрипта и по мере работы не изменяются. Так-что, в принципе, тут вполне себе четкий размер... Эээ, постойте, так у меня ошибка именно из-за того, что у меня размер массива задан выражениями и переменными?

(Отредактировано автором: 21 Ноября, 2016 - 21:11:04)

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


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




Powered by