GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: kriszrap - 2012. december 26. - 20:28:09

Cím: mysql sorokon végig menni (while)
Írta: kriszrap - 2012. december 26. - 20:28:09
sziasztok
van egy táblázatom és leszereném kérdezni az összes sort whileal
sor értékeit  egy változoba tárolni pl a sor idjét:)
hogyan?:)
elõre is köszönöm.
Cím: mysql sorokon végig menni (while)
Írta: Zsolesszka - 2012. december 27. - 11:20:05
Én szerver indításkor mindig újra létre hozattam  az ID sort mysql táblán, mivel ha törlésre került a dolog akkor az újonnan létrehozott adatsor nem a megüresedett helyre került, hanem a végére.
 
ALTER TABLE `tablaneve` DROP `ID`
ALTER TABLE `tablaneve` ADD `ID` INT( 4 ) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST\"

 
Ez sok gondtól megfog kímélni, mivel minden egyes szerver indításkor újra hiány nélkül újra indexelésre kerül minden adatsor.
Játék közben meg már mindegy hogy mennyi adatsort törölnek hoznak létre, nincs jelentõsége ha minden indításkor újra indexelésre kerül ami fontos.
Cím: mysql sorokon végig menni (while)
Írta: kriszrap - 2012. december 27. - 14:24:09
kis okoskodassal nagyábbol sikerült:)
nem a te példáddal:)
elösször meg csinálom a pickupokat:)
 

new data[128],picknev,Float:pickx,Float:picky,Float:pickz;
mysql_query(\"SELECT pickupnev,pickupx,pickupy,pickupz FROM hotel\");
mysql_store_result();
while(mysql_fetch_row(data)) {
sscanf(data, \"p<|>s[50]fff\",picknev,pickx,picky,pickz);
picknev = CreatePickup(1273, 1, pickx,picky,pickz);
    }

 
picknev ilyen értékeket kap hogy: lvhotel1 lvhotel2 ... lvhotel9 kapna:D
 ha rajta van a pickupon a játékos:
 

public OnPlayerPickUpPickup(playerid, pickupid)
{
    new data1[128],string[128],picknev[128],lefoglalva[128];
mysql_query(\"SELECT foglalva,pickupnev FROM hotel\");
    mysql_store_result();
    while(mysql_fetch_row(data1)) {
    sscanf(data1, \"p<|>s[50]s[50]\",lefoglalva,picknev);
    if(pickupid ==picknev) //hát itt irtam lvhotel1,2,3 de ugyan azon az 1 pickupon kapom meg az adatokat:( és lvhotel9 értékeit:(
  {
  format(string,500,\"szoba név: %s \\n Lefoglalva: %s \",picknev,lefoglalva);
       ShowPlayerDialog (playerid, listabehoz,DIALOG_STYLE_MSGBOX, \"Hotel foglalas\",string, \"ok\",\"kilep\");
  }
    }
}

 
miért nem müködik?:(
Cím: mysql sorokon végig menni (while)
Írta: Zsolesszka - 2012. december 27. - 16:23:39
Amennyi létrehozott pickup van annyi változónak is kellene lenni.
Egy sima picknev változót futtatsz while ciklussal és tárolod benne a CreatePickup által visszaadott azonosítószámot, nem csoda hogy csak az utolsó \"lvhotel\" adattal mûködik.
Az OnPlayerPickUpPickup alatt is kellene annyi lehetõség amennyi pickupot létre akarsz hozni.
Cím: mysql sorokon végig menni (while)
Írta: kriszrap - 2012. december 27. - 16:33:32
picknev et tömböt létrekéne hoznom 9 tömböt?
new picknev[9]; igy és while cikulus ba elinditok egy a változot hogy tudjam hányadik sornáljár igy gondolom:
 

new picknev[9];
new hanyadik;
new data[128],Float:pickx,Float:picky,Float:pickz;
mysql_query(\"SELECT pickupnev,pickupx,pickupy,pickupz FROM hotel\");
mysql_store_result();
while(mysql_fetch_row(data)) {
sscanf(data, \"p<|>s[50]fff\",picknev,pickx,picky,pickz);
hanyadik++;
picknev[hanyadik] = CreatePickup(1273, 1, pickx,picky,pickz);
    }

 
igy gondoltad?:)
Cím: mysql sorokon végig menni (while)
Írta: totar - 2012. december 27. - 17:00:38
Ezt leírná valaki, hogy mi célt szolgál? while(mysql_fetch_row())
Cím: mysql sorokon végig menni (while)
Írta: Zsolesszka - 2012. december 27. - 17:51:42
Az úgy semmire. :D
A fenti példákban addig ismétlõdik a while(mysql_fetch_row(data)) amíg az összes adatsort egymás után el nem helyezi a \"data\" változóba.
Cím: mysql sorokon végig menni (while)
Írta: kriszrap - 2012. december 27. - 19:15:30
ɐʞzssǝlosz ugy gondoltad ahogy leirtam?:)
Cím: mysql sorokon végig menni (while)
Írta: Zsolesszka - 2012. december 27. - 21:59:41
Ja, már alakul. :D
Csak az OnPlayerPickUpPickup-nál is kell a több lehetõség.
Cím: mysql sorokon végig menni (while)
Írta: kriszrap - 2012. december 28. - 12:47:23
ugyan az a probléma:( 1 ikon utolso érték és ennyi.
 

public OnPlayerPickUpPickup(playerid, pickupid)
{
    new data1[128],string[128],picknev[9],hanyadik,lefoglalva[128];
mysql_query(\"SELECT foglalva,pickupnev FROM hotel\");
    mysql_store_result();
    while(mysql_fetch_row(data1)) {
    sscanf(data1, \"p<|>s[50]s[50]\",lefoglalva,picknev);
hanyadik++;
    if(pickupid == picknev[hanyadik])
  {
  format(string,500,\"szoba név: %s \\n Lefoglalva: %s \",picknev,lefoglalva);
       ShowPlayerDialog (playerid, listabehoz,DIALOG_STYLE_MSGBOX, \"Hotel foglalas\",string, \"ok\",\"kilep\");
  }
    }
    hanyadik = 0;
}
Cím: mysql sorokon végig menni (while)
Írta: Zsolesszka - 2012. december 28. - 17:01:59
Ezeket csak úgy össze ctrl+c/+v -zed?
Ilyet sose csinálnék még álmomban sem hogy mysql lekérést hajtsak végre OnPlayerPickUpPickup alatt.
A picknev változót integer típusúnak szántad, akkor ne karakterláncként alkalmazd.
Eredetileg ezt CreatePickup által létrehozott illetve visszaadott azonosító tárolására szántad.
A változó neve se találó mivel csak összezavar téged.
Nézd csak meg a kódodat:
 
    if(pickupid == picknev[hanyadik]) // Itt a picknev karakterlánc egyik karakterét próbálod összehasonlítani a pickupid -vel ami egy egész számot tartalmazó változó.
          {
          format(string,500,\"szoba név: %s \\n Lefoglalva: %s \",picknev,lefoglalva); // Itt meg ugyanazt a változót karakterláncként ki akarod íratni?

 
Sok az összevisszaság és nem tudni mit is akarsz létrehozni.
Amúgy most a kódban hol van létrehozva a CreatePickup által a pickupok?
Cím: mysql sorokon végig menni (while)
Írta: kriszrap - 2012. december 28. - 18:50:47
2 hozzászolás :) ott a createpickup . picknev nél ink nem a nevét probálok kiszedni ha nem az adatbázisba az idet ugy sztem könnyeblesz:)
Cím: mysql sorokon végig menni (while)
Írta: Zsolesszka - 2012. december 28. - 20:14:27
És mi lenne ha teljes kódot másolnál be és nem össze vissza részleteket, amire írtam nincs CreatePickup ott tényleg nincs.
 
Idézetet írta: kriszrap date=1356695243\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"31467\" data-ipsquote-contentclass=\"forums_Topic
ugyan az a probléma:( 1 ikon utolso érték és ennyi.
 

public OnPlayerPickUpPickup(playerid, pickupid)
{
    new data1[128],string[128],picknev[9],hanyadik,lefoglalva[128];
mysql_query(\"SELECT foglalva,pickupnev FROM hotel\");
    mysql_store_result();
    while(mysql_fetch_row(data1)) {
    sscanf(data1, \"p<|>s[50]s[50]\",lefoglalva,picknev);
hanyadik++;
    if(pickupid == picknev[hanyadik])
  {
  format(string,500,\"szoba név: %s \\n Lefoglalva: %s \",picknev,lefoglalva);
       ShowPlayerDialog (playerid, listabehoz,DIALOG_STYLE_MSGBOX, \"Hotel foglalas\",string, \"ok\",\"kilep\");
  }
    }
    hanyadik = 0;
}

 

Szerintem az elején kellene kezdened a dolgot, mysql nélkül.
Létrehozol 10 darab pickupot.
 
#include <a_samp>
 
new
pickup_id[10];
 
public
OnFilterScriptInit()
{
for(new i; i < sizeof pickup_id; i++)
{
pickup_id = CreatePickup(1273, 1, 0.0 - i, 0.0 + i, 2.0);
}
return 1;
}
public
OnPlayerPickUpPickup(playerid, pickupid)
{
for(new i; i < sizeof pickup_id; i++)
{
if(pickup_id == pickupid)
{
   new
      str[128];
   format(str, sizeof str, \"Megtaláltad a %d sorszámú pickupot.\", pickupid);
   SendClientMessage(playerid, -1, str);
   return 1;
}
}
return 1;
}
Cím: mysql sorokon végig menni (while)
Írta: kriszrap - 2012. december 29. - 00:35:34
na sikerült
 

public OnPlayerPickUpPickup(playerid, pickupid)
{
    new data[128],string[128],pickid[10],hanyadik,foglalva[10],pickupnev[10];
mysql_query(\"SELECT id,foglalva,pickupnev FROM hotel\");
    mysql_store_result();
    hanyadik=0;// 0 hozz add 1 et
    while(mysql_fetch_row(data)) {
    hanyadik++;
    sscanf(data, \"p<|>ds[50]s[50]\",pickid[hanyadik],foglalva[hanyadik],pickupnev[hanyadik]);
    if(pickupid == pickid[hanyadik])
  {
  format(string,500,\"Szoba szám : %d \\n Foglalva : %s \",pickid[hanyadik],foglalva[hanyadik]);
       ShowPlayerDialog (playerid, listabehoz,DIALOG_STYLE_MSGBOX, \"Hotel foglalas\",string, \"ok\",\"kilep\");
       printf(\"%d\",pickid[hanyadik]);
  }
    }
}
public pickuplerakas()
{
new data[128],pickid[10],hanyadik,Float:pickx[10],Float:picky[10],Float:pickz[10];
mysql_query(\"SELECT id,pickupx,pickupy,pickupz FROM hotel\");
    mysql_store_result();
    hanyadik =0;
    while(mysql_fetch_row_format(data)) {
    hanyadik++;
    sscanf(data, \"p<|>dfff\",pickid[hanyadik],pickx[hanyadik],picky[hanyadik],pickz[hanyadik]);
    printf(\"%d / %f /%f / %f\",pickid[hanyadik],pickx[hanyadik],picky[hanyadik],pickz[hanyadik]);
    }
    for(new i=0; i <= 9; i++)
{
    pickid = CreatePickup(1273, 1, pickx,picky,pickz);
    printf(\"%d /%f /%f/%f \",pickid,pickx,picky,pickz);
}
return 1;
}
public OnGameModeInit()
{
pickuplerakas()
}

 
teljes kód
még annyi azt utánna zárok:)
a while csak egyszer futt végig  OnPlayerPickUpPickup nál?:)
Cím: mysql sorokon végig menni (while)
Írta: Zsolesszka - 2012. december 29. - 04:12:01
Nem csak egyszer fut végig.
Annyiszor amennyi adatsor van a hotel sql táblán, és annyiszor ahányszor meghívásra kerül az OnPlayerPickUpPickup.
Ui.:
Még mindig nem tudom mit akarsz létrehozni.  :-[
De írtam egy változatot amibõl a Load részt feltudod használni:
 
#define MAX_PICKUP 10
new
HotelPickup[MAX_PICKUP];
stock
LoadPickup()
{
new
i = 0,
temp[128],
Float:pickx,
Float:picky,
Float:pickz;
mysql_query(\"SELECT `pickupx`, `pickupy`, `pickupz` FROM `hotel`\");
mysql_store_result();
while(mysql_fetch_row_format(temp))
{
if(i < MAX_PICKUP)
{
   sscanf(temp, \"p<|>fff\", pickx, picky, pickz);
   HotelPickup = CreatePickup(1273, 1, pickx, picky, pickz);
   i++;
}
}
mysql_free_result();
}
public
OnPlayerPickUpPickup(playerid, pickupid)
{
for(new i; i < MAX_PICKUP; i++)
{
if(HotelPickup == pickupid)
{
   new
      str[128];
   format(str, sizeof str, \"Szoba szám : %d\", pickupid);
   ShowPlayerDialog(playerid, listabehoz, DIALOG_STYLE_MSGBOX, \"Hotel foglalas\", str, \"ok\",\"kilep\");
   return 1;
}
}
return 1;
}
Cím: mysql sorokon végig menni (while)
Írta: kriszrap - 2012. december 29. - 10:43:33
lusta voltam mind a 9 pickupot megírni:)
a táblám néhány adatai :)
id  táblázat idje
foglalva kifoglalta le azt a szobát
pickupnev sztem nevéböl meglehet tudni:) lvhotel1,lvhotel2...lvhotel9
pickupx pickupy pickupz pickup xyz helye
és ezt whilel és tömböket megcsináltam.
annyi még hogy ahol rá megy a pickupra ott megkapja a sorid vagy is pickupidj és átvinni az értéket egy publicka azt hogy?:)
ám köszönöm szépen a fáradozásod:)
és a kódokat sokat segítetél:)
ám szted for whilelal csináljam? Mert te mindidg forral irtad meg nekem:)
Cím: mysql sorokon végig menni (while)
Írta: Zsolesszka - 2012. december 29. - 17:46:49
Teljesen mindegy hogy while vagy for ciklust használsz.
A while egyes esetekben kényelmesebb mint a segítség kérésedben a
while(mysql_fetch_row_format(temp)) használatakor, most ugyanezt írd csak át for ciklusba, :D látni fogod hogy kicsit nehezebb meg rosszabbul is néz ki kódként.
Simán odaírod a public funkció nevét, adatokkal együtt, mint ahogy az egyik példádban oda írtad hogy pickuplerakas(); .
Cím: mysql sorokon végig menni (while)
Írta: kriszrap - 2013. január 02. - 23:12:44
koszonom :) sorry hogy kesve irok:(