千年技术吧+ 关注 关注:3 帖子:257

  

千年NPC脚本教学【新手篇】

  • 枫之精英

    近来由于大家对千年私服的成熟化了解,很多玩家提出脚本如何编译,那么今天给大家介绍一下,有兴趣研究的网友请跟帖,本帖禁止提问与广告。


    下面我就拿捕盗大将脚本

    先打开 捕盗大将.txt 内容如下

    -------------------------------------------------

    unit 捕盗大将; //定义与脚本相关的NPC内部名称

    interface

    function GetToken (aStr, aToken, aSep : String) : String;
    function CompareStr (aStr1, aStr2 : String) : Boolean;
    function callfunc (aText: string): string;
    procedure print (aText: string);
    function Random (aScope: integer): integer;
    function Length (aText: string): integer;
    procedure Inc (aInt: integer);
    procedure Dec (aInt: integer);
    function StrToInt (astr: string): integer;
    function IntToStr (aInt: integer): string;
    procedure exit;

    procedure OnGetResult (aStr : String);
    procedure OnLeftClick (aStr : String);

    implementation

    procedure OnLeftClick (aStr : String); //鼠标左键激活 这是个条件
    var
    Str : String;
    Race : Integer;
    begin
    Str := callfunc ('getsenderrace');
    Race := StrToInt (Str);
    if Race = 1 then begin
    Str := 'showwindow .\help\捕盗大将.txt 1'; //定义窗口显示 help文件夹下面的对应文件
    print (Str); //执行
    exit; 
    end;
    end;

    procedure OnGetResult (aStr : String); //取得结果 也是个先决条件 下面的脚本都是在这个前提下激活的
    var
    Str, Name : String;
    begin
    if aStr = 'close' then begin //如果接受到 close 这个命令
    exit; //关闭
    end; 
    if aStr = 'sell' then begin //如果接受到 sell 命令
    Name := callfunc ('getsendername'); //取得发送者角色名称
    Str := 'tradewindow ' + Name; //定义交易窗口
    Str := Str + ' 0';
    print (Str); //执行
    exit;
    end;
    if aStr = 'buy' then begin //如果接受到 buy 命令
    Name := callfunc ('getsendername'); //取得发送者角色名称
    Str := 'tradewindow ' + Name; //定义交易窗口
    Str := Str + ' 1';
    print (Str); //执行
    exit;
    end;
    if aStr = 'make' then begin //如果接受到 make 命令
    Str := callfunc ('getsenderitemexistence 犀牛角:5'); //检查发送者背包里面是否存在某物品:数量
    if Str = 'false' then begin //如果条件不成立 即没有 符合数量的物品
    Str := 'say 快弄5个犀牛角再说'; //定义结果
    print (Str); //执行
    exit;
    end;
    if Str = 'true' then begin //如果条件成立 即有 符合数量的物品
    Str := callfunc ('getsenderitemexistence 银元:2'); //检查发送者背包里面是否存在某物品:数量
    if Str = 'false' then begin //如果条件不成立 即没有 符合数量的物品
    Str := 'say 有两个银元吗?'; //定义结果
    print (Str); //执行
    exit;
    end;
    if Str = 'true' then begin //如果条件成立 即有 符合数量的物品
    Str := callfunc ('checkenoughspace'); //检查角色背包是否有剩余空间
    if Str = 'false' then begin //如果条件不成立 没空位置了
    print ('say 物品栏已满'); //执行结果
    exit;
    end;

    Str := 'getsenderitem 犀牛角:5'; //变量:从角色背包里面收取 某物品:数量
    print (Str); //执行
    Str := 'getsenderitem 银元:2'; //变量:从角色背包里面收取 某物品:数量
    print (Str); //执行
    Str := 'putsendermagicitem 桂林符:1 @捕盗大将 4'; //发送某物品到角色背包
    print (Str); //执行
    Str := 'say 收好了..-这就是桂林符~'; //定义变量
    print (Str); //执行
    exit;
    end;
    end;
    exit;
    end;
    end;

    end.

    --------------------------------------------

    程序格式一般来说是

    取得信息对比条件变量

    条件不成立 返回结果1 条件成立 返回结果2 或者 继续执行下一个条件

    然后关门结束

    Str := 'say 收好了..-这就是桂林符~'; //定义变量
    print (Str); //执行

    这段是分开来的 精简 为 print ('say 收好了..-这就是桂林符~') 效果是一样的

    增加条件 要记得关门 也就是 如果有 if 就要有 end;

    如果有 if ......then begin 那就要对应有 exit; end; 1000y
    online

    N.G.K 王者之风



    1楼  2023/2/1 20:04:50  回复

  发表回复

    发帖