La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
FAQ
Rechercher
Liste des Membres
Groupes d'utilisateurs
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
La date/heure actuelle est 23/11/2024 22:01:17
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
chevalier blanc Grand Chevalier Messages: 117 Localisation: Sur les Côtes d'Opaline |
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 :
//:///////////////////////// ///////////////////// //:: Name: h4a_onenter //:: Copyright (c) 2001 Bioware Corp. //:///////////////////////// //////////////////// /* On enter of this area. Turns certain pit tiles to lava. */ //:///////////////////////// //////////////////// //:: Created By: Brad Prince //:: Created On: July 18, 2003 //:///////////////////////// //////////////////// #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 } 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 |
Revenir en haut | |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
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); } } 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 | |
chevalier blanc Grand Chevalier Messages: 117 Localisation: Sur les Côtes d'Opaline |
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 | |
chevalier blanc Grand Chevalier Messages: 117 Localisation: Sur les Côtes d'Opaline |
ca marche pas ... j'ai du mettre quelque chose qui clochait .... rhââââ satanés scripts!
Quelqu'un a une autre solution ???? |
Revenir en haut | |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
Ç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); } } 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 | |
chevalier blanc Grand Chevalier Messages: 117 Localisation: Sur les Côtes d'Opaline |
Merci je re essaye *plein d'espoir*
|
Revenir en haut | |
chevalier blanc Grand Chevalier Messages: 117 Localisation: Sur les Côtes d'Opaline |
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 < 32; ++iX) { vTile.x = IntToFloat(iX); locTile = Location(oArea, vTile, 0.0); int iRes = GetTileMainLight1Color(locTile); de la premiere fonction... decidement... |
Revenir en haut | |
Stan Grand Chevalier Messages: 126 |
for (iX = 0; iX < 32; ++iX)
En fait je crois que c'est : for (iX = 0; iX < 32; ++iX) Ptit soucis de balise. |
Revenir en haut | |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
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 | |
chevalier blanc Grand Chevalier Messages: 117 Localisation: Sur les Côtes d'Opaline |
désolé de répondre si tard !
merci beaucoup ca marche du tonnerre ! |
Revenir en haut | |
parrain Chevalier Messages: 97 Localisation: Creteil |
Huhuhu!
Salut! 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... |
Revenir en haut | |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
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 | |
parrain Chevalier Messages: 97 Localisation: Creteil |
huhu...
Comment puis procéder? |
Revenir en haut | |
finipe Grand Sage du Conseil Messages: 519 Localisation: Nantes |
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 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 | |
Stan Grand Chevalier Messages: 126 |
Citation : 5 - Entrer les variables suivantes :
C'est ça que tu dois changer, la variable mise sur le placeable.
tileset_type - int - 401 AxeZ - float - 1.2 Au lieu de 1.2 tu augmentes ou diminues pour monter ou descendre. PS : enfin c'est ce que j'ai cru comprendre |
Revenir en haut | |
parrain Chevalier Messages: 97 Localisation: Creteil |
ok merci j'avais pas trop trop compris...
|
Revenir en haut | |
lylver Héros Messages: 274 |
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); } /.../ ------------------------------------------------------------------------------------------ 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 | |
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
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