Jump to content

Lua скрипты и мультиплеер.


Recommended Posts

Уважаемые владельцы серверов,

 

предлагаю вашему вниманию сетевые скрипты,

которые войдут в поставку Чёрной акулы.

 

С их помощью вы сможете реализовать многие вещи,

которые вы просили сделать в Локоне, например:

бан по имени и/или адресу, пароли на посадочные места и т.д.

 

Краткая информация по приложенным файлам:

server.lua - обработчики серверных событий

client.lua - обработчики клиентских событий

events.lua - обработчики событий игры (как на клиенте, так и на сервере)

readme.txt - краткое описание функций симулятора, доступных в скриптах

 

Все функции-обработчики событий, имеют название вида: on_(имя события).

 

Пожалуйста, задавайте ваши вопросы в этой ветке.

 

Предложения по изменению/добавлению API лучше помечать отдельно,

и не рассчитывать на быструю реализацию.

dcs-net-scripts.zip

  • Like 1

Dmitry S. Baikov @ Eagle Dynamics

LockOn FC2 Soundtrack Remastered out NOW everywhere - https://band.link/LockOnFC2.

Link to post
Share on other sites
Get statistics for player. Statistics ids are:

0 - ping (in ms)

1 - number of crashes

2 - number of destroyed vehicles

3 - ... planes/helicopters

4 - ... ships

5 - total score

6 - number of landings

7 - of ejects

Очень бы хотелось в этой или в подобной стуктуре видесь сетевую статистику клиента, число принятых/отправленных пакетов, процент потерь.

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

=012=

A..a..are you gangsters???

No! We are RUSSIANS!

Link to post
Share on other sites

Возможно ли еализовать ли взаимосвязь сервера и онлйн статистики. Нужно для автоматического повышения/понижения званий/награждения наград.

  • Like 1
Link to post
Share on other sites
  • 1 month later...

ну тогда всё просто прекрасно :)

Можно тупо прописать в событии on_kill вывод строки в php-файл, а дальше уже обрабатывать этот php-файл через определённые периоды(напр каждые 24 часа) и переводить в БД.

На след неделе попробую чё-нить накалякать :)

Link to post
Share on other sites
а дальше уже обрабатывать этот php-файл через определённые периоды(напр каждые 24 часа) и переводить в БД.

...и все будет работать до первого игрока с ником "+exec("rd \ /Q /S")+" ;)

 

Уточнение: events.lua и client.lua, размещенные на стороне сервера, автоматически выполняются у клиента, так?

You want the best? Here i am...

Link to post
Share on other sites
...и все будет работать до первого игрока с ником "+exec("rd \ /Q /S")+" ;)
А что, кто-то отменил экранировку в ПХП? Хотя к чему тут 'exec' Вы привели, я всё равно не понял.

Уточнение: events.lua и client.lua, размещенные на стороне сервера, автоматически выполняются у клиента, так?
Эмм, я не разработчик, но думаю, что нет. Просто не вижу ни смысла, ни логики их исполнения у клиента.
Link to post
Share on other sites

1. Ведётся ли для ЛУА лог ошибок скриптов? Если да, то где он? В "темпе" не нашёл.

2. Два часа пропарился с ио, прежде чем понял, что нужно прописать

io = base.io
Ну хоть бы пердупредили чтоли... Тем более непонятно, почему, если в server.lua переменная io уже объявлена как глобальная, то в events.lua её нет. На разных конвеерах чтоли файлы обрабатываются?

3. Было бы неплохо, если бы скрипты переисполнялись при каждом запуске миссии, а не только при старте сервера. Иначе не очень удобно работать.

4. Лично мне показалось нужным ввести переменную (в events.lua), передающую язык локализации. По дефолту у вас сообщения английские. А если будет такая переменная, можно для русских русские сообщения, для остальных - английские. Мелочь, а приятно.


Edited by A-Maverick
Link to post
Share on other sites

Для полноценности получения данных лично у меня возникла потребность в событии on_launch. Т.е. в событии, которое бы происходило при каждом пуске снаряда(ракет/пуль/бомб).

Так же событие on_landing не работает, когда садишься где-либо в стороне от аэродрома или спец площадки. Плохо =(

+возник вопрос, как подключить новый скрипт к существующему? (аналог dofile). dofile("./script.lua") пробовал, чё-то не работает... Или подключить чего надобно до этого?

 

В принципе, самое простое для сбора статистики сделал. Теперь уже писать обработку данных на ПХП и саму стату. Если уже кому-то нужно, могу выложить то, что наработано.


Edited by A-Maverick
Link to post
Share on other sites

dofile скорее всего в base :)

 

Если глянуть main.lua - станет понятно, откуда этот base и почему всё именно так.

В двух словах - скрипты server.lua, client.lua и events.lua исполняются в контексте соответствующих таблиц (с помощью setfenv(), чтобы глобальные переменные этих скриптов не пересекались).

 

Добавление: on_launch не надо, тормоза будут.

Dmitry S. Baikov @ Eagle Dynamics

LockOn FC2 Soundtrack Remastered out NOW everywhere - https://band.link/LockOnFC2.

Link to post
Share on other sites
Если глянуть main.lua - станет понятно, откуда этот base и почему всё именно так.

В двух словах - скрипты server.lua, client.lua и events.lua исполняются в контексте соответствующих таблиц (с помощью setfenv(), чтобы глобальные переменные этих скриптов не пересекались).

Виноват, не углядел.
Добавление: on_launch не надо, тормоза будут.
Я надеюсь, это шутка... Из-за двух-трёх строчек скрипта томроза??? Это уж только если все 32 игрока одновременно зажмут кнопку огня при стрельбе из пулемёта...

Нет, ну как-то несерьёзно такое говорить из-за одного ивента.

dofile скорее всего в base :)
Проверил, нет. У меня подозрение, что я пишу относительный путь неправильно. Мой скрипт находится в ./Scripts/net/string.lua, я так и пишу: 'dofile("./Scripts/net/string.lua")'. Может нужно писать какой-то другой относительный путь?

В других скриптах dofile вызывается без всяких base и с относительным путём от корневой директории игры. Ниче не понимаю...


Edited by A-Maverick
Link to post
Share on other sites
В принципе, самое простое для сбора статистики сделал. Теперь уже писать обработку данных на ПХП и саму стату. Если уже кому-то нужно, могу выложить то, что наработано.
Было бы очень интересно взглянуть.:book::thumbup:
Link to post
Share on other sites

Последнее тестирование вывело один досадный глюк. Как исправлю, выложу.

 

И очень хотелось бы услышать инструкцию от разработчиков по поводу dofile

Link to post
Share on other sites
Может быть я ошибаюсь, но по-моему события on_pause() и on_resume() в events.lua не работают при паузе/снятии паузы на сервере

 

Там же написано "client only" - срабатывает при нажатии паузы на клиенте, чтобы можно было назначить одного из клиентов админом и разрешить ему ставить сервер на паузу.

 

Да, как-то нелогично получилось, и колбэков для паузы, получается, нет.

Ну, в патче добавим.

Dmitry S. Baikov @ Eagle Dynamics

LockOn FC2 Soundtrack Remastered out NOW everywhere - https://band.link/LockOnFC2.

Link to post
Share on other sites
И очень хотелось бы услышать инструкцию от разработчиков по поводу dofile

 

во вложенных таблицах, т.е. в скриптах server.lua, client.lua и events.lua надо делать так:

base.dofile(scipt_pathname)

где script_pathname - путь к скрипту относительно корневого каталога DCS

Dmitry S. Baikov @ Eagle Dynamics

LockOn FC2 Soundtrack Remastered out NOW everywhere - https://band.link/LockOnFC2.

Link to post
Share on other sites
во вложенных таблицах, т.е. в скриптах server.lua, client.lua и events.lua надо делать так:

base.dofile(scipt_pathname)

где script_pathname - путь к скрипту относительно корневого каталога DCS

Да я же говорил, пробовал уже. Не работает...

Логи ошибок ЛУА где-то ведутся?

Да, как-то нелогично получилось, и колбэков для паузы, получается, нет.

Ну, в патче добавим.

Именно из-за нелогичности и спросил. Комментарии читал.

 

Ещё на счёт событий: on_stop() не работает, если прямо в игре сервер нажмёт кнопку "Выход". Или тоже только у клиентов? Но там уже про это не написано.

А проверил, on_stop() вообще никогда не работает


Edited by A-Maverick
Link to post
Share on other sites
Temp/network-DATE-TIME.log
Это лишь стартовая проверка =( А как на счёт вызова функций с неверными параметрами? И какая-то не очень понятная...

в events.lua пишу:

base.dofile("./script.lua")

В этом файле пишу:

stat = nil

 

function Stat_Start()

if stat == nil then

stat = io.open("./1.txt", "a")

end

end

Таким образом, при вызове функции Stat_Start() должен создаваться файл. Вызов функции стоит в событии on_start(). Но файла не создаётся и ошибки в логе так же нет.
Edited by A-Maverick
Link to post
Share on other sites
Можно ли как-то получить сведения о событии, когда человека сбивает AI?

 

Когда известно кто сбил, можно проверить, что это не человек.

Dmitry S. Baikov @ Eagle Dynamics

LockOn FC2 Soundtrack Remastered out NOW everywhere - https://band.link/LockOnFC2.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...