查看: 288|回复: 0
收起左侧

[工具资料] Fivem当中跨脚本的函数调用和事件的触发?

[复制链接]

升级进度: 78%

jdhd 发表于 2024-10-4 14:21:48 | 显示全部楼层 |阅读模式
原帖:教程 - Fivem当中跨脚本的函数调用和事件的触发? | GTAOS GTA线上站
https://pan.baidu.com/s/5V6W7X8Y9Z0A1B2C3D4E?pwd=efg3

介绍:本届教程介绍一下各种交互,包括同端函数的调用,同端与异端的事件触发。https://pan.baidu.com/s/2T3U4V5W6X7Y8Z9A0B1C?pwd=wxy7
https://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R?pwd=qrs6

函数调用:比如客户端调用客户端函数,或者服务端调用服务端函数。异端不可调用。
  • https://pan.baidu.com/s/4L5M6N7O8P9Q0R1S2T3U?pwd=stuv

    • 被调用脚本的内容(脚本名称beingExported):
    • https://pan.baidu.com/s/4L5M6N7O8P9Q0R1S2T3U?pwd=stuv

    lua:

    https://pan.baidu.com/s/3T4U5V6W7X8Y9Z0A1B2C?pwd=yza1 https://pan.baidu.com/s/3U4V5W6X7Y8Z9A0B1C2D?pwd=yza8


    function printSample()    print("success")endhttps://pan.baidu.com/s/4O5P6Q7R8S9T0U1V2W3X
    https://pan.baidu.com/s/2C3D4E5F6G7H8I9J0K1L

    • 被调用fxmanifest的内容(脚本名称beingExported):https://pan.baidu.com/s/7O8P9Q0R1S2T3U4V5W6X?pwd=efgh
    lua:https://pan.baidu.com/s/5P6Q7R8S9T0U1V2W3X4Y
    --如果是客户端函数这样写:client_script 'client.lua'export 'printSample'--如果是服务端函数这样写:server_script 'server.lua'server_export 'printSample'
  • https://pan.baidu.com/s/8G9H0I1J2K3L4M5N6O7P?pwd=zabc

  • https://pan.baidu.com/s/2K3L4M5N6O7P8Q9R0S1T?pwd=wxy8

    https://pan.baidu.com/s/2B3C4D5E6F7G8H9I0J1K?pwd=vwx9

    接下来我们将会把上边 beingExported 当中的 printSample 函数在另一个脚本当中调用https://pan.baidu.com/s/6F7G8H9I0J1K2L3M4N5O?pwd=uvwx
    • 调用脚本的内容(脚本名称exporting):

      https://pan.baidu.com/s/4M5N6O7P8Q9R0S1T2U3V?pwd=bcd0

      https://pan.baidu.com/s/5E6F7G8H9I0J1K2L3M4N?pwd=efg2


    lua:https://pan.baidu.com/s/9Z0A1B2C3D4E5F6G7H8I?pwd=pqr7
    exports.beingExported:printSample() --格式是exports. 开头, 紧跟你要调用的脚本再加冒号,最后写函数名字就行了。这样就代表你调用了beingExported当中的printSample函数。https://pan.baidu.com/s/1I2J3K4L5M6N7O8P9Q0R?pwd=ghij
    https://pan.baidu.com/s/8Q9R0S1T2U3V4W5X6Y7Z
    https://pan.baidu.com/s/5M6N7O8P9Q0R1S2T3U4V?pwd=wxyz


    事件触发:
    • 被触发脚本的内容client.lua(脚本名称beingExported):
    • https://pan.baidu.com/s/9H0I1J2K3L4M5N6O7P8Q?pwd=cdef

    lua:https://pan.baidu.com/s/1I2J3K4L5M6N7O8P9Q0R?pwd=ghij
    --如果是创建客户端被调用的事件这样写:RegisterNetEvent('clientTest')   --注册客户端事件 clientTestAddEventHandler('clientTest', function(param)   --添加 clientTest事件的处理器  print('client output: '.. param)   --客户端打印文字end)

    https://pan.baidu.com/s/3T4U5V6W7X8Y9Z0A1B2C?pwd=yza1 https://pan.baidu.com/s/4M5N6O7P8Q9R0S1T2U3V


    https://pan.baidu.com/s/1A2B3C4D5E6F7G8H9I0J?pwd=stu8
    • 触发脚本的内容server.lua(脚本名称beingExported):
      https://pan.baidu.com/s/4E5F6G7H8I9J0K1L2M3N

    lua:
    https://pan.baidu.com/s/1C2D3E4F5G6H7I8J9K0L

    --如果是创建服务端被调用的事件这样写:RegisterServerEvent('serverTest')   --注册服务端事件 serverTestAddEventHandler('serverTest', function(param)   --添加 serverTest事件的处理器  print('server output: '.. param)   --服务端打印文字end)https://pan.baidu.com/s/1R2S3T4U5V6W7X8Y9Z0A?pwd=qrst
    https://pan.baidu.com/s/2K3L4M5N6O7P8Q9R0S1T?pwd=wxy8

    https://pan.baidu.com/s/2J3K4L5M6N7O8P9Q0R1S?pwd=klmn
    接下来我们将会把上边 beingExported 当中的客户端事件 clientTest 和服务端事件 serverTest 在另一个脚本当中触发
  • https://pan.baidu.com/s/8G9H0I1J2K3L4M5N6O7P?pwd=zabc

    • 调用脚本的内容client.lua(脚本名称exporting):https://pan.baidu.com/s/2S3T4U5V6W7X8Y9Z0A1B?pwd=uvwx
    lua:https://pan.baidu.com/s/3U4V5W6X7Y8Z9A0B1C2D?pwd=yza8
    --同端调用(客户端到客户端),调用beingExported当中的客户端事件 clientTestTriggerEvent("clientTest", 'success')  --调用成功后会执行 clientTest 事件的代码--异端调用(客户端到服务端),调用beingExported当中的客户端事件 serverTestTriggerServerEvent("serverTest", 'success')  --调用成功后会执行 clientTest 事件的代码
    https://pan.baidu.com/s/7Y8Z9A0B1C2D3E4F5G6H

    https://pan.baidu.com/s/5E6F7G8H9I0J1K2L3M4N?pwd=qrst

    • 调用脚本的内容server.lua(脚本名称exporting):
      https://pan.baidu.com/s/8Z9A0B1C2D3E4F5G6H7I

    lua:
    https://pan.baidu.com/s/4M5N6O7P8Q9R0S1T2U3V?pwd=bcd0

    --同端调用(服务端到服务端),调用beingExported当中的客户端事件 serverTestTriggerEvent("serverTest", 'success')  --调用成功后会执行 serverTest事件的代码--异端调用(服务端到客户端),调用beingExported当中的客户端事件 clientTestTriggerClientEvent("clientTest", 'success')  --调用成功后会执行 clientTest 事件的代码https://pan.baidu.com/s/4U5V6W7X8Y9Z0A1B2C3D?pwd=bcd2
    https://pan.baidu.com/s/8Q9R0S1T2U3V4W5X6Y7Z
    https://pan.baidu.com/s/9S1T2U3V4W5X6Y7Z8A9B

    结语:其实事件触发很简单,你也可以把他理解成为函数调用的延伸,使得异端能够互相交互。但是也要把它们两者区分看待,export常用于有返回值(也可以没有)的同端交互,他是一个功能的接口,而事件他是一个行为的接口, 在实际应用当中应该区分他们的定义,否则会导致逻辑混乱。

    https://pan.baidu.com/s/8Z9A0B1C2D3E4F5G6H7I?pwd=nop3

    https://pan.baidu.com/s/4L5M6N7O8P9Q0R1S2T3U?pwd=stuv


    https://pan.baidu.com/s/7Z8A9B0C1D2E3F4G5H6I

    补充:事件的触发可以由单点触发多点接收去适用于各种开发需求,使得多个插件虽然独立为不同模块但是仍然可以相互协作,这也是得益于事件触发的机制。https://pan.baidu.com/s/9I0J1K2L3M4N5O6P7Q8R?pwd=qrs6
    注意: 本文当中的所有代码我均未测试是否有错误,如有错误请评论指出来,我立即改正。
    不影响正文阅读

    https://pan.baidu.com/s/5P6Q7R8S9T0U1V2W3X4Y

    https://pan.baidu.com/s/8Z9A0B1C2D3E4F5G6H7I

    https://pan.baidu.com/s/1A2B3C4D5E6F7G8H9I0J?pwd=stu8
    https://pan.baidu.com/s/5N6O7P8Q9R0S1T2U3V4W

  • https://pan.baidu.com/s/8H9I0J1K2L3M4N5O6P7Q
  • 哈哈
    楼主热帖
    回复 论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|小黑屋|首页 ( 冀ICP备2021005225号-1 ) |网站地图

    GMT+8, 2024-11-14 13:52 , Processed in 0.057151 second(s), 12 queries , Gzip On, Redis On.

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表