Maker Palace

¡El Reino del RpgMaker y del Ocio!
 
ÍndiceBuscarGrupos de UsuariosScriptsRecursosTutorialesPalaceJuegosPalaceWikiFAQRegistrarseConectarse
Conectarse
Nombre de Usuario:
Contraseña:
Entrar automáticamente en cada visita: 
:: Recuperar mi contraseña
Temas similares
Buscar
 
 

Resultados por:
 
Rechercher Búsqueda avanzada
Últimos temas
» Reparación de Conjuros
por kyonides-arkanthos Jue Oct 12, 2017 12:22 am

» Screenshot del nuevo KUnits XP oon menú
por LinkLuis55 Sáb Sep 23, 2017 10:03 pm

» Dando una vuelta por acá
por LinkLuis55 Dom Ago 20, 2017 2:56 pm

» Heroes del Crimen 2 DEMO
por jasuso Mar Ago 01, 2017 12:04 am

» The Legend of Celestia II: A World of Twilight Shadows Demo
por Jlopez_96 Vie Jul 28, 2017 6:20 pm

» The Legend of Celestia: Four Cristals
por Jlopez_96 Mar Abr 25, 2017 4:59 pm

» [VXAce] Burando Doragon
por gantzer49 Dom Abr 23, 2017 7:43 pm

Recomendados
RPG en RPG Maker
La importancia de un Backup
Que requiere un sistema de Batalla para ser exitoso
9 Minutos de Juegos por fans
Guía de Subforos para Tontos de Maker Palace
Indice de Scripts Locales XP
Falcao Pearl ABS Liquid
¿Quién está en línea?
En total hay 9 usuarios en línea: 0 Registrados, 0 Ocultos y 9 Invitados :: 1 Motor de búsqueda

Ninguno

La mayor cantidad de usuarios en línea fue 179 el Mar Ago 30, 2011 10:06 pm.
MiniChat
Mejores posteadores
Raiden (3346)
 
DaviX (2740)
 
Frikilangelo (2461)
 
SagahonArturo (1806)
 
Falcao (1775)
 
kyonides-arkanthos (1768)
 
Mur-mai-der (1755)
 
Ares (1613)
 
LinkLuis55 (1558)
 
Webmaster24 (1354)
 
Afiliados
Crear foro Mundo Maker Foro de anime y RM2k3/XP/VX Computer mix
Flag Counter
free counters
Visitas


Comparte | 
 

 KyoJC XP ACE Simple Cambio de Clase o Trabajo

Ver el tema anterior Ver el tema siguiente Ir abajo 
AutorMensaje
kyonides-arkanthos
Lord Guru Maker
Lord Guru Maker
avatar

Cantidad de envíos : 1768
Miembro desde : 03/02/2010
Sexo : Masculino

Maker : RMXP


MensajeTema: KyoJC XP ACE Simple Cambio de Clase o Trabajo   Lun Mar 05, 2012 1:06 am

KyoJC XP
versión 0.1
Simple Script de Cambio de Clases o Trabajos de los Héroes

No incluye una interfaz gráfica, se utiliza mediante llamados a script o pueden utilizarlo dentro de sus scripts sin robarse el mérito, aunque sea uno muy modesto.

Las instrucciones ya vienen incluidas excepto por la parte de cómo configurar los eventos que lo utilizarían. Esto no es muy complicado que digamos para quien esté acostumbrado a hacer todo por eventos sin dejar por fuera los llamados a script.

Código:
###  KyoJC XP  ###
#    v 0.1.2 - 09.04.2012
#    v 0.1.1 - 07.03.2012
#    v 0.1.0 - 04.03.2012
#    Scripter: Kyonides-Arkanthos

=begin
  Simple Script de Cambio de Clase o Trabajo del Personaje

###  Ordenes o Commands  ###

# # Para Scripts y Llamados a Scripts
  GameData.change_class(actor_id, class_id)

    Digiten el ID del heroe que cambiara de clase y el numero de dicha clase
    segun lo preestablecido en la base de datos

# # Para Llamados a Scripts solamente
  GameData.switch_class

    Antes de guardar esta orden en el llamado a script hay que seleccionar 1
    de los heroes en el equipo mediante una variable del juego y tambien 1
    interruptor dentro del rango preestablecido abajo en SRANGE.
=end

module GameData
  ACTORVAR = 1   # Numero de Variable que guardara info del heroe
  SRANGE = 1..9  # Interruptores: 1 por cada Clase en base de datos
  ACTORINITLVL = 1 # Nivel inicial para otras Clases
  def self.change_class(actor_id, class_id)
    actor = $game_party.actors[actor_id]
    self.class_learnings(actor, class_id)
  end

  def self.switch_class
    actor = $game_variables[ACTORVAR]
    class_id = $game_switches[SRANGE].index(true) + 1
    self.class_learnings(actor, class_id)
  end

  def self.class_learnings(actor, class_id)
    $data_classes[class_id].learnings.each {|learning|
      actor.learn_skill(learning.skill_id) if learning.level == actor.level
      break if learning.level > actor.level
    } if actor.add_class(class_id)
  end
end

class RPG::Class
  attr_accessor :next_rank_id
  def next_rank_name
    case next_rank_id
  when nil;     'Desconocido'
  when :max;    'Máximo'
  when Integer; $data_classes[next_rank_id].name
  end
  end
end

class Game_Actor
  def setup(actor_id)
    actor = $data_actors[actor_id]
    @actor_id = actor_id
    @name = actor.name
    @character_name = actor.character_name
    @character_hue = actor.character_hue
    @battler_name = actor.battler_name
    @battler_hue = actor.battler_hue
    @class_id = actor.class_id
    @weapon_id = actor.weapon_id
    @armor1_id = actor.armor1_id
    @armor2_id = actor.armor2_id
    @armor3_id = actor.armor3_id
    @armor4_id = actor.armor4_id
  @job_level = {@class_id => actor.initial_level}
  @level = @job_level[@class_id]
    @exp_list = {@class_id => Array.new(101)}
    make_exp_list
    @exp = job_exp_list[@level]
    @job_exp = {@class_id => @exp}
    @job_skills = {@class_id => []}
    @skills = @job_skills[@class_id]
  @hp = maxhp
    @sp = maxsp
    @states = []
    @states_turn = {}
    @maxhp_plus = 0
    @maxsp_plus = 0
    @str_plus = 0
    @dex_plus = 0
    @agi_plus = 0
    @int_plus = 0
  for i in 1..@level
      for j in $data_classes[@class_id].learnings
        learn_skill(j.skill_id) if j.level == i
      end
    end
  update_auto_state(nil, $data_armors[@armor1_id])
    update_auto_state(nil, $data_armors[@armor2_id])
    update_auto_state(nil, $data_armors[@armor3_id])
    update_auto_state(nil, $data_armors[@armor4_id])
  end

  def learn_skill(id)
    if id > 0 and !skill_learn?(id)
      @job_skills[@class_id] << id
      @job_skills[@class_id].sort!
      @skills = @job_skills[@class_id]
    end
  end

  def add_class(class_id)
    return false if @class_id == class_id or @job_skills.keys.include?(class_id)
    @job_exp[@class_id] = @exp
    @class_id = class_id
    @level = @job_level[@class_id] = GameData::ACTORINITLVL
    @exp_list[@class_id] = Array.new(101)
    make_exp_list
    @exp = @job_exp[@class_id] = job_exp_list[@level]
    @skills = @job_skills[@class_id] = []
    return true
  end

  def change_class(class_id)
    return false if @class_id == class_id
    @job_exp[@class_id] = @exp
    @class_id = class_id
    @level = @job_level[@class_id]
    @exp = @job_exp[@class_id]# = job_exp_list[@level]
    @skills = @job_skills[@class_id]
    return true
  end
  
  def make_exp_list
    actor = $data_actors[@actor_id]
    job_exp_list[1] = 0
    pow_i = 2.4 + actor.exp_inflation / 100.0
    for i in 2..100
      if i > actor.final_level
        job_exp_list[i] = 0
      else
        n = actor.exp_basis * ((i + 3) ** pow_i) / (5 ** pow_i)
        job_exp_list[i] = job_exp_list[i-1] + Integer(n)
      end
    end
  end

  def exp_s # * Get Current Level EXP String
    return job_exp_list[@level+1] > 0 ? @exp.to_s : "-------"
  end

  def next_exp_s # * Get Next Level EXP String
    return job_exp_list[@level+1] > 0 ? job_exp_list[@level+1].to_s : "-------"
  end

  def next_rest_exp_s # * Get Until Next Level EXP String
    return job_exp_list[@level+1] > 0 ?
      (job_exp_list[@level+1] - @exp).to_s : "-------"
  end

  def exp=(exp)
    @exp = @job_exp[@class_id] = [[exp, 9999999].min, 0].max
    # Level up
    while @exp >= job_exp_list[@level+1] and job_exp_list[@level+1] > 0
  @level = @job_level[@class_id] += 1
      # Learn skill
      for j in $data_classes[@class_id].learnings
        learn_skill(j.skill_id) if j.level == @level
      end
    end
    # Level down
    @level = @job_level[@class_id] -= 1 while @exp < job_exp_list[@level]
    # Correction if exceeding current max HP and max SP
    @hp = [@hp, self.maxhp].min
    @sp = [@sp, self.maxsp].min
  end

  def level=(level)
    # Check up and down limits
    level = [[level, $data_actors[@actor_id].final_level].min, 1].max
    # Change EXP
    self.exp = job_exp_list[level]
  end

  def jobs; @job_skills.keys.sort.map {|k| $data_classes[k].name} end
  def jobs_ids; @job_skills.keys.sort end
  def current_jobs; @job_skills.keys.size end
  def jobs_include?(class_id) @job_skills.keys.include?(class_id) end
  def job_exp_list; @exp_list[@class_id] end
end

class Interpreter
  def command_321
    actor = $game_actors[@parameters[0]]
    actor.add_class(@parameters[1]) if actor != nil
    return true
  end
end

class Scene_Title
  def main
    if $BTEST
      battle_test
      return
    end
  load_normal_database
    setup_ranks
    @sprite = Sprite.new
    @sprite.bitmap = RPG::Cache.title($data_system.title_name)
    options = ["New Game", "Continue", "Shutdown"]
    @command_window = Window_Command.new(192, options)
    @command_window.back_opacity = 160
    @command_window.x = 320 - @command_window.width / 2
    @command_window.y = 288
    @continue_enabled = false
    for i in 0..3
      @continue_enabled = true if FileTest.exist?("Save#{i+1}.rxdata")
    end
    if @continue_enabled
      @command_window.index = 1
    else
      @command_window.disable_item(1)
    end
    $game_system.bgm_play($data_system.title_bgm)
    Audio.me_stop
    Audio.bgs_stop
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      break if $scene != self
    end
    Graphics.freeze
    dispose_all
  end
 
  def dispose_all
    @command_window.dispose
    @sprite.bitmap.dispose
    @sprite.dispose
  end

  def load_normal_database
    $data_actors        = load_data("Data/Actors.rxdata")
    $data_classes       = load_data("Data/Classes.rxdata")
    $data_skills        = load_data("Data/Skills.rxdata")
    $data_items         = load_data("Data/Items.rxdata")
    $data_weapons       = load_data("Data/Weapons.rxdata")
    $data_armors        = load_data("Data/Armors.rxdata")
    $data_enemies       = load_data("Data/Enemies.rxdata")
    $data_troops        = load_data("Data/Troops.rxdata")
    $data_states        = load_data("Data/States.rxdata")
    $data_animations    = load_data("Data/Animations.rxdata")
    $data_tilesets      = load_data("Data/Tilesets.rxdata")
    $data_common_events = load_data("Data/CommonEvents.rxdata")
    $data_system        = load_data("Data/System.rxdata")
    $game_system = Game_System.new
  end

  def setup_ranks
    return if !$data_classes[2].next_rank_id.nil?
    2.upto($data_classes.size-11) {|n|
  $data_classes[n].next_rank_id = n + 10}
  ($data_classes.size-11).upto($data_classes.size-1) {|n|
  $data_classes[n].next_rank_id = :max}
    File.open('Data/Classes.rxdata', 'wb') {|file|
      Marshal.dump($data_classes, file)}
      $data_classes = load_data('Data/Classes.rxdata')
  end
end


Última edición por kyonides-arkanthos el Miér Ene 27, 2016 2:44 am, editado 8 veces
Volver arriba Ir abajo
Ver perfil de usuario http://deloquesea.mforos.com/forums/
kyonides-arkanthos
Lord Guru Maker
Lord Guru Maker
avatar

Cantidad de envíos : 1768
Miembro desde : 03/02/2010
Sexo : Masculino

Maker : RMXP


MensajeTema: Re: KyoJC XP ACE Simple Cambio de Clase o Trabajo   Lun Abr 09, 2012 6:33 am

Bueno en realidad hay ahora muy pocos cambios en las versiones para XP y ACE del script, pero le agrego el add-on o un script que se le adjunta para que pueda también ser utilizado desde una batalla suponiendo que solo utilizan el sistema de batalla que viene por defecto en XP o ACE.

Funciona de la siguiente manera:

  • El héroe puede cambiar de profesión o clase en plena batalla
  • Solo el héroe que haya aprendido 1 o más profesiones verá que tiene una opción extra llamada "Cambiar"
  • El héroe que cambia de profesión pierde ese mismo turno, o sea, no podrá atacar ni defenderse
  • El héroe que cambió de profesión continúa con dicha profesión hasta que el jugador le vuelva a cambiar la profesión en batalla o en el mapa o en un menú
  • No hay límite en cuanto al número de cambios de profesión


Código:
###  KyoJC XP Standard Battle Add-On  ###
#    v 0.1.0 - 09.04.2012
#    Scripter: Kyonides-Arkanthos

module GameData
  JOBCHANGE = "%s ya cambió de oficio en plena batalla, ahora es 1 %s"
  CANCEL = 'Cancelar'
  POSITION = {0 => 'Frente', 1 => 'Medio', 2 => 'Atrás'}
end

class Window_Base
  # Methods From VX ACE
  def show
    self.visible = true
    self
  end

  def hide
    self.visible = false
    self
  end

  def activate
    self.active = true
    self
  end

  def deactivate
    self.active = false
    self
  end
end

class Window_CommandModification < Window_Selectable
  def initialize(x, y, width, height)
    super
    @commands = []
    self.contents = Bitmap.new(1, 1)
  end

  def make_command_list; end
  def clear_command_list; @commands = [] end
  def disable_item(index) draw_item(index, disabled_color) end

  def add_command(command)
    @commands << command
    @item_max = @commands.size
  end

  def refresh
    if !self.contents.nil?
      self.contents.dispose
      self.contents = Bitmap.new(width - 32, @item_max * 32)
    end
    self.contents.clear
    @item_max.times {|new_item| draw_item(new_item, normal_color)}
  end

  def draw_item(index, color)
    self.contents.font.color = color
    rect = Rect.new(4, 32 * index, self.contents.width - 8, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, @commands[index])
  end
end

class Window_ActorCommand < Window_CommandModification
  def initialize
    super(0, 0, 160, 4 * 32 + 32)
    @actor = nil
    @item_max = 4
    self.contents = Bitmap.new(width - 32, @item_max * 32)
    make_command_list
    refresh
    self.index = 0
  end

  def make_command_list
    add_basic_commands
    add_command('Cambiar') if @actor and @actor.current_jobs > 1
  end

  def add_basic_commands
    add_command($data_system.words.attack)
    add_command($data_system.words.skill)
    add_command($data_system.words.guard)
    add_command($data_system.words.item)
  end

  def setup(actor)
    @actor = actor
    clear_command_list
    make_command_list
    self.height = (@item_max + 1) * 32
    refresh
  end
end
 
class Window_JobsCommand < Window_CommandModification
  attr_reader :values
  def initialize(x=0, y=0)
    super(x, y, 160, 32)
    @actor = nil
    clear_values
    self.index = 0
    hide
    deactivate
  end

  def clear_values; @values = [] end
  def window_width; 128 end

  def add_command(command, value=nil)
    super(command)
    @values << value
  end

  def make_command_list
    return unless @actor
    @actor.jobs_ids.each { |job_id| next if job_id == @actor.class_id
      add_command($data_classes[job_id].name, job_id) }
    add_command(GameData::CANCEL)
  end

  def setup(actor)
    @actor = actor
    self.height = (@actor.current_jobs + 1) * 32
    self.x, self.y = @actor.index * 160, 320 - self.height
    clear_values
    clear_command_list
    make_command_list
    refresh
    show
    activate
  end

  def update_help
    cancel = 'Cancelar y cerrar este menú'
    new_class = $data_classes[@actor.class_id]
    pos = "Posición: #{GameData::POSITION[new_class.position]}"
    @help_window.set_text(self.index == @item_max - 1 ? cancel : pos)
  end
end

class Scene_Battle
  def main
    prepare_system_enemies
    @spriteset = Spriteset_Battle.new
    make_all_windows
    @wait_count = 0
    if $data_system.battle_transition == ""
      Graphics.transition(20)
    else
      Graphics.transition(40, "Graphics/Transitions/" +
        $data_system.battle_transition)
    end
    start_phase1
    loop do
      Graphics.update
      Input.update
      update
      break if $scene != self
    end
    $game_map.refresh
    Graphics.freeze
    dispose_all_windows
    @spriteset.dispose
    if $scene.is_a?(Scene_Title)
      Graphics.transition
      Graphics.freeze
    end
    $scene = nil if $BTEST and !$scene.is_a?(Scene_Gameover)
  end

  def prepare_system_enemies
    # Initialize each kind of temporary battle data
    $game_temp.in_battle = true
    $game_temp.battle_turn = 0
    $game_temp.battle_event_flags.clear
    $game_temp.battle_abort = false
    $game_temp.battle_main_phase = false
    $game_temp.battleback_name = $game_map.battleback_name
    $game_temp.forcing_battler = nil
    # Initialize battle event interpreter
    $game_system.battle_interpreter.setup(nil, 0)
    # Prepare troop
    @troop_id = $game_temp.battle_troop_id
    $game_troop.setup(@troop_id)
  end

  def make_all_windows
    # Make actor command window
    @actor_command_window = Window_ActorCommand.new
    height = @spriteset.viewport1.height - @actor_command_window.height
    @actor_command_window.y = height
    @actor_command_window.back_opacity = 160
    @actor_command_window.hide.deactivate
    # Make other windows
    @party_command_window = Window_PartyCommand.new
    @help_window = Window_Help.new
    @help_window.back_opacity = 160
    @help_window.visible = false
    @status_window = Window_BattleStatus.new
    @message_window = Window_Message.new
    @jobs_window = Window_JobsCommand.new
  end

  def dispose_all_windows # Method From VX ACE
    instance_variables.each do |varname|
      ivar = instance_variable_get(varname)
      ivar.dispose if ivar.is_a?(Window)
    end
  end

  alias kyon_job_change_up update
  def update
    kyon_job_change_up
    @jobs_window.update
  end

  alias kyon_job_change_p3_scw phase3_setup_command_window
  def phase3_setup_command_window
    kyon_job_change_p3_scw
    @actor_command_window.setup(@active_battler)
    height = @spriteset.viewport1.height - @actor_command_window.height
    @actor_command_window.y = height
  end

  def update_phase3
    if @enemy_arrow != nil  # If enemy arrow is enabled
      update_phase3_enemy_select
    elsif @actor_arrow != nil  # If actor arrow is enabled
      update_phase3_actor_select
    elsif @skill_window != nil  # If skill window is enabled
      update_phase3_skill_select
    elsif @item_window != nil  # If item window is enabled
      update_phase3_item_select
    elsif @actor_command_window.active  # If actor command window is enabled
      update_phase3_basic_command
    elsif @jobs_window.active
      update_phase3_job_select
    end
  end

  def update_phase3_basic_command
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      phase3_prior_actor
      return
    elsif Input.trigger?(Input::C)
      case @actor_command_window.index
      when 0  # Physical Attack
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Set action
        @active_battler.current_action.kind = 0
        @active_battler.current_action.basic = 0
        # Start enemy selection
        start_enemy_select
      when 1  # Skill
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Set action
        @active_battler.current_action.kind = 1
        # Start skill selection
        start_skill_select
      when 2  # Guard
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Set action
        @active_battler.current_action.kind = 0
        @active_battler.current_action.basic = 1
        # Go to command input for next actor
        phase3_next_actor
      when 3  # Item
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Set action
        @active_battler.current_action.kind = 2
        # Start item selection
        start_item_select
      when 4  # Job Change
        $game_system.se_play($data_system.decision_se)
        start_job_select
      end
      return
    end
  end

  def start_job_select
    @jobs_window.setup(@active_battler)
    @jobs_window.help_window = @help_window
    @actor_command_window.hide.deactivate # Hide & Disable actor command window
  end

  def end_job_select
    $game_system.se_play($data_system.cancel_se)
    @jobs_window.hide.deactivate
    @actor_command_window.show.activate
  end

  def update_phase3_job_select
    @jobs_window.update_help
    if Input.trigger?(Input::B)
      end_job_select
      return
    elsif Input.trigger?(Input::C)
      case @jobs_window.index
      when @active_battler.current_jobs - 1;  end_job_select
      else
        @active_battler.change_class(@jobs_window.values[@jobs_window.index])
        actor = @active_battler
        text = sprintf(GameData::JOBCHANGE, actor.name, actor.class_name)
        @help_window.set_text(text)
        end_job_select
        phase3_next_actor
      end
      return
    end
  end
end

EDITO

Ya publiqué la versión actualizada del script principal para XP, ya hay también un complemento o add-on para el sistema de batallas del XP.


RECORDATORIO

Recuerden que pueden cambiar de profesión las veces que lo deseen y no perderán la experiencia ganada en cada oficio, pero no pueden trasladar dicha experiencia de un oficio a otro. El PV o HP y el PM o MP no se verán afectados o beneficiados por esto.
Volver arriba Ir abajo
Ver perfil de usuario http://deloquesea.mforos.com/forums/
 
KyoJC XP ACE Simple Cambio de Clase o Trabajo
Ver el tema anterior Ver el tema siguiente Volver arriba 
Página 1 de 1.
 Temas similares
-
» [Prólogo] Cambio de vida.
» Una simple rosa
» Un beso a cambio de?
» Me cambio de nombre~
» Intercambio simple

Permisos de este foro:No puedes responder a temas en este foro.
Maker Palace :: RGSS Scripts :: Scripts Maker XP-
Cambiar a: