Sujet n°10685
Posté par Girakoth le 1 Déc - 22:44 (2011)
Titre : Mettre un script sur une tile
Bonjour!

J'aimerai savoir si il est possible d'assigner un script à toutes les mêmes tiles plus rapidement, par exemple dans mon cas j'aimerai mettre un script "Coup d'boule" sur tous les arbres.

Merci d'avance.

Posté par Nuri Yuri le 1 Déc - 23:02 (2011)
Évènement commun puis tu détectes l'id du tile qui se trouve en face du héros. ($game_map.map_data[x,y,couche] je suis pas sur.)

Posté par Girakoth le 4 Déc - 01:09 (2011)
Ok merci je vais essayer de voir ça.

Posté par Sphinx le 4 Déc - 10:22 (2011)
L'inconvénient de ce type d'évents, c'est qu'il t'en faudra un par tileset qui sera utilisé pour ces arbres.

De plus, la commande de Yuri semble attendre 3 valeurs. Pour les coordonnées X & Y, ce ne serait pas dur à calculer celles de la case devant toi. Mais pour la couche, soit tous tes arbres devraient être mappés sur la même, soit tester les 3 couches (temps d'exécution 3 fois plus long, forcément)

Enfin, au moindre changement dans ton tileset, il faudra penser à remodifier cet évent.

=> Pour moi, le plus simple serait de faire comme Krosk avec les rochers à exploser ou les arbustes à couper : un évent placé à l'endroit où le joueur peut utiliser COUD'BOULE

Posté par Nuri Yuri le 4 Déc - 10:58 (2011)
Ma commande demande un algo compliqué dans l'évent en PP ou l'évent commun (si tileset identique sur toute les maps extérieures) mais elle demande beaucoup moins d'évents. Donc le choix c'est la contrainte ou 100 évents en plus par map. (En prenant en compte ce que font 100 évents sur une map en jeu au niveau du FPS)
Au passage la bonne commande est $game_map.data[x,y,couche].

Édit : Je t'ai coder ce qu'il faut pour que ça fonctionne.
Code:
class Interpreter
  def verif_coud_boule
    return false unless @var_coud_boule
    if $pokemon_party.got_skill("COUP D'BOULE") and not($on_map_call)
      x=$game_player.x
      y=$game_player.y
      d=$game_player.direction
      x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
      y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
      id_tile1=$game_map.data[x,y,0]
      id_tile2=$game_map.data[x,y,1]
      id_tile3=$game_map.data[x,y,2]
      if @var_coud_boule.include?(id_tile1) or @var_coud_boule.include?(id_tile2) or
        @var_coud_boule.include?(id_tile3)
        @message_waiting=true
        $game_temp.message_proc=Proc.new { @message_waiting = false }
        $game_temp.message_text="Voulez vous utiliser Coup D'Boule ?"
        return true
      end
    end
    return false
  end
  def update_coud_boule(var1,var2,lvmi,lvmx,mlch)
    return false unless @var_coud_boule_pk
    r=rand(@var_coud_boule_pk.length+mlch)
    if r < @var_coud_boule_pk.length
      $game_variables[var1.to_i]=@var_coud_boule_pk[r]
      r=lvmi+rand(lvmx-lvmi)
      $game_variables[var2.to_i]=r
      return true
    end
    return false
  end
  def set_coud_boule_tiles(*tiles)
    @var_coud_boule=tiles
  end
  def set_coud_boule_pokemon(*ids)
    @var_coud_boule_pk=ids
  end
end

Tu fais ton évent de map en Processur parallèle de cette façon :
Screen

Je t'explique les commandes :
set_coud_boule_tiles sert à indiquer au script les tiles des arbres tu y met donc les id de tile des arbres dedans et il n'y a pas de limite d'arguments. (A toi de les chercher...)
La commande set_coud_boule_pokemon sert à indiquer les id de pokémons que tu peux rencontrer en utilisant coud'boule.
verif_coud_boule Vérifie le tile devant toi et si tu peux utiliser coud'boule.
update_coud_boule(var1,var2,lvmi,lvmx,mlch) choisi un pokémon dans la liste donné par set_coud_boule_pokemon et un niveau aléatoirement.
Dans les paramètres tu as : var1 qui est l'id de la variable qui contiendra l'id du pokémon choisi, var2 qui contiendra le niveau du pokémon choisi.
lvmi qui est le niveau minimum choisi, lvmx est le niveau maximum choisi.
mlch est ce qui est ajouté au random pour faire en sorte à ce que tu ne rencontre pas de pokémon parfois, si tu met 0 tu rencontrera forcément un pokémon à mois que tu n'ai pas mis les ids dans le tableau.
Voilà ça utilise un seul et unique évènement.

Posté par Zopo le 4 Déc - 21:12 (2011)
Ou, je propose un évent commun avec une condition sur le tag terrain x.
Ensuite tu paramètre tes arbres à ce tag terrain

Le script à utiliser dans la condition est :
Code:

 $game_player.terrain_tag == 4 and player_front_terrain_tag == 4