• 400-123-4567

    工作时间

    周一至周五:9:00-21:00

    周末及节日:9:00-18:00

  • 手机版二维码

    随时手机查素材

  • 扫描二维码

    加入官方微信群

网络广告 风险自担
趣游论坛 管理员
  • 未知地域
  • 活跃会员

  • 灌水之王

  • 突出贡献

  • 优秀版主

  • 荣誉管理

  • 论坛元老

  • 10573发帖数
  • 10565主题数
  • 0关注数
  • 2粉丝

[其它端游引擎] 77M2引擎如何让他人执行指定的脚本讲解和命令范例

  [复制链接]
趣游论坛 发表于 2019-6-5 14:03:17 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
20190604095426.png

如何让他人执行指定的脚本
unit Q2;

inte**ce
  uses  Classes, SysUtils, DateUtils;

procedure Main(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
procedure SayHello(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);

implementation

procedure Main(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
var
  APlayer: TPlayObject;
begin
  Npc.Say(Player, 'Hello!!!'); //对当前玩家Player说话  
  APlayer := GameLib.FindPlayer('张三'); //在M2中找出一个名叫“张三”的人
  if APlayer <> nil then //如果"张三"在线
  begin                     
    //方法1(推荐):
    SayHello(Npc, APlayer, nil);   //直接调用函数执行,最后一个参数如果传递为nil,则在对应的函数处理要避免访问或者需要保护处理   

    //方法2:
    APlayer.CallMethod(Npc, '@Q2.SayHello'); //最终效果和方法1相同,这里多了一个回传到M2中的步骤,在调用SayHello函数时,存在Args对象

    //两者使用的区别在于,方法1简单直接且更高效,但是需要自行处理Args参数,如果直接传递当前的Args参数则可能是不对的,因为当前Args参数
    //针对的是当前函数调用者,而在让其他玩家触发函数的时候,可能当前的Args参数并不合适,同时方法1调用方式如果函数名改变的时候在编译期
    //是能被发现的;方法2则是将字符串“@Q2.SayHello”回传给M2,解析出对应的SayHello函数及参数,然后再调用SayHello,这种方式会自动产生
    //Args参数,但是当SayHello更名的时候如果不主动修改方法2这里的参数将会造成玩家不会执行对应的函数调用,所以使用方法2就必须自己同步
    //维护相关参数
  end;
end;

procedure SayHello(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);
begin
  Npc.Say(Player, 'Hello!!!');
end;


回复

使用道具 举报

精彩评论1

13054741413 发表于 4 天前 | 显示全部楼层
路过,瞅一瞅
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

猜你喜欢
客服电话
1300000000

24x7小时免费咨询

  • 官方在线客服

    QQ客服:小西

    点击交谈

    QQ客服:良子

    点击交谈

    QQ客服:闵月

    点击交谈
  • 上海市虹口区海伦中心A座

  • 手机扫码查看手机版

    手机查找资源更方便

  • 扫一扫关注官方微信

    加入官方微信群

Powered by Discuz!X3.5 ©2022-2023 Comsenz Inc.河月网络设计( 赣ICP备2022008660号-4 )赣公网安备36050202000600号|网站地图