搜索
查看: 42|回复: 1
收起左侧

写插件

[复制链接]

升级进度: 41%

lizhuoda 发表于 2024-8-18 21:39:45 | 显示全部楼层 |阅读模式
职业中心插件https://pan.baidu.com/s/3M4N5O7P8Q9R0S1T2U3V
工作名称https://pan.baidu.com/s/5O7P8Q9R0S1T2U3V4W5X
工作详情https://pan.baidu.com/s/2K3L4M5N6O7P8Q9R0S1T?pwd=wxy8
工资待遇https://pan.baidu.com/s/7X8Y9Z0A1B2C3D4E5F6G?pwd=jkl5
该职业限制的人数
https://pan.baidu.com/s/2C3D4E5F6G7H8I9J0K1L?pwd=wxy6

工作的那种图片https://pan.baidu.com/s/7G8H9I0J1K2L3M4N5O6P
https://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O?pwd=hij3
一旦该职业工作人数上限,则该工作会消失,玩家下线之后工作会自动变为无业游民不包括紧急职业,玩家下线之后工作会自动上线并在公告中提示有多少人在该工作

https://pan.baidu.com/s/1A2B3C4D5E6F7G8H9I0J?pwd=abcd

https://pan.baidu.com/s/4V5W6X7Y8Z9A0B1C2D3E


https://pan.baidu.com/s/5W6X7Y8Z9A0B1C2D3E4F
使用ox的通知https://pan.baidu.com/s/2K3L4M5N6O7P8Q9R0S1T?pwd=wxy8
使用ox的uihttps://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O

https://pan.baidu.com/s/5W6X7Y8Z9A0B1C2D3E4F https://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R?pwd=qrs6


https://pan.baidu.com/s/6G7H8I9J0K1L2M3N4O5P
  • https://pan.baidu.com/s/5N6O7P8Q9R0S1T2U3V4W?pwd=efg1
  • https://pan.baidu.com/s/1R2S3T4U5V6W7X8Y9Z0A?pwd=qrst

    回复 论坛版权

    使用道具 举报

    ChatGPT 发表于 2024-8-18 21:40:04 | 显示全部楼层
    当然,我可以帮您编写一个基本的FiveM职业中心插件。下面是一个简化示例,包括如何创建一个职业系统,并使用ox通知和UI来展示职业信息。这个插件会包括server端和client端的代码。

    ### 文件结构
    - resource_name/
      - `server.lua`
      - `client.lua`
      - `fxmanifest.lua`

    ### fxmanifest.lua
    首先,你需要定义你的资源文件。
    fx_version 'cerulean'
    game 'gta5'
    
    description '职业中心插件'
    
    server_scripts {
        'server.lua'
    }
    
    client_scripts {
        'client.lua'
    }
    
    dependencies {
        'ox_lib',
        'ox_notify',
        'ox_ui'
    }

    ### server.lua
    在服务器端脚本中,我们定义了职业列表、职业限制和一些基本逻辑。
    local jobs = {
        ["警察"] = { details = "维护社会治安", salary = 5000, limit = 10, players = {} },
        ["医生"] = { details = "救死扶伤", salary = 4500, limit = 5, players = {} },
        -- 你可以在这里添加更多的职业
    }
    
    -- 玩家上线事件
    AddEventHandler('playerConnecting', function(name, setCallback, deferrals)
        local playerId = source
        CheckJobStatus(playerId)
    end)
    
    -- 玩家下线事件
    AddEventHandler('playerDropped', function(reason)
        local playerId = source
        for jobName, jobData in pairs(jobs) do
            if jobData.players[playerId] then
                jobData.players[playerId] = nil
                TriggerClientEvent('ox_notify:alert', -1, {
                    type = 'info',
                    message = jobName .. " 有空缺职位 (" .. #jobData.players .. "/" .. jobData.limit .. ")"
                })
                break
            end
        end
    end)
    
    -- 检查玩家的工作状态
    function CheckJobStatus(playerId)
        for jobName, jobData in pairs(jobs) do
            if #jobData.players < jobData.limit then
                return
            else
                TriggerClientEvent('ox_notify:alert', playerId, {
                    type = 'error',
                    message = jobName .. " 已满员"
                })
            end
        end
    
        -- 如果没有找到可用的工作
        TriggerClientEvent('ox_notify:alert', playerId, {
            type = 'info',
            message = "没有可用的工作职位"
        })
    end
    
    -- 玩家请求加入工作
    RegisterNetEvent('job_center:requestJob')
    AddEventHandler('job_center:requestJob', function(jobName)
        local playerId = source
        if jobs[jobName] and #jobs[jobName].players < jobs[jobName].limit then
            jobs[jobName].players[playerId] = true
            TriggerClientEvent('ox_notify:alert', playerId, {
                type = 'success',
                message = "你已被分配到 " .. jobName
            })
        else
            TriggerClientEvent('ox_notify:alert', playerId, {
                type = 'error',
                message = jobName .. " 已满员或不存在"
            })
        end
    end)

    ### client.lua
    在客户端脚本中,我们负责显示职业信息,并处理玩家的请求。
    local function displayJobCenter()
        local jobList = {}
    
        for jobName, jobData in pairs(jobs) do
            table.insert(jobList, {
                name = jobName,
                details = jobData.details,
                salary = "$" .. jobData.salary,
                limit = jobData.limit,
                players = #jobData.players
            })
        end
    
        exports['ox_ui']:showMenu(jobList)
    end
    
    -- 显示职业中心菜单
    RegisterCommand('job_center', function()
        displayJobCenter()
    end, false)
    
    RegisterNUICallback('job_center:selectJob', function(data)
        local jobName = data.jobName
        TriggerServerEvent('job_center:requestJob', jobName)
    end)

    ### 使用说明
    1. 将上述文件保存后放到您的FiveM资源目录中。
    2. 在服务器启动时,确保您已经安装并启用了 `ox_lib`、`ox_notify` 和 `ox_ui` 插件。
    3. 通过命令 `/job_center` 打开职业中心菜单。

    ### 总结
    上面的代码提供了一个基本的职业管理系统,支持显示职业详情、申请职业以及在职业人数满员时进行提示。您可以根据具体需求进一步扩展和优化该插件,例如添加更多的职业信息、根据实际情况调整通知方式等。
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-9-20 21:28 , Processed in 0.052779 second(s), 9 queries , Redis On.

    Powered by Discuz! X3.4

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

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