что такое lua в самп

SAMP.Lua

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

SAMP.Events
Этот модуль добавляет событийную обработку входящих и исходящих RakNet пакетов. Имеет удобный API, полностью кастомизируем, предоставляет те же возможности, что и обычные хуки: чтение, перезапись, игнорирование.

Использование
Простой пример обработки исходящего сообщения в чат:

Структуры всех пакетов находятся в файле events.lua.

Это применимо только в событиях onSendPlayerSync, onSendVehicleSync, onSendPassengerSync, onSendAimSync, onSendUnoccupiedSync, onSendTrailerSync, onSendBulletSync, onSendSpectatorSync.
Структуры всех пакетов синхронизации находятся в файле synchronization.lua.

Новый тип тоже можно добавить без изменения исходников библиотеки:

Скачать последнюю версию и следить за изменениями всегда можно на GitHub.
Установка: скачать samp.zip из последнего релиза и целиком скопировать папку ‘samp’ (не содержимое папки!) из архива в каталог ‘moonloader/lib/’.

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

Ну и конечно же крохотное нано-спасибо hnnssy за помощь.

что такое lua в самп. Смотреть фото что такое lua в самп. Смотреть картинку что такое lua в самп. Картинка про что такое lua в самп. Фото что такое lua в самп

что такое lua в самп. Смотреть фото что такое lua в самп. Смотреть картинку что такое lua в самп. Картинка про что такое lua в самп. Фото что такое lua в самп

Garrus

Участник

[15:20:25] SAMPFUNCS v5.3.3 release #19 (SA-MP 0.3.7) loaded. Base address: 0x042B0000.
[15:20:25] Compiled: Aug 8 2016 13:19:58
[15:20:25] Initializing opcodes.
[15:20:25] Opcodes initialized successfully. Total opcodes count: 382.
[15:20:27] samp.dll base addres: 0x02FA0000
[15:20:27] Installing hooks:
[15:20:27] Hook command process input installed.
[15:20:27] Hook on dialog response installed.
[15:20:27] Hook init netgame installed.
[15:20:27] Hook QuitGameHook installed.
[15:20:27] All hooks installed.
[15:20:42] [ML] (system) Session started.
[15:20:42] [ML]
MoonLoader v.021-alpha loaded.
[15:20:42] [ML] Developers: FYP, hnnssy, EvgeN 1137

[15:20:42] [ML] © BlastHack Team, 2016
[15:20:42] [ML] https://www.blast.hk/moonloader/

[15:20:42] [ML] (info) Working directory: D:\Games\San Andreas Multiplayer\moonloader
[15:20:42] [ML] (system) Installing pre-game hooks.
[15:20:42] [ML] OK.
[15:20:42] [ML] (system) Loading script ‘D:\Games\San Andreas Multiplayer\moonloader\Script.lua’.
[15:20:42] [ML] (system) Script: Loaded successfully.
[15:20:42] [ML] (system) Loading script ‘D:\Games\San Andreas Multiplayer\moonloader\reload_all.lua’.
[15:20:42] [ML] (system) ML-ReloadAll: Loaded successfully.
[15:20:42] [ML] (system) Loading script ‘D:\Games\San Andreas Multiplayer\moonloader\SF Integration.lua’.
[15:20:42] [ML] (system) SAMPFUNCS Integration: Loaded successfully.
[15:20:42] [ML] (system) Installing post-load hooks.
[15:20:42] [ML] OK.
[15:20:43] Direct3DDevice9 hook installed.
[15:20:44] Hook RakPeer::HandleRPCPacket installed.
[15:20:44] Initializing SAMP data.
[15:20:44] Info initialized.
[15:20:44] Pools initialized.
[15:20:44] Player pool initialized.
[15:20:44] Vehicle pool initialized.
[15:20:44] Chat initialized.
[15:20:44] Input initialized.
[15:20:44] Death list initialized.
[15:20:44] Dialog initialized.
[15:20:44] Misc data initialized.
[15:20:44] Scoreboard initialized.
[15:20:44] RakNet initialized.
[15:20:44] ==========================================
[15:20:44] SAMPFUNCS v5.3.3 release #19 (SA-MP 0.3.7)
Compiled: Aug 8 2016 13:18:13

Author: FYP
Active developers: FYP, SR_Team, EXPORT

Past developers and special thanks:
MogAika, urShadow, legend2360, NarutoUA, Dark_Knight

[16:00:25] > SCM Thread:
hj 00A903D0 00000000 00A561AD true
noname 00A904B0 00000000 00A56B07 true
intman 00A90590 00000000 00A56FDA true
main 00A90750 00000000 00A56091 true
benzo xy 042A87F8 0B7C0048 0B7C0194 true

Источник

Гайд #3 | Работа с библиотекой SAMP.lua

UFDHBI

Гениальный

что такое lua в самп. Смотреть фото что такое lua в самп. Смотреть картинку что такое lua в самп. Картинка про что такое lua в самп. Фото что такое lua в самп

что такое lua в самп. Смотреть фото что такое lua в самп. Смотреть картинку что такое lua в самп. Картинка про что такое lua в самп. Фото что такое lua в самп

что такое lua в самп. Смотреть фото что такое lua в самп. Смотреть картинку что такое lua в самп. Картинка про что такое lua в самп. Фото что такое lua в самп

Все, библиотеку мы установили, переходим к написанию скриптов.

Я создал файл Hooks.lua, кодировка windows 1251.

Поместил туда шаблон:

что такое lua в самп. Смотреть фото что такое lua в самп. Смотреть картинку что такое lua в самп. Картинка про что такое lua в самп. Фото что такое lua в самп

Подключим нашу библиотеку:

что такое lua в самп. Смотреть фото что такое lua в самп. Смотреть картинку что такое lua в самп. Картинка про что такое lua в самп. Фото что такое lua в самп

Попробуем отловить входящий пакет о присоеденении игрока к серверу на котором вы находитесь, пишем следующий код:

что такое lua в самп. Смотреть фото что такое lua в самп. Смотреть картинку что такое lua в самп. Картинка про что такое lua в самп. Фото что такое lua в самп

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

что такое lua в самп. Смотреть фото что такое lua в самп. Смотреть картинку что такое lua в самп. Картинка про что такое lua в самп. Фото что такое lua в самп

Теперь каждый раз когда кто-то присоединяется к серверу мы видим сообщение в чате:
nickname[id] присоединился к серверу.

Теперь перехватим входящее сообщение от сервера

что такое lua в самп. Смотреть фото что такое lua в самп. Смотреть картинку что такое lua в самп. Картинка про что такое lua в самп. Фото что такое lua в самп

Давайте сделаем, чтобы все сообщения которые нам приходят от сервера были зелеными.

Источник

Информация Гайд Всё о Lua скриптинге для MoonLoader

Для лёгкой и удобной работы с кодом Lua скриптов вам понадобится настроить для себя среду разработки. Для работы с Lua достаточно любого текстового редактора, но какой-нибудь блокнот Windows для этого подходит совсем плохо, поэтому лучше использовать специализированные программы. На текущий момент полная поддержка MoonLoader есть в Atom и Notepad++, помимо этого есть пользовательские дополнения для Visual Studio Code и Sublime Text.

Проект по-умолчанию.
В меню File выбираем пункт Open Folder. и указываем путь до папки moonloader, после этого она откроется как проект.

Проект по-умолчанию.
Как и в Atom, здесь есть возможность показа меню проекта, а точнее «Папка как Проект». В меню «Файл» выбираем пункт «Открыть Папку как Проект» и указываем путь к папке «moonloader».

Кодировка по-умолчанию.
Над лентой выбираем пункт Опции и переходим в Настройки. В меню слева выбираем пункт Новый документ и в разделе кодировки ставим флажок на список, в котором выбираем кодировку Windows-1251

После установки среды разработки, изучения основ Lua и ознакомления с документацией MoonLoader, можно приступать от теории к практике. Давайте сначала рассмотрим самое основное, на всякий случай.

В этом примере показаны не все директивы, за полным списком обращайтесь к соответствующей странице на вики.

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

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

Создание модулей
Модули делятся на два типа: Lua и DLL. Lua-модули пишутся, как вы уже могли догадаться, на языке Lua и в результате представляют из себя привычные Lua-скрипты, только с некоторыми особенностями.
Давайте рассмотрим пример простого модуля, назовём его example:

Источник

что такое lua в самп. Смотреть фото что такое lua в самп. Смотреть картинку что такое lua в самп. Картинка про что такое lua в самп. Фото что такое lua в самп

seven.

vk.com/nanseven

Функционал мультиплеера
На данный момент мультиплеер обладает большим количеством возможностей, а его исходный код наполнен множеством примеров того, как можно патчить определенные функции GTA: San Andreas при помощи встроенной библиотеки memory и Lua FFI. Некоторые тестеры мультиплеера уже успели написать свои гейммоды, которые могли бы претендовать на стандарт того, как рекомендуется писать моды.

    Чат тестеров модификации и её разработчиков ВКонтакте: присоединиться
    Чат с разработчиками SL-Team для сторонник разработчиков: присоединиться
    Последние версии модификации на GitHub Releases: посмотреть релизы
    Канал SL:MP в Telegram с возможностью обсуждать релизы: присоединиться
    Топик на английском языке на GTAForums: посмотреть
    Группа ВКонтакте с новостями и прочим материалом: посмотреть
    Поддержать проект материально: поддержать
    Сервер проекта в Discord (преимущественно английский): присоединиться

    Ку, вообщем нам с @Pakulichev пришла весьма самоубийственная идея, сделать мультиплеер на Lua, для GTA:SA. Частично у нас реализовать некоторые моменты, а именно:
    1) Синхронизация игроков (OnFoot, но она довольно паршивая, но она есть, тестировалась в одиночной игре), попытка синхронизации игроков в машине (куски кода остались в сервере и клиенте).
    2) Клиент с которого можно подключиться к SLMP серверу, по IP адресу и нику.
    3) Сервер который обрабатывает некоторые пакеты и отсылает их игрокам
    4) Мини гейм мод который способен отлавливать подключения игроков к серверу и отключения игроков.
    5) Есть мини зона стрима

    Если у вас открыты порты и запущен сервер на компе, то другие игроки смогут подключиться к вам в игру. Клиент и сервер полностью сделаны на библиотеке socket, пакеты отсылаются по протоколу UDP.

    Сервер имеет конфликты с SA:MP, если вы подключены к серверу самп у которого порт 7777, то вы не сможете с клиента подключиться к серверу SLMP (да слмп сервер на 7777 порте), в одиночной игре все будет норм.

    Скриншот консоли сервера:

    (тоже написан на луа)

    Видео с разработки:
    1) Первая версия синхронизации игроков:




    Инструкция по установке клиента:
    1) Файл client.lua закидываете в папку MoonLoader (активация меню клиента ALT + 1)
    2) Модуль MULTIPLAYER нужно перекинуть в папку moonloader/lib
    3) Установить модули «socket», «imgui» если их нету.

    Инструкция по запуску своего сервера SL:MP:

    1) Главный файл для запуска start.bat
    2) core.lua само ядро сервера.
    3) Папка gamemodes папка для игровых режимов, в ней лежит стандартный игровой режим.

    Сервер автоматически запускается на локальном ип с портом 7777. (ядро сервера лучше не трогать, если не знаете что в нем делать)
    Причиной слива этого мини мультиплеера послужило решение разрабатывать собственный мультиплеер на С++

    Источник

    SAMP.Lua

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

    SAMP.Events
    Этот модуль добавляет событийную обработку входящих и исходящих RakNet пакетов. Имеет удобный API, полностью кастомизируем, предоставляет те же возможности, что и обычные хуки: чтение, перезапись, игнорирование.

    Использование
    Простой пример обработки исходящего сообщения в чат:

    Структуры всех пакетов находятся в файле events.lua.

    Это применимо только в событиях onSendPlayerSync, onSendVehicleSync, onSendPassengerSync, onSendAimSync, onSendUnoccupiedSync, onSendTrailerSync, onSendBulletSync, onSendSpectatorSync.
    Структуры всех пакетов синхронизации находятся в файле synchronization.lua.

    Новый тип тоже можно добавить без изменения исходников библиотеки:

    Скачать последнюю версию и следить за изменениями всегда можно на GitHub.
    Установка: скачать samp.zip из последнего релиза и целиком скопировать папку ‘samp’ (не содержимое папки!) из архива в каталог ‘moonloader/lib/’.

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

    Ну и конечно же крохотное нано-спасибо hnnssy за помощь.

    что такое lua в самп. Смотреть фото что такое lua в самп. Смотреть картинку что такое lua в самп. Картинка про что такое lua в самп. Фото что такое lua в самп

    что такое lua в самп. Смотреть фото что такое lua в самп. Смотреть картинку что такое lua в самп. Картинка про что такое lua в самп. Фото что такое lua в самп

    Teen_Spirit

    Участник
    Известный

    Баг в onMarkersSync. Удаляясь от центра мира (0, 0, 0), по координатам начинают приходить значения от 60000 и больше. Первые координаты которые приходят нормальные но все последующие невалидные. В самой игре маркеры нормально отображаются. Проверялось на разных серверах и даже на локалке, в отмеченных координатах для примера по X и Y значения больше 60000. Moonloader v.026.5-beta, версия SAMP.Lua v2.2.0

    что такое lua в самп. Смотреть фото что такое lua в самп. Смотреть картинку что такое lua в самп. Картинка про что такое lua в самп. Фото что такое lua в самп

    что такое lua в самп. Смотреть фото что такое lua в самп. Смотреть картинку что такое lua в самп. Картинка про что такое lua в самп. Фото что такое lua в самп

    Известный

    Horsi

    Новичок

    SA-MP 0.3.7
    Exception At Address: 0x6DFE77D8
    Base: 0x03DC0000

    the Registers:
    the EAX: 0x0F8D26A0 the EBX: 0x0000010A the ECX: 0x00000000 the EDX: 0x00000000
    ESI: 0x154B8EF8 EDI: 0x154B8EF8 the EBP: 0x0F8101C0 the ESP: 0x0177F098
    the EFLAGS: 0x00210202

    the Stack:
    +0000: 0xFFFFD8F0 0x6E029325 0x154B8EF8 0xFFFFD8F0
    +0010: 0x00000000 0xFFFFFFFF 0x21A24850 0x0F810D58
    0020 : 0x6E39A935 0x154B8EF8 0xFFFFD8F0 0x0000010A
    0.03 thousand: 0x21A24850 0x6E2B0957 0x6E289D70 0x0F8102CC
    0 040: 0x6E289D99 0x154B94F0 0x0F8101C0 0x00000001
    0.05 thousand: 0x6DFE280D 0x0F8101C0 0x00008002 0x0F83A150
    0060: 0x0177F234 0x0177F1B4 0x00000001 0x0F8101C0
    0 070: 0x00000005 0x1319A830 0x0177F258 0x6E004360
    +0080: 0x0F810100 0x000F5F21 0x0F8101F0 0x0F8101C0
    +0090: 0x6E007AFB 0x0F8101C0 0x0177F234 0x00000001
    + 00A0: 0xFFFFFFFF 0x0F8101F0 0x154B94D0 0x0177F174
    + 00B0: 0x0F8101F0 0x6E007D07 0x0F8101F0 0x0F8101C0
    + 00C0: 0x0F869FE8 0x154B94D0 0x0F8101F0 0x0F8101C0
    + 00D0: 0x0F89E8F4 0x0177F180 0x6E0477FF 0x0000076C
    + 00E0: 0x6E0076C0 0x0F8101C0 0x0F810370 0x0F8101C0
    + 00F0: 0x0177F234 0x0F89E8F0 0xFFFFFFFC 0x0F8101C0
    +0100: 0x6E026EAC 0x0F810D58 0x0F841440 0x0F8B0668
    0110: 0x0F8101C0 0x00000002 0x00000000 0x0F810370
    0.12 thousand: 0x0177F1D4 0x0F89E8F0 0x6DFE437F 0x00000000
    0130: 0x00000000 0x00000000 0x00000000 0x80000000
    +0140: 0x41777F6A 0x00000000 0x40580000 0x0000002E
    +0150: 0x00000000 0x3EBCDE3C 0x3F6D88A0 0xBF6DE835
    +0160: 0x3EBD0DD0 0x3C896F6A 0x3D55B409 0x00000000
    +0170: 0x40580000 0x00000000 0x40580000 0x00000001
    +0180: 0x00000001 0x0000004F 0x0F841440 0x0177F234
    +0190: 0x0F873DE8 0x0F8B0668 0x0F841440 0x0F810D58
    + 01A0: 0x6E4AFB23 0x0F8B0668 0x0F841440 0x0177F250
    + 01B0: 0x6E4B2587 0x0F89E8F0 0x0177F274 0x6DE0F543
    + 01C0: 0x0177F310 0x6E004360 0x00000000 0x0F83A130
    + 01D0: 0x0F8101F0 0x04FBED80 0x6DFE73EB 0x0F8101C0
    + 01E0: 0x00000000 0x00000000 0x00000008 0x0F8101C0
    + 01F0: 0x00000001 0x0177F340 0x6E289472 0x0F8101C0
    +0200: 0x00000002 0x00000001 0xFFFFFFFF 0x0F8101C0
    +0210: 0x0177F340 0x0177F31C 0x04FBED80 0x6E3A7C01
    +0220: 0x0177F340 0x0177F388 0x0177F388 0x00000002
    +0230: 0x0177F304 0x0177F3DC 0x01C79A54 0x04FBED80
    +0240: 0x00000000 0x00000000 0x00000000 0x00000000
    +0250: 0x00000000 0x00000000 0x00000000 0x00000000
    +0260: 0x00000000 0x0177F2A0 0x0177F398 0x04FBED88
    + 0270: 0x00000001 0x00000000 0x0177F398 0x6E402A69

    SCM Op: 0x685, lDbg: 0 LastRendObj: 19045

    Game Version: US 1.0

    что такое lua в самп. Смотреть фото что такое lua в самп. Смотреть картинку что такое lua в самп. Картинка про что такое lua в самп. Фото что такое lua в самп

    Dark_Knight

    Начинаем начинать

    SA-MP 0.3.7
    Exception At Address: 0x6DFE77D8
    Base: 0x03DC0000

    the Registers:
    the EAX: 0x0F8D26A0 the EBX: 0x0000010A the ECX: 0x00000000 the EDX: 0x00000000
    ESI: 0x154B8EF8 EDI: 0x154B8EF8 the EBP: 0x0F8101C0 the ESP: 0x0177F098
    the EFLAGS: 0x00210202

    the Stack:
    +0000: 0xFFFFD8F0 0x6E029325 0x154B8EF8 0xFFFFD8F0
    +0010: 0x00000000 0xFFFFFFFF 0x21A24850 0x0F810D58
    0020 : 0x6E39A935 0x154B8EF8 0xFFFFD8F0 0x0000010A
    0.03 thousand: 0x21A24850 0x6E2B0957 0x6E289D70 0x0F8102CC
    0 040: 0x6E289D99 0x154B94F0 0x0F8101C0 0x00000001
    0.05 thousand: 0x6DFE280D 0x0F8101C0 0x00008002 0x0F83A150
    0060: 0x0177F234 0x0177F1B4 0x00000001 0x0F8101C0
    0 070: 0x00000005 0x1319A830 0x0177F258 0x6E004360
    +0080: 0x0F810100 0x000F5F21 0x0F8101F0 0x0F8101C0
    +0090: 0x6E007AFB 0x0F8101C0 0x0177F234 0x00000001
    + 00A0: 0xFFFFFFFF 0x0F8101F0 0x154B94D0 0x0177F174
    + 00B0: 0x0F8101F0 0x6E007D07 0x0F8101F0 0x0F8101C0
    + 00C0: 0x0F869FE8 0x154B94D0 0x0F8101F0 0x0F8101C0
    + 00D0: 0x0F89E8F4 0x0177F180 0x6E0477FF 0x0000076C
    + 00E0: 0x6E0076C0 0x0F8101C0 0x0F810370 0x0F8101C0
    + 00F0: 0x0177F234 0x0F89E8F0 0xFFFFFFFC 0x0F8101C0
    +0100: 0x6E026EAC 0x0F810D58 0x0F841440 0x0F8B0668
    0110: 0x0F8101C0 0x00000002 0x00000000 0x0F810370
    0.12 thousand: 0x0177F1D4 0x0F89E8F0 0x6DFE437F 0x00000000
    0130: 0x00000000 0x00000000 0x00000000 0x80000000
    +0140: 0x41777F6A 0x00000000 0x40580000 0x0000002E
    +0150: 0x00000000 0x3EBCDE3C 0x3F6D88A0 0xBF6DE835
    +0160: 0x3EBD0DD0 0x3C896F6A 0x3D55B409 0x00000000
    +0170: 0x40580000 0x00000000 0x40580000 0x00000001
    +0180: 0x00000001 0x0000004F 0x0F841440 0x0177F234
    +0190: 0x0F873DE8 0x0F8B0668 0x0F841440 0x0F810D58
    + 01A0: 0x6E4AFB23 0x0F8B0668 0x0F841440 0x0177F250
    + 01B0: 0x6E4B2587 0x0F89E8F0 0x0177F274 0x6DE0F543
    + 01C0: 0x0177F310 0x6E004360 0x00000000 0x0F83A130
    + 01D0: 0x0F8101F0 0x04FBED80 0x6DFE73EB 0x0F8101C0
    + 01E0: 0x00000000 0x00000000 0x00000008 0x0F8101C0
    + 01F0: 0x00000001 0x0177F340 0x6E289472 0x0F8101C0
    +0200: 0x00000002 0x00000001 0xFFFFFFFF 0x0F8101C0
    +0210: 0x0177F340 0x0177F31C 0x04FBED80 0x6E3A7C01
    +0220: 0x0177F340 0x0177F388 0x0177F388 0x00000002
    +0230: 0x0177F304 0x0177F3DC 0x01C79A54 0x04FBED80
    +0240: 0x00000000 0x00000000 0x00000000 0x00000000
    +0250: 0x00000000 0x00000000 0x00000000 0x00000000
    +0260: 0x00000000 0x0177F2A0 0x0177F398 0x04FBED88
    + 0270: 0x00000001 0x00000000 0x0177F398 0x6E402A69

    SCM Op: 0x685, lDbg: 0 LastRendObj: 19045

    Game Version: US 1.0

    Источник

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *