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
-
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
-
Je pense pas que tu puisse faire ça, vu que le joueur meurt automatiquement à 0% de vie
-
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)
-
Oui exactement, c'est un peut cela ! Mais où placé le code. "OnPlayerDeath" ou "SetPlayerSpawn" ?
-
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.
-
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 ?
-
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...
++
-
Oui voilà.. Ce qui est assez difficile pour moi !
-
Pas tres difficile, pour ton timer qui verifie si le joueur a 10de vie, tu fait SetTimerEx("tontimer", 250, true, "i", playerid);
-
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 ^^
-
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 :
if (health < 10.0 && healt > 0.99)
-
En effet, faute de ma part ^^
-
Salut, merci pour votre aide. J'essayerais une fois IG ! :P
-
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 ^^
-
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 ...
-
Ba faire mourir le joueur 2 fois n'est pas important. Mais comment pourrais-je faire pour sauvegardé la position ? "GetPlayerPos" ?
-
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.
-
Sinon, il n'y aurais pas un moyen simple de faire un système de mort ? Car je me perd beaucoup..
-
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 :
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:
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() :
SetTimer("Verification1", 250, true); // On lance le timer
timerverif1 = SetTimer("Verification2", 250, true); // On lance le timer
DANS ONPLAYERDEATH(playerid, killerid, reason) :
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é
-
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 ^^
-
Ok Merci pour l'info, sinon le principe est bon? sa devrai marché si on corrige l'erreur?
-
Bah oué tu as qu'a ésséyé
PS : Ton système de biz marche ?
-
oui je vien de rentrer chez moi, sa marche niquel, maintenant je me lance dans la creation de ses commandes
-
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;*
}
}
-
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
-
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.
-
moi aussi tornade sa ne marche pas sont code
-
regardé ce qu'a dit sasuke78200, sa devrai vous aidé
-
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
-
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.
-
Hmm.. Brian Turner, j'ai mis le SetTimerEx dans OnPlayerConnect.
-
et sa marche tornad ?
-
Sa fait un Warning --'
-
Et bah tu donne ton code et tes erreurs / warn :bangin
-
Chaque chose en son temps. Déjà j'essaie de résoudre sa.. :bangin