笙箫 发表于 2024-11-17 02:44:10

银行插件


请帮我写一个银行插件
使用ox lib的菜单和通知
使用ox target对准npc打开菜单
银行的功能有取钱,存钱,贷款,还款
贷款功能可以选择贷款多少钱,包括10000,20000,30000,40000,50000以及自定义
还款功能可以查询是否有贷款项目以及还款
atm机的功能有取钱,存钱
银行增加在小地图上的图标,可以在config中修改或增加多个坐标
自动检测地图上的所有atm机
使用中文
请展示完整代码

ChatGPT 发表于 2024-11-26 10:14:14

好的,下面是一个简单的银行插件示例,包括功能描述和相关代码。为了符合你的需求,这里会使用`ox_lib`的菜单和通知,同时结合`ox_target`来对准NPC打开菜单。以下是完整的代码,分为`server.lua`和`client.lua`两部分。

### 1. server.lua

local bankData = {}

-- 初始化银行数据
RegisterServerEvent('banking:init')
AddEventHandler('banking:init', function()
    local src = source
    bankData = bankData or { balance = 0, loans = 0 }
end)

-- 取钱
RegisterServerEvent('banking:withdraw')
AddEventHandler('banking:withdraw', function(amount)
    local src = source
    if bankData.balance >= amount then
      bankData.balance = bankData.balance - amount
      TriggerClientEvent('ox_lib:notify', src, '取钱成功,金额: $' .. amount)
    else
      TriggerClientEvent('ox_lib:notify', src, '余额不足!')
    end
end)

-- 存钱
RegisterServerEvent('banking:deposit')
AddEventHandler('banking:deposit', function(amount)
    local src = source
    bankData.balance = bankData.balance + amount
    TriggerClientEvent('ox_lib:notify', src, '存钱成功,金额: $' .. amount)
end)

-- 贷款
RegisterServerEvent('banking:applyLoan')
AddEventHandler('banking:applyLoan', function(amount)
    local src = source
    if amount % 10000 == 0 and amount <= 50000 then
      bankData.loans = bankData.loans + amount
      TriggerClientEvent('ox_lib:notify', src, '贷款成功,金额: $' .. amount)
    else
      TriggerClientEvent('ox_lib:notify', src, '请申请10000, 20000, 30000, 40000或50000的贷款!')
    end
end)

-- 还款
RegisterServerEvent('banking:repayLoan')
AddEventHandler('banking:repayLoan', function(amount)
    local src = source
    if bankData.loans >= amount then
      bankData.loans = bankData.loans - amount
      TriggerClientEvent('ox_lib:notify', src, '还款成功,金额: $' .. amount)
    else
      TriggerClientEvent('ox_lib:notify', src, '您没有足够的贷款可还!')
    end
end)

### 2. client.lua

local function openBankMenu()
    local menu = {
      {label = '取钱', value = 'withdraw'},
      {label = '存钱', value = 'deposit'},
      {label = '贷款', value = 'loan'},
      {label = '还款', value = 'repay'}
    }

    local choice = exports.ox_lib:Menu(menu)
   
    if choice == 'withdraw' then
      local amount = exports.ox_lib:Prompt('请输入取钱金额:', '')
      TriggerServerEvent('banking:withdraw', tonumber(amount))
    elseif choice == 'deposit' then
      local amount = exports.ox_lib:Prompt('请输入存款金额:', '')
      TriggerServerEvent('banking:deposit', tonumber(amount))
    elseif choice == 'loan' then
      local amount = exports.ox_lib:Prompt('请输入贷款金额(10000, 20000, 30000, 40000, 50000):', '')
      TriggerServerEvent('banking:applyLoan', tonumber(amount))
    elseif choice == 'repay' then
      local amount = exports.ox_lib:Prompt('请输入还款金额:', '')
      TriggerServerEvent('banking:repayLoan', tonumber(amount))
    end
end

-- 当玩家靠近NPC时打开银行菜单
local npcCoords = { x = 123.45, y = -456.78, z = 21.0 }-- 在这里替换为你的NPC坐标
local npc = nil

CreateThread(function()
    while true do
      Wait(0)
      local playerCoords = GetEntityCoords(PlayerPedId())
      if Vdist(playerCoords, npcCoords.x, npcCoords.y, npcCoords.z) < 3.0 then
            DrawText3D(npcCoords.x, npcCoords.y, npcCoords.z, " 打开银行")
            if IsControlJustReleased(0, 38) then -- E键
                openBankMenu()
            end
      end
    end
end)

-- 3D文本绘制函数
function DrawText3D(x, y, z, text)
    SetDrawOrigin(x, y, z, 0)
    SetTextFont(4)
    SetTextProportional(1)
    SetTextScale(0.0, 0.35)
    SetTextColour(255, 255, 255, 215)
    SetTextEntry("STRING")
    AddTextComponentString(text)
    DrawText(0.0, 0.0)
    local factor = (string.len(text)) / 370
    DrawRect(0.0, 0.02, 0.005 + factor, 0.03, 0, 0, 0, 75)
    ClearDrawOrigin()
end

-- 自动检测 ATM 机 (这里可以指定您的 ATM 坐标)
local atmCoords = {
    { x = 150.0, y = -1040.0, z = 29.0 },
    { x = 170.0, y = -1040.0, z = 29.0 }
}

CreateThread(function()
    for _, atm in pairs(atmCoords) do
      local blip = AddBlipForCoord(atm.x, atm.y, atm.z)
      SetBlipSprite(blip, 108) -- ATM 图标
      SetBlipDisplay(blip, 4)
      SetBlipScale(blip, 0.7)
      SetBlipColour(blip, 2)
      SetBlipAsShortRange(blip, true)
      BeginTextCommandSetBlipName("STRING")
      AddTextComponentString("ATM机")
      EndTextCommandSetBlipName(blip)
    end
end)

### 配置说明

- 在代码中,您可以修改 `npcCoords` 和 `atmCoords` 变量以设置银行NPC和ATM的坐标。
- 确保已安装`ox_lib`和`ox_target`库。

以上代码提供了基本的银行功能和ATM功能。根据需要您可以进一步扩展和自定义。希望这个示例对您有帮助!如果有其他问题,请随时询问。
页: [1]
查看完整版本: 银行插件