This commit is contained in:
Diavolo 2023-02-21 01:35:51 +01:00
parent e4b135c5ff
commit fd49ece911
No known key found for this signature in database
GPG Key ID: FA77F074E98D98A5
4 changed files with 39 additions and 11 deletions

View File

@ -446,6 +446,17 @@ namespace gsc
return nullptr;
}
game::native::gentity_s* get_entity(game::native::scr_entref_t entref)
{
if (entref.classnum != 0)
{
scr_error("not an entity");
return nullptr;
}
return &game::native::g_entities[entref.entnum];
}
class error final : public module
{
public:

View File

@ -16,5 +16,7 @@ namespace gsc
int scr_get_type(unsigned int index);
const char* scr_get_type_name(unsigned int index);
game::native::gentity_s* get_entity(game::native::scr_entref_t entref);
void scr_error(const char* error);
}

View File

@ -172,8 +172,8 @@ namespace gsc
}
++scr_func_max_id;
custom_functions.push_back({ name, scr_func_max_id, func });
cxt->func_add(name, scr_func_max_id);
custom_functions.push_back({ lowered_name, scr_func_max_id, func });
cxt->func_add(lowered_name, scr_func_max_id);
}
void register_method(const std::string& name, const game::native::BuiltinMethod& meth)
@ -192,8 +192,8 @@ namespace gsc
}
++scr_meth_max_id;
custom_methods.push_back({ name, scr_meth_max_id, meth });
cxt->meth_add(name, scr_meth_max_id);
custom_methods.push_back({ lowered_name, scr_meth_max_id, meth });
cxt->meth_add(lowered_name, scr_meth_max_id);
}
const char* get_code_pos(int index)
@ -253,7 +253,7 @@ namespace gsc
static void add_gsc_functions()
{
register_function("replacefunc", []
register_function("ReplaceFunc", []
{
if (scr_get_type(0) != game::native::VAR_FUNCTION || scr_get_type(1) != game::native::VAR_FUNCTION)
{

View File

@ -3,14 +3,17 @@
#include "game/game.hpp"
#include "game/dvars.hpp"
#include "command.hpp"
#include "console.hpp"
#include "scheduler.hpp"
#include "test_clients.hpp"
#include "gsc/script_error.hpp"
#include "gsc/script_extension.hpp"
#include <utils/hook.hpp>
#include <utils/string.hpp>
#include "test_clients.hpp"
#include "command.hpp"
#include "scheduler.hpp"
#include "console.hpp"
bool test_clients::can_add()
{
auto i = 0;
@ -72,7 +75,7 @@ game::native::gentity_s* test_clients::sv_add_test_client()
if (game::native::mp::svs_clients[idx].header.netchan.remoteAddress.type == adr.type
&& game::native::mp::svs_clients[idx].header.netchan.remoteAddress.port == adr.port)
break; // Found them
break; // Found the bot
}
if (idx == *game::native::svs_clientCount)
@ -228,6 +231,18 @@ void test_clients::patch_mp()
// Replace nullsubbed gsc func "GScr_AddTestClient" with our spawn
utils::hook::set<void(*)()>(0x8AC8DC, gscr_add_test_client);
gsc::register_method("IsTestClient", [](const game::native::scr_entref_t entref)
{
gsc::get_entity(entref);
if (game::native::g_entities[entref.entnum].client == nullptr)
{
gsc::scr_error("IsTestClient: entity must be a player entity");
}
game::native::Scr_AddInt(game::native::SV_IsTestClient(entref.entnum));
});
}
REGISTER_MODULE(test_clients);