Lua [ARZ] Fix sampSetCurrentDialogEditboxText

Sleash

Активный
Автор темы
86
146
Собсна фикс функции sampSetCurrentDialogEditboxText для разработчиков скриптов для лаунчера аризоны.
Ибо аризоновцы долбаёбы и своим новым чатом поломали к хуям эту функцию (она не работает), а вдобавок и вставляют это в чат нахуй.
Узнал о проблеме когда писал скрипт на заказ связанный с заменой текста в поле ввода диалога.
Для тех, кто не хочет ебаться с проблемой, прилагаю sampSetCurrentDialogEditboxTextFix под спойлером ниже, требования ffi:
sampSetCurrentDialogEditboxTextFix:
local ffi = require 'ffi'
ffi.cdef[[
    typedef struct CUniBuffer {
        unsigned __int16 *m_pwszBuffer;
    } CUniBuffer;
    typedef struct CDXUTControl CDXUTControl;
    typedef struct CDXUTEditBox {
        struct CDXUTControl* baseclass_0;
        struct CUniBuffer* m_buffer;
    } CDXUTEditBox;
    typedef struct IDirect3DDevice9 IDirect3DDevice9;
    typedef struct CDXUTDialog CDXUTDialog;
    typedef struct CDXUTListBox CDXUTListBox;
    typedef struct stDLG {
        struct IDirect3DDevice9* m_pDevice;
        long unsigned int m_position[2];
        long unsigned int m_size[2];
        long unsigned int m_buttonOffset[2];
        struct CDXUTDialog* m_pDialog;
        struct CDXUTListBox* m_pListbox;
        struct CDXUTEditBox* m_pEditbox;
    } stDLG;
]]
function sampSetCurrentDialogEditboxTextFix(newstring)
    local st1 = ffi.cast("stDLG*", sampGetDialogInfoPtr())
    ffi.cast("void(__thiscall *)(struct CDXUTEditBox*, const char *, char)", getModuleHandle("samp.dll") + 0x84E70)(st1.m_pEditbox, ffi.cast("const char *", newstring), 0)
end
Я честно пытался найти адрес оригинальной функции в MoonLoader.asi для того, что бы хукать и одним скриптом чинить все биндеры/хелперы и подобную тему, которая полегла, даже вроде как нашёл, но то ли я дурак, то ли лыжи не едут, короче пока так, может кому пригодится.
Думаю принцип применения понятен, а для непонятливых:
Весь код, что под спойлером закинуть в начало Вашего скрипта, и заменить все sampSetCurrentDialogEditboxText на sampSetCurrentDialogEditboxTextFix

UPD: Благодаря @whyega52 нашёл способ сделать фикс не только для разработчиков, но и для игроков, прикреплённый ниже файл (fixdlgarz.lua) закинуть в мунлоадер, и после этого все скрипты, что должны были вставлять текст в диалог начнут это делать подобающе на лаунчере аризоны
P.S. Для разработчиков, которые будут смотреть мой код - пожалуйста не пиздите меня
 

Вложения

  • fixdlgarz.lua
    3.1 KB · Просмотры: 19
Последнее редактирование:
  • Нравится
Реакции: 0x18d036 и whyega52

whyega52

Гений, миллионер, плейбой, долбаеб
Модератор
2,732
2,554
typedef struct CUniBuffer { unsigned __int16 *m_pwszBuffer; } CUniBuffer; typedef struct CDXUTControl CDXUTControl; typedef struct CDXUTEditBox { struct CDXUTControl* baseclass_0; struct CUniBuffer* m_buffer; } CDXUTEditBox; typedef struct IDirect3DDevice9 IDirect3DDevice9; typedef struct CDXUTDialog CDXUTDialog; typedef struct CDXUTListBox CDXUTListBox;
доеб до мелочи, но все же, можешь не объявлять структуры, к полям которых не обращаешься и они используются в качестве указателей, можешь использовать заглушку по типу void* или указателя на что-либо еще, а не структуру
 
  • Нравится
Реакции: ernestik и Maxim25012

whyega52

Гений, миллионер, плейбой, долбаеб
Модератор
2,732
2,554
Я честно пытался найти адрес оригинальной функции в MoonLoader.asi для того, что бы хукать и одним скриптом чинить все биндеры/хелперы и подобную тему, которая полегла, даже вроде как нашёл, но то ли я дурак, то ли лыжи не едут, короче пока так, может кому пригодится.
сама функция реализуется внутри SAMPFUNCS.asi, который регистрирует игровой опкод, а мун лишь его вызывает, но в теории, можешь поставить хук куда-нибудь сюда:
1727372255136.png
 
  • Нравится
Реакции: Sleash и ernestik

Sleash

Активный
Автор темы
86
146
сама функция реализуется внутри SAMPFUNCS.asi, который регистрирует игровой опкод, а мун лишь его вызывает, но в теории, можешь поставить хук куда-нибудь сюда:
Посмотреть вложение 252829
Сэнк ю, мерси, спасибо, хайл...
Короче реализовал скрипт-лекарь, полазав в SAMPFUNCS.asi
 
  • Нравится
Реакции: whyega52