Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
127 changes: 70 additions & 57 deletions [gameplay]/interiors/interiorexp.lua
Original file line number Diff line number Diff line change
Expand Up @@ -20,29 +20,33 @@ function ( resource )
for id,interiorTable in pairs(interiors[resource]) do
local interior1 = interiorTable["entry"]
local interior2 = interiorTable["return"]
destroyElement ( interiorMarkers[interior1] )
destroyElement ( interiorMarkers[interior2] )
if interiorMarkers[interior1] and isElement(interiorMarkers[interior1]) then
destroyElement ( interiorMarkers[interior1] )
end
if interiorMarkers[interior2] and isElement(interiorMarkers[interior2]) then
destroyElement ( interiorMarkers[interior2] )
end
end
interiors[resource] = nil
end )

function interiorLoadElements ( root, resource )
function interiorLoadElements ( rootElement, resource )
---Load the exterior markers
local entryInteriors = getElementsByType ( "interiorEntry", root )
local entryInteriors = getElementsByType ( "interiorEntry", rootElement )
for key, interior in pairs (entryInteriors) do
local id = getElementData ( interior, "id" )
if not interiors[resource] then interiors[resource] = {} end
if not id then outputDebugString ( "Interiors: Error, no ID specified on entryInterior. Trying to load anyway.", 2 )
if not id then outputDebugString ( "Interiors: Error, no ID specified on entryInterior. Trying to load anyway.", 2 )
end
interiors[resource][id] = {}
interiors[resource][id]["entry"] = interior
end
--Load the interior markers
local returnInteriors = getElementsByType ( "interiorReturn", root )
local returnInteriors = getElementsByType ( "interiorReturn", rootElement )
for key, interior in pairs (returnInteriors) do
local id = getElementData ( interior, "refid" )
if not interiors[resource][id] then outputDebugString ( "Interiors: Error, no refid specified to returnInterior.", 1 )
return
if not interiors[resource] or not interiors[resource][id] then
outputDebugString ( "Interiors: Error, no refid specified to returnInterior.", 1 )
else
interiors[resource][id]["return"] = interior
end
Expand All @@ -53,85 +57,94 @@ function interiorCreateMarkers ( resource )
if not interiors[resource] then return end
for interiorID, interiorTypeTable in pairs(interiors[resource]) do
local entryInterior = interiorTypeTable["entry"]
local entX,entY,entZ = getElementData ( entryInterior, "posX" ),getElementData ( entryInterior, "posY" ),getElementData ( entryInterior, "posZ" )
entX,entY,entZ = tonumber(entX),tonumber(entY),tonumber(entZ)
--
local marker = createMarker ( entX, entY, entZ + 2.2, "arrow", 2, 255, 255, 0, 200 )
setElementParent ( marker, entryInterior )
interiorMarkers[entryInterior] = marker
--
local dimension = tonumber(getElementData ( entryInterior, "dimension" ))
local interior = tonumber(getElementData ( entryInterior, "interior" ))
if not dimension then dimension = 0 end
if not interior then interior = 0 end
--
setElementInterior ( marker, interior )
setElementDimension ( marker, dimension )
if entryInterior then
local entX,entY,entZ = getElementData ( entryInterior, "posX" ),getElementData ( entryInterior, "posY" ),getElementData ( entryInterior, "posZ" )
entX,entY,entZ = tonumber(entX),tonumber(entY),tonumber(entZ)

if entX and entY and entZ then
local marker = createMarker ( entX, entY, entZ + 2.2, "arrow", 2, 255, 255, 0, 200 )
setElementParent ( marker, entryInterior )
interiorMarkers[entryInterior] = marker
--
local dimension = tonumber(getElementData ( entryInterior, "dimension" )) or 0
local interior = tonumber(getElementData ( entryInterior, "interior" )) or 0
--
setElementInterior ( marker, interior )
setElementDimension ( marker, dimension )
end
end

---create return markers
local returnInterior = interiorTypeTable["return"]
local retX,retY,retZ = getElementData ( returnInterior, "posX" ),getElementData ( returnInterior, "posY" ),getElementData ( returnInterior, "posZ" )
retX,retY,retZ = tonumber(retX),tonumber(retY),tonumber(retZ)
--
local oneway = getElementData ( entryInterior, "oneway" )
if oneway == "true" then return end
local marker1 = createMarker ( retX, retY, retZ + 2.2, "arrow", 2, 255, 255, 0, 200 )
interiorMarkers[returnInterior] = marker1
setElementParent ( marker1, returnInterior )
--
local dimension1 = tonumber(getElementData ( returnInterior, "dimension" ))
local interior1 = tonumber(getElementData ( returnInterior, "interior" ))
if not dimension1 then dimension1 = 0 end
if not interior1 then interior1 = 0 end
--
setElementInterior ( marker1, interior1 )
setElementDimension ( marker1, dimension1 )
if returnInterior then
local oneway = getElementData ( entryInterior, "oneway" )
if oneway ~= "true" then
local retX,retY,retZ = getElementData ( returnInterior, "posX" ),getElementData ( returnInterior, "posY" ),getElementData ( returnInterior, "posZ" )
retX,retY,retZ = tonumber(retX),tonumber(retY),tonumber(retZ)

if retX and retY and retZ then
local marker1 = createMarker ( retX, retY, retZ + 2.2, "arrow", 2, 255, 255, 0, 200 )
interiorMarkers[returnInterior] = marker1
setElementParent ( marker1, returnInterior )
--
local dimension1 = tonumber(getElementData ( returnInterior, "dimension" )) or 0
local interior1 = tonumber(getElementData ( returnInterior, "interior" )) or 0
--
setElementInterior ( marker1, interior1 )
setElementDimension ( marker1, dimension1 )
end
end
end
end
end

function getInteriorMarker ( elementInterior )
if not isElement ( elementInterior ) then outputDebugString("getInteriorName: Invalid variable specified as interior. Element expected, got "..type(elementInterior)..".",0,255,128,0) return false end
if not isElement ( elementInterior ) then outputDebugString("getInteriorName: Invalid variable specified as interior. Element expected, got "..type(elementInterior)..".",0,255,128,0) return false end
local elemType = getElementType ( elementInterior )
if elemType == "interiorEntry" or elemType == "interiorReturn" then
return interiorMarkers[elementInterior] or false
end
outputDebugString("getInteriorName: Bad element specified. Interior expected, got "..elemType..".",0,255,128,0)
outputDebugString("getInteriorName: Bad element specified. Interior expected, got "..elemType..".",0,255,128,0)
return false
end

local idLoc = { ["interiorReturn"] = "refid",["interiorEntry"] = "id" }
addEventHandler ( "doTriggerServerEvents",root,
function( interior, resource, id )
local eventCanceled1, eventCanceled2
eventCanceled1 = triggerEvent ( "onPlayerInteriorHit", client, interior, resource, id )
eventCanceled2 = triggerEvent ( "onInteriorHit", interior, client )
addEventHandler ( "doTriggerServerEvents", root,
function( interior, resourceName, id )
if not isElement(client) then return end
local eventCanceled1 = triggerEvent ( "onPlayerInteriorHit", client, interior, resourceName, id )
local eventCanceled2 = triggerEvent ( "onInteriorHit", interior, client )
if ( eventCanceled2 ) and ( eventCanceled1 ) then
triggerClientEvent ( client, "doWarpPlayerToInterior", client, interior, resource, id )
setTimer ( setPlayerInsideInterior, 1000, 1, client, interior, resource, id )
triggerClientEvent ( client, "doWarpPlayerToInterior", client, interior, resourceName, id )
setTimer ( setPlayerInsideInterior, 1000, 1, client, interior, resourceName, id )
end
end
)

local opposite = { ["interiorReturn"] = "entry",["interiorEntry"] = "return" }
function setPlayerInsideInterior ( player, interior, resource, id )
function setPlayerInsideInterior ( player, interior, resourceName, id )
if not isElement(player) then return end
local res = getResourceFromName(resourceName) or getThisResource()
if not interiors[res] or not interiors[res][id] then return end
local oppositeType = opposite[getElementType(interior)]
local targetInterior = interiors[getResourceFromName(resource) or getThisResource()][id][oppositeType]
local dim = getElementData ( targetInterior, "dimension" )
local int = getElementData ( targetInterior, "interior" )
if (isElement(player)) then
setElementInterior ( player, int )
setElementDimension ( player, dim )
end
local targetInterior = interiors[res][id][oppositeType]
if not targetInterior then return end

local dim = tonumber(getElementData ( targetInterior, "dimension" )) or 0
local int = tonumber(getElementData ( targetInterior, "interior" )) or 0
setElementInterior ( player, int )
setElementDimension ( player, dim )
end

function getInteriorName ( interior )
if not isElement ( interior ) then outputDebugString("getInteriorName: Invalid variable specified as interior. Element expected, got "..type(interior)..".",0,255,128,0) return false end
if not isElement ( interior ) then outputDebugString("getInteriorName: Invalid variable specified as interior. Element expected, got "..type(interior)..".",0,255,128,0) return false end
local elemType = getElementType ( interior )
if elemType == "interiorEntry" then
return getElementData ( interior, "id" )
elseif elemType == "interiorReturn" then
return getElementData ( interior, "refid" )
else
outputDebugString("getInteriorName: Bad element specified. Interior expected, got "..elemType..".",0,255,128,0)
outputDebugString("getInteriorName: Bad element specified. Interior expected, got "..elemType..".",0,255,128,0)
return false
end
end
Expand Down
Loading