• 20 Mai 2024, 15:57:46


Auteur Sujet: Problème de string  (Lu 1361 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne CarCrasher

  • *
  • Tueur en série
  • Messages: 144
    • Voir le profil
Problème de string
« le: 07 Décembre 2013, 15:57:09 »
Bonjour ! Je vais une fois de plus vous importuner avec mes problèmes !

Donc je suis en train de faire un système de vêtements avec les objets ajoutés lors des précédentes versions de sa-mp, et pour ça, je fais un magasin !

Lors de l'achat d'un article je sauvegarde l'id de l'objet voulu, et le nom que j'ai attribué à l'article (Pour pouvoir le proposer dans un menu plus tard)

Alors le problème réside dans le nom de l'objet.

Tout d'abord j'ai créé l'énumération et la variable qui va avec pour stocker les informations sur les 5 différents types d'habits.

Code: (pawno) [Sélectionner]
enum habits
{
    teteid,
    tetenom[30],
    visageid,
    visagenom[30],
    montreid,
    montrenom[30],
    dosid,
    dosnom[30],
    mainid,
    mainnom[30]
}
new vetements[MAX_PLAYERS][habits];

Comme vous pouvez le constater, le nom d'un article est de 29 caractères plus la case vide, le plus long nom est de 26 caractères, mais j'ai élargi ! (Faut voir grand dans la vie ! Quitte à voyager dans le temps, autant le faire dans une voiture qui ait de la gueule !)

Donc, quand on achète tel ou tel article, le nom était directement mis dans la variable correspondante.

Au début j'ai fais ça de cette manière :

Code: (pawno) [Sélectionner]
vetements[playerid][tetenom] = "Beret rouge";
J'ai eu l'agréable surprise d'avoir 236 987 546 erreurs (environ).

Mais réalistement, 26 fois
Citation de: Andouille de compilateur
error 047: array sizes do not match, or destination array is too small

Alors oui, j'ai directement pensé à utiliser le sizeof pour plus avoir ça.

Code: (pawno) [Sélectionner]
format(vetements[playerid][tetenom], sizeof(vetements[playerid][tetenom]),"Beret noir");
BIM !

Citation de: Pawno
error 001: expected token: "]", but found "-identifier-"
warning 215: expression has no effect
error 001: expected token: ";", but found "]"
error 029: invalid expression, assumed zero
fatal error 107: too many error messages on one line

Alors j'ai tenté une dernière approche...

Code: (pawno) [Sélectionner]
new string[30];
vetements[playerid][teteid] = 18921;
format(string, sizeof(string), "Beret noir");
vetements[playerid][tetenom] = string;

Là, ça a marché, plus d'erreurs à cette ligne là, mais alors, j'ai remplacé toutes les lignes par cela, BIM le compilateur crash ! Et là, je sais pas !

J'ai pensé à la fameuse accolade manquante, mais j'ai même vérifié avec Missing Bracket Finder, et rien !

Vous avez des idées ? :s

Merci d'avance aux monsieurs qui répondront !

vincentdu90

  • Invité
Re : Problème de string
« Réponse #1 le: 09 Décembre 2013, 11:54:34 »
Bonjour,

Dans cette partie :

Code: (Pawn) [Sélectionner]
format(vetements[playerid][tetenom], sizeof(vetements[playerid][tetenom]),"Beret noir");
As-tu essayé ceci :

Code: (Pawn) [Sélectionner]
format(vetements[playerid][tetenom], sizeof(vetements[playerid][tetenom]),"%s","Beret noir");

Hors ligne CarCrasher

  • *
  • Tueur en série
  • Messages: 144
    • Voir le profil
Re : Problème de string
« Réponse #2 le: 12 Décembre 2013, 02:58:54 »
Non ça je n'avais pas essayé, mais ça me donne exactement les mêmes erreurs que pour ce que tu as corrigé, enfin, merci d'avoir répondu tout de même ^^

Maintenant c'est plus la peine de répondre, j'ai trouvé une autre idée !

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : Problème de string
« Réponse #3 le: 27 Décembre 2013, 14:37:32 »
Salut,

essaie de changer ton 30 par une constante et d'utiliser cette constante au lieu de sizeof.
Si je me souviens bien, sizeof a de petits problèmes pour ce genre d'array complexe (avec un enum surtout).

Bref:

#define VETEMENT_MAX 30

    enum habits
            {
                teteid,
                tetenom[VETEMENT_MAX],
                visageid,
                visagenom[VETEMENT_MAX],
                montreid,
                montrenom[VETEMENT_MAX],
                dosid,
                dosnom[VETEMENT_MAX],
                mainid,
                mainnom[VETEMENT_MAX]
            }
    new vetements[MAX_PLAYERS][habits];

    format(vetements[playerid][tetenom], VETEMENT_MAX, "Beret noir");

et sinon, personnellement je stockerais les informations de tous les vêtements dans un array un peu comme celui que tu utilise pour tes joueurs:

enum description_vetement
{
    nom[VETEMENT_MAX],
    object_id,
    vetement_type,
    Float:decal_x,
    Float:decal_y,
    Float:decal_z,
    ...
}
new syst_vetements[MAX_VETEMENTS][description_vetement];

Un truc dans ce genre là.
Tu pourrais regrouper ces informations pour les mettre dans une seule section de code plus facile à lire en créant une fonction qui ajoute les entrées dans l'array un peu comme ceci:

AjoutVetement(nom[], obj_id, Float:pos_x, Float:pos_y, Float:pos_z....)
{
    new id = 0;
    while(syst_vetements[id][object_id] != 0 && id < MAX_VETEMENTS)
        id++;
    if(id < MAX_VETEMENTS)
    {
        syst_vetements[id][object_id = obj_id;
        ....
    }
    else
        id = -1;
    return id;
}

Enfin, un code de ce genre.

Ne te sens pas obligé d'aller vers cela, mais ça te permettrais de faire plein de lignes condensés avec toutes tes informations alignés comme dans les véhicules et les objets par exemple....

PS. Il peut y avoir des erreurs dans les codes, je n'ai pas vérifier.

Bonne Chance

++Sim++





Hors ligne CarCrasher

  • *
  • Tueur en série
  • Messages: 144
    • Voir le profil
Re : Problème de string
« Réponse #4 le: 03 Janvier 2014, 00:19:10 »
Ah merci ^^
Ce que j'avais fait moi pour toutes les informations, c'est au spawn, vu que beaucoup d'objets vêtements ont la même position sur le personnage j'avais fait un GetClotheCategory(playerid, clothe), qui récupérait l'id du vêtement, et qui le classait dans une catégorie comme par exemple la catégorie des casquettes et qui donnait les coordonnées en fonction, enfin je dis ça pour ajouter ça au sujet si quelqu'un d'autre veut faire un truc dans le genre.
Car même si c'est assez populaire sur des serveurs, j'ai pas trouvé de filterscript ni rien, en tout cas sur les 5-10 premières pages de google.