¡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
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 3390 miembros registrados.
El último usuario registrado es Byakuya88.

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

[RMXP] Causar Estados Segun %

 :: RPG Maker :: Scripts

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [RMXP] Causar Estados Segun %

Mensaje por MidnightMoon el 2011-08-17, 01:31

Buen Dia, hace al rato me encontre con un problema de que nosabia comodefinir exitosamente y de una manera mas facil con que porcentaje se curaban los estados entonces encontre un Script para definir el porcentaje con armas (Creado originalmente por gerkrt/gerrtunk), pero yo lo necesitaba para habilidades; entonces lo modifique. XD

Descripcion:

Permite determinar el porcentaje de causar cada estado con habilidades y/o armas; tambien permite configurar que estados curar al causar ese estado con esa arma o Habilidad. Despues de sacar el porcentaje hace el calculo de fallo normal.
Código:

Weapon_state_rates = {} #Este sirve para armas
  Skill_state_rates = {}  #Este sirve para habilidades

Script:
Código:

#==============================================================================
# Causar estados basado en % para las armas
# By gerkrt/gerrtunk
# Version: 1.0
# License: GPL, credits
# Date: 23/12/2010
# Visita  para encontrar
# la version mas corregida o actualizada de este script
#
# Modify By: Midnight Moon
# Date: 08/08/2011
# Modificado por Midnight Moon, para que tambien sea valido para habilidades.
# y tambien se puede configurar que estados curara al causar un estado.
#==============================================================================

=begin

--------Introduccion-----------

Normalmente puedes añadir cualquier combinacion de estados para las armas, pero
no puedes tener ningun otro control. Con esto puedes usar qualquier estado
basado en %.
Tambien funciona para Habilidades

------Instrucciones-------------

El % significa las posibilidaddes de que el estado pueda impactar al enemigo,
tras ese impacto se aplica la formula de aplicar estado tradicional.

arma_id=>[[id_estado1, posibilidad, [id_estados_a_curar]], [id_estado2, posibilidad], [id_estados_a_curar]]

Weapon_state_rates = {3=>[[2, 100, [2, 3]], [4,100, [2]]], 11=>[[2, 100, [3, 6]], [4,100, [4, 6]]] }

You can add any number of states for weapon, and weapons, just add a , before these.
and respect the {}.

Puedes añadir cualquier numeros de estados a cada arma y tantas armas como quieras
tambien, solo añade el , final y respeta el ().

---------Sintaxis--------------

Puedes dividir las lineas largas como estas:

Weapon_state_rates = {
  3=>[[2, 100, [2, 3]], [4,100, [2]]],
  11=>[[2, 100, [3, 6]], [4,100, [4, 6]]]
}

Mira que la nueva linea tiene que estar tras el , y en la final no pongas
un , final.


=end


module ConfigStatesRates
  Weapon_state_rates = {}
  Skill_state_rates = {
    12=>[[14, 20, [2, 9, 10, 13, 15]]],
    17 => [[15, 20, [1, 9, 14]]]
  }
end

class Game_Battler
  #--------------------------------------------------------------------------
  # - Aplicar el efecto de ataque normal
  #    attacker : Atacante (Jugador de batalla)
  #--------------------------------------------------------------------------
  def attack_effect(attacker)
    # Vaciar en Flag de ataque critico
    self.critical = false
    # Juicio del primer golpe
    hit_result = (rand(100) < attacker.hit)
    # Caso de Hit
    if hit_result == true
      # Calculo de daños basicos
      atk = [attacker.atk - self.pdef / 2, 0].max
      self.damage = atk * (20 + attacker.str) / 20
      # Correccion de atributo
      self.damage *= elements_correct(attacker.element_set)
      self.damage /= 100
      # Cuando el marco del daño es positivo
      if self.damage > 0
        # Correccion de ataque critico
        if rand(100) < 4 * attacker.dex / self.agi
          self.damage *= 2
          self.critical = true
        end
        # Correccion de Defensa
        if self.guarding?
          self.damage /= 2
        end
      end
      # Distribucion
      if self.damage.abs > 0
        amp = [self.damage.abs * 15 / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      # Juicio del segundo Hit
      eva = 8 * self.agi / attacker.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
    end
    # Caso de Hit
    if hit_result == true
      # Lanzamiento de estado se shock
      remove_states_shock
      # Daños sustraidos del PV
      self.hp -= self.damage
      # Cambios de estado
      @state_changed = false
      if attacker.is_a? Game_Actor and ConfigStatesRates::Weapon_state_rates[attacker.weapon_id] != nil
        state_add = []
        state_remove = []
        # Loop over state rates and check the posibiltys. Create a state list.
        for state_rate in ConfigStatesRates::Weapon_state_rates[attacker.weapon_id]
            if rand(100) < state_rate[1]
              state_add.push(state_rate[0])
              for s in state_rate[2]
                  state_remove.push(s)
              end
            end
        end
        states_plus(state_add) 
        states_remove(state_remove)
      else
        states_plus(attacker.plus_state_set)
        states_minus(attacker.minus_state_set)
      end
    # Al haber un error
    else
      # Al intentar dañar, opciones de ataque fallido
      self.damage = "Fallo!"
      # Vaciar Flag de ataque critico
      self.critical = false
    end
    # Fin del metodo
    return true
  end
  #--------------------------------------------------------------------------
  # - Aplicar efecto de habilidad
  #    user  : Jugador de batalla que usa la habilidad
  #    skill : La habilidad
  #--------------------------------------------------------------------------
  def skill_effect(user, skill)
    # Vaciar Flag de ataque critico
    self.critical = false
    # Efecto de rango de la habilidad (Por un aliado de PV 1). HP 0
    # O el efecto de la habilidad (Por un aliado de PV 0).
    # Cuando tiene mas de PV 1
    if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
      ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
      # Fin del Metodo
      return false
    end
    # Vaciar Flag efectiva
    effective = false
    # Flag efectiva cuando ID de Evento Comun es efectiva
    effective |= skill.common_event_id > 0
    # Juicio del primer golpe
    hit = skill.hit
    if skill.atk_f > 0
      hit *= user.hit / 100
    end
    hit_result = (rand(100) < hit)
    # Si habilidad incorrecta, fijar Flag eficaz
    effective |= hit < 100
    # Si Golpeas
    if hit_result == true
      # Calculos de Fuerza
      power = skill.power + user.atk * skill.atk_f / 100
      if power > 0
        power -= self.pdef * skill.pdef_f / 200
        power -= self.mdef * skill.mdef_f / 200
        power = [power, 0].max
      end
      # Calculos de amplificacion
      rate = 20
      rate += (user.str * skill.str_f / 100)
      rate += (user.dex * skill.dex_f / 100)
      rate += (user.agi * skill.agi_f / 100)
      rate += (user.int * skill.int_f / 100)
      # Calculos de daño basico
      self.damage = power * rate / 20
      # Correccion de Atributo
      self.damage *= elements_correct(skill.element_set)
      self.damage /= 100
      # Cuando el marco de un daño es positivo
      if self.damage > 0
        # Correccion de Defensa
        if self.guarding?
          self.damage /= 2
        end
      end
      # Distribucion
      if skill.variance > 0 and self.damage.abs > 0
        amp = [self.damage.abs * skill.variance / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      # Juicio del segundo Hit
      eva = 8 * self.agi / user.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
      # Si habilidad incorrecta, fijar Flag eficaz
      effective |= hit < 100
    end
    # Si golpeas
    if hit_result == true
      # Fuerza
      if skill.power != 0 and skill.atk_f > 0
        # Lanzamiento de estado de Shock
        remove_states_shock
        # Poner Flag efectiva
        effective = true
      end
      # Daño sustraido del PV
      last_hp = self.hp
      self.hp -= self.damage
      effective |= self.hp != last_hp
      # Cambio de estado
      @state_changed = false
      if ConfigStatesRates::Skill_state_rates[skill.id] != nil
        state_add = []
        state_remove = []
        # Loop over state rates and check the posibiltys. Create a state list.
        for state_rate in ConfigStatesRates::Skill_state_rates[skill.id]
          if rand(100) < state_rate[1]
            state_add.push(state_rate[0])
            for s in state_rate[2]
              state_remove.push(s)
            end
          end
        end
        states_plus(state_add)
        states_minus(state_remove)
        #effective |= states_plus(state_add)
        #effective |= states_minus(state_remove)
      else
        states_plus(skill.plus_state_set)
        states_minus(skill.minus_state_set)
        #effective |= states_plus(skill.plus_state_set)
        #effective |= states_minus(skill.minus_state_set)
      end
      # Fuerza. Cuando es 0
      if skill.power == 0
        # Una secuencia de caracteres vacia es puesta como daño
        self.damage = ""
        # Cuando no se cambia de estado
        unless @state_changed
          # Al dañar, Poner "Fallo!"
          self.damage = "Fallo!"
        end
      end
    # En caso de error
    else
      # Al dañar, Poner "Fallo!"
      self.damage = "Fallo!"
    end
    # Cuando no esta en batalla
    unless $game_temp.in_battle
      # Al dañar, poner nil
      self.damage = nil
    end
    # Fin del metodo
    return effective
  end
end
Espero les sea de utilidad. Yo estuve probandolo y funcionaba bien, si seorigina un bug favor de notificar para checar si yo me equivoqueen algo XP

MidnightMoon
Soñador
Soñador

0/3

Créditos 135

Gracias : 3

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Causar Estados Segun %

Mensaje por LukeDuke el 2011-08-17, 02:53

Perdon por la ignorancia , pero que es lo que hace exactamente ?
O sea puedo hacer que cada skil tenga un porcentaje distinto de causar estado ?
por ejemplo puedo tener 2 skiles que paralicen pero uno cn 20 porciento y otro 30 ?
Me gustaria saber porq el tema me interesa, pero desgraciadamente soi nuevo y tengo 0 scrips.
Gracias.

LukeDuke
Iniciado
Iniciado

0/3

Créditos 19

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Causar Estados Segun %

Mensaje por MidnightMoon el 2011-08-17, 02:56

pues si realmente hace eso...
Es que por default cada tecnica le pones que cause un estado y es casi seguro que lo causa al dar en el blanco la unica variacion es con la evasion del enemigo..
Por eso este script le da un porcentaje a cada tecnica... para dar un efecto tipo pokemon
que una tecnica tiene 20% de causas paralizis otra 50% y asi XD

SAYONARA

MidnightMoon
Soñador
Soñador

0/3

Créditos 135

Gracias : 3

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Causar Estados Segun %

Mensaje por LukeDuke el 2011-08-17, 03:25

EXCELENTE , Lo hiciste vos ? jaja sos un genio xD

Me podrias ayudar diciendo como lo pongo paso por paso ?¿ perdona que te joda pero todos los scrips me tiran algun error, y soi nuevo :S

LukeDuke
Iniciado
Iniciado

0/3

Créditos 19

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Causar Estados Segun %

Mensaje por MidnightMoon el 2011-08-17, 03:30

De hecho yo solo lo modifique XD
Los scripts los pones arriba del main y algunos ya con eso sirven otros tienes que poner mas cosas y este por lo menos solo poniendolo asi debe de servir.

Luego busca estas lineas
Weapon_state_rates = {
}
Skill_state_rates = {
12=>[[14, 20, [2, 9, 10, 13, 15]]],
17 => [[15, 20, [1, 9, 14]]]
}
Y debes de ponerlos con el siguiente formato...
id_arma_o_habilidad (Este es el id de la Base de datos) => [
[id_estado, porcentaje, [id_habilidades a curar separados con una coma] ]
]

Debe de quedar como en el ejemplo que puse arriba...
y pues ya con eso

SAYONARA

MidnightMoon
Soñador
Soñador

0/3

Créditos 135

Gracias : 3

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Causar Estados Segun %

Mensaje por gerrtunk el 2011-08-17, 20:57

Bueh ya solo queda añadir soporte para las armaduras, que era algo que tenia pendiente.

Creo que es mejor unificar el desarrollo en unico hilo o script por eso, de todas formas añadire tu modificacion a mis listas.

gerrtunk
Principiante
Principiante

0/3

Créditos 364

Gracias : 22

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Causar Estados Segun %

Mensaje por Contenido patrocinado Hoy a las 18:14


Contenido patrocinado


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.