OK論壇

 找回密碼
 註冊
查看: 996|回復: 2

set 變數的疑問

 關閉 [複製鏈接]
  • TA的每日心情
    奮斗
    2016-5-13 11:25 AM
  • 簽到天數: 116 天

    連續簽到: 1 天

    [LV.6]常住居民II

    發表於 2013-7-19 03:53:40 | 顯示全部樓層 |閱讀模式
    本帖最後由 r123075528 於 2013-7-19 06:45 AM 編輯

    先說一下本人腳本經驗尚淺,很多都是測試/參考別人腳本學習的
    昨天想自己原創一個收集任務腳本,基本交/接都沒問題
    只欠"完成次數"記錄問題,先說一下我寫的腳本內容

    function        script        impossible_mission        {
            setarray .@imitem[1],607,607,607,607,607,607;  <---為方便測試
            if( im < 7 && im > 0) goto imnook;
            mes "你好";
            mes "我已經為你準備了1000個任務";  <---這1000變數也是問題=.=
            mes "每次會隨機接到1個任務";
            mes "但接到的任務必須完成才能接下一個任務";
            mes "所有任務的報酬都是金幣一個(1000W)";
            mes "若能1000個任務都完成一次";
            mes "將得到特別獎勵";
            next;
    imchoose:
            menu "^FF0000接受新任務^000000",imget,"^0000ff查詢已完成任務數^000000",imcheck;
    imget:
            set im,rand(1,6);
    imnook:
            if( countitem(.@imitem[im]) >= 1000 ) goto imokget;
            mes "任務編號 : ^ff0000"+im+"^000000";
            mes "請收集1000個 ^0000ff"+getitemname(.@imitem[im])+"^000000 ";
            mes "交給我就得到 ^FF8800金幣一個(1000W)^000000";
            close;
    imokget:        
            mes "任務編號 : ^ff0000"+im+"^000000 已完成";
            mes "請收下 ^FF8800金幣一個(1000W)^000000";
            delitem .@imitem[im],1000;
            getitem 671,1;
            set @imok[im],@imok[im]+1;  <----重點部份
            set im,0;
            next;
            goto imchoose;
    imcheck:
            set .@imfinish,0;
            for(set .@imcheck,1; .@imcheck<=6; set .@imcheck,.@imcheck+1){
            if( @imok[.@imcheck] > 0 ) { set .@finish,.@finish+1;}
            mes "任務編號 "+.@imcheck+" : "+@imok[.@imcheck] +"次";}  <---這部份之後改1000的話應該會超過變數量
            mes "已完成任務數 : "+.@finish+"次(不含重覆部份)";
            close;}

    以我自學的解釋,有錯請指出, '@'開頭是在線變數, '$'開頭是地圖變數 , '.'開頭是腳本(npc?)變數
    若改為 set imok[im],imok[im]+1; 系統又不能記錄那完成次數
    有大大能解決嗎? 1000的變量應該可以分開部份視窗or訊息列顯示吧?

    回復

    使用道具 舉報

  • TA的每日心情
    擦汗
    2014-1-23 02:25 AM
  • 簽到天數: 200 天

    連續簽到: 1 天

    [LV.7]常住居民III

    發表於 2013-7-19 04:05:55 | 顯示全部樓層
    本帖最後由 h445445445 於 2013-7-19 04:11 AM 編輯

    你理解的應該沒錯

    @ 開頭的變數在你伺服器關機後就會清除
    @imok 用來記錄玩家的變數的話
    只要伺服器一關機他的紀錄就會沒了
    要改用 imok

    然後還有一個問題就是角色變數不支援陣列,這個在script_commands文件裡也有提到
    +==========+======+=======+
    | 變數型態   | 一般 | 陣列 |
    +==========+======+=======+
    |$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!   |
    +----------+------+-------+

    所以不能用 imok[im] 這樣子紀錄
    如果你有需要用到角色變數陣列,可以用 setd + getd 來實現

    存的時候 => setd("imok_"+ im),值;
    取的時候 => getd("imok_"+ im);

    不懂的話可以去翻一下docs\script_commands.txt
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    奮斗
    2016-5-13 11:25 AM
  • 簽到天數: 116 天

    連續簽到: 1 天

    [LV.6]常住居民II

     樓主| 發表於 2013-7-19 06:45:29 | 顯示全部樓層
    h445445445 發表於 2013-7-19 04:05 AM
    你理解的應該沒錯

    @ 開頭的變數在你伺服器關機後就會清除

    感謝提點,又多學到東西了
    順便說一下我開機檔的 docs\script_commands.txt 都是英文 (能力有限理解不了)

    回復 支持 反對

    使用道具 舉報

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

    本版積分規則

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

    GMT+8, 2024-5-8 08:08 AM , Processed in 0.048535 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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