Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion libraries/hl2sdk-cs2
Submodule hl2sdk-cs2 updated 54 files
+41 −0 common/netmessages.proto
+1 −0 common/network_connection.proto
+574 −574 game/shared/base_gcmessages.proto
+3 −1 game/shared/cs/cs_usercmd.proto
+41 −0 game/shared/cstrike15/cstrike15_gcmessages.proto
+1 −0 game/shared/cstrike15/cstrike15_usermessages.proto
+0 −13 game/shared/gamesystems/spawngroup_manager.h
+19 −0 networksystem/networksystem_protomessages.proto
+1 −1 public/cdll_int.h
+2 −1 public/const.h
+14 −14 public/datamap.h
+7 −2 public/eiface.h
+2 −0 public/engine/IEngineService.h
+84 −0 public/engine/hoststate.h
+2 −0 public/gametrace.h
+203 −37 public/icvar.h
+11 −2 public/iserver.h
+8 −2 public/networksystem/netmessage.h
+1 −1 public/particles/particles.h
+8 −9 public/schemasystem/schemasystem.h
+8 −7 public/schemasystem/schematypes.h
+12 −29 public/soundflags.h
+9 −3 public/steam/isteamugc.h
+84 −0 public/tier0/annotations.h
+28 −4 public/tier0/commonmacros.h
+3 −5 public/tier0/fasttimer.h
+1 −1 public/tier0/icommandline.h
+472 −354 public/tier0/platform.h
+80 −67 public/tier1/IKeyValuesSystem.h
+8 −7 public/tier1/KeyValues.h
+123 −134 public/tier1/bufferstring.h
+2 −2 public/tier1/callqueue.h
+1,058 −727 public/tier1/convar.h
+0 −54 public/tier1/convar_serverbounded.h
+19 −20 public/tier1/exprevaluator.h
+130 −130 public/tier1/iprocessutils.h
+1,439 −1,439 public/tier1/jobthread.h
+155 −37 public/tier1/keyvalues3.h
+113 −113 public/tier1/random.h
+499 −100 public/tier1/strtools.h
+14 −8 public/tier1/utlbuffer.h
+4 −0 public/tier1/utlcommon.h
+1 −1 public/tier1/utlleanvector.h
+1 −1 public/tier1/utlmap.h
+4 −1 public/tier2/tier2.h
+58 −58 public/variant.h
+3 −3 public/vscript/ivscript.h
+0 −25 public/vstdlib/cvar.h
+0 −16 public/vstdlib/ieventsystem.h
+0 −51 public/vstdlib/pch_vstdlib.h
+0 −125 public/vstdlib/vcover.h
+0 −33 public/vstdlib/vstdlib.h
+340 −918 tier1/convar.cpp
+147 −80 tier1/keyvalues3.cpp
2 changes: 1 addition & 1 deletion libraries/metamod-source
Submodule metamod-source updated 72 files
+6 −4 .github/workflows/ci.yml
+1 −0 .gitignore
+382 −374 AMBuildScript
+1 −1 README.md
+8 −6 core/AMBuilder
+1 −1 core/IPluginManager.h
+54 −7 core/ISmmAPI.h
+52 −8 core/ISmmPlugin.h
+3 −2 core/ISmmPluginExt.h
+4 −3 core/gamedll_bridge.cpp
+141 −40 core/metamod.cpp
+14 −9 core/metamod.h
+6 −5 core/metamod_console.cpp
+40 −0 core/metamod_convar.h
+5 −5 core/metamod_oslink.cpp
+2 −2 core/metamod_oslink.h
+15 −15 core/metamod_plugins.cpp
+13 −13 core/metamod_plugins.h
+23 −6 core/metamod_provider.h
+3 −2 core/metamod_util.cpp
+2 −1 core/metamod_util.h
+8 −8 core/provider/provider_base.cpp
+9 −5 core/provider/provider_base.h
+21 −11 core/provider/source/provider_source.cpp
+7 −4 core/provider/source/provider_source.h
+5 −5 core/provider/source/provider_source_console.cpp
+56 −40 core/provider/source2/provider_source2.cpp
+10 −5 core/provider/source2/provider_source2.h
+8 −1 core/sourcehook/generate/sourcehook.hxx
+129 −0 core/sourcehook/sh_asm.h
+586 −0 core/sourcehook/sh_asm_x86_64.h
+0 −1 core/sourcehook/sh_list.h
+2 −0 core/sourcehook/sh_memory.h
+1 −0 core/sourcehook/sh_vector.h
+31 −1 core/sourcehook/sourcehook.cpp
+8 −1 core/sourcehook/sourcehook.h
+36 −1,968 core/sourcehook/sourcehook_hookmangen.cpp
+13 −230 core/sourcehook/sourcehook_hookmangen.h
+1,971 −0 core/sourcehook/sourcehook_hookmangen_x86.cpp
+120 −2 core/sourcehook/sourcehook_hookmangen_x86.h
+1,434 −0 core/sourcehook/sourcehook_hookmangen_x86_64.cpp
+91 −0 core/sourcehook/sourcehook_hookmangen_x86_64.h
+29 −1 core/sourcehook/sourcehook_impl.h
+2 −0 core/sourcehook/sourcehook_impl_chook.h
+2 −0 core/sourcehook/sourcehook_impl_chookidman.h
+13 −0 core/sourcehook/sourcehook_impl_chookmaninfo.cpp
+1 −0 core/sourcehook/sourcehook_impl_ciface.h
+5 −0 core/sourcehook/sourcehook_impl_cproto.h
+2 −0 core/sourcehook/sourcehook_impl_cvfnptr.h
+15 −2 core/sourcehook/test/AMBuilder
+0 −0 core/sourcehook/test/version.rc
+7 −7 core/vsp_bridge.cpp
+1 −1 hl2sdk-manifests
+74 −70 loader/gamedll.cpp
+37 −45 loader/loader.cpp
+1 −0 loader/loader.h
+2 −0 loader/loader_bridge.h
+7 −6 loader/serverplugin.cpp
+44 −0 loader/test/AMBuilder
+48 −0 loader/test/README.md
+68 −0 loader/test/determinebackends1.cpp
+66 −0 loader/test/main.cpp
+36 −0 loader/test/testutility.cpp
+0 −0 loader/test/version.rc
+8 −7 loader/utility.cpp
+1 −1 loader/utility.h
+2 −2 public/metamod_version.h
+4 −2 pushbuild.txt
+2 −2 samples/s1_sample_mm/sample_mm.cpp
+11 −5 samples/s2_sample_mm/AMBuildScript
+87 −6 samples/s2_sample_mm/sample_mm.cpp
+2 −2 versionlib/versionlib.cpp
1 change: 0 additions & 1 deletion src/core/gameconfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
#include <fstream>

#include "log.h"
#include "metamod_oslink.h"

namespace counterstrikesharp {

Expand Down
4 changes: 0 additions & 4 deletions src/core/globals.h
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
#pragma once

#define protected public
#define private public
#include <tier1/convar.h>
#undef protected
#undef private

#include <sourcehook/sourcehook.h>

Expand Down
70 changes: 27 additions & 43 deletions src/core/managers/con_command_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ CON_COMMAND(dump_schema, "dump schema symbols")
output << std::setw(2) << j << std::endl;
}

SH_DECL_HOOK3_void(ICvar, DispatchConCommand, SH_NOATTRIB, 0, ConCommandHandle, const CCommandContext&, const CCommand&);
SH_DECL_HOOK3_void(ICvar, DispatchConCommand, SH_NOATTRIB, 0, ConCommandRef, const CCommandContext&, const CCommand&);

ConCommandInfo::ConCommandInfo()
{
Expand Down Expand Up @@ -222,45 +222,31 @@ void UnlockConVars()
{
int unhiddenConVars = 0;

ConVar* currentCvar = nullptr;
ConVarHandle currentCvarHandle;
currentCvarHandle.Set(0);

do
for (ConVarRefAbstract ref(ConVarRef((uint16)0)); ref.IsValidRef(); ref = ConVarRefAbstract(ConVarRef(ref.GetAccessIndex() + 1)))
{
currentCvar = globals::cvars->GetConVar(currentCvarHandle);

currentCvarHandle.Set(currentCvarHandle.Get() + 1);

if (!currentCvar) continue;

if (!(currentCvar->flags & flagsToRemove)) continue;
if (!ref.IsFlagSet(flagsToRemove)) continue;

currentCvar->flags &= ~flagsToRemove;
ref.RemoveFlags(flagsToRemove);
unhiddenConVars++;
} while (currentCvar);
}
}

void UnlockConCommands()
{
int unhiddenConCommands = 0;

ConCommand* currentConCommand = nullptr;
ConCommand* invalidConCommand = globals::cvars->GetCommand(ConCommandHandle());
ConCommandHandle conCommandHandle;
conCommandHandle.Set(0);
ConCommandData* currentConCommand = nullptr;
ConCommandData* invalidConCommand = globals::cvars->GetConCommandData(ConCommandRef());
ConCommandRef ref = ConCommandRef((uint16)0);

do
ConCommandData* data = g_pCVar->GetConCommandData(ConCommandRef());
for (ConCommandRef ref = ConCommandRef((uint16)0); ref.GetRawData() != data; ref = ConCommandRef(ref.GetAccessIndex() + 1))
{
currentConCommand = globals::cvars->GetCommand(conCommandHandle);

conCommandHandle.Set(conCommandHandle.Get() + 1);
if (!ref.IsFlagSet(flagsToRemove)) continue;

if (!currentConCommand || currentConCommand == invalidConCommand || !(currentConCommand->GetFlags() & flagsToRemove)) continue;

currentConCommand->RemoveFlags(flagsToRemove);
ref.RemoveFlags(flagsToRemove);
unhiddenConCommands++;
} while (currentConCommand && currentConCommand != invalidConCommand);
}
}

void ConCommandManager::OnShutdown()
Expand Down Expand Up @@ -301,10 +287,10 @@ void ConCommandManager::AddCommandListener(const char* name, CallbackT callback,
pInfo = new ConCommandInfo();
m_cmd_lookup[strName] = pInfo;

ConCommandHandle hExistingCommand = globals::cvars->FindCommand(name);
if (hExistingCommand.IsValid())
ConCommandRef hExistingCommand = globals::cvars->FindConCommand(name);
if (hExistingCommand.IsValidRef())
{
pInfo->command = globals::cvars->GetCommand(hExistingCommand);
pInfo->command = globals::cvars->GetConCommandData(hExistingCommand);
}
}

Expand Down Expand Up @@ -353,11 +339,10 @@ void ConCommandManager::RemoveCommandListener(const char* name, CallbackT callba

bool ConCommandManager::AddValveCommand(const char* name, const char* description, bool server_only, int flags)
{
ConCommandHandle hExistingCommand = globals::cvars->FindCommand(name);
if (hExistingCommand.IsValid()) return false;
ConCommandRef hExistingCommand = globals::cvars->FindConCommand(name);
if (hExistingCommand.IsValidRef()) return false;

ConCommandRefAbstract conCommandRefAbstract;
auto conCommand = new ConCommand(&conCommandRefAbstract, strdup(name), CommandCallback, description ? strdup(description) : "", flags);
auto conCommand = new ConCommand(strdup(name), CommandCallback, description ? strdup(description) : "", flags);

ConCommandInfo* pInfo = m_cmd_lookup[std::string(name)];

Expand All @@ -367,23 +352,22 @@ bool ConCommandManager::AddValveCommand(const char* name, const char* descriptio
m_cmd_lookup[std::string(name)] = pInfo;
}

pInfo->p_cmd = conCommandRefAbstract;
pInfo->command = conCommand;
pInfo->command = conCommand->GetRawData();
pInfo->server_only = server_only;

return true;
}

bool ConCommandManager::RemoveValveCommand(const char* name)
{
auto hFoundCommand = globals::cvars->FindCommand(name);
auto hFoundCommand = globals::cvars->FindConCommand(name);

if (!hFoundCommand.IsValid())
if (!hFoundCommand.IsValidRef())
{
return false;
}

globals::cvars->UnregisterConCommand(hFoundCommand);
globals::cvars->UnregisterConCommandCallbacks(hFoundCommand);

auto pInfo = m_cmd_lookup[std::string(name)];
if (!pInfo)
Expand Down Expand Up @@ -474,7 +458,7 @@ HookResult ConCommandManager::ExecuteCommandCallbacks(
return result;
}

void ConCommandManager::Hook_DispatchConCommand(ConCommandHandle cmd, const CCommandContext& ctx, const CCommand& args)
void ConCommandManager::Hook_DispatchConCommand(ConCommandRef cmd, const CCommandContext& ctx, const CCommand& args)
{
const char* name = args.Arg(0);

Expand All @@ -486,7 +470,7 @@ void ConCommandManager::Hook_DispatchConCommand(ConCommandHandle cmd, const CCom
RETURN_META(MRES_SUPERCEDE);
}
}
void ConCommandManager::Hook_DispatchConCommand_Post(ConCommandHandle cmd, const CCommandContext& ctx, const CCommand& args)
void ConCommandManager::Hook_DispatchConCommand_Post(ConCommandRef cmd, const CCommandContext& ctx, const CCommand& args)
{
const char* name = args.Arg(0);

Expand All @@ -498,8 +482,8 @@ void ConCommandManager::Hook_DispatchConCommand_Post(ConCommandHandle cmd, const
}
bool ConCommandManager::IsValidValveCommand(const char* name)
{
ConCommandHandle pCmd = globals::cvars->FindCommand(name);
return pCmd.IsValid();
ConCommandRef pCmd = globals::cvars->FindConCommand(name);
return pCmd.IsValidRef();
}

CommandCallingContext ConCommandManager::GetCommandCallingContext(CCommand* args) { return m_cmd_contexts[args]; }
Expand Down
7 changes: 3 additions & 4 deletions src/core/managers/con_command_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,7 @@ class ConCommandInfo
ScriptCallback* GetCallback() { return callback_pre; }

private:
ConCommandRefAbstract p_cmd;
ConCommand* command;
ConCommandData* command;
ScriptCallback* callback_pre;
ScriptCallback* callback_post;
bool server_only;
Expand All @@ -100,8 +99,8 @@ class ConCommandManager : public GlobalClass
bool IsValidValveCommand(const char* name);
bool AddValveCommand(const char* name, const char* description, bool server_only, int flags);
bool RemoveValveCommand(const char* name);
void Hook_DispatchConCommand(ConCommandHandle cmd, const CCommandContext& ctx, const CCommand& args);
void Hook_DispatchConCommand_Post(ConCommandHandle cmd, const CCommandContext& ctx, const CCommand& args);
void Hook_DispatchConCommand(ConCommandRef cmd, const CCommandContext& ctx, const CCommand& args);
void Hook_DispatchConCommand_Post(ConCommandRef cmd, const CCommandContext& ctx, const CCommand& args);
HookResult ExecuteCommandCallbacks(
const char* name, const CCommandContext& ctx, const CCommand& args, HookMode mode, CommandCallingContext callingContext);

Expand Down
1 change: 0 additions & 1 deletion src/core/memory_module.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@

#include "interface.h"
#include "strtools.h"
#include "metamod_oslink.h"
#undef snprintf

namespace counterstrikesharp::modules {
Expand Down
3 changes: 2 additions & 1 deletion src/mm_plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ class GameSessionConfiguration_t
{
};

PLUGIN_EXPOSE(CounterStrikeSharpMMPlugin, counterstrikesharp::gPlugin);

namespace counterstrikesharp {

SH_DECL_HOOK3_void(IServerGameDLL, GameFrame, SH_NOATTRIB, 0, bool, bool, bool);
Expand All @@ -81,7 +83,6 @@ CounterStrikeSharpMMPlugin gPlugin;
ConVar sample_cvar("sample_cvar", "42", 0);
#endif

PLUGIN_EXPOSE(CounterStrikeSharpMMPlugin, gPlugin);
bool CounterStrikeSharpMMPlugin::Load(PluginId id, ISmmAPI* ismm, char* error, size_t maxlen, bool late)
{
PLUGIN_SAVEVARS();
Expand Down
4 changes: 3 additions & 1 deletion src/mm_plugin.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,9 @@ static ScriptCallback* on_activate_callback;
static ScriptCallback* on_metamod_all_plugins_loaded_callback;
extern CounterStrikeSharpMMPlugin gPlugin;

PLUGIN_GLOBALVARS();

#endif //_INCLUDE_METAMOD_SOURCE_STUB_PLUGIN_H_
}

PLUGIN_GLOBALVARS();

56 changes: 32 additions & 24 deletions src/scripting/natives/natives_commands.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@
#include <eiface.h>
#include <networksystem/inetworkmessages.h>

#include "scripting/autonative.h"
#include "scripting/callback_manager.h"
#include "core/log.h"
#include "core/managers/con_command_manager.h"
#include "core/managers/player_manager.h"
#include "core/recipientfilters.h"
#include "igameeventsystem.h"
#include "scripting/autonative.h"
#include "scripting/callback_manager.h"
#include "scripting/script_engine.h"
#include "core/log.h"
#include <networkbasetypes.pb.h>

namespace counterstrikesharp {
Expand All @@ -37,8 +37,7 @@ static void AddCommand(ScriptContext& script_context)
auto flags = script_context.GetArgument<int>(3);
auto callback = script_context.GetArgument<CallbackT>(4);

CSSHARP_CORE_TRACE("Adding command {}, {}, {}, {}, {}", name, description, server_only, flags,
(void*)callback);
CSSHARP_CORE_TRACE("Adding command {}, {}, {}, {}, {}", name, description, server_only, flags, (void*)callback);

globals::conCommandManager.AddValveCommand(name, description, server_only, flags);
globals::conCommandManager.AddCommandListener(name, callback, HookMode::Pre);
Expand All @@ -59,8 +58,7 @@ static void AddCommandListener(ScriptContext& script_context)
auto callback = script_context.GetArgument<CallbackT>(1);
auto post = script_context.GetArgument<bool>(2);

globals::conCommandManager.AddCommandListener(name, callback,
post ? HookMode::Post : HookMode::Pre);
globals::conCommandManager.AddCommandListener(name, callback, post ? HookMode::Post : HookMode::Pre);
}

static void RemoveCommandListener(ScriptContext& script_context)
Expand All @@ -69,15 +67,15 @@ static void RemoveCommandListener(ScriptContext& script_context)
auto callback = script_context.GetArgument<CallbackT>(1);
auto post = script_context.GetArgument<bool>(2);

globals::conCommandManager.RemoveCommandListener(name, callback,
post ? HookMode::Post : HookMode::Pre);
globals::conCommandManager.RemoveCommandListener(name, callback, post ? HookMode::Post : HookMode::Pre);
}

static int CommandGetArgCount(ScriptContext& script_context)
{
auto command = script_context.GetArgument<CCommand*>(0);

if (!command) {
if (!command)
{
script_context.ThrowNativeError("Invalid command.");
return -1;
}
Expand All @@ -89,7 +87,8 @@ static const char* CommandGetArgString(ScriptContext& script_context)
{
auto command = script_context.GetArgument<CCommand*>(0);

if (!command) {
if (!command)
{
script_context.ThrowNativeError("Invalid command.");
return nullptr;
}
Expand All @@ -101,7 +100,8 @@ static const char* CommandGetCommandString(ScriptContext& script_context)
{
auto* command = script_context.GetArgument<CCommand*>(0);

if (!command) {
if (!command)
{
script_context.ThrowNativeError("Invalid command.");
return nullptr;
}
Expand All @@ -114,7 +114,8 @@ static const char* CommandGetArgByIndex(ScriptContext& script_context)
auto* command = script_context.GetArgument<CCommand*>(0);
auto index = script_context.GetArgument<int>(1);

if (!command) {
if (!command)
{
script_context.ThrowNativeError("Invalid command.");
return nullptr;
}
Expand Down Expand Up @@ -145,9 +146,8 @@ static void IssueClientCommandFromServer(ScriptContext& script_context)
CCommand args;
args.Tokenize(pszCommand);

auto handle = globals::cvars->FindCommand(args.Arg(0));
if (!handle.IsValid())
return;
auto handle = globals::cvars->FindConCommand(args.Arg(0));
if (!handle.IsValidRef()) return;

CCommandContext context(CommandTarget_t::CT_NO_TARGET, CPlayerSlot(slot));

Expand All @@ -171,28 +171,37 @@ static void SetFakeClientConVarValue(ScriptContext& script_context)
globals::engine->SetFakeClientConVarValue(CPlayerSlot(playerSlot), convarName, convarValue);
}

ConVar* FindConVar(ScriptContext& script_context)
ConVarData* FindConVar(ScriptContext& script_context)
{
auto name = script_context.GetArgument<const char*>(0);
auto hCvarHandle = globals::cvars->FindConVar(name, true);

if (!hCvarHandle.IsValid()) {
if (!hCvarHandle.IsValidRef())
{
return nullptr;
}

return globals::cvars->GetConVar(hCvarHandle);
return globals::cvars->GetConVarData(hCvarHandle);
}

void SetConVarStringValue(ScriptContext& script_context)
{
auto pCvar = script_context.GetArgument<ConVar*>(0);
auto pCvar = script_context.GetArgument<ConVarData*>(0);
auto value = script_context.GetArgument<const char*>(1);

if (!pCvar) {
if (!pCvar)
{
script_context.ThrowNativeError("Invalid cvar.");
}

ConVarRefAbstract cvarRef(pCvar->GetName());

if (!cvarRef.IsValidRef() || !cvarRef.IsConVarDataAvailable())
{
script_context.ThrowNativeError("Invalid cvar.");
}

pCvar->values = reinterpret_cast<CVValue_t**>((char*)value);
cvarRef.SetString(value);
}

void ReplicateConVar(ScriptContext& script_context)
Expand Down Expand Up @@ -230,8 +239,7 @@ REGISTER_NATIVES(commands, {
ScriptEngine::RegisterNativeHandler("SET_CONVAR_STRING_VALUE", SetConVarStringValue);

ScriptEngine::RegisterNativeHandler("ISSUE_CLIENT_COMMAND", IssueClientCommand);
ScriptEngine::RegisterNativeHandler("ISSUE_CLIENT_COMMAND_FROM_SERVER",
IssueClientCommandFromServer);
ScriptEngine::RegisterNativeHandler("ISSUE_CLIENT_COMMAND_FROM_SERVER", IssueClientCommandFromServer);
ScriptEngine::RegisterNativeHandler("GET_CLIENT_CONVAR_VALUE", GetClientConVarValue);
ScriptEngine::RegisterNativeHandler("SET_FAKE_CLIENT_CONVAR_VALUE", SetFakeClientConVarValue);
ScriptEngine::RegisterNativeHandler("REPLICATE_CONVAR", ReplicateConVar);
Expand Down
Loading