223 lines
8.0 KiB
Lua
223 lines
8.0 KiB
Lua
Koci.Server.RegisterServerCallback("hp_vehicleshop:Server:GetPlayerAccountBalance", function(source, data, cb)
|
|
local src = source
|
|
local xPlayer = Koci.Server.GetPlayerBySource(src)
|
|
local bankBalance = xPlayer.PlayerData.money.bank
|
|
cb(bankBalance or 0)
|
|
end)
|
|
|
|
Koci.Server.RegisterServerCallback("0r-vehicle:Server:BuyNewVehicle", function(source, data, cb)
|
|
local src = source
|
|
local xPlayer = Koci.Server.GetPlayerBySource(src)
|
|
local customPlate = data.customPlate
|
|
local checkPlayerMoney = Koci.Server.CheckPlayerMoney(
|
|
xPlayer,
|
|
data.price,
|
|
data.paymentMethod,
|
|
{
|
|
gallery = data.gallery
|
|
}
|
|
)
|
|
if not checkPlayerMoney then
|
|
cb({
|
|
status = false,
|
|
error = _t("purchase.dont_have_enough_money")
|
|
})
|
|
return
|
|
end
|
|
if #customPlate == 0 then
|
|
customPlate = Koci.Server.GenerateCustomPlate()
|
|
else
|
|
local isTaken = Koci.Server.IsPlateTaken(customPlate)
|
|
if isTaken then
|
|
cb({
|
|
status = false,
|
|
error = _t("plate.already_registered")
|
|
})
|
|
return
|
|
end
|
|
end
|
|
local vProps = data.vehicleProps
|
|
if Config.PlayerVehiclesDB == "owned_vehicles" then
|
|
vProps.plate = customPlate
|
|
vProps.model = data.vehicle.name
|
|
Koci.Server.ExecuteSQLQuery(
|
|
"INSERT INTO owned_vehicles (owner, vehicle, plate, type, stored) VALUES (?, ?, ?, ?, ?)",
|
|
{
|
|
xPlayer.identifier,
|
|
json.encode(vProps),
|
|
vProps.plate:upper(),
|
|
data.gallery.type,
|
|
false
|
|
},
|
|
"insert"
|
|
)
|
|
elseif Config.PlayerVehiclesDB == "player_vehicles" then
|
|
vProps.plate = customPlate
|
|
vProps.model = data.vehicle.name
|
|
Koci.Server.ExecuteSQLQuery(
|
|
"INSERT INTO player_vehicles (license, citizenid, vehicle, hash, mods, plate, garage, state) VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
|
|
{
|
|
xPlayer.PlayerData.license,
|
|
xPlayer.PlayerData.citizenid,
|
|
data.vehicle.name,
|
|
GetHashKey(vProps.model),
|
|
json.encode(vProps),
|
|
vProps.plate:upper(),
|
|
data.gallery.deliveryGarage,
|
|
0
|
|
},
|
|
"insert"
|
|
)
|
|
end
|
|
if data.paymentMethod == "bank" then
|
|
Koci.Server.PlayerRemoveMoney(xPlayer, "bank", data.price)
|
|
elseif data.paymentMethod == "cash" then
|
|
if data.gallery.isMoneyAnItem.status then
|
|
Koci.Server.PlayerRemoveItem(xPlayer, data.gallery.isMoneyAnItem.item, data.price)
|
|
else
|
|
Koci.Server.PlayerRemoveMoney(xPlayer, "cash", data.price)
|
|
end
|
|
elseif data.paymentMethod == "black_money" then
|
|
Koci.Server.PlayerRemoveItem(xPlayer, data.gallery.buyWithBlackMoney.item, data.price)
|
|
end
|
|
if data.gallery.job then
|
|
exports['qb-management']:AddMoney(data.gallery.job, data.price)
|
|
end
|
|
cb({ status = true, plate = customPlate })
|
|
end)
|
|
|
|
Koci.Server.RegisterServerCallback("0r-vehicle:Server:RentNewVehicle", function(source, data, cb)
|
|
local src = source
|
|
local xPlayer = Koci.Server.GetPlayerBySource(src)
|
|
local customPlate = data.customPlate
|
|
local checkPlayerMoney = Koci.Server.CheckPlayerMoney(
|
|
xPlayer,
|
|
data.price,
|
|
data.paymentMethod,
|
|
{
|
|
gallery = data.gallery
|
|
}
|
|
)
|
|
if not checkPlayerMoney then
|
|
cb({
|
|
status = false,
|
|
error = _t("purchase.dont_have_enough_money")
|
|
})
|
|
return
|
|
end
|
|
if #customPlate == 0 then
|
|
customPlate = Koci.Server.GenerateCustomPlate()
|
|
else
|
|
local isTaken = Koci.Server.IsPlateTaken(customPlate)
|
|
if isTaken then
|
|
cb({
|
|
status = false,
|
|
error = _t("plate.already_registered")
|
|
})
|
|
return
|
|
end
|
|
end
|
|
local vProps = data.vehicleProps
|
|
local owner = Config.FrameWork == "esx" and xPlayer.identifier or xPlayer.PlayerData.citizenid
|
|
Koci.Server.ExecuteSQLQuery(
|
|
"INSERT INTO `0r_rented_vehicles` (owner, plate, model, vehicle_price, daily_fee, rented_day, rental_fee) VALUES (?, ?, ?, ?, ?, ?, ?)",
|
|
{
|
|
owner,
|
|
customPlate:upper(),
|
|
data.vehicle.name,
|
|
data.vehicle.price,
|
|
data.daily_fee,
|
|
data.rented_day,
|
|
data.price
|
|
},
|
|
"insert"
|
|
)
|
|
if Config.PlayerVehiclesDB == "owned_vehicles" then
|
|
vProps.plate = customPlate
|
|
vProps.model = data.vehicle.name
|
|
Koci.Server.ExecuteSQLQuery(
|
|
"INSERT INTO owned_vehicles (owner, vehicle, plate, type, stored) VALUES (?, ?, ?, ?, ?)",
|
|
{
|
|
owner,
|
|
json.encode(vProps),
|
|
vProps.plate:upper(),
|
|
data.gallery.type,
|
|
false
|
|
},
|
|
"insert"
|
|
)
|
|
elseif Config.PlayerVehiclesDB == "player_vehicles" then
|
|
vProps.plate = customPlate
|
|
vProps.model = data.vehicle.name
|
|
Koci.Server.ExecuteSQLQuery(
|
|
"INSERT INTO player_vehicles (license, citizenid, vehicle, hash, mods, plate, garage, state) VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
|
|
{
|
|
xPlayer.PlayerData.license,
|
|
owner,
|
|
data.vehicle.name,
|
|
GetHashKey(vProps.model),
|
|
json.encode(vProps),
|
|
vProps.plate:upper(),
|
|
data.gallery.deliveryGarage,
|
|
0
|
|
},
|
|
"insert"
|
|
)
|
|
end
|
|
if data.paymentMethod == "bank" then
|
|
Koci.Server.PlayerRemoveMoney(xPlayer, "bank", data.price)
|
|
elseif data.paymentMethod == "cash" then
|
|
if data.gallery.isMoneyAnItem.status then
|
|
Koci.Server.PlayerRemoveItem(xPlayer, data.gallery.isMoneyAnItem.item, data.price)
|
|
else
|
|
Koci.Server.PlayerRemoveMoney(xPlayer, "cash", data.price)
|
|
end
|
|
elseif data.paymentMethod == "black_money" then
|
|
Koci.Server.PlayerRemoveItem(xPlayer, data.gallery.buyWithBlackMoney.item, data.price)
|
|
end
|
|
if data.gallery.job then
|
|
exports['qb-management']:AddMoney(data.gallery.job, data.price)
|
|
end
|
|
cb({ status = true, plate = customPlate })
|
|
end)
|
|
|
|
Koci.Server.RegisterServerCallback("hp_vehicleshop:Server:CheckOverdueRentalCars", function(source, data, cb)
|
|
local src = source
|
|
local xPlayer = Koci.Server.GetPlayerBySource(src)
|
|
local any_action = false
|
|
local owner = Config.FrameWork == "esx" and xPlayer.identifier or xPlayer.PlayerData.citizenid
|
|
local rented_vehicles = Koci.Server.ExecuteSQLQuery("SELECT * FROM `0r_rented_vehicles` WHERE owner = ?",
|
|
{ owner },
|
|
"query"
|
|
)
|
|
local expiration_vehicles = {}
|
|
if rented_vehicles then
|
|
local currentTimestamp = os.time()
|
|
for _, v in pairs(rented_vehicles) do
|
|
local rentalDuration = os.difftime(currentTimestamp, v.created_at / 1000)
|
|
local expiration = v.rented_day * 24 * 60 * 60
|
|
if rentalDuration > expiration then
|
|
any_action = true
|
|
expiration_vehicles[#expiration_vehicles + 1] = v
|
|
Koci.Server.ExecuteSQLQuery("DELETE FROM `0r_rented_vehicles` WHERE id = ?", { v.id }, "query")
|
|
end
|
|
end
|
|
end
|
|
if #expiration_vehicles > 0 then
|
|
for _, v in pairs(expiration_vehicles) do
|
|
if Config.PlayerVehiclesDB == "owned_vehicles" then
|
|
Koci.Server.ExecuteSQLQuery("DELETE FROM `owned_vehicles` WHERE owner = ? AND plate = ?",
|
|
{ owner, v.plate },
|
|
"query"
|
|
)
|
|
elseif Config.PlayerVehiclesDB == "player_vehicles" then
|
|
Koci.Server.ExecuteSQLQuery("DELETE FROM `player_vehicles` WHERE citizenid = ? AND plate = ?",
|
|
{ owner, v.plate },
|
|
"query"
|
|
)
|
|
end
|
|
end
|
|
end
|
|
cb({ any_action = any_action })
|
|
end)
|