Maker Palace

¡El Reino del RpgMaker y del Ocio!
 
ÍndiceBuscarGrupos de UsuariosScriptsRecursosTutorialesPalaceJuegosPalaceWikiFAQRegistrarseConectarse
Conectarse
Nombre de Usuario:
Contraseña:
Entrar automáticamente en cada visita: 
:: Recuperar mi contraseña
Temas similares
Buscar
 
 

Resultados por:
 
Rechercher Búsqueda avanzada
Últimos temas
» Dando una vuelta por acá
por LinkLuis55 Ayer a las 2:56 pm

» Heroes del Crimen 2 DEMO
por jasuso Mar Ago 01, 2017 12:04 am

» The Legend of Celestia II: A World of Twilight Shadows Demo
por Jlopez_96 Vie Jul 28, 2017 6:20 pm

» Screenshot del nuevo KUnits XP oon menú
por kyonides-arkanthos Sáb Jul 15, 2017 1:14 am

» The Legend of Celestia: Four Cristals
por Jlopez_96 Mar Abr 25, 2017 4:59 pm

» [VXAce] Burando Doragon
por gantzer49 Dom Abr 23, 2017 7:43 pm

» Que se cuece por estos lares?
por Frikilangelo Jue Mar 23, 2017 8:10 am

Recomendados
RPG en RPG Maker
La importancia de un Backup
Que requiere un sistema de Batalla para ser exitoso
9 Minutos de Juegos por fans
Guía de Subforos para Tontos de Maker Palace
Indice de Scripts Locales XP
Falcao Pearl ABS Liquid
¿Quién está en línea?
En total hay 11 usuarios en línea: 0 Registrados, 0 Ocultos y 11 Invitados :: 1 Motor de búsqueda

Ninguno

La mayor cantidad de usuarios en línea fue 179 el Mar Ago 30, 2011 10:06 pm.
MiniChat
Mejores posteadores
Raiden (3346)
 
DaviX (2740)
 
Frikilangelo (2461)
 
SagahonArturo (1806)
 
Falcao (1775)
 
kyonides-arkanthos (1766)
 
Mur-mai-der (1755)
 
Ares (1613)
 
LinkLuis55 (1556)
 
Webmaster24 (1354)
 
Afiliados
Crear foro Mundo Maker Foro de anime y RM2k3/XP/VX Computer mix
Flag Counter
free counters
Visitas


Comparte | 
 

 Kolloseum States XP

Ver el tema anterior Ver el tema siguiente Ir abajo 
AutorMensaje
kyonides-arkanthos
Lord Guru Maker
Lord Guru Maker
avatar

Cantidad de envíos : 1766
Miembro desde : 03/02/2010
Sexo : Masculino

Maker : RMXP


MensajeTema: Kolloseum States XP   Sáb Feb 06, 2016 5:33 am

Kolloseum States XP

v 2.3.0

por Kyonides-Arkanthos

Este script les permite configurar varias cosas referentes a los Estados o states que pueden experimentar sus héroes tanto en batalla como en el mapa. Algunas ideas vienen de mi anterior script All Stats Modified, lo que puede implicar que no deberían incluir ambos scripts en un mismo proyecto.

En teoría debe funcionar no solo con el Sistema de Batallas que viene por defecto sino también con otros que no modifiquen los mismos métodos en Game_Battler, Game_Actor o Scene_Battle. Solo las pruebas exhaustivas nos podrán aclarar este misterio (que en realidad no me quita el sueño).

Ya incluye las características de Leech Version.

SCRIPT

Código:
# * KStates XP Shield Version
#   v 1.3.0 - 2016-02-8
#   Scripter : Kyonides-Arkanthos

#   Diseñado para el Sistema de Batallas del RMXP   #

#   Este Script les permite definir Armas que roban PM o Mana en lugar de PV o
#   Vida, configurar Estados que puedan incrementar su daño de PV o PM y Estados
#   que pueden reemplazar a otros Estados cuando los anteriores se disipan.

#   Además pueden definir cada cuántos Pasos los héroes ganarán o perderán PV o
#   PM por causa de algún Estado y cuáles serán sus respectivos porcentajes.

#   Incluso se ha modificado la animación de daño en valores numéricos para que
#   puedan aparecer los daños físicos como de mana por separado. Si se diera el
#   caso de que se infligiera ambos tipos de daños, las animaciones no se
#   ocultarían entre sí.

#   Podrán definir los colores en los que los daños positivos (curas) serán
#   desplegados en la pantalla, esto aplica tanto al color de relleno como al de
#   su respectivo borde. También pueden definir el color de la palabra Crítico.

#   Llamado a Script para Incrementar el Nivel del Escudo
#      En el caso de los Enemigos, estos solo lo pueden incrementar en batalla.
#      $game_party.actors[Indice en el Equipo].shield_level += 1
#      $game_troop.enemies[Indice en el Equipo].shield_level += 1

module KStates
  # IDs de Armas que infligen daño físico al atacante y al objetivo
  # incrementa el daño infligido an el objetivo
  #   ID de Arma => Porcentaje, etc.
  DARK_WEAPON_IDS = { 3 => 1.25 }
  # IDs de Armas que infligen daño a PM (Mana) en lugar de PV
  MANA_WEAPON_IDS = []
  # IDs de Armas que infligen daño a PV y roban un Porcentaje de PV
  LIFE_WEAPON_IDS = { 1 => 25 }
  # IDs de Armas que infligen daño a PV y roban un Porcentaje de PM
  HPSP_WEAPON_IDS = { 2 => 25 }
  # IDs de Estados que Incrementarán su daño a PV o PM al aplicarlos de nuevo.
  # Los símbolos :hp y :sp significan PV y PM respectivamente.
  #   ID Estado Infligido => [Veces que pueda Aumentar, :hp o :sp], etc.
  UPGRADE_IDS = { 3 => [3, :hp], 4 => [3, :sp] }
  # IDs de Estados que Reemplazarán a otros Estados al disiparse los primeros.
  #   ID Estado Inicial => ID Estado Posterior, etc.
  REPLACE_IDS = { 1 => 2 }
  # Cantidad de Pasos para activar Ganacia o Pérdida de PV o PM
  SLIP_DMG_STEPS = 3
  # 2 IDs de Estados de Regeneración de PV y PM respectivamente
  HPSP_REGEN_IDS = [17, 18]
  # Para IDs de Estados que roban PV como Veneno
  POISON_IDS = [3]
  # Para IDs de Estados que roban PM
  SP_LOSS_IDS = []
  # Porcentajes En Batalla y En el Mapa
  HP_GAIN_PERCENT = [2, 1.5] # Ganancia de PV
  SP_GAIN_PERCENT = [2, 1.5] # Ganancia de PM
  HP_LOSS_PERCENT = [1.75, 1.25] # Pérdida de PV
  SP_LOSS_PERCENT = [1.75, 1.25] # Pérdida de PM
  HP_SEED_ID = 81 # ID de Técnica Sanguijuela de PV o Leech Seed
  SP_SEED_ID = 82 # ID de Técnica Sanguijuela de PM o Leech Seed
  HP_SEED_SID = 17 # ID de Estado Sanguijuela de PV o Seeded
  SP_SEED_SID = 18 # ID de Estado Sanguijuela de PM o Seeded
  SHIELD_SKILL_ID = 83 # ID de Técnica Escudo
  SHIELD_STATE_ID = 19 # ID de Estado Escudo
  # [Puntos, por, cada, nivel, del, escudo]
  SHIELD_POINTS = [500, 850, 1250, 1800, 2500]
  MANA_SHIELD_SID = 84 # ID de Técnica Escudo de Mana
  MANA_SHIELD_STATE_ID = 20 # ID de Estado Escudo de Mana
end

module Strings
  HP_LABEL_Y = -24 # Modifica Eje Y de Sprite de Daño de PV
  SP_LABEL_Y = 8 # Modifica Eje Y de Sprite de Daño de PM
  BATTLE_CRITICAL = 'Crítico' # Para Golpe Crítico
  BATTLE_MISS = 'Fallido' # Para Golpe Fallido
  HP_OUTLINE_COLOR = Color.new(0, 0, 0) # Color del Borde para PV
  HP_FILL_COLOR = Color.new(176, 255, 144)
  SP_OUTLINE_COLOR = Color.new(0, 0, 0) # Color del Borde para PM
  SP_FILL_COLOR = Color.new(176, 255, 144)
  HP_CRIT_OUTLINE_COLOR = Color.new(0, 0, 0)
  HP_CRIT_FILL_COLOR = Color.new(255, 255, 255)
  SP_CRIT_OUTLINE_COLOR = Color.new(0, 0, 0)
  SP_CRIT_FILL_COLOR = Color.new(255, 255, 255)
end
#*** NO EDITAR NADA MÁS ***#
module RPG
  class Sprite < ::Sprite
    alias kyon_kstates_rpg_sprite_init initialize
    def initialize(viewport=nil)
      kyon_kstates_rpg_sprite_init(viewport)
      @_sp_damage_duration = 0
      @_reddish_duration = 0
    end

    def damage(value, critical)
      dispose_damage
      if value.is_a?(Numeric)
        damage_string = value.abs.to_s
      else
        damage_string = value == 'Miss' ? Strings::BATTLE_MISS : value.to_s
      end
      bitmap = Bitmap.new(160, 48)
      bitmap.font.name = "Arial Black"
      bitmap.font.size = 32
      bitmap.font.color = Strings::HP_OUTLINE_COLOR
      bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
      bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
      bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
      bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
      if value.is_a?(Numeric) and value < 0
        bitmap.font.color = Strings::HP_FILL_COLOR
      else
        bitmap.font.color.set(255, 255, 255)
      end
      bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
      if critical
        bitmap.font.size = 20
        bitmap.font.color = Strings::HP_CRIT_OUTLINE_COLOR
        bitmap.draw_text(-1, -1, 160, 20, Strings::BATTLE_CRITICAL, 1)
        bitmap.draw_text(+1, -1, 160, 20, Strings::BATTLE_CRITICAL, 1)
        bitmap.draw_text(-1, +1, 160, 20, Strings::BATTLE_CRITICAL, 1)
        bitmap.draw_text(+1, +1, 160, 20, Strings::BATTLE_CRITICAL, 1)
        bitmap.font.color = Strings::HP_CRIT_FILL_COLOR
        bitmap.draw_text(0, 0, 160, 20, Strings::BATTLE_CRITICAL, 1)
      end
      @_damage_sprite = ::Sprite.new(self.viewport)
      @_damage_sprite.bitmap = bitmap
      @_damage_sprite.ox = 80
      @_damage_sprite.oy = 20
      @_damage_sprite.x = self.x
      @_damage_sprite.y = self.y + Strings::HP_LABEL_Y - self.oy / 2
      @_damage_sprite.z = 3000
      @_damage_duration = 40
    end

    def sp_damage(value, critical)
      dispose_sp_damage
      if value.is_a?(Numeric)
        damage_string = value.abs.to_s
      else
        damage_string = value == 'Miss' ? Strings::BATTLE_MISS : value.to_s
      end
      bitmap = Bitmap.new(160, 48)
      bitmap.font.name = "Arial Black"
      bitmap.font.size = 32
      bitmap.font.color = Strings::SP_OUTLINE_COLOR
      bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
      bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
      bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
      bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
      if value.is_a?(Numeric) and value < 0
        bitmap.font.color = Strings::SP_FILL_COLOR
      else
        bitmap.font.color.set(255, 255, 255)
      end
      bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
      if critical
        bitmap.font.size = 20
        bitmap.font.color = Strings::SP_CRIT_OUTLINE_COLOR
        bitmap.draw_text(-1, -1, 160, 20, Strings::BATTLE_CRITICAL, 1)
        bitmap.draw_text(+1, -1, 160, 20, Strings::BATTLE_CRITICAL, 1)
        bitmap.draw_text(-1, +1, 160, 20, Strings::BATTLE_CRITICAL, 1)
        bitmap.draw_text(+1, +1, 160, 20, Strings::BATTLE_CRITICAL, 1)
        bitmap.font.color = Strings::SP_CRIT_FILL_COLOR
        bitmap.draw_text(0, 0, 160, 20, Strings::BATTLE_CRITICAL, 1)
      end
      @_sp_damage_sprite = ::Sprite.new(self.viewport)
      @_sp_damage_sprite.bitmap = bitmap
      @_sp_damage_sprite.ox = 80
      @_sp_damage_sprite.oy = 20
      @_sp_damage_sprite.x = self.x
      @_sp_damage_sprite.y = self.y + Strings::SP_LABEL_Y - self.oy / 2
      @_sp_damage_sprite.z = 3000
      @_sp_damage_duration = 40
    end

    def dispose_sp_damage
      return if @_sp_damage_sprite == nil
      @_sp_damage_sprite.bitmap.dispose
      @_sp_damage_sprite.dispose
      @_sp_damage_sprite = nil
      @_sp_damage_duration = 0
    end

    def dispose
      dispose_damage
      dispose_sp_damage
      dispose_animation
      dispose_loop_animation
      super
    end

    def effect?
      @_reddish_duration > 0 or
      @_whiten_duration > 0 or
      @_appear_duration > 0 or
      @_escape_duration > 0 or
      @_collapse_duration > 0 or
      @_damage_duration > 0 or
      @_sp_damage_duration > 0 or
      @_animation_duration > 0
    end

    def reddish
      self.blend_type = 0
      self.color.set(255, 0, 0, 128)
      self.opacity = 255
      @_reddish_duration = 16
      @_appear_duration = 0
      @_escape_duration = 0
      @_collapse_duration = 0
    end

    def update
      super
      if @_reddish_duration > 0
        @_reddish_duration -= 1
        self.color.alpha = 128 - (16 - @_reddish_duration) * 10
      end
      if @_whiten_duration > 0
        @_whiten_duration -= 1
        self.color.alpha = 128 - (16 - @_whiten_duration) * 10
      end
      if @_appear_duration > 0
        @_appear_duration -= 1
        self.opacity = (16 - @_appear_duration) * 16
      end
      if @_escape_duration > 0
        @_escape_duration -= 1
        self.opacity = 256 - (32 - @_escape_duration) * 10
      end
      if @_collapse_duration > 0
        @_collapse_duration -= 1
        self.opacity = 256 - (48 - @_collapse_duration) * 6
      end
      if @_damage_duration > 0
        @_damage_duration -= 1
        case @_damage_duration
        when 38..39 then @_damage_sprite.y -= 4
        when 36..37 then @_damage_sprite.y -= 2
        when 34..35 then @_damage_sprite.y += 2
        when 28..33 then @_damage_sprite.y += 4
        end
        @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
        dispose_damage if @_damage_duration == 0
      end
      if @_sp_damage_duration > 0
        @_sp_damage_duration -= 1
        case @_sp_damage_duration
        when 38..39 then @_sp_damage_sprite.y -= 4
        when 36..37 then @_sp_damage_sprite.y -= 2
        when 34..35 then @_sp_damage_sprite.y += 2
        when 28..33 then @_sp_damage_sprite.y += 4
        end
        @_sp_damage_sprite.opacity = 256 - (12 - @_sp_damage_duration) * 32
        dispose_sp_damage if @_sp_damage_duration == 0
      end
      if @_animation != nil and (Graphics.frame_count % 2 == 0)
        @_animation_duration -= 1
        update_animation
      end
      if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
        update_loop_animation
        @_loop_animation_index += 1
        @_loop_animation_index %= @_loop_animation.frame_max
      end
      if @_blink
        @_blink_count = (@_blink_count + 1) % 32
        if @_blink_count < 16
          alpha = (16 - @_blink_count) * 6
        else
          alpha = (@_blink_count - 16) * 6
        end
        self.color.set(255, 255, 255, alpha)
      end
      @@_animations.clear
    end
  end
end

class Sprite_Battler
  def update
    super
    if @battler == nil
      self.bitmap = nil
      loop_animation(nil)
      return
    end
    if @battler.battler_name != @battler_name or
       @battler.battler_hue != @battler_hue
      @battler_name = @battler.battler_name
      @battler_hue = @battler.battler_hue
      self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
      @width = bitmap.width
      @height = bitmap.height
      self.ox = @width / 2
      self.oy = @height
      self.opacity = 0 if @battler.dead? or @battler.hidden
    end
    if @battler.damage == nil and
       @battler.state_animation_id != @state_animation_id
      @state_animation_id = @battler.state_animation_id
      loop_animation($data_animations[@state_animation_id])
    end
    if @battler.is_a?(Game_Actor) and @battler_visible
      if $game_temp.battle_main_phase
        self.opacity += 3 if self.opacity < 255
      else
        self.opacity -= 3 if self.opacity > 207
      end
    end
    @battler.blink ? blink_on : blink_off
    unless @battler_visible
      if !@battler.hidden and !@battler.dead? and
         (@battler.damage == nil or @battler.damage_pop or
           @battler.sp_damage_pop)
        appear
        @battler_visible = true
      end
    end
    if @battler_visible
      if @battler.hidden # Escape
        $game_system.se_play($data_system.escape_se)
        escape
        @battler_visible = false
      end
      if @battler.red_flash
        reddish
        @battler.red_flash = false
      end
      if @battler.white_flash
        whiten
        @battler.white_flash = false
      end
      if @battler.animation_id != 0
        animation = $data_animations[@battler.animation_id]
        animation(animation, @battler.animation_hit)
        @battler.animation_id = 0
      end
      if @battler.damage_pop # HP Damage
        damage(@battler.damage, @battler.critical)
        @battler.damage = nil
        @battler.critical = false
        @battler.damage_pop = false
      end
      if @battler.sp_damage_pop # SP Damage
        sp_damage(@battler.sp_damage, @battler.sp_critical)
        @battler.sp_damage = nil
        @battler.sp_critical = false
        @battler.sp_damage_pop = false
      end
      if @battler.damage == nil and @battler.dead? # Collapse
        if @battler.is_a?(Game_Enemy)
          $game_system.se_play($data_system.enemy_collapse_se)
        else
          $game_system.se_play($data_system.actor_collapse_se)
        end
        collapse
        @battler_visible = false
      end
    end
    self.x = @battler.screen_x
    self.y = @battler.screen_y
    self.z = @battler.screen_z
  end
end

class Game_Battler
  attr_accessor :sp_damage_pop, :sp_damage, :sp_critical
  attr_accessor :shield_level, :red_flash
  attr_reader :hp_seed_damage, :sp_seed_damage, :leeches
  alias kyon_kstates_gm_battler_init initialize
  alias kyon_kstates_gm_battler_add_state add_state
  alias kyon_leech_seed_gm_battler_sk_eff skill_effect
  def initialize
    @red_flash = false
    @sp_damage_pop = false
    @sp_damage = nil
    @sp_critical = false
    @states_hp_dmg_increase = {}
    @states_sp_dmg_increase = {}
    @seed_damage = 0
  @shield_level = 0
  @shield_points = KStates::SHIELD_POINTS[@shield_level]
    clear_leeches
    kyon_kstates_gm_battler_init
  end

  def clear_leeches
    @leeches = { :actors => { :hp => [], :sp => [] },
                :troop => { :hp => [], :sp => [] }  }
  end

  def clear_hp_leeches
    @leeches[:actors][:hp] = []
    @leeches[:troop][:hp] = []
  end

  def clear_sp_leeches
    @leeches[:actors][:sp] = []
    @leeches[:troop][:sp] = []
  end

  def add_leech(kind, user)
    group = user.is_a?(Game_Actor)? :actors : :troop
    uix = user.index
    @leeches[group][kind] << uix if !@leeches[group][kind].include?(uix)
  end

  def attack_effect(attacker)
    self.critical = false
    self.sp_critical = false
    hit_result = check_hit_result(rand(100) < attacker.hit)
    if hit_result
      remove_states_shock
      dealt_damage = mana_shield_effect
      if attacker.methods.include?('weapon_id')
        w_id = attacker.weapon_id
        if KStates::DARK_WEAPON_IDS[w_id]
          self.damage = (self.damage * KStates::DARK_WEAPON_IDS[w_id]).round
          attack.hp -= dmg = (self.damage / 10).round
          attacker.damage = dmg
          attacker.damage_pop = true
        end
        if KStates::MANA_WEAPON_IDS[w_id]
          self.sp_critical = self.critical
          self.sp_damage = self.damage
          self.damage = nil
          self.critical = false
          self.sp -= self.sp_damage
          dealt_damage = true
        end
        if KStates::LIFE_WEAPON_IDS[w_id]
          hp_dmg = (self.damage * KStates::LIFE_WEAPON_IDS[w_id]).round
          hp_dmg = [hp_dmg, self.hp].min
          attacker.hp += hp_dmg
          attacker.damage = -hp_dmg if hp_dmg > 0
        end
        if KStates::HPSP_WEAPON_IDS[w_id]
          sp_dmg = (self.damage * KStates::HPSP_WEAPON_IDS[w_id]).round
          sp_dmg = [sp_dmg, self.sp].min
          self.sp -= sp_dmg
          self.sp_damage = sp_dmg
          attacker.sp += sp_dmg
          attacker.sp_damage = -sp_dmg
        end
      end
      @state_changed = false
      states_plus(attacker.plus_state_set)
      states_minus(attacker.minus_state_set)
      life_shield_effect
      self.hp -= self.damage unless dealt_damage
      return true
    else
      if attacker.methods.include?('weapon_id')
        if KStates::MANA_WEAPON_IDS[attacker.weapon_id]
          self.sp_damage = 'Miss'
          self.sp_critical = false
          return true
        end
      end
      self.damage = 'Miss'
      self.critical = false
    end
    return true
  end

  def check_hit_result(hit_result)
    return false unless hit_result
    atk = [attacker.atk - self.pdef / 2, 0].max
    self.damage = atk * (20 + attacker.str) / 20
    self.damage *= elements_correct(attacker.element_set)
    self.damage /= 100
    if self.damage > 0
    if rand(100) < 4 * attacker.dex / self.agi
        self.damage *= 2
        self.critical = true
      end
      self.damage /= 2 if self.guarding?
    end
    if self.damage.abs > 0
      amp = [self.damage.abs * 15 / 100, 1].max
      self.damage += rand(amp+1) + rand(amp+1) - amp
    end
    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

  def life_shield_effect(skill_id=0)
    return unless @states.include?(KStates::SHIELD_STATE_ID)
    return unless self.damage.is_a?(Integer) and self.damage > 0
    dmg = @shield_points - self.damage
  @shield_points = [dmg, 0].max
    @states.remove_state(KStates::SHIELD_STATE_ID) if @shield_points == 0
  self.damage = dmg
    self.damage *= -1 if self.damage < 0
  end

  def mana_shield_effect
    return unless @states.include?(KStates::MANA_SHIELD_STATE_ID)
    return if @sp == 0
    if self.damage > self.sp
      dmg = (self.sp - self.damage).abs
      self.sp = 0
      self.sp_damage = self.damage - dmg
      self.damage = dmg
      return
    else
      self.sp -= dmg = self.damage
      self.sp_damage = dmg
      self.damage = nil
      return true
    end
  end

  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
    hit *= user.hit / 100 if skill.atk_f > 0
    hit_result = (rand(100) < hit)
    effective |= hit < 100
    if hit_result
      hit_result = check_skill_hit_result
      effective |= hit < 100
    end
    if hit_result == true
      if skill.power != 0 and skill.atk_f > 0
        remove_states_shock
        effective = true
      end
      last_sp = self.sp
      mana_effect = mana_shield_effect
      unless mana_effect
        last_hp = self.hp
        self.hp -= self.damage
        effective |= self.hp != last_hp
      else
        effective |= self.sp != last_sp
      end
      @state_changed = false
      effective |= states_plus(skill.plus_state_set)
      effective |= states_minus(skill.minus_state_set)
      if skill.power == 0
        self.damage = ""
        self.damage = "Miss" unless @state_changed
      end
    else
      self.damage = "Miss"
    end
    self.damage = nil unless $game_temp.in_battle
    if effective
    add_leech(:hp, user) if skill.id == KStates::HP_SEED_ID
      add_leech(:sp, user) if skill.id == KStates::SP_SEED_ID
    update_shield_effect(skill.id)
    end
    effective
  end

  def check_skill_hit_result
    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
    self.damage /= 2 if self.damage > 0 and self.guarding?
    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)
  end

  def add_state(state_id, force=false)
    sup = KStates::UPGRADE_IDS[state_id]
    if @states.include?(state_id) and sup
      if sup[1] == :hp
        shp = @states_hp_dmg_increase[state_id]
        if shp and sup[0] > shp
          @states_hp_dmg_increase[state_id] += 1
        else
          @states_hp_dmg_increase[state_id] = 1
        end
      elsif sup[1] == :sp
        ssp = @states_sp_dmg_increase[state_id]
        if ssp and sup[0] > ssp
          @states_sp_dmg_increase[state_id] += 1
        else
          @states_sp_dmg_increase[state_id] = 1
        end
      end
    end
    kyon_kstates_gm_battler_add_state(state_id, force)
  end

  def remove_state(sid, force=false)
    if @states.include?(sid)
      return if @states_turn[sid] == -1 and !force
      if @hp == 0 and $data_states[sid].zero_hp
        # Determine if there's another state [regarded as HP 0] or not
        zero_hp = false
        for i in @states
          zero_hp = true if i != sid and $data_states[i].zero_hp
        end
        @hp = 1 unless zero_hp
      end
      @states.delete(sid)
      @states_turn.delete(sid)
      @states_hp_dmg_increase.delete(sid)
      @states_sp_dmg_increase.delete(sid)
      add_state(KStates::REPLACE_IDS[sid]) if KStates::REPLACE_IDS[sid]
    end
    @hp = [@hp, self.maxhp].min
    @sp = [@sp, self.maxsp].min
  end

  def add_leech(kind, user)
    group = user.is_a?(Game_Actor)? :actors : :troop
    uix = user.index
    @leeches[group][kind] << uix if !@leeches[group][kind].include?(uix)
  end

  def hp_leech_effect(leech_hp)
    self.hp -= leech_hp
    self.damage = -leech_hp
    self.damage_pop = true
    self.clear_hp_leeches if self.hp == 0
    return true
  end

  def sp_leech_effect(leech_sp)
    self.sp -= leech_sp
    self.sp_damage = -leech_sp
    self.sp_damage_pop = true
    self.clear_sp_leeches if self.sp == 0
    return true
  end

  def slip_damage_effect
    self.damage = 0 if self.damage == nil
    self.sp_damage = 0 if self.sp_damage == nil
    if @states.include?(KStates::HP_SEED_SID)
  @hp_seed_damage = (self.maxhp * 2.5 / 100).round
      if @hp_seed_damage.abs > 0
        amp = [@hp_seed_damage.abs * 0.75 / 100, 1].max
        @hp_seed_damage += rand(amp+1) + rand(amp+1) - amp
      end
  elsif @states.include?(KStates::SP_SEED_SID)
      @sp_seed_damage = (self.maxsp * 2.5 / 100).round
      if @sp_seed_damage.abs > 0
        amp = [@sp_seed_damage.abs * 0.75 / 100, 1].max
        @sp_seed_damage += rand(amp+1) + rand(amp+1) - amp
      end
    end
    self.hp -= self.damage
    if @states.include?(KStates::HPSP_REGEN_IDS[0])
      effect = hp_regen_effect
      self.hp += effect
      self.damage -= effect
    end
    if @states.include?(KStates::HPSP_REGEN_IDS[1])
      effect = sp_regen_effect
      self.sp += effect
      self.sp_damage -= effect
    end
    KStates::POISON_IDS.each {|s_id| next unless @states.include?(s_id)
      effect = poison_effect
      self.hp -= effect
      self.damage += effect }
    KStates::SP_LOSS_IDS.each {|s_id| next unless @states.include?(s_id)
      effect = mana_loss_effect
      self.sp -= effect
      self.sp_damage += effect }
    @states_hp_dmg_increase.each {|i| self.damage += self.damage * i }
    @states_sp_dmg_increase.each {|i| self.sp_damage += self.sp_damage * i }
    self.damage = nil if self.damage == 0
    self.sp_damage = nil if self.sp_damage == 0
    return true
  end

  def dispersion_effect(val) rand(val+1) + rand(val+1) - rand(val+1) end

  def hp_regen_effect
    n = $game_temp.in_battle ? 0 : 1
    hp_gain = (self.maxhp * KStates::HP_GAIN_PERCENT[n] / 100).round
    hp_gain += dispersion_effect(hp_gain / 2)
    return hp_gain
  end

  def sp_regen_effect
    n = $game_temp.in_battle ? 0 : 1
    sp_gain = (self.maxsp * KStates::SP_GAIN_PERCENT[n] / 100).round
    sp_gain += dispersion_effect(sp_gain / 2)
    return sp_gain
  end

  def poison_effect
    n = $game_temp.in_battle ? 0 : 1
    hp_loss = (self.maxhp * KStates::HP_LOSS_PERCENT[n] / 100).round
    hp_loss += dispersion_effect(hp_loss / 2)
    return hp_loss
  end

  def mana_loss_effect
    n = $game_temp.in_battle ? 0 : 1
    sp_loss = (self.maxsp * KStates::SP_LOSS_PERCENT[n] / 100).round
    sp_loss += dispersion_effect(sp_loss / 2)
    return sp_loss
  end
end

class Game_Actor
  attr_reader :weapon_id
end

class Game_Party
  def check_map_slip_damage
    for actor in @actors
      next if actor.hp == 0
      dmg_taken = 0
      if actor.slip_damage?
        if actor.states.include?(KStates::HPSP_REGEN_IDS[0])
          actor.hp += actor.hp_regen_effect
        end
        if actor.states.include?(KStates::HPSP_REGEN_IDS[1])
          actor.sp += actor.sp_regen_effect
        end
        KStates::POISON_IDS.each {|s_id| next if !actor.states.include?(s_id)
          dmg_taken += effect = actor.poison_effect
          actor.hp -= effect }
        KStates::SP_LOSS_IDS.each{|s_id| next if !actor.states.include?(s_id)
          dmg_taken += effect = actor.mana_loss_effect
          actor.sp -= effect }
        if dmg_taken > 0
          $game_system.se_play($data_system.actor_collapse_se) if actor.hp == 0
          $game_screen.start_flash(Color.new(255,0,0,128), 4)
          $game_temp.gameover = $game_party.all_dead?
        end
      end
    end
  end
end

class Game_Player
  def increase_steps
    super
    unless @move_route_forcing
      $game_party.increase_steps
      if $game_party.steps % KStates::SLIP_DMG_STEPS == 0
        $game_party.check_map_slip_damage
      end
    end
  end
end

class Spriteset_Battle
  attr_reader :actor_sprites, :enemy_sprites
end

class Scene_Battle
  alias kyon_kstates_scn_battle_main main
  def main
    kyon_kstates_scn_battle_main
    $game_party.actors.size.times {|n| break if $game_party.actors[n].nil?
      $game_party.actors[n].clear_leeches }
  end

  def make_basic_action_result
    if @active_battler.current_action.basic == 0
      @animation1_id = @active_battler.animation1_id
      @animation2_id = @active_battler.animation2_id
      if @active_battler.is_a?(Game_Enemy)
        if @active_battler.restriction == 3
          target = $game_troop.random_target_enemy
        elsif @active_battler.restriction == 2
          target = $game_party.random_target_actor
        else
          index = @active_battler.current_action.target_index
          target = $game_party.smooth_target_actor(index)
        end
      end
      if @active_battler.is_a?(Game_Actor)
        if @active_battler.restriction == 3
          target = $game_party.random_target_actor
        elsif @active_battler.restriction == 2
          target = $game_troop.random_target_enemy
        else
          index = @active_battler.current_action.target_index
          target = $game_troop.smooth_target_enemy(index)
        end
      end
      @target_battlers = [target]
      for target in @target_battlers
        target.attack_effect(@active_battler)
      end
      return
    end
    if @active_battler.current_action.basic == 1
      @help_window.set_text($data_system.words.guard, 1)
      return
    end
    if @active_battler.is_a?(Game_Enemy) and
       @active_battler.current_action.basic == 2
      @help_window.set_text("Escape", 1)
      @active_battler.escape
      return
    end
    if @active_battler.current_action.basic == 3
      $game_temp.forcing_battler = nil
      @phase4_step = 1
      return
    end
  end

  def update_phase4_step1
    @help_window.visible = false
    return if judge
    if $game_temp.forcing_battler == nil
      setup_battle_event
      return if $game_system.battle_interpreter.running?
    end
    if $game_temp.forcing_battler != nil
      @action_battlers.delete($game_temp.forcing_battler)
      @action_battlers.unshift($game_temp.forcing_battler)
    end
    if @action_battlers.size == 0
      start_phase2
      return
    end
    @animation1_id = 0
    @animation2_id = 0
    @common_event_id = 0
    @active_battler = @action_battlers.shift
    return if @active_battler.index == nil
    if @active_battler.hp > 0 and @active_battler.slip_damage?
      @active_battler.slip_damage_effect
      update_leech_effect
      @active_battler.damage_pop = true
      @active_battler.sp_damage_pop = true
    end
    @active_battler.remove_states_auto
    @status_window.refresh
    @phase4_step = 2
  end

  def update_phase4_step4
    life_shield = KStates::SHIELD_SKILL_ID
    mana_shield = KStates::MANA_SHIELD_SKILL_ID
    for target in @target_battlers
      if target.states.include?(KStates::SHIELD_STATE_ID)
        @animation2_id = $data_skills[life_shield].animation2_id
      elsif target.states.include?(KStates::MANA_SHIELD_STATE_ID)
        @animation2_id = $data_skills[mana_shield].animation2_id
      end
      target.animation_id = @animation2_id
      target.animation_hit = (target.damage != "Miss")
    end
    @wait_count = 8
    @phase4_step = 5
  end

  def update_leech_effect
    battler = @active_battler
    if @active_battler.is_a?(Game_Actor)
      leeches = @active_battler.leeches[:troop]
      targets = $game_troop.enemies
    else
      leeches = @active_battler.leeches[:actors]
      targets = $game_party.actors
    end
    if @active_battler.states.include?(KStates::HP_SEED_SID)
      dmg = @active_battler.hp_seed_damage
      hp_leeches = leeches[:hp].sort
      hp_leeches.each {|n| leech = targets[n]
    dmg = leech.maxhp - leech.hp if dmg > leech.maxhp - leech.hp
        @active_battler.hp_leech_effect(dmg)
        leech.hp += dmg
        leech.hp_damage = -dmg
        leech.hp_damage_pop = true
        break if @active_battler.hp == 0  }
    end
    if @active_battler.states.include?(KStates::SP_SEED_SID)
      dmg = @active_battler.sp_seed_damage
      sp_leeches = leeches[:sp].sort
      sp_leeches.each {|n| leech = targets[n]
    dmg = leech.maxsp - leech.sp if dmg > leech.maxsp - leech.sp
        @active_battler.sp_leech_effect(dmg)
        leech.sp += dmg
        leech.sp_damage = -dmg
        leech.sp_damage_pop = true
        break if @active_battler.sp == 0  }
    end
  end

  def update_phase4_step5
    @help_window.visible = false
    @status_window.refresh
    for target in @target_battlers
      target.damage_pop = true if target.damage
      target.sp_damage_pop = true if target.sp_damage
    end
    @phase4_step = 6
  end
end


Última edición por kyonides-arkanthos el Jue Feb 18, 2016 6:34 am, editado 12 veces
Volver arriba Ir abajo
Ver perfil de usuario http://deloquesea.mforos.com/forums/
Nyakuya
Caballero Experimentado
Caballero Experimentado
avatar

Cantidad de envíos : 225
Miembro desde : 09/10/2014
Edad : 21
Localización : Tandil
Sexo : Masculino

Maker : RMXP


MensajeTema: Re: Kolloseum States XP   Sáb Feb 06, 2016 5:44 am

Después lo pruebo, porque ahora son las 6 de la mañana xD
Volver arriba Ir abajo
Ver perfil de usuario
kyonides-arkanthos
Lord Guru Maker
Lord Guru Maker
avatar

Cantidad de envíos : 1766
Miembro desde : 03/02/2010
Sexo : Masculino

Maker : RMXP


MensajeTema: Re: Kolloseum States XP   Sáb Feb 06, 2016 6:18 pm

ACTUALIZACIÓN

La versión 1.1.1 ya está disponible para los pocos interesados que pueda haber en el script.

Además de unas correcciones y reubicaciones de código, se agregan las posibilidades de definir Armas que roben PV o PM al golpear al oponente. También hay otras armas que roban algo del PV del atacante cuando este las utiliza a cambio de incrementar el daño infligido al enemigo.
Volver arriba Ir abajo
Ver perfil de usuario http://deloquesea.mforos.com/forums/
kyonides-arkanthos
Lord Guru Maker
Lord Guru Maker
avatar

Cantidad de envíos : 1766
Miembro desde : 03/02/2010
Sexo : Masculino

Maker : RMXP


MensajeTema: Re: Kolloseum States XP   Lun Feb 08, 2016 6:21 pm

Actualización

La versión 1.2.5, también conocida como la Leech Version, incluye mejoras y correcciones y nuevas opciones. Las armas tienen una mayor cantidad de efectos y está en progreso el que 2 habilidades o técnicas roben PV o PM de uno o más oponentes. De funcionar se podría colocar más de una semilla en un mismo individuo y este podría enviarle sus PV o PM a más de un oponente, siempre y cuando su enemigo lo haya afectado con ese estado.
Volver arriba Ir abajo
Ver perfil de usuario http://deloquesea.mforos.com/forums/
kyonides-arkanthos
Lord Guru Maker
Lord Guru Maker
avatar

Cantidad de envíos : 1766
Miembro desde : 03/02/2010
Sexo : Masculino

Maker : RMXP


MensajeTema: Re: Kolloseum States XP   Jue Feb 18, 2016 6:41 am

Desarrollo Del Script Hasta Ahora

Este es un resumen de los cambios realizados en el script prácticamente desde sus inicios.
Una versión sin sobrenombre contenía las opciones de regenerar los PV o PM tanto en el mapa como en las batallas, aunque en este último caso solo duraría algunos turnos.

Más tarde llegarían varias mini versiones que agregarían más y más tipos de Espadas o Armas con características singulares. Por esto y la inclusión de Técnica y Estado de Sanguijuela (Leech o Leech Seed respectivamente) el script pasó a llamarse Leech Version.

Les cuento que Leech Version se convirtió en Shield Version 1.3.0 porque ahora también incluye la posibilidad de utilizar Escudos mágicos para proteger sus PV, ya sea utilizando un escudo especial pero temporal con sus propios PV o con un escudo que consume los PM de su protegido.
 
A partir de la versión 1.4.0 pasó a ser conocido como Blood Shield Version por incluir los escudos anteriores más el Blood Shield o escudo de sangre. Este le rebaja una parte de los PV al que crea el escudo a cambio de proteger a su aliado o a sí mismo con una mayor cantidad de puntos. Cuando cualquiera de los 3 escudos está activo, no se puede activar otro escudo, y el que está activo sigue protegiendo a su luchador hasta que se agoten sus puntos de daño por los distintos ataques de sus contrincantes. Además se incorporó la opción de convertir técnicas normales en Técnicas Sangrientas o Blood Skills por las que hay que pagar con PV para obtener más beneficios al atacar.
 
Desde la versión 1.5.0 es conocido como Blue Mage Version porque incluye lo necesario para aprender técnicas que inflijan daño al Mago Azul de su equipo.
 
Con la llegada de la versión 1.6.0 se la llama White Knight Version al incluir al Caballero Blanco (más o meno a lo Cecil en FFII). Este protegerá a sus camaradas de los ataques y técnicas del enemigo, a menos que se traten de técnicas de objetivos múltiples o las que Uds. definan en la respectiva constante.
 
Al llegar la versión 1.7.0 este script pasó a apodarse Counter Version por incluir habilidades como Contra, que provoca efectos adversos en las curaciones mediante técnicas y el comportamiento del Caballero Blanco, y Contraescudo, que sirve para destruir los escudos mágicos disponibles desde Shield Version. Además se agregó una característica más a Retraso o Tardanza, hace que el Caballero Blanco llegue tarde a bloquear el ataque dirigido a alguno de sus compañeros. Para terminar tenemos la introducción de Aleatorio que provoca que un contrario obtenga el estado del mismo nombre y pierda el control sobre las técnicas que desea utilizar porque el resultado será diferente al que elija en la ventana de técnicas. Aunque cabe admitir que esta última característica necesitaba algo de refinamiento.

Con el arribo de la versión 1.8.0 el script lleva por sobrenombre Random Toad Version, ya que incluye una Técnica y un Estado Random o Aleatorio que al aplicarse a un contrario, este ya no tiene control sobre las habilidades que utilizará. Podrá escoger una, pero no hay garantía de que realmente sea la que se terminará aplicando. De todos modos les aviso que no es permanente, a no ser que Uds. la configuren así en la base de datos. Si quieren malgastar su Mana, es cosa suya.

La otra característica incluida trata de convertir en Rana o Sapo (Toad) a sus oponentes o por qué no a uno de sus aliados. Bueno uno no se lo aplicaría a uno de los aliados a no ser que se lo quiera curar de ese Estado / Transformación, ya que la única alternativa es que crearan un objeto a lo Maiden's Kiss o Beso de la Doncella. Les advierto que, al igual que en la versión de los Final Fantasy, las ranas no pueden golpear tan duro como su contraparte normal ni pueden utilizar otra técnica que no sea Toad o Rana o Sapo. Esto solo ocurriría mientras logra curarse de algún modo.


Además se han sumado más técnicas curiosas como Espinas o Cardos (Thorns) que le causan algo de daño al que ataque físicamente a la víctima bajo ese estado. Luego también podrán encontrar Demi, la técnica que rebaja los PV a la mitad y Nivel 5 y Nivel 10 que matan al oponente si este tiene un nivel divisible entre uno de esos números.

Desde Casters Version 1.9.0 ya está disponible la opción de utilizar a varios atacantes para realizar un ataque combinado en contra de un único enemigo. También se realizaron varias modificaciones del código preexistente por necesidad y algunos arreglos de pequeños detalles que se me habían escapado por causa de la seguidilla de actualizaciones con nuevas características.

Con Building Up Thievery Version 2.0.0 se incluyeron Técnicas y Estados para ir acumulando daño en el enemigo lentamente hasta que de pronto le explotan encima al contrincante al cabo de unos turnos, así como variantes de la Técnica Robo para que tanto héroes como enemigos le puedan arrebatar cosas a sus adversarios, pero también se pueden definir Objetos Malditos que roben PV o PM a los héroes una vez por cada ronda de la batalla.

La versión 2.1.0 fue una fusión existosa entre Kolloseum XP y KStates XP.

Ahora en Zombie Bite Version 2.2.0 tienen a su disposición Técnicas y Estados de Zombi y pro Zombi, esta última es un efecto retardado que lentamente provocará la transformación en Zombi. Se le suman las de Pestilencia, que afecta a los vivos y favorece a los no muertos y causa daño por turno. Como dato curioso les cuento que el Caballero Blanco no protegerá a zombis ni pestilentes. También se incorpora la posibilidad de que los enemigos o porten una arma o una armadura si y solo si el tesoro a ganar es una de esas opciones. (No se ha confirmado esto último en la práctica.)

Desde la versión beta llamada Assassin's Covenant Version 2.3.0 es posible ver a los asesinos atacar a sus objetivos de cerca en más de una ocasión antes de que termine su turno. Aunque en la teoría debería estar listo para que lo puedan hacer héroes y monstruos de clase o de tipo asesino, de momento solo lo he puesto a prueba con una asesina dizque heroína del demo.
Volver arriba Ir abajo
Ver perfil de usuario http://deloquesea.mforos.com/forums/
kyonides-arkanthos
Lord Guru Maker
Lord Guru Maker
avatar

Cantidad de envíos : 1766
Miembro desde : 03/02/2010
Sexo : Masculino

Maker : RMXP


MensajeTema: Re: Kolloseum States XP   Dom Feb 21, 2016 7:16 pm

Llegó la versión 2.4.0 también conocida como Bold Monsters Version y con ella trajo correcciones y modificaciones a la técnica Escaneo y al funcionamiento de las técnicas Asesinas, pero en especial ofrece la posibilidad de mejorar los stats de los monstruos y sus respectivas experiencias y su dinero de recompensa con un llamado a script. (Se requiere llenar una plantilla para los monstruos.)
Volver arriba Ir abajo
Ver perfil de usuario http://deloquesea.mforos.com/forums/
Contenido patrocinado




MensajeTema: Re: Kolloseum States XP   

Volver arriba Ir abajo
 
Kolloseum States XP
Ver el tema anterior Ver el tema siguiente Volver arriba 
Página 1 de 1.
 Temas similares
-
» "Qin The Warring States" alguien lo ha jugado?
» Western Border States

Permisos de este foro:No puedes responder a temas en este foro.
Maker Palace :: RGSS Scripts :: Scripts Maker XP-
Cambiar a: