SetElementPosition: Difference between revisions
		
		
		
		
		
		Jump to navigation
		Jump to search
		
				
		
		
	
No edit summary  | 
				|||
| Line 1: | Line 1: | ||
__NOTOC__    | __NOTOC__  | ||
This function sets the position of an element to the   | {{Server client function}}  | ||
This function sets the position of an element to the specified coordinates.  | |||
==Syntax==    | ==Syntax==    | ||
| Line 9: | Line 10: | ||
===Required Arguments===    | ===Required Arguments===    | ||
*'''theElement:''' A valid [[element]] to be moved.  | *'''theElement:''' A valid [[element]] to be moved.  | ||
*'''x:''' The x   | *'''x:''' The x coordinate of the destination.  | ||
*'''y:''' The y   | *'''y:''' The y coordinate of the destination.  | ||
*'''z:''' The z   | *'''z:''' The z coordinate of the destination.  | ||
===Returns===  | ===Returns===  | ||
| Line 17: | Line 18: | ||
==Example==    | ==Example==    | ||
This example enables a player to type /warpto <playername> to warp to them  | This example enables a player to type /warpto <playername> to warp to them. If the player being warped to is in a vehicle with a free passenger seat, it will warp into the vehicle.  | ||
<syntaxhighlight lang="lua">  | <syntaxhighlight lang="lua">  | ||
function consoleWarpTo (   | function consoleWarpTo ( sourcePlayer, commandName, player2nick )  | ||
	if (   | 	-- Make sure required parameters are set  | ||
	if ( not sourcePlayer or not player2nick ) then return end  | |||
	-- Setup the variables we will be using for teleportation  | |||
	local x, y, z, r, d = 0, 0, 0, 0, 2.5  | |||
	-- Grab the element identifier of the player we are trying to warp to  | |||
	local player2 = getPlayerFromNick ( player2nick )  | |||
	-- Make sure it exists!  | |||
	if ( player2 ) then  | |||
		-- Is the player we're warping to in a vehicle?  | |||
		if ( isPlayerInVehicle ( player2 ) ) then  | |||
			-- Indeed they are, let's get the vehicle information such as the vehicle element itself, and the seats it's got.  | |||
			local player2vehicle = getPlayerOccupiedVehicle ( player2 )  | |||
			local numseats = getVehicleMaxPassengers ( player2vehicle )  | |||
			local i = 0  | |||
			-- Loop over the seats to see if there's a free one  | |||
			while ( i < numseats ) do  | |||
				if ( getVehicleOccupant ( player2vehicle, i ) ) then  | |||
					-- This seat isn't free, go ahead and check the next one  | |||
					i = i + 1  | |||
				else  | 				else  | ||
					--  | 					-- This seat is free, get out of the loop  | ||
					break  | |||
				end  | 				end  | ||
			end  | |||
			-- Check if 'i' is lower than the number of seats. If it is, it means it's the number of a free seat  | |||
			if ( i < numseats ) then  | |||
				-- Teleport the player into the seat  | |||
				warpPlayerIntoVehicle ( sourcePlayer, player2vehicle, i )  | |||
			else  | 			else  | ||
				--  | 				-- There are no free seats, tell the player that.  | ||
				outputChatBox ( "Sorry, the player's vehicle is full (" .. getVehicleName ( player2vehicle ) .. " " .. i .. "/" .. numseats .. ")", sourcePlayer )  | |||
			end  | 			end  | ||
		else  | 		else  | ||
			--  | 			-- The player isn't in a vehicle, let's get the player's position and warp to them.  | ||
			x, y, z = getElementPosition ( player2 )  | |||
			r = getPlayerRotation ( player2 )  | |||
			-- Make sure we get interior data, they might be inside one!  | |||
			interior = getElementInterior ( player2 )  | |||
			dimension = getElementDimension ( player2 )  | |||
			-- Do some funky math to make sure that we dont teleport inside of them (get us both stuck inside each other)  | |||
			x = x - ( ( math.cos ( math.rad ( r + 90 ) ) ) * d )  | |||
			y = y - ( ( math.sin ( math.rad ( r + 90 ) ) ) * d )  | |||
			-- Set a few timers for setting interiors, dimensions and positions  | |||
			setTimer ( setElementInterior, 800, 1, sourcePlayer, interior )  | |||
			setTimer ( setElementDimension, 900, 1, sourcePlayer, dimension )  | |||
			setTimer ( setElementPosition, 1000, 1, sourcePlayer, x, y, z )  | |||
			setTimer ( setPlayerRotation, 1000, 1, sourcePlayer, r )  | |||
			-- Fade the camera to make it look nicer  | |||
			fadeCamera ( sourcePlayer, false, 1, 0, 0, 0 )  | |||
			-- Fade it back once it's all complete!  | |||
			setTimer ( fadeCamera, 1000, 1, sourcePlayer, true, 1 )  | |||
		end  | 		end  | ||
	else  | |||
		-- No player by the specified name was found, tell the warper this.  | |||
		outputChatBox ( "No such player.", sourcePlayer )  | |||
	end  | 	end  | ||
end  | end  | ||
Revision as of 11:36, 16 August 2007
This function sets the position of an element to the specified coordinates.
Syntax
bool setElementPosition ( element theElement, float x, float y, float z )
Required Arguments
- theElement: A valid element to be moved.
 - x: The x coordinate of the destination.
 - y: The y coordinate of the destination.
 - z: The z coordinate of the destination.
 
Returns
Returns true if the function was successful, false otherwise.
Example
This example enables a player to type /warpto <playername> to warp to them. If the player being warped to is in a vehicle with a free passenger seat, it will warp into the vehicle.
function consoleWarpTo ( sourcePlayer, commandName, player2nick )
	-- Make sure required parameters are set
	if ( not sourcePlayer or not player2nick ) then return end
	-- Setup the variables we will be using for teleportation
	local x, y, z, r, d = 0, 0, 0, 0, 2.5
	-- Grab the element identifier of the player we are trying to warp to
	local player2 = getPlayerFromNick ( player2nick )
	-- Make sure it exists!
	if ( player2 ) then
		-- Is the player we're warping to in a vehicle?
		if ( isPlayerInVehicle ( player2 ) ) then
			-- Indeed they are, let's get the vehicle information such as the vehicle element itself, and the seats it's got.
			local player2vehicle = getPlayerOccupiedVehicle ( player2 )
			local numseats = getVehicleMaxPassengers ( player2vehicle )
			local i = 0
			-- Loop over the seats to see if there's a free one
			while ( i < numseats ) do
				if ( getVehicleOccupant ( player2vehicle, i ) ) then
					-- This seat isn't free, go ahead and check the next one
					i = i + 1
				else
					-- This seat is free, get out of the loop
					break
				end
			end
			-- Check if 'i' is lower than the number of seats. If it is, it means it's the number of a free seat
			if ( i < numseats ) then
				-- Teleport the player into the seat
				warpPlayerIntoVehicle ( sourcePlayer, player2vehicle, i )
			else
				-- There are no free seats, tell the player that.
				outputChatBox ( "Sorry, the player's vehicle is full (" .. getVehicleName ( player2vehicle ) .. " " .. i .. "/" .. numseats .. ")", sourcePlayer )
			end
		else
			-- The player isn't in a vehicle, let's get the player's position and warp to them.
			x, y, z = getElementPosition ( player2 )
			r = getPlayerRotation ( player2 )
			-- Make sure we get interior data, they might be inside one!
			interior = getElementInterior ( player2 )
			dimension = getElementDimension ( player2 )
			-- Do some funky math to make sure that we dont teleport inside of them (get us both stuck inside each other)
			x = x - ( ( math.cos ( math.rad ( r + 90 ) ) ) * d )
			y = y - ( ( math.sin ( math.rad ( r + 90 ) ) ) * d )
			-- Set a few timers for setting interiors, dimensions and positions
			setTimer ( setElementInterior, 800, 1, sourcePlayer, interior )
			setTimer ( setElementDimension, 900, 1, sourcePlayer, dimension )
			setTimer ( setElementPosition, 1000, 1, sourcePlayer, x, y, z )
			setTimer ( setPlayerRotation, 1000, 1, sourcePlayer, r )
			-- Fade the camera to make it look nicer
			fadeCamera ( sourcePlayer, false, 1, 0, 0, 0 )
			-- Fade it back once it's all complete!
			setTimer ( fadeCamera, 1000, 1, sourcePlayer, true, 1 )
		end
	else
		-- No player by the specified name was found, tell the warper this.
		outputChatBox ( "No such player.", sourcePlayer )
	end
end
addCommandHandler ( "warpto", consoleWarpTo )
See Also
- attachElements
 - createElement
 - destroyElement
 - detachElements
 - getAttachedElements
 - getElementAlpha
 - getElementAttachedOffsets
 - getElementAttachedTo
 - getElementByIndex
 - getElementByID
 - getElementChild
 - getElementChildren
 - getElementChildrenCount
 - getElementCollisionsEnabled
 - getElementColShape
 - getElementData
 - getAllElementData
 - hasElementData
 - getElementDimension
 - getElementHealth
 - getElementID
 - getElementInterior
 - getElementMatrix
 - getElementModel
 - getElementParent
 - getElementPosition
 - getElementRotation
 - getElementsByType
 - getElementsWithinColShape
 - getElementsWithinRange
 - getElementType
 - getElementVelocity
 - getLowLODElement
 - getRootElement
 - isElement
 - isElementAttached
 - isElementCallPropagationEnabled
 - isElementDoubleSided
 - isElementFrozen
 - isElementInWater
 - isElementLowLOD
 - isElementWithinColShape
 - isElementWithinMarker
 - setElementAlpha
 - setElementAngularVelocity
 - getElementAngularVelocity
 - setElementAttachedOffsets
 - setElementCallPropagationEnabled
 - setElementCollisionsEnabled
 - setElementData
 - setElementDimension
 - setElementDoubleSided
 - setElementFrozen
 - setElementHealth
 - setElementID
 - setElementInterior
 - setElementModel
 - setElementParent
 - setElementPosition
 - setElementRotation
 - setElementVelocity
 - setLowLODElement
 - getPedContactElement
 - getResourceDynamicElementRoot
 - getResourceRootElement