mirror of
https://github.com/JezuzLizard/T4SP-Server-Plugin.git
synced 2025-07-05 02:32:01 +00:00
Add scheduler, add support for GSC method adding, command adding.
Some cleanup. Add exception handler.
This commit is contained in:
@ -2,6 +2,7 @@
|
||||
#include "game.hpp"
|
||||
|
||||
#include <utils/hook.hpp>
|
||||
#include <utils/memory.hpp>
|
||||
|
||||
namespace game
|
||||
{
|
||||
@ -22,11 +23,58 @@ namespace game
|
||||
}
|
||||
}
|
||||
|
||||
const char* Cmd_Argv(int index)
|
||||
{
|
||||
static const auto call_addr = SELECT(0x0, 0x435CE0);
|
||||
const char* answer;
|
||||
|
||||
__asm
|
||||
{
|
||||
mov eax, index;
|
||||
call call_addr;
|
||||
mov answer, eax;
|
||||
}
|
||||
|
||||
return answer;
|
||||
}
|
||||
|
||||
unsigned int Cmd_Argc()
|
||||
{
|
||||
return cmd_args->argc[cmd_args->nesting];
|
||||
}
|
||||
|
||||
void Cmd_AddCommand(const char* name, void(__cdecl* function)())
|
||||
{
|
||||
auto newCmd = utils::memory::allocate<game::cmd_function_s>();
|
||||
auto name_dup = utils::memory::duplicate_string(name);
|
||||
|
||||
*newCmd = {};
|
||||
newCmd->next = *game::cmd_functions;
|
||||
newCmd->function = function;
|
||||
newCmd->name = name_dup;
|
||||
|
||||
*game::cmd_functions = newCmd;
|
||||
}
|
||||
|
||||
dvar_s* Dvar_RegisterInt(const char* name, int value, int min, int max, DvarFlags flags, const char* desc)
|
||||
{
|
||||
DvarLimits limits;
|
||||
DvarValue dvar_value;
|
||||
limits.integer.min = min;
|
||||
limits.integer.max = max;
|
||||
dvar_value.integer = value;
|
||||
return Dvar_RegisterVariant(name, game::DVAR_TYPE_INT, flags, dvar_value, limits, desc);
|
||||
}
|
||||
|
||||
dvar_s* Dvar_RegisterString(const char* name, const char* value, DvarFlags flags, const char* desc)
|
||||
{
|
||||
DvarLimits limits = {};
|
||||
DvarValue dvar_value;
|
||||
dvar_value.string = value;
|
||||
return Dvar_RegisterVariant(name, game::DVAR_TYPE_STRING, flags, dvar_value, limits, desc);
|
||||
}
|
||||
|
||||
namespace plutonium
|
||||
{
|
||||
bool is_up_to_date()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -21,6 +21,13 @@ namespace game
|
||||
bool t4sp();
|
||||
}
|
||||
|
||||
const char* Cmd_Argv(int index);
|
||||
unsigned int Cmd_Argc();
|
||||
void Cmd_AddCommand(const char* name, void(__cdecl* function)());
|
||||
|
||||
dvar_s* Dvar_RegisterInt(const char* name, int value, int min, int max, DvarFlags flags, const char* desc);
|
||||
dvar_s* Dvar_RegisterString(const char* name, const char* value, DvarFlags flags, const char* desc);
|
||||
|
||||
template <typename T>
|
||||
class symbol
|
||||
{
|
||||
|
@ -6,4 +6,159 @@ namespace game
|
||||
typedef vec_t vec2_t[2];
|
||||
typedef vec_t vec3_t[3];
|
||||
typedef vec_t vec4_t[4];
|
||||
|
||||
struct scr_entref_s
|
||||
{
|
||||
__int16 entnum;
|
||||
__int16 classnum;
|
||||
};
|
||||
|
||||
typedef void(__cdecl* BuiltinFunction)();
|
||||
|
||||
typedef void(__cdecl* BuiltinMethod)(scr_entref_s);
|
||||
|
||||
enum con_channel_e
|
||||
{
|
||||
CON_CHANNEL_DONT_FILTER = 0x0,
|
||||
CON_CHANNEL_ERROR = 0x1,
|
||||
CON_CHANNEL_GAMENOTIFY = 0x2,
|
||||
CON_CHANNEL_BOLDGAME = 0x3,
|
||||
CON_CHANNEL_SUBTITLE = 0x4,
|
||||
CON_CHANNEL_OBITUARY = 0x5,
|
||||
CON_CHANNEL_LOGFILEONLY = 0x6,
|
||||
CON_CHANNEL_CONSOLEONLY = 0x7,
|
||||
CON_CHANNEL_GFX = 0x8,
|
||||
CON_CHANNEL_SOUND = 0x9,
|
||||
CON_CHANNEL_FILES = 0xA,
|
||||
CON_CHANNEL_DEVGUI = 0xB,
|
||||
CON_CHANNEL_PROFILE = 0xC,
|
||||
CON_CHANNEL_UI = 0xD,
|
||||
CON_CHANNEL_CLIENT = 0xE,
|
||||
CON_CHANNEL_SERVER = 0xF,
|
||||
CON_CHANNEL_SYSTEM = 0x10,
|
||||
CON_CHANNEL_PLAYERWEAP = 0x11,
|
||||
CON_CHANNEL_AI = 0x12,
|
||||
CON_CHANNEL_ANIM = 0x13,
|
||||
CON_CHANNEL_PHYS = 0x14,
|
||||
CON_CHANNEL_FX = 0x15,
|
||||
CON_CHANNEL_LEADERBOARDS = 0x16,
|
||||
CON_CHANNEL_LIVE = 0x17,
|
||||
CON_CHANNEL_PARSERSCRIPT = 0x18,
|
||||
CON_CHANNEL_SCRIPT = 0x19,
|
||||
CON_CHANNEL_SPAWNSYSTEM = 0x1A,
|
||||
CON_CHANNEL_COOPINFO = 0x1B,
|
||||
CON_CHANNEL_SERVERDEMO = 0x1C,
|
||||
CON_CHANNEL_DDL = 0x1D,
|
||||
CON_CHANNEL_NETWORK = 0x1E,
|
||||
CON_CHANNEL_SCHEDULER = 0x1F,
|
||||
CON_FIRST_DEBUG_CHANNEL = 0x1F,
|
||||
CON_CHANNEL_TASK = 0x20,
|
||||
CON_CHANNEL_SPU = 0x21,
|
||||
CON_BUILTIN_CHANNEL_COUNT = 0x22,
|
||||
};
|
||||
|
||||
struct CmdArgs
|
||||
{
|
||||
int nesting;
|
||||
int localClientNum[8];
|
||||
int controllerIndex[8];
|
||||
int argc[8];
|
||||
char** argv[8];
|
||||
};
|
||||
|
||||
struct cmd_function_s
|
||||
{
|
||||
cmd_function_s* next;
|
||||
const char* name;
|
||||
char unk[8];
|
||||
void(__cdecl* function)();
|
||||
};
|
||||
|
||||
enum DvarFlags : unsigned __int16
|
||||
{
|
||||
DVAR_FLAG_NONE = 0x0,
|
||||
DVAR_FLAG_ARCHIVE = 0x1,
|
||||
DVAR_FLAG_USERINFO = 0x2,
|
||||
DVAR_FLAG_SERVERINFO = 0x4,
|
||||
DVAR_FLAG_SYSTEMINFO = 0x8,
|
||||
DVAR_FLAG_INIT = 0x10,
|
||||
DVAR_FLAG_LATCH = 0x20,
|
||||
DVAR_FLAG_ROM = 0x40,
|
||||
DVAR_FLAG_CHEAT = 0x80,
|
||||
DVAR_FLAG_CONFIG = 0x100,
|
||||
DVAR_FLAG_SAVED = 0x200,
|
||||
DVAR_FLAG_NORESTART = 0x400,
|
||||
DVAR_FLAG_UNK3 = 0x800,
|
||||
DVAR_FLAG_CHANGEABLE_RESET = 0x1000,
|
||||
DVAR_FLAG_UNK4 = 0x2000,
|
||||
DVAR_FLAG_EXTERNAL = 0x4000,
|
||||
DVAR_FLAG_AUTOEXEC = 0x8000,
|
||||
};
|
||||
|
||||
enum dvarType_t : unsigned __int8
|
||||
{
|
||||
DVAR_TYPE_BOOL = 0x0,
|
||||
DVAR_TYPE_FLOAT = 0x1,
|
||||
DVAR_TYPE_FLOAT_2 = 0x2,
|
||||
DVAR_TYPE_FLOAT_3 = 0x3,
|
||||
DVAR_TYPE_FLOAT_4 = 0x4,
|
||||
DVAR_TYPE_INT = 0x5,
|
||||
DVAR_TYPE_ENUM = 0x6,
|
||||
DVAR_TYPE_STRING = 0x7,
|
||||
DVAR_TYPE_COLOR = 0x8,
|
||||
DVAR_TYPE_COUNT = 0x9,
|
||||
};
|
||||
|
||||
union DvarValue
|
||||
{
|
||||
bool enabled;
|
||||
int integer;
|
||||
unsigned int unsignedInt;
|
||||
float value;
|
||||
float vector[4];
|
||||
const char* string;
|
||||
char color[4];
|
||||
};
|
||||
|
||||
union __declspec(align(4)) DvarLimits
|
||||
{
|
||||
struct
|
||||
{
|
||||
int stringCount;
|
||||
const char** strings;
|
||||
} enumeration;
|
||||
struct
|
||||
{
|
||||
int min;
|
||||
int max;
|
||||
} integer;
|
||||
struct
|
||||
{
|
||||
float min;
|
||||
float max;
|
||||
} value;
|
||||
struct
|
||||
{
|
||||
float min;
|
||||
float max;
|
||||
} vector;
|
||||
};
|
||||
|
||||
struct __declspec(align(4)) dvar_s
|
||||
{
|
||||
const char* name;
|
||||
const char* description;
|
||||
DvarFlags flags;
|
||||
dvarType_t type;
|
||||
char modified;
|
||||
int pad;
|
||||
DvarValue current;
|
||||
DvarValue latched;
|
||||
DvarValue reset;
|
||||
DvarValue saved;
|
||||
DvarLimits domain;
|
||||
dvar_s* hashNext;
|
||||
};
|
||||
|
||||
static_assert(sizeof(dvar_s) == 0x5C);
|
||||
}
|
@ -6,10 +6,15 @@ namespace game
|
||||
{
|
||||
// Functions
|
||||
|
||||
WEAK symbol<void(con_channel_e channel, const char* fmt, ...)> Com_PrintF{ 0x0, 0x59A2C0 };
|
||||
WEAK symbol<dvar_s*(const char* name, dvarType_t type, DvarFlags flags, DvarValue dval, DvarLimits dom, const char* desc)> Dvar_RegisterVariant{ 0x0, 0x5EED90 };
|
||||
|
||||
// Variables
|
||||
|
||||
WEAK symbol<cmd_function_s*> cmd_functions{ 0x0, 0x1F416F4 };
|
||||
WEAK symbol<CmdArgs> cmd_args{ 0x0, 0x1F41670 };
|
||||
|
||||
namespace plutonium
|
||||
{
|
||||
WEAK symbol<int(const char* fmt, ...)> printf{0, 0};
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user