Duat |
Отправлено: 10 Февраля, 2020 - 17:57:52
|
Наблюдатель
Покинул форум
Сообщений всего: 39
Дата рег-ции: Окт. 2018
Репутация: 0
|
Имеется бот для игр в эмуляторе Memu.
Сайт данного эмулятора: www.memuplay.com.
В играх можно покупать еду 3х видов, дерево 3х видов и т.д.
Необходимо сделать меню, либо файл настроек, в котором можно было бы выбирать на каком аккаунту что именно покупать (например на первом аккаунте, нужно купить только еду, на другом еду и один вид дерева). Также, необходимо, чтобы данный файл с настройками сохранялся где-либо.
Также, необходимо отправлять данному эмулятору команды(adb shell input tap, input swipe и т.д.), я смог реализовать отправку команд только через командную строку. Ввиду того, что командная строка появляется на экране монитора, во время отправки команды эмулятору - это дико бесит.
Таким образом, необходимо сделать:
1. меню для бота, где можно будет "флажками" отмечать, какой тип ресурса каждому аккаунту покупать.
2. Файл настроек, с которого бот будет считывать переменные, согласно запущенному в данный момент аккаунту.
3. Реализовать отправку команд эмулятору без появления командной строки.
В скайпе, могу все наглядно показать, рассказать.
Цену озвучьте сами, пожалуйста, во сколько вы оцените требуемую задачу.
По срокам, как можно быстрее.
Форма оплаты:
Paypal
paysend
Qiwi
карты банков России/Украины
whatsapp: +79275400406
Skype: duatwowcircle(Отредактировано автором: 10 Февраля, 2020 - 17:58:44) |
|
|
Zireael |
Отправлено: 11 Февраля, 2020 - 00:41:48
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: 3. Реализовать отправку команд эмулятору без появления командной строки.
Может пригодится:
CODE:external(INT, "ShellExecute", "ShellExecuteA", "Shell32.dll");
// открыть калькулятор и блокнот через командную строку
ShellExecute(0, "open", "cmd.exe", "/c calc.exe & notepad.exe", "", 0);
(Добавление)
Цитата: Имеется бот
Написан в кибор в визуальном редакторе?
Цитата: 1. меню для бота
Допустим будет диалоговое окно с нужными настройками. Дописывать нужные действия сами будете? Например, если стоит какая-то галка, выполнять такие-то действия. |
|
|
Zireael |
Отправлено: 12 Февраля, 2020 - 01:27:43
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: это ведь к переменной будет привязано? Что-то вроде включенная галка - a=1, выключенная галка - a=0?
Да. Что-то вроде этого:
code (Отобразить)CODE:#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define BS_AUTOCHECKBOX 3
#define CBS_DROPDOWNLIST 3
#define CB_ADDSTRING 323
#define CB_GETCURSEL 327
#define CB_SETCURSEL 334
#define CBN_SELENDOK 9
#define BM_SETCHECK 241
#define BST_CHECKED 1
#define BST_UNCHECKED 0
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
external (INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
string path = "C:\config111.txt"; // куда сохранять файл настроек
// галки
int check[6];
int pos_check[6][4];
pos_check[0][0]=10; pos_check[0][1]=10; pos_check[0][2]=80; pos_check[0][3]=20;
pos_check[1][0]=10; pos_check[1][1]=32; pos_check[1][2]=80; pos_check[1][3]=20;
pos_check[2][0]=10; pos_check[2][1]=54; pos_check[2][2]=80; pos_check[2][3]=20;
pos_check[3][0]=10; pos_check[3][1]=90; pos_check[3][2]=80; pos_check[3][3]=20;
pos_check[4][0]=10; pos_check[4][1]=112; pos_check[4][2]=80; pos_check[4][3]=20;
pos_check[5][0]=10; pos_check[5][1]=136; pos_check[5][2]=80; pos_check[5][3]=20;
int flag_check[6]; initialarray(#flag_check[0], 0);
string check_text[6]={"Еда1", "Еда2", "Еда3", "Дерево1", "Дерево2", "Дерево3"}
// комбо
int combo, flag_combo=-1;
string combo_text[3]={"akk1", "akk2", "akk3"} // список строк для комбо
createdialog(0); // создать диалог
showdialog(0, "Диалог",100, 150, 300, 300, 4, 1); // показать диалог
loop()
{
// тут скрипт
textbkcolor(255, 65280);
textout(0, 0, 0, "Выбран пункт в комбо: "+format(flag_combo), 1);
textout(1, 0, 20, "Еда1: "+format(flag_check[0]), 1);
textout(2, 0, 40, "Еда2: "+format(flag_check[1]), 1);
textout(3, 0, 60, "Еда3: "+format(flag_check[2]), 1);
textout(4, 0, 80, "Дерево1: "+format(flag_check[3]), 1);
textout(5, 0, 100, "Дерево2: "+format(flag_check[4]), 1);
textout(6, 0, 120, "Дерево3: "+format(flag_check[5]), 1);
sleep(10);
}
end:; // переход к метке если диалог закрыт
function getmessage(0, WM_CREATE)
{
char c[999];
combo=CreateWindow(0, "COMBOBOX", "", CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_BORDER, 150, 10, 110, 120, gethwnd(0), 0, 0, 0); // создать комбо
for(i=0; i<sizearray(combo_text); i++)
{
strcpy(#c[0], combo_text[i]);
sendmessage(CB_ADDSTRING, 0, address(#c[0]), formatiw(combo)); // добавить строку в комбо
}
// создать галки
for(int i=0; i<sizearray(pos_check); i++)
check[i]=CreateWindow(0, "BUTTON", check_text[i], BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE, pos_check[i][0],
pos_check[i][1], pos_check[i][2], pos_check[i][3], gethwnd(0), 0, 0, 0);
if(fopen(path, "r")) // если файл настроек существует
{
fclose();
load_config(); // вызов функции, которая загрузит настройки из ini файла
sendmessage(CB_SETCURSEL, flag_combo, 0, formatiw(combo)); // выбрать пункт в комбо
check_state(); // расставить галки
}
}
function getmessage(0, WM_COMMAND)
{
// если выбран пункт в комбо
if(message.lparam == combo && hiword(message.wparam) == CBN_SELENDOK)
{
save_config(); // сохранить настройки
flag_combo = sendmessage(CB_GETCURSEL, 0, 0, formatiw(combo)); // получить номер выбранного пункта
load_config(); // загрузить настройки
check_state(); // расставить галки
return;
}
// если выбрана любая галка
for(int i=0; i<sizearray(check); i++)
{
if(message.lparam == check[i])
{
if(flag_check[i])flag_check[i]=0;
else flag_check[i]=1;
return;
}
}
}
function getmessage(0, WM_CLOSE)
{
save_config(); // вызов функции, которая сохранит настройки в ini файл
goto global end; // выход из скрипта, можно заменить на close(); чтобы закрыть кибор
}
function check_state()
{
// расставить галки
for(int i=0; i<sizearray(check); i++)
{
if(flag_check[i])sendmessage(BM_SETCHECK, BST_CHECKED, 0, formatiw(check[i]));
else sendmessage(BM_SETCHECK, BST_UNCHECKED, 0, formatiw(check[i]));
}
}
function load_config() // функция для загрузки настроек
{
char c[256];
if(flag_combo == -1) // если пункт комбо не выбран
{
GetPrivateProfileString ("Default", "Combo", 0, address (#c[0]), sizearray(c), path); // получить номер пункта из ini
flag_combo = formatsn(format(#c[0])); // записать значение в переменную
}
for(int i=0; i<sizearray(check); i++) // для всех галок
{
GetPrivateProfileString ("Combo"+format(flag_combo), "Check"+format(i), 0, address (#c[0]), sizearray(c), path); // получить значение галки
if(formatsn(format(#c[0]))==1)flag_check[i]=1;
else flag_check[i]=0;
}
}
function save_config() // функция для сохранения настроек
{
if(flag_combo == -1)return;
char c[256];
WritePrivateProfileString ("Default", "Combo", format(flag_combo), path); // записать номер текущей выбранной строки комбо
// записать статус галок
for(int i=0; i<sizearray(check); i++)WritePrivateProfileString ("Combo"+format(flag_combo), "Check"+format(i), format(flag_check[i]), path);
}
Настройки сохраняются при выборе строки в комбо и закрытии диалога. |
|
|
|