mirror of
https://github.com/arthurdead/proxysend.git
synced 2025-12-07 10:28:21 +00:00
check gamedata values
This commit is contained in:
parent
cba45e117e
commit
4195cf9e84
@ -150,6 +150,7 @@ static void global_send_proxy(const SendProp *pProp, const void *pStructBase, co
|
|||||||
|
|
||||||
static const CStandardSendProxies *std_proxies;
|
static const CStandardSendProxies *std_proxies;
|
||||||
|
|
||||||
|
#if SOURCE_ENGINE == SE_TF2
|
||||||
static const SendProp *m_nPlayerCond{nullptr};
|
static const SendProp *m_nPlayerCond{nullptr};
|
||||||
static const SendProp *_condition_bits{nullptr};
|
static const SendProp *_condition_bits{nullptr};
|
||||||
static const SendProp *m_nPlayerCondEx{nullptr};
|
static const SendProp *m_nPlayerCondEx{nullptr};
|
||||||
@ -166,6 +167,7 @@ static bool is_prop_cond(const SendProp *pProp)
|
|||||||
pProp == m_nPlayerCondEx3 ||
|
pProp == m_nPlayerCondEx3 ||
|
||||||
pProp == m_nPlayerCondEx4);
|
pProp == m_nPlayerCondEx4);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static prop_types guess_prop_type(const SendProp *pProp, const SendTable *pTable) noexcept
|
static prop_types guess_prop_type(const SendProp *pProp, const SendTable *pTable) noexcept
|
||||||
{
|
{
|
||||||
@ -181,12 +183,14 @@ static prop_types guess_prop_type(const SendProp *pProp, const SendTable *pTable
|
|||||||
return prop_types::unknown;
|
return prop_types::unknown;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if SOURCE_ENGINE == SE_TF2
|
||||||
if(is_prop_cond(pProp)) {
|
if(is_prop_cond(pProp)) {
|
||||||
#if defined _DEBUG
|
#if defined _DEBUG
|
||||||
printf("unsigned int (is cond)\n");
|
printf("unsigned int (is cond)\n");
|
||||||
#endif
|
#endif
|
||||||
return prop_types::unsigned_int;
|
return prop_types::unsigned_int;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
switch(pProp->GetType()) {
|
switch(pProp->GetType()) {
|
||||||
case DPT_Int: {
|
case DPT_Int: {
|
||||||
@ -1146,11 +1150,14 @@ struct callback_t final : prop_reference_t
|
|||||||
|
|
||||||
void proxy_call(const SendProp *pProp, const void *pStructBase, const void *pOldData, const void *pNewData, DVariant *pOut, int iElement, int objectID) const noexcept
|
void proxy_call(const SendProp *pProp, const void *pStructBase, const void *pOldData, const void *pNewData, DVariant *pOut, int iElement, int objectID) const noexcept
|
||||||
{
|
{
|
||||||
|
#if SOURCE_ENGINE == SE_TF2
|
||||||
if(is_prop_cond(pProp)) {
|
if(is_prop_cond(pProp)) {
|
||||||
DVariant ignore{};
|
DVariant ignore{};
|
||||||
restore->pRealProxy(nullptr, nullptr, pOldData, &ignore, -1, -1);
|
restore->pRealProxy(nullptr, nullptr, pOldData, &ignore, -1, -1);
|
||||||
std_proxies->m_UInt32ToInt32(pProp, pStructBase, pNewData, pOut, iElement, objectID);
|
std_proxies->m_UInt32ToInt32(pProp, pStructBase, pNewData, pOut, iElement, objectID);
|
||||||
} else {
|
} else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
restore->pRealProxy(pProp, pStructBase, pNewData, pOut, iElement, objectID);
|
restore->pRealProxy(pProp, pStructBase, pNewData, pOut, iElement, objectID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1559,8 +1566,6 @@ DETOUR_DECL_STATIC3(SV_ComputeClientPacks, void, int, clientCount, CGameClient *
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sv_parallel_sendsnapshot->SetValue(true);
|
|
||||||
|
|
||||||
const bool any_per_client_hook{slots.size() > 0 && entities.size() > 0};
|
const bool any_per_client_hook{slots.size() > 0 && entities.size() > 0};
|
||||||
|
|
||||||
#if defined _DEBUG && 0
|
#if defined _DEBUG && 0
|
||||||
@ -1581,10 +1586,13 @@ DETOUR_DECL_STATIC3(SV_ComputeClientPacks, void, int, clientCount, CGameClient *
|
|||||||
SendTable_CalcDelta_detour->DisableDetour();
|
SendTable_CalcDelta_detour->DisableDetour();
|
||||||
}
|
}
|
||||||
|
|
||||||
sv_parallel_packentities->SetValue(
|
const bool parallel_pack{
|
||||||
!any_hook &&
|
!any_hook &&
|
||||||
g_Sample.is_parallel_pack_allowed()
|
g_Sample.is_parallel_pack_allowed()
|
||||||
);
|
};
|
||||||
|
|
||||||
|
sv_parallel_sendsnapshot->SetValue(true);
|
||||||
|
sv_parallel_packentities->SetValue(parallel_pack);
|
||||||
|
|
||||||
in_compute_packs = true;
|
in_compute_packs = true;
|
||||||
DETOUR_STATIC_CALL(SV_ComputeClientPacks)(clientCount, clients, snapshot);
|
DETOUR_STATIC_CALL(SV_ComputeClientPacks)(clientCount, clients, snapshot);
|
||||||
@ -1918,28 +1926,76 @@ static CDetour *CGameServer_SendClientMessages_detour{nullptr};
|
|||||||
|
|
||||||
bool Sample::SDK_OnLoad(char *error, size_t maxlen, bool late) noexcept
|
bool Sample::SDK_OnLoad(char *error, size_t maxlen, bool late) noexcept
|
||||||
{
|
{
|
||||||
gameconfs->LoadGameConfigFile("proxysend", &gameconf, nullptr, 0);
|
if(!gameconfs->LoadGameConfigFile("proxysend", &gameconf, error, maxlen)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
IGameConfig *coregameconf{nullptr};
|
IGameConfig *coregameconf{nullptr};
|
||||||
gameconfs->LoadGameConfigFile("core.games/common.games", &coregameconf, nullptr, 0);
|
if(!gameconfs->LoadGameConfigFile("core.games/common.games", &coregameconf, error, maxlen)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
coregameconf->GetOffset("CSendPropExtra_UtlVector::m_Offset", &utlVecOffsetOffset);
|
coregameconf->GetOffset("CSendPropExtra_UtlVector::m_Offset", &utlVecOffsetOffset);
|
||||||
|
|
||||||
gameconfs->CloseGameConfigFile(coregameconf);
|
gameconfs->CloseGameConfigFile(coregameconf);
|
||||||
|
|
||||||
CDetourManager::Init(smutils->GetScriptingEngine(), gameconf);
|
|
||||||
|
|
||||||
gameconf->GetOffset("CBaseClient::UpdateSendState", &CBaseClient_UpdateSendState_idx);
|
gameconf->GetOffset("CBaseClient::UpdateSendState", &CBaseClient_UpdateSendState_idx);
|
||||||
|
if(CBaseClient_UpdateSendState_idx == -1) {
|
||||||
|
snprintf(error, maxlen, "could not get CBaseClient::UpdateSendState offset");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
gameconf->GetOffset("CBaseClient::SendSnapshot", &CBaseClient_SendSnapshot_idx);
|
gameconf->GetOffset("CBaseClient::SendSnapshot", &CBaseClient_SendSnapshot_idx);
|
||||||
|
if(CBaseClient_SendSnapshot_idx == -1) {
|
||||||
|
snprintf(error, maxlen, "could not get CBaseClient::SendSnapshot offset");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
gameconf->GetMemSig("CGameClient::GetSendFrame", &CGameClient_GetSendFrame_ptr);
|
gameconf->GetMemSig("CGameClient::GetSendFrame", &CGameClient_GetSendFrame_ptr);
|
||||||
|
if(CGameClient_GetSendFrame_ptr == nullptr) {
|
||||||
|
snprintf(error, maxlen, "could not get CGameClient::GetSendFrame address");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
CDetourManager::Init(smutils->GetScriptingEngine(), gameconf);
|
||||||
|
|
||||||
SendTable_CalcDelta_detour = DETOUR_CREATE_STATIC(SendTable_CalcDelta, "SendTable_CalcDelta");
|
SendTable_CalcDelta_detour = DETOUR_CREATE_STATIC(SendTable_CalcDelta, "SendTable_CalcDelta");
|
||||||
|
if(!SendTable_CalcDelta_detour) {
|
||||||
|
snprintf(error, maxlen, "could not create SendTable_CalcDelta detour");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
SendTable_Encode_detour = DETOUR_CREATE_STATIC(SendTable_Encode, "SendTable_Encode");
|
SendTable_Encode_detour = DETOUR_CREATE_STATIC(SendTable_Encode, "SendTable_Encode");
|
||||||
|
if(!SendTable_Encode_detour) {
|
||||||
|
snprintf(error, maxlen, "could not create SendTable_Encode detour");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
SV_ComputeClientPacks_detour = DETOUR_CREATE_STATIC(SV_ComputeClientPacks, "SV_ComputeClientPacks");
|
SV_ComputeClientPacks_detour = DETOUR_CREATE_STATIC(SV_ComputeClientPacks, "SV_ComputeClientPacks");
|
||||||
SV_ComputeClientPacks_detour->EnableDetour();
|
if(!SV_ComputeClientPacks_detour) {
|
||||||
|
snprintf(error, maxlen, "could not create SV_ComputeClientPacks detour");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
CGameServer_SendClientMessages_detour = DETOUR_CREATE_MEMBER(CGameServer_SendClientMessages, "CGameServer::SendClientMessages");
|
||||||
|
if(!CGameServer_SendClientMessages_detour) {
|
||||||
|
snprintf(error, maxlen, "could not create CGameServer::SendClientMessages detour");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
CFrameSnapshotManager_GetPackedEntity_detour = DETOUR_CREATE_MEMBER(CFrameSnapshotManager_GetPackedEntity, "CFrameSnapshotManager::GetPackedEntity");
|
||||||
|
if(!CFrameSnapshotManager_GetPackedEntity_detour) {
|
||||||
|
snprintf(error, maxlen, "could not create CFrameSnapshotManager::GetPackedEntity detour");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
CBaseServer_WriteDeltaEntities_detour = DETOUR_CREATE_MEMBER(CBaseServer_WriteDeltaEntities, "CBaseServer::WriteDeltaEntities");
|
||||||
|
if(!CBaseServer_WriteDeltaEntities_detour) {
|
||||||
|
snprintf(error, maxlen, "could not create CBaseServer::WriteDeltaEntities detour");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
//SV_PackEntity_detour = DETOUR_CREATE_STATIC(SV_PackEntity, "SV_PackEntity");
|
//SV_PackEntity_detour = DETOUR_CREATE_STATIC(SV_PackEntity, "SV_PackEntity");
|
||||||
//SV_PackEntity_detour->EnableDetour();
|
//SV_PackEntity_detour->EnableDetour();
|
||||||
|
|
||||||
@ -1948,12 +2004,10 @@ bool Sample::SDK_OnLoad(char *error, size_t maxlen, bool late) noexcept
|
|||||||
|
|
||||||
//InvalidateSharedEdictChangeInfos_detour = DETOUR_CREATE_STATIC(InvalidateSharedEdictChangeInfos, "InvalidateSharedEdictChangeInfos");
|
//InvalidateSharedEdictChangeInfos_detour = DETOUR_CREATE_STATIC(InvalidateSharedEdictChangeInfos, "InvalidateSharedEdictChangeInfos");
|
||||||
//InvalidateSharedEdictChangeInfos_detour->EnableDetour();
|
//InvalidateSharedEdictChangeInfos_detour->EnableDetour();
|
||||||
|
#endif
|
||||||
|
|
||||||
CGameServer_SendClientMessages_detour = DETOUR_CREATE_MEMBER(CGameServer_SendClientMessages, "CGameServer::SendClientMessages");
|
|
||||||
CGameServer_SendClientMessages_detour->EnableDetour();
|
CGameServer_SendClientMessages_detour->EnableDetour();
|
||||||
|
SV_ComputeClientPacks_detour->EnableDetour();
|
||||||
CFrameSnapshotManager_GetPackedEntity_detour = DETOUR_CREATE_MEMBER(CFrameSnapshotManager_GetPackedEntity, "CFrameSnapshotManager::GetPackedEntity");
|
|
||||||
CBaseServer_WriteDeltaEntities_detour = DETOUR_CREATE_MEMBER(CBaseServer_WriteDeltaEntities, "CBaseServer::WriteDeltaEntities");
|
|
||||||
|
|
||||||
sharesys->AddDependency(myself, "sdkhooks.ext", true, true);
|
sharesys->AddDependency(myself, "sdkhooks.ext", true, true);
|
||||||
|
|
||||||
@ -1965,6 +2019,7 @@ bool Sample::SDK_OnLoad(char *error, size_t maxlen, bool late) noexcept
|
|||||||
|
|
||||||
sharesys->AddNatives(myself, natives);
|
sharesys->AddNatives(myself, natives);
|
||||||
|
|
||||||
|
#if SOURCE_ENGINE == SE_TF2
|
||||||
sm_sendprop_info_t info{};
|
sm_sendprop_info_t info{};
|
||||||
gamehelpers->FindSendPropInfo("CTFPlayer", "m_nPlayerCond", &info);
|
gamehelpers->FindSendPropInfo("CTFPlayer", "m_nPlayerCond", &info);
|
||||||
m_nPlayerCond = info.prop;
|
m_nPlayerCond = info.prop;
|
||||||
@ -1978,6 +2033,7 @@ bool Sample::SDK_OnLoad(char *error, size_t maxlen, bool late) noexcept
|
|||||||
m_nPlayerCondEx3 = info.prop;
|
m_nPlayerCondEx3 = info.prop;
|
||||||
gamehelpers->FindSendPropInfo("CTFPlayer", "m_nPlayerCondEx4", &info);
|
gamehelpers->FindSendPropInfo("CTFPlayer", "m_nPlayerCondEx4", &info);
|
||||||
m_nPlayerCondEx4 = info.prop;
|
m_nPlayerCondEx4 = info.prop;
|
||||||
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user