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

imring

Ride the Lightning
Всефорумный модератор
2,355
2,516
@FYP
на счёт wiki BH:
кроме добавления описание функций, исправьте косяки в wiki. уже давно заметил, про это я уже фипу писал, но он не исправил. суть косяка: в wiki написано freezeCharPosition(int set, bool freezed), ну и должно быть не int set, а Ped ped. ну ещё косяк: в wiki написано getCarModel(int int), за место int int должно быть Vehicle car.

на счёт обновления moon imgui:
надеюсь автор dear imgui исправит баг про sameline + pushtextwrappos.

на счёт сайта:
это будет замена подраздела луа?

на счёт использования luarocks:
вот если поменяют, то что будет с скомпилированными скриптами? или придётся снова перекомпилировать?
 

Garrus

Известный
159
20
рассмотреть смену атома на vs code,
А мне и на NP++ норм :)
поэтому хочу сделать что-то одно из этого, но не могу определиться, что нужнее...
Со своей стороны, из предложенного списка выбрал бы обновление moon imgui - вещь очень интересная и полезная.

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

самому приходится через боли и мучения изучать не только Lua, а вообще программирование, т.к. на Lua не существует гайдов для полных новичков, и это очень печально :с
В своё время, помогла статья "Изучаем lua за 15 минут" и сайты тык и тык. + немного разбирался в клео и по номерам опкодов в вики искал соответствующую функцию в муне.
 

imring

Ride the Lightning
Всефорумный модератор
2,355
2,516
Кинь в личку или в дискорде. Посмотрю, как на плюсах он себя поведет.
скрины? вот:
5bXxieT.png
без pushtextwrappos:
 

imring

Ride the Lightning
Всефорумный модератор
2,355
2,516
И что я со скринами делать буду? Рендерить?
код в лс этого куска)
вот:
Lua:
function imgui.TextColoredRGB(string)
    local text, color = {}, {}
    local l, m = 0, 0
    while string:find('{......}') do
        local n, k = string:find('{......}')
        text[#text], text[#text+1] = string:match(string:sub(l, m)..'(.*)'..string:sub(n, k)..'(.*)')
        color[#color+1] = RGBtoImVec4(string:sub(n+1, k-1))
        string = string:gsub(string:sub(n, k), '')
        l, m = 1, k-8
    end
    if text[0] then
        for i = 0, #text do
            imgui.PushTextWrapPos(imgui.GetWindowWidth())
            imgui.TextColored(color[i] or RGBtoImVec4('FFFFFF'), u8(text[i]))
            imgui.PopTextWrapPos()
            imgui.SameLine(nil, 1)
        end
        imgui.NewLine()
    else imgui.Text(u8(string)) end
end
 

AnWu

Guardian of Order
Всефорумный модератор
4,690
5,193
DonHomka в день релиза .026 задал вопрос и изъявил желание помочь, но т.к. вопрос был в основной теме, а обычным юзерам это будет не интересно, лучше отвечу здесь.

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

в общем, первое, о чём надо сказать сразу - мне придётся отложить работу над мунлоадером на неопределённый срок, т.к. накопилось много других дел, которые были запланированы уже давно. версия 026, как бы иронично это не звучало в связи с проблемами после релиза, должна быть самой стабильной из всех. я продолжу выпускать исправления, если обнаружатся какие-то серьёзные баги, но не более.
второе: следующий релиз мунлоадера будет не про новые фичи, он будет полным рефакторингом с последующим переходом в опенсорс.
третье: после релиза 026 я собирался сделать ещё несколько вещей, касающихся муна, но из-за многочисленных проблем обновление сильно затянулось и теперь времени на них нет. поэтому хочу сделать что-то одно из этого, но не могу определиться, что нужнее...

входило в планы:
  • дополнить вики информацией о всех изменениях 026; добавить описание типов; в колонку "опкод", на странице списка функций, выводить опкоды, которые были замены встроенными функциями, с отличающимся оформлением. это я в любом случае сделаю, но помощь была бы очень кстати.
  • улучшить плагин для атома - переписать на javascript (т.к. весь атом переводят на js), заменить atom-space-pen-views на atom-select-list (т.к. он оптимизированный и весь атом тоже переводят на него), рассмотреть возможность использования LSR для автокомплита и других фич, это помогло бы заменить заброшенный автором atom-autocomplete-lua. проблемы: я совсем не знаю js и апи атома, делал плагин для атома почти вслепую, поэтому делать это придётся практически с нуля.
  • рассмотреть смену атома на vs code, т.к. атом стал заметно тормознутее, как бы ни старались его оптимизировать. проблемы похожие: typescript я знаю ещё меньше, для vs code вообще ничего не делал, а главное, что история с атомом может повториться и с vs code.
  • обновить moon imgui. с момента релиза imgui один раз обновлялся и сейчас автор работает над довольно крупным обновлением. хотелось бы обновить moon imgui на него, с улучшением луа биндингов для более удобного использования, и открыть исходный код. проблемы две: обновление ещё не готово, а изменения в биндингах могут привести к несовместимости версий.
  • написать объёмный гайд (не вместо дефолтного), освещающий все подробности разработки под мунлоадер. нацеленный не только на тех, кто уже что-то знает и умеет, но и на новичков. проблемы: гайды у меня получаются так себе и их почти никто не читает.
в ближайшие планы не входило, но очень нужно мунлоадеру:
  • менеджмент зависимостей: это уже стало больной темой, никто не хочет таскать с собой либы, потому что юзеры не умеют их устанавливать, потому что это лишние файлы, потому что... но использовать либы удобно и от них никуда не деться, поэтому с этим надо что-то делать. последней (но не окончательной) идеей на текущий момент является взятие пакетного менеджера LuaRocks за основу, с некоторыми изменениями под свою базу библиотек и автоматический запуск через мунлоадер, посредством перехвата вызова функции script_dependencies и автоматической установкой всех зависимостей. с помощью костылей это можно попробовать реализовать прямо сейчас без введения изменений в сам мунлоадер, могу описать подробнее, если это кому-то интересно.
  • хуки скриптов. концепция такова: Lua-скрипты, исключительно с открытым исходным кодом, с определенным расширением (или в определённой поддиректории) внедряются в окружение каждого загружаемого скрипта и могут подменить любые вызовы, значения, события. при этом сами скрипты не имеют доступа к окружению хуков, если хуки сами этого не позволят. эта функция даст возможность реализовать многое: системы защиты от вредоносных скриптов на основе прав доступа, универсальные системы автообновления, менеджмента зависимостей, инструменты для отладки и т.д.
  • улучшенная документация и документация на английском для привлечения большего количества разработчиков.
мечты:
  • поддержка других игр серии и разных версий, с максимизированной совместимостью скриптов.
  • классный сайт на каком-нибудь хипстерском домене, служащий лицом мунлоадера. ну и вообще, отдельный сайт полезен по многим причинам. когда увидел сайт Grav мне стало очень грустно, грустно потому, что это не сайт мунлоадера. что за grav вообще? оформление этого сайта создано под мун, а не какой-то там grav!
SAMP.Lua:
наконец, о самп.луа. я опишу то, чем он должен быть, а не то, что я собирался с ним сделать. над ним я тоже не смогу работать в ближайшее время.
в первую очередь, в нём должны быть события для всех существующих RPC и пакетов. затем, он должен стать лёгкой заменой сф, только с функциями сампа, ну и конечно же, тем самым перестать использовать сф. поддержка сампа должна быть мультиверсионной без установки каких-то отдельных версий библиотеки для разных версий сампа, всё это очень легко реализуемо в луа, но это нужно учесть сразу, даже если изначально делать поддержку только одной версии.
если кто-то действительно готов этим заняться, я готов помогать и предоставить реализацию необходимых функций, адреса и структуры из сф.

ну и разумеется, я накатал столько текста не ради того, чтобы излить душу, я жду фидбека и бурных обсуждений. особенно от (порядок рандомный) @AppleThe, @DonHomka, @legend2360, @randazzo, @Boris Yeltsin, @LUCHARE, @Garrus, @romacaddy, @imring, @deddosouru.
скинь короткий инструктаж и данные для работы с самп луа. хочу им заняться
 

ufdhbi

Известный
Проверенный
1,455
861
Очень интересная движуха началась, я готов помогать перебарывать зависимость муна от сф)
 

FYP

Известный
Автор темы
Администратор
1,758
5,725
При создании сайта лучше будет если ты опишешь что именно ждешь от него. Вики? Страница обновлений? Гайды от юзверов из списка выше?) От тебя фидбэк тоже нужен и без тебя мы постоим мост из желе.
Ну как я уже написал можно заняться сайтом, но нужна графика)
обычная страница с красивым оформлением, коротким описанием, ссылками на скачивание, информацией о релизе и ссылками на ресурсы. сайт grav, который я привёл в пример, это почти идеальная репрезентация моего представления о сайте для мунлоадера.
я не знаю, стоит ли вообще делать сайт до выхода в опенсорс, т.к. многое будет изменено.
Насчет отдельного сайта: Да, черт возьми! Это сильно поможет с юзерами. Нужно активнее думать в этом направлении.
сайт не просто так попал в "мечты", его некому делать.
Я конечно новичок в этом всём, но подумай над редактором "Brackets", он тоже достаточно лёгкий, удобный, ещё и на русском.
brackets достаточно хорош для веба, т.к. под него и специализирован, поддержка луа в нём достаточно отдалённая и в луа многие из его фич не пригодятся. в качестве основной среды разработки он не подойдёт хотя бы потому, что для него сложнее будет реализовать все необходимые функции.
А это просто необходимо, самому приходится через боли и мучения изучать не только Lua, а вообще программирование, т.к. на Lua не существует гайдов для полных новичков, и это очень печально :с
в интернете полным полно гайдов по луа, о чём ты? уроков по разработке под мунлоадер - да, мало, их почти нет, но и гайд, который я собирался написать, был бы просто объединением информации, которая есть на вики, в теме разработки и т.д.
кроме добавления описание функций, исправьте косяки в wiki. уже давно заметил, про это я уже фипу писал, но он не исправил. суть косяка: в wiki написано freezeCharPosition(int set, bool freezed), ну и должно быть не int set, а Ped ped. ну ещё косяк: в wiki написано getCarModel(int int), за место int int должно быть Vehicle car.
ну это мелочи, косяки автогенерации, исправим.
на счёт сайта:
это будет замена подраздела луа?
определенно нет, на нём вообще не будет никакого динамического контента, просто одна или несколько статических страниц.
на счёт использования luarocks:
вот если поменяют, то что будет с скомпилированными скриптами? или придётся снова перекомпилировать?
нет. luarocks - это всего лишь тулза, написанная на луа. от него никак не может зависеть необходимость перекомпиляции скриптов. перекомпиляция потребовалась из-за изменений в байткоде luajit 2.1, и я надеюсь, что больше не потребуется.
А мне и на NP++ норм :)
сочувствую... мне после многолетней привычки к подсказкам при вводе и автокомплиту невероятно неудобно писать код без них. notepad++ в этом плане очень плох. чтоб для него реализовать более-менее полноценный автокомплит, нужно делать dll-плагин с ковырянием внутренностей, что совсем не хорошо для такой задачи.
Со своей стороны, из предложенного списка выбрал бы обновление moon imgui - вещь очень интересная и полезная.
интересно, почему все склоняются к имгуи?.. фичи нужнее, чем удобство и документация?
скинь короткий инструктаж и данные для работы с самп луа. хочу им заняться
@LUCHARE уже делает что-то подобное, хотелось бы сначала посмотреть на результат. в любом случае, я на днях напишу в теме samp.lua, что с ним надо бы сделать и как.
Очень интересная движуха началась, я готов помогать перебарывать зависимость муна от сф)
единственными зависимостями остались dxut и самп, в сам мун запихивать функции для работы с сампом нельзя, так что это либо в samp.lua, либо куда-то ещё, но только не в мун. а dxut вообще на помойку.
говори кого убить и убьем хули
upload_2018-3-17_11-42-36.png

бесят пиздец
 
Последнее редактирование:

imring

Ride the Lightning
Всефорумный модератор
2,355
2,516
единственными зависимостями остались dxut и самп, в сам мун запихивать функции для работы с сампом нельзя, так что это либо в samp.lua, либо куда-то ещё, но только не в мун. а dxut вообще на помойку.
эти функции зависят от сф?
Lua:
Bitstream bs = raknetNewBitStream()  -- 0B3D
raknetDeleteBitStream(Bitstream bs)  -- 0B3E
raknetResetBitStream(Bitstream bs)  -- 0B3F
raknetBitStreamWriteBool(Bitstream bs, bool value)  -- 0B40
raknetBitStreamWriteInt8(Bitstream bs, int value)  -- 0B40
raknetBitStreamWriteInt16(Bitstream bs, int value)  -- 0B40
raknetBitStreamWriteInt32(Bitstream bs, int value)  -- 0B40
raknetBitStreamWriteFloat(Bitstream bs, float value)  -- 0B40
raknetBitStreamWriteBuffer(Bitstream bs, uint dest, uint size)  -- 0B40
raknetBitStreamWriteBitStream(Bitstream bs, Bitstream bitStream)  -- 0B40
raknetBitStreamWriteString(Bitstream bs, string str)  -- 0B40
raknetSendRpcEx(int rpc, Bitstream bs, int priority, int reliability, int channel, bool timestamp)  -- 0B41
raknetSendBitStreamEx(Bitstream bs, int priority, int reliability, int channel)  -- 0B42
raknetSendRpc(int rpc, Bitstream bs)  -- 0B8A
raknetSendBitStream(Bitstream bs)  -- 0B8B
bool value = raknetBitStreamReadBool(Bitstream bs)  -- 0BE7
int value = raknetBitStreamReadInt8(Bitstream bs)  -- 0BE7
int value = raknetBitStreamReadInt16(Bitstream bs)  -- 0BE7
int value = raknetBitStreamReadInt32(Bitstream bs)  -- 0BE7
float value = raknetBitStreamReadFloat(Bitstream bs)  -- 0BE7
raknetBitStreamReadBuffer(Bitstream bs, uint dest, uint size)  -- 0BE8
string value = raknetBitStreamReadString(Bitstream bs, uint size)  -- 0BE8
raknetBitStreamResetReadPointer(Bitstream bs)  -- 0BE9
raknetBitStreamResetWritePointer(Bitstream bs)  -- 0BEA
raknetBitStreamIgnoreBits(Bitstream bs, int amount)  -- 0BEB
raknetBitStreamSetWriteOffset(Bitstream bs, int offset)  -- 0BEC
raknetBitStreamSetReadOffset(Bitstream bs, int offset)  -- 0BED
uint value = raknetBitStreamGetNumberOfBitsUsed(Bitstream bs)  -- 0BEE
uint value = raknetBitStreamGetNumberOfBytesUsed(Bitstream bs)  -- 0BEF
uint value = raknetBitStreamGetNumberOfUnreadBits(Bitstream bs)  -- 0BF0
int value = raknetBitStreamGetWriteOffset(Bitstream bs)  -- 0BF1
int value = raknetBitStreamGetReadOffset(Bitstream bs)  -- 0BF2
uint value = raknetBitStreamGetDataPtr(Bitstream bs)  -- 0BF3
zstring string = raknetBitStreamDecodeString(Bitstream bs, int size)  -- 0BF4
raknetBitStreamEncodeString(Bitstream bs, zstring string)  -- 0BF5
raknetEmulRpcReceiveBitStream(int rpc, Bitstream bs)  -- 0BF6
raknetEmulPacketReceiveBitStream(int packet, Bitstream bs)  -- 0BF7
zstring name = raknetGetRpcName(int rpc)  -- 0BF8
zstring name = raknetGetPacketName(int packet)  -- 0BF9