La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 22/09/2024 20:28:32


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
chevalier blanc
Grand Chevalier
Inscrit le: 28 Mar 2005
Messages: 117
Localisation: Sur les Côtes d'Opaline
Répondre en citant
Posté le : 07/04/2005 10:17:24 Sujet du message : script pour sol (eau lave egouts roche...)

Bonjour a vous tous
Je recherche quelqu'un qui saurait eventuellement comment avoir des scripts qui font apparaitre de la lave ou de l'eau dans n'importe quel ecran.
En parcourant la deuxième extension de NWN, j'ai trouvé le script suivant :
NWScript :
//:Confused///////////////////////// /////////////////////
//:: Name: h4a_onenter
//:: Copyright (c) 2001 Bioware Corp.
//:Confused///////////////////////// ////////////////////
/*
    On enter of this area.  Turns certain pit
    tiles to lava.
*/

//:Confused///////////////////////// ////////////////////
//:: Created By: Brad Prince
//:: Created On: July 18, 2003
//:Confused///////////////////////// ////////////////////

#include "x2_inc_toollib"
void main()
{

    object oPC = GetEnteringObject();

    if(GetIsPC(oPC)) {
    // Do once
    if (GetLocalInt(OBJECT_SELF, "nDoOnce") != 1)
    {

        while(GetImmortal(oPC) == TRUE)
        {
            SetImmortal(oPC, FALSE);
        }
        while(GetPlotFlag(oPC) == TRUE)
        {
            SetPlotFlag(oPC, FALSE);
        }

        SetLocalInt(OBJECT_SELF, "nDoOnce", 1);

        int nColumns = 12;
        int nRows = 12;

        TLChangeAreaGroundTiles(OBJECT_SELF, X2_TL_GROUNDTILE_LAVA, nColumns, nRows, 0.0);
        // Put lava in tiles.
      /* vector vPos;
        vPos.x = 5.0;
        vPos.y = 105.0;
        vPos.z = 0.0;
        float fFace = 0.0;
        location lLoc;
        lLoc = Location(GetArea(OBJECT_SELF), vPos, fFace);
        CreateObject(OBJECT_TYPE_PLACE ABLE, "q5firetile", lLoc);

        vPos.x = 15.0;
        vPos.y = 105.0;
        vPos.z = 0.0;
        lLoc = Location(GetArea(OBJECT_SELF), vPos, fFace);
        CreateObject(OBJECT_TYPE_PLACE ABLE, "q5firetile", lLoc);

        vPos.x = 25.0;
        vPos.y = 105.0;
        vPos.z = 0.0;
        lLoc = Location(GetArea(OBJECT_SELF), vPos, fFace);
        CreateObject(OBJECT_TYPE_PLACE ABLE, "q5firetile", lLoc);

        vPos.x = 35.0;
        vPos.y = 105.0;
        vPos.z = 0.0;
        lLoc = Location(GetArea(OBJECT_SELF), vPos, fFace);
        CreateObject(OBJECT_TYPE_PLACE ABLE, "q5firetile", lLoc);

        vPos.x = 45.0;
        vPos.y = 105.0;
        vPos.z = 0.0;
        lLoc = Location(GetArea(OBJECT_SELF), vPos, fFace);
        CreateObject(OBJECT_TYPE_PLACE ABLE, "q5firetile", lLoc);

[...] et pareil pdt des pages et des pages [...]

        vPos.x = 55.0;
        vPos.y = 65.0;
        vPos.z = 0.0;
        lLoc = Location(GetArea(OBJECT_SELF), vPos, fFace);
        CreateObject(OBJECT_TYPE_PLACE ABLE, "q5firetile", lLoc);

        vPos.x = 65.0;
        vPos.y = 65.0;
        vPos.z = 0.0;
        lLoc = Location(GetArea(OBJECT_SELF), vPos, fFace);
        CreateObject(OBJECT_TYPE_PLACE ABLE, "q5firetile", lLoc);

        vPos.x = 75.0;
        vPos.y = 65.0;
        vPos.z = 0.0;
        lLoc = Location(GetArea(OBJECT_SELF), vPos, fFace);
        CreateObject(OBJECT_TYPE_PLACE ABLE, "q5firetile", lLoc);

        vPos.x = 85.0;
        vPos.y = 65.0;
        vPos.z = 0.0;
        lLoc = Location(GetArea(OBJECT_SELF), vPos, fFace);
        CreateObject(OBJECT_TYPE_PLACE ABLE, "q5firetile", lLoc);

        vPos.x = 95.0;
        vPos.y = 65.0;
        vPos.z = 0.0;
        lLoc = Location(GetArea(OBJECT_SELF), vPos, fFace);
        CreateObject(OBJECT_TYPE_PLACE ABLE, "q5firetile", lLoc);
        */


    }
  }

    // Added "ring effect" check

}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.

Tout ce que je sais c'est que apparemment il faut mettre les dimensions de la zone dans nRows et nColumns, mais quand je lance le jeu pour voir le résultat final, monojoueur tout fonctionne très bien, mais en client MD, il y a un message serveur qui me dit "TOO MANY INSTRUCTIONS" et je ne comprend pas d'où cela peut venir.
Je trouve ce script vraiment très interessant mais je n'ai pas trop compris comment il fonctionnait. Si quelqu'un pouvait avoir l'amabilité d'éclairer ma lanterne je lui en serait vraiment reconnaissant.
merci

note de finipe : j'ai supprimé un bout de ton code qu'était hyyyyyyper long et qui visiblement ne fonctionnait pas Very Happy
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 07/04/2005 11:48:33 Sujet du message :

Il y a nettement plus simple pour utiliser les "Magic Tilesets", qui sont eux aussi abolument géniaux : ça multiplie les possibilités de mapping.

Pour ma part, j'ai créé un objet invisible par tile, sur lequel j'ai mis ce script en onHeartBeat :

NWScript :
#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);
  }
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Les deux 1eres fonctions déterminent la taille de la zone, la seconde fixe quel tyle on utilise. Le script est tjs le même, quel que soit le tile qu'on désire : pour changer le tile, il suffit d'assigner une valeur en variable local sur le plaçable invisible.

En l'occurrance : "tileset_type". Selon la valeur de tileset_type, le tile changera (cf. les valeurs en commentaire au début du script.

De même, j'ai ajouté une variable "AxeZ" pour définir la hauteur du tile. Là c'est un peu plus expérimental, car j'ai testé et selon les tile, la hauteur z de référence n'est pas toujours 0.0, donc c'est encore à tester un peu.
_________________
» Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine
» 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
chevalier blanc
Grand Chevalier
Inscrit le: 28 Mar 2005
Messages: 117
Localisation: Sur les Côtes d'Opaline
Répondre en citant
Posté le : 07/04/2005 13:15:17 Sujet du message :

Merci beaucoup meme si j'ai pas tout compris (je suis un gros noob en prog)
j'essaie ca tout de suite
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
chevalier blanc
Grand Chevalier
Inscrit le: 28 Mar 2005
Messages: 117
Localisation: Sur les Côtes d'Opaline
Répondre en citant
Posté le : 08/04/2005 12:39:04 Sujet du message :

Sad ca marche pas ... j'ai du mettre quelque chose qui clochait .... rhââââ satanés scripts!
Quelqu'un a une autre solution ????Very Happy
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 08/04/2005 14:35:59 Sujet du message :

Ça marche chez moi... si ça ne marche pas chez toi, c'est que tu as raté une étape.

1 - Créer un plaçable invisible appelé "Tile eau" par exemple.

2 - Sur le onHeartBeat de ce plaçable, mettre le script suivant :

NWScript :
#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);
  }
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.

3 - Mettre ton plaçable invisible sur ta map.

4 - Clic droit sur le plaçable, puis menu "variables"

5 - Entrer les variables suivantes :

Code :
tileset_type - int - 401
AxeZ - float - 1.2


6 - Eh voilà ! Dans cet exemple, 401 correspond au tile "eau" (pour les autres voir commentaire en début de script). AxeZ = 1.2 correspond à la hauteur à laquelle se situe le tile, en l'occurrence 1.2 mètres. Note que cette hauteur est assez foireuse, on n'a pas tjs ce qu'on désire, il faut procéder de façon un peu empirique en testant souvent.
_________________
» Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine
» 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII
Dernière édition par finipe le 06/02/2007 14:48:59; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
chevalier blanc
Grand Chevalier
Inscrit le: 28 Mar 2005
Messages: 117
Localisation: Sur les Côtes d'Opaline
Répondre en citant
Posté le : 08/04/2005 16:54:32 Sujet du message :

Merci je re essaye *plein d'espoir*
Embarassed
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
chevalier blanc
Grand Chevalier
Inscrit le: 28 Mar 2005
Messages: 117
Localisation: Sur les Côtes d'Opaline
Répondre en citant
Posté le : 08/04/2005 17:16:28 Sujet du message :

euh... je pige pas aurora veux pas compiler ton script ... il me marque
08/04/2005 18:14:07 : Erreur. 'test' n'est pas compilé.
test.nss(17): ERREUR : NO SEMICOLON AFTER EXPRESSION
ce qui correspond a la ligne:
location locTile;
int iX = 0;
int iY = 0;
vector vTile = Vector(0.0, 0.0, 0.0);

for (iX = 0; iX &lt; 32; ++iX) {
vTile.x = IntToFloat(iX);
locTile = Location(oArea, vTile, 0.0);
int iRes = GetTileMainLight1Color(locTile);
de la premiere fonction...
decidement...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Stan
Grand Chevalier
Inscrit le: 07 Avr 2005
Messages: 126
Répondre en citant
Posté le : 08/04/2005 17:22:51 Sujet du message :

for (iX = 0; iX &lt; 32; ++iX)


En fait je crois que c'est :

for (iX = 0; iX < 32; ++iX)


Ptit soucis de balise.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 08/04/2005 17:46:37 Sujet du message :

Oui, c'est le signe "inférieur à". Les balisses nwscript du forum ont un petit souci en effet.
_________________
» Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine
» 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
chevalier blanc
Grand Chevalier
Inscrit le: 28 Mar 2005
Messages: 117
Localisation: Sur les Côtes d'Opaline
Répondre en citant
Posté le : 23/04/2005 14:22:11 Sujet du message :

désolé de répondre si tard !
merci beaucoup ca marche du tonnerre !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
parrain
Chevalier
Inscrit le: 20 Jan 2005
Messages: 97
Localisation: Creteil
Répondre en citant
Posté le : 25/04/2005 08:15:10 Sujet du message :

Huhuhu!Cool
Salut!Very Happy
Désolé de m'incruste...
Mais j'ai essayer ton script finipe et au lieu de l'eau j'ai des petits point bleaus sur la map...
Stp aide moi ce truc pourras me servir!
Merci d'avance...Laughing
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 25/04/2005 13:16:44 Sujet du message :

Fais plusieurs essais en modifiant la variable AxeZ, d'un tile à l'autre ils n'ont pas tous la même origine.
_________________
» Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine
» 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
parrain
Chevalier
Inscrit le: 20 Jan 2005
Messages: 97
Localisation: Creteil
Répondre en citant
Posté le : 25/04/2005 20:47:10 Sujet du message :

huhu...
Comment puis procéder?Very Happy
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
finipe
Grand Sage du Conseil
Inscrit le: 11 Fév 2003
Messages: 519
Localisation: Nantes
Répondre en citant
Posté le : 25/04/2005 23:04:18 Sujet du message :

Ben tu suis point par point la méthode que j'ai donnée, et tu modifies la variable "AxeZ"...

D'après l'utilisation que j'en ai faite pour le moment, on a qqchose comme ça :

NWScript :
// X2_TL_GROUNDTILE_ICE = 426;              origine : +0.0
// X2_TL_GROUNDTILE_WATER = 401;            origine : -1.0
// X2_TL_GROUNDTILE_GRASS = 402;            origine : +0.0
// X2_TL_GROUNDTILE_LAVA_FOUNTAIN = 349;    origine : ?
// X2_TL_GROUNDTILE_LAVA = 350;              origine : ?
// X2_TL_GROUNDTILE_CAVEFLOOR = 406;        origine : +0.0
// X2_TL_GROUNDTILE_SEWER_WATER = 461;      origine : -2.0
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.

Cela signifie que, par exemple si tu utilises le tile 401 (eau), et que tu places ta variable AxeZ à 0.0 (un chiffre à virgule, puisque c'est une variable de type float), le niveau de l'eau sera à -1.0

Donc pour avoir de l'eau à 1m50 de hauteur, il te faudra mettre la variable AxeZ à non pas 1.5, mais 2.5 !
_________________
» Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine
» 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Stan
Grand Chevalier
Inscrit le: 07 Avr 2005
Messages: 126
Répondre en citant
Posté le : 26/04/2005 01:28:10 Sujet du message :


Citation :
5 - Entrer les variables suivantes :

tileset_type - int - 401
AxeZ - float - 1.2
C'est ça que tu dois changer, la variable mise sur le placeable.

Au lieu de 1.2 tu augmentes ou diminues pour monter ou descendre.

PS : enfin c'est ce que j'ai cru comprendre Very Happy
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
parrain
Chevalier
Inscrit le: 20 Jan 2005
Messages: 97
Localisation: Creteil
Répondre en citant
Posté le : 26/04/2005 11:01:00 Sujet du message :

ok merci j'avais pas trop trop compris...Laughing
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
Répondre en citant
Posté le : 27/04/2005 15:31:16 Sujet du message : Re: script pour sol (eau lave egouts roche...)

même si c'est un peu hors sujet avec toutes les réponses ci-dessus

chevalier blanc a écrit :

/.../
while(GetImmortal(oPC) == TRUE)
{
SetImmortal(oPC, FALSE);
}
while(GetPlotFlag(oPC) == TRUE)
{
SetPlotFlag(oPC, FALSE);
}

/.../
Le code ci-dessus déclenche une boucle infinie dans le cas d'un MD car son avatar n'est pas modifiable

------------------------------------------------------------------------------------------

Bravo pour le tutorial, je me permets un commentaire sur l'utilisation des hearts-beats sur les plaçables : je vous suggère de faire attention au lag si vous habillez intensément votre module avec les objets en question (disons 200 et +). En cas de besoin des des solutions allégées existent pour ne l'activer par zone qu'en présence des joueurs comme c'était dans l'idée du script initialement présenté : mettre une activation sur un évênement pertinent.
 
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 88.123ms