Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

[Script] bloquer/controler/empecher d'agir un PC

Par mobidique le 21/10/2002 à 9:53:01 (#2373265)

Comment forcer un PC à faire une action donnée, comment coincer/bloquer son clavier l'empecher de controler son perso pour une durée donnée ? En utilisant la commande SetCommandable(TRUE/FALSE, object) et en l'utilisant comme ça :


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)

Merci ^^


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)

de surcroit ça marche ... je vais juste un peu plus loin pour dire que le code que j'ai donné ci-dessus est sur un trigger, que dans les actions il y a un déplacement, que ce déplacement se fait vers waypoint et qu'au pied de ce waypoint il y a un trigger sur lequel il y a le
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)

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.

Par Taern le 2/2/2003 à 20:01:28 (#3156532)

Pourtant il me semblait que, même si le joueur est "contrôlé", il lui est possible d'annuler les actions qui lui sont assignées en cliquant sur les icônes d'action en haut à gauche.

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)

A noter aussi que ce serait plutot comme ca :


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)

je rappels ke je capte rien de rien au script, je suis un bete utilisateur, et ce ke j aimerais faire c ke je joueur perde le control losk il arrive sur un trigger et le regagne sil je le tp sur un otre trigger donc il me faudrait 2 scripts pour 2 triggers différant si possible :)

Par mobidique le 3/2/2003 à 10:08:15 (#3159343)

Un premier script sur le OnEnter d'un trigger :

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)

merci bcp, si ta un moment j en profite pourait tu regarder le script ke g mis sur mon post : teleportation par la classe.

J'abuse je sais :p

Par mobidique le 3/2/2003 à 10:15:47 (#3159383)

Pas le temps :( ... Mais tu fais un mixed entre mon post sur "Des traces à suivre" où pour mémoire les traces n'étaient identifiables que par un ranger ou un druide et le post de la téléportation ça devrait le faire, d'autant que les constantes identifiant les classes sont assez explicites et facilement trouvable via aurora.

Par ruru666 le 3/2/2003 à 10:41:16 (#3159531)

je trouve pa le post avec la recherche je retombe sur celui la :(

Par ruru666 le 3/2/2003 à 10:53:31 (#3159629)

Ok c bon oubli, trouvé mais ca m aide pas pour mon script etant donné ke je suis vraiment trop nul pour ca :(

Par mobidique le 3/2/2003 à 10:53:36 (#3159631)

va voir le persistant des scripts :rolleyes:

Par Azrael07 le 3/2/2003 à 17:25:27 (#3162643)

mobidique > non mon script n'était pas testé, tu doit probablement avoir raison, en réalité je n'ai jamais vraiment testé le "SetCommandable", je me fixais uniquement sur la facon dont j'imaginais utliser la fonction.

Merci d'avoir rectifié :merci: :merci:

JOL Archives 1.0.1
@ JOL / JeuxOnLine