#1
Mi primera script. (almacén de objetos) el Dom Dic 23, 2012 1:37 pm
rpgmanumaker




Bueno, llevo bastante intentando aprender RGSS2, para poder programar en VX. Ya sé que con la salida del ACE poco usan el VX, pero yo estoy aprendiendo a programar primero en VX y luego intentaré aprender en el ACE.
Antes de postear la script, tengo que decir: youkai me ha ayudado mucho para hacerla. Ahora mismo él es quien me está ayudando a aprender, y es gracias a él que estoy mejorando y podido hacer la script.
La parte de Window_StoredI es toda suya. También algunos de las partes del script me las dio él. Aunque es normal, estoy aprendiendo y me ha costado mucho hacer este script. Aunque para algunos seguro que es muy fácil XD.
Aún quiero ir añadiéndole un par de cosas para mejorarla e ir aprendiendo. Así que puede que la modifique más a delante.
En caso de que la usen en sus proyectos no hace falta que den créditos y siéntanse libres de postearla donde quieran, pero eso sí no digan que es suya XD.
----------------------------------------------------------------------------------------------------------------------------------------------
Ya arreglé el fallo. Gracias a todos por comentar y a tomate por haber subido la screen.
----------------------------------------------------------------------------------------------------------------------------------------------
Vuelvo a editar, porque Orochii me ayudo a mejorar el script en MM y de pasó ya también lo pongo aquí en UM. Gracias Orichii
Antes de postear la script, tengo que decir: youkai me ha ayudado mucho para hacerla. Ahora mismo él es quien me está ayudando a aprender, y es gracias a él que estoy mejorando y podido hacer la script.
La parte de Window_StoredI es toda suya. También algunos de las partes del script me las dio él. Aunque es normal, estoy aprendiendo y me ha costado mucho hacer este script. Aunque para algunos seguro que es muy fácil XD.
- Código:
class Game_System
attr_accessor :item_guardados
alias initialize_2 initialize
def initialize
initialize_2
@item_guardados = {}
end
end
#==============================================================================
# ■ Window_Storage
#==============================================================================
class Window_Storage < Window_Selectable
#INITIALIZE
def initialize(x, y, width, height)
super(x, y, width, height)
@column_max = 2
self.index = 0
refresh
end
#Item
def item
return @data[self.index]
end
#Include?
def include?(item)
return !(item == nil)
end
#Enable?
def enable?(item)
return $game_party.item_can_use?(item)
end
#Refresh
def refresh
@data = []
for item in $game_party.items
next unless include?(item)
@data.push(item)
end
@data.push(nil) if include?(nil)
@item_max = @data.size
self.index = @item_max-1 if self.index >= @item_max
create_contents
for i in 0...@item_max
draw_item(i)
end
end
#DIbujar item
def draw_item(index)
rect = item_rect(index)
self.contents.clear_rect(rect)
item = @data[index]
if item != nil
number = $game_party.item_number(item)
rect.width -= 4
draw_item_name(item, rect.x, rect.y)
self.contents.draw_text(rect, sprintf(":%2d", number), 2)
end
end
end
class Window_StoredI < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 56, 544, 360)
@column_max = 2
self.index = 0
refresh
end
#--------------------------------------------------------------------------
# * Get Item
#--------------------------------------------------------------------------
def item
return @data.keys[self.index]
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@data = $game_system.item_guardados
# If item count is not 0, make a bit map and draw all items
@item_max = @data.keys.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)
rect = item_rect(index)
self.contents.clear_rect(rect)
i = @data.keys[index]
number = @data.values[index]
rect.width -= 4
draw_item_name(i, rect.x, rect.y)
self.contents.draw_text(rect, sprintf(":%2d", number), 2)
end
#--------------------------------------------------------------------------
# * Help Text Update
#--------------------------------------------------------------------------
end
#==============================================================================
#Windo_Storage_Number
#==============================================================================
class Window_Storage_Number < Window_Base
#INITIALIZE
def initialize
super(0, 56, 544, 360)
@item = nil
@max = 1
@number = 1
end
#Set
def set(item, max)
@item = item
@max = max
@number = 1
refresh
end
#Number
def number
return @number
end
#Refresh
def refresh
y = 96
self.contents.clear
draw_item_name(@item, 0, y)
self.contents.font.color = normal_color
self.contents.draw_text(212, y, 20, WLH, "×")
self.contents.draw_text(248, y, 20, WLH, @number, 2)
self.cursor_rect.set(244, y, 28, WLH)
end
#Update
def update
super
if self.active
last_number = @number
if Input.repeat?(Input::RIGHT) and @number < @max
@number += 1
end
if Input.repeat?(Input::LEFT) and @number > 1
@number -= 1
end
if Input.repeat?(Input::UP) and @number < @max
@number = [@number + 10, @max].min
end
if Input.repeat?(Input::DOWN) and @number > 1
@number = [@number - 10, 1].max
end
if @number != last_number
Sound.play_cursor
refresh
end
end
end
end
#==============================================================================
#Scene_Sotarge
#==============================================================================
class Scene_Storage < Scene_Base
#Start
def start
super
create_menu_background
create_command_window
@dummy_window = Window_Base.new(0, 56, 544, 360)
@sacar_objeto = Window_StoredI.new
@sacar_objeto.active = false
@sacar_objeto.visible = false
@guardar_objeto = Window_Storage.new(0, 56, 544, 360)
@guardar_objeto.active = false
@guardar_objeto.visible = false
@number_window = Window_Storage_Number.new
@number_window.active = false
@number_window.visible = false
end
#Terminate
def terminate
super
dispose_menu_background
dispose_command_window
@dummy_window.dispose
@sacar_objeto.dispose
@guardar_objeto.dispose
@number_window.dispose
end
#Update
def update
super
update_menu_background
@command_window.update
@dummy_window.update
@sacar_objeto.update
@guardar_objeto.update
@number_window.update
if @command_window.active
update_command_selection
elsif @sacar_objeto.active
update_sacar_selection
elsif @guardar_objeto.active
update_guardar_selection
elsif @number_window.active
update_number_input
end
end
#Creaar Command_Window
def create_command_window
s1 = "Guardar"
s2 = "Sacar"
s3 = "Salir"
@command_window = Window_Command.new(544, [s1, s2, s3], 3)
@command_window.y = 0
if $game_temp.shop_purchase_only
@command_window.draw_item(1, false)
end
end
#Borrar Command_Window
def dispose_command_window
@command_window.dispose
end
#Update Command_Window
def update_command_selection
if Input.trigger?(Input::B)
Sound.play_cancel
$scene = Scene_Map.new
elsif Input.trigger?(Input::C)
case @command_window.index
when 0
Sound.play_decision
@command_window.active = false
@dummy_window.visible = false
@guardar_objeto.active = true
@guardar_objeto.visible = true
@guardar_objeto.refresh
when 1
if $game_temp.shop_purchase_only
Sound.play_buzzer
else
Sound.play_decision
@command_window.active = false
@dummy_window.visible = false
@sacar_objeto.active = true
@sacar_objeto.visible = true
@sacar_objeto.refresh
end
when 2
Sound.play_decision
$scene = Scene_Map.new
end
end
end
#Update_Sacar_Selection
def update_sacar_selection
if Input.trigger?(Input::B)
Sound.play_cancel
@command_window.active = true
@dummy_window.visible = true
@sacar_objeto.active = false
@sacar_objeto.visible = false
return
end
if Input.trigger?(Input::C)
@item = @sacar_objeto.item
number = $game_party.item_number(@item)
if @item == nil or number > 99
Sound.play_buzzer
else
Sound.play_decision
max = $game_system.item_guardados[@item]
max = [max, 99 - number].min
@sacar_objeto.active = false
@sacar_objeto.visible = false
@number_window.set(@item, max)
@number_window.active = true
@number_window.visible = true
end
end
end
#Update_Guardar_Selection
def update_guardar_selection
if Input.trigger?(Input::B)
Sound.play_cancel
@command_window.active = true
@dummy_window.visible = true
@guardar_objeto.active = false
@guardar_objeto.visible = false
elsif Input.trigger?(Input::C)
@item = @guardar_objeto.item
if @item == nil
Sound.play_buzzer
else
Sound.play_decision
max = $game_party.item_number(@item)
@guardar_objeto.active = false
@guardar_objeto.visible = false
@number_window.set(@item, max)
@number_window.active = true
@number_window.visible = true
end
end
end
#Update_Number_Input
def update_number_input
if Input.trigger?(Input::B)
cancel_number_input
elsif Input.trigger?(Input::C)
decide_number_input
end
end
#Cancel_Number_Input
def cancel_number_input
Sound.play_cancel
@number_window.active = false
@number_window.visible = false
case @command_window.index
when 0
@guardar_objeto.active = true
@guardar_objeto.visible = true
when 1
@sacar_objeto.active = true
@sacar_objeto.visible = true
end
end
#Decide_Number_Input
def decide_number_input
Sound.play_shop
@number_window.active = false
@number_window.visible = false
case @command_window.index
when 0
if $game_system.item_guardados[@item].nil?
$game_system.item_guardados[@item] = @number_window.number
else
$game_system.item_guardados[@item] += @number_window.number
end
$game_party.lose_item(@item, @number_window.number)
@guardar_objeto.refresh
@guardar_objeto.active = true
@guardar_objeto.visible = true
when 1
$game_system.item_guardados[@item] -= @number_window.number
$game_system.item_guardados.delete(@item) if $game_system.item_guardados[@item] == 0
$game_party.gain_item(@item, @number_window.number)
@sacar_objeto.refresh
@sacar_objeto.active = true
@sacar_objeto.visible = true
end
end
end
Aún quiero ir añadiéndole un par de cosas para mejorarla e ir aprendiendo. Así que puede que la modifique más a delante.
En caso de que la usen en sus proyectos no hace falta que den créditos y siéntanse libres de postearla donde quieran, pero eso sí no digan que es suya XD.
----------------------------------------------------------------------------------------------------------------------------------------------
Ya arreglé el fallo. Gracias a todos por comentar y a tomate por haber subido la screen.
----------------------------------------------------------------------------------------------------------------------------------------------
Vuelvo a editar, porque Orochii me ayudo a mejorar el script en MM y de pasó ya también lo pongo aquí en UM. Gracias Orichii
Última edición por rpgmanumaker el Mar Dic 25, 2012 5:55 pm, editado 3 veces (Razón : Arreglar el script y modificarlo)