La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 01/11/2024 23:39:33


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 23/04/2006 15:18:50 Sujet du message : [Problème] Changement de TLChangeAreaGroundTile

Bonjour à tous !

J'ai trouvé ce script très intéressant mais j'aimerais modifier certaines choses. Ce que j'ai fais ne fonctionne pas, donc je fais appel à vous.

Le script en question permet de générer une zone d'eau, de lave, d'herbe sur toute la surface de la zone. (cf le spoiler). Le script est à mettre sur le onHeatBeat d'un objet. Il faut juste ajouter à l'objet deux variables (en faisant clique droit sur l'objet et "Variables") :

AxeZ, float, 1,3
tileset_type, int, 401

Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.
Spoiler :
#include "x2_inc_toollib"
// X2_TL_GROUNDTILE_ICE = 426;
// X2_TL_GROUNDTILE_WATER = 401;
// X2_TL_GROUNDTILE_GRASS = 402;
// X2_TL_GROUNDTILE_LAVA_FOUNTAIN = 349;
// X2_TL_GROUNDTILE_LAVA = 350;
// X2_TL_GROUNDTILE_CAVEFLOOR = 406; origine : +0.0
// X2_TL_GROUNDTILE_SEWER_WATER = 461; origine : +2.0

int GetAreaXAxis(object oArea)
{
location locTile;
int iX = 0;
int iY = 0;
vector vTile = Vector(0.0, 0.0, 0.0);

for (iX = 0; iX < 32; ++iX)
{
vTile.x = IntToFloat(iX);
locTile = Location(oArea, vTile, 0.0);
int iRes = GetTileMainLight1Color(locTile);
if (iRes > 32 || iRes < 0)
return(iX);
}

return 32;
}

int GetAreaYAxis(object oArea)
{
location locTile;
int iX = 0;
int iY = 0;
vector vTile = Vector(0.0, 0.0, 0.0);

for (iY = 0; iY < 32; ++iY)
{
vTile.y = IntToFloat(iY);
locTile = Location(oArea, vTile, 0.0);
int iRes = GetTileMainLight1Color(locTile);
if (iRes > 32 || iRes < 0)
return(iY);
}

return 32;
}

void main()
{
if(GetLocalInt(OBJECT_SELF, "tileset_ok") != 1)
{
object oArea = GetArea(OBJECT_SELF);
int iXAxis = GetAreaXAxis(oArea);
int iYAxis = GetAreaYAxis(oArea);
float fAxeZ = GetLocalFloat(OBJECT_SELF, "AxeZ");

// Lecture variable sur object invisible pour definir le type de tile
int iTile = GetLocalInt(OBJECT_SELF, "tileset_type");

TLChangeAreaGroundTiles(oArea, iTile , iXAxis, iYAxis, fAxeZ);
SetLocalInt(OBJECT_SELF, "tileset_ok", 1);
}
}



Bien, à présent, ce que je souhaite faire c'est qu'en utilisant l'objet en question, le tileset change et devienne de la glace.
Or, j'ai fais sur un "onUsed" :

SetLocalInt(OBJECT_SELF, "tileset_type", 426);

Malheureusement ça n'a rien changé...

Pire : si je détruit l'objet, l'eau reste là... n'est-elle pas sensée disparraître ?

Merci de vos lumières !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 23/04/2006 15:40:57 Sujet du message :

Il y a un système pour que le heartbeat ne se déclanche qu'une fois, donc sur ton OnUsed tu ne vas pas activer le changement de tiles.

Tu devrais rajouter directement un TLChangeAreaGroundTiles à partir de ton OnUsed avec un TLResetAreaGroundTiles avant, ça ne remplace pas les effets, ça rajouterait par dessus le précédent.

En fait tout dépend de ce que tu veux faire, et du nombre de tiles que tu as à traiter, et dans combien de zones.

Parcequ'une méthode qui peut être bien, c'est d'à la place d'utiliser le TLCHange machin, qui est très très très bourrin (il s'en fout de savoir si il y a de la lave ou pas sur le tile, il rajoute le placeable et l'effet, ce qui fait que sur une zone 32*32, tu as 1024 objets invisibles d'un coup et 1024 effets visuels), donc à la place tu pôurrais si ça ne concerne que peu de tiles, placer toi même des objets invisibles destinés à recevoir les effets, et de les traiter par des UserDefinedEvents pour changer les effets visuels en fonction de l'activation de ton placeable.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 23/04/2006 16:49:24 Sujet du message :

Hum, j'ai du mal à voir ce que tu veux dire.
J'ai mis le script en lui-même sur le onUserDefined : ça semble annuler totalement l'effet.

Pour le OnUsed, j'ai tenté de mettre un TLResetAreaGroundTiles au bon endroit, ça compile bien, mais ça n'enlève pas l'effet (qui ne peut être que sur le onHeartBeat vu que sur le onUserDefined ça ne fonctionne pas).


Autrement, pour préciser mon idée, elle est simple, voici la situation :

Des aventuriers arrivent devant une étendue d'eau qu'ils ne peuvent traverser car l'eau est bien dangereuse. Pour réussir à passer, il faut réussir à activer un objet qui permettrait de transformer l'eau... en glace.


Voilà l'idée, si tu as des meilleures suggestions sur comment s'y prendre, je suis toute ouïe
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 24/04/2006 17:02:58 Sujet du message :

Tu peux te passer de l'objet avec le HB à mon avis, si c'est pour une seule zone, fais des scripts utilisant les TLmachins en rentrant directement les dimensions de ta zone dedans.

J'ai pas saisi si c'était pour remplacer de l'eau déjà existante, ou si l'eau elle même est rajoutée par un TLChangeTiles.

Si l'eau est là au départ, alors utilise un TLChangeAreaTiles pour placer la glace à la place lors de l'activation (avec une variable pour être sure de le faire qu'une fois). Quand tu veux faire fondre la glace, utilise le ResetMachin. Si il n'y en a pas, place la à la première entrée dans la zone, puis vire là avant de mettre la glace. J'ai essayé vite fait ça marche comme ça.

Un truc que j'ai pas compris, c'est le zOffset à 1.3, j'ai essayé, on a la glace quasiment aux épaules (enfin c'est rigolo Wink )
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Djezebel
Héros
Inscrit le: 29 Sep 2005
Messages: 252
Répondre en citant
Posté le : 25/04/2006 11:12:19 Sujet du message :


Citation :
Un truc que j'ai pas compris, c'est le zOffset à 1.3, j'ai essayé, on a la glace quasiment aux épaules (enfin c'est rigolo Wink )
Ce n'est pas de ma faute si tu choisis des personnages Nains pour tester ^^

Je reverrais le zOffset, ne t'en fais pas.
L'eau est sensée être mise là par le TLbidule donc je vais voir ce que je peux faire avec tes indications.

Merci !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 25/04/2006 11:23:25 Sujet du message :


Djezebel a écrit :

Ce n'est pas de ma faute si tu choisis des personnages Nains pour tester ^^
Laughing
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Montrer les messages depuis :
Page 1 sur 1 ¤


Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 54.442ms