魔劍工舖

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

  • 296198

    累積人氣

  • 10

    今日人氣

    0

    訂閱人氣

【腳本】自動戰鬥行動


使用方法
打開腳本編輯器,對腳本「Main」按下右鍵,選擇插入,會出現1個空白腳本
在空白腳本內貼上以下腳本:
● 需要使用魔劍工舖的內部函數擴充,才能正常使用該腳本
RPG Maker XP 適用
module Sword
  ON = true ; OFF = false ; Sword37_Attack = [] ; Sword37_Icon = []
#=======================================
#★ 魔劍工舖 - 自動戰鬥行動 1.02
# 轉貼腳本請著名出處:http://blog.yam.com/a870053jjkj/
# 如果採用在遊戲中,看你高興是否顯示腳本出處,但嚴禁說是自己寫的腳本!!
#=======================================
#● 使用者自定設置
Sword37_NoItem = 0 # 當沒足夠的物品時執行的行動,0等待、1攻擊、2防禦
Sword37_NoSkill = 0 # 當沒足夠SP發動技能時執行的行動,0等待、1攻擊、2防禦
Sword37_NewClear = ON # 戰鬥結束時,是否清除前次行動的資料
Sword37_IconXYZ = [614, 66, 90] # 自動戰鬥行動圖標顯示的[X, Y, 優先度]
#--------------------------------------------------------------
#○ 按鍵啟動資料(Sword37_Attack[效果編號] = 鍵值)
# 鍵值:指定0的話表示不使用按鍵
Sword37_Attack[1] = 0 # 一次自動攻擊
Sword37_Attack[2] = 14 # 持續自動攻擊
Sword37_Attack[3] = 11 # 一次前次攻擊
Sword37_Attack[4] = 0 # 持續前次攻擊
#--------------------------------------------------------------
#○ 自動行動提示設置(Sword37_Icon[1] = ['圖標檔案名稱', '附加訊息', '解除訊息'])
Sword37_Icon[1] = ['004-Weapon04', '開始自動攻擊', '結束自動攻擊'] # 一次自動攻擊
Sword37_Icon[2] = ['004-Weapon04', '開始自動攻擊', '結束自動攻擊'] # 持續自動攻擊
Sword37_Icon[3] = ['048-Skill05', '開始前次行動', '結束前次行動'] # 一次前次攻擊
Sword37_Icon[4] = ['048-Skill05', '開始前次行動', '結束前次行動'] # 持續前次攻擊
=begin
========================================
● 所需腳本
內部函數擴充:http://blog.yam.com/a870053jjkj/article/25033724
========================================
● 設置方法(Scene_Battle戰鬥畫面類中使用)
自動行動:sword37_icon(數值)
(0關閉;1一次自動攻擊;2持續自動攻擊;3一次前次行動;4持續前次行動)
========================================
詳細設置說明請參考:http://blog.yam.com/a870053jjkj/article/26764376
=end
  $Sword ? $Sword[37] = true : $Sword = {37=>true} # 腳本使用標誌
  Sword37_NoItem = 3 if Sword37_NoItem == 2
  Sword37_NoSkill = 3 if Sword37_NoSkill == 2
end
#=======================================
#■ 處理戰鬥者的類別
class Game_Battler
  #-------------------------------------------------------------
  #● 可以輸入命令判定
  #  處於自動行動時,則所以角色一律不可輸入命令
  alias sword37_inputable? inputable?
  def inputable?
    return false if $scene.automatic > 0 if $scene.is_a?(Scene_Battle)
    sword37_inputable?
  end
  #-------------------------------------------------------------
  #● 狀態自然解除 (回合改變時呼叫)
  #  開始設置角色的自動行動
  alias sword37_remove_states_auto remove_states_auto
  def remove_states_auto
    if self.is_a?(Game_Actor) ; case $scene.automatic # 自動行動記錄分歧
    when 1, 2 ; @current_action.target_index = @record[2] # 自動攻擊
      @current_action.kind = 0 ; @current_action.basic = 0
    when 3, 4 ; @current_action.kind = @record[0] # 前次行動
      @current_action.target_index = @record[2]
      case @record[0] # 上次行動分歧
      when 0 ; @current_action.basic = @record[1] # 基本
      when 1 ; @current_action.skill_id = @record[1] # 技能
        @current_action.basic = Sword37_NoSkill unless skill_can_use?(@record[1])
      when 2 ; @current_action.item_id = @record[1] # 物品
        @current_action.basic = Sword37_NoSkill unless
        $game_party.item_can_use?(@record[1])
      end
    end ; end
    sword37_remove_states_auto
  end
end
#=======================================
#■ 處理角色的類別
class Game_Actor < Game_Battler
  include Sword # 連接自定設置
  attr_accessor :record # 行動記錄資料
end
#=======================================
#■ 處理戰鬥畫面的類別
class Scene_Battle
  include Sword # 連接自定設置
  attr_reader    :automatic # 自動行動記錄
  #-------------------------------------------------------------
  #● 主處理
  #  戰鬥開始時,將自動行動關閉並清除前次行動,以防上一場行動在執行
  alias sword37_main main
  def main
raise('尚未安裝魔劍工舖的 [內部函數擴充],請安裝該腳本') unless $Sword[5]
    @automatic, @automatic_icon = 0, nil # 自動行動編號 , 顯示圖標的位圖
    $game_party.actors.each{|actor| actor.record = [0, 0, 0]} if Sword37_NewClear
    sword37_main
    @automatic_icon = nil ; GC.start # 清除所有顯示的自動行動圖標
  end
  #-------------------------------------------------------------
  #● 更新畫面
  #  當持續自動戰鬥時,在按一次鍵就會取消持續自動行動的設定
  alias sword37_update update
  def update
    [2, 4].each{|i| sword37_icon(0) if Input.trigger?(Sword37_Attack[i]) if @automatic == i}
    sword37_update
  end
  #-------------------------------------------------------------
  #● 更新畫面 (同伴命令回合)
  #  處理按下按鍵,就會設置指定的自動行動(戰鬥逃跑選擇)
  alias sword37_update_phase2 update_phase2
  def update_phase2
    (1..4).each{|i| sword37_icon(i) if Input.trigger?(Sword37_Attack[i])}
    sword37_update_phase2
  end
  #-------------------------------------------------------------
  #● 開始選擇敵人
  #  如果處於自動行動,就直接跳過這個角色的指令選擇(以下3個方法相同)
  alias sword37_start_enemy_select start_enemy_select
  def start_enemy_select
    @automatic == 0 ? sword37_start_enemy_select : phase3_next_actor
  end
  #-------------------------------------------------------------
  #● 開始選擇角色
  alias sword37_start_actor_select start_actor_select
  def start_actor_select
    @automatic == 0 ? sword37_start_actor_select : phase3_next_actor
  end
  #-------------------------------------------------------------
  #● 開始選擇技能
  alias sword37_start_skill_select start_skill_select
  def start_skill_select
    @automatic == 0 ? sword37_start_skill_select : phase3_next_actor
  end
  #-------------------------------------------------------------
  #● 開始選擇物品
  alias sword37_start_item_select start_item_select
  def start_item_select
    @automatic == 0 ? sword37_start_item_select : phase3_next_actor
  end
  #-------------------------------------------------------------
  #● 更新畫面 (角色命令回合 : 基本命令)
  #  處理按下按鍵,就會設置指定的自動行動(角色行動選擇)
  alias sword37_update_phase3_basic_command update_phase3_basic_command
  def update_phase3_basic_command
    (1..4).each{|i| sword37_icon(i) if Input.trigger?(Sword37_Attack[i])}
    sword37_update_phase3_basic_command
  end
  #-------------------------------------------------------------
  #● 開始主回合
  #  一次性自動行動的自動解除處理
  alias sword37_start_phase4 start_phase4
  def start_phase4
    if @no_automatic ; @no_automatic = false
    elsif (not @action_battlers.is_a?(Array)) ; 0
    else ; sword37_icon(0) if @automatic == 1 or @automatic == 3 if @action_battlers.empty?
    end
    sword37_start_phase4
  end
  #-------------------------------------------------------------
  #● 更新畫面 (主回合步驟 6 : 更新)
  #  行動結束後開始記錄前次的行動
  alias sword37_update_phase4_step6 update_phase4_step6
  def update_phase4_step6
    if @active_battler.is_a?(Game_Actor) ; case @active_battler.current_action.kind
    when 0 ; @active_battler.record = [0, @active_battler.current_action.basic] # 基本
    when 1 ; @active_battler.record = [1, @active_battler.current_action.skill_id] # 技能
    when 2 ; @active_battler.record = [2, @active_battler.current_action.item_id] # 物品
    end ; @active_battler.record[2] = @active_battler.current_action.target_index ; end
    sword37_update_phase4_step6
  end
  #-------------------------------------------------------------
  #● 設置自動戰鬥行動
  #  切換指令的自動行動種類,並附加圖標、訊息等等的處理
  def sword37_icon(i) # 自動行動圖標編號
    @automatic_icon.dispose if @automatic_icon # 有圖標就釋放圖標
    $game_system.se_play($data_system.decision_se)
    (@automatic_icon = nil ; sword37_icon_end ; return) if i == 0 # 取消掉自動戰鬥行動時
    @automatic = (@automatic == i ? 0 : i) ; @no_automatic = true
    Input.simulate(13) rescue
raise('[內部函數擴充] 腳本並非支援此腳本的版本,請安裝最新版本的腳本')
    unless Sword37_Icon[i][0].empty? # 有設定圖標的場合
      @automatic_icon = Sprite.new # 產生顯示圖標用的精靈
      @automatic_icon.bitmap = RPG::Cache.icon(Sword37_Icon[i][0])
      @automatic_icon.x = Sword37_IconXYZ[0]
      @automatic_icon.y = Sword37_IconXYZ[1]
      @automatic_icon.z = Sword37_IconXYZ[2]
    end
    (@help_window.set_text(Sword37_Icon[i][1], 1) ; @wait_count = 40) unless
    Sword37_Icon[i][1].empty? # 顯示開啟自動戰鬥的訊息
  end
  #-------------------------------------------------------------
  #● 解除自動戰鬥行動
  #  [設置自動戰鬥行動]方法的延伸,主要處理解除時訊息之用
  def sword37_icon_end
    (@help_window.set_text(Sword37_Icon[@automatic][2], 1) ; @wait_count = 40) unless
    Sword37_Icon[@automatic][2].empty? # 顯示關閉自動戰鬥的訊息
    @automatic = 0 # 取消自動狀態
  end
end
 
 
設置方法
變更自動行動狀態 (Scene_Battle類中的實例方法中有效)
sword37_icon(數值)
sword37_icon(4) # 變更為全體角色持續上次行動
數值可設置以下:
0:關閉,也可以說是恢復一般沒有自動的狀態
1:一次自動攻擊,我方全體角色自動攻擊一次
2:持續自動攻擊,我方全體角色不斷自動攻擊,直到命令關閉為止
3:一次前次行動,我方全體角色重複上次的行動一次
4:持續前次行動,我方全體角色不斷重複上次的行動,直到命令關閉為止
 
 
使用者自定設置說明
Sword37_NoItem = 0
當重複上次的行動是物品時,但是身上卻沒有該物品時變更的行動設置
0:等待,也就是敵人所謂的什麼都不做的意思
1:攻擊,變更為發動普通攻擊
2:防禦,變更為發動防禦
 
Sword37_NoSkill = 0
當重複上次的行動是技能時,但是該角色的SP不夠發動該技能時變更的行動設置
設置方式和Sword37_NoItem設置相同
 
Sword37_NewClear = ON 
前次戰鬥行動是否延續到下一場來使用
ON表示要;OFF表示不要,也就是一律恢復成預設的基本攻擊指令
 
Sword37_IconXYZ = [X座標, Y座標, Z座標] 
設定自動戰鬥行動的圖標位置,顯示在哪裡或是是否被覆蓋在此設置
X座標:設定顯示圖標的左右位置,數值越大圖標越右邊
Y座標:設定顯示圖標的上下位置,數值越大圖標越下面
Z座標:設定圖標的顯示優先級,依照數值的多寡,可能圖標會蓋住戰鬥圖或是窗口之類的
 
Sword37_Attack[效果編號] = 鍵盤鍵值
設定啟動效果的按鍵,按下指定的按鍵後,會自動幫你在適合的位置執行設置方法的內容
效果編號:請參考設置方法變更行動狀態的數值部分進行設置,這部分不必做更改
鍵盤鍵值:以下是可用的按鍵:(以鍵盤為準)
     2:下    11:Shift、Z       15:S
     4:左    12:Esc、X      16:D
     6:右    13:Space、Enter、C 17:Q、Pageup
     8:上    14:A           18:W、Pagedown
 
Sword37_Icon[效果編號] = ['圖片檔案名稱', '啟動訊息', '關閉訊息'] UP!!
設定當執行自動戰鬥行動時,顯示的圖標圖片,圖片採用:Graphics/Icons中的圖片
效果編號:請參考設置方法變更行動狀態的數值部分進行設置,這部分不必做更改
圖片檔案名稱:請輸入圖片的檔案名稱,如果不輸入視同沒有任何的圖標顯示
啟動訊息:當啟動自動戰鬥時,說明窗口顯示的訊息,如果不輸入則表示不顯示提示訊息
關閉訊息:當關閉自動戰鬥時,說明窗口顯示的訊息,如果不輸入則表示不顯示提示訊息
相簿設定
標籤設定
相簿狀態