_=Gigant=_
Известный
- 128
- 180
ImGui::ColorConvertU32ToFloat4()how to convert this ?
![]()
D3DCOLOR playerColor = SF->getSAMP()->getPlayers()->GetPlayerColor(id)local color = sampGetPlayerColor (id)
Try SF->getRender()->ARGB_To_A_R_G_B(playerColor, A, R, G, B)local r, g, b = bitex.bextract (color, 16, 8), bitex.bextract (color, 8, 8), bitex.bextract (color, 0, 8)
bool CALLBACK incomingData(stRakNetHookParams *params)
{
if (params->packetId == PacketEnumeration::ID_BULLET_SYNC)
{
stBulletData data;
memset(&data, 0, sizeof(stBulletData)); // обнуляем
byte packet;
params->bitStream->ResetReadPointer(); // на всякий случай устанавливаем оффсет чтения на начало
params->bitStream->Read(packet); // читаем ID пакета
params->bitStream->Read((PCHAR)&data, sizeof(stBulletData)); // читаем отправляемые данные
SF->getSAMP()->getChat()->AddChatMessage(0xDFFFFF, "sTargetID: %d", data.sTargetID);
};
return true;
};
как узнать ид игрока который отправил пакет?
C++:bool CALLBACK incomingData(stRakNetHookParams *params) { if (params->packetId == PacketEnumeration::ID_BULLET_SYNC) { stBulletData data; memset(&data, 0, sizeof(stBulletData)); // обнуляем byte packet; params->bitStream->ResetReadPointer(); // на всякий случай устанавливаем оффсет чтения на начало params->bitStream->Read(packet); // читаем ID пакета params->bitStream->Read((PCHAR)&data, sizeof(stBulletData)); // читаем отправляемые данные SF->getSAMP()->getChat()->AddChatMessage(0xDFFFFF, "sTargetID: %d", data.sTargetID); }; return true; };
bool CALLBACK incomingData(stRakNetHookParams *params)
{
if (params->packetId == PacketEnumeration::ID_BULLET_SYNC)
{
stBulletData data = { 0 };
WORD id;
params->bitStream->ResetReadPointer();
params->bitStream->IgnoreBits(8);
params->bitStream->Read(id);
params->bitStream->Read((PCHAR)&data, sizeof(stBulletData));
SF->getSAMP()->getChat()->AddChatMessage(0xDFFFFF, "ID: %d", id);
}
return true;
}
Не влияет. Он просто курсор чтения переводит на начало bitstream.Влияет ли на работоспособность RakNet Хука ResetReadPointer()?
#include <windows.h>
#include <process.h>
#include "main.h"
bool pStatus = false;
unsigned int CurrentCharPointer = *(unsigned int*)0xB6F5F0;
void __cdecl func(void *pArg)
{
*reinterpret_cast<DWORD*>(0x004B35A0) = 0x560CEC83;
*reinterpret_cast<WORD*>(0x004B35A4) = 0xF18B;
while (true)
{
Sleep(50);
if (GetAsyncKeyState(0x47))
{
pStatus = !pStatus;
if (pStatus == true)
{
AddMessageJumpQ("~g~[ON]", 500, NULL, false); // 500 - ms
}
else
{
AddMessageJumpQ("~r~[OFF]", 500, NULL, false); // 500 - ms
}
}
if (pStatus == true)
{
*reinterpret_cast<BYTE*>(0x96916D) = 1; // bullet
*reinterpret_cast<BYTE*>(0xB7CEE6) = 1; // fire
*(unsigned char*)(CurrentCharPointer + 66) = 0xCC; // all
} else
{
*reinterpret_cast<BYTE*>(0x96916D) = 0; // bullet
*reinterpret_cast<BYTE*>(0xB7CEE6) = 0; // fire
*(unsigned char*)(CurrentCharPointer + 66) = 0; // all
}
}
}
BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ PVOID lpvReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
_beginthread(func, NULL, nullptr);
}
return TRUE;
}
#define FUNC_CMessages__AddMessageJumpQ 0x69F1E0
void AddMessageJumpQ(PCHAR text, UINT time, USHORT flag, bool bPreviousBrief) // Функция показа сообщения на экране.
{
((void(__cdecl *)(PCHAR, UINT, USHORT, bool))FUNC_CMessages__AddMessageJumpQ)(text, time, flag, bPreviousBrief);
}
Поставь в потоке проверку на загрузку игрыПочему при инжекте dll в уже запущенную игру, все работает, а при переименовании в asi, после запуска игры сразу краш.
Код:#include <windows.h> #include <process.h> #include "main.h" bool pStatus = false; unsigned int CurrentCharPointer = *(unsigned int*)0xB6F5F0; void __cdecl func(void *pArg) { *reinterpret_cast<DWORD*>(0x004B35A0) = 0x560CEC83; *reinterpret_cast<WORD*>(0x004B35A4) = 0xF18B; while (true) { Sleep(50); if (GetAsyncKeyState(0x47)) { pStatus = !pStatus; if (pStatus == true) { AddMessageJumpQ("~g~[ON]", 500, NULL, false); // 500 - ms } else { AddMessageJumpQ("~r~[OFF]", 500, NULL, false); // 500 - ms } } if (pStatus == true) { *reinterpret_cast<BYTE*>(0x96916D) = 1; // bullet *reinterpret_cast<BYTE*>(0xB7CEE6) = 1; // fire *(unsigned char*)(CurrentCharPointer + 66) = 0xCC; // all } else { *reinterpret_cast<BYTE*>(0x96916D) = 0; // bullet *reinterpret_cast<BYTE*>(0xB7CEE6) = 0; // fire *(unsigned char*)(CurrentCharPointer + 66) = 0; // all } } } BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ PVOID lpvReserved) { if (fdwReason == DLL_PROCESS_ATTACH) { _beginthread(func, NULL, nullptr); } return TRUE; }
Код:#define FUNC_CMessages__AddMessageJumpQ 0x69F1E0 void AddMessageJumpQ(PCHAR text, UINT time, USHORT flag, bool bPreviousBrief) // Функция показа сообщения на экране. { ((void(__cdecl *)(PCHAR, UINT, USHORT, bool))FUNC_CMessages__AddMessageJumpQ)(text, time, flag, bPreviousBrief); }
VirtualProtectПочему при инжекте dll в уже запущенную игру, все работает, а при переименовании в asi, после запуска игры сразу краш.
Код:#include <windows.h> #include <process.h> #include "main.h" bool pStatus = false; unsigned int CurrentCharPointer = *(unsigned int*)0xB6F5F0; void __cdecl func(void *pArg) { *reinterpret_cast<DWORD*>(0x004B35A0) = 0x560CEC83; *reinterpret_cast<WORD*>(0x004B35A4) = 0xF18B; while (true) { Sleep(50); if (GetAsyncKeyState(0x47)) { pStatus = !pStatus; if (pStatus == true) { AddMessageJumpQ("~g~[ON]", 500, NULL, false); // 500 - ms } else { AddMessageJumpQ("~r~[OFF]", 500, NULL, false); // 500 - ms } } if (pStatus == true) { *reinterpret_cast<BYTE*>(0x96916D) = 1; // bullet *reinterpret_cast<BYTE*>(0xB7CEE6) = 1; // fire *(unsigned char*)(CurrentCharPointer + 66) = 0xCC; // all } else { *reinterpret_cast<BYTE*>(0x96916D) = 0; // bullet *reinterpret_cast<BYTE*>(0xB7CEE6) = 0; // fire *(unsigned char*)(CurrentCharPointer + 66) = 0; // all } } } BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ PVOID lpvReserved) { if (fdwReason == DLL_PROCESS_ATTACH) { _beginthread(func, NULL, nullptr); } return TRUE; }
Код:#define FUNC_CMessages__AddMessageJumpQ 0x69F1E0 void AddMessageJumpQ(PCHAR text, UINT time, USHORT flag, bool bPreviousBrief) // Функция показа сообщения на экране. { ((void(__cdecl *)(PCHAR, UINT, USHORT, bool))FUNC_CMessages__AddMessageJumpQ)(text, time, flag, bPreviousBrief); }
Разве аси лоадер не делает это за меня?Поставь в потоке проверку на загрузку игры
Не совсем понял, где использовать, ставить флаги на адреса памяти, в которые я записываю значения?VirtualProtect
да, PAGE_READWRITE_EXECUTEРазве аси лоадер не делает это за меня?
Не совсем понял, где использовать, ставить флаги на адреса памяти, в которые я записываю значения?