Mundo Maker
¡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 4150 miembros registrados.
El último usuario registrado es Nikerah.

Nuestros miembros han publicado un total de 84838 mensajes en 12080 argumentos.

[XP] Change States (Items y Skills)

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP] Change States (Items y Skills)

Mensaje por Wecoc el 2016-08-07, 05:59

En Items y Skills hay una opción que permite añadir o quitar un estado.

Imagen:

Éste script permite hacer una sustitución entre un estado y otro, es decir, añadir un estado solo si ya se tiene otro estado, quitando el primero.
Por ejemplo una skill que convierte todas las debilidades en fortalezas o al revés.

No pude aplicarlo con alias así que puede que tenga incompatibilidades, aún así son fáciles de arreglar y ya marqué en el script las líneas que se cambian en los métodos skill_effect y item_effect

Código:
#==============================================================================
# ** Change States (Item & Skill)
#------------------------------------------------------------------------------
# Autor: Wecoc (no requiere créditos)
#==============================================================================

module ZTLA_States
  #--------------------------------------------------------------------------
  # Skill/Item ID => [[OLD state, NEW state, (quitar viejo), (force)], ...]
  #--------------------------------------------------------------------------
  # Quitar viejo por defecto vale true, si pones false solo añadirá el nuevo
  #
  # Force por defecto vale true, si vale true solo actúa con los estados
  # implicados, si vale false también con los auto-state de esos estados
  #--------------------------------------------------------------------------
  SKILL_CONVERT_STATES = {1 => [[10, 11], [11, 10]]}
  ITEM_CONVERT_STATES = {1 => [[10, 11], [11, 10]]}
 
end

#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # * Skill Effect
  #--------------------------------------------------------------------------
  def skill_effect(user, skill)
    self.critical = false
    if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
      ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
      return false
    end
    effective = false
    effective |= skill.common_event_id > 0
    hit = skill.hit
    if skill.atk_f > 0
      hit *= user.hit / 100
    end
    hit_result = (rand(100) < hit)
    effective |= hit < 100
    if hit_result == true
      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
      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)
      self.damage = power * rate / 20
      self.damage *= elements_correct(skill.element_set)
      self.damage /= 100
      if self.damage > 0
        if self.guarding?
          self.damage /= 2
        end
      end
      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
      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)
      effective |= hit < 100
    end
    if hit_result == true
      if skill.power != 0 and skill.atk_f > 0
        remove_states_shock
        effective = true
      end
      last_hp = self.hp
      self.hp -= self.damage
      effective |= self.hp != last_hp
      # -------------------- State change ------------------------
      @state_changed = false
      old_states = @states.clone
      if ZTLA_States::SKILL_CONVERT_STATES.keys.include?(skill.id)
        c = ZTLA_States::SKILL_CONVERT_STATES[skill.id]
        for i in c
          if old_states.include?(c[0])
            remove = c[2] ; remove = true if remove == nil
            force  = c[3] ; force  = true if force  == nil
            remove_state(c[0], force) if remove == true
            add_state(c[1], force)
            effective = true
          end
        end
      end
      effective |= states_plus(skill.plus_state_set)
      effective |= states_minus(skill.minus_state_set)
      # -------------------- State change ------------------------
      if skill.power == 0
        self.damage = ""
        unless @state_changed
          self.damage = "Miss"
        end
      end
    else
      self.damage = "Miss"
    end
    unless $game_temp.in_battle
      self.damage = nil
    end
    return effective
  end
  #--------------------------------------------------------------------------
  # * Item Effect
  #--------------------------------------------------------------------------
  def item_effect(item)
    self.critical = false
    if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
      ((item.scope == 5 or item.scope == 6) and self.hp >= 1)
      return false
    end
    effective = false
    effective |= item.common_event_id > 0
    hit_result = (rand(100) < item.hit)
    effective |= item.hit < 100
    if hit_result == true
      recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
      recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
      if recover_hp < 0
        recover_hp += self.pdef * item.pdef_f / 20
        recover_hp += self.mdef * item.mdef_f / 20
        recover_hp = [recover_hp, 0].min
      end
      recover_hp *= elements_correct(item.element_set)
      recover_hp /= 100
      recover_sp *= elements_correct(item.element_set)
      recover_sp /= 100
      if item.variance > 0 and recover_hp.abs > 0
        amp = [recover_hp.abs * item.variance / 100, 1].max
        recover_hp += rand(amp+1) + rand(amp+1) - amp
      end
      if item.variance > 0 and recover_sp.abs > 0
        amp = [recover_sp.abs * item.variance / 100, 1].max
        recover_sp += rand(amp+1) + rand(amp+1) - amp
      end
      if recover_hp < 0
        if self.guarding?
          recover_hp /= 2
        end
      end
      self.damage = -recover_hp
      last_hp = self.hp
      last_sp = self.sp
      self.hp += recover_hp
      self.sp += recover_sp
      effective |= self.hp != last_hp
      effective |= self.sp != last_sp
      # -------------------- State change ------------------------
      @state_changed = false
      old_states = @states.clone
      if ZTLA_States::ITEM_CONVERT_STATES.keys.include?(item.id)
        c = ZTLA_States::ITEM_CONVERT_STATES[item.id]
        for i in c
          if old_states.include?(c[0])
            remove = c[2] ; remove = true if remove == nil
            force  = c[3] ; force  = true if force  == nil
            remove_state(c[0], force) if remove == true
            add_state(c[1], force)
            effective = true
          end
        end
      end
      effective |= states_plus(item.plus_state_set)
      effective |= states_minus(item.minus_state_set)
      # -------------------- State change ------------------------
      if item.parameter_type > 0 and item.parameter_points != 0
        case item.parameter_type
        when 1  # Max HP
          @maxhp_plus += item.parameter_points
        when 2  # Max SP
          @maxsp_plus += item.parameter_points
        when 3  # Strength
          @str_plus += item.parameter_points
        when 4  # Dexterity
          @dex_plus += item.parameter_points
        when 5  # Agility
          @agi_plus += item.parameter_points
        when 6  # Intelligence
          @int_plus += item.parameter_points
        end
        effective = true
      end
      if item.recover_hp_rate == 0 and item.recover_hp == 0
        self.damage = ""
        if item.recover_sp_rate == 0 and item.recover_sp == 0 and
          (item.parameter_type == 0 or item.parameter_points == 0)
          unless @state_changed
            self.damage = "Miss"
          end
        end
      end
    else
      self.damage = "Miss"
    end
    unless $game_temp.in_battle
      self.damage = nil
    end
    return effective
  end
end
avatar
Wecoc
Administrador
Administrador



Créditos 9218

Gracias : 493

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.