Jump to content

[Вопрос] Маркер или пикап с проверкой на ACL группу


Recommended Posts

Привет!

 

Как можно создать видимые маркер или пикап для игроков в определенной acl группе? Притом, если игроки не состоят в опред. группе - они их не видят и не могкт ими пользоваться.

Link to comment
  • Scripting Moderators

Привет @awilson. Для таких целей логично использовать маркеры и функцию setElementVisibleTo, т.к. можно сразу же задать видимость для конкретных игроков. С пикапами так просто не выйдет и придется создавать их на клиенте для каждого нужного игрока, используя triggerClientEvent на сервере для вызова события, созданного на клиенте.

Примерно так я бы реализовал вариант с маркерами:

local marker = createMarker ( 0, 0, 2, "cylinder" )
setElementVisibleTo ( marker, root, false ) -- скрываем маркер для всех

-- при входе в маркер:
addEventHandler ( "onMarkerHit", marker,
	function ( hitElement, matchingDimension )
		if getElementType ( hitElement ) == "player" then -- если подобрал маркер игрок
			if isElementVisibleTo ( source, hitElement ) then -- если маркер виден для игрока
				outputChatBox ( "Есть доступ.", hitElement ) -- вывод текста для теста
			end
		end
	end
)

-- при логине игрока:
addEventHandler ( "onPlayerLogin", root,
	function ( _, account )
		local object = "user." .. getAccountName ( account ) -- объект аккаунта
		for _, group in pairs ( { "Admin", "SuperModerator", "Moderator" } ) do -- список групп, для которых есть доступ к маркеру
			if isObjectInACLGroup ( object, aclGetGroup ( group ) ) then -- проверка, если игрок в одной из групп, которые указаны выше
				setElementVisibleTo ( marker, source, true ) -- отображаем маркер для игрока
				return
			end
		end
	end
)

 

Link to comment
  • 2 weeks later...
On 05/12/2019 at 03:30, Sarrum said:

Привет @awilson. Для таких целей логично использовать маркеры и функцию setElementVisibleTo, т.к. можно сразу же задать видимость для конкретных игроков. С пикапами так просто не выйдет и придется создавать их на клиенте для каждого нужного игрока, используя triggerClientEvent на сервере для вызова события, созданного на клиенте.

Примерно так я бы реализовал вариант с маркерами:


local marker = createMarker ( 0, 0, 2, "cylinder" )
setElementVisibleTo ( marker, root, false ) -- скрываем маркер для всех

-- при входе в маркер:
addEventHandler ( "onMarkerHit", marker,
	function ( hitElement, matchingDimension )
		if getElementType ( hitElement ) == "player" then -- если подобрал маркер игрок
			if isElementVisibleTo ( source, hitElement ) then -- если маркер виден для игрока
				outputChatBox ( "Есть доступ.", hitElement ) -- вывод текста для теста
			end
		end
	end
)

-- при логине игрока:
addEventHandler ( "onPlayerLogin", root,
	function ( _, account )
		local object = "user." .. getAccountName ( account ) -- объект аккаунта
		for _, group in pairs ( { "Admin", "SuperModerator", "Moderator" } ) do -- список групп, для которых есть доступ к маркеру
			if isObjectInACLGroup ( object, aclGetGroup ( group ) ) then -- проверка, если игрок в одной из групп, которые указаны выше
				setElementVisibleTo ( marker, source, true ) -- отображаем маркер для игрока
				return
			end
		end
	end
)

 

Большое спасибо :-)

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