class Window_Item < Window_Selectable
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize
super(30, 64, 640, 416)
@column_max = 6
refresh
self.index = 0
# 战斗中的情况下将窗口移至中央并将其半透明化
if $game_temp.in_battle
self.y = 48
self.height = 256
self.back_opacity = 120
end
end
#--------------------------------------------------------------------------
# ● 获取物品
#--------------------------------------------------------------------------
def item
return @data[self.index]
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
# 添加报务
for i in 1...$data_items.size
if $game_party.item_number(i) > 0
@data.push($data_items)
end
end
# 在战斗中以外添加武器、防具
unless $game_temp.in_battle
for i in 1...$data_weapons.size
if $game_party.weapon_number(i) > 0
@data.push($data_weapons)
end
end
for i in 1...$data_armors.size
if $game_party.armor_number(i) > 0
@data.push($data_armors)
end
end
end
# 如果项目数不是 0 就生成位图、重新描绘全部项目
@item_max = @data.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32)
for i in 0...@item_max
draw_item(i)
end
end
end
#--------------------------------------------------------------------------
# ● 描绘项目
# index : 项目编号
#--------------------------------------------------------------------------
def draw_item(index)
item = @data[index]
case item
when RPG::Item
number = $game_party.item_number(item.id)
when RPG::Weapon
number = $game_party.weapon_number(item.id)
when RPG::Armor
number = $game_party.armor_number(item.id)
end
if item.is_a?(RPG::Item) and
$game_party.item_can_use?(item.id)
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
# 设置物品栏目的坐标
x = index % 6 * 48
y = (index / 6) * 48
rect = Rect.new(x, y, self.width / @column_max - 48, 48)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(item.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y, bitmap, Rect.new(0,0, 48, 48), opacity)
self.contents.draw_text(x +500,y, 212, 48, item.name, 0)
self.contents.draw_text(x +500,y, 16, 48, ":", 1)
self.contents.draw_text(x +37, y-15, 12, 48, number.to_s, 2)
end
#--------------------------------------------------------------------------
# ● 刷新帮助文本
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(self.item == nil ? "" : self.item.description)
end
end
#==============================================================================
# 禾西製作 / Created by Quarcy
#==============================================================================
class Window_Help < Window_Base
attr_reader :materia
#--------------------------------------------------------------------------
# ● 定義不顯示的屬性與狀態
#--------------------------------------------------------------------------
def unshown
@unshow_elements = [17, 18]
@unshow_states = []
end
#--------------------------------------------------------------------------
# ● 初始化對象
#--------------------------------------------------------------------------
def initialize
super(0, 0, 640, 64)
self.opacity = 200
self.z=150
self.visible = false
end
#--------------------------------------------------------------------------
# ● 設置文本
# data : 窗口顯示的字符串/物品資料
# align : 對齊方式 (0..左對齊、1..中間對齊、2..右對齊)
#--------------------------------------------------------------------------
def set_text(data, align=0)
#------------------------------------------------------------------------
# ● 當資料爲文字時候
#------------------------------------------------------------------------
# 如果文本或對齊方式至少一方与上次的不同
if data != @text or align != @align
if data.is_a?(String)
# 再描繪文本
self.width = 640
self.height = 64
self.x=0
self.y=0
self.contents = Bitmap.new(width - 32, height - 32) if self.contents.nil?
self.contents.clear
self.contents.font.color = normal_color
self.contents.font.size = 20
self.contents.draw_text(4, 0, self.width - 40, 32, data, align)
@text = data
@align = align
@actor = nil
self.visible = true
end
end
return if data.is_a?(String)
#------------------------------------------------------------------------
# ● 當沒有資料時候
#------------------------------------------------------------------------
if data.nil?
self.visible=false
else
self.visible=true
end
#------------------------------------------------------------------------
# ● 當資料爲物品/技能時候
#------------------------------------------------------------------------
if data != nil && @data != data
self.width = 210
self.height = 430
self.x=0
self.y=200
unshown
non_auto_update(data)
else
return
end
end
#--------------------------------------------------------------------------
# ● 更新帮助窗口
#--------------------------------------------------------------------------
def non_auto_update(data=@data)
@data = data
case @data
when RPG::Item
set_item_text(@data)
when RPG::Weapon
set_equipment_text(@data)
when RPG::Armor
set_equipment_text(@data)
when RPG::Skill
set_skill_text(@data)
end
end
#--------------------------------------------------------------------------
# ● 裝備帮助窗口
#--------------------------------------------------------------------------
def set_equipment_text(equipment)
#------------------------------------------------------------------------
# ● 取得基本質料
#------------------------------------------------------------------------
# 取得屬性、附加狀態、解除狀態之副本
case equipment
when RPG::Weapon
element_set = equipment.element_set.clone
plus_state_set = equipment.plus_state_set.clone
minus_state_set = equipment.minus_state_set.clone
#----------------------#
# 過濾不顯示的狀態描述 #
#----------------------#
plus_state_set -= @unshow_states
minus_state_set -= @unshow_states
when RPG::Armor
element_set = equipment.guard_element_set.clone
guard_state_set = equipment.guard_state_set.clone
#----------------------#
# 過濾不顯示的狀態描述 #
#----------------------#
auto_state_id = equipment.auto_state_id
guard_state_set -= @unshow_states
end
#----------------------#
# 過濾不顯示的屬性描述 #
#----------------------#
element_set -= @unshow_elements
#--------------#
# 取得說明文字 #
#--------------#
description = equipment.description.clone
# 初始化數據設定
x = 0
y = 0
h = 0
phrase = {}
#------------------------------------------------------------------------
# ● 說明描述
#------------------------------------------------------------------------
x = 0
y += 1
text = description
while ((text = description.slice!(/./m)) != nil)
self.contents.font.color = normal_color
self.contents.font.size = size
self.contents.draw_text(x*size, y*size+5, size, size, text, 0)
x+=1
if x==word#每行10个字
x = 0
y += 1
end
end
#------------------------------------------------------------------------
# ● 攻擊範圍
#------------------------------------------------------------------------
text = phrase["scope"] + scope[skill.scope]
x = 0
y += 1
self.contents.font.color = normal_color
self.contents.font.size = size
self.contents.draw_text(x, y*size+5, text.size*6, size, text, 0)
#------------------------------------------------------------------------
# ● 空一行
#------------------------------------------------------------------------
y += 1
#------------------------------------------------------------------------
# ● 威力描述
#------------------------------------------------------------------------
unless skill.power.zero?
power = skill.power > 0 ? skill.power : -1 * skill.power
text = phrase["power"] + power.to_s
x = 0
y += 1
self.contents.font.color = normal_color
self.contents.font.size = size
self.contents.draw_text(x, y*size+5, text.size*6, size, text, 0)
end
#------------------------------------------------------------------------
# ● 消費SP描述
#------------------------------------------------------------------------
text = phrase["cost_sp"] + skill.sp_cost.to_s
x = 0
y += 1
self.contents.font.color = normal_color
self.contents.font.size = size
self.contents.draw_text(x, y*size+5, text.size*6, size, text, 0)
#------------------------------------------------------------------------
# ● 命中率描述
#------------------------------------------------------------------------
text = phrase["hit_rate"] + skill.hit.to_s + "%"
x = 0
y += 1
self.contents.font.color = normal_color
self.contents.font.size = size
self.contents.draw_text(x, y*size+5, text.size*6, size, text, 0)
#------------------------------------------------------------------------
# ● 攻擊屬性
#------------------------------------------------------------------------
if element_set.size > 0
text=phrase["elements"]
for i in 0...element_set.size
if i < 4
text+=$data_system.elements[element_set]
else
break
end
end
x = 0
y += 1
self.contents.font.color = normal_color
self.contents.font.size = size
self.contents.draw_text(x, y*size+5, text.size*6, size, text, 0)
end
if element_set.size >= 5
text=""
for i in 4...element_set.size
text+=$data_system.elements[element_set]
end
x= (phrase["elements"].size)*3
y += 1
self.contents.font.color = normal_color
self.contents.font.size = size
self.contents.draw_text(x, y*size+5, text.size*6, size, text, 0)
end
#------------------------------------------------------------------------
# ● 狀態附加
#------------------------------------------------------------------------
unless plus_state_set.empty?
text= phrase["plus"]
x = 0
y += 1
self.contents.font.color = normal_color
self.contents.font.size = size
self.contents.draw_text(x, y*size+5, text.size*6, size, text, 0)
plus_state_set.each do |plus_state|
y += 1
text=$data_states[plus_state].name
self.contents.font.color = normal_color
self.contents.font.size = size
self.contents.draw_text(x, y*size+5, text.size*6, size, text, 0)
end
end
#------------------------------------------------------------------------
# ●狀態解除
#------------------------------------------------------------------------
unless minus_state_set.empty?
text = phrase["minus"]
x = 0
y += 1
self.contents.font.color = normal_color
self.contents.font.size=size
self.contents.draw_text(x, y*size+5, text.size*6, size, text, 0)
minus_state_set.each do |minus_state|
y += 1
text=$data_states[minus_state].name
self.contents.font.color = normal_color
self.contents.font.size=size
self.contents.draw_text(x, y*size+5, text.size*6, size, text, 0)
end
end
end
#--------------------------------------------------------------------------
# ● 设置角色
# actor : 要显示状态的角色
#--------------------------------------------------------------------------
def set_actor(actor)
if actor != @actor
self.contents.clear
draw_actor_name(actor, 4, 0)
draw_actor_state(actor, 140, 0)
draw_actor_hp(actor, 284, 0)
draw_actor_sp(actor, 460, 0)
@actor = actor
@text = nil
self.visible = true
end
end
#--------------------------------------------------------------------------
# ● 設置角色
# actor : 要顯示狀態之角色
#--------------------------------------------------------------------------
def set_actor(actor)
self.contents = Bitmap.new(width - 32, height - 32) if self.contents.nil?
if actor != @actor
self.contents.clear
draw_actor_name(actor, 4, 0)
draw_actor_state(actor, 140, 0)
draw_actor_hp(actor, 284, 0)
draw_actor_sp(actor, 460, 0)
@actor = actor
@text = nil
self.visible = true
end
end
#--------------------------------------------------------------------------
# ● 設置敵人
# enemy : 要顯示名字與狀態之敵人
#--------------------------------------------------------------------------
def set_enemy(enemy)
self.contents = Bitmap.new(width - 32, height - 32) if self.contents.nil?
text = enemy.name.sub(/\\[Ff]\[([0-9]+)\]/) {""}
state_text = make_battler_state_text(enemy, 112, false)
if state_text != ""
text += " " + state_text
end
set_text(text, 1)
self.visible = true
end
#--------------------------------------------------------------------------
# ● 校正帮助窗口位置
#--------------------------------------------------------------------------
def set_pos(x,y,width,oy,index,column_max)
#光标坐标
cursor_width = width / column_max - 32
xx = index % column_max * (cursor_width + 32)
yy = index / column_max * 32 - oy
self.x=xx+x+30
self.y=yy+y+30
if self.x+self.width>640
self.x=640-self.width
end
if self.y+self.height>480
self.y=480-self.height
end
end
#------------------------------------------------------------------------
# ● 裝備名字顔色變化 接口
#------------------------------------------------------------------------
def draw_name_color(equipment)
return normal_color
end
#------------------------------------------------------------------------
# ● 自身身份確認
#------------------------------------------------------------------------
def original_help?
return false
end
end
class Window_Skill < Window_Selectable
#--------------------------------------------------------------------------
# ● 初始化对像
# actor : 角色
#--------------------------------------------------------------------------
def initialize(actor)
super(0, 128, 640, 352)
@actor = actor
@column_max = 2
refresh
self.index = 0
# 战斗中的情况下将窗口移至中央并将其半透明化
if $game_temp.in_battle
self.y = 64
self.height = 256
self.back_opacity = 160
end
end
#--------------------------------------------------------------------------
# ● 刷新帮助文本
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(skill)
#校正帮助窗口位置
@help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
end
end
#------------------------------------------------------------------------------
def update_help
@help_window.set_text(item)
#校正帮助窗口位置
@help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
end
end
#------------------------------------------------------------------------------
refresh
self.index = 0
end
#--------------------------------------------------------------------------
# ● 刷新帮助文本
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(item)
#校正帮助窗口位置
@help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
end
end
#------------------------------------------------------------------------------
refresh
self.index = 0
end
#--------------------------------------------------------------------------
# ● 刷新帮助文本
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(item)
#校正帮助窗口位置
@help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
end
end
#------------------------------------------------------------------------------