• 20 Avril 2024, 02:27:42


Auteur Sujet: [Aide] Arme et munition avec dini  (Lu 1558 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Ashley11

  • C++ user
  • *
  • Bandit
  • Messages: 260
    • Voir le profil
[Aide] Arme et munition avec dini
« le: 31 Juillet 2011, 19:20:29 »
Bonsoir à tous,  :D
 

Je voudrais stocker les armes et les munitions des joueurs et je n'arrive pas en méthode raccourci ( Boucle )  :laugh

Dans l'exemple du wiki je ne comprend pas trop leur tableau : http://wiki.sa-mp.com/wiki/GetPlayerWeaponData


Si quelqu'un pourrait m'expliquer ceci :


Code: (pawn) [Sélectionner]
//common use: get all weapons and store info in an array containing 13 slots
//first value is weapon id and second is ammo
new weapons[13][2];
for (new i = 0; i < 13; i++)
{
    GetPlayerWeaponData(playerid, i, weapons[i][0], weapons[i][1]);
}



Merci d'avance !

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : [Aide] Arme et munition avec dini
« Réponse #1 le: 31 Juillet 2011, 19:38:57 »
Dans Grand Theft Auto: San Andreas il y a 13 emplacements pour les armes.
Dans chaque emplacement, il y a deux informations, l'arme et les munitions.
Ici, la fonction GetPlayerWeaponData ne retourne pas de valeur mais transmet des informations dans les paramètres donnés (références)

Programmation C++/Les références - Wikibooks

Donc, il y a un tableau à deux dimensions qui prends toutes les valeurs.
On peut adapter une fonction qui à la place d'utiliser des références, retourne une valeur si cela te choque moins.


stock GetWeaponID(playerid, slot)
{
    new iWeapon[2] = {0};
    
    GetPlayerWeaponData(playerid, slot, iWeapon[0], iWeapon[1]);
    
    return iWeapon[0];
}

stock GetWeaponAmmo(playerid, slot)
{
    new iWeapon[2] = {0};
    
    GetPlayerWeaponData(playerid, slot, iWeapon[0], iWeapon[1]);
    
    return iWeapon[1];
}

Et tu l'utilise de cette façon.

new iWeapons[13][2];

for(new i = 0; i < 13; i++)
{
    iWeapons[i][0] = GetWeaponID(playerid, i);
    iWeapons[i][1] = GetWeaponAmmo(playerid, i);
}

Maintenant, on veut sauvegarder tous ça dans un fichier, rien de plus simple.

stock SaveWeapons(playerid)
{
    new sString[128] = "";
    
    for(new slot = 0; slot < 13; slot++)
    {
        format(sString, sizeof(sString), "id%i", slot);
        dini_IntSet("weapons.ini", sString, GetWeaponID(playerid, slot));
        
        format(sString, sizeof(sString), "ammo%i", slot);
        dini_IntSet("weapons.ini", sString, GetWeaponAmmo(playerid, slot));
    }
}

stock GetWeaponID(playerid, slot)
{
    new iWeapon[2] = {0};
    
    GetPlayerWeaponData(playerid, slot, iWeapon[0], iWeapon[1]);
    
    return iWeapon[0];
}

stock GetWeaponAmmo(playerid, slot)
{
    new iWeapon[2] = {0};
    
    GetPlayerWeaponData(playerid, slot, iWeapon[0], iWeapon[1]);
    
    return iWeapon[1];
}

Ce qui donne au final une belle fonction portable et très utile !

stock SaveWeapons(playerid)
{
    new sString[128] = "";
    new iWeapon[2]   = {0};
    
    for(new slot = 0; slot < 13; slot++)
    {
GetPlayerWeaponData(playerid, slot, iWeapon[0], iWeapon[1]);

        format(sString, sizeof(sString), "id%i", slot);
        dini_IntSet("weapons.ini", sString, iWeapon[0]);
        
        format(sString, sizeof(sString), "ammo%i", slot);
        dini_IntSet("weapons.ini", sString, iWeapon[1]);
    }
}
« Modifié: 31 Juillet 2011, 19:48:53 par Xartrick »

Hors ligne Ashley11

  • C++ user
  • *
  • Bandit
  • Messages: 260
    • Voir le profil
Re : [Aide] Arme et munition avec dini
« Réponse #2 le: 31 Juillet 2011, 19:50:14 »
Oui merci, mais je comprend ça :


weapon[13][2]

13 = les 13 armes que le joueurs peut disposer.
2 =  quesqu'il signifie ?


Merci d'avance


                                             

Hors ligne » Lukubi™

  • *
  • Soy el bico loco
  • Messages: 3282
    • Voir le profil
Re : [Aide] Arme et munition avec dini
« Réponse #3 le: 31 Juillet 2011, 20:03:40 »
[2] c'est le nombre de parametres, la c'est 2 parce que y'a l'id de l'arme et le nombre de munition.

“Si la Terre est un endroit dangereux ce n’est pas à cause des hommes mauvais mais à cause des hommes bons qui ne font rien pour les empêcher.” (Albert Einstein).

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : [Aide] Arme et munition avec dini
« Réponse #4 le: 31 Juillet 2011, 20:17:39 »
@» Lukubi™: 2 n'est pas le nombre de paramètres mais le nombre de dimensions du tableau.

@Ashley11:

new iVariable[6][2];

iVariable[0][0] = 10;
iVariable[0][1] = 70;
iVariable[1][0] = 20;
iVariable[1][1] = 80;
iVariable[2][0] = 30;
iVariable[2][1] = 90;
iVariable[3][0] = 40;
iVariable[3][1] = 100;
iVariable[4][0] = 50;
iVariable[4][1] = 110;
iVariable[5][0] = 60;
iVariable[5][1] = 120;

Voici le schéma de ce code.


Ce code peut aussi être raccourcie !

new iVariable[6][2] = {{10, 70}, {20, 80}, {30, 90}, {40, 100}, {50, 110}, {60, 120}};
« Modifié: 31 Juillet 2011, 20:27:01 par Xartrick »

Hors ligne » Lukubi™

  • *
  • Soy el bico loco
  • Messages: 3282
    • Voir le profil
Re : [Aide] Arme et munition avec dini
« Réponse #5 le: 31 Juillet 2011, 20:19:31 »
Autant pour moi. :)

“Si la Terre est un endroit dangereux ce n’est pas à cause des hommes mauvais mais à cause des hommes bons qui ne font rien pour les empêcher.” (Albert Einstein).

Hors ligne Ssk

  • *
  • Lulu's Stunt - Le serveur stunt de Lulu !
  • Messages: 8154
    • Voir le profil
Re : [Aide] Arme et munition avec dini
« Réponse #6 le: 31 Juillet 2011, 21:50:57 »
2 n'est pas le nombre de dimensions bien qu'il y ai 2 dimensions dans ce tableau, 2 est plutôt le nombre de cellules que contient la seconde dimension.

PS:

new Tableau[5]; Tableau à une dimension avec 5 cellules (donc qui peut contenir 5 valeurs)

new Tableau[5][10];Tableau à deux dimensions avec 5 cellules pour la première dimension et 10 pour la seconde. (peut donc contenir 50 valeurs)
new Tableau[5][10][20];Tableau à trois dimensions avec 5 cellules pour la première dimension, 10 pour la seconde et 20 pour la troisième. (peut donc contenir 1000 valeurs)



Derrière tout programme se cache un programmeur, je considère le monde comme un programme.
Mon blog

Hors ligne Ashley11

  • C++ user
  • *
  • Bandit
  • Messages: 260
    • Voir le profil
Re : [Aide] Arme et munition avec dini
« Réponse #7 le: 31 Juillet 2011, 21:58:42 »
A quoi sert un tableau bidimensionnel pour stocker une arme ? 

Hors ligne Ashley11

  • C++ user
  • *
  • Bandit
  • Messages: 260
    • Voir le profil
Re : [Aide] Arme et munition avec dini
« Réponse #8 le: 31 Juillet 2011, 22:08:52 »
Mais alors à quoi sert le 2ème tableau

Code: (pawn) [Sélectionner]
GetPlayerWeaponData(playerid, i, weapons[i][0], weapons[i][1]);

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : [Aide] Arme et munition avec dini
« Réponse #9 le: 31 Juillet 2011, 22:52:04 »
Rohhh, j'ai complètement merdé sur ce coup :P.

Sinon, tu récupère l'arme et les munitions.

Hors ligne Ashley11

  • C++ user
  • *
  • Bandit
  • Messages: 260
    • Voir le profil
Re : [Aide] Arme et munition avec dini
« Réponse #10 le: 31 Juillet 2011, 22:52:35 »
C'est bien ce que je pensait ^^