OK論壇

 找回密碼
 註冊
123
返回列表 發新帖
樓主: usb810310

機率設置問題

[複製鏈接]
  • TA的每日心情
    開心
    2024-9-6 01:09 AM
  • 簽到天數: 1324 天

    連續簽到: 1 天

    [LV.10]以壇為家III

    發表於 2013-5-24 00:24:05 | 顯示全部樓層
    usb810310 發表於 2013-5-24 12:11 AM
    不好意思 ..

    你貼腳本 給我作什麼?

    中文解釋呢? 這不是問問題的基本嗎? 中文字都沒寫 誰知 你要做什?




    回復 支持 反對

    使用道具 舉報

  • TA的每日心情

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

    連續簽到: 1 天

    [LV.9]以壇為家II

    發表於 2013-5-24 00:28:59 | 顯示全部樓層
    阿是當作沒看到就是了

    你要洗幾篇文

    http://okayro.com/forum.php?mod= ... &fromuid=192389
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情

    2014-3-7 12:00 AM
  • 簽到天數: 80 天

    連續簽到: 2 天

    [LV.6]常住居民II

     樓主| 發表於 2013-5-24 00:34:09 | 顯示全部樓層
    各位大大息怒~"~
    我在一樓一樓都改看看吧{:soso_e117:}
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2023-5-27 04:43 PM
  • 簽到天數: 17 天

    連續簽到: 1 天

    [LV.4]偶爾看看III

    發表於 2013-5-24 09:26:51 | 顯示全部樓層
    本帖最後由 plus724254 於 2013-5-24 09:35 AM 編輯

    寫腳本至少要理解自己寫的是什麼東西

    否則就像是考試在那裡填ABCD猜答案罷了

    如果你完全不懂,代表你實力不足

    勿做超出自己能力範圍的事情,先去打好基礎更為重要



    P.S
    我看你開頭只有敘述寫腳本遇到問題,沒有寫說想要怎麼樣改

    別人就算想幫你也很為難






    評分

    參與人數 1積分 +5 收起 理由
    grass0916 + 5 我很贊同

    查看全部評分

    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    慵懶
    2018-6-20 12:07 AM
  • 簽到天數: 30 天

    連續簽到: 1 天

    [LV.5]常住居民I

    發表於 2013-5-25 04:58:37 | 顯示全部樓層
    本帖最後由 冷落一良 於 2013-5-25 05:00 AM 編輯
    1. set .@che,rand(1,100);

    2. //.@che = 91~100
    3.         if(.@che>90){        set .@n,rand(1, (getarraysize(.@Mg_S)-1));
    4.                         set .@Magic_num,.@Mg_S[.@n];}


    5. //.@che = 1~90
    6.         if(.@che<91){        set .@n,rand(1, (getarraysize(.@Mg_A)-1));
    7.                         set .@Magic_num,.@Mg_A[.@n];}


    8. //.@che = 96~100
    9.         if(.@che>95){        set .@n,rand(1, (getarraysize(.@Mg_J)-1));
    10.                         set .@Magic_num,.@Mg_J[.@n];}
    複製代碼
    如果 .@che = 96那腳本會做以下兩件事
    1. if(.@che>90){ set .@n,rand(1, (getarraysize(.@Mg_S)-1));
    2. set .@Magic_num,.@Mg_S[.@n];}
    複製代碼
    1. if(.@che>95){ set .@n,rand(1, (getarraysize(.@Mg_J)-1));
    2. set .@Magic_num,.@Mg_J[.@n];}
    複製代碼
    因為兩個 if 是分開的
    那結果 .@Magic_num = .@Mg_J[.@n]




    如果 .@che = 92
    那腳本會做以下這件事
    1. if(.@che>90){ set .@n,rand(1, (getarraysize(.@Mg_S)-1));
    2. set .@Magic_num,.@Mg_S[.@n];}
    複製代碼
    那結果 .@Magic_num = .@Mg_S[.@n]



    結論是
    .@che = 1~90 -> 90%
    .@Magic_num = .@Mg_A[.@n]

    .@che = 91~95 -> 5%
    .@Magic_num = .@Mg_S[.@n]

    .@che = 96~100 ->5%
    .@Magic_num = .@Mg_J[.@n]

    評分

    參與人數 1積分 +15 收起 理由
    grass0916 + 15 right

    查看全部評分

    回復 支持 反對

    使用道具 舉報

  • TA的每日心情

    2014-3-7 12:00 AM
  • 簽到天數: 80 天

    連續簽到: 2 天

    [LV.6]常住居民II

     樓主| 發表於 2013-5-25 13:03:29 | 顯示全部樓層
    冷落一良 發表於 2013-5-25 04:58 AM
    如果 .@che = 96那腳本會做以下兩件事因為兩個 if 是分開的
    那結果 .@Magic_num = .@Mg_J[.@n]

    grass0916 大大用的這給我
    1. set .@che,rand(1,100);
    2.         if ( .@che < 90 ) {
    3.         set .@n,rand(1, (getarraysize(.@Mg_A)-1));
    4.         set .@Magic_num, .@Mg_A[.@n];
    5.         }
    6.         else if ( .@che <= 95 ) {
    7.         set .@n,rand(1, (getarraysize(.@Mg_S)-1));
    8.         set .@Magic_num, .@Mg_S[.@n];
    9.         }
    10.         else {
    11.                 set .@n,rand(1, (getarraysize(.@Mg_J)-1));
    12.                 set .@Magic_num, .@Mg_J[.@n];
    13.         }
    複製代碼
    最後一個機率是多少阿= =?
    測試後弄不到
    @Mg_J[1],4704,4714,4724,4734,4744,4754;
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    慵懶
    2018-6-20 12:07 AM
  • 簽到天數: 30 天

    連續簽到: 1 天

    [LV.5]常住居民I

    發表於 2013-5-25 14:44:36 | 顯示全部樓層
    usb810310 發表於 2013-5-25 01:03 PM
    那 grass0916 大大用的這給我最後一個機率是多少阿= =?
    測試後弄不到
    @Mg_J[1],4704,4714,4724,4734,47 ...
    1. set .@che,rand(1,100);
    2.         if ( .@che < 90 ) {           // 1-90                          
    3.         set .@n,rand(1, (getarraysize(.@Mg_A)-1));
    4.         set .@Magic_num, .@Mg_A[.@n];
    5.         }
    6.         else if ( .@che <= 95 ) {  //1-90 (91-95)
    7.         set .@n,rand(1, (getarraysize(.@Mg_S)-1));
    8.         set .@Magic_num, .@Mg_S[.@n];
    9.         }
    10.         else {                               //剩下來的
    11.                 set .@n,rand(1, (getarraysize(.@Mg_J)-1));
    12.                 set .@Magic_num, .@Mg_J[.@n];
    13.         }
    複製代碼
    因為 if ... else if ... else ... 是一對指令
    它會由頭開始檢查下去
    if {動作1} else if {動作2} else if {動作3} else if {動作4} else if {動作5} else {動作6}
    當其中一個 if 成立就會結束動作
    當所有if 都不成立 就會進入else

    其他相似有
    if ... else ...
    if ... else if ... (這個沒最後的else 即是剩下的結果沒有動作發生)

    評分

    參與人數 1積分 +15 收起 理由
    grass0916 + 15 yap

    查看全部評分

    回復 支持 反對

    使用道具 舉報

  • TA的每日心情

    2017-6-9 03:27 AM
  • 簽到天數: 321 天

    連續簽到: 2 天

    [LV.8]以壇為家I

    發表於 2013-5-25 16:18:07 | 顯示全部樓層
    本帖最後由 bizarre1213 於 2013-5-27 05:52 PM 編輯
    1. //-魔附機率--
    2.         setarray .@Mg_A[1],4700,4701,4702,4710,4711,4712,
    3.                            4720,4721,4722,4730,4731,4732,
    4.                            4740,4741,4742,4750,4751,4752;
    5.                         
    6.         setarray .@Mg_S[1],4703,4713,4723,4733,4743,4753;
    7.         
    8.         setarray .@Mg_J[1],4704,4714,4724,4734,4744,4754;
    9.         set .@che,rand(1,100);
    10.         if(.@che<86){        set .@n,rand(1, (getarraysize(.@Mg_A)-1));
    11.                         set .@Magic_num,.@Mg_A[.@n];}

    12.         else if(.@che<96){        set .@n,rand(1, (getarraysize(.@Mg_S)-1));
    13.                         set .@Magic_num,.@Mg_S[.@n];}

    14.         else(.@che<=100){        set .@n,rand(1, (getarraysize(.@Mg_J)-1));
    15.                         set .@Magic_num,.@Mg_J[.@n];}
    16. //----
    複製代碼
    if檢查變數[1]1~100如果小於86 執行(實際範圍1-85) =85%機率

    會剩下86~100的數字往下

    else if檢查變數[2]86~100如果小於96 執行(實際範圍86-95) =10%機率

    會剩下96~100的數字往下

    else檢查變數[3]96~100如果小於或等於100 執行(實際範圍96-100) =5%機率

    85+10+5=100%

    如果加總低於或是大於100 不在範圍內就是null


    我並不清楚
    .@Mg_A
    .@Mg_S
    .@Mg_J

    收取什麼物品 只是由最爛到最好以機率來排列



    如有錯請糾正我XD

    評分

    參與人數 1積分 +15 收起 理由
    grass0916 + 15 參與加分, 錯誤理由我回覆在下面

    查看全部評分

    回復 支持 反對

    使用道具 舉報

  • TA的每日心情

    2014-3-7 12:00 AM
  • 簽到天數: 80 天

    連續簽到: 2 天

    [LV.6]常住居民II

     樓主| 發表於 2013-5-25 17:45:44 | 顯示全部樓層
    bizarre1213 發表於 2013-5-25 04:18 PM
    if檢查變數1~100如果小於86 執行(實際範圍1-85) =85%機率

    會剩下86~100的數字往下

    大家說法都不一樣欸
    怎麼滿腦問號了
    又要被轟了 ...... -.-
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    慵懶
    2018-6-20 12:07 AM
  • 簽到天數: 30 天

    連續簽到: 1 天

    [LV.5]常住居民I

    發表於 2013-5-26 01:19:57 | 顯示全部樓層
    本帖最後由 冷落一良 於 2013-5-26 08:44 AM 編輯
    1. set .@che,rand(1,100);
    2.         if(.@che<86){        set .@n,rand(1, (getarraysize(.@Mg_A)-1));
    3.                         set .@Magic_num,.@Mg_A[.@n];}

    4.         if(.@che<96){        set .@n,rand(1, (getarraysize(.@Mg_S)-1));
    5.                         set .@Magic_num,.@Mg_S[.@n];}

    6.         if(.@che<=100){        set .@n,rand(1, (getarraysize(.@Mg_J)-1));
    7.                         set .@Magic_num,.@Mg_J[.@n];}
    複製代碼
    .@che = 85
    三個if 也會執行

    .@che = 95
    最後兩個if 會執行

    .@che = 97
    只有最後的if 會執行

    即是說
    .@che 0~85 會使 .@Magic_num = .@Mg_J[.@n]
    .@che 86~95 會使 .@Magic_num = .@Mg_J[.@n]
    .@che 96~100 會使 .@Magic_num = .@Mg_J[.@n]

    總結
    這樣寫只有一個結果 .@Magic_num = .@Mg_J[.@n]


    用比較笨的方法
    1. set .@che,rand(1,100);
    2. if((.@che>=1 ) && (.@che<=85))
    3. {script A;}// 只有1~85會執行script A

    4. if((.@che>=86 ) && (.@che<=95))
    5. {script B;}// 只有86~95會執行script B

    6. if((.@che>=96) && (.@che<=100))
    7. {script C;}// 只有96~100會執行script C
    複製代碼
    || = OR , && = AND




    評分

    參與人數 1積分 +25 收起 理由
    grass0916 + 25 yap

    查看全部評分

    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2022-11-22 05:16 AM
  • 簽到天數: 349 天

    連續簽到: 1 天

    [LV.8]以壇為家I

    發表於 2013-5-26 07:30:40 | 顯示全部樓層
    我是路人~發表一下我的意見吧~
    我覺得各位大大會火氣會這麼大是不知道你寫腳本的程度在哪..
    而且你觀念上好像有些地方需要修正

    首先-->

    set .@che,rand(1,100);

    是設置所有的機率 1~100 超出這個範圍的機率就會出現錯誤 也就是(null)

    大家也都很細心的教你

    你的
    •         if(.@che>90){        set .@n,rand(1, (getarraysize(.@Mg_S)-1));
    •                         set .@Magic_num,.@Mg_S[.@n];}
    •         if(.@che<91){        set .@n,rand(1, (getarraysize(.@Mg_A)-1));
    •                         set .@Magic_num,.@Mg_A[.@n];}
    •         if(.@che>95){        set .@n,rand(1, (getarraysize(.@Mg_J)-1));
    •                         set .@Magic_num,.@Mg_J[.@n];
    出現很大的問題


    .@che 是個變數
    第一行 如果.@che大於90(不包括90)(變數91~100)(10%機率)就會執行 set .@Magic_num,.@Mg_S[.@n];} 也就是+4的附魔

    第四行 如果.@che小於91(不包括91 包括90)(變數1~90)(90%機率)就是直行 set .@Magic_num,.@Mg_A[.@n];} 就是+3以下附魔

    以上 有沒有發現你的變數已經用完了 1~100都已經有可以執行的命令了..

    所以你第七行if(.@che>95) 就會變成多出來的東西 這個命令是指 .@che大於95(不包括95) 有96.97.98.99.100 可是這個變數已經在第一行用去了

    所以建議改成

           if(.@che>85 && .@che<96){        set .@n,rand(1, (getarraysize(.@Mg_S)-1));
                            set .@Magic_num,.@Mg_S[.@n];}

            if(.@che<86){        set .@n,rand(1, (getarraysize(.@Mg_A)-1));
                            set .@Magic_num,.@Mg_A[.@n];}

            if(.@che>95){        set .@n,rand(1, (getarraysize(.@Mg_J)-1));
                            set .@Magic_num,.@Mg_J[.@n];}

    (.@che>85 && .@che<96)變成+4附魔的機率為 86~95 10個數字 也就是10%的機會
    (.@che<86)變成+3以下的機率為 85~1 85%的機會
    (.@che>95)變成+5的機率為 96.97.98.99.100 五個數字 以就是 5%的機會

    沒測試過不一定正確

    如果有錯誤請各位大大指正




    評分

    參與人數 1積分 +35 收起 理由
    grass0916 + 35 yap

    查看全部評分

    回復 支持 反對

    使用道具 舉報

  • TA的每日心情

    2014-3-7 12:00 AM
  • 簽到天數: 80 天

    連續簽到: 2 天

    [LV.6]常住居民II

     樓主| 發表於 2013-5-26 23:56:34 | 顯示全部樓層
    phyoto60806 發表於 2013-5-26 07:30 AM
    我是路人~發表一下我的意見吧~
    我覺得各位大大會火氣會這麼大是不知道你寫腳本的程度在哪..
    而且你觀念上 ...

    我再測試看看
    目前沒有補丁可以測試ˊˋ
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情

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

    連續簽到: 1 天

    [LV.9]以壇為家II

    發表於 2013-5-27 17:42:59 | 顯示全部樓層
    bizarre1213 發表於 2013-5-25 04:18 PM
    if檢查變數1~100如果小於86 執行(實際範圍1-85) =85%機率

    會剩下86~100的數字往下
    1. //-魔附機率--
    2.         setarray .@Mg_A[1],4700,4701,4702,4710,4711,4712,
    3.                            4720,4721,4722,4730,4731,4732,
    4.                            4740,4741,4742,4750,4751,4752;
    5.                         
    6.         setarray .@Mg_S[1],4703,4713,4723,4733,4743,4753;
    7.         
    8.         setarray .@Mg_J[1],4704,4714,4724,4734,4744,4754;
    9.         set .@che,rand(1,100);
    10.         if(.@che<86){        set .@n,rand(1, (getarraysize(.@Mg_A)-1));
    11.                         set .@Magic_num,.@Mg_A[.@n];}

    12.         if(.@che<96){        set .@n,rand(1, (getarraysize(.@Mg_S)-1));
    13.                         set .@Magic_num,.@Mg_S[.@n];}

    14.         if(.@che<=100){        set .@n,rand(1, (getarraysize(.@Mg_J)-1));
    15.                         set .@Magic_num,.@Mg_J[.@n];}
    16. //----
    複製代碼
    3個 if 獨立判斷, 所以小於 86 所判斷的 3次 if 都會進入

    修改成 if / else if / else 才能避免此情形發生

    回復 支持 反對

    使用道具 舉報

  • TA的每日心情

    2017-6-9 03:27 AM
  • 簽到天數: 321 天

    連續簽到: 2 天

    [LV.8]以壇為家I

    發表於 2013-5-27 17:50:23 | 顯示全部樓層
    grass0916 發表於 2013-5-27 05:42 PM
    3個 if 獨立判斷, 所以小於 86 所判斷的 3次 if 都會進入

    修改成 if / else if / else 才能避免此情形 ...

    被 冷落一良 說到錯誤之後 就剛好看到上面有
    1. if
    2. else if
    3. else
    複製代碼
    的語法可以套用

    剛好在忙論壇架設的問題

    就忘了修正

    感謝指點0.0
    回復 支持 反對

    使用道具 舉報

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

    本版積分規則

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

    GMT+8, 2025-6-22 10:31 PM , Processed in 0.548834 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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