Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Plusieurs pbs
Plusieurs pbs
Par Adalorn le 8/7/2002 à 19:20:42 (#1777594)
2éme : actionwait ne marche pas, j'ai trouvé aucun moyen pour faire attendre un script
3éme : ce script ne marche pas, il fait tout planter dans le jeux(mais se compile) :
dans on enter d'un piége
void main()
{
object oPlayer = GetEnteringObject();
object oTargetArea = GetObjectByTag("*******",0);
AssignCommand(oPlayer,ActionJumpToLocation(GetLocation(oTargetArea)));
ApplyEffectToObject (DURATION_TYPE_TEMPORARY, EffectKnockdown(), oPlayer, 3.0);
AssignCommand(oPlayer, SpeakString("***"));
}
4éme :
je place un premier script dans onenter d'un triguer :
void main()
{
object oPlayer = GetEnteringObject();
if((GetItemPossessor(GetObjectByTag("***", 0)) == oPlayer)||(GetLocalInt(GetModule(),"****")))
{
object oTargetArea = GetObjectByTag("******",0);
SetMapPinEnabled(oTargetArea,1);
SetLocalInt(GetModule(),"****",1);
AssignCommand(oPlayer,ActionJumpToLocation(GetLocation(oTargetArea)));
ApplyEffectToObject (DURATION_TYPE_PERMANENT, EffectParalyze(), oPlayer, 0.0);
ActionStartConversation(oPlayer,"*****",TRUE);
}
}
j'ai essaillé aussi avec duration_type_temporary ou _instant
, c pareil
il est suivi, à un moment donné de :
void main()
{
object oPlayer = GetPCSpeaker();
ApplyEffectToObject (DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_IMP_HARM,FALSE), oPlayer, 2.0);
ActionWait(2.0);
RemoveEffect(oPlayer, EffectParalyze());
object oTargetArea = GetObjectByTag("******",0);
AssignCommand(oPlayer,ActionJumpToLocation(GetLocation(oTargetArea)));
ApplyEffectToObject (DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_FIRE,FALSE), oPlayer, 1.0);
}
, et non seulement, il n'enleve pas la paralysie (il ne "jump" donc pas, mais en +, il fait tout à la foi (les effects aussi), à cause de actionwait qui ne fait pas ce que je veux
je crois que c'est tout...
Par gaeriel le 8/7/2002 à 19:40:30 (#1777682)
Par Gargantuel le 8/7/2002 à 20:09:29 (#1777807)
void main()
{
object oPlayer = GetEnteringObject();
if (GetIsPC(oPlayer))
{
object oTargetArea = GetObjectByTag("*******",0);
if (oTargetArea != OBJECT_INVALID)
{
AssignCommand(oPlayer,ActionJumpToLocation(GetLocation(oTargetArea)));
ApplyEffectToObject (DURATION_TYPE_TEMPORARY, EffectKnockdown(), oPlayer, 3.0);
AssignCommand(oPlayer, SpeakString("***"));
}
}
}
Par Gargantuel le 8/7/2002 à 20:20:51 (#1777855)
Sinon meme commentaire, tu ne testes pas assez tes retours de variables et si un GetObjectByTag te retourne un OBJECT_INVALID, tu le sais pas et pareil si un GetEnteringObject() te renvoi autre chose qu'un joueur. :(
1- Si tu place un npc lambda avec aucun script ni inventaire et que tu le butes, il disparait ?
Faudrait que tu nous donnes + de billes parce que là je sèche.
2 - Utilise DelayCommand() :)
Bon courage !
Par Adalorn le 9/7/2002 à 9:33:53 (#1779768)
Je veux que ça marche aussi pour les NPC, c'est un piége comme les autres (il peut y avoir des conflits?)
même si j'utilise DelayCommand() , il continu à ne pas suprimer la paralysie.
comment il faut faire pour qu'un NPC ne disparaisse pas aprés s mort (j'avait entendu que no permanent death pouvait empecher le corps de disparaitre, mais non...)
Par ZeDuckMaster le 9/7/2002 à 10:34:06 (#1780027)
il n'existe pas a ma connaissance de fonctions permettant de "faire attendre" un script (a moins de coder une fonction qui le fait).
remarque generale sur les scripts :
pourquoi au lieu de :
object oPlayer = GetEnteringObject();
object oTargetArea = GetObjectByTag("*******",0);
AssignCommand(oPlayer,ActionJumpToLocation(GetLocation(oTargetArea)));
ne pas utiliser :
object oPlayer = GetEnteringObject();
object oTargetArea = GetObjectByTag("*******",0);
AssignCommand(oPlayer,ActionJumpToObject(oTargetArea));
.....................?
pour le script 4 :
ton ActionStartConversation me parait un peu bizarre etant donné que c'est l'appellant qui va se mettre a parler avec oPlayer, je penses pas qu'un trigger puisse parler ......
sinon c'est normal que les effets passent avant les actions, car les autres sont des actions, donc posés dans la liste des actions en attendant d'etre traités (donc bien apres....), alors que les effets sont des fonctions appelées telles quelles dans le script (donc instantannées....)
Par Gargantuel le 9/7/2002 à 10:38:37 (#1780045)
void main()
{
object oPlayer = GetEnteringObject();
if (GetObjectType(oPlayer) == OBJECT_TYPE_CREATURE)
{
object oTargetArea = GetObjectByTag("*******",0);
if (oTargetArea != OBJECT_INVALID)
{
AssignCommand(oPlayer,ActionJumpToLocation(GetLocation(oTargetArea)));
ApplyEffectToObject (DURATION_TYPE_TEMPORARY, EffectKnockdown(), oPlayer, 3.0);
AssignCommand(oPlayer, SpeakString("***"));
}
}
}
Si jamais tu tentes un EffectKnockDown sur autre chose qu'une créature, je suis pas sur que nwn digère ca correctement ...
Pour savoir comment faire qu'un corps ne disparaisse pas il suffit de regarder comment Bioware a fait dans son module prélude fourni avec NWN (tu sais quand les gobelins butent tout le monde dans la zone de training).
Pour ton problème de paralysie, je seche.
Par Adalorn le 9/7/2002 à 12:19:46 (#1780545)
Edit//:oui, encore un bug, le knockdown plante même tout seul, dés qu'il doit se lancer, quand un perso rentre, pourtant, c'est compilé correctement...
JOL Archives 1.0.1
@ JOL / JeuxOnLine