Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > [Script] bloquer/controler/empecher d'agir un PC
[Script] bloquer/controler/empecher d'agir un PC
Par mobidique le 21/10/2002 à 9:53:01 (#2373265)
AssignCommand(oPC,Action...);
AssignCommand(oPC,Action...);
....
AssignCommand(oPC,Action...);
DelayCommand(0.01f,SetCommandable(False,oPC);
Aprés quoi il est évidemment impératif de redonner le controle au joueur par SetCommandable(TRUE/FALSE, oPC); a vous de vous debrouillez d'identifier quand et comment de sorte que les actions stockées dans la pile soient toutes executées.
Illustration bientôt.
Mob'.
PS : j'ai rien inventé, je l'ai piqué sur le forum bioware aprés n'avoir rien trouvé ici bien que je suis intimement persuadé que SetCommandable ait déjà été donné.
Par eMRaistlin le 21/10/2002 à 9:58:28 (#2373285)
Je me demandais si ca existait, et j'avais pas eu le temps de chercher... c'est cool ^^
Par mobidique le 21/10/2002 à 10:12:29 (#2373340)
SetCommandable(TRUE,oPC);
Valà c'est une soluce pour redonner le controle au PC aprés que les actions aient été réalisées ;)
Par ruru666 le 2/2/2003 à 19:27:04 (#3156227)
Par Taern le 2/2/2003 à 20:01:28 (#3156532)
En tout cas c'est ce que j'ai constaté pour une action de type attaque, je ne sais pas si ça se réalise pour tous les types d'actions.
Par Azrael07 le 3/2/2003 à 6:53:58 (#3158803)
pourrais tu donner les scripts complet a mettre dans les triggers, c a d celui ou le joueur pert le control et celui ou il le reprend, merci.
ben pas besoin de triggers "perte de controle" et "reprise de controle"
tu fait :
void main()
{
object oPC = //initialisation quelconque
AssignCommand(oPC, ActionDoCommand(SetCommandable(TRUE, oPC)));
AssignCommand(oPC,Action...);
AssignCommand(oPC,Action...);
....
AssignCommand(oPC,Action...);
AssignCommand, ActionDoCommand(SetCommandable(False,oPC);
}
le pj va perdre le controle, faire toutes les actions qui lui sont imposé puis automatiquement reprendre le controle de son personnage
/!\ ATTENTION /!\ il ne faut surtout pas croiser un ClearAllActions sinon tu ne réccupèrera jamais le controle de ton pj :(
Par eMRaistlin le 3/2/2003 à 7:28:30 (#3158856)
void main()
{
object oPC = //initialisation quelconque
AssignCommand(oPC,ClearAllActions());
AssignCommand(oPC,Action...);
AssignCommand(oPC,Action...);
....
AssignCommand(oPC,Action...);
DelayCommand(0.5,SetCommandable(False,oPC));
AssignCommand(oPC, ActionDoCommand(SetCommandable(TRUE, oPC)));
}
Il est important de se rappeler l'effet de SetCommandable:
C'est une commande qui permet d'empecher que le personnage puisse ajouter une commande a sa pile d'action.
Il est necessaire que toute les commandes soient envoye AVANT le setcommandable.
[Edit = Balise malheureuse]
Par Iridian le 3/2/2003 à 8:29:40 (#3158958)
DelayCommand(0.01f,SetCommandable(False,oPC);
Ba si j'avais su avant qu'il fallait mettre un DelayCommand, ca m'aurai évité deux heures de tests raté ;)
Merci !
Par ruru666 le 3/2/2003 à 9:42:37 (#3159228)
Par mobidique le 3/2/2003 à 10:08:15 (#3159343)
void main()
{
object oPC= GetEnteringObject();
object oDestination = GetNearestObjectByTag("WP_"+GetTag(OBJECT_SELF));
location lDestination = GetLocation(oDestination);
SetLocalInt(oPC,"Glisse",TRUE);
AssignCommand(oPC,ClearAllActions());
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectMovementSpeedIncrease(500),oPC,1.5f);
AssignCommand(oPC,SetFacing(GetFacingFromLocation(lDestination)));
AssignCommand(oPC,ActionSpeakString("CIEL! JE GLISSE !",TALKVOLUME_SHOUT));
AssignCommand(oPC,ActionForceMoveToObject(oDestination,TRUE,0.0f));
DelayCommand(0.01f,SetCommandable(FALSE,oPC));
}
Le second script toujours sur le OnEnter d'un trigger :void main()
{
object oPC=GetEnteringObject();
if(GetLocalInt(oPC,"Glisse")==TRUE){
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectKnockdown(),oPC,3.0f);
DelayCommand(3.0f,SetCommandable(TRUE,oPC));
SetLocalInt(oPC,"Glisse",FALSE);
}
}
Azrael > je voudrais pas dire de conneries et je ne sais pas si tu as testé ton code ... Mais il me semble que le setcommandable à false non seulement empeche le joueur de controler son avatar mais en plus bloque toute commande affecté à ce perso ... Commandable oui/non quoi et dans le script tu fais des AssignCommand. Cela doit être la raison pour laquelle on monte d'abord une pile d'action puis on bloque le joueur le temps que ces actions soient effectuées ... Mais je me trompe peut être ...
Par ruru666 le 3/2/2003 à 10:12:54 (#3159370)
J'abuse je sais :p
Par mobidique le 3/2/2003 à 10:15:47 (#3159383)
Par ruru666 le 3/2/2003 à 10:41:16 (#3159531)
Par ruru666 le 3/2/2003 à 10:53:31 (#3159629)
Par mobidique le 3/2/2003 à 10:53:36 (#3159631)
Par Azrael07 le 3/2/2003 à 17:25:27 (#3162643)
Merci d'avoir rectifié :merci: :merci:
JOL Archives 1.0.1
@ JOL / JeuxOnLine