[Résolu] Demande aide évènements combat

10 Réponses • 1321 Vues

Rhenaud the Lukark

Programmeur

Salut à tous ! ^^
Bref je viens demander une faveur à ceux qui ont une bonne expérience en codage : voyez-vous, je souhaiterais reproduire un script de Pokémon Noir/Blanc (je crois) qui consiste à remontrer le personnage que l'on combat et de changer de musique lors d'un combat spécial (Arène, team leader...) mais malheureusement je suis une douille niveau RGSS malgré de bon tutos que j'ai vus : j'ai l'algorithme niveau 0 :

- Si combat spécial
  - Si pokémon apte à se battre de l'adversaire = 1 alors
  - Changer la musique
  - Faire apparaitre l'image de l'adversaire
  - Faire coulisser son image sur l'écran
  - Dire un texte
  - Refaire coulisser l'image hors de l'écran
  - Faire disparaître l'image
  - Fin si
- Fin si

Mais je ne peux pas le coller à RPGMXP : j'ai certaines variables que je ne saurais pas trouver ou créer :

- Combat Spécial
- Pokémon adversaire restant

Bref pour les doués en RGSS pouvez-vous m'aiguiller s'il vous plaît ? Ce serait vraiment sympa ! ^^

« Modifié: 26 février 2015, 21:31:34 par Rhenaud33 »

Allez, je vais vous électriser avec ma musique de fou ! Tous en boite, va y avoir de l'électricité dans l'air ! o/
Malheureusement ce compte est plus ou moins décédé, mais si vous voulez me contacter, allez sur Discord (RhenaudTheLukark#4797) ou contactez moi via ma boite mail!

Nuri Yuri

HostMaster

Solution valable pour PSP 0.7 et PSP 4G+ (pas testé sur 4G+) :
Dans Pokemon_Battle_Trainer. Juste avant les lignes qui contiennent :
    #------------------------------------------------------------  
  # Rounds
  #------------------------------------------------------------
Tu ajoutes :
    def yuri_gym_leader
  if $yuri_gym_leader
  sp = Sprite.new(@enemy_sprite.viewport)
  sp.bitmap = RPG::Cache.battler(@start_enemy_battler, 0)
  sp.ox = @enemy_sprite.bitmap.width / 2
  sp.oy = @enemy_sprite.bitmap.height * 2 / 3
  sp.x = 640 + sp.ox
  sp.y = @enemy_sprite.y-100
  18.times do
  sp.x -= 14
  Graphics.update
  end
  draw_text(*$yuri_gym_leader)
  wait_hit
  18.times do
  sp.x += 14
  Graphics.update
  end
  sp.dispose
  end
  $yuri_gym_leader = nil
  end
Ça doit ressembler à ça : http://puu.sh/g6MeK/5a9c4e6f6c.png

Dans la méthode def end_battle_check du script Pokemon_Battle_Trainer.
Après la ligne qui contient :
        exp_battle
Tu ajoutes :
        dead_counter = 0
  $battle_var.enemy_party.actors.each do |e|
  dead_counter += 1 if e.dead?
  end
  if dead_counter == ($battle_var.enemy_party.actors.size - 1)
  yuri_gym_leader
  end
Ca doit ressembler à ça : http://puu.sh/g6Mog/ae44941714.png

Juste avant la commande "Combat" tu dois ajouter la commande de script suivante :
$yuri_gym_leader = ["Ligne de texte 1","Ligne de texte 2"]
Faut remplacer Ligne de texte 1 et Ligne de texte 2 par ce que ça vaut, si la ligne 2 est vide tu laisse "".
Fais bien attention aux guillemets, si la variable $yuri_gym_leader est mal faite, ça bug.

PS : J'ai codé ce truc à la chie dedans y'a 5 minutes, donc il se peut que le dresseur soit pas bien placé, j'ai juste vérifié que ça marchait.
ln(yo) = <3

Rhenaud the Lukark

Programmeur

OWIIII ! Merci beaucoup, t'es super ! :D Je vais faire des tests par moi, même, et je vais éplucher ton code pour voir TOUT et pour m'en instruire !

En tout cas MERCI INFINIMENT !!! (a)

EDIT : Mais de quoi tu parles pour la commande "Combat" ? C'est où ça ? x) (oui je suis un boulet fini)

« Modifié: 22 février 2015, 00:57:39 par Rhenaud33 »

Allez, je vais vous électriser avec ma musique de fou ! Tous en boite, va y avoir de l'électricité dans l'air ! o/
Malheureusement ce compte est plus ou moins décédé, mais si vous voulez me contacter, allez sur Discord (RhenaudTheLukark#4797) ou contactez moi via ma boite mail!

GiraKoth

Programmeur

Dans ton évent, avant de lancer le combat, tu fais insérer un script et tu ajoutes la ligne de code donnée ;)

Toujours en vie (je crois)

Rhenaud the Lukark

Programmeur

Et pour le changement de musique ? Ça l'inclut aussi ? (C'est presque indispensable pour ce que je veux faire...)
Allez, je vais vous électriser avec ma musique de fou ! Tous en boite, va y avoir de l'électricité dans l'air ! o/
Malheureusement ce compte est plus ou moins décédé, mais si vous voulez me contacter, allez sur Discord (RhenaudTheLukark#4797) ou contactez moi via ma boite mail!
Une commande Audio.bgm_play("Audio/BGM/XXXXX.mp3") après if $yuri_gym_leader devrait faire l'affaire :)

Nuri Yuri

HostMaster

Sans oublier de renommer le XXXXX.mp3 par le vrai nom du fichier. (Il faut éviter les espace et accents dans les noms de fichier.)
ln(yo) = <3

GiraPrimal

Programmeur

Hello !

Intéressant tout ça ;)

Dans la même optique, je me demandais si on peut aussi déclencher des évents communs de la même façon (l'évent à appeler de cette manière serait une simple série de messages, pour faire un p'tit dialogue en plein combat). On pourrait placer un $id_com_event = XXX dans l'appel du combat pour indiquer l'ID de l'event à déclencher.

Peut-être qu'en bidouillant un peu...
Ceci devrait te convenir:

$game_temp.common_event_id = XXX

GiraPrimal

Programmeur

L'event se déclenche... à la fin du combat (après la série de messages "Bravo tu as gagné, voilà ta récompense, blablabla..."), et pas en plein milieu. C'est pas encore tout à fait ça...

Voici ce que j'ai essayé :

Extrait du script Pokemon_Battle_Trainer
    #------------------------------------------------------------  
  # Rounds
  #------------------------------------------------------------
  def end_battle_check
  @actor_status.refresh
  @enemy_status.refresh
  if $battle_var.enemy_party.dead? and not(@party.dead?)
  end_battle_victory
  elsif @enemy.dead? and not($battle_var.enemy_party.dead?)
  exp_battle
 
  dead_counter = 0
  $battle_var.enemy_party.actors.each do |e|
  dead_counter += 1 if e.dead?
  end
  if dead_counter == ($battle_var.enemy_party.actors.size - 1)
  yuri_gym_leader
  end
 
  index = $battle_var.enemy_party.actors.index(@enemy)
  @enemy_switch_id = index+1
 
  @alive = 0
  for pokemon in @party.actors
  if not pokemon.dead?
  @alive += 1
  end
  end
 
  if @alive > 1
  name = $battle_var.enemy_party.actors[index+1].name
  draw_text(name + " va être envoyé", "par " + Trainer_Info.string(@trainer_id) + ".")
  $pokemon_capturer = false
  end
 
  if @enemy_party_status.active
  @enemy_party_status.reset_position
  @enemy_party_status.visible = true
  @enemy_party_status.x -= 400
  until @enemy_party_status.x == -16
  @enemy_party_status.x += 20
  Graphics.update
  end
  end
 
  wait_hit
  if @alive > 1
  draw_text("Voulez-vous changer", "de Pokémon ?")
  decision = false
  if draw_choice
  $battle_var.window_index = @action_window.index
  scene = Pokemon_Party_Menu.new(0, @z_level + 100)
  scene.main
  return_data = scene.return_data
  decision = true
  Graphics.transition
  end
 
  # Switch de Pokémon
  if ($battle_var.action_id == 4 or $battle_var.action_id == 6) and decision
  $battle_var.have_fought = []
  @switch_id = return_data
  actor_pokemon_switch
  end
  end
 
  if @enemy_party_status.active
  until @enemy_party_status.x == -416
  @enemy_party_status.x -= 20
  Graphics.update
  end
  @enemy_party_status.visible = false
  @enemy_party_status.reset_position
  end
 
  # Switch enemy
  enemy_pokemon_switch
  if @alive == 1
  final_round
  end
  end
 
  if @actor.dead?
  if @party.dead?
  end_battle_defeat
  else
  # Switch forcé
  $battle_var.window_index = @action_window.index
  scene = Pokemon_Party_Menu.new(0, @z_level + 150)
  scene.main
  return_data = scene.return_data
  # Switch de Pokémon
  if $battle_var.action_id == 4 or $battle_var.action_id == 6
  @switch_id = return_data
  actor_pokemon_switch
  end
  end
  end
  end
 
  def yuri_gym_leader
  if $yuri_gym_leader
  $game_temp.common_event_id = $yuri_gym_leader
  end
  $yuri_gym_leader = nil
  end

Event appelant le combat
Script : $yuri_gym_leader = 201
Commentaire : J'ai pris le n°201 comme exemple, mais vous pouvez mettre autre chose.
Démarrer un combat : T/Champion_Random

Event commun n°201
Message : Hmph... pas trop mal.
  Mais ne pense pas que c'est terminé !

La technique de Yuri marche très bien sur PSP 4G+. Pensez juste à déplacer le sprite s'il n'est pas bien placé à l'écran.

Nuri Yuri

HostMaster

C'est normal, « $game_temp.common_event_id » est la variable qui indique l'évent commun à appeler dans le futur. Le problème c'est que PSP c'est pas comme RMXP ou PSDK, y'a pas d'interpréter intégré au script de combat donc il est impossible d'utiliser la moindre commande d'évent ou le moindre évent pendant un combat du coup $game_temp.common_event_id est un peu inutile.

Si tu veux espérer que cela fonctionne il va falloir créer un Interpreter que tu mettra à jour à la main pendant toute la durée de fonctionnement de l'évent et dans lequel tu auras chargé la liste commande de l'évent commun en question.

Je déconseilles de faire mumuse avec l'interface Event <-> Script à tout ceux qui ne connaissent pas la base script RMXP sur le bout des doigts. (A savoir presque personne sur ce forum.)
ln(yo) = <3

There was an error while thanking
Thanking...