Compare commits

...

12 Commits

Author SHA1 Message Date
arthurdead
7b493af742 css 2023-09-16 17:30:33 -03:00
arthurdead
09aa70e774 memset 2023-03-05 04:03:48 -03:00
arthurdead
a4cb9f5fec i merged the pr wrong 2023-03-05 02:42:08 -03:00
arthurdead
eefac413f7 Merge branch 'master' of https://github.com/arthurdead/proxysend.git 2023-03-05 02:26:31 -03:00
arthurdead
5e73c21103 store refs as unsigned long instead of int, ignore hltv, replay servers and clients, fix opaque_ptr 2023-03-05 02:25:40 -03:00
Arthurdead
1240e21fff
Merge pull request #3 from sapphonie/master
fix hooked edicts not getting set to FL_EDICT_CHANGED, other tweaks
2023-03-05 02:22:34 -03:00
sappho
db5b53b09e
maintainer revert requests 2023-03-05 00:21:11 -05:00
sappho
596e19892d comment so ppl know who to blame when something explodes somehow 2023-03-04 06:33:32 -05:00
sappho
1a0bae1814 fix hooked edicts not getting set to FL_EDICT_CHANGED (fixes inconsistent proxy behavior), fix mismatched delete[], null init all vars 2023-03-04 06:30:50 -05:00
arthurdead
5c1f39064b comment sv_parallel_sendsnapshot, detect string_t, mark edict as changed after hooking/unhooking 2023-02-15 22:50:16 -03:00
arthurdead
ea36957b1e only call IndexToReference inside SendTable_CalcDelta once 2022-11-21 11:17:30 -03:00
arthurdead
849fc94958 support c++14 2022-11-19 05:57:59 -03:00
8 changed files with 2554 additions and 2372 deletions

View File

@ -173,13 +173,11 @@ class ExtensionConfig(object):
'-Wno-unused',
'-Wno-switch',
'-Wno-array-bounds',
'-Wno-register',
'-msse',
'-m32',
'-fvisibility=hidden',
]
cxx.cxxflags += [
'-std=gnu++2a',
'-fno-exceptions',
'-fno-threadsafe-statics',
'-Wno-non-virtual-dtor',
@ -188,6 +186,11 @@ class ExtensionConfig(object):
]
cxx.linkflags += ['-m32']
if cxx.version >= 'clang-5':
cxx.cxxflags += ['-Wno-register','-std=c++17']
else:
cxx.cxxflags += ['-std=c++14']
have_gcc = cxx.vendor == 'gcc'
have_clang = cxx.vendor == 'clang'
if cxx.version >= 'clang-3.6':

View File

@ -30,7 +30,7 @@ def CopyFiles(src, dest, files):
# Include files
CopyFiles('sourcemod/scripting/include', 'addons/sourcemod/scripting/include',
[ 'proxysend.inc', ]
[ 'proxysend.inc', 'proxysend_tf2.inc' ]
)
# GameData files

File diff suppressed because it is too large Load Diff

View File

@ -48,7 +48,8 @@
class Sample final : public SDKExtension, public IPluginsListener, public ISMEntityListener, public IConCommandBaseAccessor, public proxysend
{
public:
std::vector<const parallel_pack_listener *> pack_ent_listeners;
using pack_ent_listeners_t = std::vector<const parallel_pack_listener *>;
pack_ent_listeners_t pack_ent_listeners{};
bool add_listener(const parallel_pack_listener *ptr) noexcept override final;
bool remove_listener(const parallel_pack_listener *ptr) noexcept override final;

View File

@ -40,7 +40,7 @@
/* Basic information exposed publicly */
#define SMEXT_CONF_NAME "proxysend"
#define SMEXT_CONF_DESCRIPTION "proxysend"
#define SMEXT_CONF_VERSION "0.1.0.6"
#define SMEXT_CONF_VERSION "0.1.0.8"
#define SMEXT_CONF_AUTHOR "Arthurdead"
#define SMEXT_CONF_URL ""
#define SMEXT_CONF_LOGTAG "PROXYSEND"

View File

@ -1,65 +1,80 @@
"Games"
{
"tf"
{
"Offsets"
{
"CBaseClient::UpdateSendState"
{
"linux" "46"
}
"CBaseClient::SendSnapshot"
{
"linux" "52"
}
}
"Signatures"
{
"SendTable_CalcDelta"
{
"library" "engine"
"linux" "@_Z19SendTable_CalcDeltaPK9SendTablePKviS3_iPiii"
}
"SendTable_Encode"
{
"library" "engine"
"linux" "@_Z16SendTable_EncodePK9SendTablePKvP8bf_writeiP10CUtlMemoryI20CSendProxyRecipientsiEb"
}
"SV_ComputeClientPacks"
{
"library" "engine"
"linux" "@_Z21SV_ComputeClientPacksiPP11CGameClientP14CFrameSnapshot"
}
"CGameServer::SendClientMessages"
{
"library" "engine"
"linux" "@_ZN11CGameServer18SendClientMessagesEb"
}
"CFrameSnapshotManager::GetPackedEntity"
{
"library" "engine"
"linux" "@_ZN21CFrameSnapshotManager15GetPackedEntityEP14CFrameSnapshoti"
}
"CGameClient::GetSendFrame"
{
"library" "engine"
"linux" "@_ZN11CGameClient12GetSendFrameEv"
}
"SV_PackEntity"
{
"library" "engine"
"linux" "@_ZL13SV_PackEntityiP7edict_tP11ServerClassP14CFrameSnapshot"
}
"InvalidateSharedEdictChangeInfos"
{
"library" "engine"
"linux" "@_Z32InvalidateSharedEdictChangeInfosv"
}
"PackWork_t::Process"
{
"library" "engine"
"linux" "@_ZN10PackWork_t7ProcessERS_"
}
}
}
}
"Games"
{
"#default"
{
"Offsets"
{
"CBaseClient::UpdateSendState"
{
"linux" "46"
}
"CBaseClient::SendSnapshot"
{
"linux" "52"
}
}
"Signatures"
{
"SendTable_CalcDelta"
{
"library" "engine"
"linux" "@_Z19SendTable_CalcDeltaPK9SendTablePKviS3_iPiii"
}
"SendTable_Encode"
{
"library" "engine"
"linux" "@_Z16SendTable_EncodePK9SendTablePKvP8bf_writeiP10CUtlMemoryI20CSendProxyRecipientsiEb"
}
"SV_ComputeClientPacks"
{
"library" "engine"
"linux" "@_Z21SV_ComputeClientPacksiPP11CGameClientP14CFrameSnapshot"
}
"CGameServer::SendClientMessages"
{
"library" "engine"
"linux" "@_ZN11CGameServer18SendClientMessagesEb"
}
"CFrameSnapshotManager::GetPackedEntity"
{
"library" "engine"
"linux" "@_ZN21CFrameSnapshotManager15GetPackedEntityEP14CFrameSnapshoti"
}
"CGameClient::GetSendFrame"
{
"library" "engine"
"linux" "@_ZN11CGameClient12GetSendFrameEv"
}
"SV_PackEntity"
{
"library" "engine"
"linux" "@_ZL13SV_PackEntityiP7edict_tP11ServerClassP14CFrameSnapshot"
}
"InvalidateSharedEdictChangeInfos"
{
"library" "engine"
"linux" "@_Z32InvalidateSharedEdictChangeInfosv"
}
"PackWork_t::Process"
{
"library" "engine"
"linux" "@_ZN10PackWork_t7ProcessERS_"
}
"SendProxy_StringT_To_String"
{
"library" "server"
"linux" "@_Z27SendProxy_StringT_To_StringPK8SendPropPKvS3_P8DVariantii"
}
"SendProxy_Color32ToInt"
{
"library" "server"
"linux" "@_Z22SendProxy_Color32ToIntPK8SendPropPKvS3_P8DVariantii"
}
"SendProxy_EHandleToInt"
{
"library" "server"
"linux" "@_Z22SendProxy_EHandleToIntPK8SendPropPKvS3_P8DVariantii"
}
}
}
}

View File

@ -3,7 +3,6 @@
#endif
#define __PROXYSEND_INC
#include <tf2>
#include <sdktools>
typeset proxysend_callbacks
@ -12,7 +11,6 @@ typeset proxysend_callbacks
function Action (int entity, const char[] prop, RoundState &value, int element, int client);
function Action (int entity, const char[] prop, RenderMode &value, int element, int client);
function Action (int entity, const char[] prop, RenderFx &value, int element, int client);
function Action (int entity, const char[] prop, TFClassType &value, int element, int client);
function Action (int entity, const char[] prop, bool &value, int element, int client);
@ -28,58 +26,9 @@ typeset proxysend_callbacks
native void proxysend_hook(int entity, const char[] prop, proxysend_callbacks callback, bool per_client);
native void proxysend_unhook(int entity, const char[] prop, proxysend_callbacks callback);
stock int get_bit_for_cond(TFCond cond)
{
int icond = view_as<int>(cond);
switch(icond / 32) {
case 0: return (1 << icond);
case 1: return (1 << (icond - 32));
case 2: return (1 << (icond - 64));
case 3: return (1 << (icond - 96));
case 4: return (1 << (icond - 128));
default: ThrowError("Invalid TFCond value %d", icond);
}
return 0;
}
stock void get_prop_name_for_cond(TFCond cond, char[] name, int len)
{
int icond = view_as<int>(cond);
switch(icond / 32) {
case 0: strcopy(name, len, "m_nPlayerCond");
case 1: strcopy(name, len, "m_nPlayerCondEx");
case 2: strcopy(name, len, "m_nPlayerCondEx2");
case 3: strcopy(name, len, "m_nPlayerCondEx3");
case 4: strcopy(name, len, "m_nPlayerCondEx4");
default: ThrowError("Invalid TFCond value %d", icond);
}
}
stock void proxysend_hook_cond(int entity, TFCond cond, proxysend_callbacks callback, bool per_client)
{
int icond = view_as<int>(cond);
switch(icond / 32) {
case 0: proxysend_hook(entity, "m_nPlayerCond", callback, per_client);
case 1: proxysend_hook(entity, "m_nPlayerCondEx", callback, per_client);
case 2: proxysend_hook(entity, "m_nPlayerCondEx2", callback, per_client);
case 3: proxysend_hook(entity, "m_nPlayerCondEx3", callback, per_client);
case 4: proxysend_hook(entity, "m_nPlayerCondEx4", callback, per_client);
default: ThrowError("Invalid TFCond value %d", icond);
}
}
stock void proxysend_unhook_cond(int entity, TFCond cond, proxysend_callbacks callback)
{
int icond = view_as<int>(cond);
switch(icond / 32) {
case 0: proxysend_unhook(entity, "m_nPlayerCond", callback);
case 1: proxysend_unhook(entity, "m_nPlayerCondEx", callback);
case 2: proxysend_unhook(entity, "m_nPlayerCondEx2", callback);
case 3: proxysend_unhook(entity, "m_nPlayerCondEx3", callback);
case 4: proxysend_unhook(entity, "m_nPlayerCondEx4", callback);
default: ThrowError("Invalid TFCond value %d", icond);
}
}
#if defined _tf2_included || defined _tf2_stocks_included
#include <proxysend_tf2>
#endif
#if !defined REQUIRE_EXTENSIONS
public __ext_proxysend_SetNTVOptional()
@ -103,4 +52,4 @@ public Extension __ext_proxysend =
#else
required = 0,
#endif
};
};

View File

@ -0,0 +1,63 @@
#if defined __PROXYSEND_TF2_INC
#endinput
#endif
#define __PROXYSEND_TF2_INC
#include <tf2>
#if !defined __PROXYSEND_INC
#include <proxysend>
#endif
stock int get_bit_for_cond(TFCond cond)
{
int icond = view_as<int>(cond);
switch(icond / 32) {
case 0: return (1 << icond);
case 1: return (1 << (icond - 32));
case 2: return (1 << (icond - 64));
case 3: return (1 << (icond - 96));
case 4: return (1 << (icond - 128));
default: ThrowError("Invalid TFCond value %d", icond);
}
return 0;
}
stock void get_prop_name_for_cond(TFCond cond, char[] name, int len)
{
int icond = view_as<int>(cond);
switch(icond / 32) {
case 0: strcopy(name, len, "m_nPlayerCond");
case 1: strcopy(name, len, "m_nPlayerCondEx");
case 2: strcopy(name, len, "m_nPlayerCondEx2");
case 3: strcopy(name, len, "m_nPlayerCondEx3");
case 4: strcopy(name, len, "m_nPlayerCondEx4");
default: ThrowError("Invalid TFCond value %d", icond);
}
}
stock void proxysend_hook_cond(int entity, TFCond cond, proxysend_callbacks callback, bool per_client)
{
int icond = view_as<int>(cond);
switch(icond / 32) {
case 0: proxysend_hook(entity, "m_nPlayerCond", callback, per_client);
case 1: proxysend_hook(entity, "m_nPlayerCondEx", callback, per_client);
case 2: proxysend_hook(entity, "m_nPlayerCondEx2", callback, per_client);
case 3: proxysend_hook(entity, "m_nPlayerCondEx3", callback, per_client);
case 4: proxysend_hook(entity, "m_nPlayerCondEx4", callback, per_client);
default: ThrowError("Invalid TFCond value %d", icond);
}
}
stock void proxysend_unhook_cond(int entity, TFCond cond, proxysend_callbacks callback)
{
int icond = view_as<int>(cond);
switch(icond / 32) {
case 0: proxysend_unhook(entity, "m_nPlayerCond", callback);
case 1: proxysend_unhook(entity, "m_nPlayerCondEx", callback);
case 2: proxysend_unhook(entity, "m_nPlayerCondEx2", callback);
case 3: proxysend_unhook(entity, "m_nPlayerCondEx3", callback);
case 4: proxysend_unhook(entity, "m_nPlayerCondEx4", callback);
default: ThrowError("Invalid TFCond value %d", icond);
}
}