public static void SendHudText(int clientindex, string message, HudTextParams textparams){
			lock (ScriptContext.GlobalScriptContext.Lock) {
			ScriptContext.GlobalScriptContext.Reset();
			ScriptContext.GlobalScriptContext.Push(clientindex);
			ScriptContext.GlobalScriptContext.Push(message);
			ScriptContext.GlobalScriptContext.Push(textparams);
			ScriptContext.GlobalScriptContext.SetIdentifier(0xB0B30EDD);
			ScriptContext.GlobalScriptContext.Invoke();
			ScriptContext.GlobalScriptContext.CheckErrors();
			}
		}

public struct HudTextParams()
{
    public required float X { get; set; }
    public required float Y { get; set; }
    public required float HoldTime { get; set; }
    public int Effect { get; set; } = 0;
    public byte R1 { get; set; }
    public byte G1 { get; set; }
    public byte B1 { get; set; }
    public byte A1 { get; set; }
    public byte R2 { get; set; } = 0;
    public byte G2 { get; set; } = 0;
    public byte B2 { get; set; } = 0;
    public byte A2 { get; set; } = 0;
    public float FadeinTime { get; set; } = 0.1f;
    public float FadeoutTime { get; set; } = 0.2f;
    public float FxTime { get; set; } = 6.0f;
    public int Channel { get; set; } = 0;
    public bool IsSet { get; set; } = false;
}

как мне принимать эти данные в C++?

/*
 *  This file is part of CounterStrikeSharp.
 *  CounterStrikeSharp is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  CounterStrikeSharp is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with CounterStrikeSharp.  If not, see <https://www.gnu.org/licenses/>. *
 */

#include <ios>

#include "core/log.h"
#include "protobuf/generated/cstrike15_usermessages.pb.h"
#include <igameeventsystem.h>
#include <networksystem/inetworkserializer.h>
#include <networksystem/inetworkmessages.h>
#include "scripting//callback_manager.h"
#include "scripting/autonative.h"
#include "scripting/script_engine.h"
#include "natives_hudtext.h"

namespace counterstrikesharp
{
    void SendHudText(ScriptContext& script_context)
    {
        auto client = script_context.GetArgument<int>(0);
        auto message = script_context.GetArgument<const char*>(1);
        auto params = script_context.GetArgument<hud_text_parms>(2);

        CSSHARP_CORE_INFO("{0}, {1}, {2}", client, message, params.a1);
        static INetworkSerializable* message_type = globals::networkMessages->FindNetworkMessagePartial("CCSUsrMsg_HudMsg");
        CCSUsrMsg_HudMsg msg;
        msg.set_channel(params.channel & 0xFF);

        CMsgVector2D* pos = msg.mutable_pos();
        pos->set_x(params.x);
        pos->set_y(params.y);

        CMsgRGBA* color1 = msg.mutable_clr1();
        color1->set_r(params.r1);
        color1->set_g(params.g1);
        color1->set_b(params.b1);
        color1->set_a(params.a1);

        CMsgRGBA* color2 = msg.mutable_clr2();
        color2->set_r(params.r2);
        color2->set_g(params.g2);
        color2->set_b(params.b2);
        color2->set_a(params.a2);

        msg.set_effect(params.effect);
        msg.set_fade_in_time(params.fadeinTime);
        msg.set_fade_out_time(params.fadeoutTime);
        msg.set_hold_time(params.holdTime);
        msg.set_fx_time(params.fxTime);
        msg.set_text(message);

        CRecipientFilter filter;
        CPlayerSlot PlayerSlot(client);
        filter.AddRecipient(PlayerSlot);

        globals::gameEventSystem->PostEventAbstract(0, false, &filter, message_type, &message, 0);
    }

REGISTER_NATIVES(hudtext, {
    ScriptEngine::RegisterNativeHandler("SEND_HUD_TEXT", SendHudText);
})
}  // namespace counterstrikesharp