Tomah Iniciante
Número de Mensagens : 7 Idade : 29 Localização : Brasil Reputação : Alerta : Perfil : Escritor
| Assunto: Sistema de Mixagem de Habilidades Dom Fev 01, 2009 7:10 pm | |
| Sistema de Mixagem de Habilidades 1.1 por Woratana IntroduçãoEsse 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. ScreenshotComo usarNão é um script complicado de usar. Primeiro, cole o script acima de Principal. Depois, 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. DemoMixagem de Habilidades.rarScript - 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 FrequentesNão há perguntas frequentes Créditos e Agradecimentos 1. Ao Woratana por fazer esse incrível script. 2. À comunidade Maker, por me ajudar. 3. A mim mesmo, por traduzir e disponibilizar o script aqui. Observações do AutorVocê 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, desde que dê os devidos créditos. | |
|
Atheron ADMIN
Número de Mensagens : 114 Reputação : Alerta : Perfil : Veja meu avatar: https://2img.net/r/ihimizer/img239/8997/gyunt8.png
| Assunto: Re: Sistema de Mixagem de Habilidades Dom Fev 01, 2009 9:00 pm | |
| Muito bom!!! Valeu por disponibilizar, Tomah!! +REP! | |
|