Skip to content

Commit af718ea

Browse files
committed
console: natives for serverinfo/replicated convars + getting convars on client
1 parent c2b68de commit af718ea

File tree

2 files changed

+86
-0
lines changed

2 files changed

+86
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
#include "StdInc.h"
2+
#include <ScriptEngine.h>
3+
4+
#include <CoreConsole.h>
5+
6+
static InitFunction initFunction([]()
7+
{
8+
fx::ScriptEngine::RegisterNativeHandler("GET_CONVAR", [](fx::ScriptContext& context)
9+
{
10+
// get the console context
11+
auto consoleContext = console::GetDefaultContext();
12+
13+
// get the variable manager
14+
auto varMan = consoleContext->GetVariableManager();
15+
16+
// get the variable
17+
auto var = varMan->FindEntryRaw(context.CheckArgument<const char*>(0));
18+
19+
if (!var)
20+
{
21+
context.SetResult(context.CheckArgument<const char*>(1));
22+
}
23+
else
24+
{
25+
static std::string varVal;
26+
varVal = var->GetValue();
27+
28+
context.SetResult(varVal.c_str());
29+
}
30+
});
31+
32+
fx::ScriptEngine::RegisterNativeHandler("GET_CONVAR_INT", [](fx::ScriptContext& context)
33+
{
34+
// get the server's console context
35+
auto consoleContext = console::GetDefaultContext();
36+
37+
// get the variable manager
38+
auto varMan = consoleContext->GetVariableManager();
39+
40+
// get the variable
41+
auto var = varMan->FindEntryRaw(context.CheckArgument<const char*>(0));
42+
43+
if (!var)
44+
{
45+
context.SetResult(context.GetArgument<int>(1));
46+
}
47+
else
48+
{
49+
context.SetResult(atoi(var->GetValue().c_str()));
50+
}
51+
});
52+
});

code/components/citizen-server-impl/src/ServerResources.cpp

+34
Original file line numberDiff line numberDiff line change
@@ -632,4 +632,38 @@ static InitFunction initFunction2([]()
632632
// set variable
633633
consoleContext->ExecuteSingleCommandDirect(ProgramArguments{ "set", context.CheckArgument<const char*>(0), context.CheckArgument<const char*>(1) });
634634
});
635+
636+
fx::ScriptEngine::RegisterNativeHandler("SET_CONVAR_SERVER_INFO", [](fx::ScriptContext& context)
637+
{
638+
// get the current resource manager
639+
auto resourceManager = fx::ResourceManager::GetCurrent();
640+
641+
// get the owning server instance
642+
auto instance = resourceManager->GetComponent<fx::ServerInstanceBaseRef>()->Get();
643+
644+
// get the server's console context
645+
auto consoleContext = instance->GetComponent<console::Context>();
646+
647+
se::ScopedPrincipal principalScope(se::Principal{ "system.console" });
648+
649+
// set variable
650+
consoleContext->ExecuteSingleCommandDirect(ProgramArguments{ "sets", context.CheckArgument<const char*>(0), context.CheckArgument<const char*>(1) });
651+
});
652+
653+
fx::ScriptEngine::RegisterNativeHandler("SET_CONVAR_REPLICATED", [](fx::ScriptContext& context)
654+
{
655+
// get the current resource manager
656+
auto resourceManager = fx::ResourceManager::GetCurrent();
657+
658+
// get the owning server instance
659+
auto instance = resourceManager->GetComponent<fx::ServerInstanceBaseRef>()->Get();
660+
661+
// get the server's console context
662+
auto consoleContext = instance->GetComponent<console::Context>();
663+
664+
se::ScopedPrincipal principalScope(se::Principal{ "system.console" });
665+
666+
// set variable
667+
consoleContext->ExecuteSingleCommandDirect(ProgramArguments{ "setr", context.CheckArgument<const char*>(0), context.CheckArgument<const char*>(1) });
668+
});
635669
});

0 commit comments

Comments
 (0)