Mike95 Posted May 4, 2013 Share Posted May 4, 2013 Hi, i need help with elevator's. The problem is that the human players can get throug it, but a car can't! I think that the problem is with interior's! Any help? Link to comment
iPrestege Posted May 4, 2013 Share Posted May 4, 2013 getPedOccupiedVehicle Try to use it. Link to comment
Mike95 Posted May 4, 2013 Author Share Posted May 4, 2013 In my "Elevator-System" folder have 3 files. "c_elevator_system" "meta" "s_elevator_system" in "c_elevator_system" addEventHandler( "onClientPlayerVehicleEnter", getLocalPlayer(), function( vehicle ) setElementData( vehicle, "groundoffset", 0.2 + getElementDistanceFromCentreOfMassToBaseOfModel( vehicle ) ) end ) addEvent( "CantFallOffBike", true ) addEventHandler( "CantFallOffBike", getLocalPlayer(), function( ) setPedCanBeKnockedOffBike( getLocalPlayer(), false ) setTimer( setPedCanBeKnockedOffBike, 1050, 1, getLocalPlayer(), true ) end ) On "s_elevator_system" mysql = exports.mysql addEvent("onPlayerInteriorChange", true) -- Defines INTERIOR_X = 1 INTERIOR_Y = 2 INTERIOR_Z = 3 INTERIOR_INT = 4 INTERIOR_DIM = 5 INTERIOR_ANGLE = 6 INTERIOR_FEE = 7 INTERIOR_TYPE = 1 INTERIOR_DISABLED = 2 INTERIOR_LOCKED = 3 INTERIOR_OWNER = 4 INTERIOR_COST = 5 INTERIOR_SUPPLIES = 6 -- Small hack function setElementDataEx(source, field, parameter, streamtoall, streamatall) exports['anticheat-system']:changeProtectedElementDataEx( source, field, parameter, streamtoall, streamatall) end -- End small hack function createElevator(thePlayer, commandName, interior, dimension, ix, iy, iz) if (exports.global:isPlayerSuperAdmin(thePlayer)) or (exports.donators:hasPlayerPerk(thePlayer,14) and exports.global:isPlayerFullAdmin(thePlayer)) then if not (interior) or not (dimension) or not (ix) or not (iy) or not (iz) then outputChatBox("SINTAKSE: /" .. commandName .. " [interjera ID] [Dimensijas ID] [X] [Y] [Z]", thePlayer, 255, 194, 14) else local x, y, z = getElementPosition(thePlayer) interior = tonumber(interior) dimension = tonumber(dimension) local interiorwithin = getElementInterior(thePlayer) local dimensionwithin = getElementDimension(thePlayer) ix = tonumber(ix) iy = tonumber(iy) iz = tonumber(iz) id = SmallestElevatorID() if id then local query = mysql:query_free("INSERT INTO elevators SET id='" .. mysql:escape_string(id) .. "', x='" .. mysql:escape_string(x) .. "', y='" .. mysql:escape_string(y) .. "', z='" .. mysql:escape_string(z) .. "', tpx='" .. mysql:escape_string(ix) .. "', tpy='" .. mysql:escape_string(iy) .. "', tpz='" .. mysql:escape_string(iz) .. "', dimensionwithin='" .. mysql:escape_string(dimensionwithin) .. "', interiorwithin='" .. mysql:escape_string(interiorwithin) .. "', dimension='" .. mysql:escape_string(dimension) .. "', interior='" .. mysql:escape_string(interior) .. "'") if (query) then --reloadOneElevator(id, true) loadOneElevator(id) outputChatBox("Elevator created with ID #" .. id .. "!", thePlayer, 0, 255, 0) end else outputChatBox("There was an error while creating an elevator. Try again.", thePlayer, 255, 0, 0) end end end end addCommandHandler("addelevator", createElevator, false, false) function findElevator(elevatorID) elevatorID = tonumber(elevatorID) if elevatorID > 0 then local possibleInteriors = getElementsByType("elevator") for _, elevator in ipairs(possibleInteriors) do local eleID = getElementData(elevator, "dbid") if eleID == elevatorID then local elevatorEntrance = getElementData(elevator, "entrance") local elevatorExit = getElementData(elevator, "exit") local elevatorStatus = getElementData(elevator, "status") return elevatorID, elevatorEntrance, elevatorExit, elevatorStatus, elevator end end end return 0 end function findElevatorElement(elevatorID) elevatorID = tonumber(elevatorID) if elevatorID > 0 then local possibleInteriors = getElementsByType("elevator") for _, elevator in ipairs(possibleInteriors) do local eleID = getElementData(elevator, "dbid") if eleID == elevatorID then return elevator end end end return false end function reloadOneElevator(elevatorID, skipcheck) local dbid, entrance, exit, status, elevatorElement = findElevator( elevatorID ) if (dbid > 0 or skipcheck)then local realElevatorElement = findElevatorElement(dbid) if not realElevatorElement then outputDebugString("[reloadOneElevator] Can't find element") end triggerClientEvent("deleteInteriorElement", realElevatorElement, tonumber(dbid)) destroyElement(realElevatorElement) loadOneElevator(tonumber(dbid), false) else --outputDebugString("You suckx2") outputDebugString("Tried to reload elevator without ID.") end end function loadOneElevator(elevatorID, hasCoroutine) if (hasCoroutine==nil) then hasCoroutine = false end local row = mysql:query_fetch_assoc("SELECT id, x, y, z, tpx, tpy, tpz, dimensionwithin, interiorwithin, dimension, interior, car, disabled FROM `elevators` WHERE id = " .. elevatorID ) if row then --if (hasCoroutine) then -- coroutine.yield() --end if row then for k, v in pairs( row ) do if v == null then row[k] = nil else row[k] = tonumber(v) or v end end local elevatorElement = createElement("elevator", "ele"..tostring(row.id)) setElementDataEx(elevatorElement, "dbid", row.id, true) -- X Y Z Interior Dimension Angle Entree fee setElementDataEx(elevatorElement, "entrance", { row.x, row.y, row.z, row.interiorwithin, row.dimensionwithin, 0, 0 }, true ) setElementDataEx(elevatorElement, "exit", { row.tpx, row.tpy, row.tpz, row.interior, row.dimension, 0, 0 }, true ) -- Type Is diabled? setElementDataEx(elevatorElement, "status", { row.car, row.disabled == 1 } , true ) setElementDataEx(elevatorElement, "name", row.name, true ) return true end end end function loadAllElevators(res) local result = mysql:query("SELECT id FROM elevators") local counter = 0 if (result) then while true do local row = mysql:fetch_assoc(result) if not row then break end loadOneElevator(row.id) end mysql:free_result(result) end end addEventHandler("onResourceStart", getResourceRootElement(), loadAllElevators) function isInteriorLocked(dimension) local result = mysql:query_fetch_assoc("SELECT type, locked FROM `interiors` WHERE id = " .. mysql:escape_string(dimension)) local locked = false if result then if tonumber(result["rype"]) ~= 2 and tonumber(result["locked"]) == 1 then locked = true end end return locked end function enterElevator(goingin) local pickup = source local player = client if getElementType(pickup) ~= "elevator" then return end local elevatorStatus = getElementData(pickup, "status") if elevatorStatus[iNTERIOR_TYPE] == 3 then outputChatBox("Paraustot durvju rokturi, tu konstatē ka durvis ir aizslēgtas.", player, 255, 0,0, true) return end vehicle = getPedOccupiedVehicle( player ) if ( ( vehicle and elevatorStatus[iNTERIOR_TYPE] ~= 0 and getVehicleOccupant( vehicle ) == player ) or not vehicle ) then if not vehicle and elevatorStatus[iNTERIOR_TYPE] == 2 then outputChatBox( "This entrance is for vehicles only.", player, 255, 0, 0 ) return end if elevatorStatus[iNTERIOR_DISABLED] then outputChatBox( "This interior is currently disabled.", player, 255, 0, 0 ) return end local currentCP = nil local otherCP = nil if goingin then currentCP = getElementData(pickup, "entrance") otherCP = getElementData(pickup, "exit") else currentCP = getElementData(pickup, "exit") otherCP = getElementData(pickup, "entrance") end local locked = false if currentCP[iNTERIOR_DIM] == 0 and otherCP[iNTERIOR_DIM] ~= 0 then -- entering a house locked = isInteriorLocked(otherCP[iNTERIOR_DIM]) elseif currentCP[iNTERIOR_DIM] ~= 0 and otherCP[iNTERIOR_DIM] == 0 then -- leaving a house locked = isInteriorLocked(currentCP[iNTERIOR_DIM]) elseif currentCP[iNTERIOR_DIM] ~= 0 and otherCP[iNTERIOR_DIM] ~= 0 and currentCP[iNTERIOR_DIM] ~= otherCP[iNTERIOR_DIM] then -- changing between two houses locked = isInteriorLocked(currentCP[iNTERIOR_DIM]) or isInteriorLocked(otherCP[iNTERIOR_DIM]) else -- Moving in the same dimension locked = false end if locked then outputChatBox("Paraustot durvju rokturi, tu konstatē ka durvis ir aizslēgtas.", player, 255, 0,0, true) return end -- check for entrance fee local dbid, entrance, exit, interiorType, interiorElement = call( getResourceFromName( "interior-system" ), "findProperty", player, otherCP[iNTERIOR_DIM] ) if dbid > 0 then local interiorEntrance = getElementData(interiorElement, "entrance") local interiorStatus = getElementData(interiorElement, "status") if currentCP[iNTERIOR_DIM] ~= otherCP[iNTERIOR_DIM] and interiorElement then if getElementData( player, "adminduty" ) ~= 1 and not exports.global:hasItem( player, 5, otherCP[iNTERIOR_DIM] ) then if interiorEntrance[iNTERIOR_FEE] and interiorEntrance[iNTERIOR_FEE] > 0 then if not exports.global:takeMoney( player, interiorEntrance[iNTERIOR_FEE] ) then outputChatBox( "Jums nepietiek naudas, lai iekļūti šinī īpašumā.", player, 255, 0, 0 ) return else local ownerid = interiorStatus[iNTERIOR_OWNER] local query = mysql:query_free("UPDATE characters SET bankmoney = bankmoney + '" .. mysql:escae_string(interiorEntrance[iNTERIOR_FEE]) .. "' WHERE id = '" .. mysql:escape_string(ownerid).."'" ) if query then for k, v in pairs( getElementsByType( "player" ) ) do if isElement( v ) then if getElementData( v, "dbid" ) == ownerid then exports['anticheat-system']:changeProtectedElementDataEx( v, "businessprofit", getElementData( v, "businessprofit" ) + interiorEntrance[iNTERIOR_FEE], false ) break end end end else outputChatBox( "Error 9019 - Report on Forums.", player, 255, 0, 0 ) end end end end end else dbid, entrance, exit, interiorType, interiorElement = call( getResourceFromName( "interior-system" ), "findProperty", player, currentCP[iNTERIOR_DIM] ) end if vehicle then Link to comment
Baseplate Posted May 4, 2013 Share Posted May 4, 2013 Yup, leaked vG resources, we don't help with those leaked scripts... Link to comment
Recommended Posts