Не запускается самп ошибка moonloader

Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

Поскольку люди создают миллион тем с заголовком «Не работает мунлоадер» было решено создать эту тему.
Тут я разберу основные проблемы и как их убрать.

Что надо для работы мунлоадера?​

Для работы мунлоадера нужен лишь аси лоадер, не более. А вот у большинства скриптов есть зависимость от библиотек которые требуют наличия SAMPFUNCS. Либо же содержат функции которые требуют наличия SAMPFUNCS. SAMPFUNCS это дополнение к библиотеке CLEO 4, соответственно нам еще и клео надо.
Где же все его взять?
Cleo
— https://cleo.li/ru
SAMPFUNCS(R1) — https://www.blast.hk/threads/17/
SAMPFUNCS(R3) — https://www.blast.hk/threads/65247/
Moonloader — https://www.blast.hk/threads/13305/

1.Отсутствие какой-либо библиотеки.​

Ошибка выглядит следующим образом.

(error)    *НАЗВАНИЕ ФАЙЛА*.lua: ...*НАЗВАНИЕ СБОРКИ*moonloader*НАЗВАНИЕ ФАЙЛА*.lua:*НОМЕР СТРОКИ С ОШИБКОЙ*: module '*НАЗВАНИЕ БИБЛИОТЕКИ*' not found:    no field package.preload['*НАЗВАНИЕ БИБЛИОТЕКИ*']
    no file '*ПУТЬ К СБОРКЕ**НАЗВАНИЕ СБОРКИ*moonloaderlib*НАЗВАНИЕ БИБЛИОТЕКИ*.lua'
    no file '*ПУТЬ К СБОРКЕ**НАЗВАНИЕ СБОРКИ*moonloaderlib*НАЗВАНИЕ БИБЛИОТЕКИ*init.lua'
    no file '*ПУТЬ К СБОРКЕ**НАЗВАНИЕ СБОРКИ*moonloader*НАЗВАНИЕ БИБЛИОТЕКИ*.lua'
    no file '*ПУТЬ К СБОРКЕ**НАЗВАНИЕ СБОРКИ*moonloader*НАЗВАНИЕ БИБЛИОТЕКИ*init.lua'
    no file '.*НАЗВАНИЕ БИБЛИОТЕКИ*.lua'
    no file '*ПУТЬ К СБОРКЕ**НАЗВАНИЕ СБОРКИ*moonloaderlib*НАЗВАНИЕ БИБЛИОТЕКИ*.luac'
    no file '*ПУТЬ К СБОРКЕ**НАЗВАНИЕ СБОРКИ*moonloaderlib*НАЗВАНИЕ БИБЛИОТЕКИ*init.luac'
    no file '*ПУТЬ К СБОРКЕ**НАЗВАНИЕ СБОРКИ*moonloader*НАЗВАНИЕ БИБЛИОТЕКИ*.luac'
    no file '*ПУТЬ К СБОРКЕ**НАЗВАНИЕ СБОРКИ*moonloader*НАЗВАНИЕ БИБЛИОТЕКИ*init.luac'
    no file '.*НАЗВАНИЕ БИБЛИОТЕКИ*.luac'
    no file '*ПУТЬ К СБОРКЕ**НАЗВАНИЕ СБОРКИ*moonloaderlib*НАЗВАНИЕ БИБЛИОТЕКИ*.dll'
stack traceback:
    [C]: in function 'require'
    ...HACKmoonloader*НАЗВАНИЕ СКРИПТА*:*НОМЕР СТРОКИ С ОШИБКОЙ*: in main chunk
(error)    *НАЗВАНИЕ СКРИПТА*.lua: Script died due to an error. (*код который не надо*)

Если вы видите строку

module '*НАЗВАНИЕ БИБЛИОТЕКИ*' not found:

то это однозначно говорит вам что у вас нету определенной библиотеки. Рассмотрим реальный пример который я взял из темы чела ниже.

(error)    bypasser_2.lua: ...sEmilDesktopGTA BY SAMPHACKmoonloaderbypasser_2.lua:2: module 'neatjson' not found:    no field package.preload['neatjson']
    no file 'C:UsersEmilDesktopGTA BY SAMPHACKmoonloaderlibneatjson.lua'
    no file 'C:UsersEmilDesktopGTA BY SAMPHACKmoonloaderlibneatjsoninit.lua'
    no file 'C:UsersEmilDesktopGTA BY SAMPHACKmoonloaderneatjson.lua'
    no file 'C:UsersEmilDesktopGTA BY SAMPHACKmoonloaderneatjsoninit.lua'
    no file '.neatjson.lua'
    no file 'C:UsersEmilDesktopGTA BY SAMPHACKmoonloaderlibneatjson.luac'
    no file 'C:UsersEmilDesktopGTA BY SAMPHACKmoonloaderlibneatjsoninit.luac'
    no file 'C:UsersEmilDesktopGTA BY SAMPHACKmoonloaderneatjson.luac'
    no file 'C:UsersEmilDesktopGTA BY SAMPHACKmoonloaderneatjsoninit.luac'
    no file '.neatjson.luac'
    no file 'C:UsersEmilDesktopGTA BY SAMPHACKmoonloaderlibneatjson.dll'
stack traceback:
    [C]: in function 'require'
    ...sEmilDesktopGTA BY SAMPHACKmoonloaderbypasser_2.lua:2: in main chunk
(error)    bypasser_2.lua: Script died due to an error. (0F5F60BC)

Тут нам мунлоадер даёт понять что он не может найти библиотеку neatjson.lua, а это значит что её нету.
Как решить? Скачать и установить её в папку lib.

2. Несовместимый байт-код​

Рассмотрим следующую проблему. Вы посмотрели свой лог по первом пункте и ничего такого там не обнаружили. Это может быть не состыковка версий. Посмотрим как это выглядит.

(error) *НАЗВАНИЕ ФАЙЛА*.lua: *ПУТЬ К СБОРКЕ**НАЗВАНИЕ СБОРКИ*moonloader*НАЗВАНИЕ ФАЙЛА*.lua: cannot load incompatible bytecode
(error) *НАЗВАНИЕ ФАЙЛА*.lua: Script died due to an error. (*код который не над*)

Если у вас есть мозг либо вы не спали на уроках английского в школе, то вы уже поймете в чем проблема. Но я все же объясню. Мы видим строку

cannot load incompatible bytecode

Что же это значит? А то, что мунлоадер не может загрузить несовместимый байт-код. Что это я такое сморозил? Все просто. Ваш скрипт скомпилирован под другую версию мунлоадера. Пример: автор скомпилировал скрипт под 025 мунлоадер, на то время актуальный, но вот вышел 026 и все его используют, но скрипт уже на нем работать не будет, так как не та версия.
Как решить? У вас есть 2 варианта.

  1. Написать автору скрипта, чтобы он скомпилировал скрипт под новую версию муна.
  2. Конвертировать самому. https://www.blast.hk/threads/35380/ вам в помощь.

3. Отсутствие SAMPFUNCS

Такое тоже бывает, это может быть из-за отсутствия SAMPFUNCS. То есть библиотека просит сф, а его нету.
Ошибка выглядит следующим образом:

(error)    *НАЗВАНИЕ СКРИПТА*: ... *ПУТЬ К БИБЛИОТЕКЕ*: *БИБЛИОТЕКА* requires SAMPFUNCS
stack traceback:
    [C]: in function 'assert'
    ... *ПУТЬ К БИБЛИОТЕКЕ*: in main chunk
    [C]: in function 'require'
    ...*ПУТЬ К БИБЛИОТЕКЕ* : in main chunk
    [C]: in function 'require'
   *ПУТЬ К СБОРКЕ**НАЗВАНИЕ СКРИПТА*.lua: in function  *ПУТЬ К СБОРКЕ**НАЗВАНИЕ СКРИПТА*.lua:>

Рассмотрим на примере. Попытаемся загрузить samp.events без SAMPFUNCS.

(error)    Admin Tools: ... Andreas MultiPlayermoonloaderlibsampeventscore.lua:23: samp.events requires SAMPFUNCS
stack traceback:
    [C]: in function 'assert'
    ... Andreas MultiPlayermoonloaderlibsampeventscore.lua:23: in main chunk
    [C]: in function 'require'
    ...A San Andreas MultiPlayermoonloaderlibsampevents.lua:8: in main chunk
    [C]: in function 'require'
    E:GTA San Andreas MultiPlayermoonloaderAdmin Tools.luac: in function <E:GTA San Andreas MultiPlayermoonloaderAdmin Tools.luac:0>

Если вставить в переводчик строку samp.events requires SAMPFUNCS будет все понятно.
Как решить? Установить SAMPFUNCS и Cleo из ссылок в начале темы

4. Ошибка Moon ImGui​

Может возникнуть ошибка и с Moon ImGui. Возникает она когда версия мунлоадера ниже 026. Рассмотрим её вид:

(error)    *ПУТЬ К БИБЛИОТЕКЕ*:*СРОКА С ОШИБКОЙ*: Moon ImGui requires MoonLoader v.026 or greater.
stack traceback:
    [C]: in function 'assert'
    *ПУТЬ К БИБЛИОТЕКЕ*:*СБОРКА С ОШИБКОЙ* : in main chunk
    [C]: in function 'require'
    ...*ПУТЬ К СБОРКЕ*moonloader*НАЗВАНИЕ СКРИПТА*.lua: in function <...*ПУТЬ К СБОРКЕ*moonloader*НАЗВАНИЕ СКРИПТА*.lua:0>

Посмотрим на пример:

(error)    X:GamesARIZONA GAMESbinArizonamoonloaderlibimgui.lua:4: Moon ImGui requires MoonLoader v.026 or greater.
stack traceback:
    [C]: in function 'assert'
    X:GamesARIZONA GAMESbinArizonamoonloaderlibimgui.lua:4: in main chunk
    [C]: in function 'require'
    ...amesARIZONA GAMESbinArizonamoonloaderMHManager.luac: in function <...amesARIZONA GAMESbinArizonamoonloaderMHManager.luac:0>

Тут moonloader говорит нам что Moon ImGui требует MoonLoader v.026 или выше.
Как решить? Установить moonloader 026/027 из ссылки в начале теме.

5. Отсутствие шрифта​

Может возникнуть ошибка с загрузкой шрифта, например для имгуи. Она возникает если у вас в системе нету данного шрифта. Рассмотрим ошибку

*НАЗВАНИЕ СКРИПТА*: *ПУТЬ К ФАЙЛУ**ФАЙЛ*.lua:*НОМЕР СТРОКИ*: WTF: Font "*ПУТЬ К ШРИФТУ**НАЗВАНИЕ ШРИФТА*.ttf" doesn't exist
stack traceback:
    [C]: in function 'assert'
  *НАЗВАНИЕ СКРИПТА*: *ПУТЬ К ФАЙЛУ**ФАЙЛ*.lua:*НОМЕР СТРОКИ*: in function '*ФУНКЦИЯ*'
    *НАЗВАНИЕ СКРИПТА*: *ПУТЬ К ФАЙЛУ**ФАЙЛ*.lua:*НОМЕР СТРОКИ*: in function *НАЗВАНИЕ СКРИПТА*: *ПУТЬ К ФАЙЛУ**ФАЙЛ*.lua:*НОМЕР СТРОКИ*

Посмотрим на пример:

Moon ImGui Example: D:Гусиная Сборкаmoonloaderlibimgui.lua:1344: WTF: Font "C:WindowsFontstrebucbd.ttf" doesn't exist
stack traceback:
    [C]: in function 'assert'
    D:Гусиная Сборкаmoonloaderlibimgui.lua:1344: in function 'load_default_font'
    D:Гусиная Сборкаmoonloaderlibimgui.lua:1370: in function <D:Гусиная Сборкаmoonloaderlibimgui.lua:1367>

Как решить? Установить недостающий шрифт в C:WindowsFonts

p.s: Если я что-то забыл — напишите добавлю

Содержание

  1. Вылет после установки SampFuncs и Moonloader
  2. TheRaymondPlex
  3. Информация MoonLoader — разработка
  4. Moon ImGui — Dear ImGui for MoonLoader
  5. GitHub — ocornut/imgui: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies

Вылет после установки 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 не нужно никак настраивать, для того чтобы начать разработку под него. Нет необходимости в компиляции и скрипты очень просто загружать, выгружать, перезагружать, что значительно ускоряет разработку. Тем, кто не знаком с программированием или языками DelphiCC++ (и проч.), начать разрабатывать модификации на 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-скриптам.
  • ‘moonloaderlib’ — эта директория предназначена для библиотек и модулей.
  • ‘moonloaderconfig’ — для конфигов любого вида, в т.ч. и конфигов в виде скриптов.
  • ‘moonloaderresource’ — здесь располагаются все ресурсы, используемые скриптами. В настоящий момент из подпапки ‘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 есть несколько дополнительных возможностей. В частности, они реализуют взаимодействие с игрой и управление интерфейсом.

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

Источник

Шелком) вообщем такая ситуация:

Какие бы скрипты на устанавливал на эту сборку,они не работают,вот эта самая сборка.

Так вот,захотел я скачать скрипт чекер активных зх,кидаю в мунлодер,перезахожу=не работает

Вот этот самый чекер 

Если у вас есть скрипт онлайна фракций на экран,скиньте.sps


Изменено 7 ноября, 2020 пользователем Неизвестная команда

Не понятная ошибка помогите, луа самп тут

Главная » Основные форумы » Программирование на языке Lua

Страницы:
1

 

Fasmin


Пользователь

Сообщений: 5
Регистрация: 19.12.2021

#1

19.12.2021 16:40:12

(exception) update.luac: error reading ini file: D:SAMPCLEAR SBORKA SAMPmoonloaderscript_update.ini: cannot open file
[17:34:47.955073] (error) update.luac: D:SAMPCLEAR SBORKA SAMPmoonloaderupdate.luac:0: attempt to index global ‘updateIni’ (a nil value)
stack traceback:
D:SAMPCLEAR SBORKA SAMPmoonloaderupdate.luac: in function <D:SAMPCLEAR SBORKA SAMPmoonloaderupdate.luac:0>
[17:34:47.955073] (error) update.luac: Script died due to an error. (0F3649BC)

Код:

Код
require 'lib.moonloader'
inicfg = require 'inicfg'
dlstatus = require('moonloader').download_status
enc = require('encoding')
enc.default = 'CP1251'

local update_state = false
local script_version = 2
local script_version_text = "2.0"

local update_url = "https://raw.githubusercontent.com/FasminCode/FasminCode/main/script_update.ini"
local update_path = getWorkingDirectory() .. '/script_update.ini'

local script_url = "https://github.com/FasminCode/FasminCode/blob/main/update.luac?raw=true"
local script_path = thisScript().path

function main()
   repeat wait(0) until isSampAvailable()
   sampAddChatMessage("{ff0000}update.lua {00ff00}completed {ffffff}loaded", -1)
   sampRegisterChatCommand('update', cmd_update)
   
   downloadUrlToFile(update_url, update_path, function(id, status)
        if status == dlstatus.STATUS_ENDDOWNLOADDATA then
            updateIni = inicfg.load(nil, update_path)
            if tonumber(updateIni.info.vers) > script_version then
                sampAddChatMessage("Есть обновление! Версия: " .. updateIni.info.vers_text, -1)
                update_state = true
            end
            os.remove(update_path)
        end
    end)
   while true do wait(0)
      if update_state then
            downloadUrlToFile(script_url, script_path, function(id, status)
                if status == dlstatus.STATUS_ENDDOWNLOADDATA then
                    sampAddChatMessage("Скрипт успешно обновлен!", -1)
                    thisScript():reload()
                end
            end)
            break
        end
   end
end

function cmd_update()
   sampShowDialog(2335, "UPDATE SCRIPT V2.0", "Новое обновление!nЧто было добавлено: ничего!", "Закрыть", "", 0)
end
 

Daniil Pozdnyakov


QUIK clients support

Сообщений: 488
Регистрация: 05.08.2021

#2

20.12.2021 06:46:00

Добрый день,

предлагаем с данной проблемой обратиться к разработчику скрипта, у которого Вы его получили.

 

Fasmin


Пользователь

Сообщений: 5
Регистрация: 19.12.2021

#3

20.12.2021 07:29:22

Так я и есть разработчик этого скрипта… Ходя код не совсем мой, но все же.

 

Незнайка


Пользователь

Сообщений: 215
Регистрация: 30.05.2020

#4

20.12.2021 08:16:40

Цитата
Fasmin написал:
Так я и есть разработчик этого скрипта

:lol:

Цитата
Fasmin написал:
[17:34:47.955073] (error) update.luac: D:SAMPCLEAR SBORKA SAMPmoonloaderupdate.luac:0: attempt to index global ‘updateIni’ (a nil value)

Скорее всего, ошибка возникает при выполнении:

Код
updateIni = inicfg.load(nil, update_path)
Цитата
Fasmin написал:
(exception) update.luac: error reading ini file: D:SAMPCLEAR SBORKA SAMPmoonloaderscript_update.ini: cannot open file

Смотрите, по какой причине не может открыть script_update.ini

 

Fasmin


Пользователь

Сообщений: 5
Регистрация: 19.12.2021

#5

20.12.2021 14:24:25

Вот именно, что ошибка не в этом 0_0… Весь код вроде как правильный.

 

Nikolay


Пользователь

Сообщений: 718
Регистрация: 27.01.2017

#6

20.12.2021 15:09:58

Видимо, все же стоит обратиться на форум для того продукта, где этот скрипт используется. Поиск дает ответ, что это какая-то игра GTA.
Это форум посвящен совсем другому продукту.

https://nick-nh.github.io/
https://github.com/nick-nh/qlua

 

Fasmin


Пользователь

Сообщений: 5
Регистрация: 19.12.2021

#7

20.12.2021 18:10:38

Ну ваш луа и самп луа не сильно отличается… Просто луа по сампу это скриптовой язык)))

 

Nikolay


Пользователь

Сообщений: 718
Регистрация: 27.01.2017

#8

20.12.2021 18:37:09

Возможно, но чтобы понять проблему необходимо видеть код  функции inicfg.load.

Хотя, как правило, если нет уверенности, что данные корректны, то стоит проверять значения прежде чем их использовать. Как минимум убедиться что type(updateIni) == ‘table’. Но это не решит проблемы загрузки(записи по указанному пути) файла через сеть.

https://nick-nh.github.io/
https://github.com/nick-nh/qlua

 

nikolz


Пользователь

Сообщений: 2888
Регистрация: 30.01.2015

#9

20.12.2021 18:47:14

Цитата
Fasmin написал:
Script died due to an error
Цитата
Fasmin написал:
(exception) update.luac: error reading ini file: D:SAMPCLEAR SBORKA SAMPmoonloaderscript_update.ini: cannot open file[17:34:47.955073] (error) update.luac: D:SAMPCLEAR SBORKA SAMPmoonloaderupdate.luac:0: attempt to index global ‘updateIni’ (a nil value)stack traceback: D:SAMPCLEAR SBORKA SAMPmoonloaderupdate.luac: in function  [17:34:47.955073] (error) update.luac: Script died due to an error. (0F3649BC)

Вам система говорит, что
ошибка при чтении ini-файла: D:SAMPCLEAR СБОРКА SAMPmoonloaderscript_update.ini: не удается открыть файл
[17:34:47.955073] (ошибка) обновление.luac: D:SAMPCLEAR СБОРКА SAMPmoonloaderupdate.luac:0: попытка индексировать глобальный «файл обновления» (нулевое значение)

 

BlaZed


Пользователь

Сообщений: 285
Регистрация: 20.12.2020

#10

20.12.2021 20:39:38

Судя по коду сначала файл script_update.ini должен скачаться с удаленного сервера, а потом открыться.
Но как видно из ошибки открыть файл не получается.

Логично предположить два варианта
1) Файл D:SAMPCLEAR SBORKA SAMPmoonloaderscript_update.ini имеется, но какой-то косяк с правами доступа
=> Проверить права на файл
2) Файл отсутствует по указанному пути.
2.1) Файл не может быть записан в указанную директорию
=> Проверить права доступа на директорию D:SAMPCLEAR SBORKA SAMPmoonloader
2.2) Файл не скачивается
=> Выяснить почему
А не скачаваться он может, если я нашел верное описание функции downloadUrlToFile

Цитата
Описание
Загружает файл из интернета по URL по протоколу HTTP.
Код
https://raw.githubusercontent.com/FasminCode/FasminCode/main/script_update.ini

Ничего не смущает?

Страницы:
1

Читают тему (гостей: 1)

Разработчики:
FYP, hnnssy, EvgeN 1137

Официальная тема на бластхаке: https://blast.hk/threads/13305/

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

MoonLoader будет полезен как разработчикам, так и пользователям, не занимающимся разработкой. Поскольку Lua скрипты не требуют обязательной компиляции, каждый может изменить исходный код скрипта любым текстовым редактором. Например, можно поменять кнопку или команду для активации скрипта, совсем не умея программировать и не обращаясь за помощью. Кроме этого, MoonLoader можно загружать в уже запущенную игру с помощью любого инжектора, эта возможность может быть полезна тем, кто не хочет держать скрипты и сам плагин в директории игры. Нельзя не упомянуть, что стабильность Lua-скриптов на порядок выше, благодаря встроенным средствам скриптового движка и плагина, а также повышенному качеству разработки, что тоже играет важную роль для любого пользователя.
MoonLoader не зависит от наличия установленного CLEO, не зависит от мультиплеерной модификации SA:MP и плагина SAMPFUNCS (зависят только скрипты, использующие те или иные возможности), а также он совместим с любой версией CLEO, SA:MP и SAMPFUNCS.

Данная тема для тех, кто всегда хотел попробовать, но по каким-то причинам не делал этого. Или же для тех, кто один раз попробовал, но почему-то не получиось. Рекомендую перед знакомством с данной модификацией прочитать основную информацию, изложенную выше, а также ознакомиться с официальной темой на бластхаке.

Установка

Процесс установки муна довольно прост и не отличается совершенно ничем от установки любой другой программы или игры, вы указываете папку с гта, нажимаете далее, далее, далее. Есть лишь один нюанс, на который многие не обращают внимание, а зря.

При открытии установщика вас встретит данное окно с предложением установить некоторые штуки, сейчас расскажу почему это чрезвычайно важно и не только упростит дальнейшее использование муна, но и избавит от головных болей, связанных с ошибками в скриптах. Если вам лень читать о каждом компоненте, просто установите все, лишним точно не будет.

Скрипты

Хотя информация о каждом и так представлена в установщике, я помещу их описание тут.

Reload All — Нажмите Ctrl + R и все скрипты в папке moonloader перезагрузятся, применив все изменения.
Update Checker — Оповещает о выходе новой версии муна и предлагает ее загрузку.
Auto Reboot — Самый мощный скрипт по-моему мнению, автоматически перезагружает измененные вами скрипты в игре. Вы сворачиваетесь, пишете код, сохраняете и при разворачивании игры скрипт с вашим кодом активируется. Однако важно добавить, что он не загружает новые скрипты из папки, если вы добавили еще один файл, используйте Reload All чтобы загрузить его вначале.
SF Integration — Выводит содержимое файла moonloader.log в консоль SAMPFUNCS (если у вас он есть, а я крайне рекомендую его поставить). Таким образом намного упрощается отладка и вам не нужно постоянно проверять текстовик на наличие ошибок или вывода информации для дебага.

Модули и инструменты для разработчиков

MoonAdditions — тот же newOpcodes.cleo, только для луа. Добавляет огромное количество новых фишек и может использоваться в некоторых скриптах, обязательно стоит поставить.

SAMP.Lua — Без этой библиотеки многие скриптеры просто не представляют свою жизнь, в том числе и я, используется во многих скриптах. Если говорить понятным языком, она позволяет очень просто взаимодействовать с сетевой частью игры. Но при этом требует SAMPFUNCS.

Во вкладке инструменты для разработчиков присутствует расширение для Notepad++, которое упрощает работу с луа. Если вы планируете заниматься скриптингом, подробнее о нем и о других средах можно почитать на бластхаке.

Решение проблем
Все поставили, но почему-то не работает?
Мунлодер работает таким образом, что скрипты выполняются у всех одинаково и в более чем 90% случаев если вы скачиваете какой-то скрипт, то он функционирует должным образом по умолчанию, а проблема только на вашей стороне. Конечно, есть еще 10%, когда скриптер не учел какие-то моменты, но это бывает крайне редко. Есть два варианта:
1) У вас есть SAMPFUNCS и SF Integration, после входа в игру вы открываете консоль SF (~) и смотрите красный текст с ошибкой.
2) У вас нет SAMPFUNCS, после входа в игру вы сворачиваете ее, открываете moonloader/moonloader.log (расширение может не отображаться) и ищете там слово error (красного цвета в блокнот не завезли)

В муне не так много видов ошибок, их можно запомнить все и даже наверное пересчитать по пальцам, но большинство из них видят только скриптеры при разработке, а вот с готовым продуктом могут быть несколько видов проблем:

[13:41:36.394886] (system) Loading script ‘D:GTA San AndreasmoonloaderPameViewerV2.lua’…
[13:41:36.394886] (debug) New script: 01D0311C
[13:41:36.395883] (error) PameViewerV2: D:GTA San AndreasmoonloaderPameViewerV2.lua:2: module ‘lib.samp.events’ not found:
no field package.preload[‘lib.samp.events’]
no file ‘D:GTA San Andreasmoonloaderliblibsampevents.lua’
no file ‘D:GTA San Andreasmoonloaderliblibsampeventsinit.lua’
no file ‘D:GTA San Andreasmoonloaderlibsampevents.lua’
no file ‘D:GTA San Andreasmoonloaderlibsampeventsinit.lua’
no file ‘.libsampevents.lua’
no file ‘D:GTA San Andreasmoonloaderliblibsampevents.luac’
no file ‘D:GTA San Andreasmoonloaderliblibsampeventsinit.luac’
no file ‘D:GTA San Andreasmoonloaderlibsampevents.luac’
no file ‘D:GTA San Andreasmoonloaderlibsampeventsinit.luac’
no file ‘.libsampevents.luac’
no file ‘D:GTA San Andreasmoonloaderliblibsampevents.dll’
no file ‘D:GTA San Andreasmoonloaderliblib.dll’
stack traceback:
: in function ‘require’
D:GTA San AndreasmoonloaderPameViewerV2.lua:2: in main chunk
[13:41:36.395883] (error) PameViewerV2: Script died due to an error. (01D0311C)

Примерно с таким текстом скрипт падает, юзер в панике пишет мне и говорит, что скрипт ну ведь не работает мой и с этим нужно что-то сделать.
Глазами находим главную мысль в ошибке module ‘lib.samp.events’ not found: и из этого мы можем понять, что скрипт не смог найти библиотеку SAMP.Lua, потому что 1) юзер не установил ее при установке муна 2) юзер неправильно установил ее из моего архива 3) да я все поставил, че не так то сука

Решением является установка библиотеки в правильную директорию, а именно в moonloader/lib. Причем в папке lib не должно быть еще одной папки lib, а ее содержимое должно быть помещено непосредственно в вашу папку с таким названием, то есть не moonloader/lib/lib/samp, а moonloader/lib/samp. (хотя судя по логу он ищет даже там..) Надеюсь, разницу поняли.

(error) RPColor: D:GTA San Andreasmoonloaderlibsampeventscore.lua:23: samp.events requires SAMPFUNCS
(error) RPColor: Script died due to an error. (0F89383C)

Тут я думаю даже объяснять не особо и нужно, что данная либа требует SAMPFUNCS. И если его у вас нет, скрипт с использованием этой либы вы никак не запустите.

Мне лень искать скрины ошибки, но так бывает, что при запуске игры с сампфунксом или другими модами, вам говорят, что ваша версия игры не соответствует требуемой и люди задаются вопросом, а че делать то, неужели игру переустанавливать и перекачивать.

Да нет, всего-то нужно поставить другой файл gta_sa.exe по ссылке

Сейчас навскидку даже и не скажу какие еще могут быть проблемы, потому что мун это самая стабильная модификация для гта на моей памяти. Дополню данную тему позже, если вспомню про что-то еще или мне напомнят. Комментируйте, отвечу на все вопросы, касаемо луа и муна.

Понравилась статья? Поделить с друзьями:
  • Не запускается самп ошибка directx 9
  • Не запускается самп выдает ошибку
  • Не запускается рр4 выдает ошибку
  • Не запускается рокстар ошибка код 1
  • Не запускается рокстар гейм лаунчер ошибка инициализации