Lua [RakSamp/RakBot] OnFoot/InCar Route Recording System [Remake]

wait(-1)

недокалик
19
18
OnFoot/InCar Route Recording System v1.3
source author: @Shamanije


Многоуважаемый @Shamanije зародил и воплотил отличную идею.

Я, заинтересовавшись этим, горел желанием доработать скрипт, но навыков как таковых не имел.
Видел какие поправки хотел внести @Shamanije, и начал обучаться скриптингу на Lua,
Наращивая свои мозги уроками с ютуба (@chapo) и туториалами с интернета я так же наращивал и лепил в хороший код
свои корявые строчки.

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

Записал видео:

Итог:
1.Запись каждого пакета сразу в файл.
2.Совместимость со всеми версиями SAMP.
3.Скрипту стало легче работать, нет зависаний, за прогресс записи бояться не стоит.
1.Приходится создавать файл в ручную.
2.Код имеет отвратительный вид, и возможно лишние строчки.
3.Код вероятно можно оптимизировать.
4.При первой записи в файл записывается пару пустых пакетов, изза чего вашего бота может кикнуть в начале проигрывания,
для этого можете записать пару секунд в в /recd default
1.Пакеты записываются сразу в файл, а не в память.
2.Не должно быть границ количества пакетов.
3.После вылета игры все что успело сохраниться останется.
4.Нет фриза после окончания записи.
/create "название" - создать файл для записи
/recd "название" - записать в файл
!play "название" - проиграть записанный маршрут
!loop - зациклить маршрут
!stop - остановить произведения маршрута
1.Route Recorder переместить в Moonloader вашей сборки.
2.Переместить Route Player в папку scripts РакСампа/РакБота.
3.Создать папку "routes" в коревой папке РакСампа/РакБота (в том месте где лежит exe).
4.Зайти в игру, выполнить пункт 4 из "Минусов".
5.Использовать команду /create "название файла"(без "").
6.Использовать /recd "название файла который создали в 5 пункте"(без "").
7.Что бы закончить запись продублируйте команду 6 пункта.
8.Переместите файл из ("ваша сборка"\moonloader\rakbotRoutes\"название вашего файла".rt) в папку routes (3 пункт)
9.Проиграйте маршрут РакСампа/РакБота при помощи !play "название файла"(без "" и без .rt).
1.Синхронизация движений персонажа.
2.Синхронизация движений автомобиля/мотоцикла.
Что хотелось бы внести:
1.Продолжение записи в уже записанный файл(проблема в том, что нумерация пакетов начинается заново).
2.Синхра гана, пуль, трейлера.

Исходники/идеи всех файлов принадлежат: @Shamanije

Есть версия под RakSamp

CHANGELOG:
v1.3 - Релиз (14.04.2024).
v1.31 - Визуальные поправки как в коде так и в работе (15.04.2024).
**Убедительная просьба указывать разработчиков скрипта после внедрения в вашего бота**
RouteRecorder - SAMP moonloader | RoutePlayer - RakSamp/RakBot
ку. какой максимальный обьем пакетов?
 

corner xyz

Участник
Автор темы
94
36
ку. какой максимальный обьем пакетов?
Сейчас проверю) по идее не ограниченное кол-во.

ку. какой максимальный обьем пакетов?
10к уже записал, 3.7мб занимает
Тестировал на пк с 2х ядерным селероном, падений нет, и быть не должно.
 
Последнее редактирование:
  • Влюблен
Реакции: radiation12 и wait(-1)

wait(-1)

недокалик
19
18
добавь опкод на проверку если маршрут окончен или чето типо того, что бы не колхозить на wait
оч не хватает
 

corner xyz

Участник
Автор темы
94
36
добавь опкод на проверку если маршрут окончен или чето типо того, что бы не колхозить на wait
оч не хватает
Всмысле опкод? Тут нормальная проверка:
Lua:
if counter == #packet then
    if not loop then
        rep = false
            setBotPosition(packet[counter].x, packet[counter].y, packet[counter].z)
            setBotQuaternion(packet[counter].qw, packet[counter].qx, packet[counter].qy, packet[counter].qz)
            print('route end. stoping!')
            packet = {}
        end
    counter = 1
end
 

wait(-1)

недокалик
19
18
Всмысле опкод? Тут нормальная проверка:
Lua:
if counter == #packet then
    if not loop then
        rep = false
            setBotPosition(packet[counter].x, packet[counter].y, packet[counter].z)
            setBotQuaternion(packet[counter].qw, packet[counter].qx, packet[counter].qy, packet[counter].qz)
            print('route end. stoping!')
            packet = {}
        end
    counter = 1
end
я конечно долбаеб, но не мог бы ты обьяснить как сделать так, что бы после выполнения маршрута например он переходил на другую функу
 

corner xyz

Участник
Автор темы
94
36
я конечно долбаеб, но не мог бы ты обьяснить как сделать так, что бы после выполнения маршрута например он переходил на другую функу
Я и сам не профи.
Сюда добавлять ничего не обязательно, пиши своего ботика в отдельном скрипте, и через свой скрипт воспроизводи маршрут при помощи: runCommand('!play NAME')
 
  • Ха-ха
Реакции: wait(-1)

jason statham

Новичок
2
0
1713928349175.png

трай воспроизвести маршрут с авто, пешком норм работает
 

штукатур

Участник
118
13

разносит ноо чет слабовато
 

Вложения

  • dva.rar
    133.6 KB · Просмотры: 11
Последнее редактирование:
  • Влюблен
Реакции: corner xyz

штукатур

Участник
118
13
Так потому что у механиков зз. В зз (именно у механиков) убирается коллизия. Тоесть, машина становится просто прозрачной
херня какая-то. я сам рваню если вручную, то разлетаются все без исключений, ебашит очень жестко. Однако если рванить будет бот, то он никому вреда не наносит

С нажатиями на cef интерфейсы могу помочь, на радмире делал хук через wireshark и успешно отправлял, тг @llikoba
а с обычными диалогами? Если я во время записи открою и нажму что то в обычном диалоге, бот будет потом делать то же самое когда я буду проигрывать запись?