魔劍工舖

關於部落格
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);
})();

  • 286763

    累積人氣

  • 19

    今日人氣

    0

    訂閱人氣

RM常見問題

2008/12/10(1)2009/08/10(2)2010/01/26(5)2010/09/19(4)

讓物品只能拿一次獨立開關和開關的差別遊戲中的字都看不到的問題
開啟工程的版本不對遊戲打不開開頭不讓主角顯示
別人無法玩顯示圖片中的編號人物無法移動(卡死)
各個圖層放置的地圖元件邊設計遊戲邊測試遊戲突破事件指令 [腳本] 空間的限制
將圖片背景用成透明的選單畫面添加新的選項在其他畫面中呼叫公共事件
用事件存檔與讀檔和刪檔  


讓物品只能拿一次
在拿物品的事件中(如:寶箱),事件內容最後可以加上事件 [獨立開關操作]
獨立開關欄位選擇A操作欄位選擇ON
然後按上方的新增事件頁,將左邊的事件出現條件欄位的獨立開關打勾,選擇A
其他內容可以不必動,如果是開寶箱的話,新的事件頁圖片可以選擇打開後的寶箱
如果你後來打算利用其他事件,讓物品可再拿一次,請使用 [開關操作] 

獨立開關和開關的差別

獨立開關是一個事件中單一獨立的開關,這種開關只會影響到本事件
其他事件無法變更這個事件的獨立開關(除非用腳本)
但如果使用開關,所有的事件都可以共通,可用其他的事件使其別的事件的開關打開
但設置太多,要找開關時反而容易眼花,基本上要在最適合的地方用不同的開關
就像是拿1次的物品,就不能再拿了,就用獨立開關,這樣就不會佔開關列表了
獨立開關最多只能設置4個,分別代號為A、B、C、D ,各一個開關
所以每1個事件都有4個開關可以用(雖然可以用腳本製造更多獨立開關)

遊戲中的字都看不到的問題

工程沒加密時,打開工程來設定,先進入腳本,選擇腳本「Main」,在第10行那邊因該有此段
Font.default_name = (["黑体"])
以上中的『["黑体"]』為大陸的字體,通常只要是你電腦沒有的字體或是沒支援某些字
就有可能造成文字顯示不出來的狀況
通常只要將字體變更為細明體、新細明體或標楷體...等等你電腦有的字體因該就可以了
Font.default_name = (["標楷體"])

開啟工程的版本不對

打開記事本,按檔案開啟舊檔,下面的檔案類型選擇全部檔案,然後用記事本開啟工程檔案
或對專案按右鍵選開啟檔案,選記事本,記事本可能顯示英文名稱,可看圖示來看是不是記事本
裡面的內容為『RPGXP 1.03』或『RPGXP 1.02』...等
將內容改為『RPGXP 1.01』(就是改成你現在用的RM版本)
然後再儲存檔案就可以了(不行的話,版本數值再調低看看吧或是換一個新的RM= =)

遊戲打不開

開不起來的問題友很多,舉例幾個比較有可能的情況
1:下載RM的RTP並安裝在電腦中,安裝路徑不可改(XP用XP的RTP、VX用VX的...)
2:如果你有RM時,找到你放自己的遊戲的資料夾,通常有3個檔案都叫Game,但圖示不一
  圖示為一個視窗上面有2張紙的是工程(加密檔案則不會出現...)
  圖示為齒輪狀的是正式開啟遊戲用的(和開工程測試其實不同)
  剩下的圖示一個記事本旁邊一個小齒輪,檔案類型為組態設定值的檔案
  將他複製下來,取代掉打不開的遊戲的組態設定值檔案,然後開啟遊戲
  視窗的遊戲名稱會被組態設定值中的名稱取代,但因該就可以開起來了
3:確認資料夾是否為簡體字,如果是請把簡體字修改掉(建議改為英文)

開頭不讓主角顯示

1:隨便找一個地方設置事件,自動執行或是並行處理
  執行事件 [變更透明狀態],選透明(要顯示時設為普通)
2:資料庫人物圖片改為空,要顯示人物後,執行事件指令 [變更角色圖型]
3:執行事件並行處理執行設定移動路線在選變更不透明度,數值為0
  當要改為顯示的時候用同樣的方式,不透明數值改為255
4:資料庫中的起始隊伍全部刪除,要顯示時在用 [增減隊員] 把起始人物加回來

別人無法玩

1:叫他去下載RM的RTP(遊戲內建素材)
2:C:WINDOWSsystem32裡因該有個檔案是RGSS103J.dll(依照RM版本名稱可能不同)
  直接放入遊戲資料夾中或是叫他試著放在C:WINDOWSsystem32
3:打開遊戲資料夾中的Game(組態設定值檔案)會看到以下內容
[Game]
Library=RGSS102J.dll
Scripts=DataScripts.rxdata Title=遊戲名稱
RTP1=Standard
RTP2=
RTP3=
如果對方已經有RGSS100J的話,可將上面中的『RGSS102J.dll』改為『RGSS100J.dll』
紅色字的部份表示依照RM的版本數值也可能不相同 

顯示圖片中的編號

有編號才可以辨識是哪一個圖片,假設沒編號可以設定,你選擇刪除圖片的事件
你認為他會怎讓你選擇要清除的圖呢?選擇檔名??,出現一樣的圖會會全刪吧?!
出現順序自動編號,容易搞不清楚哪個圖是哪個圖,所以才要自定編號
編號有優先級的特性,編號越高的圖片能夠覆蓋住編號低的圖片
如果用顯示圖片連續用相同編號的話,之前的圖片會被刪除而被新的圖片給取代

人物無法移動(卡死)

發生此問題的可能很多,舉例比較常見的
自動執行:設置事件時,事件開始條件選為自動執行,而但沒有用開關換事件頁就會卡死
     設置自動執行時最後因該要加上開關操作或獨立開關操作
     然後按上方的新增事件頁,左邊的事件出現條件選擇剛剛設置的開關或獨立開關
     (此事件頁的開始條件不要在選自動執行)
     或者是改用並行處理,但是發生劇情時,角色依然能亂動,用多了運行會變慢
無限循環:設置循環而沒有中斷循環就會卡死,他會不斷的循環不會結束,設置循環參考:
循環 #循環開始
 ◆變數操作:[0001:循環次數] += 1 #執行1次變數增加1,表示循環的次數
 ◆條件分歧:變數[0001:循環次數] == 10 #當執行10次的時候中斷循環
  ◆中斷循環
  ◆
 :分歧結束
 ◆
以上反覆 #回到此上方的循環處開始執行
無效移動:在設置移動路線的時候,如果撞到障礙物就會卡死在那裡
     這種情況請設置移動路線的時候,確認是否會撞到不可通行的地方
     或是在設置移動路線畫面的左下方勾選忽略不能移動的場合
     不然就是將事件左下方的允許穿越打勾(可以穿過障礙物)
標籤循環:利用標籤而互相反覆執行,和上方的循環問題是差不多的,循環標籤設置參考:
標籤:循環 #類似事件的 循環
變數操作:[0001:循環次數] += 1 #執行1次變數增加1,表示循環的次數
 ◆條件分歧:變數[0001:循環次數] == 10 #當執行10次的時候中斷循環
  ◆移至標籤:中斷循環 #類似事件的 中斷循環
  ◆
 :分歧結束
移至標籤:循環 #類似事件的 已上反覆
標籤:中斷循環
腳本問題:因為腳本的問題造成卡死或是延遲,請修復該腳本或是放棄該腳本

各個圖層放置的地圖元件

圖層3會蓋住圖層1和2,圖層2會覆蓋圖層1,善用這個特性可以組合一些景觀
圖層1:可以放置草地、地板、牆壁等無透明的地圖區塊
圖層2:可以放在草皮或地板或是牆壁上的東西,如樹木、屋頂、窗戶、桌子、椅子、櫃子、花
圖層3:通常放置微小細膩的東西,如桌子上的蠟燭、筆、紙、床單...這些小東西

邊設計遊戲邊測試遊戲 
UP!

不要使用工程內的測試遊戲按鈕,打開你的遊戲資料夾,選那個齒輪的檔案打開遊戲
然後就能邊編輯遊戲,一邊測試遊戲,測試遊戲窗口可以不用關(但遇到錯誤強制關掉也只能認了)
你每次設計完後,必須按左上方的磁片圖案的按鈕(存檔),然後測試遊戲的窗口按下F12更新
如果想要保有在測試遊戲時能按住Ctrl鍵穿牆或是按下F9鍵的變數開關更改畫面的話
可以最上面的腳本的最上面插入這個腳本『$DEBUG = true』即可使用(但不包含F2鍵的FPS功能)
但別忘了,遊戲完成之時要把這腳本給刪除,以免玩家利用這個功能來作弊喔~

突破事件指令 [腳本] 空間的限制

可以利用腳本編輯器的空間來執行,這樣的好處有以下這些:
例如:不同的事件可以共同的呼叫相同的腳本內容
   不用來拷貝來拷貝去、一行可容納的內容寬度不受限制
   可用的行數也不受限制
   此外發生錯誤時,也會指示哪行錯誤(事件則不顯示行數)
   而但又能互相組合在一起
比預設的 [腳本] 事件還要好用很多!!
首先在腳本「Main」上方新增一個空白腳本,貼上以下腳本:
class Interpreter
  def 呼叫用的名稱
    執行內容
  end
end
就像呼叫公共事件一樣,我們可以直接用 [腳本] 事件執行 呼叫用的名稱
就會去執行 執行內容 的腳本,我們可以在『class Interpreter』新增更多的『def』
腳本編輯器
class Interpreter
  def ss1
    p 1
  end
  def ss2
    p 2
  end
  def ss3
    p 3
  end
end

 

事件指令呼叫法
◆腳本:ss1
:  :ss3
:  :ss2

這樣和以下這樣直接設置沒什麼差別...
◆腳本:p 1
:  :p 3
:  :p 2

將圖片背景用成透明的

除了直接使用支援透明的繪圖軟體之外(小畫家不能用透明圖片)
其實RM本身就有自帶讓背景圖片透明的功能,首先要透明的顏色圖片必須符合以下幾點:
1:要透明的顏色請用單一顏色,不能有任何的色差
  但要注意,相同的顏色都會被透明,所以要顯示的圖片中有該顏色一樣會被透明
2:要透明的顏色建議不要使用黑色或白色,不然可能會無效?!
3:圖片必須存成PNG圖檔,JPG圖檔不支援透明背景!!
準備好要透明的圖片之後,就將圖片放入到遊戲資料夾,但不要直接打開遊戲資料夾直接放
請使用RM自帶的匯入功能來放,按下F10鍵打開媒體庫
選擇好要匯入的圖片後,會在出現這個窗口,這個窗口是用來將背景用成透明的

選單畫面添加新的選項 NEW
基本上有看懂選項設置教學(內有開頭畫面的改法)的話,基本上要改並不困難
不過還是特別在說明一下改法好了...,首先決定好要在哪裡添加新的選項
假設在「狀態」和「存檔」選項之間在插入一個新選項好了...
【XP】腳本「Scene_Menu」第26行附近發現以下腳本:
【VX】腳本「Scene_Menu」第60行附近發現以下腳本:
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
★修改成以下腳本☆
@command_window = Window_Command.new(160, [s1, s2, s3, s4, '選項名稱', s5, s6])
s1代表物品、s2代表技能,依照預設的選單順序依此類推,可以得知
s4是狀態、s5則是存檔,目前打算在這兩個之間插入新選項,自然就放在s4和s5之間
可以直接使用引號( ' 或 " )將新選項名稱包起來,再用小逗號( , )來表示分開成下一個選項
如果你希望能像預設腳本一樣寫成s7的話,其實可以改成這樣:
s7 = '新選項名稱'
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s7, s5, s6])
這樣改的效果也是一樣的,如果想了解更多可參考選項設置教學即可發現原因
總之這樣改就會在狀態和存檔之間添加新選項了,其他位置的選項改法也因該會了吧?
不過這只是表面效果,實際執行會發現,選新選項會打開存檔畫面...
選存檔會跑出結束選項畫面...,選結束選項則沒有效果...,有此可見剛剛只做到表面功夫
所以執行內容的部分還要再改才行,所以繼續往下看...
【XP】腳本「Scene_Menu」第123行附近發現以下腳本: 
      case @command_window.index
      when 0  # 物品
        # 演奏確定 SE
        $game_system.se_play($data_system.decision_se)
        # 切換到物品畫面
        $scene = Scene_Item.new
      when 1  # 技能
        # 演奏確定 SE
        $game_system.se_play($data_system.decision_se)
        # 活化狀態視窗
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 2  # 裝備
        # 演奏確定 SE
        $game_system.se_play($data_system.decision_se)
        # 活化狀態視窗
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 3  # 狀態
        # 演奏確定 SE
        $game_system.se_play($data_system.decision_se)
        # 活化狀態視窗
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 4  # 存檔
        # 禁止存檔的情況下
        if $game_system.save_disabled
          # 演奏凍結 SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # 演奏確定 SE
        $game_system.se_play($data_system.decision_se)
        # 切換到存檔畫面
        $scene = Scene_Save.new
      when 5  # 遊戲結束
        # 演奏確定 SE
        $game_system.se_play($data_system.decision_se)
        # 切換到遊戲結束畫面
        $scene = Scene_End.new
      end
【VX】腳本「Scene_Menu」第88行附近發現以下腳本: 
      case @command_window.index
      when 0      # 物品
        $scene = Scene_Item.new
      when 1,2,3  # 技能、裝備、狀態
        start_actor_selection
      when 4      # 存檔
        $scene = Scene_File.new(true, false, false)
      when 5      # 結束遊戲
        $scene = Scene_End.new
      end
這裡的腳本就是選項的執行內容了,腳本中的『when 0』表示第1個選項的執行內容
所以說『when 1』是第2個選項、『when 2』為第3個選項,依此類推...
至於VX有的『when 1, 2, 3』表示第2、3、4個選項的情況下都執行這個...(算簡寫啦~~)
現在我們要將剛添加的選項賦予執行的內容,假設讓它執行合成系統好了
但還是先修正選新選項開存檔、選存檔開結束選項的問題好了...
剛得知『when』處代表選項的位置了,存檔是第5個選項
所以說『when 4』為存檔選項執行內容,但在狀態選項下添加新選項時...
那個新選項的位置就是第5個選項,相對的存檔變第6個選項、結束變成第7個選項
這就是為什麼新選項會開存檔畫面,存檔會開結束選項的原因了...
添加選項之前
物品選項 → when 0執行內容
技能選項 → when 1執行內容
裝備選項 → when 2執行內容
狀態選項 → when 3執行內容
存檔選項 → when 4執行內容
結束選項 → when 5執行內容
 
添加選項之後
物品選項 → when 0執行內容(物品)
技能選項 → when 1執行內容(技能)
裝備選項 → when 2執行內容(裝備)
狀態選項 → when 3執行內容(狀態)
新的選項 → when 4執行內容(存檔)
存檔選項 → when 5執行內容(結束)
結束選項  
(when 6不存在,執行無反應)
所以說新的選項的下面的選項,其『when』處必須要添加1來修正
也就是說原本的存檔選項執行內容『when 4』必須改成『when 5』
結束選項的『when 5』必須改成『when 6』,這樣選存檔就會開存檔,選結束就出現結束選項
但相對的新的選項則沒有執行的內容,所以可再添加『when 4』代表新的選項
然後再使用合成系統的畫面呼叫方法就大功告成了...,XP的如下:
      case @command_window.index
      when 0  # 物品
        # 演奏確定 SE
        $game_system.se_play($data_system.decision_se)
        # 切換到物品畫面
        $scene = Scene_Item.new
      when 1  # 技能
        # 演奏確定 SE
        $game_system.se_play($data_system.decision_se)
        # 活化狀態視窗
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 2  # 裝備
        # 演奏確定 SE
        $game_system.se_play($data_system.decision_se)
        # 活化狀態視窗
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 3  # 狀態
        # 演奏確定 SE
        $game_system.se_play($data_system.decision_se)
        # 活化狀態視窗
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 4 # 合成
        $game_system.se_play($data_system.decision_se) # 演奏選擇後的音效
        $scene = Sword_Synthesize.new # 開啟合成系統畫面(和事件指令 [腳本] 類似用法)

      when 5  # 存檔
        # 禁止存檔的情況下
        if $game_system.save_disabled
          # 演奏凍結 SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # 演奏確定 SE
        $game_system.se_play($data_system.decision_se)
        # 切換到存檔畫面
        $scene = Scene_Save.new
      when 6  # 遊戲結束
        # 演奏確定 SE
        $game_system.se_play($data_system.decision_se)
        # 切換到遊戲結束畫面
        $scene = Scene_End.new
      end
VX的如下:
      case @command_window.index
      when 0      # 物品
        $scene = Scene_Item.new
      when 1,2,3  # 技能、裝備、狀態
        start_actor_selection
      when 4 # 合成
        $scene = Sword_Synthesize.new # 開啟合成系統畫面(和事件指令 [腳本] 類似用法)
      when 5      # 存檔
        $scene = Scene_File.new(true, false, false)
      when 6      # 結束遊戲
        $scene = Scene_End.new
      end

在其他畫面中呼叫公共事件 NEW
是否想過想在在某個畫面中(包含自製的畫面)是否想執行公共事件...
但用『$game_temp.common_event_id = 公共事件編號』只有在地圖或戰鬥畫面才有用
選單畫面、物品畫面、裝備畫面...等等使用這個腳本卻一點效果都沒有
只有在回到地圖畫面之時,才有效果實在是相當的苦惱呢~~
其實只要在main函數(VX為start函數)開頭產生事件解釋器的類(同產生窗口的方式)
執行完記得在main函數(VX則是terminate函數)最後將解釋器釋放即可(同釋放窗口的方式)
然後再update類開頭放置專門負責更新事件解釋器的腳本就行了...(同更新窗口的方式)
例如選物品畫面好了,物品畫面的類為「Scene_Item」,先來產生事件解釋器吧
【XP】腳本「Scene_Item」第11行附近發現以下腳本: 
def main
★下方插入以下腳本☆
@interpreter = Interpreter.new
XP:其他畫面也是一樣,只要找到『def main』,在下面插入腳本即可
【VX】腳本「Scene_Item」第11行附近發現以下腳本: 
def start
★下方插入以下腳本☆
@interpreter = Game_Interpreter.new
VX:其他畫面也是一樣,只要找到『def start』,在下面插入腳本即可
 
然後就是更新事件解釋器的部份了...
【XP】腳本「Scene_Item」第47行附近發現以下腳本:
【VX】腳本「Scene_Item」第44行附近發現以下腳本:
  
def update
★下方插入以下腳本☆
@interpreter.update
注意:我這邊的插件腳本,就算該腳本是XP和VX共用貨VX專用,都一率用XP式的改法
這樣準備工作就完成了,要執行公共事件的時候,只需要執行這腳本即可
@interpreter.setup($data_common_events[公共事件編號].list, 0)
順便一題,並不是每個事件指令都可以使用喔...

用事件存檔與讀檔和刪檔 NEW
是否想製作出自動存檔的效果出來呢? 其實只要用簡短的腳本就可以辦到了
存檔的話,可以用事件指令 [腳本] 執行以下腳本即可:
RGSS
file = File.open('Save存檔編號.rxdata', 'wb')
Scene_Save.new.write_save_data(file)
file.close
RGSS2
file = File.open('Save存檔編號.rvdata', 'wb')
Scene_File.new(nil, nil, nil).write_save_data(file)
file.close
 
讀取檔案的話,在提供事件指令用的腳本前,先在「Main」上面添加空白腳本
在剛新增的空白腳本中添加貼上以下腳本:
class Swordrm_Load
  def main
    $scene = Scene_Map.new
  end
end
這腳本主要是能夠讓地圖畫面中斷重新產生新的地圖畫面,捨棄未讀檔前的地圖之用
接著就是重頭戲了,也就是執行某個事件,就讀檔的腳本如下:
RGSS
file = File.open('Save存檔編號.rxdata', 'rb')
$scene = Swordrm_Load.new
Scene_Load.new.read_save_data(file)
file.close
RGSS2
file = File.open('Save存檔編號.rvdata', 'rb')
$scene = Swordrm_Load.new
Scene_File.new(nil, nil, nil).read_save_data(file)
file.close
 
至於刪除存檔方面,可以執行以下腳本即可刪除指定的存檔:
File.delete('Save存檔編號.rvdata')
順便一提,存檔編號除了指定預設的1~4號存檔外,其實要指定更多存檔是沒問題的
也就是說要存到100個存檔也不是問題(不過資料夾的檔案量也會暴增就是了...)
不過就算存到了5個以上的存檔,預設的存檔畫面也只會顯示4個存檔而已
如果希望能顯示出更多的存檔,可以參考存檔欄位擴充這篇文章
 
 
相簿設定
標籤設定
相簿狀態