OK論壇

 找回密碼
 註冊
查看: 19279|回復: 63

腳本基礎知識!!

[複製鏈接]
  • TA的每日心情
    慵懶
    2013-4-4 02:22 PM
  • 簽到天數: 1 天

    連續簽到: 1 天

    [LV.1]初來乍到

    發表於 2007-8-15 13:33:31 | 顯示全部樓層 |閱讀模式
    1、坐標系

    ↑Y的增加
    (0,200)--(200,200)
      |         |
      |         |
      |         |
      |         |
      |         |
    (0,  0)--(200,  0)→X的增加

    坐標從左下開始,向右上遞增


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

    2、NPC的定義

    NPC類型: 傳送點
    作用: 把人物從一個坐標傳送到另一個坐標
    格式: <gatname>,<x>,<y><tab>warp<tab><displayname><tab><dx>,<dy>,<destination_gatname>,<destination_x>,<destination_y>
    說明: <gatname>     -- 原地圖名(不要忘記加上.gat)
    <x>,<y>       -- 原地圖坐標
    <displayname> -- NPC名字(DEBUG用)
    <dx>,<dy>     -- 傳送點x,y軸的影響範圍
    dx,dy舉例(●表示x,y的位置):
    0,0         1,0             2,2
      *      *****    *******
    *●*    **●**    *******
      *      *****    *******
                            ***●***
                            *******
                            *******
                            *******

    <destination_gatname>           -- 目標地圖名(.gat可有可無)
    <destination_x>,<destination_y> -- 目標地圖坐標

    注意事項: 如果在同一位置放置了多個傳送點,則只有最後一個生效。
    如果目標坐標是不可到達的坐標,則自動進行目標地圖內的隨機傳送。

     

    NPC類型: 怪物
    作用: 使地圖中出現怪物
    格式: <gatname>,<x>,<y>,<xs>,<ys><tab>monster<tab><displayname><tab><npcid>,<number>,<spawn_delay1>,<spawn_delay2>[,<event>]
    說明: <gatname>     -- 地圖名
    <x>,<y>       -- 坐標
    <xs>,<ys>     -- 怪物出現的x,y軸的範圍
    xs,ys舉例(●表示x,y的位置):
    0,0         2,1
      ●      *****
              **●**
              *****

    <displayname>  -- 顯示怪物的名字
    <npcid>        -- 怪物ID(請參考mob_db.txt)
    <number>       -- 怪物數量
    <spawn_delay1> -- 刷新後多少毫秒再次刷新
    <spawn_delay2> -- 死亡後多少毫秒再次刷新
    <event>        -- 怪物死亡後執行的事件(省略時填0)

    注意事項: 根據<spawn_delay1>和<spawn_delay2>的數值,優先選擇刷新較慢的那個。

     

    NPC類型: 商店
    作用: 出售物品
    格式: <gatname>,<x>,<y>,<direction><tab>shop<tab><displayname><tab><npcid>,<item_id>:<price>
    說明: <gatname>     -- 地圖名
    <x>,<y>       -- 坐標
    <direction>   -- 商店的方向
    <direction> 的詳情:

    107
    2 6
    345

    <displayname>  -- 商店名字
    <npcid>        -- 商店的外觀
    <item_id>      -- 商品的物品ID(請參考item_db.txt)
    <price>        -- 商品價格

    注意事項: <item_id>:<price>可用,分割指定多個物品。
    當「<gatname>,<x>,<y>,<direction><tab>」部分為「-<tab>」的時候,可作為複製源。

     

    NPC類型: 複製店
    作用: 複製已存在的商店
    格式: <gatname>,<x>,<y>,<direction><tab>substore(<source>)<tab><displayname><tab><npcid>
    說明: <source>以外的參數和商店一樣。
    <source>為要複製的商店的名字。
    如果是複製沒有指定地圖的商店,則可用於任意地圖。否則只能複製同地圖名字的商店。


     

    NPC類型: 腳本
    作用: 製作NPC
    格式: <gatname>,<x>,<y>,<direction><tab>script<tab><displayname><tab><npcid>,<xs>,<ys>,{ <script> ... }
    說明: <gatname> -- 地圖名
    <x>,<y> -- 坐標
    <direction> -- NPC方向
    <direction> 的詳情:

    107
    2 6
    345

    <displayname> -- NPC名字。如果<npcid>為-1則為事件名。
    <npcid> -- NPC的外觀。如果是-1則表示地圖內的事件。
    <xs>,<ys> -- 觸發NPC的x,y軸的範圍。


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

    {}(大括號內)包含NPC的所有代碼。
    不推薦集中在一行內編寫代碼,建議寫成這樣:

    gatname等,
    {
        //註釋
        script;
    label:
        script;
    }

    單行註釋請用//,多行註釋請用/*,*/

    「<gatname>,<x>,<y>,<direction><tab>」部分改為「-<tab>」的時候,可作為複製源。


     

    NPC類型: 複製腳本
    作用: 複製已存在的NPC
    格式: <gatname>,<x>,<y>,<direction><tab>duplicate(<source>)<tab><displayname><tab><npcid>,<xs><ys>
    說明: <source>以外的參數和腳本一樣。
    <source>為要複製的NPC的名字。
    如果是複製沒有指定地圖的NPC,則可用於任意地圖。否則只能複製同地圖名字的NPC。


     

    NPC類型: 用戶自定義函數
    作用: 製作由腳本調用的用戶自定義函數
    格式: function<tab>script<tab><name><tab>{ <script> ... }
    說明: <name> -- 函數名字
    製作一個可用callfunc命令調用的函數。函數的參數可以用getarg函數獲得。從函數中返回請使用return命令。
  • TA的每日心情
    慵懶
    2013-4-4 02:22 PM
  • 簽到天數: 1 天

    連續簽到: 1 天

    [LV.1]初來乍到

     樓主| 發表於 2007-8-15 13:34:08 | 顯示全部樓層
    NPC類型: mapflag
    作用: 設置地圖標識
    格式: <gatname><tab>mapflag<tab><const>
    說明: <gatname> -- 地圖名字
    <const>   -- 要設置的規則
    <const>一覽表: nosave<tab><gatname>,<x>,<y> 重新登陸時,移動到<gatname>地圖的(x,y)坐標。
    如果是"nosave SavePoint"的話,則移動到人物的儲存點。
    nomemo<tab>dummy 禁止記憶(禁止使用/nomemo)
    noteleport<tab>dummy 禁止使用指定了SavePoint或Random的warp段、傳送之陣和瞬移
    noportal<tab>dummy 禁止傳送之陣(battle_athena.conf的noportal_flag為1時有效)
    noreturn<tab>dummy 禁止warp命令SavePoint回城,並且禁止使用蝴蝶翅膀
    nobranch<tab>dummy 禁止召怪
    nopenalty<tab>dummy 禁止任何處罰
    nozenypenalty<tab>dummy 死亡時不掉錢
    notrade<tab>dummy 禁止玩家間交易
    norevive<tab>dummy 死亡時強制傳送到儲存點
    noskill<tab><skill_id> 禁止使用<skill_id>技能(同一地圖最多設定100個)
    noskillall<tab>dummy 禁止使用所有技能
    nodrop<tab>dummy 怪物死亡後不掉落物品
    noabra<tab>dummy 禁止使用隨機技能
    noicewall<tab>dummy 禁止使用冰牆
    snow<tab>dummy 下雪
    fog<tab>dummy 霧
    sakura<tab>dummy 櫻花
    leaves<tab>dummy 落葉
    rain<tab>dummy 下雨
    base_exp_rate<tab><rate> 設置Base經驗倍率(優先於battle_athena.conf)
    job_exp_rate<tab><rate> 設置Job經驗倍率(優先於battle_athena.conf)
    monster_noteleport<tab>dummy 禁止怪物使用瞬移
    pvp<tab>dummy 變成PVP地圖
    pvp_noparty<tab>dummy 變成PVP地圖(不可攻擊同隊玩家)
    pvp_noguild<tab>dummy 變成PVP地圖(不可攻擊同工會玩家)
    pvp_nightmaredrop<tab><drop_id>,<drop_type>,<drop_per> 變成PVP地圖(夢魘模式)
    <drop_id>--掉落物品ID。如果為random則表示隨機掉落物品(random區分大小寫)
    <drop_type>--掉落物品類型。inventory表示隨身物品、equip表示裝備、all表示以上類型均有可能(注意區分大小寫)
    <drop_per>--掉率(萬分率)

    pvp_nocalcrank<tab>dummy 變成PVP地圖(不計算PVP點數和排行榜)
    gvg<tab>dummy 變成GVG地圖
    gvg_noparty<tab>dummy 變成GVG地圖(不可攻擊同隊玩家)
    pk<rab>dummy 變成PK地圖
    pk_noparty<tab>dummy 變成PK地圖(不可攻擊同隊玩家)
    pk_noguild<tab>dummy 變成PK地圖(不可攻擊同工會玩家)
    pk_nightmaredrop<tab><drop_id>,<drop_type>,<drop_per> 變成PK地圖(夢魘模式)
    <drop_id>--掉落物品ID。如果為random則表示隨機掉落物品(random區分大小寫)
    <drop_type>--掉落物品類型。inventory表示隨身物品、equip表示裝備、all表示以上類型均有可能(注意區分大小寫)
    <drop_per>--掉率(萬分率)

    pk_nocalcrank<tab>dummy 變成PK地圖(不計算PK點數和排行榜)
    turbo<tab>dummy 變為競速模式
    noitem<tab><item_id> 禁止使用某個物品(同一地圖最多設定100個)
    noitemall<tab>dummy 禁止使用所有物品
    no_char_pvp<tab>dummy 禁止玩家使用#pvpon/#pvpoff(VIP版專用)
    no_disguise<tab>dummy 禁止玩家使用#disguise/#undisguise
    nodropitem<tab>dummy 禁止玩家丟棄物品
    no_create_party<tab>dummy 禁止創建隊伍
    no_invite_party<tab>dummy 禁止邀請玩家加入隊伍
    no_leave_party<tab>dummy 禁止玩家離開隊伍
    potion_drop_rate<tab><rate> 設置恢復品掉率
    expend_drop_rate<tab><rate> 設置消耗品掉率
    refine_drop_rate<tab><rate> 設置精煉材料掉率
    etc_drop_rate<tab><rate> 設置收集品掉率
    weapon_drop_rate<tab><rate> 設置武器掉率
    equip_drop_rate<tab><rate> 設置防具掉率
    card_drop_rate<tab><rate> 設置卡片掉率
    petequip_drop_rate<tab><rate> 設置寵物裝備掉率
    arrow_drop_rate<tab><rate> 設置箭矢掉率
    other_drop_rate<tab><rate> 設置其他物品掉率
    noequip<tab><equip_id> 設定地圖上不能裝備的物品,如果有裝備上,則自動卸下(同一地圖最多設定100個)
    nocard<tab><card_id> 設定地圖上不能裝備插有指定卡片的物品,如果有裝備上,則自動卸下(同一地圖最多設定100個)
    gvg_cannot_see_hide<tab>dummy 設定地圖不能利用GM模式看到隱身(但狂暴蟻後卡等等仍然效果正常)
    gvg_cannot_see_damage<tab>dummy 設定地圖不能看到傷害值(包括GM模式)
    show_mob_hp<tab>dummy 設定地圖顯示怪物HP(show_mob_hp、no_show_mob_hp的mapflag優先於battle_athena.conf的show_mob_hp開關。當show_mob_hp、no_show_mob_hp同時存在時,則以show_mob_hp為優先)
    no_show_mob_hp<tab>dummy 設定地圖不顯示怪物HP(show_mob_hp、no_show_mob_hp的mapflag優先於battle_athena.conf的show_mob_hp開關。當show_mob_hp、no_show_mob_hp同時存在時,則以show_mob_hp為優先)

    評分

    參與人數 1積分 +50 現金 +50 積極性 +50 收起 理由
    哆啦ˇ + 50 + 50 + 50 精品文章

    查看全部評分

    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    慵懶
    2013-4-4 02:22 PM
  • 簽到天數: 1 天

    連續簽到: 1 天

    [LV.1]初來乍到

     樓主| 發表於 2007-8-15 13:34:23 | 顯示全部樓層
    3、關於NPC的一些注意事項

    3.1

    [M/F]Jathena以NPC的標識名來區別NPC,而不是顯示名。
    如果省略了子名字的話,則使用顯示名來代表識別名。
    在顯示名後加上#表示子名字的話,則子名字不會顯示出來。

    舉例:
    <displayname> <顯示名> <標識名>
    A A A
    A::B A B
    A#dummy A A#dummy

     

    3.2

    單行註釋請使用//,(多行)文本註釋註釋請使用/* */。
    服務端在解釋腳本時,會忽略多餘的空格、TAB、換行符。

    下面舉一些例子:

    1.超出NPC範圍的文字是錯誤的
    prontera.gat,132,150,4 script Test1 120,{
        end;
    }
    set @hoge,1; ← ×

    2.註釋OK
    // 註釋
    prontera.gat,132,151,4 script Test2 121,{
        end;
    } /* 註釋區域 */

    3.可以使用以下多行註釋
    /* prontera.gat,132,152,4 script Test3 122,{
        end;
    } */


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

    4、腳本說明和基本規則

        *數字
            可使用有符號數和16進制數。
            有符號數可請使用半角的數字,如123456等。
            16進制數要以0x開頭,例如0x12。

        *字符串
            字符的表示要用""包含在其中。
            如果要顯示"字符,請使用\"代替。
            如果要顯示\字符,請使用\\代替。
            字符串中也可以用^000000等顯示顏色。
            也可以使用:變量 + "字符串"這樣的形式組合。

        *單目運算符
            以下運算符僅需要一個操作數即可。
                -    符號取反
                ~    按位取反
                !    邏輯非

        *雙目運算符
            以下運算符需要兩個操作數。
                +    加法/字符串連接
                既可以當作加法運算,也可以當作連接字符串符號。

                -    減法
                *    乘法
                /    除法
                %    取模(餘數)
                &    按位與
                |    按位或
                ^    異或
                &&   邏輯與
                ||   邏輯或
                >>   向右移位
                <<   向左移位

            以下雙目運算符在關係成立時返回1,否則返回0。
                ==   等於
                !=   不等於
                >    大於
                >=   大於等於
                <    小於
                <=   小於等於

        *三目運算符
                ?:   唯一一個三目運算符

                舉例:<cond> ? <ture> : <false>
                如果<cond>為真,則返回<ture>部分,否則返回<false>部分。

        *變量
            必須使用半角字符表示變量的前綴、後綴。
            變量的生存期看前綴而定。

    前綴 作用範圍 生存期
    (無前綴) 人物 永久
    @ 人物 人物在線時
    $ Map服務器 永久
    $@ Map服務器 同一次Map服務器運行時
    # 帳號(個人) 永久
    ## 帳號(全服) 永久
    ' 單個NPC 同一次Map服務器運行時
    '@ 單個NPC 超出NPC範圍時

            簡單來說,臨時變量帶有@、服務器變量帶有$、帳號變量帶有#。

            '表示NPC變量。
            同名的NPC變量,在NPC之間不會發生衝突;而且是和單個玩家關聯,不用擔心會和其他玩家發生衝突。

            '變量依賴於NPC,即使NPC結束後,其值也會被保存(Map服務器重啟時才消失)。
            雖然使用callfunc函數時,其參數不會影響到其他NPC變量;但是如果配合getarg()函數的話,仍然可以操作傳遞的參數(參數是以引用傳遞的)。舉例:

            function script func1 {
                set 'var1, 'var1 + 1;            // func1::'var1 加1
                set getarg(0), getarg(0) + 1;    // func2::'var1 加1
            }
            function script func2 {
                callfunc "func1", 'var1;
            }

            '@變量是函數固有的變量,使用callfunc、callsub時,會重新分配內存空間給變量,return時則使分配的變量超出範圍。
            簡單來說,就像是C語言的臨時變量一樣,還可以使用遞歸處理。當然,這種變量也可以使用getarg()函數操作。舉例:

            function script func3 {
                set '@n, rand(5);
                if( '@n == 0 ) {
                    return;
                } else {
                    // '@n 變量和其他變量不同,調用callfunc時變量的範圍不同,
                    // 所以不會出現mes的結果全部為0的現象。
                    callfunc "func3";
                }
                mes '@n;
                return;
            }

            此外,函數類型由後綴決定。
            但是,字符串類型只適用於人物臨時變量、NPC變量、臨時/永久的服務器變量。(前綴為@、$、$@的)

    後綴 類型
    (無後綴) 數值類型
    $ 字符串類型

        <例> @hoge$ 字符串類型人物臨時變量
             hoge   數值類型人物永久變量
             $hoge  數值類型服務器永久變量

            不要過多的使用永久變量。
            不需要時馬上設置為0進行刪除。
            認真思考是否需用用到永久變量。
            特別時人物/帳號變量是有數量限制的。

        *數組變量
            變量名後緊跟[]則表示數組變量。
            注意變量名與「[」之間不能留空。
            也可以使用多維數組,維數沒有限制。

            <例> hoge[10]    fuga[ @temp ]    foo[5][@i][3]

            數組元素的索引從0-127。索引為0時表示和同名變量。
            比如說,hoge[0]和hoge是相同的變量。
            同樣的,fuga[0][1]和fuga[1]是相同的變量。
            (但是要注意,foo[1][0][2]和foo[1][2]是不同的變量。)

            數組變量可儲存人物變量、服務器變量、NPC變量。數值類型或字符串類型均可。

        *標籤
            標籤名是以(半角的)字母或_開頭、並且可包含數字的單詞組成。
            例如  L_hoge:。
            用if或menu指令時可跳轉到該標籤。

        *Const屬性
            Athena的db/const.txt給出了這些Const屬性。
            只有在腳本內才可以使用。

        *表達式
            在指令的參數為數值類型時使用。
            不需要空格,為了便於閱讀時也可以加上空格。
            表達式為真時返回1,否則返回0。

        *事件
            沒有固定格式的腳本。
            可用於製作與時間相關的腳本。
            在調用時指定為「事件名::標籤」的話,則從事件中指定的標籤開始執行腳本。

        *命令語法
            參數請用半角的空格來分割。
            函數必須帶()。如果是沒有參數的函數,括號內不能帶任何東西(包括0)。例如:checkcart()
            命令必須在最後加上;。
    回復 支持 反對

    使用道具 舉報

    該用戶從未簽到

    發表於 2007-8-16 09:50:04 | 顯示全部樓層
    謝謝....
    大大教導*. 33
    回復 支持 反對

    使用道具 舉報

    該用戶從未簽到

    發表於 2007-8-16 09:52:12 | 顯示全部樓層

    我有比較會了

    謝謝你 哈哈哈
    回復 支持 反對

    使用道具 舉報

    頭像被屏蔽

    該用戶從未簽到

    發表於 2007-8-19 18:51:47 | 顯示全部樓層
    謝謝你啦 推推推......寫的真好^^*. 54 *. 54
    回復 支持 反對

    使用道具 舉報

    頭像被屏蔽

    該用戶從未簽到

    發表於 2007-8-19 20:03:58 | 顯示全部樓層
    以迅速回貼為榮,以看貼不回為恥!
    以認真回復為榮,以惡意灌水為恥!
    以虛心受教為榮,以屢教不改為恥!
    以觀後稱謝為榮,以背本趨末為恥!
    以無私奉獻為榮,以屢屢索取為恥!
    做人必定要厚道,看帖必定要回帖!
    回帖一定是尊重,回帖一定是美德!
    美德絕對要發揚,我們絕對要頂帖!
    頂帖保證是好事,千萬絕對莫灌水!
    謝謝樓主的更新,感謝樓主辛苦了!
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情

    2010-5-12 12:39 AM
  • 簽到天數: 2 天

    連續簽到: 0 天

    [LV.1]初來乍到

    發表於 2007-8-31 13:05:11 | 顯示全部樓層
    *. 56 *. 56 *. 56 *. 56 多謝大大的教學
    收益良多
    回復 支持 反對

    使用道具 舉報

    該用戶從未簽到

    發表於 2007-9-1 00:53:48 | 顯示全部樓層
    雖然看不是很懂,還是感謝分享
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    難過
    2013-8-19 05:25 PM
  • 簽到天數: 4 天

    連續簽到: 1 天

    [LV.2]偶爾看看I

    發表於 2007-9-6 00:52:45 | 顯示全部樓層
    多謝分享!!
    回復 支持 反對

    使用道具 舉報

    該用戶從未簽到

    發表於 2007-9-11 11:38:09 | 顯示全部樓層
    謝謝分享 *. 49 *. 49 *. 49
    回復 支持 反對

    使用道具 舉報

    該用戶從未簽到

    發表於 2007-9-12 22:27:37 | 顯示全部樓層
    謝謝分享~~*. 49 *. 49
    回復 支持 反對

    使用道具 舉報

    該用戶從未簽到

    發表於 2007-9-17 18:50:55 | 顯示全部樓層
    大大解釋的還蠻清楚的,謝謝囉。
    回復 支持 反對

    使用道具 舉報

    該用戶從未簽到

    發表於 2007-9-17 19:00:35 | 顯示全部樓層

    謝 謝 ~

    感謝 分享 我懂了~
    回復 支持 反對

    使用道具 舉報

    該用戶從未簽到

    發表於 2007-9-17 20:14:24 | 顯示全部樓層

    看不懂可是還是謝謝大大的分享

    看不懂可是還是謝謝大大的分享
    回復 支持 反對

    使用道具 舉報

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

    本版積分規則

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

    GMT+8, 2024-4-28 04:17 AM , Processed in 0.065385 second(s), 20 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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