Partagez
Aller en bas
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Condition tileset

le Mar 10 Mar 2015 - 20:45
Re coucou, j'ai une question : comment sont définis les tilesets dans les scripts ? J'aimerais faire des conditions du genre "Si le héros marche sur ce type de tileset, alors...".


Dernière édition par Nérylis le Mar 17 Mar 2015 - 19:59, édité 3 fois
avatar
UserRoot
Membre

Nombre de messages : 81
Distinction : aucune
Date d'inscription : 17/12/2014

Résolu Re: Condition tileset

le Mar 10 Mar 2015 - 21:42
Mets des événements non ? ^^
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Condition tileset

le Mar 10 Mar 2015 - 22:50
Oui sauf que quand tu as des centaines de cases avec le tileset en question, ça commence à faire beaucoup. Wink
avatar
Spytje
Administrateur

Nombre de messages : 5899
Localisation : La terre
Distinction : Spiraliste [Korn']
Forestia : Projet du mois juillet 2014
Papy Pulkigrat [Yama']
Date d'inscription : 16/03/2008

Résolu Re: Condition tileset

le Mer 11 Mar 2015 - 0:14
As-tu essayé avec ça ? :


avatar
Lyse
Membre

Nombre de messages : 373
Distinction : aucune
Date d'inscription : 03/05/2014

Résolu Re: Condition tileset

le Mer 11 Mar 2015 - 0:19
Hum fouine du côté des scripts.

C'est quoi ta condition ? Faire des bruits de pas ? Ou c'est plus compliqué que ça ?
avatar
Spytje
Administrateur

Nombre de messages : 5899
Localisation : La terre
Distinction : Spiraliste [Korn']
Forestia : Projet du mois juillet 2014
Papy Pulkigrat [Yama']
Date d'inscription : 16/03/2008

Résolu Re: Condition tileset

le Mer 11 Mar 2015 - 1:00
Pardon mal lu la question.

Peux tu expliquer ce que tu veux faire exactement ? Il y a pas mal de moyen pour vérifier sur quelle case se trouve un perso...

Et des moyens d'interagir en conséquence également.



@Lyse a écrit:Hum

T'as un rhume ? Smile
avatar
Lyse
Membre

Nombre de messages : 373
Distinction : aucune
Date d'inscription : 03/05/2014

Résolu Re: Condition tileset

le Mer 11 Mar 2015 - 2:01
Non même pas

C'une habitude c'tout

Et puis tu fais du Hors Sujet Mr le Modérateur
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Condition tileset

le Mer 11 Mar 2015 - 6:19
Ma condition, c'est "Si le héros marche sur ce genre de tileset...".

A la base, je voulais mettre ce genre de condition avec mon système de lévitation. Par exemple, si le héros passe sur la lave, s'il n'a pas l'effet lévitation, GameOver direct.^^

A une époque, je voulais aussi que le fait de se trouver sur un tileset particulier modifie les valeurs de dégâts de skill. Dit comme ça, ça peut paraître compliqué mais j'arrive à modifier ces données avec des interrupteurs. Mais là aussi je bloque sur "comment mettre une condition avec un tileset".
avatar
Lyse
Membre

Nombre de messages : 373
Distinction : aucune
Date d'inscription : 03/05/2014

Résolu Re: Condition tileset

le Mer 11 Mar 2015 - 6:51
Hum ok, je crois que j'ai mal pigé.

Par contre, vois du côté d'un script qui gère les bruits de pas en fonctions des tile. Me souvient plus du nom, désolée.

Par contre, vu qu'il reconnait les tiles, tu pourrais te servir de ça ...
avatar
UserRoot
Membre

Nombre de messages : 81
Distinction : aucune
Date d'inscription : 17/12/2014

Résolu Re: Condition tileset

le Mer 11 Mar 2015 - 8:14
Bonjour,

Y'a deux solutions, soit tu te serts du script de Victor qui permet d'émettre un son depuis une certaine zone (Exemple, tu colorie ton tileset d'herbe de la zone 10 et tu lui attribues un son

Le script: https://victorscripts.wordpress.com/rpg-maker-vx-ace/field-scripts/step-sound/

Soit il existe un script pour ce que tu veux faire:

http://galvs-scripts.com/galvs-region-effects/

avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Condition tileset

le Mer 11 Mar 2015 - 21:00
J'ai essayé le second script, effectivement, ça pourrait me convenir. Juste un problème : comment on fait pour que les effets soient joués sur d'autres maps ? J'ai créé une nouvelle map avec la démo mais impossible d'avoir les effets.
avatar
UserRoot
Membre

Nombre de messages : 81
Distinction : aucune
Date d'inscription : 17/12/2014

Résolu Re: Condition tileset

le Mer 11 Mar 2015 - 21:03
Un événements communs il me semble
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Condition tileset

le Mer 11 Mar 2015 - 21:07
Il ne me semble pas, ce sont juste les mouvements lors du passage sur certaines cases.
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Condition tileset

le Dim 15 Mar 2015 - 23:52
Petit up
avatar
vincent26
Membre

Nombre de messages : 766
Age : 23
Localisation : baume de transit le village paumé
Distinction : aucune
Date d'inscription : 17/08/2010

Résolu Re: Condition tileset

le Lun 16 Mar 2015 - 0:30
Dans le script Spriteset_Map, il y a la variable @tilemap qui contient les donnée des tile de la map

@tilemap.map_data te retourne un tableau a 3 dimension (cf la doc de RM) qui contient les id des tiles
ces id sont super bizarre (je me souvient plus trop le calcul a faire pour obtenir le véritable type de tile ^^)

Car en faite chaque tile pour les tile A1 et A2 Peuvent avoir 47 forme :
Spoiler:

Pour les tile A3 et A4 16 forme :
Spoiler:

Et pour les autre (A5,B,C,D,E) c'est unique

Du coup Le chiffre que tu récupère il faut le convertir pour savoir auquel de ces tile il correspond
Voir :
http://www.rpgmakervx-fr.com/t15494-resoluaide-scriptage
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Condition tileset

le Lun 16 Mar 2015 - 8:26
Euh... parlons simple ! xDDD

Si j'ai bien compris, il faut utiliser la commande "Récupérer les informations", c'est bien ça ?

Admettons maintenant que je veuille actionner un interrupteur lorsque mon héros marche sur un tileset type neige, je vais devoir créer un processus parallèle. N'ayant pas envie de créer 50000 évênements sur ma WorldMap, comment je fais pour récupérer la bonne information ? J'ai le choix entre Numéro de terrain (?), ID de l'évênement (ça ne m'aidera pas je pense), ID du tile couches 1, 2 ou 3 (je pencherai pour couche 3, sous le héros ?) ou ID de la zone (Zones de combat ?).
avatar
vincent26
Membre

Nombre de messages : 766
Age : 23
Localisation : baume de transit le village paumé
Distinction : aucune
Date d'inscription : 17/08/2010

Résolu Re: Condition tileset

le Lun 16 Mar 2015 - 12:31
ben en fait c'est assez complexe le mieux serait un petit script il faut récupérer l'id du tile et avec les formule que je t'ai donner identifier a quelle tile véritablement ça correspond (et il me semble que c'est la 1er couche qui est sous le héros)

avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Condition tileset

le Lun 16 Mar 2015 - 13:09
Est-ce qu'on peut faire un exemple sur un Nouveau projet ? Je pense que ça sera plus facile pour comprendre concrètement la méthode à appliquer.
avatar
vincent26
Membre

Nombre de messages : 766
Age : 23
Localisation : baume de transit le village paumé
Distinction : aucune
Date d'inscription : 17/08/2010

Résolu Re: Condition tileset

le Lun 16 Mar 2015 - 20:09
Tient voila un bout de script qui te permettre de détecter l'id du tile sur lequel ce trouve ton perso (le test n'ai fait que pour la couche 1)

Code:

#~ Pour tester j'ai ajouter l'affichage des donnée du tableaux (voir description en bas)
#~ lorsque tu appuye sur F5 in game. Choisi les valeur que tu veut

class Scene_Map
 
  alias update_old update
  def update
    update_old
    if Input.trigger?(:F5)
      puts $game_map.tile_id($game_player.x, $game_player.y, 0)
      puts tile_test($game_map.tile_id($game_player.x, $game_player.y, 0)).to_s
    end
  end
 
  #Ajustement des donnée des tiles retourne un tableau :
  # [Tileset_ID,[Tile_id,Type_id]]
  #Tileset_ID est l'id du tile (0 pour A1,1 pour A2,2 pour A3,3 pour A4,4 pour A5,5 Pour B,6 Pour C,7 pour D,8 pour E)
  #Tile_id est l'id du type de terrain (chemin_sable,chemin_caillou ...) A toi de voir ce que tu veut
  #Type_id est la forme du tile (de 0 a 46 pour les tile A1 et A2,de 0 a 15 pour les tile A3 et A4 et 0 pour les autre)
 
  def tile_test(id)
    if id < 1024
      if (id/256).floor == 0
        return [5,[id%256,0]]#B
      elsif (id/256).to_i == 1
        return [6,[id%256,0]]#C
      elsif (id/256).to_i == 2
        return [7,[id%256,0]]#D
      else
        return [8,[id%256,0]] #E
      end
    elsif id < 1664
      #[4,[id%128,0]].to_s
      return [4,[(id-1024)%128,0]]#A5
    elsif id < 2816
      return [0,[(id-1664)/48,(id-1664)%48]]#A1#[0,[((id-512)%768)/48,((id-512)%768)-((((id-512)%768)/48).to_i*48)]]#A1
    elsif id < 4352
      return [1,[(id-2816)/48,(id-2816)%48]]#A2#[1,[((id-1280)%1536)/48,((id-1280)%1536)-((((id-1280)%1536)/48).to_i*48)]]#A2
    elsif id < 5888
      return [2,[(id-4352)/48,(id-4352)%48]]#A3#[2,[(((id-512)%1536)/48+16)%32,((id-512)%1536)-((((id-512)%1536)/48).to_i*48)]]#A3
    else
      return [3,[(id-5888)/48,((id-5888)%48)]]#A4
    end
  end
end

Alors il faut que tu appuie sur F5 pour afficher un nombre et un tableau dans la console.
Le nombre est l'id du tile sur lequel tu te trouve
Le tableau contient 3 information qui sont déduite de l'id du tile grâce a la def tile_test(id)
elle contient l'id du Tilesets global (A1,A2...) , l'id global du tile (ce que tu veux récuperer veritablement)
et l'id de la forme du tile (entre 0 et 43 ou 0 et 15 comme je te l'avais expliquer plus haut)

Tu fait donc ton repérage avec ce bout de script pour savoir quelle ID de tile tu veut tester
puis tu modifie un peut ce script pour faire des test et des conséquence au tile sur lequel ce trouve ton perso
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Condition tileset

le Mar 17 Mar 2015 - 9:44
J'ai essayé ton script mais il ne se passe rien quand j'appuie sur F5. Mais ne t'embête pas, j'ai trouvé la solution à mon problème de façon plus simple.

En final, c'est dans un cas comme celui-là qu'il faut utiliser la commande "Récupérer les informations". Je n'avais pas compris jusqu'ici à quoi elle servait, maintenant je sais.^^

Ce que je fais, c'est que je récupére une information dans une variable par rapport aux coordonnées X, Y de mon héros (ce qui me fait utiliser 3 variables). Une fois cette information récupérée, il me suffit d'appliquer mon évênement comme d'habitude. Dans mon cas, je cherchais à activer un interrupteur ou à le désactiver lorsque mon héros se trouvait sur un tileset de type neige afin de modifier la valeur de dégâts des skills de feu et de glace.

La difficulté rencontrée a été de bien comprendre quel type d'information on pouvait stocker. Petit récapitulatif, ça pourra servir à ceux qui auraient le même genre de problème :

- Numéro de terrain : c'est le numéro, entre 0 et 7, que vous pouvez assigner manuellement dans la BDD des tilesets, dernière option, à certains types de cases (et c'est ce que je vais utiliser pour solutionner mon problème).
- ID de l'évênement : comme son nom l'indique, pour récupérer le numéro de l'ID d'un évênement bien que je ne vois pas dans quel cas on pourrait utiliser ce type d'information.
- ID du tile (couche 1) : les fameux ID dont tu parlais précédemment, au même niveau que le héros il me semble (j'avais commencé à utiliser ce type d'information avant de découvrir que les numéros de terrain étaient beaucoup plus simples).
- ID du tile (couche 2) : idem mais au-dessus du héros il me semble.
- ID du tile (couche 3) : idem mais en-dessous du héros il me semble.
- ID de la zone : il s'agit bien des zones de combat qu'on peut attribuer manuellement sur chaque map (touche F7).

Voici donc la solution que je retiendrai pour mon problème :

Spoiler:

Spoiler:

Je précise aussi que j'utilise les scripts de menu de Yanfly avec notamment le fameux écran Débug qui me permet de voir et de modifier en jeu les valeurs de chaque interrupteur et variable. C'est très pratique pour ce genre de test.

Merci en tout cas pour votre aide.
avatar
vincent26
Membre

Nombre de messages : 766
Age : 23
Localisation : baume de transit le village paumé
Distinction : aucune
Date d'inscription : 17/08/2010

Résolu Re: Condition tileset

le Mar 17 Mar 2015 - 15:10
Ha ouai ^^ j'avais jamais utiliser cette fonctionnalité XD est ça va faire 2 ans que j'ai pas toucher au Event
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Condition tileset

le Mar 17 Mar 2015 - 17:39
Je viens de rencontrer un petit souci lié aux scripts du Mode 7. Quand je mets des numéros de terrain à certains tilesets, je reçois une erreur du script principal du Mode 7 lorsque je monte dans l'aéronef :



Le problème ne se pose pas sans le Mode 7.

Voici le projet en question : http://www.mediafire.com/download/bdi8m2e19bdos8h/%5BVXA%5DMode7_Ace_V1.8_Rotation_V1%282%29.exe
avatar
vincent26
Membre

Nombre de messages : 766
Age : 23
Localisation : baume de transit le village paumé
Distinction : aucune
Date d'inscription : 17/08/2010

Résolu Re: Condition tileset

le Mar 17 Mar 2015 - 18:31
Ligne 115 enlève les element du tableaux Wink
avatar
Nérylis
Membre

Nombre de messages : 605
Age : 29
Localisation : Seine Maritime
Distinction : aucune
Date d'inscription : 23/11/2014

Résolu Re: Condition tileset

le Mar 17 Mar 2015 - 19:59
Je n'y avais jamais fait attention à ces éléments. Merci Vincent ! Smile
Contenu sponsorisé

Résolu Re: Condition tileset

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum