Nos, hát rengeteget segítettél, viszont szükségem lenne még egy kicsire. :D
Nos, próbálkoztam, és összehoztam valamit, de nem nagyon működik.
funkcio Bemutatkozas1( playerid, playerid2 )
{
new sorok_szama = cache_get_row_count();
if(sorok_szama == 0)
{
new query1[256];
mysql_format(kapcs, query1, 256,\"INSERT INTO \'bemutatkozasok\' (`ki`,\'kinek\') VALUES (\'%s\', \'%s\')\",Neve(playerid),Neve(playerid2));
mysql_tquery(kapcs, query1, \" \", \"\");
cmd_me(playerid, \"bemutatkozik valakinek\");
SFM(playerid2, FONTOS, \"(( %s bemutatkozott neked. ))\", Neve(playerid));
SCM(playerid, ZOLD, \"(( Bemutatkoztál az illetőnek. ))\");
}else HIBA(playerid, \"(( Te már bevagy mutatkozva neki. ))\");
return 1;
}
CMD:bemutatkozas(playerid,params[])
{
new playerid2;
if(sscanf(params, \"u\", playerid2)) return SendClientMessage(playerid, ZOLD, \"Használat: /bemutatkozas < Név / Id >\");
if(!IsPlayerConnected(id)) return SendClientMessage(playerid, ZOLD, \"A játékos nem elérhető!\");
new Float:vX, Float:vY, Float:vZ;
GetPlayerPos(playerid2, vX, vY, vZ);
if(!IsPlayerInRangeOfPoint(playerid, 3.0, vX, vY, vZ)) return SendClientMessage(playerid, PIROS, \"Nincs a közeledben senki!\");
new query2[256];
mysql_format(kapcs, query2, 256, \"SELECT * FROM \'bemutatkozasok\' WHERE ki=`%s` AND kinek=`%s`\", Neve(playerid), Neve(playerid2));
mysql_tquery(kapcs, query2, \"Bemutatkozas1\", \"dd\", playerid, playerid2);
return 1;
}
Valamiért nem csinál semmit a parancsra. Mi lehet a baj? Esetleg Ti, hogy oldanátok meg?
Működési (logikai) sorrendben nézem végig a kódot.
1. 25. sor:
return SendClientMessage(playerid, PIROS, \"Nincs a közeledben senki!\");
Nincs a közeledben a kiválasztott játékos, inkább. De ezen nem múlik sokminden. :D
2.
Neve(playerid)
Ez alsóvonással, vagy anélkül tér vissza a nevével? Lehetőleg úgy kellene, ahogy a bemutatkozasok táblában tárolva van. Bár szinte biztos vagyok benne, hogy ez sem okozza EZT a hibát, de szerintem jobb lenne egy Nev[MAX_PLAYERS][24] tömbben tárolni a neveket bejelentkezéskor, így csak onnan kéne olvasnia, nem kell minden egyes lekérésnél végigfutnia egy plusz függvénynek, stb.
3.
SELECT * FROM \'bemutatkozasok\' WHERE ki=`%s` AND kinek=`%s`
Ilyen ` jelet magyar billentyűn Alt Gr + 7-tel tudsz írni. Én mindig aposztrófot használtam (\') (a tutorialomban is), de most profinak akartam tűnni és úgy írni, ahogy azt a legtöbb más helyen is szokták. Lehetőleg mindegyik legyen egyforma, bár sosem próbáltam még ki, hogy ez okoz-e valamiféle gubancot.
Ha ennek még a formázásnál használt hosszába is bele akarnék kötni, azt mondanám, hogy legyen a maximális mérete + 1.
A következőképp számolok:
beillesztem ide >ERRE AZ OLDALRA< a következő queryt (%s-ek nélkül nyilván):
SELECT * FROM `bemutatkozasok` WHERE ki=`` AND kinek=``
Erre kiadja, hogy 55 karakter hosszú. Még ehhez hozzájön 24+24 karakter (mindkét player nevének maximális hossza), ami 103, plusz egy kell a string lezárásához (nekérdezd ;)). 104-re elég formázni (és a tömb méretének is elég ennyi). A %s-ek attól kellenek a formatba, csak a hossz méréséhez vettük ki ideiglenesen!!
Illetve MySQL format-ot csak akkor használnék szívem szerint (bár nem tudom miben különbözik a sima formattól), ha escape karaktert írok bele (%e), melyet csak ez a funkció tud.
Annyira nagy hiba itt sem volt, csak megnyugtatta a spúr lelkemet, ez a felszabadult 152 byte (256>>104).
4.
A 6-7. sorban a következő query méretét megint csak módosítanám (az aposztrófok kijavítása mellett):
INSERT INTO \'bemutatkozasok\' (`ki`,\'kinek\') VALUES (\'%s\', \'%s\')
Ez a fenti oldal segítségével végzett számításaim szerint (kicsit megszépítve %s-ek nélkül):
INSERT INTO `bemutatkozasok` (`ki`,`kinek`) VALUES (``,``)
58+24+24+1=141 karakter hosszú, szóval annyira pont elég formázni, és a tömb méretének is elég.
A 3. és 4. pontot próbáld meg 24 karakter hosszú nevekkel a biztonság kedvéért! Ha lehagy egy karaktert, próbáld újra úgy, hogy a tömb méretét eggyel kisebbre, a formatot pedig eggyel kisebb méretűre veszed. Nem emlékszem már pontosan erre!
Ezen kívül nem tudok mit mondani. Be van kapcsolva a mysql_logolás? Nézd meg ott, hátha segít.
Aposztrófok cserélve. A Neve(playerid) függvény alsóvonallal tér vissza. Kijavítottam azokat a dolgokat amiket írtál, de sajnos így se jó. A mysql_log a következőt írja:
[15:13:51] [ERROR] CMySQLQuery::Execute[bemutatkozas1] - (error #1054) Unknown column \'Kiss_Pista\' in \'where clause\'
Ezt miért írhatja?
Illetve, gondolkodtam, és mi lenne, ha nem név alapján menteném a bemutatkozást, hanem adatbázis ID alapján? Úgy nem egyszerűbb?
Hát, őszintén megmondom, nem tudom. :D
Format(query2, \"SELECT * FROM `bemutatkozasok` WHERE ki=`%s` AND kinek=`%s` LIMIT 1\", Neve(playerid), Neve(playerid2));
mysql_tquery(kapcs, query2, \"Bemutatkozas1\", \"dd\", playerid, playerid2);
Nem erre írja? Vagy a \"Bemutatkozas1\" függvénybe szúrtam el valamit?
A format() kisbetű, kell bele hosszúság (sizeof(query2)). Mivel odaírtad, hogy \" LIMIT 1\" (ami nem hülyeség, javasolni is akartam!), ezért nyilván 8 karakterrel hosszabb lesz a query.
Ezt rakd még be az OnGameModeInit elejére:
mysql_log(LOG_ALL, LOG_TYPE_HTML);
Ezzel így elméletileg egy mysql_log.html fájlba mindent kiír majd, ami csak történik. Ha hiba van, így láthatjuk az azt megelőző történéseket is, így könnyebb lesz azt körülhatárolni.
Format(query2, \"SELECT * FROM `bemutatkozasok` WHERE ki=`%s` AND kinek=`%s` LIMIT 1\", Neve(playerid), Neve(playerid2));
helyett
Format(query2, \"SELECT * FROM `bemutatkozasok` WHERE ki=\'%s\' AND kinek=\'%s\' LIMIT 1\", Neve(playerid), Neve(playerid2));