¡Bienvenido a Universo Maker!
¿Es esta la primera vez que visitas el foro? Si es así te recomendamos que te registres para tener completo acceso a todas las áreas y secciones del foro, así también podrás participar activamente en la comunidad. Si ya tienes una cuenta, conectate cuanto antes.
Iniciar Sesión Registrarme

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo Mensaje [Página 1 de 1.]

#1 [VX] "Unlimited" Stats (estados ilimitados) el Mar Abr 05, 2011 7:09 pm

Reputación del mensaje :100% (2 votos)

orochii

avatar
Orochii's "Unlimited" Stats
VERSIÓN: 1.0 | RPG Maker VX/RGSS2.0 (probado en rgss202e.dll)


INTRODUCCIÓN
¡Hola Ópalo Contento! Soy Orochii, y les vengo a cantar una canción... ein eso no era x'd en fin.
Éste es un conjunto de scripts que ya había posteado, pero bueh... los pondré en un lugar más ordenados, nada más. También acá pondré la siguiente versión de uno de ellos, para facilitar un poco su uso... porque es un poco rarito eso de modificar script cuando tienes notes :DDDD (y porque me gusta el Tagnotes de Queex, ¿¿algún problema?? >Ópalo Contento).
El script sirve para romper límites de estados de los héroes y enemigos. Eso es todo. Más adelante pondré configuración por notas (las de la base de datos) para hacer menos complicado la parte de los enemigos, y por último meteré la cuestión para que los héroes aprendan habilidades en niveles superiores al 99 xP...

CARACTERÍSTICAS

  • Héroes con nivel máximo ilimitado.
  • Estados de los héroes y monstruos sin límite también.


SCREENSHOTS
Bueno, imagínense un héroe con 99999 de vida, en nivel 6666 y 9999 atk/def/int/agi... Y un monstruo con 9999999 de vida y 9999 de atk/def/int/agi...
No tiene mucho sentido poner imagen, ¿no?

HISTORIAL

  • 1.0 - (Actual) Script funcional Cool.
  • 1.1 - Añadir uso de tagnotes.
  • 1.2 - Adición de función para aprendizaje de técnicas en niveles +99.


SCRIPT
UNLIMITED GAME ACTOR
Código:

#==============================================================================
# ■ Orochii's Unlimited Game_Actor ;D
#------------------------------------------------------------------------------
# Modificado por Orochii, usando como base la clase default para permitir niveles
#superiores a 99 (como diría Metalero, mientras sea un número soportado por una
#variable de 32bits... xDDD).

#Hecho por Orochii, aunque no importa si me acreditan o no, nada más no alardeen
#de mi pobre habilidad como suya ;D.
#17 de Noviembre del 2010
#==============================================================================
module OROCHII_ACTOR
  @lvl_max = 6666
  @hp_limit = 99999
  #Era innecesario definirlos como funciones, pero bueno >_<.
  #Igual, se puede "remediar" el fallo poniéndolos abajo directamente (@lvl_max por ejemplo)
  #y si se quiere, borrando estas líneas. SOLO PARA GENTE QUE SEPA QUÉ HACE xD.
  def self.max_lvl
    return @lvl_max
  end
  def self.maxhp_limit
    return @hp_limit
  end   
end

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  #--------------------------------------------------------------------------
  # ● セットアップ
  #    actor_id : アクター ID
  #--------------------------------------------------------------------------
  def setup(actor_id)
    actor = $data_actors[actor_id]
    @actor_id = actor_id
    @name = actor.name
    @character_name = actor.character_name
    @character_index = actor.character_index
    @face_name = actor.face_name
    @face_index = actor.face_index
    @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
    @level = actor.initial_level
    a = OROCHII_ACTOR::max_lvl
    a +=1
    @exp_list = Array.new(a)
    make_exp_list
    @exp = @exp_list[@level]
    @skills = []
    for i in self.class.learnings
      learn_skill(i.skill_id) if i.level <= @level
    end
    clear_extra_values
    recover_all
  end
  #--------------------------------------------------------------------------
  # ● 経験値計算
  #--------------------------------------------------------------------------
  def make_exp_list
    a = OROCHII_ACTOR::max_lvl
    a +=1
    @exp_list[1] = @exp_list[a] = 0
    m = actor.exp_basis
    n = 0.75 + actor.exp_inflation / 200.0;
    for i in 2..OROCHII_ACTOR::max_lvl
      @exp_list[i] = @exp_list[i-1] + Integer(m)
      m *= 1 + n;
      n *= 0.9;
    end
  end
  #--------------------------------------------------------------------------
  # ● MaxHP の制限値取得
  #--------------------------------------------------------------------------
  def maxhp_limit
    return OROCHII_ACTOR::maxhp_limit
  end
 
  def get_parameter(param, level)
    if level < 100
      n = actor.parameters[param, level]
    else
      afc = actor.parameters[param, 98]
      bas = actor.parameters[param, 99]
      coo = bas-afc
      das = level - 99
      est = coo*das
      est *= (das/50) if param < 1
      n = bas+est
    end
    return n
  end
  #--------------------------------------------------------------------------
  # ● 基本 MaxHP の取得
  #--------------------------------------------------------------------------
  def base_maxhp
    return get_parameter(0, @level)
  end
  #--------------------------------------------------------------------------
  # ● 基本 MaxMP の取得
  #--------------------------------------------------------------------------
  def base_maxmp
    return get_parameter(1, @level)
  end
  #--------------------------------------------------------------------------
  # ● 基本攻撃力の取得
  #--------------------------------------------------------------------------
  def base_atk
    n = get_parameter(2, @level)
    for item in equips.compact do n += item.atk end
    return n
  end
  #--------------------------------------------------------------------------
  # ● 基本防御力の取得
  #--------------------------------------------------------------------------
  def base_def
    n = get_parameter(3, @level)
    for item in equips.compact do n += item.def end
    return n
  end
  #--------------------------------------------------------------------------
  # ● 基本精神力の取得
  #--------------------------------------------------------------------------
  def base_spi
    n = get_parameter(4, @level)
    for item in equips.compact do n += item.spi end
    return n
  end
  #--------------------------------------------------------------------------
  # ● 基本敏捷性の取得
  #--------------------------------------------------------------------------
  def base_agi
    n = get_parameter(5, @level)
    for item in equips.compact do n += item.agi end
    return n
  end
  #--------------------------------------------------------------------------
  # ● 命中率の取得
  #--------------------------------------------------------------------------
  def hit
    if two_swords_style
      n1 = weapons[0] == nil ? 95 : weapons[0].hit
      n2 = weapons[1] == nil ? 95 : weapons[1].hit
      n = [n1, n2].min
    else
      n = weapons[0] == nil ? 95 : weapons[0].hit
    end
    return n
  end
  #--------------------------------------------------------------------------
  # ● 回避率の取得
  #--------------------------------------------------------------------------
  def eva
    n = 5
    for item in armors.compact do n += item.eva end
    return n
  end
  #--------------------------------------------------------------------------
  # ● クリティカル率の取得
  #--------------------------------------------------------------------------
  def cri
    n = 4
    n += 4 if actor.critical_bonus
    for weapon in weapons.compact
      n += 4 if weapon.critical_bonus
      n += 4 if weapon.element_set.include?(34)
    end
    #n += 22 if has_doubleCritical
    n += 4 if element_set.include?(34)
    return n
  end
  #--------------------------------------------------------------------------
  # ● 狙われやすさの取得
  #--------------------------------------------------------------------------
  def odds
    return 4 - self.class.position
  end
  #--------------------------------------------------------------------------
  # ● 経験値の変更
  #    exp  : 新しい経験値
  #    show : レベルアップ表示フラグ
  #--------------------------------------------------------------------------
  def change_exp(exp, show)
    last_level = @level
    last_skills = skills
    @exp = [exp, 0].max #[[exp, 999999999999999].min, 0].max #línea de backup (en caso de error)
    while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
      level_up
    end
    while @exp < @exp_list[@level]
      level_down
    end
    @hp = [@hp, maxhp].min
    @mp = [@mp, maxmp].min
    if show and @level > last_level
      display_level_up(skills - last_skills)
    end
  end
  #--------------------------------------------------------------------------
  # ● レベルの変更
  #    level : 新しいレベル
  #    show  : レベルアップ表示フラグ
  #--------------------------------------------------------------------------
  def change_level(level, show)
    level = [[level, OROCHII_ACTOR::max_lvl].min, 1].max
    change_exp(@exp_list[level], show)
  end
end
UNLIMITED GAME_BATTLER
Código:

#==============================================================================
# ■ Orochii's Unlimited Game_Battler
#------------------------------------------------------------------------------
# Bueno, es un complemento, para que puedas hacer
#bichos con más de 999 como atributo.
#Ahora lo que me falta
#
#Hecho por Orochii, aunque no importa si me acreditan o no, nada más no alardeen
#de mi pobre habilidad como suya ;D.
#17 de Noviembre del 2010
#==============================================================================
module OROCHII_ATTRIBUTES
  #Creo que es autoexplicatorio xd... así que cambias límites y listo.
  @hp_max = 99999
  @mp_max = 99999
  @atk_max = 9999
  @def_max = 9999
  @agi_max = 9999
  @spi_max = 9999
 
  #Las lines siguientes deberían quedarse así... a menos que seas pro ;D.
  def self.hp_limit; return @hp_max; end
  def self.mp_limit; return @mp_max; end
  def self.atk_limit; return @atk_max; end
  def self.def_limit; return @def_max; end
  def self.agi_limit; return @agi_max; end
  def self.spi_limit; return @spi_max; end
end

class Game_Battler
  #--------------------------------------------------------------------------
  # ● MaxHP の制限値取得
  #--------------------------------------------------------------------------
  def maxhp_limit
    return OROCHII_ATTRIBUTES::hp_limit
  end
  #--------------------------------------------------------------------------
  # ● MaxHP の取得
  #--------------------------------------------------------------------------
  def maxhp
    return [[base_maxhp + @maxhp_plus, 1].max, maxhp_limit].min
  end
  #--------------------------------------------------------------------------
  # ● MaxMP の取得
  #--------------------------------------------------------------------------
  def maxmp
    return [[base_maxmp + @maxmp_plus, 0].max, OROCHII_ATTRIBUTES::mp_limit].min
  end
  #--------------------------------------------------------------------------
  # ● 攻撃力の取得
  #--------------------------------------------------------------------------
  def atk
    n = [[base_atk + @atk_plus, 1].max, OROCHII_ATTRIBUTES::atk_limit].min
    for state in states do n *= state.atk_rate / 100.0 end
    n = [[Integer(n), 1].max, OROCHII_ATTRIBUTES::atk_limit].min
    return n
  end
  #--------------------------------------------------------------------------
  # ● 防御力の取得
  #--------------------------------------------------------------------------
  def def
    n = [[base_def + @def_plus, 1].max, OROCHII_ATTRIBUTES::def_limit].min
    for state in states do n *= state.def_rate / 100.0 end
    n = [[Integer(n), 1].max, OROCHII_ATTRIBUTES::def_limit].min
    return n
  end
  #--------------------------------------------------------------------------
  # ● 精神力の取得
  #--------------------------------------------------------------------------
  def spi
    n = [[base_spi + @spi_plus, 1].max, OROCHII_ATTRIBUTES::def_limit].min
    for state in states do n *= state.spi_rate / 100.0 end
    n = [[Integer(n), 1].max, OROCHII_ATTRIBUTES::def_limit].min
    return n
  end
  #--------------------------------------------------------------------------
  # ● 敏捷性の取得
  #--------------------------------------------------------------------------
  def agi
    n = [[base_agi + @agi_plus, 1].max, OROCHII_ATTRIBUTES::agi_limit].min
    for state in states do n *= state.agi_rate / 100.0 end
    n = [[Integer(n), 1].max, OROCHII_ATTRIBUTES::agi_limit].min
    return n
  end
  #--------------------------------------------------------------------------
  # ● MaxHP の設定
  #    new_maxhp : 新しい MaxHP
  #--------------------------------------------------------------------------
  def maxhp=(new_maxhp)
    @maxhp_plus += new_maxhp - self.maxhp
    @maxhp_plus = [[@maxhp_plus, -9999].max, 9999].min
    @hp = [@hp, self.maxhp].min
  end
  #--------------------------------------------------------------------------
  # ● MaxMP の設定
  #    new_maxmp : 新しい MaxMP
  #--------------------------------------------------------------------------
  def maxmp=(new_maxmp)
    @maxmp_plus += new_maxmp - self.maxmp
    @maxmp_plus = [[@maxmp_plus, -9999].max, 9999].min
    @mp = [@mp, self.maxmp].min
  end
  #--------------------------------------------------------------------------
  # ● 攻撃力の設定
  #    new_atk : 新しい攻撃力
  #--------------------------------------------------------------------------
  def atk=(new_atk)
    @atk_plus += new_atk - self.atk
    @atk_plus = [[@atk_plus, -999].max, 999].min
  end
  #--------------------------------------------------------------------------
  # ● 防御力の設定
  #    new_def : 新しい防御力
  #--------------------------------------------------------------------------
  def def=(new_def)
    @def_plus += new_def - self.def
    @def_plus = [[@def_plus, -999].max, 999].min
  end
  #--------------------------------------------------------------------------
  # ● 精神力の設定
  #    new_spi : 新しい精神力
  #--------------------------------------------------------------------------
  def spi=(new_spi)
    @spi_plus += new_spi - self.spi
    @spi_plus = [[@spi_plus, -999].max, 999].min
  end
  #--------------------------------------------------------------------------
  # ● 敏捷性の設定
  #    agi : 新しい敏捷性
  #--------------------------------------------------------------------------
  def agi=(new_agi)
    @agi_plus += new_agi - self.agi
    @agi_plus = [[@agi_plus, -999].max, 999].min
  end
  #--------------------------------------------------------------------------
  # ● HP の変更
  #    hp : 新しい HP
  #--------------------------------------------------------------------------
  def hp=(hp)
    @hp = [[hp, maxhp].min, 0].max
    if @hp == 0 and not state?(1) and not @immortal
      add_state(1)                # 戦闘不能 (ステート 1 番) を付加
      @added_states.push(1)
    elsif @hp > 0 and state?(1)
      remove_state(1)            # 戦闘不能 (ステート 1 番) を解除
      @removed_states.push(1)
    end
  end
  #--------------------------------------------------------------------------
  # ● MP の変更
  #    mp : 新しい MP
  #--------------------------------------------------------------------------
  def mp=(mp)
    @mp = [[mp, maxmp].min, 0].max
  end
  #--------------------------------------------------------------------------
  # ● 全回復
  #--------------------------------------------------------------------------
end
UNLIMITED GAME_ENEMY
Código:

#==============================================================================
# ■ Orochii's Unlimited Game_Enemy
#------------------------------------------------------------------------------
# La función de ésta clase es añadir multiplicadores a los estados de los
#monstruos.
#==============================================================================
module OROCHII_MONSTER
  ENEMY_MULT_HP = {
  37 => 20.2
  }
  ENEMY_MULT_MP = {
  37 => 2
  }
  ENEMY_MULT_ATK = {
  37 => 2
  }
  ENEMY_MULT_DEF = {
  37 => 2
  }
  ENEMY_MULT_SPI = {
  37 => 2
  }
  ENEMY_MULT_AGI = {
  37 => 2
  }
  ENEMY_MULT_EXP = {
  37 => 2
  }
  ENEMY_MULT_GOLD = {
  37 => 2
  }
end

class Game_Enemy < Game_Battler

  #--------------------------------------------------------------------------
  # ● 基本 MaxHP の取得
  #--------------------------------------------------------------------------
  def base_maxhp
    if OROCHII_MONSTER::ENEMY_MULT_HP[@enemy_id]!=nil
      return enemy.maxhp*OROCHII_MONSTER::ENEMY_MULT_HP[@enemy_id].floor
    end
    return enemy.maxhp
  end
  #--------------------------------------------------------------------------
  # ● 基本 MaxMP の取得
  #--------------------------------------------------------------------------
  def base_maxmp
    if OROCHII_MONSTER::ENEMY_MULT_MP[@enemy_id]!=nil
      return enemy.maxmp*OROCHII_MONSTER::ENEMY_MULT_MP[@enemy_id].floor
    end
    return enemy.maxmp
  end
  #--------------------------------------------------------------------------
  # ● 基本攻撃力の取得
  #--------------------------------------------------------------------------
  def base_atk
    if OROCHII_MONSTER::ENEMY_MULT_ATK[@enemy_id]!=nil
      return enemy.atk*OROCHII_MONSTER::ENEMY_MULT_ATK[@enemy_id].floor
    end
    return enemy.atk
  end
  #--------------------------------------------------------------------------
  # ● 基本防御力の取得
  #--------------------------------------------------------------------------
  def base_def
    if OROCHII_MONSTER::ENEMY_MULT_DEF[@enemy_id]!=nil
      return enemy.def*OROCHII_MONSTER::ENEMY_MULT_DEF[@enemy_id].floor
    end
    return enemy.def
  end
  #--------------------------------------------------------------------------
  # ● 基本精神力の取得
  #--------------------------------------------------------------------------
  def base_spi
    if OROCHII_MONSTER::ENEMY_MULT_SPI[@enemy_id]!=nil
      return enemy.spi*OROCHII_MONSTER::ENEMY_MULT_SPI[@enemy_id].floor
    end
    return enemy.spi
  end
  #--------------------------------------------------------------------------
  # ● 基本敏捷性の取得
  #--------------------------------------------------------------------------
  def base_agi
    if OROCHII_MONSTER::ENEMY_MULT_AGI[@enemy_id]!=nil
      return enemy.agi*OROCHII_MONSTER::ENEMY_MULT_AGI[@enemy_id].floor
    end
    return enemy.agi
  end
  #--------------------------------------------------------------------------
  # ● 命中率の取得
  #--------------------------------------------------------------------------
  def hit
    return enemy.hit
  end
  #--------------------------------------------------------------------------
  # ● 回避率の取得
  #--------------------------------------------------------------------------
  def eva
    return enemy.eva
  end
  #--------------------------------------------------------------------------
  # ● クリティカル率の取得
  #--------------------------------------------------------------------------
  def cri
    n = 10
    #n += 18 if has_doubleCritical
    return enemy.has_critical ? n : 0
  end
  #--------------------------------------------------------------------------
  # ● 経験値の取得
  #--------------------------------------------------------------------------
  def exp
    if OROCHII_MONSTER::ENEMY_MULT_EXP[@enemy_id]!=nil
      return enemy.exp*OROCHII_MONSTER::ENEMY_MULT_EXP[@enemy_id].floor
    end
    return enemy.exp
  end
  #--------------------------------------------------------------------------
  # ● お金の取得
  #--------------------------------------------------------------------------
  def gold
    if OROCHII_MONSTER::ENEMY_MULT_GOLD[@enemy_id]!=nil
      return enemy.exp*OROCHII_MONSTER::ENEMY_MULT_GOLD[@enemy_id].floor
    end
    return enemy.gold
  end
end

INSTRUCCIONES
Pegar antes del main. Son tres scripts, pero si se les hace más cómodo los pegan en uno sólo. Creo que debería hacerlo yo después x'DDD ("pegando" también las configuraciones que están al inicio de cada script), pero me entra la pereza como siempre ·3·.

CRÉDITOS
Ummm... a Shirono porque era una petición suya Ópalo Tuerto, y a mí por ser tan genio 8D (not really). Y a mi perro por obedecer y no meterse a la casa xD. Si no aparece mi perro en sus créditos (se llama Odin) los demando :DD (lean el inicio del script para información certera sobre ésto x'D).

F.A.Q
Por el momento, nop Ópalo Guiño.

Saludos y suerte,
Orochii Zouveleki

D.A.C.

avatar
He llegado a este tema revisando y corrigiendo los scripts. ¡No me había dado cuenta de que estaba posteado (de forma perfecta, por cierto)! Aunque no conozco ningún jugador que haya alcanzado el límite de nivel 99 en RPG Maker, reconozco que siempre me he quedado con las ganas de tener niveles infinitos. ¡Muy buen aporte! +1

orochii

avatar
Yo es que uso la plantilla de los scripts que se usa en HBGames.ORG, que me pareció que contenía la información necesaria para todo tipo de problema Ópalo Sonriente.
Es bueno que te guste el script, ojala les parezca útil además a quienes quieran romper barreras xD. Lo hice "gratis" además xD, ya que era algo que había intentado anteriormente en el RMXP (como una prueba nada más), pero gracias a que el VX está tan bien ordenadito Ópalo Gato... la compatibilidad es 400% mejor a lo que hubiera podido compartir x3.

Salut,
Orochii Zouveleki

#4 Re: [VX] "Unlimited" Stats (estados ilimitados) el Sáb Abr 21, 2012 3:35 am

gensuru


Hola, esta muy bueno el script, pero tengo un problema, resulta que al subirle a mi personaje a mas de nivel 99, este queda con 1 de agi y la defensa y el espiritu se incrementan mas alla de lo que deberia llegar como máximo, en el caso del ataque queda con el que deberia quedar al nivel 99.

Una duda, ¿como hago para que los monstruos tengan mas de 99999 de hp?, acaso hay que ponerle el hp maximo en el tag de la base de datos del monstruo o tengo que cambiar mi rpg maker, porque yo uso el vx version 1.00, ¿tendra algo que ver la versión?

orochii

avatar
En cuanto a los estados del personaje, para calcular los estados de niveles más altos usa lo siguiente...
Estado Nv99 + (Estado Nv99 - Estado Nv.98)*(NvActual-99)

Es decir, que si el cambio en el estado del nivel 98 al 99 es en negativo, en los siguientes niveles el estado seguirá disminuyendo. Si el estado del Nv98 al 99 queda igual, no volverá a aumentar. Y si aumenta un poco, seguirá aumentando lo mismo hasta el fin de los tiempos x'D.
La parte de la agilidad quedándose en 1 es algo que me preocupa xD, no sé si podrías revisar y hacer pruebas para ver si cambia. Supuestamente el tratamiento que se le da a los estados es el mismo, entonces debería ser eso, revisar las diferencias del Nv98 al 99.

Y para hacer que los monstruos tengan más de 99999hp, debes modificar el script de Unlimited Game_Enemy... en ésta parte:
Código:
ENEMY_MULT_HP = {
  37 => 20.2
  }
Donde 37 sería la ID del enemigo, y 20.2 el número por el que se multiplicará el HP en éste caso.
Entonces, si quieres un monstruo con 400000 de vida, le pones un multiplicador de 4, así...
Código:
ENEMY_MULT_HP = {
  1 => 4
  }
Y en la base de datos, le pones 99999 de vida. Tendrá en realidad 399996 pero esos 4 de vida son despreciables x'D.

También claro, puedes agregar varios monstruos que tengan multiplicador, todos los que quieras. Así:
Código:
ENEMY_MULT_HP = {
  1 => 4, #Pones una coma
  2 => 45, #Y agregas una fila más con el mismo "formato"
  15 => 74, #Tantos como quieras, y sin orden específico
  7 => 1.8, #También puedes multiplicar por decimales
  }
De igual forma, se usan el resto de apartados. ENEMY_MULT_MP, ENEMY_MULT_ATK, ENEMY_MULT_DEF, ENEMY_MULT_SPI, ENEMY_MULT_AGI, ENEMY_MULT_EXP y ENEMY_MULT_GOLD

Tengo que actualizar algún día este script, porque tengo presente lo incómodo que es hacer las cosas así, en script y otra parte en el editor. Intentaré sacar tiempo algún día para mejorar eso...

Gracias por el "reporte" gensuru, salut,
Orochii

Contenido patrocinado


Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

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