Как вызвать функцию Moonloader'а из SF плагина?

Ya Zaregalsya

Известный
Автор темы
387
135
Хочется пользоваться крутыми функами муна из нашего убогенького сф плагина(
 
Решение
Нельзя просто позвонить в ГТА и в одну строчку попросить её сделать многие простые вещи
Можно
За каждой простенькой функой Муна стоит куча кода.
Да, но этот код не внутри муна, а внутри самой ГТА. Мун реализует большинство своего функционала через игровые опкоды.
А так это выглядит в мунлоадере:


Lua:
requestAnimation("animName")
taskPlayAnim(1, "animLib", "animName", 9, false, false, false, false, -1)
Соответственно и потенциальных багов от использования муновских функций меньше.
Используя нетрудные манипуляции с IDA (можно через другой дизассемблер), открыв бинарник муна, мы ищем в строках (shift + f12) название нужной нам функции (пройдемся по твоему примеру):

1720854877037.png
Переходишь к месту, где...

Ya Zaregalsya

Известный
Автор темы
387
135
это пиздец... кто такую хуету может написать


по строчке например

ищи в иде где функа биндится и по адресу вызывай
Нифига не понял, чё за строки, какие бинды. Если знаешь как вызывать функи из Муна, можешь написать коротенький гайд, думаю с него будет спрос.
 
  • Ха-ха
Реакции: Z3roKwq

Digger Man52

52NGG
Проверенный
1,122
989
Нифига не понял, чё за строки, какие бинды. Если знаешь как вызывать функи из Муна, можешь написать коротенький гайд, думаю с него будет спрос.
отреверси мун, найди функцию, вызывай функцию, но нужна ли тебе зависимость от муна? нет бы написать хук самому
 
  • Нравится
Реакции: Z3roKwq и whyega52

F0RQU1N and

Известный
1,307
498
Нифига не понял, чё за строки, какие бинды. Если знаешь как вызывать функи из Муна, можешь написать коротенький гайд, думаю с него будет спрос.
1696316735327.png

ищещь по строке название функции тебе нужной
переходишь по хрефу и видишь что чуть выше куда то записывается адрес функции
1696316844856.png

переходишь в нее
1696316877033.png

видишь 7 аргументов, скорее всего первый это какой-то контекст у lua или сол2(сам посмотри в дебагере что туда передается и откуда, мне лень) а остальные шесть скорей всего то что передается в луашную функу
 

Ya Zaregalsya

Известный
Автор темы
387
135
Посмотреть вложение 216730
ищещь по строке название функции тебе нужной
переходишь по хрефу и видишь что чуть выше куда то записывается адрес функции
Посмотреть вложение 216731
переходишь в нее
Посмотреть вложение 216732
видишь 7 аргументов, скорее всего первый это какой-то контекст у lua или сол2(сам посмотри в дебагере что туда передается и откуда, мне лень) а остальные шесть скорей всего то что передается в луашную функу
Ух нифига вот это полезный ответ! Можешь подкинуть какой-то вводной урок подо всю эту хуёвину? А то я не бум-бум во всём энтом реверсинге.
 

whyega52

Гений, миллионер, плейбой, долбаеб
Модератор
2,793
2,623
  • Нравится
Реакции: Ya Zaregalsya

RTD

Потужно
Модератор
399
470
Посмотреть вложение 216730
ищещь по строке название функции тебе нужной
переходишь по хрефу и видишь что чуть выше куда то записывается адрес функции
Посмотреть вложение 216731
переходишь в нее
Посмотреть вложение 216732
видишь 7 аргументов, скорее всего первый это какой-то контекст у lua или сол2(сам посмотри в дебагере что туда передается и откуда, мне лень) а остальные шесть скорей всего то что передается в луашную функу
Нет, это не верно. То что ты нашел это какие-то внутренности для sol2.
Все луа функции это lua_CFunction -> int (__cdecl*)(lua_State* L)
Переходить нужно по этому
1696330338085.png

Далее идешь на lua_pushcclosure и видишь функцию которая туда передается

1696330409915.png


sub_10072F70 это и есть "setFixedCameraPosition"
Вот, достает аргументы с луа стека и вызывает установку позиции камеры
1696330569110.png


Вызвать это будет не так-то просто, потому что надо получить lua_State* от moonloader, в котором зарегистрированы эти функции. Уже пахнет насилием и хуками мунлоадера или луа скриптом заглушкой который по братски сделает require плагина и не будет выгружаться, а в плагине конечно должна быть точка входа lualib_open, сам плагин измазан глобальной переменной и с заряженным патроном в револьвере, ждать момента когда можно будет прострелить колено

Ладно построили велосипед с палками вместо колес, вызываем луа функцию из С без враперов
Lua:
lua_getglobal(L, "setFixedCameraPosition");
lua_pushnumber(L, x);
lua_pushnumber(L, y);
lua_pushnumber(L, z);
lua_pushnumber(L, rx);
lua_pushnumber(L, ry);
lua_pushnumber(L, rz);
lua_pcall(L, 6, 0, 0);
Красота...

Но можно же вызвать сразу нормальную С функцию, вот же указатель в v1 и this в v2, а остальное наши аргументы. Окей, сидите под дебагерами и реверсите

В любом случае если и получится, то запах не очень. В первом случае обмазались калом чтобы получить lua_State* и потом заюзали враперы на lua api, получилось
C++:
lua["setFixedCameraPosition"](1,2,3,4,5,6)
и ждем выстрела в колено
Во втором случае захардкодили кое-как одну функцию и все равно обмазались калом во время процесса реверсинга
 

F0RQU1N and

Известный
1,307
498
Нет, это не верно. То что ты нашел это какие-то внутренности для sol2.
Все луа функции это lua_CFunction -> int (__cdecl*)(lua_State* L)
Переходить нужно по этому
Посмотреть вложение 216749
Далее идешь на lua_pushcclosure и видишь функцию которая туда передается

Посмотреть вложение 216750

sub_10072F70 это и есть "setFixedCameraPosition"
Вот, достает аргументы с луа стека и вызывает установку позиции камеры
Посмотреть вложение 216753

Вызвать это будет не так-то просто, потому что надо получить lua_State* от moonloader, в котором зарегистрированы эти функции. Уже пахнет насилием и хуками мунлоадера или луа скриптом заглушкой который по братски сделает require плагина и не будет выгружаться, а в плагине конечно должна быть точка входа lualib_open, сам плагин измазан глобальной переменной и с заряженным патроном в револьвере, ждать момента когда можно будет прострелить колено

Ладно построили велосипед с палками вместо колес, вызываем луа функцию из С без враперов
Lua:
lua_getglobal(L, "setFixedCameraPosition");
lua_pushnumber(L, x);
lua_pushnumber(L, y);
lua_pushnumber(L, z);
lua_pushnumber(L, rx);
lua_pushnumber(L, ry);
lua_pushnumber(L, rz);
lua_pcall(L, 6, 0, 0);
Красота...

Но можно же вызвать сразу нормальную С функцию, вот же указатель в v1 и this в v2, а остальное наши аргументы. Окей, сидите под дебагерами и реверсите

В любом случае если и получится, то запах не очень. В первом случае обмазались калом чтобы получить lua_State* и потом заюзали враперы на lua api, получилось
C++:
lua["setFixedCameraPosition"](1,2,3,4,5,6)
и ждем выстрела в колено
Во втором случае захардкодили кое-как одну функцию и все равно обмазались калом во время процесса реверсинга
понятно, увидел что кол-во аргументов похожее кроме первого что я и подумал либо стейт либо контекст какой-то
 

Dark_Knight

Me, me and me.
Друг
4,082
2,105
В СФ всё есть, потому что ты так сказал? СФ уступает Муну по функционалу. Действия, которые делаются в Муне в одну строчку, в СФ требуют сложной совершенно неочевидной последовательности действий. СФ код небезопасен, в его функции не зашиты никакие проверки, что приводит к крашам в игре. В СФ меньше функций по сравнению с Муном, а из тех что есть многие просто не работают. Никто не знает как в СФ применить анимку без рпс, как манипулировать камерой, как эмулировать пакет, и многое другое, потому что это всё в САМПФУКСе просто не работает и работать не будет, ведь проект уже закрыт. Даже самповские функции там работают криво. Я уже тысячу раз пожалел, что вообще начал работу на этом старье, просто других вариантов тогда ещё не было. Единственный нормальный варик сейчас это сдк от адского дрочилы, чел просто красава, собрал в своём сдк всё что нужно, к сожалению мне слишком запарно переносить туда весь свой проект. А что касается Муна, насколько мне известно, он как и сам Люа, написан на Си-шке, и тяжело понять почему нельзя было просто немного его переделать и выпустить нормальный сдк для С++, впрочем это уже и не нужно.
Хуйню несешь. Полнейшую. СФ проигрывает лишь документацией, но твоя тупая бошка не умеет ничего, кроме заучиванния. Иди в луа и дрочи там на виртуальную машину сколько хочешь. Там тоже есть некий ооп даже. Кому нужно тот все знает.
Может смотреть плагин СДК, можешь мта блю, но еще раз повторю. Твоя бошка ничего крмое заучивания не умеет.
 
  • Грустно
  • Нравится
Реакции: Z3roKwq, chromiusj и chapo

Ya Zaregalsya

Известный
Автор темы
387
135
Хуйню несешь. Полнейшую. СФ проигрывает лишь документацией, но твоя тупая бошка не умеет ничего, кроме заучиванния. Иди в луа и дрочи там на виртуальную машину сколько хочешь. Там тоже есть некий ооп даже. Кому нужно тот все знает.
Может смотреть плагин СДК, можешь мта блю, но еще раз повторю. Твоя бошка ничего крмое заучивания не умеет.
По факту ты много пиздишь и ничем не подкрепляешь свои слова. Много ты сам написал сф плагинов, в которых была работа с одиночкой?
PluginSDK юзай для такого. game api хромает в СФ.

Как по мне, функционал апи в ПСДК куда массивней по сравнению апи с СФ.

Честно, работу с синглом через СФ никогда не практиковал.
По факту ты сам нихуя не умеешь и даже не пробовал, а распинаешься тут как гуру модинга. Любой дебил может прочитать/собрать битстрим и написать чит для аризонки, но даже самп часть в СФ хромает, там нет нормальных структур пакетов, неполный список рпс, и напрочь не работает эмуляция пакетов. А по части одиночки он просто берёт глубокую глотку. И в отличие от тебя я со всем этим работал последние несколько лет и знаю, сколько сотен, или даже тысяч часов у тебя уйдёт на то, чтобы попытаться на СФ повторить то, что работает в Муне в пару строчек из коробки. По сути СФ ближе к голому аси плагину, чем к муну. 90% времени будет уходить на ковыряние под капотом и попытки выяснить как выполнить простые задачи, вместо того чтобы работать над самим проектом, и в половине случаев у тебя ничего не выйдет и придётся выдумывать костыль. Про документацию без комментариев, её просто нет ни в каком виде! Если бы разрабы муна опубликовали сурсы на гитхабе, это была бы лучшая документация к сф плагину, чем всё что есть на этом форуме.
 
Последнее редактирование:
  • Ха-ха
Реакции: Z3roKwq и ARMOR

ARMOR

011110000111100101101001
Модератор
4,944
6,773
По факту ты много пиздишь и ничем не подкрепляешь свои слова. Много ты сам написал сф плагинов, в которых была работа с одиночкой?

По факту ты сам нихуя не умеешь и даже не пробовал, а распинаешься тут как гуру модинга. Любой дебил может прочитать/собрать битстрим и написать чит для аризонки, но даже самп часть в СФ хромает, там нет нормальных структур пакетов, неполный список рпс, и напрочь не работает эмуляция пакетов.
Бетмен когда узнал что он нихуя не шарит в SF кодинге просидев в помощи по SF дохуя часов. ( А ещё раньше вроде как принимал участие в разработке самого SAMPFUNCS ):
%D0%BD%D0%B8%D1%85%D1%83%D1%8F-%D1%81%D0%B5%D0%B1%D0%B5-%D1%8F-%D0%B2%D0%B0%D1%85%D1%83%D0%B5.gif

Вообще не пойму твоих доебов по поводу того что в SF нельзя работать с самой ГТАшкой, я никогда не писал на SF но посидев в сурсе стандартного проекта увидел что ОКАЗЫВАЕТСЯ там есть класс CGame который хранит в себе более ста методов для работы с игрой, начиная от получения информации об игроке заканчивая даже получением класса для работы с RenderWare. Мне самому стало интересно как работать с этим классом, и потратив всего 5 минут я нашёл на форуме информацию! Нужно всего лишь написать GAME-> и всё! Темболее то что в папке с проектом есть ещё одна папочка которая называется GameAPI и в которой лежит дохуя файлов даже названых как файлы в Plugin SDK.

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

По этому можно понять что ты или глупый и за НЕСКОЛЬКО ТЫСЯЧ ЧАСОВ написания плагинов на сампфунксе даже не разобрался с чём именно ты работаешь, или рофлишь.

1696381833663.jpeg
 
  • Нравится
Реакции: abracadabra

Ya Zaregalsya

Известный
Автор темы
387
135
Бетмен когда узнал что он нихуя не шарит в SF кодинге просидев в помощи по SF дохуя часов. ( А ещё раньше вроде как принимал участие в разработке самого SAMPFUNCS ):
%D0%BD%D0%B8%D1%85%D1%83%D1%8F-%D1%81%D0%B5%D0%B1%D0%B5-%D1%8F-%D0%B2%D0%B0%D1%85%D1%83%D0%B5.gif

Вообще не пойму твоих доебов по поводу того что в SF нельзя работать с самой ГТАшкой, я никогда не писал на SF но посидев в сурсе стандартного проекта увидел что ОКАЗЫВАЕТСЯ там есть класс CGame который хранит в себе более ста методов для работы с игрой, начиная от получения информации об игроке заканчивая даже получением класса для работы с RenderWare. Мне самому стало интересно как работать с этим классом, и потратив всего 5 минут я нашёл на форуме информацию! Нужно всего лишь написать GAME-> и всё!

Непонимаю как ты об этом не знал учитывая то что:


По этому можно понять что ты или глупый, или рофлишь.
Показательно, что из 2-х челов, наиболее яро защищающих сф плагин, один никогда ничего не писал для сингла, второй вообще только скачал стандартный проект. За то написав несколько бесполезных оффтоп сообщений, вы уже оцениваете чей-то интеллект. Если ты открыл сф плагин и полистал основные классы, то по части сингла твои знания уже примерно на уровне дарк кнайта. Теперь попробуй без эмуляции рпс применить к актёру анимку, заспавнить нпс актёра, зааттачить объект к кости, эмулировать пакет — вещи, которые в Муне делаются в пару строчек. Потом приходи снова и я дам тебе ещё кучу квестов, чтобы ты мог на личном опыте убедиться, что СФ начисто всирает муну, и немного опустить свою раздутую самооценку. Чем больше ты интересуешься СФ, тем меньше тебе будет интересен СФ и более интересен ПлагинСДК или Мунлоадер. Так что лучше сразу качай сдк от адского дрочилы и не трать время на давно заброшенный сампфункс.
 
Последнее редактирование:
  • Bug
Реакции: Z3roKwq

ARMOR

011110000111100101101001
Модератор
4,944
6,773
Показательно, что из 2-х челов, наиболее яро защищающих сф плагин, один никогда ничего не писал для сингла, второй вообще только скачал стандартный проект. За то написав несколько бесполезных оффтоп сообщений, вы уже оцениваете чей-то интеллект. Если ты открыл сф плагин и полистал основные классы, то по части сингла твои знания уже примерно на уровне дарк кнайта. Теперь попробуй без эмуляции рпс применить к актёру анимку, заспавнить нпс актёра, зааттачить объект к кости, эмулировать пакет — вещи, которые в Муне делаются в пару строчек. Потом приходи снова и я дам тебе ещё кучу квестов, чтобы ты мог на личном опыте убедиться, что СФ начисто всирает муну, и немного опустить свою раздутую самооценку. Чем больше ты интересуешься СФ, тем меньше тебе будет интересен СФ и более интересен ПлагинСДК или Мунлоадер. Так что лучше сразу качай сдк от адского дрочилы и не трать время на давно заброшенный сампфункс.
Вот, держи тебе код воспроизведения анимации прямо как в мунлоадере! Если ты не знаешь как работают игровые опкоды да и вообще сама система игры - чем ты нахуй занимался эти несколько тысяч часов? Писал недорванки ебаные и работал онли с битстримами?

C++:
void playAnim(int playerHandle, const char* animation, const char* IFP, float frameDelta, bool loop, bool lockX, bool lockY, bool lockZ, bool lockF, int time) {
    char str[256];
    sprintf(str, "04ED: \"%s\"", IFP);
    SF->getCLEO()->callOpcode(str);
    sprintf(str, "04EE: \"%s\"", IFP);
    SF->getCLEO()->callOpcode(str);
    sprintf(str, "0605: %d \"%s\" \"%s\" %f %d %d %d %d %d", playerHandle, animation, IFP, frameDelta, loop, lockX, lockY, lockZ, lockF, time);
    SF->getCLEO()->callOpcode(str);
}

А я бы посмотрел в сколько строк ты бы это оформил на Plugin SDK. Гений блядь. Называешь всех ЧСВшными идиотами хоть сам блядь держишь свое мнение поверх других когда тебе уже высказали что ты не прав, а ты дальше за свое "А ВОТ ПОЧЕМУ НЕ СДЕЛАТЬ ТАКОЕ ЖЕ АПИ КАК У МУНЛОАДЕРА, ТАМ ВЕДЬ ВСЁ ТАК ПРОСТО?!?!?!"
 
Последнее редактирование:
  • Нравится
Реакции: MLycoris и Z3roKwq

Ya Zaregalsya

Известный
Автор темы
387
135
Вот, держи тебе код воспроизведения анимации прямо как в мунлоадере! Если ты не знаешь как работают игровые опкоды да и вообще сама система игры - чем ты нахуй занимался эти несколько тысяч часов? Писал недорванки ебаные и работал онли с битстримами?

C++:
void playAnim(int playerHandle, const char* animation, const char* IFP, float frameDelta, bool loop, bool lockX, bool lockY, bool lockZ, bool lockF, int time) {
    char str[256];
    sprintf(str, "04ED: \"%s\"", IFP);
    SF->getCLEO()->callOpcode(str);
    sprintf(str, "04EE: \"%s\"", IFP);
    SF->getCLEO()->callOpcode(str);
    sprintf(str, "0605: %d \"%s\" \"%s\" %f %d %d %d %d %d", playerHandle, animation, IFP, frameDelta, loop, lockX, lockY, lockZ, lockF, time);
    SF->getCLEO()->callOpcode(str);
}

А я бы посмотрел в сколько строк ты бы это оформил на Plugin SDK. Гений блядь. Называешь всех ЧСВшными идиотами хоть сам блядь держишь свое мнение поверх других когда тебе уже высказали многое, а ты дальше за свое "А ВОТ ПОЧЕМУ НЕ СДЕЛАТЬ ТАКОЕ ЖЕ АПИ КАК У МУНЛОАДЕРА, ТАМ ВЕДЬ ВСЁ ТАК ПРОСТО?!?!?!"
Дорогой всем насрать на твоё, моё и чьё-либо мнение, если оно подкреплено онли тупыми оскорблениями. Если ты что-то знаешь, то говори информативно. Челы выше попытались дать полезный совет, а ты с кнайтом пришёл чисто вылить желчь и прокачать чсв. Только что ты говорил, что охуенных классов сампфункса достаточно для всего, а в итоге хакаешь функцию из клео. Почему ты не заюзал для этого офигенные методы сампфункса для работы с камерой, спавна цивил педов и эмуляции пакетов. Потому что они кем-то писались, но так и не были доведены до ума, и в итоге нихрена не работает. И это не игровой опкод, а самописная функция из клео либы, которая позволяет вызывать анимки в упрощённом виде, выше был пример из собейта, как реально применяется анимация с использованием только игровых функций.

Суть моего вопроса была в том, как вызывать функции мунлоадера по тому же принципу, как из сф вызывается клео, чтобы закрыть недочёты сампфункса. Правильным ответом на вопрос было сказать, что не нужно вызывать функцию Муна, потому что Мун сам для работы с синглом вызывает клео опкоды, которые так же можно вызывать из СФ. Для меня это откровение, так же как и для всех кто начал писать моды для сампа в эпоху мунлоадера. Вместо этого ты решил обзываться и пиздеть на тему, в которой нифига не разбираешься, потому что только впервые открыл сф проект. Теперь я изучу возможности КЛЕО подробнее. Оказывается в вики есть целая страница, с опкодами КЛЕО и их аналогами в Мунлоадере: https://wiki.blast.hk/ru/moonloader/opcodes

На этом вопрос можно считать решённым. Если кто-то знает, как заставить СФ эмулировать пакеты, то расскажите об этом здесь. Печально, что на этом форуме столько экспертов, но 90% их сообщений это бесполезное токсичное дерьмо. И извлекать из вас полезную инфу сложнее, чем принимать роды.
 
  • Bug
Реакции: ARMOR и Z3roKwq