Информация MoonLoader - разработка

darktau34

Новичок
8
2
Не устанавливается плагин autocomplete-lua, при установке выдаёт данную ошибку *тык* . Пробовал переносить в папку другого пользователя, название которого на английском, такая же ситуация. Так же качал portable версию, та же дичь.
 
  • Нравится
Реакции: ufdhbi и 4el0ve4ik

FYP

Известный
Автор темы
Администратор
1,763
5,899
Не устанавливается плагин autocomplete-lua, при установке выдаёт данную ошибку *тык* . Пробовал переносить в папку другого пользователя, название которого на английском, такая же ситуация. Так же качал portable версию, та же дичь.
есть такая проблема, автору уже дважды сообщали об этом, но что-то он не торопится это исправлять. единственное известное решение пока - установить git: Git - Downloading Package (https://git-scm.com/download/win)
 

memir

🇷🇺
Всефорумный модератор
339
611
Код:
function getButtonsPressed()
    if(isKeyDown(0x12) == true) then
        if(isKeyDown(0x31) == true) then
            sampSendChat("/s Какое-то сообщение на русском")
            sampSendChat("/s Какое-то сообщение на русском")
            end
    end
end
Кодировка UTF-8 в атоме стоит. В чем проблема? В чат иероглифы идут.
 

4el0ve4ik

Известный
Всефорумный модератор
1,549
1,342
Код:
function getButtonsPressed()
    if(isKeyDown(0x12) == true) then
        if(isKeyDown(0x31) == true) then
            sampSendChat("/s Какое-то сообщение на русском")
            sampSendChat("/s Какое-то сообщение на русском")
            end
    end
end
Кодировка UTF-8 в атоме стоит. В чем проблема? В чат иероглифы идут.
Windows-1251 поставь.
 
  • Нравится
Реакции: memir

ynhhoJ

Известный
102
6
Заметил что не отображаются 3D(sampCreate3dTextEx) текста кроме белого и черного цвета.
0xFFFFFFFF - отображаются
0x000000FF - отображаются

0x00FF00FF (зелёный) - не отображаются
0xFF0000FF (красный) - не отображаются
и т.д.

----------------------UPDATE----------------------
Всё работает, я просто не понял как работать с цветами.
 
Последнее редактирование:

ufdhbi

Известный
Проверенный
1,458
865

leva201298

Новичок
9
0
Чтобы было интуитивно понятно нужно сделать серый фон страницы?
Нет, я имею в виду к примеру мне надо найти как получить наш ид в сампе. ввожу в поиск "player id" и не чего подходящего не нашёл
Было бы лучше если бы был поиск по описанию
 

Moonlight_Ru

Известный
66
21
Возможно ли сделать событие, по примеру onScriptTerminate(), только чтобы код выполнялся в любом случае (При краше игры, при закрытии свёрнутой игры, при закрытии игры через диспетчер задач)? Это было бы очень удобно для автоматического сохранения чего-либо в файл.
 
  • Нравится
Реакции: Bogach

FYP

Известный
Автор темы
Администратор
1,763
5,899
@Moonlight_Ru onQuitGame, onScriptTerminate и onExitScript вызываются при закрытии свёрнутой игры. краш отследить можно, но есть проблема - при краше процесс находится в аварийном состоянии и попытка вызвать lua-функцию может привести к неопределенному поведению, поэтому делать событие для этого бессмысленно. а вот для случая закрытия игры через диспетчер задач невозможно (без внешних сервисов) сделать такое событие, поскольку в этом случае процессу не приходит никаких оповещений о его завершении.
 
  • Нравится
Реакции: Moonlight_Ru

FYP

Известный
Автор темы
Администратор
1,763
5,899
добавил информацию по новым функциям версий .024 и .025 на вики и сделал примитивный пример рендера с помощью directx целиком на луа.
заметьте, что с помощью SAMPFUNCS в клео и луа нельзя рисовать пост-эффекты и символы из символьных шрифтов, и вообще всё ограничивается примитивными элементами.
в мунлоадере теперь можно рисовать что угодно поверх изображения игры, используя все возможности DirectX 9:
1460-20171119_162248.jpg

не пугайтесь, что кода много, большую часть занимают декларации FFI.
Lua:
local key = require 'vkeys'
local ffi = require 'ffi'
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 d3dx9_43 = ffi.load('d3dx9_43.dll')

function d3dxfont_create(name, height, charset)
    charset = charset or 1
    local d3ddev = ffi.cast('void*', getD3DDevicePtr())
    local pfont = ffi.new('ID3DXFont*[1]', {nil})
    if tonumber(d3dx9_43.D3DXCreateFontA(d3ddev, height, 0, 600, 1, false, charset, 0, 4, 0, name, pfont)) < 0 then
        return nil
    end
    return pfont[0]
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 onD3DDeviceLost()
    if fonts_loaded then
        font_arial.vtbl.OnLostDevice(font_arial)
        font_wingdings.vtbl.OnLostDevice(font_wingdings)
    end
end

function onD3DDeviceReset()
    if fonts_loaded then
        font_arial.vtbl.OnResetDevice(font_arial)
        font_wingdings.vtbl.OnResetDevice(font_wingdings)
    end
end

function onD3DPresent() -- в этом событии и осуществляются все операции рисования с помощью DirectX
    if draw then
        callFunction(0x007037C0, 2, 2, 0x40, 1) -- рисуем пост-эффект "зернистость", он используется при активации очков ночного и теплового видения
        callFunction(0x007030A0, 1, 1, representFloatAsInt(20.0)) -- рисуем эффект размытия изображения, такой используется при быстрой езде в машине
        if fonts_loaded then
            d3dxfont_draw(font_arial, 'Arial test string', {10, 10, 600, 200}, 0xFF88DD44, 0) -- выводим обычный текст в левом верхнем углу
            local sw, sh = getScreenResolution()
            local str = ''
            for i = 33, 255 do str = str .. string.char(i) end
            d3dxfont_draw(font_wingdings, str, {10, 60, sw, sh}, 0xFFDDAA00, 0x10) -- выводим все символы шрифта Wingdings
        end
    end
end

function onExitScript()
    if fonts_loaded then
        font_arial.vtbl.Release(font_arial)
        font_wingdings.vtbl.Release(font_wingdings)
    end
end

function main()
    draw = true
    font_arial = d3dxfont_create('Arial', 64)
    font_wingdings = d3dxfont_create('Wingdings', 72, 2)
    fonts_loaded = true
end
 

Deffience

Новичок
3
0
Ребят, работаю на Mac, довольно таки не удобно, но всё же хочу выучить данный язык. тобишь писать скрипты samp. С чего начать? moonloader установил, SF тоже. Как открыть консоль в сампе для вывода там скриптов?