Lua HUD MoonHUD | Galaxy-RPG

THERION

Известный
Автор темы
Проверенный
88
323
Версия SA-MP
  1. 0.3.7 (R1)
Описание: худ на основе MoonAdditions. Можно менять каждый элемент интерфейса. Здоровье, броня и.т.д в цифрах.

Настройка: /hud
Стандартный худ:
Новый:
v.1.0
Релиз
v.1.1
- Исправлены сьезжающие иконки в Kill-List'e.
- Kill-List не обнуляется при перезагрузке скриптов.
- Изменены иконки Kill-List'a
v.2.0
- Можно изменять все текстдравьі Galaxy-RPG
- Не нужно FontAwesome5
- Разбил на модули
Требования
FixWidth, MoonAdditions, SAMP.lua, ImGui, FontAwesome5 (в новьіх версиях не надо)
Конфликтует:
InterfaceEditor

Source:

 

Вложения

  • MoonHUD v1.0.rar
    1.8 MB · Просмотры: 549
  • MoonHUD v1.1.rar
    1.5 MB · Просмотры: 1,785
  • moonhud2.0.zip
    2.9 MB · Просмотры: 44
Последнее редактирование:

ГОХА | GoxaShow

В АРМИИ С 12.12,ЗАКАЗЫ НЕ ДЕЛАЮ,ТУПЫЕ ВОПРОСЫ-НАХУ
Проверенный
1,860
1,850
конечно круто, но я разницы не особо вижу
 

THERION

Известный
Автор темы
Проверенный
88
323
конечно круто, но я разницы не особо вижу
Смотри внимательнее, ее не трудно заметить.

если раньше у каждого была обязанность сделать арз хелпер,то теперь это свой хад?
Не гони на худы, их не так уж и много + каждый чем-то уникален!
 
  • Нравится
Реакции: MAHEKEH, Vintik и Use[R]

l10n

Новичок
2
0
При активации, пропадают все элементы интерфейса, кроме радара
 

The Spark

Известный
654
666
Можно добавить рендр киллстата с помощью directX, а не своими текстурками. Тогда не будет отличия от стандартного киллстата.
Lua:
local ffi = require 'ffi'
ffi.cdef([[
    struct stKillEntry
    {
        char                    szKiller[25];
        char                    szVictim[25];
        uint32_t                clKillerColor; // D3DCOLOR
        uint32_t                clVictimColor; // D3DCOLOR
        uint8_t                    byteType;
    } __attribute__ ((packed));

    struct stKillInfo
    {
        int                        iEnabled;
        struct stKillEntry        killEntry[5];
        int                     iLongestNickLength;
        int                     iOffsetX;
        int                     iOffsetY;
        void                    *pD3DFont; // ID3DXFont
        void                    *pWeaponFont1; // ID3DXFont
        void                       *pWeaponFont2; // ID3DXFont
        void                    *pSprite;
        void                    *pD3DDevice;
        int                     iAuxFontInited;
        void                     *pAuxFont1; // ID3DXFont
        void                     *pAuxFont2; // ID3DXFont
    } __attribute__ ((packed));
]])

ffi.cdef([[
typedef struct stRECT
{
    int left, top, right, bottom;
} RECT;

typedef struct stID3DXFont
{
    struct ID3DXFont_vtbl* vtbl;
} ID3DXFont;

struct ID3DXFont_vtbl
{
        void* QueryInterface; // STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
    void* AddRef; // STDMETHOD_(ULONG, AddRef)(THIS) PURE;
    uint32_t (__stdcall * Release)(ID3DXFont* font); // STDMETHOD_(ULONG, Release)(THIS) PURE;

    // ID3DXFont
    void* GetDevice; // STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9 *ppDevice) PURE;
    void* GetDescA; // STDMETHOD(GetDescA)(THIS_ D3DXFONT_DESCA *pDesc) PURE;
    void* GetDescW; // STDMETHOD(GetDescW)(THIS_ D3DXFONT_DESCW *pDesc) PURE;
    void* GetTextMetricsA; // STDMETHOD_(BOOL, GetTextMetricsA)(THIS_ TEXTMETRICA *pTextMetrics) PURE;
    void* GetTextMetricsW; // STDMETHOD_(BOOL, GetTextMetricsW)(THIS_ TEXTMETRICW *pTextMetrics) PURE;

    void* GetDC; // STDMETHOD_(HDC, GetDC)(THIS) PURE;
    void* GetGlyphData; // STDMETHOD(GetGlyphData)(THIS_ UINT Glyph, LPDIRECT3DTEXTURE9 *ppTexture, RECT *pBlackBox, POINT *pCellInc) PURE;

    void* PreloadCharacters; // STDMETHOD(PreloadCharacters)(THIS_ UINT First, UINT Last) PURE;
    void* PreloadGlyphs; // STDMETHOD(PreloadGlyphs)(THIS_ UINT First, UINT Last) PURE;
    void* PreloadTextA; // STDMETHOD(PreloadTextA)(THIS_ LPCSTR pString, INT Count) PURE;
    void* PreloadTextW; // STDMETHOD(PreloadTextW)(THIS_ LPCWSTR pString, INT Count) PURE;

    int (__stdcall * DrawTextA)(ID3DXFont* font, void* pSprite, const char* pString, int Count, RECT* pRect, uint32_t Format, uint32_t Color); // STDMETHOD_(INT, DrawTextA)(THIS_ LPD3DXSPRITE pSprite, LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color) PURE;
    void* DrawTextW; // STDMETHOD_(INT, DrawTextW)(THIS_ LPD3DXSPRITE pSprite, LPCWSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color) PURE;

    void (__stdcall * OnLostDevice)(ID3DXFont* font); // STDMETHOD(OnLostDevice)(THIS) PURE;
    void (__stdcall * OnResetDevice)(ID3DXFont* font); // STDMETHOD(OnResetDevice)(THIS) PURE;
};

uint32_t D3DXCreateFontA(void* pDevice, int Height, uint32_t Width, uint32_t Weight, uint32_t MipLevels, bool Italic, uint32_t CharSet, uint32_t OutputPrecision, uint32_t Quality, uint32_t PitchAndFamily, const char* pFaceName, ID3DXFont** ppFont);
]])

local ID = {
    Background = -1,
    Unarmed = 0,
    Knuckles = 1,
    Golf = 2,
    Stick = 3,
    Knife = 4,
    Bat = 5,
    Shovel = 6,
    Cue = 7,
    Katana = 8,
    Chainsaw = 9,
    Dildo1 = 10,
    Dildo2 = 11,
    Dildo3 = 12,
    Dildo4 = 13,
    Flowers = 14,
    Cane = 15,
    Grenade = 16,
    Gas = 17,
    Molotov = 18,
    Pistol = 22,
    Slicend = 23,
    Eagle = 24,
    Shotgun = 25,
    Sawnoff = 26,
    Combat = 27,
    Uzi = 28,
    Mp5 = 29,
    Ak47 = 30,
    M4 = 31,
    Tec9 = 32,
    Rifle = 33,
    Sniper = 34,
    RPG = 35,
    Launcher = 36,
    Flame = 37,
    Minigun = 38,
    Sachet = 39,
    Detonator = 40,
    Spray = 41,
    Extinguisher = 42,
    Goggles1 = 44,
    Goggles2 = 45,
    Parachute = 46,
}

--таблица кодов иконок
local RenderGun = {
    [ID.Background] = 71,
    [ID.Unarmed] = 37,
    [ID.Knuckles] = 66,
    [ID.Golf] = 62,
    [ID.Stick] = 40,
    [ID.Knife] = 67,
    [ID.Bat] = 63,
    [ID.Shovel] = 38,
    [ID.Cue] = 34,
    [ID.Katana] = 33,
    [ID.Chainsaw] = 49,
    [ID.Dildo1] = 69,
    [ID.Dildo2] = 69,
    [ID.Dildo3] = 69,
    [ID.Dildo4] = 69,
    [ID.Flowers] = 36,
    [ID.Cane] = 35,
    [ID.Grenade] = 64,
    [ID.Gas] = 68,
    [ID.Molotov] = 39,
    [ID.Pistol] = 54,
    [ID.Slicend] = 50,
    [ID.Eagle] = 51,
    [ID.Shotgun] = 61,
    [ID.Sawnoff] = 48,
    [ID.Combat] = 43,
    [ID.Uzi] = 73,
    [ID.Mp5] = 56,
    [ID.Ak47] = 72,
    [ID.M4] = 53,
    [ID.Tec9] = 55,
    [ID.Rifle] = 46,
    [ID.Sniper] = 65,
    [ID.RPG] = 52,
    [ID.Launcher] = 41,
    [ID.Flame] = 42,
    [ID.Minigun] = 70,
    [ID.Sachet] = 60,
    [ID.Detonator] = 59,
    [ID.Spray] = 47,
    [ID.Extinguisher] = 44,
    [ID.Goggles1] = 45,
    [ID.Goggles2] = 45,
    [ID.Parachute] = 58
}

function main()
    while not isSampAvailable() do wait(0) end
    if not isSampfuncsLoaded() and not isCleoLoaded() then return end

    font_gtaweapon3, font_gtaweapon3_black = d3dxfont_create('gtaweapon3')
    fonts_loaded = true
  
    wait(-1)
end

function d3dxfont_draw(font, text, rect, color, format)
    local prect = ffi.new('RECT[1]', {{rect[1], rect[2], rect[3], rect[4]}})
    return font.vtbl.DrawTextA(font, nil, text, -1, prect, format, color)
end

function onD3DPresent()
    if fonts_loaded and not sampIsScoreboardOpen() and not isPauseMenuActive() and ffi.cast("struct stKillInfo*", sampGetKillInfoPtr()).iEnabled == 1 and not isKeyDown(0x79) then
        local sw, sh = getScreenResolution()
        local posX, posY = 500, 500 -- X, Y
        -- Фон
        d3dxfont_draw(font_gtaweapon3_black, string.char(RenderGun[-1]), {posX, posY + 1, sw, sh}, 0xFF000000, 0x10)
      
        --Иконка
        local weaponId = 24 -- Дигл
        d3dxfont_draw(font_gtaweapon3, string.char(RenderGun[weaponId]), {posX, posY, sw, sh}, 0xFFFFFFFF, 0x10)
    end
end

function d3dxfont_create()
    local d3ddev = ffi.cast("struct stKillInfo*", sampGetKillInfoPtr())
    local tab = {
        [1] = d3ddev.pWeaponFont2,
        [2] = d3ddev.pWeaponFont2,
    }
    local pfont = ffi.new('ID3DXFont*[2]', tab)
    return pfont[0], pfont[1]
end
Результат:
1607015619147.png

Вот тут подробнее: https://www.blast.hk/threads/13315/page-13#post-167421
 
Последнее редактирование:

Yurok83

Новичок
4
0
Не работает совсем... При вводе команды /hud в чате пишет "Неизвестная команда".



sa-mp-006.png
 

Вложения

  • moonloader.log
    5.3 KB · Просмотры: 20

Use[R]

Известный
1,266
396
как ее ставить, я скачал MoonAdditions там много папок и файлов, а написано: Установка: скачать файл MoonAdditions.dll и скопировать его в папку moonloader/lib
Где найти этот файл?
Не набивай больше сообщений, в верху все ссылки есть, внимательно читай, если поудаляешь свой мусор, я удалю свой ответ, если проблемы какие-то с худом, то напиши в лс автору или мне, я не против помочь
 
  • Нравится
Реакции: kyrtion

kyrtion

Известный
613
224
как ее ставить, я скачал MoonAdditions там много папок и файлов, а написано: Установка: скачать файл MoonAdditions.dll и скопировать его в папку moonloader/lib
Где найти этот файл?
Берёшь MoonAdditions.dll и кидаешь в корневом папке: gta_sa/moonloader/lib.
В папке lib там должен быть лежать MoonAdditions.dll.



------------------------------------------



1607075188706.png
1 +
2 +
3 +
4 +
5 +

Баг нашёл. Короче говоря, чистая сборка без мусоров и проблем.
Зашёл на сервере для читеров чтобы проверить и тестировать.
Ввел /hud и скрипт перестало работать.

[19:48:53.275102] (system) Session started.
[19:48:53.276102] (debug) Module handle: 67290000

MoonLoader v.026.5-beta loaded.
Developers: FYP, hnnssy, EvgeN 1137

Copyright (c) 2016, BlastHack Team
https://www.blast.hk/moonloader/

[19:48:53.276102] (info) Working directory: C:\gtasa\moonloader
[19:48:53.276102] (debug) FP Control: 0009001F
[19:48:53.276102] (debug) Game: GTA SA 1.0.0.0 US
[19:48:53.276102] (system) Installing pre-game hooks...
[19:48:53.279100] (system) Hooks installed.
[19:48:54.405741] (debug) Initializing opcode handler table
[19:48:54.405741] (debug) package.path = C:\gtasa\moonloader\lib\?.lua;C:\gtasa\moonloader\lib\?\init.lua;C:\gtasa\moonloader\?.lua;C:\gtasa\moonloader\?\init.lua;.\?.lua;C:\gtasa\moonloader\lib\?.luac;C:\gtasa\moonloader\lib\?\init.luac;C:\gtasa\moonloader\?.luac;C:\gtasa\moonloader\?\init.luac;.\?.luac
[19:48:54.405741] (debug) package.cpath = C:\gtasa\moonloader\lib\?.dll;
[19:48:54.409737] (system) Loading script 'C:\gtasa\moonloader\AutoReboot.lua'...
[19:48:54.410737] (debug) New script: 0B19CA64
[19:48:54.413736] (system) ML-AutoReboot: Loaded successfully.
[19:48:54.413736] (system) Loading script 'C:\gtasa\moonloader\ChatID.lua'...
[19:48:54.413736] (debug) New script: 0B19CBEC
[19:48:54.424733] (system) ChatID: Loaded successfully.
[19:48:54.424733] (system) Loading script 'C:\gtasa\moonloader\check-moonloader-updates.lua'...
[19:48:54.424733] (debug) New script: 0B19CD74
[19:48:54.429731] (system) Check MoonLoader Updates: Loaded successfully.
[19:48:54.429731] (system) Loading script 'C:\gtasa\moonloader\MoonHUD.lua'...
[19:48:54.429731] (debug) New script: 0B19CEFC
[19:48:54.473717] (system) MoonHUD: Loaded successfully.
[19:48:54.473717] (system) Loading script 'C:\gtasa\moonloader\reload_all.lua'...
[19:48:54.473717] (debug) New script: 0B19D084
[19:48:54.475716] (system) ML-ReloadAll: Loaded successfully.
[19:48:54.475716] (system) Loading script 'C:\gtasa\moonloader\SF Integration.lua'...
[19:48:54.475716] (debug) New script: 0B19C444
[19:48:54.480715] (system) SF Integration: Loaded successfully.
[19:49:04.626788] (system) Installing post-load hooks...
[19:49:04.627791] (system) Hooks installed.
[19:49:14.448961] (error) MoonHUD: C:\gtasa\moonloader\lib\fAwesome5.lua:965: stack overflow
stack traceback:
C:\gtasa\moonloader\lib\fAwesome5.lua:965: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
...
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\MoonHUD.lua:814: in function 'OnDrawFrame'
C:\gtasa\moonloader\lib\imgui.lua:1378: in function <C:\gtasa\moonloader\lib\imgui.lua:1367>
[19:49:14.448961] (error) MoonHUD: Script died due to an error. (0B19CEFC)
[19:49:17.414991] (system) Unloading...
[19:49:17.414991] (system) ML-AutoReboot: Script terminated. (0B19CA64)
[19:49:17.414991] (system) ChatID: Script terminated. (0B19CBEC)
[19:49:17.415990] (system) Check MoonLoader Updates: Script terminated. (0B19CD74)
[19:49:17.415990] (system) ML-ReloadAll: Script terminated. (0B19D084)
[19:49:17.416989] (system) SF Integration: Script terminated. (0B19C444)
 
Последнее редактирование:

Use[R]

Известный
1,266
396
Берёшь MoonAdditions.dll и кидаешь в корневом папке: gta_sa/moonloader/lib.
В папке lib там должен быть лежать MoonAdditions.dll.



------------------------------------------




1 +
2 +
3 +
4 +
5 +

Баг нашёл. Короче говоря, чистая сборка без мусоров и проблем.
Зашёл на сервере для читеров чтобы проверить и тестировать.
Ввел /hud и скрипт перестало работать.

[19:48:53.275102] (system) Session started.
[19:48:53.276102] (debug) Module handle: 67290000

MoonLoader v.026.5-beta loaded.
Developers: FYP, hnnssy, EvgeN 1137

Copyright (c) 2016, BlastHack Team

[19:48:53.276102] (info) Working directory: C:\gtasa\moonloader
[19:48:53.276102] (debug) FP Control: 0009001F
[19:48:53.276102] (debug) Game: GTA SA 1.0.0.0 US
[19:48:53.276102] (system) Installing pre-game hooks...
[19:48:53.279100] (system) Hooks installed.
[19:48:54.405741] (debug) Initializing opcode handler table
[19:48:54.405741] (debug) package.path = C:\gtasa\moonloader\lib\?.lua;C:\gtasa\moonloader\lib\?\init.lua;C:\gtasa\moonloader\?.lua;C:\gtasa\moonloader\?\init.lua;.\?.lua;C:\gtasa\moonloader\lib\?.luac;C:\gtasa\moonloader\lib\?\init.luac;C:\gtasa\moonloader\?.luac;C:\gtasa\moonloader\?\init.luac;.\?.luac
[19:48:54.405741] (debug) package.cpath = C:\gtasa\moonloader\lib\?.dll;
[19:48:54.409737] (system) Loading script 'C:\gtasa\moonloader\AutoReboot.lua'...
[19:48:54.410737] (debug) New script: 0B19CA64
[19:48:54.413736] (system) ML-AutoReboot: Loaded successfully.
[19:48:54.413736] (system) Loading script 'C:\gtasa\moonloader\ChatID.lua'...
[19:48:54.413736] (debug) New script: 0B19CBEC
[19:48:54.424733] (system) ChatID: Loaded successfully.
[19:48:54.424733] (system) Loading script 'C:\gtasa\moonloader\check-moonloader-updates.lua'...
[19:48:54.424733] (debug) New script: 0B19CD74
[19:48:54.429731] (system) Check MoonLoader Updates: Loaded successfully.
[19:48:54.429731] (system) Loading script 'C:\gtasa\moonloader\MoonHUD.lua'...
[19:48:54.429731] (debug) New script: 0B19CEFC
[19:48:54.473717] (system) MoonHUD: Loaded successfully.
[19:48:54.473717] (system) Loading script 'C:\gtasa\moonloader\reload_all.lua'...
[19:48:54.473717] (debug) New script: 0B19D084
[19:48:54.475716] (system) ML-ReloadAll: Loaded successfully.
[19:48:54.475716] (system) Loading script 'C:\gtasa\moonloader\SF Integration.lua'...
[19:48:54.475716] (debug) New script: 0B19C444
[19:48:54.480715] (system) SF Integration: Loaded successfully.
[19:49:04.626788] (system) Installing post-load hooks...
[19:49:04.627791] (system) Hooks installed.
[19:49:14.448961] (error) MoonHUD: C:\gtasa\moonloader\lib\fAwesome5.lua:965: stack overflow
stack traceback:
C:\gtasa\moonloader\lib\fAwesome5.lua:965: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
...
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\lib\fAwesome5.lua:973: in function '__index'
C:\gtasa\moonloader\MoonHUD.lua:814: in function 'OnDrawFrame'
C:\gtasa\moonloader\lib\imgui.lua:1378: in function <C:\gtasa\moonloader\lib\imgui.lua:1367>
[19:49:14.448961] (error) MoonHUD: Script died due to an error. (0B19CEFC)
[19:49:17.414991] (system) Unloading...
[19:49:17.414991] (system) ML-AutoReboot: Script terminated. (0B19CA64)
[19:49:17.414991] (system) ChatID: Script terminated. (0B19CBEC)
[19:49:17.415990] (system) Check MoonLoader Updates: Script terminated. (0B19CD74)
[19:49:17.415990] (system) ML-ReloadAll: Script terminated. (0B19D084)
[19:49:17.416989] (system) SF Integration: Script terminated. (0B19C444)
Не баг, просто у нас был кривой файл, мне сразу замена помогла, в lib
 
  • Влюблен
Реакции: cainprivado

kin4stat

mq-team
Всефорумный модератор
2,731
4,693
Можно добавить рендр киллстата с помощью directX, а не своими текстурками. Тогда не будет отличия от стандартного киллстата.
Lua:
local ffi = require 'ffi'
ffi.cdef([[
    struct stKillEntry
    {
        char                    szKiller[25];
        char                    szVictim[25];
        uint32_t                clKillerColor; // D3DCOLOR
        uint32_t                clVictimColor; // D3DCOLOR
        uint8_t                    byteType;
    } __attribute__ ((packed));

    struct stKillInfo
    {
        int                        iEnabled;
        struct stKillEntry        killEntry[5];
        int                     iLongestNickLength;
        int                     iOffsetX;
        int                     iOffsetY;
        void                    *pD3DFont; // ID3DXFont
        void                    *pWeaponFont1; // ID3DXFont
        void                       *pWeaponFont2; // ID3DXFont
        void                    *pSprite;
        void                    *pD3DDevice;
        int                     iAuxFontInited;
        void                     *pAuxFont1; // ID3DXFont
        void                     *pAuxFont2; // ID3DXFont
    } __attribute__ ((packed));
]])

ffi.cdef([[
typedef struct stRECT
{
    int left, top, right, bottom;
} RECT;

typedef struct stID3DXFont
{
    struct ID3DXFont_vtbl* vtbl;
} ID3DXFont;

struct ID3DXFont_vtbl
{
        void* QueryInterface; // STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;
    void* AddRef; // STDMETHOD_(ULONG, AddRef)(THIS) PURE;
    uint32_t (__stdcall * Release)(ID3DXFont* font); // STDMETHOD_(ULONG, Release)(THIS) PURE;

    // ID3DXFont
    void* GetDevice; // STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9 *ppDevice) PURE;
    void* GetDescA; // STDMETHOD(GetDescA)(THIS_ D3DXFONT_DESCA *pDesc) PURE;
    void* GetDescW; // STDMETHOD(GetDescW)(THIS_ D3DXFONT_DESCW *pDesc) PURE;
    void* GetTextMetricsA; // STDMETHOD_(BOOL, GetTextMetricsA)(THIS_ TEXTMETRICA *pTextMetrics) PURE;
    void* GetTextMetricsW; // STDMETHOD_(BOOL, GetTextMetricsW)(THIS_ TEXTMETRICW *pTextMetrics) PURE;

    void* GetDC; // STDMETHOD_(HDC, GetDC)(THIS) PURE;
    void* GetGlyphData; // STDMETHOD(GetGlyphData)(THIS_ UINT Glyph, LPDIRECT3DTEXTURE9 *ppTexture, RECT *pBlackBox, POINT *pCellInc) PURE;

    void* PreloadCharacters; // STDMETHOD(PreloadCharacters)(THIS_ UINT First, UINT Last) PURE;
    void* PreloadGlyphs; // STDMETHOD(PreloadGlyphs)(THIS_ UINT First, UINT Last) PURE;
    void* PreloadTextA; // STDMETHOD(PreloadTextA)(THIS_ LPCSTR pString, INT Count) PURE;
    void* PreloadTextW; // STDMETHOD(PreloadTextW)(THIS_ LPCWSTR pString, INT Count) PURE;

    int (__stdcall * DrawTextA)(ID3DXFont* font, void* pSprite, const char* pString, int Count, RECT* pRect, uint32_t Format, uint32_t Color); // STDMETHOD_(INT, DrawTextA)(THIS_ LPD3DXSPRITE pSprite, LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color) PURE;
    void* DrawTextW; // STDMETHOD_(INT, DrawTextW)(THIS_ LPD3DXSPRITE pSprite, LPCWSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color) PURE;

    void (__stdcall * OnLostDevice)(ID3DXFont* font); // STDMETHOD(OnLostDevice)(THIS) PURE;
    void (__stdcall * OnResetDevice)(ID3DXFont* font); // STDMETHOD(OnResetDevice)(THIS) PURE;
};

uint32_t D3DXCreateFontA(void* pDevice, int Height, uint32_t Width, uint32_t Weight, uint32_t MipLevels, bool Italic, uint32_t CharSet, uint32_t OutputPrecision, uint32_t Quality, uint32_t PitchAndFamily, const char* pFaceName, ID3DXFont** ppFont);
]])

local ID = {
    Background = -1,
    Unarmed = 0,
    Knuckles = 1,
    Golf = 2,
    Stick = 3,
    Knife = 4,
    Bat = 5,
    Shovel = 6,
    Cue = 7,
    Katana = 8,
    Chainsaw = 9,
    Dildo1 = 10,
    Dildo2 = 11,
    Dildo3 = 12,
    Dildo4 = 13,
    Flowers = 14,
    Cane = 15,
    Grenade = 16,
    Gas = 17,
    Molotov = 18,
    Pistol = 22,
    Slicend = 23,
    Eagle = 24,
    Shotgun = 25,
    Sawnoff = 26,
    Combat = 27,
    Uzi = 28,
    Mp5 = 29,
    Ak47 = 30,
    M4 = 31,
    Tec9 = 32,
    Rifle = 33,
    Sniper = 34,
    RPG = 35,
    Launcher = 36,
    Flame = 37,
    Minigun = 38,
    Sachet = 39,
    Detonator = 40,
    Spray = 41,
    Extinguisher = 42,
    Goggles1 = 44,
    Goggles2 = 45,
    Parachute = 46,
}

--таблица кодов иконок
local RenderGun = {
    [ID.Background] = 71,
    [ID.Unarmed] = 37,
    [ID.Knuckles] = 66,
    [ID.Golf] = 62,
    [ID.Stick] = 40,
    [ID.Knife] = 67,
    [ID.Bat] = 63,
    [ID.Shovel] = 38,
    [ID.Cue] = 34,
    [ID.Katana] = 33,
    [ID.Chainsaw] = 49,
    [ID.Dildo1] = 69,
    [ID.Dildo2] = 69,
    [ID.Dildo3] = 69,
    [ID.Dildo4] = 69,
    [ID.Flowers] = 36,
    [ID.Cane] = 35,
    [ID.Grenade] = 64,
    [ID.Gas] = 68,
    [ID.Molotov] = 39,
    [ID.Pistol] = 54,
    [ID.Slicend] = 50,
    [ID.Eagle] = 51,
    [ID.Shotgun] = 61,
    [ID.Sawnoff] = 48,
    [ID.Combat] = 43,
    [ID.Uzi] = 73,
    [ID.Mp5] = 56,
    [ID.Ak47] = 72,
    [ID.M4] = 53,
    [ID.Tec9] = 55,
    [ID.Rifle] = 46,
    [ID.Sniper] = 65,
    [ID.RPG] = 52,
    [ID.Launcher] = 41,
    [ID.Flame] = 42,
    [ID.Minigun] = 70,
    [ID.Sachet] = 60,
    [ID.Detonator] = 59,
    [ID.Spray] = 47,
    [ID.Extinguisher] = 44,
    [ID.Goggles1] = 45,
    [ID.Goggles2] = 45,
    [ID.Parachute] = 58
}

function main()
    while not isSampAvailable() do wait(0) end
    if not isSampfuncsLoaded() and not isCleoLoaded() then return end

    font_gtaweapon3, font_gtaweapon3_black = d3dxfont_create('gtaweapon3')
    fonts_loaded = true
 
    wait(-1)
end

function d3dxfont_draw(font, text, rect, color, format)
    local prect = ffi.new('RECT[1]', {{rect[1], rect[2], rect[3], rect[4]}})
    return font.vtbl.DrawTextA(font, nil, text, -1, prect, format, color)
end

function onD3DPresent()
    if fonts_loaded and not sampIsScoreboardOpen() and not isPauseMenuActive() and ffi.cast("struct stKillInfo*", sampGetKillInfoPtr()).iEnabled == 1 and not isKeyDown(0x79) then
        local sw, sh = getScreenResolution()
        local posX, posY = 500, 500 -- X, Y
        -- Фон
        d3dxfont_draw(font_gtaweapon3_black, string.char(RenderGun[-1]), {posX, posY + 1, sw, sh}, 0xFF000000, 0x10)
     
        --Иконка
        local weaponId = 24 -- Дигл
        d3dxfont_draw(font_gtaweapon3, string.char(RenderGun[weaponId]), {posX, posY, sw, sh}, 0xFFFFFFFF, 0x10)
    end
end

function d3dxfont_create()
    local d3ddev = ffi.cast("struct stKillInfo*", sampGetKillInfoPtr())
    local tab = {
        [1] = d3ddev.pWeaponFont2,
        [2] = d3ddev.pWeaponFont2,
    }
    local pfont = ffi.new('ID3DXFont*[2]', tab)
    return pfont[0], pfont[1]
end
Результат: Посмотреть вложение 78004
Вот тут подробнее: https://www.blast.hk/threads/13315/page-13#post-167421
Ну и костыль бля. Так ты еще при копировании у фипа еще Reset забыл