Szerző Téma: Táska rendszer  (Megtekintve 1478 alkalommal)

Táska rendszer
« Dátum: 2014. augusztus 30. - 21:32:52 »
0 Show voters
Hali!
Próbálgatom a táska rendszert,letöltöttem a következõt.
http://forum.sa-mp.com/showthread.php?t=130436
Viszont nekem az egész szerverem MySQL -es,most az a kérdés,hogy oldjam meg hogy MySQL be mentse le a játékos dolgait ? Mivel ez az inventory rendszer fájlmentéssel van megoldva. Valaki tudna ebben segíteni ? Elõre is köszi.

Táska rendszer
« Válasz #1 Dátum: 2014. augusztus 30. - 22:26:56 »
0 Show voters
Miért nem használsz magyar nyelvût? Van itt a fórumon is...
Egyébként a mentést + betöltést kell csak megoldani MySQL-el ha jól néztem. Szóval ezt a részt:
 
stock SaveInventory(playerid)
{
gItemList=\"\";
new filename[48];
GetPlayerName(playerid,filename,24);
format(filename,48,\"Inventory/%s.inv\",filename);
new File:file=fopen(filename,io_write);
for(new item;item<MAX_ITEMS;item++)
{
if(!strlen(_GetItemNamePVar(playerid,item))||!_GetItemAmountPVar(playerid,item))continue;
format(gItemList,sizeof(gItemList),\"%s%s\\n%d\\n\",gItemList,_GetItemNamePVar(playerid,item),_GetItemAmountPVar(playerid,item));
}
fwrite(file,gItemList);
fclose(file);
GetPlayerName(playerid,filename,24);
printf(\"[iNV] %s[%d]\'s inventory saved.\",filename,playerid);
}
stock LoadInventory(playerid)
{
new tstring[48];
new tstring2[12];
GetPlayerName(playerid,tstring,48);
format(tstring,48,\"Inventory/%s.inv\",tstring);
if(!fexist(tstring))return 0;
new File:file=fopen(tstring,io_read);
fread(file,tstring);
while(tstring[0])
{
format(tstring,strlen(tstring),\"%s\",tstring); //Delete last character
fread(file,tstring2);
AddItem(playerid,tstring,strval(tstring2));
fread(file,tstring);
}
fclose(file);
GetPlayerName(playerid,tstring,24);
printf(\"[iNV] %s[%d]\'s inventory loaded.\",tstring,playerid);
return 1;
}

 
Lehet hogy megirom neked.

Táska rendszer
« Válasz #2 Dátum: 2014. augusztus 31. - 10:57:50 »
0 Show voters
Idézetet írta: Nukerdog date=1409430416\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"50463\" data-ipsquote-contentclass=\"forums_Topic
Miért nem használsz magyar nyelvût? Van itt a fórumon is...
Egyébként a mentést + betöltést kell csak megoldani MySQL-el ha jól néztem. Szóval ezt a részt:
 
stock SaveInventory(playerid)
{
gItemList=\"\";
new filename[48];
GetPlayerName(playerid,filename,24);
format(filename,48,\"Inventory/%s.inv\",filename);
new File:file=fopen(filename,io_write);
for(new item;item<MAX_ITEMS;item++)
{
if(!strlen(_GetItemNamePVar(playerid,item))||!_GetItemAmountPVar(playerid,item))continue;
format(gItemList,sizeof(gItemList),\"%s%s\\n%d\\n\",gItemList,_GetItemNamePVar(playerid,item),_GetItemAmountPVar(playerid,item));
}
fwrite(file,gItemList);
fclose(file);
GetPlayerName(playerid,filename,24);
printf(\"[iNV] %s[%d]\'s inventory saved.\",filename,playerid);
}
stock LoadInventory(playerid)
{
new tstring[48];
new tstring2[12];
GetPlayerName(playerid,tstring,48);
format(tstring,48,\"Inventory/%s.inv\",tstring);
if(!fexist(tstring))return 0;
new File:file=fopen(tstring,io_read);
fread(file,tstring);
while(tstring[0])
{
format(tstring,strlen(tstring),\"%s\",tstring); //Delete last character
fread(file,tstring2);
AddItem(playerid,tstring,strval(tstring2));
fread(file,tstring);
}
fclose(file);
GetPlayerName(playerid,tstring,24);
printf(\"[iNV] %s[%d]\'s inventory loaded.\",tstring,playerid);
return 1;
}

 
Lehet hogy megirom neked.
 
Értem,viszont sehogy sem akar mûködni.  :(
Így írtam át a stock részt,LoadItems meghívódik Connectnél,SaveItems pedig Disconnectnél,de nem akar menni.
 

stock SaveItems(playerid)
{
new query[128];
    new num_rows,num_fields;
cache_get_data(num_rows,num_fields,dbhandle);
    for(new i; i<MAX_ITEMS; i++)
{
format(query,sizeof(query),\"UPDATE user SET pTargyak = \'%s\',pTargyMennyiseg = \'%d\' WHERE pName=\'%s\'\",ItemName[playerid],ItemAmount[playerid],GetName(playerid));
mysql_function_query(dbhandle,query,false,\"\",\"\");
}
return 1;
}
stock LoadItems(playerid)
{
    new num_fields,num_rows;
cache_get_data(num_rows,num_fields,dbhandle);
if(num_rows==1)
{
        ResetPlayerItems(playerid);
    for(new i; i<MAX_ITEMS; i++)
{
   cache_get_field_content(0, \"pTargyak\", ItemName[playerid],dbhandle,sizeof( ItemName[playerid] ));
   ItemAmount[playerid] = cache_get_field_content_int(0,\"pTargyMennyiseg\",dbhandle);
   mysql_function_query(dbhandle,query,false,\"\",\"\");
}
}
else
{
format(query,sizeof(query),\"UPDATE user SET pTargyak = \'%s\',pTargyMennyiseg = \'%d\' WHERE pName=\'%s\'\",ItemName[playerid],ItemAmount[playerid],GetName(playerid));
mysql_function_query(dbhandle,query,false,\"\",\"\");
ResetPlayerItems(playerid);
SaveItems(playerid);
}
return 1;
}

 
Erre a sorra errorozik:
 

cache_get_field_content(0, \"pTargyak\", ItemName[playerid],dbhandle,sizeof( ItemName[playerid] ));

 
Illetve itt van az amit átalakítottam,tehát így volt megírva \"gyárilag\"
 

stock SaveItems(playerid)
{
new m[128];
    format(itemfile,sizeof(itemfile),\"/Inv/%s.ini\",GetNamei(playerid));
    for(new i; i<MAX_ITEMS; i++)
{
    format(m,128,\"Item%d\",i);
    dini_Set(itemfile,m,ItemName[playerid]);
    format(m,128,\"Itemamount%d\",i);
    dini_IntSet(itemfile,m,ItemAmount[playerid]);
}
return 1;
}
stock LoadItems(playerid)
{
new m[128];
    format(itemfile,sizeof(itemfile),\"/Inv/%s.ini\",GetNamei(playerid));
    if(dini_Exists(itemfile))
    {
        ResetPlayerItems(playerid);
    for(new i; i<MAX_ITEMS; i++)
{
    format(m,128,\"Item%d\",i);
    new item[128];
   format(item,128,\"%s\",dini_Get(itemfile,m));
    format(ItemName[playerid],128,\"%s\",item);
    format(m,128,\"Itemamount%d\",i);
    ItemAmount[playerid] = dini_Int(itemfile,m);
}
}
else
{
dini_Create(itemfile);
ResetPlayerItems(playerid);
SaveItems(playerid);
}
return 1;
}

 
R39.2-es MySQL plugint használok.
Elõre is köszi a segítséget!

Táska rendszer
« Válasz #3 Dátum: 2014. augusztus 31. - 12:33:33 »
0 Show voters
Hát én igazából nem nagyon használtam még sampban mysqlt, mert a csatlakozásnál elakadtam már.. :D
Egyébként mit ír az errorban?

Táska rendszer
« Válasz #4 Dátum: 2014. augusztus 31. - 12:36:28 »
0 Show voters
Idézetet írta: Nukerdog date=1409481213\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"50463\" data-ipsquote-contentclass=\"forums_Topic
Hát én igazából nem nagyon használtam még sampban mysqlt, mert a csatlakozásnál elakadtam már.. :D
Egyébként mit ír az errorban?
 
Értem. Esetleg valaki más tudna segíteni ?
Errorban ilyesmit ír:
 
invalid token ] but found ;

 
Tehát valami zárás hiba féle,de nem látok itt záráshibát. Mi lehet a gond ?

Nem elérhető rayle

  • 174
    • Profil megtekintése
Táska rendszer
« Válasz #5 Dátum: 2014. augusztus 31. - 13:05:12 »
0 Show voters
Amit te írtál az a mentésnél mindig a legutolsó (MAX_ITEMS-1) tárgyat fogja csak lementeni. Nem teszteltem:
 
stock SaveItems(playerid)
{
    new bool: elso = true, mennyiseg[256], targyak[256], query[512];
    for(new x = 0; x < MAX_ITEMS; x++)
    {
        if(elso)
{
    format(targyak, 512, \"%s\", ItemName[playerid]
  • );

    elso = false;
    continue;
        }      
format(targyak, 512, \"%s,%s\", targyak, ItemName[playerid]
  • );

    }
    elso = true;
    for(new x = 0; x < MAX_ITEMS; x++)
    {
        if(elso)
        {
            format(mennyiseg, 512, \"%d\", ItemAmount[playerid]
  • ), continue;

    elso = false;
    continue;
}
format(mennyiseg, 512, \"%s,%d\", mennyiseg, ItemAmount[playerid]
  • );

    }
    format(query, sizeof query, \"UPDATE `user` SET `pTargyak` = \'%s\', `pTargyMennyiseg` = \'%s\' WHERE `pName` = \'%s\'\", targyak, mennyiseg, GetName(playerid));
    mysql_query(SQLKapcsolat, query);
    return 1;
}
stock LoadItems(playerid)
{
    new query[128];
    format(query, sizeof query, \"SELECT * FROM `user` WHERE `pName` = \'%s\'\", GetName(playerid));
    mysql_query(dbhandle, query);
    new adat[512];
    cache_get_field_content(0, \"pTargyak\", adat, dbhandle, sizeof(adat));
    new inv[MAX_ITEMS][32];
    split(adat, inv, \',\');
    for(new x = 0; x < MAX_ITEMS; x++) format(ItemName[playerid]
  • , 32, \"%s\", inv
  • );

    cache_get_field_content(0, \"pTargyMennyiseg\", adat, dbhandle, sizeof(adat));
    split(adat, inv, \',\');
    for(new x = 0; x < MAX_ITEMS; x++) ItemAmount[playerid]
  • = strval(inv
  • );

    return 1;
}

 
split (ha nincs meg):
 
stock split(const strsrc[], strdest[][], delimiter)
{
new i, li;
new aNum;
new len;
while(i <= strlen(strsrc)){
    if(strsrc==delimiter || i==strlen(strsrc)){
        len = strmid(strdest[aNum], strsrc, li, i, 128);
        strdest[aNum][len] = 0;
        li = i+1;
        aNum++;
}
i++;
}
return 1;
}

Táska rendszer
« Válasz #6 Dátum: 2014. augusztus 31. - 13:42:32 »
0 Show voters
Köszi a gyors választ!
Errort dobott erre a sorra:
 

format(mennyiseg, 512, \"%d\", ItemAmount[playerid]
  • ), continue;


 
Itt az a rész ahol errorozik,amit elõbb leírtam csak itt vannak az elõtti/utóbbi sorok:
 

if(elso)
        {
            format(mennyiseg, 512, \"%d\", ItemAmount[playerid]
  • ), continue;

            elso = false;
            continue;
        }
        format(mennyiseg, 512, \"%s,%d\", mennyiseg, ItemAmount[playerid]
  • );


 
És ilyen errort dob rá:
 

error 029: invalid expression, assumed zero

 
Elõre is köszi a válaszod.

Nem elérhető rayle

  • 174
    • Profil megtekintése
Táska rendszer
« Válasz #7 Dátum: 2014. augusztus 31. - 13:43:13 »
0 Show voters
stock SaveItems(playerid)
{
    new bool: elso = true, mennyiseg[256], targyak[256], query[512];
    for(new x = 0; x < MAX_ITEMS; x++)
    {
        if(elso)
        {
            format(targyak, 512, \"%s\", ItemName[playerid]
  • );

            elso = false;
            continue;
        }           
        format(targyak, 512, \"%s,%s\", targyak, ItemName[playerid]
  • );

    }
    elso = true;
    for(new x = 0; x < MAX_ITEMS; x++)
    {
        if(elso)
        {
            format(mennyiseg, 512, \"%d\", ItemAmount[playerid]
  • );

            elso = false;
            continue;
        }
        format(mennyiseg, 512, \"%s,%d\", mennyiseg, ItemAmount[playerid]
  • );

    }
    format(query, sizeof query, \"UPDATE `user` SET `pTargyak` = \'%s\', `pTargyMennyiseg` = \'%s\' WHERE `pName` = \'%s\'\", targyak, mennyiseg, GetName(playerid));
    mysql_query(SQLKapcsolat, query);
    return 1;
}

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal