[Résolu] Partage des points d'expérience

9 Réponses • 466 Vues

Salut !
Dans PSP, lorsque le joueur change de Pokémon en même temps que l'adversaire, les points d'expérience sont partagés entre les deux Pokémon alors qu'ils ne devraient pas. J'aimerais savoir comment corriger cela, pour faire en sorte que seul le Pokémon qui a combattu gagne des points d’expérience ?

Explication plus détaillée si vous n'avez pas compris :
Le dresseur adverse possède un Carapuce que je mets K.O. avec mon Pikachu. Pikachu gagne des points d'expérience.
Le dresseur adverse envoie ensuite un Bulbizarre. Mais d'abord, le message s'affiche : "Voulez-vous changer de Pokémon ?"
Je réponds "oui" et j'envoie Salamèche.
Salamèche met K.O. Bulbizarre.
Dans PSP, les points d'expérience sont partagés entre Salamèche et Pikachu. Normalement, seul Salamèche devrait gagner des points d'expérience puisqu'il est le seul à avoir combattu Bulbizarre.

Je suis sous PSP 0.8, mais j'avais le même problème sous PSP 0.7.
Je pense qu'il faut juste modifier le script, mais comme je n'y connais rien en script, je demande votre aide. Et puis ça va sûrement servir à pas mal de monde.

Merci ! :)

« Modifié: 05 juin 2016, 13:40:35 par Symbioss »

Ota

Programmeur

Sur PSP 0.9 pas de souci de partage d'exp :3 récupère le script dessus et ça devra fonctionné correctement .^^
Ah c'est cool que ça ait été corrigé dans PSP 0.9. Est-ce que quelqu'un peut me dire comment effectuer cette correction manuellement dans PSP0.8 svp ?

Ota

Programmeur

Tu copie Battle core 1 si je dit pas de bêtise.
T'es sûr ? Je croyais que les points d'expérience étaient gérés dans le script Pokémon (vu que c'est celui là qu'on m'a dit de modifier quand j'ai eu un problème avec le multi exp).

Tu ne sais pas exactement quelles lignes il faut remplacer par quoi, par hasard ? Sinon ça m'oblige à télécharger PSP 0.9, sachant qu'il y a des scripts que j'ai déjà modifié, etc... bref, c'est compliqué. C'est plus simple si j'attends que quelqu'un me dise précisément ce qu'il faut changer. ^^

Ota

Programmeur

Oui je pense
EDIT : En fait on s'en fout de ce que j'ai écrit là ^^
J'ai tenté ta technique Otaku, malheureusement ça ne marche pas. ^^

J'ai remplacé le script Battle_Core 1 par celui de PSP 0.9.2 (et seulement ce script).

Dès que je lance une attaque, le jeu plante et me met ce message :



Voici le script en question :
 #------------------------------------------------------------  
  # Vérifications préliminaires et ordre d'action
  #------------------------------------------------------------
  def statistic_refresh
  @actor.statistic_refresh
  @enemy.statistic_refresh
  end
 
  def statistic_refresh_modif
  @actor.statistic_refresh_modif
  @enemy.statistic_refresh_modif
  end
 
  #Recherche de priorité
  def turn_order
  # Comparaison des priorités
  if @actor_skill == nil or @enemy_skill == nil
  @strike_first = true
  return
  end
 
  if @actor_action != 1 # Attaque
  @strike_first = false
  return
  end
 
  if @actor_skill.priority > @enemy_skill.priority
  @strike_first = true
  elsif @actor_skill.priority < @enemy_skill.priority
  @strike_first = false
  else
  # En cas d'égalité de priorité
  if @actor.effect_list.include?(0xE1) and not @enemy.effect_list.include?(0xE1)
  if @enemy.spd > @actor.spd*2
  @strike_first = false
  elsif @enemy.spd < @actor.spd*2
  @strike_first = true
  else
  @strike_first = rand(2)>0 ? true : false
  end
  elsif @enemy.effect_list.include?(0xE1) and not @actor.effect_list.include?(0xE1)
  if @enemy.spd*2 > @actor.spd
  @strike_first = false
  elsif @enemy.spd*2 < @actor.spd
  @strike_first = true
  else
  @strike_first = rand(2)>0 ? true : false
  end
  else
  if @enemy.spd > @actor.spd
  @strike_first = false
  elsif @enemy.spd < @actor.spd
  @strike_first = true
  else
  @strike_first = rand(2)>0 ? true : false
  end
  end
  if @actor.effect_list.include?(0x102) # Distorsion
  @strike_first = !@strike_first
  end
  end
  end

La ligne 469 est la suivante :
      @actor.statistic_refresh_modif

Sachant que ce script ne plante pas dans PSP 0.9.2, ça vient du fait que je n'ai copié que ce script et qu'il en manque d'autres (je suppose que quelque chose doit être "défini" dans un autre script pour utiliser celui là).

Pas d'inquiétude, j'ai pu remettre l'ancien script et ça ne bug plus.

EDIT : En fait, après avoir testé sur PSP 0.9.2, le soucis dont je parle n'a pas été résolu.

« Modifié: 24 mai 2016, 16:47:21 par Symbioss »

EDIT : En fait on s'en fout de ce que j'ai écrit là ^^
J'ai tenté ta technique Otaku, malheureusement ça ne marche pas. ^^

J'ai remplacé le script Battle_Core 1 par celui de PSP 0.9.2 (et seulement ce script).

Dès que je lance une attaque, le jeu plante et me met ce message :



Voici le script en question :
 #------------------------------------------------------------  
  # Vérifications préliminaires et ordre d'action
  #------------------------------------------------------------
  def statistic_refresh
  @actor.statistic_refresh
  @enemy.statistic_refresh
  end
 
  def statistic_refresh_modif
  @actor.statistic_refresh_modif
  @enemy.statistic_refresh_modif
  end
 
  #Recherche de priorité
  def turn_order
  # Comparaison des priorités
  if @actor_skill == nil or @enemy_skill == nil
  @strike_first = true
  return
  end
 
  if @actor_action != 1 # Attaque
  @strike_first = false
  return
  end
 
  if @actor_skill.priority > @enemy_skill.priority
  @strike_first = true
  elsif @actor_skill.priority < @enemy_skill.priority
  @strike_first = false
  else
  # En cas d'égalité de priorité
  if @actor.effect_list.include?(0xE1) and not @enemy.effect_list.include?(0xE1)
  if @enemy.spd > @actor.spd*2
  @strike_first = false
  elsif @enemy.spd < @actor.spd*2
  @strike_first = true
  else
  @strike_first = rand(2)>0 ? true : false
  end
  elsif @enemy.effect_list.include?(0xE1) and not @actor.effect_list.include?(0xE1)
  if @enemy.spd*2 > @actor.spd
  @strike_first = false
  elsif @enemy.spd*2 < @actor.spd
  @strike_first = true
  else
  @strike_first = rand(2)>0 ? true : false
  end
  else
  if @enemy.spd > @actor.spd
  @strike_first = false
  elsif @enemy.spd < @actor.spd
  @strike_first = true
  else
  @strike_first = rand(2)>0 ? true : false
  end
  end
  if @actor.effect_list.include?(0x102) # Distorsion
  @strike_first = !@strike_first
  end
  end
  end

La ligne 469 est la suivante :
      @actor.statistic_refresh_modif

Sachant que ce script ne plante pas dans PSP 0.9.2, ça vient du fait que je n'ai copié que ce script et qu'il en manque d'autres (je suppose que quelque chose doit être "défini" dans un autre script pour utiliser celui là).

Pas d'inquiétude, j'ai pu remettre l'ancien script et ça ne bug plus.

EDIT : En fait, après avoir testé sur PSP 0.9.2, le soucis dont je parle n'a pas été résolu.


Bonjour,

Je confirmes que l'EXP est partagée.

Quelqu'un a une idée de comment corriger ce soucis ?
Salut ! :)

Un anonyme m'a laissé un message et m'a autorisé à partager.

Dans le script Pokemon_Battle_Trainer, peu après la ligne 400, trouvez ce code :
        wait_hit
  if alive > 1
  draw_text("Voulez-vous appeler", "un autre Pokémon?")
  decision = false
  if draw_choice
  $battle_var.window_index = @action_window.index
  scene = Pokemon_Party_Menu.new(0)
  scene.main
  return_data = scene.return_data
  decision = true
  Graphics.transition
  end

Juste avant le "end", ajoutez cette ligne :
            $battle_var.have_fought.delete(@actor.party_index)

J'ai testé, ça marche.
Je confirmes ! :)

Un grand merci à cet anonyme !

There was an error while thanking
Thanking...