¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Últimos temas
» Tutorial Interactivo [Uso de interruptores]
por Ledai Hoy a las 16:58

» Necesito Script
por Elian84 Hoy a las 04:44

» Holaaa a tod@s!!!
por chronoMxx Hoy a las 03:41

» [AYUDA]Hootshot de moghunter
por Rudy_kinneas Hoy a las 01:06

» El poder oculto (Segunda entrega)
por alex1633 Ayer a las 23:18

» Hola mucho gusto
por Hk Diamond Ayer a las 13:49

» SoraDeathss se presenta!
por chronoMxx Ayer a las 07:50

» {AYUDA}Blizz-ABS Script
por chronoMxx Ayer a las 06:45

» las cosas como son...
por Bleuw Ayer a las 04:18

» Busco artistas graficos para proyecto serio
por Rudy_kinneas 2016-12-02, 20:52

Afiliados
Estadísticas
Tenemos 3381 miembros registrados.
El último usuario registrado es Hk Diamond.

Nuestros miembros han publicado un total de 79767 mensajes en 11247 argumentos.
Navega con Google Chrome
[DESCARGA]

[XP] Element/State Rate States v1.0

 :: RPG Maker :: Scripts

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP] Element/State Rate States v1.0

Mensaje por Wecoc el 2016-08-07, 03:21

Éste script permite estados con modificación en la efectividad de atributos y estados.

Por defecto en los estados solo se puede modificar la resistencia a un atributo mediante un tick, que lo que hace es dividir la debilidad para ese atributo a la mitad.

Imagen:

Eso, a parte de que puede tener algunos problemas numéricos puesto que los valores de los atributos pueden ser negativos, 0 o positivos y el tick divide a la mitad indistintamente, no se corresponde mucho a cómo funcionan realmente los atributos y estados en la base de datos, que van con letras A-F.

Imagen:

Por eso hice dos scripts que hacen que puedas sumar o restar posiciones en vez de simplemente dividir por la mitad.

Aquí los dos scripts, uno es para los atributos (primera columna) y el otro para los estados (segunda columna). Se configura en el mismo script, ya puse cómo hacerlo.

Código:
#==============================================================================
# ** Element Rate States v1.0
#------------------------------------------------------------------------------
# Estados con modificación en la efectividad de atributos
# Autor: Wecoc (no requiere créditos)
#==============================================================================

module ZTLA_States
 
  # Estado => [ID elemento, +diferencia A-F]
 
  Element_Rate_States = {1 => [[1, 2], [2, -1]]}
 
  #----------------------------------------------------------------------------
  # Ejemplo: {1 => [[1, 2], [2, -1]]}
  # El estado 1 aumenta 2 el atributo 1 (C->A) y
  # resta 1 el atributo 2 (C->D)
  #----------------------------------------------------------------------------
  # Si usas ACE_WF [#004] ELEMENT_RATE el valor a sumar o restar es absoluto:
  # {1 => [[1, 100], [2, -50]]}
  #----------------------------------------------------------------------------
end

#==============================================================================
# * Game_Actor
#==============================================================================

class Game_Actor < Game_Battler
  def element_rate(element_id)
    if Game_Actor.method_defined?(:element_values) # ACE_WF [#004] ELEMENT_RATE
      result = self.element_values[element_id]
      for i in @states
        if ZTLA_States::Element_Rate_States.keys.include?(i)
          state_elements = ZTLA_States::Element_Rate_States[i]
          for j in 0...state_elements.size
            if state_elements[j][0] == element_id
              result += state_elements[j][1]
            end
          end
        end
      end
      for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
        armor = $data_armors[i]
        if armor != nil and armor.guard_element_set.include?(element_id)
          result -= 100
        end
      end
      for i in @states
        if $data_states[i].guard_element_set.include?(element_id)
          result -= 100
        end
      end
    else # Default
      table = [0,200,150,100,50,0,-100]
      element_rank = $data_classes[@class_id].element_ranks[element_id]
      for i in @states
        if ZTLA_States::Element_Rate_States.keys.include?(i)
          state_elements = ZTLA_States::Element_Rate_States[i]
          for j in 0...state_elements.size
            if state_elements[j][0] == element_id
              element_rank -= state_elements[j][1]
            end
          end
        end
      end
      for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
        armor = $data_armors[i]
        if armor != nil and armor.guard_element_set.include?(element_id)
          element_rank += 2
        end
      end
      for i in @states
        if $data_states[i].guard_element_set.include?(element_id)
          element_rank += 2
        end
      end
      element_rank = [[element_rank, 1].max, 6].min
      result = table[element_rank]
    end
    return result
  end
end

#==============================================================================
# * Game_Enemy
#==============================================================================

class Game_Enemy < Game_Battler
  def element_rate(element_id)
    if Game_Enemy.method_defined?(:element_values) # ACE_WF [#004] ELEMENT_RATE
      result = self.element_values[element_id]
      for i in @states
        if ZTLA_States::Element_Rate_States.keys.include?(i)
          state_elements = ZTLA_States::Element_Rate_States[i]
          for j in 0...state_elements.size
            if state_elements[j][0] == element_id
              result += state_elements[j][1]
            end
          end
        end
      end
      for i in @states
        if $data_states[i].guard_element_set.include?(element_id)
          result -= 100
        end
      end
    else # Default
      table = [0,200,150,100,50,0,-100]
      element_rank = $data_enemies[@enemy_id].element_ranks[element_id]
      for i in @states
        if ZTLA_States::Element_Rate_States.keys.include?(i)
          state_elements = ZTLA_States::Element_Rate_States[i]
          for j in 0...state_elements.size
            if state_elements[j][0] == element_id
              element_rank -= state_elements[j][1]
            end
          end
        end
      end
      for i in @states
        if $data_states[i].guard_element_set.include?(element_id)
          element_rank += 2
        end
      end
      element_rank = [[element_rank, 1].max, 6].min
      result = table[element_rank]
    end
    return result
  end
end

Código:
#==============================================================================
# ** State Rate States v1.0
#------------------------------------------------------------------------------
# Estados con modificación en la efectividad de estados
# Autor: Wecoc (no requiere créditos)
#==============================================================================

module ZTLA_States
 
  # Estado => [ID elemento, +diferencia A-F]
 
  State_Rate_States = {1 => [[1, 2], [2, -1]]}
 
  #----------------------------------------------------------------------------
  # Ejemplo: {1 => [[1, 2], [2, -1]]}
  # El estado 1 aumenta 2 el estado 1 (C->A) y
  # resta 1 el estado 2 (C->D)
  #----------------------------------------------------------------------------
  # Si usas ACE_WF [#005] STATE_RATE el valor a sumar o restar es absoluto:
  # {1 => [[1, 100], [2, -50]]}
  #----------------------------------------------------------------------------
end

#==============================================================================
# * Game_Actor
#==============================================================================

class Game_Actor < Game_Battler
  def state_rate(state_id)
    if Game_Actor.method_defined?(:state_values) # ACE_WF [#005] STATE_RATE
      result = self.state_values[state_id]
      for i in @states
        if ZTLA_States::State_Rate_States.keys.include?(i)
          state_states = ZTLA_States::State_Rate_States[i]
          for j in 0...state_states.size
            if state_states[j][0] == state_id
              result += state_states[j][1]
            end
          end
        end
      end
    else # Default
      table = [0,100,80,60,40,20,0]
      state_rank = $data_classes[@class_id].state_ranks[state_id]
      for i in @states
        if ZTLA_States::State_Rate_States.keys.include?(i)
          state_states = ZTLA_States::State_Rate_States[i]
          for j in 0...state_states.size
            if state_states[j][0] == state_id
              state_rank -= state_states[j][1]
            end
          end
        end
      end
      state_rank = [[state_rank, 1].max, 6].min
      result = table[state_rank]
    end
    return result
  end
end

#==============================================================================
# * Game_Enemy
#==============================================================================

class Game_Enemy < Game_Battler
  def state_rate(state_id)
    if Game_Enemy.method_defined?(:state_values) # ACE_WF [#005] STATE_RATE
      result = self.state_values[state_id]
      for i in @states
        if ZTLA_States::State_Rate_States.keys.include?(i)
          state_states = ZTLA_States::State_Rate_States[i]
          for j in 0...state_states.size
            if state_states[j][0] == state_id
              result += state_states[j][1]
            end
          end
        end
      end
    else # Default
      table = [0,100,80,60,40,20,0]
      state_rank = $data_enemies[@enemy_id].state_ranks[state_id]
      for i in @states
        if ZTLA_States::State_Rate_States.keys.include?(i)
          state_states = ZTLA_States::State_Rate_States[i]
          for j in 0...state_states.size
            if state_states[j][0] == state_id
              state_rank -= state_states[j][1]
            end
          end
        end
      end
      state_rank = [[state_rank, 1].max, 6].min
      result = table[state_rank]
    end
    return result
  end
end

#==============================================================================
# * Game_Battler
#==============================================================================

class Game_Battler
  def states_plus(plus_state_set)
    effective = false
    for i in plus_state_set
      unless self.state_guard?(i)
        effective |= self.state_full?(i) == false
        if $data_states[i].nonresistance
          @state_changed = true
          add_state(i)
        elsif self.state_full?(i) == false
          if rand(100) < self.state_rate(i)
            @state_changed = true
            add_state(i)
          end
        end
      end
    end
    return effective
  end
end

Los scripts Element Rate (#004) y State Rate (#005) de ACE WF hacen que en vez de por letras vaya numéricamente, de modo que puedas tener valores intermedios de debilidad a atributo o estado.

Éstos nuevos dos scripts de éste topic son compatibles con los de ACE WF, pero deben ir DEBAJO de esos en la lista de scripts.

PD:
Recordad que la conversión entre valor y letra en elementos y estados es un poco distinta, la adjunto aquí debajo:

ELEMENTOS

A
200
B
150
C
100
D
50
E
0
F
-100

ESTADOS

A
100
B
80
C
60
D
40
E
20
F
0

Edito: Había un pequeño fallo de compatibilidad entre los dos pero ya está cambiado.

Wecoc
Administrador
Administrador



Créditos 8263

Gracias : 372

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 :: RPG Maker :: Scripts

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