RPG maker forum

Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Tous sur RPG maker, scripts, projet, ressources, screens, demandez, faites vous aider et aidez les autres!

Le deal à ne pas rater :
ETB Pokémon Fable Nébuleuse : où acheter le coffret dresseur ...
Voir le deal

2 participants

    tuto bestiare

    louckas
    louckas
    modérateur
    modérateur


    Messages : 116
    Réputation : 11
    Date d'inscription : 17/04/2010

    tuto bestiare Empty tuto bestiare

    Message  louckas Lun 19 Avr - 23:12

    Bonjour !!
    Voici un script assez simple qui vous permettra de faire des fiches pour chaques ennemis.
    Il s'agit de la version de base, d'autre viendront par la suite afin d'offrir plus de possibilités d'utilisation.

    Tout d'abord, petit screen pour voir ce que cela donne in-game :

    tuto bestiare Bestia10

    Créez un nouveau script au dessus de " Main " et collez y ceci :


    class Window_Bestiaire < Window_Base attr_accessor :battler def initialize super(0, 0, 640, 480) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = $fontface self.contents.font.size = $fontsize refresh end def refresh self.contents.clear num = $game_variables[1] # ID de la variable associé aux fiches enemy = $data_enemies[num] @battler = Sprite.new @battler.bitmap = RPG::Cache.battler(enemy.battler_name, enemy.battler_hue) cw = @battler.bitmap.width ch = @battler.bitmap.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(320 - cw / 2, 240 - ch / 2, @battler.bitmap, src_rect, 100) self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(250, 20, 140, 30, enemy.name.to_s) self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(20, 50, 200, 30, "HP : ") self.contents.draw_text(20, 85, 200, 30, "SP : ") self.contents.draw_text(20, 120, 200, 30, "Force : ") self.contents.draw_text(20, 155, 200, 30, "Dexterité : ") self.contents.draw_text(20, 190, 200, 30, "Agilité : ") self.contents.draw_text(20, 225, 200, 30, "Intelligence : ") self.contents.draw_text(20, 260, 200, 30, "Attaque : ") self.contents.draw_text(20, 295, 200, 30, "Defense physique : ") self.contents.draw_text(20, 330, 200, 30, "Defense magique : ") self.contents.draw_text(20, 375, 200, 30, "Evasion : ") self.contents.draw_text(400, 260, 200, 30, "Experience : ") self.contents.draw_text(400, 295, 200, 30, "Gold : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(70, 50, 200, 30, enemy.maxhp.to_s) self.contents.draw_text(70, 85, 200, 30, enemy.maxsp.to_s) self.contents.draw_text(100, 120, 200, 30, enemy.str.to_s) self.contents.draw_text(130, 155, 200, 30, enemy.dex.to_s) self.contents.draw_text(100, 190, 200, 30, enemy.agi.to_s) self.contents.draw_text(150, 225, 200, 30, enemy.int.to_s) self.contents.draw_text(110, 260, 200, 30, enemy.atk.to_s) self.contents.draw_text(205, 295, 200, 30, enemy.pdef.to_s) self.contents.draw_text(200, 330, 200, 30, enemy.mdef.to_s) self.contents.draw_text(120, 375, 200, 30, enemy.eva.to_s) self.contents.draw_text(530, 260, 200, 30, enemy.exp.to_s) self.contents.draw_text(470, 295, 200, 30, enemy.gold.to_s) if enemy.item_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.item_id].name.to_s) elsif enemy.weapon_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.weapon_id].name.to_s) elsif enemy.armor_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.armor_id].name.to_s) end if enemy.item_id > 0 or enemy.weapon_id > 0 or enemy.armor_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 375, 200, 30, "Probabilité : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(520, 375, 200, 30, enemy.treasure_prob.to_s) else self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 360, 200, 30, "Pas de tresor") end endend# ------------------------------------------------------------------------class Scene_Bestiaire def main @window_bestiaire = Window_Bestiaire.new Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @window_bestiaire.dispose end def update @window_bestiaire.update if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end if Input.trigger?(Input::C) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end endend

    Il s'agit ici de la version " Fiche ".
    Pour l'utiliser, c'est tres simple :
    Créer un objet " Fiche " pour chaque ennemis ( Utilisable seulement sur la carte, non consommable ).
    Créer un evenement commun pour chaque objet ( En appel ).

    Programmer les comme ceci :
    > Rendre variable " Fiche ennemi " egale à XX
    > Inserer un script : $scene = Scene_Bestiaire.new

    Et XX sera l'ID du monstre de la fiche.
    Utiliser toujours la même variable ( Dont l'ID devra etre inscrite dans le script, ligne 15 ).
    N'oubliez pas de lier les objets " Fiche " à leurs evenements commun respectif.
    Ensuite, à vous de voir quand obtenir ces objets " Fiche ".
    Ils s'utiliseront par le menu " Objet ".


    ------------------------------------------------------------


    Voici la version Bestiaire complet !!


    class Window_Bestiaire < Window_Base attr_accessor :battler def initialize super(0, 0, 640, 480) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = $fontface self.contents.font.size = $fontsize refresh end def refresh self.contents.clear $max = 32 # Nombre maximum d'ennemi !! enemy = $data_enemies[$num] @battler = Sprite.new @battler.bitmap = RPG::Cache.battler(enemy.battler_name, enemy.battler_hue) cw = @battler.bitmap.width ch = @battler.bitmap.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(320 - cw / 2, 240 - ch / 2, @battler.bitmap, src_rect, 100) self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(250, 20, 140, 30, enemy.name.to_s) self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(20, 50, 200, 30, "HP : ") self.contents.draw_text(20, 85, 200, 30, "SP : ") self.contents.draw_text(20, 120, 200, 30, "Force : ") self.contents.draw_text(20, 155, 200, 30, "Dexterité : ") self.contents.draw_text(20, 190, 200, 30, "Agilité : ") self.contents.draw_text(20, 225, 200, 30, "Intelligence : ") self.contents.draw_text(20, 260, 200, 30, "Attaque : ") self.contents.draw_text(20, 295, 200, 30, "Defense physique : ") self.contents.draw_text(20, 330, 200, 30, "Defense magique : ") self.contents.draw_text(20, 375, 200, 30, "Evasion : ") self.contents.draw_text(400, 260, 200, 30, "Experience : ") self.contents.draw_text(400, 295, 200, 30, "Gold : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(70, 50, 200, 30, enemy.maxhp.to_s) self.contents.draw_text(70, 85, 200, 30, enemy.maxsp.to_s) self.contents.draw_text(100, 120, 200, 30, enemy.str.to_s) self.contents.draw_text(130, 155, 200, 30, enemy.dex.to_s) self.contents.draw_text(100, 190, 200, 30, enemy.agi.to_s) self.contents.draw_text(150, 225, 200, 30, enemy.int.to_s) self.contents.draw_text(110, 260, 200, 30, enemy.atk.to_s) self.contents.draw_text(205, 295, 200, 30, enemy.pdef.to_s) self.contents.draw_text(200, 330, 200, 30, enemy.mdef.to_s) self.contents.draw_text(120, 375, 200, 30, enemy.eva.to_s) self.contents.draw_text(530, 260, 200, 30, enemy.exp.to_s) self.contents.draw_text(470, 295, 200, 30, enemy.gold.to_s) if enemy.item_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.item_id].name.to_s) elsif enemy.weapon_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.weapon_id].name.to_s) elsif enemy.armor_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.armor_id].name.to_s) end if enemy.item_id > 0 or enemy.weapon_id > 0 or enemy.armor_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 375, 200, 30, "Probabilité : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(520, 375, 200, 30, enemy.treasure_prob.to_s) else self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 360, 200, 30, "Pas de tresor") end endend# ------------------------------------------------------------------------class Scene_Bestiaire def main @window_bestiaire = Window_Bestiaire.new Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @window_bestiaire.dispose end def update @window_bestiaire.update if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end if Input.trigger?(Input::C) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end if Input.trigger?(Input::RIGHT) and $num != $max $num += 1 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::RIGHT) and $num == $max $num = 1 $game_system.se_play($data_system.cancel_se) $scene = Scene_Bestiaire.new return end if Input.trigger?(Input::LEFT) and $num > 1 $num -= 1 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::LEFT) and $num == 1 $num = $max $game_system.se_play($data_system.cancel_se) $scene = Scene_Bestiaire.new return end if Input.trigger?(Input::UP) and ($num + 10) <= $max $num += 10 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::UP) and ($num + 10) > $max $num = $max $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return end if Input.trigger?(Input::DOWN) and ($num - 10) >= 1 $num -= 10 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::DOWN) and ($num - 10) < 1 $num = 1 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return end endend

    Pour l'utiliser, créer un objet " Bestiaire " avec un event commun programmé comme ceci :
    > Inserer un script : $num = 1
    $scene = Scene_Bestiaire.new

    ( 2 lignes dans la même commande d'event !! )
    A la ligne 15 du script, entrez le nombre d'ennemi !!
    ( L'ID utilisé la plus élevé de votre base de donnée )
    Les fleches de direction permettent de changer de page !!


    --------------------------------------------------------------------


    Voici la version " Bestiaire progressif " !!
    Les ennemis y apparaissent au fur et à mesure que vous les tués !!


    class Window_Bestiaire < Window_Base attr_accessor :battler def initialize super(0, 0, 640, 480) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = $fontface self.contents.font.size = $fontsize refresh end def refresh self.contents.clear $max = ($victime.size - 1) enemy = $data_enemies[$victime[$num]] @battler = Sprite.new @battler.bitmap = RPG::Cache.battler(enemy.battler_name, enemy.battler_hue) cw = @battler.bitmap.width ch = @battler.bitmap.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(320 - cw / 2, 240 - ch / 2, @battler.bitmap, src_rect, 100) self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(250, 20, 140, 30, enemy.name.to_s) self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(20, 50, 200, 30, "HP : ") self.contents.draw_text(20, 85, 200, 30, "SP : ") self.contents.draw_text(20, 120, 200, 30, "Force : ") self.contents.draw_text(20, 155, 200, 30, "Dexterité : ") self.contents.draw_text(20, 190, 200, 30, "Agilité : ") self.contents.draw_text(20, 225, 200, 30, "Intelligence : ") self.contents.draw_text(20, 260, 200, 30, "Attaque : ") self.contents.draw_text(20, 295, 200, 30, "Defense physique : ") self.contents.draw_text(20, 330, 200, 30, "Defense magique : ") self.contents.draw_text(20, 375, 200, 30, "Evasion : ") self.contents.draw_text(400, 260, 200, 30, "Experience : ") self.contents.draw_text(400, 295, 200, 30, "Gold : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(70, 50, 200, 30, enemy.maxhp.to_s) self.contents.draw_text(70, 85, 200, 30, enemy.maxsp.to_s) self.contents.draw_text(100, 120, 200, 30, enemy.str.to_s) self.contents.draw_text(130, 155, 200, 30, enemy.dex.to_s) self.contents.draw_text(100, 190, 200, 30, enemy.agi.to_s) self.contents.draw_text(150, 225, 200, 30, enemy.int.to_s) self.contents.draw_text(110, 260, 200, 30, enemy.atk.to_s) self.contents.draw_text(205, 295, 200, 30, enemy.pdef.to_s) self.contents.draw_text(200, 330, 200, 30, enemy.mdef.to_s) self.contents.draw_text(120, 375, 200, 30, enemy.eva.to_s) self.contents.draw_text(530, 260, 200, 30, enemy.exp.to_s) self.contents.draw_text(470, 295, 200, 30, enemy.gold.to_s) if enemy.item_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.item_id].name.to_s) elsif enemy.weapon_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.weapon_id].name.to_s) elsif enemy.armor_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 330, 200, 30, "Tresor : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(490, 330, 200, 30, $data_items[enemy.armor_id].name.to_s) end if enemy.item_id > 0 or enemy.weapon_id > 0 or enemy.armor_id > 0 self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 375, 200, 30, "Probabilité : ") self.contents.font.color = Color.new(250, 250, 250, 255) self.contents.draw_text(520, 375, 200, 30, enemy.treasure_prob.to_s) else self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(400, 360, 200, 30, "Pas de tresor") end end end# ------------------------------------------------------------------------class Scene_Bestiaire def main @window_bestiaire = Window_Bestiaire.new Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @window_bestiaire.dispose end def update @window_bestiaire.update if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end if Input.trigger?(Input::C) $game_system.se_play($data_system.cancel_se) $scene = Scene_Map.new return end if Input.trigger?(Input::RIGHT) and $num != $max $num += 1 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::RIGHT) and $num == $max $num = 0 $game_system.se_play($data_system.cancel_se) $scene = Scene_Bestiaire.new return end if Input.trigger?(Input::LEFT) and $num > 0 $num -= 1 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::LEFT) and $num == 0 $num = $max $game_system.se_play($data_system.cancel_se) $scene = Scene_Bestiaire.new return end if Input.trigger?(Input::UP) and ($num + 10) <= $max $num += 10 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::UP) and ($num + 10) > $max $num = $max $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return end if Input.trigger?(Input::DOWN) and ($num - 10) >= 1 $num -= 10 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return elsif Input.trigger?(Input::DOWN) and ($num - 10) < 1 $num = 0 $game_system.se_play($data_system.decision_se) $scene = Scene_Bestiaire.new return end endend

    Il nous reste quelques modifications à faire.
    Dans le script " Scene_Title ", inserer ceci à la ligne 18 :



    $victime = []
    Ca sert à créer votre tableau où seront stocké vos victimes.

    Dans le script " Scene_Save ", inserer cette ligne à la suite des autres semblables ( L 83 ) :



    Marshal.dump($victime, file)
    Ca sert à sauvergarder vos victimes.
    ( A moins que vous ne preferiez tout recommencer à chaque partie ? )

    Dans le script " Scene_Load ", inserer cette ligne à la suite des autres semblables ( L 83 ) :



    $victime = Marshal.load(file)
    Ca sert à charger vos victimes à chaque partie.

    Dans le script " Scene_Battle 2 ", inserer ceci à la ligne 145 :



    for enemy in $game_troop.enemies unless $victime.include?(enemy.id) then $victime.push(enemy.id) end end

    Ca sert à classer vos victimes dans le tableau ( donc dans le bestiaire ).

    Reste plus que une chose à vous dire :
    Apres avoir tué au moins un monstre vous pouvez donner le bestiaire à votre héros.
    Il peut s'agir d'un objet lié à un event commun.
    L'event d'ouverture du bestiaire doit avoir la commande " inserer un script " avec ceci dedans :



    $num = 0$scene = Scene_Bestiaire.new
    Galtrak
    Galtrak
    Admin
    Admin


    Messages : 192
    Réputation : 31
    Date d'inscription : 13/04/2010
    Localisation : Derrière mon écran

    tuto bestiare Empty Re: tuto bestiare

    Message  Galtrak Mar 20 Avr - 18:29

    Merci du partage, mais je déplace dans SCRIPT^^
    louckas
    louckas
    modérateur
    modérateur


    Messages : 116
    Réputation : 11
    Date d'inscription : 17/04/2010

    tuto bestiare Empty Re: tuto bestiare

    Message  louckas Mar 20 Avr - 18:57

    oh pardon je me suis trompé
    Galtrak
    Galtrak
    Admin
    Admin


    Messages : 192
    Réputation : 31
    Date d'inscription : 13/04/2010
    Localisation : Derrière mon écran

    tuto bestiare Empty Re: tuto bestiare

    Message  Galtrak Sam 24 Avr - 13:21

    Pas grave^^
    Galtrak
    Galtrak
    Admin
    Admin


    Messages : 192
    Réputation : 31
    Date d'inscription : 13/04/2010
    Localisation : Derrière mon écran

    tuto bestiare Empty Re: tuto bestiare

    Message  Galtrak Dim 25 Avr - 19:19

    C'est fait Wink

    Contenu sponsorisé


    tuto bestiare Empty Re: tuto bestiare

    Message  Contenu sponsorisé


      La date/heure actuelle est Dim 19 Mai - 10:33