local spawnedObjects = {} _menuPool = NativeUI.CreatePool() local mySteamID local isAdmin = false local isWhitelisted = false Citizen.CreateThread(function() while true do Wait(1) if _menuPool:IsAnyMenuOpen() then _menuPool:ProcessMenus() end end end) --[[Citizen.CreateThread(function() while true do if IsControlJustReleased(0, 38) then openMapMaker() end Citizen.Wait(1) end end)--]] RegisterCommand(Config.Command, function(source, args, rawCommand) if isWhitelisted then openMapMaker() end end, false) Citizen.CreateThread(function() Citizen.Wait(500) TriggerServerEvent('mapbuilder:getObjects') end) RegisterNetEvent('mapbuilder:receiveObjects') AddEventHandler('mapbuilder:receiveObjects', function(result) for k, v in pairs(result) do local sObject = CreateObject(GetHashKey(v.objectHash), v.locX, v.locY, v.locZ, false, true, true) Citizen.Wait(25) SetEntityCoords(sObject, v.locX, v.locY, v.locZ) SetEntityHeading(sObject, v.heading) --PlaceObjectOnGroundProperly(sObject) if tonumber(v.freeze) == 1 then FreezeEntityPosition(sObject, true) else FreezeEntityPosition(sObject, false) end table.insert(spawnedObjects, result[k]) spawnedObjects[#spawnedObjects].entity = sObject end end) local object = nil local selectedObject = nil local selectedObjectHash = nil local objectHash = nil -- final object hash local isFrozen = true local mapmakerMenu local spawnObject_sub local enterObject function openMapMaker() _menuPool:Remove() _menuPool = NativeUI.CreatePool() collectgarbage() local prefix = '' if object == nil then prefix = '~c~' else prefix = '' end mapmakerMenu = NativeUI.CreateMenu(Translation[Config.Locale]['menu_title']) _menuPool:Add(mapmakerMenu) local objectsInDistance = _menuPool:AddSubMenu(mapmakerMenu, Translation[Config.Locale]['get_object_distance'], '~b~') mapmakerMenu.Items[1]:RightLabel('~o~→→→') if #spawnedObjects > 0 then for k, v in pairs(spawnedObjects) do if v.createdBy == mySteamID or (isAdmin) then local roundX = math.round(v.locX) local roundY = math.round(v.locY) local roundZ = math.round(v.locZ) local roundHeading = math.round(v.heading) local obj_sub if Config.useNativeUIReloaded then obj_sub = _menuPool:AddSubMenu(objectsInDistance.SubMenu, '~b~' .. v.comment .. ' ~s~| ' .. v.objectHash, '(~b~X ~s~= ' .. roundX .. ', ~b~Y ~s~= ' .. roundY .. ', ~b~Z~s~ = ' .. roundZ) else obj_sub = _menuPool:AddSubMenu(objectsInDistance, '~b~' .. v.comment .. ' ~s~| ' .. v.objectHash, '(~b~X ~s~= ' .. roundX .. ', ~b~Y ~s~= ' .. roundY .. ', ~b~Z~s~ = ' .. roundZ) end if isAdmin then local teleport = NativeUI.CreateItem(Translation[Config.Locale]['obj_tp'], Translation[Config.Locale]['obj_tp_desc']) if Config.useNativeUIReloaded then obj_sub.SubMenu:AddItem(teleport) else obj_sub:AddItem(teleport) end teleport.Activated = function(sender, index) SetEntityCoords(PlayerPedId(), v.locX, v.locY, v.locZ) end end local hide = NativeUI.CreateItem(Translation[Config.Locale]['obj_hide'], Translation[Config.Locale]['obj_hide_desc']) if Config.useNativeUIReloaded then obj_sub.SubMenu:AddItem(hide) else obj_sub:AddItem(hide) end hide.Activated = function(sender, index) if v.entity ~= nil then DeleteObject(v.entity) v.entity = nil else ShowNotification(Translation[Config.Locale]['invalid_object']) end end local replace = NativeUI.CreateItem(Translation[Config.Locale]['obj_replace'], Translation[Config.Locale]['obj_replace_desc']) if Config.useNativeUIReloaded then obj_sub.SubMenu:AddItem(replace) else obj_sub:AddItem(replace) end replace.Activated = function(sender, index) if v.entity == nil then newObj = spawnObject(v.objectHash, v.locX, v.locY, v.locZ, v.heading, v.freeze) v.entity = newObj else ShowNotification(Translation[Config.Locale]['obj_already_exists']) end end local turn = NativeUI.CreateItem(Translation[Config.Locale]['turn_object'], '~b~') if Config.useNativeUIReloaded then obj_sub.SubMenu:AddItem(turn) else obj_sub:AddItem(turn) end turn.Activated = function(sender, index) if v.entity ~= nil then if Config.useNativeUIReloaded then turnObject(v.entity, obj_sub.SubMenu) else turnObject(v.entity, obj_sub) end else ShowNotification(Translation[Config.Locale]['invalid_object']) end end local move = NativeUI.CreateItem(Translation[Config.Locale]['move_object'], '~b~') if Config.useNativeUIReloaded then obj_sub.SubMenu:AddItem(move) else obj_sub:AddItem(move) end move.Activated = function(sender, index) if v.entity ~= nil then if Config.useNativeUIReloaded then moveObject(v.entity, obj_sub.SubMenu) else moveObject(v.entity, obj_sub) end else ShowNotification(Translation[Config.Locale]['invalid_object']) end end local moveUpandDown = NativeUI.CreateItem(Translation[Config.Locale]['moveupdown_object'], '~b~') if Config.useNativeUIReloaded then obj_sub.SubMenu:AddItem(moveUpandDown) else obj_sub:AddItem(moveUpandDown) end moveUpandDown.Activated = function(sender, index) if v.entity ~= nil then if Config.useNativeUIReloaded then moveUpDown(v.entity, obj_sub.SubMenu) else moveUpDown(v.entity, obj_sub) end else ShowNotification(Translation[Config.Locale]['invalid_object']) end end local editMoveable = NativeUI.CreateCheckboxItem(Translation[Config.Locale]['set_moveable'], v.freeze, Translation[Config.Locale]['set_moveable_desc']) if Config.useNativeUIReloaded then obj_sub.SubMenu:AddItem(editMoveable) obj_sub.SubMenu.OnCheckboxChange = function(sender, item, checked) if item == editMoveable then if v.entity ~= nil then isFrozen = checked ShowNotification(Translation[Config.Locale]['moveable_state_changed'] .. tostring(checked)) FreezeEntityPosition(v.entity, isFrozen) else isFrozen = checked --ShowNotification(Translation[Config.Locale]['invalid_object']) end end end else obj_sub:AddItem(editMoveable) obj_sub.OnCheckboxChange = function(sender, item, checked) if item == editMoveable then if object ~= nil then isFrozen = checked ShowNotification(Translation[Config.Locale]['moveable_state_changed'] .. tostring(checked)) FreezeEntityPosition(object, isFrozen) else isFrozen = checked --ShowNotification(Translation[Config.Locale]['invalid_object']) end end end end local permDelete = NativeUI.CreateItem(Translation[Config.Locale]['delete_object'], Translation[Config.Locale]['obj_permdelete_desc']) if Config.useNativeUIReloaded then obj_sub.SubMenu:AddItem(permDelete) else obj_sub:AddItem(permDelete) end permDelete.Activated = function(sender, index) TriggerServerEvent('mapbuilder:removeFromDatabase', v.id, v.objectHash) TriggerServerEvent('mapbuilder:syncObjectRemove', v.id, v.objectHash) ShowNotification(Translation[Config.Locale]['obj_removed']) end local save = NativeUI.CreateItem(Translation[Config.Locale]['obj_savechanges'], Translation[Config.Locale]['obj_savechanges_desc']) if Config.useNativeUIReloaded then obj_sub.SubMenu:AddItem(save) else obj_sub:AddItem(save) end save.Activated = function(sender, index) local coords = GetEntityCoords(v.entity) local heading = GetEntityHeading(v.entity) TriggerServerEvent('mapbuilder:updateObject', v.id, coords, heading, isFrozen) ShowNotification(Translation[Config.Locale]['obj_saved']) --TriggerServerEvent('mapbuilder:saveToDatabase', selectedObject, coords, heading, isMoveable, desc) --DeleteObject(object) end end end end spawnObject_sub = _menuPool:AddSubMenu(mapmakerMenu, Translation[Config.Locale]['spawn_object'], '~b~Select an object!') mapmakerMenu.Items[2]:RightLabel('~b~→→→') enterObject = NativeUI.CreateItem(Translation[Config.Locale]['enter_objectname'], Translation[Config.Locale]['enter_objectname_desc']) enterObject:RightLabel('~b~' .. Config.defaultObject) selectedObject = Config.defaultObject selectedObjectHash = GetHashKey(Config.defaultObject) if Config.useNativeUIReloaded then spawnObject_sub.SubMenu:AddItem(enterObject) else spawnObject_sub:AddItem(enterObject) end enterObject.Activated = function(sender, index) if isAdmin then if Config.useNativeUIReloaded then spawnObject_sub.SubMenu:Visible(false) else spawnObject_sub:Visible(false) end --local objectInput = KeyboardInput(Translation[Config.Locale]['insert_here'], Translation[Config.Locale]['insert_placeholder'], 100) ShowNotification(Translation[Config.Locale]['selectObject_help']) end end local recommendObjects if Config.useNativeUIReloaded then recommendObjects = _menuPool:AddSubMenu(spawnObject_sub.SubMenu, Translation[Config.Locale]['recommend_objects'], Translation[Config.Locale]['recommend_objects_desc']) spawnObject_sub.SubMenu.Items[2]:RightLabel('~o~→→→') else recommendObjects = _menuPool:AddSubMenu(spawnObject_sub, Translation[Config.Locale]['recommend_objects'], Translation[Config.Locale]['recommend_objects_desc']) spawnObject_sub.Items[2]:RightLabel('~o~→→→') end for k, v in pairs(Config.recommendObjects) do local recObjectItem = NativeUI.CreateItem(v.label, 'Select object ~b~' .. v.object) if Config.useNativeUIReloaded then recommendObjects.SubMenu:AddItem(recObjectItem) recObjectItem.Activated = function(sender, index) recommendObjects.SubMenu:Visible(false) enterObject:RightLabel('~g~' .. v.object) selectedObjectHash = GetHashKey(v.object) selectedObject = v.object spawnObject_sub.SubMenu:Visible(true) end else recommendObjects:AddItem(recObjectItem) recObjectItem.Activated = function(sender, index) recommendObjects:Visible(false) enterObject:RightLabel('~g~' .. v.object) selectedObjectHash = GetHashKey(v.object) selectedObject = v.object spawnObject_sub:Visible(true) end end end local spawnObjectFinal = NativeUI.CreateItem(Translation[Config.Locale]['spawn_object_final'], Translation[Config.Locale]['spawn_object_final_desc']) if Config.useNativeUIReloaded then spawnObject_sub.SubMenu:AddItem(spawnObjectFinal) else spawnObject_sub:AddItem(spawnObjectFinal) end local moveObjectItem = NativeUI.CreateItem(Translation[Config.Locale]['move_object'], '~b~') moveObjectItem:RightLabel(Translation[Config.Locale]['no_object']) mapmakerMenu:AddItem(moveObjectItem) moveObjectItem.Activated = function() if object ~= nil then moveObject(object, mapmakerMenu) else ShowNotification(Translation[Config.Locale]['invalid_object']) end end local turnObjectItem = NativeUI.CreateItem(Translation[Config.Locale]['turn_object'], '~b~') turnObjectItem:RightLabel(Translation[Config.Locale]['no_object']) mapmakerMenu:AddItem(turnObjectItem) turnObjectItem.Activated = function(sender, index) if object ~= nil then turnObject(object, mapmakerMenu) else ShowNotification(Translation[Config.Locale]['invalid_object']) end end local moveUpandDownItem = NativeUI.CreateItem(Translation[Config.Locale]['moveupdown_object'], '~b~') moveUpandDownItem:RightLabel(Translation[Config.Locale]['no_object']) mapmakerMenu:AddItem(moveUpandDownItem) moveUpandDownItem.Activated = function(sender, index) if object ~= nil then moveUpDown(object, mapmakerMenu) else ShowNotification(Translation[Config.Locale]['invalid_object']) end end local setMoveableItem = NativeUI.CreateCheckboxItem(Translation[Config.Locale]['set_moveable'], isFrozen, Translation[Config.Locale]['set_moveable_desc']) mapmakerMenu:AddItem(setMoveableItem) mapmakerMenu.OnCheckboxChange = function(sender, item, checked) if item == setMoveableItem then if object ~= nil then isFrozen = checked ShowNotification(Translation[Config.Locale]['moveable_state_changed'] .. tostring(checked)) FreezeEntityPosition(object, isFrozen) else isFrozen = checked --ShowNotification(Translation[Config.Locale]['invalid_object']) end end end local desc = '-' local commentItem = NativeUI.CreateItem(Translation[Config.Locale]['set_description'], Translation[Config.Locale]['set_description_desc']) commentItem:RightLabel('~b~' .. desc) mapmakerMenu:AddItem(commentItem) commentItem.Activated = function(sender, index) local descStr = KeyboardInput(Translation[Config.Locale]['set_description'], desc, 20) if descStr ~= nil then desc = descStr commentItem:RightLabel('~b~' .. desc) end end local deleteObjectItem = NativeUI.CreateItem(Translation[Config.Locale]['delete_object'], Translation[Config.Locale]['delete_object_desc']) mapmakerMenu:AddItem(deleteObjectItem) deleteObjectItem.Activated = function(sender, index) if object ~= nil then DeleteObject(object) object = nil turnObjectItem:RightLabel(Translation[Config.Locale]['no_object']) moveObjectItem:RightLabel(Translation[Config.Locale]['no_object']) else ShowNotification(Translation[Config.Locale]['invalid_object']) end end local saveObject = NativeUI.CreateItem(Translation[Config.Locale]['save_object'], Translation[Config.Locale]['save_object_desc']) mapmakerMenu:AddItem(saveObject) saveObject.Activated = function(sender, index) if object ~= nil then local hashKey = GetHashKey(object) local coords = GetEntityCoords(object) local heading = GetEntityHeading(object) TriggerServerEvent('mapbuilder:syncObject', objectHash, coords, heading, isFrozen) TriggerServerEvent('mapbuilder:saveToDatabase', selectedObject, coords, heading, isFrozen, desc) DeleteObject(object) object = nil else ShowNotification(Translation[Config.Locale]['invalid_object']) end end spawnObjectFinal.Activated = function(sender, index) if Config.useNativeUIReloaded then spawnObject_sub.SubMenu:Visible(false) else spawnObject_sub:Visible(false) end playerCoords = GetEntityCoords(PlayerPedId()) playerHeading = GetEntityHeading(PlayerPedId()) if object ~= nil then DeleteObject(object) end objectHash = selectedObjectHash object = CreateObject(selectedObjectHash, playerCoords.x, playerCoords.y, playerCoords.z-1, false, true, true) SetEntityHeading(object, playerHeading+180) PlaceObjectOnGroundProperly(object) FreezeEntityPosition(object, isFrozen) -- turn mode AddTextEntry('text', Translation[Config.Locale]['controls'] ..'~n~~' .. Config.Controls.turnright.name .. '~' .. Translation[Config.Locale]['turn_right'] .. '~n~~' .. Config.Controls.turnleft.name .. '~' .. Translation[Config.Locale]['turn_left'] .. '~n~~' .. Config.Controls.fast.name .. '~' .. Translation[Config.Locale]['turn_fast'] .. '~n~~' .. Config.Controls.slow.name .. '~' .. Translation[Config.Locale]['turn_slow'] .. '~n~~' .. Config.Controls.finish.name .. '~' .. Translation[Config.Locale]['back_to_menu'] .. '~n~~' ) while true do Wait(0) BeginTextCommandDisplayHelp('text') EndTextCommandDisplayHelp(false, false, false, -1) if IsControlPressed(0, Config.Controls.slow.key) and IsControlJustPressed(0, Config.Controls.turnright.key) then SetEntityHeading(object, GetEntityHeading(object)+0.1) elseif IsControlPressed(0, Config.Controls.fast.key) and IsControlJustPressed(0, Config.Controls.turnright.key) then SetEntityHeading(object, GetEntityHeading(object)+10) elseif IsControlJustPressed(0, Config.Controls.turnright.key) then SetEntityHeading(object, GetEntityHeading(object)+1) end if IsControlPressed(0, Config.Controls.slow.key) and IsControlJustPressed(0, Config.Controls.turnleft.key) then SetEntityHeading(object, GetEntityHeading(object)-0.1) elseif IsControlPressed(0, Config.Controls.fast.key) and IsControlJustPressed(0, Config.Controls.turnleft.key) then SetEntityHeading(object, GetEntityHeading(object)-10) elseif IsControlJustPressed(0, Config.Controls.turnleft.key) then SetEntityHeading(object, GetEntityHeading(object)-1) end if IsControlJustPressed(0, Config.Controls.finish.key) then turnObjectItem:RightLabel('~g~') moveObjectItem:RightLabel('~g~') mapmakerMenu:Visible(true) break end end end mapmakerMenu:Visible(not mapmakerMenu:Visible()) _menuPool:MouseControlsEnabled(false) _menuPool:MouseEdgeEnabled(false) _menuPool:ControlDisablingEnabled(false) end RegisterCommand("selectObject", function(source, args, rawCommand) if GetHashKey(args[1]) ~= nil then enterObject:RightLabel('~g~' .. args[1]) selectedObjectHash = GetHashKey(args[1]) selectedObject = args[1] if Config.useNativeUIReloaded then spawnObject_sub.SubMenu:Visible(true) else spawnObject_sub:Visible(true) end else ShowNotification(Translation[Config.Locale]['invalid_object']) if Config.useNativeUIReloaded then spawnObject_sub.SubMenu:Visible(true) else spawnObject_sub:Visible(true) end end end, false) RegisterNetEvent('mapbuilder:spawnObject') AddEventHandler('mapbuilder:spawnObject', function(hash, loc, heading, freeze) local lastObj = CreateObject(hash, loc.x, loc.y, loc.z, false, true, true) Citizen.Wait(25) SetEntityCoords(lastObj, loc.x, loc.y, loc.z) FreezeEntityPosition(lastObj, freeze) SetEntityHeading(lastObj, heading) --PlaceObjectOnGroundProperly(lastObj) end) RegisterNetEvent('mapbuilder:updateObject') AddEventHandler('mapbuilder:updateObject', function(objectID, loc, heading, freeze) for k, v in pairs(spawnedObjects) do if v.id == objectID then DeleteObject(v.entity) local lastObj = CreateObject(GetHashKey(v.objectHash), loc.x, loc.y, loc.z, false, true, true) Citizen.Wait(25) SetEntityCoords(lastObj, loc.x, loc.y, loc.z) FreezeEntityPosition(lastObj, freeze) SetEntityHeading(lastObj, heading) --PlaceObjectOnGroundProperly(lastObj) v.entity = lastObj v.locX = loc.x v.locY = loc.y v.locZ = loc.z v.heading = heading v.freeze = freeze break end end end) function ShowNotification(text) SetNotificationTextEntry('STRING') AddTextComponentString(text) DrawNotification(false, true) end function spawnObject(objectHash, locX, locY, locZ, heading, freeze) local sObject = CreateObject(GetHashKey(objectHash), locX, locY, locZ, false, true, true) Citizen.Wait(25) SetEntityCoords(sObject, locX, locY, locZ) SetEntityHeading(sObject, heading) --PlaceObjectOnGroundProperly(sObject) FreezeEntityPosition(sObject, freeze) return sObject end --only for standalone RegisterNetEvent('mapbuilder:getPerm') AddEventHandler('mapbuilder:getPerm', function(steamID, whitelisted, admin) isWhitelisted = whitelisted isAdmin = admin mySteamID = steamID end) RegisterNetEvent('mapbuilder:deleteObject') AddEventHandler('mapbuilder:deleteObject', function(objectID, hash) for k, v in pairs(spawnedObjects) do if v.id == objectID then if v.objectHash == hash then DeleteObject(v.entity) table.remove(spawnedObjects, k) end end end end) function turnObject(objectRes, menu) menu:Visible(false) AddTextEntry('text', Translation[Config.Locale]['controls'] ..'~n~~' .. Config.Controls.turnright.name .. '~' .. Translation[Config.Locale]['turn_right'] .. '~n~~' .. Config.Controls.turnleft.name .. '~' .. Translation[Config.Locale]['turn_left'] .. '~n~~' .. Config.Controls.fast.name .. '~' .. Translation[Config.Locale]['turn_fast'] .. '~n~~' .. Config.Controls.slow.name .. '~' .. Translation[Config.Locale]['turn_slow'] .. '~n~~' .. Config.Controls.finish.name .. '~' .. Translation[Config.Locale]['back_to_menu'] .. '~n~~' ) while true do Wait(0) BeginTextCommandDisplayHelp('text') EndTextCommandDisplayHelp(false, false, false, -1) if IsControlPressed(0, Config.Controls.slow.key) and IsControlJustPressed(0, Config.Controls.turnright.key) then SetEntityHeading(objectRes, GetEntityHeading(objectRes)+0.1) elseif IsControlPressed(0, Config.Controls.fast.key) and IsControlJustPressed(0, Config.Controls.turnright.key) then SetEntityHeading(objectRes, GetEntityHeading(objectRes)+10) elseif IsControlJustPressed(0, Config.Controls.turnright.key) then SetEntityHeading(objectRes, GetEntityHeading(objectRes)+1) end if IsControlPressed(0, Config.Controls.slow.key) and IsControlJustPressed(0, Config.Controls.turnleft.key) then SetEntityHeading(objectRes, GetEntityHeading(objectRes)-0.1) elseif IsControlPressed(0, Config.Controls.fast.key) and IsControlJustPressed(0, Config.Controls.turnleft.key) then SetEntityHeading(objectRes, GetEntityHeading(objectRes)-10) elseif IsControlJustPressed(0, Config.Controls.turnleft.key) then SetEntityHeading(objectRes, GetEntityHeading(objectRes)-1) end if IsControlJustPressed(0, Config.Controls.finish.key) then menu:Visible(true) break end end end function moveObject(objectRes, menu) menu:Visible(false) AddTextEntry('text', Translation[Config.Locale]['controls'] ..'~n~~' .. Config.Controls.moveright.name .. '~' .. Translation[Config.Locale]['move_right'] .. '~n~~' .. Config.Controls.moveleft.name .. '~' .. Translation[Config.Locale]['move_left'] .. '~n~~' .. Config.Controls.moveup.name .. '~' .. Translation[Config.Locale]['move_forward'] .. '~n~~' .. Config.Controls.movedown.name .. '~' .. Translation[Config.Locale]['move_backwards'] .. '~n~~' .. Config.Controls.fast.name .. '~' .. Translation[Config.Locale]['move_fast'] .. '~n~~' .. Config.Controls.slow.name .. '~' .. Translation[Config.Locale]['move_slow'] .. '~n~~' .. Config.Controls.finish.name .. '~' .. Translation[Config.Locale]['back_to_menu'] .. '~n~~' ) while true do Wait(0) BeginTextCommandDisplayHelp('text') EndTextCommandDisplayHelp(false, false, false, -1) if IsControlPressed(0, Config.Controls.slow.key) and IsControlJustPressed(0, Config.Controls.moveright.key) then local coords = GetEntityCoords(objectRes) SetEntityCoords(objectRes, coords.x+0.1, coords.y, coords.z) PlaceObjectOnGroundProperly(objectRes) elseif IsControlPressed(0, Config.Controls.fast.key) and IsControlJustPressed(0, Config.Controls.moveright.key) then local coords = GetEntityCoords(objectRes) SetEntityCoords(objectRes, coords.x+1, coords.y, coords.z) PlaceObjectOnGroundProperly(objectRes) elseif IsControlJustPressed(0, Config.Controls.moveright.key) then local coords = GetEntityCoords(objectRes) SetEntityCoords(objectRes, coords.x+.05, coords.y, coords.z) PlaceObjectOnGroundProperly(objectRes) end if IsControlPressed(0, Config.Controls.slow.key) and IsControlJustPressed(0, Config.Controls.moveleft.key) then local coords = GetEntityCoords(objectRes) SetEntityCoords(objectRes, coords.x-0.1, coords.y, coords.z) PlaceObjectOnGroundProperly(objectRes) elseif IsControlPressed(0, Config.Controls.fast.key) and IsControlJustPressed(0, Config.Controls.moveleft.key) then local coords = GetEntityCoords(objectRes) SetEntityCoords(objectRes, coords.x-1, coords.y, coords.z) PlaceObjectOnGroundProperly(objectRes) elseif IsControlJustPressed(0, Config.Controls.moveleft.key) then local coords = GetEntityCoords(objectRes) SetEntityCoords(objectRes, coords.x-0.5, coords.y, coords.z) PlaceObjectOnGroundProperly(objectRes) end if IsControlPressed(0, Config.Controls.slow.key) and IsControlJustPressed(0, Config.Controls.moveup.key) then local coords = GetEntityCoords(objectRes) SetEntityCoords(objectRes, coords.x, coords.y+0.1, coords.z) PlaceObjectOnGroundProperly(objectRes) elseif IsControlPressed(0, Config.Controls.fast.key) and IsControlJustPressed(0, Config.Controls.moveup.key) then local coords = GetEntityCoords(objectRes) SetEntityCoords(objectRes, coords.x, coords.y+1, coords.z) PlaceObjectOnGroundProperly(objectRes) elseif IsControlJustPressed(0, Config.Controls.moveup.key) then local coords = GetEntityCoords(objectRes) SetEntityCoords(objectRes, coords.x, coords.y+0.5, coords.z) PlaceObjectOnGroundProperly(objectRes) end if IsControlPressed(0, Config.Controls.slow.key) and IsControlJustPressed(0, Config.Controls.movedown.key) then local coords = GetEntityCoords(objectRes) SetEntityCoords(objectRes, coords.x, coords.y-0.1, coords.z) PlaceObjectOnGroundProperly(objectRes) elseif IsControlPressed(0, Config.Controls.fast.key) and IsControlJustPressed(0, Config.Controls.movedown.key) then local coords = GetEntityCoords(objectRes) SetEntityCoords(objectRes, coords.x, coords.y-1, coords.z) PlaceObjectOnGroundProperly(objectRes) elseif IsControlJustPressed(0, Config.Controls.movedown.key) then local coords = GetEntityCoords(objectRes) SetEntityCoords(objectRes, coords.x, coords.y-0.5, coords.z) PlaceObjectOnGroundProperly(objectRes) end if IsControlJustPressed(0, Config.Controls.finish.key) then menu:Visible(true) break end end end function moveUpDown(objectRes, menu) menu:Visible(false) AddTextEntry('text', Translation[Config.Locale]['controls'] ..'~n~~' .. Config.Controls.movehigher.name .. '~' .. Translation[Config.Locale]['move_higher'] .. '~n~~' .. Config.Controls.movelower.name .. '~' .. Translation[Config.Locale]['move_lower'] .. '~n~~' .. Config.Controls.fast.name .. '~' .. Translation[Config.Locale]['move_fast'] .. '~n~~' .. Config.Controls.slow.name .. '~' .. Translation[Config.Locale]['move_slow'] .. '~n~~' .. Config.Controls.finish.name .. '~' .. Translation[Config.Locale]['back_to_menu'] .. '~n~~' ) while true do Wait(0) BeginTextCommandDisplayHelp('text') EndTextCommandDisplayHelp(false, false, false, -1) if IsControlPressed(0, Config.Controls.slow.key) and IsControlJustPressed(0, Config.Controls.movehigher.key) then local coords = GetEntityCoords(objectRes) SetEntityCoords(objectRes, coords.x, coords.y, coords.z+0.025) elseif IsControlPressed(0, Config.Controls.fast.key) and IsControlJustPressed(0, Config.Controls.movehigher.key) then local coords = GetEntityCoords(objectRes) SetEntityCoords(objectRes, coords.x, coords.y, coords.z+0.25) elseif IsControlJustPressed(0, Config.Controls.movehigher.key) then local coords = GetEntityCoords(objectRes) SetEntityCoords(objectRes, coords.x, coords.y, coords.z+0.125) end if IsControlPressed(0, Config.Controls.slow.key) and IsControlJustPressed(0, Config.Controls.movelower.key) then local coords = GetEntityCoords(objectRes) SetEntityCoords(objectRes, coords.x, coords.y, coords.z-0.025) elseif IsControlPressed(0, Config.Controls.fast.key) and IsControlJustPressed(0, Config.Controls.movelower.key) then local coords = GetEntityCoords(objectRes) SetEntityCoords(objectRes, coords.x, coords.y, coords.z-0.25) elseif IsControlJustPressed(0, Config.Controls.movelower.key) then local coords = GetEntityCoords(objectRes) SetEntityCoords(objectRes, coords.x, coords.y, coords.z-0.125) end if IsControlJustPressed(0, Config.Controls.finish.key) then menu:Visible(true) break end end end function KeyboardInput(TextEntry, ExampleText, MaxStringLenght) AddTextEntry('FMMC_KEY_TIP1', TextEntry) DisplayOnscreenKeyboard(1, "FMMC_KEY_TIP1", "", ExampleText, "", "", "", MaxStringLenght) blockinput = true while UpdateOnscreenKeyboard() ~= 1 and UpdateOnscreenKeyboard() ~= 2 do Citizen.Wait(0) end if UpdateOnscreenKeyboard() ~= 2 then local result = GetOnscreenKeyboardResult() Citizen.Wait(500) blockinput = false return result else Citizen.Wait(500) blockinput = false return nil end end