Sujet n°11963
Posté par Rey' le 26 Aoû - 17:37 (2012)
Titre : Bug PSPDS 5G au début d'un combat.
Bonjour à tous. Comme il est écrit dans le titre, j'ai le bug lors du lancement d'un combat de dresseur. J'ai fais beaucoup de recherche et je n'ai rien trouvé.

Voici le log :
Spoiler
---------- Erreur de script : API ----------
----- Version du logiciel : PSP DS v0.4
----- Type
TypeError

----- Message
cannot convert nil into String

----- Position dans API
Ligne 1

----- Backtrace
Script : API | Ligne : 1 | Méthode : in `+'
Script : API | Ligne : 1 | Méthode : in `load_bitmap'
Script : API | Ligne : 1 | Méthode : in `battleback'
Script : Pokemon_Battle_Trainer* | Ligne : 175 | Méthode : in `pre_battle_transition'
Script : Pokemon_Battle_Core 1* | Ligne : 229 | Méthode : in `main'
Script : Main | Ligne : 59


Et voilà des screenshots.

Ici, j'ai configuré l'arrière plan des combats :
Spoiler


Et ici : j'ai configuré son apparence en combat...
Spoiler


Merci d'avance pour votre aide ! Imbécile heureux

Posté par Gemini le 26 Aoû - 19:12 (2012)
Salut
Désolé, je n'ai pas de solution à te proposer si ce n'est de passer sous PSP4G+, c'est une version plus stable que PSP5G et qui ne fait rien de moins. (A ma connaissance)

Posté par Rey' le 26 Aoû - 19:33 (2012)
M'ouais... Mais justement, je suis passé sur PSPDS 5G pour avoir le dual-screen et la 5G...
Il me semble que ça vient normalement de l'apparence en combat, mais l'ayant configuré, je me demande si ce n'est pas un problème dans le script.

Posté par The_Doctor le 26 Aoû - 23:10 (2012)
bon bin utilise pspds simple et tu importe la 5G

Posté par Rey' le 27 Aoû - 11:11 (2012)
Sinon, j'ai peut être trouvé une piste. En créant une map de test, et en configurant un combat contre le même dresseur, ça marche.
Je n'ai pas d'erreur de log, le combat se fait normalement. Si vous avez des idées du pourquoi du comment, hésiter pas et dites moi.
Et peut être qu'on pourra enfin régler ce bug.

Posté par Pαlвσlѕку le 27 Aoû - 11:33 (2012)
Je viens suite à ton MP.
Il me faudrait que tu me passes les 10 lignes avant et après celle où il y a le bug.
Le log ne me permet pas de savoir où à lieu le bug, mais à première vue, le bug semble venir d'une variable qui est nulle, avec toutes les conséquences qui en découlent.

Posté par Rey' le 27 Aoû - 14:49 (2012)
Je te passe ça.

Pokémon_Battle_Trainer* (161-197)

#------------------------------------------------------------
# Animations pré-combat
#------------------------------------------------------------
def pre_battle_transition
# Jingle et BGM
$game_system.bgm_play($game_system.battle_bgm)
Audio.me_play("Audio/ME/battle_jingle.mid")
Graphics.freeze

# Sélection transition
s = (rand(BATTLE_TRANS)+1).to_s
@background.bitmap = RPG::Cache.picture("black.png")
Graphics.transition(100, "Graphics/Transitions/battle"+ s +".png")
Audio.me_stop

# Dessin
Graphics.freeze
@background.bitmap = RPG::Cache.battleback(@battleback_name)
@message_background.bitmap = RPG::Cache.picture($MSG)
@enemy_sprite.bitmap = RPG::Cache.battler(@start_enemy_battler, 0)
@enemy_sprite.ox = @enemy_sprite.bitmap.width / 2
@enemy_sprite.oy = @enemy_sprite.bitmap.height * 2 / 3
@enemy_sprite.x -= 782 #254 #782
@enemy_sprite.y = 95
@enemy_ground.bitmap = RPG::Cache.battleback(@ground_name)
@enemy_ground.ox = @enemy_ground.bitmap.width / 2
@enemy_ground.oy = @enemy_ground.bitmap.height / 2
#@enemy_ground.zoom_x = @enemy_ground.zoom_y = 2.0/3
@enemy_ground.x -= 782 #254 #782
@actor_ground.bitmap = RPG::Cache.battleback(@ground_name_actor)
@actor_ground.ox = @actor_ground.bitmap.width / 2
@actor_ground.oy = @actor_ground.bitmap.height
@actor_ground.x += 782 #286 #782
@actor_sprite.bitmap = RPG::Cache.battler(@start_actor_battler, 0)
@actor_sprite.ox = @actor_sprite.bitmap.width / 2
@actor_sprite.oy = @actor_sprite.bitmap.height
@actor_sprite.x += 782 #286 #782
Graphics.transition(50, "Graphics/Transitions/battle0.png")

end


Pokémon_Battle_Core 1* (ligne 219-239)

@actor_party_status = Pokemon_Battle_Party_Status.new(@party, @battle_order, false, @z_level + 15)
@enemy_party_status = Pokemon_Battle_Party_Status.new($battle_var.enemy_party, $battle_var.enemy_battle_order, true, @z_level + 15)
@actor_party_status.visible = false
@enemy_party_status.visible = false
# note: .active = true activera les animations liées à ces fenêtres
@actor_party_status.active = false
@enemy_party_status.active = false

# Lancement des animations
pre_battle_transition
pre_battle_animation

# Effets pré-premier round
post_round_effect

@frame = 0
@frame_bis = 10

Graphics.transition


Et enfin Main (sauf si c'est inutile) :
Main (ligne 49-70

# トランジション準備
splash.dispose
splash1.dispose
Graphics.transition(5)
Graphics.freeze
# シーンオブジェクト (タイトル画面) を作成
$scene = Scene_Title.new
# $scene が有効な限り main メソッドを呼び出す
while $scene != nil
$scene.main
end
# フェードアウト
Graphics.transition(20)
rescue Exception => exception
EXC::error_handler(exception)
rescue Errno::ENOENT
# 例外 Errno::ENOENT を補足
# ファイルがオープンできなかった場合、メッセージを表示して終了する
filename = $!.message.sub("Ne trouve pas le fichier ou le répertoire - ", "")
print("Le ficher #{filename} n'a pas été trouvé.")
end


Voilà.

Edit visible : Je me suis dis que ceci pouvait être utile.

Spoiler

Spoiler


PS: J'ai d'ailleurs une petite idée de la provenance du bug. Si je place mon point d'apparition à la map de l'intro, j'ai le bug.
Mais si je le place directement sur la map, plus aucun problème. Je me demande si ce n'est pas un conflit avec quelque chose
en rapport avec le personnage en combat...

Posté par The_Doctor le 27 Aoû - 15:36 (2012)
1 met tes code sous forme de euuh bin de code
2 ta map test est faite avec le meme tileset ?
et 3 utilise tu des interrupteur dans ton combat et utilise tu des interrupteurs dans ton intro

Posté par Rey' le 27 Aoû - 16:29 (2012)
Oui, j'utilise des interrupteurs dans mon intro, puisque j'ai repris celle par défaut à ma sauce. Ceci n'interfère en aucun cas avec les interrupteurs du combat, si tu faisais allusion à ça.
Ensuite, oui, la map test utilise le même tileset, et fait le même combat.
Une petite précision tout de même, le combat n'est pas vraiment lancé par le personnage en personne, mais par un event en coin de map en démarrage automatique.
Voilà, si ça peut aider.

Posté par The_Doctor le 27 Aoû - 19:18 (2012)
le démarrage auto fait buger psp la plupart du temps mais sinon ca va Coupable

non franchement met cet évent en processus parallèle plutôt car en auto je croit que ça fait des bug

Posté par Rey' le 27 Aoû - 21:41 (2012)
Je viens de tester, mais rien n'y fait, toujours le bug.

Posté par Laito' le 27 Aoû - 22:48 (2012)
dab777 a écrit:
le démarrage auto fait buger psp la plupart du temps mais sinon ca va Coupable



dab777 fait bugguer les membres de PSP la plupart du temps mais sinon ça va Coupable.

Reynald, il me semble que ça vienne bien des battles backs, mais ça peut venir de celui de soir et nuit.
À vérifier.

Posté par Rey' le 28 Aoû - 09:41 (2012)
Je t'ai fais un screen, histoire de te montrer.
(D'ailleurs, si tu t'aperçois que les groundbattle_actor_after et nuit ne sont pas pareil que celui de jour, c'est parce que les ressources n'était pas intégré. J'ai donc du intégrer des ressources avec aucun rapport. )

Screen


Comme tu vois, j'ai tout, alors, je ne vois pas le problème. Et le plus étrange est que, si tu lis mes messages d'au dessus, sur une map de test, ça marche.

Posté par Laito' le 28 Aoû - 09:44 (2012)
Okay, t'as installé les polices dis moi ? Car je suis pas sûr mais je crois que ça cause un bug comme celui-ci

Posté par Rey' le 28 Aoû - 09:49 (2012)
Et bien non, je l'ai réinstallé encore une fois, mais toujours le même bug. =/

Posté par adrien63190 le 28 Aoû - 09:58 (2012)
Je ne suis pas expert en PSP mais je pense que l'erreur vient de là


Spoiler



car j'ai l'impression que tu n'as pas paramétré l'apparence de l'adversaire en combat

Posté par Laito' le 28 Aoû - 09:59 (2012)
adrien63190 a écrit:
Je ne suis pas expert en PSP mais je pense que l'erreur vient de là


{{{Spoiler}}}


car j'ai l'impression que tu n'as pas paramétré l'apparence de l'adversaire en combat


Peut être, mais moi j'ai déjà fait des combats avec des hommes invisibles sur PSP car je n'avais rien assigné pourtant, ça a fonctionné.

Posté par Rey' le 28 Aoû - 10:04 (2012)
Justement, si tu regarde bien mes autres messages, tu verras que je l'ai configuré.
Je vais essayer en recréant une autre map identique à celle où j'ai le bug.

Posté par adrien63190 le 28 Aoû - 10:10 (2012)
J'ai vu que tu avais dis avoir configuré l'apparence et si tu le dis c'est que tu l'as fais mais tu n'as rien mis entre les parenthèse et donc je proposais ce que je pensais car rien n'a l'air de fonctionner. Mais ne m'y connaissant pas encore beaucoup,c'est fortement possible que cela ne vienne pas de là.

Posté par Rey' le 29 Aoû - 12:47 (2012)
Vous allez peut être pas le croire, mais étrangement, en faisant un copier coller de la map, ça remarche. Oo'.
Je vais faire des tests, et si je vois que c'est à cause de ça, je fais un Edit.

Edit visible : Conclusion trop hâtive, ça ne marche pas. =/

Posté par IamTheAdic le 29 Aoû - 15:01 (2012)
Je pense que tu as mal configurer le background. Vérifie bien si il ne manque pas une image.

Posté par Rey' le 29 Aoû - 23:10 (2012)
Si tu parle du battle à configurer dans la BDD, oui, je l'ai fais.
Si tu parles de autre chose, alors, je voudrais bien que tu me dises de quoi il s'agit alors.

Posté par hoirogorio le 30 Aoû - 09:42 (2012)
Il parle du fond de combat plutôt je crois

Posté par Rey' le 30 Aoû - 09:52 (2012)
Alors, oui, je l'ai configuré.

Posté par The_Doctor le 30 Aoû - 11:54 (2012)
c a quel moment du combar que tu as des probleme

Posté par Laito' le 30 Aoû - 12:29 (2012)
Reynald76 a écrit:
j'ai le bug lors du lancement d'un combat de dresseur.

Posté par Nuri Yuri le 30 Aoû - 13:40 (2012)
Dab, tu dois écrire correctement, le SMS comme les fautes volontaires d'orthographe ne sont pas tolérés, c'est la dernière fois que je t'avertis.

Posté par Rey' le 30 Aoû - 14:42 (2012)
Dab, comme l'as cité Laitonite, j'ai le bug en début de combat. Pour le log et les scripts qui bug, tu peux aller les consulter à la première page.

Posté par Pαlвσlѕку le 30 Aoû - 20:42 (2012)
Tu pourrais préciser la ligne qui bug dans Pokemon Battle Trainer ?

Posté par Rey' le 30 Aoû - 20:49 (2012)
C'est la ligne 175 qui bug.

Posté par Pαlвσlѕку le 30 Aoû - 20:56 (2012)
Je sais que c'est la ligne 175, mais je voudrais savoir ce qu'elle contient. Imbécile heureux

Posté par Rey' le 1 Sep - 00:12 (2012)
Elle contient la ligne :
Code:
 @background.bitmap = RPG::Cache.battleback(@battleback_name)


EDIT Visible : Il m'a semblé plus pratique de te mettre le code entier, alors tiens :
Pokemon_Battle_Trainer*
Code:
 #==============================================================================
# ■ Pokemon_Battle_Trainer
# Pokemon Script Project - Krosk
# 29/09/07
#-----------------------------------------------------------------------------
# Scène à ne pas modifier de préférence
#-----------------------------------------------------------------------------
# Système de Combat - Pokémon Dresseur
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
# 0: Normal, 1: Poison, 2: Paralysé, 3: Brulé, 4:Sommeil, 5:Gelé, 8: Toxic
# @confuse (6), @flinch (7)
#-----------------------------------------------------------------------------
# 1 Normal  2 Feu  3 Eau 4 Electrique 5 Plante 6 Glace 7 Combat 8 Poison 9 Sol
# 10 Vol 11 Psy 12 Insecte 13 Roche 14 Spectre 15 Dragon 16 Acier 17 Tenebres
#-----------------------------------------------------------------------------

#-----------------------------------------------------------------------------
# $battle_var.action_id
#   0 : Phase de Sélection
#   1 : Sélection Item
#   2 : Switch Pokémon
#   4 : Switch Fin de Tour
#-----------------------------------------------------------------------------

module POKEMON_S
  #------------------------------------------------------------ 
  # Pokemon_Battle_Trainer
  #   scene
  #------------------------------------------------------------ 
  class Pokemon_Battle_Trainer < Pokemon_Battle_Core
    attr_accessor :z_level
    attr_accessor :actor_status
    attr_accessor :actor
    #------------------------------------------------------------ 
    # 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
      #$battle_var.enemy_party = Pokemon_Party.new
      for pokemon_data in Trainer_Info.pokemon_list(@trainer_id)
        id = pokemon_data[0]
        level = pokemon_data[1]
        # Shiny
        if pokemon_data[6] != nil
          shiny = pokemon_data[6]
        else
          shiny = false
        end
        pokemon = Pokemon.new(id, level, shiny)
        pokemon.given_name += " ennemi"
        # Paramètres optionnels
        # Objet
        if pokemon_data[2] != nil
          pokemon.item_hold = Item.id(pokemon_data[2])
        end
        # Moveset
        if pokemon_data[4] != nil
          i = 0
          for skill in pokemon_data[4]
            if skill != nil and skill != "AUCUN"
              pokemon.skills_set[i] = Skill.new(Skill_Info.id(skill))
            end
            if skill == "AUCUN"
              pokemon.skills_set[i] = nil
            end
            i += 1
          end
          pokemon.skills_set.compact!
        end
        # Stats avancées
        if pokemon_data[3] != nil and pokemon_data[3].length == 6
          pokemon.dv_modifier(pokemon_data[3])
        end
        # Genre
        if pokemon_data[5] != nil
          pokemon.set_gender(pokemon_data[5])
        end
        # Forme
        if pokemon_data[6] != nil
          pokemon.form = pokemon_data[6]
        end
        $battle_var.enemy_party.actors.push(pokemon)
      end
      @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
      $data_pokedex[@enemy.id][0] = true
     
      # 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 #$trainer_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_effect_reset
      @enemy.skill_effect_reset
      @actor_skill = nil
      @enemy_skill = nil
      @actor.ability_active = false
      @enemy.ability_active = false
      @item_id = 0   # item utilisé
    end
 
       
    #------------------------------------------------------------ 
    # Animations pré-combat
    #------------------------------------------------------------ 
    def pre_battle_transition
      # Jingle et BGM       
      $game_system.bgm_play($game_system.battle_bgm)     
      Audio.me_play("Audio/ME/battle_jingle.mid")     
      Graphics.freeze
     
      # Sélection transition
      s = (rand(BATTLE_TRANS)+1).to_s
      @background.bitmap = RPG::Cache.picture("black.png")
      Graphics.transition(100, "Graphics/Transitions/battle"+ s +".png")
      Audio.me_stop     
     
      # Dessin
      Graphics.freeze       
      @background.bitmap = RPG::Cache.battleback(@battleback_name)
      @message_background.bitmap = RPG::Cache.picture($MSG)
      @enemy_sprite.bitmap = RPG::Cache.battler(@start_enemy_battler, 0)
      @enemy_sprite.ox = @enemy_sprite.bitmap.width  / 2
      @enemy_sprite.oy = @enemy_sprite.bitmap.height * 2 / 3
      @enemy_sprite.x -= 782 #254 #782
      @enemy_sprite.y = 95
      @enemy_ground.bitmap = RPG::Cache.battleback(@ground_name)
      @enemy_ground.ox = @enemy_ground.bitmap.width / 2
      @enemy_ground.oy = @enemy_ground.bitmap.height / 2
      #@enemy_ground.zoom_x = @enemy_ground.zoom_y = 2.0/3
      @enemy_ground.x -= 782 #254 #782
      @actor_ground.bitmap = RPG::Cache.battleback(@ground_name_actor)
      @actor_ground.ox = @actor_ground.bitmap.width / 2
      @actor_ground.oy = @actor_ground.bitmap.height
      @actor_ground.x += 782 #286 #782
      @actor_sprite.bitmap = RPG::Cache.battler(@start_actor_battler, 0)
      @actor_sprite.ox = @actor_sprite.bitmap.width / 2
      @actor_sprite.oy = @actor_sprite.bitmap.height
      @actor_sprite.x += 782 #286 #782
      Graphics.transition(50, "Graphics/Transitions/battle0.png")
     
    end
   
    def pre_battle_animation
      # Glissement des sprites
      loop do       
        @enemy_sprite.x += 17
        @enemy_ground.x += 17
        @actor_sprite.x -= 17
        @actor_ground.x -= 17
        Graphics.update
        if @enemy_sprite.x == 324         
          break         
        end       
      end       
      # Confrontation des joueurs avec affichage des balls
      draw_text("Un combat est lancé" , "par "+ Trainer_Info.string(@trainer_id) + " !")
      @actor_party_status.reset_position
      @enemy_party_status.reset_position
      @actor_party_status.visible = true
      @enemy_party_status.visible = true
      @actor_party_status.active = true
      @enemy_party_status.active = true
      @actor_party_status.x += 416
      @enemy_party_status.x -= 416
      Graphics.update
     
      loop do
        @actor_party_status.x -= 20
        @enemy_party_status.x += 20
        Graphics.update
        if @actor_party_status.x <= 132-16 - 123
          @actor_party_status.reset_position
          @enemy_party_status.reset_position
          break
        end
      end
      #wait_hit
      wait(60)     
      # Dégagement sprite dresseur
      loop do
        @enemy_sprite.x += 10
        @enemy_party_status.x -= 20
        Graphics.update
        if @enemy_sprite.x >= 723
          @enemy_party_status.visible = false
          @enemy_party_status.reset_position
          @enemy_sprite.oy = @enemy_sprite.bitmap.height / 2 + 5
          break
        end
      end
     
      @enemy_sprite.bitmap = RPG::Cache.battler(@enemy.battler_face, 0)

      # Envoi sprite
      launch_enemy_pokemon
     
      # Attente appui de touche
      wait(40)     
     
      # Dégagement du sprite dresseur
      @actor_party_status.reset_position
      loop do       
        @actor_sprite.x -= 10
        @actor_party_status.x += 20
        Graphics.update       
        if @actor_sprite.x <= -200
          @actor_sprite.bitmap = RPG::Cache.battler(@actor.battler_back, 0)
          @actor_party_status.reset_position
          @actor_party_status.visible = false         
          break
        end
      end
     
      # Envoi du pokémon (animation)
      launch_pokemon     
      @text_window.contents.clear
      Graphics.update
    end
   
    #------------------------------------------------------------ 
    # Déroulement
    #------------------------------------------------------------
    def enemy_skill_decision     
      action = true
      # ------- ---------- --------- --------
      #    Saut de phase de sélection (ennemi)
      #   action = false  : saut
      #   action = true   : pas de saut
      # ------- ---------- --------- --------
      action = phase_jump(true)
     
      @enemy_action = 1
     
      # Décision skill ennemi
      if not(@actor.dead?) and action
        list = []
        for i in 0..@enemy.skills_set.size - 1
          list.push(i)
        end
        list.shuffle!
        # Skill sans PP // Lutte
        @enemy_skill = Skill.new(165)
        # ----------
        for i in list
          if @enemy.skills_set[i].usable?
            @enemy_skill = @enemy.skills_set[i]
          end
        end
      end
     
     
      # Trainer IA
      if @ia and not(@actor.dead?) and action
        # Skill sans PP // Lutte
        @enemy_skill = Skill.new(165)
       
        rate_list = {}
        i = 0
        for skill in @enemy.skills_set
          if skill.usable?
            rate_list[i] = ia_rate_calculation(skill, @enemy, @actor)
          else
            rate_list[i] = 0
          end
          i += 1
        end
       
        # Tri dans l'ordre decroissant de valeur
        sorted_list = rate_list.sort {|a,b| b[1]<=a[1]}
       
        #for element in sorted_list
        #  print(@enemy.skills_set[element[0]].name)
        #  print(element[1])
        #end
       
        # Decision prioritaire: max dégat ou soin
        # Valeur seuil: 200
        # si une attaque/défense dépasse ce seuil, il est choisi
        if sorted_list[0][1] > 200
          @enemy_skill = @enemy.skills_set[sorted_list[0][0]]
        else
          # Decision par pallier
          i = rand(100)
          # Taux de decision
          taux = [100, 25, 5, 0]
          for a in 0..3
            if i <= taux[a] and sorted_list[a] != nil and sorted_list[a][1] != 0
              @enemy_skill = @enemy.skills_set[sorted_list[a][0]]
            end
          end
        end
      end
     
      if not(action) # Reprise du skill précédent
        @enemy_skill = $battle_var.enemy_last_used
      end
    end
   
    #------------------------------------------------------------ 
    # Rounds
    #------------------------------------------------------------               
    def end_battle_check
      @actor_status.refresh
      @enemy_status.refresh
     
      alive = 0
        for pokemon in @party.actors
          if not pokemon.dead?
            alive += 1
          end
        end
       
      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
       
        index = $battle_var.enemy_party.actors.index(@enemy)
        @enemy_switch_id = index+1
        name = $battle_var.enemy_party.actors[index+1].name     
        draw_text(name + " va être envoyé", "par " + Trainer_Info.string(@trainer_id) + ".")
       
       
        if @enemy_party_status.active
          @enemy_party_status.reset_position
          @enemy_party_status.visible = true         
          @enemy_party_status.x = -399         
          until @enemy_party_status.x == -139
            @enemy_party_status.x += 20           
            Graphics.update
          end
        end       
       
        wait_hit
        if alive > 1
          if $choix_battle == true
          draw_text("Voulez-vous appeler", "un autre Pokémon ?")
          decision = false
          if draw_choice("Changer de Pokémon","Continuer le combat avec "+ @actor.given_name)
            $battle_var.window_index = @index
            scene = Pokemon_Party_Menu_Battle.new(0)
            scene.main
            return_data = scene.return_data
            decision = true
            Graphics.transition
          end
        end         
       
          # Switch de Pokémon
          if ($battle_var.action_id == 4 or $battle_var.action_id == 6) and decision
            @switch_id = return_data
            actor_pokemon_switch
          end
        end
       
        if @enemy_party_status.active
          until @enemy_party_status.x == -399
            @enemy_party_status.x -= 20
            Graphics.update
          end
          @enemy_party_status.visible = false
          @enemy_party_status.reset_position
        end
       
        # Switch enemy
        enemy_pokemon_switch
      end
      if @actor.dead?
        if @party.dead?
          end_battle_defeat
        else
          # Switch forcé
          $battle_var.window_index = @index
          scene = Pokemon_Party_Menu_Battle.new(0)
          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
   
   
    #------------------------------------------------------------ 
    # Items
    #------------------------------------------------------------     
    def actor_item_use # items à utiliser
      # Item déjà utilisé ie remplacé par 0
      if @item_id == 0
        return
      end
      if Item.data(@item_id)["flee"] != nil
        end_battle_flee
        return
      end
      if Item.data(@item_id)["ball"] != nil
        ball_data = Item.data(@item_id)["ball"]
        catch_pokemon(ball_data)
      end
    end

   

    #------------------------------------------------------------ 
    # Lancer de pokéball
    #------------------------------------------------------------         
    def catch_pokemon(ball_data)
      # Initialisation des données
      ball_name = ball_data[0]
      ball_rate = ball_data[1]
      ball_sprite = ball_data[2]
      ball_open_sprite = ball_data[3]
      ball_color = ball_data[4]
     
      # Procédure / Animation
      # Lancer
      draw_text(Player.name + " utilise", ball_name + " !")
      @ball_sprite = Sprite.new
      @ball_sprite.bitmap = RPG::Cache.picture(ball_sprite)
      @ball_sprite.x = -25
      @ball_sprite.y = 270
      @ball_sprite.z = @z_level + 16
      t = 0.0
      pi = Math::PI
      loop do
        t += 16
        @ball_sprite.y = (270.0 - 230.0 * Math.sin(2 * pi / 3.0 * t / 445.0)).to_i
        @ball_sprite.x = -15 + t
        Graphics.update
        if @ball_sprite.x >= 445
          break
        end
      end
     
      Graphics.update
      # Rejet
      draw_text(Trainer_Info.string(@trainer_id) + " dévie", "la " + ball_name + " !")
      Audio.se_stop
      Audio.se_play("Audio/SE/Pokeopenbreak.wav")
     
      t = 0
      loop do
        t += 1
        @ball_sprite.x -= -20
        @ball_sprite.y += t
        Graphics.update
        if t == 10
          @ball_sprite.dispose
          break
        end
      end
     
      wait(40)
     
      return false
    end
   
    #------------------------------------------------------------ 
    # Fuite
    #------------------------------------------------------------           
    def run_able?(runner, opponent)
      if @run
        return super
      end
      return false
    end
   
    def flee_able(actor, enemy)
      if @run
        return super
      end     
      return false
    end
   
    def end_battle_flee(expulsion = false)
      if @run
        return super
      end
      draw_text("On ne s'enfuit pas", "d'un combat de Dresseurs !")
      wait_hit
    end
   
    def end_battle_flee_enemy(expulsion = false)
      if @run
        return super
      end
      draw_text("On ne s'enfuit pas", "d'un combat de Dresseurs !")
      wait_hit
    end
   
    #------------------------------------------------------------ 
    # Exp en cours de combat
    #------------------------------------------------------------     
    def exp_battle
      @actor_status.z = @z_level + 15
     
      # Réduction de liste
      $battle_var.have_fought.uniq!
      for index in $battle_var.have_fought
        actor = $pokemon_party.actors[index]
        if actor.dead?
          $battle_var.have_fought.delete(index)
        end
      end
      number = $battle_var.have_fought.length
     
      @enemy.skill_effect_reset
      @enemy.reset_stat_stage
      if @evolve_checklist == nil
        @evolve_checklist = []
      end
      if @money_rate == nil
        @money_rate = 1
      end
     
      # Recherche de paramètres
      type = 1.3
      exp_share_number = 0
      for pokemon in $pokemon_party.actors
        if not(pokemon.dead?) and Item.data(pokemon.item_hold)["expshare"]
          exp_share_number += 1
        end
      end
     
      for actor in $pokemon_party.actors
        if actor.dead?
          next
        end
       
        amount = nil
        if $battle_var.have_fought.include?(actor.party_index)
          amount = actor.exp_calculation(@enemy.battle_list, @enemy.level, number, type, exp_share_number)
          # Tag objet
          if Item.data(actor.item_hold)["amuletcoin"]
            @money_rate = 2
          end
        end
       
        if Item.data(actor.item_hold)["expshare"] and
            not($battle_var.have_fought.include?(actor.party_index)) and not(actor.dead?)
          amount = actor.exp_calculation(@enemy.battle_list, @enemy.level, number, type, exp_share_number, 0)
        end
       
        if amount != nil
          actor.skill_effect_reset
          actor.reset_stat_stage
          actor.add_bonus(@enemy.battle_list)           
          if @actor.level < MAX_LEVEL
           draw_text(actor.given_name + " a gagné", amount.to_s + " points Exp. !")
          end
          Graphics.update
          wait_hit
       
          for i in 1..amount
            actor.add_exp_battle(1)
            if actor.level_check
              actor.level_up(self)
              if not(@evolve_checklist.include?(actor))
                @evolve_checklist.push(actor)
              end
            end
            if actor == @actor
              if @actor.exp_list[@actor.level+1] != nil and @actor.level < MAX_LEVEL
                divide = (@actor.exp_list[@actor.level+1]-@actor.exp_list[@actor.level])/192
                if divide == 0
                  divide = 1
                end
                if (@actor.exp - @actor.exp_list[@actor.level])%divide == 0
                  @actor_status.exp_refresh
                  Graphics.update
                end
              end
            end
          end
        end
      end
     
      @actor_status.refresh
      Graphics.update
     
      # Reset have_fought
      $battle_var.have_fought = [@actor.party_index]
     
    end
   
    #------------------------------------------------------------ 
    # Fin de combat
    #------------------------------------------------------------     
    def end_battle_victory     
      #Audio.bgm_fade(800)
      exp_battle
     
      $battle_var.result_win = true
      $game_variables[12] += 5
      Audio.me_play("Audio/ME/fainted_jingle.mid")
      #Audio.me_play("Audio/ME/trainer_jingle.mid")
      Audio.bgm_play("Audio/BGM/PkmRS_Victory2.mid")
     
     
      draw_text("Vous avez battu",Trainer_Info.string(@trainer_id)+ " !")
     
      @enemy_sprite.opacity = 255
      @enemy_sprite.zoom_x = 1
      @enemy_sprite.zoom_y = 1
      @enemy_sprite.visible = true
      @enemy_sprite.bitmap = RPG::Cache.battler(@start_enemy_battler, 0)
      @enemy_sprite.ox = @enemy_sprite.bitmap.width / 2
      @enemy_sprite.oy = @enemy_sprite.bitmap.height / 2 + 5
      @enemy_sprite.x = 524
      @enemy_sprite.y -= @enemy_sprite.bitmap.height / 2 -130
      loop do
        @enemy_sprite.x -= 10
        @enemy_sprite.y = 86
        Graphics.update
        if @enemy_sprite.x <= 360 #324
          break
        end
      end
      wait_hit
     
     
      list_string = Trainer_Info.string_victory(@trainer_id)
      draw_text(list_string)     
      wait_hit
     
     
      $battle_var.money = Trainer_Info.money(@trainer_id)
      draw_text(Player.name + " remporte " + ($battle_var.money).to_s + "$ !")
      $pokemon_party.add_money($battle_var.money)
      wait(40)
     
      wait(30)
      $game_system.bgm_play($game_temp.map_bgm)
      for actor in @evolve_checklist
        info = actor.evolve_check
        if info != false         
          scene = Pokemon_Evolve.new(actor, info, @z_level + 200)
          scene.main
        end
      end
     
      end_battle
    end
   
    def end_battle_defeat
      wait(40)
      $battle_var.result_defeat = true     
      @enemy_sprite_dresseur = Sprite.new
      @enemy_sprite_dresseur.z = @z_level + 15     
      @enemy_sprite_dresseur.bitmap = RPG::Cache.battler(@start_enemy_battler, 0)     
      @enemy_sprite_dresseur.x = 444
      @enemy_sprite_dresseur.y = 32     
      loop do
        @enemy_sprite_dresseur.x -= 10
        Graphics.update
        if @enemy_sprite_dresseur.x <= 210
          break
        end
      end
     
      $pokemon_party.money /= 2       
      wait_hit
      list_string = Trainer_Info.string_defeat(@trainer_id)
      draw_text(list_string)
      wait_hit
     
      draw_text("#{Player.name} n'a pas plus de","Pokémon en forme !")       
      wait_hit     
      draw_text("#{Player.name} donne la moitié de son argent" , "au vainqueur.")     
      wait_hit     
      draw_text("... ... ... ...")     
      wait_hit     
      draw_text("#{Player.name} est hors-jeu !")
     
      wait(40)     
      if not(@lose)
        if $game_variables[1] == 0
          print("Réglez votre point de retour !")
        else
          $game_map.setup($game_variables[1])
          $game_map.display_x = $game_variables[2]
          $game_map.display_y = $game_variables[3]
          $game_player.moveto($game_variables[2], $game_variables[3])
        end
        $game_temp.common_event_id = 2
      end
      $game_temp.map_bgm = $game_map.bgm
      end_battle(2)
    end
   
  end
 
end

Posté par Pαlвσlѕку le 1 Sep - 18:09 (2012)
Vérifie si l'interrupteur n°15 est activé, s'il ne l'est pas il faut l'activer.

Posté par Rey' le 1 Sep - 18:43 (2012)
Je viens de l'activer, toujours le même bug... =/
D'ailleurs, je sais pas si ça a un rapport avec le combat, mais chez moi, l'interrupteur 15 s'appelle Temps marche.

Posté par Pαlвσlѕку le 1 Sep - 19:41 (2012)
Je pensais que le problème venait du fait que le système J/N était désactivé, puisque le background des combats dépend de l'heure de la journée.
Mais visiblement le problème ne vient pas de là.

Je continue de chercher mais pour l'instant j'ai rien d'autre à proposer.

Si quelqu'un a une idée réfléchie qui n'a pas été proposé sur ce topic, qu'il la pose.

Posté par Rey' le 1 Sep - 20:21 (2012)
D'accord, merci tout de même. Je vais continuer à faire des tests de mon côté, et je vous tiens au courant.

Posté par Elric le 1 Sep - 20:54 (2012)
Je ne sais pas si ça a déjà été proposé mais essaie ça :

Mets un event en Demarrage Auto avec les instructions suivantes :

Modifier les propriétés de la carte : Arrière-plan de combat:'nom_de_ton_fond'
Supprimer cet événement

Là ça devrait normalement marcher.

Posté par Rey' le 1 Sep - 20:57 (2012)
Ça ne marche toujours pas... Sinon, est t'il possible que cela vienne de mon event en lui même ? Si oui, je vous fais un screen de mon event.

Posté par Aaron le 2 Sep - 00:06 (2012)
envois un screen de ton event je crois savoir d'ou viens ton probleme.

Posté par Rey' le 2 Sep - 12:27 (2012)
D'accord, le voici en quatre images. L'interrupteur AU SECOURS est un interrupteur s'activant suite à un évènement au contact du héros.
Screen 1

Screen 2

Screen 3

Screen 4

Posté par Pαlвσlѕку le 2 Sep - 19:26 (2012)
Je te propose une dernière solution, c'est de m'envoyer par MP ton projet, pour que je regarde d'où vient le problème.
Ne compile pas ton projet, sinon je ne pourrais pas lire les données.

Je m'engage à ne pas diffuser le contenu de ton projet, ni à l'utiliser.

Posté par Aaron le 2 Sep - 20:46 (2012)
Tu as dis que tu avais réglé quel fond de combat sur ton tilset?



Edit:si tu le souhaite je peux jeter un cou d'oeil ton projet aussi pour voir d l'interrieur se serra peut-etre plus pratique.

Je m'engage aussi a ne rien dévoiler du contenu de se projet.

Posté par Rey' le 2 Sep - 21:44 (2012)
D'accord, je m'occupe de cela des demains, encore merci, vous aurez le MP demain.

Posté par Pαlвσlѕку le 3 Sep - 12:59 (2012)
Je viens de regarder ce que tu viens de m'envoyer et pour l'instant ça semble être le système J/N qui soit en cause.
Tu sembles avoir tout bien programmé (BDD, event) donc pour l'instant je n'arrive pas à trouver d'où vient le problème.

Comme je l'ai dis précédemment, le background et le système J/N sont liés.
Or bien que le système de temps réel fonctionne, pour une raison inexplicable pour le moment, le système de ton (qui doit changer le ton de l'écran en fonction de l'heure de la journée) ne fonctionne pas comme il devrait.
L'interrupteur n°14 est activé mais le système ne tourne pas, et c'est ce système qui dit au script des combats quand on est dans la journée en stockant cette information dans la variable n°37 qui doit normalement contenir "jour", "nuit", etc. contient 0 dans notre cas ce qui pose un véritable problème dans les combats.

Je continue à chercher, mais cet après-midi je ne peux pas.
J'essaierais de regarder ça ce soir à nouveau.

Posté par Rey' le 9 Nov - 14:16 (2012)
EDIT VISIBLE : Problème réglé grâce à l'aide d'Opale. La solution est en fait simple.

Dans le script Pokémon_Battle_Trainer, à la ligne 195, juste avant Graphics.freeze, rajoutez ça !

if @battleback_name == nil
@battleback_name = $game_map.battleback_name + ".png"
@ground_name = "ground" + $game_map.battleback_name + ".png"
@ground_name_actor = "ground" + $game_map.battleback_name + "_actor.png"
end

Voilà, je remercie en tout cas Opale de son aide et Palbolsky pour avoir essayé de m'aider ! Imbécile heureux

Edit : Ce bout de code ne règle cependant pas le bug du système Jour/Nuit.