#============================================================================== # ■ Window_BlacksmithCmd #============================================================================== class Window_BlacksmithCmd < Window_Selectable #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, 64, 480, 64) self.contents = Bitmap.new(width - 32, height - 32) @commands = BlacksmithSetting.command @item_max = @column_max = @commands.size refresh self.index = 0 end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear for i in 0...@item_max draw_item(i) end end #-------------------------------------------------------------------------- # ● 項目の描画 # index : 項目番号 #-------------------------------------------------------------------------- def draw_item(index) x = 4 + index * 480 / @column_max self.contents.draw_text(x, 0, 300, 32, @commands[index]) end end #============================================================================== # ■ Window_BlacksmithActors #============================================================================== class Window_BlacksmithActors < Window_Selectable include BS_MODE attr_accessor :help_window2 #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, 128, 640-220, 480-128) self.contents = Bitmap.new(width - 32, height - 32) @actor_sprite = [] # スプライト張替え for i in 0...$game_party.actors.size actor = $game_party.actors[i] x = 56 y = i * 80 + 220 @actor_sprite[actor.id] = Sprite_MoveActor.new(nil, actor) @actor_sprite[actor.id].x = x @actor_sprite[actor.id].y = y @actor_sprite[actor.id].z = 160 @actor_sprite[actor.id].move_type = 0 @actor_sprite[actor.id].move_stop = true @actor_sprite[actor.id].setup end @item_max = $game_party.actors.size @column_max = 1 @mode = BS_M_WEAPON refresh(@mode) self.index = -1 self.active = false @next_item = nil end #-------------------------------------------------------------------------- # ● 消去 #-------------------------------------------------------------------------- def dispose super for actor in $game_party.actors @actor_sprite[actor.id].dispose end end #-------------------------------------------------------------------------- # ● 選択中アクター情報 #-------------------------------------------------------------------------- def actor return $game_party.actors[@index] end #-------------------------------------------------------------------------- # ● 選択中アクター武器・防具情報 #-------------------------------------------------------------------------- def item case @mode when BS_M_WEAPON; return actor.weapon_id == 0 ? nil : $data_weapons[actor.weapon_id] when BS_M_ARMOR1; return actor.armor1_id == 0 ? nil : $data_armors[actor.armor1_id] when BS_M_ARMOR2; return actor.armor2_id == 0 ? nil : $data_armors[actor.armor2_id] when BS_M_ARMOR3; return actor.armor3_id == 0 ? nil : $data_armors[actor.armor3_id] when BS_M_ARMOR4; return actor.armor4_id == 0 ? nil : $data_armors[actor.armor4_id] end return nil end #-------------------------------------------------------------------------- # ● フラッシュ #-------------------------------------------------------------------------- def flash(flag) if flag self.contents.clear for actor in $game_party.actors @actor_sprite[actor.id].visible = false end else refresh for actor in $game_party.actors @actor_sprite[actor.id].visible = true end end end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh(mode=nil) self.contents.clear @mode = mode unless mode.nil? for i in 0...$game_party.actors.size draw_item(4, i * 80, $game_party.actors[i]) end end def draw_item(x, y, actor) self.contents.font.size = 22 self.contents.font.color = normal_color self.contents.draw_text(x, y, 120, 28, actor.name) item = nil case @mode when BS_M_WEAPON txt1 = $data_system.words.weapon txt2 = $data_system.words.atk item = $data_weapons[actor.weapon_id] if actor.weapon_id > 0 prm1 = actor.atk when BS_M_ARMOR1 txt1 = $data_system.words.armor1 txt2 = "防御力" item = $data_armors[actor.armor1_id] if actor.armor1_id > 0 prm1 = actor.pdef prm2 = actor.mdef when BS_M_ARMOR2 txt1 = $data_system.words.armor2 txt2 = "防御力" item = $data_armors[actor.armor2_id] if actor.armor2_id > 0 prm1 = actor.pdef prm2 = actor.mdef when BS_M_ARMOR3 txt1 = $data_system.words.armor3 txt2 = "防御力" item = $data_armors[actor.armor3_id] if actor.armor3_id > 0 prm1 = actor.pdef prm2 = actor.mdef when BS_M_ARMOR4 txt1 = $data_system.words.armor4 txt2 = "防御力" item = $data_armors[actor.armor4_id] if actor.armor4_id > 0 prm1 = actor.pdef prm2 = actor.mdef end self.contents.font.color = system_color self.contents.draw_text(x+80, y+22, 120, 32, txt1) # 種類 self.contents.draw_text(x+80, y+48, 120, 32, txt2) # パラメータ self.contents.font.color = normal_color draw_item_name(item, x+176, y+22) unless item.nil? self.contents.draw_text(x+170, y+48, 60, 32, prm1.to_s, 2) if @mode != BS_M_WEAPON self.contents.draw_text(x+230, y+48, 60, 32, "/", 2) self.contents.draw_text(x+300, y+48, 60, 32, prm2.to_s, 2) end end #-------------------------------------------------------------------------- # ● カーソルの矩形更新 #-------------------------------------------------------------------------- def update_cursor_rect if @index < 0 or !self.active self.cursor_rect.empty else self.cursor_rect.set(0, @index * 80, self.width - 32, 80) end return if @actor_sprite.nil? for i in 0...$game_party.actors.size actor = $game_party.actors[i] next if @actor_sprite[actor.id].nil? or @actor_sprite[actor.id].disposed? if i == self.index @actor_sprite[actor.id].move_type = 0 @actor_sprite[actor.id].move_stop = false else @actor_sprite[actor.id].move_stop = true end end end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super if self.active act_update end def act_update for sprite in @actor_sprite sprite.update unless sprite.nil? or sprite.disposed? end end def act_stop for sprite in @actor_sprite unless sprite.nil? or sprite.disposed? sprite.move_stop = true sprite.update end end end #-------------------------------------------------------------------------- # ● ヘルプテキスト更新 #-------------------------------------------------------------------------- def update_help @help_window.set_text(item.nil? ? "" : item.description) @help_window2.refresh(self.actor) unless @help_window2.nil? end #-------------------------------------------------------------------------- # ● 変化アイテム表示 #-------------------------------------------------------------------------- def set_item(item) if @next_item != item @next_item = item refresh end end end #============================================================================== # ■ Window_BlacksmithList #============================================================================== class Window_BlacksmithList < Window_Selectable include BS_MODE attr_accessor :help_window2 attr_reader :mode #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(640-220, 128, 220, 480-128) self.contents = Bitmap.new(width - 32, height - 32) @mode = BS_M_WEAPON end def set_mode(actor, mode) @mode = mode refresh(actor) end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh(actor) self.contents.clear return if actor.nil? @index = 0 @item_max = 0 @actor = actor case @mode when BS_M_WEAPON; @list = BlacksmithList.new(@actor.weapon_id, @mode) when BS_M_ARMOR1; @list = BlacksmithList.new(@actor.armor1_id, @mode) when BS_M_ARMOR2; @list = BlacksmithList.new(@actor.armor2_id, @mode) when BS_M_ARMOR3; @list = BlacksmithList.new(@actor.armor3_id, @mode) when BS_M_ARMOR4; @list = BlacksmithList.new(@actor.armor4_id, @mode) else @list = nil end return if @list.nil? @item_max = @list.size return if @item_max == 0 self.contents = Bitmap.new(width - 32, row_max * 32) i = 0 for blacksmith in @list.list if blacksmith.judge_result self.contents.font.color = normal_color opacity = 255 else self.contents.font.color = disabled_color opacity = 127 end unless blacksmith.visible? self.contents.draw_text(4 + 28, i * 32, 212, 32, "????") else draw_item(4, i * 32, blacksmith.next_item, opacity) end i += 1 end end def draw_item(x, y, item, opacity) bitmap = RPG::Cache.icon(item.icon_name) self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity) self.contents.draw_text(x + 28, y, 212, 32, item.name) end def item return nil if @list.nil? or @list.size == 0 return @list[@index].next_item end def data return nil if @list.nil? or @list.size == 0 return @list[@index] end #-------------------------------------------------------------------------- # ● 鍛冶実行 #-------------------------------------------------------------------------- def execute case @mode when BS_M_WEAPON cur_w_id = @actor.weapon_id @actor.equip(0, 0) $game_party.lose_weapon(cur_w_id, 1) new_w_id = @list[@index].execute $game_party.gain_weapon(new_w_id, 1) @actor.equip(0, new_w_id) else case @mode when BS_M_ARMOR1; cur_a_id = @actor.armor1_id when BS_M_ARMOR2; cur_a_id = @actor.armor2_id when BS_M_ARMOR3; cur_a_id = @actor.armor3_id when BS_M_ARMOR4; cur_a_id = @actor.armor4_id end @actor.equip(@mode, 0) $game_party.lose_armor(cur_a_id, 1) new_a_id = @list[@index].execute $game_party.gain_armor(new_a_id, 1) @actor.equip(@mode, new_a_id) end end #-------------------------------------------------------------------------- # ● ヘルプテキスト更新 #-------------------------------------------------------------------------- def update_help return if @list.nil? if @item_max == 0 @help_window.set_text("") @help_window2.refresh(mode, nil) unless @help_window2.nil? return end text = @list[@index].visible? ? (item.nil? ? "" : item.description) : "????" @help_window.set_text(text) @help_window2.refresh(mode, @list[@index]) unless @help_window2.nil? end end #============================================================================== # ■ Window_BlacksmithBuy #============================================================================== class Window_BlacksmithBuy < Window_Base include BS_MODE #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(50, 50, 540, 380) self.contents = Bitmap.new(width - 32, height - 32) self.visible = false self.z = 300 end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh(mode, data=nil) self.contents.clear return if data.nil? or !data.visible? if mode == BS_M_WEAPON type = $data_system.words.weapon cur_item = $data_weapons[data.cur_w_id] next_item = $data_weapons[data.next_w_id] else type = "防具" cur_item = $data_armors[data.cur_w_id] next_item = $data_armors[data.next_w_id] end self.contents.font.color = normal_color text = data.judge_result ? "この#{type}を錬成しますか?" : "この#{type}の錬成に必要な条件を満たしていません" self.contents.draw_text(0, 0, 480, 32, text) draw_item_name(cur_item, 30, 50) self.contents.draw_text(100, 82, 200, 32, "→") draw_item_name(next_item, 140, 82) self.contents.font.color = system_color self.contents.draw_text(30, 114, 200, 32, "錬成料金:") self.contents.draw_text(240, 114, 32, 32, $data_system.words.gold) self.contents.font.color = $game_party.gold < data.price ? disabled_color : normal_color self.contents.draw_text(180, 114, 200, 32, data.price.to_s) i = 0 for state in data.prm case state.type when BlacksmithSetting::C_ITEM_G, BlacksmithSetting::C_ITEM_H self.contents.font.color = system_color self.contents.draw_text(30, 146+i*32, 200, 32, "錬成材料:") if $game_party.item_number(state.id) < state.num self.contents.font.color = disabled_color opacity = 127 else self.contents.font.color = normal_color opacity = 255 end draw_item(160, 146+i*32, $data_items[state.id], opacity) self.contents.draw_text(360, 146+i*32, 32, 32, "×") self.contents.draw_text(370, 146+i*32, 64, 32, state.num.to_s, 2) i += 1 end end end def draw_item(x, y, item, opacity) bitmap = RPG::Cache.icon(item.icon_name) self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity) self.contents.draw_text(x + 28, y, 212, 32, item.name) end end class Window_BlacksmithBuyCmd < Window_Command #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(140, ["はい", "いいえ"]) self.visible = false self.active = false self.x = 430 self.y = 70 self.z = 300 self.back_opacity = 0 end end #============================================================================== # ■ Window_BlacksmithStatus #============================================================================== class Window_BlacksmithStatus < Window_Base include BS_MODE #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, 128, 640-220, 480-128) self.contents = Bitmap.new(width - 32, height - 32) self.visible = false self.z = 200 @move_actor = nil end #-------------------------------------------------------------------------- # ● アクター設定 #-------------------------------------------------------------------------- def set_act(actor) @actor = actor @move_actor = Sprite_MoveActor.new(self.viewport, actor) @move_actor.x = 56 @move_actor.y = 220 @move_actor.z = 250 @move_actor.move_type = 0 @move_actor.setup end #-------------------------------------------------------------------------- # ● 削除 #-------------------------------------------------------------------------- def delete self.contents.clear @move_actor.dispose self.visible = false end #-------------------------------------------------------------------------- # ● アクター動作 フレーム更新 #-------------------------------------------------------------------------- def act_update @move_actor.update end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh(mode, data=nil) self.visible = true self.contents.clear self.contents.draw_text(4, 0, 120, 28, @actor.name) item = nil data = nil if !data.nil? and !data.visible? case mode when BS_M_WEAPON txt1 = $data_system.words.weapon item = $data_weapons[@actor.weapon_id] if @actor.weapon_id > 0 equip = data.nil? ? item : $data_weapons[data.next_w_id] when BS_M_ARMOR1 txt1 = $data_system.words.armor1 item = $data_armors[@actor.armor1_id] if @actor.armor1_id > 0 equip = data.nil? ? item : $data_armors[data.next_w_id] when BS_M_ARMOR2 txt1 = $data_system.words.armor2 item = $data_armors[@actor.armor2_id] if @actor.armor2_id > 0 equip = data.nil? ? item : $data_armors[data.next_w_id] when BS_M_ARMOR3 txt1 = $data_system.words.armor3 item = $data_armors[@actor.armor3_id] if @actor.armor3_id > 0 equip = data.nil? ? item : $data_armors[data.next_w_id] when BS_M_ARMOR4 txt1 = $data_system.words.armor4 item = $data_armors[@actor.armor4_id] if @actor.armor4_id > 0 equip = data.nil? ? item : $data_armors[data.next_w_id] end v_actor = VirtualEquip.new(@actor, mode, equip) self.contents.font.color = system_color self.contents.draw_text(84, 40, 120, 32, txt1) # 種類 self.contents.font.color = normal_color draw_item_name(item, 180, 40) unless item.nil? draw_param(@actor, v_actor, 40, 84, 0) draw_param(@actor, v_actor, 40, 112, 1) draw_param(@actor, v_actor, 40, 140, 2) draw_param(@actor, v_actor, 40, 178, 3) draw_param(@actor, v_actor, 40, 206, 4) draw_param(@actor, v_actor, 40, 234, 5) draw_param(@actor, v_actor, 40, 262, 6) draw_param(@actor, v_actor, 40, 290, 7) end #-------------------------------------------------------------------------- # ● パラメータ変化表示 #-------------------------------------------------------------------------- def draw_param(actor, v_actor, x, y, type) case type when 0 parameter_name = $data_system.words.atk cur_value = actor.atk next_value = v_actor.atk when 1 parameter_name = $data_system.words.pdef cur_value = actor.pdef next_value = v_actor.pdef when 2 parameter_name = $data_system.words.mdef cur_value = actor.mdef next_value = v_actor.mdef when 3 parameter_name = $data_system.words.str cur_value = actor.str next_value = v_actor.str when 4 parameter_name = $data_system.words.dex cur_value = actor.dex next_value = v_actor.dex when 5 parameter_name = $data_system.words.agi cur_value = actor.agi next_value = v_actor.agi when 6 parameter_name = $data_system.words.int cur_value = actor.int next_value = v_actor.int when 7 parameter_name = "回避修正" cur_value = actor.eva next_value = v_actor.eva end self.contents.font.color = system_color self.contents.draw_text(x, y, 120, 32, parameter_name) self.contents.font.color = normal_color self.contents.draw_text(x + 150, y, 36, 32, cur_value.to_s, 2) if cur_value != next_value self.contents.font.color = next_value < cur_value ? disabled_color : crisis_color self.contents.draw_text(x + 210, y, 30, 32, "→", 1) self.contents.draw_text(x + 236, y, 60, 32, next_value.to_s, 2) end end end #============================================================================== # ■ Window_BlacksmithArmSelect #============================================================================== class Window_BlacksmithArmSelect < Window_Selectable #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(160, 64, 160, 160) self.contents = Bitmap.new(width - 32, height - 32) @column_max = 1 @commands = ["#{$data_system.words.armor1}", "#{$data_system.words.armor2}", "#{$data_system.words.armor3}", "#{$data_system.words.armor4}"] @item_max = @commands.size self.z = 200 self.visible = false self.active = false refresh self.index = -1 end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear for i in 0...@item_max draw_item(i) end end #-------------------------------------------------------------------------- # ● 項目の描画 # index : 項目番号 #-------------------------------------------------------------------------- def draw_item(index) self.contents.draw_text(4, index * 32, 300, 32, @commands[index]) end end