Merge pull request #5 from esx-framework/main

Merge
This commit is contained in:
Alessandro Alterno
2022-11-05 16:14:07 +01:00
committed by GitHub
22 changed files with 507 additions and 229 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)
+1 -1
View File
@@ -60,7 +60,7 @@ Config.RemoveHudCommonents = {
[22] = false, --HUD_WEAPONS
}
Config.MaxAdminVehicles = true -- admin vehicles spawn with max vehcle settings
Config.MaxAdminVehicles = false -- admin vehicles spawn with max vehcle settings
Config.CustomAIPlates = 'ESX.A111' -- Custom plates for AI vehicles
-- Pattern string format
--1 will lead to a random number from 0-9.
+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)
+2 -2
View File
@@ -16,7 +16,7 @@ Core.PlayerFunctionOverrides = {}
AddEventHandler('esx:getSharedObject', function(cb)
local Invoke = GetInvokingResource()
print(('[^3WARNING^7] ^5%s^7 used ^5esx:getSharedObject^7, this method is deprecated and should not be used! Refer to ^5https://docs.esx-framework.org/tutorials/sharedevent^7 for more info!'):format(Invoke))
print(('[^3WARNING^7] ^5%s^7 used ^5esx:getSharedObject^7, this method is deprecated and should not be used, On 30/11/2022 esx:getSharedObject will come to EOL and be fully removed! Refer to ^5https://docs.esx-framework.org/tutorials/sharedevent^7 for more info!'):format(Invoke))
cb(ESX)
end)
@@ -121,4 +121,4 @@ RegisterNetEvent("esx:ReturnVehicleType", function(Type, Request)
Core.ClientCallbacks[Request](Type)
Core.ClientCallbacks[Request] = nil
end
end)
end)
+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>
-1
View File
@@ -29,7 +29,6 @@ files {
'html/index.html',
'html/js/script.js',
'html/css/style.css',
'html/img/esx_identity.png'
}
dependency 'es_extended'
Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

+1 -1
View File
@@ -182,7 +182,7 @@ if ESX.GetConfig().Multichar then
elements[#elements+1] = {title = label,icon = "fa-regular fa-user", value = v.id}
end
end
if #elements < slots then
if #elements - 1 < slots then
elements[#elements+1] = {title = _('create_char'), icon = "fa-solid fa-plus", value = (#elements+1), new = true}
end
+4 -57
View File
@@ -74,20 +74,6 @@ local function PedHandler(ids)
SetPedCanRagdoll(npc, false)
SetEntityAsMissionEntity(npc, true, true)
SetEntityDynamic(npc, false)
if Config.Target then
exports.ox_target:addGlobalPed(npc, {
options = {{
icon = "fas fa-money-bill-wave",
label = TranslateCap('access_bank'),
action = function()
OpenUi()
end
}},
distance = 2
})
end
Peds[id] = npc
end
end
@@ -105,9 +91,6 @@ local function PedHandler(ids)
if del then
DeletePed(handle)
if Config.Target then
exports.ox_target:removeGlobalPed(handle, {TranslateCap('access_bank')})
end
end
end
@@ -117,9 +100,7 @@ end
function OpenUi(atm)
atm = atm or false
isInMenu = true
if not Config.Target then
ESX.HideUI()
end
ESX.HideUI()
ESX.TriggerServerCallback('esx_banking:getPlayerData', function(data)
SendNUIMessage({
showMenu = true,
@@ -154,7 +135,7 @@ local function CloseUi()
showMenu = false
})
if not Config.Target and (isInMarker or isInAtmMarker) then
if (isInMarker or isInAtmMarker) then
ESX.TextUI(TranslateCap('press_e_banking'))
Listen4Key()
end
@@ -174,40 +155,6 @@ local function StartThread()
CreateThread(function()
CreateBlips()
if Config.Target then
exports.ox_target:addModel(Config.AtmModels, {
options = {{
icon = 'fas fa-credit-card',
label = TranslateCap('access_bank'),
action = function()
OpenUi(true)
end
}},
distance = 1.5
})
if not Config.EnablePeds then
for i = 1, #Config.Banks do
local targetInfo = Config.Banks[i].Position
exports.ox_target:addBoxZone('openBank' .. i, targetInfo.xyz, 1.5, 1.5, {
name = 'openBank' .. i,
heading = targetInfo.w,
minZ = targetInfo.z - 1.0,
maxZ = targetInfo.z + 1.5,
debugPoly = Config.Debug
}, {
options = {{
icon = 'fas fa-money-bill-wave',
label = TranslateCap('access_bank'),
action = function()
OpenUi()
end
}},
distance = 2.0
})
end
end
end
while PlayerLoaded do
_PlayerPedId = PlayerPedId()
_GetEntityCoords = GetEntityCoords(_PlayerPedId)
@@ -225,11 +172,11 @@ local function StartThread()
PedHandler(closestPed)
end
if not Config.Target and 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)
-1
View File
@@ -1,7 +1,6 @@
Config = {
Debug = false,
DrawMarker = 10,
Target = false, -- ox_target (https://github.com/overextended/ox_target)
Locale = 'en',
EnablePeds = true,
AtmModels = {`prop_fleeca_atm`, `prop_atm_01`, `prop_atm_02`, `prop_atm_03`},
+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)
+25
View File
@@ -0,0 +1,25 @@
Locales["it"] = {
["parking_blip_name"] = 'Garage',
["Impound_blip_name"] = 'sequestro',
["access_parking"] = 'premi [E] per accedere al parcheggio.',
["access_Impound"] = 'premi [E] per accedere al sequestro.',
["park_veh"] = 'premi [E] per parcheggiare il veicolo.',
["not_owning_veh"] = 'non possiedi questo veicolo!',
['veh_released' ] = ' Veicolo recuperato con successo. ' ,
['veh_Impound_released'] = ' Veicolo recuperato con successo dal sequestro. ' ,
['veh_stored'] = ' Veicolo depositato con successo ' ,
['veh_impounded'] = ' Veicolo sequestrato ' ,
['no_veh_parking'] = ' Nessun veicolo immagazzinato qui. ' ,
['no_veh_impounded'] = ' Nessun veicolo sequestrato. ' ,
['no_veh_Impound'] = ' non hai veicoli sequestrati. ' ,
['veh_model'] = ' Modello ' ,
['veh_plate'] = ' targa ' ,
['veh_condition'] = ' Condizione ' ,
['veh_action ' ] = ' Azione ' ,
['impound_action' ] = ' Sequestro ' ,
['veh_exit' ] = ' Ritira veicolo ' ,
['pay_impound' ] = ' Paga sequestro ' ,
['veh_block' ] = ' Impossibile recuperare il veicolo, la posizione di spawn è bloccata. ' ,
['pay_Impound_bill' ] = 'hai pagato ~g~$%s~s~ al sequestro. ' ,
['missing_money' ] = ' Non hai abbastanza soldi. '
}
+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({
+269
View File
@@ -0,0 +1,269 @@
Locales['it'] = {
['by_default'] = 'default',
['installed'] = 'installato',
['already_own'] = 'possiedi già: %s',
['not_enough_money'] = 'non puoi permetterti questa mod!',
['purchased'] = 'hai acquistato la mod!',
['press_custom'] = 'premi ~b~[E]~s~ per personalizzare il tuo veicolo',
['level'] = 'livello %s',
['neon'] = 'neon',
['blip_name'] = 'los Santos Customs',
-- Paint Colors
-- Black
['black'] = 'nero',
['graphite'] = 'grafite',
['black_metallic'] = 'nero metallico',
['caststeel'] = 'acciaio fuso',
['black_anth'] = 'nero antacite',
['matteblack'] = 'nero opaco',
['darknight'] = 'notte oscura',
['deepblack'] = 'nero profondo',
['oil'] = 'olio',
['carbon'] = 'carbonio',
-- White
['white'] = 'bianco',
['vanilla'] = 'vaniglia',
['creme'] = 'crema',
['polarwhite'] = 'bianco polare',
['beige'] = 'beige',
['mattewhite'] = 'bianco opaco',
['snow'] = 'neve',
['cotton'] = 'cotone',
['alabaster'] = 'alabastro',
['purewhite'] = 'bianco puro',
-- Grey
['grey'] = 'grigio',
['silver'] = 'argento',
['metallicgrey'] = 'grigio metallico',
['laminatedsteel'] = 'acciaio laminato',
['darkgray'] = 'grigio scuro',
['rockygray'] = 'grigio roccioso',
['graynight'] = 'grigio notte',
['aluminum'] = 'alluminio',
['graymat'] = 'grigio opaco',
['lightgrey'] = 'grigio chiaro',
['asphaltgray'] = 'grigio asfalto',
['grayconcrete'] = 'grigio cemento',
['darksilver'] = 'argento scuro',
['magnesite'] = 'magnesite',
['nickel'] = 'nickel',
['zinc'] = 'zinco',
['dolomite'] = 'dolomite',
['bluesilver'] = 'argento blu',
['titanium'] = 'titanio',
['steelblue'] = 'blu acciaio',
['champagne'] = 'champagne',
['grayhunter'] = 'grigio cacciatore',
-- Red
['red'] = 'rosso',
['torino_red'] = 'rosso torino',
['poppy'] = 'papavero',
['copper_red'] = 'rosso rame',
['cardinal'] = 'rosso cardinale',
['brick'] = 'rosso mattone',
['garnet'] = 'Granato',
['cabernet'] = 'rosso cabernet',
['candy'] = 'caramella rossa',
['matte_red'] = 'rosso opaco',
['dark_red'] = 'rosso scuro',
['red_pulp'] = 'polpa rossa',
['bril_red'] = 'rosso brillante',
['pale_red'] = 'rosso pallido',
['wine_red'] = 'vino rosso',
['volcano'] = 'vulcano',
-- Pink
['pink'] = 'rosa',
['electricpink'] = 'rosa elettrico',
['brightpink'] = 'rosa brillante',
['salmon'] = 'rosa salmone',
['sugarplum'] = 'rosa prugna',
-- Blue
['blue'] = 'blu',
['topaz'] = 'blu topazio',
['light_blue'] = 'azzurro',
['galaxy_blue'] = 'blu galassia',
['dark_blue'] = 'blu scuro',
['azure'] = 'azzurro',
['navy_blue'] = 'blu marino',
['lapis'] = 'blu lapislazzulo',
['blue_diamond'] = 'blu diamante',
['surfer'] = 'surfista',
['pastel_blue'] = 'blu pastello',
['celeste_blue'] = 'blu celeste',
['rally_blue'] = 'rally Blue',
['blue_paradise'] = 'blu Paradiso',
['blue_night'] = 'blu notte',
['cyan_blue'] = 'blu ciano',
['cobalt'] = 'cobalto',
['electric_blue'] = 'blue elettrico',
['horizon_blue'] = 'blu orizzonte',
['metallic_blue'] = 'blu metallico',
['aquamarine'] = 'acquamarina',
['blue_agathe'] = 'blu agata',
['zirconium'] = 'zirconio',
['spinel'] = 'spinello',
['tourmaline'] = 'tormalina',
['paradise'] = 'paradiso',
['bubble_gum'] = 'blu gomma',
['midnight_blue'] = 'blu mezzanotte',
['forbidden_blue'] = 'blu proibito',
['glacier_blue'] = 'blu glaciale',
-- Yellow
['yellow'] = 'giallo',
['wheat'] = 'giallo grano',
['raceyellow'] = 'giallo gara',
['paleyellow'] = 'giallo pallido',
['lightyellow'] = 'giallo chiaro',
-- Green
['green'] = 'verde',
['met_dark_green'] = 'verde scuro metallico',
['rally_green'] = 'verde Rally',
['pine_green'] = 'verde pino',
['olive_green'] = 'verde oliva',
['light_green'] = 'verde chiaro',
['lime_green'] = 'verde lime',
['forest_green'] = 'verde foresta',
['lawn_green'] = 'verde prato',
['imperial_green'] = 'verde imperiale',
['green_bottle'] = 'verde bottiglia',
['citrus_green'] = 'verde agrumi',
['green_anis'] = 'verde anici',
['khaki'] = 'cachi',
['army_green'] = 'verde militare',
['dark_green'] = 'verde scuro',
['hunter_green'] = 'verde cacciatore',
['matte_foilage_green'] = 'verde foglia',
-- Orange
['orange'] = 'arancione',
['tangerine'] = 'mandarino',
['matteorange'] = 'arancio opaco',
['lightorange'] = 'arancione chiaro',
['peach'] = 'pesca',
['pumpkin'] = 'zucca',
['orangelambo'] = 'arancione Lambo',
-- Brown
['brown'] = 'marrone',
['copper'] = 'rame',
['lightbrown'] = 'marrone chiaro',
['darkbrown'] = 'marrone scuro',
['bronze'] = 'Bronzo',
['brownmetallic'] = 'marrone metallico',
['expresso'] = 'Espresso',
['chocolate'] = 'cioccolato',
['terracotta'] = 'Terracotta',
['marble'] = 'Marmo',
['sand'] = 'Sabbia',
['sepia'] = 'Seppia',
['bison'] = 'Bisonte',
['palm'] = 'Palmo',
['caramel'] = 'Caramello',
['rust'] = 'Ruggine',
['chestnut'] = 'Castagna',
['hazelnut'] = 'nocciola',
['shell'] = 'guscio',
['mahogany'] = 'Mogano',
['cauldron'] = 'marrone calderone',
['blond'] = 'marrone biondo',
['gravel'] = 'marrone ghiaia',
['darkearth'] = 'marrone terra scura',
['desert'] = 'deserto',
-- Purple
['purple'] = 'viola',
['indigo'] = 'Indaco',
['deeppurple'] = 'viola intenso',
['darkviolet'] = 'viola scuro',
['amethyst'] = 'emetista',
['mysticalviolet'] = 'viola mistico',
['purplemetallic'] = 'viola metallico',
['matteviolet'] = 'viola opaco',
['mattedeeppurple'] = 'viola intenso opaco',
-- Chrome
['chrome'] = 'cromato',
['brushedchrome'] = 'cromato spazzolato',
['blackchrome'] = 'nero gromato',
['brushedaluminum'] = 'alluminio spazzolato',
-- Metal
['gold'] = 'oro',
['puregold'] = 'oro puro',
['brushedgold'] = 'oro spazzolato',
['lightgold'] = 'oro chiaro',
-- License Plates
['blue_on_white_1'] = 'blu su bianco 1',
['yellow_on_black'] = 'giallo su nero',
['yellow_blue'] = 'giallo su blu',
['blue_on_white_2'] = 'blu su bianco 2',
['blue_on_white_3'] = 'blu su bianco 3',
-- Upgrades
['upgrades'] = 'aggiornamenti',
['engine'] = 'motore',
['brakes'] = 'freni',
['transmission'] = 'trasmissione',
['suspension'] = 'ssospensione',
['armor'] = 'armatura',
['turbo'] = 'turbo',
['no_turbo'] = 'no turbo',
-- Cosmetics
['cosmetics'] = 'cosmetici',
-- Body Parts
['bodyparts'] = 'parti del corpo',
['leftfender'] = 'parafango sinistro',
['rightfender'] = 'parafango destro',
['spoilers'] = 'spoiler',
['sideskirt'] = 'gonna laterale',
['cage'] = 'gabbia',
['hood'] = 'cappuccio',
['grille'] = 'griglia',
['rearbumper'] = 'paraurti posteriore',
['frontbumper'] = 'paraurti anteriore',
['exhaust'] = 'scarico',
['roof'] = 'tetto',
-- Paint
['respray'] = 'verici',
['primary'] = 'primaria',
['secondary'] = 'secondaria',
['pearlescent'] = 'perlescente',
-- Misc
['headlights'] = 'fari',
['licenseplates'] = 'targa',
['windowtint'] = 'tinta finestrino',
['horns'] = 'clacson',
-- Neon
['neons'] = 'neons',
-- Wheels
['wheels'] = 'ruote',
['tiresmoke'] = 'fumo pneumatici',
['wheel_type'] = 'tipo di ruota',
['wheel_color'] = 'colore cerchione',
['sport'] = 'sport',
['muscle'] = 'muscle',
['lowrider'] = 'lowrider',
['suv'] = 'SUV',
['allterrain'] = 'tutti i terreni',
['tuning'] = 'tuning',
['motorcycle'] = 'moto',
['highend'] = 'fascia alta',
['modplateholder'] = 'targa - posteriore',
['modvanityplate'] = 'targa - anteriore',
['interior'] = 'interni',
['trim'] = 'trim',
['dashboard'] = 'cruscotto',
['speedometer'] = 'tachimetro',
['door_speakers'] = 'casse audio',
['seats'] = 'sedili',
['steering_wheel'] = 'volante',
['gear_lever'] = 'leva del cambio',
['quarter_deck'] = 'quarter-deck',
['speakers'] = 'altoparlanti',
['trunk'] = 'tronco',
['hydraulic'] = 'idraulica',
['engine_block'] = 'blocco motore',
['air_filter'] = 'filtro aria',
['struts'] = 'puntoni',
['arch_cover'] = 'cover',
['aerials'] = 'antenne',
['wings'] = 'ali',
['fuel_tank'] = 'serbatoio carburante',
['windows'] = 'finestrini',
['stickers'] = 'Livrea',
}
+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"] = "看起來沒人在家…",
-1
View File
@@ -1,5 +1,4 @@
<h1 align='center'>ESX Legacy</a></h1>
<p align="center"><img src="https://docs.esx-framework.org/severcount.svg"/></p>
<p align='center'><b><a href='https://discord.esx-framework.org/'>Discord</a> - <a href='https://esx-framework.org/'>Website</a> - <a href='https://docs.esx-framework.org/legacy/installation'>Documentation</a></b></h5>
<p align='center'>Want More resources? You can browse the <a href="https://github.com/esx-community/">ESX Community Github</a> or <a href="https://forum.cfx.re/tag/esx">Cfx.re Releases board</a> for more!