csbkliyagu 发表于 2025-3-6 01:21:49

77M2引擎如何让他人执行指定的脚本讲解和命令范例

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

inte**ce
usesClasses, 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;

九霄沉默 发表于 2025-3-6 01:28:47

谢谢楼主!喜欢这里的东西,方便又好用!

风云合击 发表于 2025-3-6 18:44:58

感谢站长分享开区一条龙教程,新手能学习到很多知识。

羽国沉默 发表于 2025-3-6 21:33:11

感谢站长分享开区一条龙教程,新手能学习到很多知识。

星王合击 发表于 2025-3-6 23:22:57

传奇论坛里面相对来说比较好的一个!感谢站长分享的技术教程。

道盾合击 发表于 2025-3-7 07:51:02

楼主发贴辛苦了,谢谢楼主分享!

帝王火龙 发表于 2025-3-7 23:28:48

新手上路不用愁,碰到传奇架设问题可以来这搜索。

逍遥微变 发表于 2025-3-8 09:45:57

感谢站长分享开区一条龙教程,新手能学习到很多知识。

牛家村专属 发表于 2025-3-8 10:10:29

楼主发贴辛苦了,谢谢楼主分享!

大掌柜无限刀 发表于 2025-3-8 12:38:23

传奇论坛里面相对来说比较好的一个!感谢站长分享的技术教程。
页: [1] 2 3 4
查看完整版本: 77M2引擎如何让他人执行指定的脚本讲解和命令范例