Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[Mercado] 350 créditos por terminar un script sobre Window_Selectable

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [Mercado] 350 créditos por terminar un script sobre Window_Selectable

Mensaje por Wecoc el 2014-10-13, 22:56

Daré 350 créditos y opción de salir a los créditos del script a quien termine ésto que empecé y que por problemas de tiempo no he podido terminar.
Es una prueba sencilla (lo que hay lo hice en 20 minutos) la cual ya tiene gran parte resuelta más o menos, solo hay que arreglar bugs y poco más... Vaya, falta la parte pesada, y no tengo tiempo para ponerme a ella.

Lo que permite éste script es controlar de forma dinámica los iconos de una Window_Selectable, por ejemplo moverlos, aplicarles zoom, cambiarles el color y esas cosas.
Más información en la demo ;D

A ver quien se anima xD
Eso es dinero fácil gente, es casi aprovecharse de que uno no puede aportar por sí mismo en su situación xD

http://share.cherrytree.at/showfile-17244/project51_wecoc.zip

Más información:
Sobre los bugs conocidos hasta ahora:
1) ox y oy no funcionan así que al pasar a objetos que quedarían fuera de la ventana se descontrolan los index (ver en la demo)
2) Los sprites se muestran fuera del campo que abarca el contents de la ventana (ver en la demo)
3) Al cambiar de x o y de la ventana manualmente, los iconos no cambian a las nuevas coordenadas
4) Solo se cambió draw_item de Window_Selectable (aunque los demás serían muy parecidos)
5) Los iconos quedan por encima de la Window_Target al usar objeto, lo que significa que la z no es la correcta.

Podéis subir una demo o una actualización del script a secas. Una vez finalizado el script será posteado con el nombre de los autores en su sección.

Si lo hacéis entre más de uno los créditos serán repartidos como crea necesario (en ese caso ya veremos xD)
avatar
Wecoc
Administrador
Administrador



Créditos 12234

Gracias : 638

Volver arriba Ir abajo

RPG Maker XP Re: [Mercado] 350 créditos por terminar un script sobre Window_Selectable

Mensaje por Eron el 2014-10-16, 19:16

Ya que nadie se animaba lo hice yo =DD La mayoría de problemas eran por un bug que tenías; consideraste que @viewport ya existía bien en las ventanas, mientras que por defecto aunque la variable exista, vale nil.

Código:
#==============================================================================
# Window_Selectable Icon Test
# Autores: Wecoc, Eron
#==============================================================================

class Window_Selectable < Window_Base
 
  attr_accessor :icon_sprites
 
  alias icon_sprite_ini initialize unless $@
  def initialize(x, y, width, height)
    icon_sprite_ini(x, y, width, height)
    @icon_sprites = []
    @viewport = Viewport.new(x + 8, y + 8, width - 24, height - 24)
    @viewport.z = 110
  end
 
  alias icon_sprite_dis dispose unless $@
  def dispose
    icon_sprite_dis
    clear_icon_sprites
    @icon_sprites = []
  end
 
  def ox=(value)
    super(value)
    refresh_icons
    return value
  end
 
  def oy=(value)
    super(value)
    refresh_icons
    return value
  end
 
  def visible=(value)
    super(value)
    @icon_sprites.each do |sprite|
      next if sprite == nil
      sprite.visible = value
    end
  end
 
  def refresh_icons
    clear_icon_sprites
    refresh rescue nil
  end
 
  def clear_icon_sprite(index)
    @icon_sprites[index].dispose
    @icon_sprites[index] = nil
  end
   
  def clear_icon_sprites
    @icon_sprites.compact!
    @icon_sprites.each do |sprite|
      sprite.dispose
      sprite = nil
    end
    @icon_sprites = []
  end

  def draw_icon_sprite(index, icon_name, x, y)
    clear_icon_sprite(index) if @icon_sprites[index] != nil
    @icon_sprites[index] = Sprite.new(@viewport)
    icon_sprite = @icon_sprites[index]
    icon_sprite.bitmap = RPG::Cache.icon(icon_name)
    icon_sprite.x = x - self.ox + 8
    icon_sprite.y = y - self.oy + 8
  end
 
  alias icon_sprite_upd update unless $@
  def update
    icon_sprite_upd
    if @index >= 0 and @icon_sprites[@index] != nil
      icon_sprite = @icon_sprites[@index]
      zoom_in(icon_sprite)
    end
    for i in 0...@icon_sprites.size
      next if @icon_sprites[i] == nil
      next if i == @index
      icon_sprite = @icon_sprites[i]
      zoom_out(icon_sprite)
    end
  end
 
  def zoom_in(sprite)
    if sprite.zoom_x < 1.5
      sprite.zoom_x += 0.1
      sprite.zoom_y += 0.1
      sprite.x -= 2
      sprite.y -= 2
    end
  end
 
  def zoom_out(sprite)
    if sprite.zoom_x > 1.0
      sprite.zoom_x -= 0.1
      sprite.zoom_y -= 0.1
      sprite.x += 2
      sprite.y += 2
    end
  end
end

#==============================================================================
# Window_Item
#==============================================================================

class Window_Item < Window_Selectable
  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 = 4 + index % 2 * (288 + 32)
    y = index / 2 * 32
    draw_icon_sprite(index, item.icon_name, x, y)
    icon_sprite = @icon_sprites[index]
    if self.contents.font.color == normal_color
      icon_sprite.opacity = 255
    else
      icon_sprite.opacity = 128
      icon_sprite.color = Color.new(0, 0, 0, 64)
    end
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  end
end

#==============================================================================
# Window_Skill
#==============================================================================

class Window_Skill < Window_Selectable
  def draw_item(index)
    skill = @data[index]
    if @actor.skill_can_use?(skill.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4 + index % 2 * (288 + 32)
    y = index / 2 * 32
    draw_icon_sprite(index, skill.icon_name, x, y)
    icon_sprite = @icon_sprites[index]
    if self.contents.font.color == normal_color
      icon_sprite.opacity = 255
    else
      icon_sprite.opacity = 128
      icon_sprite.color = Color.new(0, 0, 0, 64)
    end
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
    self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)
  end
end

#==============================================================================
# Window_EquipRight
#==============================================================================

class Window_EquipRight < Window_Selectable
  def refresh
    self.contents.clear
    clear_icon_sprites
    @data = []
    @data.push($data_weapons[@actor.weapon_id])
    @data.push($data_armors[@actor.armor1_id])
    @data.push($data_armors[@actor.armor2_id])
    @data.push($data_armors[@actor.armor3_id])
    @data.push($data_armors[@actor.armor4_id])
    @item_max = @data.size
    self.contents.font.color = system_color
    self.contents.draw_text(4, 32 * 0, 92, 32, $data_system.words.weapon)
    self.contents.draw_text(4, 32 * 1, 92, 32, $data_system.words.armor1)
    self.contents.draw_text(4, 32 * 2, 92, 32, $data_system.words.armor2)
    self.contents.draw_text(4, 32 * 3, 92, 32, $data_system.words.armor3)
    self.contents.draw_text(5, 32 * 4, 92, 32, $data_system.words.armor4)
    for i in 0..4
      draw_item(i, 92, 32 * i) if @data[i] != nil
    end
  end
 
  def draw_item(index, x, y)
    item = @data[index]
    if not @actor.equip_fix?(index)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    draw_icon_sprite(index, item.icon_name, x, y)
    icon_sprite = @icon_sprites[index]
    if self.contents.font.color == normal_color
      icon_sprite.opacity = 255
    else
      icon_sprite.opacity = 128
      icon_sprite.color = Color.new(0, 0, 0, 64)
    end
    rect = Rect.new(x, y, self.width - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  end
end

#==============================================================================
# Window_EquipItem
#==============================================================================

class Window_EquipItem < Window_Selectable
  alias icon_sprite_eini initialize unless $@
  def initialize(*args)
    icon_sprite_eini(*args)
    clear_icon_sprites
  end
 
  alias icon_sprite_ref refresh unless $@
  def refresh
    clear_icon_sprites
    icon_sprite_ref
  end
 
  def draw_item(index)
    item = @data[index]
    x = 4 + index % 2 * (288 + 32)
    y = index / 2 * 32
    case item
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    draw_icon_sprite(index, item.icon_name, x, y)
    icon_sprite = @icon_sprites[index]
    self.contents.font.color = normal_color
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  end
end

#==============================================================================
# ** Window_ShopBuy
#==============================================================================

class Window_ShopBuy < Window_Selectable
  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.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
    draw_icon_sprite(index, item.icon_name, x, y)
    icon_sprite = @icon_sprites[index]
    if self.contents.font.color == normal_color
      icon_sprite.opacity = 255
    else
      icon_sprite.opacity = 128
      icon_sprite.color = Color.new(0, 0, 0, 64)
    end
    rect = Rect.new(x, y, self.width - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 88, 32, item.price.to_s, 2)
  end
end

#==============================================================================
# ** Window_ShopSell
#==============================================================================

class Window_ShopSell < Window_Selectable
  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.price > 0
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4 + index % 2 * (288 + 32)
    y = index / 2 * 32
    draw_icon_sprite(index, item.icon_name, x, y)
    icon_sprite = @icon_sprites[index]
    if self.contents.font.color == normal_color
      icon_sprite.opacity = 255
    else
      icon_sprite.opacity = 128
      icon_sprite.color = Color.new(0, 0, 0, 64)
    end
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  end
end


Un placer ayudar después de tanto tiempo =)
avatar
Eron
Principiante
Principiante

0/3

Créditos 3599

Gracias : 60

Volver arriba Ir abajo

RPG Maker XP Re: [Mercado] 350 créditos por terminar un script sobre Window_Selectable

Mensaje por Wecoc el 2014-10-16, 21:16

Ya lo he probado y ahora funciona todo bien, muchas gracias :DD
Podéis darle los 350 créditos de mi bolsillo a Eron ;D

Los demás podéis quedaros con el script y modificarlo a vuestro antojo. Probé en zoom_in y zoom_out algunas otras combinaciones, como usar angle, y no queda mal. La idea era dar un efecto poco visto sin tener que alterar completamente las ventanas. El único problema es que si sois muy puristas con lo del pixelart, pues no os gustará ni lo del zoom ni lo del ángulo... Pero si fuera a usarlo yo no me importaría tanto.
avatar
Wecoc
Administrador
Administrador



Créditos 12234

Gracias : 638

Volver arriba Ir abajo

RPG Maker XP Re: [Mercado] 350 créditos por terminar un script sobre Window_Selectable

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.