S'asseoir sur une chaise et Dormir.

Comment puis je dire à mon PC de s’asseoir sur une chaise ?

Il n’y a actuellement pas d’ « emote » pour faire asseoir un PC sur une chaise. Jusqu’à ce qu’un soit ajouté pour les PC, le script pour faire asseoir un PC sur une chaise doit être placé dans l’objet lui même.

Si vous mettez un objet placable utilisable « chaise » (la chaise doit avoir la case « Useable » cochée, et vérifiez que le PC à la place de s’asseoir), mettez le script dans la partie OnUsed de l’onglet des scripts :


void main()
{

object oChair = OBJECT_SELF;
if(!GetIsObjectValid(GetSittingCreature(oChair)))
{
AssignCommand(GetLastUsedBy(), ActionSit(oChair));
}
}

Quand je place un NPC dans le toolset, il reste debout. Il n’y a aucun moyen de la mettre assise ?

Pas dans le toolset, non…la créature doit être debout. Elle doit être scriptée pour que quand le jeu démarre, elle trouve une chaise et s’assied dessus grâce à la commande ActionSit.

Créez un objet placable « chaise » (chair) et donnez lui le tag "CHAIR". Placez le NPC près de la chaise. Copiez et sauvez son script sous un autre nom en rajoutant cette ligne en haut du script :


ActionSit (GetNearestObjectByTag ("CHAIR", OBJECT_SELF));

Notez que quand un PC parle au NPC, il se lèvent. Pour qu’il se rasseye, vous devez aller dans l’onglet « Other Files » dans leur dialogue. Vous devez voir des emplacements pour deux scripts ici, qui sont activés quand le dialogue est fini ou interrompu.
Faire un script qui appelle la ligne ci dessus et il se rasseira quand le dialogue se terminera.

C’est bien tout ça, mais je veux déjà asseoir le PNC dans le tileset ?

Quelques utilisateurs ont remporté du succès un suivant la même processus en l’asseyant sur une chaise…mais en trouvant un objet placable « invisible object » , placez le à la place de la chaise. Donnez lui le tag "CHAIR" et utilisez la même ligne qu’au dessus et il s’asseira la pour vous.

Et si je veux que mon PC dorme sur un lit ?

Il n’y a actuellement aucun moyen de dire à une créature de l’allonger sur un lit ou un « tileset » lit. Un objet placable peut être placé sur un lit, mais pas une créature.

Une créature peut cependant dormir sur un objet placable « bedroll » (paillasse) ou sur le sol. Si vous voulez qu’une créature commence le jeu en dormant, vous devez faire une copie du script OnSpawn de la créature et le sauvegarder sous un autre nom, et ensuite rajouter en haut du script les lignes suivantes :


effect eLieDown = EffectSleep();
effect eSnore = EffectVisualEffect (VFX_IMP_SLEEP);
effect eSleep = EffectLinkEffects (eLieDown, eSnore);
ApplyEffectToObject (DURATION_TYPE_PERMANENT, eSleep, OBJECT_SELF);

Réveiller votre NPC
Si vous voulez qu’un NPC se réveille à un certain moment, vous devez utiliser la commande RemoveEffect. Un effet, une fois appliqué, ne peut pas avoir une variable définie comme EffectSleep, et le désactiver par cette commande.
Le « pointeur » doit être sur cet effet particulier. Si l’effet est la même variable dans le même script que quand il est utilisé, vous pouvez simplement utiliser ceci :

RemoveEffect (OBJECT_SELF, eSleep); 

Cependant, vous devez scanner les effets d’un objet et trouver celui que vous cherchez parmi tous les autres. Le script ci dessous est un script simple pour enlever l’effet sleep à un objet. (Il est dans le OnHeartbeat de la créature et la réveille si un hostile approche à moins de 5m.):

// script de réveil
#include "NW_I0_GENERIC"
void main()
{
// si je dors
if (GetHasEffect(EFFECT_TYPE_SLEEP))
{

// donne l’ennemi le plus proche de moi
object oTarget = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY);
// si il y en a un et qu’il est à moins de 5 mètres
if ((GetDistanceToObject(oTarget) < 5.0) && (GetIsObjectValid(oTarget)))
{
effect eSleep = GetFirstEffect(OBJECT_SELF);
// regarde les effets actuels
while (GetIsEffectValid(eSleep))
{
// et si l’un d’eux est sommeil, mais ne viens pas d’un sort de sommeil
if ((GetEffectType(eSleep) == EFFECT_TYPE_SLEEP) && (GetEffectSpellId(eSleep) != SPELL_SLEEP))
{
// enlevez le
RemoveEffect(OBJECT_SELF, eSleep);
}
eSleep = GetNextEffect(OBJECT_SELF);
}
}
}
}

__________________
Théranthil, Mage Elfe prêtre de Mystra Membre des GdE
Parti Elmotiste pour un parler jowilien: Ministre supérieur de la corruption

"Les langues vont toujours bon train. Les pieds ont du mal à suivre."
(les bourses aussi NdT )
Mespert de la porte de Baldur