PDA

Просмотр полной версии : Как вызвать функцию Moonloader'а из SF плагина?


Ya Zaregalsya
14.09.2023, 15:18
Хочется пользоваться крутыми функами муна из нашего убогенького сф плагина(

вайега52
14.09.2023, 15:38
Хочется пользоваться крутыми функами муна из нашего убогенького сф плагина(


сомневаюсь что это можно реализовать как-то кроме реверса мунлоадера, но тогда вопрос в другом, не проще ли напрямую вызывать функции (большинство) из игры/сампа?)

Ya Zaregalsya
14.09.2023, 16:02
сомневаюсь что это можно реализовать как-то кроме реверса мунлоадера, но тогда вопрос в другом, не проще ли напрямую вызывать функции (большинство) из игры/сампа?)


За каждой простенькой функой Муна стоит куча кода. Нельзя просто позвонить в ГТА и в одну строчку попросить её сделать многие простые вещи. Вот к примеру собовская функция для применения анимации к локальному игроку:

C++:






void
GTAfunc_PerformAnimation
(
const
char
*
szBlockName
,
const
char
*
szAnimName
,
int
iTime
,
bool
bLoop
,
bool
bUpdatePosition
,
bool
bInterruptable
,
bool
bFreezeLastFrame
,
bool
bRunInSequence
,
bool
bOffsetPed
,
bool
bHoldLastFrame
)
{
CAnimBlock
*
pBlock
=
pGameInterface
->
GetAnimManager
(
)
->
GetAnimationBlock
(
szBlockName
)
;
if
(
pBlock
)
{
bool
bLoaded
=
true
;
if
(
!
pBlock
->
IsLoaded
(
)
)
{
int
iTimeToWait
=
50
;
// load animations
pGameInterface
->
GetStreaming
(
)
->
RequestAnimations
(
pBlock
->
GetIndex
(
)
,
4
)
;
pGameInterface
->
GetStreaming
(
)
->
LoadAllRequestedModels
(
)
;
while
(
!
pBlock
->
IsLoaded
(
)
&&
iTimeToWait
!=
0
)
{
iTimeToWait
--
;
Sleep
(
10
)
;
}
if
(
iTimeToWait
==
0
)
bLoaded
=
false
;
}
if
(
bLoaded
)
{
// allow tasks to be removed
pPedSelf
->
GetPedIntelligence
(
)
->
GetTaskManager
(
)
->
Flush
(
TASK_PRIORITY_PRIMARY
)
;
// removes temporary tasks caused by events like falling
pPedSelf
->
GetPedIntelligence
(
)
->
GetTaskManager
(
)
->
RemoveTask
(
TASK_PRIORITY_EVENT_RESPONSE_TEMP
)
;
// remove jumping task
CTask
*
jumpTask
=
pPedSelf
->
GetPedIntelligence
(
)
->
GetTaskManager
(
)
->
FindActiveTaskByType
(
211
)
;
if
(
jumpTask
)
{
pPedSelf
->
GetPedIntelligence
(
)
->
GetTaskManager
(
)
->
RemoveTask
(
TASK_PRIORITY_PRIMARY
)
;
}
// more removals if needed ever
//pPedSelf->GetPedIntelligence()->GetTaskManager()->RemoveTask(TASK_PRIORITY_EVENT_RESPONSE_NONTEMP);
//pPedSelf->GetPedIntelligence()->GetTaskManager()->RemoveTask(TASK_PRIORITY_PHYSICAL_RESPONSE);
//pPedSelf->GetPedIntelligence()->GetTaskManager()->RemoveTask(TASK_PRIORITY_MAX);
//pPedSelf->GetPedIntelligence()->GetTaskManager()->RemoveTask(TASK_PRIORITY_PRIMARY);
// set flags
int
flags
=
0x10
;
// // Stops jaw fucking up, some speaking flag maybe
if
(
bLoop
)
flags
|=
0x2
;
// flag that triggers the loop (Maccer)
if
(
bUpdatePosition
)
{
// 0x40 enables position updating on Y-coord, 0x80 on X. (Maccer)
flags
|=
0x40
;
flags
|=
0x80
;
}
if
(
!
bFreezeLastFrame
)
flags
|=
0x08
;
// flag determines whether to freeze player when anim ends. Really annoying (Maccer)
// create a new task
CTask
*
pTask
=
pGameInterface
->
GetTasks
(
)
->
CreateTaskSimpleRunNamedAnim
(
szAnimName
,
pBlock
->
GetName
(
)
,
flags
,
4.0f
,
iTime
,
!
bInterruptable
,
bRunInSequence
,
bOffsetPed
,
bHoldLastFrame
)
;
if
(
pTask
)
{
pTask
->
SetAsPedTask
(
pPedSelf
,
TASK_PRIORITY_PRIMARY
)
;
}
}
else
{
// TODO: unload unreferenced blocks later on
pGameInterface
->
GetStreaming
(
)
->
RequestAnimations
(
pBlock
->
GetIndex
(
)
,
8
)
;
}
}
}




А так это выглядит в мунлоадере:

Lua:






requestAnimation
(
"animName"
)
taskPlayAnim
(
1
,
"animLib"
,
"animName"
,
9
,
false
,
false
,
false
,
false
,
-
1
)




Соответственно и потенциальных багов от использования муновских функций меньше.

Dark_Knight
02.10.2023, 21:02
Луа - это луа. Плюсы это плюсы. Нехер тянуть такое в СФ, когда оно и там так есть.

Ya Zaregalsya
03.10.2023, 03:39
Луа - это луа. Плюсы это плюсы. Нехер тянуть такое в СФ, когда оно и там так есть.


В СФ всё есть, потому что ты так сказал? СФ уступает Муну по функционалу. Действия, которые делаются в Муне в одну строчку, в СФ требуют сложной совершенно неочевидной последовательности действий. СФ код небезопасен, в его функции не зашиты никакие проверки, что приводит к крашам в игре. В СФ меньше функций по сравнению с Муном, а из тех что есть многие просто не работают. Никто не знает как в СФ применить анимку без рпс, как манипулировать камерой, как эмулировать пакет, и многое другое, потому что это всё в САМПФУКСе просто не работает и работать не будет, ведь проект уже закрыт. Даже самповские функции там работают криво. Я уже тысячу раз пожалел, что вообще начал работу на этом старье, просто других вариантов тогда ещё не было. Единственный нормальный варик сейчас это сдк от адского дрочилы, чел просто красава, собрал в своём сдк всё что нужно, к сожалению мне слишком запарно переносить туда весь свой проект. А что касается Муна, насколько мне известно, он как и сам Люа, написан на Си-шке, и тяжело понять почему нельзя было просто немного его переделать и выпустить нормальный сдк для С++, впрочем это уже и не нужно.

chapo
03.10.2023, 03:43
В СФ всё есть, потому что ты так сказал? СФ уступает Муну по функционалу. Действия, которые делаются в Муне в одну строчку, в СФ требуют сложной совершенно неочевидной последовательности действий


так юзай плагин сдк, там функций больше чем в муне, да и работают они абсолютно так же (потому что мун вызывает именно эти игровые функции)

ARMOR
03.10.2023, 03:50
А что касается Муна, насколько мне известно, он как и сам Люа, написан на Си-шке, и тяжело понять почему нельзя было просто немного его переделать и выпустить нормальный сдк для С++, впрочем это уже и не нужно.


Потому что комьюнити сампа слишком тупое чтобы писать на плюсах, а на писать на луа может даже первокласник.

Gorskin
03.10.2023, 04:02
Потому что комьюнити сампа слишком тупое чтобы писать на плюсах, а на писать на луа может даже первокласник.


Lua - высокоуровневый ЯП. У многих луа ограничивается только использованием функций из Moonloader API. Для самперов луа скриптинг ограничивается только этим и банальными imgui окнами. Не стоит говорить что даже первоклассник напишет скрипт, максимум выведет print("Hello man") и назовёт своё изобретение скриптом. Сам синтаксис луа приятен и понятен глазу.

ARMOR
03.10.2023, 04:07
Lua - высокоуровневый ЯП. У многих луа ограничивается только использованием функций из Moonloader API. Для самперов луа скриптинг ограничивается только этим и банальными imgui окнами. Не стоит говорить что даже первоклассник напишет скрипт, максимум выведет print("Hello man") и назовёт своё изобретение скриптом. Сам синтаксис луа приятен и понятен глазу.


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

Ya Zaregalsya
03.10.2023, 04:09
так юзай плагин сдк, там функций больше чем в муне, да и работают они абсолютно так же (потому что мун вызывает именно эти игровые функции)


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



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


Учитывая какую простую ***ню обычно пишут новички на Люа, они бы не заметили разницы по сравнению с С++, и просто игнорили 90% его возможностей. А с ростом сложности проекта, удобство С++ только возрастает. Для опытного прогера С++ код намного читабельнее, как раз из-за строгой типизации, продвинутого синтаксиса, заголовочных файлов, и конечно интеграции с IDE, которая будет подсвечивать все твои ошибки и выводить сигнатуру всех функций. Единственная причина почему Люа так заходит новичкам, заключается в том, что ты можешь писать код в обычный текстовик, нажать Ctrl+S и всё будет работать. Чтобы начать писать на C++, ты должен поставить тяжеловесную среду разработки, собрать проект, подключить все зависимости и каждый раз всё это компилировать. Ну а сам кодинг на С++ не представлял бы особой сложности для новичков, будь там такой же хороший SDK как Мунлоадер и не будь такой муторной установки и сборки прокетов.

kin4stat
03.10.2023, 06:37
Для опытного прогера С++ код намного читабельнее, как раз из-за строгой типизации, продвинутого синтаксиса, заголовочных файлов, и конечно интеграции с IDE


Держи, читай

C++:






template

inline
constexpr
bool
apply_is_noexcept
=
false
;
template

inline
constexpr
bool
apply_is_noexcept
>
=
noexcept
(
std
::
invoke
(
std
::
declval

(
)
,
std
::
get
>
-
Is
-
1
>
(
std
::
declval

(
)
)
.
.
.
)
)
;
template

constexpr
decltype
(
auto
)
apply_reversed
(
F
&&
f
,
Tuple
&&
tup
)
noexcept
(
apply_is_noexcept
>
>>
)
{
return
[
&
]

(
std
::
index_sequence

)
{
return
std
::
invoke
(
std
::
forward

(
f
)
,
std
::
get
>
-
Is
-
1
>
(
std
::
forward

(
tup
)
)
.
.
.
)
;
}
(
std
::
make_index_sequence
>
>
{
}
)
;
}

Ya Zaregalsya
03.10.2023, 09:00
Держи, читай

C++:






template

inline
constexpr
bool
apply_is_noexcept
=
false
;
template

inline
constexpr
bool
apply_is_noexcept
>
=
noexcept
(
std
::
invoke
(
std
::
declval

(
)
,
std
::
get
>
-
Is
-
1
>
(
std
::
declval

(
)
)
.
.
.
)
)
;
template

constexpr
decltype
(
auto
)
apply_reversed
(
F
&&
f
,
Tuple
&&
tup
)
noexcept
(
apply_is_noexcept
>
>>
)
{
return
[
&
]

(
std
::
index_sequence

)
{
return
std
::
invoke
(
std
::
forward

(
f
)
,
std
::
get
>
-
Is
-
1
>
(
std
::
forward

(
tup
)
)
.
.
.
)
;
}
(
std
::
make_index_sequence
>
>
{
}
)
;
}





Учитывая, что это функционал для метапрограммирования, то он ещё вполне читабельный. Кроме шуток, открой код любого новичка в Lua, прикинь как это выглядело бы в C++, и обнаружишь, что при переносе на плюсы он по прежнему останется простым. А с использованием возможностей языка, его наоборот можно сделать ещё понятнее. Писать на С++ понятным читабельным образом или писать на С++ как чорт это личный выбор каждого.

F0RQU1N and
03.10.2023, 09:07
какую тебе надо вызывть? название

Ya Zaregalsya
03.10.2023, 09:18
какую тебе надо вызывть? название


Всё что связано с анимками например. setFixedCameraPosition, pointCameraAtPoint, restoreCamera, ради них тоже пришлось писать скрипт на Люа, потому что СФ *** знает как управлять камерой. Спавн НПС, в СФ можно спавнить только педов, которые находятся под управлением локального игрока. Все возможные функции, начинающиеся со слова attach. Любой способ эмулировать пакеты.

F0RQU1N and
03.10.2023, 09:20
Держи, читай

C++:






template

inline
constexpr
bool
apply_is_noexcept
=
false
;
template

inline
constexpr
bool
apply_is_noexcept
>
=
noexcept
(
std
::
invoke
(
std
::
declval

(
)
,
std
::
get
>
-
Is
-
1
>
(
std
::
declval

(
)
)
.
.
.
)
)
;
template

constexpr
decltype
(
auto
)
apply_reversed
(
F
&&
f
,
Tuple
&&
tup
)
noexcept
(
apply_is_noexcept
>
>>
)
{
return
[
&
]

(
std
::
index_sequence

)
{
return
std
::
invoke
(
std
::
forward

(
f
)
,
std
::
get
>
-
Is
-
1
>
(
std
::
forward

(
tup
)
)
.
.
.
)
;
}
(
std
::
make_index_sequence
>
>
{
}
)
;
}





это пиздец... кто такую хуету может написать



Всё что связано с анимками например. setFixedCameraPosition, pointCameraAtPoint, restoreCamera, ради них тоже пришлось писать скрипт на Люа, потому что СФ *** знает как управлять камерой. Спавн НПС, в СФ можно спавнить только педов, которые находятся под управлением локального игрока. Все возможные функции, начинающиеся со слова attach. Любой способ эмулировать пакеты.


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



setFixedCameraPosition


ищи в иде где функа биндится и по адресу вызывай

Ya Zaregalsya
03.10.2023, 09:32
это пиздец... кто такую хуету может написать

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

ищи в иде где функа биндится и по адресу вызывай


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

Digger Man52
03.10.2023, 10:35
Нифига не понял, чё за строки, какие бинды. Если знаешь как вызывать функи из Муна, можешь написать коротенький гайд, думаю с него будет спрос.


отреверси мун, найди функцию, вызывай функцию, но нужна ли тебе зависимость от муна? нет бы написать хук самому

F0RQU1N and
03.10.2023, 11:09
Нифига не понял, чё за строки, какие бинды. Если знаешь как вызывать функи из Муна, можешь написать коротенький гайд, думаю с него будет спрос.



https://forum.antichat.xyz/attachments/28387098/

ищещь по строке название функции тебе нужной

переходишь по хрефу и видишь что чуть выше куда то записывается адрес функции

https://forum.antichat.xyz/attachments/28387098/

переходишь в нее

https://forum.antichat.xyz/attachments/28387098/

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

Ya Zaregalsya
03.10.2023, 11:39
ищещь по строке название функции тебе нужной
переходишь по хрефу и видишь что чуть выше куда то записывается адрес функции

переходишь в нее

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


Ух нифига вот это полезный ответ! Можешь подкинуть какой-то вводной урок подо всю эту хуёвину? А то я не бум-бум во всём энтом реверсинге.

вайега52
03.10.2023, 11:53
Ух нифига вот это полезный ответ! Можешь подкинуть какой-то вводной урок подо всю эту хуёвину? А то я не бум-бум во всём энтом реверсинге.



https://youtube.com/playlist?list=PLIJLLSrXDPoi7-5NMWzpzMUtSxNoH3TBW&si=Pox3KAsTAqldsXjk

RTD
03.10.2023, 15:40
ищещь по строке название функции тебе нужной
переходишь по хрефу и видишь что чуть выше куда то записывается адрес функции

переходишь в нее

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


Нет, это не верно. То что ты нашел это какие-то внутренности для sol2.

Все луа функции это lua_CFunction -> int (__cdecl*)(lua_State* L)

Переходить нужно по этому

https://forum.antichat.xyz/attachments/28387209/

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

https://forum.antichat.xyz/attachments/28387209/

sub_10072F70 это и есть "setFixedCameraPosition"

Вот, достает аргументы с луа стека и вызывает установку позиции камеры

https://forum.antichat.xyz/attachments/28387209/

Вызвать это будет не так-то просто, потому что надо получить 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
03.10.2023, 15:48
Нет, это не верно. То что ты нашел это какие-то внутренности для sol2.
Все луа функции это lua_CFunction -> int (__cdecl*)(lua_State* L)
Переходить нужно по этому

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

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

Вызвать это будет не так-то просто, потому что надо получить 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
)




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


понятно, увидел что кол-во аргументов похожее кроме первого что я и подумал либо стейт либо контекст какой-то

kin4stat
03.10.2023, 17:43
это пиздец... кто такую хуету может написать


Ну я писал, и что?

А в чем проблема обратного std::apply?

Dark_Knight
03.10.2023, 23:23
В СФ всё есть, потому что ты так сказал? СФ уступает Муну по функционалу. Действия, которые делаются в Муне в одну строчку, в СФ требуют сложной совершенно неочевидной последовательности действий. СФ код небезопасен, в его функции не зашиты никакие проверки, что приводит к крашам в игре. В СФ меньше функций по сравнению с Муном, а из тех что есть многие просто не работают. Никто не знает как в СФ применить анимку без рпс, как манипулировать камерой, как эмулировать пакет, и многое другое, потому что это всё в САМПФУКСе просто не работает и работать не будет, ведь проект уже закрыт. Даже самповские функции там работают криво. Я уже тысячу раз пожалел, что вообще начал работу на этом старье, просто других вариантов тогда ещё не было. Единственный нормальный варик сейчас это сдк от адского дрочилы, чел просто красава, собрал в своём сдк всё что нужно, к сожалению мне слишком запарно переносить туда весь свой проект. А что касается Муна, насколько мне известно, он как и сам Люа, написан на Си-шке, и тяжело понять почему нельзя было просто немного его переделать и выпустить нормальный сдк для С++, впрочем это уже и не нужно.


Хуйню несешь. Полнейшую. СФ проигрывает лишь документацией, но твоя тупая бошка не умеет ничего, кроме заучиванния. Иди в луа и дрочи там на виртуальную машину сколько хочешь. Там тоже есть некий ооп даже. Кому нужно тот все знает.

Может смотреть плагин СДК, можешь мта блю, но еще раз повторю. Твоя бошка ничего крмое заучивания не умеет.

Ya Zaregalsya
04.10.2023, 04:44
Хуйню несешь. Полнейшую. СФ проигрывает лишь документацией, но твоя тупая бошка не умеет ничего, кроме заучиванния. Иди в луа и дрочи там на виртуальную машину сколько хочешь. Там тоже есть некий ооп даже. Кому нужно тот все знает.
Может смотреть плагин СДК, можешь мта блю, но еще раз повторю. Твоя бошка ничего крмое заучивания не умеет.


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



PluginSDK юзай для такого. game api хромает в СФ.





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





Честно, работу с синглом через СФ никогда не практиковал.


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

ARMOR
04.10.2023, 05:07
По факту ты много пиздишь и ничем не подкрепляешь свои слова. Много ты сам написал сф плагинов, в которых была работа с одиночкой?

По факту ты сам нихуя не умеешь и даже не пробовал, а распинаешься тут как гуру модинга. Любой дебил может прочитать/собрать битстрим и написать чит для аризонки, но даже самп часть в СФ хромает, там нет нормальных структур пакетов, неполный список рпс, и напрочь не работает эмуляция пакетов.


Бетмен когда узнал что он нихуя не шарит в SF кодинге просидев в помощи по SF дохуя часов. ( А ещё раньше вроде как принимал участие в разработке самого SAMPFUNCS ):

https://media.tenor.com/CLbD1dtaQnUAAAAd/%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.

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



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



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

https://forum.antichat.xyz/attachments/28387483/

Ya Zaregalsya
04.10.2023, 05:18
Бетмен когда узнал что он нихуя не шарит в SF кодинге просидев в помощи по SF дохуя часов. ( А ещё раньше вроде как принимал участие в разработке самого SAMPFUNCS ):

https://media.tenor.com/CLbD1dtaQnUAAAAd/%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-х челов, наиболее яро защищающих сф плагин, один никогда ничего не писал для сингла, второй вообще только скачал стандартный проект. За то написав несколько бесполезных оффтоп сообщений, вы уже оцениваете чей-то интеллект. Если ты открыл сф плагин и полистал основные классы, то по части сингла твои знания уже примерно на уровне дарк кнайта. Теперь попробуй без эмуляции рпс применить к актёру анимку, заспавнить нпс актёра, зааттачить объект к кости, эмулировать пакет — вещи, которые в Муне делаются в пару строчек. Потом приходи снова и я дам тебе ещё кучу квестов, чтобы ты мог на личном опыте убедиться, что СФ начисто всирает муну, и немного опустить свою раздутую самооценку. Чем больше ты интересуешься СФ, тем меньше тебе будет интересен СФ и более интересен ПлагинСДК или Мунлоадер. Так что лучше сразу качай сдк от адского дрочилы и не трать время на давно заброшенный сампфункс.

ARMOR
04.10.2023, 07:13
Показательно, что из 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. Гений блядь. Называешь всех ЧСВшными идиотами хоть сам блядь держишь свое мнение поверх других когда тебе уже высказали что ты не прав, а ты дальше за свое "А ВОТ ПОЧЕМУ НЕ СДЕЛАТЬ ТАКОЕ ЖЕ АПИ КАК У МУНЛОАДЕРА, ТАМ ВЕДЬ ВСЁ ТАК ПРОСТО?!?!?!"

Ya Zaregalsya
04.10.2023, 08:31
Вот, держи тебе код воспроизведения анимации прямо как в мунлоадере! Если ты не знаешь как работают игровые опкоды да и вообще сама система игры - чем ты на*** занимался эти несколько тысяч часов? Писал недорванки ебаные и работал онли с битстримами?

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

На этом вопрос можно считать решённым. Если кто-то знает, как заставить СФ эмулировать пакеты, то расскажите об этом здесь (https://www.blast.hk/threads/144722/). Печально, что на этом форуме столько экспертов, но 90% их сообщений это бесполезное токсичное дерьмо. И извлекать из вас полезную инфу сложнее, чем принимать роды.

вайега52
04.10.2023, 09:23
Мун сам для работы с синглом вызывает клео опкоды


Мун не зависит от Клео, если правильно помню

Ya Zaregalsya
04.10.2023, 09:36
Мун не зависит от Клео, если правильно помню


Я тоже так думал, пока не зашёл на ту страницу и не прочитал подзаголовок:



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



https://wiki.blast.hk/ru/moonloader/opcodes

Dark_Knight
04.10.2023, 11:08
Вечером расскажу почему ты несёшь ахинею полную и сравниваешь несравнимое. Обсуждение далеко не окончено.

Ya Zaregalsya
04.10.2023, 11:22
Вечером расскажу почему ты несёшь ахинею полную и сравниваешь несравнимое. Обсуждение далеко не окончено.


Расскажи лучше что-нибудь полезное.

ARMOR
04.10.2023, 12:22
Я тоже так думал, пока не зашёл на ту страницу и не прочитал подзаголовок:

https://wiki.blast.hk/ru/moonloader/opcodes


А где там хоть что-то указанное про Клео? Ты даже не знаешь что такое опкоды блядь. Опкоды используются для вызова ИГРОВЫХ СКРИПТОВ которые по началу есть в игре. Опкоды можно вызывать с помощью Plugin SDK и без Клео.

Ya Zaregalsya
04.10.2023, 12:42
А где там хоть что-то указанное про Клео? Ты даже не знаешь что такое опкоды блядь. Опкоды используются для вызова ИГРОВЫХ СКРИПТОВ которые по началу есть в игре. Опкоды можно вызывать с помощью Plugin SDK и без Клео.


Помимо дефолтных опкодов есть ещё 100+ опкодов из клео либы, они тоже есть в муне. Также сам вызов этих опкодов насколько я понимаю осуществляется при помощи клео.

Dark_Knight
04.10.2023, 23:11
1. Приношу за оскорбление

2.

вайега52
15.10.2023, 14:00
Я тоже так думал, пока не зашёл на ту страницу и не прочитал подзаголовок:


У муна своя реализация клео-опкодов (т.е. аналогичные функции, как написано на вики), мун юзает опкоды только тогда, когда речь идет про работу с сампом, а точнее с сампфунксом, который регистрирует свои опкоды и мун вызывает их, но самому муну не нужен клео

imring
15.10.2023, 18:07
У муна своя реализация клео-опкодов (т.е. аналогичные функции, как написано на вики), мун юзает опкоды только тогда, когда речь идет про работу с сампом, а точнее с сампфунксом, который регистрирует свои опкоды и мун вызывает их, но самому муну не нужен клео


для вызова опкодов не обязателен клео, ибо в гта своя реализация scm. к примеру (сурс (https://www.blast.hk/redirect/aHR0cHM6Ly9kaXNjb3JkLmNvbS9jaGFubmVscy80MTc2MDY5ND UzNjU2ODgzMjAvNDU0NjM5NTE4NTgzMDk1MzA3LzkxMzU0OTQy MDI0MTUwMjIxOA)):