- 82
- 155
Собсна фикс функции sampSetCurrentDialogEditboxText для разработчиков скриптов для лаунчера аризоны.
Ибо аризоновцы долбаёбы и своим новым чатом поломали к хуям эту функцию (она не работает), а вдобавок и вставляют это в чат нахуй.
Узнал о проблеме когда писал скрипт на заказ связанный с заменой текста в поле ввода диалога.
Для тех, кто не хочет ебаться с проблемой, прилагаю sampSetCurrentDialogEditboxTextFix под спойлером ниже, требования ffi:
Я честно пытался найти адрес оригинальной функции в MoonLoader.asi для того, что бы хукать и одним скриптом чинить все биндеры/хелперы и подобную тему, которая полегла, даже вроде как нашёл, но то ли я дурак, то ли лыжи не едут, короче пока так, может кому пригодится.
Думаю принцип применения понятен, а для непонятливых:
Весь код, что под спойлером закинуть в начало Вашего скрипта, и заменить все sampSetCurrentDialogEditboxText на sampSetCurrentDialogEditboxTextFix
UPD: Благодаря @whyega52 нашёл способ сделать фикс не только для разработчиков, но и для игроков, прикреплённый ниже файл (fixdlgarz.lua) закинуть в мунлоадер, и после этого все скрипты, что должны были вставлять текст в диалог начнут это делать подобающе на лаунчере аризоны
P.S. Для разработчиков, которые будут смотреть мой код - пожалуйста не пиздите меня
Ибо аризоновцы долбаёбы и своим новым чатом поломали к хуям эту функцию (она не работает), а вдобавок и вставляют это в чат нахуй.
Узнал о проблеме когда писал скрипт на заказ связанный с заменой текста в поле ввода диалога.
Для тех, кто не хочет ебаться с проблемой, прилагаю 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
Думаю принцип применения понятен, а для непонятливых:
Весь код, что под спойлером закинуть в начало Вашего скрипта, и заменить все sampSetCurrentDialogEditboxText на sampSetCurrentDialogEditboxTextFix
UPD: Благодаря @whyega52 нашёл способ сделать фикс не только для разработчиков, но и для игроков, прикреплённый ниже файл (fixdlgarz.lua) закинуть в мунлоадер, и после этого все скрипты, что должны были вставлять текст в диалог начнут это делать подобающе на лаунчере аризоны
P.S. Для разработчиков, которые будут смотреть мой код - пожалуйста не пиздите меня
Вложения
Последнее редактирование: