¡Bienvenido a Universo Maker!
¿Es esta la primera vez que visitas el foro? Si es así te recomendamos que te registres para tener completo acceso a todas las áreas y secciones del foro, así también podrás participar activamente en la comunidad. Si ya tienes una cuenta, conéctate cuanto antes.
Iniciar Sesión Registrarme

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo Mensaje [Página 1 de 1.]

#1SkillKost XP Empty SkillKost XP el Sáb Ago 15, 2020 12:17 am

kyonides

kyonides
SkillKost XP


por Kyonides Arkanthes


Introducción

Como XP carece de algunas cosas convenientes, decidí que debía permitirles que utilicen mi script para configurar los costos generales o específicos de sus técnicas para que no siempre cuesten los mismo PM. En el caso del modo específico para cada combinación de héroe-técnica, no es necesario especificar a todos los héroes ni todas las técnicas sino solo a aquellos "duetos" que ustedes necesitar alterar. Los demás seguirán utilizando el PM usual.

El modo general permite incrementarle o decrementarle el costo a todos los involucrados en la batalla.

OK admito que también puede afectar lo que hagan en el menú de técnicas aunque estén en el mapa. Ópalo Tuerto

Código:
# * SkillKost XP
#   Scripter : Kyonides Arkanthes
#   2020-08-13 - v1.0.2

# Este script permite que alteren el Costo de Técnicas de 3 formas distintas:
# - Costo General pero Aleatorio
# - Costo General Personalizado
# - Costo Específico Personalizado para Actores (Nivel) o Enemigos (sin nivel)

# La última opción requiere que fijen los valores de las Constantes que se hayan
# en el módulo SkillKost.

# Coloquen el script después de Scene_Debug. He aquí el porqué:

# * Llamados a Script * #
# Activar or desactivar Costo Aleatorio para todo luchador sin importar el bando
#   SkillKost.random = true  o bien  false
# Definir el Costo Específico para ciertos luchadores
#   SkillKost.custom = Algún Porcentaje
# * Fin de Llamados a Script * #

# * Método Sobreescrito * #
# - Game_Battler#skill_can_use?

# * Métodos con Alias * #
# - Game_Battler#sp=
# - Interpreter#command_312 y #command_312
# - Scene_Skill#update_skill
# - Scene_Battle#make_skill_action_result

module SkillKost
  @random = false
  @random_max = 1 # 1 es igual a 100%
  @custom = 0 # Porcentaje de PM: 0+
  HEROES = {} # Ni lo toquen
  MONSTERS = {} # Ni lo toquen
# HEROES[ [IDActor, IDTécnica] ] = { ActorNivMin..NivMax => Porcentaje, etc. }
  HEROES[[1, 60]] = { 1..5 => 20, 6..10 => 15, 11..20 => 10 }
  HEROES[[7, 81]] = { 1..2 => 25 }
# MONSTERS[ [IDEnemigo, IDTécnica] ] = Porcentaje
  class << self
    attr_accessor :random, :custom, :skill_id, :used_event_command
    def hero(actor_id, skill_id, level)
      heroes = HEROES[[actor_id, skill_id]]
      return 100 unless heroes
      key = heroes.keys.select{|range| range.include?(level) }[0]
      heroes[key] || 100
    end
    def monster(enemy_id, skill_id) MONSTERS[[enemy_id, skill_id]] || 100 end
  end
end

class Game_Battler
  alias :kyon_skillkost_gm_btlr_sp :sp=
  def sp=(new_sp)
    if !SkillKost.used_event_command and @sp > new_sp
      new_sp = @sp - skill_sp_cost(SkillKost.skill_id)
    end
    kyon_skillkost_gm_btlr_sp(new_sp)
  end

  def skill_sp_cost(skill_id)
    cost = $data_skills[skill_id].sp_cost
    cost = rand(cost * 2 + 1).round if SkillKost.random
    cost = (SkillKost.custom * cost / 100).round if SkillKost.custom > 0
    specific_skill_sp_cost(skill_id, cost)
  end

  def skill_can_use?(skill_id)
    return false if dead?
    return false if self.skill_sp_cost(skill_id) > self.sp
    return false if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
    occasion = $data_skills[skill_id].occasion
    return (occasion == 0 or occasion == 1) if $game_temp.in_battle
    occasion == 0 or occasion == 2
  end
end

class Game_Actor
  def specific_skill_sp_cost(skill_id, cost)
    cost += cost * SkillKost.hero(@actor_id, skill_id, @level) / 100
    cost.round
  end
end

class Game_Enemy
  def specific_skill_sp_cost(skill_id, cost)
    cost += cost * SkillKost.monster(@enemy_id, skill_id) / 100
    cost.round
  end
end

class Interpreter
  alias :kyon_skillkost_inter_cmd312 :command_312
  alias :kyon_skillkost_inter_cmd332 :command_332
  def command_312
    SkillKost.used_event_command = true
    kyon_skillkost_inter_cmd312
    SkillKost.used_event_command = nil
  end

  def command_332
    SkillKost.used_event_command = true
    kyon_skillkost_inter_cmd332
    SkillKost.used_event_command = nil
  end
end

class Scene_Skill
  alias :kyon_skillkost_scn_skill_up_skill :update_skill
  def update_skill
    if Input.trigger?(Input::B)
      SkillKost.skill_id = nil
    elsif Input.trigger?(Input::C)
      SkillKost.skill_id = @skill_window.skill.id
    end
    kyon_skillkost_scn_skill_up_skill
  end
end

class Scene_Battle
  alias :kyon_skillkost_scn_btl_make_skill_ar :make_skill_action_result
  def make_skill_action_result
    SkillKost.skill_id = @active_battler.current_action.skill_id
    kyon_skillkost_scn_btl_make_skill_ar
    SkillKost.skill_id = nil
  end
end






Script de Menú de Habilidades

Es para quienes necesiten ver el costo modificado de dichas técnicas.

En este se reescribe un método que viene por defecto en XP, así que les recomiendo colocarlo debajo de Scene_Debug y antes de cualquier script que pueda alterar las habilidades.

Código:
# * SkillKost XP - Default Skill Window Mod
#   Scripter : Kyonides Arkanthes
#   2020-08-16

class Window_Skill
  def draw_item(index)
    skill = @data[index]
    color = @actor.skill_can_use?(skill.id)? normal_color : disabled_color
    contents.font.color = color
    x = 4 + index % 2 * (288 + 32)
    y = index / 2 * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(skill.icon_name)
    opacity = contents.font.color == normal_color ? 255 : 128
    contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
    cost = @actor.skill_sp_cost(skill.id).to_s
    contents.draw_text(x + 232, y, 48, 32, cost, 2)
  end
end


Términos de Uso

Es gratuito para juegos no comerciales.
Incluyan mi seudónimo en sus créditos.
Mencionen a este foro.

Me regalan su juego terminado si incluyen 2 o más de mis scripts en su juego. Ópalo Tuerto

Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

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