GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: vardanega le 15 Janvier 2011, 08:47:23

Titre: Chargement objet par base de donnée
Posté par: vardanega le 15 Janvier 2011, 08:47:23
Bonjour, je voudrais créer un système de chargement objet par BDD.

J'ai essayé de créer plusieurs code avec des boucles mais rien ne fonctionne aucun objet ne charge.
Je ne sait pas si il faut que je fasse une requête par objet ou un requête pour tout les objets que je veux utiliser.
Voici avant tout la structure de ma table 'objets'

Code: (sql) [Sélectionner]
CREATE TABLE IF NOT EXISTS `objets` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Id unique de l'objet',
  `mapid` int(11) NOT NULL, COMMENT 'Id de la map au quelle appartient objets',
  `modelid` int(11) NOT NULL DEFAULT '-1',
  `FloatX` float NOT NULL DEFAULT '0',
  `FloatY` float NOT NULL DEFAULT '0',
  `FloatZ` float NOT NULL DEFAULT '0',
  `FloatrX` float NOT NULL DEFAULT '0',
  `FloatrY` float NOT NULL DEFAULT '0',
  `FloatrZ` float NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=0 ;


Est voici le code pawn que j'ai trouvez pour chargez les objets par boucle mais le probleme c'est que je ne veux pas utilisez 'sscanf' ou un truc du genre donc j'avais essayé de le modifié mais je nage COMPLETEMENT  :wall  :blink

http://pastebin.com/uhviMbqD (http://pastebin.com/uhviMbqD)

Merci en tout cas pour l'aide que vous pourrez m'apportez.

Vince
Titre: Re : Chargement objet par base de donnée
Posté par: scott1 le 15 Janvier 2011, 17:14:09
Deja pour ta sécurité je supprimerais tes nom de table !


Tu doit faire une requete SQL pour les charger.


SELECT * FROM NOMDETATABLE
Titre: Re : Chargement objet par base de donnée
Posté par: vardanega le 15 Janvier 2011, 20:14:49
Salut, ce n'est pas cela mon problème, mon problème c'est que je veux chargez les objets mais je ne voit pas comment faire la boucle.
Titre: Re : Chargement objet par base de donnée
Posté par: Xartrick le 15 Janvier 2011, 21:40:37
http://wiki.sa-mp.com/wiki/MySQL#mysql_fetch_field
Titre: Re : Chargement objet par base de donnée
Posté par: scott1 le 15 Janvier 2011, 22:11:16
J'utilise while moi :D
Titre: Re : Chargement objet par base de donnée
Posté par: vardanega le 16 Janvier 2011, 15:04:38
Bonjour voici le code actuel le problème c'est que il n'y a que le premier objet qui charge correctement !


public LoadObject(mapid)
{
    new DataString[128];
    new modele;
new Float:SpawnX;
new Float:SpawnY;
new Float:SpawnZ;
new Float:SpawnRotX;
new Float:SpawnRotY;
new Float:SpawnRotZ;
new idx = 1;
new query[75];
    format(query, sizeof(query), "SELECT * FROM `objets` WHERE `mapid` = '%d'",idx);
    mysql_query(query);
    mysql_store_result();
    for(new i = 0; i< mysql_num_rows(); i++)
{
mysql_fetch_field("modelid", DataString);
modele = strval(DataString);

mysql_fetch_field("FloatX", DataString);
SpawnX = floatstr(DataString);

mysql_fetch_field("FloatY", DataString);
SpawnY = floatstr(DataString);

mysql_fetch_field("FloatZ", DataString);
SpawnZ = floatstr(DataString);

mysql_fetch_field("FloatrX", DataString);
SpawnRotX = floatstr(DataString);

mysql_fetch_field("FloatrY", DataString);
SpawnRotY = floatstr(DataString);

mysql_fetch_field("FloatrZ", DataString);
SpawnRotZ = floatstr(DataString);

CreateObject(modele,SpawnX,SpawnY,SpawnZ,SpawnRotX,SpawnRotY,SpawnRotZ);
printf("%d,%f,%f,%f,%f,%f,%f mapid: %d",modele,SpawnX,SpawnY,SpawnZ,SpawnRotX,SpawnRotY,SpawnRotZ,mapid);
idx ++;
}
mysql_free_result();
}



merci  :-\ :(
Titre: Re : Chargement objet par base de donnée
Posté par: scott1 le 16 Janvier 2011, 15:12:53
Écoute regarde comment je charge mes biz, ça peux t'aider

new query[715],string[256],idbiz[512],innutile;
format(query, sizeof(query), "SELECT COUNT(*) FROM `TABLEBIZ`");
mysql_query(query);
mysql_store_result(MySQL_Handle);
mysql_fetch_row(idbiz);
TotalBizs = strval(idbiz);
mysql_free_result(MySQL_Handle);
for (new biz = 1; biz <= TotalBizs; biz++)
{
    format(query, sizeof(query), "SELECT * FROM `TABLEBIZ` WHERE `COLONE-ID` = %d", biz);
mysql_query(query);
mysql_store_result(MySQL_Handle);
while(mysql_fetch_row_format(query, "|"))
{
sscanf(query, "p<|>ddddffffffddds[52]s[52]s[68]iiiiddi",
                        mes infos du biz,
                        ...);
                 }
         }
Titre: Re : Chargement objet par base de donnée
Posté par: vardanega le 16 Janvier 2011, 16:26:04
Ok merci mais moi je voudrais me passez de sscanf en plus je ne comprend pas comment il fonctionne.
Merci


J'ai modifié un code trouvez dans un roleplay basique qui charge par sql le voici:

new totalobj = 0;

public LoadObject(mapid)
{
    new objects[7][64];
new sql[80];
new row[512];
format(sql, sizeof(sql), "SELECT COUNT(*) FROM objets");
mysql_query(sql);
mysql_store_result();
mysql_fetch_row(row);
totalobj = strval(row);
mysql_free_result();
for (new idx=0; idx < totalobj; idx++)
{
    format(sql, sizeof(sql), "SELECT * FROM objets WHERE id = %d", idx);
    mysql_query(sql);
    mysql_store_result();
    if (mysql_num_rows() > 0)
    {
mysql_fetch_row(row);
split(row, objects, '|');
mysql_free_result();
ObjetInfo[idx][omodelid] = strval(objects[0]);
ObjetInfo[idx][oFloatX] = floatstr(objects[1]);
ObjetInfo[idx][oFloatY] = floatstr(objects[2]);
ObjetInfo[idx][oFloatZ] = floatstr(objects[3]);
ObjetInfo[idx][oFloatrX] = floatstr(objects[4]);
ObjetInfo[idx][oFloatrY] = floatstr(objects[5]);
ObjetInfo[idx][oFloatrZ] = floatstr(objects[6]);
CreateObject(ObjetInfo[idx][omodelid],ObjetInfo[idx][oFloatX],ObjetInfo[idx][oFloatY],ObjetInfo[idx][oFloatZ],ObjetInfo[idx][oFloatrX],ObjetInfo[idx][oFloatrY],ObjetInfo[idx][oFloatrZ]);
printf("%d,%f,%f,%f,%f,%f,%f id: %d",ObjetInfo[idx][omodelid],ObjetInfo[idx][oFloatX],ObjetInfo[idx][oFloatY],ObjetInfo[idx][oFloatZ],ObjetInfo[idx][oFloatrX],ObjetInfo[idx][oFloatrY],ObjetInfo[idx][oFloatrZ],idx);
}
}
mysql_free_result();
printf("%d objet chargé de la BDD.", totalobj);
return 1;
}

Le probleme cet que les lignes chargé sont completement n'importe quoi un exemple:


[17:57:19] 1266,0.000000,8172.000000,1997.319946,503.236999,58.380001,0.000000 id: 1
[17:57:19] 2266,0.000000,8172.000000,1841.329956,511.398010,85.260002,340.536987 id: 2
[17:57:19] 385,0.000000,8172.000000,2152.659912,492.680999,85.260002,340.527008 id: 3
[17:57:19] 4265,0.000000,7017.000000,2229.469970,490.730987,112.013000,275.657989 id: 4
[17:57:19] 5265,0.000000,7017.000000,2233.750000,490.619995,112.013000,275.657989 id: 5
[17:57:19] 687,0.000000,7017.000000,1764.910034,512.416015,111.777999,278.903015 id: 6
[17:57:19] 787,0.000000,7017.000000,1764.910034,512.416015,111.777999,278.898986 id: 7
[17:57:19] 8358,0.000000,8172.000000,2000.410034,409.937011,85.260002,340.527008 id: 8
[17:57:19] 9177,0.000000,8172.000000,2005.119995,598.598022,85.260002,340.527008 id: 9
[17:57:19] 10,0.000000,7017.000000,1760.670043,512.729003,111.777999,278.898986 id: 10
ect ... Jusqu'a la ligne 128 (nombre d'enregistrement dans ma table.

[17:57:20] 128 objet chargé de la BDD.

Voila donc si vous pouviez m'aidez ca serait vraiment simpa car la je patauge complet !  :wall

Vince
Titre: Re : Chargement objet par base de donnée
Posté par: scott1 le 16 Janvier 2011, 18:34:03
Tu utilise le plugin G-Stylezz?
Titre: Re : Chargement objet par base de donnée
Posté par: vardanega le 16 Janvier 2011, 18:42:04
J'utilise ce plugin :

http://forum.sa-mp.com/showthread.php?t=122983 (http://forum.sa-mp.com/showthread.php?t=122983)

Merci
Titre: Re : Chargement objet par base de donnée
Posté par: scott1 le 16 Janvier 2011, 18:47:07
Pour ma part, je te conseillerais celui la.

http://forum.sa-mp.com/showthread.php?t=56564 (http://forum.sa-mp.com/showthread.php?t=56564)


Si non, je ne sias pas bien comment le tien fonctionne, alors met

mysql_log(LOG_ALL);

dans ton ongamemodeinit

J'espere que s'ets ça car je trouve pas la doc nécéssaire.

Demarre ton serveur et donne le mysql_log.txt a la racine de ton serveur
Titre: Re : Chargement objet par base de donnée
Posté par: vardanega le 16 Janvier 2011, 18:54:47
Voila le fichier et ici:

http://pastebin.com/eUxB4yuJ (http://pastebin.com/eUxB4yuJ)

Encore merci
Titre: Re : Chargement objet par base de donnée
Posté par: scott1 le 16 Janvier 2011, 19:41:44
Tu as mis une colone "id" dans ta table objet?
Titre: Re : Chargement objet par base de donnée
Posté par: vardanega le 16 Janvier 2011, 19:50:56
Oui il y a une colonne id en auto incremente

Double post
Bon alors j'ai réussi les objets charge mais il n'en charge que 13 ! pas plus !
(http://www.gtaonline.fr/forums/Themes/proton/images/warnwarn.gif) Évite le double post et va lire les règles ..