Здравствуйте, как вытащить int значение из адреса памяти?
C++
int i = *reinterpret_cast<int*>(твой адрес);
if (SF->getSAMP()->getPlayers()->isListed[std::stoi(id)] != 1 && SF->getSAMP()->getPlayers()->remotePlayerInfo[std::stoi(id)] == NULL && SF->getSAMP()->getPlayers()->remotePlayerInfo[std::stoi(id)]->data == NULL && SF->getSAMP()->getPlayers()->remotePlayerInfo[std::stoi(id)]->data->sampActor == NULL && SF->getSAMP()->getPlayers()->remotePlayerInfo[std::stoi(id)]->data->sampActor->gtaPed == NULL) // "id" - аргумент команды
{
AddChat(-1, "Плеер потерялся :/."); // функция AddChat() объявлена в main.hpp
}
else
{
// действия с ID
}
достаточно одного SF->getSAMP()->getPlayers()->isListed[std::stoi(id)] на сколько помнюКак проверить ид на существование? Пробовал вот так:
Но если ввожу ID, которого нет на сервере - крашитC++:if (SF->getSAMP()->getPlayers()->isListed[std::stoi(id)] != 1 && SF->getSAMP()->getPlayers()->remotePlayerInfo[std::stoi(id)] == NULL && SF->getSAMP()->getPlayers()->remotePlayerInfo[std::stoi(id)]->data == NULL && SF->getSAMP()->getPlayers()->remotePlayerInfo[std::stoi(id)]->data->sampActor == NULL && SF->getSAMP()->getPlayers()->remotePlayerInfo[std::stoi(id)]->data->sampActor->gtaPed == NULL) // "id" - аргумент команды { AddChat(-1, "Плеер потерялся :/."); // функция AddChat() объявлена в main.hpp } else { // действия с ID }
Сяб, работает. А что вообще обозначает эта функция? А то вырезал ее из Гайда Клинадостаточно одного SF->getSAMP()->getPlayers()->isListed[std::stoi(id)] на сколько помню
CVector* mpos = PEDSELF->GetPosition();
AddChat(-1, "Param: %s ", mpos[0]);
Как правильно получить свои коорды (для дальнейшего получения дистанции между двумя точками)?
//Вариант 1
D3DXVECTOR3 player(PEDSELF->GetPosition()->fX, PEDSELF->GetPosition()->fY, PEDSELF->GetPosition()->fZ);
//Использование
player.x, player.y, player.z
//Вариант 2
D3DXVECTOR3 player(SF->getSAMP()->getPlayers()->GetOnFootData(id)->position[0], SF->getSAMP()->getPlayers()->GetOnFootData(id)->position[1], SF->getSAMP()->getPlayers()->GetOnFootData(id)->position[2]);
//Где "id" указываеш свой ид
//Использование
player.x, player.y, player.z
p.s. 2 вариант для sf api 5.5.0(1)cc://Вариант 1 D3DXVECTOR3 player(PEDSELF->GetPosition()->fX, PEDSELF->GetPosition()->fY, PEDSELF->GetPosition()->fZ); //Использование player.x, player.y, player.z //Вариант 2 D3DXVECTOR3 player(SF->getSAMP()->getPlayers()->GetOnFootData(id)->position[0], SF->getSAMP()->getPlayers()->GetOnFootData(id)->position[1], SF->getSAMP()->getPlayers()->GetOnFootData(id)->position[2]); //Где "id" указываеш свой ид //Использование player.x, player.y, player.z
но как по мне лучше юзать первый варик он нормально показывает, если юзать 2 то корды скакать будут при движении
есть ли в табе такой айди( 1 - есть, 0 - нет)Сяб, работает. А что вообще обозначает эта функция? А то вырезал ее из Гайда Клина
как на 5.5.1 можно получить свой айдишник?cc://Вариант 1 D3DXVECTOR3 player(PEDSELF->GetPosition()->fX, PEDSELF->GetPosition()->fY, PEDSELF->GetPosition()->fZ); //Использование player.x, player.y, player.z //Вариант 2 D3DXVECTOR3 player(SF->getSAMP()->getPlayers()->GetOnFootData(id)->position[0], SF->getSAMP()->getPlayers()->GetOnFootData(id)->position[1], SF->getSAMP()->getPlayers()->GetOnFootData(id)->position[2]); //Где "id" указываеш свой ид //Использование player.x, player.y, player.z
но как по мне лучше юзать первый варик он нормально показывает, если юзать 2 то корды скакать будут при движении
p.s. 2 вариант для sf api 5.5.0(1)
pos[0] = SF->getSAMP()->getPlayers()->remotePlayerInfo[std::stoi(id)]->data->onFootPos[0]; // X
pos[1] = SF->getSAMP()->getPlayers()->remotePlayerInfo[std::stoi(id)]->data->onFootPos[1]; // Y
pos[2] = SF->getSAMP()->getPlayers()->remotePlayerInfo[std::stoi(id)]->data->onFootPos[2]; // Z
D3DXVECTOR3 player(SF->getSAMP()->getPlayers()->GetOnFootData(SF->getSAMP()->getPlayers()->localPlayerInfo.id)->position[0], SF->getSAMP()->getPlayers()->GetOnFootData(SF->getSAMP()->getPlayers()->localPlayerInfo.id)->position[1], SF->getSAMP()->getPlayers()->GetOnFootData(SF->getSAMP()->getPlayers()->localPlayerInfo.id)->position[2]);
float dist = sqrt((pos[0] - player.x)^2 + (pos[1] - player.y)^2 + (pos[2] - player.z)^2);
float GetDistance(float lPos[3], float pPos[3]) {как на 5.5.1 можно получить свой айдишник?
upd: решил
Из-за чего ошибка?
C++:pos[0] = SF->getSAMP()->getPlayers()->remotePlayerInfo[std::stoi(id)]->data->onFootPos[0]; // X pos[1] = SF->getSAMP()->getPlayers()->remotePlayerInfo[std::stoi(id)]->data->onFootPos[1]; // Y pos[2] = SF->getSAMP()->getPlayers()->remotePlayerInfo[std::stoi(id)]->data->onFootPos[2]; // Z D3DXVECTOR3 player(SF->getSAMP()->getPlayers()->GetOnFootData(SF->getSAMP()->getPlayers()->localPlayerInfo.id)->position[0], SF->getSAMP()->getPlayers()->GetOnFootData(SF->getSAMP()->getPlayers()->localPlayerInfo.id)->position[1], SF->getSAMP()->getPlayers()->GetOnFootData(SF->getSAMP()->getPlayers()->localPlayerInfo.id)->position[2]); float dist = sqrt((pos[0] - player.x)^2 + (pos[1] - player.y)^2 + (pos[2] - player.z)^2);
Пытаюсь найти дистанцию между моим персом и чужим, но появляется ошибка
Посмотреть вложение 173441
А как эт можно фиксануть? Добавить проверку на кар?и еще,если ты/игрок будет не пешком(в тачке или пассажире) то позиция обновляться не будет, потому что ты получаешь онфут позицию
+А как эт можно фиксануть? Добавить проверку на кар?
authkey жеКак происходит шифрование пакета RakClientInterface::RPС? Если отправлять РПЦ, то оно идёт куда-то в ракпир, где преобразуется в пакет (ID_RPC, rpcID(byte), битстрим самого РПЦ), потом идут какие-то махинации, как я понял, с AES шифрованием и ключом в 16 байт, после чего пакет идёт в SocketLayer::SendTo уже в зашифрованном виде, где шифруется дейтаграмма, не могу понять, откуда берётся этот ключ, которым шифруется пакет до SocketLayer::SendTo
auth_key есть два типа, один идёт пакетом ID_AUTH_KEY, второй идёт в RPC_ClientJoin/RPC_NPCJoin, но когда ты этот РПЦ кидаешь, он переводится в пакет в ракпире, и как-то шифруется, если выводить байты этого РПЦ до отправки через RakClientInterface::RPC, то будет виден даже ник, который находится в битстриме RPC_ClientJoin, но если выводить те же самые байты в SocketLayer::SendTo до шифрования дейтограммы, то они уже будут зашифрованны чем-то, соответственно, ник уже не показывается во всём массиве байт, но и сам массив порядком увеличивается в размере, примерно на 40+- байтauthkey же
#include "imgui.h"
#include "imgui_impl_dx9.h"
#include "imgui_impl_win32.h"
#include <d3d9.h>
#define DIRECTINPUT_VERSION 0x0800
#include <dinput.h>
#include <tchar.h>
extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
void __stdcall mainloop()
{
static bool initialized = false;
if (!initialized)
{
if (GAME && GAME->GetSystemState() == eSystemState::GS_PLAYING_GAME && SF->getSAMP()->IsInitialized())
{
initialized = true;
SF->getGame()->registerGameDestructorCallback(PluginFree);
SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present);
SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_RESET, Reset);
SF->getGame()->registerWndProcCallback(SFGame::MEDIUM_CB_PRIORITY, WndProcHandler);
ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO(); (void)io;
ImGui_ImplWin32_Init(GetActiveWindow());
ImGui_ImplDX9_Init(SF->getRender()->getD3DDevice());
SF->getSAMP()->registerChatCommand("menui", [](std::string) {
menu = !menu;
});
}
}
}
bool CALLBACK Present(CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion)
{
if (SUCCEEDED(SF->getRender()->BeginRender()))
{
ImGui_ImplDX9_NewFrame();
ImGui_ImplWin32_NewFrame();
ImGui::NewFrame();
if (menu)
{
ImGui::Begin("ImGui меню", &menu);
{
ImGui::Text("Abc");
}
ImGui::End();
}
ImGui::EndFrame();
ImGui::Render();
ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
SF->getRender()->EndRender();
}
return true;
}
HRESULT CALLBACK Reset(D3DPRESENT_PARAMETERS* pPresentationParameters)
{
ImGui_ImplDX9_InvalidateDeviceObjects();
return true;
}
bool CALLBACK WndProcHandler(HWND hwd, UINT msg, WPARAM wParam, LPARAM lParam)
{
ImGui_ImplWin32_WndProcHandler(hwd, msg, wParam, lParam);
return true;
}
void CALLBACK PluginFree()
{
ImGui_ImplDX9_Shutdown();
ImGui_ImplWin32_Shutdown();
ImGui::DestroyContext();
}
#pragma once
#include "SAMPFUNCS_API.h"
#include "game_api.h"
bool CALLBACK Present(CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion);
HRESULT CALLBACK Reset(D3DPRESENT_PARAMETERS* pPresentationParameters);
bool CALLBACK WndProcHandler(HWND hwd, UINT msg, WPARAM wParam, LPARAM lParam);
void CALLBACK PluginFree();
static bool menu = false;
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
extern SAMPFUNCS* SF;
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "struct ImGuiContext * __cdecl ImGui::CreateContext(struct ImFontAtlas *)" (?CreateContext@ImGui@@YAPAUImGuiContext@@PAUImFontAtlas@@@Z) в функции "void __stdcall mainloop(void)" (?mainloop@@YGXXZ).
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl ImGui::DestroyContext(struct ImGuiContext *)" (?DestroyContext@ImGui@@YAXPAUImGuiContext@@@Z) в функции "void __stdcall PluginFree(void)" (?PluginFree@@YGXXZ).
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "struct ImGuiIO & __cdecl ImGui::GetIO(void)" (?GetIO@ImGui@@YAAAUImGuiIO@@XZ) в функции "void __stdcall mainloop(void)" (?mainloop@@YGXXZ).
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl ImGui::NewFrame(void)" (?NewFrame@ImGui@@YAXXZ) в функции "bool __stdcall Present(struct tagRECT const *,struct tagRECT const *,struct HWND__ *,struct _RGNDATA const *)" (?Present@@YG_NPBUtagRECT@@0PAUHWND__@@PBU_RGNDATA@@@Z).
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl ImGui::EndFrame(void)" (?EndFrame@ImGui@@YAXXZ) в функции "bool __stdcall Present(struct tagRECT const *,struct tagRECT const *,struct HWND__ *,struct _RGNDATA const *)" (?Present@@YG_NPBUtagRECT@@0PAUHWND__@@PBU_RGNDATA@@@Z).
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl ImGui::Render(void)" (?Render@ImGui@@YAXXZ) в функции "bool __stdcall Present(struct tagRECT const *,struct tagRECT const *,struct HWND__ *,struct _RGNDATA const *)" (?Present@@YG_NPBUtagRECT@@0PAUHWND__@@PBU_RGNDATA@@@Z).
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "struct ImDrawData * __cdecl ImGui::GetDrawData(void)" (?GetDrawData@ImGui@@YAPAUImDrawData@@XZ) в функции "bool __stdcall Present(struct tagRECT const *,struct tagRECT const *,struct HWND__ *,struct _RGNDATA const *)" (?Present@@YG_NPBUtagRECT@@0PAUHWND__@@PBU_RGNDATA@@@Z).
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "bool __cdecl ImGui::Begin(char const *,bool *,int)" (?Begin@ImGui@@YA_NPBDPA_NH@Z) в функции "bool __stdcall Present(struct tagRECT const *,struct tagRECT const *,struct HWND__ *,struct _RGNDATA const *)" (?Present@@YG_NPBUtagRECT@@0PAUHWND__@@PBU_RGNDATA@@@Z).
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl ImGui::End(void)" (?End@ImGui@@YAXXZ) в функции "bool __stdcall Present(struct tagRECT const *,struct tagRECT const *,struct HWND__ *,struct _RGNDATA const *)" (?Present@@YG_NPBUtagRECT@@0PAUHWND__@@PBU_RGNDATA@@@Z).
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl ImGui::Text(char const *,...)" (?Text@ImGui@@YAXPBDZZ) в функции "bool __stdcall Present(struct tagRECT const *,struct tagRECT const *,struct HWND__ *,struct _RGNDATA const *)" (?Present@@YG_NPBUtagRECT@@0PAUHWND__@@PBU_RGNDATA@@@Z).
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "bool __cdecl ImGui_ImplDX9_Init(struct IDirect3DDevice9 *)" (?ImGui_ImplDX9_Init@@YA_NPAUIDirect3DDevice9@@@Z) в функции "void __stdcall mainloop(void)" (?mainloop@@YGXXZ).
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl ImGui_ImplDX9_Shutdown(void)" (?ImGui_ImplDX9_Shutdown@@YAXXZ) в функции "void __stdcall PluginFree(void)" (?PluginFree@@YGXXZ).
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl ImGui_ImplDX9_NewFrame(void)" (?ImGui_ImplDX9_NewFrame@@YAXXZ) в функции "bool __stdcall Present(struct tagRECT const *,struct tagRECT const *,struct HWND__ *,struct _RGNDATA const *)" (?Present@@YG_NPBUtagRECT@@0PAUHWND__@@PBU_RGNDATA@@@Z).
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl ImGui_ImplDX9_RenderDrawData(struct ImDrawData *)" (?ImGui_ImplDX9_RenderDrawData@@YAXPAUImDrawData@@@Z) в функции "bool __stdcall Present(struct tagRECT const *,struct tagRECT const *,struct HWND__ *,struct _RGNDATA const *)" (?Present@@YG_NPBUtagRECT@@0PAUHWND__@@PBU_RGNDATA@@@Z).
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl ImGui_ImplDX9_InvalidateDeviceObjects(void)" (?ImGui_ImplDX9_InvalidateDeviceObjects@@YAXXZ) в функции "long __stdcall Reset(struct _D3DPRESENT_PARAMETERS_ *)" (?Reset@@YGJPAU_D3DPRESENT_PARAMETERS_@@@Z).
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "bool __cdecl ImGui_ImplWin32_Init(void *)" (?ImGui_ImplWin32_Init@@YA_NPAX@Z) в функции "void __stdcall mainloop(void)" (?mainloop@@YGXXZ).
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl ImGui_ImplWin32_Shutdown(void)" (?ImGui_ImplWin32_Shutdown@@YAXXZ) в функции "void __stdcall PluginFree(void)" (?PluginFree@@YGXXZ).
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl ImGui_ImplWin32_NewFrame(void)" (?ImGui_ImplWin32_NewFrame@@YAXXZ) в функции "bool __stdcall Present(struct tagRECT const *,struct tagRECT const *,struct HWND__ *,struct _RGNDATA const *)" (?Present@@YG_NPBUtagRECT@@0PAUHWND__@@PBU_RGNDATA@@@Z).
1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "long __cdecl ImGui_ImplWin32_WndProcHandler(struct HWND__ *,unsigned int,unsigned int,long)" (?ImGui_ImplWin32_WndProcHandler@@YAJPAUHWND__@@IIJ@Z) в функции "bool __stdcall WndProcHandler(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProcHandler@@YG_NPAUHWND__@@IIJ@Z).