Script d'un PNJ assis.

Répondre
Partager Rechercher
]Bonjour,
J'ai un problème avec mon script de PNJ qui est censé être assis. Je vous le présente (même si je l'ai pris sur ce forum)

J'entre d'abord ceci dans le OnUsed de la chaise :

//////////////////////////////////////////////
//By Anthraxcite //
//Script : //
//S'assoir sur une chaise //
//A mettre dans le OnUsed du placable //
//////////////////////////////////////////////
void main()
{
object oChaise = OBJECT_SELF;
object oUser = GetLastUsedBy();
if(GetSittingCreature(oChaise)==OBJECT_INVALID)
{
AssignCommand(oUser,ActionSit(oChaise));
}
}
void main()
{
object oChair = OBJECT_SELF; if(!GetIsObjectValid(GetSittingCreature(oChair)))
{
AssignCommand(GetLastUsedBy(), ActionSit(oChair));
}
}


J'entre ensuite ceci dans le OnSpawn du PNJ :

void main()
{
if(GetCommandable(OBJECT_SELF)){
{
BeginConversation();
}
ClearAllActions();
int nChaise = 1;
object oChaise;
oChaise= GetNearestObjectByTag("tagdelachaise", OBJECT_SELF, nChaise);
ActionSit(oChaise);
}
}


Et pour finir j'entre ceci dans le OnConversation du PNJ (pour qu'il reste assis même pendant un dialogue, à noter qu'il faudra, pour ceux qui sont intéressés par ce script, enlever les scripts contenus dans le fichier actuel du dialogue) :

void main()
{
object oChaise;
int nChaise = 1;
void main()
{
object oChaise;
int nChaise = 1;
oChaise = GetNearestObjectByTag("tagdelachaise", OBJECT_SELF, nChaise);
ClearAllActions();
ActionSit(oChaise);
}



Après avoir rappelé mon script, je vous explique donc mon problème qui semble être assez simple ...
Le script fonctionne correctement mais lorsque je rencontre le PNJ pour la première fois en mode joueur, il est debout à côté de la chaise. Quand je lui parle il se rassoie et reste cette fois-ci définitivement assis.
Je voudrais savoir pourquoi ce PNJ est debout au début et connaître la façon de le faire assoir dès le début.

Merci d'avance
C'est normal qu'il soit debout, car le faire assoir nécessite une action.

Plusieurs possibilités :

Le faire s'assoir dans le OnSpawn ou le OnHeartBeat du PNJ, où dans le OnAreaEnter de la zone.
Le mieux, si le Pnj n'est pas déjà créé dans la zone lorsque le PJ entre, ce serait d'utiliser OnSpawn pour le faire assoir.
Tu n'as besoin de rien mettre comme script dans la chaise parce que si tu rends ta chaise "asseyable", tu risques de voir un jour un joueur assis dessus et ton pauvre NPC coincé à côté (ben oui, on lui a volé sa chaise). Tu as juste besoin que ta chaise soit utilisable. Et un script tout con suffit :

Code PHP:

void main()
{
ClearAllActions();
object oChaiseGetNearestObjectByTag(oChair);
ActionSit(oChaise);

voire même peut être plus court

Code PHP:

void main()
{
ClearAllActions();
ActionSit(GetNearestObjectByTag(oChair));

Ton script se complique la vie:

Code PHP:

void main()
{
object oChaise;
int nChaise 1;
oChaise GetNearestObjectByTag("tagdelachaise"OBJECT_SELFnChaise);
ClearAllActions();
ActionSit(oChaise);

Tu définis un integer qui s'appelle nChaise que tu appelles dans le GetNearest pour lui dire de prendre la plus proche, ce qu'il fait de toute façon si on ne précise aucun chiffre. De même, OBJECT_SELF est la condition par défaut donc, si tu ne dis rien, bingo, il choisi l'objet le plus proche de lui-même.

Pour les dialogues, personnellement, je colle le script dans le Action Taken de chaque dialogue qui termine la chaîne de discussion donc mon NPC se lève quand il parle et se rassoit quand il ne parle plus. Parce sinon, si ton joueur se met à bouger pendant le dialogue, tu verras ton NPC tourner sur sa chaise pour faire face au joueur qui lui parle, traversant gaiement le dossier avec ses jambes.
Répondre
  • »
 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés