GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Damien_Lohier le 30 Décembre 2010, 17:39:22

Titre: Problème SetTimer
Posté par: Damien_Lohier le 30 Décembre 2010, 17:39:22
Bonjour!
J'ai mis un timer, mais il ne fonctionne pas (pour les move object) j'ai d’abord testé sur un MoveObject, mais il ne revient pas.
En gros: Une cmd ouvre un porte, mais le l'a ferme pas :/
L'ais-je mal placé?

Citer
      if (strcmp("/porteadmin", cmdtext, true, 10) == 0)
      {
          if (IsPlayerAdmin(playerid))
          {
              SendClientMessage(playerid, 0x800000FF, "La porte principal de la maison des admins est ouverte. Fermeture dans 10 secondes");
              MoveObject(Porteprincipaladmin1, -1538.56518600,482.20385700,7.92317000, 3.5); // Ouvert avec timer
              MoveObject(Porteprincipaladmin2, -1521.91003400,482.09603900,7.89035500, 3.5); // Ouvert avec timer
              SetTimer("message",10000,false);
          }
      else
      {
          SendClientMessage(playerid, 0xFF0000FF, "Tu ne peux pas entrer dans la maison des admins.");
      }
      return 1;
   }
Titre: Re : Problème SetTimer
Posté par: cristab le 30 Décembre 2010, 18:11:33
euh franchement rien ne te choc la SetTimer("message",10000,false); franchement faite attention a moin que tu ei appeler ton public qui referme la porte message

de plus il me semble qu'il faut utiliser SetTimerEx
Titre: Re : Problème SetTimer
Posté par: Damien_Lohier le 30 Décembre 2010, 20:35:36
Le message je le remet plus tard, il ne sert pas a faire le retour de la porte :)
Sinon je le place comment le SetTimerEx?
(je suis en 0.3c final)
Titre: Re : Problème SetTimer
Posté par: Jcvag44800 le 30 Décembre 2010, 20:51:35
Salut,

Dans le showroom tu as ce tuto  http://www.gtaonline.fr/forums/index.php/topic,4289.0.html (http://www.gtaonline.fr/forums/index.php/topic,4289.0.html)

Bonne chance
Titre: Re : Problème SetTimer
Posté par: Damien_Lohier le 30 Décembre 2010, 21:05:05
Merci je regarde

Edit: Je ne comprend pas le système, j'ai mis la même phrase ( SetTimer("Urban", 7000, 0); ) Mais les portes ne se referme pas...
Titre: Re : Problème SetTimer
Posté par: cristab le 30 Décembre 2010, 21:52:24
il faut dire que sans le code ben sa va etre dur de t'aider
Titre: Re : Problème SetTimer
Posté par: Damien_Lohier le 30 Décembre 2010, 21:58:15
Les news:

Citer
new Porteprincipaladmin1;
new Porteprincipaladmin2;

Les createObjects:
Citer
   Porteprincipaladmin1=CreateObject(985,-1530.78796400,482.20385700,7.92317000,0.00000000,0.00000000,-0.85943669); //object(4)
    Porteprincipaladmin2=CreateObject(985,-1529.58715800,482.09603900,7.89035500,0.00000000,0.00000000,-0.85943669); //object(5)

La commande:

Citer
      if (strcmp("/porteadmin", cmdtext, true, 10) == 0)
      {
          MoveObject(Porteprincipaladmin1, -1538.56518600,482.20385700,7.92317000, 3.5); // Ouvert avec timer
          SetTimer("Urban", 1000, 0);
        MoveObject(Porteprincipaladmin2, -1521.91003400,482.09603900,7.89035500, 3.5); // Ouvert avec timer
        SetTimer("Urban2", 1000, 0);
        SendClientMessage(playerid, 0x800000FF, "La porte principal de la maison des admins est ouverte. Fermeture dans 10 secondes");
      return 1;
   }
Titre: Re : Problème SetTimer
Posté par: cristab le 30 Décembre 2010, 22:08:42
est les public Urban1 et Urban2 surtout eux qui nous interesse
Titre: Re : Problème SetTimer
Posté par: Damien_Lohier le 30 Décembre 2010, 22:46:00
Oui et j'en fait quoi  :blink
Titre: Re : Problème SetTimer
Posté par: cristab le 31 Décembre 2010, 11:30:43
tu les post ici ...
Titre: Re : Problème SetTimer
Posté par: Damien_Lohier le 31 Décembre 2010, 11:52:41
Comment ça?!
Je les ai pas mis autre part  :lmfao Fallait le mettre ou?
Titre: Re : Problème SetTimer
Posté par: cristab le 31 Décembre 2010, 12:10:21
lol

il faut les creer

forward Urban();
public Urban()
{
   MoveObject(Porteprincipaladmin1, -1530.78796400,482.20385700,7.92317000,0, 3.5); // Ouvert avec timer
}

voila ajoute sa sa fonctionneras
Titre: Re : Problème SetTimer
Posté par: Damien_Lohier le 31 Décembre 2010, 12:39:28
Je le met dans ma commande?

Double post
Citer
C:\Users\Damien Lohier\Desktop\Samp 0.3c\gamemodes\Stuntdrift.pwn(343) : error 029: invalid expression, assumed zero
C:\Users\Damien Lohier\Desktop\Samp 0.3c\gamemodes\Stuntdrift.pwn(343) : warning 215: expression has no effect
C:\Users\Damien Lohier\Desktop\Samp 0.3c\gamemodes\Stuntdrift.pwn(343) : error 001: expected token: ";", but found "if"
C:\Users\Damien Lohier\Desktop\Samp 0.3c\gamemodes\Stuntdrift.pwn(346) : warning 217: loose indentation
C:\Users\Damien Lohier\Desktop\Samp 0.3c\gamemodes\Stuntdrift.pwn(346) : error 029: invalid expression, assumed zero
C:\Users\Damien Lohier\Desktop\Samp 0.3c\gamemodes\Stuntdrift.pwn(346) : error 017: undefined symbol "Urban"
C:\Users\Damien Lohier\Desktop\Samp 0.3c\gamemodes\Stuntdrift.pwn(347) : error 029: invalid expression, assumed zero
C:\Users\Damien Lohier\Desktop\Samp 0.3c\gamemodes\Stuntdrift.pwn(347) : error 017: undefined symbol "Urban"
C:\Users\Damien Lohier\Desktop\Samp 0.3c\gamemodes\Stuntdrift.pwn(349) : warning 202: number of arguments does not match definition
C:\Users\Damien Lohier\Desktop\Samp 0.3c\gamemodes\Stuntdrift.pwn(351) : warning 217: loose indentation
C:\Users\Damien Lohier\Desktop\Samp 0.3c\gamemodes\Stuntdrift.pwn(353) : error 029: invalid expression, assumed zero
C:\Users\Damien Lohier\Desktop\Samp 0.3c\gamemodes\Stuntdrift.pwn(353) : error 017: undefined symbol "Urban2"
C:\Users\Damien Lohier\Desktop\Samp 0.3c\gamemodes\Stuntdrift.pwn(354) : warning 217: loose indentation
C:\Users\Damien Lohier\Desktop\Samp 0.3c\gamemodes\Stuntdrift.pwn(354) : error 029: invalid expression, assumed zero
C:\Users\Damien Lohier\Desktop\Samp 0.3c\gamemodes\Stuntdrift.pwn(354) : error 017: undefined symbol "Urban2"
C:\Users\Damien Lohier\Desktop\Samp 0.3c\gamemodes\Stuntdrift.pwn(356) : warning 202: number of arguments does not match definition
C:\Users\Damien Lohier\Desktop\Samp 0.3c\gamemodes\Stuntdrift.pwn(358) : warning 217: loose indentation
Pawn compiler 3.2.3664           Copyright (c) 1997-2006, ITB CompuPhase


9 Errors.

Et voici le code avec le timer complet:
Citer
      if (strcmp("/porteadmin", cmdtext, true, 10) == 0)
      {
          if (IsPlayerInRangeOfPoint(playerid, 6, -1530.4268,484.5358,7.1797)) || if (IsPlayerInRangeOfPoint(playerid, 6, -1529.3427,478.9946,7.1875))
          {
                MoveObject(Porteprincipaladmin1, -1538.56518600,482.20385700,7.92317000, 3.5); // Ouvert avec timer
             forward Urban();
         public Urban()
         {
               MoveObject(Porteprincipaladmin1, -1530.78796400,482.20385700,7.92317000,0, 3.5); // Ouvert avec timer
         }
                SetTimer("Urban", 10000, false);
              MoveObject(Porteprincipaladmin2, -1521.91003400,482.09603900,7.89035500, 3.5); // Ouvert avec timer
              forward Urban2();
         public Urban2()
         {
               MoveObject(Porteprincipaladmin1, -1530.78796400,482.20385700,7.92317000,0, 3.5); // Ouvert avec timer
         }
              SetTimer("Urban2", 10000, 0);
              SendClientMessage(playerid, 0x800000FF, "La porte principal de la maison des admins est ouverte. Fermeture dans 10 secondes");
            return 1;
      }
      else
      {
          SendClientMessage(playerid, 0xFF0000FF, "Tu n'es pas devant la porte!");
          return 1;
        }
   }

PS: Je n'ai pas réussi a faire une commande sur un des deux choix avec "if (IsPlayerInRangeOfPoint(playerid, x, y, z))"  :dry
Titre: Re : Problème SetTimer
Posté par: Damien_Lohier le 31 Décembre 2010, 13:04:23
Ton commentaire m'aide beaucoup c'est sur  :dry

C'est peut être tout simplement parce que je ne comprend pas!
Explique moi au lieu de te foutre de ma ******
Titre: Re : Problème SetTimer
Posté par: cristab le 31 Décembre 2010, 13:09:55
ce que je t'es dit d'ajouter tu le met tout en bas de ton script et non pas dans la commande
Titre: Re : Problème SetTimer
Posté par: Damien_Lohier le 31 Décembre 2010, 13:35:08
Ah oué c'est différent merci :)

(Désolé si je répond pas vite, mon navigateur est mort xD)
Titre: Re : Problème SetTimer
Posté par: Xartrick le 31 Décembre 2010, 13:35:24
Je suis d'accord avec Dizzy-Beno (pour une fois).
Tu fais un copier/coller sans comprendre ce que tu fais alors qu'il existe des tutoriels comme celui de Gilux qui explique en douceur le Pawn.




Tu ne peux déclarer une fonction dans une fonction ou dans un callback, c'est illogique.
Titre: Re : Problème SetTimer
Posté par: Damien_Lohier le 31 Décembre 2010, 13:49:01
Bref, passons  :D
Le timer fonctionne parfaitement merci Cristab!
Ps: Je dois faire un public pour chaque fois que j'utilise un timer??

Double post
Un soucis, j'ai mis quatre timer sur quatre commandes différentes (1 sur chaque), mais quand j'utilise la commande, une seul porte s'ouvre. Vous comprendrez mieux avec le code :)

forward:
Citer
forward Timer3();
forward Timer4();
forward Timer5();
forward Timer6();

CreateObject: (fermé)
Citer
   Portemarine1=CreateObject(975,-1635.79064900,258.09396400,1.81356800,0.00000000,91.10028943,89.38141604); //object(36)
    Portemarine2=CreateObject(975,-1432.88269000,289.88739000,1.69441900,0.00000000,89.38141604,90.24085273); //object(40)
    Portemarine3=CreateObject(975,-1310.03649900,483.61636400,1.81728700,6.87549354,88.52197935,90.24085273); //object(46)
   Portemarine4=CreateObject(975,-1456.28491200,483.63339200,1.88630600,0.00000000,91.10034672,90.24085273); //object(47)

Les commandes:
Citer
   if (strcmp("/portemarine1", cmdtext, true, 10) == 0)
      {
      MoveObject(Portemarine1, -1635.79064900,260.86828600,1.81356800, 3.5);
      SetTimer("Timer3", 5000, false);
          SendClientMessage(playerid, 0x800000FF, "Les portes marine sont ouvertes. Fermeture dans 10 secondes.");
          return 1;
    }
    if (strcmp("/portemarine2", cmdtext, true, 10) == 0)
      {
          MoveObject(Portemarine2, -1432.88269000,292.63732900,1.69441900, 3.5);
          SetTimer("Timer4", 5000, false);
          SendClientMessage(playerid, 0x800000FF, "Les portes marine sont ouvertes. Fermeture dans 10 secondes.");
          return 1;
    }
    if (strcmp("/portemarine3", cmdtext, true, 10) == 0)
      {
          MoveObject(Portemarine3, -1310.03649900,480.91653400,1.81728700, 3.5);
          SetTimer("Timer5", 5000, false);
          SendClientMessage(playerid, 0x800000FF, "Les portes marine sont ouvertes. Fermeture dans 10 secondes.");
          return 1;
    }
    if (strcmp("/portemarine4", cmdtext, true, 10) == 0)
      {
          MoveObject(Portemarine4, -1456.28491200,480.83371000,1.98630600, 3.5);
          SetTimer("Timer6", 5000, false);
          SendClientMessage(playerid, 0x800000FF, "Les portes marine sont ouvertes. Fermeture dans 10 secondes.");
          return 1;
    }

Et les public en bas de page:
Citer
public Timer3()
{
   MoveObject(Portemarine1, -1635.79064900,260.86828600,1.81356800, 3.5); // Fermé avec timer
}

public Timer4()
{
   MoveObject(Portemarine2, -1432.88269000,292.63732900,1.69441900, 3.5); // Fermé avec timer
}

public Timer5()
{
   MoveObject(Portemarine3, -1456.28491200,480.83371000,1.98630600, 3.5); // Fermé avec timer
}

public Timer6()
{
   MoveObject(Portemarine4, -1529.58715800,482.09603900,7.89035500, 3.5); // Fermé avec timer
}

J'ai vérifié les coordonnés x y et z mais il sont correctes...

Conclusion:

Je demande de l'aide car une seul porte (toujours la même) s'ouvre pour n'importe quel commande, mais pas ceux que je demande...
Titre: Re : Problème SetTimer
Posté par: Brian Turner le 02 Janvier 2011, 14:49:09
salut

deja dans ton timer, tu met 5000 millisecondes, hors sa fait 5 secondes, donc 10000 pour 10 secs.
apres, enleve le 10 et le true du if(strcmp("......", cmdtext, true, 10)==0)  sa donne:

Code: (pawn) [Sélectionner]
if(strcmp("/....",cmdtext) == 0)
++ Brian
Titre: Re : Problème SetTimer
Posté par: Damien_Lohier le 02 Janvier 2011, 22:06:31
Merci de ta réponse!
Mon problème est résolu  ;)

Je souhaite bonne année à tout le monde  :cheers

(Merci de ne pas poster inutilement par la suite 8) )