Что делать если не работает мунлоадер самп

Вылет после установки SampFuncs и Moonloader

TheRaymondPlex

Как понятно из названия, меня беспокоит проблема вылета игры, которую я не знаю, как исправить.
Для начала расскажу, какой версией софта я пользуюсь. Сама ГТА изначально была скачана через Steam. Папка с игрой была переименована, чтоб Steam не обновлял игру. Потом игра подверглась даунгрейду — понижению актуальной версии до самой первой версии игры v 1.0. Это сделано для того, чтобы можно было улучшить игру в целом. Далее в игру была установлена библиотека CLEO 4.4, которая необходима для графических и скриптовых исправлений первой версии, для изменения некоторых эффектов постобработки, для исправления широкоформатного режима, и так далее. Основополагающим модом является Silent Patch. Без него никак.

После того, когда ГТА была полностью готова к игре, она прекрасно работала. Никаких вылетов. Одиночку спокойно можно проходить.
Затем был установлен САМП 0.3.7 R1. И на нем тоже все прекрасно работает.
Но затем я нашел здесь, на этом форуме, раздел, в котором прописан разрешенный софт и вспомогательные скрипты, которые не дают никакого преимущества. Я заинтересовался этим. И выяснилось, что для корректной работы подобных вспомогательных скриптов, обязательно наличие SampFuncs и Moonloader.

И вот что происходит после установки: обычная игра, в одиночном режиме, отказывается работать. Дальше экрана загрузки сохранения никуда не грузится.
В САМПе дела обстоят по-другому: сама программа работает как и обычно, но вот при присоединении к серверу загрузка происходит успешно. И можно спокойно бегать, прыгать, ездить. Какое-то время.. Для проверки работоспособности SampSuncs и Moonloader был установлен безобидный скрипт, который показывает на экране реальное время, дату, никнейм игрока, его ID в сессии, и цвет ника. И скрипт работает. Все красиво, и все показывает. Но каждый раз происходит одно и то же.

Читайте также:  Гугл адсенс настроить оплату банковским переводом

Не пройдет и 10ти минут, как игра выдаст следующую ошибку, на скрине видно.

Сразу после нажатия ОК игра закрывается.
При этом на компьютере абсолютно все необходимые библиотеки установлены. Все библиотеки Visual C++ до 2019 года, все необходимые .NET Framework.
Искал решение подобных ошибок в САМПе у других людей. Но ни у кого подобного не нашел. Чаще всего у всех других игроков вылеты/краши происходят сразу после попытки подключиться к серверу. Там им помогает смена системного пользователя. Не до конца понимаю, как именно это им помогает, но факт остается фактом.

Пишу сюда с надеждой, что кто-то, может быть, сталкивался с похожей ситуацией, и сможет мне помочь решить эту проблему?

Источник

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

Известный

Чем же так хорош MoonLoader для разработчика? Чем Lua лучше SCM (CLEO)?
Ну, во-первых, всем. Нет ничего, чем SCM может похвастаться перед Lua. Серьёзно, смотрите:

  • Никаких лимитов: строки, массивы, количество переменных — всё это может быть любого размера и количества.
  • Не нужно вручную контролировать распределение памяти.
  • Нет необходимости компилировать: это даёт возможность редактировать Lua-скрипты в любом текстовом редакторе без нужды в настройке. «Нет необходимости» — это не означает, что компилировать нельзя вовсе.
  • Скорость работы: MoonLoader использует реализацию Lua ‘LuaJIT’, который стал популярен именно благодаря своей скорости работы, и до сих пор находится в топе лидирующих по скорости языков (пруф: Programming Languages Benchmarks (https://attractivechaos.github.io/plb/))
  • Доступность к изучению: несмотря на то, что Lua прост и любой сможет выучить его за короткое время, в сети полным полно примеров, уроков, статей, учебников и разных сервисов для обучения.
  • Доступность решений: на любую универсальную задачу гарантированно найдутся уже готовые решения на Lua, а разнообразие библиотек и модулей поможет в достижении любой цели.
  • FFI: в LuaJIT есть FFI, позволяющий почти как в C и C++ обращаться к машинному коду и памяти, что является неотъемлемой составляющей моддинга. Вдобавок к этому для Lua есть ещё библиотека DynASM, дающая возможность использовать ассемблерные инструкции прямо в Lua.
  • Стабильность и отладка: если в CLEO-скрипте есть фатальная ошибка, то он просто падает, и чаще всего вместе с ним падает и сама игра, при этом иногда найти причину бывает крайне сложно. В Lua, если в скрипте ошибка, он просто завершится, сообщив об этом и о самой ошибке в лог. Кроме того в Lua есть встроенные средства для отладки скриптов.
  • Среда разработки: можно выбрать любую на ваш вкус, пользуйтесь даже обычным блокнотом, если Вам так удобнее.
  • Сам язык: Lua давно зарекомендовал себя одним из самых лучших скриптовых языков. Lua действительно простой язык, и в то же время очень мощный ввиду своей гибкости. На Lua пишут целые игры и он даже используется в веб-разработке.

Ну ладно, а есть ли у MoonLoader какие-нибудь преимущества перед ASI-плагинами?
Да. MoonLoader — это не только загрузчик Lua-скриптов, это ещё и библиотека с огромным набором функций для моддинга. MoonLoader не нужно никак настраивать, для того чтобы начать разработку под него. Нет необходимости в компиляции и скрипты очень просто загружать, выгружать, перезагружать, что значительно ускоряет разработку. Тем, кто не знаком с программированием или языками Delphi\C\C++ (и проч.), начать разрабатывать модификации на Lua будет гораздо проще. При этом простота разработки не означает, что Lua-скрипты не могут быть масштабными модификациями — MoonLoader включает в себя всю необходимую функциональность. Олдскульным разработчикам он тоже окажется полезным, ведь быстро написать простой скрипт на Lua куда проще, чем создавать для этого отдельный плагин.

MoonLoader использует технику эмуляции существующих опкодов, чтобы вобрать в себя все возможности CLEO. Конечно, в MoonLoader есть и свои функции, и ещё добавится много своих функций, но пока-что основную часть составляют именно опкоды, и в связи с этим документацию для большинства функций писать не придётся — она уже существует. Однако, некоторые опкоды либо не нужны, либо не подходят в чистом виде для Lua, документация по ним и остальным функциям находится на Wiki.

Списки функций и изменений

  • Все функции, включая опкоды — moonloader — functions | BlastHack — DEV_WIKI (https://www.blast.hk/wiki/moonloader:functions)
  • Функции, основанные на опкодах, но отличающиеся от оригинала — moonloader — changed_opcodes | BlastHack — DEV_WIKI (https://www.blast.hk/wiki/moonloader:changed_opcodes)
  • Удаленные и не добавленные опкоды, имеющие замену — moonloader — removed_opcodes | BlastHack — DEV_WIKI (https://www.blast.hk/wiki/moonloader:removed_opcodes)
  • Вырезанные опкоды ненужные в Lua и не имеющие назначения — moonloader — missing_opcodes | BlastHack — DEV_WIKI (https://www.blast.hk/wiki/moonloader:missing_opcodes)

Стандарт
Прежде чем начать говорить непосредственно о разработке, нужно сказать пару слов про стандарт.
Стандарт необходим в любой сфере разработки. Наличие стандарта и следование ему позволяет избежать конфликтов между разными продуктами, а также способствует качеству разработки. MoonLoader тоже старается придерживаться кое-каких стандартов.
Первое — это иерархия директорий.

  • ‘moonloader’ — основная директория MoonLoader. В ней располагаются скрипты, лог-файл ‘moonloader.log’ и остальные поддиректории, имеющие отношение к Lua-скриптам.
  • ‘moonloader\lib’ — эта директория предназначена для библиотек и модулей.
  • ‘moonloader\config’ — для конфигов любого вида, в т.ч. и конфигов в виде скриптов.
  • ‘moonloader\resource’ — здесь располагаются все ресурсы, используемые скриптами. В настоящий момент из подпапки ‘txd’ в этой директории загружаются .txd-файлы скриптовой функцией ‘loadTextureDictionary’.

На текущий момент в набор MoonLoader уже входят некоторые библиотеки.

  • ‘moonloader’ — инклуд, содержащий константы, относящиеся к MoonLoader
  • ‘sampfuncs’ — константы плагина SAMPFUNCS
  • ‘bitex’ — расширение стандартной библиотеки ‘bit’
  • ‘vector3d’ — класс 3D-вектора
  • ‘matrix3x3’ — класс трёхмерной матрицы вращения
  • ‘game.models’ — список идентификаторов основных моделей игры
  • ‘game.globals’ — список идентификаторов глобальных переменных игры

Второе — встроенная информация о скрипте.
Задаётся внутри скрипта с помощью функций. Использовать вовсе не обязательно, но желательно.

  • script_name(string name) — задаёт название скрипта
  • script_author(string author) — псевдоним функции ‘script_authors’, отличается только более подходящим названием для указания одного автора
  • script_description(string description) — задаёт описание скрипта
  • script_version_number(int version) — задаёт числовую версию скрипта, предназначен преимущественно для системы проверки обновлений
  • script_version(string version) — задаёт текстовую версию скрипта
  • script_authors(string author, . ) — задаёт список авторов (разработчиков) скрипта
  • script_dependencies(string name, . ) — задаёт зависимости скрипта, предназначен для вывода. в будущем получит дополнительную функциональность
  • script_moonloader(int version) — задаёт минимальную требуемую версию MoonLoader, выводит сообщение об ошибке, если версия не соответствует (не прекращает работу скрипта)

Третье — глобальные переменные.

Источник

Moon ImGui — Dear ImGui for MoonLoader

Это ImGui — самый функциональный и одновременно самый простой GUI-фреймворк из всех, что мне известны.
И теперь каждый из вас сможет использовать его в своих Lua скриптах для MoonLoader.

GitHub — ocornut/imgui: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies

Это работает, но что-то не впечатляет, согласитесь. Окно изначально маленькое, показывается сразу при старте и его нельзя закрыть.
Сделаем его побольше, добавим активацию и какое-нибудь действие:

В коде была использована переменная типа ImBool — это один из новых типов, добавленных в Moon ImGui. Такой подход неизбежен, поскольку в луа невозможна передача базовых типов по ссылке. Это не единственное изменение, есть и другие, вам потребуется о них знать. Вот их полный список:

Разница между C++ API и Lua API

Описание В C++ В Lua
Все функции из пространства имён ImGui, как и все типы, и все перечисления находятся в таблице, возвращаемой модулем ImGui::Text(«text»);
ImVec2(0.1f, 2.3f);
imgui.Text(«text»);
imgui.ImVec2(0.1, 2.3);
Названия перечислений (enum) и их значений лишились префиксов и символа «_» в конце ImGuiWindowFlags_NoTitleBar imgui.WindowFlags.NoTitleBar
Значения базовых типов, которые в ImGui записываются по указателю, должны быть использованы через специальные типы: ImBool для bool, ImFloat для float, ImInt для int и unsigned int, ImFloat2-4 для float4, ImInt2-4 для int4 static bool win = false; ImGui::Begin(«window», &win);
win = false;
local win = imgui.ImBool(false) imgui.Begin(«window», win)
win.v = false
Функции с переменным количеством аргументов для форматирования текста не поддерживают форматирование, используйте string.format ImGui::Text(«hey, %s», name) imgui.Text(string.format(‘hey, %s’, name))
Функции InputText и InputTextMultiline принимают ImBuffer вместо char* buf + size_t buf_size char buf[256]<>;
ImGui::InputText(‘input’, buf, sizeof(buf))
local buf = imgui.ImBuffer(256);
imgui.InputText(‘input’, buf)
Динамические массивы в виде массива указателей + количество элементов заменены таблицами const char* items[] = <"1", "2", "3">; ImGui::ListBox(«list», &lb_cur, items, 3) imgui.ListBox(‘list’, lb_cur, <'1', '2', '3'>)
Функции с аргументами const char* str_start, const char* str_end, идущими подряд, принимают обычную строку ImGui::TextUnformatted(some_str, some_str + 24) imgui.TextUnformatted(some_str)
Все функции, принимающие калбэк + user_data, принимают ImCallback void swszCb(ImGuiSizeConstraintCallbackData*) <>;
ImGui::SetNextWindowSizeConstraints(size_min, size_max, &swszCb, (void*)&my_data)
local swszCb = imgui.ImCallback(function(data) end)
imgui.SetNextWindowSizeConstraints(size_min, size_max, swszCb)
ImFont::CalcTextSizeA,
ImFontAtlas::CustomRect::CalcCustomRectUV,
ImFontAtlas::GetTexDataAsRGBA32,
ImFontAtlas::GetTexDataAsAlpha8,
ImFontAtlas::GlyphRangesBuilder::BuildRanges,
ImGui::ColorConvertRGBtoHSV и
ImGui::ColorConvertHSVtoRGB
возвращают значения вместо изменения по ссылке
float r, g, b;
ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b);
local r, g, b = imgui.ColorConvertHSVtoRGB(h, s, v)
ImGuiIO::IniFilename и ImGuiIO::LogFilename принимают ImBuffer вместо указателя на строку const char ini_path[] = «my/path.ini»;
ImGui::GetIO().IniFilename = ini_path;
local ini_path = imgui.ImBuffer(‘my/path.ini’)
imgui.GetIO().IniFilename = ini_path
Изменение ImGuiTextEditCallbackData::Buf автоматически обновляет длину и задаёт значение BufDirty s.copy(data.Buf, data.BufSize);
data.BufTextLen = s.length();
data.BufDirty = true;
data.Buf = ‘text’

Остальные изменения

  • Добавлено несколько дополнительных функций
    • ImColor::ToU32 — преобразование ImColor в целое
    • ImGui::GetStyleColorU32 вместо ImGui::GetColorU32 для цвета стиля
    • ImGui::PlotLinesEx вместо callback-варианта PlotLines
    • ImGui::PlotHistogramEx вместо callback-варианта PlotHistogram
    • ImDrawList::AddTextEx вместо AddText с дополнительными аргументами
  • Отсутствуют функции
    • Функции, принимающие и возвращающие void*-идентификаторы (например, PushID(void*) и GetID(void*))
    • Функции с va_list-форматированием текста (например, TextV)

Теперь, зная всё это, вы уже можете начать работать с Moon ImGui. За списком функций ImGui и примерами на C++ обращайтесь на официальную страницу.

Но это ещё не всё. Вся работа с текстом в ImGui основана на UTF-8, т.е. текст не ограничен лишь стандартным набором символов. Но т.к. GTA, SAMP и MoonLoader не поддерживают юникод, кодировки необходимо конвертировать.

Работа с другими языками на примере русского
В MoonLoader v.025 были добавлены библиотеки lua-iconv и encoding, они призваны помочь в работе с разными кодировками текста.
Следующий пример показывает как использовать текст на русском в ImGui:
Скрипт должен быть сохранён в кодировке Windows-1251

Не так уж и сложно, верно? Текст, передаваемый ImGui — кодируем, текст, получаемый из ImGui — декодируем. Если в вашем скрипте много текста на русском для ImGui, но мало текста, выводимого через MoonLoader (в лог или чат SA:MP, к примеру), то можно сделать наоборот — сохранить скрипт в кодировке UTF-8 и не кодировать текст, передаваемый ImGui, а вместо этого кодировать текст при работе с функциями мунлоадера.

Остальные особенности
В Moon ImGui есть несколько дополнительных возможностей. В частности, они реализуют взаимодействие с игрой и управление интерфейсом.

На этом всё. Во вложениях есть пример с демонстрацией использования всех этих фич, рекомендую посмотреть код и пощупать его в игре. Вот скриншот:

Источник

Оцените статью