Últimos temas
» Tileset de Sangre [VX/ACE]
por Santi_Lee Hoy a las 5:25 pm

» Pack 300 Charas: Game Character Hub Second Story (VX ACE)
por TRaFuGa Hoy a las 11:41 am

» Ayuda, ¿Como hago que la imagen del fondo del menú cambie en un determinado momento?
por Muzgar Hoy a las 11:18 am

» [Plugin MV] Curar al subir nivel
por Muzgar Hoy a las 11:06 am

» Concurso de relatos - Diciembre 2019
por Lenny Hoy a las 10:48 am

» LA BRÚJULA DE ZAZA [VXACE]
por Pocari Dom Dic 08, 2019 3:01 pm

» [MV] Story: Sombras en llamas 0.2.5
por Vesper Mar Dic 03, 2019 12:05 pm

» Dudas básicas: Crear habitaciones y añadir elementos...
por TRaFuGa Mar Dic 03, 2019 4:55 am

» [Publicidad] Story Sombras en llamas [beta]
por Muzgar Lun Dic 02, 2019 7:25 pm

» KPocket VX
por kyonides Dom Dic 01, 2019 10:43 pm

» KPocket XP
por kyonides Dom Dic 01, 2019 10:40 pm

» Pokemon Destiny
por Greninja555 Dom Dic 01, 2019 4:09 pm


KSkillTypes XP

Ir abajo

KSkillTypes XP Empty KSkillTypes XP

Mensaje por kyonides el Jue Nov 28, 2019 5:50 pm

KSkillTypes XP


por Kyonides Arkanthes


Introducción

El siguiente script es una sobreescritura del menú de técnicas alias skills. Su objetivo es mostrar la misma información del original más un par de detalles como poder de la técnica y un battler para probarla en él. Este battler cambiará si la técnica sirve para ayudar a los aliados o los enemigos.


Necesitarán colocar recursos en las carpetas Icons, Pictures y Titles, además de crear etiquetas extras de Elementos en la sección de Sistema de la base de datos. (Era más cómodo que hacerlo en el script.)

¿Para qué sirven esas etiquetas? Su propósito es el de permitirle al script que determine cuántas secciones tendrá el menú de técnicas y así se pueda elegir las técnicas correspondientes a dicha sección o categoría.


NO espero que sea compatible con ningún otro menú de técnicas.

KSkillTypes XP Kskilltypesxp03

El Script para XP
Código:
# * KSkillTypes XP Hit Version
#   Scripter : Kyonides Arkanthes
#   v1.0.2 - 2019-11-27

# Este script le permite al jugador ver el menú de técnicas de otra forma.
# Podrá obtener la información usual y ver una animación de la técnica mientras
# esta le da a un héroe o monstruo, una vez que ya hayan escogido una categoría
# y cualquier técnica disponible allí.

# Deberán crear elementos extras en la pestaña Sistema de la base de datos.

module KSkillTypes
  BACKDROP = 'magical place' # Colocado en Graphics/Titles
  TITLE_STRIPE_BACKDROP = 'strip'
  TEST_BATTLER_ID = 1 # ID Enemigo que se usará como objetivo
  TEST_BATTLER_Y = 216 # Coordenada Y del Objetivo a ser golpeado
  SKILL_MENU_INDEX = 1 # Posición de la opción que abre este Menú menos 1
  FIRST_ID = 17 # ID del Primer Elemento usado como categoría por el script
  # Nombres de Archivos de Iconos & Dibujos alias Pictures
  ICONS = ['gem citrinus', 'physical', 'gem pale', 'gem dark',
    'gem ruby', 'gem emerald']
  DESCRIPTIONS = [ # 1 por cada Elemento extra
    'Select a category',
    'Strength is the way of the fighter!',
    'Because health does matter!',
    'Patience is just for fools!',
    'Blood is a valuable resouce!',
    'Nature is your friend!'
  ]
  SCOPES = [ # 1 por cada Rango de Técnica
    'Nadie',
    '1 Enemigo',
    'Enemigos',
    '1 Aliado',
    'Aliados',
    'Aliado Muerto',
    'Aliados Muertos',
    'Solo Usuario'
  ]
  ALLY_SCOPES = [3,4,5,6,7]
  NO_STATE = "Normal"
  LABELS = {} # Ignoren esta línea
  LABELS[:title] = 'Datos de la Técnica'
  LABELS[:no_skill] = 'No se hallaron datos'
  LABELS[:cost] = 'Maná'
  LABELS[:power] = 'Poder'
  LABELS[:scope] = 'Rango'
  # Fin de Configuración #
  class << self
    def label() @elements[@index] end
    def type_id() FIRST_ID + @index end
    def description() DESCRIPTIONS[@index] end
    def get_scope(skill_scope) SCOPES[skill_scope] end
    attr_accessor :index
  end
  @elements = load_data('Data/System.rxdata').elements[FIRST_ID..-1]
  @index = 0
end

unless $HIDDENCHEST

module Graphics
  def self.width() 640 end
  def self.height() 480 end
end

end

class Window_Help
  def initialize
    super(0, 0, Graphics.width, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
  end
end

class Window_Skill
  def initialize(actor)
    if (in_battle = $game_temp.in_battle)
      ny = 64
      nh = 256
    else
      ny = 96
      nh = Graphics.height - ny
    end
    super(0, ny, 220, nh)
    @data = []
    @actor = actor
    skills = @actor.skills
    skills.each{|n| @data << $data_skills[n] }
    @general_data = @data.dup
    refresh
    self.index = 0
    self.back_opacity = in_battle ? 160 : 0
    self.opacity = 0 unless in_battle
  end

  def no_contents!
    return unless self.contents
    self.contents.dispose
    self.contents = nil
  end

  def refresh
    no_contents!
    @data = @general_data
    if KSkillTypes.index > 0
      tid = KSkillTypes.type_id
      @data = @data.select{|s| s.element_set.include?(tid) }
    end
    @item_max = @data.size
    return if @item_max == 0
    self.contents = Bitmap.new(width - 32, row_max * 32)
    @bitmap = self.contents
    @item_max.times{|i| draw_item(i) }
  end

  def draw_item(index)
    skill = @data[index]
    can_use =  @actor.skill_can_use?(skill.id)
    @bitmap.font.color = can_use ? normal_color : disabled_color
    by = index * 32
    rect = Rect.new(4, by, self.width / @column_max - 32, 32)
    @bitmap.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(skill.icon_name)
    @bitmap.blt(4, by + 4, bitmap, Rect.new(0, 0, 24, 24), can_use ? 255 : 128)
    @bitmap.draw_text(32, by, 204, 32, skill.name, 0)
  end
  def item_id() @data[@index] ? @data[@index].id : nil end
end

class KSpriteset
  def basic_setup(nx, ny)
    @x = nx
    @y = ny
    @sprites = []
  end

  def dispose
    @sprites.each{|s| s.dispose }
    @sprites.clear
  end
  attr_reader :x, :y
end

class KIconSpriteset < KSpriteset
  def initialize(nx, ny, pictures)
    basic_setup(nx, ny)
    @pictures = []
    @icons = []
    @index = 0
    @max = pictures.size
    @max.times do |n|
      bit = RPG::Cache.picture(pictures[n])
      @pictures << sprite = Sprite.new
      h = bit.height
      w1 = bit.width
      this_x = @x - n * 6 + n * w1
      sprite.visible = false
      sprite.x = this_x
      sprite.y = @y
      sprite.bitmap = bit
      @icons << sprite = Sprite.new
      sprite.x = this_x + w1 / 2 - 12
      sprite.y = @y + h / 2 - 12
      sprite.bitmap = RPG::Cache.icon(pictures[n])
    end
    pic = @pictures[-1]
    @margin_right = pic.x + pic.bitmap.width
    update_cursor
    @sprites = @pictures + @icons
  end

  def update
    if Input.trigger?(Input::LEFT)
      update_icon
      @index = (@index - 1) % @max
      update_cursor
    elsif Input.trigger?(Input::RIGHT)
      update_icon
      @index = (@index + 1) % @max
      update_cursor
    end
  end

  def update_icon
    @pictures[@index].visible = false
    @icons[@index].visible = true
  end

  def update_cursor
    @pictures[@index].visible = true
    @icons[@index].visible = false
  end

  def dispose
    super
    @pictures.clear
    @icons.clear
  end
  attr_reader :index, :margin_right
end

class KLabelSpriteset < KSpriteset
  def initialize(nx, ny, nh, picture=nil)
    basic_setup(nx, ny)
    @offset_x = 0
    @width = Graphics.width - nx
    @height = nh
    @sprites << @backdrop = Sprite.new
    @backdrop.x = nx
    @backdrop.y = ny
    picture = '' unless picture
    @backdrop.bitmap = RPG::Cache.picture(picture)
    @backdrop.src_rect.set(0, 0, @width, @height)
    @sprites << @title = Sprite.new
    @title.x = nx
    @title.y = ny
    @title.bitmap = Bitmap.new(@width, @height)
    @font_size = @height - 8
    @white = Color.new(255, 255, 255)
    @red = Color.new(255, 64, 0)
    @yellow = Color.new(255, 255, 64)
  end

  def character=(new_char)
    @character = new_char
    refresh
  end

  def refresh
    set_label(8, 2, @width / 4, @character.name)
    font = @title.bitmap.font
    @states = @character.states
    text = @states.empty? ? KSkillTypes::NO_STATE : retrieve_state_name
    font.color = @red if @dead
    set_label(120, 2, 120, text)
    font.color = @yellow if (fourth = @character.hp <= @character.maxhp / 4)
    font.color = @white unless @dead or fourth
    hpx = 132 + @title.bitmap.text_size(text).width
    terms = $data_system.words
    set_label(hpx, 2, 32, terms.hp, 2)
    hpx += 36
    set_label(hpx, 2, 64, @character.hp.to_s, 2)
    set_label(hpx + 64, 2, 64, '/' + @character.maxhp.to_s)
    font.color = @white
    set_label(hpx + 132, 2, 32, terms.sp, 2)
    hpx += 168
    set_label(hpx, 2, 64, @character.sp.to_s, 2)
    set_label(hpx + 64, 2, 64, '/' + @character.maxsp.to_s)
  end

  def retrieve_state_name
    return "Knockout" if (@dead = @character.hp == 0)
    ratings = @states.map{|n| $data_states[n].rating }
    pos = ratings.index(ratings.max)
    $data_states[@states[pos]].name
  end

  def set_label(x, y, w, label, align=0)
    @title.bitmap.draw_text(x, y, w, @font_size, label, align)
  end

  def set_title(title, align=1)
    by = @height / 2 - @font_size / 2
    b = @title.bitmap
    b.clear
    b.font.size = @font_size
    b.draw_text(@offset_x, by, @width - @offset_x, @font_size, title, align)
  end
  def clear_text() @title.bitmap.clear end
  alias :set_text :set_title
  attr_reader :width, :height
  attr_writer :skill_window, :font_size, :offset_x
end

class KSkillStats < Sprite
  def initialize(w, h, new_skill)
    @skill_id = new_skill
    super(nil)
    self.bitmap = Bitmap.new(w, h)
    @white = Color.new(255, 255, 255)
    @black = Color.new(0, 0, 0)
    @dy = 38
    refresh
  end

  def skill_id=(new_id)
    @skill_id = new_id
    refresh
  end

  def refresh
    labels = KSkillTypes::LABELS
    bit = self.bitmap
    bit.clear
    bit.font.size = 26
    bit.draw_text(0, 0, bit.width, 26, labels[:title], 1)
    rect = Rect.new(8, 30, bit.width - 16, 4)
    bit.fill_rect(rect, @black)
    rect = Rect.new(9, 31, bit.width - 16, 2)
    bit.fill_rect(rect, @white)
    bit.font.size = 22
    return clear_no_skill unless @skill_id
    skill = $data_skills[@skill_id]
    bit.draw_text(0, @dy, 100, 24, labels[:cost])
    bit.draw_text(100, @dy, 96, 24, skill.sp_cost.to_s, 2)
    bit.draw_text(208, @dy, 100, 24, labels[:power])
    bit.draw_text(308, @dy, 96, 24, skill.power.to_s, 2)
    bit.draw_text(0, @dy + 26, 80, 24, labels[:scope])
    bit.draw_text(84, @dy + 26, 112, 24, KSkillTypes.get_scope(skill.scope), 2)
  end

  def clear_no_skill
    text = KSkillTypes::LABELS[:no_skill]
    bitmap.draw_text(0, @dy, bitmap.width, 24, text, 1)
  end
end

class Scene_Skill
  alias :kyon_scn_skill_up_skill :update_skill
  def main
    KSkillTypes.index = 0
    backdrop = KSkillTypes::TITLE_STRIPE_BACKDROP
    @start = true
    @actors = $game_party.actors
    @actor = @actors[@actor_index]
    @backdrop = Sprite.new
    @backdrop.y = 96
    @backdrop.bitmap = RPG::Cache.title(KSkillTypes::BACKDROP)
    @backdrop.src_rect.set(0, 0, Graphics.width, Graphics.height - 96)
    @name_sprite = KLabelSpriteset.new(0, 0, 40, backdrop)
    @help_sprite = KLabelSpriteset.new(0, 40, 28, backdrop)
    @help_sprite.font_size = 24
    @help_sprite.set_title(KSkillTypes.description, 1)
    @status_window = KLabelSpriteset.new(0, 68, 28, backdrop)
    @status_window.font_size = 24
    @status_window.character = @actor
    @skill_window = Window_Skill.new(@actor)
    @skill_window.active = false
    @skill_window.help_window = @help_sprite
    @skill_window.index = -1
    @help_sprite.skill_window = @skill_window
    @target_window = Window_Target.new
    @target_window.visible = false
    @target_window.active = false
    @icon_menu = KIconSpriteset.new(8, 4, KSkillTypes::ICONS)
    if @icon_menu.margin_right > Graphics.width / 3
      @name_sprite.offset_x = @icon_menu.margin_right + 12
    end
    @name_sprite.set_title(KSkillTypes.label, 0)
    @data_sprite = KSkillStats.new(408, 100, @actor.skills[0])
    @data_sprite.x = 228
    @data_sprite.y = 100
    @target_sprite = RPG::Sprite.new
    @target_sprite.y = KSkillTypes::TEST_BATTLER_Y
    @test_battler = $data_enemies[KSkillTypes::TEST_BATTLER_ID]
    name = @test_battler.battler_name
    @enemy_bitmap = RPG::Cache.battler(name, @test_battler.battler_hue)
    @actor_bitmap = RPG::Cache.battler(@actor.battler_name, @actor.battler_hue)
    @target_sprite.x = 228
    @target_sprite.opacity = 255
    Graphics.transition
    until $scene != self
      Graphics.update
      Input.update
      update
    end
    Graphics.freeze
    @actor_bitmap.dispose
    @enemy_bitmap.dispose
    @target_sprite.dispose
    @data_sprite.dispose
    @icon_menu.dispose
    @name_sprite.dispose
    @help_sprite.dispose
    @status_window.dispose
    @skill_window.dispose
    @target_window.dispose
    @backdrop.dispose
  end

  def set_target(skill_id)
    @data_sprite.skill_id = skill_id
    return unless skill_id
    skill = $data_skills[skill_id]
    ally_scope = KSkillTypes::ALLY_SCOPES.include?(skill.scope)
    if @last_result != ally_scope
      bitmap = ally_scope ? @actor_bitmap : @enemy_bitmap
      @tsx = 228 + (Graphics.width - 228 - bitmap.width) / 2
      @target_sprite.x = @tsx
      @target_sprite.bitmap = bitmap
      @last_result = ally_scope
    end
    anime = $data_animations[skill.animation2_id]
    @target_sprite.animation(anime, true)
  end

  def update
    @skill_window.update
    @target_window.update
    if @start
      return update_section
    elsif @skill_window.active
      return update_skill
    elsif @target_window.active
      update_target
    end
  end

  def update_section
    @icon_menu.update
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      return $scene = Scene_Menu.new(KSkillTypes::SKILL_MENU_INDEX)
    elsif Input.trigger?(Input::C)
      $game_system.se_play($data_system.decision_se)
      @skill_window.index = 0
      @skill_window.active = true
      set_target(@skill_window.item_id)
      return @start = nil
    elsif Input.trigger?(Input::UP)
      refresh_data
      return
    elsif Input.trigger?(Input::DOWN)
      refresh_data
      return
    elsif Input.trigger?(Input::L)
      $game_system.se_play($data_system.cursor_se)
      pos = (@actor_index - 1) % @actors.size
      $scene = Scene_Skill.new(pos)
      return
    elsif Input.trigger?(Input::R)
      $game_system.se_play($data_system.cursor_se)
      pos = (@actor_index + 1) % @actors.size
      $scene = Scene_Skill.new(pos)
    end
  end

  def refresh_data
    $game_system.se_play($data_system.cursor_se)
    KSkillTypes.index = @icon_menu.index
    @name_sprite.set_title(KSkillTypes.label, 0)
    @help_sprite.set_title(KSkillTypes.description)
    @skill_window.refresh
  end

  def update_skill
    @target_sprite.update
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @skill_window.index = -1
      @skill_window.active = false
      @help_sprite.set_title(KSkillTypes.description)
      return @start = true
    elsif Input.dir4 > 0
      set_target(@skill_window.item_id)
    end
    kyon_scn_skill_up_skill
  end
end

Sección de Descargas

Haz Clic Sobre Mí

Términos de Uso

Deberán incluir mi pseudónimo o apodo en los créditos de sus juegos y demos.
Gratuito para juegos o demos no comerciales.
Incluyan el URL o dirección de la página web o foro donde lo encontraron.

kyonides
PJ Secundario
PJ Secundario

Masculino
Costa Rica
RPG Maker : Xp
Mensajes : 127
Monedas : 338
Reputación : 4

Volver arriba Ir abajo

Volver arriba


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