Poulet Lv.1
Age : 27 Inscrit le : 11/02/2010 Messages : 8
| Sujet: Script de fusion d'objet (sans reponse) Dim 2 Mai 2010 - 19:36 | |
| Bonjour je voudrais un script de style fusion de competance
Ce qui est obligatoire :
1.Une fenetre ou pourrait fussioné des objet 2.4 objet a fussioné pas plus
Ce qui est optionel : 1.Vous pourrez mettre un rendu de combien de fusion ont etait faite 2.Vous pourrez rendre la fusion payante de 15 piéce
Voici un shéma de ce que je voudrais :
Voila le script : c'est du meme style que ce script
- Spoiler:
#===============================================================
# ● [VX] ◦ Mix Skill System ◦ □
#--------------------------------------------------------------
# ◦ De Woratana [woratana@hotmail.com]
# ◦ Thaiware RPG Maker Community
# ◦ Crée le : 25/05/2008
# ◦ Version: 1.1
# ◦ Traduction Française : Blockade
#--------------------------------------------------------------
# ◦ Fonctionnalités :
# - Combine 2 sort ou plus pour obtenir de nouveaux sort(s)
# - Choisissez les héros qui peuvent/ne peuvent utiliser chaque recette
# - Pour choisir juste a sectionner les nouveaux sort, ou enlever certains mis par erreur
# - Facilement personnalisable
#--------------------------------------------------------------
# ◦ Comment l'utiliser :
# - Appeler la scène : Scene_MixSkill grâce à la fonction d'appel :
# $scene = Scene_Mixskill.new
#=================================================================
#=============================================================
# ** Constants Initialization (NE PAS ÉDITER CETTE PARTIE !) **
#-------------------------------------------------------------
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 # Largeur de la fenêtre de la liste des héros
TOP_WINDOW_TEXT = 'Fusion de sort ' # Texte affiché en haut de la fenêtre au début
TOP_WINDOW_TEXT_WITH_ACTOR = 'Fusion de sort pour : {name}'
# Texte affiché, après avoir choisi son héros, utiliser {name} pour le nom du héros
BOTTOM_WINDOW_TEXT_ACTOR = 'Choissisez un Héros.'
# Texte affiché, quand un joueur a à choisir un héros pour fusionner ses sorts
MIX_BUTTON = 'Démarrer la fusion !' # Bouton de la fusion
MIX_BETWEEN = '---------------------------'
# Texte entre le résultat de la fusion et les sorts choisis
EXIT_BUTTON = 'Sortie' # Bouton de sortie dans la liste des héros
SE_FOUND_RECIPE = 'Chime1'
# L'effet sonore joué quand le joueur trouve une bonne recette
SE_FOUND_RECIPE_VOLUME = 80 # Volume de l'effet sonore
SE_MIXED = 'Chime2'
# L'effet sonore, quand les sort sont fusionnés
SE_MIXED_VOLUME = 80
#=============================================================
=begin
#=============================================================
# ** [SETUP] Fusion de sort, recettes
#-------------------------------------------------------------
# .: RECIPE TEMPLATE :.
#-------------------------------------------------
data = Skill_Recipe.new
data.skills = [ID du sort, ID du sort, ...]
data.result = [ID du sort ID du sort, ...]
data.replace = true (or) false
data.user = [ID du héros, ID du héros, ...]
data.nonuser = [ID du héros, ID du héros, ...]
RECIPE << data
#-------------------------------------------------
# * data = Skill_Recipe.new: Crée une nouvelle recette.
# * data.skills: Sort que vous avez à fusionner pour obtenir un nouveau
# Vous devez avoir au moins 2 sort dans data.skills (ou la recette ne marchera pas).
# * data.result: Sort(s) obtenu lors de la fusion des sort précédents( ligne d'au dessus)
# Vous pouvez avoir un sort ou plus dans data.result
# * data.user: Héros qui peuvent utiliser cette recette (Mettez 0 pour tout les les héros).
# * data.nonuser: Héros qui ne peuvent pas utiliser cette recette.
# Vous n'avez pas à utiliser data.nonuser si vous n'avez pas mis 0 pour data.user
# Mettez [] si vous ne l'utilisez pas.
# ** TIP: Quand le script vérifie, le héros qui peut utiliser chaque recette
# Il vérifie d'abord les ID des héros qui non pas inclus dans data.nonuser d'abord .
# Ensuite, il vérifie les ID des héros inclus dans data.user (ou) data.user (recettes)
# inclus l0 (utilisable pour tous les héros).
#
# Par conséquent vous pouvez créer une recette qui marche pour tout les héros sauf pour les 2 et 3
# avec les configuration de data.user et data.nonuser comme cela :
# data.user = [0]
# data.nonuser = [2, 3]
# * data.replace = true (or) false: Si vous voulez, quand vous fusionnez les sorts, que les sorts d'origine soit
# effacés mettez true sinon mettez false
# * RECIPE << data: Ajoute la recette dans la base de donnée
#-------------------------------------------------------------
=end
#=============================================================
data = Skill_Recipe.new
data.skills = [9,12,13,14]
data.result = [83]
data.user = [0]
data.nonuser = [6]
data.replace = false
RECIPE << data
data = Skill_Recipe.new
data.skills = [5 , 2, 10]
data.result = [78]
data.user = [1]
data.nonuser = []
data.replace = true
RECIPE << data
data = Skill_Recipe.new
data.skills = [36 , 37]
data.result = [84]
data.user = [0]
data.nonuser = [1]
data.replace = false
RECIPE << data
data = Skill_Recipe.new
data.skills = [71 , 73, 75, 67, 61]
data.result = [82]
data.user = [6]
data.nonuser = []
data.replace = true
RECIPE << data
data = Skill_Recipe.new
data.skills = [82 , 84, 78, 83]
data.result = [85]
data.user = [0]
data.nonuser = []
data.replace = true
RECIPE << data
data = Skill_Recipe.new
data.skills = [85 , 37]
data.result = [88, 87]
data.user = [6]
data.nonuser = [1]
data.replace = true
RECIPE << data
data = Skill_Recipe.new
data.skills = [12, 14,85]
data.result = [88,86]
data.user = [1]
data.nonuser = [6]
data.replace = true
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_MixskillMIX_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
Mon projet en cours : CF Cristal Fantasy I
Merci, de bien vouloir le faire |
|