Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Script animation avec placeable
Script animation avec placeable
Par Le Hamster le 19/9/2002 à 10:31:48 (#2186578)
Le déroulement :
Le PJ surprend une femme qui s'apprète à prendre son bain. Elle le voit, se précipite en deux temps vers une armoire. Elle ouvre cette armoire (l'armoire s'ouvre) et s'habille avec un costume. Ensuite, elle se dirige vers une chaise, s'assoit et une conversation s'engage
J'ai placé le script suivant sur le OnPerception, dans l'état il fonctionne mais je ne sais pas aller plus plus loin dans le déroulement ci-dessus.
Tag Femme = "Mimi"
Tag Armoire = "ArmoireMimi"
Tag Chaise = "Chair"
Tag Costume = "CostumeMimi"
Tag Conversation = "conv_mimi"
void main()
{
ClearAllActions();
ActionMoveToObject(GetNearestObjectByTag("point_mimi1"),TRUE);
ActionSpeakString("Eh, mais que faites-vous ici ?");
ActionMoveToObject(GetNearestObjectByTag("point_mimi2"),TRUE);
GetFacingFromLocation (GetLocation(oObject)); // ça, ça ne marche pas, j'aimerais qu'elle se retourne avant d'enchainer la suite
ActionPlayAnimation(ANIMATION_LOOPING_TALK_FORCEFUL);
ActionSpeakString("Tournez-vous gros cochon !");
ActionMoveToObject(GetNearestObjectByTag("ArmoireMimi"));
ActionPlayAnimation(ACTION_OPENLOCK);
?????
}
En fait ce que je dois apprendre, c'est comment bien utiliser les ANIMATION_PLACEABLE et EquipItem, je sais pas faire ça. Faire que Mimi retourne à la chaise et s'assoit ne devrait pas poser de problème.
Voili, voilà. EUH, pls si vous répondez, écrivez moi le bout de script qui manque, ça me donnera un exemple pour tout comprendre.
Bises à toutes et àa tous.
S'il vous plait ?
Par Le Hamster le 20/9/2002 à 20:45:49 (#2197646)
Tag voir précedent post
merci et bisous
Par Jedaï le 21/9/2002 à 12:25:36 (#2200983)
void main()
{
object oPC = GetLastPerceived();
if (GetIsPC(oPC) && GetLastPerceptionSeen())
{
ClearAllActions();
ActionMoveToObject(GetNearestObjectByTag("point_mimi1"),TRUE);
ActionSpeakString("Eh, mais que faites-vous ici ?");
ActionMoveToObject(GetNearestObjectByTag("point_mimi2"),TRUE);
float fFacing = GetFacing(GetNearestObjectByTag("point_mimi2"));
//mettez le waypoint "point_mimi2" dans le sens ou vous voulez qu'elle se tourne
SetFacing(fFacing);
ActionWait(0.5);
ActionSpeakString("Tournez-vous gros cochon !");
ActionInteractObject(GetObjectByTag("ArmoireMimi"));
ActionWait(1.5);
ActionEquipItem(GetObjectByTag("CostumeMimi"), INVENTORY_SLOT_CHEST);
ActionMoveToObject(GetNearestObjectByTag("Chair"), FALSE, 0.3);
ActionStartConversation(oPC, "conv_mimi");
ActionSit(GetNearestObjectByTag("Chair"));
}
}
Plusieurs problème peuvent se présenter : d'abord je ne suis pas sûr de moi pour ce qui est du facing, ensuite si la chaise est trop loin du PC, il y a risque d'interruption de la conversation et je ne suis pas sûr non plus qu'elle s'assoit avant la fin de la conversation. (Ce qui est sûr c'est qu'on ne peut la faire asseoir puis lui faire commencer la conversation).
Par Jedaï le 21/9/2002 à 19:25:38 (#2203206)
void main()
{
object oPC = GetLastPerceived();
if (GetIsPC(oPC) && GetLastPerceptionSeen())
{
AssignCommand(oPC, ClearAllActions());
SetCommandable(FALSE, oPC);
ClearAllActions();
ActionMoveToObject(GetNearestObjectByTag("point_mimi1"),TRUE);
ActionSpeakString("Eh, mais que faites-vous ici ?");
ActionMoveToObject(GetNearestObjectByTag("point_mimi2"),TRUE);
float fFacing = GetFacing(GetNearestObjectByTag("point_mimi2"));
//mettez le waypoint "point_mimi2" dans le sens ou vous voulez qu'elle se tourne
ActionDoCommand(SetFacing(fFacing));
ActionSpeakString("Tournez-vous gros cochon !");
ActionWait(2.0);
ActionMoveToObject(GetObjectByTag("ArmoireMimi"), TRUE);
ActionDoCommand(AssignCommand(GetObjectByTag("ArmoireMimi"), PlayAnimation(ANIMATION_PLACEABLE_OPEN)));
ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 1.0, 1.5);
ActionEquipItem(GetObjectByTag("CostumeMimi"), INVENTORY_SLOT_CHEST);
ActionDoCommand(AssignCommand(GetObjectByTag("ArmoireMimi"), PlayAnimation(ANIMATION_PLACEABLE_CLOSE)));
ActionMoveToObject(GetNearestObjectByTag("Chair"), FALSE, 0.3);
SetCommandable(TRUE, oPC);
ActionStartConversation(oPC, "conv_mimi");
ActionSit(GetNearestObjectByTag("Chair"));
}
}
Alors quelque point à préciser : je n'ai pas intégré l'animation TALK_FORCEFUL parce que je ne la connais pas mais libre à toi de la rajouter. On peut ajuster les temps d'attente pour obtenir un meilleur effet.
Je n'ai pas trop compris comment et quand tu voulais que la femme se retourne donc ajuste ton waypoint toi-même pour répondre à tes désidératas.
Il faut placer la chaise pas trop loin de la porte pour que la discussion puisse avoir lieu.
Lors de son habillage la femme est face à l'armoire à cause du ActionMoveToObject (si le waypoint 2 est bien placé) donc pense la position de ton armoire de façon à ce que la femme soit dans la bonne position par rapport au PC (qui doit se trouver à la porte puisqu'il ne peut plus recevoir d'ordre à partir du moment où la femme l'a vu).
JOL Archives 1.0.1
@ JOL / JeuxOnLine