Implemented pay when selling property, added prices to menu and more (desc)

- Improved dialogs, differnet for owning / renting
- Updated locale names
- Get half money back when selling
- Added configurable rent & sell prices in config
This commit is contained in:
ElPumpo
2020-02-03 13:19:55 +01:00
parent 897d60bf13
commit 96c1ab491f
11 changed files with 159 additions and 134 deletions
+41 -39
View File
@@ -17,9 +17,9 @@ AddEventHandler('esx:playerLoaded', function(xPlayer)
CreateBlips()
end)
ESX.TriggerServerCallback('esx_property:getOwnedProperties', function(ownedProperties)
for i=1, #ownedProperties, 1 do
SetPropertyOwned(ownedProperties[i], true)
ESX.TriggerServerCallback('esx_property:getOwnedProperties', function(result)
for k,v in ipairs(result) do
SetPropertyOwned(v.name, true, v.rented)
end
end)
end)
@@ -30,9 +30,9 @@ AddEventHandler('esx_property:sendProperties', function(properties)
Config.Properties = properties
CreateBlips()
ESX.TriggerServerCallback('esx_property:getOwnedProperties', function(ownedProperties)
for i=1, #ownedProperties, 1 do
SetPropertyOwned(ownedProperties[i], true)
ESX.TriggerServerCallback('esx_property:getOwnedProperties', function(result)
for k,v in ipairs(result) do
SetPropertyOwned(v.name, true, v.rented)
end
end)
end)
@@ -168,7 +168,7 @@ function ExitProperty(name)
end)
end
function SetPropertyOwned(name, owned)
function SetPropertyOwned(name, owned, rented)
local property = GetProperty(name)
local entering = nil
local enteringName = nil
@@ -183,7 +183,7 @@ function SetPropertyOwned(name, owned)
end
if owned then
OwnedProperties[name] = true
OwnedProperties[name] = rented
RemoveBlip(Blips[enteringName])
Blips[enteringName] = AddBlipForCoord(entering.x, entering.y, entering.z)
@@ -224,7 +224,7 @@ function SetPropertyOwned(name, owned)
end
function PropertyIsOwned(property)
return OwnedProperties[property.name] == true
return OwnedProperties[property.name] ~= nil
end
function OpenPropertyMenu(property)
@@ -233,16 +233,24 @@ function OpenPropertyMenu(property)
if PropertyIsOwned(property) then
table.insert(elements, {label = _U('enter'), value = 'enter'})
-- add move out
if not Config.EnablePlayerManagement then
table.insert(elements, {label = _U('leave'), value = 'leave'})
local leaveLabel = _U('move_out')
if not OwnedProperties[property.name] then
leaveLabel = _U('move_out_sold', ESX.Math.GroupDigits(ESX.Math.Round(property.price / Config.SellModifier)))
end
table.insert(elements, {label = leaveLabel, value = 'leave'})
end
else
if not Config.EnablePlayerManagement then
table.insert(elements, {label = _U('buy'), value = 'buy'})
table.insert(elements, {label = _U('rent'), value = 'rent'})
end
table.insert(elements, {label = _U('buy', ESX.Math.GroupDigits(property.price)), value = 'buy'})
table.insert(elements, {label = _U('visit'), value = 'visit'})
-- display rent price
local rent = ESX.Math.Round(property.price / Config.RentModifier)
table.insert(elements, {label = _U('rent', ESX.Math.GroupDigits(rent)), value = 'rent'})
end
end
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'property', {
@@ -260,8 +268,6 @@ function OpenPropertyMenu(property)
TriggerServerEvent('esx_property:buyProperty', property.name)
elseif data.current.value == 'rent' then
TriggerServerEvent('esx_property:rentProperty', property.name)
elseif data.current.value == 'visit' then
TriggerEvent('instance:create', 'property', {property = property.name, owner = ESX.GetPlayerData().identifier})
end
end, function(data, menu)
menu.close()
@@ -276,7 +282,6 @@ function OpenGatewayMenu(property)
if Config.EnablePlayerManagement then
OpenGatewayOwnedPropertiesMenu(gatewayProperties)
else
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'gateway', {
title = property.name,
align = 'top-left',
@@ -301,7 +306,7 @@ end
function OpenGatewayOwnedPropertiesMenu(property)
local gatewayProperties = GetGatewayProperties(property)
local elements = {}
local elements = {}
for i=1, #gatewayProperties, 1 do
if PropertyIsOwned(gatewayProperties[i]) then
@@ -318,10 +323,7 @@ function OpenGatewayOwnedPropertiesMenu(property)
elements = elements
}, function(data, menu)
menu.close()
local elements = {
{label = _U('enter'), value = 'enter'}
}
local elements = {{label = _U('enter'), value = 'enter'}}
if not Config.EnablePlayerManagement then
table.insert(elements, {label = _U('leave'), value = 'leave'})
@@ -350,14 +352,15 @@ end
function OpenGatewayAvailablePropertiesMenu(property)
local gatewayProperties = GetGatewayProperties(property)
local elements = {}
local elements = {}
for i=1, #gatewayProperties, 1 do
if not PropertyIsOwned(gatewayProperties[i]) then
table.insert(elements, {
label = gatewayProperties[i].label .. ' $' .. ESX.Math.GroupDigits(gatewayProperties[i].price),
label = gatewayProperties[i].label,
value = gatewayProperties[i].name,
price = gatewayProperties[i].price
buyPrice = gatewayProperties[i].price,
rentPrice = ESX.Math.Round(gatewayProperties[i].price / Config.RentModifier)
})
end
end
@@ -367,24 +370,20 @@ function OpenGatewayAvailablePropertiesMenu(property)
align = 'top-left',
elements = elements
}, function(data, menu)
menu.close()
ESX.UI.Menu.Open('default', GetCurrentResourceName(), 'gateway_available_properties_actions', {
title = property.label .. ' - ' .. _U('available_properties'),
align = 'top-left',
elements = {
{label = _U('buy'), value = 'buy'},
{label = _U('rent'), value = 'rent'},
{label = _U('visit'), value = 'visit'}
{label = _U('buy', ESX.Math.GroupDigits(data.current.buyPrice)), value = 'buy'},
{label = _U('rent', ESX.Math.GroupDigits(data.current.rentPrice)), value = 'rent'}
}}, function(data2, menu2)
menu.close()
menu2.close()
if data2.current.value == 'buy' then
TriggerServerEvent('esx_property:buyProperty', data.current.value)
elseif data2.current.value == 'rent' then
TriggerServerEvent('esx_property:rentProperty', data.current.value)
elseif data2.current.value == 'visit' then
TriggerEvent('instance:create', 'property', {property = data.current.value, owner = ESX.GetPlayerData().identifier})
end
end, function(data2, menu2)
menu2.close()
@@ -545,7 +544,7 @@ function OpenRoomInventoryMenu(property, owner)
label = ESX.GetWeaponLabel(weapon.name) .. ' [' .. weapon.ammo .. ']',
type = 'item_weapon',
value = weapon.name,
ammo = weapon.ammo
index = i
})
end
@@ -558,7 +557,7 @@ function OpenRoomInventoryMenu(property, owner)
if data.current.type == 'item_weapon' then
menu.close()
TriggerServerEvent('esx_property:getItem', owner, data.current.type, data.current.value, data.current.ammo)
TriggerServerEvent('esx_property:getItem', owner, data.current.type, data.current.value, data.current.index)
ESX.SetTimeout(300, function()
OpenRoomInventoryMenu(property, owner)
end)
@@ -684,7 +683,7 @@ AddEventHandler('playerSpawned', function()
for i=1, #property.ipls, 1 do
RequestIpl(property.ipls[i])
while not IsIplActive(property.ipls[i]) do
Citizen.Wait(0)
end
@@ -713,8 +712,8 @@ AddEventHandler('esx_property:getGateway', function(property, cb)
end)
RegisterNetEvent('esx_property:setPropertyOwned')
AddEventHandler('esx_property:setPropertyOwned', function(name, owned)
SetPropertyOwned(name, owned)
AddEventHandler('esx_property:setPropertyOwned', function(name, owned, rented)
SetPropertyOwned(name, owned, rented)
end)
RegisterNetEvent('instance:onCreate')
@@ -779,6 +778,8 @@ AddEventHandler('esx_property:hasExitedMarker', function(name, part)
CurrentAction = nil
end)
local index = 0
RegisterCommand('s', function(a, b, c)
-- Enter / Exit marker events & Draw markers
Citizen.CreateThread(function()
while true do
@@ -797,6 +798,7 @@ Citizen.CreateThread(function()
if distance < Config.DrawDistance then
DrawMarker(Config.MarkerType, property.entering.x, property.entering.y, property.entering.z, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Config.MarkerSize.x, Config.MarkerSize.y, Config.MarkerSize.z, Config.MarkerColor.r, Config.MarkerColor.g, Config.MarkerColor.b, 100, false, true, 2, false, nil, nil, false)
ESX.Game.Utils.DrawText3D(property.entering, property.name, 2)
letSleep = false
end
@@ -824,7 +826,7 @@ Citizen.CreateThread(function()
end
-- Room menu
if property.roomMenu and hasChest and not property.disabled then
if property.roomMenu then
local distance = GetDistanceBetweenCoords(coords, property.roomMenu.x, property.roomMenu.y, property.roomMenu.z, true)
if distance < Config.DrawDistance then
@@ -865,7 +867,7 @@ Citizen.CreateThread(function()
Citizen.Wait(0)
if CurrentAction then
ESX.ShowHelpNotification(CurrentActionMsg)
--ESX.ShowHelpNotification(CurrentActionMsg)
if IsControlJustReleased(0, 38) then
if CurrentAction == 'property_menu' then