GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Ashley11 le 31 Juillet 2011, 19:20:29

Titre: [Aide] Arme et munition avec dini
Posté par: Ashley11 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
 (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 !
Titre: Re : [Aide] Arme et munition avec dini
Posté par: Xartrick 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 (http://fr.wikibooks.org/wiki/Programmation_C%2B%2B/Les_r%C3%A9f%C3%A9rences)

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]);
    }
}
Titre: Re : [Aide] Arme et munition avec dini
Posté par: Ashley11 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


                                             
Titre: Re : [Aide] Arme et munition avec dini
Posté par: » Lukubi™ 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.
Titre: Re : [Aide] Arme et munition avec dini
Posté par: Xartrick 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.

(http://img11.imageshack.us/img11/2173/sansre2nz.png)

Ce code peut aussi être raccourcie !

new iVariable[6][2] = {{10, 70}, {20, 80}, {30, 90}, {40, 100}, {50, 110}, {60, 120}};
Titre: Re : [Aide] Arme et munition avec dini
Posté par: » Lukubi™ le 31 Juillet 2011, 20:19:31
Autant pour moi. :)
Titre: Re : [Aide] Arme et munition avec dini
Posté par: Ssk 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)
Titre: Re : [Aide] Arme et munition avec dini
Posté par: Ashley11 le 31 Juillet 2011, 21:58:42
A quoi sert un tableau bidimensionnel pour stocker une arme ? 
Titre: Re : [Aide] Arme et munition avec dini
Posté par: Ashley11 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]);
Titre: Re : [Aide] Arme et munition avec dini
Posté par: Xartrick 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.
Titre: Re : [Aide] Arme et munition avec dini
Posté par: Ashley11 le 31 Juillet 2011, 22:52:35
C'est bien ce que je pensait ^^