设为首页收藏本站★元宝充值★★购买会员★★传奇QQ群★

一休论坛

网络广告风险自担
 找回密码
 立即注册
查看: 31|回复: 0

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

[复制链接]
  • TA的每日心情
    慵懒
    2015-7-29 13:47
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2019-6-6 11:00:38 | 显示全部楼层 |阅读模式
    网络广告风险自担
    网络广告风险自担
    77M2引擎传奇服务端如何让他人执行指定的脚本讲解和命令范例


    如何让他人执行指定的脚本
    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;




    上一篇:BLUE引擎传奇GM基地增加重叠物品数量限制和修改怪物爆出物品功能讲解
    下一篇:77M2引擎传奇私服版本让玩家回城脚本 91M2引擎如何在客户端显示一个特效
    回复

    举报

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

    本版积分规则

    网络广告风险自担
    一休论坛在线客服
    收 起 客 服

    小黑屋|传奇一条龙|GM基地|GM版本库|一休论坛

    GMT+8, 2019-6-27 08:37 , Processed in 0.468001 second(s), 91 queries , Gzip On.

    传奇一条龙 GM基地 版本库 传奇论坛 传奇漏洞论坛 传奇服务端下载 传奇版本

    一休论坛资料来自网络仅供学习交流之用,用于商业后果自负

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