Hacred Sall
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.



 
InícioProcurarÚltimas imagensRegistarEntrar

Compartilhe | 
 

 [RMVX] Sistema de Mixagem de Habilidades

Ver o tópico anterior Ver o tópico seguinte Ir para baixo 
AutorMensagem
Tomah
Sargento
Sargento
Tomah

Áries

[RMVX] Sistema de Mixagem de Habilidades Empty
MensagemAssunto: [RMVX] Sistema de Mixagem de Habilidades   [RMVX] Sistema de Mixagem de Habilidades Icon_minitimeSeg Jun 29, 2009 8:43 pm

Sistema de Mixagem de Habilidades 1.1

por Woratana


Introdução

Esse script permite que o jogador combine habilidades para ganhar
novas. Você pode criar ilimitadas receitas para as habilidades e
definir qual personagem pode ou não tentar mixar determinada receita.


Características

- Combine 2 ou mais habilidades para ganhar novas habilidades.
- Escolha que personagens podem ou não mixar cada receita.
- Escolha só adicionar novas habilidades ou remover as habilidades que você usou para mixar também.
- Fácil de editar o texto das janelas do sistema.

Screenshot

[RMVX] Sistema de Mixagem de Habilidades 21802d1236984334-sistema-de-mixagem-de-habilidades-screenshot.2

Como usar

Não é um script complicado de usar. Crie um evento e clique em chamar
script. Em seguida, cole esse código: $scene = Scene_Mixskill.new

Maiores informações se encontram no próprio script e na demo.

Demo

Baixe aqui

Script


Código:

   #===============================================================
# ● [VX] ◦ Sistema de Mixagem de Habilidades ◦ □
#--------------------------------------------------------------
# ◦ feito por Woratana [woratana@hotmail.com]
# ◦ Thaiware RPG Maker Community
# ◦ Lançado em: 25/05/2008
# ◦ Versão: 1.1
# ◦ Tradução por Tomah [deviltomah@yahoo.com.br]
#--------------------------------------------------------------
# ◦ Recursos:
# - Combine 2 ou mais habilidades para conseguir nova(s) habilidade(s)
# - Escolha o(s) personagem(s) que podem/não podem usar cada receita
# - Escolha só adicionar nova(s) habilidade(s) ou remover as habilidades que você usou para a receita também.
# - Fácil de editar o texto em janelas de Mixagem de Habilidades
#--------------------------------------------------------------
# ◦ Como usar:
# - Chame Scene_MixSkill chamando o script em um evento:
#  $scene = Scene_Mixskill.new
#=================================================================

  #=============================================================
  # * Constants Initialization (NÃO EDITE ESSA PARTE!) *
  #-------------------------------------------------------------
class Skill_Recipe
  attr_accessor :result, :skills, :user, :nonuser, :replace
end
class Scene_Mixskill < Scene_Base
  RECIPE = []
  #=============================================================
 
  #=============================================================
  # * [SETUP] SCENE MIXSPELL WINDOWS & TEXTS
  #-------------------------------------------------------------
  ACTOR_LIST_WIDTH = 172 # Altura da janela da lista de Personagens
 
  TOP_WINDOW_TEXT = '- Sistema de Mixagem de Habilidades -' # Texto mostrado na janela do topo quando inicia
  TOP_WINDOW_TEXT_WITH_ACTOR = '- Sistema de Mixagem de Habilidades -: {name}'
  # Texto mostrado depois de escolher personagem, use {name} para o nome do personagem
 
  BOTTOM_WINDOW_TEXT_ACTOR = 'Escolha o personagem que você quer mixar as habilidades'
  # Texto mostrado quando jogador tem que escolher o personagem para mixar habilidades
 
  MIX_BUTTON = 'Começar a mixar habilidades!' # Botão de Mixagem
  MIX_BETWEEN = '---------------------------'
  # Texto entre o resultado da receita e as habilidades escolhidas
 
  EXIT_BUTTON = '- Sair -' # Botão de sair na janela da lista de personagens
 
  SE_FOUND_RECIPE = 'Chime1'
  # Efeito de som a tocar quando encontra a receita para as habilidades selecionadas
  SE_FOUND_RECIPE_VOLUME = 80 # Sound Effect volume
 
  SE_MIXED = 'Chime2'
  # Efeito de som a tocar quando mixar habilidades
  SE_MIXED_VOLUME = 80
  #=============================================================
=begin
  #=============================================================
  # * [SETUP] Receita de Mixagem de Habilidades
  #-------------------------------------------------------------
  # .: TEMPLATE DA RECEITA :.
  #-------------------------------------------------
  data = Skill_Recipe.new
  data.skills = [ID da habilidade, ID da habilidade, ...]
  data.result = [ID da habilidade, ID da habilidade, ...]
  data.replace = true (or) false
  data.user = [ID do Personagem, ID do Personagem, ...]
  data.nonuser = [ID do Personagem , ID do Personagem, ...]
  RECEITA << data
  #-------------------------------------------------
  # * data = Skill_Recipe.new: cria nova receita em branco.
 
  # * data.skills: Habilidades que você tem que mixar para conseguir data.result (linha abaixo)
  # Você deve ter pelo menos 2 habilidades em data.skills (ou receita irá falhar).
 
  # * data.result: Habilidades que você ganha quando mixa data.skills (linha acima)
  # Você pode ter 1 habilidade ou mais em data.result.
 
  # * data.user: Personagens que podem usar essa receita, ponha 0 como ID para TODOS OS PERSONAGENS.
 
  # * data.nonuser: Personagens que não podem usar essa receita.
  # Você não precisa usar data.nouser se você não colocou 0
  # em data.user. -- Ponha [] se você não usar isso.
 
  # * DICA: Quando o sistema checar para ver se Personagem pode usar a receita,
  # Ele vai checar se a ID do personagem não está inclusa em data.nouser primeiro.
  # Depois, ele vai checar se a ID do personagem está inclusa em data.user ou o data.user da receita
  # está em 0 (usável para todos os personagens).
  #
  # Então, você pode criar receitas que vão funcionar com todos os personagens,
  # exceto para os personagens 2 e 4 em set data.user e data.nouser assim:
  # data.user = [0]
  # data.nonuser = [2, 3]
 
  # * data.replace = true (or) false: Se você quer remover habilidades em data.skills
  quando mixar a receita, ponha 'true'. Se não, ponha 'false'.
   
  # * RECIPE << data: Adiciona novas receitas para a database.
  #-------------------------------------------------------------
=end
  #=============================================================
  data = Skill_Recipe.new
  data.skills = [1,2]
  data.result = [3]
  data.user = [0]
  data.nonuser = [1]
  data.replace = true
  RECIPE << data
 
  data = Skill_Recipe.new
  data.skills = [33,35,34]
  data.result = [40,42]
  data.user = [3]
  data.nonuser = []
  data.replace = false
  RECIPE << data
  #=============================================================
 
  def start
    super
    create_menu_background
    @help1 = Window_Help.new
    @help2 = Window_Help.new
    @help2.y = Graphics.height - @help2.height
   
    @sk = Window_MS_Skill.new(0, @help1.height, Graphics.width/2,
Graphics.height - (@help1.height*2))
    @sk.help_window = @help2
    @sk_chosen = Window_MS_SkillList.new(@sk.width, @sk.y + @help1.height,
@sk.width, @sk.height - @help1.height)
   
    @act_list = Window_MS_ActorList.new(ACTOR_LIST_WIDTH)
    @act_list.x = (Graphics.width - @act_list.width) / 2
    @act_list.y = (Graphics.height - @act_list.height) / 2
 
    @winmix = Window_Command.new(@sk.width, [MIX_BUTTON])
    @winmix.x = @sk.width
    @winmix.y = @help1.height
   
    runstep(0)
  end
 
  def update
    super
    if @act_list.active
      @act_list.update
      if Input.trigger?(Input::C)
        @act_list.visible = @act_list.active = false
        case @act_list.define[@act_list.index]
        when 'exit'
          Sound.play_cancel
          $scene = Scene_Map.new
        else
          runstep(1)
        end
      elsif Input.trigger?(Input::B)
        Sound.play_cancel
        $scene = Scene_Map.new
      end
    elsif @sk.active
      @sk.update
      if Input.trigger?(Input::C)
        if @sk_chosen.skills.include?(@sk.skill)
          Sound.play_cancel
          return
        end
        Sound.play_decision
        @sk_chosen.skills << @sk.skill
        refresh_chosen_data
      elsif Input.trigger?(Input::B)
        runstep(4)
      elsif Input.trigger?(Input::RIGHT)
        runstep(2)
      end
    elsif @winmix.active
      @winmix.update
      if Input.trigger?(Input::C)
        runstep(5)
      elsif Input.trigger?(Input::LEFT)
        runstep(3)
      elsif Input.trigger?(Input::B)
        runstep(4)
      end
    end
  end
 
  def terminate
    super
    @act_list.dispose
    @sk_chosen.dispose
    @sk.dispose
    @help1.dispose
    @help2.dispose
    dispose_menu_background
  end
 
  def refresh_chosen_data
    @sk.chosen = @sk_chosen.skills
    @sk_chosen.skills.uniq!
    @sk.chosen.uniq!
    data_mixable = spell_mixable(@sk_chosen.skills)
    @sk_chosen.result = data_mixable[0]
    @sk_chosen.result -= @sk.actor.skills
    @sk_chosen.replace = data_mixable[1]
    RPG::SE.new(SE_FOUND_RECIPE, SE_FOUND_RECIPE_VOLUME).play if !@sk_chosen.result.empty?
    @winmix.draw_item(0, !@sk_chosen.result.empty?)
    @sk_chosen.refresh
    @sk.refresh
  end
 
  def spell_mixable(chosen)
    skills = []
    chosen.each {|i| skills << i.id if i.is_a?(RPG::Skill) }
    RECIPE.each_index do |r|
      next if RECIPE[r].nil? or RECIPE[r].skills.size < 2 or
  RECIPE[r].skills.size != skills.size or RECIPE[r].skills.sort != skills.sort
      next if RECIPE[r].nonuser.include?(@sk.actor.id)
      if RECIPE[r].user.include?(@sk.actor.id) or RECIPE[r].user.include?(0)
        result = RECIPE[r].result
        result_skills = []
        result.each {|i| result_skills << $data_skills[i] unless $data_skills[i].nil? }
        return [result_skills, RECIPE[r].replace]
      end
    end
    return [[], true]
  end
 
  def runstep(id)
    case id
    when 0
      @sk.visible = @sk.active = false
      @sk_chosen.visible = @sk_chosen.active = false
      @act_list.active = @act_list.visible = true
      @winmix.visible = @winmix.active = false
      @help1.set_text(TOP_WINDOW_TEXT, 1)
      @help2.set_text(BOTTOM_WINDOW_TEXT_ACTOR, 1)
    when 1
      Sound.play_decision
      @act_list.active = @act_list.visible = false
      @sk.visible = @sk.active = true
      @sk_chosen.visible = true
      @sk_chosen.active = false
      @winmix.visible = true
      @winmix.active = false
      @winmix.index = -1
      @sk.set_actor(@act_list.define[@act_list.index])
      @help1.set_text(TOP_WINDOW_TEXT_WITH_ACTOR.gsub(/\{name\}/i){@sk.actor.name}, 1)
      @sk_chosen.clear
      @winmix.draw_item(0, !@sk_chosen.result.empty?)
    when 2
      if @sk_chosen.result.empty?
        Sound.play_cancel
      else
        Sound.play_decision
        @winmix.index = 0
        @winmix.active = true
        @sk.active = false
        @sk_lastindex = @sk.index
        @sk.index = -1
      end
    when 3
      Sound.play_decision
      @winmix.index = -1
      @winmix.active = false
      @sk.active = true
      @sk.index = @sk_lastindex
    when 4
      if @sk_chosen.skills.empty?
        Sound.play_decision
        runstep(0)
      else
        Sound.play_cancel
        @sk_chosen.skills.pop
        refresh_chosen_data
      end
    when 5
      if @sk_chosen.result.empty?
        Sound.play_cancel
      else
        RPG::SE.new(SE_MIXED,SE_MIXED_VOLUME).play
        actor = @sk.actor
        ingrad = @sk_chosen.skills
        result = @sk_chosen.result
        ingrad.each {|i| actor.forget_skill(i.id) } if @sk_chosen.replace
        result.each {|i| actor.learn_skill(i.id) }
        runstep(1)
      end
    end
  end
end

#==============================================================================
# * Window_MS_Skill
#==============================================================================
class Window_MS_Skill < Window_Selectable
  attr_accessor :chosen, :actor
  def initialize(x, y, width, height)
    super(x, y, width, height)
    @column_max = 1
    @chosen = []
    @data = []
    self.index = 0
  end

  def skill
    return @data[self.index]
  end

  def refresh
    @data = []
    for skill in @actor.skills
      @data.push(skill)
      if skill.id == @actor.last_skill_id
        self.index = @data.size - 1
      end
    end
    @item_max = @data.size
    create_contents
    for i in 0...@item_max
      draw_item(i)
    end
  end
 
  def set_actor(actor)
    @actor = actor
    @chosen = []
    self.index = 0
    refresh
  end

  def draw_item(index)
    skill = @data[index]
    return if @chosen.include?(skill)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    if skill != nil
      rect.width -= 4
      draw_item_name(skill, rect.x, rect.y)
    end
  end

  def update_help
    @help_window.set_text(skill == nil ? '' : skill.description)
  end
end

#==============================================================================
# * Window_MS_SkillList
#==============================================================================
class Window_MS_SkillList < Window_Selectable
  attr_accessor :result, :skills, :replace
  def initialize(x, y, width, height)
    super(x, y, width, height)
    clear
  end

  def refresh
    self.contents.clear
    @data = @result + [Scene_Mixskill::MIX_BETWEEN] + @skills
    @item_max = @data.size
    for i in 0...@item_max
      draw_item(i)
    end
  end

  def draw_item(index, enabled = true)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    skill = @data[index]
    rect.width -= 4
    if skill.is_a?(RPG::Skill)
      draw_icon(skill.icon_index, rect.x, rect.y, enabled)
      self.contents.font.color = @result.include?(skill) ? system_color : normal_color
      self.contents.draw_text(rect.x + 24, rect.y, rect.width-24, WLH, skill.name)
    else
      self.contents.font.color = normal_color
      self.contents.draw_text(rect.x, rect.y, rect.width, rect.height, skill, 1)
    end
  end
 
  def clear
    @result = []
    @skills = []
    @replace = true
    refresh
  end

  def cursor_movable?
    return false
  end
end

#==============================================================================
# * Window_MS_ActorList
#==============================================================================
class Window_MS_ActorList < Window_Command
  attr_reader :define
  def initialize(width)
    commands = []
    @define = []
    $game_party.members.each do |i|
      commands << i.name
      @define << i
    end
    commands << Scene_Mixskill::EXIT_BUTTON
    @define << 'exit'
    super(width, commands)
  end
end

Perguntas Frequentes

Não há perguntas frequentes


Créditos e Agradecimentos

1. Ao Woratana por fazer esse incrível script.
2. A mim (Tomah) por traduzir e disponibilizar o script.

Observações do Autor

Você está autorizado a usar esse script no seu jogo, desde que dê os
devidos créditos. Você também pode postar essa tradução em outro site, com os créditos.
Ir para o topo Ir para baixo
 

[RMVX] Sistema de Mixagem de Habilidades

Ver o tópico anterior Ver o tópico seguinte Ir para o topo 

 Tópicos semelhantes

+
Página 1 de 1

Permissões neste sub-fórumNão podes responder a tópicos
Hacred Sall :: Centro de Operações :: Armazém :: Scripts-
Ir para: