GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: CarCrasher le 19 Avril 2014, 13:43:15

Titre: Savoir si un nombre est un multiple de xxx
Posté par: CarCrasher le 19 Avril 2014, 13:43:15
Bonjour les enfants !
Dans l'optique de faire un système qui, pour chaque heure jouée, on reçoit un certain nombre de points d'expérience et tout ça... je voulais le faire à une autre manière que d'habitude, d'habitude c'est genre à xxh00 ou quelque chose comme ça, mais là, je voudrais faire pour chaque heure réelle jouée par le joueur, ainsi, j'ai fait ceci...

Code: (pawn) [Sélectionner]
public OnPlayerPlaysAMinute()
{
for(new i = 0; i < MAX_PLAYERS; i ++)
  {
if(IsPlayerConnected(i) && !afk[i])
{
PlayerInfo[i][pGameTime] ++;
}
}
}

Ce code marche parfaitement, mais j'aimerais ajouter une fonctionnalité qui calculerait si le joueur a atteint un nombre qui soit un multiple de 60, donc chaque heure, mais je ne sais pas quelle marche je pourrais suivre pour calculer cela, à part prévoir tous les nombres à l'avance, mais c'est pas un truc de programmeur ça ! C'est pour les noobs !

La solution que j'aurais vu, aurait été de diviser PlayerInfo[playerid][pGameTime] par 60, et de voir s'il en résulte un nombre entier, mais là encore, je ne sais pas comment le savoir :/

Enfin merci à vous de m'aider !  :kiss:
Titre: Re : Savoir si un nombre est un multiple de xxx
Posté par: Gzsume le 19 Avril 2014, 14:28:26
Salut,

Tu dois utiliser le symbole mathématique modulo (noté %). Ce symbole mathématique retourne le reste d'une division d'entiers. Puisqu'un exemple est plus rapide qu'une longue explication...


Code: (pawn) [Sélectionner]
new a = 15, b = 7;

new result = a / b;
// result vaut 2, car 7*2 = 14, reste 1

result = a % b;
// result vaut 1, car 15/7 = 2, reste 1

Sur ce principe, tu peux faire le modulo d'une variable par 60 pour obtenir le nombre de minutes à partir du nombre de secondes. Ou pour obtenir le nombre d'heures à partir du nombre de minutes, c'est le même principe. Encore un petit exemple pour illustrer tout ça :

Code: (pawn) [Sélectionner]
new secondes = 88242, minutes = 0, heures = 0;

minutes = secondes / 60;
heures = minutes / 60;
secondes = secondes % minutes;
minutes = minutes % heures;

printf("%dh %dmn %ds", heures, minutes, secondes);

// Affichera 24h 6mn 42sec

En espérant t'avoir été utile,
Bonne journée !

EDIT - Tiens, la même chose (plus ou moins) en PHP. J'ai sans-doute fait une petite erreur dans le code Pawn ci-dessus et je n'ai pas de compilateur sous la main pour tester...


Code: (php) [Sélectionner]
$hours = floor($seconds / 3600);
$mins = floor(($seconds - ($hours*3600)) / 60);
$secs = floor($seconds % 60);
Titre: Re : Savoir si un nombre est un multiple de xxx
Posté par: CarCrasher le 19 Avril 2014, 16:02:31
Ah bah oui merci, c'est exactement ce que je cherchais !
Pourquoi en cours on m'a jamais appris ça ?!
Titre: Re : Savoir si un nombre est un multiple de xxx
Posté par: Xartrick le 20 Avril 2014, 17:28:45
Une petite macro prévu à cette effet:

#define IS_MULTIPLE(%0,%1) (((%0)%(%1))==0)