Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

[script] Utiliser un lit

Par Kaïba le 2/2/2003 à 16:05:06 (#3155071)

bon voila j'utilise un script tout simple pour qu'un Pc puisse s'asseoir sur une chaise et je me suis dit pourquoi pas le modifier pour ce coucher sur un lit mais le problème est qu'il ne ce compile pas.

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)

Je crois que l'on ne peut pas mettre d'objet entre les parenthèses du ActionRest() :p

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)

J'ai tester et il ce compile bien mais y a encore un léger problème ^^

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)

au hasard, t'as essayé avec un objet invisible sur le lit ?

Par Kaïba le 2/2/2003 à 20:38:52 (#3156778)

oui et cela reviens au même le Pc est toujours a coter du lit ^^.

Par Jedaï le 2/2/2003 à 21:33:41 (#3157138)

Oui effectivement, on ne peut pas se reposer sur les lits de Bioware (mais à quoi ils servent alors ? :D ) !

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)

Voilà, j'en ai trouvé au moins un : http://nwvault.ign.com/Files/hakpacks/data/1035655784910.shtml .

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)

faudrais que bioware y pense alors car sinon je voie pas pourquoi il on mit une case avec marquer "utilisable" dans les option du lit si ce n'es pour avoir plein d'écharde dans les fesses.

(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)

Je ne connais pas le hakpack donc je ne sais pas comment il fonctionne, mais ne serait-il pas possible de créer dynamiquement un objet invisible ou l'autre suivant les cas ?:confus:

Par Kaïba le 2/2/2003 à 23:12:52 (#3157619)

si justement il faut mètre un objets invisible mais d'une certaine façons pour les différents types de perso regarde sur ce screen qui ça : http://nwvault.ign.com/Files/transfer/pictures/HAKPACKS_Veldin1035655784910futons.jpg

Par Jedaï le 3/2/2003 à 12:14:29 (#3160249)

Effectivement ça doit être faisable, je plancherai la-dessus ce soir mais de toute façon faudra faire des tests pour ajuster. :)

Par Kaïba le 3/2/2003 à 13:51:51 (#3160930)

ok j'attends de voire ca alors :)
et déjà merci d'avance

Par Skanzo Sylan le 3/2/2003 à 16:24:03 (#3162119)

Si je regarde bien le screen, le lit est au niveau du sol. La couverture est juste à la bonne position pour recouvrir le corps. Sympô :)

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)

Peut-être une tile de lit avec placeable invisible dessus alors ? :doute:

Par Kaïba le 3/2/2003 à 16:40:49 (#3162251)

nop l'objet invisible sur le lit ne fonctionne pas :rolleyes:

Par Ormus le 3/2/2003 à 16:43:56 (#3162278)

Je parle d'une tile avec un nouveau walkmesh de manière à ce que ce soit possible de marcher dessus, un peu comme une estrade quoi...

Par Kaïba le 3/2/2003 à 16:48:59 (#3162323)

ok j'avais pas fait le rapprochement :monstre: sinon au fait c'est quoi un walkmesh (question de supère quiche :maboule: )

Par Skanzo Sylan le 3/2/2003 à 17:50:14 (#3162853)

Héhé, c'est assez simple :p

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)

C'est vrai que ça réglerait beaucoup de problèmes un vrai axe des Z dans NwN...

Par Kaïba le 3/2/2003 à 18:28:23 (#3163185)

clair, net et précis et ca ma permis comprendre ce que ca voulais dire et c'est vrais que créé un lit avec ca, ca regèlerais le problème des lits.

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)

J'ai essayé de faire un objet plaçable sur lequel on puisse monter.

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)

comme il est possible de s'asseoir sur une chaise faudrais peut ètre voire le walkable d'une chaise ce qui pourrais servir pour en mètre un au lit.

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)

Si tu pouvais donner le script à mettre sur le OnUsed des objets invisibles, je pourrais te faire le script d'auto-ajustement selon les tailles. :D

(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)

bon ben voila le script fourni avec le hack :


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