20.07.2010, 14:06
I made registration with mysql and error:
Server log
Код:
// This is a comment // uncomment the line below if you want to write a filterscript //#define FILTERSCRIPT #include <a_samp> #include <a_mysql> #include <a_sampmysql> #define SQL_HOST "localhost" // Priėjimas iki MYSQL duomenų bazės, jeigu naudojate localhost įraљykite "localhost" #define SQL_USER "root" // MYSQL duomenų bazės vartotojas, jeigu naudojate localhost įraљykite "root" #define SQL_PASS "" // slaptaћodis, jeigu naudojate localhost, daћniausiai jis būna be slaptaћodћio, tada palikite "" #define SQL_DB "vLife" // Jūsų duomenų bazės pavadinimas per kurį jungsimės. #define TABLENAME "players" // Kad nereiktų raљinėti kas kartą lentelės, pasidarome bindą. Čia įraљykite savo lentelės pavadinimą. //colors // spalvos #define MAX_STRING 1024 #define MAX_RESULT 1024 #define SPALVA_ORANDZINE 0xff9b39ff #define COLOR_WHITE 0xff9b39ff // orandћinė spalva, naudojana visoje registracijoje. // colors end // spalvų pabaiga new bool:Logged[MAX_PLAYERS]; new result[MAX_RESULT]; enum pInfo { pSQID, pPass[MAX_STRING], bool:pIsLogin, pKills, pDeaths, pCash }; new PlayerInfo[MAX_PLAYERS][pInfo]; public OnFilterScriptInit() { print("\n--------------------------------------"); print(" Blank Filterscript by your name here"); print("--------------------------------------\n"); mysql_connect(SQL_HOST, SQL_USER,SQL_DB, SQL_PASS); // Jungiame į MYSQL mysql_debug(1); // įjungiame debug, jis raљys visas įvykdytas bei neįvykdytas jungtis į txt failą kurį rasite serverio direktorijoje return 1; } public OnFilterScriptExit() { return 1; } public OnGameModeInit() { // Don't use these lines if it's a filterscript SetGameModeText("Blank Script"); AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); return 1; } public OnGameModeExit() { if(mysql_ping()) mysql_close(); // iљjungiame jungtį kartu kai iљsijungia naudojamas skriptas filterscript љiuo atviejiu. return 1; } public OnPlayerRequestClass(playerid, classid) { SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746); SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746); SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746); if ( !Logged[ playerid ] ) // jeigu ћaidėjas NE prisijungęs su savo duomenimis neleidћame jo į serverį, right ? { SendClientMessage(playerid,SPALVA_ORANDZINE,"Jūs neprisijungęs, todėl tęsti negalite."); // paraљome klientui kas ne taip. return 0; // neduodam nieko toliau daryti, laukiam kol prisijungs. } return 1; } public OnPlayerConnect(playerid) { Logged[playerid] = false; // Nustatome neigiamą reikљmę Logged kintamajam, nes kai ћaidėjas prisijungia į serverį, jis nebūna prisijungęs prie savo sąskaitos, right ? new string[128],pName[MAX_PLAYER_NAME+1],query[256]; // sukuriame kintamuosius, vardo atpaћinimui, duomenims į mysql paduoti bei ћinutei iљreikљti. GetPlayerName(playerid,pName,sizeof pName); // įdedame į kintamajį dabartinį ћaidėjo vardą, jį naudosime teisingai MYSQL eilutei surasti. format(query,sizeof(query),"SELECT * FROM `"TABLENAME"` WHERE Vardas = '%s'",pName); // Sudedame apklausą kurią siūsime uћklausai gauti visai informacijai apie ћaidėją. mysql_query(query); // siunčiame uћklausą kurią sūdėjome į query if(IsPlayerConnected(playerid)) // patikriname jeigu ћaidėjas prisijunęs { GetPlayerName(playerid,pName,sizeof pName); // paimame dar kartą jo vardą. mysql_store_result(); // atsikeliame iљ MYSQL gautą rezultatą if(mysql_num_rows() > 0) // Jeigu rado duomenis apie vartotoją reiљkiasi jis uћregistruotas. Duodame jam љansą prisijungti :D { ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Prisijungimas","Įveskite savo sąskaitos prisijungimo slaptaћodį:","Tęsti","Iљeiti"); // parodome DIALOG langą, kad būtų kur suvesti sąskaitos slaptaћodį, o gal naudojame komanda ? :D format(string,sizeof(string),"Sąskaita su vardu - (%s) yra uћregistruota. Praљome įvesti sąskaitos slaptaћodį norėdami prisijungti.",pName); // formatuojame textą SendClientMessage(playerid,SPALVA_ORANDZINE,string); // paraљome suformatuotą textą. } else // jeigu nerado nieko apie vartotoją reiљkiasi jis neregistruotas, so we dump { ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Registracija","Registracijai įveskite slaptaћodį kurį naudosite kas kartą prisijungiant prie sąskaitos","Tęsti","Iљeiti"); // parodome DIALOGĄ kuriame uћregistruos savo slaptaћodį. format(string,sizeof(string),"Sveikas atvykęs %s, tu љiame serveryje neturi sąskaitos, įvesk slaptaћodį norėdamas uћregistruoti.",pName); // formatuojame ћinutę, kad pasakyti ћaidėjui apie neturimą sąskaitą ir reikalingą registraciją. SendClientMessage(playerid,SPALVA_ORANDZINE,string); // Siunčiame suformatuotą ћinutę klientui kuris to praљo. } mysql_free_result(); // paleidћiame visus paimtus duomenis, kai reiks vėl pasiimsime. } return 1; } public OnPlayerDisconnect(playerid, reason) { new query[300],pName[MAX_PLAYER_NAME]; // kintamieji uћklausoms bei vardui. GetPlayerName(playerid,pName,sizeof(pName)); // paimame ћaidėjo vardą kuriam viską darysime. if ( Logged[ playerid ] ) // jeigu ћaidėjas prisijungęs, tai yra jeigu jis suvędęs savo duomenis teisingai arba ką tik uћsiregistravęs ir automatiљkai prijungtas. { format(query,sizeof(query),"UPDATE `"TABLENAME"` SET `Pinigai`='%d' WHERE (`Vardas` = '%s')",GetPlayerMoney(playerid),pName); // iљsaugome ћaidėjo turimus pinigus į MYSQL duomenų bazę, kad kitą kartą atėjus jis gautu juos. mysql_query(query); // siunčiame uћklausą duomenų bazei. } return 1; } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == 1) // Jeigu dialogo id 1 tai yra jeigu jis nori registruotis. { if(response) // Jeigu įvedė slaptaћodį ir spaudћia tęsti. { if(strlen(inputtext) < 6) // jeigu slaptaћodis sudaro nemaћiau 6 simbolių. Vykdome toliau { ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Registracija","Registracijai įveskite slaptaћodį kurį naudosite kas kartą prisijungiant prie sąskaitos","Tęsti","Iљeiti"); // rodome vėl DIALOGĄ, kad galėtų pasitaisyti neteisingai įvestą slaptaћodį. return SendClientMessage(playerid,SPALVA_ORANDZINE,"Slaptaћodis tūrėtų sūdaryti nemaћiau 6 simbolių, tai jūsų sąskaitos saugumui."); // praneљame ћaidėjui kuris suvedė neteisingai } new query[256], vardas[128]; // Stringai :D , uћklausai bei vardui. GetPlayerName(playerid,vardas,128); // įdedame į kintamajį ћaidėjo vardą kurį naudosime atpaћinimui. format(query,sizeof(query),"INSERT INTO `"TABLENAME"` (Vardas,Slaptazodis) VALUES ('%s',md5('%s'))",vardas,inputtext); // vykdome uћklausą kurioje suvesime norimus duomenis į MYSQL duom. Taip, pat naudojamės plugino funkcijomis ir uћkoduojame slaptaћodį - MD5 mysql_query(query); // padarome uћklausą. Logged[playerid] = true; // Nustatome, kad ћaidėjas prisijungė automatiљkai. // Ћaidėjui sąskaitą sukurtą, padarome kintamajį true, kad serveris jį atpaћintų kaip prisijungusį. SendClientMessage(playerid,SPALVA_ORANDZINE,"Uћsiregistravote sėkmingai, jūs automatiљkai prijungtas. Tęskite norint ћaisti."); // Visą ką aљ dabar pasakiau praneљame ћaidėjui paprastaja kalba (neskriptinimo) :D :D } else if(!response) // Jei ћaidėjas paspaudė buttoną iљeiti, tai metam jį iљ serverio, right ? { Kick(playerid); // Iљspiriame ћaidėja, todėl kad nenorėjo registruotis. } return 1; } if(dialogid == 2) // Jeigu ћaidėjas uћregistruotas ir norėtų prisijungti prie savo sąskaitos rodome jam dialogą id-2 { if(response) // jai paspaus tęsti. { new vardas[128], query[256]; // Kintamieji vardui bei uћklausai. GetPlayerName(playerid, vardas, 128); // gaunam zaidejo pavadinimą ir įdedame į kintamajį vardas :) if(IsPlayerConnected(playerid)) // jeigu ћaidėjas prisijungęs { if(mysql_num_rows() == 1)// jeigu yra atitikmenų iљ uћklausos { format(query,sizeof(query), "SELECT * FROM `"TABLENAME"` WHERE `Name` = '%s'",GetPlayerName(playerid)); samp_mysql_query(query); samp_mysql_store_result(); if(samp_mysql_fetch_row(result)) { new tmp[MAX_STRING]; format(query,sizeof(query),"SELECT * FROM `"TABLENAME"` WHERE `Name` = '%s'",GetPlayerName(playerid)); samp_mysql_query(query); samp_mysql_store_result(); if(!samp_mysql_fetch_row(result)) return 0; //===========failu pakrovimai============= samp_mysql_get_field("Money", tmp); PlayerInfo[playerid][pCash] = strval(tmp); GivePlayerMoney(playerid,PlayerInfo[playerid][pCash]); samp_mysql_get_field("ID", tmp); PlayerInfo[playerid][pSQID] = strval(tmp); samp_mysql_get_field("Kills", tmp); PlayerInfo[playerid][pKills] = strval(tmp); samp_mysql_get_field("Deaths", tmp); PlayerInfo[playerid][pDeaths] = strval(tmp); PlayerInfo[playerid][pIsLogin] = true; SendClientMessage(playerid,COLOR_WHITE,"Sveiki prisijunge"); } else // jeigu nerado nieko tokio iљ duotosios uћklausos, reiљiasi jis neћino sąskaitos duomenų, arba netesingai įraљė. { mysql_free_result(); // paleidћiame duomenis, nes neteisingai paraљė. ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Prisijungimas","Įveskite savo sąskaitos prisijungimo slaptaћodį:","Tęsti","Iљeiti"); // DUODAME dar љansą prisijungti, kad nereiktų jungtis į serverį iљ naujo. return SendClientMessage(playerid,SPALVA_ORANDZINE,"Sąskaitos vartotojas neatpaћintas, greičiausiai slaptaћodis neatitiko."); // pranaљame klientui kas blogai, kodėl neprijungia jo prie sąskaitos. } } else // kad iљvengti "commands out of sync" klaidų naudojame љitą { mysql_store_result(); // kad iљvengti "commands out of sync" klaidų naudojame љitą mysql_free_result(); // kad iљvengti "commands out of sync" klaidų naudojame љitą } } else if(!response) // Jai paspaude iљeiti, nenorėjo prisijungti. { Kick(playerid); // Spiriame lauk iљ serverio, nenori prisijungti. return 1; } return 1; } } return 1; }
Код:
[16:50:22] > MySQL plugin R4-2 successfully loaded. [16:50:22] Loaded. [16:50:22] Loaded 1 plugins. [16:50:22] [16:50:22] Ban list [16:50:22] -------- [16:50:22] Loaded: samp.ban [16:50:22] [16:50:22] [16:50:22] Filter Scripts [16:50:22] --------------- [16:50:22] Loading filter script 'regsys.amx'... [16:50:22] Loaded 1 filter scripts. [16:50:22] Script[gamemodes/new.amx]: Run time error 19: "File or function is not found" [16:50:22] Number of vehicle models: 0 [16:50:35] --- Server Shutting Down. [16:50:35] > MySQL plugin unloaded.