porte s'ouvrant avec un anneau

Répondre
Partager Rechercher
voici un petit script que j'ai fait mais qui ne compile pas ! il est censé faire s'ouvrir une porte par toute personne possédant un anneau ! dites moi si ca tiens la route ?

Code PHP:

void main()
{

object oPC GetLastOpenedBy();

if (!
GetIsPC(oPC)) return;

if (
GetItemPossessedBy(oPC"anneauava")== OBJECT_INVALID)
   {
   
sDeny="Vous ne pouvez ouvrir cette porte"// il me mets ici variable defined without type

   
SendMessageToPC(oPCsDeny);

   return;
   }

object oTarget;
oTarget GetObjectByTag("porteprison");

AssignCommand(oTargetActionOpenDoor(oTarget));
// ferme la porte apres un certain temps
    
DelayCommand(5.0ActionCloseDoor(OBJECT_SELF));

Tu n'as pas déclaré sDeny, Xelone.

Code PHP:

string sDeny
Voilà la raison de ton message d'erreur, ton programme ne sait pas quel type de variable est sDeny. C'est du string, du int, du float, du gingembre, du béton cellulaire ? Il n'en sait fichtre rien, puisque tu ne le précise pas.



Y a un autre truc qui me choque: GetLastOpenedBy... Si la porte a été ouverte, le script est sans objet, si elle l'a pas été, qui peut bien être le GetLastOpenedBy (censement, la dernière personne qui a ouvert la porte)... surement pas celle qui essaye d'ouvrir la porte maintenant.

C'est le GetLastUsedBy() qu'il te faut, je pense...

Un autre truc qui me surprend, c'est le oTarget: pourquoi ne pas utiliser directement OBJECT_SELF, comme pour le delaycommand?

D'ailleurs, il te faudra peut être utilisé un AssignCommand pour le DelayCommand comme pour le ActionOpenDoor.

*fais un chtit coucou à Twistouille au passage*
donc ca donnerai un truc du genre:

Code PHP:

void main()
{

string sDeny;
object oPC GetLastUsedBy();

if (!
GetIsPC(oPC)) return;

if (
GetItemPossessedBy(oPC"anneauava")== OBJECT_INVALID)
   {
   
sDeny="Vous ne pouvez ouvrir cette porte"// il me mets ici variable defined without type

   
SendMessageToPC(oPCsDeny);

   return;
   }

AssignCommand(ActionOpenDoor(OBJECT_SELF));
// ferme la porte apres un certain temps
AssignCommand(DelayCommand(5.0ActionCloseDoor(OBJECT_SELF)));

euh, je me suis inspiré de plusieurs script ! mais le sDeny, je le definis comment ?
Je pense qu'il faut rajouter OBJECT_SELF dans ton AssignCommand, avant le ActionOpenDoor...
pour le sDeny, je crois que ça va marcher (je suis pas une reference).
voici ce que ça donne (ca compile) mais ca ne fonctionne pas, ma porte reste fermée. Dans l'onglet serrure, je l'ai mise en verrouillée, cle requise

Code PHP:

void main()
{

string sDeny;
object oPC GetLastUsedBy();

if (!
GetIsPC(oPC)) return;

if (
GetItemPossessedBy(oPC"anneauava")== OBJECT_INVALID)
   {
   
sDeny="Vous ne pouvez ouvrir cette porte";

   
SendMessageToPC(oPCsDeny);

   return;
   }

AssignCommand(OBJECT_SELF,ActionOpenDoor(OBJECT_SELF));
// ferme la porte apres un certain temps
AssignCommand(OBJECT_SELF,DelayCommand(5.0ActionCloseDoor(OBJECT_SELF)));

donc un UnlockObject ! a placer où ?

Code PHP:

void main()
{

string sDeny;
object oPC GetLastUsedBy();

if (!
GetIsPC(oPC)) return;

if (
GetItemPossessedBy(oPC"anneauava")== OBJECT_INVALID)
AssignCommand(OBJECT_SELF,ActionUnlockObject(OBJECT_SELF)); // a mettre ici ou + loin ?
   
{
   
sDeny="Vous ne pouvez ouvrir cette porte";

   
SendMessageToPC(oPCsDeny);

   return;
   }

AssignCommand(OBJECT_SELF,ActionOpenDoor(OBJECT_SELF));
// ferme la porte apres un certain temps
AssignCommand(OBJECT_SELF,DelayCommand(5.0ActionCloseDoor(OBJECT_SELF)));

edit : fonctionne tjr pas comme ca !! mais je me pose une question en regardant mon script : je ne devrais pas mettre un "else" quelque part ? ou le sDeny fait office ?
Tu ne peux pas juste faire un anneau avec le tag de la clef??

Quite à rajouter si tu y tiens absolument un script pour afficher le vous ne pouvez ouvrir cette porte dans le OnFailToOpen...
Le plus simple est que tu fasse un déclencheur devant ta porte, dans lequel tu mets ce script. N'oublie pas de changer le TAG de ta porte en "RINGDOOR":

Code PHP:

void main()
{

string sDeny ;
object oPC ;
object oDoor ;

oDoor GetObjectByTag("RINGDOOR") ;
oPC GetEnteringObject();
sDeny "Vous ne pouvez ouvrir cette porte";

if (
GetIsPC(oPC) == TRUE)
    {
    if (
GetItemPossessedBy(oPC"anneauava") == OBJECT_INVALID)
        {
        
SendMessageToPC(oPCsDeny) ;
        }
        else
            {
            
AssignCommand(oDoorActionUnlockObject(oDoor)) ;
            
AssignCommand(oDoorActionOpenDoor(oDoor));
            
DelayCommand (5.0ActionCloseDoor(oDoor)) ;
            }
    }

testé, fonctionne.
Mon dieu qu'est ce que je suis bete !!! pq j'ai en effet pas pensé a mettre le tag de mon anneau pour la clé !!! pffff a force de chercher des scripts, j'ai l'impression qu'on oublie la simplicité !!!
Répondre

Connectés sur ce fil

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