GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Blaster le 01 Avril 2008, 20:01:47

Titre: Petit problème avec vie infinie !
Posté par: Blaster le 01 Avril 2008, 20:01:47
Donc, on m'avais expliquer ici comment faire un timer pour avoir une vie infinie de que l'on se connecte au server.

Mais en faites, en ce moments je suis en train de faire un petit mod de dm et en faite on peut jamais mourrir avec le timer de vie infinie (normale en même temps :laugh). Et je ne voie pas comment résoudre mon problème.

Merci d'avance pour votre aides :)
Titre: Re : Petit problème avec vie infinie !
Posté par: NatiVe™ le 01 Avril 2008, 20:21:37
Tu fait un KillTimer dans ta commande pour rentréer dans le DM et tu relance de Timer quand tu sort !

NV.

Titre: Re : Petit problème avec vie infinie !
Posté par: Blaster le 01 Avril 2008, 20:32:27
Ok, donc je fait

KillTimer(playerid);

et quand on veut sortir ou on meur je met

SetTimer(playerid);

J'en est pas franchement idée

Sa change quelque chose si mon DM est un filtrescript et dans mon gamemode il y a le timer pour la vie ?
Titre: Re : Petit problème avec vie infinie !
Posté par: R@f le 01 Avril 2008, 21:16:13
KillTimer(playerid); et SetTimer(playerid); :blink
Pour le kill timer faut mettre le nom du timer, donc ce que tu dois faire c'est mettre " new nomdutimer; " en haut du script avant main, puis là où tu utilises le timer tu mets " nomdutimer=SetTimer("ce que sa doit executer",1,1000); " (le 1 veux dire que le timer se répète et le 1000 c'est le temps en ms). Pour utiliser le kill timer tu le mets là où t'as besoin de le mettre et tu fais " KillTimer(nomdutimer) " ;) j'espère que sa t'aide  :)

++
R@f
Titre: Re : Petit problème avec vie infinie !
Posté par: Syg le 01 Avril 2008, 22:53:02
Ce n'est pas du tout une bonne idée d'utiliser un KillTimer.
Tout d'abord, je ne suis pas sûr que la fonction KillTimer fonctionne très bien.
Mais surtout, le timer de vie infinie sert pour TOUS les joueurs, il serait dommage de l'arréter pour tout le monde parce qu'un seul joueur est en DM.
Ensuite, ton DM est dans un filterscript, tu ne pourras pas y arrêter un timer que tu as démarré dans le gamemode

La solution est beaucoup plus simple, il suffit d'utiliser une variable qui indique si le joueur est en DM ou pas. Et dans le timer, si le joueur est en DM, on ne lui remet pas sa vie.
Pour la variable, c'est un tableau, il suffit de mettre l'élément correpondant au joueur à 1 quand le joueur entre dans le DM et de le remettre à 0 quand il en sort. Dans le timer, si l'élément corespondant au joueur est ègal à 0, on remet la vie du joueur.

Soit :
/* En haut du script, en dehors de toute fonction */
new JoueurEnDM[MAX_PLAYERS];

/* Dans la commande qui fait entrer dans le DM */
JoueurEnDM[playerid] = 1;

/* Dans la commande qui fait sortir du DM */
JoueurEnDM[playerid] = 0;

/* Dans le timer pour la vie infinie */
for (new j=0 ; j<MAX_PLAYERS ; j++)
{
    /* Si le joueur est connecté */
    if (IsPlayerConnected (j))
    {
        /* Si le joueur n'est pas en DM */
        if (JoueurEnDM[j] == 0)
        {
            /* On remet la vie du joueur au max */
        }
    }
}

Maintenant, si ton DM est dans un filterscript, tu vas avoir des problèmes car PAWN ne permet pas de voir et d'utiliser les données du gamemode dans les filterscripts et vice versa.
Le mieux, c'est soit de mettre le timer pour la vie infinie dans le filterscript ou le DM dans ton gamemode. (j'ai une préférence pour la deuxième solution).

++
Syg
Titre: Re : Petit problème avec vie infinie !
Posté par: Blaster le 02 Avril 2008, 15:40:39
D'abord merci de m'aider :)

J'ai suivi tous ce que vous m'avez dit de faire, sa se compile bien. Mais quand je tappe /dm-1, je ne peut pas mourrir ...
Titre: Re : Petit problème avec vie infinie !
Posté par: [StAfF]MaN le 02 Avril 2008, 16:32:34
Fait voir ton code stp  :happy