FiveM 小白从零开发教程 02:认识客户端、服务端,使用客户端事件与服务端事件(配合 fxmanifest.lua)
在 FiveM 的开发中,客户端、服务端代码的运行需要正确配置 fxmanifest.lua,以便将客户端和服务端脚本加载到资源中运行。以下是如何结合 fxmanifest.lua 来使用客户端事件和服务端事件的完整教程。一、fxmanifest.lua 基础配置
在资源文件夹(例如 my_resource)下创建 fxmanifest.lua 文件,并按以下内容配置:fxmanifest.lua 示例
fx_version 'cerulean'game 'gta5'
author 'YourName'
description 'FiveM Client-Server Event Tutorial'
version '1.0.0'
-- 加载客户端脚本
client_scripts {
'client/main.lua'
}
-- 加载服务端脚本
server_scripts {
'server/main.lua'
}
说明:
- fx_version:指定使用的框架版本(cerulean 是推荐的最新版本)。
- game:指定目标游戏(通常为 gta5)。
- client_scripts:声明客户端脚本路径。
- server_scripts:声明服务端脚本路径。
二、客户端与服务端事件的代码结构
- 在资源文件夹下创建以下目录和文件:
my_resource/
├── fxmanifest.lua
├── client/
│ └── main.lua
├── server/
└── main.lua
- 编写客户端代码
client/main.lua 示例
-- 注册一个事件,接收服务端发来的消息RegisterNetEvent("showClientMessage")
AddEventHandler("showClientMessage", function(message)
print("服务端发送的消息: " .. message)
end)
-- 触发服务端事件
RegisterCommand("sendToServer", function(source, args, rawCommand)
local message = table.concat(args, " ") -- 获取命令的参数
TriggerServerEvent("broadcastMessage", message) -- 发送到服务端
end, false)
功能说明:
- 注册事件 showClientMessage,接收服务端的消息。
- 创建一个名为 sendToServer 的命令,输入 /sendToServer <消息> 时,将消息发送到服务端。
- 编写服务端代码
server/main.lua 示例
-- 注册服务端事件,接收客户端发来的消息RegisterNetEvent("broadcastMessage")
AddEventHandler("broadcastMessage", function(message)
print("收到客户端消息: " .. message)
-- 将消息广播给所有客户端
TriggerClientEvent("showClientMessage", -1, message) -- -1 表示所有玩家
end)
功能说明:
- 注册事件 broadcastMessage,处理客户端发送的消息。
- 使用 TriggerClientEvent 将消息广播给所有客户端。
三、启动和测试
- 将资源文件夹(例如 my_resource)放到服务器的 resources 目录中。
- 在服务器的配置文件 (server.cfg) 中添加以下内容:
ensure my_resource
- 启动服务器并连接到游戏。
- 打开游戏控制台(F8),输入以下命令进行测试:
/sendToServer Hello, FiveM!
你会在客户端控制台和服务端控制台分别看到:- 客户端控制台输出:服务端发送的消息: Hello, FiveM!
- 服务端控制台输出:收到客户端消息: Hello, FiveM!
四、扩展示例
1. 定向发送消息给特定玩家
修改 server/main.lua,将消息只发送给触发事件的玩家:TriggerClientEvent("showClientMessage", source, "你的消息已收到: " .. message)
2. 添加参数验证
为命令增加参数检查,避免无效输入:RegisterCommand("sendToServer", function(source, args, rawCommand)
if #args == 0 then
print("请提供消息内容!")
return
end
local message = table.concat(args, " ")
TriggerServerEvent("broadcastMessage", message)
end, false)
3. 服务端保存日志
将消息存入文件或数据库:local logFile = io.open("server_log.txt", "a")
logFile:write("客户端消息: " .. message .. "\n")
logFile:close()
五、小结
- fxmanifest.lua 是资源的入口文件:
- 用于声明客户端和服务端脚本路径。
- 是确保资源正常加载的关键配置。
- 客户端与服务端的事件通信:
- 使用 TriggerServerEvent 从客户端向服务端发送消息。
- 使用 TriggerClientEvent 从服务端向客户端广播或定向发送消息。
- 事件驱动开发:
- 通过 RegisterNetEvent 和 AddEventHandler 绑定事件处理逻辑,使代码模块化、易扩展。