GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: vardanega le 04 Novembre 2010, 23:08:56
-
Bonsoir, je suis actuellement en train de faire (du moins essayer ) un système d'essence pour mon serveur. J'utilise un fichier pour chargé les positions des stations essences, Produits, Produits Max ect ..., mais quand le fichier sauvegarde (Ce met a jour) il semble y avoir un problème car tout et mélangé et lors du lancement suivant du GM tout et beugé.
Voici les codes:
<?php
enum StationSysteme
{
sName[64],
Float:sPosX,
Float:sPosY,
Float:sPosZ,
Float:sLivX,
Float:sLivY,
Float:sLivZ,
sProduits,
sMaxProduits,
sCaisse
}
new StationInfo[9][StationSysteme];
forward LoadStation();
public LoadStation()
{
new string[256];
new arrCoords[10][256];
new strFromFile2[256];
new File: file = fopen("station.txt", io_read);
if (file)
{
new idx;
idx = 0;
while (idx < sizeof(StationInfo))
{
fread(file, strFromFile2);
split(strFromFile2, arrCoords, '|');
strmid(StationInfo[idx][sName], arrCoords[0], 0, strlen(arrCoords[0]), 255);
StationInfo[idx][sPosX] = floatstr(arrCoords[1]);
StationInfo[idx][sPosY] = floatstr(arrCoords[2]);
StationInfo[idx][sPosZ] = floatstr(arrCoords[3]);
StationInfo[idx][sLivX] = floatstr(arrCoords[4]);
StationInfo[idx][sLivY] = floatstr(arrCoords[5]);
StationInfo[idx][sLivZ] = floatstr(arrCoords[6]);
StationInfo[idx][sProduits] = strval(arrCoords[7]);
StationInfo[idx][sMaxProduits] = strval(arrCoords[8]);
StationInfo[idx][sCaisse] = strval(arrCoords[9]);
Create3DTextLabel("|POINT DE LIVRAISON|\nUtiliser /vider", COLOR_ADMIN, StationInfo[idx][sLivX], StationInfo[idx][sLivY], StationInfo[idx][sLivZ], 5.0, 0, 0);
AddStaticPickup(1225, 1, StationInfo[idx][sPosX], StationInfo[idx][sPosY], StationInfo[idx][sPosZ], -1);
format(string, sizeof(string), "NOM: \n%s\nProduits: %d/%d\nBesoin de: %d", StationInfo[idx][sName],StationInfo[idx][sProduits],StationInfo[idx][sMaxProduits],(StationInfo[idx][sMaxProduits]-StationInfo[idx][sProduits]));
Create3DTextLabel(string,COLOR_ADMIN,StationInfo[idx][sPosX],StationInfo[idx][sPosY],StationInfo[idx][sPosZ],40.0,0, 1);
printf("ID: %d | Nom: %s | Produits: %d/%d | Caisse: %d\n",
idx,
StationInfo[idx][sName],
StationInfo[idx][sProduits],
StationInfo[idx][sMaxProduits],
StationInfo[idx][sCaisse]);
idx++;
}
fclose(file);
}
return 1;
}
forward SaveStation();
public SaveStation()
{
new idx;
new File: file2;
while (idx < sizeof(StationInfo))
{
new coordsstring[512];
format(coordsstring, sizeof(coordsstring), "%s|%f|%f|%f|%f|%f|%f|%d|%d|%d\n",
StationInfo[idx][sName],
StationInfo[idx][sPosX],
StationInfo[idx][sPosY],
StationInfo[idx][sPosZ],
StationInfo[idx][sLivX],
StationInfo[idx][sLivY],
StationInfo[idx][sLivZ],
StationInfo[idx][sProduits],
StationInfo[idx][sMaxProduits],
StationInfo[idx][sCaisse]);
if(idx == 0)
{
file2 = fopen("station.txt", io_write);
}
else
{
file2 = fopen("station.txt", io_append);
}
fwrite(file2, coordsstring);
idx++;
fclose(file2);
}
return 1;
}
?>
Voila, si vous aviez une petite idée pour me permettre de résoudre ce problème je vous en serait reconnaissant !
Vincent.
-
Je ne connais pas du tout le fonctionnement de la fonction split, mais je pense qu'elle fonctionne à peu près comme les fonctions strtok, quand tu écris dans le fichier tu ne met pas tout les "|" qu'il faut pour que la fonction puisse récupérer toute les infos.
Toi tu fais ça:
format(coordsstring, sizeof(coordsstring), "%s|%f|%f|%f|%f|%f|%f|%d|%d|%d\n"
alors qu'il faut faire ça:
format(coordsstring, sizeof(coordsstring), "%s|%f|%f|%f|%f|%f|%f|%d|%d|%d|\n"
Il faut tester car je ne suis pas du tout sur et certain.
-
Heu non voila comment cela ce passe avant et apres la sauvegarde du fichier:
<?php
[08:53:20] ID: 0 | Nom: Station 1 | Produits: 250/500 | Caisse: 1
[08:53:20] ID: 1 | Nom: Station 2 | Produits: 250/500 | Caisse: 2
[08:53:20] ID: 2 | Nom: Station 3 | Produits: 250/500 | Caisse: 3
[08:53:20] ID: 3 | Nom: Station 4 | Produits: 250/500 | Caisse: 4
[08:53:20] ID: 4 | Nom: Station 5 | Produits: 250/500 | Caisse: 5
[08:53:20] ID: 5 | Nom: Station 6 | Produits: 250/500 | Caisse: 6
[08:53:20] ID: 6 | Nom: Station 7 | Produits: 250/500 | Caisse: 7
[08:53:20] ID: 7 | Nom: Station 8 | Produits: 250/500 | Caisse: 8
[08:53:20] ID: 8 | Nom: Station 9 | Produits: 59685/1000000 | Caisse: 99
----------
Loaded log file: "server_log.txt".
----------
SA-MP Dedicated Server
----------------------
v0.3b R2, (C)2005-2010 SA-MP Team
[08:54:44] [MySQL] Connected (0) to root @ localhost via TCP/IP.
[08:54:44] [MySQL] Version 5.1.36-community-log.
[08:54:44] ID: 0 | Nom: Station 9 | Produits: 59800/1000000 | Caisse: 99
[08:54:44] ID: 1 | Nom: | Produits: 59800/1000000 | Caisse: 99
[08:54:44] ID: 2 | Nom: Station 3 | Produits: 250/500 | Caisse: 3
[08:54:44] ID: 3 | Nom: Station 4 | Produits: 250/500 | Caisse: 4
[08:54:44] ID: 4 | Nom: Station 5 | Produits: 250/500 | Caisse: 5
[08:54:44] ID: 5 | Nom: Station 6 | Produits: 250/500 | Caisse: 6
[08:54:44] ID: 6 | Nom: Station 7 | Produits: 250/500 | Caisse: 7
[08:54:44] ID: 7 | Nom: Station 8 | Produits: 250/500 | Caisse: 8
[08:54:44] ID: 8 | Nom: Station 9 | Produits: 59685/1000000 | Caisse: 99
?>
Si vous aviez une solution ! merci.
Vincent
-
Up
Aucune idée ?
-
Bizarre je ne comprend pas trop problème ^^
Avant la sauvegarde met des printf pour voir ce que contient la variable coordsstring
-
Bonjour, tout d'abord merci pour votre aide !
Voici le contenue du printf de la sauvegarde:
<?php
[11:52:17] CONTENUE DU SAVESTATION: Station 9|272.839996|1348.430053|10.590000|264.750000|1375.459960|10.590000|59800|1000000|99
[11:52:17] CONTENUE DU SAVESTATION: 2|2203.560058|2495.040039|10.819999|250.000000|500.000000|2.000000|59800|1000000|99
[11:52:17] CONTENUE DU SAVESTATION: Station 3|2147.179931|2748.699951|10.819998|2112.080078|2741.449951|10.819998|250|500|3
[11:52:17] CONTENUE DU SAVESTATION: Station 4|1595.010009|2199.129882|10.819999|1610.189941|2230.979980|10.819999|250|500|4
[11:52:17] CONTENUE DU SAVESTATION: Station 5|2640.280029|1106.599975|10.819999|2624.610107|1130.920043|10.819999|250|500|5
[11:52:17] CONTENUE DU SAVESTATION: Station 6|610.049987|1689.819946|7.190000|638.190002|1684.359985|6.989999|250|500|6
[11:52:17] CONTENUE DU SAVESTATION: Station 7|-1470.979980|1864.069946|32.630001|-1492.020019|1873.130004|32.630001|250|500|7
[11:52:17] CONTENUE DU SAVESTATION: Station 8|-1327.640014|2677.350097|50.060001|-1323.229980|2690.070068|50.060001|250|500|8
[11:52:17] CONTENUE DU SAVESTATION: Station 9|272.839996|1348.430053|10.590000|264.750000|1375.459960|10.590000|59800|1000000|99
//POURTANT VOICI LE CONTENUE DU LOADSTATION AU DEMARRAGE:
[11:51:43] ID: 0 | Nom: Station 1 | Produits: 250/500 | Caisse: 1
[11:51:43] ID: 1 | Nom: Station 2 | Produits: 250/500 | Caisse: 2
[11:51:43] ID: 2 | Nom: Station 3 | Produits: 250/500 | Caisse: 3
[11:51:43] ID: 3 | Nom: Station 4 | Produits: 250/500 | Caisse: 4
[11:51:43] ID: 4 | Nom: Station 5 | Produits: 250/500 | Caisse: 5
[11:51:43] ID: 5 | Nom: Station 6 | Produits: 250/500 | Caisse: 6
[11:51:43] ID: 6 | Nom: Station 7 | Produits: 250/500 | Caisse: 7
[11:51:43] ID: 7 | Nom: Station 8 | Produits: 250/500 | Caisse: 8
[11:51:43] ID: 8 | Nom: Station 9 | Produits: 59685/1000000 | Caisse: 9 //station source
?>
Merci !
Vincent
Double post
Tout d'abord désolé du double post,
Je voulais apportez un petit détail dont je vient de m'apercevoir l'existence.
Apparament quand on coupe le serveur c'est a ce moment que le fichier de sauvegarde ce mélange et devient invalide !
Merci
Vincent