Últimos temas
» Kustom XP & VX & ACE
por kyonides Ayer a las 1:21 am

» Realidad Virtual (Demo final)
por Victorgamer10 Dom Abr 22, 2018 9:06 pm

» Desbloquear ítem al alcanzar determinado nivel.
por Pocari Dom Abr 22, 2018 3:05 pm

» Laminación [VXACE]
por Pocari Dom Abr 22, 2018 2:43 pm

» Lío con los ataques y habilidades! (formulas)
por gutzs Dom Abr 22, 2018 2:22 pm

» ¿Alguien puede recortar este sprite?
por Muzgar Dom Abr 22, 2018 1:33 pm

» Serial Murder (Beta del Juego 0.1)
por Muzgar Dom Abr 22, 2018 12:12 pm

» Juegos del año 2018 - Resultados
por Turbiosoft.acho Sáb Abr 21, 2018 5:27 pm

» RPGMV Ayuda! Problema Parallax Mapping.
por Jfols Sáb Abr 14, 2018 3:12 am

» The New Exodus Project.
por KentaSS Sáb Abr 14, 2018 1:01 am

» Proyecto Ahura: Algunas Muestras
por Ledai Vie Abr 13, 2018 11:11 pm

» Problemilla con parallax con bind images y galv layers
por gutzs Vie Abr 13, 2018 10:47 pm


KExtra XP WS Version

Ir abajo

KExtra XP WS Version

Mensaje por kyonides el Dom Ene 07, 2018 5:05 am

KExtra XP
WS Version
Por Kyonides-Arkanthos

Introducción


Este scriptlet les permite configurar habilidades alias técnicas que pueden ser hechizadas por un enemigo o por un evento. En ambos casos se hace al incluir unos llamados a script.

Ahora también se pueden quebrar armas o reforjarlas, también se quede hechizarlas.


Script


Código:
# * KExtra ZP WS Version
#   Scripter : Kyonides-Arkanthos
#   2018-01-08

#  Primer Paso del Llamado a Script - Obtener al Héroe del Equipo...
#    a = $game_party.actors[Indice_Actor]
#  O a un Héroe que no forma parte del grupo
#    a = $game_actors[ID_Actor]

#  Y justo debajo de esa línea agreguen alguna de las siguientes.

#  Para devolver algo del poder de una técnica embrujada
#    a.increase_skill_power

#  Para desbloquear por completo una técnica embrujada (con éxito del 100%)
#    a.unblock_skill(ID_Tecnica)

#  Para aumentar el número de usos de una técnica embrujada
#    a.add_skill_uses(ID_Tecnica) # usando un objeto
#    a.add_skill_uses(ID_Tecnica, Usos_Extras) # sin objeto

#  Para remover el embrujo al consumir un objeto preseleccionado, no fallará.
#    a.lift_skill_curse(ID_Tecnica)

#  Para dejar que un clérigo o evento remueva el embrujo de la técnica
#    a.priest_lift_skill_curse(Nivel_Clerigo, ID_Tecnica)

#  Para remover el embrujo por la fuerza (con éxito del 100%)
#    a.force_lift_curse(ID_Tecnica)

#  Para verificar si una técnica está embrujada (1 de 2 opciones)
#  ¡Necesitará incluir los datos del miembro o héroe!
#    $game_party.actors[Indice_Actor].skill_cursed?(ID_Tecnica)
#    $game_actors[ID_Actor].skill_cursed?(ID_Tecnica)

#  Para dejar que un herrero o evento reforje el arma rota
#    a.smith_reforge_weapon(Nivel_Herrero, ID_Arma)

#  Para dejar que un clérigo o evento remueva el embrujo del arma
#    a.priest_lift_weapon_curse(Nivel_Clerigo, ID_Arma)

#  Abreviaturas o Siglas
#    RP - Reducción de Poder, IP - Incremento de Poder, CF - Costo de Forja
#    NE - Nivel del Embrujo, PF - Probabilidades de Fracasar en Forja
#    ID_Obj - objeto que remueve el embrujo, 0 para ninguno

module KExtra
  DEFAULT_USES = 5 # Valor Típico de Usos que se sumarán a la t. embrujada
  SKILL_USES_ITEM_ID = 28 # ID del Objeto que incrementa los Usos
  SEAL_SKILL_ID = 81 # Técnica de algún Enemigo
  BREAK_WEAPONS = {}
  # [ID_Arma] = [Usos, ¿Rota?, ¿Embrujada?, NE, PF, PR, PI, ID_Obj, CF]
  BREAK_WEAPONS[1] = [3, nil, nil, 1, 5, 90, 15, 34, 250]
  BREAK_WEAPONS[2] = [2, nil, nil, 2, 10, 90, 10, 34, 500]
  BREAK_WEAPONS[3] = [1, nil, true, 2, 15, 95, 5, 34, 750]
  # Agregue ID_Actor => {}, incluye la coma excepto en el último valor
  # Le permite agregar limitaciones a las técnicas de un héroe específico
  ACTOR_HANDICAPS = { 1 => {} }
  # [ID_Actor][ID_Tecnica] = [Usos, ¿Bloqueada?, Nivel_Embrujo, RP, IP, ID_Obj]
  ACTOR_HANDICAPS[1][57] = [3, nil, 1, 90, 10, 0]
  SKILL_HANDICAPS = {}
  # [ID_Tecnica] = [Usos, ¿Bloqueada?, Nivel_Embrujo, RP, IP, ID_Obj]
  SKILL_HANDICAPS[57] = [2, nil, 1, 70, 10, 0]
  # [Usos, ¿Bloqueada?, Nivel_Embrujo, RP, IP, ID_Obj]
  SEALED_SKILL_HANDICAP = [0, true, 2, 95, 5, 33]
  class ItemBase
    attr_accessor :uses, :level, :power_reduction, :power_increase
    attr_accessor :remover_item_id
    def initialize
      @uses = DEFAULT_USES
      @level = 1
      @power_reduction = 0
      @power_increase = 0
      @remover_item_id = 0
    end
  end

  class Weapon < ItemBase
    attr_accessor :broken, :cursed, :failure_rate, :reforge_cost
    def initialize
      super
      @broken = @cursed = nil
      @failure_rate = @reforge_cost = 0
    end
  end

  class Skill < ItemBase
    attr_accessor :blocked
    def initialize
      super
      @blocked = nil
    end
  end
end

class Game_Battler
  alias kyon_kextraskill_gm_battler_attack_effect attack_effect
  alias kyon_kextraskill_gm_battler_skill_effect skill_effect
  def attack_effect(attacker)
    foe = attacker
    effective = kyon_kextraskill_gm_battler_attack_effect(foe)
    if effective and foe.respond_to?(:weapon_id) and foe.weapon_id > 0
      return effective unless breakable = foe.break_weapons[foe.weapon_id]
      breakable.uses -= 1 if breakable.uses > 0
      if breakable.uses == 0
        breakable.broken = true
        foe.equip(0, 0)
      end
    end
    return effective
  end

  def skill_effect(user, skill)
    sid = skill.id
    if user.respond_to?(:troop_id) and sid == KExtra::SEAL_SKILL_ID and
      self.respond_to?(:skill_handicaps)
      if @skills.size > 0
        cursed = self.skill_cursed?(sid)
        @skill_hit = @skills[rand(@skills.size)] if !@skill_hit
        self.add_skill_handicaps(@skill_hit, KExtra::SEALED_SKILL_HANDICAP)
        return (!cursed and self.skill_cursed?(sid))
      end
      return false
    elsif user.respond_to?(:skill_handicaps) and user.skill_handicaps[sid]
      sh = user.skill_handicaps[sid]
      sh.uses -= 1
      skill = $data_skills[sid].dup
      skill.power -= skill.power * sh.power_reduction / 100
      skill.str_f -= skill.str_f * sh.power_reduction / 100
      skill.dex_f -= skill.dex_f * sh.power_reduction / 100
      skill.agi_f -= skill.agi_f * sh.power_reduction / 100
      skill.int_f -= skill.int_f * sh.power_reduction / 100
    end
    effective = kyon_kextraskill_gm_battler_skill_effect(user, skill)
    @skill_hit = sid if effective and self.respond_to?(:troop_id)
    return effective
  end
end

class Game_Actor
  attr_reader :break_weapons, :skill_handicaps
  alias kyon_kextraskill_gm_actor_setup setup
  alias kyon_kextraskill_gm_actor_base_atk base_atk
  alias kyon_kextraskill_gm_actor_equip equip
  alias kyon_kextraskill_gm_actor_learn_skill learn_skill
  def setup(actor_id)
    @break_weapons = {}
    @skill_handicaps = {}
    kyon_kextraskill_gm_actor_setup(actor_id)
    if (breakable = KExtra::BREAK_WEAPONS[@weapon_id])
      add_break_weapon(@weapon_id, breakable)
    end
    if (handicaps = KExtra::ACTOR_HANDICAPS[actor_id])
      handicaps.each {|sid, data| add_skill_handicaps(sid, data) }
    end
  end

  def base_atk
    old_atk = kyon_kextraskill_gm_actor_base_atk
    weapon = @break_weapons[@weapon_id]
    old_atk -= old_atk * weapon.power_reduction / 100 if weapon
    return old_atk
  end

  def equip_fix?(equip_type)
    actor = $data_actors[@actor_id]
    case equip_type
    when 0
      cursed = @break_weapons[@weapon_id].cursed rescue false
      (actor.weapon_fix or cursed)
    when 1 then actor.armor1_fix
    when 2 then actor.armor2_fix
    when 3 then actor.armor3_fix
    when 4 then actor.armor4_fix
    else false
    end
  end

  def equip(equip_type, id)
    if equip_type == 0 and id > 0
      some_weapon = KExtra::BREAK_WEAPONS[@weapon_id]
      add_break_weapon(id, weapon) if some_weapon
    end
    kyon_kextraskill_gm_actor_equip(equip_type, id)
  end

  def add_break_weapon(this_weapon_id, source)
    return if @break_weapons[this_weapon_id]
    @break_weapons[this_weapon_id] = weapon = KExtra::Weapon.new
    weapon.uses = source[0]
    weapon.broken = source[1]
    weapon.cursed = source[2]
    weapon.level = source[3]
    weapon.failure_rate = source[4]
    weapon.power_reduction = source[5]
    weapon.power_increase = source[6]
    weapon.remover_item_id = source[7]
    weapon.reforge_cost = source[8]
  end

  def smith_reforge_weapon(smith_level, weapon_id)
    weapon = @break_weapons[@weapon_id]
    return unless weapon and weapon.broken
    repair = (rand(100) > weapon.failure and weapon.level > smith_level)
    weapon.broken = !repair
    more_uses = (repair and weapon.uses == 0)
    weapon.uses = KExtra::DEFAULT_USES * smith_level if more_uses
    return true
  end

  def priest_lift_weapon_curse(priest_level, weapon_id)
    return unless (weapon = @break_weapons[@weapon_id])
    weapon.cursed = weapon.level > priest_level
  end

  def add_skill_handicaps(skill_id, source)
    return if @skill_handicaps[skill_id]
    @skill_handicaps[skill_id] = skill = KExtra::Skill.new
    skill.uses = source[0]
    skill.blocked = source[1]
    skill.level = source[2]
    skill.power_reduction = source[3]
    skill.power_increase = source[4]
    skill.remover_item_id = source[5]
  end

  def increase_skill_power
    return unless (handicap = @skill_handicaps[skill_id])
    reduction = [handicap.power_reduction - handicap.power_increase, 0].max
    handicap.power_reduction = reduction
  end

  def add_skill_uses(skill_id, extra_uses=0)
    if extra_uses == 0
      item_id = KExtra::SKILL_USES_ITEM_ID
      return unless item_number(item_id) > 0
      lose_item(item_id)
      extra_uses = KExtra::DEFAULT_USES
    end
    @skill_handicaps[skill_id].uses += extra_uses
  end

  def lift_skill_curse(skill_id)
    return unless (handicap = @skill_handicaps[skill_id])
    item_id = handicap.remover_item_id
    return unless item_number(item_id) > 0
    lose_item(item_id)
    @skill_handicaps.delete(skill_id)
  end

  def priest_lift_skill_curse(priest_level, skill_id)
    return unless (skill = @skill_handicaps[skill_id])
    @skill_handicaps.delete(skill_id) if skill.level <= priest_level
  end

  def force_lift_curse(skill_id) @skill_handicaps.delete(skill_id) end
  def skill_cursed?(skill_id) @skill_handicaps[skill_id] end
  def unblock_skill(skill_id) @skill_handicaps[skill_id].blocked = nil end

  def learn_skill(skill_id)
    already_learned = @skills.include?(skill_id)
    kyon_kextraskill_gm_actor_learn_skill(skill_id)
    recently_learned = @skills.include?(skill_id)
    return unless !already_learned and recently_learned
    return if @skill_handicaps[skill_id]
    return unless (skill = KExtra::SKILL_HANDICAPS[skill_id])
    add_skill_handicaps(skill_id, skill)
  end

  def skill_can_use?(skill_id)
    if (skill = @skill_handicaps[skill_id])
      return if skill.uses == 0 or skill.blocked or skill.power_reduction == 100
    end
    super
  end
end

class Game_Enemy
  attr_reader :troop_id
end

class Game_Party
  def broken_weapons?
    @actors.map{|a| !a.break_weapons.empty? }.include?(true)
  end
end

kyonides
PJ Recurrente
PJ Recurrente

Masculino
Costa Rica
RPG Maker : Xp
Mensajes : 78
Monedas : 211
Reputación : 1

Volver arriba Ir abajo

Re: KExtra XP WS Version

Mensaje por kyonides el Lun Ene 08, 2018 10:36 pm

ACTUALIZACIÓN

A partir de ahora ya se pueden quebrar las armas o se puede reforjarlas, también se las puede hechizar o liberar del embrujo.

kyonides
PJ Recurrente
PJ Recurrente

Masculino
Costa Rica
RPG Maker : Xp
Mensajes : 78
Monedas : 211
Reputación : 1

Volver arriba Ir abajo

Volver arriba

- Temas similares

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