Sujet n°11141
Posté par rgf le 17 Mar - 13:07 (2012)
Titre : Plus de 8 pokemons par type de terrain [4G+]
Bonjour, j'aimerais faire en sorte qu'il y ait plus de 8 pokemons par type de terrain, ou par tileset pour une map. En fait, pour donner un exemple concret je voudrais que dans les hautes herbes on puisse avoir un plus grand panel de pokemons rencontrés.
Et je voulais également savoir si il y a moyen de poser des conditions à la rencontre de certains pokemons, par exemple si je met la possibilité de rencontrer des herbizarres sur la route 1, d'un niveau environnant 16, y'a-t-il moyen d'en rencontrer uniquement si on a le premier badge ?

Posté par Nuri Yuri le 17 Mar - 13:40 (2012)
Met deux groupes de monstres avec le même tag et ça devrait fonctionner.
Pour ton autre problème ça ne peut être résolu qu'en script certainement, j'ai pas trouvé de commande de gestion des groupes dynamique dans les évents...

Posté par rgf le 17 Mar - 13:41 (2012)
A vrai dire j'ai déjà essayé de mettre deux groupes de monstres avec le même tag sur la même map, mais cela ne pioche toujours que dans un seul groupe.

Posté par Nuri Yuri le 17 Mar - 14:05 (2012)
En effet. PSP prend le dernier groupe ayant le tag car le tableau random encounter est trié par Tag.
Sinon pour ton autre problème les switches sont la solution met le switch du premier badge pour le groupe de tes pokémon que tu ne veut voir qu'après, je regarde pour le problème des 8 pokémons.


Édit
Voilà la solution pour avoir plus de 8 Pokémons par Tag :
Cherche ceci dans Scene_Map :
Code:
if (switch_id == 0 or $game_switches[switch_id]) and tag > 0
  $random_encounter[tag] = $data_encounter[list_id][2]

Et remplace par :
Code:
if (switch_id == 0 or $game_switches[switch_id]) and tag > 0
        if $random_encounter[tag]
          $random_encounter[tag] += $data_encounter[list_id][2]
        else
          $random_encounter[tag] = $data_encounter[list_id][2]
        end
      end

Posté par Sphinx le 17 Mar - 17:21 (2012)
=> Ta correction est juste, Nagato, mais je pense qu'il y aura un soucis avec les pourcentages Imbécile heureux Enfin il faudra tenir compte du fait que les différents pourcentages des différents groupes vont s'ajouter, et que seuls les 100 premiers % seront pris en compte ^^"

Posté par Nuri Yuri le 17 Mar - 17:31 (2012)
Ce tableau ne contient que les ids et niveau des pokémons rien de plus (sauf le 5 au début de la commande eval du groupe) alors faudra que tu m'explique un peu plus tout ça...

Edit, ok je viens de comprendre la chose, j'ai un peu rouillé à force de ne pas maker, je vais voir pour ça.

Posté par Sphinx le 17 Mar - 17:44 (2012)
Nop, dans la partie scriptée, sur chaque ligne (excepté la première) tu peux définir soit :

un nombre (le niveau)
un tableau à 2 éléments (niveau et pourcentage)

cf http://krosk.free.fr/manuel/manuel.htm#C43 pour plus de détails (un admin qui connait pas le manuel, ah bah bravo 42)

Posté par Nuri Yuri le 17 Mar - 18:22 (2012)
J'ai corrigé ce problème par un moyenne de tout :
Code:
    #Correction des % de rencontre
    1.step(7) do |tag|
      next unless $random_encounter[tag]
      en=0 #Ecarts de niveau
      cn=0 #Nombres de groupes présents
      na=[0] #Nouveau tableau
      $random_encounter[tag].each_index do |i|
        if $random_encounter[tag][i].class==Fixnum
          #C'est un écart de nv et ça indique la présence d'un groupe
          en+=$random_encounter[tag][i]
          cn+=1
        else
          #C'est un pokémon est c'est ajouté dans le nouveau tableau
          #L'array est cloné pour ne pas modifier le data brut.
          na.push($random_encounter[tag][i].clone)
        end
      end
      cn=1 if cn < 1
      na[0]=en/cn #Moyenne de l'écart de niveau
      #Modification des chances de rencontre en fonction du nombre de groupes présents
      na.each_index do |i|
        na[i][2]/=cn if na[i].class==Array and na[i][2]
      end
      $random_encounter[tag]=na
    end

Ce code est à placer après la correction et avant la fin de la méthode.

Posté par rgf le 17 Mar - 21:59 (2012)
Au final ça me donne  
Code:
 def update_encounter
    # Fréquence
    $random_encounter[0] = (2880 / (16.0 * $game_map.encounter_step)).to_i
    # Liste
    for list_id in $game_map.encounter_list
      tag = $data_encounter[list_id][0]
      switch_id = $data_encounter[list_id][3]
      # Vérification de switch
      if (switch_id == 0 or $game_switches[switch_id]) and tag > 0  
        $random_encounter[tag] = $data_encounter[list_id][2]  
      end
  end
 
          #Correction des % de rencontre  
        1.step(7) do |tag|  
          next unless $random_encounter[tag]  
          en=0 #Ecarts de niveau  
          cn=0 #Nombres de groupes présents  
          na=[0] #Nouveau tableau  
          $random_encounter[tag].each_index do |i|   
            if $random_encounter[tag][i].class==Fixnum   
              #C'est un écart de nv et ça indique la présence d'un groupe  
              en+=$random_encounter[tag][i]  
              cn+=1  
            else  
              #C'est un pokémon est c'est ajouté dans le nouveau tableau  
              #L'array est cloné pour ne pas modifier le data brut.  
              na.push($random_encounter[tag][i].clone)  
            end  
          end  
          cn=1 if cn < 1  
          na[0]=en/cn #Moyenne de l'écart de niveau  
          #Modification des chances de rencontre en fonction du nombre de groupes présents  
          na.each_index do |i|  
            na[i][2]/=cn if na[i].class==Array and na[i][2]  
          end  
          $random_encounter[tag]=na  
        end  
       

C'est bien ça ?
Avec cela je ne peux toujours pas outrepasser la limite de 8 pokemons par zone.

Posté par Nuri Yuri le 17 Mar - 22:09 (2012)
Code:
  def update_encounter
    # Fréquence
    $random_encounter[0] = (2880 / (16.0 * $game_map.encounter_step)).to_i
    # Liste
    for list_id in $game_map.encounter_list
      tag = $data_encounter[list_id][0]
      switch_id = $data_encounter[list_id][3]
      # Vérification de switch
      if (switch_id == 0 or $game_switches[switch_id]) and tag > 0
        if $random_encounter[tag]
          $random_encounter[tag] += $data_encounter[list_id][2]
        else
          $random_encounter[tag] = $data_encounter[list_id][2]
        end
      end
    end
    #Correction des % de rencontre
    1.step(7) do |tag|
      next unless $random_encounter[tag]
      en=0 #Ecarts de niveau
      cn=0 #Nombres de groupes présents
      na=[0] #Nouveau tableau
      $random_encounter[tag].each_index do |i|
        if $random_encounter[tag][i].class==Fixnum
          #C'est un écart de nv et ça indique la présence d'un groupe
          en+=$random_encounter[tag][i]
          cn+=1
        else
          #C'est un pokémon est c'est ajouté dans le nouveau tableau
          #L'array est cloné pour ne pas modifier le data brut.
          na.push($random_encounter[tag][i].clone)
        end
      end
      cn=1 if cn < 1
      na[0]=en/cn #Moyenne de l'écart de niveau
      #Modification des chances de rencontre en fonction du nombre de groupes présents
      na.each_index do |i|
        na[i][2]/=cn if na[i].class==Array and na[i][2]
      end
      $random_encounter[tag]=na
    end
  end

Plutôt. Chez moi ça fonctionne correctement.

Posté par rgf le 17 Mar - 22:17 (2012)
Spoiler


Là j'ai 8 pokemons et la flèche d'ajout est devenue indisponible, que dois-je faire ?

Posté par Nuri Yuri le 17 Mar - 22:21 (2012)
Tu créé un autre groupe avec les autres Pokémon puis tu mets tes deux groupes ça fait au totale 16 Pokémon.

Posté par rgf le 17 Mar - 22:42 (2012)
Ok, et comment j'utilise les pourcentages ?

Posté par Nuri Yuri le 17 Mar - 23:00 (2012)
C'est la rareté locale, vas voir dans le manuel.

Posté par rgf le 18 Mar - 12:07 (2012)
Nan je demandais juste si elle fonctionnait toujours de la même manière avec plusieurs groupe. Sinon, on peut créer plus de deux groupes n'est-ce pas, c'est devenu illimité ?

Posté par Nuri Yuri le 18 Mar - 12:18 (2012)
Non ce n'est pas illimité, si tu met cent groupes sur la Map t'as 0% de chance de rencontrer les pokémons des groupes.
C'est limité à quelques groupes, 3 à 4 maximum en même temps (tu peux entre mettre 8 si les autres ont besoins d'un interrupteur pour être actif.)

Posté par rgf le 18 Mar - 17:17 (2012)
Oui mais si j'en mets 8, dont certains qui ne sont actifs que si certains interrupteurs sont ON, au bout d'un moment, quand tous les interrupteurs seront ON, il y aura bel et bien 8 groupes en même temps, cela ne pose pas de problème ?

Posté par Nuri Yuri le 18 Mar - 17:31 (2012)
Bah, les chances sont divisé par 8 donc si t'as des Pokémon avec 5% de chance il se retrouveront avec 0%.

Posté par rgf le 18 Mar - 17:37 (2012)
Je ne comprends pas, comment cela se déroule, on choisit d'abord aléatoirement dans l'un des groupes, puis aléatoirement l'un des pokemons du groupe ? Dans ce cas peut-on affecter des pourcentages différents à chaque groupes ?
Ou bien on rassemble tous les pokemons de chaque groupe et on choisit aléatoirement dans le tas ? Et dans ce cas, la rareté locale peut de toute façon différer de 100 non ? Donc on pourrait même avoir 13 groupes non ?

Posté par Nuri Yuri le 18 Mar - 17:38 (2012)
Tout est mis dans un seul groupe avec une division de la rareté locale par le nombre de groupes présents.

Posté par rgf le 18 Mar - 17:39 (2012)
Donc on peut bien mettre une rareté locale supérieure à 8 pour tous les pokemons, même si il y en a plus de 100, non ?

Posté par Nuri Yuri le 18 Mar - 17:43 (2012)
N'espère pas non plus mettre les 493 pokémon sur la même Map -_-'

Posté par rgf le 18 Mar - 17:45 (2012)
Je n'en ai pas l'intention, mais comme je veux mettre différents degrés de puissances...

Posté par Nuri Yuri le 18 Mar - 17:46 (2012)
Dans ce cas met un switche pour chaque groupe histoire de ne pas tout faire apparaître d'un coup et tu jongle en fonction de ce que tu veux faire avec.

Posté par rgf le 18 Mar - 17:51 (2012)
Mon but au final est que si on a les 8 badges, tous les groupes apparaissent.

Posté par Nuri Yuri le 18 Mar - 17:56 (2012)
Ok mais fais un peu attention...

Posté par rgf le 19 Mar - 21:16 (2012)
Et je dois remplacer les mêmes choses pour PSP DS ?

Posté par Nuri Yuri le 19 Mar - 21:17 (2012)
Si elle sont similaires oui, dans le cas contraire, non.

Posté par rgf le 24 Mar - 17:00 (2012)
Cela marche bien pour PSP DS