mirror of
https://github.com/esx-framework/esx_core.git
synced 2026-08-29 09:18:53 +00:00
Merge branch 'esx-framework:main' into main
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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
@@ -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>
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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({
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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"] = "看起來沒人在家…",
|
||||
|
||||
|
||||
Reference in New Issue
Block a user