Night.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker

RM 95
RM 2000/2003
RM XP
RM VX/VX Ace
RM MV/MZ

Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Sorties: Star Trek: Glorious Wolf - (...) / Sorties: Dread Mac Farlane - episode 3 / News: Plein d'images cools créées par (...) / Sorties: Star Trek: Glorious Wolf - (...) / Jeux: Final Fantasy 2.0 / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

234 connectés actuellement

29185573 visiteurs
depuis l'ouverture

5838 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

Alex d'Or

Offgame

Le Comptoir Du clickeur

Tashiroworld

Tous nos partenaires

Devenir
partenaire



forums

Index du forum > Entraide > [RESOLU] [VX] Ajouter des terrain tag à VX


Gari - posté le 05/03/2021 à 19:27:55 (5899 messages postés) - honor

❤ 0

Domaine concerné: Script
Logiciel utilisé: VX
Hello,

Par défaut, il n'y a pas de terrain sur VX, et donc pas de quoi les détecter, ce qui est assez emmerdant pour gérer les tutos à event qui les utilisent, surtout que c'est quand même bien pratique. Malheureusement, impossible de trouver un script émulant ça sur le web, malgré les quatre ans de vie du log (2008-2012).

Je quémande donc votre aide pour m'aider à faire ça, car on va pas se mentir, je sais pas ce que je fais ni où je vais.

Voilà l'ébauche difficilement créée, il manque encore pas mal de choses mais l'idée est là :
- une liste des tile ayant un terrain tag (différent de 0 donc). Faudrait que ça ne crash pas si on appelle un tile inexistant ou un tile non répertorié).
- un moyen d'obtenir ces terrains pour un event et le joueur, si possible sous ces deux formes :
$game_player.terrain_tag(x,y)
$game_event.id[id].terrain_tag(x,y) (je suis même pas sûr que ce soit possible ce genre de chose)

Tout le script est sans doute faux. :/

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Insérez le numéro du tile dont vous avez besoin et numéro du terrain.
class Game_Map
  def terrain_tag
    {
    1: "1", 2: "1", 5: "1", 7: "1", 3584: "2"
    }
  end
end
 
  # Obtenir l'id du terrain quand un héros événement est sur un tile.
class Game_Character
  def get_terrain_tag
    terrain_tag = @event.id(@event.x,@event.y)
  end
end
 
class Game_Player
   def get_terrain_tag
    $game_map.terrain_tag(@x, @y)
  end
end




timtrack - posté le 13/03/2021 à 19:31:35 (653 messages postés)

❤ 1

Plop

*Dépoussière son logiciel rm VX*

J'ai corrigé ta proposition de script, le module permet d'associer un tag à toutes les tiles B à E.
Je ne suis pas sûr d'avoir compris ton intention dans Game_Character donc j'ai préféré ne pas toucher à la fonction.

J'ai testé l'appel de $game_player.get_terrain_tag dans un projet vierge

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
module Terrain_Tag
  #Si le terrain n'est pas répertorié dans TERRAIN_TAG, on renvoie cette valeur :
  DEFAULT_TAG = "0"
  
  #On associe à chaque id de terrain un tag
  TERRAIN_TAG = {
    1 => "1", 
    2 => "1", 
    5 => "1", 
    7 => "1", 
    3584 => "2"
  }
end
 
class Game_Map
  include Terrain_Tag
  
 #renvoie l'id de terrain de la couche B à E (0 si rien n'est rempli)
  def get_tile_id(x,y)
    #la couche 2 correspond à B-E, 
    #la couche 1 m'est inconnue, 
    #la couche 0 correspond aux tileset A, dont les ids changent pour les tile dynamiques
    for i in [2] #1,0]
      tile_id = @map.data[x, y, i]
      return 0 if tile_id == nil #il semblerait que cela puisse arriver
      return tile_id
    end
  end
  
  #renvoie le tag associé à l'id de terrain
  def terrain_tag(x,y)
    ret = TERRAIN_TAG[get_tile_id(x,y)]
    return DEFAULT_TAG if ret == nil
    return ret
  end
end
 
  # Obtenir l'id du terrain quand un héros événement est sur un tile.
class Game_Character
  def get_terrain_tag
    terrain_tag = @event.id(@event.x,@event.y)
  end
end
 
class Game_Player
   def get_terrain_tag
    $game_map.terrain_tag(@x, @y)
  end
end



edit : corrigé des commentaires

Projet actuel


Gari - posté le 13/03/2021 à 19:54:54 (5899 messages postés) - honor

❤ 0

Merci beaucoup !

Je ne sais pas scripter donc pas sûr que Game_Character soit utile, l'idée était surtout de pouvoir obtenir l'id de terrain pour le joueur (player) ou l'événement (character).
Je vais essayer ça tout de suite ^^

VICTOIRE !


Gari - posté le 14/03/2021 à 11:30:02 (5899 messages postés) - honor

❤ 0

Presque.
En gros j'ai utilisé une variable du jeu pour stocker le numéro du terrain dans une variable du jeu, et j'ai mis une condition pour que quand le héros se trouve sur le tile de terrain différent de 0, une musique se déclenche.
Sauf que la variable vaut 0, et le test se déclenche. Elle vaut autre chose, le test ne se déclenche pas.

Je vais voir si le fix interpreter est bien intégré sur la version payante de VX.
Une idée ?


timtrack - posté le 14/03/2021 à 13:08:03 (653 messages postés)

❤ 1

Plop

Ce n'est pas un bug du l'interpréteur (sur la version steam).

Dans le script plus haut, on a mis les tag comme chaîne de caractères ("1" n'est pas le nombre 1 mais la chaîne de caractères avec pour contenu "1").

Pour corriger cela, il suffit de remplacer les valeurs des tags par des nombres comme suit :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
module Terrain_Tag
  #Si le terrain n'est pas répertorié dans TERRAIN_TAG, on renvoie cette valeur :
  DEFAULT_TAG = 0
  
  #On associe à chaque id de terrain un tag
  TERRAIN_TAG = {
    1 => 1, 
    2 => 1, 
    5 => 1, 
    7 => 1, 
    3584 => 2
  }
end
 



Projet actuel


Gari - posté le 14/03/2021 à 13:32:11 (5899 messages postés) - honor

❤ 0

Merci !

J'ai contacté les deux autres personnes qui m'avaient pointé vers des solutions, j'aimerais juste savoir si pour toi c'est ok si le crédit n'est pas nécessaire en cas d'utilisation (ce sera sur la description du script) ?

J'ai réussi à trouver un moyen de récupérer l'id de tile en jeu sans avoir à créer un template avec tous les numéros de tile.
Pour l'utiliser en condition pour le moment, j'ai juste réussi à stocker l'id dans une variable du jeu, j'arrive pas à l'utiliser directement en condition (par exemple : $game_player.get_terrain_tag = 2 ou $game_player.get_terrain_tag[2]), après j'ai pas essayé de condition avec la modification sans guillemets, peut-être que ça le fera.
Il me reste plus qu'à le tester/faire fonctionner avec une ligne du style $game_character.event_id[id].get_terrain_tag et ce sera bon. ^^


timtrack - posté le 14/03/2021 à 14:34:11 (653 messages postés)

❤ 1

Plop

Je suis assez curieux de comment tu as fait sans le format template si tu peux détailler je suis chaud. :)

Pas de crédit nécessaire t'inquiète.

Pour le coup j'ai testé avec et sans les guillemets sur un event qui fait :
-$game_variables[1] = $game_player.get_terrain_tag (appel de script)
-teste si $game_variables[1] == 0

Avec les guillemets la variable sera différente de 0 (le nombre, car une chaine de caractère non vide n'est pas nulle), sans les guillemets le test va renvoyer vrai sur les tiles non répertoriés par le script, ce qui est le résultat attendu.

Citation:

$game_player.get_terrain_tag = 2


Si tu veux tester une égalité via appel de script, tu devrais faire :
$game_player.get_terrain_tag == 2

== teste l'égalité
!= la différence
>=, <=, >, < pour les comparaisons
= c'est l'affectation, donc ça a probablement du te renvoyer une erreur

Ah et en temps normal a[k] c'est la case d'indice k du tableau a.

Tu peux utiliser ça et même enlever la classe Game_Player :

Portion de code : Tout sélectionner

1
2
3
4
5
class Game_Character
   def get_terrain_tag
    $game_map.terrain_tag(@x, @y)
  end
end



Pour synthétiser, ce code fonctionne :

Spoiler (cliquez pour afficher)



tu peux faire les commandes suivante :

Portion de code : Tout sélectionner

1
2
3
4
5
6
#pour recupérer le tag de la case des protagonistes
$game_player.get_terrain_tag
#pour recupérer le tag de la case de l'event id de la map courante
$game_map.events[id].get_terrain_tag
#pour recupérer le tag de la case x,y sur la map courante
$game_map.terrain_tag(x, y)



Projet actuel


Gari - posté le 14/03/2021 à 14:45:35 (5899 messages postés) - honor

❤ 0

Cool !

Pour récupérer l'id d'un tile qu'on veut utiliser comme terrain :
Sur une map test, on map une région avec le tile voulu, et en jeu on fait un appel de script :
$game_variables[id de la variable] = $game_map.get_tile_id($game_player.x , $game_player.y)
(l'appel de script est nul et casse un peu le code, mais ça ressemble à ça :

Citation:

$game_variables[id de la variable] =
$game_map.get_tile_id($game_player.x ,
$game_player.y)


Et on le montre avec un message ou F9 en test.

Le double égal forcément (comme quoi même en l'ayant tous les jours sous les yeux ça tilte pas).


timtrack - posté le 14/03/2021 à 14:58:43 (653 messages postés)

❤ 0

Plop

Okay, fair enough, si tu trouves l'écriture trop lourde tu peux rajouter une méthode pour récupérer le tile id depuis l'event/le joueur :

Portion de code : Tout sélectionner

1
2
3
4
#dans la classe Game_Character
  def get_tile_id
    $game_map.get_tile_id(@x, @y)
  end



Et après plus qu'à faire

Portion de code : Tout sélectionner

1
$game_variables[id] = $game_player.get_tile_id



Après c'est juste de la simplification d'écriture, ça apporte rien.

Projet actuel


Gari - posté le 14/03/2021 à 15:01:27 (5899 messages postés) - honor

❤ 1

Ok !
Je le rajouterai à part pour ceux qui souhaitent l'utiliser souvent, mais normalement pour cet appel de script c'est juste pour les tests.

Merci beaucoup en tout cas !

Et voilà un exemple sadique de pourquoi les terrains, c'est bien :
image

Index du forum > Entraide > [RESOLU] [VX] Ajouter des terrain tag à VX

repondre up

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts/Plugins | Ressources graphiques / sonores | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers