Topic d'aide RPG Maker

Pages: 1 ... 11 12 13 14 15 [16] 17 18 19 20 21

CrazyPhylis

  • Membre
  • 7 posts
04 juillet 2017, 21:40
oh.... :(
Cela m'aiderai tellement :')

Enfin bon je vais prier haha
mais merci de me prévenir ^^

Nuri Yuri

  • Modérateur de section
  • 575 posts
04 juillet 2017, 22:48
Tu peux sinon adapter le style graphique de ton jeu à ton propre style :v

CrazyPhylis

  • Membre
  • 7 posts
07 juillet 2017, 16:43
Oui merci ^^'

C'est ce que je commence a faire du coup :')

DrBisounours

  • Membre
  • 30 posts
16 juillet 2017, 17:34
Bonjour,

J'ai cherché à créer une fonction qui retirerait les pokémons KO (pour reprendre une contrainte du Nuzlocke challenge). N'étant pas très bon en script, j'ai tenté de créer cela au travers d'un événement commun qui s'active via un interrupteur (pour activer ou désactiver ce mode à souhait).
J'ai donc tenté de coder la chose suivante : est-ce qu'un pokémon de l'équipe est KO ? / Quel est l'index de ce Pokémon dans l'équipe ? / Retirer de l'équipe le Pokémon à l'index déterminé (j'ai tenté la fonction .remove en m'inspirant de la fonction relâcher du PC de stockage)
Ce qui donne cela :

<> Script : $on_map_call = false
<> Condition : Interrupteur [0025: Nuzlocke ON] == Activé
  <> Condition : Script $pokemon_party.dead?
   <> Script : for i in 0..5
                  :     if $pokemon_party.actors[i].hp <= 0
                  : $pokemon_party.actors[i].remove
   <>
  : Fin condition
  <>
 : Fin condition
 <>

Cependant mon jeu crash lorsque l'un de mes Pokémons tombe KO. Pourriez-vous m'indiquer l'erreur que j'ai commise ?
Voici le rapport de log :

---------- Erreur de script : évènement ----------
----- Type
SyntaxError

----- Message
(eval):3:in `command_355'compile error
(eval):3: syntax error

----- Position de l'évènement
MAP 6 EVENT 0
SCRIPT
for i in 0..5
    if $pokemon_party.actors[i].hp <= 0
$pokemon_party.actors[i].remove


----- Backtrace
Script : Interpreter Bis | Ligne : 444 | Méthode : in `command_355'
Script : Interpreter 2 | Ligne : 215 | Méthode : in `eval'
Script : Interpreter Bis | Ligne : 444 | Méthode : in `command_355'
Script : Interpreter 2 | Ligne : 215 | Méthode : in `execute_command'
Script : Interpreter 1 | Ligne : 199 | Méthode : in `update'
Script : Interpreter 1 | Ligne : 113 | Méthode : in `loop'
Script : Interpreter 1 | Ligne : 204 | Méthode : in `update'
Script : Game_CommonEvent | Ligne : 66 | Méthode : in `update'
Script : Game_Map | Ligne : 397 | Méthode : in `update'
Script : Game_Map | Ligne : 396 | Méthode : in `each'
Script : Game_Map | Ligne : 396 | Méthode : in `update'
Script : Scene_Map | Ligne : 47 | Méthode : in `alias_update'
Script : Scene_Map | Ligne : 46 | Méthode : in `loop'
Script : Scene_Map | Ligne : 59 | Méthode : in `alias_update'
Script : MAPPANEL | Ligne : 90 | Méthode : in `update'
Script : Scene_Map | Ligne : 25 | Méthode : in `main'
Script : Scene_Map | Ligne : 19 | Méthode : in `loop'
Script : Scene_Map | Ligne : 30 | Méthode : in `main'
Script : Main | Ligne : 52

Je voulais aussi améliorer mon mini-script en utilisant des choses comme actors.length mais j'ai eu peur de rajouter plus d'erreurs et de ne pas trouver ce qui clochait.
Je vous remercie par avance :)

Nuri Yuri

  • Modérateur de section
  • 575 posts
16 juillet 2017, 19:30
Le Ruby c'est ni du Python, ni du C++.
Si tu commence une ligne par for, if, case, unless, while, until, il y a forcément un end qui traine quelques lignes en dessous.
Ensuite, y'a aucune méthode remove dans les objets Pokémon, ils sont pas capable de se supprimer par magie de la variable dans laquelle ils sont stockés. C'est à l'objet dans lequel le Pokémon est stocké de le supprimer et pas l'inverse. Ensuite, quand il n'y a pas de Pokémon, y'a pas d'accès à la propriété hp donc quand tu fais des itérations, tu dois faire attention.

Le code dont tu as besoin est celui-ci :
$pokemon_party.actors.delete_if { |pkmn| pkmn and pkmn.hp == 0 }

DrBisounours

  • Membre
  • 30 posts
16 juillet 2017, 21:16
D'accord. Je connais très mal le Ruby, j'essaie d'apprendre en lisant les scripts déjà implémentés dans le jeu ^^'
En tout cas, merci beaucoup pour cette réponse rapide, efficace et instructive, ça marche au poil. :)

Siriem

  • Membre
  • 1 posts
19 juillet 2017, 15:12
---------- Erreur de script : MAP ----------
----- Type
NoMethodError

----- Message
- ARGS - [20]
undefined method `y=' for nil:NilClass

----- Position dans MAP

Ligne 93

----- Backtrace
Script : MAP | Ligne : 93 | Méthode : in `refresh_map_window'
Script : MAP | Ligne : 60 | Méthode : in `check_world_map'
Script : MAP | Ligne : 58 | Méthode : in `each'
Script : MAP | Ligne : 58 | Méthode : in `check_world_map'
Script : Scene_Map | Ligne : 127 | Méthode : in `alias_update'
Script : MAPPANEL | Ligne : 90 | Méthode : in `update'
Script : Scene_Map | Ligne : 25 | Méthode : in `main'
Script : Scene_Map | Ligne : 19 | Méthode : in `loop'
Script : Scene_Map | Ligne : 30 | Méthode : in `main'
Script : Main | Ligne : 57

On peu m'aider je conprend pas d'ou vien l'erreur ?

« Modifié: 19 juillet 2017, 17:21 par Siriem »

Nuri Yuri

  • Modérateur de section
  • 575 posts
20 juillet 2017, 13:48
T'as bien mis l'évènement nommé ~ sur la carte du monde ?

DrBisounours

  • Membre
  • 30 posts
07 août 2017, 15:17
Bonjour Nuri (je m'adresse directement à toi car tu es toujours le premier à me répondre ^^),
J'essaie toujours de me débrouiller seul dans un premier temps pour ne pas abuser de ton temps et de ta gentillesse mais je ne trouve pas les réponses à plusieurs questions que je me pose.

1) J'ai tenté de créer un script qui enregistre les données des Pokémons morts (les K.O. retirés de l'équipe) afin d'ensuite pouvoir les voir à la tour de Lavanville (en parlant à une tombe par exemple). Pour cela j'ai voulu utiliser les commandes enregistrer_pokemon(slot, ID, niveau, shiny) et appel_pokemon(slot). Déjà : est-ce que ces commandes conviennent pour ce que je veux faire ? J'ai vu sur internet que certains scripts utilisaient plutôt une fonction de stockage des Pokémons morts (comme une boîte PC à part).

2) Quelle syntaxe dois-je utiliser pour utiliser la commande enregistrer_pokemon(slot, ID, niveau, shiny) avec des variables ? J'ai écrit des choses comme enregistrer_pokemon ($game_variables[31], #{pokemon.id.to_i}, #{pokemon.level}, false) mais je ne suis pas bien sûr de comprendre quand il faut mettre un # ou les {}.

3) J'ai finalement écrit le script suivant mais il ne fonctionne pas (sans doute à cause du point que j'ai cité au-dessus). Pourrais-tu m'éclairer sur les erreurs que j'ai commises ?

begin
@idList = []
 for i in 0..$pokemon_party.size-1
  if $pokemon_party.actors[i].dead
     @idList[i] = i
 end
@idList.compact!
end

for i in 0..@idList.size-1
 pokemon = $pokemon_party.actors[@idList[i]]
  pokemon_existant? ($game_variables[31])
      $game_variables[31] += 1
      enregistrer_pokemon ($game_variables[31], #{pokemon.id.to_i}, #{pokemon.level}, false)
   else
      enregistrer_pokemon ($game_variables[31], #{pokemon.id.to_i}, #{pokemon.level}, false)
   end
  $pokemon_party.actors[idList[i]].delete
 end
end

Et voici le rapport d'erreur :
---------- Erreur de script : évènement ----------
----- Type
SyntaxError

----- Message
(eval):19:in `command_355'compile error
(eval):14: syntax error
(eval):19: syntax error

----- Position de l'évènement
MAP 11 EVENT 16
SCRIPT
begin
@idList = []
 for i in 0..$pokemon_party.size-1
  if $pokemon_party.actors[i].dead
     @idList[i] = i
 end
@idList.compact!
end

for i in 0..@idList.size-1
 pokemon = $pokemon_party.actors[@idList[i]]
  pokemon_existant? ($game_variables[31])
      $game_variables[31] += 1
      enregistrer_pokemon ($game_variables[31], (pokemon.id.to_i).to_s, pokemon.level.to_s, false)
   else
      enregistrer_pokemon ($game_variables[31], (pokemon.id.to_i).to_s, pokemon.level.to_s, false)
   end
  $pokemon_party.actors[idList[i]].delete
 end
end


----- Backtrace
Script : Interpreter Bis | Ligne : 444 | Méthode : in `command_355'
Script : Interpreter 2 | Ligne : 215 | Méthode : in `eval'
Script : Interpreter Bis | Ligne : 444 | Méthode : in `command_355'
Script : Interpreter 2 | Ligne : 215 | Méthode : in `execute_command'
Script : Interpreter 1 | Ligne : 199 | Méthode : in `update'
Script : Interpreter 1 | Ligne : 113 | Méthode : in `loop'
Script : Interpreter 1 | Ligne : 204 | Méthode : in `update'
Script : Scene_Map | Ligne : 48 | Méthode : in `alias_update'
Script : Scene_Map | Ligne : 46 | Méthode : in `loop'
Script : Scene_Map | Ligne : 59 | Méthode : in `alias_update'
Script : MAPPANEL | Ligne : 90 | Méthode : in `update'
Script : Scene_Map | Ligne : 25 | Méthode : in `main'
Script : Scene_Map | Ligne : 19 | Méthode : in `loop'
Script : Scene_Map | Ligne : 30 | Méthode : in `main'
Script : Main | Ligne : 52

Un très grand merci ! :)

Nuri Yuri

  • Modérateur de section
  • 575 posts
07 août 2017, 17:36
C'est pas très très clair mais je vais essayer de te donner une explication...

Utiliser la fonction enregistrer_pokemon est une mauvaise idée car elle n'est pas destiné à ça (je suppose).
Il vaudrait mieux créer un conteneur dans Pokemon_Party que t'utiliseras pour stocker les Pokémon mort et les récupérer au niveau des tombes.

Pour créer une variable dans Pokémon party c'est assez simple, tu trouve le script "Pokemon_Party" et à la ligne juste après class Pokemon_Party, tu écris :
attr_accessor :dead_pokemonNormalement, dans ce même script tu devrais avoir un "def initialize", juste après cette ligne, tu écris :
@dead_pokemon = []Normalement quand tu feras une nouvelle partie tu auras les données préinitialisées. (Si tu continue les parties existante, tu auras un bug parce que la variable n'existait pas avant, pour les joueur de ton projet, s'ils n'avaient pas le projet avant aujourd'hui ils n'auront pas de bug).

Ensuite, pour gérer la mort et l'ajout dans le tableau il te faudra le script suivant :
$pokemon_party.actors.delete_if do |pokemon|
  next(false) unless pokemon
  if(pokemon.dead?)
    $pokemon_party.dead_pokemon << pokemon
    next(true)
  end
  next(false)
end
$pokemon_party.actors.compact!

Tu devras faire gaffe à ce qu'il reste un Pokémon dans l'équipe sinon il y aura plein de bug, je te recommande de mettre un Game Over si y'a plus de Pokémon.

(Pour le code que tu avais fait, il y avait des erreurs de syntaxe mais j'ai pas chercher à la trouver ^^')

PS : Pour récupérer un Pokémon mort tu écris la ligne suivant :
pokemon = $pokemon_party.dead_pokemon[index]index est un numéro. Tu dois vérifier qu'il n'est pas supérieur ou égal à $pokemon_party.dead_pokemon.size
« Modifié: 07 août 2017, 17:38 par Nuri Yuri »

Michaël250904

  • Membre
  • 2 posts
07 août 2017, 18:40
Salut j'essaie en se moment même de tester mon jeux pokemon confectionner avec rpg maker xp et PSP 0.9.2 mais je n'en suis pas capable car sa lance le mini jeux pokemon déjà présent, je commence dans le centre rouge pourriez vous  m'aider s.v. p😣

Michaël250904

  • Membre
  • 2 posts

Nuri Yuri

  • Modérateur de section
  • 575 posts
07 août 2017, 18:54
Si RMXP et le projet PSP 0.9.2 se trouvent dans le même dossier, la sauvegarde ne fonctionnera pas car RMXP met tous les fichier de son propre dossier en lecture seule.

Sinon, vérifies que t'as bien placé ton point de départ au bon endroit.

PS : Je fusionne avec le sujet d'aide.

DrBisounours

  • Membre
  • 30 posts
07 août 2017, 20:28
D'accord, merci beaucoup. J'ai compris les explications. Pour le faire seul c'était encore un peu au-dessus de mes compétences en script ^^ mais je vois que je progresse si je n'ai fait qu'une erreur de syntaxe ! :p

Quand tu dis pour "récupérer" un Pokémon mort. Tu veux dire que cela va le remettre dans l'équipe (le ressusciter) ou bien que je vais pouvoir en afficher les informations ?
Est-ce qu'un script comme celui-ci pourrait fonctionner pour afficher les informations des Pokémons décédés ? Je l'ai récupéré dans les scripts permettant d'afficher les Pokémons de l'équipe.

@party_window = []
      for i in 0..($pokemon_party.dead_pokemon.size-1)
        pokemon = $pokemon_party.dead_pokemon[@order[i]]
        @party_window.push(Pokemon_Party_Window.new(pokemon, i, @z_level, @mode, @data))
      end

Nuri Yuri

  • Modérateur de section
  • 575 posts
07 août 2017, 21:59
Récupérer = pouvoir afficher ses informations.

Sinon, je doute que ce soit une bonne idée d'utiliser Pokemon_Party_Window car c'est simplement pas prévu pour afficher plus de 6 Pokémon.
Si tu veux afficher les informations, tu peux utiliser "Pokemon_Status".
scene = Pokemon_Status.new(pokemon, 0, 1100)
scene.main

Pour la selection du Pokémon, il faudrait réaliser un script qui afficherait le niveau et le front du Pokémon mais sous PSP je ne connais pas la fonction qui permet d'obtenir le nom du front du Pokémon donc je ne peux pas écrire le script ^^'

DrBisounours

  • Membre
  • 30 posts
08 août 2017, 14:20
OK j'ai tout disposé et j'ai fait un event sur une tombe pour afficher les infos. J'ai voulu bidouillé un truc qui vérifie lorsqu'on veut faire défiler qu'il reste bien des Pokémons à afficher (pour pas que l'index dépasse  $pokemon_party.dead_pokemon.size comme tu m'as dit). Tout fonctionne sauf une chose : les pokémons KO sont bien affichés jusqu'à ce que, je comprend pas pourquoi, les Pokémons de l'équipe commencent à être affichés aussi. Et à partir de là les Pokémons KO ne s'affichent plus et on tourne en rond dans un menu d'équipe traditionnel.
Est-ce à cause de la méthode "pokemon_status" qui est normalement destiné à l'affichage de l'équipe ?

J'ai trouvé cette fonction pour afficher le front du pokémon @pokemon_sprite.bitmap = RPG::Cache.battler(@pokemon.battler_face, 0) a la ligne 373 du script pokemon_status. Je n'en ai pas bien saisi les détails en revanche ^^

Nuri Yuri

  • Modérateur de section
  • 575 posts
08 août 2017, 16:29
Essaie plutôt :
scene = Pokemon_Status.new(pokemon, -1, 1100)
scene.main
Ca empêchera la navigation dans l'équipe normalement ^^
Pour le système du coup :
class DeadPokemon_Display
  GreyColor = Color.new(128, 128, 128, 128)
  def initialize
    @text_sprite = Sprite.new
    @text_sprite.z = 10001
    @text_sprite.bitmap = Bitmap.new(640, 480)
    @sprite = Sprite.new
    @sprite.z = 10001
    @sprite.x = 320
    @sprite.y = 240
    @running = true
    @locked = false
    @index = -1
  end
 
  def main
    fill_bitmap
    if $pokemon_party.dead_pokemon.size == 0
      @text_sprite.bitmap.draw_text(0, 0, 640, 480, "Vous n'avez pas perdu de Pokémon.", 1)
      @locked = true
    else
      update_pokemon(1)
    end
    while @running
      Graphics.update
      Input.update
      update
    end
    dispose
  end
 
  def update
    return @running = false if Input.trigger?(Input::B)
    return if @locked
    update_pokemon(1) if Input.trigger?(Input::RIGHT)
    update_pokemon(-1) if Input.trigger?(Input::LEFT)
    if Input.trigger?(Input::C)
      scene = Pokemon_Status.new($pokemon_party.dead_pokemon[@index], -1, 1100)
      scene.main
    end
  end
 
  def update_pokemon(add)
    @index += add
    if @index < 0
      @index = $pokemon_party.dead_pokemon.size - 1
    elsif @index >= $pokemon_party.dead_pokemon.size
      @index = 0
    end
    return @running = false unless $pokemon_party.dead_pokemon[@index] #> Gros problème
    fill_bitmap
    pokemon = $pokemon_party.dead_pokemon[@index]
    @sprite.bitmap = RPG::Cache.battler(@pokemon.battler_face, 0)
    @sprite.ox = @sprite.bitmap.width / 2
    @sprite.oy = @sprite.bitmap.height / 2
    y = 240 + @sprite.oy
    @text_sprite.bitmap.draw_text(0, y, 640, 32, "#{pokemon.given_name} Nv.#{pokemon.level}", 1)
  end
 
  def fill_bitmap
    @text_sprite.bitmap.clear
    @text_sprite.bitmap.fill_rect(0, 0, 640, 480, GreyColor)
  end
 
  def dispose
    @text_sprite.bitmap.dispose
    @text_sprite.dispose
    @sprite.dispose
  end
end
Il faut ajouter ce script sur sur la pierre tombale ajoute la commande :
DeadPokemon_Display.new.main
@wait_count = 2
J'ai pas testé le script ^^

DrBisounours

  • Membre
  • 30 posts
08 août 2017, 17:52
Il semblerait que la seule chose que j'avais trouvée fasse planter le script :')
Le log me renvoie "in `update_pokemon'undefined method `battler_face' for nil:NilClass"
J'ai placé le script dans l'éditeur de script et la commande sur la tombe.
En tout cas merci beaucoup pour ce script et pour ton aide.

Nuri Yuri

  • Modérateur de section
  • 575 posts
08 août 2017, 18:02
Remplace la ligne "@sprite.bitmap = RPG::Cache.battler(@pokemon.battler_face, 0)" par "@sprite.bitmap = RPG::Cache.battler(pokemon.battler_face, 0)"

Petite erreur de ma part ^^'

DrBisounours

  • Membre
  • 30 posts
08 août 2017, 18:32
Super ça marche ! :D
Il y a juste un bug bizarre : si on presse la touche entrée lorsque le pokémon est affiché ça fait planter le jeu.
Le log dit "in `update'uninitialized constant DeadPokemon_Display::Pokemon_Status"

Nuri Yuri

  • Modérateur de section
  • 575 posts
09 août 2017, 00:49
Essaie voir de remplacer la ligne :
scene = Pokemon_Status.new($pokemon_party.dead_pokemon[@index], -1, 1100)
par
scene = POKEMON_S::Pokemon_Status.new($pokemon_party.dead_pokemon[@index], -1, 1100)

DrBisounours

  • Membre
  • 30 posts
09 août 2017, 11:23
Ca ne plante plus. Ca fonctionne même plutôt bien. :)
Il reste juste un dysfonctionnement mineur : pour quitter le menu "Status" affiché avec entrée, il faut appuyer au moins trois fois sur Echap pour le quitter (ce qui nous renvoie sur la map avec le Menu ouvert) et il est impossible de faire défiler les autres Pokémons (on reste bloqué sur la page "Status" ouverte). Par contre appuyer sur droite et gauche dans le menu Status nous montre bien les informations sur le Pokémon en question (attaques, stats, etc...).

Sankora

  • Membre
  • 14 posts
09 août 2017, 21:19
Yo les gens! Je debute un jeu avec PSP. Tout allait tres bien quand j'eus un bug quand je recois mon starter. Donc j'ecris ce message mais quand je relance mon jeu pour copier ici le message d'erreur, le jeu ne lance meme pas l'intro et dit : "Script is hanging" quelqu'un a une solution svp ? :)
Merci d'avance  :maxwell:

Nuri Yuri

  • Modérateur de section
  • 575 posts
09 août 2017, 22:11
Il faut appuyer plusieurs fois sur entrée au lancement du jeu (quand l'écran est noir).

Sankora

  • Membre
  • 14 posts
09 août 2017, 22:15
Ca marche! Merci! Mais maintenant, quand je recois mon starter, ca crash. Voici le message d'erreur:
"script 'sprite_Picture' line 40: Errno::ENOENT occurred. No such file or directory - graphics/Pictures/starter"

DrBisounours

  • Membre
  • 30 posts
09 août 2017, 22:25
De ce que j'en comprends tu as demandé à ton jeu d'afficher une image nommée "starter" et qui se trouve dans ton dossier graphics/pictures cependant le jeu ne la trouve pas. Vérifie si l'image est bien à cet endroit et si elle se nomme bien "starter".

Sankora

  • Membre
  • 14 posts
09 août 2017, 22:35
Oui ca marche merci sauf que...  :fail: 'y a un autre message d'erreur   :skin: "Script 'Pokemon_Data' line 51: TypeError occurred. no implicit conversion from nil to integer"

DrBisounours

  • Membre
  • 30 posts
09 août 2017, 22:43
Hmm... Je suis pas assez doué pour trouver l'erreur juste avec ça ^^"
Pourrais-tu me montrer l'événement ou bien le script que tu as utilisé pour donner un starter à ton personnage ?

Sankora

  • Membre
  • 14 posts
09 août 2017, 22:51
Spoiler
voila :/

DrBisounours

  • Membre
  • 30 posts
09 août 2017, 23:06
Je suis désolé, je vois pas ce qui cloche :/
J'ai recopié fidèlement ton événement et il fonctionne parfaitement chez moi. J'ai même tenté volontairement quelques approximations pour voir si ça venait de là, mais ça fonctionne quand même. Tu n'as pas modifié les scripts d'origine ? :/

Pages: 1 ... 11 12 13 14 15 [16] 17 18 19 20 21    En haut ↑