dayOfWeek db ?
day db ?
month db ?
year dw ? ; *
dayOfWeek db ?
day db ?
month db ?
year dw ? ; *
db is a byte, dw is a dword. I don't know why the bytes in your code return a value in decimal, it's strange
попробуй эти байты:Здравствуйте.....можно ли найти сигнатуру которую оставляет модуль в процессе (длл аимчик), если в нем нет никакого текста...Перебирать все подряд?
У тебя year 1 байт, а cx 2 байта. Попробуй использовать clПосмотреть вложение 87014
Неверный тип операнда показывает. Да, 4 символа не влезают в db, но и другие директивы не пропускает же.
CRakPeer::Send(BitStream, ...) - 0x307F0Может есть у кого-нибудь адрес RakPeer::Send для 0.3.7-R1? Можете дать?
Как отправить сообщение в чат в SAMPFUNCS?
SF->getSAMP()->getPlayers()->pLocalPlayer->Say("говно");
ImGui::Text(u8"%s", text);
чтобы использовать переменную text в imgui, тебе надо сначало пеконвертировать её из cp1251 в utf8. вот функция, что делает это к примеру:как для имгуя можно использовать кириллицу без u8?
в переменной хранится текст
пытался так, но не получалосьКод:ImGui::Text(u8"%s", text);
std::string CP1251_to_UTF8(const char* str)
{
std::string res;
int result_u, result_c;
result_u = MultiByteToWideChar(1251, 0, str, -1, 0, 0);
if (!result_u) { return 0; }
wchar_t* ures = new wchar_t[result_u];
if (!MultiByteToWideChar(1251, 0, str, -1, ures, result_u)) {
delete[] ures;
return 0;
}
result_c = WideCharToMultiByte(65001, 0, ures, -1, 0, 0, 0, 0);
if (!result_c) {
delete[] ures;
return 0;
}
char* cres = new char[result_c];
if (!WideCharToMultiByte(65001, 0, ures, -1, cres, result_c, 0, 0)) {
delete[] cres;
return 0;
}
delete[] ures;
res.append(cres);
delete[] cres;
return res;
}
void GTAfunc_TogglePlayerControllable(bool bToggle)
{
DWORD func = 0x56E870;
float fTen = 10.0f;
_asm
{
mov ecx, 0x00B7CD98
push fTen
push bToggle
call func
}
}
для начала узнаешь айди обоих диалоговКак выбрать определенный пункт диалога (DIALOG_STYLE_LIST), нажать первую кнопку, ввести значение в поле диалога (DIALOG_STYLE_INPUT) и опять нажать первую кнопку? (SAMPFUNCS)
// затем, вставляешь код функцию которая отправляет ответ диалогу
void send_dialog_responce(unsigned short id, unsigned char responce, unsigned short list_item, const char *text) {
BitStream bs;
bs.ResetWritePointer();
bs.Write(id);
bs.Write(responce);
bs.Write(list_item);
bs.Write(static_cast<unsigned char>(strlen(text)));
bs.Write(text, strlen(text));
SF->getRakNet()->SendRPC(RPC_DialogResponse, &bs);
}
// создаешь переменную отвечающую за этап работы плагина, у нее будет значение 1 или 2
static uint8_t stage = 1;
// регистрируешь колбэк на приходящии RPC в mainloop
SF->getRakNet()->registerRakNetCallback(RAKHOOK_TYPE_INCOMING_RPC, incomingRPC);
bool __stdcall incomingRPC(stRakNetHookParams *params) {
// проверяем айди RPC
if (params->packetId == RPC_ScrShowDialog) {
// читаем данные диалога, нам нужен только айди
uint16_t dialogID;
params->bitStream->ResetReadPointer();
params->bitStream->Read(dialogID);
// проверяем айди диалога и этап
if (dialogID == /* айди первого диалога */ 2011 && stage == 1) {
// меняешь этап на 2
stage = 2;
// отправляешь нажатие 1 кнопки
send_dialog_responce(dialogID, 1, 0, "");
// по желанию отключаешь показ диалога
return false;
} else if (dialogID == /* айди второго диалога */ 2012 && stage == 2) {
// меняешь этап на 1
stage = 1;
// отправляешь нажатие 1 кнопки и нужный текст, к примеру "test"
send_dialog_responce(dialogID, 1, 0, "test");
// по желанию отключаешь показ диалога
return false;
}
}
return true;
}