Другое С/С++ Вопрос - Ответ

whyega52

Гений, миллионер, плейбой, долбаеб
Модератор
2,779
2,600
Как проверить ид на существование? Пробовал вот так:

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
}
Но если ввожу ID, которого нет на сервере - крашит
 
Последнее редактирование:

MeG@LaDo[N] ^_^

Известный
280
319
Как проверить ид на существование? Пробовал вот так:

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
}
Но если ввожу ID, которого нет на сервере - крашит
достаточно одного SF->getSAMP()->getPlayers()->isListed[std::stoi(id)] на сколько помню
 
  • Нравится
Реакции: whyega52

whyega52

Гений, миллионер, плейбой, долбаеб
Модератор
2,779
2,600
достаточно одного SF->getSAMP()->getPlayers()->isListed[std::stoi(id)] на сколько помню
Сяб, работает. А что вообще обозначает эта функция? А то вырезал ее из Гайда Клина

Как правильно получить свои коорды (для дальнейшего получения дистанции между двумя точками)?
C++:
CVector* mpos = PEDSELF->GetPosition();
AddChat(-1, "Param: %s ", mpos[0]);
 
Последнее редактирование:

Z3roKwq

Известный
291
154
Как правильно получить свои коорды (для дальнейшего получения дистанции между двумя точками)?
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 то корды скакать будут при движении

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)
 
  • Нравится
Реакции: whyega52

whyega52

Гений, миллионер, плейбой, долбаеб
Модератор
2,779
2,600
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)
как на 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);

Пытаюсь найти дистанцию между моим персом и чужим, но появляется ошибка

1666076604597.png
 
Последнее редактирование:

MeG@LaDo[N] ^_^

Известный
280
319
как на 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
float GetDistance(float lPos[3], float pPos[3]) {
return sqrt((lPos[0] - pPos[0]) * (lPos[0] - pPos[0]) + (lPos[1] - pPos[1]) * (lPos[1] - pPos[1]) + (lPos[2] - pPos[2]) * (lPos[2] - pPos[2]));
}

и еще,если ты/игрок будет не пешком(в тачке или пассажире) то позиция обновляться не будет, потому что ты получаешь онфут позицию
 
  • Нравится
Реакции: whyega52

whyega52

Гений, миллионер, плейбой, долбаеб
Модератор
2,779
2,600
и еще,если ты/игрок будет не пешком(в тачке или пассажире) то позиция обновляться не будет, потому что ты получаешь онфут позицию
А как эт можно фиксануть? Добавить проверку на кар?
 

AdCKuY_DpO4uLa

Адский дрочер
Друг
315
666
Как происходит шифрование пакета RakClientInterface::RPС? Если отправлять РПЦ, то оно идёт куда-то в ракпир, где преобразуется в пакет (ID_RPC, rpcID(byte), битстрим самого РПЦ), потом идут какие-то махинации, как я понял, с AES шифрованием и ключом в 16 байт, после чего пакет идёт в SocketLayer::SendTo уже в зашифрованном виде, где шифруется дейтаграмма, не могу понять, откуда берётся этот ключ, которым шифруется пакет до SocketLayer::SendTo
 
  • Клоун
  • Вау
Реакции: Fott и Z3roKwq

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,806
Как происходит шифрование пакета RakClientInterface::RPС? Если отправлять РПЦ, то оно идёт куда-то в ракпир, где преобразуется в пакет (ID_RPC, rpcID(byte), битстрим самого РПЦ), потом идут какие-то махинации, как я понял, с AES шифрованием и ключом в 16 байт, после чего пакет идёт в SocketLayer::SendTo уже в зашифрованном виде, где шифруется дейтаграмма, не могу понять, откуда берётся этот ключ, которым шифруется пакет до SocketLayer::SendTo
authkey же
 

AdCKuY_DpO4uLa

Адский дрочер
Друг
315
666
auth_key есть два типа, один идёт пакетом ID_AUTH_KEY, второй идёт в RPC_ClientJoin/RPC_NPCJoin, но когда ты этот РПЦ кидаешь, он переводится в пакет в ракпире, и как-то шифруется, если выводить байты этого РПЦ до отправки через RakClientInterface::RPC, то будет виден даже ник, который находится в битстриме RPC_ClientJoin, но если выводить те же самые байты в SocketLayer::SendTo до шифрования дейтограммы, то они уже будут зашифрованны чем-то, соответственно, ник уже не показывается во всём массиве байт, но и сам массив порядком увеличивается в размере, примерно на 40+- байт
 
  • Клоун
  • Нравится
Реакции: Fott и Z3roKwq

whyega52

Гений, миллионер, плейбой, долбаеб
Модератор
2,779
2,600
Из-за чего ошибки во время компиляции?

C++:
#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();
}

main.hpp:
#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).

1666147929795.png

sf 5.5.1