Auteur : ASHKA
Nombre de script : 1
Info : Ce script permet d'avoir des " cristaux de competences " plus ou moins inspiré des oeufs Mana de Grandia ...
Il s'agit d'accessoire qui, une fois equipé, confere au porteur l'usage d'une competence.
Plus le porteur gagne de combat, plus le cristal se " remplit " d'energie/mana/exp/...
Ce " remplissage " permet au porteur d'utiliser de plus en plus de competence !!!
Le cristal " possede " les competences, pas le héros.
( Du moins pas avec ce script là ...
C'est-a-dire qu'en changeant de cristal, il perd les competences.
Si un autre porteur utilise un cristal déjà " plein ", il beneficie de toutes les competences déjà acquises.
( Le temps où il portera le cristal evidement !! )
Les cristaux sont des exemplaires uniques !!
Pour en avoir plusieurs identiques, il faut en créer plusieurs dans la base de données.
( Chacun d'eux devra alors etre " remplit " ... )
Configuration en debut de script ...
Créer un nouveau script dans " materials " et collez y ceci :
# Avoir des accessoires permettant d'utiliser des competences # Un accessoire, une fois equipé permet au porteur d'utiliser certaines competences. # Le nombre de competence augmente plus le porteur combat avec l'accessoire equipé. # Une fois déséquipé, il perd l'usage des competences. # Les competences " debloqué " par un porteur sont transmise au second porteur. # Ces accessoires sont des exemplaires unique. # Pour en avoir plusieurs identiques, il faut en créer plusieurs dans la base de donnée. # Chacun devra alors etre porté pour debloqué toute les competences qu'il contient. ################################################################################ module Cskill # Ce tableau stocke l'ID de tout les " cristals " ID_CRISTAL = [32, 33, 34, 35, 36, 37] # Ce tableau contient les competences qu'apprend chaque " cristals " # A l'interieure des crochets, chaque blocs de crochets represente un cristal # dont l'ordre correspond à celui du tableau precedent !! SKILL = [[nil, 59, 60, 61, 62], [63, 64, 65, 66], [75, 76], [67, 68, 69, 70], [77, 78], [79, 80]] # Exp gagné par combat remporter ( si equipé ) EXP = 5 # reference = ID du héros de labase de donnée dont les stats servent de base à la courbe d'exp du " cristal " REF = 10 # chaque type correspond à une courbe de stats du héros de reference # 1 = hp / 2 = mp / 3 = force / 4 = defense / 5 = intelligence / 6 = agilité # distribuer vos cristaux entre ces 6 types d'evolutions TYPE1 = [32] TYPE2 = [33] TYPE3 = [34] TYPE4 = [35] TYPE5 = [36] TYPE6 = [37] end ################################################################################ class Window_Status < Window_Base def draw_equipments(x, y) self.contents.font.color = system_color self.contents.draw_text(x, y, 120, WLH, Vocab::equip) for i in 0..4 draw_item_name(@actor.equips[i], x + 16, y + WLH * (i + 1)) end acc = @actor.equips[4].id if Cskill::ID_CRISTAL.include?(acc) test = $cristal_skill[acc] lv = 0 #### ref = $data_actors[Cskill::REF] if Cskill::TYPE1.include?(acc) type = 0 elsif Cskill::TYPE2.include?(acc) type = 1 elsif Cskill::TYPE3.include?(acc) type = 2 elsif Cskill::TYPE4.include?(acc) type = 3 elsif Cskill::TYPE5.include?(acc) type = 4 elsif Cskill::TYPE6.include?(acc) type = 5 end need_exp = ref.parameters[type, (lv + 1)] while test >= need_exp test -= need_exp lv += 1 need_exp = ref.parameters[type, (lv + 1)] end #### num = Cskill::ID_CRISTAL.index(acc) max = Cskill::SKILL[num].size if Cskill::SKILL[num][0] != nil lv += 1 end self.contents.draw_text( x + 16, y + WLH * 5 + 20, 150, 32, "Apprentissage : ") if lv < max self.contents.draw_text(x + 16 + 150, y + WLH * 5 + 20, 100, 32, lv.to_s + " / " + max.to_s) else self.contents.draw_text(x + 16 + 150, y + WLH * 5 + 20, 100, 32, "MAX") end end end end ################################################################################ class Scene_Equip < Scene_Base def update_item_selection if Input.trigger?(Input::B) Sound.play_cancel @equip_window.active = true @item_window.active = false @item_window.index = -1 elsif Input.trigger?(Input::C) Sound.play_equip last_item = @actor.equips[@equip_window.index] @actor.change_equip(@equip_window.index, @item_window.item) if Cskill::ID_CRISTAL.include?(last_item.id) num = Cskill::ID_CRISTAL.index(last_item.id) for x in 0..(Cskill::SKILL[num].size - 1) id = Cskill::SKILL[num][x] if id != nil # @actor.forget_skill(id) end # end end if @equip_window.index == 4 item_id = @item_window.item.id if Cskill::ID_CRISTAL.include?(item_id) test = $cristal_skill[item_id] lv = 0 #### ref = $data_actors[Cskill::REF] if Cskill::TYPE1.include?(item_id) type = 0 elsif Cskill::TYPE2.include?(item_id) type = 1 elsif Cskill::TYPE3.include?(item_id) type = 2 elsif Cskill::TYPE4.include?(item_id) type = 3 elsif Cskill::TYPE5.include?(item_id) type = 4 elsif Cskill::TYPE6.include?(item_id) type = 5 end need_exp = ref.parameters[type, (lv + 1)] while test >= need_exp test -= need_exp lv += 1 need_exp = ref.parameters[type, (lv + 1)] end #### for i in 0..lv num = Cskill::ID_CRISTAL.index(item_id) unless i >= Cskill::SKILL[num].size skill_id = Cskill::SKILL[num][i] if skill_id != nil # @actor.learn_skill(skill_id) end # end end end end @equip_window.active = true @item_window.active = false @item_window.index = -1 @equip_window.refresh for item_window in @item_windows item_window.refresh end end end end ################################################################################ class Scene_Battle < Scene_Base def process_victory @info_viewport.visible = false @message_window.visible = true RPG::BGM.stop $game_system.battle_end_me.play unless $BTEST $game_temp.map_bgm.play $game_temp.map_bgs.play end display_exp_and_gold display_drop_items display_level_up for actor in $game_party.existing_members if Cskill::ID_CRISTAL.include?(actor.armor4_id) $cristal_skill[actor.armor4_id] += Cskill::EXP end end for actor in $game_party.members if Cskill::ID_CRISTAL.include?(actor.armor4_id) test = $cristal_skill[actor.armor4_id] lv = 0 #### ref = $data_actors[Cskill::REF] if Cskill::TYPE1.include?(actor.armor4_id) type = 0 elsif Cskill::TYPE2.include?(actor.armor4_id) type = 1 elsif Cskill::TYPE3.include?(actor.armor4_id) type = 2 elsif Cskill::TYPE4.include?(actor.armor4_id) type = 3 elsif Cskill::TYPE5.include?(actor.armor4_id) type = 4 elsif Cskill::TYPE6.include?(actor.armor4_id) type = 5 end need_exp = ref.parameters[type, (lv + 1)] while test >= need_exp test -= need_exp lv += 1 need_exp = ref.parameters[type, (lv + 1)] end #### for i in 0..lv num = Cskill::ID_CRISTAL.index(actor.armor4_id) unless i >= Cskill::SKILL[num].size skill_id = Cskill::SKILL[num][i] if skill_id != nil # actor.learn_skill(skill_id) end # end end end end battle_end(0) end end ################################################################################ class Scene_Title < Scene_Base def start super $cristal_skill = Hash.new(0) load_database # Load database create_game_objects # Create game objects check_continue # Determine if continue is enabled create_title_graphic # Create title graphic create_command_window # Create command window play_title_music # Play title screen music end def command_new_game confirm_player_location Sound.play_decision for id in Cskill::ID_CRISTAL $cristal_skill[id] = 0 end $game_party.setup_starting_members # Initial party $game_map.setup($data_system.start_map_id) # Initial map position $game_player.moveto($data_system.start_x, $data_system.start_y) $game_player.refresh $scene = Scene_Map.new RPG::BGM.fade(1500) close_command_window Graphics.fadeout(60) Graphics.wait(40) Graphics.frame_count = 0 RPG::BGM.stop $game_map.autoplay end end ################################################################################ class Scene_File < Scene_Base def write_save_data(file) characters = [] for actor in $game_party.members characters.push([actor.character_name, actor.character_index]) end $game_system.save_count += 1 $game_system.version_id = $data_system.version_id @last_bgm = RPG::BGM::last @last_bgs = RPG::BGS::last Marshal.dump(characters, file) Marshal.dump(Graphics.frame_count, file) Marshal.dump(@last_bgm, file) Marshal.dump(@last_bgs, file) Marshal.dump($game_system, file) Marshal.dump($game_message, file) Marshal.dump($game_switches, file) Marshal.dump($game_variables, file) Marshal.dump($game_self_switches, file) Marshal.dump($game_actors, file) Marshal.dump($game_party, file) Marshal.dump($game_troop, file) Marshal.dump($game_map, file) Marshal.dump($game_player, file) Marshal.dump($cristal_skill, file) end def read_save_data(file) characters = Marshal.load(file) Graphics.frame_count = Marshal.load(file) @last_bgm = Marshal.load(file) @last_bgs = Marshal.load(file) $game_system = Marshal.load(file) $game_message = Marshal.load(file) $game_switches = Marshal.load(file) $game_variables = Marshal.load(file) $game_self_switches = Marshal.load(file) $game_actors = Marshal.load(file) $game_party = Marshal.load(file) $game_troop = Marshal.load(file) $game_map = Marshal.load(file) $game_player = Marshal.load(file) $cristal_skill = Marshal.load(file) if $game_system.version_id != $data_system.version_id $game_map.setup($game_map.map_id) $game_player.center($game_player.x, $game_player.y) end end end
Pour que le cristal debute de 0 plutôt qu'il ne donne au depart une competence, il suffit de mettre un "nil" comme premier element.
Donc [10, 11, 12] donne la competence 10 des le debut puis la 11 puis la 12 a chaque evolution.
[nil, 10, 11, 12] ne donne rien au niveau de depart, puis la competence 10 au niveau 1, la 11 au niveau 2, ...
Pour le niveau d'exp necessaire augmentant de niveau en niveau, plutôt que de vous obliger à configurer un hash stockant toutes ces valeurs d'exp par accessoires ( ce qui aurait été tres laborieux pour vous !! ), j'utilise un systeme plus simple.
Il y a 6 types d'evolution, ce qui correspond au 6 courbe de stat d'un héros ( HP / MP / Force / Defense / Intelligence / Agilité ).
Créez un héros de reference, indiquez son ID dans le script et repartissez vos accessoires dans les 6 tableaux type.
Les valeurs d'exp necessaires à chaque niveau seront les valeurs de la stats du héros de reference correspondante au type choisit.
J'espere que c'est suffisamment clair ...
ASHKA

Connexion
Inscription
Aide
Ajouter une réponse



Multi-citation