• 24 Avril 2025, 01:01:27


Auteur Sujet: [Question] Fonction  (Lu 1394 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Stylis

  • Scripter
  • *
  • Nouveau
  • Scripter
  • Messages: 23
    • Voir le profil
    • Team P.oG`
[Question] Fonction
« le: 30 Octobre 2009, 00:12:04 »
Bonjour | Bonsoir,,

Je voudrais savoir si il existe une fonction pour tester si un joueur est en vie et le nombre de joueur en vie.
Car en se moment, je suis entrain de créer un GM Fun et si il reste 1 personne vivante, il gagne de l'argent et tout les autre joueurs respawn mais si il reste genre 4 joueurs vivantes, il ne respawn pas et attend jusqu'à qu'un seule joueur soit vivant.

Voila, j'espère avoir bien explique ma question.
Cordialement,
++Stylis

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : [Question] Fonction
« Réponse #1 le: 30 Octobre 2009, 00:21:11 »
Salut,

la fonction n'existe pas telle qu'elle, mais sa-mp te fourni les outils pour le déterminer

GetPlayerState et GetPlayerHealth (car je ne suis pas certains que GetPlayerHealth seul fasse le boulot)

si tu désire utiliser une méthode différente, tu peut te créer un tableau en variable globale qui indique au gm si un joueur est mort ou vivant (changement de la valeur dans la callback OnPlayerDeath), puis grâce à une loop qui test tous les joueurs, tu peut déterminer le nombre de joueur étant toujours vivants.

++Sim++





Hors ligne Stylis

  • Scripter
  • *
  • Nouveau
  • Scripter
  • Messages: 23
    • Voir le profil
    • Team P.oG`
Re : [Question] Fonction
« Réponse #2 le: 30 Octobre 2009, 00:27:31 »
Merci de ta réponse si rapide :cheers
Mais pour moi ce que tu vien de me dire, c'est du Chinois.
J'aurais besoin d'un peu plus d'explication s'il te plait.

Merci encore de ta réponse si rapide ;)

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : [Question] Fonction
« Réponse #3 le: 30 Octobre 2009, 00:44:59 »
Salut,

si ce que tu désire est une fonction qui te permet de connaître le nombre de joueurs vivants, tu peut le faire avec les fonctions native GetPlayerHealth et GetPlayerState de la façon suivante:

GetAlivePlayers()
{
new alive = 0, Float:Health;
for(new i = 0; i < MAX_PLAYERS; i++)
{
switch(GetPlayerState(playerid))
{
case (status ou le joueur peut être vivant):
{
GetPlayerHealth(i, Health);
if(Health)
{
alive++;
}
}
}
}
return alive;
}

comme tu peut le remarquer, cette fonction test chacun des joueurs, vérifie que leur statut est un statut "possiblement vivant", puis vérifie s'ils ont de la vie (donc sont vivants)
donc tu pourrais utiliser cette fonction afin de récupérer le nombre de joueurs vivants.

Néanmoins, il existe une autre méthode (que j'aurais tendance à favoriser), utiliser un tableau qui indique au script si les joueurs sont vivants ou morts:

new IsAlive[MAX_PLAYERS];//à palcer en haut du script

//à placer dans OnPlayerDeath
IsAlive[playerid] = 0;
if(GetAlivePlayers() <= 1)
{
....
}

//quand le joueurs spawn
IsAlive[playerid] = 1;


//une fonction autre qui retourne encore le nombre de joueurs vivants
GetAlivePlayers()
{
new alive = 0;
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsAlive[i])
{
alive++;
}
}
return alive;
}

voilà, en espérant que les codes soient clairs

++Sim++





Hors ligne Stylis

  • Scripter
  • *
  • Nouveau
  • Scripter
  • Messages: 23
    • Voir le profil
    • Team P.oG`
Re : [Question] Fonction
« Réponse #4 le: 30 Octobre 2009, 06:13:04 »
J'ai essayer de comprendre ce code mais je n'y comprend toujours rien.
Je ne veut pas de code pré-fait ! Je veux comprendre.

Double post
UP !
« Modifié: 31 Octobre 2009, 00:45:22 par Stylis »

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : [Question] Fonction
« Réponse #5 le: 31 Octobre 2009, 14:51:20 »
Salut,

d'accord, une petite explication rapide,

donc ma fonction test tout les joueurs un à un (par la loop for(new  i = 0; i < MAX_PLAYERS; i++) )
par la suite je ne fait que vérifier si le joueur est vivant (soit par la variable, soit par un double test GetPlayerState / GetPlayerHealth)
donc si le joueur est vivant, on ajoute 1 au compte des joueurs vivants. (ici il s'agit de post-incrémentation)
tu pourrais remplacer la ligne :
alive++;par la ligne :
alive = alive + 1;qui sont en fais équivalentes.
ensuite la fonction retourne la valeur de la variable alive (qui correspond au nombre de joueurs toujours vivants).

Par contre, après une petite réflexion, je pense que même en évitant le test GetPlayerState la fonction pourrait fonctionner (la 1ère):

GetAlivePlayers()
{
new alive = 0, Float:Health;//variable compte joueurs et variable pour récupérer la vie des joueurs
for(new i = 0; i < MAX_PLAYERS; i++)//on test tous les joueurs un à un
{
if(GetPlayerHealth(i, health))//si le joueur n'est pas connecté (ou invalide à tester la vie (par exemple en statut spectateur)), la fonction retourne 0
{
if(Health)//si le joueur a de la vie
{
alive = alive + 1;//on augmente la valeur de alive de 1
}
}
}
return alive;//on retourne le nombre de joueurs vivants
}

j'espère que c'est clair, je sais que je ne suis pas très bon pour expliquer....

++Sim++





Hors ligne Stylis

  • Scripter
  • *
  • Nouveau
  • Scripter
  • Messages: 23
    • Voir le profil
    • Team P.oG`
Re : [Question] Fonction
« Réponse #6 le: 31 Octobre 2009, 23:57:25 »
Merci beaucoup Sim :)
J'ai une dernier question, comment mettre:


Code: (Schémas) [Sélectionner]
Si les personnes en vie sont égale a 1 // C'est sa que je veut savoir
{
On prend le pseudo du joueur vivant // Sa c'est OK ;)
On envoie un message pour dire "Le gagnant est {Le Pseudo}" // Sa c'est OK ;)
On lui donne de l'argent // Sa c'est OK ;)
}

Peut t'ont faire comme sa ?

Code: (Pawn) [Sélectionner]
if (alive = 1)
{

}

Merci encore Sim ;)

Cordialement,
++Stylis
« Modifié: 31 Octobre 2009, 23:59:25 par Stylis »

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : [Question] Fonction
« Réponse #7 le: 01 Novembre 2009, 14:54:58 »
Salut,

en fait tu devrais placer la fonction que je t'ai donné à la fin de ton gm puis l'appeler dans ta condition:

if(GetAlivePlayers() == 1)
{
...
}

si t'as d'autres questions, n'hésite pas ;)

++Sim++





Hors ligne Dark_revan

  • Serveur RPG : *¤REAL DREAM¤*
  • *
  • Bandit
  • Script Serveur RolePlay.
  • Messages: 338
    • Voir le profil
Re : [Question] Fonction
« Réponse #8 le: 01 Novembre 2009, 17:10:32 »
non car soit doit etre alive[playerid]
forcement car chaque jour doit avoir la variable et si tu met seulement alive sa sera pour le serveur.
Moi je ferai sa je le fait vite fait donc sa doit pas etre bon ^^ mais sa pourrat t'aider.

Genre :

SetTimer("gagnant",5000,1);
forward gagnant(playerid);
public gagnant(playerid)
{
   if(IsPlayerConnected(playerid))
   {
     new string[256];
     new Float health;
     GetPlayerHealth(playerid,health);
     if(healh > 0)
     {
       new playername[MAX_PLAYER_NAME];
       GetPlayerName(playerid, playername, sizeof(playername));
       format(string,sizeof(string),"Le gagnant est %s",playername);
       SendClientMessageToAll(giveplayerid,COL_GREEN,string);       
       SendClientMessage(playerid,COLOR_GREEN,"Tu est le gagnant !!!");
       GivetPlayerMoney(playerid,1);
     }
   }
   return 1;
}

Desoler bug il ma envoyer sans rien faire ^^
« Modifié: 01 Novembre 2009, 17:20:18 par Dark_revan »

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : [Question] Fonction
« Réponse #9 le: 01 Novembre 2009, 17:13:20 »
Salut,

sans vouloir être chiant,
je ne vois pas vraiment l'intérêt d'ajouter des calculs au serveur en passant par un timer alors que la callback OnPlayerDeath nous permet très bien de savoir qui est mort ou non.... (c'est d'ailleurs ce que j'avais fais dans le second exemple de mon premier post)

++Sim++





Hors ligne Dark_revan

  • Serveur RPG : *¤REAL DREAM¤*
  • *
  • Bandit
  • Script Serveur RolePlay.
  • Messages: 338
    • Voir le profil
Re : [Question] Fonction
« Réponse #10 le: 01 Novembre 2009, 17:18:25 »
...
« Modifié: 01 Novembre 2009, 17:20:34 par Dark_revan »

Hors ligne Stylis

  • Scripter
  • *
  • Nouveau
  • Scripter
  • Messages: 23
    • Voir le profil
    • Team P.oG`
Re : [Question] Fonction
« Réponse #11 le: 02 Novembre 2009, 01:19:38 »
Merci de vos réponse, je vais essayer avec sa et je vous tien au courant ;)

Encore merci Sim :cheers