Jump to content

Общий мини "HELP ME" топик по скриптингу


Recommended Posts

Проблема такая, после создания транспорта, если играть в несколько тел, видно, что он не синхронизируется с клиентом, на некотором расстоянии машина другого игрока начинает ехать не плавно, а рывками ( как бы телепортируясь ), создавал простым createVehicle и делал варп игрока, всё это на серверной стороне, как решить эту проблему?

Link to comment
  • 5 weeks later...

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

Link to comment

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

water.lua

function thaResourceStarting( )
    water = createWater ( -1728, -592, 0.6, -1457, -592, 0.6, -1457, -432, 0.6, -1728, -222, 0.6 )
    bool = setWaterLevel ( 20, water )
end
addEventHandler("onClientResourceStart", getResourceRootElement(getThisResource()), thaResourceStarting)

meta

<meta> 
     <script src="water.lua" type="client" /> 
</meta>

сами 4 позиции

  1.        -1728, -592, 0.6
  2.       -1457, -592, 0.6
  3.       -1457, -432, 0.6
  4.       -1728, -222, 0.6

Ребят,правда незнаю шо делать,подскажите,только на вики не над отправлять,я оттуда и пытался понять,ничего не выходит.Может я подключаю не так?

Link to comment

Подскажите, есть какие нибудь простые варианты найти ближайшего игрока? А то мой вариант при котором нужно каждый раз создавать таблицу, сортировать ее, кажется не самым удобным.

Link to comment
2 hours ago, K1parik said:

Подскажите, есть какие нибудь простые варианты найти ближайшего игрока? А то мой вариант при котором нужно каждый раз создавать таблицу, сортировать ее, кажется не самым удобным.

Примерно вот так:

function GetNearbyPlayer(element)
	local distance = 9999.9;
	local position = {getElementPosition(element)};
	local nearby_player = nullptr;

	for k, v in pairs(getElementsByType("player")) do
		local pos = {getElementPosition(v)};

		local dist = getDistanceBetweenPoints3D(pos[1], pos[2], pos[3], position[1], position[2], position[3]);

		if dist < distance then
			distance = dist;
			nearby_player = player; 
		end
	end

	return nearby_player;
end

P.S. Код проверяй, могут быть ошибки, ибо синтаксис Lua и функции МТА уже подзабыл.

Edited by Kernell
  • Like 1
Link to comment

@4estPower, у меня на клиенте сработал ваш код, быть может ACL проверить стоит( HasObjectPermissionTo ), ну и делать участки поменьше наверно, а то берега глючат. Клиент 1.5.2 r9928

@angryfatboy, первое это пинги игроков и настройки mtaserver.conf, это влияет вообще на дерганье, второе переборка всех подключенных ресурсов, тут поможет указанный сразу performancebrowser и дебагскрипт, т.е. сначала стоит отключать самые тяжелые ресурсы и те которые выдают много ошибок.

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

Link to comment

У меня есть серверная функция и любой клиент через событие может ее вызвать. Внутри нее создается локальная таблица и заполняется, далее она пересылается в другой ресурс, там она добавляется в список таблиц. Вопрос: Созданная таблица будет уникальной для каждого вызова серверной функции? Так как все таблицы передаются по ссылке, как бы не вышло так, что кто-то изменит эту таблицу при следующем вызове функции из-за чего в другом ресурсе таблица также изменится.

Link to comment
28 minutes ago, RaccoonAttack said:

У меня есть серверная функция и любой клиент через событие может ее вызвать. Внутри нее создается локальная таблица и заполняется, далее она пересылается в другой ресурс, там она добавляется в список таблиц. Вопрос: Созданная таблица будет уникальной для каждого вызова серверной функции? Так как все таблицы передаются по ссылке, как бы не вышло так, что кто-то изменит эту таблицу при следующем вызове функции из-за чего в другом ресурсе таблица также изменится.

Перефразирую вопрос на более глобальный: при передаче таблиц в другие ресурсы или через триггеры серверных/клиентских событий создается копия таблицы?

Link to comment
6 minutes ago, RaccoonAttack said:

Перефразирую вопрос на более глобальный: при передаче таблиц в другие ресурсы или через триггеры серверных/клиентских событий создается копия таблицы?

Да. Ссылок быть не может, потому что каждый ресурс работает под своей виртуальной машиной Lua.

Edited by Kernell
Link to comment
8 minutes ago, Kernell said:

Да. Ссылок быть не может, потому что каждый ресурс работает под своей виртуальной машиной Lua.

Как я и думал. Спасибо. Надеюсь, копирование там нормально реализовано.

И еще вопросик: Кто-нибудь собирается исправлять driveby на мотоцикле? Там стреляющий пассажир неуязвим. Заглядывал в исходники мта, но примерного места возникновения данного бага так и не нашел.

Edited by RaccoonAttack
Link to comment
  • Other Languages Moderators
3 hours ago, RaccoonAttack said:

Как я и думал. Спасибо. Надеюсь, копирование там нормально реализовано.

И еще вопросик: Кто-нибудь собирается исправлять driveby на мотоцикле? Там стреляющий пассажир неуязвим. Заглядывал в исходники мта, но примерного места возникновения данного бага так и не нашел.

Сделай запрос в багтрекер

Link to comment
  • 4 weeks later...

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

Пока что я делаю так:

1) Создаю ресурс с нужными мне функциями и прописываю их экспорт в meta.xml

2) В ресурсах, где мне нужно вызывать эти функции я создаю отдельный скрипт и прописываю в нём вызов этих функций таким образом:

 

function getVehicleSpecialName(data)
	local vehUtilsResource = getResourceFromName("vehicleutils")
	if not(vehUtilsResource and getResourceState(vehUtilsResource) == "running") then error('cant get data from "vehicleutils" resource', 2) end
	return exports.vehicleutils:getVehicleSpecialName(data)
end

function getPositionFromOffsets(m, offX, offY, offZ, offRX, offRY, offRZ)
	local utilsResource = getResourceFromName("utils")
	if not(utilsResource and getResourceState(utilsResource) == "running") then error('cant get data from "utils" resource', 2) end
	return exports.utils:getPositionFromOffsets(m, offX, offY, offZ, offRX, offRY, offRZ)
end

Я думаю, что это не совсем правильно. Возможно нужно создавать модули? Может есть какой тутор?

Edited by Jonathan.P
Link to comment

@Jonathan.P, если речь идет о модулях mta, то нет, эти модули предназначены для тех задач которые не решаются из lua. Если же имеются ввиду модули lua, что более вероятно, немогу сказать насколько это полноценно работает в мта, если нормально то информация общая по всему lua, наверно детально почитать получится только на английском. В любом случае реализовать прямые включения неочень сложно, в т.ч. и в виде сборщика.

Если же держать в отдельном ресурсе, то нужно помнить что каждый ресурс работает в отдельной вм, и это по сути единственное что полноценно позволяет использовать многопоточность.

Link to comment
20 minutes ago, fabervox said:

Если же держать в отдельном ресурсе, то нужно помнить что каждый ресурс работает в отдельной вм, и это по сути единственное что полноценно позволяет использовать многопоточность.

Какую многопоточность? Все ресурсы (VM-ки) работают в одном потоке.

Link to comment

@Jonathan.P, а что на счет файла utils.lua и type="shared"? Как по мне - самый адекватный вариант подключения необходимых функций для работы, это во-первых. Во-вторых, ты серьезно хочешь сказать, что ты используешь хотя бы 20-25% своего "набора некоторых функций" в каждом ресурсе? Не думаю. Используй необходимые тебе функции для работы конкретного ресурса, зачем что-то усложнять?

Edited by N1kS
Link to comment
12 hours ago, N1kS said:

а что на счет файла utils.lua и type="shared"? Как по мне - самый адекватный вариант подключения необходимых функций для работы, это во-первых.

Я так и делаю. В ресурсе создаю utils.lua и там прописываю экспортированные функции(но только те, которые нужны в данном ресе).

12 hours ago, N1kS said:

Во-вторых, ты серьезно хочешь сказать, что ты используешь хотя бы 20-25% своего "набора некоторых функций" в каждом ресурсе? Не думаю. Используй необходимые тебе функции для работы конкретного ресурса, зачем что-то усложнять?

Не совсем понял тебя. Ты предлагаешь отказаться от импорта функций и прописывать их в каждом ресе, где это нужно?

Ну например есть у меня функция

getPositionFromOffsets(m, offX, offY, offZ, offRX, offRY, offRZ)

Которую я юзаю ну очень часто, во многих ресурсах. Ты мне предлагаешь прописывать её в каждом ресе? А если я решу изменить эту функцию? Мне придётся её изменять везде. Зачем дублировать код?

 

 

Вообще вопрос был в следующем: правильно ли я импортирую функции? Просто мне не хочется постоянно писать

exports.utils:getPositionFromOffsets(m, offX, offY, offZ, offRX, offRY, offRZ)

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

Link to comment

Нужна помощь с mta php sdk. при попытке подключения всегда возвращает ошибку "Could not connect хост:порт". логин и пароль учетки с админ правами правильный, ип и хттп порт тоже. в чем может быть причина? на это может влиять то, что сервер и сайт расположены на разных хостингах?

Link to comment
2 hours ago, K1parik said:

Нужна помощь с mta php sdk. при попытке подключения всегда возвращает ошибку "Could not connect хост:порт". логин и пароль учетки с админ правами правильный, ип и хттп порт тоже. в чем может быть причина? на это может влиять то, что сервер и сайт расположены на разных хостингах?

На сервере МТА выполнить команду openports, она протестирует порты

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