RPG maker VX


Unirse al foro, es rápido y fácil

RPG maker VX
RPG maker VX
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.
Últimos temas
» Script de menu
por maxi Jue 04 Dic 2014, 1:44 pm

» Ayuda intro animado!!!
por maxi Miér 03 Dic 2014, 9:41 pm

» ayuda con este engin
por maxi Miér 03 Dic 2014, 8:42 am

» Hud de Vida 100% Personalizable - Engine Sencillo! Sin Scripts :)
por davidaikago Jue 20 Nov 2014, 10:58 am

» Ultimate parallax control by:GDS [ace]
por arellano Miér 08 Oct 2014, 8:28 pm

» Script Touhou (animated) Map name (v1.4)
por davidaikago Miér 08 Oct 2014, 2:09 pm

» tutorial puerta nueva
por davidaikago Miér 08 Oct 2014, 9:08 am

» cámara de fotos
por davidaikago Miér 08 Oct 2014, 9:05 am

» Imperial Action System II Demo
por davidaikago Miér 08 Oct 2014, 8:47 am

» VE Batalla animada [ACE]
por FhierusIV Jue 18 Sep 2014, 10:57 am

» Nuevo Reglamento del Foro [Vigente desde Septiembre 2014]
por maxi Miér 17 Sep 2014, 8:37 am

» MOG|Animated Title
por Souta21 Mar 09 Sep 2014, 7:24 pm

» Tutorial Engine - Cambiar Character al Equipar Objeto
por maxi Lun 21 Jul 2014, 10:19 am

» Script de climas
por gambasoxd Sáb 19 Jul 2014, 8:58 am

» Script de contraseña(codigo) para abrir un cofre
por rpgame Jue 03 Jul 2014, 6:03 pm

¿Quién está en línea?
En total hay 1 usuario en línea: 0 Registrados, 0 Ocultos y 1 Invitado

Ninguno

[ Ver toda la lista ]


El record de usuarios en línea fue de 117 durante el Mar 09 Ago 2011, 3:39 pm

Job Changer v1.0

2 participantes

Ir abajo

Job Changer v1.0 Empty Job Changer v1.0

Mensaje por ClubIce Jue 30 Sep 2010, 9:07 pm

Job Changer v1.0

Introducción:

Avanzado sistema de cambio de clasas, facil de usar.

Características: [/font]

  • Sistema independiente de experiencia para los niveles de las clases.
  • Cambia la clase de los miembros del equipo, por cualquiera de la base de datos
  • Al aumentar de nivel de clase, tambien aprendes sus respectivas habilidades
  • Si cambia la clase de un actor, tambien cambiaran sus habilidades
  • Intefaz para el jugardo para cambiar de clase.

Capturas de Pantalla:
[Tienes que estar registrado y conectado para ver esa imagen]
[Tienes que estar registrado y conectado para ver este vínculo]
[Tienes que estar registrado y conectado para ver esa imagen]
[Tienes que estar registrado y conectado para ver este vínculo]

[size=18]Instalación:

Pegar sobre el main

Instrucciones:
En la parte de arriba del Script.

Compatibilidad:
Ninguna incompatibilidad conocida.

Script:
Código:
#==============================================================================
# ** Prexus - Job Changer (v1.0)
# ** Traduzido por: NaRuToMaKeR * (al Portugues)
# ** Traducido por: ClubIce    * (al Español)
#------------------------------------------------------------------------------
#  Este sistema de "Cambio de Clase", fue hecha por Prexus.
#
#    Especiales:
#
#    * Puede cambiar la clase de héroe, que estan en la base de datos.
#    * La experiencia es totalmente de forma individual.
#    * Al aumento de los niveles de clases, también aprenden sus habilidades!
#    Ejemplo: Su clase es gay, sus habilidades son Rebolo y Guiño.
#    Cambian de clase, a Hombre, por lo que sus habilidades tambien serán
#    cambiadas a: Golpear y Patear!
#    * Nivel / EXP Se recuerda al cambiar de clase, o si cambia su clase,
#      su experiencia serán el mismo.
#    * Interfaz con el cambio de clase.
#
#  También incluye el método Window_Base (draw_seperator,) que es útil para
#  la hacer una línea de lujo para separar un área de una ventana de
#  otra, y la clase Window_Confirm. Una subclase de Window_Selectable Esto
#  crea una pequeña ventana de confimación. (Sí / No)
#
#  Para llamar a la inteface de cambio de interfas, utilice:
#  $scene = Scene_ClassChange.new
#  Para añadir más adelante un nivel de uso héroe individual:
#    <#Game_Actor>.class_level_up(ID of Class)
#    Ejemplo:
#    $game_party.members[0].class_level_up(2)
#  Tu eres en el nivel que, el héroe del equipo con la clase "soldado".
#==============================================================================

# Experiencia que se gana del enemigo
# Sintaxis: ID monstruo de la base de datos => EXP para las clases.
ENEMY_CLASS_EXP = {
  1 => 1,
  2 => 4
}
ENEMY_CLASS_EXP.default = -1 # No toque esta línea!

class Game_Actor < Game_Battler
  attr_accessor :class_exp
  attr_accessor :class_level
  #--------------------------------------------------------------------------
  alias prex_prof_g_actor_setup setup
  #--------------------------------------------------------------------------
  def setup(actor_id)
    prex_prof_g_actor_setup(actor_id)
    @class_exp = {}
    @class_exp.default = 0
    @class_level = {}
    @class_level.default = 1
    define_skills
  end
  #--------------------------------------------------------------------------
  def define_skills(id = nil)
    id = @class_id if id == nil
    @skills = []
    for i in $data_classes[id].learnings
      learn_skill(i.skill_id) if i.level <= @class_level[id]
    end
  end
  #--------------------------------------------------------------------------
  def class_change_exp(exp, id = nil, show = false)
    id = @class_id if id == nil
    last_level = @class_level[id]
    last_skills = skills
    @class_exp[id] = [[exp, 9999999].min, 0].max
    while @class_exp[id] >= @exp_list[@class_level[id]+1] and @exp_list[@class_level[id]+1] > 0
      class_level_up(id)
    end
    while @class_exp[id] < @exp_list[@class_level[id]]
      class_level_down(id)
    end
    if show and @class_level[id] > last_level
      display_class_level_up(skills - last_skills, id)
    end
  end
  #--------------------------------------------------------------------------
  def class_exp_s(id = nil)
    id = @class_id if id == nil
    return @exp_list[@class_level[id]+1] > 0 ? @class_exp[id] : "-------"
  end
  #--------------------------------------------------------------------------
  def next_class_exp_s(id = nil)
    id = @class_id if id == nil
    return @exp_list[@class_level[id]+1] > 0 ? @exp_list[@class_level[id]+1] : "-------"
  end
  #--------------------------------------------------------------------------
  def next_class_rest_exp_s(id = nil)
    id = @class_id if id == nil
    return @exp_list[@class_level[id]+1] > 0 ?
      (@exp_list[@class_level[id]+1] - @class_exp[id]) : "-------"
  end
  #--------------------------------------------------------------------------
  def class_level_up(id = nil, adjust = false)
    id = @class_id if id == nil
    @class_level[id] += 1
    @class_exp[id] = @exp_list[@class_level[id]]
    if adjust
      define_skills(id)
    else
      define_skills
    end
  end
  #--------------------------------------------------------------------------
  def class_level_down(id = nil, adjust = false)
    id = @class_id if id == nil
    @class_level[id] -= 1
    @class_exp[id] = @exp_list[@class_level[id]]
    if adjust
      define_skills(id)
    else
      define_skills
    end
  end
  #--------------------------------------------------------------------------
  def class_gain_exp(exp, id = nil, show = false)
    id = @class_id if id == nil
    if double_exp_gain
      class_change_exp(@class_exp[id] + exp * 2, id, show)
    else
      class_change_exp(@class_exp[id] + exp, id, show)
    end
  end
  #--------------------------------------------------------------------------
  def class_change_level(level, id = nil, show = false)
    id = @class_id if id == nil
    level = [[level, 99].min, 1].max
    class_change_exp(@exp_list[level], id, show)
  end
  #--------------------------------------------------------------------------
  def level_up
    @level += 1
  end
  #--------------------------------------------------------------------------
  def class_id=(class_id)
    @class_id = class_id
    for i in 0..4    # Remove unequippable items
      change_equip(i, nil) unless equippable?(equips[i])
    end
    define_skills
  end
  #--------------------------------------------------------------------------
  def display_class_level_up(new_skills, id)
    $game_message.new_page
    text = sprintf(Vocab::ClassLevelUp, @name, $data_classes[id].name, Vocab::level, @level)
    $game_message.texts.push(text)
    for skill in new_skills
      text = sprintf(Vocab::ObtainSkill, skill.name)
      $game_message.texts.push(text)
    end
  end
end

module Vocab
  ObtainClassExp      = "¡%s experiencia para clases fue recibida!"
  ClassLevelUp        = "¡%s ahora es %s %s %s!"
end

class Game_Troop < Game_Unit
  def class_exp_total
    exp = 0
    for enemy in dead_members
      next if enemy.hidden
      if ENEMY_CLASS_EXP[enemy.enemy.id] >= 0
        exp += ENEMY_CLASS_EXP[enemy.enemy.id]
      else
        exp += enemy.exp
      end
    end
    return exp
  end
end

class Scene_Battle < Scene_Base
  def display_exp_and_gold
    exp = $game_troop.exp_total
    gold = $game_troop.gold_total
    class_exp = $game_troop.class_exp_total
    $game_party.gain_gold(gold)
    text = sprintf(Vocab::Victory, $game_party.name)
    $game_message.texts.push('\|' + text)
    if exp > 0
      text = sprintf(Vocab::ObtainExp, exp)
      $game_message.texts.push('\.' + text)
    end
    if class_exp > 0
      text = sprintf(Vocab::ObtainClassExp, class_exp)
      $game_message.texts.push('\.' + text)
    end
    if gold > 0
      text = sprintf(Vocab::ObtainGold, gold, Vocab::gold)
      $game_message.texts.push('\.' + text)
    end
    wait_for_message
  end
  #--------------------------------------------------------------------------
  def display_level_up
    exp = $game_troop.exp_total
    class_exp = $game_troop.class_exp_total
    for actor in $game_party.existing_members
      last_level = actor.level
      last_skills = actor.skills
      actor.gain_exp(exp, true)
      actor.class_gain_exp(class_exp, nil, true)
    end
    wait_for_message
  end
end

class Scene_ClassChange < Scene_Base
  def start
    create_menu_background
    create_windows
  end
  #--------------------------------------------------------------------------
  def create_windows
    @party_window = Window_CurrentParty.new
    @class_window = Window_ClassPick.new(@party_window.member)
    @skill_window = Window_ClassSkills.new
    @show_window = Window_ShowSkills.new(@party_window.member)
    @help_window = Window_Help.new
    @help_window.visible = false
    @help_window.close
    @help_window.x = 48
    @help_window.y = 280
    @help_window.width = 448
    @help_window.create_contents
    @show_window.help_window = @help_window
    @confirm_window = Window_Confirm.new
  end
  #--------------------------------------------------------------------------
  def update_windows
    @party_window.update
    @class_window.update(@party_window.member)
    @skill_window.update
    @show_window.update
    @help_window.update
    @confirm_window.update
    if @party_window.active
      @skill_window.set(@party_window.member, nil)
    elsif @class_window.active
      @skill_window.set(@party_window.member, @class_window.item)
    end
  end
  #--------------------------------------------------------------------------
  def terminate
    super
    @party_window.dispose
    @class_window.dispose
    @skill_window.dispose
    @show_window.dispose
    @help_window.dispose
    @confirm_window.dispose
  end
  #--------------------------------------------------------------------------
  def update
    super
    update_windows
    update_input
  end
  #--------------------------------------------------------------------------
  def update_input
    if @party_window.active
      if Input.trigger?(Input::B)
        Sound.play_cancel
        $scene = Scene_Map.new
      elsif Input.trigger?(Input::C)
        Sound.play_decision
        @class_window.active = true
        @class_window.index = 0
        @party_window.active = false
      end
    elsif @class_window.active
      if Input.trigger?(Input::B)
        Sound.play_cancel
        @party_window.active = true
        @class_window.active = false
        @class_window.index = -1
      elsif Input.trigger?(Input::C)
        if @class_window.item.id == @class_window.member.class_id
          Sound.play_buzzer
          return
        end
        Sound.play_decision
        @confirm_window.visible = true
        @confirm_window.active = true
        @confirm_window.index = 0
        @confirm_window.open
        @class_window.active = false
      elsif Input.trigger?(Input::A)
        Sound.play_decision
        @show_window.set(@party_window.member, @class_window.item.id)
        @show_window.active = true
        @show_window.index = 0
        @show_window.open
        @help_window.visible = true
        @help_window.open
        @class_window.active = false
      end
    elsif @show_window.active
      if Input.trigger?(Input::B)
        Sound.play_cancel
        @class_window.active = true
        @show_window.active = false
        @show_window.index = -1
        @show_window.close
        @help_window.close
      end
    elsif @confirm_window.active
      if Input.trigger?(Input::B)
        Sound.play_cancel
        if @confirm_window.index == 1
          @confirm_window.active = false
          @confirm_window.index = -1
          @confirm_window.close
          @class_window.active = true
          return
        else
          @confirm_window.index = 1
          return
        end
      elsif Input.trigger?(Input::C)
        case @confirm_window.index
        when 0
          Sound.play_decision
          member = @class_window.member
          member.class_id = @class_window.item.id
          @confirm_window.active = false
          @confirm_window.index = -1
          @confirm_window.close
          @class_window.refresh
          @skill_window.refresh
          @class_window.active = true
        when 1
          @confirm_window.active = false
          @confirm_window.index = -1
          @confirm_window.close
          @class_window.active = true
          return
        end
      end
    end
  end
end

class Window_Base < Window
  def draw_seperator(x, y, width, height, color = Color.new(255, 255, 255))
    edge = (width / 4)
    self.contents.gradient_fill_rect(x, y, edge, height, Color.new(0, 0, 0, 0), color)
    self.contents.fill_rect(x + edge, y, width / 2, height, color)
    self.contents.gradient_fill_rect(x + width - edge, y, edge, height, color, Color.new(0, 0, 0, 0))
  end
end

class Window_CurrentParty < Window_Selectable
  def initialize
    super(48, 80, 256, 64)
    @item_max = 4
    @column_max = @item_max
    create_contents
    self.index = 0
    refresh
  end
  #--------------------------------------------------------------------------
  def member
    return $game_party.members[self.index]
  end
  #--------------------------------------------------------------------------
  def refresh
    for i in 0...@item_max
      rect = item_rect(i)
      self.contents.clear_rect(rect)
    end
    for i in 0...$game_party.members.size
      rect = item_rect(i)
      bitmap = Cache.character($game_party.members[i].character_name)
      sign = $game_party.members[i].character_name[/^[\!\$]./]
      if sign != nil and sign.include?('$')
        cw = bitmap.width / 3
        ch = bitmap.height / 4
      else
        cw = bitmap.width / 12
        ch = bitmap.height / 8
      end
      n = $game_party.members[i].character_index
      src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch)
      self.contents.blt(rect.x, rect.y, bitmap, src_rect, 255)
    end
  end
  #--------------------------------------------------------------------------
  def item_rect(index)
    rect = Rect.new(0, 0, 0, 0)
    rect.width = (contents.width + @spacing) / @column_max - @spacing
    rect.height = 32
    rect.x = index % @column_max * (rect.width + @spacing)
    rect.y = index / @column_max * 32
    return rect
  end
end

class Window_ClassPick < Window_Selectable
  def initialize(member = nil)
    super(48, 144, 256, 192)
    @item_max = $data_classes.size - 1
    create_contents
    @member = member
    self.index = -1
    self.active = false
    refresh
  end
  #--------------------------------------------------------------------------
  def update(member = nil)
    super()
    return if member == @member
    @member = member
    refresh
  end
  #--------------------------------------------------------------------------
  def member
    return @member
  end
  #--------------------------------------------------------------------------
  def item
    return $data_classes[self.index + 1]
  end
  #--------------------------------------------------------------------------
  def refresh
    for i in 0..@item_max
      rect = item_rect(i)
      self.contents.clear_rect(rect)
    end
    for i in 1..@item_max
      next unless $data_classes[i]
      y = (i-1) * WLH
      w = self.contents.width
      self.contents.font.color.alpha = (@member.class_id == $data_classes[i].id ? 128 : 255)
      self.contents.draw_text(0, y, w, WLH, $data_classes[i].name)
      next unless @member
      level = @member.class_level[$data_classes[i].id]
      self.contents.draw_text(0, y, w, WLH, "Lv. " + level.to_s, 2)
    end
  end
  #--------------------------------------------------------------------------
  def item_rect(index)
    rect = Rect.new(0, 0, 0, 0)
    rect.width = (contents.width + @spacing) / @column_max - @spacing
    rect.height = WLH
    rect.x = index % @column_max * (rect.width + @spacing)
    rect.y = index / @column_max * (WLH)
    return rect
  end
end

class Window_ClassSkills < Window_Base
  def initialize(member = nil, class_obj = nil)
    super(304, 80, 192, 256)
    create_contents
    @member = member
    @class_obj = class_obj
    refresh
  end
  #--------------------------------------------------------------------------
  def member
    return @member
  end
  #--------------------------------------------------------------------------
  def item
    return @class_obj
  end
  #--------------------------------------------------------------------------
  def set(member, class_obj)
    old_member = @member
    @member = member
    old_class_obj = @class_obj
    @class_obj = class_obj
    refresh if (old_member != @member) or (old_class_obj != @class_obj)
  end
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    return unless @member
    c = (@class_obj != nil ? @class_obj : $data_classes[@member.class_id])
    x, y = 0, 0
    w = self.contents.width
    self.draw_actor_face(@member, x, y, 48)
    self.draw_actor_name(@member, x + 52, y)
    self.contents.draw_text(x + 52, y + WLH, w, WLH, $data_classes[@member.class_id].name)
    self.draw_actor_level(@member, x, y + WLH*2)
    self.draw_icon(142, self.contents.width - 24, y + WLH*2)
    self.contents.draw_text(x, y + WLH*2, self.contents.width - 12, WLH, 'Skills', 2)
    self.draw_seperator(x, y + WLH * 3 + 11, w, 2)
    return unless @class_obj
    self.contents.draw_text(x, y + WLH*4, w, WLH, c.name)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y + WLH*5, w, WLH, "Clase #{Vocab::level_a}")
    self.contents.font.color = normal_color
    self.contents.draw_text(x, y + WLH*5, w, WLH, @member.class_level[c.id], 2)
    s1 = @member.class_exp_s(c.id)
    s2 = @member.next_class_rest_exp_s(c.id)
    s_next = sprintf(Vocab::ExpNext, Vocab::level)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y + WLH * 7, w, WLH, Vocab::ExpTotal)
    self.contents.draw_text(x, y + WLH * 8, w, WLH, s_next)
    self.contents.font.color = normal_color
    self.contents.draw_text(x, y + WLH * 7, w, WLH, s1, 2)
    self.contents.draw_text(x, y + WLH * 8, w, WLH, s2, 2)
  end
end

class Window_ShowSkills < Window_Selectable
  def initialize(member, class_id = nil)
    super(48, 80, 448, 200)
    @member = member
    @class_id = (class_id != nil ? class_id : @member.class_id)
    @item_max = $data_classes[@class_id].learnings.size
    @column_max = 3
    create_contents
    self.index = -1
    self.active = false
    self.openness = 0
    refresh
  end
  #--------------------------------------------------------------------------
  def set(member, class_id)
    old_member = @member
    @member = member
    old_class_id = @class_id
    @class_id = class_id
    @item_max = $data_classes[@class_id].learnings.size unless @class_id == nil
    create_contents
    refresh
  end
  #--------------------------------------------------------------------------
  def refresh
    return if @class_id == nil
    return if $data_classes[@class_id].learnings.empty?
    for i in 0...@item_max
      rect = item_rect(i)
      learning = $data_classes[@class_id].learnings[i]
      next unless learning
      self.contents.font.color.alpha = (@member.class_level[@class_id] >= learning.level ? 255 : 128)
      self.contents.draw_text(rect, $data_skills[learning.skill_id].name)
    end
  end
  #--------------------------------------------------------------------------
  def update_help
    if $data_classes[@class_id].learnings.empty?
      self.help_window.set_text('')
      return
    end
    level = $data_classes[@class_id].learnings[self.index].level
    skill = $data_skills[$data_classes[@class_id].learnings[self.index].skill_id]
    self.help_window.set_text(skill == nil ? '' : "[Nivel #{level}] #{skill.description}")
  end
end

class Window_Confirm < Window_Selectable
  def initialize(index = -1)
    super(192, 168, 160, 80)
    create_contents
    @item_max = 2
    @column_max = 2
    self.index = index
    self.active = false
    self.openness = 0
    refresh
  end
  #--------------------------------------------------------------------------
  def refresh
    for i in 0..@item_max
      rect = item_rect(i)
      self.contents.clear_rect(rect)
    end
    self.contents.draw_text(0, 0, self.contents.width, WLH, "Comfirmar?", 1)
    rect = item_rect(0)
    self.contents.draw_text(rect, "Si", 1)
    rect = item_rect(1)
    self.contents.draw_text(rect, "No", 1)
  end
  #--------------------------------------------------------------------------
  def item_rect(index)
    rect = Rect.new(0, 0, 0, 0)
    rect.width = (contents.width + @spacing) / @column_max - @spacing
    rect.height = WLH
    rect.x = index % @column_max * (rect.width + @spacing)
    rect.y = (index / @column_max * WLH) + WLH
    return rect
  end
end

Demo:
Demo por LordLucius
La demo de LordLucius (Usuario eliminado), contienen el Script no modificado, te recomiendo usar el script que esta en este post.

Créditos:
Autor: Prexus (?)
Traductores:
Al Portugues: NaRuToMaKeR (?)
Al Español: ClubIce
ClubIce
ClubIce
220
220

Masculino

Edad 27

Cantidad de envíos 253

Maker Cash 361

Reputación 38


Volver arriba Ir abajo

Job Changer v1.0 Empty Re: Job Changer v1.0

Mensaje por Clound Vie 01 Oct 2010, 2:15 pm

eso esta super.... se me afigura como el del RO si es que eres GM puedes hacer eso xDDD +1.
Clound
Clound
500
500

Masculino

Edad 27

Cantidad de envíos 512

Maker Cash 480

Reputación 39


Extras
Sobre mí::

Volver arriba Ir abajo

Volver arriba

- Temas similares

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