当然可以!下面是一个简单的 ESC 菜单插件的示例代码。这个插件包括一个基本的菜单,可以在游戏中按下 ESC 键打开和关闭。
### 客户端代码 (Client.lua)
-- 定义变量来跟踪菜单的状态
local isMenuOpen = false
-- 创建菜单函数
function ToggleMenu()
isMenuOpen = not isMenuOpen
SetNuiFocus(isMenuOpen, isMenuOpen) -- 设置 NUI 焦点
SendNUIMessage({ action = isMenuOpen and 'open' or 'close' }) -- 与 NUI 通信
end
-- 监听键盘按键事件
Citizen.CreateThread(function()
while true do
Citizen.Wait(0) -- 每帧检查一次
if IsControlJustPressed(0, 322) then -- ESC键的控制编号是322
ToggleMenu() -- 切换菜单状态
end
end
end)
-- 初始化 NUI 界面
RegisterNUICallback('closeMenu', function(data, cb)
ToggleMenu() -- 关闭菜单时调用
cb('ok') -- 返回 OK
end)
### NUI 文件 (HTML + JS)
你需要在资源的 `html` 文件夹中创建一个 HTML 文件和一个 JavaScript 文件来处理 NUI 界面。
#### html/index.html
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>ESC 菜单</title>
<style>
/* 添加 CSS 样式 */
body {
display: none;
background-color: rgba(0, 0, 0, 0.7);
color: white;
font-family: Arial, sans-serif;
text-align: center;
}
#menu {
margin-top: 20%;
font-size: 24px;
}
</style>
</head>
<body>
<div id="menu">
<h1>ESC 菜单</h1>
<button onclick="closeMenu()">关闭菜单</button>
</div>
<script src="script.js"></script>
</body>
</html>
#### html/script.js
// 处理 NUI 消息
window.addEventListener('message', function(event) {
if (event.data.action === 'open') {
document.body.style.display = 'block'; // 显示菜单
} else if (event.data.action === 'close') {
document.body.style.display = 'none'; // 隐藏菜单
}
});
// 关闭菜单的函数
function closeMenu() {
fetch(`https://${GetParentResourceName()}/closeMenu`, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({})
});
}
### 资源清单 (fxmanifest.lua)
确保在你的资源目录中有一个 `fxmanifest.lua` 文件,内容如下:
fx_version 'cerulean'
game 'gta5'
client_script 'Client.lua'
ui_page 'html/index.html'
files {
'html/index.html',
'html/script.js'
}
### 使用说明
1. 将以上代码分别放入相应的文件中,确保文件结构正确。
2. 启动 FiveM 服务器,并加载此资源。
3. 在游戏中按下 ESC 键将打开或关闭菜单。
这样,你就完成了一个简单的 ESC 菜单插件!你可以根据自己的需求进一步扩展和修改此插件。 |