Logo de Pokémon Script Project Evolved

[PSPE 0.10] Générer un combat contre soi-même


Logo de l'utilisateurDamien Linux

Damien Linux

Demande de : VladandGaret
Résolu par : Damien Linux
Autre participant : Symbioss

Problème :
Salut tout le monde,

j'ai une question très simple à expliquer: Comment faire pour générer un combat contre soi-même?
C'est-à-dire un combat contre un dresseur qui a exactement les même pokémon que le héros, et aux mêmes niveaux?

Résolution :
Pour faire un combat contre toi-même je peux te proposer ceci :

Crée un nouveau script en-dessous de ADD ONS avec ceci :
module POKEMON_S
  class Pokemon_Battle_Trainer < Pokemon_Battle_Core
    ID_BATTLE_AGAINST_ME = X

    #------------------------------------------------------------  
    # Fonction d'initialisation
    # Appel: $scene = Pokemon_Battle_Trainer.new(
    #           party, trainer_id, ia)
    #     party: $pokemon_party (classe Pokemon_Party)
    #     trainer_id: L'ID du dresseur dans $data_trainer (groupe de monstres)
    #     ia: Fausse AI
    #     run_able: possible de fuir
    #------------------------------------------------------------
    def initialize(party, trainer_id, ia = false, run_able = false,
                   lose_able = false, capturable = false)
      @z_level = 0
      @ia = ia
      @trainer_id = trainer_id
      @run = run_able
      @lose = lose_able
      @capture = capturable
      
      $battle_var.reset
    
      @party = party
      # Création données des Pokémons adverses
      if trainer_id != ID_BATTLE_AGAINST_ME
        Trainer_Info.pokemon_list(@trainer_id).each do |pokemon_info|
          $battle_var.enemy_party.actors.push(pokemon_info.create_pokemon)
        end
      else
        $battle_var.enemy_party = @party
      end
      refill_party($battle_var.enemy_party)
      @enemy = $battle_var.enemy_party.actors[0]
      $battle_var.enemy_battle_order = [0,1,2,3,4,5]
      
      # Mise à jour Pokedex: Pokémon vu
      $pokedex.add(@enemy, false) #on ajoute pokemon vu dans pokedex
      
      # Génération ordre de combat
      @battle_order = Array.new(@party.size)
      @battle_order.fill {|i| i}
      
      # Désignation 1er Pokémon au combat
      # @actor désigne le (class) Pokémon
      actor_index = 0
      @actor = @party.actors[actor_index]
      if @actor == nil
        print("Attention, vous n'avez pas de Pokémon dans votre équipe! Réglez ce bug.")
      end
      while @actor.dead?
        actor_index += 1
        @actor = @party.actors[actor_index]
      end
      
      # Correction ordre combat (Pokémon vivant en premier)
      @battle_order = switch(@battle_order, 0, actor_index)
      
      # Remise à zéro résultat
      $battle_var.result_flee = false
      $battle_var.result_win = false
      $battle_var.result_defeat = false
      
      
      # Initialisation des variables de combat
      @phase = 0
      # 0 Non décidé, 1 Attaque, 2 Switch, 3 Item, 4 Fuite
      @actor_action = 0
      @enemy_action = 0
      
      @start_actor_battler = Player.battler
      @start_enemy_battler = Trainer_Info.battler(@trainer_id)
      
      $battle_var.have_fought.push(@actor.party_index)
      $battle_var.battle_order = @battle_order
      $battle_var.in_battle = true
      
      @actor.reset_stat_stage
      @enemy.reset_stat_stage
      @actor_skill = nil
      @enemy_skill = nil
      @actor.ability_active = false
      @enemy.ability_active = false
      @item_id = 0   # item utilisé
      
      # Récupération des objets :
      @objects = Trainer_Info.objects(@trainer_id)
    end
  end
end

class Interpreter
  def call_battle_against_me
    return false if $pokemon_party.size == 0
    $game_temp.map_bgm = $game_system.playing_bgm
    $game_system.bgm_stop
    $scene = Pokemon_Battle_Trainer.new($pokemon_party, 1, true, false, false)
    @wait_count = 2
    return true
  end
  alias demarrer_combat_contre_soi call_battle_against_me
end

Modifier les "X" au numéro de groupe de la BDD où tu vas renseigner les phrases de victoires et de défaites.
Ce que fait cette modification de Pokemon_Battle_Trainer c'est que quand
tu vas appeler "call_battle_against_me", ça va déclencher un combat qui
ne va pas prendre les Pokémon d'une personne en BDD mais reprendre ton équipe à toi


Publié le : 10/04/2021 - 07:12

Modifié le : 29/11/2022 - 07:30


Historique :


Logo de l'utilisateurVladandGaret

VladandGaret

Salut tout le monde,

j'ai une question très simple à expliquer: Comment faire pour générer un combat contre soi-même?
C'est-à-dire un combat contre un dresseur qui a exactement les même pokémon que le héros, et aux mêmes niveaux?

C'est possible de faire ça?emoji


Publié le : 13/02/2021 - 18:16

Modifié le : 29/11/2022 - 07:30

Logo de l'utilisateurSymbioss

Symbioss - Contributeur PSPEvolved

Salut, ce n'est pas prévu dans le starter kit, je pense qu'il faut scripter. :/


Publié le : 13/02/2021 - 19:32

Modifié le : 29/11/2022 - 07:30

Logo de l'utilisateurVladandGaret

VladandGaret

Oh non minceemoji Par event ça pourrait le faire, je pense pouvoir récupérer das une variable les pokémon que le héros a dans son équipe, mais après pour les réimplanter dans un dresseur de la BDD.... Ou peut-être que le système pour générer des équipes du style tour de combat pourrait aider non?


Publié le : 14/02/2021 - 17:38

Modifié le : 29/11/2022 - 07:30

Logo de l'utilisateurDamien Linux

Damien Linux - Administrateur

Pour faire un combat contre toi-même je peux te proposer ceci :

Crée un nouveau script en-dessous de ADD ONS avec ceci :
module POKEMON_S
  class Pokemon_Battle_Trainer < Pokemon_Battle_Core
    ID_BATTLE_AGAINST_ME = X

    #------------------------------------------------------------  
    # Fonction d'initialisation
    # Appel: $scene = Pokemon_Battle_Trainer.new(
    #           party, trainer_id, ia)
    #     party: $pokemon_party (classe Pokemon_Party)
    #     trainer_id: L'ID du dresseur dans $data_trainer (groupe de monstres)
    #     ia: Fausse AI
    #     run_able: possible de fuir
    #------------------------------------------------------------
    def initialize(party, trainer_id, ia = false, run_able = false,
                   lose_able = false, capturable = false)
      @z_level = 0
      @ia = ia
      @trainer_id = trainer_id
      @run = run_able
      @lose = lose_able
      @capture = capturable
      
      $battle_var.reset
      
      # Création données des Pokémons adverses
      if trainer_id != ID_BATTLE_AGAINST_ME
        Trainer_Info.pokemon_list(@trainer_id).each do |pokemon_info|
          $battle_var.enemy_party.actors.push(pokemon_info.create_pokemon)
        end
      else
        $battle_var.enemy_party = @party
      end
      refill_party($battle_var.enemy_party)
      @enemy = $battle_var.enemy_party.actors[0]
      $battle_var.enemy_battle_order = [0,1,2,3,4,5]
      
      @party = party
      
      # Mise à jour Pokedex: Pokémon vu
      $pokedex.add(@enemy, false) #on ajoute pokemon vu dans pokedex
      
      # Génération ordre de combat
      @battle_order = Array.new(@party.size)
      @battle_order.fill {|i| i}
      
      # Désignation 1er Pokémon au combat
      # @actor désigne le (class) Pokémon
      actor_index = 0
      @actor = @party.actors[actor_index]
      if @actor == nil
        print("Attention, vous n'avez pas de Pokémon dans votre équipe! Réglez ce bug.")
      end
      while @actor.dead?
        actor_index += 1
        @actor = @party.actors[actor_index]
      end
      
      # Correction ordre combat (Pokémon vivant en premier)
      @battle_order = switch(@battle_order, 0, actor_index)
      
      # Remise à zéro résultat
      $battle_var.result_flee = false
      $battle_var.result_win = false
      $battle_var.result_defeat = false
      
      
      # Initialisation des variables de combat
      @phase = 0
      # 0 Non décidé, 1 Attaque, 2 Switch, 3 Item, 4 Fuite
      @actor_action = 0
      @enemy_action = 0
      
      @start_actor_battler = Player.battler
      @start_enemy_battler = Trainer_Info.battler(@trainer_id)
      
      $battle_var.have_fought.push(@actor.party_index)
      $battle_var.battle_order = @battle_order
      $battle_var.in_battle = true
      
      @actor.reset_stat_stage
      @enemy.reset_stat_stage
      @actor_skill = nil
      @enemy_skill = nil
      @actor.ability_active = false
      @enemy.ability_active = false
      @item_id = 0   # item utilisé
      
      # Récupération des objets :
      @objects = Trainer_Info.objects(@trainer_id)
    end
  end
end

class Interpreter
  def call_battle_against_me
    return false if $pokemon_party.size == 0
    $game_temp.map_bgm = $game_system.playing_bgm
    $game_system.bgm_stop
    $scene = Pokemon_Battle_Trainer.new($pokemon_party, X, ia, run_able, lose_able)
    @wait_count = 2
    return true
  end
  alias demarrer_combat_contre_soi
end

Modifier les "X" au numéro de groupe de la BDD où tu vas renseigner les phrases de victoires et de défaites.
Ce que fait cette modification de Pokemon_Battle_Trainer c'est que quand tu vas appeler "call_battle_against_me", ça va déclencher un combat qui ne va pas prendre les Pokémon d'une personne en BDD mais reprendre ton équipe à toi

merci de me confirmer que c'est bon pour toi (ou si ça te mets des probls x))


Publié le : 06/03/2021 - 21:14

Modifié le : 29/11/2022 - 07:30

Logo de l'utilisateurVladandGaret

VladandGaret

Merci pour ta réponse, par contre, j'ai une erreur qui se met directement au démarrage du projet (avant même de charger la save):

Script 'vs-heros' line 104: SyntaxError occurred
Et cette ligne 104 correspond au dernier end bizarre


Publié le : 07/03/2021 - 17:13

Modifié le : 29/11/2022 - 07:30

Logo de l'utilisateurDamien Linux

Damien Linux - Administrateur

En effet remplace l'alias à la fin par alias demarrer_combat_contre_soi call_battle_against_me

il manquait le "call_battle_against_me"


Publié le : 07/03/2021 - 20:41

Modifié le : 29/11/2022 - 07:30

Logo de l'utilisateurVladandGaret

VladandGaret

Je n'ai plus de plantage au démarrage mais lorsque je fais appel au script call_battle_against_me, j'ai un plantage dont voici le log associé
---------- Erreur de script : Interpreter_Bis ----------
----- Type
NameError
----- Message
Section390:99:in `call_battle_against_me'undefined local variable or method `ia' for #<Interpreter:0xbc4e5b8>
----- Position dans Interpreter_Bis
Ligne 448
----- Backtrace
Script : Interpreter_Bis | Ligne : 448 | Méthode : in `command_355'
Script : --------------------------------------- | Ligne : 1 | Méthode : in `command_355'
Script : Interpreter_2 | Ligne : 215 | Méthode : in `eval'
Script : Interpreter_Bis | Ligne : 448 | 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_SG | Ligne : 48 | Méthode : in `alias_update'
Script : Scene_Map_SG | Ligne : 46 | Méthode : in `loop'
Script : Scene_Map_SG | Ligne : 55 | Méthode : in `alias_update'
Script : MAPPANEL | Ligne : 89 | Méthode : in `ts_update'
Script : TempsJourNuit | Ligne : 237 | Méthode : in `follow_me_update'
Script : Follower_Pkm | Ligne : 88 | Méthode : in `update'
Script : Scene_Map | Ligne : 25 | Méthode : in `ts_main'
Script : Scene_Map | Ligne : 19 | Méthode : in `loop'
Script : Scene_Map | Ligne : 30 | Méthode : in `ts_main'
Script : TempsJourNuit | Ligne : 230 | Méthode : in `main'
Script : Main | Ligne : 44


Publié le : 08/03/2021 - 12:45

Modifié le : 29/11/2022 - 07:30

Logo de l'utilisateurDamien Linux

Damien Linux - Administrateur

Dans le script ajouté l.99 :
Remplace :
$scene = Pokemon_Battle_Trainer.new($pokemon_party, 1, ia, run_able, lose_able)
Par :
$scene = Pokemon_Battle_Trainer.new($pokemon_party, 1, true, false, false)


Publié le : 13/03/2021 - 21:03

Modifié le : 29/11/2022 - 07:30

Logo de l'utilisateurVladandGaret

VladandGaret

Je suis vraiment désolé Damien, mais j'ai toujours un plantage :S

---------- Erreur de script : Interpreter_Bis ----------
----- Type
NoMethodError

----- Message
- ARGS - []
Section241:217:in `refill_party'undefined method `actors' for nil:NilClass

----- Position dans Interpreter_Bis
Ligne 448

----- Backtrace
Script : Interpreter_Bis | Ligne : 448 | Méthode : in `command_355'
Script : battle_against_me | Ligne : 33 | Méthode : in `initialize'
Script : battle_against_me | Ligne : 99 | Méthode : in `new'
Script : battle_against_me | Ligne : 99 | Méthode : in `call_battle_against_me'
Script : --------------------------------------- | Ligne : 1 | Méthode : in `command_355'
Script : Interpreter_2 | Ligne : 215 | Méthode : in `eval'
Script : Interpreter_Bis | Ligne : 448 | 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_SG | Ligne : 48 | Méthode : in `alias_update'
Script : Scene_Map_SG | Ligne : 46 | Méthode : in `loop'
Script : Scene_Map_SG | Ligne : 55 | Méthode : in `alias_update'
Script : MAPPANEL | Ligne : 89 | Méthode : in `ts_update'
Script : TempsJourNuit | Ligne : 237 | Méthode : in `follow_me_update'
Script : Follower_Pkm | Ligne : 88 | Méthode : in `update'
Script : Scene_Map | Ligne : 25 | Méthode : in `ts_main'
Script : Scene_Map | Ligne : 19 | Méthode : in `loop'
Script : Scene_Map | Ligne : 30 | Méthode : in `ts_main'
Script : TempsJourNuit | Ligne : 230 | Méthode : in `main'
Script : Main | Ligne : 44


Publié le : 14/03/2021 - 01:05

Modifié le : 29/11/2022 - 07:30

Logo de l'utilisateurDamien Linux

Damien Linux - Administrateur

Désolé j'en prends connaissance que maintenant x)

Est-ce qu'il serait possible de voir le groupe de dresseur d'ID 1 dans la BDD ?


Publié le : 08/04/2021 - 14:40

Modifié le : 29/11/2022 - 07:30

Logo de l'utilisateurVladandGaret

VladandGaret

Pas de soucis Damienemoji

Voici la BDD des groupes (en fait, ce sont ceux de base de PSPSEvolved, je n'ai pas encore pris le temps d'importer les miens)


Et au cas où, la BDD coté alliés


Publié le : 08/04/2021 - 15:13

Modifié le : 29/11/2022 - 07:30

Logo de l'utilisateurDamien Linux

Damien Linux - Administrateur

Je te dis n'importe quoi, je sors du sujet. Désolé, le temps que je me remette dedant mdr :

Remplace :
# Création données des Pokémons adverses
      if trainer_id != ID_BATTLE_AGAINST_ME
        Trainer_Info.pokemon_list(@trainer_id).each do |pokemon_info|
          $battle_var.enemy_party.actors.push(pokemon_info.create_pokemon)
        end
      else
        $battle_var.enemy_party = @party
      end
      refill_party($battle_var.enemy_party)
      @enemy = $battle_var.enemy_party.actors[0]
      $battle_var.enemy_battle_order = [0,1,2,3,4,5]
      
      @party = party

Par :
@party = party
# Création données des Pokémons adverses
      if trainer_id != ID_BATTLE_AGAINST_ME
        Trainer_Info.pokemon_list(@trainer_id).each do |pokemon_info|
          $battle_var.enemy_party.actors.push(pokemon_info.create_pokemon)
        end
      else
        $battle_var.enemy_party = @party
      end
      refill_party($battle_var.enemy_party)
      @enemy = $battle_var.enemy_party.actors[0]
      $battle_var.enemy_battle_order = [0,1,2,3,4,5]
      
     


Publié le : 08/04/2021 - 15:18

Modifié le : 29/11/2022 - 07:30

Logo de l'utilisateurVladandGaret

VladandGaret

Incroyable!
Voici le dresseur d'ID 100 dont je fais appel dans mon script:


Et...TADAAAM, et voici que je me bats contre ma propre équipe!!



C'est génial, c'est exactement ce que je voulais, merci mille fois Damienemoji
Sujet clôt! =)


Publié le : 08/04/2021 - 21:28

Modifié le : 29/11/2022 - 07:30