Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > [script] Probleme pour lancer des effects en boucle
[script] Probleme pour lancer des effects en boucle
Par Rhakim Solari le 6/8/2002 à 0:24:13 (#1922492)
J'ai écrits un petit scripts, mais j'ai deux problemes:
1 - Il vaut mieux placer le script où? J'avais pensé dans le OnSpawn, mais le fait qu'il tourne ne boucle meme lorsque l'on est pas à portée de vue, ca risque de faire ramer le module non?
2 - Bon, je suis une quiche (vu que le terme est à la mode ;) ), et j'aimerais savoir comment je peut faire pour que mon script se lance en boucle, parceque là, le npc lance le "sort" une seul fois, et puis plus rien :sanglote:
Re: [script] Probleme pour lancer des effects en boucle
Par Shanya AlThor le 6/8/2002 à 13:37:40 (#1924894)
Provient du message de Rhakim Solari
Alors c simple: 2 npc qui font mine de se lancer des sorts à tour de role, les sorts n'étant que des effects sans plus...
1 - Il vaut mieux placer le script où? J'avais pensé dans le OnSpawn, mais le fait qu'il tourne ne boucle meme lorsque l'on est pas à portée de vue, ca risque de faire ramer le module non?
Etant une mega quiche dans les scripts, je ne saurais te répondre parfaitement. Cependant je vois souvent des sujets parlant d'un OnPerceive ou un truc comme cela.
Je pense que ca colle bien avec ce que tu sembles vouloir faire...
Par Gargantuel le 6/8/2002 à 14:51:20 (#1925325)
Toutes les 6 secondes, le NPC lancera un sort comme dans le module d'intro de Bioware où un NPC s'entraine a lancer des sorts sur un manequin.
D'ailleurs tu peux regarder comment ils ont fait.
Par Rhakim Solari le 7/8/2002 à 17:37:14 (#1931146)
Par Kemay le 8/8/2002 à 1:47:03 (#1932712)
Dans l'event onEnter du trigger:void main()
{
object oPC = GetEnteringObject();
if ( GetIsPC(oPC) )
{
int nPCIn = GetLocalInt(OBJECT_SELF,"PCIn") + 1;
object oMage1 = GetObjectByTag("MAGE1");
SetLocalInt(OBJECT_SELF,"PCIn",nPCIn);
ExecuteScript("MageDuel",oMage1);
}
}
Dans l'event onExit du trigger :void main()
{
object oPC = GetExitingObject();
if ( GetIsPC(oPC) )
{
int nPCIn = GetLocalInt(OBJECT_SELF,"PCIn") - 1;
SetLocalInt(OBJECT_SELF,"PCIn",nPCIn);
}
}
le script "MageDuel", un nouveau script sauvergardé sous ce nom qui ne nécessite d'être attaché à aucun event:void main()
{
//Si il y a des joueurs dans le trigger exécuter la série de "faux" sorts
if ( GetLocalInt(GetObjectByTag("TR_MAGEDUEL"),"PCIn") > 0 )
{
object oMage1 = OBJECT_SELF;
object oMage2 = GetObjectByTag("MAGE2");
//la série de de sorts (en fait sans effet autre que visuel)
ActionCastFakeSpellAtObject(SPELL_ENERGY_DRAIN,oMage2);
AssignCommand(oMage2,ActionWait(2.0));
AssignCommand(oMage2,ActionCastFakeSpellAtObject(SPELL_LIGHTNING_BOLT,oMage1));
ActionWait(2.0);
//Fin de la série de "faux" sorts
//Executer à nouveau le script
ActionDoCommand(ExecuteScript("MageDuel",OBJECT_SELF));
}
//Si il n'y a pas de joueurs dans le trigger arrêter tout
else
{
ClearAllActions();
AssignCommand(oMage2,ClearAllActions());
}
}
Voilà, ca devrait marcher. Je n'ai pas le temps de tester pour l'instant, mais le principe est là : Trigger Power / A mort le onHeartBeat ;)
Par Rhakim Solari le 8/8/2002 à 23:28:36 (#1936979)
Je testerais ca demain :) ActionDoCommand(ExecuteScript("MageDuel",OBJECT_SELF));
En fait, c la commande ExecuteScript qui manquait à mon vocabulaire :ange:
JOL Archives 1.0.1
@ JOL / JeuxOnLine