登录
×
  • 首页
  • 传奇论坛
  • 传奇版本库
  • 传奇服务端
  • 传奇三端手游
  • 传奇素材网
  • 传奇客户端
  • 引擎登录器
  • 下载排行
  • 获取邀请码
  • 搜索
    传奇素材网
    126331

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

     火... [复制链接]

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

     火... [复制链接]
    趣游论坛

    1万

    主题

    203

    回帖

    11万

    积分

    管理员

    积分
    112726

    灌水之王活跃会员突出贡献优秀版主荣誉管理论坛元老

    趣游论坛 2019-6-5 14:03:17 / 显示全部楼层 /阅读模式
    126331
    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;


    回复

    使用道具 举报

    13054741413

    0

    主题

    70

    回帖

    391

    积分

    注册用户

    积分
    391
    13054741413 2024-11-20 15:58:09 / 显示全部楼层
    路过,瞅一瞅
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    扫一扫加群沟通交流

    首页 论坛 !mobpost! 最新 我的