Jump to content

Вопросы и ответы по MTA.


Recommended Posts

  • 3 weeks later...

Здравствуйте. Возможно ли разрабатывать игровой сервер в MTA на Java? Есть ли какие-то готовые решения (плагины или фреймворки)? Читал, что серверную часть можно. А как быть с клиентской?

Link to comment
  • 2 weeks later...
On 8/25/2016 at 10:23 AM, SalwadoR said:

Что быстрее, юзать на сервере setElementData и на клиенте выполнять действие под onClientElementDataChange, или же triggerClientEvent?

Тоже интересует этот вопрос, плюс ещё:

Каким образом более правильно (со стороны производительности) можно отследить, находится ли игрок в автомобиле (например 402)?
Есть два варианта:
* Короткий и простой вариант. Через onClientRender постоянно проверять на 402 == getElementModel(getPedOccupiedVehicle(localPlayer)), но здесь каждый каждр будет вызываться функция проверки. Не скажется ли это на производительности?


* Либо рассмтреть все случаи (раставить события при старте ресурса, при входе/выходе из автомобиля, смерти, варпе в авто и т.д.), когда игрок будет в автобиле присутствовать/отсутствовать и от этого отталкиваться?

Edited by draobrehtom
Link to comment
1 hour ago, draobrehtom said:

Тоже интересует этот вопрос, плюс ещё:

Каким образом более правильно (со стороны производительности) можно отследить, находится ли игрок в автомобиле (например 402)?
Есть два варианта:
* Короткий и простой вариант. Через onClientRender постоянно проверять на 402 == getElementModel(getPedOccupiedVehicle(localPlayer)), но здесь каждый каждр будет вызываться функция проверки. Не скажется ли это на производительности?


* Либо рассмтреть все случаи (раставить события при старте ресурса, при входе/выходе из автомобиля, смерти, варпе в авто и т.д.), когда игрок будет в автобиле присутствовать/отсутствовать и от этого отталкиваться?

 

Второй вариант будет лучше:
onClientVehicleEnter

onClientVehicleExit

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

Edited by Kenix
Link to comment
On 25.08.2016 at 11:23 AM, SalwadoR said:

Что быстрее, юзать на сервере setElementData и на клиенте выполнять действие под onClientElementDataChange, или же triggerClientEvent?

triggerClientEvent быстрее и имеет более высокий приоритет.

Я проводил тесты, пробовал вызывать сначала triggerClientEvent, затем setElementData и наоборот, потом сравнивал кто быстрее.

-- Server

addEvent( "onPlayerReady", true );

addEventHandler( "onPlayerReady", root,
	function()
		local sValue = ( "*" ):rep( math.random( 5000000, 10000000 ) );
		
		
		setElementData( source, "Test", sValue );
		triggerClientEvent( source, "onClientPlayerRecived", source, sValue );
	end
);

-- Client

addEvent( "onClientPlayerRecived", true );

local iTick = getTickCount();

addEventHandler( "onClientResourceStart", resourceRoot,
	function()
		triggerServerEvent( "onPlayerReady", localPlayer );
	end
);

addEventHandler( "onClientPlayerRecived", root,
	function()
		outputChatBox( "Time: " .. tostring( getTickCount() - iTick ) .. "ms" );
	end
);

addEventHandler( "onClientElementDataChange", root,
	function( sData )
		if sData == "Test" then
			outputChatBox( "Time2: " .. tostring( getTickCount() - iTick ) .. "ms" );
		end
	end
);

--[[
При использовании triggerClientEvent.
Time: 6843ms

При использовании setElementData
Time2: 8626ms
]]

 

Edited by Kenix
  • Like 2
Link to comment

Kenix,
если тесты проводите между клиентом и сервером то нужно учитывать задержки и лаги в сети.

Понятие "быстрее" вообще на чём основано? Быстрее происходит вызов функции? В таком случае тест не корректен.

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

TriggerClientEvent просто посылает пакеты игрокам, которых вы указали, в то время как SetElementData регистрирует объект (для дальнейшей синхронизации) и рассылает пакеты данных всем игрокам. Понимаете разницу?

Edited by Kernell
Link to comment

 

2 hours ago, Kernell said:

Kenix,
если тесты проводите между клиентом и сервером то нужно учитывать задержки и лаги в сети.

Понятие "быстрее" вообще на чём основано? Быстрее происходит вызов функции? В таком случае тест не корректен.

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

TriggerClientEvent просто посылает пакеты игрокам, которых вы указали, в то время как SetElementData регистрирует объект (для дальнейшей синхронизации) и рассылает пакеты данных всем игрокам. Понимаете разницу?

Человек требовал ответ на вопрос, что быстрее, я и ответил. 
Тестирование проводилось на локальном сервере. Зачем мне проверять задержку в сети?

 

>> в то время как SetElementData регистрирует объект (для дальнейшей синхронизации) и рассылает пакеты данных всем игрокам. 
Во первых setElementData сначала смотрит, изменилась ли элемент дата (если она не изменилась то и синхронизации не будет), потом уже идет регистрация объекта и синхронизация для каждого клиента.

Докапываться до человека не очень культурно, на заметку.

Edited by Kenix
Link to comment
  • 4 weeks later...

А что если в качестве пути файла лога указать путь в папку какого-либо ресурса? Теоретически тогда из этого ресурса можно будет чистить лог.

Link to comment

@K1parik , можно вообще чем угодно сторонним менять, если вопрос в слишком частых обращениях к диску, можно поднять рамдиск или сразу куда-нибудь скидывать по ftp или webdav, можно убрать в конфиге путь к файлу лога или запретить обращение к этому файлу дабы отключить лог вообще. Вопрос лишь в том, что возможно сделать и почему это нужно.

Link to comment
19 hours ago, fabervox said:

@K1parik , можно вообще чем угодно сторонним менять, если вопрос в слишком частых обращениях к диску, можно поднять рамдиск или сразу куда-нибудь скидывать по ftp или webdav, можно убрать в конфиге путь к файлу лога или запретить обращение к этому файлу дабы отключить лог вообще. Вопрос лишь в том, что возможно сделать и почему это нужно.

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

Edited by K1parik
Link to comment
  • Other Languages Moderators
23 minutes ago, K1parik said:

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

cron

  • Like 1
Link to comment

@K1parik , ну если нужно максимально просто, то можно как указал @LoveFist , закинуть в ресурс и там уже делать че угодно посредством ресурса, в т.ч. шифрование,архвивацию,выборки,отсылку в облако, ну вмеру своих умений, точно также можно отдать это вебсерверу, если он под рукой, или любой другой программе в которой это удобней сделать. Чистить историю на работающем сервере, не совсем корректно, т.к. в дальнейшем она может пригодится, а взять будет неоткуда.

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

А вот если удалять каждую неделю, то столкнешься с тем что будешь иметь возможность посмотреть лог за период времени от 1с до 1недели-1с, пропорционально тому сколько времени прошло от удаления. Поэтому нужно обрезать, а не удалять. Ну это и вовсе просто, открыл файл, прочитал, узнал размер, обрезал до соответствующего, записал.

Link to comment
  • Other Languages Moderators
1 hour ago, fabervox said:

@K1parik
@LoveFist

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

Что за бред?

Раз в неделю вырезаем текущий лог, архивируем, кладем в папку с бекапами логов. Всё. Все так делают.

Link to comment

@Disinterpreter , если бы он знал как все делают, то и сделал бы это без вопросов. Если возникли вопросы, тогда неизвестно что именно остается под вопросом, а что будет понято с полуслова.

Краткость конечно сестра талланта. Но если делать каждую неделю, то в итоге обязательно будет отрезок лога размером от одной точки бекапа и до текущего времени. Плюс возможно ещё одна неделя целиком, но тогда будет достигать двухнедельного размера и может-быть ему это неудобно тоже будет. Впрочем другого варианта для выполнения операции раз в неделю и нет, поэтому конечно будет размер лога от 1 до 2 недель. От варианта лог не более 1 недели, я предостерегал, а не предлагал его. И последнее предложение написано, что-бы указать на то какие конкретно функции нужны для минимального варианта.

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

Читабельность же желательно обеспечивать без лишней загрузки основных средств. Ну а если обо всём этом, человек сам вообще не догадывался даже, то указание на cron ему поможет только в том случае, если у него есть необходимый и понятный ему инструментарий, как для самого крон, так и для поставленных задач. В случае с win или игрохостами, и вовсе крон не уместен. Поэтому планировщик можно использовать какой есть, сама mta есть всегда.

Link to comment
  • Other Languages Moderators

 

@fabervox

 

disinterpreter@host:/backup$ ls


10-10-2016-mysql.tar.gz  4-10-2016-mysql.tar.gz  7-10-2016-mysql.tar.gz
2-10-2016-mysql.tar.gz   5-10-2016-mysql.tar.gz  8-10-2016-mysql.tar.gz
3-10-2016-mysql.tar.gz   6-10-2016-mysql.tar.gz  9-10-2016-mysql.tar.gz

 


host:/var/log/nginx# ls
access.log        access.log.3.gz  error.log.1      error.log.4.gz
access.log.1      access.log.4.gz  error.log.10.gz  error.log.5.gz
access.log.10.gz  access.log.5.gz  error.log.11.gz  error.log.6.gz
access.log.11.gz  access.log.6.gz  error.log.12.gz  error.log.7.gz
access.log.12.gz  access.log.7.gz  error.log.13.gz  error.log.8.gz
access.log.13.gz  access.log.8.gz  error.log.14.gz  error.log.9.gz
access.log.14.gz  access.log.9.gz  error.log.2.gz   nginx.vhost.access.log
access.log.2.gz   error.log        error.log.3.gz   nginx.vhost.error.log

Edited by Disinterpreter
Link to comment
  • Other Languages Moderators
7 hours ago, Kashamir said:

Это раздел предназначен кому ?  http://www.picshare.ru/view/7706484/ 

Я так понял это для тех кто хочет помочь разработчикам МТА, а не тем кто просто хочет сервер делать свой, или я ошибаюсь ? 

Верно, это для помощи разработчикам МТА последние эксперементальные версии вы можете найти тут: https://nightly.multitheftauto.com/

Компилировать вам их совершенно не обязательно.

Edited by Disinterpreter
  • Like 1
Link to comment

[1] в acl.xml файле много разных команд, а где эти команды находятся ? 

Они встроены в мта, их можно изменить/редактировать хочу на русский перевести их, это возможно ?

 

[2] Так же проверьте пожалуйста правильно ли я понимаю какие группы для чего предназначены: 

По возможности поправьте где я ошибся тут:


 

<group name="Everyone"> -- это я понимаю для простых игроков ?

<group name="Moderator"> -- понятно, 

<group name="SuperModerator"> -- думаю тут больше прав чем у простого модератора

<group name="Admin"> -- тоже ясно 

<group name="Console"> -- типа как rcon пользователь ? 

<group name="RPC"> -- права для ботов ?

 

[3]  для чего служат эти группы, объясните пожалуйста:

 

<group name="MapEditor"> 

<group name="raceACLGroup">

<group name="DevGroup">

<group name="autoGroup_acpanel">

<group name="autoGroup_guieditor">


       

Link to comment
  • Other Languages Moderators
9 hours ago, Kashamir said:

[1] в acl.xml файле много разных команд, а где эти команды находятся ? 

Они встроены в мта, их можно изменить/редактировать хочу на русский перевести их, это возможно ?

 

[2] Так же проверьте пожалуйста правильно ли я понимаю какие группы для чего предназначены: 

По возможности поправьте где я ошибся тут:


 


<group name="Everyone"> -- это я понимаю для простых игроков ?

<group name="Moderator"> -- понятно, 

<group name="SuperModerator"> -- думаю тут больше прав чем у простого модератора

<group name="Admin"> -- тоже ясно 

<group name="Console"> -- типа как rcon пользователь ? 

<group name="RPC"> -- права для ботов ?

 

[3]  для чего служат эти группы, объясните пожалуйста:

 


<group name="MapEditor"> 

<group name="raceACLGroup">

<group name="DevGroup">

<group name="autoGroup_acpanel">

<group name="autoGroup_guieditor">


       

 

Многие из этих групп (типа RPC) принадлежат различным встроенным ресурсам. Вам достаточно только Everyone, Admin, Console.

  • Like 1
Link to comment

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...