Compare commits

..

No commits in common. "master" and "0.1.0.0" have entirely different histories.

9 changed files with 2200 additions and 2587 deletions

View File

@ -173,11 +173,13 @@ 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',
@ -186,11 +188,6 @@ 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_tf2.inc' ]
[ 'proxysend.inc', ]
)
# GameData files

File diff suppressed because it is too large Load Diff

View File

@ -48,13 +48,10 @@
class Sample final : public SDKExtension, public IPluginsListener, public ISMEntityListener, public IConCommandBaseAccessor, public proxysend
{
public:
using pack_ent_listeners_t = std::vector<const parallel_pack_listener *>;
pack_ent_listeners_t pack_ent_listeners{};
std::vector<const parallel_pack_listener *> 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;
bool remove_serverclass_from_cache(ServerClass *ptr) noexcept override final;
prop_types guess_prop_type(const SendProp *prop, const SendTable *table) const noexcept override final;
bool is_parallel_pack_allowed() const noexcept;
@ -63,9 +60,6 @@ public:
virtual void OnPluginUnloaded(IPlugin *plugin) noexcept override final;
virtual void OnEntityDestroyed(CBaseEntity *pEntity) noexcept override final;
virtual void NotifyInterfaceDrop(SMInterface *pInterface);
virtual bool QueryInterfaceDrop(SMInterface *pInterface);
/**
* @brief This is called after the initial loading sequence has been processed.
*
@ -99,7 +93,7 @@ public:
* @param maxlen Size of error message buffer.
* @return True if working, false otherwise.
*/
virtual bool QueryRunning(char *error, size_t maxlen);
//virtual bool QueryRunning(char *error, size_t maxlen);
public:
#if defined SMEXT_CONF_METAMOD
/**

View File

@ -3,7 +3,7 @@
#include <IShareSys.h>
#define SMINTERFACE_PROXYSEND_NAME "proxysend"
#define SMINTERFACE_PROXYSEND_VERSION 3
#define SMINTERFACE_PROXYSEND_VERSION 1
class proxysend : public SourceMod::SMInterface
{
@ -16,34 +16,9 @@ public:
class parallel_pack_listener
{
public:
virtual bool is_allowed() const noexcept { return true; }
virtual void pre_pack_entity(CBaseEntity *pEntity) const noexcept {}
virtual void pre_write_deltas() const noexcept {}
virtual void post_write_deltas() const noexcept {}
virtual bool is_allowed() const noexcept = 0;
};
virtual bool add_listener(const parallel_pack_listener *ptr) noexcept = 0;
virtual bool remove_listener(const parallel_pack_listener *ptr) noexcept = 0;
virtual bool remove_serverclass_from_cache(ServerClass *ptr) noexcept = 0;
enum class prop_types : unsigned char
{
int_,
short_,
char_,
unsigned_int,
unsigned_short,
unsigned_char,
float_,
vector,
qangle,
cstring,
ehandle,
bool_,
color32_,
tstring,
unknown
};
virtual prop_types guess_prop_type(const SendProp *prop, const SendTable *table) const noexcept = 0;
};

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.8"
#define SMEXT_CONF_VERSION "0.1.0.0"
#define SMEXT_CONF_AUTHOR "Arthurdead"
#define SMEXT_CONF_URL ""
#define SMEXT_CONF_LOGTAG "PROXYSEND"

View File

@ -1,80 +1,70 @@
"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"
}
}
}
}
"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"
}
"CBaseServer::WriteDeltaEntities"
{
"library" "engine"
"linux" "@_ZN11CBaseServer18WriteDeltaEntitiesEP11CBaseClientP12CClientFrameS3_R8bf_write"
}
"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_"
}
}
}
}

View File

@ -3,6 +3,7 @@
#endif
#define __PROXYSEND_INC
#include <tf2>
#include <sdktools>
typeset proxysend_callbacks
@ -26,9 +27,58 @@ 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);
#if defined _tf2_included || defined _tf2_stocks_included
#include <proxysend_tf2>
#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);
}
}
#if !defined REQUIRE_EXTENSIONS
public __ext_proxysend_SetNTVOptional()
@ -52,4 +102,4 @@ public Extension __ext_proxysend =
#else
required = 0,
#endif
};
};

View File

@ -1,63 +0,0 @@
#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);
}
}