[PSPE 0.10] Générer un combat contre soi-même
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 :
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?
Publié le : 13/02/2021 - 18:16
Modifié le : 29/11/2022 - 07:30
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
VladandGaret
Oh non mince 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
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
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
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
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
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
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
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
VladandGaret
Pas de soucis Damien
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
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
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 Damien
Sujet clôt! =)
Publié le : 08/04/2021 - 21:28
Modifié le : 29/11/2022 - 07:30