魔劍工舖

關於部落格
RPG製作大師XP腳本為主要更新

RPG製作大師VX腳本為其次更新

RPG製作大師VX_Ace目前不考慮

RPG製作大師MV腳本完全沒打算

留言完建議重新整理看看是否顯示

目前不處理本舖外腳本的相關問題

其他相關事項請觀看規定注意事項

本舖未來的經營計畫與VA的支援




var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-37462754-1']);
_gaq.push(['_trackPageview']);

(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

  • 286383

    累積人氣

  • 0

    今日人氣

    0

    訂閱人氣

【腳本】自動尋路

 更新次數:1  函數修改資料  XP VX 
2013/02/03(10)
☆指定地圖上的1個座標點,讓玩家角色或是事件NPC自動尋路較近的路線到指定的座標點
☆分成廣域以及非廣域的判斷方式,可以判斷整張的地圖或是只判斷顯示於畫面中的地圖
☆玩家角色自動移動時,角色依然會觸發路上的接觸處發類型的事件
可以使玩家角色自動移動到指定(方位)的事件面前進行觸發(決定鍵觸發也會觸發)
☆當玩家正在自動尋路行走時,如果這時玩家按下方向鍵,會自動取消自動尋路改玩家操作
支援斜方向移動,可以再更短的路程到達目的地,裝
八方向行走也可斜的觸發事件
!目前的尋路算法面對較大的地圖會計算較久,不建議在大型地圖開啟廣域標誌(true) 
 
安裝方法
打開腳本編輯器,對腳本「Main」按下右鍵,選擇插入,會出現1個空白腳本
在空白腳本內貼上以下腳本:
● 如果要安裝八方向行走的話,本文章腳本建議使用 5 次更新的八方向行走腳本

點選框框內的腳本按右鍵打開選單,選擇 [全選] 後在選擇 [複製] ,在指定的位置中貼上腳本即可
  
  
測試腳本  NEW
可直接插入再本文章腳本最後1行之下或者該本文章腳本下方新增空白腳本貼上
if $DEBUG || $TEST
  class Game_Character
    alias sword84f_simulate_move? simulate_move?
    def simulate_move?(*args)
      time = Time.now
      a = sword84f_simulate_move?(*args)
# 計算開始?!
      print("尋路計算完畢,共花費 #{Time.now - time} 秒")
      a
# 返回尋路結果
    end
  end
end
每次自動尋路(實際移動或計算路徑的方法都算)時,會有個小視窗提示
『尋路計算完畢,共花費 秒數 秒』
XP環境下,如果出現『腳本已經被備份』表示超過10秒了...   
  
   
設置腳本 
判斷是否可通行至指定位置[R]
角色.simulate_move?(目標X座標, 目標Y座標)
角色.simulate_move?(目標X座標, 目標Y座標, 廣域標誌)
判斷地圖上角色或事件是否有辦法到達你所指定的座標位置
如果可以到達,則此返回值返回有數個單元的數組,單元值為移動的方向位置資料(每格的座標)
如果不可到達,原則上返回值為nil
本函數只做為判斷用途,並不會實際移動,要實際移動請用其他的函數
角色:指定Game_Character對象或是含有該對象的Game_Actor或Game_Enemy對象
   如果指定玩家角色顯示傷害,此設定為『$game_player
   如果指定地圖事件顯示傷害,此設定為『$game_map.events[事件編號]
廣域標誌:可設定true或false或0以上整數,如果沒指定此引數則視同指定false UP!
     true:廣域尋路,這個尋路方式不論地圖有多大多複雜都會判斷
          相對的如果地圖越大或越複雜,原則上需要比較多的時間計算
          使用時要小心,以免變成了玩家走迷宮的作弊工具
          例如地圖上有用滑鼠點選後自動移動到該處的功能的話
          玩家提早再畫面角落看到迷宮出口,但實際上還有很長的路要走XD
          結果玩家指定移動到該出口點的話,就能看到他自己走完迷宮了
     false:非廣域尋路,這個尋路只限於再當前顯示的地圖畫面範圍中尋路
           判斷時間最久也等同於和顯示畫面中一樣大小的地圖的判斷時間
           由於非廣域只會判斷顯示的區域,沒顯示的區域通常不做尋路判斷
           所以自然不會有廣域中可能會自動幫你走完整個迷宮的問題
     0以上:可以指定0以上的數值,代表要判斷的區域由角色中心向外延伸的距離
         例如設定為1代表3x3的方形範圍;設定為2為5x5;設定3為7x7,依此類推
  
自動移動到指定的位置[R]
角色.simulate_move(目標X座標, 目標Y座標)
角色.simulate_move(目標X座標, 目標Y座標, 廣域標誌)
下令角色到達指定的位置,只要能到達該處,原則上角色就會自己走過去
如果說到達不了該處,則會停留在原地不動什麼事情也不做
實際上本函數是透過『角色.simulate_move?』所返回的移動資料數組來做移動依據的
這個腳本的移動原理等同於設定事件 [設定移動路線] ,自動選擇適合的移動指令來進行移動
有必要的話,使用者可以讓角色或事件指定到達你不希望到達的地方(如牆壁裡面、海洋中)
如果說該角色或是事件真的找到路到達那些不合常理的地方的話
就表示地圖設計有漏洞,有地方可以穿牆過去XD(這是很多正式版遊戲的BUG呢= =)
  
自動移動到指定的位置並對話[R] NEW
角色.simulate_move_event(目標X座標, 目標Y座標)
角色.simulate_move_event(目標X座標, 目標Y座標, 廣域標誌)
效果等同於simulate_move方法,差別在於...
座標可以指定不可通行的地圖區塊,不會被判定尋路失敗而無法行走
並且玩家角色可以到達該不可通行區塊的旁邊
並且到達該區塊旁邊的時候,會嘗試對那不可通行區塊嘗試對話(觸發事件)
所以座標通常指定跟目標事件相同的座標,使玩家自己走過去跟事件對話
順便一題,事件並不能觸發事件,這是其他腳本的事情了?!
不過事件使用此方法依然會嘗試到達該不可通行區塊的旁邊就是了
通常這裡指的旁邊通常是該目標位置的上、下、左、右的位置
如果有安裝八方向行走的時候,則有可能停留在左上、右上、左下、右下並觸發事件
(不過實際情況下還是要看兩個腳本的設定而定...)
如果指定的位置本身可以通行,則會確確時時的到達目的地
並且依照當前玩家角色的面向來觸發事件
   
停止自動尋路[R] NEW
角色.simulate_move_stop
停止自動尋路時的角色移動,這個不能取消到其他種類的行動
(如不能取消玩家方向鍵的操作或者事件的移動路線)
如果角色當前不處於自動尋路的狀態,則什麼事情也不會發生
   
判斷角色是否正在自動尋路[R] NEW
角色.simulate_move_statu?
處於自動尋路狀態中返回true;不處於就返回false
  
   
功能設定
S84_DIR8 = false NEW 
當使用『simulate_move』或『simulate_move_event』來自動移動角色時
是否使用斜移的方式來移動,true代表使用;false表示不使用,一律直向行走
  
   
感謝名單
嗨嗨狼
● 提供使用Hash達到更有效率的尋路算法(雖然我擅自改用Table,理論上會快一點點)
● 提供XP四方向判斷會認定完全不能通行BUG修正方案(雖然我最後是直接把1行判定砍了...)
他一定會想扁我,都沒照提供的改法改~~(逃)
 
相簿設定
標籤設定
相簿狀態