Logo de Pokémon Script Project Evolved

[PSP 0.10.1Petit soucis pour ajouter un script d'état d'avancement de l'histoire


Logo de l'utilisateurVladandGaret

VladandGaret

Salut tout le monde, je reposte ici une demande que j'avais faite sur l'ancien serveur discord pspe _entraide et qui n'avait jamais trouvée réponse car le serveur a fermé quelques heures après (manque de bol)
J'ai un petit soucis pour intégrer un script à PSPE 0.10.1
En fait, c'est un script pour permet d'afficher une page d'avancement de l'histoire dès que l'on charge la partie

Il fonctionne comme ça en gros:
Je l'appelle de cette manière:
add_avancement(n) ou n et l'état d'avancement prédéfini par des images stockées dans Pictures

Ensuite, au démarrage du jeu, ça affiche une image avec un bgm autre que celui de la map sur laquelle je suis, et le tout avec un texte résumant ce qui s'est passé dernièrement dans le jeu

Tout est ok, pas de plantage au lancement du projet, sauf qu'au chargement de la partie, et bien....ça ne fait rien XD
J'ai tenté d'appeler mon script dans le Scene_Load en intégrant les lignes suivantes:

Voici le script en question:
#==============================================================================
# ** Window_Avancement
#==============================================================================
class Window_Avancement < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     width    : window width
  #     commands : command text string array
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 640, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 0
    self.z = 6000
    refresh
  end  
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    # Afficher le descriptif du journal
    ligne = 0
    max_width = 0
    index = $game_variables[1][0][0]
    self.contents.font.size = $fontsize + 4
    self.contents.font.outline = true
    self.contents.font.shadow = true
    # first : calcul de la largeur (ligne la plus grande) et de la hauteur (nb lignes)
    $data_journal[index][1].each_line { |texte|
      ligne += 1
      if self.contents.text_size(texte).width > max_width
        max_width = self.contents.text_size(texte).width
      end
    }
    height = ligne * 30
    ligne = -1
    $data_journal[index][1].each_line { |texte|
      ligne += 1
      texte[-1] = ""
      self.contents.draw_text((640 - max_width - 32) / 2, (ligne * 30) + (480 - height - 32) / 2, max_width, 30,texte,1)
    }
  end
end
#==============================================================================
# ■ Scene_Title_Avancement
#==============================================================================
class Scene_Title_Avancement
  #--------------------------------------------------------------------------
  # ● main
  #-------------------------------------------------------------------------- 
  def main
    $game_system.bgm_play_name("Theme - Avancement")
    
    @spriteset = Sprite.new
    name = $game_variables[1][0][0].to_s
    if name == "45" #avancement isarwis agribah post game
      name = name + "-" + $game_variables[172].to_s
      @spriteset.bitmap = Bitmap.new("Graphics/Avancement pictures/" + name)
    else
      @spriteset.bitmap = Bitmap.new("Graphics/Avancement pictures/" + name)
    end
    
    # Création des fenêtres    
    @avancement_window = Window_Avancement.new
    
    # Effectuer la transition graphique
    Graphics.transition
    # Boucle
    loop do
      # Mettre à jour les graphique
      Graphics.update
      # Mettre à jour les entrés clavier
      Input.update 
      # Appeler fonction update
      update
      # si la Scene n'est plus la même
      if $scene != self
        # Alors sortir de la boucle
        break
      end
    end
    Graphics.freeze
    # Détruire objets de classe
    @avancement_window.dispose
    # destruction de l'image de fond
    @spriteset.dispose
  end
  #--------------------------------------------------------------------------
  # ● update
  #--------------------------------------------------------------------------
  def update
    # Mettre à jour les fenêtres
    @avancement_window.update
    @spriteset.update
    
    # si la touche C est appuyée
    if Input.trigger?(Input::C)
      $game_system.bgm_fade(1)
      count = 0
      loop do
        count += 1
        Graphics.update
        if count == 30
          break
        end
      end
      # Run automatic change for BGM and BGS set with map
      $game_map.autoplay
      # Update map (run parallel process event)
      $game_map.update
      # Switch to map screen
      $scene = Scene_Map.new
      return
    end
  end
end
J'ai ajouté les lignes suivantes dans l'Interpreter: (l1048 environ)

   def add_avancement(id_journal) #ajout de l'avancement au début du tableau if not $game_variables[1].is_a?(Array)
$game_variables[1] = []
end
$game_variables[1].unshift([id_journal,true])


Damien m'a dit de tester ceci:

Dans le Scene_title, de remplacer ça:
Et dans le Scene_Title du système général, j'ai rempalcé ça:

def on_decision(filename) unless FileTest.exist?(filename)
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.load_se)
file = File.open(filename, "rb")
read_save_data(file)
file.close
$game_system.bgm_play($game_system.playing_bgm)
$game_system.bgs_play($game_system.playing_bgs)
$game_map.update
$scene = Scene_Map.new
$scene.update_encounter
Player.pokedex_update
end

Par ça:

def on_decision(filename) unless FileTest.exist?(filename)
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.load_se)
file = File.open(filename, "rb")
read_save_data(file)
file.close
sleep(0.4)
# Switch to avancement
if $game_map.map_id != 505 #Map fin
$scene = Scene_Title_Avancement.new
else
# Restore BGM and BGS
$game_system.bgm_play($game_system.playing_bgm)
$game_system.bgs_play($game_system.playing_bgs)
# Run automatic change for BGM and BGS set with map
$game_map.autoplay
# Update map (run parallel process event)
$game_map.update
# Switch to map screen
$scene = Scene_Map.new
return
end
$scene.update_encounter
Player.pokedex_update
end

Mais voici l'erreur que ça me retourne:

---------- Erreur de script : Scene_Title --------------- Type
NoMethodError

----- Message
- ARGS - []
undefined method update_encounter' for #<Scene_Title_Avancement:0xcfc7200>----- Position dans Scene_Title
Ligne 540

----- Backtrace
Script : Scene_Title | Ligne : 540 | Méthode : in on_decision'Script : Scene_Title | Ligne : 364 | Méthode : in update'Script : Scene_Title | Ligne : 319 | Méthode : in main'Script : Scene_Title | Ligne : 316 | Méthode : in loop'Script : Scene_Title | Ligne : 323 | Méthode : in main'Script : Main | Ligne : 57

Désolé de reposter ce gros morceau ici mais je suis bien coincé :S 


Publié le : 08/02/2021 - 12:43

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

Logo de l'utilisateurNoru

Noru - Modérateur

Salut,

ce sujet est-il toujours d'actualité ?^^

Le sujet sera clôturé d'ici 2 semaines si il n'y a pas de nouvelles !


Publié le : 30/11/2022 - 14:36

Modifié le : 30/11/2022 - 14:36

Logo de l'utilisateurDamien Linux

Damien Linux - Administrateur

A pars si Vladandgaret indique le contraire, toujours en attendre que ce script soit adapté. J'ai jamais pu m'en occuper et donc le sujet reste ouvert 


Publié le : 30/11/2022 - 17:58

Modifié le : 30/11/2022 - 17:58

Logo de l'utilisateurVladandGaret

VladandGaret

Toujours d'actualité. J'ai laissé tomber l'ajout de cette fonctionnalité pour la 1ière version de mon projet, mais j'aimerai tout de même l'ajouter à l'avenir


Publié le : 30/11/2022 - 19:07

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