Ez a szekció lehetővé teszi a felhasználó által írt összes hozzászólás megtekintését. Vedd figyelembe, hogy csak azokba a fórumokba írt hozzászólásokat látod, amelyekhez hozzáférésed van.
Üzenetek - ZyZu.
Oldalak: 1 ... 317 318 [319] 320 321 ... 527
4771
« Dátum: 2013. március 23. - 11:46:45 »
És le is menti neked + be is tölti?
4772
« Dátum: 2013. március 23. - 11:07:15 »
EnableStuntBonusForAll( false ); OnGameModeInit alá írd be és nem jelenik meg a bonúsz.
4773
« Dátum: 2013. március 23. - 11:04:48 »
Ez a hiba a sscanf2.inc -ben van másold be a sscanf2.inc -ben található 240 sort és segítek..
4774
« Dátum: 2013. március 23. - 08:59:14 »
Ezt ki venném a titulusból. Profi Mapper nekem nem tetszik.
4775
« Dátum: 2013. március 23. - 08:24:45 »
minden meg van.
4776
« Dátum: 2013. március 23. - 07:30:19 »
Sziasztok! Nos elkezdtem tanulni az mysqlt mivel van egy hostom a sunwellnél ezért sikeresen csatlakoztam az adatábzishoz. Olvastam pár leírást de úgy sem tudtam meg csinálni, hogy az adminisztrátor szintjét betöltse és elmentse amit használok az a kurta999 regisztrációs rendszer probáltam már mindent de nem jó nem tudom miért nem menti, valaki segítene, hogy hogyan kell menteni mysql -ban + betölteni? Mivel még csak most tapasztalom.. :confused: // MySQL Regisztráció rendszer by kurta999 // Verzió: 2.0 // Last Update: 2012.10.29 #include <a_samp> #tryinclude a_mysql_r7 #if !defined _a_mysql_r7_included #include <a_mysql> #endif #if defined mysql_fetch_int #error \"Frissítsd a MySQL (a_mysql.inc) függvénykönyvtárad az R7-re!\" #endif #include <zcmd> // http://forum.sa-mp.com/showthread.php?t=91354 #define NINCS_REG_CSILLAG // Rakd a kommenttárba, ha a jelszót a játékosnak a regisztráció dialógusban csillagozni akarod. // Szerintem ezt ajánlott így hagyni, mivel a regisztrációban könnyen félrhetírhatsz és nemjössz rá a hibára, mivel nem látod, hogy mit írtál.. // A hibára pedig csak akkor jössz rá, miután beregisztráltál. #define ChangeNameDialog(%1) \\ ShowPlayerDialog(%1, DIALOG_CHANGENAME, DIALOG_STYLE_INPUT, !\"{\" #XCOLOR_RED \"}Névváltás\", !\"{\" #XCOLOR_GREEN \"}Lentre írd be az új neved! \\nHa régóta játszol már, akkor a névváltás több másodpercig is eltarthat!\\n\\n{\" #XCOLOR_RED \"}Ahogy megváltoztattad, rögtön változtasd meg a neved a SAMP-ba!\", !\"Változtatás\", !\"Mégse\") // gpci beágyazása native gpci(playerid, const serial[], maxlen); new year, month, day, hour, minute, second; new // Direkt adok hozzá + 1 karaktert, mivel valahol a \\0 kraktert is tárolni kell. (Ez 4 karakter, de kell az 5. is, mivel ott tárolja a \\0-t! [\'a\', \'n\', \'y\', \'á\', \'d\', \'\\0\']) g_szQuery[512 +1], g_szDialogFormat[4096], i_str[128 +1], g_szIP[16 +1]; // Bit flagok enum e_PLAYER_FLAGS (<<= 1) { e_LOGGED_IN = 1, e_FIRST_SPAWN } new e_PLAYER_FLAGS:g_PlayerFlags[MAX_PLAYERS char]; new g_pQueryQueue[MAX_PLAYERS]; // MySQL beállítások, alapból ezek azok a wamp-nál, csak a tábla nevét módosítsd arra, amilyen néven létrehoztad, nekem itt a \'samp\' #define MYSQL_HOST \"localhost\" #define MYSQL_USER \"root\" #define MYSQL_PASS \"\" #define MYSQL_DB \"samp\" // Üzenet, amit akkor ír ki, ha a lekérdezés befejezése elõtt lelép a játékos #define QUERY_COLLISION(%0) \\ printf(\"Query collision \\\" #%0 \\\"! PlayerID: %d, queue: %d, g_pQueryQueue: %d\", playerid, queue, g_pQueryQueue[playerid]) // RRGGBBAA #define COLOR_GREEN 0x33FF33AA #define COLOR_RED 0xFF0000AA #define COLOR_YELLOW 0xFF9900AA #define COLOR_PINK 0xFF66FFAA // RRGGBB #define XCOLOR_GREEN 33FF33 #define XCOLOR_RED FF0000 #define XCOLOR_BLUE 33CCFF #define XCOLOR_YELLOW FF9900 #define XCOLOR_WHITE FFFFFF // Dialóg ID enum { DIALOG_LOGIN = 20000, DIALOG_REGISTER, DIALOG_CHANGENAME, DIALOG_CHANGEPASS, DIALOG_FINDPLAYER } // isnull by Y_Less #define isnull(%1) \\ ((!(%1[0])) || (((%1[0]) == \'\\1\') && (!(%1[1])))) public OnFilterScriptInit() { // MySQL print(!\"MySQL: Kapcsolódás erre a címre \" MYSQL_HOST \" \" MYSQL_USER \" nevû felhasználóval. \\nAdatbázis neve: \" MYSQL_DB \".\"); mysql_debug(1); // Hosztos szerveren ajánlott kikapcsolni. (Ha bekapcsovla hagyod sem nagyon lesz semmi, mivel R7-ben nem ír annyi információt ki, mind a régebbiekben) mysql_connect(!MYSQL_HOST, !MYSQL_USER, !MYSQL_DB, !MYSQL_PASS); if(mysql_ping() != 1) { print(!\"MySQL: Kapcsolódás sikertelen! (\" MYSQL_HOST \")\"); print(!\"MySQL: A mód kikapcsol! (\" MYSQL_HOST \")\"); SendRconCommand(!\"exit\"); return 1; } print(!\"MySQL: Kapcsolódás elfogadva!\" MYSQL_HOST \"\"); print(!\"MySQL: Adatbázis \" MYSQL_DB \" kiválasztva!\"); return 1; } public OnFilterScriptExit() { mysql_close(); // Kapcsolat bezárása return 1; } public OnPlayerConnect(playerid) { SetPlayerColor(playerid, (random(0xFFFFFF) << | 0xFF); // GetPlayerColor() javítása g_pQueryQueue[playerid]++; format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_id` FROM `players` WHERE `name` = \'%s\'\", pName(playerid)); mysql_function_query(1, g_szQuery, true, \"THREAD_OnPlayerConnect\", \"dd\", playerid, g_pQueryQueue[playerid]); return 1; } public OnPlayerDisconnect(playerid, reason) { g_pQueryQueue[playerid]++; return SavePlayer(playerid, GetPVarInt(playerid, \"RegID\")); } forward THREAD_OnPlayerConnect(playerid, queue); public THREAD_OnPlayerConnect(playerid, queue) { // Ha a játékos csatlakozik vagy lelép, akkor a \"g_pQueryQueue[playerid]\" értéke mindig növekedik. // Lekérdezésnél átvisszük ennek az értékét a \"queue\" nevû paraméterben, amit majd a lekérdezés lefutásánál ellenõrzünk. // Ha a játékos lelépett, akkor \"g_pQueryQueue[playerid]\" egyel több lett, tehát nem egyenlõ a \"queue\" paraméter értékével. // Ez esetben a lekérdezés nem fog lefutni, hanem egy figyelmezetõ üzenetet fog kiírni a konzolva, hogy \"query collision\". // Nagyon fontos ez, mivel ha van egy lekérdezés, ami lekérdez valami \"titkos\" adatot az adatbázisból, // közben belaggol a a mysql szerver, a lekérdezés eltart 5 másodpercig, feljön egy másik játékos és annak fogja kiírni az adatokat, // mivel a lekérdezés lefutása közben lelépett a játékos és egy másik jött a helyére. Erre van ez a védelem, így ettõl egyáltalán nem kell tartani. // Sima lekérdezéseknél (ház betöltés, egyéb betöltés, frissítés, stb.. sz*rságok) ilyen helyen nem szükséges ez a védelem. if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_OnPlayerConnect); new szFetch[12]; cache_get_row(0, 0, szFetch); SetPVarInt(playerid, \"LineID\", strval(szFetch)); // Ez itt egy \"átmeneti változó\", ami tárolja, hogy mi a reg id-je a játékosnak. // Ha nulla, akkor nincs regisztrálva (mivel az SQL 0-t ad vissza, ha nemlétezõ a sor), ellentétben pedig igen. g_PlayerFlags{playerid} = e_PLAYER_FLAGS:0; // Nullázuk az értékét, nem elég a nulla, kell elé a változó tagja is, különben figyelmeztet a fordító. if(!IsPlayerNPC(playerid)) // Csak játékosokra vonatkozik { SetPVarInt(playerid, \"RegID\", -1); GetPlayerIp(playerid, g_szIP, sizeof(g_szIP)); gpci(playerid, i_str, sizeof(i_str)); getdate(year, month, day); gettime(hour, minute, second); format(g_szQuery, sizeof(g_szQuery), \"INSERT INTO `connections`(id, name, ip, serial, time) VALUES(0, \'%s\', \'%s\', \'%s\', \'%02d.%02d.%02d/%02d.%02d.%02d\')\", pName(playerid), g_szIP, i_str, year, month, day, hour, minute, second); mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\"); // Autologin // Leftuttatunk egy lekérdezést, ami ha befejezõdött, akkor meghívódik a \"THREAD_Autologin\" callback. // A régebbi pluginnal ez egy funkcióban ment, szóval ha a mysql szerver belaggolt és a lekérdezés eltartott 5 másodpercig, // akkor 5 másodpercig megfagyott a szerver. // Itt nem fog megfagyni semeddig a szerver, mivel létrehoz neki egy új szálat, és az a szál fagy meg míg nem fut le a lekérdezés. // Lefutás után pedig meghívja a \"THREAD_Autologin\" callbackot. Ez már logikus, hogy az alap szálon (main thread)-on fut. // // Fenti lekérdezéssel is szintén ez a helyzet, viszont ott nem vagyunk kiváncsi a kapott értékekre. // Az a lefutása során az \"OnQueryFinish\" callbackot hívja meg, viszont itt nem történik semmi. // Ugyanaz a helyzet az összes lekérdezéssel, ha kiváncsi lennék az értékére, akkor ugyanúgy a callback alá raknám a dolgokat, mint itt. format(g_szQuery, sizeof(g_szQuery), \"SELECT * FROM `players` WHERE `name` = \'%s\' AND `ip` = \'%s\'\", pName(playerid), g_szIP); mysql_function_query(1, g_szQuery, true, \"THREAD_Autologin\", \"dd\", playerid, g_pQueryQueue[playerid]); } return 1; } forward THREAD_Autologin(playerid, queue); public THREAD_Autologin(playerid, queue) { if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Autologin); new rows, fields; cache_get_data(rows, fields); if(rows) // Ha a sor nem üres { LoginPlayer(playerid); SendClientMessage(playerid, COLOR_GREEN, \"Automatikusan bejelentkeztél!\"); } return 1; } public OnPlayerRequestClass(playerid, classid) { if(IsPlayerNPC(playerid)) return 1; //printf(\"%d\", g_PlayerFlags{playerid} & e_LOGGED_IN); if(!(g_PlayerFlags{playerid} & e_LOGGED_IN)) // Felmutatjuk neki a megfelelõ dialógot { if(GetPVarInt(playerid, \"LineID\")) { LoginDialog(playerid); } else { RegisterDialog(playerid); } } return 1; } public OnPlayerRequestSpawn(playerid) { if(IsPlayerNPC(playerid)) return 1; if(!(g_PlayerFlags{playerid} & e_LOGGED_IN)) // Felmutatjuk neki a megfelelõ dialógot { if(GetPVarInt(playerid, \"LineID\")) { LoginDialog(playerid); } else { RegisterDialog(playerid); } } return 1; } public OnPlayerSpawn(playerid) { // Ha elõször spawnol, akkor odaadjuk neki a pénzt. Mivel skinválasztásnál nem lehet pénzt adni a játékosnak! if(!(g_PlayerFlags{playerid} & e_FIRST_SPAWN)) { ResetPlayerMoney(playerid); GivePlayerMoney(playerid, GetPVarInt(playerid, \"Cash\")); DeletePVar(playerid, \"Cash\"); g_PlayerFlags{playerid} |= e_FIRST_SPAWN; } // Ütésstílus beállítása SetPlayerFightingStyle(playerid, GetPVarInt(playerid, \"Style\")); return 1; } // Y_Less NameCheck(const aname[]) { new i, ch; while ((ch = aname[i++]) && ((ch == \']\') || (ch == \'[\') || (ch == \'(\') || (ch == \')\') || (ch == \'_\') || (ch == \'$\') || (ch == \'@\') || (ch == \'.\') || (ch == \'=\') || (\'0\' <= ch <= \'9\') || ((ch |= 0x20) && (\'a\' <= ch <= \'z\')))) {} return !ch; } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { switch(dialogid) { case DIALOG_LOGIN: { if(!response) return LoginDialog(playerid); if(g_PlayerFlags{playerid} & e_LOGGED_IN) { SendClientMessage(playerid, COLOR_RED, \"Már be vagy jelentkezve.\"); return 1; } if(isnull(inputtext)) { SendClientMessage(playerid, COLOR_RED, \"Nem írtál be semilyen jelszót!\"); LoginDialog(playerid); return 1; } if(!(3 <= strlen(inputtext) <= 20)) { SendClientMessage(playerid, COLOR_RED, \"Rossz jelszó hosszúság! 3 - 20\"); LoginDialog(playerid); return 1; } new szEscape[32]; mysql_real_escape_string(inputtext, szEscape); // Kiszûri az adatot, SQL injection elkerülése végett. Bõvebben itt olvashatsz róla: http://sampforum.hu/index.php?topic=9285.0 format(g_szQuery, sizeof(g_szQuery), \"SELECT * FROM `players` WHERE `name` = \'%s\' AND `pass` COLLATE `utf8_bin` LIKE \'%s\'\", pName(playerid), szEscape); mysql_function_query(1, g_szQuery, true, \"THREAD_DialogLogin\", \"dd\", playerid, g_pQueryQueue[playerid]); } case DIALOG_REGISTER: { if(!response) return RegisterDialog(playerid); if(isnull(inputtext)) { SendClientMessage(playerid, COLOR_RED, \"Nem írtál be semilyen jelszót!\"); RegisterDialog(playerid); return 1; } if(!(3 <= strlen(inputtext) <= 20)) { SendClientMessage(playerid, COLOR_RED, \"Rossz jelszó hosszúság! 3 - 20\"); RegisterDialog(playerid); return 1; } format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_id` FROM `players` WHERE `name` = \'%s\'\", pName(playerid)); mysql_function_query(1, g_szQuery, true, \"THREAD_Register_1\", \"dsd\", playerid, inputtext, g_pQueryQueue[playerid]); } case DIALOG_CHANGENAME: { if(!response) return 0; if(!(3 <= strlen(inputtext) <= 20)) { SendClientMessage(playerid, COLOR_RED, \"Nem megfelelõ hosszú a neved! 3 és 20 karakter között legyen!\"); ChangeNameDialog(playerid); return 1; } if(!NameCheck(inputtext)) { SendClientMessage(playerid, COLOR_RED, \"Nem megfelelõ név! Csak ezek a karakterek lehetnek benne: {\" #XCOLOR_GREEN \"}A-Z, 0-9, [], (), $, @. {\" #XCOLOR_RED \"}Ezenkívül helyet nem tartamlazhat!\"); ChangeNameDialog(playerid); return 1; } if(!strcmp(inputtext, pName(playerid), true)) { SendClientMessage(playerid, COLOR_RED, \"Jelenleg is ez a neved! Írj be egy másikat!\"); ChangeNameDialog(playerid); return 1; } mysql_real_escape_string(inputtext, i_str); format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_id` FROM `players` WHERE `name` = \'%s\'\", i_str); mysql_function_query(1, g_szQuery, true, \"THREAD_Changename\", \"dsd\", playerid, inputtext, g_pQueryQueue[playerid]); } case DIALOG_CHANGEPASS: { if(!response) return 0; if(!(3 <= strlen(inputtext) <= 20)) { SendClientMessage(playerid, COLOR_RED, \"Nem megfelelõ hosszú a jelszavad! 3 és 20 karakter között legyen!\"); ShowPlayerDialog(playerid, DIALOG_CHANGEPASS, DIALOG_STYLE_INPUT, \"Jelszóváltás\", \"Lentre írd be az új jelszavad! \\n\\n\", \"Változtatás\", \"Mégse\"); return 1; } format(g_szQuery, sizeof(g_szQuery), \"SELECT `pass` FROM `players` WHERE `reg_id` = %d\", GetPVarInt(playerid, \"RegID\")); mysql_function_query(1, g_szQuery, true, \"THREAD_Changepass\", \"dsd\", playerid, inputtext, g_pQueryQueue[playerid]); } case DIALOG_FINDPLAYER: { if(!response) return 0; format(g_szQuery, sizeof(g_szQuery), \"SELECT * FROM `players` WHERE `name` = \'%s\'\", inputtext); mysql_function_query(1, g_szQuery, true, \"THREAD_Findplayer\", \"dsd\", playerid, inputtext, g_pQueryQueue[playerid]); } } return 1; } forward THREAD_DialogLogin(playerid, queue); public THREAD_DialogLogin(playerid, queue) { if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_DialogLogin); new rows, fields; cache_get_data(rows, fields); if(rows != 1) { SendClientMessage(playerid, COLOR_RED, \"HIBA: Rossz jelszó.\"); LoginDialog(playerid); return 1; } LoginPlayer(playerid); GetPlayerIp(playerid, g_szIP, sizeof(g_szIP)); format(g_szQuery, sizeof(g_szQuery), \"UPDATE `players` SET `ip` = \'%s\' WHERE `reg_id` = %d\", g_szIP, GetPVarInt(playerid, \"RegID\")); mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\"); SendClientMessage(playerid, COLOR_GREEN, !\"Sikersen bejelentkeztél!\"); return 1; } forward THREAD_Register_1(playerid, password[], queue); public THREAD_Register_1(playerid, password[], queue) { if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Register_1); new rows, fields; cache_get_data(rows, fields); if(rows) { SendClientMessage(playerid, COLOR_RED, \"MySQL sorok száma nem 0, valami hiba történt a kiválasztás közben!\"); SendClientMessage(playerid, COLOR_RED, \"Ezt a hibát jelezd a tulajdonosnak! Kickelve lettél, mert ebbõl hiba keletkezhet!\"); printf(\"MySQL rosw > 1 (%d, %s)\", playerid, password); Kick(playerid); return 1; } new szEscape[21]; getdate(year, month, day); gettime(hour, minute, second); GetPlayerIp(playerid, g_szIP, sizeof(g_szIP)); mysql_real_escape_string(password, szEscape); format(g_szQuery, sizeof(g_szQuery), \"INSERT INTO `players`(reg_id, name, ip, pass, reg_date, laston) VALUES(0, \'%s\', \'%s\', \'%s\', \'%02d.%02d.%02d/%02d.%02d.%02d\', \'%02d.%02d.%02d/%02d.%02d.%02d\')\", pName(playerid), g_szIP, szEscape, year, month, day, hour, minute, second, year, month, day, hour, minute, second); mysql_function_query(1, g_szQuery, false, \"THREAD_Register_2\", \"dsd\", playerid, password, g_pQueryQueue[playerid]); return 1; } forward THREAD_Register_2(playerid, password[], queue); public THREAD_Register_2(playerid, password[], queue) { if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Register_2); new iRegID = mysql_insert_id(); SetPVarInt(playerid, \"RegID\", iRegID); // Játékos Regisztrációs ID-jét beállítuk arra, amelyik sorba írtunk elõbb ( INSERT INTO ) SetPVarInt(playerid, \"Style\", 4); g_PlayerFlags{playerid} |= e_LOGGED_IN; format(i_str, sizeof(i_str), \"Sikeresen regisztráltál! A jelszavad: {\" #XCOLOR_RED \"}%s. {\" #XCOLOR_GREEN \"}Felhasználó ID: {\" #XCOLOR_BLUE \"}%d\", password, iRegID); SendClientMessage(playerid, COLOR_GREEN, i_str); SendClientMessage(playerid, COLOR_PINK, \"Ennyi lenne a MySQL regisztáció {\" #XCOLOR_BLUE \"}:)\"); return 1; } forward THREAD_Changename(playerid, inputtext[], queue); public THREAD_Changename(playerid, inputtext[], queue) { if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Changename); new rows, fields; cache_get_data(rows, fields); if(rows) { SendClientMessage(playerid, COLOR_RED, \"HIBA: Ez a név már használatban van!\"); SendClientMessage(playerid, COLOR_GREEN, \"Írj be egy más nevet, vagy menj a \'Mégse\' gombra!\"); ChangeNameDialog(playerid); return 1; } new szOldName[MAX_PLAYER_NAME + 1], pRegID = GetPVarInt(playerid, \"RegID\"); GetPlayerName(playerid, szOldName, sizeof(szOldName)); if(SetPlayerName(playerid, inputtext) != 1) { SendClientMessage(playerid, COLOR_RED, \"Nem megfelelõ név! Írj be egy másikat!\"); ChangeNameDialog(playerid); return 1; } getdate(year, month, day); gettime(hour, minute, second); format(g_szQuery, sizeof(g_szQuery), \"INSERT INTO `namechanges`(id, reg_id, oldname, newname, time) VALUES(0, %d, \'%s\', \'%s\', \'%02d.%02d.%02d/%02d.%02d.%02d\')\", pRegID, szOldName, inputtext, year, month, day, hour, minute, second); mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\"); format(g_szQuery, sizeof(g_szQuery), \"UPDATE `players` SET `name` = \'%s\' WHERE `reg_id` = %d\", inputtext, pRegID); mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\"); format(i_str, sizeof(i_str), \"Sikeresen átváltottad a neved! Új neved: {\" #XCOLOR_WHITE \"}%s.\", inputtext); SendClientMessage(playerid, COLOR_YELLOW, i_str); return 1; } forward THREAD_Changepass(playerid, password[], queue); public THREAD_Changepass(playerid, password[], queue) { if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Changepass); new szOldPass[21], szEscaped[21], pRegID = GetPVarInt(playerid, \"RegID\"); cache_get_row(0, 0, szOldPass); mysql_real_escape_string(password, szEscaped); format(g_szQuery, sizeof(g_szQuery), \"UPDATE `players` SET `pass` = \'%s\' WHERE `reg_id` = %d\", szEscaped, pRegID); mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\"); getdate(year, month, day); gettime(hour, minute, second); format(g_szQuery, sizeof(g_szQuery), \"INSERT INTO `namechanges_p`(id, reg_id, name, oldpass, newpass, time) VALUES(0, %d, \'%s\', \'%s\', \'%s\', \'%02d.%02d.%02d/%02d.%02d.%02d\')\", pRegID, pName(playerid), szOldPass, szEscaped, year, month, day, hour, minute, second); mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\"); format(i_str, sizeof(i_str), \"Sikeresen átállítotad a jelszavad! Új jelszavad: {\" #XCOLOR_GREEN \"}%s\", password); SendClientMessage(playerid, COLOR_YELLOW, i_str); return 1; } forward THREAD_Findplayer(playerid, inputtext[], queue); public THREAD_Findplayer(playerid, inputtext[], queue) { if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Findplayer); new szFetch[12], szRegDate[24], szLaston[24], iData[6]; cache_get_row(0, 0, szFetch); iData[0] = strval(szFetch); // regid cache_get_row(0, 4, szRegDate); cache_get_row(0, 5, szLaston); cache_get_row(0, 6, szFetch); iData[1] = strval(szFetch); // money cache_get_row(0, 7, szFetch); iData[2] = strval(szFetch); // score cache_get_row(0, 8, szFetch); iData[3] = strval(szFetch); // kills cache_get_row(0, 9, szFetch); iData[4] = strval(szFetch); // deaths cache_get_row(0, 10, szFetch); iData[5] = strval(szFetch); // style switch(iData[5]) { case FIGHT_STYLE_NORMAL: szFetch = \"Normál\"; case FIGHT_STYLE_BOXING: szFetch = \"Boxoló\"; case FIGHT_STYLE_KUNGFU: szFetch = \"Kungfu\"; case FIGHT_STYLE_KNEEHEAD: szFetch = \"Kneehead\"; case FIGHT_STYLE_GRABKICK: szFetch = \"Grabkick\"; case FIGHT_STYLE_ELBOW: szFetch = \"Elbow\"; } // Üzenet elküldése format(i_str, sizeof(i_str), \"Név: %s, ID: %d, RegID: %d, Pénz: %d, Pont: %d\", inputtext, playerid, iData[0], iData[1], iData[2]); SendClientMessage(playerid, COLOR_RED, i_str); format(i_str, sizeof(i_str), \"Ölések: %d, Halálok: %d, Arány: %.2f, Ütés Stílus: %s\", iData[3], iData[4], (iData[3] && iData[4]) ? (floatdiv(iData[3], iData[4])) : (0.0), szFetch); SendClientMessage(playerid, COLOR_YELLOW, i_str); format(i_str, sizeof(i_str), \"Regisztáció ideje: {\" #XCOLOR_BLUE \"}%s{\" #XCOLOR_GREEN \"}, Utuljára a szerveren: {\" #XCOLOR_BLUE \"}%s\", szRegDate, szLaston); SendClientMessage(playerid, COLOR_GREEN, i_str); return 1; } public OnPlayerDeath(playerid, killerid, reason) { if(IsPlayerConnected(killerid) && killerid != INVALID_PLAYER_ID) { SetPVarInt(killerid, \"Kills\", GetPVarInt(killerid, \"Kills\") + 1); } SetPVarInt(playerid, \"Deaths\", GetPVarInt(playerid, \"Deaths\") + 1); return 1; } // Statisztika felmutató CMD:stats(playerid, params[]) { format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_date`, `laston` FROM `players` WHERE `reg_id` = %d\", GetPVarInt(playerid, \"RegID\")); // Kiválasztjuk a reg_date és a laston mezõt mysql_function_query(1, g_szQuery, true, \"THREAD_Stats\", \"dd\", playerid, g_pQueryQueue[playerid]); return 1; } forward THREAD_Stats(playerid, queue); public THREAD_Stats(playerid, queue) { if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Stats); new RegDate[24], Laston[24], szStyle[24], Kills = GetPVarInt(playerid, \"Kills\"), Deaths = GetPVarInt(playerid, \"Deaths\"); cache_get_row(0, 0, RegDate); cache_get_row(0, 1, Laston); switch(GetPlayerFightingStyle(playerid)) { case FIGHT_STYLE_NORMAL: szStyle = \"Normál\"; case FIGHT_STYLE_BOXING: szStyle = \"Boxoló\"; case FIGHT_STYLE_KUNGFU: szStyle = \"Kungfu\"; case FIGHT_STYLE_KNEEHEAD: szStyle = \"Kneehead\"; case FIGHT_STYLE_GRABKICK: szStyle = \"Grabkick\"; case FIGHT_STYLE_ELBOW: szStyle = \"Elbow\"; } // Üzenet elküldése format(i_str, sizeof(i_str), \"Név: %s, ID: %d, RegID: %d, Pénz: %d, Pont: %d\", pName(playerid), playerid, GetPVarInt(playerid, \"RegID\"), GetPlayerMoney(playerid), GetPlayerScore(playerid)); SendClientMessage(playerid, COLOR_RED, i_str); format(i_str, sizeof(i_str), \"Ölések: %d, Halálok: %d, Arány: %.2f, Ütés Stílus: %s\", Kills, Deaths, (Kills && Deaths) ? (floatdiv(Kills, Deaths)) : (0.0), szStyle); SendClientMessage(playerid, COLOR_YELLOW, i_str); format(i_str, sizeof(i_str), \"Regisztáció ideje: {\" #XCOLOR_BLUE \"}%s{\" #XCOLOR_GREEN \"}, Utuljára a szerveren: {\" #XCOLOR_BLUE \"}%s\", RegDate, Laston); SendClientMessage(playerid, COLOR_GREEN, i_str); return 1; } /* CMD:kill(playerid, params[]) { SetPlayerHealth(playerid, 0.0); return 1; } CMD:flag(playerid, params[]) { format(i_str, 128, \"Logged: %d, FirstSpawn: %d\", g_PlayerFlags{playerid} & e_LOGGED_IN, g_PlayerFlags{playerid} & e_FIRST_SPAWN); SendClientMessage(playerid, -1, i_str); return 1; } */ CMD:changename(playerid, params[]) { ChangeNameDialog(playerid); return 1; } CMD:changepass(playerid, params[]) { ShowPlayerDialog(playerid, DIALOG_CHANGEPASS, DIALOG_STYLE_PASSWORD, \"Jelszóváltás\", \"Lentre írd be az új jelszavad! \\n\\n\", \"Változtatás\", \"Mégse\"); return 1; } CMD:findplayer(playerid, params[]) { if(isnull(params)) return SendClientMessage(playerid, COLOR_RED, \"HASZNÁLAT: /findplayer <Játékos Névrészlet>\"); if(strlen(params) > MAX_PLAYER_NAME) return SendClientMessage(playerid, COLOR_RED, \"HIBA: Túl hosszú a részlet, maximum 24 karakter lehet!\"); format(g_szQuery, sizeof(g_szQuery), \"SELECT `name` FROM `players` WHERE `name` LIKE \'%s%s%s\'\", \"%%\", params, \"%%\"); mysql_function_query(1, g_szQuery, true, \"THREAD_FindplayerDialog\", \"dsd\", playerid, params, g_pQueryQueue[playerid]); return 1; } forward THREAD_FindplayerDialog(playerid, reszlet[], queue); public THREAD_FindplayerDialog(playerid, reszlet[], queue) { if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_FindplayerDialog); new rows, fields; cache_get_data(rows, fields); if(!rows) { format(i_str, sizeof(i_str), \"Nincs találat a \'%s\' részletre!\", reszlet); SendClientMessage(playerid, COLOR_RED, i_str); return 1; } else if(rows > 180) { format(i_str, sizeof(i_str), \"A \'%s\' részletre több, mint 180 találad van! < %d >!\", reszlet, rows); SendClientMessage(playerid, COLOR_RED, i_str); return 1; } new x, szName[MAX_PLAYER_NAME]; g_szDialogFormat[0] = EOS; for( ; x != rows; x++) { cache_get_row(x, 0, szName); strcat(g_szDialogFormat, szName); strcat(g_szDialogFormat, \"\\n\"); } format(i_str, 128, \"Találatok a(z) \'%s\' részletre.. (%d)\", reszlet, x); ShowPlayerDialog(playerid, DIALOG_FINDPLAYER, DIALOG_STYLE_LIST, i_str, g_szDialogFormat, \"Megtekint\", \"Mégse\"); return 1; } ///////////////////////////////////////// stock LoginDialog(playerid) { format(i_str, sizeof(i_str), \"{\" #XCOLOR_WHITE \"}Bejelentkezés: {%06x}%s(%d)\", GetPlayerColor(playerid) >>> 8, pName(playerid), playerid); ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, i_str, !\"{\" #XCOLOR_GREEN \"}Üdvözöllek a \\n\\n{\" #XCOLOR_BLUE \"}My{\" #XCOLOR_YELLOW \"}SQL {\" #XCOLOR_GREEN \"}teszt szerveren! \\n\\nTe már regisztálva vagy. Lentre írd be a jelszavad\", !\"Bejelentkezés\", !\"Mégse\"); return 1; } stock RegisterDialog(playerid) { format(i_str, sizeof(i_str), \"{\" #XCOLOR_WHITE \"}Regisztráció: {%06x}%s(%d)\", GetPlayerColor(playerid) >>> 8, pName(playerid), playerid); #if defined NINCS_REG_CSILLAG ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, i_str, !\"{\" #XCOLOR_GREEN \"}Üdvözöllek a \\n\\n{\" #XCOLOR_BLUE \"}My{\" #XCOLOR_YELLOW \"}SQL {\" #XCOLOR_GREEN \"}teszt szerveren! \\n\\nItt még nem regisztráltál. Lentre írd be a jelszavad\", !\"Regisztáció\", !\"Mégse\"); #else ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, i_str, !\"{\" #XCOLOR_GREEN \"}Üdvözöllek a \\n\\n{\" #XCOLOR_BLUE \"}My{\" #XCOLOR_YELLOW \"}SQL {\" #XCOLOR_GREEN \"}teszt szerveren! \\n\\nItt még nem regisztráltál. Lentre írd be a jelszavad\", !\"Regisztáció\", !\"Mégse\"); #endif return 1; } /* Bejelentkezés */ stock LoginPlayer(playerid) { new iPVarSet[6], szFetch[12], iRegID = GetPVarInt(playerid, \"LineID\"); // Ha a line ID 0, tehát a MySQL nem adott vissza sorokat, akkor semmiképp sem jelentkezhez be! // Ennek nem szabadna elõfordulnia, de biztonság kedvéért teszek rá védelmet. if(!iRegID) return printf(\"HIBA: Rossz reg ID! Játékos: %s(%d) (regid: %d)\", pName(playerid), playerid, iRegID); SetPVarInt(playerid, \"RegID\", iRegID); // RegID-t beállítjuk cache_get_row(0, 0, szFetch); iPVarSet[0] = strval(szFetch); // RegID cache_get_row(0, 6, szFetch); iPVarSet[1] = strval(szFetch); // Money cache_get_row(0, 7, szFetch); iPVarSet[2] = strval(szFetch); // Score cache_get_row(0, 8, szFetch); iPVarSet[3] = strval(szFetch); // Kills cache_get_row(0, 9, szFetch); iPVarSet[4] = strval(szFetch); // Deaths cache_get_row(0, 10, szFetch); iPVarSet[5] = strval(szFetch); // Fightingstyle SetPVarInt(playerid, \"Cash\", iPVarSet[1]); // A pénzét egy PVar-ban tároljuk, mert a skinválasztásnál nemlehet a játékos pénzét állítani. SetPlayerScore(playerid, iPVarSet[2]); SetPVarInt(playerid, \"Kills\", iPVarSet[3]); SetPVarInt(playerid, \"Deaths\", iPVarSet[4]); SetPVarInt(playerid, \"Style\", iPVarSet[5]); g_PlayerFlags{playerid} |= e_LOGGED_IN; return 1; } stock SavePlayer(playerid, regid) { if(IsPlayerNPC(playerid)) return 1; // Ha nincs bejelentkezve és még nem spawnolt le, akkor nem mentjük. Ezt ajánlatos itthagyni, mivel ezmiatt nekem sok bug keletkezett! if(g_PlayerFlags{playerid} & (e_LOGGED_IN | e_FIRST_SPAWN) == (e_LOGGED_IN | e_FIRST_SPAWN)) { getdate(year, month, day); gettime(hour, minute, second); format(g_szQuery, sizeof(g_szQuery), \"UPDATE `players` SET `laston` = \'%02d.%02d.%02d/%02d.%02d.%02d\', `money` = %d, `score` = %d, `kills` = %d, `deaths` = %d, `fightingstyle` = \'%d\' WHERE `reg_id` = %d\", year, month, day, hour, minute, second, GetPlayerMoney(playerid), GetPlayerScore(playerid), GetPVarInt(playerid, \"Kills\"), GetPVarInt(playerid, \"Deaths\"), GetPlayerFightingStyle(playerid), regid); mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\"); // %02d azt jelenti, hogyha a szám egyjegyû (1, 5, 7, stb... ), akkor tegyen elé egy 0-t. Pl: 05, 07. // Ezt általában idõre használják, mivel így \'érthetõbb\'. // Ez ugyanúgy mûködik %03d-vel %04d-vel, és így továb... ^ } return 1; } stock pName(playerid) { static // \"Helyi\" globális változó s_szName[MAX_PLAYER_NAME]; GetPlayerName(playerid, s_szName, sizeof(s_szName)); return s_szName; } forward OnQueryFinish(); public OnQueryFinish() { return 1; } /* SQL Tábla */ /* CREATE TABLE IF NOT EXISTS `connections` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(21) NOT NULL, `ip` varchar(16) NOT NULL, `serial` varchar(128) NOT NULL, `time` varchar(24) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `namechanges` ( `id` smallint(5) NOT NULL AUTO_INCREMENT, `reg_id` mediumint( NOT NULL, `oldname` varchar(21) NOT NULL, `newname` varchar(21) NOT NULL, `time` varchar(24) NOT NULL, PRIMARY KEY (`id`), KEY `reg_id` (`reg_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `namechanges_p` ( `id` smallint(5) NOT NULL AUTO_INCREMENT, `reg_id` mediumint( NOT NULL, `name` varchar(24) NOT NULL, `oldpass` varchar(21) NOT NULL, `newpass` varchar(21) NOT NULL, `time` varchar(24) NOT NULL, PRIMARY KEY (`id`), KEY `reg_id` (`reg_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `players` ( `reg_id` mediumint( unsigned NOT NULL AUTO_INCREMENT, `name` varchar(24) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `ip` varchar(20) NOT NULL, `pass` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `reg_date` varchar(24) NOT NULL, `laston` varchar(24) NOT NULL, `money` int(11) NOT NULL DEFAULT \'0\', `score` int(11) NOT NULL DEFAULT \'0\', `kills` mediumint(11) unsigned NOT NULL DEFAULT \'0\', `deaths` mediumint(11) unsigned NOT NULL DEFAULT \'0\', `fightingstyle` enum(\'4\',\'5\',\'6\',\'7\',\'15\',\'16\') NOT NULL DEFAULT \'4\', PRIMARY KEY (`reg_id`), KEY `name` (`name`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC; CREATE TABLE IF NOT EXISTS `queryerrors` ( `id` mediumint(7) NOT NULL AUTO_INCREMENT, `errorid` int(11) NOT NULL, `error` text NOT NULL, `resultid` mediumint(7) NOT NULL, `extraid` mediumint(7) NOT NULL, `callback` varchar(512) NOT NULL, `sql_query` varchar(512) NOT NULL, `connectionHandle` mediumint(7) NOT NULL, `time` varchar(24) NOT NULL, PRIMARY KEY (`id`), KEY `errorid` (`errorid`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; */
4777
« Dátum: 2013. március 22. - 19:28:54 »
Egyébként megkaptam ha kell valakinek akkor : // MySQL Regisztráció rendszer by kurta999 // Verzió: 2.0 // Last Update: 2012.10.29 #include <a_samp> #tryinclude a_mysql_r7 #if !defined _a_mysql_r7_included #include <a_mysql> #endif #if defined mysql_fetch_int #error \"Frissítsd a MySQL (a_mysql.inc) függvénykönyvtárad az R7-re!\" #endif #include <zcmd> // http://forum.sa-mp.com/showthread.php?t=91354 #define NINCS_REG_CSILLAG // Rakd a kommenttárba, ha a jelszót a játékosnak a regisztráció dialógusban csillagozni akarod. // Szerintem ezt ajánlott így hagyni, mivel a regisztrációban könnyen félrhetírhatsz és nemjössz rá a hibára, mivel nem látod, hogy mit írtál.. // A hibára pedig csak akkor jössz rá, miután beregisztráltál. #define ChangeNameDialog(%1) \\ ShowPlayerDialog(%1, DIALOG_CHANGENAME, DIALOG_STYLE_INPUT, !\"{\" #XCOLOR_RED \"}Névváltás\", !\"{\" #XCOLOR_GREEN \"}Lentre írd be az új neved! \\nHa régóta játszol már, akkor a névváltás több másodpercig is eltarthat!\\n\\n{\" #XCOLOR_RED \"}Ahogy megváltoztattad, rögtön változtasd meg a neved a SAMP-ba!\", !\"Változtatás\", !\"Mégse\") // gpci beágyazása native gpci(playerid, const serial[], maxlen); new year, month, day, hour, minute, second; new // Direkt adok hozzá + 1 karaktert, mivel valahol a \\0 kraktert is tárolni kell. (Ez 4 karakter, de kell az 5. is, mivel ott tárolja a \\0-t! [\'a\', \'n\', \'y\', \'á\', \'d\', \'\\0\']) g_szQuery[512 +1], g_szDialogFormat[4096], i_str[128 +1], g_szIP[16 +1]; // Bit flagok enum e_PLAYER_FLAGS (<<= 1) { e_LOGGED_IN = 1, e_FIRST_SPAWN } new e_PLAYER_FLAGS:g_PlayerFlags[MAX_PLAYERS char]; new g_pQueryQueue[MAX_PLAYERS]; // MySQL beállítások, alapból ezek azok a wamp-nál, csak a tábla nevét módosítsd arra, amilyen néven létrehoztad, nekem itt a \'samp\' #define MYSQL_HOST \"localhost\" #define MYSQL_USER \"root\" #define MYSQL_PASS \"\" #define MYSQL_DB \"samp\" // Üzenet, amit akkor ír ki, ha a lekérdezés befejezése elõtt lelép a játékos #define QUERY_COLLISION(%0) \\ printf(\"Query collision \\\" #%0 \\\"! PlayerID: %d, queue: %d, g_pQueryQueue: %d\", playerid, queue, g_pQueryQueue[playerid]) // RRGGBBAA #define COLOR_GREEN 0x33FF33AA #define COLOR_RED 0xFF0000AA #define COLOR_YELLOW 0xFF9900AA #define COLOR_PINK 0xFF66FFAA // RRGGBB #define XCOLOR_GREEN 33FF33 #define XCOLOR_RED FF0000 #define XCOLOR_BLUE 33CCFF #define XCOLOR_YELLOW FF9900 #define XCOLOR_WHITE FFFFFF // Dialóg ID enum { DIALOG_LOGIN = 20000, DIALOG_REGISTER, DIALOG_CHANGENAME, DIALOG_CHANGEPASS, DIALOG_FINDPLAYER } // isnull by Y_Less #define isnull(%1) \\ ((!(%1[0])) || (((%1[0]) == \'\\1\') && (!(%1[1])))) public OnFilterScriptInit() { // MySQL print(!\"MySQL: Kapcsolódás erre a címre \" MYSQL_HOST \" \" MYSQL_USER \" nevû felhasználóval. \\nAdatbázis neve: \" MYSQL_DB \".\"); mysql_debug(1); // Hosztos szerveren ajánlott kikapcsolni. (Ha bekapcsovla hagyod sem nagyon lesz semmi, mivel R7-ben nem ír annyi információt ki, mind a régebbiekben) mysql_connect(!MYSQL_HOST, !MYSQL_USER, !MYSQL_DB, !MYSQL_PASS); if(mysql_ping() != 1) { print(!\"MySQL: Kapcsolódás sikertelen! (\" MYSQL_HOST \")\"); print(!\"MySQL: A mód kikapcsol! (\" MYSQL_HOST \")\"); SendRconCommand(!\"exit\"); return 1; } print(!\"MySQL: Kapcsolódás elfogadva!\" MYSQL_HOST \"\"); print(!\"MySQL: Adatbázis \" MYSQL_DB \" kiválasztva!\"); return 1; } public OnFilterScriptExit() { mysql_close(); // Kapcsolat bezárása return 1; } public OnPlayerConnect(playerid) { SetPlayerColor(playerid, (random(0xFFFFFF) << | 0xFF); // GetPlayerColor() javítása g_pQueryQueue[playerid]++; format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_id` FROM `players` WHERE `name` = \'%s\'\", pName(playerid)); mysql_function_query(1, g_szQuery, true, \"THREAD_OnPlayerConnect\", \"dd\", playerid, g_pQueryQueue[playerid]); return 1; } public OnPlayerDisconnect(playerid, reason) { g_pQueryQueue[playerid]++; return SavePlayer(playerid, GetPVarInt(playerid, \"RegID\")); } forward THREAD_OnPlayerConnect(playerid, queue); public THREAD_OnPlayerConnect(playerid, queue) { // Ha a játékos csatlakozik vagy lelép, akkor a \"g_pQueryQueue[playerid]\" értéke mindig növekedik. // Lekérdezésnél átvisszük ennek az értékét a \"queue\" nevû paraméterben, amit majd a lekérdezés lefutásánál ellenõrzünk. // Ha a játékos lelépett, akkor \"g_pQueryQueue[playerid]\" egyel több lett, tehát nem egyenlõ a \"queue\" paraméter értékével. // Ez esetben a lekérdezés nem fog lefutni, hanem egy figyelmezetõ üzenetet fog kiírni a konzolva, hogy \"query collision\". // Nagyon fontos ez, mivel ha van egy lekérdezés, ami lekérdez valami \"titkos\" adatot az adatbázisból, // közben belaggol a a mysql szerver, a lekérdezés eltart 5 másodpercig, feljön egy másik játékos és annak fogja kiírni az adatokat, // mivel a lekérdezés lefutása közben lelépett a játékos és egy másik jött a helyére. Erre van ez a védelem, így ettõl egyáltalán nem kell tartani. // Sima lekérdezéseknél (ház betöltés, egyéb betöltés, frissítés, stb.. sz*rságok) ilyen helyen nem szükséges ez a védelem. if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_OnPlayerConnect); new szFetch[12]; cache_get_row(0, 0, szFetch); SetPVarInt(playerid, \"LineID\", strval(szFetch)); // Ez itt egy \"átmeneti változó\", ami tárolja, hogy mi a reg id-je a játékosnak. // Ha nulla, akkor nincs regisztrálva (mivel az SQL 0-t ad vissza, ha nemlétezõ a sor), ellentétben pedig igen. g_PlayerFlags{playerid} = e_PLAYER_FLAGS:0; // Nullázuk az értékét, nem elég a nulla, kell elé a változó tagja is, különben figyelmeztet a fordító. if(!IsPlayerNPC(playerid)) // Csak játékosokra vonatkozik { SetPVarInt(playerid, \"RegID\", -1); GetPlayerIp(playerid, g_szIP, sizeof(g_szIP)); gpci(playerid, i_str, sizeof(i_str)); getdate(year, month, day); gettime(hour, minute, second); format(g_szQuery, sizeof(g_szQuery), \"INSERT INTO `connections`(id, name, ip, serial, time) VALUES(0, \'%s\', \'%s\', \'%s\', \'%02d.%02d.%02d/%02d.%02d.%02d\')\", pName(playerid), g_szIP, i_str, year, month, day, hour, minute, second); mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\"); // Autologin // Leftuttatunk egy lekérdezést, ami ha befejezõdött, akkor meghívódik a \"THREAD_Autologin\" callback. // A régebbi pluginnal ez egy funkcióban ment, szóval ha a mysql szerver belaggolt és a lekérdezés eltartott 5 másodpercig, // akkor 5 másodpercig megfagyott a szerver. // Itt nem fog megfagyni semeddig a szerver, mivel létrehoz neki egy új szálat, és az a szál fagy meg míg nem fut le a lekérdezés. // Lefutás után pedig meghívja a \"THREAD_Autologin\" callbackot. Ez már logikus, hogy az alap szálon (main thread)-on fut. // // Fenti lekérdezéssel is szintén ez a helyzet, viszont ott nem vagyunk kiváncsi a kapott értékekre. // Az a lefutása során az \"OnQueryFinish\" callbackot hívja meg, viszont itt nem történik semmi. // Ugyanaz a helyzet az összes lekérdezéssel, ha kiváncsi lennék az értékére, akkor ugyanúgy a callback alá raknám a dolgokat, mint itt. format(g_szQuery, sizeof(g_szQuery), \"SELECT * FROM `players` WHERE `name` = \'%s\' AND `ip` = \'%s\'\", pName(playerid), g_szIP); mysql_function_query(1, g_szQuery, true, \"THREAD_Autologin\", \"dd\", playerid, g_pQueryQueue[playerid]); } return 1; } forward THREAD_Autologin(playerid, queue); public THREAD_Autologin(playerid, queue) { if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Autologin); new rows, fields; cache_get_data(rows, fields); if(rows) // Ha a sor nem üres { LoginPlayer(playerid); SendClientMessage(playerid, COLOR_GREEN, \"Automatikusan bejelentkeztél!\"); } return 1; } public OnPlayerRequestClass(playerid, classid) { if(IsPlayerNPC(playerid)) return 1; //printf(\"%d\", g_PlayerFlags{playerid} & e_LOGGED_IN); if(!(g_PlayerFlags{playerid} & e_LOGGED_IN)) // Felmutatjuk neki a megfelelõ dialógot { if(GetPVarInt(playerid, \"LineID\")) { LoginDialog(playerid); } else { RegisterDialog(playerid); } } return 1; } public OnPlayerRequestSpawn(playerid) { if(IsPlayerNPC(playerid)) return 1; if(!(g_PlayerFlags{playerid} & e_LOGGED_IN)) // Felmutatjuk neki a megfelelõ dialógot { if(GetPVarInt(playerid, \"LineID\")) { LoginDialog(playerid); } else { RegisterDialog(playerid); } } return 1; } public OnPlayerSpawn(playerid) { // Ha elõször spawnol, akkor odaadjuk neki a pénzt. Mivel skinválasztásnál nem lehet pénzt adni a játékosnak! if(!(g_PlayerFlags{playerid} & e_FIRST_SPAWN)) { ResetPlayerMoney(playerid); GivePlayerMoney(playerid, GetPVarInt(playerid, \"Cash\")); DeletePVar(playerid, \"Cash\"); g_PlayerFlags{playerid} |= e_FIRST_SPAWN; } // Ütésstílus beállítása SetPlayerFightingStyle(playerid, GetPVarInt(playerid, \"Style\")); return 1; } // Y_Less NameCheck(const aname[]) { new i, ch; while ((ch = aname[i++]) && ((ch == \']\') || (ch == \'[\') || (ch == \'(\') || (ch == \')\') || (ch == \'_\') || (ch == \'$\') || (ch == \'@\') || (ch == \'.\') || (ch == \'=\') || (\'0\' <= ch <= \'9\') || ((ch |= 0x20) && (\'a\' <= ch <= \'z\')))) {} return !ch; } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { switch(dialogid) { case DIALOG_LOGIN: { if(!response) return LoginDialog(playerid); if(g_PlayerFlags{playerid} & e_LOGGED_IN) { SendClientMessage(playerid, COLOR_RED, \"Már be vagy jelentkezve.\"); return 1; } if(isnull(inputtext)) { SendClientMessage(playerid, COLOR_RED, \"Nem írtál be semilyen jelszót!\"); LoginDialog(playerid); return 1; } if(!(3 <= strlen(inputtext) <= 20)) { SendClientMessage(playerid, COLOR_RED, \"Rossz jelszó hosszúság! 3 - 20\"); LoginDialog(playerid); return 1; } new szEscape[32]; mysql_real_escape_string(inputtext, szEscape); // Kiszûri az adatot, SQL injection elkerülése végett. Bõvebben itt olvashatsz róla: http://sampforum.hu/index.php?topic=9285.0 format(g_szQuery, sizeof(g_szQuery), \"SELECT * FROM `players` WHERE `name` = \'%s\' AND `pass` COLLATE `utf8_bin` LIKE \'%s\'\", pName(playerid), szEscape); mysql_function_query(1, g_szQuery, true, \"THREAD_DialogLogin\", \"dd\", playerid, g_pQueryQueue[playerid]); } case DIALOG_REGISTER: { if(!response) return RegisterDialog(playerid); if(isnull(inputtext)) { SendClientMessage(playerid, COLOR_RED, \"Nem írtál be semilyen jelszót!\"); RegisterDialog(playerid); return 1; } if(!(3 <= strlen(inputtext) <= 20)) { SendClientMessage(playerid, COLOR_RED, \"Rossz jelszó hosszúság! 3 - 20\"); RegisterDialog(playerid); return 1; } format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_id` FROM `players` WHERE `name` = \'%s\'\", pName(playerid)); mysql_function_query(1, g_szQuery, true, \"THREAD_Register_1\", \"dsd\", playerid, inputtext, g_pQueryQueue[playerid]); } case DIALOG_CHANGENAME: { if(!response) return 0; if(!(3 <= strlen(inputtext) <= 20)) { SendClientMessage(playerid, COLOR_RED, \"Nem megfelelõ hosszú a neved! 3 és 20 karakter között legyen!\"); ChangeNameDialog(playerid); return 1; } if(!NameCheck(inputtext)) { SendClientMessage(playerid, COLOR_RED, \"Nem megfelelõ név! Csak ezek a karakterek lehetnek benne: {\" #XCOLOR_GREEN \"}A-Z, 0-9, [], (), $, @. {\" #XCOLOR_RED \"}Ezenkívül helyet nem tartamlazhat!\"); ChangeNameDialog(playerid); return 1; } if(!strcmp(inputtext, pName(playerid), true)) { SendClientMessage(playerid, COLOR_RED, \"Jelenleg is ez a neved! Írj be egy másikat!\"); ChangeNameDialog(playerid); return 1; } mysql_real_escape_string(inputtext, i_str); format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_id` FROM `players` WHERE `name` = \'%s\'\", i_str); mysql_function_query(1, g_szQuery, true, \"THREAD_Changename\", \"dsd\", playerid, inputtext, g_pQueryQueue[playerid]); } case DIALOG_CHANGEPASS: { if(!response) return 0; if(!(3 <= strlen(inputtext) <= 20)) { SendClientMessage(playerid, COLOR_RED, \"Nem megfelelõ hosszú a jelszavad! 3 és 20 karakter között legyen!\"); ShowPlayerDialog(playerid, DIALOG_CHANGEPASS, DIALOG_STYLE_INPUT, \"Jelszóváltás\", \"Lentre írd be az új jelszavad! \\n\\n\", \"Változtatás\", \"Mégse\"); return 1; } format(g_szQuery, sizeof(g_szQuery), \"SELECT `pass` FROM `players` WHERE `reg_id` = %d\", GetPVarInt(playerid, \"RegID\")); mysql_function_query(1, g_szQuery, true, \"THREAD_Changepass\", \"dsd\", playerid, inputtext, g_pQueryQueue[playerid]); } case DIALOG_FINDPLAYER: { if(!response) return 0; format(g_szQuery, sizeof(g_szQuery), \"SELECT * FROM `players` WHERE `name` = \'%s\'\", inputtext); mysql_function_query(1, g_szQuery, true, \"THREAD_Findplayer\", \"dsd\", playerid, inputtext, g_pQueryQueue[playerid]); } } return 1; } forward THREAD_DialogLogin(playerid, queue); public THREAD_DialogLogin(playerid, queue) { if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_DialogLogin); new rows, fields; cache_get_data(rows, fields); if(rows != 1) { SendClientMessage(playerid, COLOR_RED, \"HIBA: Rossz jelszó.\"); LoginDialog(playerid); return 1; } LoginPlayer(playerid); GetPlayerIp(playerid, g_szIP, sizeof(g_szIP)); format(g_szQuery, sizeof(g_szQuery), \"UPDATE `players` SET `ip` = \'%s\' WHERE `reg_id` = %d\", g_szIP, GetPVarInt(playerid, \"RegID\")); mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\"); SendClientMessage(playerid, COLOR_GREEN, !\"Sikersen bejelentkeztél!\"); return 1; } forward THREAD_Register_1(playerid, password[], queue); public THREAD_Register_1(playerid, password[], queue) { if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Register_1); new rows, fields; cache_get_data(rows, fields); if(rows) { SendClientMessage(playerid, COLOR_RED, \"MySQL sorok száma nem 0, valami hiba történt a kiválasztás közben!\"); SendClientMessage(playerid, COLOR_RED, \"Ezt a hibát jelezd a tulajdonosnak! Kickelve lettél, mert ebbõl hiba keletkezhet!\"); printf(\"MySQL rosw > 1 (%d, %s)\", playerid, password); Kick(playerid); return 1; } new szEscape[21]; getdate(year, month, day); gettime(hour, minute, second); GetPlayerIp(playerid, g_szIP, sizeof(g_szIP)); mysql_real_escape_string(password, szEscape); format(g_szQuery, sizeof(g_szQuery), \"INSERT INTO `players`(reg_id, name, ip, pass, reg_date, laston) VALUES(0, \'%s\', \'%s\', \'%s\', \'%02d.%02d.%02d/%02d.%02d.%02d\', \'%02d.%02d.%02d/%02d.%02d.%02d\')\", pName(playerid), g_szIP, szEscape, year, month, day, hour, minute, second, year, month, day, hour, minute, second); mysql_function_query(1, g_szQuery, false, \"THREAD_Register_2\", \"dsd\", playerid, password, g_pQueryQueue[playerid]); return 1; } forward THREAD_Register_2(playerid, password[], queue); public THREAD_Register_2(playerid, password[], queue) { if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Register_2); new iRegID = mysql_insert_id(); SetPVarInt(playerid, \"RegID\", iRegID); // Játékos Regisztrációs ID-jét beállítuk arra, amelyik sorba írtunk elõbb ( INSERT INTO ) SetPVarInt(playerid, \"Style\", 4); g_PlayerFlags{playerid} |= e_LOGGED_IN; format(i_str, sizeof(i_str), \"Sikeresen regisztráltál! A jelszavad: {\" #XCOLOR_RED \"}%s. {\" #XCOLOR_GREEN \"}Felhasználó ID: {\" #XCOLOR_BLUE \"}%d\", password, iRegID); SendClientMessage(playerid, COLOR_GREEN, i_str); SendClientMessage(playerid, COLOR_PINK, \"Ennyi lenne a MySQL regisztáció {\" #XCOLOR_BLUE \"}:)\"); return 1; } forward THREAD_Changename(playerid, inputtext[], queue); public THREAD_Changename(playerid, inputtext[], queue) { if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Changename); new rows, fields; cache_get_data(rows, fields); if(rows) { SendClientMessage(playerid, COLOR_RED, \"HIBA: Ez a név már használatban van!\"); SendClientMessage(playerid, COLOR_GREEN, \"Írj be egy más nevet, vagy menj a \'Mégse\' gombra!\"); ChangeNameDialog(playerid); return 1; } new szOldName[MAX_PLAYER_NAME + 1], pRegID = GetPVarInt(playerid, \"RegID\"); GetPlayerName(playerid, szOldName, sizeof(szOldName)); if(SetPlayerName(playerid, inputtext) != 1) { SendClientMessage(playerid, COLOR_RED, \"Nem megfelelõ név! Írj be egy másikat!\"); ChangeNameDialog(playerid); return 1; } getdate(year, month, day); gettime(hour, minute, second); format(g_szQuery, sizeof(g_szQuery), \"INSERT INTO `namechanges`(id, reg_id, oldname, newname, time) VALUES(0, %d, \'%s\', \'%s\', \'%02d.%02d.%02d/%02d.%02d.%02d\')\", pRegID, szOldName, inputtext, year, month, day, hour, minute, second); mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\"); format(g_szQuery, sizeof(g_szQuery), \"UPDATE `players` SET `name` = \'%s\' WHERE `reg_id` = %d\", inputtext, pRegID); mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\"); format(i_str, sizeof(i_str), \"Sikeresen átváltottad a neved! Új neved: {\" #XCOLOR_WHITE \"}%s.\", inputtext); SendClientMessage(playerid, COLOR_YELLOW, i_str); return 1; } forward THREAD_Changepass(playerid, password[], queue); public THREAD_Changepass(playerid, password[], queue) { if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Changepass); new szOldPass[21], szEscaped[21], pRegID = GetPVarInt(playerid, \"RegID\"); cache_get_row(0, 0, szOldPass); mysql_real_escape_string(password, szEscaped); format(g_szQuery, sizeof(g_szQuery), \"UPDATE `players` SET `pass` = \'%s\' WHERE `reg_id` = %d\", szEscaped, pRegID); mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\"); getdate(year, month, day); gettime(hour, minute, second); format(g_szQuery, sizeof(g_szQuery), \"INSERT INTO `namechanges_p`(id, reg_id, name, oldpass, newpass, time) VALUES(0, %d, \'%s\', \'%s\', \'%s\', \'%02d.%02d.%02d/%02d.%02d.%02d\')\", pRegID, pName(playerid), szOldPass, szEscaped, year, month, day, hour, minute, second); mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\"); format(i_str, sizeof(i_str), \"Sikeresen átállítotad a jelszavad! Új jelszavad: {\" #XCOLOR_GREEN \"}%s\", password); SendClientMessage(playerid, COLOR_YELLOW, i_str); return 1; } forward THREAD_Findplayer(playerid, inputtext[], queue); public THREAD_Findplayer(playerid, inputtext[], queue) { if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Findplayer); new szFetch[12], szRegDate[24], szLaston[24], iData[6]; cache_get_row(0, 0, szFetch); iData[0] = strval(szFetch); // regid cache_get_row(0, 4, szRegDate); cache_get_row(0, 5, szLaston); cache_get_row(0, 6, szFetch); iData[1] = strval(szFetch); // money cache_get_row(0, 7, szFetch); iData[2] = strval(szFetch); // score cache_get_row(0, 8, szFetch); iData[3] = strval(szFetch); // kills cache_get_row(0, 9, szFetch); iData[4] = strval(szFetch); // deaths cache_get_row(0, 10, szFetch); iData[5] = strval(szFetch); // style switch(iData[5]) { case FIGHT_STYLE_NORMAL: szFetch = \"Normál\"; case FIGHT_STYLE_BOXING: szFetch = \"Boxoló\"; case FIGHT_STYLE_KUNGFU: szFetch = \"Kungfu\"; case FIGHT_STYLE_KNEEHEAD: szFetch = \"Kneehead\"; case FIGHT_STYLE_GRABKICK: szFetch = \"Grabkick\"; case FIGHT_STYLE_ELBOW: szFetch = \"Elbow\"; } // Üzenet elküldése format(i_str, sizeof(i_str), \"Név: %s, ID: %d, RegID: %d, Pénz: %d, Pont: %d\", inputtext, playerid, iData[0], iData[1], iData[2]); SendClientMessage(playerid, COLOR_RED, i_str); format(i_str, sizeof(i_str), \"Ölések: %d, Halálok: %d, Arány: %.2f, Ütés Stílus: %s\", iData[3], iData[4], (iData[3] && iData[4]) ? (floatdiv(iData[3], iData[4])) : (0.0), szFetch); SendClientMessage(playerid, COLOR_YELLOW, i_str); format(i_str, sizeof(i_str), \"Regisztáció ideje: {\" #XCOLOR_BLUE \"}%s{\" #XCOLOR_GREEN \"}, Utuljára a szerveren: {\" #XCOLOR_BLUE \"}%s\", szRegDate, szLaston); SendClientMessage(playerid, COLOR_GREEN, i_str); return 1; } public OnPlayerDeath(playerid, killerid, reason) { if(IsPlayerConnected(killerid) && killerid != INVALID_PLAYER_ID) { SetPVarInt(killerid, \"Kills\", GetPVarInt(killerid, \"Kills\") + 1); } SetPVarInt(playerid, \"Deaths\", GetPVarInt(playerid, \"Deaths\") + 1); return 1; } // Statisztika felmutató CMD:stats(playerid, params[]) { format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_date`, `laston` FROM `players` WHERE `reg_id` = %d\", GetPVarInt(playerid, \"RegID\")); // Kiválasztjuk a reg_date és a laston mezõt mysql_function_query(1, g_szQuery, true, \"THREAD_Stats\", \"dd\", playerid, g_pQueryQueue[playerid]); return 1; } forward THREAD_Stats(playerid, queue); public THREAD_Stats(playerid, queue) { if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Stats); new RegDate[24], Laston[24], szStyle[24], Kills = GetPVarInt(playerid, \"Kills\"), Deaths = GetPVarInt(playerid, \"Deaths\"); cache_get_row(0, 0, RegDate); cache_get_row(0, 1, Laston); switch(GetPlayerFightingStyle(playerid)) { case FIGHT_STYLE_NORMAL: szStyle = \"Normál\"; case FIGHT_STYLE_BOXING: szStyle = \"Boxoló\"; case FIGHT_STYLE_KUNGFU: szStyle = \"Kungfu\"; case FIGHT_STYLE_KNEEHEAD: szStyle = \"Kneehead\"; case FIGHT_STYLE_GRABKICK: szStyle = \"Grabkick\"; case FIGHT_STYLE_ELBOW: szStyle = \"Elbow\"; } // Üzenet elküldése format(i_str, sizeof(i_str), \"Név: %s, ID: %d, RegID: %d, Pénz: %d, Pont: %d\", pName(playerid), playerid, GetPVarInt(playerid, \"RegID\"), GetPlayerMoney(playerid), GetPlayerScore(playerid)); SendClientMessage(playerid, COLOR_RED, i_str); format(i_str, sizeof(i_str), \"Ölések: %d, Halálok: %d, Arány: %.2f, Ütés Stílus: %s\", Kills, Deaths, (Kills && Deaths) ? (floatdiv(Kills, Deaths)) : (0.0), szStyle); SendClientMessage(playerid, COLOR_YELLOW, i_str); format(i_str, sizeof(i_str), \"Regisztáció ideje: {\" #XCOLOR_BLUE \"}%s{\" #XCOLOR_GREEN \"}, Utuljára a szerveren: {\" #XCOLOR_BLUE \"}%s\", RegDate, Laston); SendClientMessage(playerid, COLOR_GREEN, i_str); return 1; } /* CMD:kill(playerid, params[]) { SetPlayerHealth(playerid, 0.0); return 1; } CMD:flag(playerid, params[]) { format(i_str, 128, \"Logged: %d, FirstSpawn: %d\", g_PlayerFlags{playerid} & e_LOGGED_IN, g_PlayerFlags{playerid} & e_FIRST_SPAWN); SendClientMessage(playerid, -1, i_str); return 1; } */ CMD:changename(playerid, params[]) { ChangeNameDialog(playerid); return 1; } CMD:changepass(playerid, params[]) { ShowPlayerDialog(playerid, DIALOG_CHANGEPASS, DIALOG_STYLE_PASSWORD, \"Jelszóváltás\", \"Lentre írd be az új jelszavad! \\n\\n\", \"Változtatás\", \"Mégse\"); return 1; } CMD:findplayer(playerid, params[]) { if(isnull(params)) return SendClientMessage(playerid, COLOR_RED, \"HASZNÁLAT: /findplayer <Játékos Névrészlet>\"); if(strlen(params) > MAX_PLAYER_NAME) return SendClientMessage(playerid, COLOR_RED, \"HIBA: Túl hosszú a részlet, maximum 24 karakter lehet!\"); format(g_szQuery, sizeof(g_szQuery), \"SELECT `name` FROM `players` WHERE `name` LIKE \'%s%s%s\'\", \"%%\", params, \"%%\"); mysql_function_query(1, g_szQuery, true, \"THREAD_FindplayerDialog\", \"dsd\", playerid, params, g_pQueryQueue[playerid]); return 1; } forward THREAD_FindplayerDialog(playerid, reszlet[], queue); public THREAD_FindplayerDialog(playerid, reszlet[], queue) { if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_FindplayerDialog); new rows, fields; cache_get_data(rows, fields); if(!rows) { format(i_str, sizeof(i_str), \"Nincs találat a \'%s\' részletre!\", reszlet); SendClientMessage(playerid, COLOR_RED, i_str); return 1; } else if(rows > 180) { format(i_str, sizeof(i_str), \"A \'%s\' részletre több, mint 180 találad van! < %d >!\", reszlet, rows); SendClientMessage(playerid, COLOR_RED, i_str); return 1; } new x, szName[MAX_PLAYER_NAME]; g_szDialogFormat[0] = EOS; for( ; x != rows; x++) { cache_get_row(x, 0, szName); strcat(g_szDialogFormat, szName); strcat(g_szDialogFormat, \"\\n\"); } format(i_str, 128, \"Találatok a(z) \'%s\' részletre.. (%d)\", reszlet, x); ShowPlayerDialog(playerid, DIALOG_FINDPLAYER, DIALOG_STYLE_LIST, i_str, g_szDialogFormat, \"Megtekint\", \"Mégse\"); return 1; } ///////////////////////////////////////// stock LoginDialog(playerid) { format(i_str, sizeof(i_str), \"{\" #XCOLOR_WHITE \"}Bejelentkezés: {%06x}%s(%d)\", GetPlayerColor(playerid) >>> 8, pName(playerid), playerid); ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, i_str, !\"{\" #XCOLOR_GREEN \"}Üdvözöllek a \\n\\n{\" #XCOLOR_BLUE \"}My{\" #XCOLOR_YELLOW \"}SQL {\" #XCOLOR_GREEN \"}teszt szerveren! \\n\\nTe már regisztálva vagy. Lentre írd be a jelszavad\", !\"Bejelentkezés\", !\"Mégse\"); return 1; } stock RegisterDialog(playerid) { format(i_str, sizeof(i_str), \"{\" #XCOLOR_WHITE \"}Regisztráció: {%06x}%s(%d)\", GetPlayerColor(playerid) >>> 8, pName(playerid), playerid); #if defined NINCS_REG_CSILLAG ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, i_str, !\"{\" #XCOLOR_GREEN \"}Üdvözöllek a \\n\\n{\" #XCOLOR_BLUE \"}My{\" #XCOLOR_YELLOW \"}SQL {\" #XCOLOR_GREEN \"}teszt szerveren! \\n\\nItt még nem regisztráltál. Lentre írd be a jelszavad\", !\"Regisztáció\", !\"Mégse\"); #else ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, i_str, !\"{\" #XCOLOR_GREEN \"}Üdvözöllek a \\n\\n{\" #XCOLOR_BLUE \"}My{\" #XCOLOR_YELLOW \"}SQL {\" #XCOLOR_GREEN \"}teszt szerveren! \\n\\nItt még nem regisztráltál. Lentre írd be a jelszavad\", !\"Regisztáció\", !\"Mégse\"); #endif return 1; } /* Bejelentkezés */ stock LoginPlayer(playerid) { new iPVarSet[6], szFetch[12], iRegID = GetPVarInt(playerid, \"LineID\"); // Ha a line ID 0, tehát a MySQL nem adott vissza sorokat, akkor semmiképp sem jelentkezhez be! // Ennek nem szabadna elõfordulnia, de biztonság kedvéért teszek rá védelmet. if(!iRegID) return printf(\"HIBA: Rossz reg ID! Játékos: %s(%d) (regid: %d)\", pName(playerid), playerid, iRegID); SetPVarInt(playerid, \"RegID\", iRegID); // RegID-t beállítjuk cache_get_row(0, 0, szFetch); iPVarSet[0] = strval(szFetch); // RegID cache_get_row(0, 6, szFetch); iPVarSet[1] = strval(szFetch); // Money cache_get_row(0, 7, szFetch); iPVarSet[2] = strval(szFetch); // Score cache_get_row(0, 8, szFetch); iPVarSet[3] = strval(szFetch); // Kills cache_get_row(0, 9, szFetch); iPVarSet[4] = strval(szFetch); // Deaths cache_get_row(0, 10, szFetch); iPVarSet[5] = strval(szFetch); // Fightingstyle SetPVarInt(playerid, \"Cash\", iPVarSet[1]); // A pénzét egy PVar-ban tároljuk, mert a skinválasztásnál nemlehet a játékos pénzét állítani. SetPlayerScore(playerid, iPVarSet[2]); SetPVarInt(playerid, \"Kills\", iPVarSet[3]); SetPVarInt(playerid, \"Deaths\", iPVarSet[4]); SetPVarInt(playerid, \"Style\", iPVarSet[5]); g_PlayerFlags{playerid} |= e_LOGGED_IN; return 1; } stock SavePlayer(playerid, regid) { if(IsPlayerNPC(playerid)) return 1; // Ha nincs bejelentkezve és még nem spawnolt le, akkor nem mentjük. Ezt ajánlatos itthagyni, mivel ezmiatt nekem sok bug keletkezett! if(g_PlayerFlags{playerid} & (e_LOGGED_IN | e_FIRST_SPAWN) == (e_LOGGED_IN | e_FIRST_SPAWN)) { getdate(year, month, day); gettime(hour, minute, second); format(g_szQuery, sizeof(g_szQuery), \"UPDATE `players` SET `laston` = \'%02d.%02d.%02d/%02d.%02d.%02d\', `money` = %d, `score` = %d, `kills` = %d, `deaths` = %d, `fightingstyle` = \'%d\' WHERE `reg_id` = %d\", year, month, day, hour, minute, second, GetPlayerMoney(playerid), GetPlayerScore(playerid), GetPVarInt(playerid, \"Kills\"), GetPVarInt(playerid, \"Deaths\"), GetPlayerFightingStyle(playerid), regid); mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\"); // %02d azt jelenti, hogyha a szám egyjegyû (1, 5, 7, stb... ), akkor tegyen elé egy 0-t. Pl: 05, 07. // Ezt általában idõre használják, mivel így \'érthetõbb\'. // Ez ugyanúgy mûködik %03d-vel %04d-vel, és így továb... ^ } return 1; } stock pName(playerid) { static // \"Helyi\" globális változó s_szName[MAX_PLAYER_NAME]; GetPlayerName(playerid, s_szName, sizeof(s_szName)); return s_szName; } forward OnQueryFinish(); public OnQueryFinish() { return 1; } /* SQL Tábla */ /* CREATE TABLE IF NOT EXISTS `connections` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(21) NOT NULL, `ip` varchar(16) NOT NULL, `serial` varchar(128) NOT NULL, `time` varchar(24) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `namechanges` ( `id` smallint(5) NOT NULL AUTO_INCREMENT, `reg_id` mediumint( NOT NULL, `oldname` varchar(21) NOT NULL, `newname` varchar(21) NOT NULL, `time` varchar(24) NOT NULL, PRIMARY KEY (`id`), KEY `reg_id` (`reg_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `namechanges_p` ( `id` smallint(5) NOT NULL AUTO_INCREMENT, `reg_id` mediumint( NOT NULL, `name` varchar(24) NOT NULL, `oldpass` varchar(21) NOT NULL, `newpass` varchar(21) NOT NULL, `time` varchar(24) NOT NULL, PRIMARY KEY (`id`), KEY `reg_id` (`reg_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `players` ( `reg_id` mediumint( unsigned NOT NULL AUTO_INCREMENT, `name` varchar(24) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `ip` varchar(20) NOT NULL, `pass` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `reg_date` varchar(24) NOT NULL, `laston` varchar(24) NOT NULL, `money` int(11) NOT NULL DEFAULT \'0\', `score` int(11) NOT NULL DEFAULT \'0\', `kills` mediumint(11) unsigned NOT NULL DEFAULT \'0\', `deaths` mediumint(11) unsigned NOT NULL DEFAULT \'0\', `fightingstyle` enum(\'4\',\'5\',\'6\',\'7\',\'15\',\'16\') NOT NULL DEFAULT \'4\', PRIMARY KEY (`reg_id`), KEY `name` (`name`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC; CREATE TABLE IF NOT EXISTS `queryerrors` ( `id` mediumint(7) NOT NULL AUTO_INCREMENT, `errorid` int(11) NOT NULL, `error` text NOT NULL, `resultid` mediumint(7) NOT NULL, `extraid` mediumint(7) NOT NULL, `callback` varchar(512) NOT NULL, `sql_query` varchar(512) NOT NULL, `connectionHandle` mediumint(7) NOT NULL, `time` varchar(24) NOT NULL, PRIMARY KEY (`id`), KEY `errorid` (`errorid`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; */
4778
« Dátum: 2013. március 22. - 16:04:21 »
Bocsi az offért de nem jó a letöltési link.. kérlek módosísd!
4779
« Dátum: 2013. március 22. - 16:01:49 »
Sziasztok! Le szeretném venni a kurta regisztrációs szkriptjét de sajnos nem tudom mert nem jó a letöltési link valaki nem tudná ide adni? Kérem.. :hmmm:
4780
« Dátum: 2013. március 21. - 18:34:39 »
sscanf helyett sscanf2 kell írni a pawnoba úgy csináltad? Vagyis lehet neked így van a módban: #include < sscanf > helyett ezt írd be: #include < sscanf2 >
4781
« Dátum: 2013. március 21. - 11:13:44 »
4782
« Dátum: 2013. március 18. - 21:48:13 »
MiniGames Szerver 87.229.103.144:8022 Weboldal: www.gw-fs.tk A szervert 2013.03.15 kezdtem editelni amikor megtaláltam az interneten. Egy tejesen tiszta ideges nyelven volt amit lefordítottam és editeltem minél jobb és több cuccokkal mentésekkel és más szórakozásokkal. Mit lehet csinálni egy ilyen szerveren? Ez a szerver egy minigame szerver minden féle pályák vannak amiket lehet játszani sokféle ugratók és több más pályák amik vannak  A szervert elégé üres volt de tökéletes volt számomra egy kezdõ szervert inditani belõle a játékosoknak, hogy tudjanak többet játszani ameddig én írom a saját egyedi módomat. Ez a mód az elsõ szerver lesz(remélem) Magyarországon ahol csak ilyen játékok lesznek rajta és sok pénz persze amit fell lehet használni hasznosabb és haszonsabb dolgokra mint példáúl VIP jogok vagy más dolgok. Pénz Szerzése A szerveren vannak írásbeli rekaciók feladványok, matematikai számítások és több más feladatok amiket a szerver elment ha megoldjátok. A statisztikában elmenti, hogy hányszor nyertünk meg egy reakciót melyik idõpontban nyeremények lehetnek, pénz, score, dilidó, nitró, javítás, kocsiváltás. A szerveren lottó rendszer is van amiben számokat tehetsz fell a nyerésért, hogy minél több pénz legyen neked a vásárlásokért! Szerver adatai Mentés: DOF2 Pluginok: sscanf, streamer, xml, crashdetect Objectek: Dynamic Object Parancsok Száma: 22 Admin Parancsok Száma: 30 Rekeakció Szkriptek Száma: 3 MiniGame Pályák: 132 Szerver Slot Száma: 60 Mód Sorainak Száma: 4000 Pályák A szerveren megtalálható 132 pálya ezek közül lehetnek: Stunt Pályák - Parkour Pályák - Drift Pályák - Verseny Pályák - DM Pályák - DeathDrive Pályák - Derby Pályák - Fallout Pályák - Hay Pályák ezeken a pályákon kivül még található több ugratós pálya és több más olyan fajta pályák amiket még én se tudok Szavazási Rendszer A szerveren található szavazási rendszer is ezzel lehet megszavazni azokat a pályákat amelyiket szeretnék, hogy legyen. Minden egyes szavazat számit mivel ez dönti el, hogy milyen játék lesz a szerveren. Hogyan lehet szavazni? Te nem kell csinálj semmit csak egy szavazatot meg kell nyomjál amelyik pálya szimpatikus neked és amelyik tetszik ha mindenki arra szavazz akkor mindenkinek az a pálya lesz ha mindenki külön szavazatokat csinált más pályára akkor újra índul a szavazatok száma és újra lehet szavazni amelyik kapja a legjöbbet az a pálya fog elkezdödni Extra Funkciók A szerveren található egy úgynevezetett Extra Funkció is. Mi is lenne ez? Nem kell a kocsidat parancsokkal javítani vagy nitrót hozzáadni mivel egy pickup segítségével beleméssz ebbe a funkcióba és autómatikusan megjavítja neked a kocsidat ez lehet bármelyik kocsi infernus, random kocsik, elegy, buffalo, elegy, nrg stb.. A szerveren még kocsi pickupok vannak ha beleméssz ezeketbe akkor a kocsikat is lecserélheted.. Ezek lehetnek: Elegy, Sanchez, Infernus, Nrg stb.. Kiesés és megfigyelés A szerveren található egy kiesés rendszer is ennek a lényege az, hogy egy adott játékos vizbe esik akkor kiesik a játékból és egy megfeigyelõ módba kerül ahol az egész játékosokat látja akik még játszanak a szerveren minigamet. Amikor az egyik játékos megnyerte akkor újra tudsz szavazni és újra lehet játszani ameddig ki nem essel újra a pályáról. A nyertes 50000$ és +10 Scoret kap jutalmúl! Admin Rendszer A szerveren egyedi admin rendszer és regisztráció rendszer található! Mivel volt a módban de nekem nem tetszik az mySQL ezért módosítottam DOF2 mentésre. A szerveren a regisztrációnál be lehet állítani a nyelvet ami lehet angol vagy magyar ezt el is menti vagyis kilépéskor nem kell újra megadjad ezt, hogy magyar vagy vagy angol nyelvet szeretnél. A szerveren van egy kidolgozott egyedi admin rendszer is ez azért kell mert van sok olyan gyerek amelyik nem szeretne játszani úgy ahogyan kéne csak hack programokkal. A szerveren megtalálható a következõ admin parancsok: /ban - /kick - /slap - /burn - /jail - /freeze - /mute - /unfreeze - /unmute - /nextmap - /votemap - /fix - /repair - /flip - /stats - /akill VIP vásárlása A szerveren lehet vipet vásárolni ez lehet következõ rangú vipek: Bronz, Ezüst, Arany. A bronz VIP vásárlás 1000000$ Az Ezüst VIP vásárlás 2000000$ Az Arany VIP vásárlás 3000000$ Ez még semmi! A szerveren ha vettél VIP jogot akkor egy adminisztrátornak jelenteni kell, hogy a weboldalon szeretnél -e VIP rangot vagy sem. Mivel ha a szerveren is meg van a VIP rang akkor legyen meg a weboldalunkon is. A jelentést megtehetitek a /weboldalvip parancssal! Amikor egy adminisztrátor elolvassa ezt a kérvényt és megtalál a weboldalon az adatbázisunkban akkor autómatikusan beraknak VIP rangá! FIGYELEM: Csak azok kapják meg a weboldali rangot akik megfelelõek erre a munkára a VIP rang olyan mint a Globális Moderátori rang mint ezen a fórumon! Szerver Szabályzatok [1]. Tilos a szerveren a külsõ vagy belsõ programok használata! Büntetés: BAN [2]. Tilos a szerveren floodolni egy bízonyos szót vagy mondatot! Büntetés: MUTE [3]. Tilos a szerveren káromkodni vagy más trágár szavakat használni! Büntetés: MUTE [4]. Tilos a szerveren anyázni vagy apázni ezekér súlyos büntetést osztunk ki! Büntetés: MUTE(Örök) - WARN [5]. Tilos a szerveren a bugokat kihasználni vagy elmondani más játékosnak! Inkább jelensd( /bug )! Büntetés: BAN [6]. Tilos a szerveren Weapon Hacket használni ha használsz is akkor autómatikusan bannolva leszel a rendszer által! Büntetés: BAN [7]. Tilos a szerveren autómatikus kocsi javítást használni vagyis hack programot mivel van javítási funkció! Büntetés: BAN-WARN [8]. Tilos a szerveren a speed hack! Büntetés: BAN-WARN [9]. Tilos a szerveren a rasszizmús mint példáúl(nigger, csöves)! Büntetése: BAN [10]. Tilos a szerveren pornó dolgokról vagy más hasonló dolgokról beszélni mivel ezt más játékos sértésnek és zavarónak találja! Büntetés: MUTE [11]. Tilos más weboldalakat vagy más IP címet hírdetni a szerveren! Büntetés: BAN A SZERVEREN HA BANNOLTAK AKKOR AZ UNBAN KÉRELEZÉST ITT ÍRHATSZ: www.gw-fs.tk Szerver Elérhetõsége HostName: [HUN][0.3x]MiniGame Szerver v2.0 Address: 87.229.103.144:8022 Players: X / 60 Ping: X Mode: MiniGames v21.0.1 Map: San Andreas A szerver megnyilt gyere fell te is a szerverre! És tapasztald a sok játékokat amelyik a szerveren van! Jó játékot kivánok nektek!  A szerveren lehet venni neont a kocsira be lehet állítani a skineket és a saját idõd és az idõjárásodat. Mégpedig van egy cpanelünk ahol be lehet állítani ezeket a dolgokat mégpedig a színed vagy más kisebb vagy nagyobb dolgokat! Van egy egyedi kidolgozott toplistánk, hogy kinek van a szerveren a legtöbb pontja ezt egy dialogban kiírja! Tulajok: András, ZyZu.
4784
« Dátum: 2013. március 18. - 15:10:37 »
Szerintem ha lenne egy ilyen szerver itt is a mi szervereink között akkor lennének rajta szerintem sokan.. de majd mindenki ebbõl nyitja majd mert látják, hogy ezen vannak  Egyébként Köszönöm! Megprobálom kihozni amit tudok belõle!  Ha minden összejön akkor lehet ma nyitás!
4785
« Dátum: 2013. március 17. - 16:35:16 »
Már bocs,de minek kell egy megírt mod már megint ?? :OO Inkább írj/irass egyet!!
Nem ezt volt a kérdése. Egyébként ha jól tudom nem szabad, hogy leírják a letöltési linket mivel tilos publikálni a módot.. nekem régen megvolt de már nincsen meg.
Oldalak: 1 ... 317 318 [319] 320 321 ... 527
|