mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
Add g_pNavMesh to SDK
Add g_pNavMesh to SDK and a simple wrapper for obtaining NavMesh from array.
This commit is contained in:
parent
f4ea846284
commit
2dd66662b2
@ -34,7 +34,7 @@ void CAI_NetworkBuilder::SaveNetworkGraph(CAI_Network* pNetwork)
|
||||
const string svMeshDir = "maps\\navmesh\\";
|
||||
const string svGraphDir = "maps\\graphs\\";
|
||||
|
||||
fs::path fsMeshPath(svMeshDir + g_pHostState->m_levelName + "_" + HULL_SIZE[3] + ".nm");
|
||||
fs::path fsMeshPath(svMeshDir + g_pHostState->m_levelName + "_" + SHULL_SIZE[3] + ".nm");
|
||||
fs::path fsGraphPath(svGraphDir + g_pHostState->m_levelName + ".ain");
|
||||
|
||||
CFastTimer masterTimer;
|
||||
@ -69,7 +69,7 @@ void CAI_NetworkBuilder::SaveNetworkGraph(CAI_Network* pNetwork)
|
||||
}
|
||||
else
|
||||
{
|
||||
Warning(eDLL_T::SERVER, "%s - No %s NavMesh found. Unable to calculate CRC for AI Network.\n", __FUNCTION__, HULL_SIZE[3].c_str());
|
||||
Warning(eDLL_T::SERVER, "%s - No %s NavMesh found. Unable to calculate CRC for AI Network.\n", __FUNCTION__, SHULL_SIZE[3].c_str());
|
||||
}
|
||||
|
||||
// Large NavMesh CRC.
|
||||
@ -300,7 +300,7 @@ void CAI_NetworkManager::LoadNetworkGraph(CAI_NetworkManager* pAINetworkManager,
|
||||
string svMeshDir = "maps\\navmesh\\";
|
||||
string svGraphDir = "maps\\graphs\\";
|
||||
|
||||
fs::path fsMeshPath(svMeshDir + g_pHostState->m_levelName + "_" + HULL_SIZE[3] + ".nm");
|
||||
fs::path fsMeshPath(svMeshDir + g_pHostState->m_levelName + "_" + SHULL_SIZE[3] + ".nm");
|
||||
fs::path fsGraphPath(svGraphDir + g_pHostState->m_levelName + ".ain");
|
||||
|
||||
int nAiNetVersion = NULL;
|
||||
|
@ -5,6 +5,7 @@
|
||||
//=============================================================================//
|
||||
#pragma once
|
||||
#include "game/server/ai_network.h"
|
||||
#include "game/server/detour_impl.h"
|
||||
|
||||
#if defined (GAMEDLL_S0) || defined (GAMEDLL_S1)
|
||||
const int AINETWORK_OFFSET = 2808;
|
||||
@ -12,15 +13,6 @@ const int AINETWORK_OFFSET = 2808;
|
||||
const int AINETWORK_OFFSET = 2840;
|
||||
#endif
|
||||
|
||||
const string HULL_SIZE[5] =
|
||||
{
|
||||
"small",
|
||||
"med_short",
|
||||
"medium",
|
||||
"large",
|
||||
"extra_large"
|
||||
};
|
||||
|
||||
/* ==== CAI_NETWORKMANAGER ============================================================================================================================================== */
|
||||
inline CMemory p_CAI_NetworkManager__ShouldRebuild = nullptr;
|
||||
inline auto CAI_NetworkManager__ShouldRebuild = p_CAI_NetworkManager__ShouldRebuild.RCast<void* (*)(void* thisptr, CAI_Network* pNetwork, void* a3, int a4)>();
|
||||
|
@ -25,6 +25,17 @@ bool dtNavMesh__isPolyReachable(dtNavMesh* thisptr, dtPolyRef poly_1, dtPolyRef
|
||||
return v_dtNavMesh__isPolyReachable(thisptr, poly_1, poly_2, hull_type);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: gets the navmesh by hull from global array [small, med_short, medium, large, extra_large]
|
||||
// input : hull -
|
||||
// Output : pointer to navmesh
|
||||
//-----------------------------------------------------------------------------
|
||||
dtNavMesh* GetNavMeshForHull(int hull)
|
||||
{
|
||||
Assert(hull >= 0 && hull <= 4); // Programmer error.
|
||||
return g_pNavMesh[hull];
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
void CAI_Utility_Attach()
|
||||
{
|
||||
|
@ -13,6 +13,26 @@ inline auto v_dtNavMesh__addTile = p_dtNavMesh__addTile.RCast<dtStatus(*)(dtNavM
|
||||
|
||||
inline CMemory p_dtNavMesh__isPolyReachable;
|
||||
inline auto v_dtNavMesh__isPolyReachable = p_dtNavMesh__isPolyReachable.RCast<bool(*)(dtNavMesh* thisptr, dtPolyRef poly_1, dtPolyRef poly_2, int hull_type)>();
|
||||
|
||||
const string SHULL_SIZE[5] =
|
||||
{
|
||||
"small",
|
||||
"med_short",
|
||||
"medium",
|
||||
"large",
|
||||
"extra_large"
|
||||
};
|
||||
|
||||
enum EHULL_SIZE
|
||||
{
|
||||
SMALL = 0,
|
||||
MED_SHORT,
|
||||
MEDIUM,
|
||||
LARGE,
|
||||
EXTRA_LARGE
|
||||
};
|
||||
|
||||
inline dtNavMesh** g_pNavMesh = nullptr;
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
class VRecast : public IDetour
|
||||
{
|
||||
@ -21,6 +41,7 @@ class VRecast : public IDetour
|
||||
spdlog::debug("| FUN: dtNavMesh::Init : {:#18x} |\n", p_dtNavMesh__Init.GetPtr());
|
||||
spdlog::debug("| FUN: dtNavMesh::addTile : {:#18x} |\n", p_dtNavMesh__addTile.GetPtr());
|
||||
spdlog::debug("| FUN: dtNavMesh::isPolyReachable : {:#18x} |\n", p_dtNavMesh__isPolyReachable.GetPtr());
|
||||
spdlog::debug("| VAR: g_pNavMesh[5] : {:#18x} |\n", reinterpret_cast<uintptr_t>(g_pNavMesh));
|
||||
spdlog::debug("+----------------------------------------------------------------+\n");
|
||||
}
|
||||
virtual void GetFun(void) const
|
||||
@ -29,11 +50,15 @@ class VRecast : public IDetour
|
||||
p_dtNavMesh__addTile = g_mGameDll.FindPatternSIMD(reinterpret_cast<rsig_t>("\x44\x89\x4C\x24\x00\x41\x55"), "xxxx?xx");
|
||||
p_dtNavMesh__isPolyReachable = g_mGameDll.FindPatternSIMD(reinterpret_cast<rsig_t>("\x48\x89\x6C\x24\x00\x48\x89\x74\x24\x00\x48\x89\x7C\x24\x00\x41\x56\x49\x63\xF1"), "xxxx?xxxx?xxxx?xxxxx");
|
||||
|
||||
v_dtNavMesh__Init = p_dtNavMesh__Init.RCast<dtStatus(*)(dtNavMesh*, unsigned char*, int)>(); /*4C 89 44 24 ? 53 41 56 48 81 EC ? ? ? ? 0F 10 11*/
|
||||
v_dtNavMesh__addTile = p_dtNavMesh__addTile.RCast<dtStatus(*)(dtNavMesh*, unsigned char*, dtMeshHeader*, int, int, dtTileRef)>(); /*44 89 4C 24 ? 41 55*/
|
||||
v_dtNavMesh__isPolyReachable = p_dtNavMesh__isPolyReachable.RCast<bool(*)(dtNavMesh*, dtPolyRef, dtPolyRef, int)>(); /*48 89 6C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 41 56 49 63 F1*/
|
||||
v_dtNavMesh__Init = p_dtNavMesh__Init.RCast<dtStatus(*)(dtNavMesh*, unsigned char*, int)>(); /*4C 89 44 24 ?? 53 41 56 48 81 EC ?? ?? ?? ?? 0F 10 11*/
|
||||
v_dtNavMesh__addTile = p_dtNavMesh__addTile.RCast<dtStatus(*)(dtNavMesh*, unsigned char*, dtMeshHeader*, int, int, dtTileRef)>(); /*44 89 4C 24 ?? 41 55*/
|
||||
v_dtNavMesh__isPolyReachable = p_dtNavMesh__isPolyReachable.RCast<bool(*)(dtNavMesh*, dtPolyRef, dtPolyRef, int)>(); /*48 89 6C 24 ?? 48 89 74 24 ?? 48 89 7C 24 ?? 41 56 49 63 F1*/
|
||||
}
|
||||
virtual void GetVar(void) const
|
||||
{
|
||||
g_pNavMesh = g_mGameDll.FindPatternSIMD(reinterpret_cast<rsig_t>("\x48\x89\x54\x24\x00\x48\x89\x4C\x24\x00\x55\x53\x56\x57\x41\x54\x41\x55\x41\x56\x41\x57\x48\x8D\x6C\x24\x00\x48\x81\xEC\x00\x00\x00\x00\x48\x8B\x02"), "xxxx?xxxx?xxxxxxxxxxxxxxxx?xxx????xxx")
|
||||
.FindPatternSelf("48 8D 3D").ResolveRelativeAddressSelf(0x3, 0x7).RCast<dtNavMesh**>();
|
||||
}
|
||||
virtual void GetVar(void) const { }
|
||||
virtual void GetCon(void) const { }
|
||||
virtual void Attach(void) const { }
|
||||
virtual void Detach(void) const { }
|
||||
|
Loading…
x
Reference in New Issue
Block a user