You should consider joining our Discord to ask for support.

We created a support channel using the new Discord Forum feature!

You can also visit our new website, it has a help section in English and French

0 like 0 dislike
755 views
in Script help by (490 points)
closed by
Hello la commu !

Depuis hier, je cherche comment je pourrais décider d'une musique de victoire différente pour les pokémon sauvages, les dresseurs lambda, les champions et le maître. J'ai essayé la commande "Change Battle End ME" mais c'est toujours la même musique qui se lance en fin de combat.

La question avait déjà été posée, mais je n'ai pas compris la mise en pratique de la réponse ! ^^'

Merci d'avance pour votre aide ! ^^
closed with the note: Résolu

1 Answer

0 like 0 dislike
by (14.8k points)
selected by
 
Best answer

Bonjour !

Alors, pour comprendre comment ça fonctionne : tu peux spécifier une musique de victoire quand tu crées ton Battle Info (voir le fichier pokemonsdk\# Create Trainer With Script.md) ou ça va aller chercher la musique dans la méthode guess_victory_bgm située à la ligne 226 du fichier pokemonsdk\scripts\01600 Alpha 25 Battle Engine\00200 Battle_Logic\00001 Battle_Info.rb.

Dans cette méthode, soit tu as spécifié via Base de Données/Système/Musique systèmes ta musique de Victoire, soit ça utilise celle par défaut audio/bgm/xy_trainer_battle_victory. Si tu veux la modifier selon les cas que tu cites, tu vas devoir créer un script dans le dossier scripts de ton projet qui reprend cette méthode pour la modifier. Tu as la documentation à dispo pour savoir quoi faire, et les vidéos de Yuri pour bien préparer Visual Studio Code pour PSDK.

by (490 points)
Merci de ta réponse rapide !

Effectivement, je n'étais jamais passé par le script pour créer un combat, et ça semble beaucoup plus intéressant comme ça ! Tellement que ça me donne envie d'approfondir et de systématisé la chose ! ^^
J'ai toutefois quelques questions qui me viennent en tant que néophyte :
1. Où dois-je placer le document .rb pour que le jeu puisse le trouver ?
2. Le dresseur créé par le script doit-il correspondre à un dresseur créé via RubyHost ?
3. Combien y a-t-il de niveau d'IA possible ?

Merci beaucoup de m'aider dans mon projet !
by (490 points)
Du coup, j'ai répondu à la plupart de mes questions en effectuant des tests ! ^^'
Cependant, après avoir placé mon nouveau script dans le dossier 'script" se trouvant à la racine du jeu, PSDK ne se lance plus... Pas de rapport d'erreur, rien du tout, il démarre et se referme instantanément. J'ai pourtant bien nommé le script avec cinq digitaux (00100) et je ne comprend pas ce qui engendre ce problème.

J'ai fais un test avec un script trouvé sur le Pokemon Workshop, et le résultat est le même. Avez-vous déjà rencontré ce problème ?
by (28.0k points)
Il y a surement une erreur de syntaxe ou un problème avec le script. Pour t'en assurer, double clique sur le fichier cmd dans ton dossier de jeu et écris: psdk

ça va afficher ce qui va pas
by (490 points)
J'ai effectué le test via la commande, et le rapport d'erreur dis ceci :

================================Erreur de script================================
Message :
undefined method `battle_end_me' for nil:NilClass

Type : NoMethodError
Script : 01600 Alpha 25 Battle Engine/00200 Battle_Logic/00001 Battle_Info.rb (PSDK)
Ligne : 227
Date : 15/06/2022 20:50:43
Game Version : 256
Logiciel : Pokémon SDK 25.16
===================================Backtraces===================================
[19] : 01600 Alpha 25 Battle Engine/00200 Battle_Logic/00001 Battle_Info.rb (PSDK) | ligne 227 guess_victory_bgm
[18] : 01600 Alpha 25 Battle Engine/00200 Battle_Logic/00001 Battle_Info.rb (PSDK) | ligne 68 initialize
[17] : 00100 Lukaz Dresseur/00101 Dresseurs.rb (user) | ligne 1 new
[16] : 00100 Lukaz Dresseur/00101 Dresseurs.rb (user) | ligne 1 <top (required)>
[15] : ScriptLoad.rb (PSDK) | ligne 55 require
[14] : ScriptLoad.rb (PSDK) | ligne 55 load_scripts
[13] : ScriptLoad.rb (PSDK) | ligne 52 each
[12] : ScriptLoad.rb (PSDK) | ligne 52 load_scripts
[11] : ScriptLoad.rb (PSDK) | ligne 43 load_vscode_scripts
[10] : ScriptLoad.rb (PSDK) | ligne 44 load_vscode_scripts
[9] : ScriptLoad.rb (PSDK) | ligne 44 each
[8] : ScriptLoad.rb (PSDK) | ligne 44 load_vscode_scripts
[7] : ScriptLoad.rb (PSDK) | ligne 35 start
[6] : tools/GameLoader/50_load_game_uncompiled.rb (PSDK) | ligne 7 <top (required)>
[5] : ScriptLoad.rb (PSDK) | ligne 147 require
[4] : ScriptLoad.rb (PSDK) | ligne 147 load_tool
[3] : tools/GameLoader/Z_load_uncompiled.rb (PSDK) | ligne 14 <top (required)>
[2] : ScriptLoad.rb (PSDK) | ligne 147 require
[1] : ScriptLoad.rb (PSDK) | ligne 147 load_tool
[0] : Game.rb (RMXP) | ligne 8 <main>
===================================Fin du log===================================
by (28.0k points)
Tu n'aurais pas essayé de lancer un combat via script custom sans définir de méthode ou quoi que ce soit?

Les commandes que tu rentre dans un évènement ne peuvent pas s'exécuter lors du démarrage du jeu ^^'

Qu'as-tu entré dans ton script?
by (490 points)
J'ai juste repris l'exemple présent dans la documentation :

bi = Battle::Logic::BattleInfo.new
bi.add_party(0, *bi.player_basic_info)
party = []
party << PFM::Pokemon.generate_from_hash(id: :mew, level: 100, shiny: true, given_name: 'Destroyer', trainer_name: 'Yuri', trainer_id: 0)
party << PFM::Pokemon.generate_from_hash(id: :arceus, level: 100, given_name: 'I\'m weak', trainer_name: 'Yuri', trainer_id: 0)
party << PFM::Pokemon.generate_from_hash(id: :gardevoir, level: 100, given_name: 'MEGA Devoirs', trainer_name: 'Yuri', trainer_id: 0, item: :gardevoirite)
bag = PFM::Bag.new
bag.add_item(:full_restore, 50)
bag.add_item(:mega_glasses, 1) # Allow enemy to mega evolve
bi.add_party(1, party, 'Yuri', 'Bad Trainer', 'dp_33', bag, 255, 7)
$scene.call_scene(Battle::Scene, bi)

Et j'ai utilisé la commande $scene.call_scene(Battle::Scene, bi) pour déclencher le combat. J'ai nommé le script 00101 dresseurs.rb, je l'ai placé dans un dossier 00100 Lukaz Dresseur, lui-même présent dans le dossier Script à la racine de PSDK.

Mais le problème se pose avec tous les scripts que je peux y placer. J'ai testé un script permettant l'évolution en plein match ou celui permettant l'affichage des shaders pour les reflets dans l'eau, c'est le même problème qui se pose... Pourtant, n'étant pas une flèche en programmation, je n'ai effectué aucune modification de la programmation du jeu ! ^^'
by (28.0k points)
Le problème c'est que tu as les scripts que tu met dans une commande de script et les scripts que tu met dans un script. Ce que t'as suivit du tuto va dans une commande de script.

Si tu veux vraiment t'en servir via un script tu dois faire un truc de ce genre.
Fichier script:
def mon_super_dresseur
bi = Battle::Logic::BattleInfo.new
bi.add_party(0, *bi.player_basic_info)
party = []
party << PFM::Pokemon.generate_from_hash(id: :mew, level: 100, shiny: true, given_name: 'Destroyer', trainer_name: 'Yuri', trainer_id: 0)
party << PFM::Pokemon.generate_from_hash(id: :arceus, level: 100, given_name: 'I\'m weak', trainer_name: 'Yuri', trainer_id: 0)
party << PFM::Pokemon.generate_from_hash(id: :gardevoir, level: 100, given_name: 'MEGA Devoirs', trainer_name: 'Yuri', trainer_id: 0, item: :gardevoirite)
bag = PFM::Bag.new
bag.add_item(:full_restore, 50)
bag.add_item(:mega_glasses, 1) # Allow enemy to mega evolve
bi.add_party(1, party, 'Yuri', 'Bad Trainer', 'dp_33', bag, 255, 7)
$scene.call_scene(Battle::Scene, bi)
end

Commande de script dans ton évent:
mon_super_dresseur

Il vaut mieux comprendre un peu la programmation avant de se lancer dans les scripts. Au besoin il existe des tutoriels sur code academy ou hacker rank, tu peux également suivre la vidéo suivante : https://www.youtube.com/watch?v=PmVcZK3Jwy4&t=0s&list=PLjwdMgw5TTLVVJHvstDYgqTCao-e-BgA8&index=4

Ou ce que j'ai écris y'a longtemps: https://gitlab.com/NuriYuri/tutoriel_ruby/-/blob/master/fr/0_Table_Des_Matières.md
by (490 points)
Super, j'ai testé et ça marche nickel ! ^^ Merci beaucoup du coup de main !

En effet, je ne maîtrise pas la programmation et je me perds très vite dans tout ça ! Je vais étudier ce que tu m'as envoyé, ça sera très utile !
by (490 points)
Par contre, je peux directement inclure les battle_bgm & victory_bgm dans ce script ?
by (490 points)
J'ai fini par y arriver ! ^^
Mais le sprite du battler adverse ne s'affiche pas (j'en ai testé plusieurs). C'est un bug ?
by (28.0k points)
C'est possible que ta variable 31 ne vaille pas 2.
Les sprites dp_ sont pas compatible avec la transition par défaut.
by (490 points)
C'était bien la variable le problème, ça a tout de suite affiché le sprite une fois la donnée modifiée.

Merci beaucoup pour le temps que tu m'as consacré ! ^^'
...