OK論壇

 找回密碼
 註冊
查看: 25900|回復: 12

[知識] [ 撰 寫 腳 本 ]

 關閉 [複製鏈接]
  • TA的每日心情
    開心
    2019-8-18 04:57 PM
  • 簽到天數: 2148 天

    連續簽到: 1 天

    [LV.Master]伴壇終老

    發表於 2010-8-25 00:35:14 | 顯示全部樓層 |閱讀模式
    購 買 本 主 題 只 是 純 贊 助 , 你 不 購 買 也 可 以

    腳 本 運 作 觀 念
    讀 取 ( 運 轉 ) 方 向 先 由 左 而 右 再 由 上 而 下
    還 會 依 照 數 學 規 則 , 先 乘 除 後 加 減
    先 小 () 在 大 ()
    範 例
    (1 + (1 + ( 1 + 1)))
    從 右 到 左



    腳 本 固 定 的 格 式
    分 2 類 ( 常 用 )
    1. NPC
    prontera,156,196,5<這邊是要按tab>script<這邊是要按tab>黑暗之王<這邊是要按tab>737,{
            mes "[黑暗之王]";
            mes "滅亡之天來了! 人類們,";
            mes "你們要緊張!!!!!";
            close;
    }
    prontera 是地圖名稱 可以用/where 取得

    156 是x座標 可以用/where 取得

    196 是y座標 可以用/where 取得

    5 是 面對方向 建議多試幾次 就知道多少是面對哪個方向
    黑暗之王 是 NPC的名稱
    737 是外觀 (點我下載外觀表)

    2. function
    // - 隨時隨地打開倉庫
    // - 沒有參數
    function<這邊是要按tab>script<這邊是要按tab>F_CashStore<這邊是要按tab>{
            cutin "kafra_01",2;
            mes "[卡普拉 職員]";
            mes "您好, 我是卡普拉呼叫服務,";
            mes "按照你的邀請開啟倉庫了";
            close2;
            openstorage;
            cutin "",255;
            return;
    }
    F_CashStore 是這個函數的名稱


    購買主題 已有 141 人購買  本主題需向作者支付 50 積分 才能瀏覽
    回復

    使用道具 舉報

  • TA的每日心情
    開心
    2019-8-18 04:57 PM
  • 簽到天數: 2148 天

    連續簽到: 1 天

    [LV.Master]伴壇終老

     樓主| 發表於 2010-8-25 00:35:59 | 顯示全部樓層

    [ 開 始 撰 寫 ]

    腳 本 是 由 指 令 構 成 的
    所 以 , 你 需 要 知 道 各 個 指 令 的 用 途
    雖 然 每 個 開 機 檔 都 有 附 上 說 明 文 件 ( 資 料 夾 名 稱 : doc )
    但 是 由 於 是 英 文
    所 以 絕 大 多 數 的 人 都 看 不 懂
    所 幸 , 有 位 神 人 , 中 文 化 指 令 說 明
    Ea 所有函數講解 by 哆啦ˇ
    再 來 你 腦 海 中 一 定 要 有 明 確 的 方 向
    比 如 說
    我 要 寫 個 告 示 牌 當 玩 家 點 他 的 時 候
    他 會 顯 示 " 歡迎光臨 "一 開 始
    固 定 格 式 先 打 好 ( 注意! { 和 } 在任何時候 都不建議省略 )
    prontera,156,196,5<這邊是要按tab>script<這邊是要按tab>告示牌<這邊是要按tab>737,{

    }

    再 來
    我 需 要 知 道 怎 顯 示 一 個 視 窗 如


    http://goo.gl/YKXxln

    讓 我 們 進 去 doc\script_commands.txt 裡面


    找 到 專 門 用 來 顯 示 這 種 訊 息 的 語 法
    mes "<string>";

    至 於 為 什 麼 知 道 是 這 個
    就 必 須 仰 賴 你 多 看 別 人 的 腳 本 來 得 知 了

    然 後 依 據 中 文 說 明

    我 們 知 道
    mes "這裡面打的字,就會被如範例圖那樣,顯示出來";

    這 裡 要 注 意
    所 有 指 令 使 用 結 束 都 要 用 " ; " 作 結 尾

    所 以
    最 後 , 我 們 的 告 示 牌 腳 本 就 是 這 樣
    prontera,156,196,5<這邊是要按tab>script<這邊是要按tab>告示牌<這邊是要按tab>737,{
    mes "歡迎光臨";
    close;
    }

    這 邊 補 充 一 個 事 情
    你 可 能 會 在 其 他 人 腳 本 上 看 到
    close; 後 面 接 個 end;
    這 裡 告 訴 你
    當 你 有 用 mes ""; 時 候 就 要 記 得 用 close; 作 結 尾
    你 用 end; 是 關 閉 不 暸 訊 息 視 窗 的
    而 當 你 用 close; 做 結 束 後
    就 不 需 要 用 end; 了
    還 有 一 個 類 似 的 指 令 是 close2;
    這 後 面 再 提
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2019-8-18 04:57 PM
  • 簽到天數: 2148 天

    連續簽到: 1 天

    [LV.Master]伴壇終老

     樓主| 發表於 2010-8-25 00:36:33 | 顯示全部樓層

    [ 個 人 認 為 重 要 的 基 本 指 令 ]

    顯 示 訊 息 視 窗

    mes "<string>";


    產 生 "下一頁" 的 按 鈕
    next;


    關 閉 訊 息 視 窗
    (mes)(select)(menu), 讓 玩 家 徹 底 結 束 NPC 執 行
    close;


    單 純 關 閉 訊 息 視 窗
    (mes)(select)(menu), 玩 家 其 實 還 有 繼 續 執 行 NPC

    close2;


    指 令 運 轉 到 此 就 結 束
    end;
    xxx(代表某些指令)
    end;
    yyy(代表某些指令)
    yyy不會被執行


    移 動 到 特 定 標 籤
    goto <label>;
    xxx(代表某些指令)
    goto Onhhh;
    yyy(代表某些指令)
    Onhhh:
    zzz(代表某些指令)
    你不會執行yyy這些指令 因為你移動到標籤Onhhh:
    而Onhhh:
    下面有zzz
    所以會繼續執行zzz


    製造出一個選單
    使用方法是
    "選單名稱1",移動到的標籤1(參考goto),"選單名稱2",移動到的標籤2,"選單名稱3",移動到的標籤3
    menu "<option_text>",<target_label>{,"<option_text>",<target_label>,...};


    讓你 輸入 文字 或是數字得框框
    使用方法是
    input <輸入的數字或文字要存成或存到哪個變數上>;
    input(<variable>{,<min>{,<max>}})

    (你可以添加以下範例去測試看看)
    input @x;
    mes @x;



    取得身上特定物品的數量
    countitem(item-id)
    1. if(countitem(501)<5)
    2. {
    3. mes "你身上的紅色藥水少於5";
    4. }
    複製代碼
    取得物品
    getitem <item-id>,<amount>;
    1. //取得5瓶紅色藥水
    2. getitem 501,5;
    複製代碼
    刪除身上物品
    delitem <item-id>,<amount>;
    1. //刪除5瓶紅色藥水
    2. delitem 501,5;
    複製代碼
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2019-8-18 04:57 PM
  • 簽到天數: 2148 天

    連續簽到: 1 天

    [LV.Master]伴壇終老

     樓主| 發表於 2010-8-25 00:36:56 | 顯示全部樓層

    [ 超 級 重 要 的 if & set ]

    首 先 先 看
    SET 數 值 , SET 使 用

    正 確 使 用 IF
    有 個 基 本 的 小 認 識
    set 部 分
    set 前墜(變數名稱)後標 , xxxx ;

    前墜
    @    人物帳號不紀錄變量 (這變數,當人物登出就會消失(關機時,人物也算是登出))

    無    人物帳號紀錄變量 (這變數,即使人物登出,也不會消失)

    $      伺服器紀錄變量 (這變數,即使關機,也不會消失)

    $@  伺服器不紀錄變量 (這變數,關機或使用@reloadscript 都會讓他消失)

    .        NPC紀錄變量(類似$@但是他只有在你執行這個NPC時後才可以使用--->只存在這個NPC上的變數)

    .@    NPC不紀錄變量 (NPC停止運轉(像是被end;了) 就會消失)

    # 會記錄在帳號上的變數

    ## 會記錄在帳號上的變數(如果私服有分流,那就是分流上,都會共用的到(你可以想成線上遊戲要買的點數,就是這個))

    後標
    無 那這個變數用來存數字的
    $ 這變數是用來存字串(文字)的


    再 延 伸
    有 所 謂 的 陣 列 ( array )( 前墜(陣列名稱)後標[n] )
    所 謂 的 陣 列
    就 是 把 好 幾 個 變 數 的 集 合 體
    舉 例
    $@x[1]
    $@x[2]
    $@x[n] (n需小於128和大於等於0)

    陣 列 通 常 是 用 在 資 料 間 有 關 係 的 時 候
    比 如 說 都 是 用 來 存 取 腳 色 名 稱 的 陣 列
    而 陣 列 常 常 都 配 合 迴 圈 使 用(點我)
    因 為 數 據 彼 此 間
    可 以 藉 由 [n] 的 不 同
    做 串 接

    陣 列 的 設 定 分 成 單 一 設 定
    和 多 個 設 定
    單 一 設 定 就 是 用 set 然 後 指 定 n

    set $@x[1],1234;

    或 是 一 次 多 個
    setarray $@x[1],1,2,3,4;

    上 面 可 以 一 次 就 設 定 好
    $@x[1] = 1
    $@x[2] = 2
    $@x[3] = 3
    $@x[4] = 4


    有 些 類 型 不 能 用 陣 列
    +==========+======+=======+
    |VarType   | 一般 | 陣列 |
    +==========+======+=======+
    |$Str$     | OK!  | OK!   |
    +----------+------+-------+
    |$@Str$    | OK!  | OK!   |
    +----------+------+-------+
    |@Str$     | OK!  | OK!   |
    +----------+------+-------+
    |#Str$     | OK!  | FAIL! |
    +----------+------+-------+
    |Str$      | OK!  | FAIL! |
    +----------+------+-------+
    |$Int      | OK!  | OK!   |
    +----------+------+-------+
    |$@Int     | OK!  | OK!   |
    +----------+------+-------+
    |@Int      | OK!  | OK!   |
    +----------+------+-------+
    |#Int      | OK!  | FAIL! |
    +----------+------+-------+
    |Int       | OK!  | FAIL! |
    +----------+------+-------+
    |.Str$     | OK!  | OK!   |
    +----------+------+-------+
    |.Int      | OK!  | OK!   |
    +----------+------+-------+
    |.@Str$    | OK!  | OK!   |
    +----------+------+-------+
    |.@Int     | OK!  | OK!   |
    +----------+------+-------+



    從 mes ""; 告 訴 你 變 數 的 一 些 使 用 規 則
    如 果 @x = 1
    mes "@x";
    他 會 顯 示 @x 而 非 1
    但 如 果
    mes @x;
    他 就 會 顯 示 1

    mes "0"+@x;
    他 會 顯 示 01
    再 多 一 點
    mes "0"+@x+"1";
    他 會 顯 示 011

    補 充 :
    清 除 變 數
    範 例
    set @x,0;
    set @x$,"";


    第 二 種 說 明

    set 相關
    變數的定義 .. <儲存位子><變數名稱><資料型態>
    set .@i,0;
    設變數 儲存位置 變數名稱 為 0
    首先先說儲存位置
    @   代表暫時存在玩家身上,當和切換腳色就會消失。
    .@  暫時存在NPC身上,對話結束才會消失。 ps.當碰到 end; close;就會不見
    $    存在伺服器會一直存在。(永遠儲存在伺服器裡面)
    $@ 伺服器暫時存在,關機後就消失。 ps. @reloadscript也會使$@消失
          直接存到玩家身上。
    #    是角色永久變數
    ##  是全部帳號永久變數 ps.## 以及 # 分流會共通、$ 分流不會共通




    變數名稱
    不能和函數重疊,還有不能加上特殊符號並且開頭不能為數字

    資料型態
    $ -> 為文字
    所以$就等於字串
    後面沒有東西就是數字

    例如
    set .@i$,"abc";
    在所有語言中..字串都必須用雙引號""起來
    反之(錯誤示範)
    set .@i$,cba; 不會叫
    只不過.@i$會變成0
    因為 變數 cba = 0
           請反白上面
    ---以下有些例子
    set .@i$,"abc"+.@i+ "cba";
    Q:這樣有效嘛? A:有效。
    mes .@i$;會顯示abc0cba
    因為.@i你沒給他一個值,所以.@i==0
            請反白上面。
    -
    只要是沒給過值的變數
    如.
    變數 == mes顯示的文字
    .@i$ == "null"
    null 代表 .. "" 空字串
    .@i == 0

    ---
    運算符號

    + 如果在字串和字串運算的時候、會把兩個字串相連起來
       而在數字運算的時候、才會把兩個數字相加起來
       所以 "A" + 1 他會把他相連起來 變成 "A1"
        那如果改成 mes 1 + 1 + "A";
        mes 1 + 1 + "A"; => mes 2 + "A"; => mes "2A";請反白前面

    四則運算 先乘除後加減,括號裡面先運算。
                ps.由左到右
    所以 1 + 1 = 2
    2 + A =2A
    A + 1 + 1 = A+1= A1 + 1 = A11
    而字串和數字不能運算、所以 如果 "A" - 1 會出錯

    Q:mes "B" + (1 + 1); 會顯是什麼? A:B2 請反白前面
    Q:mes "A" + "B"; 會顯是什麼? A: AB 請反白前面
    Q:那為什麼mes "A" + 1 - 1; 會錯? A: () 請反白前面
    Q:mes "A" + ( 1 - 2); 會顯是什麼? A: mes "A" + (1-2); => mes "A" + -1 => mes "A-1"; 請反白前面
    Q:mes "A" + 1 * 3; 會顯是什麼? A: A3 請反白前面
    Q:mes "A" + 1 * 2 + (3 - 1 + "B"); 會顯是什麼? A: A22B 請反白前面

    % 代表求餘數
        5 / 2 = 2.5
        但是我們在要求餘數
        所以 5 / 2 = 2餘1
        可是腳本不知道你要2.5還是2..1
        所以跑出一個 %
        5%2 = 1
        那取整數?(不取餘數)
        (5 - ( 5 % 2 )) / 2 先把餘數減掉在去 除

    Q:mes 10%7; 等於什麼? A: 3 請反白前面
    Q:mes 100%96; 等於什麼? A: 4 請反白前面
    小方法分享 ↓請反白↓
    例如我們要求5 % 2的餘數
    5 - 2 = 3 - 2 = 1 我們要求的數就是 1
    如果換求10 % 7 的餘數
    10 - 7 = 3 3不能再減了所以就是我們要的答案 3
                   ↑請反白↑
    稍微進階
    % 通常用在判斷是不是倍數
    例如:要判斷 .@a 是不是 300 的倍數
    就會這樣用
    if(.@a % 300 == 0){是倍數}else{不是倍數}
    整除代表一定是他的倍數
      5 / 5 = 1 ... 0 10 / 5 = 2 ... 0 整除的話才會是倍數


    ^ 在正常生活中常常會用到的次方、開根號。
       pow(2,3) = 2 的三次方 = 8,sqrt(4) = 4 的開根號 = 2
       pow() -> 次方
       sqrt() -> 開根號
       1^1 = 0 、 1^0 = 1 、 0^0 = 0 、 0^1 = 1
       相同為 0 、 相異為 1

    ---
    角色的變數
    指令
    說明
    Sex性別[0=女][1=男]
    Weight目前負重
    MaxWeight最大負重
    JobLevel職業等級
    BaseExp基本經驗值
    JobExp職業經驗值
    NextBaseExp下次升級基本經驗值
    NextJobExp下次升級職業經驗值
    Hp目前HP
    MaxHp最大HP
    Sp目前SP
    MaxSp最大SP
    BaseJob職業編號,顯示直為職業編號,效果不明。
    Manner結婚
    Zeny目前Zeny
    Upper轉生[0=未轉][1=已轉]
    Class職業
    SkillPoint技能點數
    BaseLevel基本等級
    StatusPoint屬性點數


    ---
    判斷式
    判斷式有兩個
    if(條件)指令
    jump_zero(條件)標籤
    if翻成中文叫做 如果

    set .@i,5;
    if( .@i == 5) 這是什麼意思?
    如果.@i=5會執行下一階段命令
    -

    if( i == 0){ getitem 607,1; set i,1; }
    如果沒領過 i 當然沒被設定所以會是 0
    如果沒領過就執行裡面的內容
    領過之後set i,1; 他就會改成 1 所以永遠不能再領了
    -
    以下是if常用到的符號
    符號說明
    !=不等於
    >=大於等於
    <=小於等於
    >大於
    <小於
    &&以及(類似AND)
    ||或者

    ↑其實 .. == 、 != 、 >= .... 之類的
    不一定要用在if() 裡面
    也可以當作運算、 因該說、 他原本就是個運算
    稍微進階
    set .@b, 2 == 2; 這樣一來 .@b 會 = 1 、 因為他是正確的。
    而如果說 set .@b, 2 != 2; 、 這樣.@b 會 = 0 、 因為他是錯誤的
    如果運算是成立的會返回 1
    如果運算是錯誤的會返回 0
    -
    countitem() 等於 檢查人物身上的某樣道具
    Count = 數 、 item = 道具 、 CountItem = 數看看身上有幾個道具
    假設我身上放2個天果
    Q:mes countitem( 607);會顯示什麼? A: 2 請反白前面
    Q:set .@i,countitem( 607 );
       mes .@i; 會顯示什麼? A: 2 請反白前面
    -
    == 和 != 和 < 和 > 和 <= 和 >= 也可以拿數字
    所以只要記得 .. 判斷成功 .. 他會顯示 1 如果你說錯 .. 他會顯示 0

    Q:那 mes 1==2; 會顯是什麼? A: 0 請反白前面
    Q:mes 1 == 1; 呢? A: 1 請反白前面
    Q:set .@i, 1 != 1;
       mes .@i; 會顯是什麼? A: 0 請反白前面

    ps.只能用在數字
    ps.字串不能運算!
    ps.!= 不可以應用在 !> 或 !<


    if簡略寫法
    if( 1 ) => 會執行、 if( 0 )不會執行。
    所以 if( @i ) 如果 @i 不是 0 、 就會執行
    也就等於 if( @i != 0)

    if( .@i != 0) 也可以寫成 if(.@i)
    if( .@i == 0) 也可以寫成 if(!.@i)

    想實驗的可以把下面代碼PO到腳本用用看
    1. prontera,150,180,4        script        Goddameit#1        990,{
    2.   if(!@i){
    3.          mes "0"; close;}
    4.          mes "1";
    5.          close;
    6. }
    複製代碼

    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2019-8-18 04:57 PM
  • 簽到天數: 2148 天

    連續簽到: 1 天

    [LV.Master]伴壇終老

     樓主| 發表於 2010-8-25 00:37:43 | 顯示全部樓層

    [ 超 級 重 要 的 if & set ]

    用 if 的 時 候 是 要 一 直 很 確 定 你 要 的 條 件
    和 條 件 哪 來

    例 如 本 篇 文 章(點)

    他 的 判 定 跟 精 練 值 有 關
    所 以 它 需 要 想 辦 法 取 得 精 練 值



    ===========


    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2019-8-18 04:57 PM
  • 簽到天數: 2148 天

    連續簽到: 1 天

    [LV.Master]伴壇終老

     樓主| 發表於 2010-8-25 00:38:25 | 顯示全部樓層

    [ goto 再 延 伸 ]

    前 文 提 到 goto 是 移 動 到 標 籤
    那 如 果 要 移 動 到 某 個 NPC 的 某 個 標 籤 呢

    doevent "NPC-name::Onxxxx";
    donpcevent "NPC-name::Onxxxx";


    2 者 差 異 是
    前 者 需 要 <GID> 後 者 則 不 用 ( 後 者 的 GID 請 當 作 是 伺 服 器 )
    [ RID ? GID ? ]

    使 用 注 意 是
    你 的 標 籤 一 定 是 On 開 頭

    範 例
    prontera,156,196,5<這邊是要按tab>]script<這邊是要按tab>黑暗之王<這邊是要按tab>737,{
            xxxx
            doevent "黑暗之王::Onxxxx";
            close;
    }
    prontera,157,196,5<這邊是要按tab>]script<這邊是要按tab>黑暗之王2<這邊是要按tab>737,{
    Onxxx:
            mes "這段文字會顯示喔";
            close;
    }

    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2019-8-18 04:57 PM
  • 簽到天數: 2148 天

    連續簽到: 1 天

    [LV.Master]伴壇終老

     樓主| 發表於 2010-8-25 00:38:43 | 顯示全部樓層

    [ RID ? GID ? ]

    原 來 解 釋 太 麻 煩
    簡 單 說 就 是

    某 個 數 字 代 表 某 個 東 西

    像 是




    而 RID 和 GID 最 常 困 擾 著 人 的 就 是 出 現 這 個


    意 思 是
    某 個 指 令 應 該 要 有 玩 家 來 執 行
    像 是 如 果 你 在 npc 指 令 上
    設 定 某 個 會 自 動 運 行 的 ( 即 使 沒 有 玩 家 啟 動 ) 指 令
    但 是 又 出 現 需 要 玩 家 操 控 的 指 令
    就 會 出 現 上 圖 的 錯 誤

    範 例

    1. OnInit: mes "哈囉";
    複製代碼
    又 或 是 像
    unitwalk <GID>,<x>,<y>;

    這 個 需 要 指 定 <GID> 的 指 令
    如 果 你 沒 給 他
    他 就 動 不 暸 嚕
    至 於 怎 麼 給 <GID> or <RID> or <CID> or <AID>
    就 需 要 使 用 一 些 腳 本 指 令
    像 是
    getcharid
    可 以 提 供 <CharID> , <;PartyID> , <GuildID> , <AccountID>
    至 於 這 些 做 什 麼 的
    請 各 位 自 己 進 修 嚕

    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2019-8-18 04:57 PM
  • 簽到天數: 2148 天

    連續簽到: 1 天

    [LV.Master]伴壇終老

     樓主| 發表於 2010-8-25 00:39:16 | 顯示全部樓層

    [ 標 籤 !? ]

    goto 會 到 標 籤
    menu 也 會 到 標 籤

    標 籤 就 是 用 來 標 定 特 殊 位 置
    已 讓 腳 本 運 轉 可 以 跳 來 跳 去 ( 參 見 goto 說 明 )
    標 籤 規 則

    不 可 特 殊 符 號 , 僅 限 英 文 和 數 字

    至 於 字 數 ... 不 用 理 他 , 你 不 要 故 意 用 好 幾 千 億 就 對 了

    先 系 統 介 紹 預 設 標 籤 ( 不 管 大 小 寫 )

    當現在是**點**分時候,會自動執行(24小時制度)
    (所以下午3點47分 你就該打 1547)
    OnClock<hour><minute>:

    當現在為幾分時候,會自動執行
    OnMinute<minute>:

    當現在為幾時,時候,會自動執行
    OnHour<hour>:

    當現在為星期n,x點y分時候,會自動執行
    On<weekday><hour><minute>:

    當現在為n月,x日會自動執行
    OnDay<month><day>:

    當你使用@reloadscript和開機時後,會自動執行
    OnInit:

    你重開機時後(應該說,你map-server連結到char-server時候),會自動執行
    OnInterIfInit:

    你重開機時後,會自動執行(但是如果你是關閉map-server在重開,就不會執行)
    OnInterIfInitOnce:

    小 心 GID 問 題 , 這 些 GID = 0 ( 伺服器 )
    OnAgitStart: //攻城戰開打時候,會自動執行
    OnAgitEnd: //攻城戰結束時候,會自動執行
    OnAgitInit: //同OnInit: 不過是在攻城戰,才會自動執行
    OnAgitStart2:  //SE開打時候,會自動執行
    OnAgitEnd2: //SE結束時候,會自動執行
    OnAgitInit2: //同OnInit: 不過是在SE,才會自動執行

    OnPCLoginEvent: //玩家登入提升時候,才會自動執行
    OnPCLogoutEvent: //玩家登出時候,才會自動執行
    OnPCBaseLvUpEvent: //玩家職業等級提升時候,才會自動執行
    OnPCJobLvUpEvent: //玩家技能等級提升時候,才會自動執行

    OnPCDieEvent:
    //玩家死亡時候,才會自動執行,會自動存入一個變數'killerrid',這變數代表殺你的人的<GID>

    OnPCKillEvent:
    //玩家殺玩家時候,才會自動執行,會自動存入一個變數'killedrid',這變數代表被你殺的人的<GID>

    OnNPCKillEvent:
    //玩家殺非玩家時候,才會自動執行,會自動存入一個變數'killedrid',這變數代表被你殺的東西的<GID>

    OnPCLoadMapEvent: //當玩家登入地圖時候,才會執行
    需要配何mapflag(地圖屬性) loadevent
    意思是 如果你的地圖 沒有loadevent這個屬性
    就不會執行 本事件

    OnWhisperGlobal: //當你密語特定NPC時候,才會執行(圖)(注意 npc:CRO)
    密語說的話,會分成3類
    格式如下
    Report#(<--用這分開)Killstealing#(<--用這分開)Lordalfa
    然後系統會自動存入到變數裡面
    @whispervar0$ = "Report"
    @whispervar1$ = "KillStealing"
    @whispervar2$ = "Lordalfa"
    常見的殺人點數
    就是用
    OnPCKillEvent:
      set kill,kill+1;
    做成的


    所 謂 自 動 執 行
    就 是 當 你 滿 足 條 件 後
    他 就 會 自 動 啟 動
    然 後 你 就 會 繼 續 執 行
    標 籤 下 面 的 指 令
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2019-8-18 04:57 PM
  • 簽到天數: 2148 天

    連續簽到: 1 天

    [LV.Master]伴壇終老

     樓主| 發表於 2010-8-25 00:39:35 | 顯示全部樓層

    [ 應 該 要 有 認 知 ][ Mapflag ]


    格 式
    地圖名稱<這邊要按tab>mapflag<這邊要按tab>屬性名稱{<這邊要按tab>off}
    ({}內的可省,off代表關閉這項屬性)

    要 注 意 是
    不 可 以 把 mapflag 的 上 述 設 定 放 到 Npc 裡 面
    ( 這 是 錯 誤 動 作 )
    你 要 把 它 放 在 Npc 的 外 面

    一 些 常 見 的 地 圖 屬 性 問 題
    打 怪 沒 數 字

    這 是 因 為 gvg 模 式


    想 要 讓 怪 物 不 掉 寶
    noloot

    讓玩家不能丟東西
    nodrop

    PK噴裝
    nightmare




    剩 下 的
    就 自 己 翻 譯 嚕

    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2019-8-18 04:57 PM
  • 簽到天數: 2148 天

    連續簽到: 1 天

    [LV.Master]伴壇終老

     樓主| 發表於 2010-8-25 00:39:54 | 顯示全部樓層

    [ 有 點 小 難 度 的 callfunc ]

    [Eathena]Callfunc 腳本指令解說[基礎版本]


    function 叫 做 函 數

    函 數 的 正 規 解 釋 ---> (維基百科)

    你 也 可 以 這 樣 想

    他 就 是 指 令 ( 指 令 其 實 就 是 函 數 構 成 的 )

    所 以

    要 是 我 要 把 顯 示

    mes "asdfghjkl;sdhvjeirjbsierjboietbjoirtbjmietbmskrbnseibneibjrtibjmritbjmeoitbnoirtbnoietbmiorgjbi3rpetb";


    當 成 一 個 指 令 使 用

    那 就 要 先

    做 好 固 定 格 式 ( 見 #1 )

    function<這邊是要按tab>script<這邊是要按tab>xxx<這邊是要按tab>{
            mes "asdfghjkl;sdhvjeirjbsierjboietbjoirtbjmietbmskrbnseibneibjrtibjmritbjmeoitbnoirtbnoietbmiorgjbi3rpetb";
    }


    這 樣 我 以 後 每 當 需 要
    mes "asdfghjkl;sdhvjeirjbsierjboietbjoirtbjmietbmskrbnseibneibjrtibjmritbjmeoitbnoirtbnoietbmiorgjbi3rpetb";


    就 只 需 要
    callfunc "xxx";

    就 可 以 了

    或 者
    你 有 大 量 計 算
    例 如 : 我 要 寫 個 計 算 腳 色 精 練 成 功 機 率
    然 後 影 響 的 可 能 有 10
    計 算 式 子 有 200 行

    如 果 每 次 用 到 他 都 要 全 部 複 製 貼 上 也 是 可 以
    但 是 實 在 太 浪 費 空 間 了
    這 時 後 全 部 都 放 在 function 裡 面
    要 用 的 時 候
    只 需 要 用 callfunc 去 叫 他
    不 是 方 便 多 ?

    你 可 能 會 說 用 " doevent 也 可 以 啊 @@ "
    這 是 沒 錯 的
    對 一 般 scripter(腳本者) callfunc 實 在 是 可 以 用 其 他 的 什 麼 goto 替 代

    但 是 callfunc 有 個 方 便 的 地 方 是 return; 這 指 令

    例 如 :
    function script ffff {
    set @j,(超級複雜的計算過程);
    return @j;
    }
    mes callfunc("ffff");

    return 會 自 動 幫 你 返 回 答 案

    範例:
    function script j {
       return (1+1);
    }
    ...
    mes callfunc("j"); // 會顯示2喔~

    如 果 要 用 goto 或 是 doevent
    你 還 要 移 動 回 來
    還 要 用 變 數 紀 錄 很 多 事 情

    為 什 麼 callfunc 可 以 不 用 紀 錄 很 多 變 數
    源 自 於 它 完 整 功 能

    callfunc "xxx",1,2,3,4,5,6,7,8;

    然 後
    他 你 運 行 進 去 運 算 式 子 時 候
    你 可 以 直 接 用
    getarg(n) 來 代 表 每 個 數 子
    所 以
    上 面 範 例
    getarg(0)=1
    getarg(1)=2
    getarg(2)=3
    getarg(3)=4
    getarg(4)=5
    getarg(5)=6
    getarg(6)=7
    getarg(7)=8



    而 且 如 果 想 更 加 簡 潔

    還 可 以 把 function 做 成 可 放 入 npc 內 的 版 本
    prontera,156,196,5<這邊是要按tab>]script<這邊是要按tab>告示牌<這邊是要按tab>737,{
               function xxx {         //   <---沒有 script 這東西
                        mes "dfkbmspitbmsptbmsrtbksmtbmse;rbmsetbmrtbnrltbmsetbms;etbmns";
               }
    // 像在我需要 示範 怎麼 call 這 function
               xxx();
    //如果你要用getarg?  那就是 xxx(這邊放上之後getarg(0)的東西,...類推);

    // 結束!!

    //但是這種function 只能讓 有這個function 在的NPC使用

    //如果你這function 又想如法炮製的 放置另一個

    // 那最裡面的那個 要放在比外層的 還要上面 (根據讀取規則(#1))
    }



    另 外 就 是

    函 數 裡 面 不 可 以 用 標 籤
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2019-8-18 04:57 PM
  • 簽到天數: 2148 天

    連續簽到: 1 天

    [LV.Master]伴壇終老

     樓主| 發表於 2012-2-25 17:49:20 | 顯示全部樓層

    [ select的基本變數選單 ]

    介 紹 讓 選 單 的 選 項 隨 事 而 變

    http://www.okayro.com/thread-229328-1-1.html
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2019-8-18 04:57 PM
  • 簽到天數: 2148 天

    連續簽到: 1 天

    [LV.Master]伴壇終老

     樓主| 發表於 2012-2-25 17:50:16 | 顯示全部樓層

    [ 沒 知 識 也 要 有 常 識 - array ]

    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2019-8-18 04:57 PM
  • 簽到天數: 2148 天

    連續簽到: 1 天

    [LV.Master]伴壇終老

     樓主| 發表於 2012-6-21 23:44:19 | 顯示全部樓層
    回復 支持 反對

    使用道具 舉報

    您需要登錄後才可以回帖 登錄 | 註冊

    本版積分規則

    Archiver|手機版|小黑屋|OK討論區

    GMT+8, 2024-4-26 07:01 PM , Processed in 0.114793 second(s), 25 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回復 返回頂部 返回列表