OK論壇

 找回密碼
 註冊
查看: 1550|回復: 6

script4each 「字串」參數帶入的問題

 關閉 [複製鏈接]
  • TA的每日心情
    擦汗
    2014-1-23 02:25 AM
  • 簽到天數: 200 天

    連續簽到: 1 天

    [LV.7]常住居民III

    發表於 2013-8-2 02:19:58 | 顯示全部樓層 |閱讀模式
    EA
    私服版號: CS_eA 3.3.0
    問題內容: 腳本問題
    本帖最後由 h445445445 於 2013-8-4 01:53 AM 編輯

    想請問一下script4each 字串參數帶入的問題

    script_commands說明
    *script4each "<腳本>",<類型>{,...}

            類型0:全服:script4each "<腳本>",0;
            類型1:全地圖:script4each "<腳本>",1,"地圖名";
            類型2:全區域:script4each "<腳本>",2,"地圖名",坐標x,坐標y,範圍;
            類型3:全組隊:script4each "<腳本>",3,玩家cid;
            類型4:全公會:script4each "<腳本>",4,玩家cid;
            類型5:全區域:script4each "<腳本>",5,"地圖名",坐標x0,坐標y0,坐標x1,坐標y1;
            類型6:全組隊:script4each "<腳本>",6,隊伍id;
            類型7:全公會:script4each "<腳本>",7,公會id;

    由於 script4each 第一欄參數是 "<腳本>" 字串型態
    在callfunc也會用到 " (雙引號來指定func名稱)
    所以用法要加入\" 變成 -> "{ callfunc \"func名稱\"; }"

    之前使用script4each 搭配 callfunc 時,帶入參數都是數字型態,都可以成功代入並且處理
    但這次callfunc需要帶入參數為字串型態的變數,所以碰到一些問題

    function

    1. //公會全體公告用
    2. function        script        Ann_Guild        {

    3.       //取得參數0 (字串)
    4.       set .@text$,getarg(0,"預設訊息");

    5.       //顯示訊息
    6.       dispbottom "訊息內容:"+.@text$;
    7.       end;
    8. }
    複製代碼
    執行
    1. script4each "{ callfunc "Ann_Guild"; }",7,@GID;
    複製代碼
    結果
    訊息內容:預設訊息

    =====

    如果代入中文參數的話,請問該如何寫?

    我是這樣寫

    1. set .@str$,"內容123";
    2. script4each "{ callfunc "Ann_Guild",".@str$"; }",7,@GID;
    複製代碼
    結果
    訊息內容:.@str$
    我要顯示的是:內容123

    1. set .@str$,"內容123";
    2. script4each "{ callfunc "Ann_Guild","+.@str$+"; }",7,@GID;
    複製代碼
    結果
    訊息內容:+.@str$+
    連加號都進去了XD
    1. set .@str$,"內容123";
    2. script4each "{ callfunc "Ann_Guild",""+.@str$+""; }",7,@GID;
    複製代碼
    結果
    map端跳出腳本錯誤無法使用
    script error on npc/OOOO.txt line OOO Unexpected newline at string.

    所以\"應該只是當作 " 的功用吧?
    那我要如何將字串變數帶入到script4each function的參數中呢?

    請教一下各位前輩了
    回復

    使用道具 舉報

  • TA的每日心情
    擦汗
    2018-9-15 03:18 PM
  • 簽到天數: 842 天

    連續簽到: 1 天

    [LV.10]以壇為家III

    發表於 2013-8-2 08:05:13 | 顯示全部樓層
    本帖最後由 o03126 於 2013-8-2 08:13 AM 編輯

    傳字串參數只能直接寫在裡面吧,畢竟是跳脫字元
    callfunc \"Ann_Guild\",\"內容123\";

    其實有很多方式能替代 ex. $@參數 or getvariableofnpc取得npc參數的值
    未必要用傳參數的方式
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情

    2017-1-18 12:17 AM
  • 簽到天數: 512 天

    連續簽到: 1 天

    [LV.9]以壇為家II

    發表於 2013-8-2 11:13:40 | 顯示全部樓層
    set .@str$, "\"中文內容\"" ;
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2024-5-2 03:39 PM
  • 簽到天數: 1323 天

    連續簽到: 1 天

    [LV.10]以壇為家III

    發表於 2013-8-3 14:10:32 | 顯示全部樓層
    本帖最後由 sinya 於 2013-8-3 02:12 PM 編輯

    這樣

    1. script4each "{ callfunc "Ann_Guild",.@str$; }",7,@GID;
    複製代碼
    試試 script4each 再包一層function   再用getarg傳

    1. script4each "{ callfunc "Ann_Guild",gearg(0); }",7,@GID;
    複製代碼
    回復 支持 反對

    使用道具 舉報

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

    連續簽到: 1 天

    [LV.7]常住居民III

     樓主| 發表於 2013-8-4 01:53:08 | 顯示全部樓層
    function
    1. //公會全體公告用
    2. function        script Ann_Guild        {

    3. <span style="line-height: 1.5;">if($@AG_text</span><span style="line-height: 1.5;">$ == "")</span>
    4.                 set $@CFGP_text$,"cause guild's prestige Error...";

    5.         dispbottom $@AG_text$;
    6.         
    7.         return;
    8.         end;

    9. }
    複製代碼
    第一種
    1. set $@AG_text$,"替公會取得 公會聲望 "+ .@amout +" 點,目前共有 "+ .@guild_prestige +" 點";
    2. script4each "{ callfunc "Ann_Guild"; }",7,.@GID;
    複製代碼
    成功顯示出訊息

    第二種
    1. set .@str$, ""替公會取得 公會聲望 "+ .@amout +" 點,目前共有 "+ .@guild_prestige +" 點"" ;
    複製代碼
    1. set .@str$, ""純訊息不含變數之訊息"" ;
    2. script4each "{ callfunc "Ann_Guild"; }",7,.@GID;
    複製代碼
    兩者皆無訊息產生,map端也無跳錯

    第三種
    1. set .@str$, ""公會訊息"" ;
    2.                                 script4each "{ callfunc "Ann_Guild",.@str$; }",7,@GID;
    3.                                 script4each "{ callfunc "Ann_Guild",gearg(0); }",7,@GID;
    複製代碼
    無訊息產生,map端也無跳錯

    二、三是我用法用錯了嗎?
    Sinya的那個用法看起來還蠻特別的@@
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2024-5-2 03:39 PM
  • 簽到天數: 1323 天

    連續簽到: 1 天

    [LV.10]以壇為家III

    發表於 2013-8-4 02:15:05 | 顯示全部樓層
    本帖最後由 sinya 於 2013-8-4 02:29 AM 編輯
    h445445445 發表於 2013-8-4 01:53 AM
    function第一種成功顯示出訊息

    第二種或兩者皆無訊息產生,map端也無跳錯

    第三種 方法沒錯 只是.@ 會歸0
    如果用 $@ 這種 多個工會用時 會重復到訊息 有時會傳錯

    所以 用

    function abc  把 script4each 包起來  再callfunc "abc",.@str$;

    script4each{......getarg(0)}.......

    這樣就不會 多個工會用時 重復到訊息然後傳錯訊息




    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    擦汗
    2018-9-15 03:18 PM
  • 簽到天數: 842 天

    連續簽到: 1 天

    [LV.10]以壇為家III

    發表於 2013-8-4 09:52:16 | 顯示全部樓層
    h445445445 發表於 2013-8-4 01:53 AM
    function第一種成功顯示出訊息

    第二種或兩者皆無訊息產生,map端也無跳錯
    1. set $@str$,"123";
    2. script4each "{ callfunc "test02",$@str$; }",1,strcharinfo(3);
    複製代碼
    只要換成伺服器暫存變數就ok 因為是全域的 .@因為個別執行而洗掉了

    getarg(0) 放在script4each應該也會出現無法讀的狀況(至少我測試是這樣

    至於在script4each內寫一個function 再用getarg(0) 這我就毫無頭緒不知道怎麼寫 他才會判斷TAB之類的

    這思維挺不賴的
    回復 支持 反對

    使用道具 舉報

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

    本版積分規則

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

    GMT+8, 2024-5-15 04:33 AM , Processed in 0.088222 second(s), 21 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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