搜索
开启左侧

银行插件

[复制链接]
笙箫 发表于 2024-11-17 02:44:10 | 显示全部楼层 |阅读模式
请帮我写一个银行插件
使用ox lib的菜单和通知
使用ox target对准npc打开菜单
银行的功能有取钱,存钱,贷款,还款
贷款功能可以选择贷款多少钱,包括10000,20000,30000,40000,50000以及自定义
还款功能可以查询是否有贷款项目以及还款
atm机的功能有取钱,存钱
银行增加在小地图上的图标,可以在config中修改或增加多个坐标
自动检测地图上的所有atm机
使用中文
请展示完整代码

评分

参与人数 1金币 +15 收起 理由
admin + 15 退款葡萄

查看全部评分

回复 论坛版权

使用道具 举报

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[src] = bankData[src] or { balance = 0, loans = 0 }
end)

-- 取钱
RegisterServerEvent('banking:withdraw')
AddEventHandler('banking:withdraw', function(amount)
    local src = source
    if bankData[src].balance >= amount then
        bankData[src].balance = bankData[src].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[src].balance = bankData[src].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[src].loans = bankData[src].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[src].loans >= amount then
        bankData[src].loans = bankData[src].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, "[E] 打开银行")
            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功能。根据需要您可以进一步扩展和自定义。希望这个示例对您有帮助!如果有其他问题,请随时询问。
回复

使用道具 举报

文明发言,和谐互动
文明发言,和谐互动
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|首页 ( 冀ICP备2021005225号-1 ) |网站地图

GMT+8, 2025-2-9 02:05 , Processed in 0.056897 second(s), 14 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2013 ELITE论坛【技术无价-分享快乐】

快速回复 返回顶部 返回列表