C# Render Target Example (Using Mugshot Sign)

I created a quick example in C# to demonstrate how render targets work. I learned a lot of this from [How To] Using render targets by @throwarray and I highly suggest you check out his post.

This was a quick script that I threw together just to demonstrate how to use render targets with the Mugshot sign that your player holds when creating a character in GTA Online.

    public Main()
    {
        Tick += OnTick;
    }

    private async Task OnTick()
    {
        if (Game.IsControlJustReleased(1, Control.SelectCharacterFranklin) && API.GetLastInputMethod(17) == true)
        {
            DoStuff();
        }
    }


    private async void DoStuff()
    {
        string MaleAnimDict = "mp_character_creation@customise@male_a";

        int player = API.GetPlayerPed(-1);

        API.RequestAnimDict(MaleAnimDict);
        while (!API.HasAnimDictLoaded(MaleAnimDict))
        {
            await Delay(0);
        };

        API.TaskPlayAnim(player, MaleAnimDict, "loop", 8, -8, -1, 49, 0, false, false, false);

        int SignObject1 = API.GetHashKey("prop_police_id_board");
        int SignObject2 = API.GetHashKey("prop_police_id_text");

        int SignProp1 = API.CreateObject(SignObject1, 1, 1, 1, true, true, false);
        int SignProp2 = API.CreateObject(SignObject2, 1, 1, 1, true, true, false);

        API.AttachEntityToEntity(SignProp1, player, API.GetPedBoneIndex(API.GetPlayerPed(-1), 58868), 0.12f, 0.24f, 0.0f, 5.0f, 0.0f, 70.0f, true, true, false, false, 2, true);
        API.AttachEntityToEntity(SignProp2, player, API.GetPedBoneIndex(API.GetPlayerPed(-1), 58868), 0.12f, 0.24f, 0.0f, 5.0f, 0.0f, 70.0f, true, true, false, false, 2, true);

        int ScaleformHandle = CreateScaleformHandle("ID_Text", SignObject2);

        int ScaleformMovie = API.RequestScaleformMovie("MUGSHOT_BOARD_01");
        while(!API.HasScaleformMovieLoaded(ScaleformMovie))
        {
            await Delay(0);
        }

        while(API.HasScaleformMovieLoaded(ScaleformMovie))
        {
            API.PushScaleformMovieFunction(ScaleformMovie, "SET_BOARD");
            API.PushScaleformMovieFunctionParameterString("Line 1");
            API.PushScaleformMovieFunctionParameterString("Line 3");
            API.PushScaleformMovieFunctionParameterString("Line 4");
            API.PushScaleformMovieFunctionParameterString("Line 2");
            API.PushScaleformMovieFunctionParameterInt(0); // No visible effect 
            API.PushScaleformMovieFunctionParameterInt(5); // GTA Online Character level
            API.PushScaleformMovieFunctionParameterInt(0); // No visible effect
            API.PopScaleformMovieFunctionVoid();

            API.SetTextRenderId(ScaleformHandle);
            Function.Call((Hash)0x40332D115A898AF5, ScaleformMovie, true);
            API.SetUiLayer(4);
            Function.Call((Hash)0xc6372ecd45d73bcd, ScaleformMovie, true);
            API.DrawScaleformMovie(ScaleformMovie, 0.4f, 0.35f, 0.8f, 0.75f, 255, 255, 255, 255, 255);
            API.SetTextRenderId(API.GetDefaultScriptRendertargetRenderId());
            Function.Call((Hash)0x40332D115A898AF5, ScaleformMovie, false);
            await Delay(0);
        }
    }
    // Credits to throwarray converted function in his post from lua to C#
    private int CreateScaleformHandle(string name, int model)
    {
        int handle = 0;
        if (!API.IsNamedRendertargetRegistered(name))
        {
            API.RegisterNamedRendertarget(name, false);
        }

        if (!API.IsNamedRendertargetLinked((uint)model))
        {
            API.LinkNamedRendertarget((uint)model);
        }

        if (API.IsNamedRendertargetRegistered(name))
        {
            handle = API.GetNamedRendertargetRenderId(name);
        }
        return handle;
    }
10 Likes