diff --git a/src/component/gsc.cpp b/src/component/gsc.cpp index 4837813..69a1470 100644 --- a/src/component/gsc.cpp +++ b/src/component/gsc.cpp @@ -330,6 +330,29 @@ namespace gsc return {}; }); + function::add("say", [](function_args args) -> scripting::script_value + { + const auto message = args[0].as(); + game::SV_GameSendServerCommand(-1, 0, utils::string::va("%c \"%s\"", 84, message.data())); + + return {}; + }); + + method::add("tell", [](game::scr_entref_t ent, function_args args) -> scripting::script_value + { + if (ent.classnum != 0) + { + throw std::runtime_error("Invalid type"); + } + + const auto client = ent.entnum; + const auto message = args[0].as(); + + game::SV_GameSendServerCommand(client, 0, utils::string::va("%c \"%s\"", 84, message.data())); + + return {}; + }); + utils::hook::jump(0x56C8EB, call_builtin_stub); utils::hook::jump(0x56CBDC, call_builtin_method_stub); utils::hook::jump(0x56B726, vm_execute_stub); diff --git a/src/component/notifies.cpp b/src/component/notifies.cpp index 0404e89..d88b680 100644 --- a/src/component/notifies.cpp +++ b/src/component/notifies.cpp @@ -26,19 +26,11 @@ namespace notifies std::string message = game::ConcatArgs(1); message.erase(0, 1); - scheduler::once([message, clientNum]() - { - const scripting::entity level{*game::levelEntityId}; - const auto _player = scripting::call("getEntByNum", {clientNum}); + const scripting::entity level{*game::levelEntityId}; + const auto player = scripting::call("getEntByNum", {clientNum}).as(); - if (_player.get_raw().type == game::SCRIPT_OBJECT) - { - const auto player = _player.as(); - - scripting::notify(level, "say", {player, message}); - scripting::notify(player, "say", {message}); - } - }); + scripting::notify(level, "say", {player, message}); + scripting::notify(player, "say", {message}); } return client_command_hook.invoke(clientNum);