OK論壇

 找回密碼
 註冊
查看: 2316|回復: 14

離開範圍後觸發對話

 關閉 [複製鏈接]
  • TA的每日心情
    慵懶
    2018-1-21 06:27 PM
  • 簽到天數: 63 天

    連續簽到: 1 天

    [LV.6]常住居民II

    發表於 2014-7-6 23:16:09 | 顯示全部樓層 |閱讀模式
    EA
    私服版號: SeAr1.10.132
    問題內容: 腳本問題
    本帖最後由 saint_19930619 於 2014-7-11 12:27 PM 編輯

    小弟最近在研究一個腳本,

    走進該範圍內會直接啟動泡點,
    並會跳出視窗以及對話框告知,
    但是離開該範圍後,
    照樣也會跳出視窗以及對話框告知。

    目前進入該範圍,
    直接啟動泡點、跳出視窗告知、對話框告知已經完成,
    用的是dmcr,60,105,5        script        範圍測試        123,5,5,{







    但是不知道"離開該區域",
    讓腳本自動取消泡點計時、跳出視窗告知以及對話框告知。

    目前試過getmapxy但是好像完全不對...
    還請各位大大賜教。

    本帖子中包含更多資源

    您需要 登錄 才可以下載或查看,沒有帳號?註冊

    x
    回復

    使用道具 舉報

  • TA的每日心情
    擦汗
    2015-10-1 03:50 PM
  • 簽到天數: 416 天

    連續簽到: 1 天

    [LV.9]以壇為家II

    發表於 2014-7-7 00:35:48 | 顯示全部樓層
    在泡點計算時間的語法
    用getmapxy判斷是否在NPC的範圍內不就好了嗎...
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    慵懶
    2018-1-21 06:27 PM
  • 簽到天數: 63 天

    連續簽到: 1 天

    [LV.6]常住居民II

     樓主| 發表於 2014-7-7 00:58:25 | 顯示全部樓層
    本帖最後由 saint_19930619 於 2014-7-7 01:01 AM 編輯
    Karas鴉 發表於 2014-7-7 12:35 AM
    在泡點計算時間的語法
    用getmapxy判斷是否在NPC的範圍內不就好了嗎...

    如果是用getmapxy來限定的話,
    getmapxy("dmcr",x,y,1);

    請問大大一下,

    X跟Y要填上什麼?

    假設我npc的範圍效果是1X1



    黑圈代表NPC
    紅圈代表作用範圍
    綠圈代表作用範圍外

    小弟如果使用getmapxy("dmcr",x,y,1);

    是不是就要寫
    getmapxy("dmcr",1,1,1) goto OutOfRange;
    getmapxy("dmcr",2,1,1) goto OutOfRange;
    getmapxy("dmcr",3,1,1) goto OutOfRange;
    getmapxy("dmcr",4,1,1) goto OutOfRange;
    getmapxy("dmcr",5,1,1) goto OutOfRange;
    getmapxy("dmcr",1,2,1) goto OutOfRange;
    getmapxy("dmcr",1,3,1) goto OutOfRange;
    getmapxy("dmcr",1,4,1) goto OutOfRange;
    getmapxy("dmcr",1,5,1) goto OutOfRange;
    getmapxy("dmcr",5,2,1) goto OutOfRange;
    getmapxy("dmcr",5,3,1) goto OutOfRange;
    getmapxy("dmcr",5,4,1) goto OutOfRange;
    getmapxy("dmcr",5,5,1) goto OutOfRange;
    getmapxy("dmcr",2,5,1) goto OutOfRange;
    getmapxy("dmcr",3,5,1) goto OutOfRange;
    getmapxy("dmcr",4,5,1) goto OutOfRange;

    這樣才可以滿足超出範圍觸發停止計算呢...


    本帖子中包含更多資源

    您需要 登錄 才可以下載或查看,沒有帳號?註冊

    x
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    慵懶
    2020-5-9 12:35 PM
  • 簽到天數: 987 天

    連續簽到: 1 天

    [LV.10]以壇為家III

    發表於 2014-7-7 05:46:05 | 顯示全部樓層
    你可以醬寫
    1. prontera,155,181,5        script        Sample#area        -1,5,5,{
    2. end;

    3. OnCheck:
    4.         getmapxy( .@map$,.@x,.@y,0 );
    5.         .@distance = distance( .npc_x,.npc_y,.@x,.@y );
    6.         if( .@distance > 5 ){
    7.                 message strcharinfo(0),"You're too far away. Come closer!";
    8.         }
    9.         else{
    10. OnTouch:
    11.                 addtimer 1000,.npc_name$+"::OnCheck";
    12.         }
    13.         end;

    14.         end;

    15. OnInit:
    16.         .npc_name$ = strnpcinfo(0);
    17.         getmapxy( .npc_map$,.npc_x,.npc_y,1 );
    18.         end;
    19. }
    複製代碼
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    慵懶
    2018-1-21 06:27 PM
  • 簽到天數: 63 天

    連續簽到: 1 天

    [LV.6]常住居民II

     樓主| 發表於 2014-7-7 07:26:44 | 顯示全部樓層
    本帖最後由 saint_19930619 於 2014-7-7 07:36 AM 編輯
    emistry 發表於 2014-7-7 05:46 AM
    你可以醬寫

    • OnCheck:
    •         getmapxy( prontera,155,181,1 );
    •         .@distance = distance( 155,.181,5,5 );
    •         if( .@distance > 5 ){
    •                 message strcharinfo(0),"You're too far away. Come closer!";
    •         }
    •         else{

    請問我這樣寫,

      if( .@distance > 5 )


    的部分是不是就要寫兩個,
    因為5X5是代表
    prontera,(145~165),(171~191)
      if( .@distance > 5 )
      if( .@distance < 5 )
    兩個都要寫嗎

    總不可能  if( .@distance <> 5 )吧
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    慵懶
    2020-5-9 12:35 PM
  • 簽到天數: 987 天

    連續簽到: 1 天

    [LV.10]以壇為家III

    發表於 2014-7-7 09:04:10 | 顯示全部樓層
    NPC = 中心
    DISTANCE = 距离

    不需要&#20004;各。。
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    慵懶
    2018-1-21 06:27 PM
  • 簽到天數: 63 天

    連續簽到: 1 天

    [LV.6]常住居民II

     樓主| 發表於 2014-7-7 17:47:00 | 顯示全部樓層
    emistry 發表於 2014-7-7 09:04 AM
    NPC = 中心
    DISTANCE = 距离

    哦哦!!

    • getmapxy( protera,100,100,1 );
    •         .@distance = distance( 100,100,5,5 );
    •         if( .@distance > 5 ) goto OutOfRange
    • OutOfRange:
    • mes "您已超出泡點計算範圍";
    • mes "泡點系統已停止計算";
    • close;
    • }

    所以如果我這樣寫NPC位置是100,100

    然後以NPC(100,100)為中心點,
    上下左右範圍5之內都不會觸發OutOfRange,
    但是一但走出5x5就會觸發OutOfRange,
    這樣對嗎?
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    擦汗
    2015-10-1 03:50 PM
  • 簽到天數: 416 天

    連續簽到: 1 天

    [LV.9]以壇為家II

    發表於 2014-7-8 12:36:34 | 顯示全部樓層
    本帖最後由 Karas鴉 於 2014-7-8 12:38 PM 編輯
    saint_19930619 發表於 2014-7-7 05:47 PM
    哦哦!!

    應該要解釋為
    當時間跑完觸發OnCheck事件時
    會判斷人物和NPC之間的距離
    如果距離大於設定則中斷

    而不是"離開範圍就觸發"
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    慵懶
    2018-1-21 06:27 PM
  • 簽到天數: 63 天

    連續簽到: 1 天

    [LV.6]常住居民II

     樓主| 發表於 2014-7-8 14:53:40 | 顯示全部樓層
    Karas鴉 發表於 2014-7-8 12:36 PM
    應該要解釋為
    當時間跑完觸發OnCheck事件時
    會判斷人物和NPC之間的距離

    摁 ..

    那請問大大

    也是使用 "getmapxy"  "distance"
    這兩個語法嗎

    如果是的話,
    要怎麼寫 ...

    getmapxy 這語法我只有鎖定過地圖
    但是不會限制一個範圍值..

    distancr 這語法,
    好像是取距離的語法,
    但是我設定  .@distance = distance( 100,100,5,5 );
                        if ( .@distamce > 5 ) goto OOR;
    應該就是設定超出5格以上的距離,
    則goto OOR (OOR我設定為 > deltimer的部份)
    但是好像還是失敗....

    第一次使用這語法,
    還不太懂他的作用,
    還請大大不吝嗇賜教 ...
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    擦汗
    2015-10-1 03:50 PM
  • 簽到天數: 416 天

    連續簽到: 1 天

    [LV.9]以壇為家II

    發表於 2014-7-8 15:13:29 | 顯示全部樓層
    本帖最後由 Karas鴉 於 2014-7-8 03:32 PM 編輯
    saint_19930619 發表於 2014-7-8 02:53 PM
    摁 ..

    那請問大大

    其實4樓已經寫的差不多了...
    主要是你搞錯distance的用法了...

    distance(<x0>,<y0>,<x1>,<y1>)    返回兩點間的距離
    舉例:
    .@dis = distance(100,200,101,202);
    將返回座標(100,200) 與 座標(101,202)這兩點間的距離


    借四樓的來用 我加上註釋 這樣你應該比較好看得懂
    1. prontera,155,181,5        script        Sample#area        -1,5,5,{
    2.         end;
    3. OnCheck:

    4.         //取得玩家座標
    5.         getmapxy(.@map$,.@x,.@y,0);

    6.         //計算玩家當下座標距離該NPC座標有多遠
    7.         .@distance = distance(.npc_x,.npc_y,.@x,.@y);

    8.         //如果距離與NPC距離大於5則中斷計算
    9.         if(.@distance > 5)
    10.         {
    11.                 message strcharinfo(0),"你離開指定範圍了,中斷線上積分計算!";
    12.                 end;
    13.         }

    14.         //增加線上積分
    15.         #OnlinePoint++;
    16.         message strcharinfo(0),"目前線上積分有[ "+#OnlinePoint+"點 ]";

    17. OnTouch:
    18.         //每過1秒執行OnCheck檢查玩家與NPC的距離
    19.         //1000毫秒 = 1秒
    20.         addtimer 1000,strnpcinfo(0)+"::OnCheck";
    21.         end;

    22. OnInit:
    23.         //取得該NPC座標
    24.         getmapxy(.npc_map$,.npc_x,.npc_y,1);
    25.         end;
    26. }
    複製代碼
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    慵懶
    2018-1-21 06:27 PM
  • 簽到天數: 63 天

    連續簽到: 1 天

    [LV.6]常住居民II

     樓主| 發表於 2014-7-9 01:56:47 | 顯示全部樓層
    Karas鴉 發表於 2014-7-8 03:13 PM
    其實4樓已經寫的差不多了...
    主要是你搞錯distance的用法了...

    感謝大大翻譯 ..

    原來不用去動()內的東西,

    小弟已經可以成功的開始計算以及超出範圍後的停止作業,
    但是小弟還想問一個問題...

    有沒有辦法讓兩個Timer獨立計算?
    每1000毫秒OnCheck (確認玩家有沒有超出距離)
    然後每5000毫秒增加線上積分,
    小弟寫了一下,
    同一腳本內好像不會獨立作業,
    而是變成6秒確認一次6秒加一次。

    然後小弟也試寫了兩個腳本,
    每秒確認寫一個腳本,
    每5秒增加寫一個腳本,
    但是發現..每5秒增加的腳本,
    根本不受距離限制啊~~~~~

    只要走進範圍,
    然後離開範圍後還是照樣5秒增加一次...

    有些苦惱啊 ...
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    擦汗
    2015-10-1 03:50 PM
  • 簽到天數: 416 天

    連續簽到: 1 天

    [LV.9]以壇為家II

    發表於 2014-7-9 10:55:23 | 顯示全部樓層
    saint_19930619 發表於 2014-7-9 01:56 AM
    感謝大大翻譯 ..

    原來不用去動()內的東西,

    提供你的寫法吧
    這樣才知道你的問題出在哪
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    慵懶
    2018-1-21 06:27 PM
  • 簽到天數: 63 天

    連續簽到: 1 天

    [LV.6]常住居民II

     樓主| 發表於 2014-7-9 17:45:31 | 顯示全部樓層
    好的,
    小弟第一次的寫法是修改
    addtimer 5000,strnpcinfo(0)+"::OnCheck";
    讓它變成5秒+1點,
    但是離開該區域後,
    五秒後才會跟你說,
    你離開了區域。

    小弟想要每秒檢查距離,
    但5秒才會增加1點。

    於是我把它分開:
    OnCheck:

            //取得玩家座標
            getmapxy(.@map$,.@x,.@y,0);

            //計算玩家當下座標距離該NPC座標有多遠
            .@distance = distance(.npc_x,.npc_y,.@x,.@y);

            //如果距離與NPC距離大於5則中斷計算
            if(.@distance > 5)
            {
                    message strcharinfo(0),"你離開指定範圍了,中斷線上積分計算!";
                    end;
            }
            if(.@distance < 5) goto OnAdd;


    OnTouch:
            //每過1秒執行OnCheck檢查玩家與NPC的距離
            //1000毫秒 = 1秒
            addtimer 5000,strnpcinfo(0)+"::OnAdd";
            addtimer 1000,strnpcinfo(0)+"::OnCheck";
            end;

    OnInit:
            //取得該NPC座標
            getmapxy(.npc_map$,.npc_x,.npc_y,1);
            end;

    OnAdd:
           
            //增加線上積分
            #OnlinePoint++;
            message strcharinfo(0),"目前線上積分有[ "+#OnlinePoint+"點 ]";
            addtimer 1000,strnpcinfo(0)+"::OnCheck";
            end;
    }

    但是會變成六秒檢查一次距離
    六秒加一次。

    之後我把它分兩個腳本,
    腳本1:
    每秒檢查距離。
    腳本2 :
    每5秒增加線上點數。

    結果就是,
    雖然離開範圍會告知,
    但是不會停止增加線上點數...
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    慵懶
    2018-1-21 06:27 PM
  • 簽到天數: 63 天

    連續簽到: 1 天

    [LV.6]常住居民II

     樓主| 發表於 2014-7-10 18:58:54 | 顯示全部樓層
    本帖最後由 saint_19930619 於 2014-7-10 10:12 PM 編輯
    Karas鴉 發表於 2014-7-9 10:55 AM
    提供你的寫法吧
    這樣才知道你的問題出在哪

    完整來說我目前的寫法是這樣
    1. dmcr,77,67,5        script        泡點檢查        -1,10,10,{        callfunc "增加泡點::OnTimer";
    2.         end;



    3. OnCheck:

    4.         //取得玩家座標
    5.         getmapxy(.@map$,.@x,.@y,0);

    6.         //計算玩家當下座標距離該NPC座標有多遠
    7.         .@distance = distance(.npc_x,.npc_y,.@x,.@y);

    8.         //如果距離與NPC距離大於5則中斷計算
    9.         if(.@distance > 10)
    10.         {
    11.                 message strcharinfo(0),"你離開指定範圍了,中斷泡點計算!";
    12.                 end;
    13.         }



    14. OnTouch:
    15.         //每過1秒執行OnCheck檢查玩家與NPC的距離
    16.         //1000毫秒 = 1秒
    17.         addtimer 1000,strnpcinfo(0)+"::OnCheck";
    18.         end;

    19. OnInit:
    20.         //取得該NPC座標
    21.         getmapxy(.npc_map$,.npc_x,.npc_y,1);
    22.         end;



    23. }
    複製代碼
    上面是檢查後告知訊息的腳本。
    1. dmcr,77,67,5        script        增加泡點        -1,10,10,{



    2. OnTimer:
    3.         

    4.         //取得玩家座標
    5.         getmapxy(.@map$,.@x,.@y,0);

    6.         //計算玩家當下座標距離該NPC座標有多遠
    7.         .@distance = distance(.npc_x,.npc_y,.@x,.@y);

    8.         //如果距離與NPC距離大於5則中斷計算
    9.         if(.@distance > 10)
    10.         {
    11.                 deltimer "增加泡點::OnTimer";
    12.                 end;
    13.         }
    14.         

    15. OnAdd:
    16.         //增加線上積分
    17.         set #OnlinePoint,#OnlinePoint + 10;
    18.         message strcharinfo(0),"目前泡點有[ "+#OnlinePoint+"點 ]";
    19.         addtimer 2000,strnpcinfo(0)+"::OnTimer";
    20.         end;


    21. OnInit:
    22.         //取得該NPC座標
    23.         getmapxy(.npc_map$,.npc_x,.npc_y,1);
    24.         end;

    25. }
    複製代碼
    這個是檢查之後"發放泡點"的腳本。



    可是好像還是不太行...
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    擦汗
    2015-10-1 03:50 PM
  • 簽到天數: 416 天

    連續簽到: 1 天

    [LV.9]以壇為家II

    發表於 2014-7-11 00:03:16 | 顯示全部樓層
    已PM。  
    回復 支持 反對

    使用道具 舉報

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

    本版積分規則

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

    GMT+8, 2024-4-25 01:06 PM , Processed in 0.059122 second(s), 23 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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