Sujet n°10996
Posté par Angi-MK le 22 Fév - 08:39 (2012)
Titre : Forcer la forme d'un ZARBI
Salut les gens,

Voilà, je me prends la tête sur un truc tout simple.
Je veux faire, par exemple, apparaître seulement le ZARBI P (qui correspond à la forme 16)
Je précise donc la forme dans ma commande demarrer_combat. 42

Malheureusement, la forme du ZARBI est toujours tiré aléatoirement parmi ses 28 formes... :?
Comment puis-je forcer la forme 16?

Posté par Nuri Yuri le 22 Fév - 11:26 (2012)
Cherche def call_battle_wild(id_data, level, shiny = false, ia = false).
Va à la ligne : pokemon = Pokemon.new(id, level, shiny) et ajoute après :
pokemon.form=$game_variables[id] if $game_variables[id] != 0

Après tu remplace l'id par la variable que tu veux en tant que forme de ton Pokémon et tu lui met une autre valeur que 0 pour qu'elle agisse. (Ca fonctionnera pour tous les pokémons.) N'oublie pas après de la remettre à 0.

Posté par Angi-MK le 22 Fév - 18:36 (2012)
Ah, merci!
J'étais parti bien trop bas dans le bout de code des ZARBI.
Merci de ton aide :+1:

Posté par Sphinx le 22 Fév - 21:13 (2012)
euh non y a plus simple x')

Ajoute ca dans un nouveau screen au dessus de Main :
Code:
class Interpreter
  def demarrer_combat_param()
    if hash["ID"] == nil or hash["NV"] == nil
      return
    end
    pokemon = Pokemon.new(hash["ID"], hash["NV"], hash["SHINY"])
    if hash["GR"] != nil and ["F", "M", "I"].include?(hash["GR"])
      pokemon.set_gender(hash["GR"])
    end
    if hash["FORM"] != nil
      if hash["FORM"].type == Fixnum
        pokemon.form = hash["FORM"]
      elsif hash["FORM"].type == Array
        pokemon.form = hash["FORM"][rand(hash["FORM"].size)]
      end
    end
    if hash["MOVE"] != nil and hash["MOVE"].type == Array
      i = 0
      for skill in hash["MOVE"]
        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
    if hash["OBJ"] != nil
      if hash["OBJ"].type == Fixnum
        pokemon.item_hold = hash["OBJ"]
      elsif hash["OBJ"].type == String
        pokemon.item_hold = Item.id(hash["OBJ"])
      end
    end
    if hash["STAT"] != nil and hash["STAT"].type == Array and
        hash["STAT"].length == 6
      pokemon.dv_modifier(hash["STAT"])
    end
    if hash["BALL"] != nil and hash["BALL"].type == String
      pokemon.ball_data = $item.data($item.id(hash["BALL"])["ball"])
    end
    if hash["TRAINER_ID"] != nil and hash["TRAINER_ID"].type == Fixnum
      pokemon.trainer_id = hash["TRAINER_ID"]
    end
    if hash["TRAINER_NAME"] != nil and hash["TRAINER_NAME"].type == String
      pokemon.trainer_id = hash["TRAINER_NAME"]
    end
    $scene = Pokemon_Battle_Wild.new($pokemon_party, pokemon, ia)
  end
end


Pour l'utilisation, dans une insertion de script appelle la fonction :
Code:
demarrer_combat_param(hash)

Extrait du manuel sur comment ajouter un pokémon avec des paramètres personnalisés a écrit:


Ou hash est de la forme :

{ "ID" => A, "NV" => B, "OBJ" => C, "MOVE" => ["ATK1", "ATK2", "ATK3", "ATK4"], "STAT" => [HP, AT, DF, VI, AS, DS], "GR" => D, "SHINY" => E, "FORM" => F }


A est à remplacer par l'ID du Pokémon, ou le nom du Pokémon, en majuscules, entre guillemets (ID obligatoire)
B est à remplacer par le niveau du Pokémon (NV obligatoire)
C est à remplacer par l'ID de l'objet tenu (optionnel)
D est à remplacer par "F" pour une Femelle, "M" pour un Male, ou "I" pour un genre Indéfini. (optionnel)
E est à remplacer par true ou false en fonction du caractère Shiny. (optionnel)
F est à remplacer par le numéro de la forme du Pokémon (attribut .form) (optionnel)
"ATKx" est à remplacer par le nom de la x-ème attaque du Pokémon, en majuscule et veuillez conserver les guillemets autour du nom. (optionnel)
HP, AT, DF, VI, AS, DS sont à remplacer par les DV du Pokémon, compris entre 0 (faible) et 31 (fort) (optionnel)

Si vous spécifiez le moveset du Pokémon, l'idéal est d'écrire complètement le moveset (spécifier les 4 attaques) pour éviter les mauvaises surprises. Vous pouvez spécifier des attaques que le Pokémon n'apprend pas habituellement.
Tappez "AUCUN" à la place de "ATKx" si vous voulez effacer l'attaque à la place numéro x.
Si vous ne voulez pas changer l'attaque à la place x, écrivez nil à la place de "ATKx" (nil sans les guillemets).

Exemple : Je veux spécifier au 3ème Pokémon de l'équipe adverse, que le Pokémon est au niveau 40, et je veux régler son moveset de la sorte : LANCE-FLAMME, SEISME, VOL, et je ne veux pas changer sa dernière attaque ( = ca sera une attaque qu'il apprend naturellement). J'inscris donc à la place de N3, le morceau suivant :

{ "NV" => 40, "MOVE" => ["LANCE-FLAMME", "SEISME", "VOL", nil] }

Les DV sont des facteurs qui indiquent la puissance du Pokémon, compris entre 0 et 31. Un Pokémon ayant 31 dans tous ses DV est le plus fort de tous les pokémons du même type. Si vous spécifiez les DV, vous devez spécifier TOUS les DV.
HP: DV point de vie
AT: DV attaque
DF: DV défense
VI: DV vitesse
AS: DV attaque spéciale
DS: DV défense spéciale
Si vous voulez laisser une part de hasard sur un certain DV, tappez rand(32) à la place du DV.


=> demarrer_combat_param s'utilise en effet comme ajouter_pokemon_param :p

Posté par Nuri Yuri le 22 Fév - 21:57 (2012)
Bah Sphinx, il y a la version fonctionnel en évent natif (ou presque) et la version fonctionnelle entièrement en script. Ta version permet de toute régler (ou presque) d'un coup :p
Au passage. Machin.type est une très mauvaise habitude c'est à ne jamais utiliser, ça a été déprécié et en ruby 1.9.3 @objet.type provoque une erreur du type NoMethodError.
(Erreur: undefined method `type' for []:Array) Je te conseil d'utiliser à la place @objet.class qui fait exactement la même chose.

Posté par Sphinx le 22 Fév - 22:03 (2012)
C'est une fusion des méthodes ajouter_pokemon_param - pour la gestion des paramètres - et demarrer_combat - pour le lancement du combat - ^^

Ceci dit, RMXP n'est pas en Ruby 1.9.3 me semble :p

Posté par Nuri Yuri le 22 Fév - 22:15 (2012)
Non RMXP est en ruby 1.8.6 ce qui fait que ton code ne bug pas dans la mesure ou tu reste sur RMXP.
(Si tu change bah c'est foutu 42)

[edit by Sphinx histoire d'arrêter de flooder ce topic] : certes mais ici on est sur PSP by RMXP/Krosk 42