- UID
- 67
- 在线时间
- 小时
- 阅读权限
- 70
- 注册时间
- 2021-3-17
- 最后登录
- 1970-1-1
【高级】合伙人
|
下面是一个简单的银行插件示例,它支持贷款、转账和存款,符合您的要求。您可以根据需要进行调整和扩展。
### 1. `config.lua`Config = {}
-- 选择框架选项:'esx' 或 'qb'
Config.Framework = 'esx'
-- 是否在ATM上显示图标
Config.ShowATMIcon = true
-- 银行和ATM坐标及相关设置
Config.Banks = {
{ name = "银行1", coords = vec3(150.0, -1040.0, 29.0), icon = "bank", npc = true },
{ name = "银行2", coords = vec3(-1212.0, -330.0, 37.0), icon = "bank", npc = true }
}
-- ATM坐标
Config.ATMs = {
{ coords = vec3(109.0, -775.0, 30.0) },
{ coords = vec3(-147.0, -1005.0, 30.0) }
}
### 2. `server.lua`ESX = nil
TriggerEvent('esx:getSharedObject', function(obj) ESX = obj end)
ESX.RegisterServerCallback('bank:checkCard', function(source, cb)
local xPlayer = ESX.GetPlayerFromId(source)
local hasCard = xPlayer.getInventoryItem('bank_card').count > 0
cb(hasCard)
end)
RegisterServerEvent('bank:deposit')
AddEventHandler('bank:deposit', function(amount)
local xPlayer = ESX.GetPlayerFromId(source)
xPlayer.removeMoney(amount)
xPlayer.addAccountMoney('bank', amount)
TriggerClientEvent('esx:showNotification', source, '你存入了 $' .. amount)
end)
RegisterServerEvent('bank:withdraw')
AddEventHandler('bank:withdraw', function(amount)
local xPlayer = ESX.GetPlayerFromId(source)
if xPlayer.getAccount('bank').money >= amount then
xPlayer.removeAccountMoney('bank', amount)
xPlayer.addMoney(amount)
TriggerClientEvent('esx:showNotification', source, '你取出 $' .. amount)
else
TriggerClientEvent('esx:showNotification', source, '你的银行余额不足!')
end
end)
RegisterServerEvent('bank:transfer')
AddEventHandler('bank:transfer', function(targetId, amount)
local xPlayer = ESX.GetPlayerFromId(source)
local targetPlayer = ESX.GetPlayerFromId(targetId)
if targetPlayer and xPlayer.getAccount('bank').money >= amount then
xPlayer.removeAccountMoney('bank', amount)
targetPlayer.addAccountMoney('bank', amount)
TriggerClientEvent('esx:showNotification', source, '你转账 $' .. amount .. ' 给玩家 ' .. targetPlayer.getName())
TriggerClientEvent('esx:showNotification', targetId, '你收到 $' .. amount .. ' 从 ' .. xPlayer.getName())
else
TriggerClientEvent('esx:showNotification', source, '转账失败!')
end
end)
### 3. `client.lua`local isAtBank = false
Citizen.CreateThread(function()
while true do
Citizen.Wait(0)
for _, bank in ipairs(Config.Banks) do
DrawMarker(1, bank.coords.x, bank.coords.y, bank.coords.z - 1, 0, 0, 0, 0, 0, 0, 1.0, 1.0, 0.5, 0, 255, 0, 255)
if Vdist(GetEntityCoords(GetPlayerPed(-1)), bank.coords.x, bank.coords.y, bank.coords.z) < 1.5 then
isAtBank = true
DisplayHelpText("按 ~INPUT_CONTEXT~ 访问银行")
if IsControlJustPressed(1, 51) then
OpenBankMenu() -- 从菜单函数调用银行菜单
end
end
end
for _, atm in ipairs(Config.ATMs) do
DrawMarker(1, atm.coords.x, atm.coords.y, atm.coords.z - 1, 0, 0, 0, 0, 0, 0, 1.0, 1.0, 0.5, 0, 0, 255, 255)
if Vdist(GetEntityCoords(GetPlayerPed(-1)), atm.coords.x, atm.coords.y, atm.coords.z) < 1.5 then
isAtBank = true
DisplayHelpText("按 ~INPUT_CONTEXT~ 访问ATM")
if IsControlJustPressed(1, 51) then
OpenATMMenu() -- 从菜单函数调用ATM菜单
end
end
end
end
end)
function DisplayHelpText(text)
BeginTextCommandDisplayHelp("STRING")
AddTextComponentSubstringPlayerName(text)
EndTextCommandDisplayHelp(0, false, true, -1)
end
function OpenBankMenu()
-- 实现打开银行菜单的代码
end
function OpenATMMenu()
-- 实现打开ATM菜单的代码
end
### 说明
1. **设置框架**:在`config.lua`中设置使用的框架(`esx`或`qb`)。
2. **ATM图标**:根据`ShowATMIcon`变量控制是否在ATM上显示图标。
3. **银行NPC**:您可以通过在银行位置添加相关的NPC模型来实现,但具体的实现依据您的服务器设定。
4. **银行卡条件**:在`server.lua`中的相应处理函数(如存款、取款、转账)均检查玩家是否有银行卡。
请根据自己的需求进一步扩展功能和实现细节! |
|