este debe ser el mejor script que he visto �ltimamente ;) . permite crear una ventana de inventario "pop up" con la que se pueden "usar" objetos sobre los eventos de los mapas sin necesidad de abrir el men� completo. con esto pod�is crear sidequests, hacer que un "experto" examine cada uno de los objetos de vuestro inventario, etc. user posted image ---qu� hay que modificar--------------------------------------------------------------1. a�adid esta nueva clase (field_item) a la lista de clases en el editor de scripts :
#--------------------------------------------------------------# inventario en mapa. autor : rpg #--------------------------------------------------------------class field_item #--------------------------------------------------------------# m�todo y loop principales #--------------------------------------------------------------def main # variable para salir del loop principal @done = false # crea el nuevo objeto ventana @item_window = window_item.new(true) @item_window.refresh # loop principal loop do # actualiza los gr�ficos, las teclas y el propio objeto graphics.update input.update update # rompe el loop si la variable de salida es verdadera - true if @done == true break end end # manda a la porra la ventana @item_window.dispose end #--------------------------------------------------------------# gesti�n de las teclas pulsadas y actualizaci�n #--------------------------------------------------------------def update # llama al m�todo window update @item_window.update # si se pulsa la tecla de cancelar, se sale de la ventana if input.trigger?(input::b) $game_system.se_play($data_system.cancel_se) @done = true return end #si la tecla pulsada era la de aceptar y hay un objeto elegido... if input.trigger?(input::c)
unless @item_window.item.is_a?(rpg::item) or @item_window.item.is_a?(rpg::weapon) or @item_window.item.is_a?(rpg::armor) $game_system.se_play($data_system.buzzer_se) return end # entonces se intenta usarlo al cerrar la ventana con el siguiente m�todo use_item @done = true return end end #--------------------------------------------------------------# cambios que indican que el objeto ha sido usado #--------------------------------------------------------------def use_item # obtiene el id del evento al que est� mirando el jugador x, y, dir = $game_player.x, $game_player.y, $game_player.direction newx = x + (dir == 6 ? 1 : dir == 4 ? -1 : 0) newy = y + (dir == 2 ? 1 : dir == 8 ? -1 : 0) event_id = $game_map.check_event(newx, newy) # comprueba si existe el evento y obtiene el id del mapa if event_id == nil $game_system.se_play($data_system.buzzer_se) return end $game_system.se_play($data_system.decision_se) map_id = $game_map.map_id # activa el interruptor local d del evento key = [map_id, event_id, "d"] $game_self_switches[key] = true # guarda el objeto elegido en la variable global $field_item $field_item = @item_window.item # actualiza el mapa $game_map.need_refresh = true end end #-----------2. sustituid el m�todo initialize de la clase window_item por esta versi�n modificada. b�sicamente, esto crea un tercer tipo de formato de ventana de inventario. #------------def initialize(small = false) super(0, 64, 640, 416) @column_max = 2 refresh self.index = 0 # si es el inventario de las batallas if $game_temp.in_battle self.y = 64 self.height = 336 self.back_opacity = 190 end
# si es la ventana de inventario del mapa if small self.y = 320 self.height = 160 self.back_opacity = 190 end end #--------------3. cambiad el m�todo update de la clase scene_map por este. esto sirve para gestionar la correcta aparici�n en pantalla de la ventana. #-------------def update loop do $game_map.update $game_system.map_interpreter.update $game_player.update $game_system.update $game_screen.update unless $game_temp.player_transferring break end transfer_player if $game_temp.transition_processing break end end @spriteset.update @message_window.update if $game_temp.gameover $scene = scene_gameover.new return end if $game_temp.to_title $scene = scene_title.new return end if $game_temp.transition_processing $game_temp.transition_processing = false if $game_temp.transition_name == "" graphics.transition(20) else graphics.transition(40, "graphics/transitions/" + $game_temp.transition_name) end
end if $game_temp.message_window_showing return end if $game_player.encounter_count == 0 and $game_map.encounter_list != [] unless $game_system.map_interpreter.running? or $game_system.encounter_disabled n = rand($game_map.encounter_list.size) troop_id = $game_map.encounter_list[n] if $data_troops[troop_id] != nil $game_temp.battle_calling = true $game_temp.battle_troop_id = troop_id $game_temp.battle_can_escape = true $game_temp.battle_can_lose = false $game_temp.battle_proc = nil end end end if input.trigger?(input::b) unless $game_system.map_interpreter.running? or $game_system.menu_disabled $game_temp.menu_calling = true $game_temp.menu_beep = true end end # verifica que se pulse la tecla shift y llama el inventario del mapa if input.trigger?(input::shift) @field_item = field_item.new @field_item.main end if $debug and input.press?(input::f9) $game_temp.debug_calling = true end unless $game_player.moving? if $game_temp.battle_calling call_battle elsif $game_temp.shop_calling call_shop elsif $game_temp.name_calling call_name elsif $game_temp.menu_calling call_menu elsif $game_temp.save_calling call_save elsif $game_temp.debug_calling call_debug end end end #------------4. por �ltimo, sustituid el m�todo check_event de game_map por este :
#--------------def check_event(x, y) for event in $game_map.events.values if event.x == x and event.y == y return event.id end end # devuelve 'nil' si no existe el evento return nil end #-------------------c�mo se usa------------------------------------------------------------------al pulsar la tecla shift en los mapas, aparecer� la ventana de inventario. cuando el jugador "use" un objeto mirando a evento, se activar� el interruptor local d de dicho evento y se guardar� el objeto en la variable global $field_item. por lo tanto, para que el evento reaccione, solo ten�is que crear la "p�gina de reacci�n" con "interruptor local d activado" como condici�n de p�gina, inicio autom�tico (importante) y con una lista de acciones semejante a esta : (por ejemplo, si usamos el objeto carta con el evento) <>condiciones y efectos : script: $field_item.name == "carta" <>aqu� van las acciones si el objeto entregado es la carta <>excepci�n <>aqu� van las acciones si el objeto entregado no es la carta <>fin <>script : $field_item = nil <>control de interruptor local : d = off como v�is, el formato del script de la condici�n es : $field_item.name == "(nombre del objeto)" es muy importante que volv�is a desactivar el interruptor local y vaciar la variable global (con $field_item = nil) , o si no comenzar�n los problemas :lol: . otro tema, este script no disminuye la cantidad del objeto usado, por lo que si quer�is que el jugador pierda el objeto, deb�is a�adir acciones al evento para ello.