example
example

教程 FiveM小白从零开发 03 认识什么是客户端什么是服务端,如何使用客户端事件和服务端事件

Phoenix

吊吊
论坛元老
高级用户
认证用户

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:声明服务端脚本路径。

二、客户端与服务端事件的代码结构​

  1. 在资源文件夹下创建以下目录和文件:
    my_resource/
    ├── fxmanifest.lua
    ├── client/
    │ └── main.lua
    ├── server/
    └── main.lua

  2. 编写客户端代码

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 <消息> 时,将消息发送到服务端。

  1. 编写服务端代码

server/main.lua 示例

-- 注册服务端事件,接收客户端发来的消息
RegisterNetEvent("broadcastMessage")
AddEventHandler("broadcastMessage", function(message)
print("收到客户端消息: " .. message)

-- 将消息广播给所有客户端
TriggerClientEvent("showClientMessage", -1, message) -- -1 表示所有玩家
end)

功能说明:

  • 注册事件 broadcastMessage,处理客户端发送的消息。
  • 使用 TriggerClientEvent 将消息广播给所有客户端。

三、启动和测试​

  1. 将资源文件夹(例如 my_resource)放到服务器的 resources 目录中。
  2. 在服务器的配置文件 (server.cfg) 中添加以下内容:
    ensure my_resource

  3. 启动服务器并连接到游戏。
  4. 打开游戏控制台(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()


五、小结​

  1. fxmanifest.lua 是资源的入口文件
    • 用于声明客户端和服务端脚本路径。
    • 是确保资源正常加载的关键配置。
  2. 客户端与服务端的事件通信
    • 使用 TriggerServerEvent 从客户端向服务端发送消息。
    • 使用 TriggerClientEvent 从服务端向客户端广播或定向发送消息。
  3. 事件驱动开发
    • 通过 RegisterNetEvent 和 AddEventHandler 绑定事件处理逻辑,使代码模块化、易扩展。
通过以上教程,你已经学会了如何编写客户端和服务端事件代码,并将其配置到 fxmanifest.lua 中。如果还有其他疑问,可以随时询问!
 
顶部