GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Tornade-L™ le 18 Août 2010, 22:15:32

Titre: [ Aide ] Après la mort..
Posté par: Tornade-L™ le 18 Août 2010, 22:15:32
Bonsoir à tous,
[/b]
µ
Je viens de me demandé comme je pourrais faire en sorte qu'après 20 secondes (Par exemple) le joueur qui aurais sa vie à 0% meurt. Seulement, je ne voudrais pas qu'il meurt directement. Qu'il y est une animations (J'ai déjà fait cela avec l'action) et dès les 20 secondes passée, le joueur meurt..

M'avez-vous compris ?

EDIT: Faut-il utilisé le code "SetTimeExr ?

Cordialement, Tornade-L
Titre: Re : [ Aide ] Après la mort..
Posté par: Ssk le 18 Août 2010, 22:25:25
Je pense pas que tu puisse faire ça, vu que le joueur meurt automatiquement à 0% de vie
Titre: Re : [ Aide ] Après la mort..
Posté par: Soravani le 18 Août 2010, 22:27:14
En effet, ce pendant, tu peu faire un timer, qui, quand ton joueur à 10 de vie et moins, il a l'anim, et enfin, après 20 seconde, il crève. (par exemple)
Titre: Re : [ Aide ] Après la mort..
Posté par: Tornade-L™ le 18 Août 2010, 22:33:54
Oui exactement, c'est un peut cela ! Mais où placé le code. "OnPlayerDeath" ou "SetPlayerSpawn" ?
Titre: Re : [ Aide ] Après la mort..
Posté par: Soravani le 18 Août 2010, 22:40:16
Oulaaa,

tu crée un timer, quand il a moins de 10 de vie, tu lance un autre timers pour 20 secondes par exemples...
Et après les 20 secondes passé, bam, tu le tue.
Titre: Re : [ Aide ] Après la mort..
Posté par: Tornade-L™ le 18 Août 2010, 22:41:58
Oui, c'est ce que je fait. On verra ce que sa donne. Je vous tiens au courant.

** Double Message **

Eux.. Sa fait rien. Enfin si, mais le joueurs meurt tout le temps. Il spawn, il meurt.. Je voudrais savoir comment faire pour que le joueur reste à la position qu'il meurt ?
Titre: Re : [ Aide ] Après la mort..
Posté par: Gilux le 18 Août 2010, 23:16:03
Ton timer doit se répéter (Nom, intervalle, (Répéter : true ou n'agir qu'une fois : false))
Mais après il faut trouver un évènement où tu pourrais lancer ton timer et qu'il réussisse à coup sûr...
++
Titre: Re : [ Aide ] Après la mort..
Posté par: Tornade-L™ le 18 Août 2010, 23:28:18
Oui voilà.. Ce qui est assez difficile pour moi !
Titre: Re : [ Aide ] Après la mort..
Posté par: Brian Turner le 18 Août 2010, 23:55:04
Pas tres difficile, pour ton timer qui verifie si le joueur a 10de vie, tu fait SetTimerEx("tontimer", 250, true, "i", playerid);
Titre: Re : [ Aide ] Après la mort..
Posté par: Soravani le 19 Août 2010, 09:49:15
Bon, j'suis de bonne humeur:

En haut, dans ton script:
Forward vie(playerid);
OnGameModeInit:
SetTimerEx("vie", 250, true, "i", playerid);
En bas dans ton script:
public vie(playerid)
{
if(gPlayerLogged[playerid] == 1)
{
new Float:health;
GetPlayerHealth(playerid,health);
if (health < 10.0) // Si le joueur a en dessous de 10 de vie
{
                   // Ici tu met ton anim
  // Ici tu met un autre timer, pour les 20 secondes avec l'anim
                  TogglePlayerControllable(playerid, 1); // On freeze le joueur, comme ça, si on lui tire dessus, il ne perdra plus de vie.
   }
         }
}

Et donc, tu crée ton deuxième TIMER (ou tu le fait dans lui même) pour 20 secondes, avec la perte de vie du joueur, le unfreeze, et ta variable pour qu'il va à l'hopital !
J'suis pas sur que ce code fonctionne quand un mec ce suicide (tombe de plusieurs mètre de haut et crève) mais normalement, contre les tirs, ca devrez fonctionner.
J'viens de le faire, donc je ne confirme pas le fonctionnement, sur un fofo c'est assez dur ^^
Titre: Re : [ Aide ] Après la mort..
Posté par: Brian Turner le 19 Août 2010, 10:16:52
petit probleme : if (health < 10.0)
sa veux dire que si il a 0 sa fait quand meme l'anim donc en gros jcroi qui va resté freeze meme mort
donc faudrai faire :

Code: (pawn) [Sélectionner]
if (health < 10.0 && healt > 0.99)
Titre: Re : [ Aide ] Après la mort..
Posté par: Soravani le 19 Août 2010, 11:48:47
En effet, faute de ma part ^^
Titre: Re : [ Aide ] Après la mort..
Posté par: Tornade-L™ le 19 Août 2010, 14:08:02
Salut, merci pour votre aide. J'essayerais une fois IG !  :P
Titre: Re : [ Aide ] Après la mort..
Posté par: Ssk le 19 Août 2010, 14:12:35
Y aura un petit problème à ton  système ^^

Si le joueur tombe d'une très haute distance du sol, alors à l'atterrissage ça vie sera réduit directement à 0.
Et pareil pour les explosion de véhicule alors qu'il est à l'intérieur du véhicule ^^
Titre: Re : [ Aide ] Après la mort..
Posté par: Brian Turner le 19 Août 2010, 14:35:32
Le seul truc c'est que quand il meurt on sauv les coordonné ou il est, puis quand il spawn apres la mort on le fait revenir avec l'anim et le freeze, c'est la seul soluce pour les explosion ou de tomber de tres haut... mais sa veux dire faire mourir le joueur 2 fois ...
Titre: Re : [ Aide ] Après la mort..
Posté par: Tornade-L™ le 19 Août 2010, 14:55:46
Ba faire mourir le joueur 2 fois n'est pas important. Mais comment pourrais-je faire pour sauvegardé la position ? "GetPlayerPos" ?
Titre: Re : Re : [ Aide ] Après la mort..
Posté par: Brian Turner le 19 Août 2010, 15:03:52
Ba faire mourir le joueur 2 fois n'est pas important. Mais comment pourrais-je faire pour sauvegardé la position ? "GetPlayerPos" ?

au pire la 1ere fois le joueur n'est pas vraiment mort suffit de creer une variable quand il meurt la 1ere fois qui, si elle vaux 1 ne pas faire payer le joueur a l'hosto par exemple. Et quand le joueur meurt la 2eme fois on la remet a 0 et la on le fait payer.
Titre: Re : [ Aide ] Après la mort..
Posté par: Tornade-L™ le 19 Août 2010, 15:11:14
Sinon, il n'y aurais pas un moyen simple de faire un système de mort ? Car je me perd beaucoup..
Titre: Re : [ Aide ] Après la mort..
Posté par: Brian Turner le 19 Août 2010, 16:18:58
Bon, j'suis de bonne humeur:

En haut, dans ton script:
Forward vie(playerid);
OnGameModeInit:
SetTimerEx("vie", 250, true, "i", playerid);
En bas dans ton script:
public vie(playerid)
{
if(gPlayerLogged[playerid] == 1)
{
new Float:health;
GetPlayerHealth(playerid,health);
if (health < 10.0) // Si le joueur a en dessous de 10 de vie
{
                   // Ici tu met ton anim
  // Ici tu met un autre timer, pour les 20 secondes avec l'anim
                  TogglePlayerControllable(playerid, 1); // On freeze le joueur, comme ça, si on lui tire dessus, il ne perdra plus de vie.
   }
         }
}

Et donc, tu crée ton deuxième TIMER (ou tu le fait dans lui même) pour 20 secondes, avec la perte de vie du joueur, le unfreeze, et ta variable pour qu'il va à l'hopital !
J'suis pas sur que ce code fonctionne quand un mec ce suicide (tombe de plusieurs mètre de haut et crève) mais normalement, contre les tirs, ca devrez fonctionner.
J'viens de le faire, donc je ne confirme pas le fonctionnement, sur un fofo c'est assez dur ^^


@Soravani heahe sa va pas, car dans OnGameModeInit() la variable playerid n'existe pas ^^,  donc un simple SetTimer suffit, dans la verif faudra faire une boucle. Je me suis tompé moi aussi(j'avais oublié qu'il faut mettre sa dans OnGameModeInit)



Je sais pas trop mais je sais que lui est bien, normalement simple a comprendre.

Alors voila les explications:
1) on lance un timer qui verifie toutes les 250 millisecondes si le joueur a - de 10 de vie et + de 0 de vie.
2) on créé une variable et un timer, quand le joueur meurt pour la 1ere fois d'un seul coups, on verifie avec un timer si le joueur est mort direct, on met cette variable a 1, quand le joueur meurt la 2eme fois ont la met a 0 se qui permet de faire payer le joueur pour un serveur rp par exemple.

Tien je tes scripté sa, essaye de comprendre :

EN HAUT DE TON SCRIPT :
Code: (pawn) [Sélectionner]
new timerverif1; // on crée la variable qui stocke le timer 1
new timerverif2; // on crée la variable qui stocke le timer 2
new Float:VieJoueur[MAX_PLAYERS]; // On crée la variable qui stocke la vie du joueur
new MortDunCoups[MAX_PLAYERS] = 0; // On crée la variable
new Float:Posx[MAX_PLAYERS],Float:Posy[MAX_PLAYERS],Float:Posz[MAX_PLAYERS],Int[MAX_PLAYERS],Virt[MAX_PLAYERS]; // On crée la variable qui stoke la pos, int et vw

EN BAS DE TON SCRIPT:
Code: (pawn) [Sélectionner]
forward Verification2();
public Verification2()
{
  for(new i=0; i<MAX_PLAYERS; i++)
  {
  GetPlayerHealth(i,VieJoueur[i]); // On Sauvegarde sa vie dans la variable
if(VieJoueur[i] >= 11) // On verifie si le joueur a 11 ou plus de vie
{
KillTimer(timerverif1); // On stop le timer
timerverif2 = SetTimerEx("Verification3", 250, true, "i", i); // On lance le timer
}
}
return 1;

}
forward Verification3(playerid);
public Verification3(playerid)
{
  GetPlayerHealth(playerid,VieJoueur[playerid]); // On Sauvegarde sa vie dans la variable
if(VieJoueur[playerid] <= 0) // On verifie si le joueur a 0 ou - de vie
{
        KillTimer(timerverif2); // On stop le timer
    GetPlayerPos(playerid, Posx[playerid], Posy[playerid], Posz[playerid]); // On Sauvegarde dans les variables la pos x, y et z
    Int[playerid] = GetPlayerInterior(playerid); // On Sauvegarde l'interior du joueur dans la variable
    Virt[playerid] = GetPlayerVirtualWorld(playerid); // On sauvegarde le virtual world du joueur dans la variable
    MortDunCoups[playerid] = 1; // le joueur est mort d'un coups donc la variable = 1
timerverif1 = SetTimerEx("Verification2", 250, true, "i", playerid); // On lance le timer
}
return 1;

}
forward Verification1();
public Verification1()
{
new Float:health;
  for(new i=0; i<MAX_PLAYERS; i++) // On fait une boucle pour tous les joueurs
  {
GetPlayerHealth(i,health); // On Sauvegarde sa vie dans la variable
if(health <= 10.0 && health > 0.99) // On verifie si le joueur a - de 10 ou 10 de vie et plus de 0.99
{
    // ICI TU MET TON ANIMATION
SetTimerEx("StopAnim", 20000, false, "i", i); // On lance le timer
}
}

return 1;
}

DANS ONGAMEMODEINIT() :
Code: (pawn) [Sélectionner]
SetTimer("Verification1", 250, true); // On lance le timer
timerverif1 = SetTimer("Verification2", 250, true); // On lance le timer

DANS ONPLAYERDEATH(playerid, killerid, reason) :
Code: (pawn) [Sélectionner]
if(MortDunCoups[playerid] == 1) // On verifie si la variable = 1
{
    SetPlayerPos(playerid, Posx[playerid], Posy[playerid], Posz[playerid]); // On remet le joueur a la position ou il était
    SetPlayerInterior(playerid, Int[playerid]); // On remet le joueur dans l'interior ou il était
    SetPlayerVirtualWorld(playerid, Virt[playerid]); // On remet le joueur dans le monde virtuel ou il était
}
else
{
    //ICI TON SCRIPT POUR FAIRE PAYER L'HOSTO  ETC ...
}

Voila, essaye de comprendre, j'ai tout detaillé
Titre: Re : [ Aide ] Après la mort..
Posté par: Ssk le 19 Août 2010, 16:47:35
Brian Turner ton code, n'est pas bon ( celui du SetTimerEx )


Met plutot le SetTimerEx dans OnPlayerConnect()

Ou bien créer un timer global qui fait une boucle sur tout les joueurs ^^
Titre: Re : [ Aide ] Après la mort..
Posté par: Brian Turner le 19 Août 2010, 23:04:29
Ok Merci pour l'info, sinon le principe est bon? sa devrai marché si on corrige l'erreur?
Titre: Re : [ Aide ] Après la mort..
Posté par: Eloctro le 19 Août 2010, 23:11:32
Bah oué tu as qu'a ésséyé
PS : Ton système de biz marche ?
Titre: Re : [ Aide ] Après la mort..
Posté par: Brian Turner le 19 Août 2010, 23:19:35
oui je vien de rentrer chez moi, sa marche niquel, maintenant je me lance dans la creation de ses commandes
Titre: Re : [ Aide ] Après la mort..
Posté par: Tornade-L™ le 20 Août 2010, 21:11:26
Merci, j'aurais encore une question à vous posez.. Est ce qu'il faut que j'enlève ce code ci-dessous ?

if(MedicBill[playerid] == 1 && PlayerInfo[playerid][pJailed] == 0 && PlayerPaintballing[playerid] == 0)
{
    if(FirstSpawn[playerid] != 1)
    {
       /* new string[256];
    new cut = deathcost; //PlayerInfo[playerid][pLevel]*deathcost;
SafeGivePlayerMoney(playerid, -cut);
format(string, sizeof(string), "Docteur : Ne vous inquieter pas, il ira mieux bientot, il a besoin de repos.", cut);
SendClientMessage(playerid, TEAM_CYAN_COLOR, string);
MedicBill[playerid] = 0;
MedicTime[playerid] = 0;
NeedMedicTime[playerid] = 0;*/
PlayerInfo[playerid][pDeaths] += 1;
SetPlayerHealth(playerid, 25.0);
    SetPlayerInterior(playerid, 3);
    PlayerInfo[playerid][pInt] = 3;
        rand = random(sizeof(gMedicSpawns));
SetPlayerPos(playerid, gMedicSpawns[rand][0], gMedicSpawns[rand][1], gMedicSpawns[rand][2]); // Warp the player
SetPlayerFacingAngle(playerid, gMedicSpawns[rand][3]);
        TogglePlayerControllable(playerid, 0);
        GameTextForPlayer(playerid, "~n~ ~n~ ~n~ ~n~ ~n~ ~n~ ~n~ ~n~ ~n~ ~w~ Les infirmiers s'occupent de vous ...", 15000, 3);
        SendClientMessage(playerid, COLOR_YELLOW, "Tu es en train de te faire soigner par les docteurs, Vous devez attendre 15 seconde pour réssusiter.");
        JustDied[playerid] = 1;
        MedicTime[playerid] = 1;
        ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0);
                MedicTime[playerid] = 1;
      return 1;*
                }
        }
Titre: Re : Re : [ Aide ] Après la mort..
Posté par: Brian Turner le 20 Août 2010, 21:36:18
Merci, j'aurais encore une question à vous posez.. Est ce qu'il faut que j'enlève ce code ci-dessous ?

if(MedicBill[playerid] == 1 && PlayerInfo[playerid][pJailed] == 0 && PlayerPaintballing[playerid] == 0)
{
    if(FirstSpawn[playerid] != 1)
    {
       /* new string[256];
    new cut = deathcost; //PlayerInfo[playerid][pLevel]*deathcost;
SafeGivePlayerMoney(playerid, -cut);
format(string, sizeof(string), "Docteur : Ne vous inquieter pas, il ira mieux bientot, il a besoin de repos.", cut);
SendClientMessage(playerid, TEAM_CYAN_COLOR, string);
MedicBill[playerid] = 0;
MedicTime[playerid] = 0;
NeedMedicTime[playerid] = 0;*/
PlayerInfo[playerid][pDeaths] += 1;
SetPlayerHealth(playerid, 25.0);
    SetPlayerInterior(playerid, 3);
    PlayerInfo[playerid][pInt] = 3;
        rand = random(sizeof(gMedicSpawns));
SetPlayerPos(playerid, gMedicSpawns[rand][0], gMedicSpawns[rand][1], gMedicSpawns[rand][2]); // Warp the player
SetPlayerFacingAngle(playerid, gMedicSpawns[rand][3]);
        TogglePlayerControllable(playerid, 0);
        GameTextForPlayer(playerid, "~n~ ~n~ ~n~ ~n~ ~n~ ~n~ ~n~ ~n~ ~n~ ~w~ Les infirmiers s'occupent de vous ...", 15000, 3);
        SendClientMessage(playerid, COLOR_YELLOW, "Tu es en train de te faire soigner par les docteurs, Vous devez attendre 15 seconde pour réssusiter.");
        JustDied[playerid] = 1;
        MedicTime[playerid] = 1;
        ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0);
                MedicTime[playerid] = 1;
      return 1;*
                }
        }
Il a l'air de servire totalement a rien car il est commenté. Donc normalement oui puisque la comme tu nous le montre il sert a rien
Titre: Re : [ Aide ] Après la mort..
Posté par: Tornade-L™ le 20 Août 2010, 21:52:23
Oui. Il sert à "Faire soigné".. Merci bien.

EDIT: Le code que tu m'a donné Brian Turner, ne marche pas. La position ne se sauvegarde pas. Le joueur respawn à son QG ou au lieu de spawn.
Titre: Re : [ Aide ] Après la mort..
Posté par: Leonidas300 le 21 Août 2010, 12:12:48
moi aussi tornade sa ne marche pas sont code
Titre: Re : [ Aide ] Après la mort..
Posté par: Brian Turner le 21 Août 2010, 16:56:57
regardé ce qu'a dit sasuke78200, sa devrai vous aidé
Titre: Re : [ Aide ] Après la mort..
Posté par: Leonidas300 le 21 Août 2010, 18:10:58
quelle Settimer on doit mettre dans Onplayerconnect
et c'est le code ou il y a le settimerex qu'on doit mettre dan sonplayerconnect ?
c'est le public
Titre: Re : [ Aide ] Après la mort..
Posté par: Brian Turner le 21 Août 2010, 20:39:33
je crois que c'est eux :
   SetTimer("Verification1", 250, true); // On lance le timer
   timerverif1 = SetTimer("Verification2", 250, true); // On lance le timer

Transformez les en SetTimerEx.
Titre: Re : [ Aide ] Après la mort..
Posté par: Tornade-L™ le 21 Août 2010, 20:49:43
Hmm.. Brian Turner, j'ai mis le SetTimerEx dans OnPlayerConnect.
Titre: Re : [ Aide ] Après la mort..
Posté par: Leonidas300 le 21 Août 2010, 21:42:37
et sa marche tornad ?
Titre: Re : [ Aide ] Après la mort..
Posté par: Tornade-L™ le 21 Août 2010, 22:00:20
Sa fait un Warning --'
Titre: Re : [ Aide ] Après la mort..
Posté par: spiirou le 21 Août 2010, 22:13:44
Et bah tu donne ton code et tes erreurs / warn  :bangin
Titre: Re : [ Aide ] Après la mort..
Posté par: Tornade-L™ le 21 Août 2010, 22:41:53
Chaque chose en son temps. Déjà j'essaie de résoudre sa..  :bangin