SetElementVisibleTo: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
No edit summary
(Removed note; added info about the function)
 
(21 intermediate revisions by 14 users not shown)
Line 1: Line 1:
__NOTOC__
__NOTOC__
{{Server function}}
{{Server function}}
{{Needs_Checking|Can an element only be visible to one element (and its children) at a time? If so, do we need clearElementVisibleTo? If not, surely we need to remove the root element before using this function?|[[User:EAi|EAi]]
}}
{{Needs_Checking| I tried to make a blip visible to 1 player but it doesn't work unless I use getRootElement() [[User:Norby89|Norby89]] 10:20, 3 August 2007 (CDT)


I tried to hide a marker from 1 player but I have to make the marker especially visible to this player before (tested on DP2)
This function can change an [[element]]'s [[visibility]].
[[User:mvol|mvol]] 21:51, 20 January 2008 (CDT)


This issue is reported as issue #3158.
This function only works with the following elements.
}}
* [[Marker]]s
* [[Blip]]s
* [[Radararea]]s


Visibility settings of lower elements in the element tree override higher ones - if visibility for root is set to false and for a player is set to true, it will be visible to the player.


This function can change an [[element]]'s [[visibility]]. This does not work with all entities - [[vehicle]]s, [[player]]s and [[object]]s are exempt. This is because these objects are required for accurate sync (they're physical objects). This function is particularily useful for changing the visibility of markers, radar blips and radar areas.
If you want to clear all visibility settings of an [[element]], try [[clearElementVisibleTo]]
 
Setting visibility for one element will also set visibility for all of its children.<br/>
Order of '''setElementVisibleTo''' calls doesn't matter.


==Syntax==  
==Syntax==  
Line 18: Line 20:
bool setElementVisibleTo ( element theElement, element visibleTo, bool visible )
bool setElementVisibleTo ( element theElement, element visibleTo, bool visible )
</syntaxhighlight>  
</syntaxhighlight>  
{{OOP||[[element]]:setVisibleTo||isElementVisibleTo}}


===Required Arguments===  
===Required Arguments===  
Line 31: Line 34:
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
-- Find the player called someguy
-- Find the player called someguy
local someguy = getPlayerFromNick ( "someguy" )
local someguy = getPlayerFromName ( "someguy" )
-- If the player was found then
-- If the player was found then
if ( someguy ) then
if ( someguy ) then
Line 38: Line 41:
-- Create a marker at the player's position
-- Create a marker at the player's position
myMarker = createMarker ( x, y, z )
myMarker = createMarker ( x, y, z )
-- First off make the marker invisible to the whole dimension
setElementVisibleTo ( myMarker, getRootElement ( ), false )
-- Then make the marker invisible to the whole dimension (root for the first)
-- Then make the marker visible again, but only to someguy
setElementVisibleTo ( myMarker, root, false )
-- Set marker visibility to true for someguy
setElementVisibleTo ( myMarker, someguy, true )
setElementVisibleTo ( myMarker, someguy, true )
-- The order in which you do the visibility changes does not matter, but ideally trues should be set before falses in order to prevent a momentary flicker.
end
end
</syntaxhighlight>
</syntaxhighlight>


The following example show how to hide the marker on 'someguy' from 'anotherguy'
The following example shows how to make the marker visible to everyone except anotherguy
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
-- Find the player called someguy
-- Find the player called someguy
local someguy = getPlayerFromNick ( "someguy" )
local someguy = getPlayerFromName ( "someguy" )
local anotherguy = getPlayerFromNick ( "anotherguy" )
local anotherguy = getPlayerFromName ( "anotherguy" )
-- If the player was found then
-- If the player was found then
if ( someguy ) then
if ( someguy ) then
Line 56: Line 62:
-- Create a marker at the player's position
-- Create a marker at the player's position
myMarker = createMarker ( x, y, z )
myMarker = createMarker ( x, y, z )
-- First off make the marker visible especially to 'anotherguy'
attachElements(myMarker, someguy)
setElementVisibleTo ( myMarker, anotherguy, true )
 
-- Then hide it
-- First make sure everyone is able to see the marker, this line is unnecessary in this case as root visibility is set to true by default behaviour
setElementVisibleTo ( myMarker, root, true )
 
-- Then hide it from anotherguy
setElementVisibleTo ( myMarker, anotherguy, false )
setElementVisibleTo ( myMarker, anotherguy, false )
end
end

Latest revision as of 13:48, 25 December 2023

This function can change an element's visibility.

This function only works with the following elements.

Visibility settings of lower elements in the element tree override higher ones - if visibility for root is set to false and for a player is set to true, it will be visible to the player.

If you want to clear all visibility settings of an element, try clearElementVisibleTo

Setting visibility for one element will also set visibility for all of its children.
Order of setElementVisibleTo calls doesn't matter.

Syntax

bool setElementVisibleTo ( element theElement, element visibleTo, bool visible )

OOP Syntax Help! I don't understand this!

Method: element:setVisibleTo(...)
Counterpart: isElementVisibleTo


Required Arguments

  • theElement: The element you want to control the visibility of.
  • visibleTo: The element you wish the element to be visible or invisible to. Any child elements that are players will also be able to see the element. See visibility.
  • visible: Whether you are making it visible or invisible to the player.

Returns

Returns true if the element's visibility was changed successfully, false otherwise, for example if you are trying to change the visibility of a vehicle, player or object.

Example

This example creates a marker and makes it only visibile to the player called 'someguy'.

-- Find the player called someguy
local someguy = getPlayerFromName ( "someguy" )
-- If the player was found then
if ( someguy ) then
	-- Get the player's position into the variables x, y and z
	x, y, z = getElementPosition ( someguy )
	-- Create a marker at the player's position
	myMarker = createMarker ( x, y, z )
	
	-- Then make the marker invisible to the whole dimension (root for the first)
	setElementVisibleTo ( myMarker, root, false )
	-- Set marker visibility to true for someguy
	setElementVisibleTo ( myMarker, someguy, true )
	
	-- The order in which you do the visibility changes does not matter, but ideally trues should be set before falses in order to prevent a momentary flicker.
end

The following example shows how to make the marker visible to everyone except anotherguy

-- Find the player called someguy
local someguy = getPlayerFromName ( "someguy" )
local anotherguy = getPlayerFromName ( "anotherguy" )
-- If the player was found then
if ( someguy ) then
	-- Get the player's position into the variables x, y and z
	x, y, z = getElementPosition ( someguy )
	-- Create a marker at the player's position
	myMarker = createMarker ( x, y, z )
	attachElements(myMarker, someguy)

	-- First make sure everyone is able to see the marker, this line is unnecessary in this case as root visibility is set to true by default behaviour
	setElementVisibleTo ( myMarker, root, true )

	-- Then hide it from anotherguy
	setElementVisibleTo ( myMarker, anotherguy, false )
end

See Also