Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[RMXP] Equipo que incrementa / reduce parámetros por %

Ver el tema anterior Ver el tema siguiente Ir abajo

[RMXP] Equipo que incrementa / reduce parámetros por %

Mensaje por Wecoc el 2013-12-06, 23:26

Éste script tan sencillo hace que algunas armas y protectores puedan subir parámetros por porcentaje y no valor absoluto.

Código:
#==============================================================================
# Equipo que incrementa / reduce parámetros por %
# ------------------------------------------------------------
# Autor: Wecoc (créditos no necesarios)
#==============================================================================

module PERCENT_EQUIP
  WEAPON_STR = [1, 2] # IDs de las armas en las que la fuerza va por %
  ARMOR_STR = [1, 4] # IDs de los protectors en las que la fuerza va por %
  
  WEAPON_DEX = [1] # IDs de las armas en las que la destreza va por %
  ARMOR_DEX = [] # IDs de los protectors en las que la destreza va por %
  
  WEAPON_AGI = [4, 5, 6] # IDs de las armas en las que la agilidad va por %
  ARMOR_AGI = [] # IDs de los protectors en las que la agilidad va por %

  WEAPON_INT = [] # IDs de las armas en las que la inteligencia (magia) va por %
  ARMOR_INT = [] # IDs de los protectrs en las que inteligencia (magia) va por %
end

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # * Get Basic Strength
  #--------------------------------------------------------------------------
  def base_str
    n = $data_actors[@actor_id].parameters[2, @level]
    a = 0
    m = 1.00
    
    weapon = $data_weapons[@weapon_id]
    armor1 = $data_armors[@armor1_id]
    armor2 = $data_armors[@armor2_id]
    armor3 = $data_armors[@armor3_id]
    armor4 = $data_armors[@armor4_id]
    
    if PERCENT_EQUIP::WEAPON_STR.include?(weapon.id)
      m += weapon != nil ? weapon.str_plus.quo(100) : 0
    else
      a += weapon != nil ? weapon.str_plus : 0
    end
    
    if PERCENT_EQUIP::ARMOR_STR.include?(armor1.id)
      m += armor1 != nil ? armor1.str_plus.quo(100) : 0
    else
      a += armor1 != nil ? armor1.str_plus : 0
    end

    if PERCENT_EQUIP::ARMOR_STR.include?(armor2.id)
      m += armor2 != nil ? armor2.str_plus.quo(100) : 0
    else
      a += armor2 != nil ? armor2.str_plus : 0
    end
    
    if PERCENT_EQUIP::ARMOR_STR.include?(armor3.id)
      m += armor3 != nil ? armor3.str_plus.quo(100) : 0
    else
      a += armor3 != nil ? armor3.str_plus : 0
    end
    
    if PERCENT_EQUIP::ARMOR_STR.include?(armor4.id)
      m += armor4 != nil ? armor4.str_plus.quo(100) : 0
    else
      a += armor4 != nil ? armor4.str_plus : 0
    end
    
    return [[((n * m) + a).round, 1].max, 999].min
  end
  #--------------------------------------------------------------------------
  # * Get Basic Dexterity
  #--------------------------------------------------------------------------
  def base_dex
    n = $data_actors[@actor_id].parameters[3, @level]
    a = 0
    m = 1.00
    
    weapon = $data_weapons[@weapon_id]
    armor1 = $data_armors[@armor1_id]
    armor2 = $data_armors[@armor2_id]
    armor3 = $data_armors[@armor3_id]
    armor4 = $data_armors[@armor4_id]
    
    if PERCENT_EQUIP::WEAPON_DEX.include?(weapon.id)
      m += weapon != nil ? weapon.dex_plus.quo(100) : 0
    else
      a += weapon != nil ? weapon.dex_plus : 0
    end
    
    if PERCENT_EQUIP::ARMOR_DEX.include?(armor1.id)
      m += armor1 != nil ? armor1.dex_plus.quo(100) : 0
    else
      a += armor1 != nil ? armor1.dex_plus : 0
    end

    if PERCENT_EQUIP::ARMOR_DEX.include?(armor2.id)
      m += armor2 != nil ? armor2.dex_plus.quo(100) : 0
    else
      a += armor2 != nil ? armor2.dex_plus : 0
    end
    
    if PERCENT_EQUIP::ARMOR_DEX.include?(armor3.id)
      m += armor3 != nil ? armor3.dex_plus.quo(100) : 0
    else
      a += armor3 != nil ? armor3.dex_plus : 0
    end
    
    if PERCENT_EQUIP::ARMOR_DEX.include?(armor4.id)
      m += armor4 != nil ? armor4.dex_plus.quo(100) : 0
    else
      a += armor4 != nil ? armor4.dex_plus : 0
    end
    
    return [[((n * m) + a).round, 1].max, 999].min
  end
  #--------------------------------------------------------------------------
  # * Get Basic Agility
  #--------------------------------------------------------------------------
  def base_agi
    n = $data_actors[@actor_id].parameters[4, @level]
    a = 0
    m = 1.00
    
    weapon = $data_weapons[@weapon_id]
    armor1 = $data_armors[@armor1_id]
    armor2 = $data_armors[@armor2_id]
    armor3 = $data_armors[@armor3_id]
    armor4 = $data_armors[@armor4_id]
    
    if PERCENT_EQUIP::WEAPON_AGI.include?(weapon.id)
      m += weapon != nil ? weapon.agi_plus.quo(100) : 0
    else
      a += weapon != nil ? weapon.agi_plus : 0
    end
    
    if PERCENT_EQUIP::ARMOR_AGI.include?(armor1.id)
      m += armor1 != nil ? armor1.agi_plus.quo(100) : 0
    else
      a += armor1 != nil ? armor1.agi_plus : 0
    end

    if PERCENT_EQUIP::ARMOR_AGI.include?(armor2.id)
      m += armor2 != nil ? armor2.agi_plus.quo(100) : 0
    else
      a += armor2 != nil ? armor2.agi_plus : 0
    end
    
    if PERCENT_EQUIP::ARMOR_AGI.include?(armor3.id)
      m += armor3 != nil ? armor3.agi_plus.quo(100) : 0
    else
      a += armor3 != nil ? armor3.agi_plus : 0
    end
    
    if PERCENT_EQUIP::ARMOR_AGI.include?(armor4.id)
      m += armor4 != nil ? armor4.agi_plus.quo(100) : 0
    else
      a += armor4 != nil ? armor4.agi_plus : 0
    end
    
    return [[((n * m) + a).round, 1].max, 999].min
  end
  #--------------------------------------------------------------------------
  # * Get Basic Intelligence
  #--------------------------------------------------------------------------
  def base_int
    n = $data_actors[@actor_id].parameters[5, @level]
    a = 0
    m = 1.00
    
    weapon = $data_weapons[@weapon_id]
    armor1 = $data_armors[@armor1_id]
    armor2 = $data_armors[@armor2_id]
    armor3 = $data_armors[@armor3_id]
    armor4 = $data_armors[@armor4_id]
    
    if PERCENT_EQUIP::WEAPON_INT.include?(weapon.id)
      m += weapon != nil ? weapon.int_plus.quo(100) : 0
    else
      a += weapon != nil ? weapon.int_plus : 0
    end
    
    if PERCENT_EQUIP::ARMOR_INT.include?(armor1.id)
      m += armor1 != nil ? armor1.int_plus.quo(100) : 0
    else
      a += armor1 != nil ? armor1.int_plus : 0
    end

    if PERCENT_EQUIP::ARMOR_INT.include?(armor2.id)
      m += armor2 != nil ? armor2.int_plus.quo(100) : 0
    else
      a += armor2 != nil ? armor2.int_plus : 0
    end
    
    if PERCENT_EQUIP::ARMOR_INT.include?(armor3.id)
      m += armor3 != nil ? armor3.int_plus.quo(100) : 0
    else
      a += armor3 != nil ? armor3.int_plus : 0
    end
    
    if PERCENT_EQUIP::ARMOR_INT.include?(armor4.id)
      m += armor4 != nil ? armor4.int_plus.quo(100) : 0
    else
      a += armor4 != nil ? armor4.int_plus : 0
    end
    
    return [[((n * m) + a).round, 1].max, 999].min
  end
end
CONFIGURACIÓN BÁSICA

Al principio del script hay un módulo con distintas array, esas arrays tienen las IDs de las armas o protectores en las que ése parámetro en concreto (STR, DEX, AGI o INT) será aplicado por %.

Dentro de las arrays podéis poner las array por comas. Por ejemplo

WEAPON_DEX = [1, 3, 6] # Las armas de posición 1, 3 y 6 en la base de datos tendrán la destreza (DEX) aplicada por porcentaje.



Ejemplo:

Si el héroe tiene 150 puntos de fuerza y un arma que le sube 10 puntos de fuerza, tiene 160 puntos de fuerza.

Si el héroe tiene 150 puntos de fuerza y un arma que le sube 10 % de fuerza, tiene 165 puntos de fuerza.


CONFIGURACIÓN AVANZADA (1)

Por defecto el script hace la operación así:
((n * m) + a).round

n es el valor seco del parámetro según el héroe y el nivel (el que tendría si no llevara ningún equipo), más el que se le haya sumado por objeto o engine ya incluídos.

m es el multiplicador acumulado; si un arma sube el 10%, m vale 1.10, si resta el 50% vale 0.50. Si un arma sube el 10% y una armadura sube el 15% m vale 1.25

a es el efecto de los equipos que no suben por porcentaje, si el héroe tiene un arma que resta 10 puntos y una armadura que suma 5, valdrá -5

Entonces volviendo a la fórmula, primero actúa el multiplicador por porcentaje, y luego se le suma el efecto de las demás.

Puede que interese que primero actúen los demás y luego al final el multiplicador afecte a todo.
Entonces sería cambiar la fórmula (aparece 4 veces en el script, una para cada parámetro donde está el return) por ésta:

((n + a) *m).round

Un poco de mates básicas:
Por defecto en el script, y suponiendo que tenemos 100 puntos, si tienes un arma que sube el parámetro un 20% y una armadura que sube 10 puntos

(100 * 1.2) + 10 = 130

Con la otra fórmula en cambio:

(100 + 10) * 1.2 = 132

CONFIGURACIÓN AVANZADA (2)

Puede que interese que los multiplicadores no se sumen sinó que se multipliquen entre ellos (más realista, aunque luego las pérdidas son más importantes que las ganancias). Para ello habría que cambiar todas las líneas que se parezcan a ésta:

m += weapon != nil ? weapon.int_plus.quo(100) : 0
(o en definitiva todas las que empiezan por m += )

por algo como ésto, pero usando la variable que pertocaría:

m *= weapon != nil ? (1.0 + weapon.int_plus.quo(100)) : 1

Un poco de mates básicas:
Por defecto en el script, y suponiendo que tenemos 100 puntos, si tienes un arma que sube el parámetro un 50% y una armadura que lo resta un 50%.

100 * (1 + 0.5 - 0.5) = 100

Con la otra alternativa en cambio:

100 * (1 * 1.5 * 0.5) = 75

Cualquier duda me lo decís. Tardé más en hacer el post que en hacer el script, por cierto xD
avatar
Wecoc
Administrador
Administrador



Créditos 12283

Gracias : 645

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


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