当前位置: > 新闻动态 > 文章内容


如何让他人执行指定的脚本unit Q2;inte**ce uses Classes, SysUtils, DateUtils;procedure Main(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);procedure SayHello(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);implementationprocedure Main(Npc: TNormNpc; Player: TPlayObject; Args: TArgs);var APlayer: TPlayObject;begin Npc.Say(Player, Hello!!!); //对当前玩家Player说话 APlayer := GameLib.FindPlayer(张三); //在M2中找出一个名叫张三的人 if APlayer nil then //如果张三在线 b仿天心传奇egin //方法1(推荐): SayHello(Npc, APlayer, nil); //直接调用函数执行,最后一个参数如果传递为nil,则在对应的函数处理要避免访问或者需要保护处理 //方法2: APlayer.CallMethod(Npc, @Q2.SayHello); //最终效果和方法1相同,这里多了一个回传到M2中的步骤,在调用SayHello函数时,存在Args对象 //两者使用的区别在于,方法1简传奇sf迷失单直接且更高效,但是需要自行处理Args参数,如果直接传递当前的Args参数则可能是不对的,因为当前Args参数 /1 76传奇私服发布网/针对的是当前函数调用者,而在让其他玩家触发函数的时候,可能当前的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;

相关文章