# * KEvents XP # v 0.6.2 - 2017-08-02 # Scripter : Kyonides-Arkanthos # Este scriptlet les permite mostrar nombres e íconos sobre los NPC o Eventos. # Para mostrar íconos solo deben dejar un comentario al inicio de la página # que incluya solo una de las siguientes Opciones: # Nueva Misión, Premios, Fracaso, Tienda, Hotel, Corazón Roto, Amor, Enojo, # Todo Bien, Mortal, Ayuda, Pare, Muy Bien # En el caso del Nombre del evento pueden hacer una de dos cosas. La primera # es solo digitar Nombre y se tomará el que aparece en la casilla del mismo # nombre durante la edición de ese evento. La segunda es digitar algo como en # los siguientes dos ejemplos: # Nombre: Fulanito de Tal # Nombre: Verdurero,Fulanito # La diferencia es que en el segundo se dividirá el nombre en dos renglones. # Pueden utilizar . o , o : o ; como separador. # Nombre: \c1Verdurero,Fulanito # \c es para indicar cambio de Color y 1 es por la opción 1 - un tono de azul. # Hay opciones desde el 0 hasta el 10. Inclúyase máximo 1 vez por renglón. # Lea los comentarios de la Constante COLORS para más información. # Si desean utilizar otro tipo de Letra o Font, pueden dejar otro comentario # justo debajo del nombre que diga: Font Nombre del Tipo de Letra # Para configurar el Tamaño de letra: Tamaño 16 # Para configurar letra en Negrita: Negrita # Para configurar letra en Itálica: Itálica # Para configurar Varios a la vez: Tamaño 15 Itálica Negrita # En el caso del ícono, este se borrará al cambiar de página de evento a no # ser que se repita en la siguiente o se utilice un nuevo ícono. # # Llamados a Script # # # Mostrar Nombre (si fue ocultado) # # KEvents.show_name(ID_Evento) # Ocultar Nombre (¿Temporalmente?) # # KEvents.hide_name(ID_Evento) # Desechar Nombre del Evento # # KEvents.dispose_name(ID_Evento) # Mostrar Nombres e Iconos (si fueron ocultados) # # KEvents.show_names_icons # Ocultar Nombres e Iconos (¿Temporalmente?) # # KEvents.hide_names_icons # Mostrar Icono pero no desde el inicio (Temporal) # # Opciones: Las mismas de las líneas 8 y 9 pero entre comillas # KEvents.show_icon(ID_Evento, Símbolo, Mantener) # (Mantener es opcional y puede ser true (sí) o false (no).) # Quitar Icono estando en una misma página de evento (Permanente o Temporal) # # KEvents.dispose_icon(ID_Evento) # KEvents.dispose_icon(ID_Evento, nil) # # De Incluir el script KMessage XP 0.5.x # # # Mostrar Icono a partir de ese mensaje en particular # # Opciones: 0 - Nueva Misión, 1 - Premios, 2 - Fracaso, 3 - Tienda, 4 - Hotel # 5 - Corazón Roto, 6 - Amor, 7 - Enojo, 8 - Todo Bien # \SI[Opción] o \si[Opción] # Desechar Icono al terminar ese mensaje en particular # # 0_o_1 significa: 0 - temporalmente, 1 - permanentemente # \DI[0_o_1] o \di[0_o_1] module KEvents # Opciones para mostrar Nombre del Evento o Iconos OPTIONS = {} # No Edite Esta Línea OPTIONS[:'Nueva Misión'] = '038-Item07' OPTIONS[:'Premios'] = '032-Item01' OPTIONS[:'Fracaso'] = 'cancel' # Para Misión Fallida OPTIONS[:'Tienda'] = '034-Item03' OPTIONS[:'Hotel'] = '031-Key03' OPTIONS[:'Corazón Roto'] = 'broken heart' OPTIONS[:'Amor'] = 'heart small' OPTIONS[:'Enojo'] = 'smiley angry' OPTIONS[:'Todo Bien'] = 'smiley cool' OPTIONS[:'Mortal'] = '046-Skill03' OPTIONS[:'Ayuda'] = 'help' OPTIONS[:'Pare'] = 'stop' OPTIONS[:'Muy Bien'] = 'tick' COLORS = [] # Colores para el Nombre de Evento - No Edite Esta Línea COLORS[0] = Color.new(255, 255, 255) # Blanco - Color por defecto COLORS[1] = Color.new(128, 128, 255) # ¿Azul? COLORS[2] = Color.new(255, 128, 128) # ¿Rojo? COLORS[3] = Color.new(128, 255, 128) # Verde COLORS[4] = Color.new(128, 255, 255) # Celeste COLORS[5] = Color.new(255, 128, 255) # Fuchsia COLORS[6] = Color.new(255, 255, 128) # ¿Amarillo? COLORS[7] = Color.new(192, 192, 192) # Gris COLORS[8] = Color.new(192, 224, 255, 255) # Celeste 2 COLORS[9] = Color.new(255, 255, 64, 255) # Amarillo 2 COLORS[10] = Color.new(255, 64, 0) # Rojo 2 # No Edite Nada Más # @map_events = [] @map_icons = {} @show_all = true class << self attr_accessor :refresh attr_reader :map_events, :map_icons, :show_all end module_function def add_map_event(event) @map_events << event @map_events = @map_events.uniq end def add_icon_event(event, tag) @map_icons[$game_map.map_id] ||= {} @map_icons[$game_map.map_id][event.id] = tag end def show_names_icons $game_system.show_names_icons = true @map_events.each {|e| e.show_name e.show_icon_only } end def hide_names_icons $game_system.show_names_icons = false @map_events.each {|e| e.hide_name e.hide_icon } end def show_icons $game_system.show_names_icons = true @map_events.each {|e| e.show_icon_only } end def dispose_icon(id, prm=true) $game_map.events[id].dispose_icon(prm) icons = KEvents.map_icons[$game_map.map_id] || {} icons.delete id end def show_icon(id, tag, keep=nil) $game_map.events[id].show_icon(tag, keep) end def show_name(id) $game_map.events[id].show_name end def hide_name(id) $game_map.events[id].hide_name end def dispose_name(id) $game_map.events[id].dispose_name end end class Game_System attr_accessor :show_names_icons attr_reader :erased_event_icons, :temp_event_icons alias kyon_kevents_gm_sys_init initialize def initialize @erased_event_icons = {} @temp_event_icons = {} @erased_event_icons.default = [] @temp_event_icons.default = [] @show_names_icons = true kyon_kevents_gm_sys_init end def clear_map_event_icons map_id = $game_map.map_id @erased_event_icons[map_id] = [] @temp_event_icons[map_id] = [] end end class Game_Character attr_accessor :event_name_mode, :event_name, :event_icon_mode, :event_icon attr_accessor :event_name_colors, :event_name_font, :event_name_fontsize attr_accessor :event_name_font_bold, :event_name_font_italic, :keep_erased attr_accessor :event_name_refresh end class Game_Event def name() @event.name end def show_sprites return unless @list temp_icons = $game_system.temp_event_icons[$game_map.map_id] erased_icons = $game_system.erased_event_icons[$game_map.map_id] page_index = @event.pages.index(@page) prev_icon = temp_icons.include?(@event.id) erase_i = erased_icons.include?([@event.id, page_index]) codes = [108, 408] new_list = @list.select{|list| codes.include?(list.code) } new_list.each {|list| list.parameters.each {|prm| if (prm =~ /\w+:/) == 0 a_name = (prm =~ /: [\\\w+]/) == nil ? @event.name : prm.sub(/\w+: /,'') @event_name_colors = a_name.scan(/\\c\d+/).map{|d| d[2..-1].to_i } @event_name_colors = [0, 0] if @event_name_colors.empty? @event_name = a_name.gsub(/\\c\d+/,'').split(/\.|,|:|;/) @event_name_mode = :make @event_name_refresh = true next end if prm.include?('Font ') @event_name_font = prm.sub('Font ','') next end @event_name_fontsize = prm.scan(/\d+/)[0].to_i if prm.include?('Tamaño') @event_name_font_bold = true if prm.include?('Negrita') @event_name_font_italic = true if prm.include?('Itálica') if !prev_icon and (current_icon = KEvents::OPTIONS[prm.to_sym]) @event_icon_mode = :make @event_icon = current_icon next end } } KEvents.add_map_event(self) if @event_name_mode or @event_icon_mode show_icon(@current_tag) if prev_icon dispose_icon unless @event_icon_mode or prev_icon or erase_i end def show_icon(tag, keep=nil) current_tag = tag.to_sym @current_tag = current_tag if @current_tag != current_tag @event_icon_mode = :make @event_icon = KEvents::OPTIONS[@current_tag] mid = $game_map.map_id $game_system.temp_event_icons[mid] << [@event.id, @current_tag] $game_system.temp_event_icons[mid] = $game_system.temp_event_icons[mid].uniq KEvents.add_icon_event(self, @current_tag) if keep end def dispose_icon(erase=nil) @event_icon_show = :dispose @event_icon = nil return unless erase page_index = @event.pages.index(@page) $game_system.erased_event_icons[$game_map.map_id] << [@event.id, page_index] end def show_name @event_name_mode = :show @event_name_refresh = true end def hide_name @event_name_mode = :hide @event_name_refresh = true end def show_icon_only() @event_icon_mode = :show end def hide_icon() @event_icon_mode = :hide end def dispose_name @event_name_mode = :dispose @event_name = nil @event_name_refresh = true end def clear_name_flags @event_name_refresh = false @event_name_font_bold = false @event_name_font_italic = false end def refresh new_page = get_current_page unless @erased return if new_page == @page @page = new_page clear_starting return clear_variables if @page == nil @tile_id = @page.graphic.tile_id @character_name = @page.graphic.character_name @character_hue = @page.graphic.character_hue if @original_direction != @page.graphic.direction @direction = @page.graphic.direction @original_direction = @direction @prelock_direction = 0 end if @original_pattern != @page.graphic.pattern @pattern = @page.graphic.pattern @original_pattern = @pattern end @opacity = @page.graphic.opacity @blend_type = @page.graphic.blend_type @move_type = @page.move_type @move_speed = @page.move_speed @move_frequency = @page.move_frequency @move_route = @page.move_route @move_route_index = 0 @move_route_forcing = false @walk_anime = @page.walk_anime @step_anime = @page.step_anime @direction_fix = @page.direction_fix @through = @page.through @always_on_top = @page.always_on_top @trigger = @page.trigger @list = @page.list show_sprites @interpreter = nil @interpreter = Interpreter.new if @trigger == 4 check_event_trigger_auto end def get_current_page for page in @event.pages.reverse c = page.condition if c.switch1_valid next unless $game_switches[c.switch1_id] end if c.switch2_valid next unless $game_switches[c.switch2_id] end if c.variable_valid next if $game_variables[c.variable_id] < c.variable_value end if c.self_switch_valid key = [@map_id, @event.id, c.self_switch_ch] next unless $game_self_switches[key] end return page end end def clear_variables @tile_id = 0 @character_name = "" @character_hue = 0 @move_type = 0 @through = true @trigger = nil @list = nil @interpreter = nil @event_name_mode = :dispose @event_icon_show = :dispose end end class Game_Map alias kyon_kevents_gm_map_setup setup def setup(map_id) KEvents.map_events.clear $game_system.erased_event_icons[map_id] ||= [] kyon_kevents_gm_map_setup(map_id) end def setup_event_sprites @events.each {|k, e| e.show_sprites } map_icons = KEvents.map_icons[@map_id] || {} map_icons.each {|eid, tag| @events[eid].show_icon(tag) } end end class Sprite_Character alias kyon_kevents_sprite_char_up update alias kyon_kevents_sprite_char_dispose dispose def update kyon_kevents_sprite_char_up if @character.event_name_refresh mode = @character.event_name_mode mode = :make if !@_name_sprite# and mode == :show case mode when :make then make_event_name when :show then @_name_sprite.visible = true when :hide then @_name_sprite.visible = false# if @_name_sprite when :dispose then dispose_event_name end @character.clear_name_flags end if @_name_sprite @_name_sprite.x = self.x - 70 @_name_sprite.y = self.y - @ch * 2 end if @character.event_icon_mode mode = @character.event_icon_mode mode = :make if !@_icon_sprite# and mode == :show case mode when :make then make_icon when :show then @_icon_sprite.visible = true when :hide then @_icon_sprite.visible = false# if @_icon_sprite when :dispose then dispose_icon end @character.event_icon_mode = nil end place_icon if @_icon_sprite end def make_event_name names = @character.event_name colors = @character.event_name_colors font = @character.event_name_font fontsize = @character.event_name_fontsize unless @_name_sprite @_name_sprite = RPG::Sprite.new @_name_sprite.x = self.x - 70 @_name_sprite.y = self.y - @ch * 2 end @_name_sprite.visible = $game_system.show_names_icons @_name_sprite.bitmap.dispose if @_name_sprite.bitmap @_name_sprite.bitmap = bitmap = Bitmap.new(140, 52) bitmap.font.name = font ? font : "Arial" bitmap.font.size = fontsize ? fontsize : 18 bitmap.font.bold = @character.event_name_font_bold bitmap.font.italic = @character.event_name_font_italic bitmap.font.color.set(60, 60, 0) name = names.shift color = colors.shift if names.size == 2 unless fontsize and fontsize > 11 bitmap.draw_text(-1, 11, 140, 22, name, 1) bitmap.draw_text(+1, 11, 140, 22, name, 1) end bitmap.draw_text(-1, 13, 140, 22, name, 1) bitmap.draw_text(+1, 13, 140, 22, name, 1) bitmap.font.color = KEvents::COLORS[color] bitmap.draw_text(0, 12, 140, 22, name, 1) name = names.shift color = colors.shift end bitmap.font.color.set(60, 60, 0) unless fontsize and fontsize > 11 bitmap.draw_text(-1, 11, 140, 48, name, 1) bitmap.draw_text(+1, 11, 140, 48, name, 1) end bitmap.draw_text(-1, 13, 140, 48, name, 1) bitmap.draw_text(+1, 13, 140, 48, name, 1) color = 0 if color == nil bitmap.font.color = KEvents::COLORS[color] bitmap.draw_text(0, 12, 140, 48, name, 1) end def dispose_event_name return unless @_name_sprite @_name_sprite.bitmap.dispose @_name_sprite.dispose @_name_sprite = nil end def make_icon return dispose_icon unless @character.event_icon @_icon_sprite.bitmap.dispose if @_icon_sprite @_icon_sprite = RPG::Sprite.new @_icon_sprite.visible = $game_system.show_names_icons @_icon_sprite.bitmap = bit = RPG::Cache.icon(@character.event_icon).dup place_icon end def place_icon @_icon_sprite.x = self.x - (@_icon_sprite.bitmap.width == 24 ? 13 : 16) icon_y = @_icon_sprite.bitmap.height == 24 ? 12 : 20 ih = @_name_sprite ? @ch * 2 : @ch + 8 @_icon_sprite.y = self.y - icon_y - ih end def dispose_icon return unless @_icon_sprite @_icon_sprite.bitmap.dispose @_icon_sprite.dispose @_icon_sprite = nil end def dispose dispose_event_name dispose_icon kyon_kevents_sprite_char_dispose end end class Scene_Title alias kyon_kevents_scn_title_cng command_new_game def command_new_game KEvents.map_icons.clear kyon_kevents_scn_title_cng end end class Scene_Map alias kyon_kevents_scn_map_main main alias kyon_kevents_scn_map_call_battle call_battle alias kyon_kevents_scn_map_call_shop call_shop alias kyon_kevents_scn_map_call_name call_name alias kyon_kevents_scn_map_call_menu call_menu alias kyon_kevents_scn_map_call_save call_save def main if KEvents.refresh $game_map.setup_event_sprites KEvents.refresh = nil end kyon_kevents_scn_map_main KEvents.refresh = true unless $scene == nil end def call_battle KEvents.refresh = true kyon_kevents_scn_map_call_battle end def call_shop KEvents.refresh = true kyon_kevents_scn_map_call_shop end def call_name KEvents.refresh = true kyon_kevents_scn_map_call_name end def call_menu KEvents.refresh = true kyon_kevents_scn_map_call_menu end def call_save KEvents.refresh = true kyon_kevents_scn_map_call_save end def transfer_player $game_temp.player_transferring = false if (new_map = $game_map.map_id != $game_temp.player_new_map_id) $game_map.setup($game_temp.player_new_map_id) end $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y) case $game_temp.player_new_direction when 2 then $game_player.turn_down when 4 then $game_player.turn_left when 6 then $game_player.turn_right when 8 then $game_player.turn_up end $game_player.straighten $game_map.update @spriteset.dispose @spriteset = Spriteset_Map.new $game_map.setup_event_sprites unless new_map if $game_temp.transition_processing $game_temp.transition_processing = false Graphics.transition(20) end $game_map.autoplay Graphics.frame_reset Input.update end end class Scene_Load alias kyon_kevents_scn_load_rsd read_save_data def read_save_data(file) kyon_kevents_scn_load_rsd(file) $game_map.setup_event_sprites end end