007wan |
Отправлено: 19 Мая, 2019 - 15:22:44
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Только зачем было её делать локальной, она хранит максимальную длину строки списка, а вы её обнуляете при каждом вызове функции.
Всмысле делать локальной? Всмысле обнуляйте? этот код не я писал, а только дополнял как нужно.
(Добавление)
Я просто переименовал переменные, что бы выделялись как-то и не путаться что бы
(Добавление)
ТЫ про int Max_length = 0;? А, ну я решил, что всё, что связанное с логом будет в этой функции, а то, что она обнуляется - это ничего страшного, так ?
(Добавление)
007wan пишет: она хранит максимальную длину строки списка, а вы её обнуляете при каждом вызове функции Она всёравно обнулится или получит значение функцией GetTextExtentPoint32 так что без разницы вроде) |
|
|
007wan |
Отправлено: 20 Мая, 2019 - 16:45:40
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: char buffer[255];
for (int c=0; c<sizearray(Object_Checkbox); c++)
{
GetPrivateProfileString ("Default", "Object_Combobox"+format(c), 0, address(#buffer[0]), 255, PathSaveSettings);
Load_Checkbox[c]=formatsn(format(#buffer[0]));
messagebox(Load_Checkbox[c]);
}
А я не понял. А как и где мне хранить значения уже загруженные? и как потом их дать контролу?
(Добавление)
А как мне их сохранить в файл? если они int?
Было (Отобразить)CODE:Status_Combobox1 = SendMessage(Object_Combobox1, CB_GETCURSEL, 0, 0);
Status_Checkbox1 = SendMessage(Object_Checkbox1, BM_GETSTATE, 0, 0);
Status_Checkbox2 = SendMessage(Object_Checkbox2, BM_GETSTATE, 0, 0);
Status_Checkbox3 = SendMessage(Object_Checkbox3, BM_GETSTATE, 0, 0);
Status_Checkbox4 = SendMessage(Object_Checkbox4, BM_GETSTATE, 0, 0);
Status_Checkbox5 = SendMessage(Object_Checkbox5, BM_GETSTATE, 0, 0);
WritePrivateProfileString ("Default", "Object_Combobox1", format(Status_Combobox1), PathSaveSettings);
WritePrivateProfileString ("Default", "Object_Checkbox1", format(Status_Checkbox1), PathSaveSettings);
WritePrivateProfileString ("Default", "Object_Checkbox2", format(Status_Checkbox2), PathSaveSettings);
WritePrivateProfileString ("Default", "Object_Checkbox3", format(Status_Checkbox3), PathSaveSettings);
WritePrivateProfileString ("Default", "Object_Checkbox4", format(Status_Checkbox4), PathSaveSettings);
WritePrivateProfileString ("Default", "Object_Checkbox5", format(Status_Checkbox5), PathSaveSettings);
(Добавление)
Вот так я из файла их загружаю.CODE: for (int a=0; a<sizearray(Object_Checkbox); a++)
{
SendMessage(Object_Checkbox[a], BM_SETCHECK, format(Load_Checkbox[a]), 0);
}
(Добавление)
007wan пишет: format(Load_Checkbox[a]), 0); Пордон. без formata Всё работает. даже ввел, даже добавил кое-что.Думаю понятно что:
CODE: for (int b=0; b<sizearray(Object_Checkbox); b++)
{
Status_Checkbox[b] = SendMessage(Object_Checkbox[b], BM_GETSTATE, 0, 0);
if (Status_Checkbox[b] == 8)
{
Status_Checkbox[b] = 0;
}
if (Status_Checkbox[b] == 9)
{
Status_Checkbox[b] = 1;
}
WritePrivateProfileString ("Default", "Object_Checkbox"+format(b), format(Status_Checkbox[b]), PathSaveSettings);
}
(Добавление)
А сравнивать теперь: Вместо:CODE: /*
if(format(#Load_Checkbox1[0]) == "1")
{
transparency (-1, Browser);
}
Так:
CODE: /*
if(Load_Checkbox[0] == 1)
{
transparency (-1, Browser);
} ???
(Добавление)
Ай, сам ответил на свой вопрос) Всё работает. спасибо всёравно) |
|
|
007wan |
Отправлено: 31 Мая, 2019 - 16:00:33
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Как сократить запись?Функция (Отобразить)CODE:function Collect_Gifts()
{
int Collected_Gifts = 0;
Add_Log("Собираю беспалтные подарки.", 1, 1);
sleep(500);
if (findimage(1, #Image_1[0][0], -1, #Image_x[1], #Image_y[1], 0, 0, Game.widthclient, Game.heightclient, Game) > 0)
{
Search_Image_1:;
Add_Log("Обнаружена Image_1.bmp в координатах "+format(Image_x[1])+", "+format(Image_y[1]), 1, 1);
sendmouse(LEFT, Image_x[1]+30, Image_y[1]+60, Game);
Search_Image_3:;
sleep(500);
if (findimage(1, #Image_3[0][0], -1, #Image_x[3], #Image_y[3], 0, 0, Game.widthclient, Game.heightclient, Game) > 0)
{
Collected_Gifts = Collected_Gifts+1;
Add_Log("Обнаружена Image_3.bmp в координатах "+format(Image_x[3])+", "+format(Image_y[3]), 1, 1);
sendmouse(LEFT, Image_x[3]+25, Image_y[3], Game);
goto Search_Image_3;
}
else
{
goto Search_Image_2;
}
}
else
{
Search_Image_2:;
sleep(500);
if (findimage(1, #Image_2[0][0], -1, #Image_x[2], #Image_y[2], 0, 0, Game.widthclient, Game.heightclient, Game) > 0)
{
Add_Log("Обнаружена Image_2.bmp в координатах "+format(Image_x[2])+", "+format(Image_y[2]), 1, 1);
if (Collected_Gifts != 0)
{
Add_Log("Собрано подарков: "+format(Collected_Gifts)+".", 1, 1);
}
else
{
Add_Log("Бесплатные подарки отсутствуют.", 1, 1);
}
Collected_Gifts = 0;
}
else
{
Stop_Script("Не удается найти Image_2.bmp");
sleep(500);
if (findimage(1, #Image_1[0][0], -1, #Image_x[1], #Image_y[1], 0, 0, Game.widthclient, Game.heightclient, Game) > 0)
{
goto Search_Image_1;
}
}
}
} И не понимаю вроде 500 паузы хватает перед Image_3 ,но после первого нахождения просто обрубается, выходит на else Image_3, хотя еще есть одно изображение. |
|
|
Zireael |
Отправлено: 01 Июня, 2019 - 01:39:05
|
Эксперт
Покинул форум
Сообщений всего: 4467
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Как сократить запись?
Сомневаюсь что кто-то будет разбираться в нагромождении goto. Они вообще тут не нужны.
Опишите задачу чтобы было понятно что требуется сделать.(Отредактировано автором: 01 Июня, 2019 - 01:43:05) |
|
|
007wan |
Отправлено: 01 Июня, 2019 - 09:40:09
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael , Описываю Код (Отобразить)CODE:function Collect_Gifts()
{
int Collected_Gifts = 0;
Add_Log("Собираю беспалтные подарки.", 1, 1);
sleep(500);
if (findimage(1, #Image_1[0][0], -1, #Image_x[1], #Image_y[1], 0, 0, Game.widthclient, Game.heightclient, Game) > 0)
{
Search_Image_1:;
Add_Log("Обнаружена Image_1.bmp в координатах "+format(Image_x[1])+", "+format(Image_y[1]), 1, 1);
sendmouse(LEFT, Image_x[1]+30, Image_y[1]+60, Game);
Search_Image_3:;
sleep(500);
if (findimage(1, #Image_3[0][0], -1, #Image_x[3], #Image_y[3], 0, 0, Game.widthclient, Game.heightclient, Game) > 0)
{
Collected_Gifts = Collected_Gifts+1;
Add_Log("Обнаружена Image_3.bmp в координатах "+format(Image_x[3])+", "+format(Image_y[3]), 1, 1);
sendmouse(LEFT, Image_x[3]+25, Image_y[3], Game);
goto Search_Image_3;
}
else
{
goto Search_Image_2;
}
}
else
{
Search_Image_2:;
sleep(500);
if (findimage(1, #Image_2[0][0], -1, #Image_x[2], #Image_y[2], 0, 0, Game.widthclient, Game.heightclient, Game) > 0)
{
Add_Log("Обнаружена Image_2.bmp в координатах "+format(Image_x[2])+", "+format(Image_y[2]), 1, 1);
if (Collected_Gifts != 0)
{
Add_Log("Собрано подарков: "+format(Collected_Gifts)+".", 1, 1);
}
else
{
Add_Log("Бесплатные подарки отсутствуют.", 1, 1);
}
Collected_Gifts = 0;
}
else
{
Stop_Script("Не удается найти Image_2.bmp");
sleep(500);
if (findimage(1, #Image_1[0][0], -1, #Image_x[1], #Image_y[1], 0, 0, Game.widthclient, Game.heightclient, Game) > 0)
{
goto Search_Image_1;
}
}
}
}
Ищет изображение1, если нашел, то кликнуть на него и искать изображение3. Если не нашел изображение1, то искать изображение2. Если нашел изображение3, то кликнуть на него и снова искать изображение3(по кругу). Если не нашел изображение3, то искать изображение2. Если нашел изображение2, то ничего, а если не нашел, то искать изображение1 и всё снова по кругу. Я же максимально понятный код предоставил с метками и пронумеровал их даже для ясности. А метки здесь 100% понадобятся, т.к что бы игнорировать либо выше код и переходить к нужному поиск(например, игнорировать вписывать в лог текст). Если есть лучше предложение, то пожалуйста. Посмотрим как без меток заработает, но я - сомневаюсь. Спасибо. |
|
|
007wan |
Отправлено: 27 Августа, 2019 - 11:40:06
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
код (Отобразить)CODE:#define GRADIENT_FILL_RECT_V 1
#define PS_INSIDEFRAME 6
#define SRCCOPY 13369376
#define RUSSIAN_CHARSET 204
#define OUT_DEFAULT_PRECIS 0
#define CLEARTYPE_QUALITY 5
#define FF_DONTCARE 0
#define CLIP_DEFAULT_PRECIS 0
#define MUTEX_ALL_ACCESS 2031617
#define FLASHW_TRAY 2
#define FLASHW_TIMER 4
#define FLASHW_STOP 0
external(INT, "FlashWindow", "FlashWindowEx", "User32.dll");
external(INT, "CreateMutex", "CreateMutexA", "Kernel32.dll");
external(INT, "OpenMutex", "OpenMutexA", "Kernel32.dll");
external(INT, "ReleaseMutex", "ReleaseMutex", "Kernel32.dll");
external(INT, "CloseHandle", "CloseHandle", "Kernel32.dll");
external(INT, "FindWindow", "FindWindowExA", "user32.dll");
external(INT, "GetModuleFileName", "GetModuleFileNameA", "Kernel32.dll");
external(INT, "GetDC", "GetDC", "User32.dll");
external(INT, "DeleteDC", "DeleteDC", "Gdi32.dll");
external(INT, "ReleaseDC", "ReleaseDC", "User32.dll");
external(INT, "GradientFill", "GradientFill", "Msimg32.dll" );
external(INT, "Rectangle", "Rectangle", "Gdi32.dll");
external(INT, "SelectObject", "SelectObject", "Gdi32.dll");
external(INT, "DeleteObject", "DeleteObject", "Gdi32.dll");
external(INT, "CreateSolidBrush", "CreateSolidBrush", "Gdi32.dll");
external(INT, "CreatePen", "CreatePen", "Gdi32.dll");
external(INT, "CreateCompatibleDC", "CreateCompatibleDC", "Gdi32.dll" );
external(INT, "CreateCompatibleBitmap", "CreateCompatibleBitmap", "Gdi32.dll" );
external(INT, "BitBlt", "BitBlt", "Gdi32.dll" );
external(INT, "TextOut", "TextOutA", "Gdi32.dll" );
external(INT, "SetTextColor", "SetTextColor", "Gdi32.dll" );
external(INT, "SetBkMode", "SetBkMode", "Gdi32.dll" );
external(INT, "CreateFont", "CreateFontA", "Gdi32.dll" );
external(INT, "AlphaBlend", "AlphaBlend", "Msimg32.dll" );
char Name[16384];
char buffer[1];
string name_exe;
GetModuleFileName(0, address(#Name[0]), sizearray(Name));
regexsearch(1, #name_exe, format(#Name[0]), "[^\\]+(?=.exe)");
win w = window(name_exe);
int FLASHWINFO1[5] = {20, formatwi(w), FLASHW_TRAY | FLASHW_TIMER, 0, 0};
int FLASHWINFO2[5] = {20, formatwi(w), FLASHW_STOP, 0, 0};
int my_mutex = Mutex("any_name_mutex");
enabletimer(0);
function Set_Loading()
{
char BLENDFUNCTION[4] = {0, 0, 20, 0}
int ftn = codhexi(#BLENDFUNCTION[0], 4);
int Display_Color, Display_Width, Display_Height;
getdisplay(Display_Color, Display_Width, Display_Height);
int font = CreateFont(14, 0, 0, 0, 100, 0, 0, 0, RUSSIAN_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, FF_DONTCARE, "Arial");
int coord_rectangle[4] = {Display_Width/2-130, Display_Height/2-100, 300, 130};
int hdc, DC, bitmapDC;
hdc = GetDC(0);
DC = CreateCompatibleDC(hdc);
bitmapDC = CreateCompatibleBitmap(hdc, coord_rectangle[2], coord_rectangle[3]);
SelectObject(DC, bitmapDC);
int Select_Pen1, Select_Brush1;
int Object_Pen1, Object_Brush1;
char TRIVERTEX[64];
int coord[8] = {20, 55, 280, 65, 20, 55, 280, 65};
int color[4] = {3329330, 0, 9470064, 65539};
int rect[4] = {0, 1, 2, 3};
Object_Pen1 = CreatePen(PS_INSIDEFRAME, 2, 6908265);
Object_Brush1 = CreateSolidBrush(16777215);
for(int i=0; i<=coord[2]-coord[0]; i=i+(coord[2]-coord[0])/100)
{
int percent = i/(coord[2]-coord[0])*100;
coord[4] = coord[0]+i;
for(int s=0; s<2; s++)
{
codhex(coord[s*4], #TRIVERTEX[s*32]);
codhex(coord[s*4+1], #TRIVERTEX[s*32+4]);
codhex(rvalue(color[s*2]) * 256, #TRIVERTEX[s*32+8]);
codhex(gvalue(color[s*2]) * 256, #TRIVERTEX[s*32+10]);
codhex(bvalue(color[s*2]) * 256, #TRIVERTEX[s*32+12]);
codhex(coord[s*4+2], #TRIVERTEX[s*32+16]);
codhex(coord[s*4+3], #TRIVERTEX[s*32+20]);
codhex(rvalue(color[s*2+1]) * 256, #TRIVERTEX[s*32+24]);
codhex(gvalue(color[s*2+1]) * 256, #TRIVERTEX[s*32+26]);
codhex(bvalue(color[s*2+1]) * 256, #TRIVERTEX[s*32+28]);
}
Select_Pen1 = SelectObject(DC, Object_Pen1);
Select_Brush1 = SelectObject(DC, Object_Brush1);
Rectangle(DC, 0, 0, coord_rectangle[2], coord_rectangle[3]);
SetTextColor(DC, 255);
SetBkMode(DC, 1);
TextOut(DC, 120, 10, "K2019Bot", 8);
TextOut(DC, 240, 70, format(percent)+"%", size(format(percent))+1);
int old_font = SelectObject (DC, font);
TextOut(DC, 20, 70, "Unpack: C:\...\Temp\Image_0.bmp", 31);
SelectObject (DC, old_font);
GradientFill(DC, address(#TRIVERTEX[0]), 4, address(#rect[0]), 2, GRADIENT_FILL_RECT_V);
if(i == 0)
{
looptime(4000)
{
AlphaBlend(hdc, coord_rectangle[0], coord_rectangle[1], coord_rectangle[2], coord_rectangle[3],
DC, 0, 0, coord_rectangle[2], coord_rectangle[3], ftn);
sleep(1);
}
}
looptime(10)
{
BitBlt(hdc, coord_rectangle[0], coord_rectangle[1], coord_rectangle[2], coord_rectangle[3], DC, 0, 0, SRCCOPY);
sleep(1);
}
if(percent == 100)
{
looptime(4000)
{
BitBlt(hdc, coord_rectangle[0], coord_rectangle[1], coord_rectangle[2], coord_rectangle[3], DC, 0, 0, SRCCOPY);
sleep(1);
}
SelectObject(DC, Select_Pen1);
SelectObject(DC, Select_Brush1);
DeleteDC(DC);
DeleteObject(bitmapDC);
ReleaseDC(0, hdc);
createdialog(0);
showdialog(0, "Диалог", 300, 300, 300, 300, 4, 1);
}
}
}
loop()
{
sleep(10);
}
function getmessage(0, WM_CLOSE)
{
ReleaseMutex(my_mutex);
CloseHandle(my_mutex);
}
function Mutex(string s)
{
if(OpenMutex(MUTEX_ALL_ACCESS, 0, s))
{
int handle = FindWindow(0, 0, 0, name_exe);
while (handle != 0)
{
Write_Wuffer('1', handle);
handle = FindWindow(0, handle, 0, name_exe);
}
close();
}
else
{
Set_Loading();
}
return CreateMutex(0, 1, s);
}
function Write_Buffer(char cc, int handle)
{
char c[1] = {cc};
writebuffer(#c[0], 1, formatiw(handle));
}
CREATE_TIMER(0, 500)
{
readbuffer(#buffer[0], 1);
if(buffer[0] == '1')
{
Write_Buffer('0', formatwi(w));
FlashWindow(address(#FLASHWINFO1[0]));
pause(2000);
FlashWindow(address(#FLASHWINFO2[0]));
}
}
(Добавление)
Как сократить запись кода? А то я сжал его как мог(избавился перепрыгивания из функции с функцию), а дальше не знаю как. Он всеравно огромный.
(Добавление)
Обязательно жмите крестик в диалоге 1 раз хотя бы, дабы после повторного запуска мьютекс не закрыл программу полностью |
|
|
|