• 10 Juillet 2025, 04:05:39


Auteur Sujet: problème paramètres fonction  (Lu 2539 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne maxya

  • *
  • Tueur en série
  • Messages: 158
    • Voir le profil
problème paramètres fonction
« le: 07 Août 2013, 03:06:09 »
Salut,

Je voudrais crée une fonction dont un de ces paramètre serait killerid de la callback OnPlayerDeath et pouvoir utilisé cette fonction n'importe ou dans le code .

Merci d'avance,
Cordialement,

PS: Je ne sais pas même pas si c'est possible mais bon...

Hors ligne Salif

  • *
  • Tueur
  • Messages: 52
    • Voir le profil
Re : problème paramètres fonction
« Réponse #1 le: 07 Août 2013, 03:38:14 »
Je voudrais pas dire de bêtises, mais je verrai ça comme ça :

forward TaFonction(killerid);
public TaFonction(killerid)
{
     // INSTRUCTIONS
     return 1;
}

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Re : problème paramètres fonction
« Réponse #2 le: 07 Août 2013, 05:36:25 »
Même si tu ne le souhaitais pas, c'est une bêtise. Mais bien tenté !

Ce qu'il faut savoir, c'est que les variables passées en arguments sont dîtes locales. À la fin de l'exécution d'une fonction, ces dernières sont supprimées de la mémoire. La variable killerid de la callback OnPlayerDeath (qui n'est rien d'autre qu'une fonction événementielle) est supprimée dès lors que la fonction se termine.

Maintenant, en ce qui concerne ce que tu souhaites faire. J'ai du mal à cerner l'intérêt de récupérer cette variable, dans le sens où presque toutes les actions possibles et imaginables sont réalisables au sein de la callback. Il serait bon que tu m'expliques ce que tu penses en faire, pour que je t'aiguille vers une manière de faire plus adéquate.

À défaut de savoir précisément ce que tu souhaites faire, voici un exemple d'application. Le code suivant enregistre pour chaque joueur l'identifiant de la dernière personne a l'avoir tué. Autrement dit, si le joueur A tue le joueur B, la valeur pour le joueur B sera l'identifiant du joueur A. Ça peut être pratique... si on a besoin de savoir par qui un joueur s'est précédemment fait tuer.

Code: (pawn) [Sélectionner]
// On définit un tableau avec une case pour chaque joueur
new t_LastKill[MAX_PLAYERS];

// On initialise chaque case avec une valeur qui ne peut pas être un identifiant de joueur (en l’occurrence, -1)
for(new i = 0; i < MAX_PLAYERS; i++)
{
  t_LastKill[i] = -1;
}

// Dans la callback OnPlayerDeath, on enregistre dans la case du joueur l'identifiant de celui qui l'a tué
public OnPlayerDeath(playerid, killerid, reason)
{
  t_LastKill[playerid] = killerid;
  return 1;
}

// On peut maintenant utiliser notre variable comme bon nous semble
new s_PlayerName[MAX_PLAYER_NAME],
    s_KillerName[MAX_PLAYER_NAME],
    s_MSG[128];

if(IsPlayerConnected(t_LastKill[playerid])
{
  GetPlayerName(playerid, s_PlayerName, MAX_PLAYER_NAME);
  GetPlayerName(t_LastKill[playerid], s_KillerName, MAX_PLAYER_NAME);
  format(s_MSG, sizeof(s_MSG), "%s (id: %d) a récemment été tué par %s (id %d)", s_PlayerName, playerid, s_KillerName, t_LastKill[playerid]);
  SendClientMessageToAll(COULEUR, s_MSG);
}

else
  // Le tueur s'est déconnecté depuis le meurtre

Ce qu'il faut retenir : la variable killerid ne comporte qu'une simple valeur numérique entière. Cette valeur, identifiant d'un joueur, peut être enregistrée dans n'importe quel autre variable du même type. Libre à toi de l'utiliser ensuite comme bon te semble.

En espérant t'avoir aidé.

Hors ligne maxya

  • *
  • Tueur en série
  • Messages: 158
    • Voir le profil
Re : problème paramètres fonction
« Réponse #3 le: 07 Août 2013, 07:46:29 »
En faite mon probleme est que je voudrais "refresh" le score du joueur qui toute les x secondes ou minutes mais le score du joueur = nombre de kill - nombre de mort et je ne sais pas comment m'y prendre .

Merci d'avance,
Cordialement,

Hors ligne spiirou

  • *
  • L'avenir appartient à ceux qui se lèvent
  • Messages: 866
    • Voir le profil
Re : problème paramètres fonction
« Réponse #4 le: 07 Août 2013, 11:16:08 »
Deux variables globales:
Code: (pawn) [Sélectionner]
new kills[MAX_PLAYERS];
new deaths[MAX_PLAYERS];

Dans OnPlayerDeath fais tes incrémentations et la mise a jour du score
Code: (pawn) [Sélectionner]
// Incrémentations des variables
kills[killerid]++;
deaths[playerid]++;
// Mise a jour du score
SetPlayerScore(killerid, kills[killerid]-deaths[killerid]);
SetPlayerScore(playerid, kills[playerid]-deaths[playerid]);

Je pense que quelque chose comme ca correspond a ce que tu veux.
Bien sur n'oublie pas de charger les scores personnels a la connexion au compte ;)

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Re : problème paramètres fonction
« Réponse #5 le: 07 Août 2013, 15:24:55 »
C'est bien ce que je pensais. Ça ne sert absolument à rien de vouloir changer le score toutes les x secondes, puisque le score ne doit être changé que lorsque le joueur meurt ou tue. Dans la callback OnPlayerDeath, il te suffit d'incrémenter la variable du nombre de décès pour le joueur (playerid), et du nombre de tués pour le tueur (killerid). Comme Spiirou te l'a montré. ;-)

Hors ligne Salif

  • *
  • Tueur
  • Messages: 52
    • Voir le profil
Re : problème paramètres fonction
« Réponse #6 le: 07 Août 2013, 15:26:31 »
Haha désolé de ma bêtise lol

Hors ligne maxya

  • *
  • Tueur en série
  • Messages: 158
    • Voir le profil
Re : problème paramètres fonction
« Réponse #7 le: 07 Août 2013, 16:47:10 »
Mais a la connexion du joueurs sont score est de 0 il doit tuer ou  etre tuer pour que son score sois visible je crois que sa viens du fait que je dois charger le score du joueur a sa connexion mais je ne sais pas collent m'y prendre peux etre dans onplayerconnect ?

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Re : problème paramètres fonction
« Réponse #8 le: 07 Août 2013, 16:57:29 »
Qu'est-ce que tu souhaites faire ? Il faut apprendre à expliciter, ça t'aidera à recevoir une meilleure aide, tu sais. Dans l'hypothèse où tu veux sauvegarder le nombre de morts et de tués du joueur pour les appliquer de nouveau à la connexion, tu dois utiliser un système de fichiers ou une base de donnée. Suivant ce que tu choisies, deux méthodes se présentent.

Dans le cas d'un système de fichiers, il te suffit d'enregistrer ces deux valeurs et de les lire à la connexion. Tu peux utiliser la bibliothèque Dini de DracoBlue ou directement les fonctions de lecture et d'écriture de fichiers. Pour Dini, un tutoriel rédigé par Cristab est disponible sur le forum. Pour les fonctions de base, tu peux lire celui de Syg.

Pour une base de donnée, tu dois apprendre à utiliser le langage SQL. Le cours du SiteDuZéro peut t'aider, car bien qu'il traite du PHP, le langage SQL reste le même.

Bonne chance.

Hors ligne maxya

  • *
  • Tueur en série
  • Messages: 158
    • Voir le profil
Re : problème paramètres fonction
« Réponse #9 le: 07 Août 2013, 17:33:39 »
J'utilise deja un systeme d'enregistrement y_ini mais je veux savoir comment charger le score du joueur a la connexion :)

Hors ligne spiirou

  • *
  • L'avenir appartient à ceux qui se lèvent
  • Messages: 866
    • Voir le profil
Re : problème paramètres fonction
« Réponse #10 le: 07 Août 2013, 17:41:58 »
Tu vas sur  qui traite de ton systeme de fichiers le sujet et tu cherches..

J'ai trouvé tout de suite moi..
Code: (pawn) [Sélectionner]
INI_Int("kills", kills[playerid]);
INI_Int("deaths", deaths[playerid]);

Il faudra que tu integres ca a ton gm et que tu l'adapte.
C'est là base la recherche !

Hors ligne maxya

  • *
  • Tueur en série
  • Messages: 158
    • Voir le profil
Re : problème paramètres fonction
« Réponse #11 le: 07 Août 2013, 17:49:33 »
D'accord merci grace a vous je commence a y voir clair merci !