查看: 473|回复: 0
收起左侧

[插件] 管理员菜单(可以帮助更好的学习开发脚本)

[复制链接]

升级进度: 9%

yuchunlin1231 发表于 2024-12-21 17:02:40 | 显示全部楼层 |阅读模式
b40bdcca-d75b-4620-ad26-66bf6417622b.png 37bcdedf-28f4-49a4-b898-97fe0e5c09c6.png
开发这个插件的目的只是为了自己开发插件的时候调试方便,所有功能并没有太多,只实现了一部分核心功能
但是我为这个插件添加了非常详细的注释,为了更多开发插件的新手能够更好的融入到fivem服务器开发中
这是部分注释展示
---------------------------------------

--------------------------------------------------------------------------------
-- 我们这里使用的是 es_extended 1.10.1 版本,通过 exports["es_extended"]:getSharedObject()
-- 来获取 ESX 主对象,而非旧版常见的 TriggerEvent('esx:getSharedObject', ...) 方式。
--------------------------------------------------------------------------------
ESX = exports["es_extended"]:getSharedObject()

--------------------------------------------------------------------------------
-- 全局变量,用于标记管理菜单(GUI)是否打开,以及 NUI 是否已准备就绪。
-- 这里的 menuOpen 在打开面板时设置为 true,关闭时设置为 false。
-- nuiReady 则由前端发回的回调 'nuiready' 来表示 NUI 加载完成。
--------------------------------------------------------------------------------
local menuOpen = false
local nuiReady = false

--------------------------------------------------------------------------------
-- 下面的 debugPrint 用于在控制台输出调试信息。
-- 由于只有开发者能看到控制台,这有助于快速定位问题,但不会打扰正常玩家。
--------------------------------------------------------------------------------
local function debugPrint(message)
    print("[AdminMenu Debug] " .. message)
end

--------------------------------------------------------------------------------
-- OpenAdminMenuTest() 函数是我们打开管理员面板的入口。
-- 流程:
-- 1. 如果菜单已经打开,则关闭菜单,并通知 NUI 客户端"closeAdmin"。
-- 2. 如果菜单未打开,则先向服务器验证是否具有管理员权限 (admin 或 superadmin)。
--    - 若通过验证,则发送"openAdmin"消息与管理员的相关数据给 NUI。
--    - 之后启动一个线程,反复等待 NUI 告知自己已准备就绪 (nuiReady = true)。
--    - NUI 就绪后才真正 SetNuiFocus(true, true) 以捕获鼠标与键盘焦点。
--------------------------------------------------------------------------------
local function OpenAdminMenuTest()
    debugPrint("调用OpenAdminMenuTest函数, menuOpen状态: " .. tostring(menuOpen))

    if menuOpen then
        -- 当前菜单已打开,则执行关闭操作
        SetNuiFocus(false, false)
        SendNUIMessage({
            type = 'closeAdmin'
        })
        menuOpen = false
        debugPrint("菜单已关闭")
        return
    end---------------------------------------
/**
* app.js 在整个项目中扮演管理面板前端逻辑的核心角色:
* 1. 通过 window.addEventListener('message') 接收来自客户端脚本(main.lua)的 NUI 通知,
*    从而打开/关闭管理员面板,或执行相应的界面更新操作。
* 2. 为页面上的按钮(如“传送”、“复活”、“无敌”等)注册点击事件,调用游戏内指令并与服务器端通信。
* 3. 负责展示物品列表、搜索功能、坐标输入框等界面交互,并将玩家输入的数据通过 fetch POST 发送回游戏端。
*/

let currentAdminData = null;
let allItems = [];
let nuiInitialized = false;

// 监听来自游戏的消息
window.addEventListener('message', function(event) {
    const data = event.data;
   
    switch(data.type) {
        case 'openAdmin':
            // 显示管理面板,并更新管理员相关信息
            document.getElementById('app').style.display = 'flex';
            updateAdminInfo(data.adminData);

            // 若 NUI 尚未初始化,则发送一次 nuiready,以便客户端(main.lua)知道前端准备完成
            setTimeout(() => {
                if (!nuiInitialized) {
                    nuiInitialized = true;
                    fetch(`https://${GetParentResourceName()}/nuiready`, {
                        method: 'POST',
                        headers: {
                            'Content-Type': 'application/json'
                        },
                        body: JSON.stringify({})
                    });
                }
            }, 100);
            break;




admin.rar (28.31 KB, 下载次数: 42)

评分

参与人数 1贡献 +1 收起 理由
顾北笙 + 1

查看全部评分

楼主热帖
回复 论坛版权

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-8 23:21 , Processed in 0.054631 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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