bsexp102762 發表於 2018-3-16 18:33:00

求精煉解說.

本帖最後由 bsexp102762 於 2018-3-18 01:29 PM 編輯

目前在學習Set 及 menu 的使用方式
小的便找了精練的版本來學習

以下是學習範本(部分) setarray .@indices, EQI_HEAD_TOP, EQI_ARMOR, EQI_HAND_L, EQI_HAND_R, EQI_GARMENT, EQI_SHOES, EQI_ACC_L, EQI_ACC_R, EQI_HEAD_MID, EQI_HEAD_LOW;
      for(set .@i,1; .@i<=10; set .@i,.@i+1)
                set .@menu$, .@menu$ + ( getequipisequiped(.@indices[.@i]) ? getequipname(.@indices[.@i]) : F_getpositionname(.@indices[.@i]) +"-" ) +":";
      set .@part, .@indices[ select(.@menu$) ];
      if (!getequipisequiped(.@part)) {
                mes "";
                switch(.@part) {
                case 1:
                        mes "I'm a blacksmith, not a hairstylist.";
                        break;
                case 2:
                        mes "With my hammer, I will make you a star of the sky.";
                        break;
                case 3:
                case 4:
                        mes "Making artificial hands is not my specialty.";
                        break;
                case 5:
                        mes "Bring out the item so I can refine it!";
                        break;
                case 6:
                        mes "Where is this foot odor coming from?";
                        break;
                case 7:
                case 8:
                        mes "Where is the accessory?";
                        break;
                case 9:
                        mes "What do you want me to refine?";
                        break;
                case 10:
                        mes "Huh? What do you want me to do?";
                        break;
                }
                close;我想了解一下.@part自定義變數中的值該怎麼對應.@indices中的值
例如選單中第一項為頭上
我點下去卻對應到.@part = 6 對應到case 6 且 .@indices 是鞋子EQI_SHOES

但我選單中頭上是第一個選項
不太了解.@part怎麼不是1 而是 6 ?


a91323 發表於 2018-3-16 23:31:45

EQI_COMPOUND_ON (-1)      - Item slot that calls this script (In context of item script)
EQI_ACC_L (0)             - Accessory 1
EQI_ACC_R (1)             - Accessory 2
EQI_SHOES (2)             - Footgear (shoes, boots)
EQI_GARMENT (3)         - Garment (mufflers, hoods, manteaux)
EQI_HEAD_LOW (4)          - Lower Headgear (beards, some masks)
EQI_HEAD_MID (5)          - Middle Headgear (masks, glasses)
EQI_HEAD_TOP (6)          - Upper Headgear
EQI_ARMOR (7)             - Armor (jackets, robes)
EQI_HAND_L (8)            - Left hand (weapons, shields)
EQI_HAND_R (9)            - Right hand (weapons)
EQI_COSTUME_HEAD_TOP (10) - Upper Costume Headgear
EQI_COSTUME_HEAD_MID (11) - Middle Costume Headgear
EQI_COSTUME_HEAD_LOW (12) - Lower Costume Headgear
EQI_COSTUME_GARMENT (13)- Costume Garment
EQI_AMMO (14)                      - Arrow/Ammunition
EQI_SHADOW_ARMOR (15)   - Shadow Armor
EQI_SHADOW_WEAPON (16)    - Shadow Weapon
EQI_SHADOW_SHIELD (17)    - Shadow Shield
EQI_SHADOW_SHOES (18)   - Shadow Shoes
EQI_SHADOW_ACC_R (19)   - Shadow Accessory 2
EQI_SHADOW_ACC_L (20)   - Shadow Accessory 1很久沒看語法了,所以我的說法可能是錯的聽聽就好

EQI_HEAD_TOP 你可以把它當作是一個常數或變數,值為6

在pc.h裡面是這樣定義它們的enum equip_index {
        EQI_COMPOUND_ON = -1,
        EQI_ACC_L = 0,
        EQI_ACC_R,
        EQI_SHOES,
        EQI_GARMENT,
        EQI_HEAD_LOW,
        EQI_HEAD_MID,
        EQI_HEAD_TOP,
        EQI_ARMOR,
        EQI_HAND_L,
        EQI_HAND_R,
        EQI_COSTUME_HEAD_TOP,
        EQI_COSTUME_HEAD_MID,
        EQI_COSTUME_HEAD_LOW,
        EQI_COSTUME_GARMENT,
        EQI_AMMO,
        EQI_SHADOW_ARMOR,
        EQI_SHADOW_WEAPON,
        EQI_SHADOW_SHIELD,
        EQI_SHADOW_SHOES,
        EQI_SHADOW_ACC_R,
        EQI_SHADOW_ACC_L,
        EQI_MAX
};

bsexp102762 發表於 2018-3-16 23:46:45

本帖最後由 bsexp102762 於 2018-3-16 11:54 PM 編輯

a91323 發表於 2018-3-16 11:31 PM static/image/common/back.gif
很久沒看語法了,所以我的說法可能是錯的聽聽就好

EQI_HEAD_TOP 你可以把它當作是一個常數或變數,值為6 ...
了解了謝謝您的解釋
以及借這個帖
我想在補問一下
我在item_db的Script中加入了
atcommand "@killmonster";
使用後可行
但將指令改成
atcommand "@reload script"; 或 atcommand "@reloadscript";
卻沒有效果(也設置過NPC觸發也不行)

我想問一下該怎麼修改呢?
想說目前在研究Script一直打@reload script有點累..



z0202520 發表於 2018-3-17 23:37:43

本帖最後由 z0202520 於 2018-3-17 11:38 PM 編輯

bsexp102762 發表於 2018-3-16 11:46 PM static/image/common/back.gif
了解了謝謝您的解釋
以及借這個帖
我想在補問一下

因為reloadscript指令在atcommand.cpp被定義為不可使用腳本來運行
ACMD_DEF2R("reloadscript", reload, ATCMD_NOSCRIPT),
判斷的地方在is_atcommand的函數裡面
if (info->restriction&ATCMD_NOSCRIPT && (type == 0 || type == 3)) //scripts prevent

要馬你就把定義指令的ATCMD_NOSCRIPT拿掉 (不保證會沒問題,沒測試過)
不然就是把指令打在表情符號快速鍵視窗
就可以用Alt+數字快速輸入了

bsexp102762 發表於 2018-3-18 00:49:59

z0202520 發表於 2018-3-17 11:37 PM static/image/common/back.gif
因為reloadscript指令在atcommand.cpp被定義為不可使用腳本來運行
ACMD_DEF2R("reloadscript", reload,...

謝謝您的回覆我馬上測試看看
頁: [1]
查看完整版本: 求精煉解說.