Merge branch 'esx-framework:main' into main

This commit is contained in:
bitpredator
2022-11-01 18:08:36 +01:00
committed by GitHub
13 changed files with 207 additions and 167 deletions
+13 -28
View File
@@ -1,32 +1,17 @@
CreateThread(function()
local isDead = false
while true do
local sleep = 1500
local player = PlayerId()
if NetworkIsPlayerActive(player) then
local playerPed = PlayerPedId()
if IsPedFatallyInjured(playerPed) and not isDead then
sleep = 0
isDead = true
local killerEntity, deathCause = GetPedSourceOfDeath(playerPed), GetPedCauseOfDeath(playerPed)
local killerClientId = NetworkGetPlayerIndexFromPed(killerEntity)
if killerEntity ~= playerPed and killerClientId and NetworkIsPlayerActive(killerClientId) then
PlayerKilledByPlayer(GetPlayerServerId(killerClientId), killerClientId, deathCause)
else
PlayerKilled(deathCause)
end
elseif not IsPedFatallyInjured(playerPed) and isDead then
sleep = 0
isDead = false
end
AddEventHandler('gameEventTriggered', function(event, data)
if event ~= 'CEventNetworkEntityDamage' then return end
local victim, victimDied = data[1], data[4]
if not IsPedAPlayer(victim) then return end
local player = PlayerId()
local playerPed = PlayerPedId()
if victimDied and NetworkGetPlayerIndexFromPed(victim) == player and IsPedDeadOrDying(victim, true) then
local killerEntity, deathCause = GetPedSourceOfDeath(playerPed), GetPedCauseOfDeath(playerPed)
local killerClientId = NetworkGetPlayerIndexFromPed(killerEntity)
if killerEntity ~= playerPed and killerClientId and NetworkIsPlayerActive(killerClientId) then
PlayerKilledByPlayer(GetPlayerServerId(killerClientId), killerClientId, deathCause)
else
PlayerKilled(deathCause)
end
Wait(sleep)
end
end)
+7 -3
View File
@@ -300,10 +300,14 @@ function CreateExtendedPlayer(playerId, identifier, group, accounts, inventory,
end
function self.canCarryItem(name, count, metadata)
local currentWeight, itemWeight = self.weight, ESX.Items[name].weight
local newWeight = currentWeight + (itemWeight * count)
if ESX.Items[name] then
local currentWeight, itemWeight = self.weight, ESX.Items[name].weight
local newWeight = currentWeight + (itemWeight * count)
return newWeight <= self.maxWeight
return newWeight <= self.maxWeight
else
print(('[^3WARNING^7] Item ^5"%s"^7 was used but does not exist!'):format(name))
end
end
function self.canSwapItem(firstItem, firstItemCount, testItem, testItemCount)
+100 -96
View File
@@ -1,7 +1,8 @@
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="nui://game/ui/jquery.js" type="text/javascript"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css">
@@ -9,7 +10,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>ESX Context HUD</title>
<style type="text/css">
<style type="text/css">
:root {
--item-main: #242424;
--item-unselectable: #161616;
@@ -17,7 +18,8 @@
--item-disabled: #393939;
}
html,body {
html,
body {
margin: 0;
padding: 0;
outline: none;
@@ -48,20 +50,20 @@
.center {
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
left: 50%;
transform: translate(-50%, -50%);
}
.left {
top: 50%;
left: 25%;
transform: translate(-50%,-50%);
left: 25%;
transform: translate(-50%, -50%);
}
.right {
top: 50%;
left: 75%;
transform: translate(-50%,-50%);
left: 75%;
transform: translate(-50%, -50%);
}
.item {
@@ -76,17 +78,17 @@
background: var(--item-hover);
}
.item > i {
.item>i {
text-align: center;
}
.item > div {
.item>div {
display: flex;
flex-direction: column;
gap: 5px;
}
.item > div > i {
.item>div>i {
opacity: 0.5;
}
@@ -135,100 +137,101 @@
}
::-webkit-scrollbar-thumb {
background: rgb(20,20,20);
border-radius: 5px;
background: rgb(20, 20, 20);
border-radius: 5px;
}
::-webkit-scrollbar-thumb:hover {
background: rgb(30,30,30);
background: rgb(30, 30, 30);
}
.container {
display: flex;
position: relative;
cursor: pointer;
font-size: 14px;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
flex-direction: row-reverse;
align-items: center;
justify-content: flex-end;
gap: 5px;
display: flex;
position: relative;
cursor: pointer;
font-size: 14px;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
flex-direction: row-reverse;
align-items: center;
justify-content: flex-end;
gap: 5px;
}
/* Hide the browser's default checkbox */
.container input {
position: relative;
opacity: 0;
cursor: pointer;
height: 0;
width: 0;
position: relative;
opacity: 0;
cursor: pointer;
height: 0;
width: 0;
}
/* Create a custom checkbox */
.checkmark {
position: relative;
height: 10px;
width: 10px;
border-radius: 8px;
background-color: #eee;
position: relative;
height: 10px;
width: 10px;
border-radius: 8px;
background-color: #eee;
}
/* On mouse-over, add a grey background color */
.container:hover input ~ .checkmark {
background-color: #ccc;
.container:hover input~.checkmark {
background-color: #ccc;
}
/* When the checkbox is checked, add a blue background */
.container input:checked ~ .checkmark {
background-color: #2196F3;
.container input:checked~.checkmark {
background-color: #2196F3;
}
/* Create the checkmark/indicator (hidden when not checked) */
.checkmark:after {
content: "";
position: relative;
display: none;
content: "";
position: relative;
display: none;
}
/* Show the checkmark when checked */
.container input:checked ~ .checkmark:after {
display: block;
.container input:checked~.checkmark:after {
display: block;
}
</style>
</head>
<body>
<div id="container" class="right">
<div class="item unselectable">
<i class="fas fa-info-circle"></i>
<i class="fas fa-info-circle"></i>
<div>
<b>Unselectable Item</b>
<i>Testing, testing a description here.</i>
</div>
</div>
<div class="item disabled">
<i class="fas fa-times"></i>
<i class="fas fa-times"></i>
<div>
<b>Disabled Item</b>
<i>Testing, testing a description here.</i>
</div>
</div>
<div class="item">
<i class="fas fa-check"></i>
<i class="fas fa-check"></i>
<div>
<b>Item</b>
<i>Testing, testing a description here. Generic words to force overflow.</i>
</div>
</div>
</div>
</div>
<script type="text/javascript">
const container = document.getElementById("container")
const CreateElement = (tag = "div",className = "",parent) => {
const CreateElement = (tag = "div", className = "", parent) => {
const e = document.createElement(tag)
e.className = className
@@ -239,48 +242,48 @@
return e
}
function Open(eles,position = "right") {
function Open(eles, position = "right") {
container.innerHTML = ""
container.className = position
for (let i=0;i<eles.length;i++) {
for (let i = 0; i < eles.length; i++) {
let ele = eles[i]
let item = CreateElement("div","item",container)
let item = CreateElement("div", "item", container)
let icon = CreateElement("i",ele.icon,item)
let div = CreateElement("div","",item)
let icon = CreateElement("i", ele.icon, item)
let div = CreateElement("div", "", item)
let title = CreateElement("b","",div)
let title = CreateElement("b", "", div)
title.innerHTML = ele.title
if (ele.description) {
let desc = CreateElement("i","",div)
let desc = CreateElement("i", "", div)
desc.innerHTML = ele.description || ""
}
if (ele.input) {
if (ele.inputType == "radio") {
for (let j=0;j<ele.inputValues.length;j++) {
for (let j = 0; j < ele.inputValues.length; j++) {
let v = ele.inputValues[j]
let container = CreateElement("label","container",div)
container.innerHTML = v.text
let container = CreateElement("label", "container", div)
container.innerHTML = v.text
let input = CreateElement("INPUT","",container)
let input = CreateElement("INPUT", "", container)
input.type = "radio"
input.name = i+1
input.name = i + 1
input.checked = (ele.inputValue || ele.inputPlaceholder || -1) == v.value
let span = CreateElement("SPAN","checkmark",container)
let span = CreateElement("SPAN", "checkmark", container)
input.onchange = function() {
$.post(`https://${GetParentResourceName()}/changed`,JSON.stringify({
index:i+1,
value:v.value
}))
input.onchange = function () {
$.post(`https://${GetParentResourceName()}/changed`, JSON.stringify({
index: i + 1,
value: v.value
}))
}
}
} else {
let input = CreateElement("input","",div)
let input = CreateElement("input", "", div)
input.type = ele.inputType
if (ele.inputValue) {
@@ -296,34 +299,34 @@
if (ele.inputMin) input.min = ele.inputMin;
if (ele.inputMax) input.max = ele.inputMax;
input.onchange = function() {
input.onchange = function () {
let v = Number(input.value)
if (ele.inputMin) {
v = Math.max(ele.inputMin,v)
v = Math.max(ele.inputMin, v)
}
if (ele.inputMax) {
v = Math.min(ele.inputMax,v)
v = Math.min(ele.inputMax, v)
}
input.value = v
input.value = v
$.post(`https://${GetParentResourceName()}/changed`,JSON.stringify({
index:i+1,
value:v
}))
$.post(`https://${GetParentResourceName()}/changed`, JSON.stringify({
index: i + 1,
value: v
}))
}
break
break
case "text":
input.onchange = function() {
$.post(`https://${GetParentResourceName()}/changed`,JSON.stringify({
index:i+1,
value:input.value
}))
input.onchange = function () {
$.post(`https://${GetParentResourceName()}/changed`, JSON.stringify({
index: i + 1,
value: input.value
}))
}
break
break
}
}
} else {
@@ -332,9 +335,9 @@
} else if (ele.unselectable) {
item.className += " unselectable"
} else if (!ele.input) {
item.onclick = function() {
$.post(`https://${GetParentResourceName()}/selected`,JSON.stringify({
index:i+1
item.onclick = function () {
$.post(`https://${GetParentResourceName()}/selected`, JSON.stringify({
index: i + 1
}))
}
}
@@ -353,7 +356,7 @@
Closed()
}
window.addEventListener("message",(e) => {
window.addEventListener("message", (e) => {
let data = e.data
if (!data.func || !window[data.func]) {
@@ -363,14 +366,14 @@
window[data.func](...data.args)
})
window.addEventListener("keydown",(e) => {
if (e.key == "Escape" || e.key == "Backspace") {
if (e.target.tagName.toLowerCase() == "input") {
return
}
window.addEventListener("keydown", (e) => {
if (e.key == "Escape" || e.key == "Backspace") {
if (e.target.tagName.toLowerCase() == "input") {
return
}
Close()
}
Close()
}
})
// Open([
@@ -433,4 +436,5 @@
// ])
</script>
</body>
</html>
+2 -2
View File
@@ -172,11 +172,11 @@ local function StartThread()
PedHandler(closestPed)
end
if not isInMenu and IsPedOnFoot(PlayerPedId()) then
if IsPedOnFoot(PlayerPedId()) then
local closestBank = {}
for i = 1, #Config.AtmModels do
local atm = GetClosestObjectOfType(_GetEntityCoords, 3.0, Config.AtmModels[i], false)
local atm = GetClosestObjectOfType(_GetEntityCoords, 8.0, Config.AtmModels[i], false)
if atm ~= 0 then
local atmOffset = GetOffsetFromEntityInWorldCoords(atm, 0.0, -0.7, 0.0)
local atmHeading = GetEntityHeading(atm)
+2 -2
View File
@@ -48,7 +48,7 @@ AddEventHandler('esx_banking:doingType', function(typeData)
end
amount = ESX.Math.Round(amount)
if amount == nil or amount <= 0 then
if amount == nil or (not typeData.pincode and amount <= 0) then
TriggerClientEvent("esx:showNotification", source, TranslateCap('invalid_amount'), "error")
else
if typeData.deposit and amount <= money then
@@ -79,7 +79,7 @@ AddEventHandler('esx_banking:doingType', function(typeData)
TriggerClientEvent("esx:showNotification", source,
TranslateCap(string.format('%s_money', key), amount, typeData.transfer.playerId), "success")
else
TriggerClientEvent("esx:showNotification", source, TranslateCap(string.format('%s_money', key), amount), "success")
TriggerClientEvent("esx:showNotification", source, TranslateCap(string.format('%s_money', key), typeData.pincode and (string.format("%04d", amount)) or amount), "success")
end
if not typeData.pincode then
BANK.LogTransaction(source, string.upper(key), amount, bankMoney)
+14 -3
View File
@@ -17,6 +17,15 @@ AddEventHandler('esx_lscustom:installMod', function()
TriggerServerEvent('esx_lscustom:refreshOwnedVehicle', myCar)
end)
RegisterNetEvent('esx_lscustom:restoreMods', function(netId, props)
local xVehicle = NetworkGetEntityFromNetworkId(netId)
if props ~= nil then
if DoesEntityExist(xVehicle) then
ESX.Game.SetVehicleProperties(xVehicle, props)
end
end
end)
RegisterNetEvent('esx_lscustom:cancelInstallMod')
AddEventHandler('esx_lscustom:cancelInstallMod', function()
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
@@ -51,7 +60,6 @@ AddEventHandler('onResourceStop', function(resource)
end
end)
function OpenLSMenu(elems, menuName, menuTitle, parent)
ESX.UI.Menu.Open('default', GetCurrentResourceName(), menuName, {
title = menuTitle,
@@ -82,7 +90,7 @@ function OpenLSMenu(elems, menuName, menuTitle, parent)
break
end
end
if isRimMod then
price = math.floor(vehiclePrice * data.current.price / 100)
TriggerServerEvent('esx_lscustom:buyMod', price)
@@ -120,6 +128,7 @@ function OpenLSMenu(elems, menuName, menuTitle, parent)
lsMenuIsShowed = false
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
FreezeEntityPosition(vehicle, false)
TriggerServerEvent('esx_lscustom:stopModing', myCar.plate)
myCar = {}
end
end, function(data, menu) -- on change
@@ -170,7 +179,6 @@ function GetAction(data)
local playerPed = PlayerPedId()
local vehicle = GetVehiclePedIsIn(playerPed, false)
local currentMods = ESX.Game.GetVehicleProperties(vehicle)
if data.value == 'modSpeakers' or data.value == 'modTrunk' or data.value == 'modHydrolic' or data.value ==
'modEngineBlock' or data.value == 'modAirFilter' or data.value == 'modStruts' or data.value == 'modTank' then
SetVehicleDoorOpen(vehicle, 4, false)
@@ -503,6 +511,9 @@ CreateThread(function()
local vehicle = GetVehiclePedIsIn(playerPed, false)
FreezeEntityPosition(vehicle, true)
myCar = ESX.Game.GetVehicleProperties(vehicle)
local netId = NetworkGetNetworkIdFromEntity(vehicle)
TriggerServerEvent('esx_lscustom:startModing', myCar, netId)
ESX.UI.Menu.CloseAll()
GetAction({
+37 -1
View File
@@ -1,4 +1,40 @@
local Vehicles
local Customs = {}
RegisterNetEvent('esx_lscustom:startModing', function(props, netId)
local src = tostring(source)
if Customs[src] then
Customs[src][props.plate] = {props = props, netId = netId}
else
Customs[src] = {}
Customs[src][props.plate] = {props = props, netId = netId}
end
end)
RegisterNetEvent('esx_lscustom:stopModing', function(plate)
local src = tostring(source)
if Customs[src] then
Customs[src][tostring(plate)] = nil
end
end)
AddEventHandler('esx:playerDropped', function(src)
src = tostring(src)
local playersCount = #ESX.GetExtendedPlayers()
if Customs[src] then
for k,v in pairs(Customs[src]) do
local entity = NetworkGetEntityFromNetworkId(v.netId)
if DoesEntityExist(entity) then
if players > 0 then
TriggerClientEvent('esx_lscustom:restoreMods', -1, v.netId, v.props)
else
DeleteEntity(entity)
end
end
end
Customs[src] = nil
end
end)
RegisterServerEvent('esx_lscustom:buyMod')
AddEventHandler('esx_lscustom:buyMod', function(price)
@@ -41,9 +77,9 @@ AddEventHandler('esx_lscustom:refreshOwnedVehicle', function(vehicleProps)
function(result)
if result then
local vehicle = json.decode(result.vehicle)
if vehicleProps.model == vehicle.model then
MySQL.update('UPDATE owned_vehicles SET vehicle = ? WHERE plate = ?', {json.encode(vehicleProps), vehicleProps.plate})
Customs[tostring(source)][tostring(vehicleProps.plate)].props = props
else
print(('[^3WARNING^7] Player ^5%s^7 Attempted To upgrade with mismatching vehicle model'):format(xPlayer.source))
end
+2 -2
View File
@@ -14,7 +14,7 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
]]
]]
function CCTV(PropertyID)
DoScreenFadeOut(500)
Wait(500)
@@ -70,7 +70,7 @@ function CCTV(PropertyID)
PushScaleformMovieFunctionParameterInt(4)
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.CCTV.Controls.ZoomOut, true))
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.CCTV.Controls.ZoomIn, true))
InstructionButtonMessage(TranslateCap("Zoom"))
InstructionButtonMessage(TranslateCap("zoom"))
PopScaleformMovieFunctionVoid()
PushScaleformMovieFunction(scaleform, "SET_DATA_SLOT")
@@ -103,14 +103,14 @@ if Config.Furniture.Enabled then
PushScaleformMovieFunctionParameterInt(5)
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.Furniture.Controls.Up, true))
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.Furniture.Controls.Down, true))
InstructionButtonMessage(TranslateCap("Height"))
InstructionButtonMessage(TranslateCap("height"))
PopScaleformMovieFunctionVoid()
PushScaleformMovieFunction(scaleform, "SET_DATA_SLOT")
PushScaleformMovieFunctionParameterInt(7)
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.Furniture.Controls.RotateLeft, true))
N_0xe83a3e3557a56640(GetControlInstructionalButton(1, Config.Furniture.Controls.RotateRight, true))
InstructionButtonMessage(TranslateCap("Rotation"))
InstructionButtonMessage(TranslateCap("rotate"))
PopScaleformMovieFunctionVoid()
PushScaleformMovieFunction(scaleform, "SET_DATA_SLOT")
+3 -3
View File
@@ -281,7 +281,7 @@ function PropertyMenuElements(PropertyId)
value = 'property_wardrobe'})
end
table.insert(elements,
{title = TranslateCap("Furniture_title"), description = TranslateCap("Furniture_desc"), icon = "fas fa-boxes-stacked", value = 'property_furniture'})
{title = TranslateCap("furniture_title"), description = TranslateCap("furniture_desc"), icon = "fas fa-boxes-stacked", value = 'property_furniture'})
end
end
if (not Property.Locked or Config.OwnerCanAlwaysEnter and ESX.PlayerData.identifier == Property.Owner) and not InProperty then
@@ -454,7 +454,7 @@ function OpenPropertyMenu(PropertyId)
local eles = PropertyMenuElements(PropertyId)
exports["esx_context"]:Refresh(eles)
else
ESX.ShowNotification(TranslateCap("cannot_Sell"), "error")
ESX.ShowNotification(TranslateCap("cannot_sell"), "error")
end
end, PropertyId, element.value)
end
@@ -476,7 +476,7 @@ function OpenPropertyMenu(PropertyId)
local eles = PropertyMenuElements(PropertyId)
exports["esx_context"]:Refresh(eles)
else
ESX.ShowNotification(TranslateCap("cannot_Sell"), "error")
ESX.ShowNotification(TranslateCap("cannot_sell"), "error")
end
end, PropertyId)
end
+9 -9
View File
@@ -4,8 +4,8 @@ Locales['en'] = {
["take_picture"] = "Take Picture",
["rot_left_right"] = "Left/Right",
["rot_up_down"] = "Up/Down",
["Zoom"] = "Zoom In/Out",
["Zoom_level"] = "Zoom Level: %s %",
["zoom"] = "Zoom In/Out",
["zoom_level"] = "Zoom Level: %s %",
["night_vision"] = "Toggle Night Vision",
["clipboard"] = "Link Copied To ~b~Cipboard",
["picture_taken"] = "Picture Taken!",
@@ -14,7 +14,7 @@ Locales['en'] = {
--- Furniture Strings ------
["Height"] = "Height",
["height"] = "Height",
["rotate"] = "Rotation",
["place"] = "Place Furniture",
["delete_furni"] = "Delete",
@@ -41,7 +41,7 @@ Locales['en'] = {
["menu_edit"] = "Edit",
["menu_edit_desc"] = "Move and/or Delete furniture items",
["furni_command"] = "furniture",
["furni_Command_desc"] = "(ESX Property) Open Furniture Menu",
["furni_command_desc"] = "(ESX Property) Open Furniture Menu",
["furni_command_permission"] = "You ~r~Cannot~s~ Access This Menu!",
["furni_reset_success"] = "Furniture Reset!",
["furni_cannot_afford"] = "You Cannot Afford Todo this!",
@@ -113,8 +113,8 @@ Locales['en'] = {
["inventory_desc"] = "Change Position of Property Storage.",
["wardrobe_title"] = "Wardrobe",
["wardrobe_desc"] = "Change Position of Property Wardrobe.",
["Furniture_title"] = "Furniture",
["Furniture_desc"] = "Change Position of Property Furniture.",
["furniture_title"] = "Furniture",
["furniture_desc"] = "Change Position of Property Furniture.",
["enter_title"] = "Enter",
["knock_title"] = "Knock On Door",
["buy_title"] = "Buy",
@@ -139,11 +139,11 @@ Locales['en'] = {
["please_finish"] = "Please Finish Setting ~b~%s~s~ Position",
["cannot_afford"] = "You Cannot Purchase This Property!",
["select_player"] = "Select Player",
["cannot_Sell"] = "Cannot Sell To This Player!",
["cannot_sell"] = "Cannot Sell To This Player!",
["knock_on_door"] = "Knocking On Door...",
["nobody_home"] = "It Seems Nobody is home...",
---------- General Strings ----------------
---------- General Strings ----------------
["enabled"] = "Enabled",
["disabled"] = "Disabled",
@@ -166,7 +166,7 @@ Locales['en'] = {
["cannot_access_property"] = 'You ~r~Cannot~s~ Access this property.',
----------------- Creation Menu Strings ----------------
----------------- Creation Menu Strings ----------------
["menu_title"] = "Property Creation",
["element_title1"] = "Street Number",
+9 -9
View File
@@ -4,8 +4,8 @@ Locales['nl'] = {
["take_picture"] = "Neem foto",
["rot_left_right"] = "Links/Rechts",
["rot_up_down"] = "Omhoog/Omblaag",
["Zoom"] = "Zoom In/Uit",
["Zoom_level"] = "Zoom Level: %s %",
["zoom"] = "Zoom In/Uit",
["zoom_level"] = "Zoom Level: %s %",
["night_vision"] = "Nachtcamera aanzetten",
["clipboard"] = "Link gekopierd naar ~b~klembord",
["picture_taken"] = "Foto genomen!",
@@ -14,7 +14,7 @@ Locales['nl'] = {
--- Furniture Strings ------
["Height"] = "Hoogte",
["height"] = "Hoogte",
["rotate"] = "Rotatie",
["place"] = "Plaats Meubel",
["delete_furni"] = "Verwijder",
@@ -41,7 +41,7 @@ Locales['nl'] = {
["menu_edit"] = "Aanpassen",
["menu_edit_desc"] = "Verplaats en/of verwijder meubels",
["furni_command"] = "meubel",
["furni_Command_desc"] = "(ESX Property) Open meubel menu",
["furni_command_desc"] = "(ESX Property) Open meubel menu",
["furni_command_permission"] = "Je ~r~Kan dit~s~ menu niet betreden!",
["furni_reset_success"] = "Meubel Reset!",
["furni_cannot_afford"] = "Je kan dit niet betalen!",
@@ -113,8 +113,8 @@ Locales['nl'] = {
["inventory_desc"] = "Verander positie van de berging.",
["wardrobe_title"] = "Kledingkast",
["wardrobe_desc"] = "Verander de positie van de kledingkast.",
["Furniture_title"] = "Meubels",
["Furniture_desc"] = "Verander de positie van een meubel",
["furniture_title"] = "Meubels",
["furniture_desc"] = "Verander de positie van een meubel",
["enter_title"] = "Ga naar binnen",
["knock_title"] = "Klop op de deur",
["buy_title"] = "Koop",
@@ -139,11 +139,11 @@ Locales['nl'] = {
["please_finish"] = "Maak het plaatsen van ~b~%s~s~ eerst af.",
["cannot_afford"] = "Je kan dit gebouw niet kopen!",
["select_player"] = "Selecteer speler",
["cannot_Sell"] = "Kan niet aan deze speler verkopen!",
["cannot_sell"] = "Kan niet aan deze speler verkopen!",
["knock_on_door"] = "Op deur kloppen...",
["nobody_home"] = "Lijkt erop alsof niemand thuis is...",
---------- General Strings ----------------
---------- General Strings ----------------
["enabled"] = "Aan",
["disabled"] = "Uit",
@@ -166,7 +166,7 @@ Locales['nl'] = {
["cannot_access_property"] = 'Je ~r~kan niet~s~ dit gebouw betreden.',
----------------- Creation Menu Strings ----------------
----------------- Creation Menu Strings ----------------
["menu_title"] = "Gebouw creatie",
["element_title1"] = "Straat nummer",
+7 -7
View File
@@ -4,8 +4,8 @@ Locales['tc'] = {
["take_picture"] = "拍攝照片",
["rot_left_right"] = "左/右",
["rot_up_down"] = "上/下",
["Zoom"] = "放大/縮小",
["Zoom_level"] = "縮放等級: %s %",
["zoom"] = "放大/縮小",
["zoom_level"] = "縮放等級: %s %",
["night_vision"] = "切換夜視模式",
["clipboard"] = "圖片連結已複製至 ~b~剪貼簿",
["picture_taken"] = "已拍攝照片!",
@@ -14,7 +14,7 @@ Locales['tc'] = {
--- Furniture Strings ------
["Height"] = "高度",
["height"] = "高度",
["rotate"] = "角度",
["place"] = "放置家具",
["delete_furni"] = "移除",
@@ -41,7 +41,7 @@ Locales['tc'] = {
["menu_edit"] = "編輯",
["menu_edit_desc"] = "移動、移除家具物品",
["furni_command"] = "furniture",
["furni_Command_desc"] = "(ESX Property) 打開家具選單",
["furni_command_desc"] = "(ESX Property) 打開家具選單",
["furni_command_permission"] = "你 ~r~沒有~s~ 此選單的權限!",
["furni_reset_success"] = "家具已重設!",
["furni_cannot_afford"] = "你沒有足夠的金錢進行此操作!",
@@ -113,8 +113,8 @@ Locales['tc'] = {
["inventory_desc"] = "移動房產儲物櫃的位置",
["wardrobe_title"] = "衣櫃",
["wardrobe_desc"] = "移動房產衣櫃的位置",
["Furniture_title"] = "家具",
["Furniture_desc"] = "移動房產家具的位置",
["furniture_title"] = "家具",
["furniture_desc"] = "移動房產家具的位置",
["enter_title"] = "進入",
["knock_title"] = "敲門",
["buy_title"] = "購買",
@@ -139,7 +139,7 @@ Locales['tc'] = {
["please_finish"] = "請完成 ~b~%s~s~ 的位置設定",
["cannot_afford"] = "你無法購買這個房產!",
["select_player"] = "選擇對象",
["cannot_Sell"] = "無法賣給對方!",
["cannot_sell"] = "無法賣給對方!",
["knock_on_door"] = "敲門…",
["nobody_home"] = "看起來沒人在家…",