-
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.
-
É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.
-
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?:(
-
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.
-
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?:)
-
Ezt leírná valaki, hogy mi célt szolgál? while(mysql_fetch_row())
-
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.
-
ɐʞzssǝlosz ugy gondoltad ahogy leirtam?:)
-
Ja, már alakul. :D
Csak az OnPlayerPickUpPickup-nál is kell a több lehetõség.
-
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;
}
-
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?
-
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:)
-
É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.
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;
}
-
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?:)
-
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;
}
-
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:)
-
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(); .
-
koszonom :) sorry hogy kesve irok:(