[script]Revérouillage automatique des portes

Répondre
Partager Rechercher
Citation :
Provient du message de Ange Musicien
Nan !!! Le premier script sert à VERROUILLER la porte, le deuxième à la FERMER AUTOMATIQUEMENT. Si vous voulez qu'elle se ferme et qu'elle se LOcke automatiquement, vous mettez ça dans le On Open :
Code PHP:

void main()
{
object oPorte OBJECT_SELF;
DelayCommand(6.0ActionCloseDoor(oPorte));
DelayCommand(7.0ActionLockObject(oPorte));

Capito ?
marche pas, elle se relock pas avec la clé... je pe l'ouvrir sans la clé apres...
bon, t'as éssayé en lui donannt un nivo en dévérouilage
parce que g p-e halluciné, mais mon PNJ garde (guerrier) ne vérouillait rien du tout, et quand je lui ai filé un nivo en dévéroyillage, ba je pouvais plus rentré, ca revérouillait bien ... pis ca a déjà été évoqué qq part d'autre me semble ... menfin g p-e des vision

a, le script va dans les event de la porte, t'as éssayé avec "Setlocked" ?

Code PHP:

void main()
{
object oPorte OBJECT_SELF;
DelayCommand(6.0ActionCloseDoor(oPorte));
DelayCommand(7.0SetLocked(oPorteTRUE)); //g aps trouve de constante donc g suppose que c t TRUE, met FALSE si ca marche pas ... si ca marche tjrs pas ... ba repost lol

ce que tu peux faire, c'est un Assign command sur un PNJ, perso je trouve plus sympa ^_^
genre

Code PHP:

void main()
{
object oPnj GetObjectByTag("PORTIER"); //PORTIER est le tag du portier ^_^
object oPorte OBJECT_SELF;
DelayCommand(6.0AssignCommand(oPnjActionCloseDoor(oPorte)));
DelayCommand(7.0AssignCommand(oPnjActionLockObject(oPorte)));

bon, je ferais pas ca comme ca parce quele DelayComamnd c'est mal ( joke )
mais ca devrait marcher et là ton PNJ bouge son derrière pour fermer et vérouiller la porte

fin en théorie
Tu n'as pas d'impressions après vérification mon perso avait 1 en verrouillage, ça doit venir du 20 en dext et du fait que c'est un elfe... J'sais pas... En tout cas le prend pas mal j'ai pas fait exprès

Bon quoi qu'il en soit, si tu a bin coché la case Reverrouillable dans les propriétés de ta porte, c'est pas normal. Car tu l'a cochée, hein ?
Citation :
Provient du message de Reyan
bon, t'as éssayé en lui donannt un nivo en dévérouilage
parce que g p-e halluciné, mais mon PNJ garde (guerrier) ne vérouillait rien du tout, et quand je lui ai filé un nivo en dévéroyillage, ba je pouvais plus rentré, ca revérouillait bien ... pis ca a déjà été évoqué qq part d'autre me semble ... menfin g p-e des vision

a, le script va dans les event de la porte, t'as éssayé avec "Setlocked" ?

Code PHP:

void main()
{
object oPorte OBJECT_SELF;
DelayCommand(6.0ActionCloseDoor(oPorte));
DelayCommand(7.0SetLocked(oPorteTRUE)); //g aps trouve de constante donc g suppose que c t TRUE, met FALSE si ca marche pas ... si ca marche tjrs pas ... ba repost lol

ce que tu peux faire, c'est un Assign command sur un PNJ, perso je trouve plus sympa ^_^
genre

Code PHP:

void main()
{
object oPnj GetObjectByTag("PORTIER"); //PORTIER est le tag du portier ^_^
object oPorte OBJECT_SELF;
DelayCommand(6.0AssignCommand(oPnjActionCloseDoor(oPorte)));
DelayCommand(7.0AssignCommand(oPnjActionLockObject(oPorte)));

bon, je ferais pas ca comme ca parce quele DelayComamnd c'est mal ( joke )
mais ca devrait marcher et là ton PNJ bouge son derrière pour fermer et vérouiller la porte

fin en théorie
Comment on fait un assign et c koi un assign ?
Fo le mettre sur le perso, la porte, un objet ???
Un conseil : fais les 6 tutoriels pour les scripts, sont super cool, t'apprendra vite. Si tu demandes ce que c'est qu'un assigne... C'est grave
Enfin on a presque tous été des quiches, avant.

AssignCommand(...) est une fonction qui demande à un npc de faire quelque chose. Par conséquent tu la mets où tu veux . Ici, dans OnOpen.
Citation :
Provient du message de Master_Prince
Comment on fait un assign et c koi un assign ?
Fo le mettre sur le perso, la porte, un objet ???
limite j'en ai utilisé un dans le script
en fait, la plupart des fonction qui demande de faire qq chose, le demande a celui qui execute ce script, en l'occurence, la porte. Donc comme c'est pas tjrs dumeilleur effet, ou bien une bonne idée, on utilise les "AssignCommand" pour demander à quelqu'un d'autre de le faire ^_^
vachement util tu verras
Lightbulb
Je sais pas pourquoi il y a tant de script sur ce topic pas simple et qui ne fonctionne pas non plus d'une manière simple...
Voilà un script qui permet de fermer ET de vérouiller une porte après 6 seconde d'ouverture :
Code PHP:

//::///////////////////////////////////////////////
//:: Fermeture automatique pares 6 secondes et reverouillage (OnOpen)
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
Un script a mettre dans TOUTES les portes de votres module ! lol
La porte se referme au bout de 6 seconde d'ouverture et surtout se reverouille
correctement (clef utilisable si la case est cochee) si le TAG de la porte est de type :
"tagdelaporte_lock"
Voila...
*/
//:://////////////////////////////////////////////
//:: Created By: Flavien Clermont (Kzimir666)
//:: Created On: 20 Octobre 2003
//:://////////////////////////////////////////////
void main()
{
DelayCommand(6.0ActionCloseDoor(OBJECT_SELF));
if(
GetStringRight(GetTag(OBJECT_SELF),5) == "_lock"ActionDoCommand(SetLocked(OBJECT_SELF,TRUE));

Voilà... C'est le script que j'utilise pour mon module persistant en cours de développement... Ultra simple et ultra fonctionnel !
Citation :
Publié par Darkness Nigths
Je sais que le topic est vieux mais voila, moi je voudrai que toute les portes de la zones ce ferme et soit verrouillé dé qu'il y a un combat dans le zone.
Quelqu'un peut me donné un coup de main ??
Je pense qu'il faut que tu passe par un autre biais, en fonction de ta zone, et des créatures qui vont combattre.
Le plus simple a mon avis, c'est de mettre un script qui ferme toutes les portes si ta créature est attaquée.
Si tu as plusieurs créatures qui peuvent être attaquée, tu mets le script sur toutes les créatures, ou encore tu sélectionne les portes qui se ferment par leur tags. Tu peux meme faire 1 seul script qui récupère une variable locale sur la créature attaquée pour fermer telle ou telle porte.
Et si tu veux en fermer plusieurs avec une seule variable, tu utilise un GetStringLeft ou Right avec ta variable qui comporte les lettres a chercher.
Voila, bon courage. Et si tu ne vois pas la solution a partir de ce que je t'ai dit là, essaye de mieux reposer ton problème.
Ben en faite je veux mettre le même système que pour le repos, quand il y a un combat on peu plus se reposé. Je me demandai si on pouvait pas utilisé même principe.

Je prévient quand même que je suis une vrai bille en script.

PS: je veux pas en particulier qu'il soit en une seul variable mais c'est vrai que ça pourrai être avantageux.
Citation :
Publié par Darkness Nights
Ben en faite je veux mettre le même système que pour le repos, quand il y a un combat on peu plus se reposé. Je me demandai si on pouvait pas utilisé même principe.

Je prévient quand même que je suis une vrai bille en script.

PS: je veux pas en particulier qu'il soit en une seul variable mais c'est vrai que ça pourrai être avantageux.
Le truc c'est qu'on peux pas faire le script a ta place, d'autant que en fonction de la configuration de ton module il peux changer. Et meme si on te donne presque tous les elements, il vaut mieux que tu reconnaisses un peu ce qu'on te propose pour le comprendre, voir l'adapter.
Déja essaye de décrire cette configuration, c'est juste pour 1 combat contre une créature, contre plusieurs ? C'est dans plusieurs salles, dans une seule ? y'a combien de portes ?
Ce que tu veux faire ressemble a un piège, a moins que dans ton monde il soit impossible d'ouvrir une porte quand on est en combat ? Ce qui serait bizare.
Bref, donne quelque précisions, et on pourra sans doute te donner une base.
Ben en fait j'ai pas de module, je fait juste quelque zone pour un srv.

C'est lors d'un combat en générale, quelque soit la créature et l'endroit dans la zone ou l'on est. Un combat commence, les portes de la zone entière ce ferme...
Je doit avoir dans toute la zone environ 10 portes.

En gros si 2 PJ sont dans la zone a l'autre bout l'un de l'autre, celui en haut de la zone combat quelques créatures dû a un spawn, hop toutes les portes de la zone ce ferme et même le PJ qui est en bas et qui ne participe même pas au combat ce retrouve lui aussi enfermé.
Le seul moyen de sortir est de tué les créatures vu qu'on sais que pour réussir un bon jet de dés de déverrouillage il ne faut pas être en combat.
Donc en faite les script a mettre seront sur la zone et non le module vu qu'il n'agiront que dans cette zone.
J'ai cherché un peu, et pour le moment je propose ça, je ne sais pas si ça marche, mais tu as là dedan la plupart des fonctions utiles pour ton script.
C'est à placer dans le OnUserDefined de tes créatures attaquées car il me semble que la zone ne peux pas detecter si il y a un combat sur elle meme autrement qu'en demandant au créatures si elle sont en combat.

Code PHP:

void main()
{
int nUser GetUserDefinedEventNumber();
if (
nUser == 1005//attaquée
    
{
    
object oDoor GetFirstObjectInArea();
    while (
GetIsObjectValid(oDoor))
    {
    
int nType GetObjectType(oDoor);
    if(
nType == OBJECT_TYPE_DOOR)
        {
        
AssignCommand(oDoorActionCloseDoor(OBJECT_SELF));
        
AssignCommand(oDoorSetLocked(OBJECT_SELF,TRUE));
        }
    
GetNextObjectInArea();
    }

Je ne vois qu'un défaut à cette technique, c'est sa redondance inutile en cas de combat de masse.
En passant par une variable locale mise à jour sur l'objet zone, on peut considérablement diminuer la charge ici. Surtout, s'il y a dix portes et trente monstres.

Citation :
Le seul moyen de sortir est de tué les créatures vu qu'on sais que pour réussir un bon jet de dés de déverrouillage il ne faut pas être en combat.
Faux. Il existe un don de roublard fait exprès pour ça. Il provoque un jet automatique de 20 au dé si le roublard a le don correspondant à la compétence utilisée.
Le script est bon, il fonctionne et fait son boulot. La technique est largement moins bonne. Le principe c'est de ne déclencher ce script qu'une fois par combat.
Euh, tu as le droit de t'y mettre... C'est pas interdit de faire des trucs soi-même.
En meme temps on va pas tout faire pour toi, faudra que tu attende qu'un scripteur soit confronté au meme problème, ce qui peux prendre plus de temps que de travailler les tutoriels par toi meme.
ba, là, tel que le problème est formulé, c'est presque fini (enfin, c'est fini, mais y a trop de charge comme dit plus haut)
remarque : ici, les portes sont fermées lors du premier combat. C'est tout.
Genre elles s'ouvrent pas toutes seuls

petite ajout pour alléger : (c'est ce dont parle Azmathiel je pense)


Code:
  
void main()
{
    int nUser = GetUserDefinedEventNumber();
    if (nUser == 1005) //attaquée
    {
        int nClosed = GetLocalInt(GetArea(OBJECT_SELF), "IS_LOCKED");
        if(!nClosed)
        {
             object oDoor = GetFirstObjectInArea();
             while (GetIsObjectValid(oDoor))
             {
                 int nType = GetObjectType(oDoor);
                 if(nType == OBJECT_TYPE_DOOR)
                 {
                     AssignCommand(oDoor, ActionCloseDoor(OBJECT_SELF));
                     AssignCommand(oDoor, SetLocked(OBJECT_SELF,TRUE));
                 }
                 GetNextObjectInArea();
             }
             SetLocalInt(GetArea(OBJECT_SELF), "IS_LOCKED", TRUE);
        }
    }
}
c'est indenter et ca compile
Sérieux, les tutriaux sont simples, explicites, rapides, et permettent de faire 99% des scripts les plus utiles

Reyan qui passait par hasard
__________________
scripteur à mi-temps amateur brouillon flemmard
et pas si compétent, encore un scienteux
qui ne sait aligner deux mots correctement

quelques messages d'erreurs classiques
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés