Fivem当中跨脚本的函数调用和事件的触发?
原帖:教程 - Fivem当中跨脚本的函数调用和事件的触发? | GTAOS GTA线上站介绍:本届教程介绍一下各种交互,包括同端函数的调用,同端与异端的事件触发。
函数调用:比如客户端调用客户端函数,或者服务端调用服务端函数。异端不可调用。
[*]被调用脚本的内容(脚本名称beingExported):
lua:
function printSample() print("success")end
[*]被调用fxmanifest的内容(脚本名称beingExported):
lua:
--如果是客户端函数这样写:client_script 'client.lua'export 'printSample'--如果是服务端函数这样写:server_script 'server.lua'server_export 'printSample'
接下来我们将会把上边 beingExported 当中的 printSample 函数在另一个脚本当中调用
[*]调用脚本的内容(脚本名称exporting):
lua:
exports.beingExported:printSample() --格式是exports. 开头, 紧跟你要调用的脚本再加冒号,最后写函数名字就行了。这样就代表你调用了beingExported当中的printSample函数。
事件触发:
[*]被触发脚本的内容client.lua(脚本名称beingExported):
lua:
--如果是创建客户端被调用的事件这样写:RegisterNetEvent('clientTest') --注册客户端事件 clientTestAddEventHandler('clientTest', function(param) --添加 clientTest事件的处理器print('client output: '.. param) --客户端打印文字end)
[*]触发脚本的内容server.lua(脚本名称beingExported):
lua:
--如果是创建服务端被调用的事件这样写:RegisterServerEvent('serverTest') --注册服务端事件 serverTestAddEventHandler('serverTest', function(param) --添加 serverTest事件的处理器print('server output: '.. param) --服务端打印文字end)
接下来我们将会把上边 beingExported 当中的客户端事件 clientTest 和服务端事件 serverTest 在另一个脚本当中触发
[*]调用脚本的内容client.lua(脚本名称exporting):
lua:
--同端调用(客户端到客户端),调用beingExported当中的客户端事件 clientTestTriggerEvent("clientTest", 'success')--调用成功后会执行 clientTest 事件的代码--异端调用(客户端到服务端),调用beingExported当中的客户端事件 serverTestTriggerServerEvent("serverTest", 'success')--调用成功后会执行 clientTest 事件的代码
[*]调用脚本的内容server.lua(脚本名称exporting):
lua:
--同端调用(服务端到服务端),调用beingExported当中的客户端事件 serverTestTriggerEvent("serverTest", 'success')--调用成功后会执行 serverTest事件的代码--异端调用(服务端到客户端),调用beingExported当中的客户端事件 clientTestTriggerClientEvent("clientTest", 'success')--调用成功后会执行 clientTest 事件的代码
结语:其实事件触发很简单,你也可以把他理解成为函数调用的延伸,使得异端能够互相交互。但是也要把它们两者区分看待,export常用于有返回值(也可以没有)的同端交互,他是一个功能的接口,而事件他是一个行为的接口, 在实际应用当中应该区分他们的定义,否则会导致逻辑混乱。
补充:事件的触发可以由单点触发多点接收去适用于各种开发需求,使得多个插件虽然独立为不同模块但是仍然可以相互协作,这也是得益于事件触发的机制。
注意: 本文当中的所有代码我均未测试是否有错误,如有错误请评论指出来,我立即改正。
页:
[1]