Script Para Visão De Detalhes De Itens v1.1

26 de março de 2013

Item Detail View Script v1.1 é um script para o RPG Maker XP que permite mostrar mais detalhes sobre os itens do seu inventório.

Os detalhes dos itens aparecem quando você pressiona a tecla [SHIFT], com o cursor sobre o item desejado. Os detalhes são editados e colocados na pasta “Data”, nos arquivos Item_Detail.rxdata, Weapon_Detail.rxdata e Armor_Detail.rxdata, sendo, respectivamente, os arquivos que tem os detalhes dos itens, armas e armaduras.

Pelo que pude ver, tem dois scripts mexidos na demo (para download), o Window_ItemDetailView e o Scene_Item. Analise o minigame para entender melhor…

Código Do Window_ItemDetailView

class Window_ItemDetailView < Window_Base
  
  # ---------------------------------------------------------
  # Script v1.1
  # by jackatrades
  #
  # Find me at http://www.dubealex.com/creation_asylum/forum/
  # if you have questions/comments.
  # ---------------------------------------------------------
  
  # Creates the window for usage.
  def initialize
    super(0, 40, 640, 400)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.name = $fontface
    self.contents.font.size = $fontsize
    self.contents.font.color = normal_color
    # z acts as "layer order."
    self.z += 10
    @itemdetail = []
    # ------------------------------
    # @leadingcharacters is set for the script to delete X amount of
    # characters in each line of the .rxdata
    # In this case, the first 5 characters will be deleted in each line.
    # ------------------------------
    @leadingcharacters = 5
    # Clears and resets the window everytime it is requested by Scene_Item.
    refresh2    
  end
  
  def refresh2
    self.contents.font.name = $fontface
    self.contents.font.size = $fontsize
    self.contents.font.color = normal_color
    self.contents.clear
  end
  
  def refresh
    item_id = $currenthighlighteditem.id
    # The three huge if-then statements check the current highlighted
    # item and its property, and executes the appropriate script
    # when it is true.
    # <-----------------------------------ITEM---------------------------->
    if $currenthighlighteditem.is_a?(RPG::Item)
      item_name = $data_items[item_id].name
      item_icon = $data_items[item_id].icon_name
      item_amount = ($game_party.item_number(item_id)).to_s
      item_price = ($data_items[item_id].price).to_s
      getitem_scope = $data_items[item_id].scope
      # The Item Scope descriptions can be edited if needed.
      if getitem_scope == 0
        getitem_scope = "No Use"
      end
      if getitem_scope == 1
        getitem_scope = "One Enemy"
      end
      if getitem_scope == 2
        getitem_scope = "All Enemies"
      end 
      if getitem_scope == 3
        getitem_scope = "One Ally"
      end
      if getitem_scope == 4
        getitem_scope = "Party"
      end 
      if getitem_scope == 5
        getitem_scope = "Down Ally (HP = 0)"
      end
      if getitem_scope == 6
        getitem_scope = "Down Allies (HP = 0)"
      end
      if getitem_scope == 7
        getitem_scope = "User"
      end
      # </> #
      self.contents.font.color = system_color
      self.contents.draw_text(310, 44, 100, 24, "Usage:", 2)
      self.contents.font.color = normal_color
      self.contents.draw_text(426, 44, 250, 24, getitem_scope, 0)
    end
    # <-------------------------------------------------------------------->
    
    # <-----------------------------------WEAPON---------------------------->
    if $currenthighlighteditem.is_a?(RPG::Weapon)
      item_name = $data_weapons[item_id].name
      item_icon = $data_weapons[item_id].icon_name
      item_amount = ($game_party.weapon_number(item_id)).to_s
      item_price = ($data_weapons[item_id].price).to_s 
      # Initialize p# variables.
      # These are used to display either plus sign or no sign depending on
      # the weapon's attribute bonus.
      # Negative sign originates from the value itself, so no need to check
      # them with if-then statements.
      p1 = ""
      p2 = ""
      p3 = ""
      p4 = ""
      p5 = ""
      p6 = ""
      # ---------------------------------------------------
      # Start inserting appropriate variables from database.
      # ---------------------------------------------------
      item_atk = $data_weapons[item_id].atk.to_s
      item_pdef = $data_weapons[item_id].pdef
      if item_pdef > 0
        p5 = "+"
      end
      item_pdef = item_pdef.to_s
      item_mdef = $data_weapons[item_id].mdef
      if item_mdef > 0
        p6 = "+"
      end
      item_mdef = item_mdef.to_s
      item_str = $data_weapons[item_id].str_plus
      if item_str > 0
        p1 = "+"
      end
      item_str = item_str.to_s
      item_dex = $data_weapons[item_id].dex_plus
      if item_dex > 0
        p2 = "+"
      end
      item_dex = item_dex.to_s
      item_agi = $data_weapons[item_id].agi_plus
      if item_agi > 0
        p3 = "+"
      end
      item_agi = item_agi.to_s
      item_int = $data_weapons[item_id].int_plus
      if item_int > 0
        p4 = "+"
      end
      item_int = item_int.to_s
      # Sets Elemental and Status attributes of weapon string along with 
      # suffix slashes when there are two or more attributes.
      item_element = ""
      flag = false
      for i in $data_weapons[item_id].element_set
        if flag
          item_element += "/"
        end
        item_element += $data_system.elements[i]
        flag = true
      end
      # Checks whether item_element is blank. If it is, then sets it
      # to "None".
      if item_element == ""
        item_element = "None"
      end
      item_status = ""
      flag = false
      for i in $data_weapons[item_id].plus_state_set
        if flag
          item_status += "/"
        end
        item_status += $data_states[i].name
        flag = true
      end
      if item_status == ""
        item_status = "None"
      end
      # ------------------------------
      # Start drawing attribute names.
      # ------------------------------
      # x and y can be changed to easily affect other attributes.
      x = 33
      y = 66
      self.contents.font.color = system_color
      self.contents.font.size = $fontsize - 4
      self.contents.font.color = Color.new(255, 255, 0, 255)
      self.contents.draw_text(x, y, 256, 24, $data_system.words.atk)
      self.contents.font.color = system_color
      self.contents.draw_text(x, y + 28, 256, 24, $data_system.words.str)
      self.contents.draw_text(x, y + 42, 256, 24, $data_system.words.dex)
      self.contents.draw_text(x, y + 56, 256, 24, $data_system.words.agi)
      self.contents.draw_text(x, y + 70, 256, 24, $data_system.words.int)
      self.contents.draw_text(x, y + 84, 256, 24, $data_system.words.pdef)
      self.contents.draw_text(x, y + 98, 256, 24, $data_system.words.mdef)
      self.contents.draw_text(x + 170, y, 256, 24, "Elemental Attack:")
      self.contents.draw_text(x + 170, y + 42, 256, 24, "Status Attack:")      
      # ------------------------------
      # Start drawing attribute values.
      # ------------------------------
      self.contents.font.color = normal_color
      self.contents.draw_text(x + 74, y, 64, 24, item_atk, 2)
      self.contents.draw_text(x + 74, y + 28, 64, 24, p1 + item_str, 2)
      self.contents.draw_text(x + 74, y + 42, 64, 24, p2 + item_dex, 2)
      self.contents.draw_text(x + 74, y + 56, 64, 24, p3 + item_agi, 2)
      self.contents.draw_text(x + 74, y + 70, 64, 24, p4 + item_int, 2)
      self.contents.draw_text(x + 74, y + 84, 64, 24, p5 + item_pdef, 2)
      self.contents.draw_text(x + 74, y + 98, 64, 24, p6 + item_mdef, 2)
      self.contents.draw_text(x + 170, y + 14, 420, 24, "   " + item_element, 0)
      self.contents.draw_text(x + 170, y + 56, 420, 24, "   " + item_status, 0)
      # Resets font size.
      self.contents.font.size = $fontsize
    end    
    # <-------------------------------------------------------------------->
    
    # <-----------------------------------ARMOR---------------------------->
    if $currenthighlighteditem.is_a?(RPG::Armor)
      item_name = $data_armors[item_id].name
      item_icon = $data_armors[item_id].icon_name
      item_amount = ($game_party.armor_number(item_id)).to_s
      item_price = ($data_armors[item_id].price).to_s
      # set variables
      p1 = ""
      p2 = ""
      p3 = ""
      p4 = ""
      p5 = ""
      p6 = ""
      # Checks armor's type and inserts appropriate string.
      type = $data_armors[item_id].kind
      if type == 0
        type = "Shield"
      end
      if type == 1
        type = "Helmet"
      end
      if type == 2
        type = "Armor"
      end
      if type == 3
        type = "Accessory"
      end
      item_pdef = $data_armors[item_id].pdef
      if item_pdef > 0
        p5 = "+"
      end
      item_pdef = item_pdef.to_s
      item_mdef = $data_armors[item_id].mdef
      if item_mdef > 0
        p6 = "+"
      end
      item_mdef = item_mdef.to_s
      item_str = $data_armors[item_id].str_plus
      if item_str > 0
        p1 = "+"
      end
      item_str = item_str.to_s
      item_dex = $data_armors[item_id].dex_plus
      if item_dex > 0
        p2 = "+"
      end
      item_dex = item_dex.to_s
      item_agi = $data_armors[item_id].agi_plus
      if item_agi > 0
        p3 = "+"
      end
      item_agi = item_agi.to_s
      item_int = $data_armors[item_id].int_plus
      if item_int > 0
        p4 = "+"
      end
      item_int = item_int.to_s     
      item_element = ""
      flag = false
      for i in $data_armors[item_id].guard_element_set
        if flag
          item_element += "/"
        end
        item_element += $data_system.elements[i]
        flag = true
      end
      if item_element == ""
        item_element = "None"
      end
      item_status = ""
      flag = false
      for i in $data_armors[item_id].guard_state_set
        if flag
          item_status += "/"
        end
        item_status += $data_states[i].name
        flag = true
      end
      if item_status == ""
        item_status = "None"
      end
      #draw attribute names
      self.contents.font.color = system_color
      self.contents.font.size = $fontsize - 4
      x = 33
      y = 66
      self.contents.font.color = Color.new(255, 255, 0, 255)
      self.contents.draw_text(x, y, 256, 24, "Type")
      self.contents.draw_text(x, y + 14, 256, 24, $data_system.words.pdef)
      self.contents.draw_text(x, y + 28, 256, 24, $data_system.words.mdef)
      self.contents.font.color = system_color
      self.contents.draw_text(x, y + 56, 256, 24, $data_system.words.str)
      self.contents.draw_text(x, y + 70, 256, 24, $data_system.words.dex)
      self.contents.draw_text(x, y + 84, 256, 24, $data_system.words.agi)
      self.contents.draw_text(x, y + 98, 256, 24, $data_system.words.int)      
      self.contents.draw_text(x + 170, y, 256, 24, "Elemental Guard:")
      self.contents.draw_text(x + 170, y + 42, 256, 24, "Status Guard:")                
      #draw attributes
      self.contents.font.color = normal_color
      self.contents.draw_text(x + 74, y, 64, 24, type, 2)
      self.contents.draw_text(x + 74, y + 14, 64, 24, p5 + item_pdef, 2)
      self.contents.draw_text(x + 74, y + 28, 64, 24, p6 + item_mdef, 2)
      self.contents.draw_text(x + 74, y + 56, 64, 24, p1 + item_str, 2)
      self.contents.draw_text(x + 74, y + 70, 64, 24, p2 + item_dex, 2)
      self.contents.draw_text(x + 74, y + 84, 64, 24, p3 + item_agi, 2)
      self.contents.draw_text(x + 74, y + 98, 64, 24, p4 + item_int, 2)
      self.contents.draw_text(x + 170, y + 14, 420, 24, "   " + item_element, 0)
      self.contents.draw_text(x + 170, y + 56, 420, 24, "   " + item_status, 0)
      self.contents.font.size = $fontsize

    end    
    # <-------------------------------------------------------------------->
    
    # Stores item Price's string width.
    item_price_width = item_price.size * 10
    # Stores item's icon graphic.
    bitmap = RPG::Cache.icon(item_icon + ".png")
    # Draws item's icon.
    self.contents.blt(5, 8, bitmap, Rect.new(0, 0, 24, 24), 255)
    self.contents.font.color = normal_color
    self.contents.draw_text(33, 8, 256, 24, item_name)
    self.contents.font.color = system_color
    self.contents.draw_text(310, 8, 100, 24, "Owned No.:", 2)
    self.contents.draw_text(310, 26, 100, 24, "Value:", 2)
    self.contents.font.color = normal_color
    self.contents.draw_text(426, 8, 160, 24, item_amount, 0)
    self.contents.draw_text(426, 26, 160, 24, item_price, 0)
    # This if-then statement is pretty much unnecessary unless
    # you're using the same idea: if user's party does not
    # know the item's value and had not appraised the item,
    # then don't draw text.
    if item_price != "Unknown"
      self.contents.font.color = system_color
      self.contents.draw_text(432 + item_price_width, 26, 160, 24, $data_system.words.gold, 0)
    end
    self.contents.font.color = normal_color
    # Two lines below calls the two definitions to write the item's
    # detailed description.
    get_item_detail(item_id)
    write_item_detail(5, 223)
  end
  
  def get_item_detail(item_id)
    # descarray stores the line numbers needed to call the right
    # detail description into an array.
    descarray = 
    [
    item_id * 7,
    item_id * 7 + 1,
    item_id * 7 + 2,
    item_id * 7 + 3,
    item_id * 7 + 4,
    item_id * 7 + 5,
    item_id * 7 + 6
    ]
    # The if-then statements below checks the highlighted item and use
    # the right .rxdata.
    if $currenthighlighteditem.is_a?(RPG::Item)
      f = File.open("Data/Item_Detail.rxdata")
    end
    if $currenthighlighteditem.is_a?(RPG::Weapon)
      f = File.open("Data/Weapon_Detail.rxdata")
    end
    if $currenthighlighteditem.is_a?(RPG::Armor)
      f = File.open("Data/Armor_Detail.rxdata")
    end
    # Stores _every_ line of the file into @itemdetail as an array.
    @itemdetail = f.readlines
    # Clears first seven lines for Lines 1-7 (0..6), as it will never be used.
    for i in 0..6
      @itemdetail[i] = ""
    end 
    # Crops the first 6 characters in each line.
    for i in 0..6
      cropheadcharacters(descarray[i])
    end
    # Stores the cropped lines into description array.
    @description = []
    for i in 0..6
      @description[i] = @itemdetail[descarray[i]]
    end
    return
  end
  
  def cropheadcharacters(descarray)
    # Checks to see if any lines are nil. If so, then sets them
    # as blank lines after cropping.
    if @itemdetail[descarray] == nil
      @itemdetail[descarray] = "123456 "
    end
    # Crops the first (@leadingcharacters) characters in each line.
    # Default: 5.
    @itemdetail[descarray].slice!(0..@leadingcharacters)
    return
  end
  
  def write_item_detail(x, y)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y - 20, 640, 32, "Description:")
    self.contents.font.color = normal_color
    self.contents.font.size = $fontsize - 2
    # Draws the first six lines in normal color.
    for i in 0..5
      self.contents.draw_text(x, y, 640, 32, @description[i])
      y += 18
    end
    # Draws the seventh line in another color.
    self.contents.font.color = Color.new(255, 255, 0, 255)
    self.contents.draw_text(x, y, 640, 32, @description[6])
  end  
end

Download e ficha técnica

  • Download (clique com o botão esquerdo do mouse ou toque no link)
  • Desenvolvedores, publishers e/ou distribuidores: Jackatrades, 815KB
  • SO: Windows 98/98SE/Me/2000/XP/Vista/7
  • Licença: Grátis
  • Categoria: Programação XP
  • Tag: RPG Maker XP
  • Adicionado por: LichKing
  • Acessos: 44

Observação: se você gostou deste post ou ele lhe foi útil de alguma forma, por favor considere apoiar financeiramente a Gaming Room. Fico feliz só de ajudar, mas a contribuição do visitante é muito importante para que este site continua existindo e para que eu possa continuar provendo este tipo de conteúdo e melhorar cada vez mais. Acesse aqui e saiba como. Obrigado!

Deixe um comentário

Inscreva-se na nossa newsletter!