yuchunlin1231 发表于 2024-12-21 17:02:40

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


开发这个插件的目的只是为了自己开发插件的时候调试方便,所有功能并没有太多,只实现了一部分核心功能
但是我为这个插件添加了非常详细的注释,为了更多开发插件的新手能够更好的融入到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(" " .. 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;



{:4_95:}


页: [1]
查看完整版本: 管理员菜单(可以帮助更好的学习开发脚本)