VoltMod
C++23 framework for CS2 server plugins
Loading...
Searching...
No Matches
ConVarOverrides.hpp
Go to the documentation of this file.
1
#pragma once
2
3
#include <
VoltMod/Engine/ConVars/ConVar.hpp
>
4
#include <algorithm>
5
#include <string>
6
#include <string_view>
7
#include <vector>
8
9
namespace
VoltMod
10
{
11
12
/**
13
* Server-wide convar overrides that restore the first observed value on destruction.
14
* Writes use the console so FCVAR_REPLICATED changes reach clients. Use @ref ConVar::SetFor for
15
* one client.
16
*/
17
class
ConVarOverrides
18
{
19
public
:
20
/** @p conVars must outlive this object. */
21
explicit
ConVarOverrides
(
ConVars
&
conVars
) : _conVars(
conVars
) {}
22
~ConVarOverrides
() {
RestoreAll
(); }
23
ConVarOverrides
(
const
ConVarOverrides
&) =
delete
;
24
ConVarOverrides
&
operator=
(
const
ConVarOverrides
&) =
delete
;
25
26
/** Set and snapshot on first use. Later calls reapply without replacing the snapshot. */
27
template
<
class
T>
28
bool
Set
(
ConVar<T>
&
cvar
,
const
T
& value)
29
{
30
if
(!
cvar
)
31
{
32
return
false
;
33
}
34
35
const
auto
name =
cvar
.Name();
36
if
(std::ranges::find(_saved, name, &Snapshot::Name) == _saved.end())
37
{
38
_saved.push_back({.Name = std::string(name), .Value =
ConVarText
(
cvar
.Get())});
39
}
40
41
return
cvar
.Set(value).has_value();
42
}
43
44
/** Restore and forget one override. */
45
template
<
class
T>
46
void
Restore
(
const
ConVar<T>
&
cvar
)
47
{
48
Restore
(
cvar
.Name());
49
}
50
51
/** Restore all overrides in insertion order. */
52
void
RestoreAll
();
53
54
private
:
55
struct
Snapshot
56
{
57
std::string
Name
;
58
std::string Value;
59
};
60
61
// Names remain valid if callers move or destroy their handles.
62
void
Restore
(std::string_view name);
63
void
Write(std::string_view name, std::string_view value);
64
65
ConVars& _conVars;
66
std::vector<Snapshot> _saved;
67
};
68
69
}
// namespace VoltMod
ConVar.hpp
VoltMod::ConVarOverrides
Definition
ConVarOverrides.hpp:18
VoltMod::ConVarOverrides::operator=
ConVarOverrides & operator=(const ConVarOverrides &)=delete
VoltMod::ConVarOverrides::ConVarOverrides
ConVarOverrides(ConVars &conVars)
Definition
ConVarOverrides.hpp:21
VoltMod::ConVarOverrides::Set
bool Set(ConVar< T > &cvar, const T &value)
Definition
ConVarOverrides.hpp:28
VoltMod::ConVarOverrides::~ConVarOverrides
~ConVarOverrides()
Definition
ConVarOverrides.hpp:22
VoltMod::ConVarOverrides::Restore
void Restore(const ConVar< T > &cvar)
Definition
ConVarOverrides.hpp:46
VoltMod::ConVarOverrides::RestoreAll
void RestoreAll()
Definition
ConVarOverrides.cpp:21
VoltMod::ConVarOverrides::ConVarOverrides
ConVarOverrides(const ConVarOverrides &)=delete
VoltMod::ConVar
Definition
ConVar.hpp:72
VoltMod::ConVars
Definition
ConVar.hpp:114
VoltMod
Definition
Options.hpp:13
VoltMod::Team::T
@ T
VoltMod::ConVarText
std::string ConVarText(const T &value)
VoltMod::Name
constexpr std::string_view Name(E value) noexcept
Definition
EnumNames.hpp:33
VoltMod::ReadFile
static std::string ReadFile(const std::filesystem::path &path)
Definition
Loader.cpp:56
include
VoltMod
Engine
ConVars
ConVarOverrides.hpp
Generated by
1.9.8