Partagez
Aller en bas
ASHKA
ASHKA
Membre

Nombre de messages : 242
Age : 37
Localisation : Omnipresent !!
Distinction : aucune
Date d'inscription : 28/10/2008

Systeme de magie à la Rudora no hihou Empty Systeme de magie à la Rudora no hihou

le Mar 28 Oct 2008 - 18:51
Nom : Systeme de magie à la Rudora no hihou
Auteur : ASHKA

Créer un nouveau script dans "Materials" et collez-y ceci :
Code:

#======================== 
#
#  Systeme de magie à la Rudora no hihou
#                     
#www.rpgmakervx-fr.com
#========================
=begin
Le jeu "Rudora no hihou" utilise un systeme de magie unique en son genre.
Le joueur crée lui même ses magies en assemblant des syllabes de maniere à créer une formule magique.
Ce script permet d'integrer un systeme semblable dans votre jeu.
Les competences classiques sont toujours active, vous pouvez donc avoir des competences normales plus des formules.
Il suffit de créer dans l'onglet "Competences" de la base donnée vos syllabes.
Durant le jeu, le joueur aura l'occassion d'assembler plusieurs syllabes pour créer une formule utilisable en combat.
La formule est comme une addition des differentes informations des syllabes.
Ainsi, la puissance de la formule est l'addition des puissances des syllabes.
Même chose pour le cout MP, la vitesse d'execution, ...
Gardez bien ceci en tête au moment de definir vos syllabes.
Vous trouverais ci-dessous differentes options de configurations.
=end
module Rudora
###################################
# Mettre cet interrupteur sur "true" si les competences-syllabes se suivent dans la base de donnée.
  Suite = true
# Indiquez ici l'ID de la premiere competence-syllabe
  Min = 84
# Indiquez ici l'ID de la derniere competence-syllabe
  Max = 140
# Si les competences-syllabes ne se suivent pas, indiquez ici l'ID de toutes les competences-syllabes
  Liste = []
###################################
# Si l'interrupteur suivant est sur "true", toutes les competences-syllabes sont accessibles des le depart.
  Total = true
# Sinon, indiquez ici les ID de celles qui sont accessibles des le debut.
  Acces = []
# Pour en rajouter d'autres en cours de jeu, utiliser en insertion de script la commande suivante :
#                      $game_party.syllabe |= [ID, ID, ID, ID]
# ou ID est l'ID des competences-syllabes nouvellement accessibles.
###################################
# Ici, vous pouvez configurer le nombre de competences qu'un héros peut créer des le debut du jeu
#              ID héros => Nbr de competences
  Max_skill = {1 => 4, 2 => 6, 3 => 1, 4 => 0}
# Vous pouvez augmenter ce nombre en cours de jeu grace à l'insertion de script :
#                $game_actors[ID_héros].max_skill += 2
# ID_héros designe l'ID du héros qui verra sa limite augmenter, 2 est le nombre de competences qu'il gagne.
# Vous pouvez indexer les nombres de competences créable sur le niveau du héros.
# Pour cela, mettre sur "true" l'interrupteur suivant et configurer la liste se trouvant dessous.
  Max_skill_evol = true
  Max_skill_evol_liste = Hash.new
#                    Id du héros = Niveau => Augmentation de la limite 
  Max_skill_evol_liste[1] = {5 => 2, 10 => 3, 15 => 5}
  Max_skill_evol_liste[2] = {5 => 1, 10 => 2, 15 => 3}
  Max_skill_evol_liste[3] = {5 => 4, 10 => 5, 15 => 6}
  Max_skill_evol_liste[4] = {5 => 5, 10 => 5, 15 => 5}
# Attention, il s'agit d'indiquer l'augmentation, pas le nombre de competence accessibles.
# Il est donc toujours possible d'ajouter ponctuellement d'autres competences grace à l'insertion sus-mentionné.
###################################
# Ici, vous pouvez configurer le nombre de syllabe qu'un héros peut utiliser pour créer une formule magique
#            ID du héros => nbr maxi de syllabe utilisable dans une formule
  Max_syllabe = {1 => 3, 2 => 4, 3 => 4, 4 => 3}
# Vous pouvez augmenter ce nombre en cours de jeu grace à l'insertion de script suivante :
#                  $game_actors[ID_héros].max_syllabe += 1
# Ou ID_héros est à remplacer par l'ID du héros qui verra sa limite augmenter et 1 est le gain de syllabe
# Il est également possible d'indexer cette evolution sur le niveau du héros.
# Cela fonctionne de la même maniere que pour la limite des competences à créer.
  Max_syllabe_evol = true
  Max_syllabe_evol_liste = Hash.new
#                        Id du héros = Niveau => Augmentation de la limite 
  Max_syllabe_evol_liste[1] = {5 => 1, 10 => 1, 15 => 1}
  Max_syllabe_evol_liste[2] = {20 => 2}
  Max_syllabe_evol_liste[3] = {10 => 1, 25 => 1}
  Max_syllabe_evol_liste[4] = {10 => 1, 15 => 1, 25 => 1}
# Attention, il s'agit d'indiquer l'augmentation, pas le nombre de syllabes accessibles.
# Il est donc toujours possible d'ajouter ponctuellement d'autres syllabes grace à l'insertion sus-mentionné.
###################################
# L'interrupteur ci-dessous sert à autoriser la repetition de syllabe dans une formule
  Repetition = true
###################################
#                Reglagles des syllabes
###################################
# Lorsque plusieurs données entre en conflit, la formule aura les données ayant la plus haute priorité.
# Pour donner une priorité à votre syllabe, il suffit d'ecrire dans la note :
#                P=5              ( Collé ainsi )
# Cela donnera une priorité de 5 à la syllabe, si rien n'est indiqué la priorité sera  de 0.

# La puissance d'attaque de la formule est une addition des puissances d'attaques des syllabes.
# Ainsi la syllabe 1 possede 100 en puissance et la syllabe 2 possede -150 en puissance.
# La formule unissant ces deux syllabes sera un sort de soin de puissance -50.
# Pour créer des formules d'attaques, vous pouvez créer des syllabes spéciales
#  ayant comme mots clé dans la note              ATK            ( en majuscules )
# Cela aura pour effet d'annuler les puissances négatives des autres syllabes.
# Dans l'exemple precedent, si la syllabe 1 a l'effet ATK, la formule aura donc 250 en puissance.
# Le mots clé            SOIN                a l'effet inverse de ATK.
#  C'est-à-dire il augmente l'efficacité des syllabes de guérison ( ici le resultat sera -250 ).

# Les elements de la formules sont basé sur ceux additionné des syllabes.
# Vous avez plusieurs choix de configuration ( valable pour toutes les formules )
#            "all"          => Tous les elements des syllabes se trouvent dans la formule
# Cela peut donner des formules ayant à la fois l'element "Feu" et l'element "Glace"
#            "max"      => L'element le plus present dans les syllabes choisit determinera l'element de la formule
# Si l'element Feu est present dans trois syllabes et qu'aucun autre element est present autant de fois
# la formule aura alors l'element Feu et seulement lui ( les autres sont "oubliés" )
#            "opp"      => Supprime les elements consideré comme opposé.
# Un element "Feu" et un element "Glace" s'annule, deux "Feu" et un "Glace" donneront un "Feu" ...
# Remplissez la table ci-dessous pour definir les oppositions
 Tri_element = "all" # choix entre "all" / "max" / "opp"
 # Les elements s'oppose deux à deux.
 #                  Feu/Glace        Feu/Eau    Eclair/Eau    Terre/Vent    Lumiere/Tenebre
 Table_opp = [[9, 10],            [9, 12],        [11, 12],        [13, 14],                [15, 16]]
# Si vous utilisez la configuration "max", il est possible d'utiliser un effet "Bonus".
# Pour cela, l'interrupteur ci-dessous doit etre sur "true".
 Bonus = true
# A chaque fois qu'un element est present plusieurs fois dans les syllabes, le taux de bonus augmente
# ce qui au final fait augmenter la puissance de la formule
# Dans une configuration "max" ou l'element "Feu" est present 3 fois, le bonus augmentera trois fois
# Effet normal + ( 3 * bonus à 0.5 ) => 1 + 1.5 => Puissance multiplié par 2.5 !!
 Taux_bonus = 0.5
 
# Les etats sont egalement additionnés d'apres la configuration des syllabes.
# Ce qui peut conduire à des choses du genre une formule qui guéri un allié et lui inflige "Poison" ...
# Pour eviter cela, incrivez        POS          dans la note de l'etat s'il a un effet positif ( augmentation de stats )
# Si rien n'est indiqué, l'etat est consideré comme négatif pour la cible.
# Par defaut, seul les effets positifs seront "lancés" sur un héros, les autres sont "oubliés".
# En mettant le mots clé          INV            dans la note de la syllabe, l'etat pourra etre inversé.
# Ainsi, dans l'exemple precedent avec la mot INV, la formule guéri et en prime soigne "Poison".
# Sans le mot INV, l'etat "Poison" etant négatif, l'effet sera "oublié".

# Les données numerique ( variance, influence atk / magie, vitesse, coût MP ) sont basé sur l'addition des valeurs.
# Les autres données ( portée, event commun, animation, ... ) sont basé sur la plus haute priorité.
###################################
end
###################################
class Game_Skill
  attr_reader :id
  attr_reader :icon_index
  attr_reader :description
  attr_reader :note
  def initialize(tab)
    @tab = tab
    @id = 0
    @icon_index = 155
    @description = "Formule magique mystique"
    @note = ""
  end
 
  def name
    text = ""
    for id in @tab
      text += $data_skills[id].name
    end
    return text.capitalize
  end
 
  def speed 
    result = 0
    for id in @tab
      result += $data_skills[id].speed
    end
    return result
  end
 
  def type?
    atk = 0
    soin = 0
    for id in @tab
      atk += 1 if $data_skills[id].attaque?
      soin += 1 if $data_skills[id].soin?
    end
    if atk > soin
      return "atk"
    elsif soin > atk
      return "soin"
    else
      return ""
    end
  end
   
  def base_damage
    result = 0
    for id in @tab
      if type? == "atk"
        result += $data_skills[id].base_damage.abs
      elsif type? == "soin"
        result += (0 - $data_skills[id].base_damage.abs)
      else
        result += $data_skills[id].base_damage
      end
    end
    result = (result * bonus).round
    return result
  end
 
  def variance
    result = 0
    for id in @tab
      result += $data_skills[id].variance
    end
    return result
  end
   
  def atk_f
    result = 0
    for id in @tab
      result += $data_skills[id].atk_f
    end
    return result
  end
   
  def spi_f
    result = 0
    for id in @tab
      result += $data_skills[id].spi_f
    end
    return result
  end
   
  def mp_cost
    result = 0
    for id in @tab
      result += $data_skills[id].mp_cost
    end
    return result
  end
   
  def hit
    test = @tab.sort {|a, b| $data_skills[a].prior <=> $data_skills[b].prior}
    id = test.last
    return $data_skills[id].hit
  end

  def get_number(id)
      return element_set_total.find_all {|elt| elt == id }.size
  end
 
  def get_max_number
    test = {}
    tab = []
    for id in 0...$data_system.elements.size
      test[id] = get_number(id)
      tab.push(id) if test[id] > 0
    end
    tab.sort! {|a, b| test[a] <=> test[b] }
    return tab.empty? ? [] : [tab.last]
  end
 
  def element_set_total
    result = []
    for id in @tab
      result += $data_skills[id].element_set
    end
    return result
  end

  def element_set_all
    result = []
    for id in @tab
      result |= $data_skills[id].element_set
    end
    return result.compact
  end
 
  def element_set
    case Rudora::Tri_element
    when "all"
      return element_set_all
    when "max"
      return get_max_number
    when "opp"
      result = element_set_all
      for bloc in Rudora::Table_opp
        un = get_number(bloc[0])
        deux = get_number(bloc[1])
        if un > deux
          result.delete(bloc[1])
        elsif deux > un
          result.delete(bloc[0])
        end
      end
      return result
    end
  end
 
  def bonus
    if Rudora::Bonus
      if Rudora::Tri_element == "max"
        return 1 + (get_number(element_set[0]) * Rudora::Taux_bonus)
      end
    end
    return 1
  end
 
  def inverse?
    for id in @tab
      return true if $data_skills[id].inverse?
    end
    return false
  end

  def plus_state_set
    result = []
    for id in @tab
      if for_friend?
        for etat in $data_skills[id].plus_state_set
          if $data_states[etat].positif?
            result.push(etat) unless result.include?(etat)
          end
        end
      else
        for etat in $data_skills[id].plus_state_set
          unless $data_states[etat].positif?
            result.push(etat) unless result.include?(etat)
          end
        end
        if inverse?
          for etat in $data_skills[id].minus_state_set
            unless $data_states[etat].positif?
              result.push(etat) unless result.include?(etat)
            end
          end
        end
      end
    end
    return result
  end

  def minus_state_set
    result = []
    for id in @tab
      if for_friend?
        for etat in $data_skills[id].minus_state_set
          unless $data_states[etat].positif?
            result.push(etat) unless result.include?(etat)
          end
        end
        if inverse?
          for etat in $data_skills[id].plus_state_set
            unless $data_states[etat].positif?
              result.push(etat) unless result.include?(etat)
            end
          end
        end
      else
        for etat in $data_skills[id].minus_state_set
          if $data_states[etat].positif?
            result.push(etat) unless result.include?(etat)
          end
        end
      end
    end
    return result
  end
 
  def scope
    test = @tab.sort {|a, b| $data_skills[a].prior <=> $data_skills[b].prior}
    id = test.last
    return $data_skills[id].scope
  end

  def animation_id
    test = @tab.sort {|a, b| $data_skills[a].prior <=> $data_skills[b].prior}
    id = test.last
    return $data_skills[id].animation_id
  end

  def common_event_id
    test = @tab.sort {|a, b| $data_skills[a].prior <=> $data_skills[b].prior}
    id = test.last
    return $data_skills[id].common_event_id
  end
 
  def message1
    return " lance #{name} !!"
  end
 
  def message2
    return ""
  end

  def physical_attack
    for id in @tab
      test = $data_skills[id].physical_attack
      return test if test == true
    end
    return false
  end
 
  def damage_to_mp
    for id in @tab
      test = $data_skills[id].damage_to_mp
      return test if test == true
    end
    return false
  end

  def absorb_damage
    for id in @tab
      test = $data_skills[id].absorb_damage
      return test if test == true
    end
    return false
  end

  def ignore_defense
    for id in @tab
      test = $data_skills[id].ignore_defense
      return test if test == true
    end
    return false
  end
 
  def occasion
    if base_damage > 0
      return 1
    else
      return 0
    end
  end
#####
    def for_opponent?
      return [1, 2, 3, 4, 5, 6].include?(scope)
    end
    def for_friend?
      return [7, 8, 9, 10, 11].include?(scope)
    end
    def for_dead_friend?
      return [9, 10].include?(scope)
    end
    def for_user?
      return [11].include?(scope)
    end
    def for_one?
      return [1, 3, 4, 7, 9, 11].include?(scope)
    end
    def for_two?
      return [5].include?(scope)
    end
    def for_three?
      return [6].include?(scope)
    end
    def for_random?
      return [4, 5, 6].include?(scope)
    end
    def for_all?
      return [2, 8, 10].include?(scope)
    end
    def dual?
      return [3].include?(scope)
    end
    def need_selection?
      return [1, 3, 7, 9].include?(scope)
    end
    def battle_ok?
      return [0, 1].include?(occasion)
    end
    def menu_ok?
      return [0, 2].include?(occasion)
    end
#####
end


ASHKA


Dernière édition par ASHKA le Jeu 27 Nov 2008 - 22:08, édité 1 fois
ASHKA
ASHKA
Membre

Nombre de messages : 242
Age : 37
Localisation : Omnipresent !!
Distinction : aucune
Date d'inscription : 28/10/2008

Systeme de magie à la Rudora no hihou Empty Re: Systeme de magie à la Rudora no hihou

le Mar 28 Oct 2008 - 18:54
Apparemment, j'ai atteint la limite ...
Voila la suite :
( A placer juste dessous )

Code:

###################################
class String
  def decoupe
    bloc = []
    self.split(/[\r\n]+/).each { |line| bloc.push(line) }
    return bloc
  end
end
###################################
module RPG
  class State
    def positif?
      text = @note.decoupe
      for line in text
        if line.include?("POS")
          return true
        end
      end
      return false
    end
  end
  class Skill < UsableItem
    def prior
      text = @note.decoupe
      num = 0
      for line in text
        if line.include?("P=")
          num = line.delete("P=")
        end
      end
      return num.to_i
    end
    def attaque?
      text = @note.decoupe
      for line in text
        if line.include?("ATK")
          return true
        end
      end
      return false
    end
    def soin?
      text = @note.decoupe
      for line in text
        if line.include?("SOIN")
          return true
        end
      end
      return false
    end
    def inverse?
      text = @note.decoupe
      for line in text
        if line.include?("INV")
          return true
        end
      end
      return false
    end
  end   
end
###################################
class Game_Party < Game_Unit
  attr_accessor :syllabe
  alias rudora_init initialize
  def initialize
    rudora_init
    @syllabe = []
    if Rudora::Total
      if Rudora::Suite
        for id in Rudora::Min..Rudora::Max
          @syllabe.push(id)
        end
      else
        @syllabe |= Rudora::Liste
      end
    else
      @syllabe |= Rudora::Acces
    end
  end
end
###################################
class Game_Actor < Game_Battler
  attr_accessor :max_skill
  attr_accessor :reste_skill
  attr_accessor :max_syllabe
  alias rudora_setup setup
  def setup(actor_id)
    @max_skill = 0
    @max_skill = Rudora::Max_skill[actor_id] if Rudora::Max_skill.key?(actor_id)
    @reste_skill = @max_skill
    @max_syllabe = 0
    @max_syllabe = Rudora::Max_syllabe[actor_id] if Rudora::Max_syllabe.key?(actor_id)
    rudora_setup(actor_id)
    @skills.clear
    for i in self.class.learnings
      learn_skill($data_skills[i.skill_id]) if i.level <= @level
    end
    clear_extra_values
    recover_all
  end
 
  def level_up
    @level += 1
    for learning in self.class.learnings
      learn_skill($data_skills[learning.skill_id]) if learning.level == @level
    end
    if Rudora::Max_skill_evol
      if Rudora::Max_skill_evol_liste.key?(@actor_id)
        liste = Rudora::Max_skill_evol_liste[@actor_id]
        if liste.key?(@level)
          @max_skill += liste[@level]
          @reste_skill += liste[@level]
        end
      end
    end
    if Rudora::Max_syllabe_evol
      if Rudora::Max_syllabe_evol_liste.key?(@actor_id)
        liste = Rudora::Max_syllabe_evol_liste[@actor_id]
        if liste.key?(@level)
          @max_syllabe += liste[@level]
        end
      end
    end
  end
 
  def skills
    return @skills
  end
 
  def learn_skill(skill)
    unless skill_learn?(skill)
      @skills.push(skill)
      @skills.sort! {|a,b| a.id <=> b.id}
    end
  end

  def forget_skill(skill)
    @skills.delete(skill)
  end

  def skill_learn?(skill)
    return skills.include?(skill)
  end

  def skill_can_use?(skill)
    return false unless skill_learn?(skill)
    return false unless skill.is_a?(RPG::Skill) or skill.is_a?(Game_Skill)
    return false unless movable?
    return false if silent? and skill.spi_f > 0
    return false if calc_mp_cost(skill) > mp
    if $game_temp.in_battle
      return skill.battle_ok?
    else
      return skill.menu_ok?
    end
  end
end
###################################
class Game_BattleAction
  def skill
    if @battler.is_a?(Game_Actor)
      return skill? ? @skill_id : nil
    else
      return skill? ? $data_skills[@skill_id] : nil
    end
  end
end
###################################
class Scene_Battle < Scene_Base
  def determine_skill
    @active_battler.action.set_skill(@skill)
    @skill_window.active = false
    if @skill.need_selection?
      if @skill.for_opponent?
        start_target_enemy_selection
      else
        start_target_actor_selection
      end
    else
      end_skill_selection
      next_actor
    end
  end
end
###################################
class Scene_Rudora < Scene_Base
  def initialize(rang = 0)
    @rang = rang
    @actor = $game_party.members[@rang]
  end
 
  def start
    create_menu_background
    @tab = []
    @face = Window_Faceset.new(@actor)
    @info = Window_Info.new(@actor, nil)
    s1 = "Créer une formule"
    s2 = "Effacer une formule"
    s3 = "Retour"
    larg = 250
    @choix = Window_Command.new(larg, [s1, s2, s3])
    @choix.x = (544 / 2) - (larg / 2)
    @choix.y = (416 / 2) - (((3 * 24) + 32) / 2)
    @choix.draw_item(0, false) if @actor.reste_skill == 0
    @choix.draw_item(1, false) if @actor.reste_skill == @actor.max_skill
    @crea = Window_Syllabe.new
    @crea.visible = false
    @crea.active = false
    @supp = Window_Formule.new(@actor)
    @supp.visible = false
    @supp.active = false
  end
 
  def terminate
    dispose_menu_background
    @face.dispose
    @info.dispose
    @choix.dispose
    @crea.dispose
    @supp.dispose
  end
 
  def update
    update_menu_background
    @face.update
    @info.update
    @choix.update
    @crea.update
    @supp.update
    if @crea.active
      update_creation
      return
    elsif @supp.active
      update_supprime
      return
    end
    if Input.trigger?(Input::B)
      Sound.play_cancel
      $scene = Scene_Menu.new
    elsif Input.trigger?(Input::C)
      case @choix.index
      when 0
        if @actor.reste_skill == 0
          Sound.play_buzzer
        else
          Sound.play_decision
          @choix.visible = false
          @choix.active = false
          @crea.visible = true
          @crea.active = true
        end
      when 1
        if @actor.reste_skill == @actor.max_skill
          Sound.play_buzzer
        else
          Sound.play_decision
          @choix.visible = false
          @choix.active = false
          @supp.visible = true
          @supp.active = true
        end
      when 2
        Sound.play_decision
        $scene = Scene_Menu.new
      end
    elsif Input.trigger?(Input::R)
      Sound.play_cursor
      @rang += 1
      @rang = 0 if @rang == $game_party.members.size
      $scene = Scene_Rudora.new(@rang)
    elsif Input.trigger?(Input::L)
      Sound.play_cursor
      @rang -= 1
      @rang = ($game_party.members.size - 1) if @rang < 0
      $scene = Scene_Rudora.new(@rang)
    end
  end # def update
 
  def update_creation
    if Input.trigger?(Input::B)
      Sound.play_cancel
      if @tab == []
        $scene = Scene_Rudora.new(@rang)
      else
        @tab.delete(@tab.last)
        @info.refresh(@tab)
      end
    elsif Input.trigger?(Input::C)
      if @crea.item.is_a?(Integer)
        if  @tab.size < @actor.max_syllabe
          if Rudora::Repetition
            Sound.play_decision
            @tab.push(@crea.item)
            @info.refresh(@tab)
          else
            if @tab.include?(@crea.item)
              Sound.play_buzzer
            else
              Sound.play_decision
              @tab.push(@crea.item)
              @info.refresh(@tab)
            end
          end
        else
          Sound.play_buzzer
        end
      else
        if @tab.size == 0
          Sound.play_buzzer
        else
          Sound.play_decision
          @actor.learn_skill(Game_Skill.new(@tab))
          @actor.reste_skill -= 1
          $scene = Scene_Rudora.new(@rang)
        end
      end
    end
  end
 
  def update_supprime
    if Input.trigger?(Input::B)
      Sound.play_cancel
      $scene = Scene_Rudora.new(@rang)
    elsif Input.trigger?(Input::C)
      if @supp.item != nil
        Sound.play_decision
        @actor.forget_skill(@supp.item)
        @actor.reste_skill += 1
        @info.refresh(nil)
        @supp.refresh
      else
        Sound.play_buzzer
      end
    end
  end
 
end # end class
###################################
class Window_Faceset < Window_Base
  def initialize(actor)
    super(0, 0, 102, 128)
    @actor = actor
    refresh
  end
  def refresh
    self.contents.clear
    if @actor != nil
      draw_character(@actor.character_name, @actor.character_index, 35, 48)
      self.contents.draw_text(0, 64, 70, 24, @actor.name.to_s, 1)
    end
  end
end
###################################
class Window_Info < Window_Base
  def initialize(actor, formule)
    super(102, 0, 544 - 102, 128)
    @actor = actor
    refresh(formule)
  end
  def refresh(formule)
    self.contents.clear
    text = "Q / W => Changer de héros"
    self.contents.draw_text(0, 0, 410, 24, text, 1)
    text = "Nombre de magie disponibles : " + @actor.reste_skill.to_s + " / " + @actor.max_skill.to_s
    self.contents.draw_text(0, 24, 410, 24, text, 1)
    text = "Nombre maximum de syllabe par formule : " + @actor.max_syllabe.to_s
    self.contents.draw_text(0, 48, 410, 24, text, 1)
    if formule != nil
      text = "Formule : "
      form = ""
      for id in formule
        form += $data_skills[id].name.to_s if id != nil
      end
      text += form.capitalize
      self.contents.draw_text(0, 72, 410, 24, text, 1)
    end
  end
end
###################################
class Window_Syllabe < Window_Selectable
  def initialize
    super(0, 128, 544, 416 - 128)
    @column_max = 5
    self.index = 0
    refresh
  end

  def item
    return @data[self.index]
  end

  def refresh
    @data = []
    for id in $game_party.syllabe
      @data.push(id)
    end
    @data.push("Valider")
    @item_max = @data.size
    create_contents
    for i in 0...@item_max
      draw_item(i)
    end
  end

  def draw_item(index)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    item = @data[index]
    if item != nil
      rect.width -= 4
      if item.is_a?(Integer)
        text = $data_skills[item].name.upcase.to_s
      else
        text = item
      end
      self.contents.draw_text(rect.x, rect.y, rect.width, 24, text, 1)
    end
  end
end
###################################
class Window_Formule < Window_Selectable
  def initialize(actor)
    super(0, 128, 544, 416 - 128)
    @actor = actor
    @column_max = 2
    self.index = 0
    refresh
  end

  def item
    return @data[self.index]
  end

  def refresh
    @data = []
    for item in @actor.skills
      @data.push(item) if item.is_a?(Game_Skill)
    end
    @item_max = @data.size
    create_contents
    for i in 0...@item_max
      draw_item(i)
    end
  end

  def draw_item(index)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    item = @data[index]
    if item != nil
      rect.width -= 4
      draw_icon(item.icon_index, rect.x, rect.y, true)
      self.contents.draw_text(rect.x + 24, rect.y, rect.width - 24, WLH, item.name)
    end
  end
end
###################################

Le nom de la scene est "Scene_Rudora".

Voici un screen de la fenetre de composition de la formule :

Systeme de magie à la Rudora no hihou Rudora-798881

Ce script offre un certain nombre de possibilité de configuration, lisez bien l'entête !!

Le jeu "Rudora no hihou" utilise un systeme de magie unique en son genre.
Le joueur crée lui même ses magies en assemblant des syllabes de maniere à créer une formule magique.
Ce script permet d'integrer un systeme semblable dans votre jeu.
Les possibilités sont enormes, ce genre de systeme offre une tres grande sensation de liberté au joueur.
Libre à vous de choisir des noms de syllabes explicite ou pas !!
Libre à vous de fournir des "guides" au joueur !!

Avertissement : Ce script modifie la gestion des competences, il peut entrainer des incompatibilités avec d'autres scripts ( combat, gestion des héros principalement ).
Si tel est le cas, pas de panique, indiquez le moi, je pourrais faire un add-on sur mesure.

ASHKA


Dernière édition par ASHKA le Jeu 27 Nov 2008 - 22:06, édité 1 fois
Berka
Berka
Administrateur

Nombre de messages : 1832
Age : 29
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Systeme de magie à la Rudora no hihou Empty Re: Systeme de magie à la Rudora no hihou

le Mar 28 Oct 2008 - 18:55
Merci beaucoup pour le partage!

je t'ai rajouté au groupe scripteurs !

tu as maintenant accès a l'assemblée des scripteurs ! Wink
Arayashiki
Arayashiki
Membre

Nombre de messages : 655
Age : 29
Localisation : Trois lettres me demangent. Oserai-je ?
Distinction : FUCKING nouveau dieu du mal. Gros connard en chef.
Date d'inscription : 18/08/2008

Systeme de magie à la Rudora no hihou Empty Re: Systeme de magie à la Rudora no hihou

le Mar 28 Oct 2008 - 19:00
Bienvenue chez les scripteurs et merci du partage Wink
Flotos
Flotos
Membre

Nombre de messages : 28
Age : 23
Distinction : aucune
Date d'inscription : 22/05/2008

Systeme de magie à la Rudora no hihou Empty Re: Systeme de magie à la Rudora no hihou

le Sam 22 Aoû 2009 - 16:38
Vraiment désolé pour le nécro-post, mais je ne sais pas comment l'activer, j'ai fait "appeler script Scene_Rudora" et sa ne marche pas , le jeu plante (PS je l'ai mis en événement commun, et j'active l'interrupteur) et j'avait aussi essayer en le mettant en événement simple...
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum