Убрать ResetWritePointerКак записать что-то в битстрим на определенное место. Так вылетает с сервера.
Код:params->bitStream->ResetWritePointer(); params->bitStream->SetWriteOffset(24); params->bitStream->Write(sLeftRightKeys);
Server closed the connection. ничего не поменялосьУбрать ResetWritePointer
покажи кодServer closed the connection. ничего не поменялось
покажи код
bool CALLBACK OutcomingPacket(stRakNetHookParams *params) {
if (state && params->packetId == PacketEnumeration::ID_VEHICLE_SYNC) {
static uint16_t sLeftRightKeys;
params->bitStream->ResetReadPointer();
params->bitStream->SetReadOffset(24);
params->bitStream->Read(sLeftRightKeys);
if (sLeftRightKeys == 0) {
params->bitStream->ResetWritePointer();
params->bitStream->SetWriteOffset(24);
params->bitStream->Write(uint16_t(bool(rand() % 2) ? 128 : 65408));
}
}
return true;
}
#include <windows.h>
#include <string>
#include <iostream>
using namespace std;
DWORD pid;
DWORD Xcoord = 0x1A32C794;
DWORD Ycoord = 0x1A32C798;
DWORD Zcoord = 0x1A32C79C;
float MyCoordX;
float MyCoordY;
float MyCoordZ;
int main()
{
while (true)
{
HWND hWnd = FindWindowA(0, ("GTA:SA:MP"));
if (hWnd != 0)
{
GetWindowThreadProcessId(hWnd, &pid);
HANDLE pHandle = OpenProcess(PROCESS_VM_READ, FALSE, pid);
ReadProcessMemory(pHandle, (LPVOID)Xcoord, &MyCoordX, sizeof(MyCoordX), 0);
ReadProcessMemory(pHandle, (LPVOID)Ycoord, &MyCoordY, sizeof(MyCoordY), 0);
ReadProcessMemory(pHandle, (LPVOID)Zcoord, &MyCoordZ, sizeof(MyCoordZ), 0);
setlocale(LC_ALL, "Russian");
cout << "Координаты игрока: " << endl;
cout << "X координата: " << Xcoord << endl;
cout << "Y координата: " << Ycoord << endl;
cout << "Z координата: " << Zcoord << endl;
Sleep(100);
system("CLS");
}
if (hWnd == 0)
{
setlocale(LC_ALL, "Russian");
cout << "Процесс не найден." << endl;
Sleep(100);
system("CLS");
}
}
}
В чём ошибка? Хочу вывести координаты игрока в консоле:
Нашел адреса координат через СЕ:
Потом написал код вывода:
C++:#include <windows.h> #include <string> #include <iostream> using namespace std; DWORD pid; DWORD Xcoord = 0x1A32C794; DWORD Ycoord = 0x1A32C798; DWORD Zcoord = 0x1A32C79C; float MyCoordX; float MyCoordY; float MyCoordZ; int main() { while (true) { HWND hWnd = FindWindowA(0, ("GTA:SA:MP")); if (hWnd != 0) { GetWindowThreadProcessId(hWnd, &pid); HANDLE pHandle = OpenProcess(PROCESS_VM_READ, FALSE, pid); ReadProcessMemory(pHandle, (LPVOID)Xcoord, &MyCoordX, sizeof(MyCoordX), 0); ReadProcessMemory(pHandle, (LPVOID)Ycoord, &MyCoordY, sizeof(MyCoordY), 0); ReadProcessMemory(pHandle, (LPVOID)Zcoord, &MyCoordZ, sizeof(MyCoordZ), 0); setlocale(LC_ALL, "Russian"); cout << "Координаты игрока: " << endl; cout << "X координата: " << Xcoord << endl; cout << "Y координата: " << Ycoord << endl; cout << "Z координата: " << Zcoord << endl; Sleep(100); system("CLS"); } if (hWnd == 0) { setlocale(LC_ALL, "Russian"); cout << "Процесс не найден." << endl; Sleep(100); system("CLS"); } } }
И вот результат:
Перебираю в цикле ID каров, но как получить кар в зоне стрима?(Функция)
for (int i = 0; i < SAMP_MAX_VEHICLES; i++)
{
if (SF->getSAMP()->getVehicles()->pSAMP_Vehicle[i])
{
}
}
Как самп отправляет данные на сервер?
Думал сокеты, проверял какие данные проходят через функции send, sendto - не увидел данных которые могли бы отправляться.
Отправлялись данные в основном размером 4, 6, иногда 10 байт, при этом RakLogger показывал что отправляются пакеты/RPC намного большего размера.
В исходниках сампа 0.2.5 найти этого не смог.
void ReliabilityLayer::Update( SOCKET s, PlayerID playerId, int MTUSize, RakNetTimeNS time, DataStructures::List<PluginInterface*> &messageHandlerList )
void ReliabilityLayer::SendBitStream( SOCKET s, PlayerID playerId, RakNet::BitStream *bitStream )
int SocketLayer::SendTo( SOCKET s, const char *data, int length, unsigned int binaryAddress, unsigned short port )
int sendto( SOCKET s, const char *buf, int len, int flags, const sockaddr *to, int tolen);
Пример нажатия клавиши H на 300 милисекунд:Почему-то работает везде кроме игры, в чём проблема?
C++:#include "stdafx.h" #include "Windows.h" #include <iostream> int main() { while (true) { if (GetAsyncKeyState(VK_INSERT)) { keybd_event(VK_SPACE, 0, 0, 0); Sleep(50); } } return 0; }
int keyState = 0;
DWORD WINAPI tsendmsg(LPVOID Param) {
HWND wndHndl = FindWindowA(NULL, "GTA:SA:MP");
while (keyState == 1) {
SendMessage(wndHndl, WM_KEYDOWN, 0x48, 0);
Sleep(300);
keyState = 0;
SendMessage(wndHndl, WM_KEYUP, 0x48, 0);
}
return 0;
}
void CALLBACK cmd_paya(std::string param) {
keyState = 1;
CreateThread(NULL, 0, tsendmsg, 0, 0, NULL);
}