#============================================================================== # ** Custom Shop Window By Black Mage #============================================================================== #============================================================================== # ** Window_ShopBuy #------------------------------------------------------------------------------ # This window displays buyable goods on the shop screen. #============================================================================== class Window_ShopBuy < Window_Selectable #-------------------------------------------------------------------------- # * Object Initialization # shop_goods : goods #-------------------------------------------------------------------------- def initialize(shop_goods) super(0, 128, 640, 132) @shop_goods = shop_goods refresh self.index = 0 end #-------------------------------------------------------------------------- # * Item Acquisition #-------------------------------------------------------------------------- def item return @data[self.index] end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh if self.contents != nil self.contents.dispose self.contents = nil end @data = [] for goods_item in @shop_goods case goods_item[0] when 0 item = $data_items[goods_item[1]] number = $game_party.item_number(@item.id) when 1 item = $data_weapons[goods_item[1]] number = $game_party.weapon_number(@item.id) when 2 item = $data_armors[goods_item[1]] number = $game_party.armor_number(@item.id) end if item != nil @data.push(item) end end # If item count is not 0, make a bit map and draw all items @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 #-------------------------------------------------------------------------- # * Draw Item # index : item number #-------------------------------------------------------------------------- def draw_item(index) item = @data[index] # Get items in possession 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 price is less than money in possession, and amount in possession is # not 99, then set to normal text color. Otherwise set to disabled color if item.price <= $game_party.gold and number < 99 self.contents.font.color = normal_color else self.contents.font.color = disabled_color end x = 4 y = index * 32 rect = Rect.new(x, y, self.width - 32, 32) 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 + 4, bitmap, Rect.new(0, 0, 24, 24), opacity) self.contents.draw_text(x + 28, y, 212, 32, item.name, 0) self.contents.draw_text(x + 260, y, 88, 32, "Price :") self.contents.draw_text(x + 300, y, 88, 32, item.price.to_s, 2) self.contents.draw_text(x + 470, y, 88, 32, "Owned :") self.contents.draw_text(x + 550, y, 32, 32, number.to_s, 2) end #-------------------------------------------------------------------------- # * Help Text Update #-------------------------------------------------------------------------- def update_help @help_window.set_text(self.item == nil ? "" : self.item.description) end end #============================================================================== # ** Window_ShopStatus #------------------------------------------------------------------------------ # This window displays number of items in possession and the actor's equipment # on the shop screen. #============================================================================== class Window_ShopStatus < Window_Base #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize super(0, 260, 640, 220) self.contents = Bitmap.new(width - 32, height - 32) @item = nil refresh end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear if @item == nil return end 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) return end # Equipment adding information for i in 0...$game_party.actors.size # Get actor actor = $game_party.actors[i] # If equippable, then set to normal text color. If not, set to # invalid text color. if actor.equippable?(@item) self.contents.font.color = normal_color disabler = false else self.contents.font.color = Color.new(255, 255, 255, 128) disabler = true end # Get current equipment if @item.is_a?(RPG::Weapon) check = $data_weapons[actor.weapon_id] if check ==nil oldwpnstr = 0 oldwpndex = 0 oldwpnint = 0 oldwpnagi = 0 oldwpnpdf = 0 oldwpnmdf = 0 atkwpn = 0 else oldwpnstr = $data_weapons[actor.weapon_id].str_plus oldwpndex = $data_weapons[actor.weapon_id].dex_plus oldwpnint = $data_weapons[actor.weapon_id].int_plus oldwpnagi = $data_weapons[actor.weapon_id].agi_plus oldwpnpdf = $data_weapons[actor.weapon_id].pdef oldwpnmdf = $data_weapons[actor.weapon_id].mdef atkwpn = @item.atk end elsif @item.kind == 0 check = $data_armors[actor.armor1_id] if check ==nil oldwpnstr = 0 oldwpndex = 0 oldwpnint = 0 oldwpnagi = 0 oldwpnpdf = 0 oldwpnmdf = 0 atkwpn = 0 else oldwpnstr = $data_armors[actor.armor1_id].str_plus oldwpndex = $data_armors[actor.armor1_id].dex_plus oldwpnint = $data_armors[actor.armor1_id].int_plus oldwpnagi = $data_armors[actor.armor1_id].agi_plus oldwpnpdf = $data_armors[actor.armor1_id].pdef oldwpnmdf = $data_armors[actor.armor1_id].mdef atkwpn = 0 end elsif @item.kind == 1 check = $data_armors[actor.armor2_id] if check ==nil oldwpnstr = 0 oldwpndex = 0 oldwpnint = 0 oldwpnagi = 0 oldwpnpdf = 0 oldwpnmdf = 0 atkwpn = 0 else oldwpnstr = $data_armors[actor.armor2_id].str_plus oldwpndex = $data_armors[actor.armor2_id].dex_plus oldwpnint = $data_armors[actor.armor2_id].int_plus oldwpnagi = $data_armors[actor.armor2_id].agi_plus oldwpnpdf = $data_armors[actor.armor2_id].pdef oldwpnmdf = $data_armors[actor.armor2_id].mdef atkwpn = 0 end elsif @item.kind == 2 check = $data_armors[actor.armor3_id] if check ==nil oldwpnstr = 0 oldwpndex = 0 oldwpnint = 0 oldwpnagi = 0 oldwpnpdf = 0 oldwpnmdf = 0 atkwpn = 0 else oldwpnstr = $data_armors[actor.armor3_id].str_plus oldwpndex = $data_armors[actor.armor3_id].dex_plus oldwpnint = $data_armors[actor.armor3_id].int_plus oldwpnagi = $data_armors[actor.armor3_id].agi_plus oldwpnpdf = $data_armors[actor.armor3_id].pdef oldwpnmdf = $data_armors[actor.armor3_id].mdef atkwpn = 0 end else check = $data_armors[actor.armor4_id] if check ==nil oldwpnstr = 0 oldwpndex = 0 oldwpnint = 0 oldwpnagi = 0 oldwpnpdf = 0 oldwpnmdf = 0 atkwpn = 0 else oldwpnstr = $data_armors[actor.armor4_id].str_plus oldwpndex = $data_armors[actor.armor4_id].dex_plus oldwpnint = $data_armors[actor.armor4_id].int_plus oldwpnagi = $data_armors[actor.armor4_id].agi_plus oldwpnpdf = $data_armors[actor.armor4_id].pdef oldwpnmdf = $data_armors[actor.armor4_id].mdef atkwpn = 0 end end # Draw item x = 4 + 152*i y = 24 # Draw actor's name self.contents.draw_text(4 + 152*i, -8, 120, 32, actor.name) opacity = self.contents.font.color == normal_color ? 255 : 128 if disabler == false self.contents.font.color = system_color end self.contents.draw_text(x, y-2, 212, 32, "STR") self.contents.draw_text(x, y+19, 212, 32, "DEX") self.contents.draw_text(x, y+40, 212, 32, "INT") self.contents.draw_text(x, y+61, 212, 32, "AGI") self.contents.draw_text(x, y+82, 212, 32, "ATK") self.contents.draw_text(x, y+103, 212, 32, "PDEF") self.contents.draw_text(x, y+124, 212, 32, "MDEF") if disabler == false self.contents.font.color = normal_color end # Draw STR act = actor.str wpn = @item.str_plus - oldwpnstr self.contents.draw_text(64 + 152*i, y-2, 112, 32, act.to_s(10)) if disabler == false if wpn > 0 self.contents.font.color = Color.new(0, 100, 255, 255) elsif wpn < 0 self.contents.font.color = Color.new(100, 0, 0, 255) else self.contents.font.color = normal_color end self.contents.draw_text(32 + 152*i, y-2, 112, 32, sprintf("%+d", wpn), 2) end # Draw DEX act = actor.dex wpn = @item.dex_plus - oldwpndex if disabler == false self.contents.font.color = normal_color end self.contents.draw_text(64 + 152*i, y+19, 112, 32, act.to_s(10)) if disabler == false if wpn > 0 self.contents.font.color = Color.new(0, 100, 255, 255) elsif wpn < 0 self.contents.font.color = Color.new(100, 0, 0, 255) else self.contents.font.color = normal_color end self.contents.draw_text(32 + 152*i, y+19, 112, 32, sprintf("%+d", wpn), 2) end # Draw INT act = actor.int wpn = @item.int_plus - oldwpnint if disabler == false self.contents.font.color = normal_color end self.contents.draw_text(64 + 152*i, y+40, 112, 32, act.to_s(10)) if disabler == false if wpn > 0 self.contents.font.color = Color.new(0, 100, 255, 255) elsif wpn < 0 self.contents.font.color = Color.new(100, 0, 0, 255) else self.contents.font.color = normal_color end self.contents.draw_text(32 + 152*i, y+40, 112, 32, sprintf("%+d", wpn), 2) end # Draw AGI act = actor.agi wpn = @item.agi_plus - oldwpnagi if disabler == false self.contents.font.color = normal_color end self.contents.draw_text(64 + 152*i, y+61, 112, 32, act.to_s(10)) if disabler == false if wpn > 0 self.contents.font.color = Color.new(0, 100, 255, 255) elsif wpn < 0 self.contents.font.color = Color.new(100, 0, 0, 255) else self.contents.font.color = normal_color end self.contents.draw_text(32 + 152*i, y+61, 112, 32, sprintf("%+d", wpn), 2) end # Draw ATK act = actor.atk if disabler == false self.contents.font.color = normal_color end self.contents.draw_text(64 + 152*i, y+82, 112, 32, act.to_s(10)) if disabler == false if atkwpn > 0 self.contents.font.color = Color.new(0, 100, 255, 255) elsif atkwpn < 0 self.contents.font.color = Color.new(100, 0, 0, 255) else self.contents.font.color = normal_color end self.contents.draw_text(32 + 152*i, y+82, 112, 32, sprintf("%+d", atkwpn), 2) end # Draw PDEF act = actor.pdef wpn = @item.pdef - oldwpnpdf if disabler == false self.contents.font.color = normal_color end self.contents.draw_text(64 + 152*i, y+103, 112, 32, act.to_s(10)) if disabler == false if wpn > 0 self.contents.font.color = Color.new(0, 100, 255, 255) elsif wpn < 0 self.contents.font.color = Color.new(100, 0, 0, 255) else self.contents.font.color = normal_color end self.contents.draw_text(32 + 152*i, y+103, 112, 32, sprintf("%+d", wpn), 2) end # Draw MDEF act = actor.mdef wpn = @item.mdef - oldwpnmdf if disabler == false self.contents.font.color = normal_color end self.contents.draw_text(64 + 152*i, y+124, 112, 32, act.to_s(10)) if disabler == false if wpn > 0 self.contents.font.color = Color.new(0, 100, 255, 255) elsif wpn < 0 self.contents.font.color = Color.new(100, 0, 0, 255) else self.contents.font.color = normal_color end self.contents.draw_text(32 + 152*i, y+124, 112, 32, sprintf("%+d", wpn), 2) end end end #-------------------------------------------------------------------------- # * Set Item # item : new item #-------------------------------------------------------------------------- def item=(item) if @item != item @item = item refresh end end end