Sujet n°2708
Posté par Sphinx le 26 Jan - 12:46 (2009)
Titre : Intégrer l'évolution en cours de match
Ce tutoriel a pour objet de vous permettre d'intégrer l'évolution en cours de combat. Ainsi, les pokémons de vos joueurs pourront évoluer à chaque fin de manche !

Mais procédons dans l'ordre :

Dans le script Pokemon_Battle_Trainer :
remplacez :
Code:
        wait_hit
        if alive > 1

par :
Code:
        if alive > 1
          wait_hit
        else
          wait(40)
        end
        if alive > 1


puis ajoutez :
Code:
      # Evolution
      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
     
      # Reset evolve_checklist & have_fought
      @evolve_checklist = []


à la place de :
Code:
      # Reset have_fought


ensuite, inversez ces deux lignes :
Code:
      exp_battle
      $battle_var.result_win = true

vous devriez obtenir :
Code:
      $battle_var.result_win = true
       exp_battle



Dans le script Pokemon_Evolve :
remplacez :
Code:
      Graphics.freeze

par :
Code:
      if $battle_var.in_battle
        wait(40)
      else
        Graphics.freeze
      end



Dans le script Pokemon_Skill_Learn :
remplacez :
Code:
        if decisionbis #Oui
          draw_text(name + " n'a pas appris",skill+".")
          wait_hit
          @done = true
          @return_data = false
          return

par :
Code:
        if decisionbis #Oui
          draw_text(name + " n'a pas appris",skill+".")
          wait(40)
          draw_text("","")
          @done = true
          @return_data = false
          return


Voilou =) Désormais, vous devriez avoir une parfaite évolution en cours de match ! =)

Posté par Sphinx le 26 Jan - 19:00 (2009)
ah oui jvois d'où ca vient :

Sphinx a écrit:
Dans le script Pokemon_Battle_Trainer :
remplacez :
Code:
        wait_hit
        if alive > 1

par :
Code:
        if alive > 1
          wait_hit
        else
          wait(40)
        end


En fait, c'est remplacer :
Code:
        wait_hitif alive > 1

par :
Code:
        if alive > 1
          wait_hit
        else
          wait(40)
        end
        if alive > 1


>> ptite erreur lors de la rédaction du tuto ^_^" je corrige Clin d'œil foireux

PS : testé & fonctionnel chez moi =)

Edit :
autre correction :
Remplacer :
Code:
      if $battle_var.result_win

par :
Code:
      if not($battle_var.result_win)


PS : premier post corrigé

Posté par Pαlвσlѕку le 26 Jan - 19:05 (2009)
J'ai pas testé mais venant de toi je pense qu'il n'y a pas de problème. On verra ce qu'en pense les autres membres du forum.

Posté par PiVa le 26 Jan - 21:20 (2009)
Je testerai quand j'ai le temps  Imbécile heureux (Mercredi) J'ai hâte de voir  Bouche extensiblek:

Posté par Pαlвσlѕку le 26 Jan - 21:21 (2009)
Moi je test que ce que je compte intégrer car après c'est la galère pour tout remettre comme avant.

Posté par Angi-MK le 27 Jan - 04:00 (2009)

Voilà ce que ça donne, il y a un décalage, sinon ça marche Petit saligaud mal élevé

Posté par Pαlвσlѕку le 27 Jan - 07:27 (2009)
Sphinx n'a pas encore trouver la solution au problème.

Posté par Angi-MK le 27 Jan - 15:51 (2009)
Ouais mais a parement KROSK oui, j'aime poster les images, c'est plus explicite Imbécile heureux

Posté par Sphinx le 28 Jan - 19:25 (2009)
apparemment Clin d'œil foireux Quelqu'un a testé ?

Posté par Angi-MK le 2 Fév - 18:25 (2009)
Le pokemon est maintenant décalé vers le bas Yeux motorisés
Sinon j'ai noté un petit problème, un POKEMON au-dessus de son niveau d'évolution,
exemple un SALAMECHE niveau 25, aura droit à l'anim d'évolution à chaque expérience reçu, et plus à chaque niveau !
Imaginé le truc chia** si on veux avoir un SALAMECHE niveau 100 Yeux motorisés

Posté par Pαlвσlѕку le 2 Fév - 18:37 (2009)
Bon je vais testé et je vais voir ce que j'en pense. J'en profiterai pour corriger le bug du back, si j'y arrive.

Posté par Sphinx le 2 Fév - 18:43 (2009)
ah ? A chaque gain d'expérience ? ^_^' J'ai du mal placer le code, je corrige ca de suite Clin d'œil foireux

Posté par Pαlвσlѕку le 2 Fév - 19:00 (2009)
Sphinx, dans le premier morceau à remplacer, il y a ça :
Code:
     @actor_sprite.bitmap = RPG::Cache.battler(@actor.battler_back, 0)


Il faut rajouter ces deux lignes en dessous, pour que le back ne soit plus décalé.

Code:
     @actor_sprite.bitmap = RPG::Cache.battler(@actor.battler_back, 0)
     @actor_sprite.ox = @actor_sprite.bitmap.width / 2
     @actor_sprite.oy = @actor_sprite.bitmap.height


Vérifie si c'est bon (chez moi c'est OK), puis si c'est bon, corrige dans ton tuto.

Posté par Sphinx le 4 Fév - 12:27 (2009)
Clin d'œil foireux ok jv vérif ca, et jte dis après (mais déjà je finis avec 4G+ lol)

edit : je confirme, ca marche nickel pour reptincel (un des pokés qui buggait) donc je viens de mettre à jour le 1° post =)

Posté par Néva le 12 Juin - 16:30 (2009)
Le script marche très bien, bravo à ceux qui l'ont fait, cela rend le jeu bien plus vivant ! Imbécile heureux  Par contre, lorsqu'un Pokémon évolue en combat et que l'on revient sur la carte, la musique reste celle du combat et n'est pas celle de la carte. Quelqu'un saurait corriger cela ? Merci !

Posté par Sphinx le 20 Juil - 14:45 (2009)
Maj - correction du bug du pokémon qui évolue même quand il devrait pas. Pour ceux qui n'avaient pas encore installé ce système mais qui sont intéressés, cf le premier post (il est corrigé) pour l'installation


Pour les autres, voici la correction

Dans Pokemon_Battle_Trainer

Remplacez toute la méthode exp_battle par ca :

Code
Code:
    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 and not($pokemon_capturer)
          actor.skill_effect_reset
          actor.reset_stat_stage
          actor.add_bonus(@enemy.battle_list)
          draw_text(actor.given_name + " a gagné", amount.to_s + " points d'expérience!")
          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
        else
          $pokemon_capturer = false
        end
      end
     
      @actor_status.refresh
      Graphics.update
     
      # Evolution
      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
     
      # Reset evolve_checklist & have_fought
      @evolve_checklist = []
      $battle_var.have_fought = [@actor.party_index]
     
    end

Posté par Néva le 26 Juil - 11:06 (2009)
Merci Sphinx pour ton aide, on a fait quelques modifications pour adapter ton script à la version de psp que l'on a et qui n'est pas PS4G+. ça marche très bien maintenant ! Imbécile heureux

Posté par D4 le 9 Aoû - 12:52 (2009)
Géant ce script merci ! :D
ps : le pokemon s'évolue comme prévu mais l'image de départ reste.
J'ai testé avec carapuce, la procedure dévolution a marché mais à la reprise du combat l'image de carabaff est resté en carapuce =)

Posté par Skelettor le 1 Sep - 10:25 (2010)
J'ai un problème svp  
j'ai insérer le script mais quand mon pokémon évolue dans le combat il reste un salamèche et ne devient pas reptincel

Posté par Dark_Ray le 14 Juin - 17:46 (2012)
Désolé pour ce nécro-post :/
Mais j'ai installé ce script mais tout comme les deux du dessus, après l'évolution, le sprite du Pokémon reste celui d'avant son évolution ce qui est assez problématique car seul son nom change.


Est-ce qu'il y aurait un moyen d'actualiser le sprite juste après l'évolution avec un morceau de script à ajouter ?


Merci d'avance

Posté par Nuri Yuri le 14 Juin - 17:48 (2012)
Il faut rafraichir le sprite du pokémon, regarde le code qui le crée et utilise la partie qui change le bitmap pour changer l'apparence après évolution.

Posté par Dark_Ray le 14 Juin - 18:34 (2012)
Je suis pas très fort niveau Ruby ^^"
Et tout ce qui est bitmaps etc ... j'ai du mal.




Je ne vois pas du tout quoi modifier, j'ai tenté en mettant un peu partout @actor_sprite.update mais ça change rien


Tu pourrais m'aider davantage ?

Posté par Nuri Yuri le 14 Juin - 19:01 (2012)
Appelle la méthode "update_sprite" après l'évolution plutot que @actor_sprite.update.

Posté par Dark_Ray le 14 Juin - 20:17 (2012)
Merci ça marche parfaitement !
J'ai juste eu à ajouter :


update_sprite
@actor_status.refresh



Après :


scene = Pokemon_Evolve.new(actor, info, @z_level + 200)
scene.main



Maintenant le nom et l'image sont changés dès que la scène d'évolution est passée et pas 1 tour après


Encore merci pour ton aide

Posté par Angi-MK le 23 Juin - 04:45 (2012)
Ah bah je l'avais oublié celui-là (bien qu'il me revienne souvent).
Merci Clin d'œil foireux

Posté par Over le 29 Juin - 11:39 (2012)
à la fin du script rajouter un arrêt de musique ?
La musique de la map devrais se lancer lorsque l'on quitte le combat non ?

Posté par Dark_Ray le 4 Juil - 11:51 (2012)
Non justement y a un bug qui fait que si le Pokémon évolue en plein cours de combat, une fois de retour sur la map la musique jouée est celle du combat en question à cause de cette ligne-ci dans Pokemon_Evolve :

$game_temp.map_bgm = $game_system.playing_bgm

Je l'ai désactivé en mettant un "#"
Et sur toutes mes maps j'ai mis un évènement en démarrage automatique qui "mémorise l'effet sonore/musique joué" et qui se supprime tout de suite après

Et depuis le bug est résolu Clin d'œil foireux