Problema loadcar !
#1

Salut, am de mult inca o problema si chiar nu inteleg dece face asa dearece sistemul de masini personale este configurat corect. Deci problema o am de 1 luna , o sa va explic mai joc cum sta treaba.

Deci daca dau 1 data la 2 saptamani sa zicem sau la 3 saptamani cam asa se buguieste deodata sistemu de masini si cel mai des cand fac un update se intampla imediat. Problema e urmatoarea ca masinile personale se incarca pe server, sunt okay apar si numele doar ca deodata playeri nu mai au acess la acestea.

De exemplu eu am masina sultan iar dupa ce se buguieste cum v-am zis mai sus imi zice ca am jester, si la /stats lafel apare. Asta nu inteleg dece se buguiesc masinile? in cars.cfg apar corect numele si sus la masina la 3dtextlabel. Cred ca e ceva ce nu permite poate stiti voi !

MAI CLAR: Se schimb propietari masinilor personale deodata, de exemplu eu am sultan si dupa imi zice ca am jester dar normal in cars.cfg si la 3dtextlabel apare numele meu la masina potrivita doar in game e problema.

Quote:

public LoadCar()
{
new arrCoords[13][64];
new strFromFile2[256];
new File: file = fopen("cars.cfg", io_read);
if (file)
{
new idx = 190;
while (idx < sizeof(CarInfo))
{
fread(file, strFromFile2);
split(strFromFile2, arrCoords, ',');
CarInfo[idx][cModel] = strval(arrCoords[0]);
CarInfo[idx][cLocationx] = floatstr(arrCoords[1]);
CarInfo[idx][cLocationy] = floatstr(arrCoords[2]);
CarInfo[idx][cLocationz] = floatstr(arrCoords[3]);
CarInfo[idx][cAngle] = floatstr(arrCoords[4]);
CarInfo[idx][cColorOne] = strval(arrCoords[5]);
CarInfo[idx][cColorTwo] = strval(arrCoords[6]);
strmid(CarInfo[idx][cOwner], arrCoords[7], 0, strlen(arrCoords[7]), 255);
strmid(CarInfo[idx][cDescription], arrCoords[8], 0, strlen(arrCoords[8]), 255);
CarInfo[idx][cValue] = strval(arrCoords[9]);
CarInfo[idx][cLicense] = strval(arrCoords[10]);
CarInfo[idx][cOwned] = strval(arrCoords[11]);
CarInfo[idx][cLock] = strval(arrCoords[12]);
if(CarInfo[idx][cOwned] == 0)
{
CarInfo[idx][cCar3d]=Create3DTextLabel("Masina de vanzare",0xB4B5B7FF,0,0,0,30,1);
}else
{
static str[124];
format(str,124,"%s Vehicle",CarInfo[idx][cOwner]);
CarInfo[idx][cCar3d]=Create3DTextLabel(str,0xB4B5B7FF,0,0,0,30,1);
}
Attach3DTextLabelToVehicle(CarInfo[idx][cCar3d],idx,0,0,0.2);
printf("CarInfo: %d Owner:%s LicensePlate %s",idx,CarInfo[idx][cOwner],CarInfo[idx][cLicense]);
idx++;
}
}
return 1;
}

public SaveCarCoords()
{
new idx = 190;
new File: file2;
while (idx < sizeof(CarInfo))
{
new coordsstring[256];
format(coordsstring, sizeof(coordsstring), "%d,%f,%f,%f,%f,%d,%d,%s,%s,%d,%s,%d,%d\n",
CarInfo[idx][cModel],
CarInfo[idx][cLocationx],
CarInfo[idx][cLocationy],
CarInfo[idx][cLocationz],
CarInfo[idx][cAngle],
CarInfo[idx][cColorOne],
CarInfo[idx][cColorTwo],
CarInfo[idx][cOwner],
CarInfo[idx][cDescription],
CarInfo[idx][cValue],
CarInfo[idx][cLicense],
CarInfo[idx][cOwned],
CarInfo[idx][cLock]);
if(idx == 190)
{
file2 = fopen("cars.cfg", io_write);
}
else
{
file2 = fopen("cars.cfg", io_append);
}
fwrite(file2, coordsstring);
idx++;
fclose(file2);
}
return 1;
}

Reply
#2

Iti spun eu care e problema. ID`urile masinilor se incurca intre ele. La fel am patit si eu cand am vrut sa fac un sistem de masini personale si dupa mai multe zile de chinuiala, am reusit sa'l fac sa functioneze perfect.


Problema este urmatoarea (iti dau un exemplu). Exista 5 masini pe server: 1, 2, 3, 4 si 5. Cineva vinde masina cu ID 3 si astfel, raman doar 4 masini pe server: 1, 2, 4 si 5. Banuiesc ca tu ai la fiecare player salvat in datele sale ID`ul masini, sub forma PlayerInfo[playerid][Car1], etc. Ei, acum, daca tu dai restart la server, ID`urile masinilor se salveaza cum sunt acum.

Cand pornesti serverul, se incarca iar masinile dar masinile au altfel IDurile: 1, 2, 3 si 4. Astfel, cei care au detinut masinile cu ID 4 si 5 s'au incurcat id`urile intre ele.

De aceea ti se da tie peste cap tot.

Ce poti face?

Ei, aici vei avea de lucru. Trebuie sa gasesti o solutie, ca atunci cand inchizi server, sa stergi toate masinile, sa iei variabilele lor si sa le recreezi, cu id`urile corect dar e prea complicat.

Alta solutie, cred ca ar fii, ca atunci cand un player intra pe server, sa verifice daca detine vreo masina, in felul urmator. Loop printre toate masinile de pe server iar cele la care la Owner apare numele lui, sa le treaca ID`urile la cele detinute de el.

Nu stiu daca ai inteles prea multe dar sper ca te'am lamurit. Asta consider eu ca se intampla cu serverul tau dar nu pot garanta ca asta e problema. Poate ma insel si sa fie o solutie mult mai usoara.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)