Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > [script] Utiliser un lit
[script] Utiliser un lit
Par Kaïba le 2/2/2003 à 16:05:06 (#3155071)
voici le script modifier.
void main()
{
object oBed = OBJECT_SELF;
AssignCommand(GetLastUsedBy(),ActionRest(oBed));
}
et le script originel :
void main()
{
object oChair = OBJECT_SELF;
AssignCommand(GetLastUsedBy(),ActionSit(oChair));
}
celui la fonctionne très bien.
Par Ormus le 2/2/2003 à 16:17:09 (#3155135)
Peut être plutôt ça :void main()
{
object oBed = OBJECT_SELF;
AssignCommand(GetLastUsedBy(),ActionSit(oBed));
AssignCommand(GetLastUsedBy(),ActionRest());
}
Mais le problème c'est que le perso s'assiéra sur le lit puis juste après ira à coté pour se reposer...
Par Kaïba le 2/2/2003 à 17:14:11 (#3155501)
je peut utiliser n'importe quel modèle de lit ou un tapis le pc ce place a coter et non dessus Oo
Par daemogorgon le 2/2/2003 à 19:20:36 (#3156173)
Par Kaïba le 2/2/2003 à 20:38:52 (#3156778)
Par Jedaï le 2/2/2003 à 21:33:41 (#3157138)
Mais certaines personnes ont déjà modélisé des lits sur lesquels on peut vraiment dormir ! Je suis à peu près sûr qu'on peut en trouver sur NWVault, mais je vais fouiller un peu, des fois que j'en trouve autre part.:p
Par Jedaï le 2/2/2003 à 21:40:20 (#3157164)
Même si ça ressemble plus à des sacs de couchage qu'autre chose, c'est mieux que rien, de toute façon je pense que le problème de l'axe des z est indépassable actuellement.
Par Kaïba le 2/2/2003 à 21:49:43 (#3157217)
(mais à quoi ils servent alors ? :D )
a décoré :ange:
Ps. sinon pas mal le lien a par qu'il faudrais 2 objets invibles suivant les tailles et c'est embèten quand on pensse que c'est pour les Pc et non les pnj
Par Jedaï le 2/2/2003 à 21:57:46 (#3157259)
Par Kaïba le 2/2/2003 à 23:12:52 (#3157619)
Par Jedaï le 3/2/2003 à 12:14:29 (#3160249)
Par Kaïba le 3/2/2003 à 13:51:51 (#3160930)
et déjà merci d'avance
Par Skanzo Sylan le 3/2/2003 à 16:24:03 (#3162119)
Si on édite le walkmesh du lit, il se peut qu'on puisse monter sur le lit.
Sur le screen, le lit n'a pas de walkmesh. En gros, le personnage passe à travers le lit (comme un tapis ou une déco de sol).
Contrairement au lit de Bioware qui a un walkmesh "inaccessible", faut qu'on fasse le tour (comme une table).
Donc nous avons deux types de walkmesh "tout ou rien", on passe ou on passe pô.
Maintenant, je me pose la question: serait-il possible d'appliquer au lit un walkmesh "walkable"?
Techniquement, on peut le faire. Il suffit d'appliquer au modele 3D un walkmesh (le type de node est aabb) avec une surface type "carpet" (pour reproduire le son quand on marche sur une surface textile).
En toute logique, le personnage devrait pouvoir grimper sur le lit comme on grimpe les marches d'un escalier.
Le problème, maintenant, est que l'on ne sais pas comment va réagir le moteur de Nwn.
Va-t-il prendre en priorité le walkmesh du lit ou va-t-il continuer à utiliser le walkmesh de la tuile?
Car je sais que dans une tuile où se trouve deux niveaux différents de walkmesh l'un au dessus de l'autre (comme une passerelle au-dessus d'une rue), si on clique sur le niveau supérieur, le target se mettera toujours au niveau inférieur (dans le cas de la passerelle, le PJ ne pourra jamais la traverser et voudra tjr aller en-dessous).
D'ailleurs, regardez la tuile "Tour 1x2" dans le tileset "Campagne", on ne peut pô passer en-dessous. Les développeurs de Bioware n'ont fait qu'un seul niveau de walkmesh simplement pour que le personnage puisse monter sur la tour, sinon ce groupe de tuile n'aurait aucun intéret.
En résumé, on peut essayé de faire un vrai lit (qui ne soit pas au niveau du sol) sur lequel on puisse dormir mais il se pourra fort bien que cela ne marche pô à cause d'une des nombreuses lacunes que possèdent Nwn :rolleyes:
Par Ormus le 3/2/2003 à 16:33:34 (#3162199)
Par Kaïba le 3/2/2003 à 16:40:49 (#3162251)
Par Ormus le 3/2/2003 à 16:43:56 (#3162278)
Par Kaïba le 3/2/2003 à 16:48:59 (#3162323)
Par Skanzo Sylan le 3/2/2003 à 17:50:14 (#3162853)
C'est en fait un modèle 3D invisible.
Comme l'indique vaguement son nom, il permet de marcher. Ainsi on peut définir à quel endroit le personnage peut se déplacer (le sol), quel surface lui barre la route (un mur), ou quel surface il peut grimper (un escalier).
Hop, voici un petit walkmesh assez simple.
http://membres.lycos.fr/skanzo/images/walkmesh.jpg
Là, on a le sol en vert sur lequel on peut se déplacer librement, il a été défini en "stone" pour reproduire les sons quand on marche sur de la pierre.
En bleu, on a les murs, surfaces verticales qu'on ne peut franchir.
Où il y a le rouge se trouve une colonne, cette partie est "not walkable", le PJ ne peut passer à travers.
Si on avait voulu faire un escalier, on aurait pris un bout de la partie verte que l'on aurait penché (pô la peine refaire les marches, une surface oblique suffit, ce qu'a fait d'ailleurs Bioware).
Par Ormus le 3/2/2003 à 18:02:11 (#3162959)
Par Kaïba le 3/2/2003 à 18:28:23 (#3163185)
mais qui saurais modifier les modèles de lit pour y placer un walkable ?
Par Skanzo Sylan le 3/2/2003 à 18:29:15 (#3163191)
Le résultat n'est pas du tout celui que j'espérais.
J'ai fait un cube tout bète pô plus gros qu'un écran de 15 pouces avec un walkmesh juste sur le dessus du cube.
J'ai mis un walkmesh type "carpet", le même utilisé pour le grand tapis de paille tressé qu'on peut trouver dans les tavernes.
Première chose, mon walkmesh n'est pris en compte que quand l'objet plaçable est en statique (sinon on passe à travers).
En statique, il se passe un truc bizar.
Le walkmesh de mon cube est prioritaire sur celui de ma tuile. Au final, le walkmesh de la tuile est totalement ignoré donc impossible d'atteindre le cube, comme si toute ce qui se trouve autour du cube reagissait comme un mur.
Ça craint :monstre:
L'astuce est d'ajouter a mon objet plaçable un walkmesh de la taille de la tuile.
(Vu que l'objet plaçable ne sera jamais posé exactement au milieu de la tuile defectueuse, il vaut mieux aggrandir le walkmesh, la taille de 2 tuiles sur 2)
Ensuite cela marche parfaitement, le personnage grimpe bien sur mon cube, parcours toutes la surface de la tuile, contourne les piliers et ne passe pô à travers les murs.
Malheureusement, si le walkmesh d'un objet plaçable est prioritaire sur la tuile, il en est de même pour les autres objets plaçables.
Ainsi, si je met deux cubes l'un a côté de l'autre, un des cubes fonctionnera bien et l'autres sera traversé par le personnage et ne pourra monter dessus.
En gros, avec cette technique, on peut à la limite faire un lit, pouvoir monter dessus, posé l'objet invisible dessus et faire un gros dodo, mais à la seule condition qu'il n'y ai qu'un seul lit par tuile.
Pô trop top non plus :(
(côté bidouille on peut faire des lots, deux lits pour le prix d'un sur le même objet plaçable et pour les dortoirs continuer à utiliser les lits au niveau du sol...)
Alors au final, la meilleurs solution reste celle d'Ormus, modifier les tuiles elles-même pour pouvoir monter sur les lits :)
Ouf! :rasta:
Par Kaïba le 3/2/2003 à 19:01:59 (#3163444)
donc de prendre exemple sur la chaise pour le lit ca pourrais réglé le problème si ca en apporte pas donc peut ètre chercher de ce coter la pour voire ce que ca donne.
édit
en partant du principe que j'ai énoncer j'ai essayer de faire dormire le Pc sur la chaise avec le code du lit modifier pour l'occasion le voici :
void main()
{
object oChair = OBJECT_SELF;
AssignCommand(GetLastUsedBy(),ActionSit(oChair));
AssignCommand(GetLastUsedBy(),ActionRest());
}
le PC dore bien mais a coter de la chaise alors que l'on peut s'asseoir dessus donc le probleme ne viendrais t'il pas plustot du code de repos au lieux du lit ?
sinon y a t'il une commande juste pour faire ce coucher un PC et non pas le faire ce reposer ?
j'espaire avoire fait avancer le shimililiblick avec tout ca :p
Par Jedaï le 3/2/2003 à 20:58:23 (#3164323)
(Faudra quand même que tu ajuste un nombre, je fais juste le script, après faut tester et ajuster)
Par Kaïba le 4/2/2003 à 4:44:02 (#3166178)
void Sleeper( object oUser = OBJECT_SELF )
{
effect eSnore = EffectVisualEffect(VFX_IMP_SLEEP);
ActionPlayAnimation( ANIMATION_LOOPING_DEAD_FRONT, 1.0, 8.0 );
ApplyEffectToObject( DURATION_TYPE_TEMPORARY, eSnore, oUser, 1.0 );
ActionDoCommand( Sleeper() );
}
void main()
{
object oUser = GetLastUsedBy();
effect eSnore = EffectVisualEffect(VFX_IMP_SLEEP);
AssignCommand( oUser, ActionPlayAnimation( ANIMATION_LOOPING_SIT_CROSS, 1.0, 3.0 ) );
AssignCommand( oUser, ActionPlayAnimation( ANIMATION_LOOPING_DEAD_FRONT, 1.0, 8.0 ) );
DelayCommand( 5.0, ApplyEffectToObject( DURATION_TYPE_TEMPORARY, eSnore, oUser, 1.0 ) );
AssignCommand( oUser, ActionDoCommand( Sleeper(oUser) ) );
}
JOL Archives 1.0.1
@ JOL / JeuxOnLine