[script link recovery] XS - Interactive Icon

● ARCHIVED · READ-ONLY
Started by tvghost 2 posts View original ↗
  1. Spoiler
    Code:
    #==============================================================================
    #   XaiL System - Core
    #   Author: Nicke
    #   Created: 07/01/2012
    #   Edited: 08/10/2013
    #   Version: 2.1f
    #==============================================================================
    # Instructions
    # -----------------------------------------------------------------------------
    # To install this script, open up your script editor and copy/paste this script
    # to an open slot below ? Materials but above ? Main. Remember to save.
    #
    # Core script for XaiL System.
    # Caution! This needs to be located before any other XS scripts.
    #
    # *** Only for RPG Maker VX Ace. ***
    #==============================================================================
    ($imported ||= {})["XAIL-XS-CORE"] = true
    
    module Colors
      #--------------------------------------------------------------------------#
      # * Colors
      #--------------------------------------------------------------------------#
      White = Color.new(255,255,255)
      LightRed = Color.new(255,150,150)
      LightGreen = Color.new(150,255,150)
      LightBlue = Color.new(150,150,255)
      DarkYellow = Color.new(225,225,20)
      Alpha = Color.new(0,0,0,128)
      AlphaMenu = 100
    end
    module XAIL
      module CORE
      #--------------------------------------------------------------------------#
      # * Settings
      #--------------------------------------------------------------------------#
      # Graphics.resize_screen(width, height )
      Graphics.resize_screen(544,416)
     
      # FONT DEFAULTS:
      Font.default_name = ["VL Gothic"]
      Font.default_size = 20
      Font.default_bold = false
      Font.default_italic = false
      Font.default_shadow = true
      Font.default_outline = true
      Font.default_color = Colors::White
      Font.default_out_color = Colors::Alpha
     
      # USE_TONE = true/false:
      # Window tone for all windows ingame. Default: true.
      USE_TONE = false
     
      # SAVE
      SAVE_MAX = 20       # Default 16.
      SAVE_FILE_VIS = 4   # Default 4.
     
      # JAPANESE = true/false
      JAPANESE = false
     
      end
    end
    # *** Don't edit below unless you know what you are doing. ***
    #==============================================================================#
    # ** Game_System
    #==============================================================================#
    class Game_System
     
      # // Method to determine japanese game.
      def japanese? ; return XAIL::CORE::JAPANESE ; end
     
    end
    #==============================================================================#
    # ** String
    #==============================================================================#
    class String
     
      def to_class(parent = Kernel)
       # // Method to convert string to class.
       chain = self.split "::"
       klass = parent.const_get chain.shift
       return chain.size < 1 ? (klass.is_a?(Class) ? klass : nil) : chain.join("::").to_class(klass)
       rescue
       nil
      end
     
      def cap_words
       # // Method to capitalize every word.
       self.split(' ').map {|w| w.capitalize }.join(' ')
      end
     
      def slice_char(char)
       # // Method to slice char.
       self.split(char).map {|w| w.sub(char, " ") }.join(" ")
      end
    
    end
    #==============================================================================#
    # ** Vocab
    #==============================================================================#
    class << Vocab
     
      def xparam(id)
       # // Method to return xparam name.
       case id
       when 0 ; "Hit Chance"
       when 1 ; "Evasion"
       when 2 ; "Critical Chance"
       when 3 ; "Critical Evasion"
       when 4 ; "Magic Evasion"
       when 5 ; "Magic Reflection"
       when 6 ; "Counter Attack"
       when 7 ; "HP Regeneration"
       when 8 ; "MP Regeneration"
       when 9 ; "TP Regeneration"
       end
      end
     
    end
    #==============================================================================
    # ** Sound
    #==============================================================================
    class << Sound
     
      def play(name, volume, pitch, type = :se)
       # // Method to play a sound. If specified name isn't valid throw an error.
       case type
       when :se   ; RPG::SE.new(name, volume, pitch).play rescue valid?(name)
       when :me   ; RPG::ME.new(name, volume, pitch).play rescue valid?(name)
       when :bgm  ; RPG::BGM.new(name, volume, pitch).play rescue valid?(name)
       when :bgs  ; RPG::BGS.new(name, volume, pitch).play rescue valid?(name)
       end
      end
     
      def valid?(name)
       # // Method to raise error if specified sound name is invalid.
       msgbox("Error. Unable to find sound file: " + name)
       exit
      end
     
    end
    #==============================================================================
    # ** DataManager
    #==============================================================================
    class << DataManager
    
      def savefile_max
       # // Method override, save file max.
       return XAIL::CORE::SAVE_MAX
      end
     
    end
    #==============================================================================
    # ** SceneManager
    #==============================================================================
    class << SceneManager
     
      def call_ext(scene_class, args = nil)
       # // Method to call a scene with arguments.
       @stack.push(@scene)
       @scene = scene_class.new(args)
      end
     
    end
    #==============================================================================
    # ** Scene_File
    #==============================================================================
    class Scene_File < Scene_MenuBase
     
      def visible_max
       # // Method override, visible_max for save files.
       return XAIL::CORE::SAVE_FILE_VIS
      end
     
    end
    #==============================================================================
    # ** Window_Base
    #------------------------------------------------------------------------------
    # Importing font fix that will remove weird characters.
    # Adding new methods such as new gauge, actor param, font text, icon drawing,
    # big icon drawing and a line with a shadow.
    #==============================================================================
    class Window_Base < Window
     
      # // Importing Custom font fix. (Credit Lone Wolf).
      alias :process_normal_character_vxa :process_normal_character
      def process_normal_character(c, pos)
       return unless c >= ' '
       process_normal_character_vxa(c, pos)
      end unless method_defined? :process_normal_character
     
      def draw_text_ex_no_reset(x, y, text)
       # // Method to draw ex text without resetting the font.
       text = convert_escape_characters(text)
       pos = {:x => x, :y => y, :new_x => x, :height => calc_line_height(text)}
       process_character(text.slice!(0, 1), text, pos) until text.empty?
      end
     
      alias xail_core_winbase_upt_tone update_tone
      def update_tone(*args, &block)
       # // Method to change tone of the window.
       return unless XAIL::CORE::USE_TONE
       xail_core_winbase_upt_tone(*args, &block)
      end
     
      def draw_gauge_ex(x, y, width, height, rate, color1, color2)
       # // Method to draw a gauge.
       fill_w = (width * rate).to_i
       gauge_y = y + line_height - 8
       contents.fill_rect(x, gauge_y, width + 1, height + 1, Color.new(255,255,255,64))
       contents.fill_rect(x, gauge_y, width, height, Color.new(0,0,0,100))
       contents.gradient_fill_rect(x, gauge_y, fill_w, height, color1, color2)
      end
     
      def draw_actor_param_gauge(actor, x, y, width, param_id, font, size, bar_color1, bar_color2, txt_color1, txt_color2)
       # // Method to draw actor parameters with a gauge.
       case param_id
       when 2 ; param_rate = actor.param(2) / actor.param_max(2).to_f
       when 3 ; param_rate = actor.param(3) / actor.param_max(3).to_f
       when 4 ; param_rate = actor.param(4) / actor.param_max(4).to_f
       when 5 ; param_rate = actor.param(5) / actor.param_max(5).to_f
       when 6 ; param_rate = actor.param(6) / actor.param_max(6).to_f
       when 7 ; param_rate = actor.param(7) / actor.param_max(7).to_f
       end
       contents.font.name = font
       contents.font.size = size
       contents.font.bold = true
       contents.font.shadow = false
       draw_gauge_ex(x, y - 14, width, 20, param_rate, bar_color1, bar_color2)
       contents.font.color = txt_color1
       draw_text(x + 10, y, 120, line_height, Vocab::param(param_id))
       contents.font.color = txt_color2
       draw_text(x + width - 38, y, 36, line_height, actor.param(param_id), 2)
       reset_font_settings
      end
     
      def draw_actor_xparam_gauge(actor, x, y, width, xparam_id, font, size, bar_color1, bar_color2, txt_color1, txt_color2)
       # // Method to draw actor xparameters with a gauge.
       case xparam_id
       when 0
         xparam_rate = actor.xparam(0) / 100.to_f
         xparam_name = Vocab.xparam(0)
       when 1
         xparam_rate = actor.xparam(1) / 100.to_f
         xparam_name = Vocab.xparam(1)
       when 2
         xparam_rate = actor.xparam(2) / 100.to_f
         xparam_name = Vocab.xparam(2)
       when 3
         xparam_rate = actor.xparam(3) / 100.to_f
         xparam_name = Vocab.xparam(3)
       when 4
         xparam_rate = actor.xparam(4) / 100.to_f
         xparam_name = Vocab.xparam(4)
       when 5
         xparam_rate = actor.xparam(5) / 100.to_f
         xparam_name = Vocab.xparam(5)
       when 6
         xparam_rate = actor.xparam(6) / 100.to_f
         xparam_name = Vocab.xparam(6)
       when 7
         xparam_rate = actor.xparam(7) / 100.to_f
         xparam_name = Vocab.xparam(7)
       when 8
         xparam_rate = actor.xparam(8) / 100.to_f
         xparam_name = Vocab.xparam(8)
       when 9
         xparam_rate = actor.xparam(9) / 100.to_f
         xparam_name = Vocab.xparam(9)
       end
       contents.font.name = font
       contents.font.size = size
       contents.font.bold = true
       contents.font.shadow = false
       draw_gauge_ex(x, y - 14, width, 20, xparam_rate, bar_color1, bar_color2)
       contents.font.color = txt_color1
       draw_text(x + 10, y, 120, line_height, xparam_name)
       contents.font.color = txt_color2
       draw_text(x + width - 38, y, 36, line_height, "#{actor.xparam(xparam_id)}%", 2)
       reset_font_settings
      end
     
      def draw_line_ex(x, y, color, shadow)
       # // Method to draw a horizontal line with a shadow.
       line_y = y + line_height / 2 - 1
       contents.fill_rect(x, line_y, contents_width, 2, color)
       line_y += 1
       contents.fill_rect(x, line_y, contents_width, 2, shadow)
      end
     
      def draw_box(x, y, width, height, color, shadow)
       # // Method to draw a box with shadow.
       contents.fill_rect(x, y, width, height, color)
       x += 1
       y += 1
       contents.fill_rect(x, y, width, height, shadow)
      end
     
      def draw_vertical_line_ex(x, y, color, shadow)
       # // Method to draw a vertical line with a shadow.
       line_x = x + line_height / 2 - 1
       contents.fill_rect(line_x, y, 2, contents_height, color)
       line_x += 1
       contents.fill_rect(line_x, y, 2, contents_height, shadow)
      end
     
      def draw_icons(icons, alignment, x = 0, y = 0, offset_icon = [])
       # // Method to draw icons in a horizonal or vertical alignment.
       icons.each {|icon|
         next if icon.nil?
         # // If included in offset do extra spacing.
         offset_icon.each {|offset|
           if icon == offset
             y += line_height * 1 if alignment == :vertical
             x += line_height * 1 if alignment == :horizontal
           end
         }
         draw_icon(icon.nil? ? nil : icon, x.nil? ? 0 : x, y.nil? ? 0 : y) rescue nil
         y += line_height if alignment == :vertical
         x += line_height if alignment == :horizontal
       }
      end
     
      def draw_big_icon(icon, x, y, width, height, opacity = 255)
       # // Method to draw a big icon.
       bitmap = Cache.system("Iconset")
       rect = Rect.new(icon % 16 * 24, icon / 16 * 24, 24, 24)
       rect2 = Rect.new(x, y, width, height)
       contents.stretch_blt(rect2, bitmap, rect, opacity)
      end
     
      def draw_font_text(text, x, y, width, alignment, font, size, color, bold = true, shadow = true)
       # // Method to draw font text.
       contents.font.name = font
       contents.font.size = size
       contents.font.color = color
       contents.font.bold = bold
       contents.font.shadow = shadow
       contents.font.out_color = Color.new(0,0,0,255)
       draw_text(x, y, width, calc_line_height(text), text, alignment)
       reset_font_settings
      end
     
      def draw_font_text_ex(text, x, y, font, size, color, bold = true, shadow = true)
       # // Method to draw font text ex.
       contents.font.name = font
       contents.font.size = size
       contents.font.color = color
       contents.font.bold = bold
       contents.font.shadow = shadow
       contents.font.out_color = Color.new(0,0,0,255)
       text = convert_escape_characters(text)
       pos = {:x => x, :y => y, :new_x => x, :height => calc_line_height(text)}
       process_character(text.slice!(0, 1), text, pos) until text.empty?
       reset_font_settings
      end
     
    end
    #==============================================================================#
    # ** Window_Selectable
    #------------------------------------------------------------------------------
    #  Adding support for pageleft and pageright for window selectable.
    #==============================================================================#
    class Window_Selectable < Window_Base
     
      def cursor_pageright ; end
      def cursor_pageleft ; end
    
      alias xail_core_winselect_process_cursor_move process_cursor_move
      def process_cursor_move(*args, &block)
       # // Method to process cursor movement.
       xail_core_winselect_process_cursor_move(*args, &block)
       cursor_pageright if !handle?(:pageright) && Input.trigger?(:RIGHT)
       cursor_pageright if !handle?(:pageleft) && Input.trigger?(:LEFT)
      end
     
      alias xail_core_winselect_process_handling process_handling
      def process_handling(*args, &block)
       # // Method to process handling.
       xail_core_winselect_process_handling(*args, &block)
       return process_pageright if handle?(:pageright) && Input.trigger?(:RIGHT)
       return process_pageleft if handle?(:pageleft) && Input.trigger?(:LEFT)
      end
       
      def process_pageright
       # // Method to process page right.
       Sound.play_cursor
       Input.update
       deactivate
       call_handler(:pageright)
      end
     
      def process_pageleft
       # // Method to process page left.
       Sound.play_cursor
       Input.update
       deactivate
       call_handler(:pageleft)
      end
     
    end
    #==============================================================================#
    # ** Window_Icon
    #------------------------------------------------------------------------------
    #  New Window :: Window_Icon - A window for drawing icon(s).
    #==============================================================================#
    class Window_Icon < Window_Base
     
      attr_accessor :enabled
      attr_accessor :alignment
     
      def initialize(x, y, window_width, hsize)
       # // Method to initialize the icon window.
       super(0, 0, window_width, window_height(hsize))
       @icons = []
       @index = 0
       @enabled = true
       @alignment = 0
       refresh
      end
     
      def window_height(hsize)
       # // Method to return the height.
       fitting_height(hsize)
      end
     
      def refresh
       # // Method to refresh the icon window.
       contents.clear
      end
     
      def draw_cmd_icons(icons, index)
       # // Draw all of the icons.
       return if !@enabled
       count = 0
       for i in icons
         align = 0
         x = 110
         next if i[index].nil?
         case @alignment
         when 1, 2 ; align = -110
         end
         draw_icon(i[index], x + align, 24 * count)
         count += 1
         break if (24 * count > height - 24)
       end
      end
     
    end
    #==============================================================================
    # ** Game_Party
    #------------------------------------------------------------------------------
    # Adding check item method to return a item based on the type.
    #==============================================================================
    class Game_Party < Game_Unit
     
      def check_item?(item, type)
       # // Method to return a item based on the type.
       case type
       when :items    ; $data_items[item]
       when :weapons  ; $data_weapons[item]
       when :armors   ; $data_armors[item]
       when :gold     ; item
       when :exp      ; item
       end
      end
    
    end
    #==============================================================================
    # ** Game_Event
    #------------------------------------------------------------------------------
    # Adding methods to check for comments on events.
    #==============================================================================
    class Game_Event < Game_Character
     
      def comment?(comment)
       # // Method to check if comment is included in event.
       unless empty? or @list.nil?
         for evt in @list
           if evt.code == 108 or evt.code == 408
             if evt.parameters[0].include?(comment)
               return true
             end
           end
         end
       end
       return false
      end
     
      def comment_int?(comment)
       # // Method to check for a integer in event.
       unless empty? or @list.nil?
         for evt in @list
           if evt.code == 108 or evt.code == 408
             if evt.parameters[0] =~ /<#{comment}:[ ]?(\d*)>?/
               return ($1.to_i > 0 ? $1.to_i : 0)
             end
           end
         end
       end
      end
     
      def comment_string?(comment)
       # // Method to check for a string in event.
       unless empty? or @list.nil?
         for evt in @list
           if evt.code == 108 or evt.code == 408
             if evt.parameters[0] =~ /<#{comment}:[ ]?(\w*)>?/
               return $1.to_s
             end
           end
         end
       end
      end
    
    
    end # END OF FILE
    
    #=*==========================================================================*=#
    # ** END OF FILE
    #=*==========================================================================*=#

    Spoiler
    Code:
    #==============================================================================
    #   XaiL System - Interactive Icons
    #   Author: Nicke
    #   Created: 29/11/2012
    #   Edited: 29/01/2013
    #   Version: 1.0c
    #==============================================================================
    # Instructions
    # -----------------------------------------------------------------------------
    # To install this script, open up your script editor and copy/paste this script
    # to an open slot below ? Materials but above ? Main. Remember to save.
    #
    # Interactive Icons. Setup a icon on a event by doing the following comment
    # inside a event page:
    # <CHARACTER_ICON: n>
    #
    # Example:
    # <CHARACTER_ICON: 25> # Set the event to use icon 25. (25 is the icon_index).
    #
    # Script can be enabled/disabled using a switch and you can also change the
    # animation below in the settings.
    #
    # *** Only for RPG Maker VX Ace. ***
    #==============================================================================
    ($imported ||= {})["XAIL-INT-ICONS"] = true
    
    module XAIL
      module INT_ICONS
      #--------------------------------------------------------------------------#
      # * Settings
      #--------------------------------------------------------------------------#
       # Set the initial default values for every icon sprite.
       # ICON_SPRITE = [ox, oy, z]
       ICON_SPRITE = [12, 34, 200]
       
       # Switch to enable/disable the script.
       # SWITCH = switch_id
       SWITCH = 1
       
       # Control the icon animation here.
       # ANIMATION = [enabled, speed, delay]
       ANIMATION = [true, 7, 60]
    
      end
    end
    # *** Don't edit below unless you know what you are doing. ***
    #==============================================================================#
    # ** Error Handler
    #==============================================================================#
      unless $imported["XAIL-XS-CORE"]
       # // Error handler when XS - Core is not installed.
       msg = "The script %s requires the latest version of XS - Core in order to function properly."
       name = "XS - Interactive Icons"
       msgbox(sprintf(msg, name))
       exit
      end
    #==============================================================================
    # ** Sprite_Character
    #==============================================================================
    class Sprite_Character < Sprite_Base
    
      alias xail_int_icons_spr_char_init initialize
      def initialize(viewport, character = nil)
       # // Method to initialize sprite character.
       # // Define animation delay variable.
       @anim_speed = XAIL::INT_ICONS::ANIMATION[1]
       @anim_delay = XAIL::INT_ICONS::ANIMATION[2]
       @icon_index = 0
       xail_int_icons_spr_char_init(viewport, character)
      end
     
      def draw_character_icon(icon_index)
       # // Method to draw character icon.
       # // First dispose icon if it exists then create a new instance of it.
       dispose_icon
       @icon_sprite = ::Sprite.new(viewport)
       @icon_sprite.bitmap = Cache.system("Iconset")
       @icon_sprite.src_rect = rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
       @icon_sprite.ox = XAIL::INT_ICONS::ICON_SPRITE[0]
       @icon_sprite.oy = XAIL::INT_ICONS::ICON_SPRITE[1]
       @icon_sprite.z = XAIL::INT_ICONS::ICON_SPRITE[2]
       @icon_sprite.bitmap.blt(@icon_sprite.x, @icon_sprite.y, @icon_sprite.bitmap, @icon_sprite.src_rect, 255)
       update_icon
      end
     
      def icon?
       # // Check if character icon is available and no transparency used.
       @character.icon and !@character.transparent
      end
    
      alias xail_int_icons_spr_char_upd update
      def update(*args, &block)
       # // Method to update sprite character.
       # // Update routine for the character icons and animation part.
       xail_int_icons_spr_char_upd(*args, &block)
       # // Check if icon should be displayed.
       if $game_switches[XAIL::INT_ICONS::SWITCH]
         # // Update icon sprite.
         update_icon
         # // Do animation based on speed and delay.
         update_icon_animation if XAIL::INT_ICONS::ANIMATION[0]
       else
         dispose_icon
       end
      end
     
      def update_icon
       # // Method to update character icon.
       return dispose_icon unless icon?
       if icon?
         # // Dispose and return if character opacity is equal to 0.
         return dispose_icon if @character.opacity == 0
         # // Draw the character icon based on the icon index.
         draw_character_icon(@character.icon_index) unless @icon_sprite
         # // Dispose icon and redraw it if icon index is changed.
         if @icon_index != @character.icon_index
           @icon_index = @character.icon_index
           dispose_icon
           draw_character_icon(@character.icon_index) unless @icon_sprite
         end
         # // Define icon sprite variables.
         @icon_sprite.x = x
         @icon_sprite.y = y - @icon_sprite.height
         @icon_sprite.z = z + 1
       end
      end
     
      def update_icon_animation
       # // Method to do icon animation. (fading)
       # // Do delay animation.
       if @anim_delay >= 0
         @anim_delay -= 1
       else
         # // Else do animation for icon and reset delay.
         if icon?
           @icon_sprite.opacity -= @anim_speed
           if @icon_sprite.opacity == 0 or @icon_sprite.opacity == 255
             @anim_speed *= -1
             @anim_delay = XAIL::INT_ICONS::ANIMATION[2]
           end
         end
       end
      end
     
      alias xail_int_icons_spr_chr_dispose dispose
      def dispose
       # // Method to dispose sprite chracter.
       # // Dispose the icon.
       dispose_icon
       xail_int_icons_spr_chr_dispose
      end
    
      def dispose_icon
       # // Method to dispose character icon.
       # // Dispose the icon unless it is nil, set the variable to nil afterwards.
       @icon_sprite.dispose unless @icon_sprite.nil?
       @icon_sprite = nil
      end
       
    end
    #==============================================================================
    # ** Game_CharacterBase
    #==============================================================================
    class Game_CharacterBase
     
      attr_accessor :icon, :icon_index
    
      alias xail_int_icons_gm_char_init_public_members init_public_members
      def init_public_members(*args, &block)
       # // Method to init public members.
       xail_int_icons_gm_char_init_public_members(*args, &block)
       @icon = false
       @icon_index = 0
      end
     
    end
    #==============================================================================
    # ** Game_Event
    #==============================================================================
    class Game_Event < Game_Character
     
      alias xail_int_icons_gm_evt_setup_page_settings setup_page_settings
      def setup_page_settings(*args, &block)
       # // Method to setup page settings for the event.
       xail_int_icons_gm_evt_setup_page_settings(*args, &block)
       # // Check comment if it includes character icon index.
       icon = comment_int?("CHARACTER_ICON")
       # // If results is a integer create icon.
       if icon.is_a?(Integer) and !icon.nil?
         @icon = true
         @icon_index = icon
       end
      end
     
      alias xail_int_icons_gm_evt_clear_page_settings clear_page_settings
      def clear_page_settings(*args, &block)
       # // Method to clear page settings for the event.
       xail_int_icons_gm_evt_clear_page_settings(*args, &block)
       @icon, @icon_index = false, 0
      end
       
    end # END OF FILE
    
    #=*==========================================================================*=#
    # ** END OF FILE
    #=*==========================================================================*=#