module Sword
#=======================================
#★ 魔劍工舖 - 裝備欄位擴充(1)[VX]
# [url]http://blog.yam.com/a870053jjkj/article/36333545[/url]
#=======================================
S3_Column = []
#=======================================
=begin
● 設置腳本
變更欄位裝備:【1】$game_actors[角色編號].equip(欄位 - 1, 裝備數據)
【2】$game_actors[角色編號].equip(欄位 - 1, 裝備數據, 只更換標誌)
獲取欄位裝備:$game_actors[角色編號].equip3[欄位 - 1]
========================================
● 所需腳本
魔劍工舖整合腳本(3):[url]http://blog.yam.com/a870053jjkj/article/25751998[/url]
=end
#=======================================
#● 功能設定
#--------------------------------------------------------------
#○ 裝備欄位資料表
#【1】S3_Column << [裝備用語編號, [武器編號*], [防具編號*]]
#【2】S3_Column << ['用語名稱', [武器編號*], [防具編號*]]
# 設定裝備欄位的名稱以及可以裝備的列表,編號可以用範圍值表示
S3_Column << [0, [1..30], [1..6]]
S3_Column << [1, [1..4], [1..4]]
S3_Column << [2, [], [5..12]]
S3_Column << [3, [], [13..22]]
S3_Column << [4, [], [23..29]]
S3_Column << ['背部', [], [30]]
#=======================================
raise(SwordError, '【腳本位置放置衝突】
「多功能裝備效果」只能放在「裝備欄位擴充」的下面') if $Sword[62] and ! $Sword[3]
$Sword ? $Sword[3] = ['裝備欄位擴充', 1] : $Sword = {3=>['裝備欄位擴充', 1]}
S3_Column.each_index{|i| S3_Column[i][1] = S3_Column[i][1].range ; S3_Column[i][2] = S3_Column[i][2].range}
end
#=======================================
#■ 角色的類
class Game_Actor < Game_Battler
attr_reader(:equip3) # 新裝備列表
#-------------------------------------------------------------
#● 設定資料(角色編號)
alias sword3_setup setup
def setup(actor_id)
sword3_setup(actor_id) ; actor = $data_actors[actor_id]
@equip3 = [$data_weapons[actor.weapon_id], $data_armors[actor.armor1_id],
$data_armors[actor.armor2_id], $data_armors[actor.armor3_id],
$data_armors[actor.armor4_id]]
@weapon_id, @armor1_id, @armor2_id, @armor3_id, @armor4_id = 0, 0, 0, 0, 0
end
#-------------------------------------------------------------
#● 獲取當前裝備
alias sword3_equips equips
def equips
$scene.is_a?(Scene_Status) ? sword3_equips : @equip3 # 更換獲取方式
end
#-------------------------------------------------------------
#● 變更裝備(索引, 裝備, 只更換標誌)
def equip(index, item, long_as = nil)
(item = item >= 0 ? $data_weapons[item] : $data_armors[item.abs]) if item.is_a?(Integer)
unless long_as # 如果非只更換的場合
item = $scene.item_window.item if $scene.is_a?(Scene_Equip)
RM.gain_item(@equip3[index], 1) if @equip3[index] # 獲得解除裝備
RM.gain_item(item, -1) if item # 將身上裝備減少(同丟棄)
end
@equip3[index] = item # 更換裝備
end
#-------------------------------------------------------------
#● 變更裝備(部位, 裝備, 測試標誌)
def change_equip(equip_type, item, test = false)
last_item = equips[equip_type]
unless test
return if $game_party.item_number(item) == 0 if item != nil
$game_party.gain_item(last_item, 1)
$game_party.lose_item(item, 1)
end
@equip3[equip_type] = item
end
#-------------------------------------------------------------
#● 獲取武器攻擊方動畫編號
def animation1_id
@equip3.each{|equip| return equip.animation1_id if equip.is_a?(RPG::Weapon)}
0 # 無動畫的返回值
end
#-------------------------------------------------------------
#● 獲取武器對像方動畫編號
def animation2_id
@equip3.each{|equip| return equip.animation2_id if equip.is_a?(RPG::Weapon)}
0 # 無動畫的返回值
end
#-------------------------------------------------------------
#● 獲取攻擊力
alias sword3_base_atk base_atk
def base_atk
n = 0
@equip3.each{|equip| n += equip.atk if equip.is_a?(RPG::Weapon)}
n + sword3_base_atk
end
#-------------------------------------------------------------
#● 獲取防禦力
alias sword3_base_def base_def
def base_def
n = 0
@equip3.each{|equip| n += equip.def if equip}
n + sword3_base_def
end
#-------------------------------------------------------------
#● 獲取精神力
alias sword3_base_spi base_spi
def base_spi
n = 0
@equip3.each{|equip| n += equip.spi if equip}
n + sword3_base_spi
end
#-------------------------------------------------------------
#● 獲取敏捷性
alias sword3_base_agi base_agi
def base_agi
n = 0
@equip3.each{|equip| n += equip.agi if equip}
n + sword3_base_agi
end
#-------------------------------------------------------------
#● 暫時臨時預設裝備資料(產生標置)
def sword3_provisiona(bring = false)
if bring
@weapon_id = @equip3[0] ? @equip3[0].id : 0
@armor1_id = @equip3[1] ? @equip3[1].id : 0
@armor2_id = @equip3[2] ? @equip3[2].id : 0
@armor3_id = @equip3[3] ? @equip3[3].id : 0
@armor4_id = @equip3[4] ? @equip3[4].id : 0
else
@weapon_id, @armor1_id, @armor2_id, @armor3_id, @armor4_id = 0, 0, 0, 0, 0
end
end
end
#=======================================
#■ 裝備後能力窗口(裝備畫面)
class Window_Equip
include Sword
#-------------------------------------------------------------
#● 更新內容
alias sword3_refresh refresh
def refresh
self.contents.clear
self.height = Sword::S3_Column.size * 32 + 32
self.contents = Bitmap.new(width - 32, height - 32)
sword3_refresh
end
end
#=======================================
#■ 整體狀態窗口
class Window_Status
#-------------------------------------------------------------
#● 更新內容
alias sword3_refresh refresh
def refresh
sword3_refresh
Sword::S3_Column.size.times{|i|
draw_item_name(@actor.equip3[i], 288 + 16, 160 + i * 24 + 24)}
end
end
#=======================================
#■ 目前裝備窗口
class Window_Equip
include Sword
#-------------------------------------------------------------
#● 更新內容
def refresh
self.contents.clear
self.height = Sword::S3_Column.size * 24 + 32
self.contents = Bitmap.new(width - 32, height - 32)
@item_max, @data = Sword::S3_Column.size, []
@actor.equip3.each_index{|i| @data[i] = @actor.equip3[i]}
Sword::S3_Column.each_index do |i|
text = Sword::S3_Column[i][0].is_a?(String) ? Sword::S3_Column[i][0] : nil
self.contents.font.color = system_color
case text ? nil : Sword::S3_Column[i][0] # 描繪用語
when 0 ; self.contents.draw_text(4, 24 * i, 92, 24, $data_system.terms.weapon)
when 1 ; self.contents.draw_text(4, 24 * i, 92, 24, $data_system.terms.armor1)
when 2 ; self.contents.draw_text(4, 24 * i, 92, 24, $data_system.terms.armor2)
when 3 ; self.contents.draw_text(4, 24 * i, 92, 24, $data_system.terms.armor3)
when 4 ; self.contents.draw_text(4, 24 * i, 92, 24, $data_system.terms.armor4)
else ; self.contents.draw_text(4, 24 * i, 92, 24, text)
end
draw_item_name(@data[i], 92, 24 * i) if @actor.equip3[i] # 描繪內容
end
end
end
#=======================================
#■ 可裝備列表窗口
class Window_EquipItem
#-------------------------------------------------------------
#● 更新內容(欄位)
def refresh(i = nil)
i = i ? @i = i : (@i ? @i : 0)
(self.contents.dispose ; self.contents = nil) if self.contents
@data = []
# 加入可以裝備的武器
weapon_set = $data_classes[@actor.class_id].weapon_set
(1...$data_weapons.size).each{|ii| next unless weapon = $data_weapons[ii]
sword73 = $Sword[73] ? weapon.original_id : nil
@data.push(weapon) if RM.item_number(weapon) > 0 and weapon_set.include?(ii) and
Sword::S3_Column[i][1].include?(sword73 ? weapon.original_id : ii)}
# 加入可以裝備的防具
armor_set = $data_classes[@actor.class_id].armor_set
(1...$data_armors.size).each{|ii| next unless armor = $data_armors[ii]
sword73 = $Sword[73] ? armor.original_id : nil
@data.push(armor) if RM.item_number(armor) > 0 and armor_set.include?(ii) and
Sword::S3_Column[i][2].include?(sword73 ? armor.original_id : ii)}
# 描繪
@data.push(nil) # 加入空白格
@item_max = @data.size # 設定選項數
self.contents = Bitmap.new(width - 32, row_max * 24) # 產生位圖
(0...@item_max - 1).each{|i| draw_item(i)} # 項目描繪
end
end
#=======================================
#■ 裝備前後能力比較的狀態窗口
class Window_EquipStatus
#-------------------------------------------------------------
#● 初始化(X座標, Y座標, 角色)
# 修改本窗口的高度,配合目前裝備窗口一樣的高度
alias sword3_initialize initialize
def initialize(x, y, actor)
sword3_initialize(x, y, actor)
self.height = Sword::S3_Column.size * 24 + 32
end
end
#=======================================
#■ 裝備畫面
class Scene_Equip
attr_reader :item_window # 裝備選擇窗口
EQUIP_TYPE_MAX = Sword::S3_Column.size # 欄位數量(預設腳本常數)
#-------------------------------------------------------------
#● 產生物品窗口
# 此函數在預設腳本中不明原因在重設定物品窗口高度爛Y座標,所以在此修正
alias sword3_create_item_windows create_item_windows
def create_item_windows
sword3_create_item_windows
(0...EQUIP_TYPE_MAX).each{|i|
@item_windows[i].y = Sword::S3_Column.size * 24 + 64 + RM.wlh
@item_windows[i].height = RM.height - @item_windows[i].y}
end
#-------------------------------------------------------------
#● 更新狀態窗口
alias sword3_update_status_window update_status_window
def update_status_window
if @equip_window.active ; @status_window.set_new_parameters(nil, nil, nil, nil) # 清除能力
elsif @item_window.active
item1, item2 = @equip_window.item, @item_window.item # 目前裝備, 選取裝備
last_hp = @actor.hp # 紀錄當前HP
last_mp = @actor.mp # 紀錄當前SP(MP)
@actor.equip(@equip_window.index, item2, true)
new_atk, new_def, new_spi, new_agi = @actor.atk, @actor.def, @actor.spi, @actor.agi
@actor.equip(@equip_window.index, item1, true)
@actor.hp = last_hp
@actor.mp = last_mp
@status_window.set_new_parameters(new_atk, new_def, new_spi, new_agi)
end
end
#-------------------------------------------------------------
#● 更新裝備欄位窗口
alias sword3_update_equip_selection update_equip_selection
def update_equip_selection
if Input.repeat?(Input::UP)
@item_window.refresh(@equip_window.index)
elsif Input.repeat?(Input::DOWN)
@item_window.refresh(@equip_window.index)
end
sword3_update_equip_selection
end
end