Jump to content

BRAGA03

Membru
  • Posts

    30
  • Joined

  • Last visited

Everything posted by BRAGA03

  1. Deci. Aici este structura tabelului: Structura de tabel pentru tabelul `accounts` -- DROP TABLE IF EXISTS `accounts`; CREATE TABLE IF NOT EXISTS `accounts` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Name` varchar(24) NOT NULL, `Password` varchar(129) NOT NULL, `IP` varchar(16) NOT NULL, `Skin` int(11) NOT NULL, `Admin` int(10) NOT NULL, `Helper` int(11) NOT NULL, `Premium` int(10) NOT NULL, `Money` int(10) NOT NULL, `BankMoney` int(11) NOT NULL, `Group` int(11) NOT NULL, `Rank` int(11) NOT NULL, `Leader` int(11) NOT NULL, `PosX` float NOT NULL, `PosY` float NOT NULL, `PosZ` float NOT NULL, `PosA` float NOT NULL, `Job` int(11) NOT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; Bun. Acum sa va arat tot ce este legat de MySQL in gamemode. #define MYSQL_HOST "localhost" #define MYSQL_USER "-----" #define MYSQL_DATABASE "-----" #define MYSQL_PASSWORD "-----" #define SPAWN_X 1128.8790 #define SPAWN_Y -1489.7399 #define SPAWN_Z -1489.7399 #define SPAWN_A 267.2968 SPAWN_X, SPAWN_Y, SPAWN_Z si SPAWN_A sunt pozitiile la care playerul este spawnat prima data. Mai departe: enum PlayerData { ID, Name[MAX_PLAYER_NAME], Password[129], IP[16], Skin, Admin, Helper, Premium, Money, BankMoney, Group, Rank, Leader, Float:posX, Float:posY, Float:posZ, Float:posA, Job, Muted, MutedT, PhoneNumber, PhoneCredit, PhoneBook }; Acesta este enum-ul meu. Nu am inca toate cele necesare in el, sunt inca la inceput. forward OnAccountLoad(playerid); forward OnAccountRegister(playerid); forward OnAccountCheck(playerid); public OnAccountLoad(playerid) { PlayerInfo[playerid][Admin] = cache_get_field_content_int(0, "Admin"); PlayerInfo[playerid][Helper] = cache_get_field_content_int(0, "Helper"); PlayerInfo[playerid][Premium] = cache_get_field_content_int(0, "Premium"); PlayerInfo[playerid][Money] = cache_get_field_content_int(0, "Money"); PlayerInfo[playerid][BankMoney] = cache_get_field_content_int(0, "BankMoney"); PlayerInfo[playerid][Skin] = cache_get_field_content_int(0, "Skin"); PlayerInfo[playerid][posX] = cache_get_field_content_float(0, "PosX"); PlayerInfo[playerid][posY] = cache_get_field_content_float(0, "PosY"); PlayerInfo[playerid][posZ] = cache_get_field_content_float(0, "PosZ"); PlayerInfo[playerid][posA] = cache_get_field_content_float(0, "PosA"); PlayerInfo[playerid][Job] = cache_get_field_content_int(0, "Job"); PlayerInfo[playerid][Group] = cache_get_field_content_int(0, "Group"); PlayerInfo[playerid][Rank] = cache_get_field_content_int(0, "Rank"); PlayerInfo[playerid][Leader] = cache_get_field_content_int(0, "Leader"); PlayerInfo[playerid][PhoneNumber] = cache_get_field_content_int(0, "Phone Number"); TogglePlayerSpectating(playerid, false); GivePlayerMoney(playerid, PlayerInfo[playerid][Money]); SetSpawnInfo(playerid, 0, 23, PlayerInfo[playerid][posX], PlayerInfo[playerid][posY], PlayerInfo[playerid][posZ], PlayerInfo[playerid][posA], 0, 0, 0, 0, 0, 0); SpawnPlayer(playerid); gLogged[playerid] = 1; SendClientMessage(playerid, -1, "You have successfully logged in."); return true; } public OnAccountRegister(playerid) { PlayerInfo[playerid][ID] = cache_insert_id(); printf("[Registration] New account registered. Database ID: [%d]", PlayerInfo[playerid][ID]); TogglePlayerSpectating(playerid, false); SetSpawnInfo(playerid, 0, 23, SPAWN_X, SPAWN_Y, SPAWN_Z, SPAWN_A, 0, 0, 0, 0, 0, 0); SpawnPlayer(playerid); gLogged[playerid] = 1; return true; } public OnAccountCheck(playerid) { new rows, fields; cache_get_data(rows, fields, mysql); if(rows) { cache_get_field_content(0, "Password", PlayerInfo[playerid][Password], mysql, 129); PlayerInfo[playerid][ID] = cache_get_field_content_int(0, "ID"); ShowPlayerDialog(playerid, LoginDialog, DIALOG_STYLE_INPUT, "Login", "Welcome player!\nYour account has been found in our database. \nPlease fill in your password:", "Login", "Quit"); } else { ShowPlayerDialog(playerid, RegisterDialog, DIALOG_STYLE_INPUT, "Register", "Welcome player!\nYour account has not been registered yet. \nPlease fill in your desired password:", "Register", "Quit"); } return true; } Sub OnGamemodeInit() am urmatoarele: mysql_log(LOG_ALL); mysql = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DATABASE, MYSQL_PASSWORD); if(mysql_errno() != 0) { printf("[MySQL] The connection has failed."); } else { printf("[MySQL] The connection was successful."); } Si imi arata de fiecare data in consola: "[MySQL] The connection was successful.", deci se conecteaza. Mai departe: Sub OnPlayerConnect am: new query[128], playername[MAX_PLAYER_NAME]; GetPlayerName(playerid, playername, sizeof(playername)); mysql_format(mysql, query, sizeof(query), "SELECT `Password`, `ID` FROM `accounts` WHERE `Name` = '%e' LIMIT 1", playername); mysql_tquery(mysql, query, "OnAccountCheck", "i", playerid); Apoi am asta, in mai multe locuri, ca sa pot salva datele mai des: new query[128], Float:pos[4]; GetPlayerPos(playerid, pos[0], pos[1], pos[2]); GetPlayerFacingAngle(playerid, pos[3]); mysql_format(mysql, query, sizeof(query), "UPDATE `accounts` SET `Group` = %d,`Rank` = %d, `Leader` = %d `Job` = %d, `Skin` = %d, `Money` = %d, `PosX` = %f, `PosY` = %f, `PosZ` = %f, `PosA` = %f, `BankMoney` = %d WHERE `ID` = %d", PlayerInfo[playerid][Group], PlayerInfo[playerid][Rank], PlayerInfo[playerid][Leader], PlayerInfo[playerid][Job], GetPlayerMoney(playerid), pos[0], pos[1], pos[2], pos[3], PlayerInfo[playerid][ID], PlayerInfo[playerid][BankMoney]); mysql_tquery(mysql, query, "", ""); Si am ajuns la OnDialogResponse: public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { switch(dialogid) { case LoginDialog: { if(!response) Kick(playerid); new hashpass[129], query[100], playername[MAX_PLAYER_NAME]; GetPlayerName(playerid, playername, sizeof(playername)); WP_Hash(hashpass, sizeof(hashpass), inputtext); if(!strcmp(hashpass, PlayerInfo[playerid][Password])) { mysql_format(mysql, query, sizeof(query), "SELECT * FROM `accounts` WHERE `Name` = '%e' LIMIT 1", playername); mysql_tquery(mysql, query, "OnAccountLoad", "i", playerid); gLogged[playerid] = 1; } else { SendClientMessage(playerid, -1, "You have specified an incorrect password!"); ShowPlayerDialog(playerid, LoginDialog, DIALOG_STYLE_INPUT, "Login", "Welcome back player!\nYour account has been found in our database. \nPlease fill in your password:", "Login", "Quit"); } } case RegisterDialog: { if(!response) return Kick(playerid); if(strlen(inputtext) < 5) { SendClientMessage(playerid, -1, "Your password must at least contain more than 4 characters.\nPlease introduct a new one:"); return ShowPlayerDialog(playerid, RegisterDialog, DIALOG_STYLE_INPUT, "Register", "Welcome player!\nYour account has not been registered yet. \nPlease fill in your desired password:", "Register", "Quit"); } else if(response) { new query[512], playername[MAX_PLAYER_NAME], playerip[16]; GetPlayerName(playerid, playername, sizeof(playername)); GetPlayerIp(playerid, playerip, sizeof(playerip)); WP_Hash(PlayerInfo[playerid][Password], 129, inputtext); mysql_format(mysql, query, sizeof(query), "INSERT INTO `accounts` (`Name`, `Password`, `IP`, `PosX`, `PosY`, `PosZ`, `PosA`) VALUES ('%e', '%e', '%e', 0, 0, 0, %f, %f, %f, %f)", playername, PlayerInfo[playerid][Password], playerip, SPAWN_X, SPAWN_Y, SPAWN_Z, SPAWN_A); mysql_tquery(mysql, query, "OnAccountRegister", "i", playerid); gLogged[playerid] = 1; } } Asta e tot. Am unsistem de login/register foarte simplu, vreau sa adaug mai multe lucruri dupa ce o sa invat mai bine mysql, momentan am doar esentialul. Dar pana nu rezolv problema asta nu ma pot apuca de nimic. Asa ca, va rog foarte mult sa ma ajutati. EDIT: Am uitat sa va spun ceva. Vedeti ca am variabila aia cu gLogged[playerid] la OnAccountRegister. Pai eu am aproape la fiecare comanda if(gLogged[playerid] == 0) return SendClientMessage(...). Comenzile merg, deci in colcuzie, alea se executa.
  2. O sa pun totul aici mai tarziu. Nu sunt acasa acum. EDIT: Deci zici ca nu are nici o treaba ca ma loghez de pe localhost? Se salveaza datele si pe localhost?
  3. Salut! Am si eu o intrebare. Am facut o baza de date mysql dupa un tutorial pentru ca eu nu prea ma prind cum sta treaba, nu inteleg engleza foarte bine si tutoriale in romana, nu sunt. Deci, intru pe server, scriu parola, i dau admim, alea, alea, ies, si daca intru din nou, e ca si cum nu as fi intrat niciodata. Intru pe localhost, e din cauza asta?
  4. Intrii la serverul tau, la scriptfiles. Si trebuie sa ai un loc unde s-au exportat textdraw-urile(daca le-ai exportat). E un fisier .txt, sau .pwn. Nu iti pot spune exact, pentru ca sunt pe mobil, nu sunt acasa. Acolo ai textdraw-urile. Copii tot ce e acolo, si pui sub "OnGamemodeInit", in gamemode-ul tau. Ar trebuibsa mearga. Tutorialul pe cate ti l-a dat @Arhix. este foarte bun, si daca esti incepator iti recomand sa te uiti la mai multe videoclipuri de pe pe canalul ala. Am observat ca explica destul de bine. Bafta!
  5. Descriere tutorial: Propun crearea unui tutorial pentru salvarea datelor vehiculelor in baza de date mysql. Cum ar fi: ID, fuel, health, sau, locked/unlocked, km in cazul celor personale. Ma tot chinui de 2 zile sa fac asta, si nu imi iese cum trebuie. Nu pot sa ii dau de capete cu mysql-ul asta, si ma gandeam ca multi alti scripteri ar putea fi in situatia mea, iar un tutorial despre asta ar ajuta foarte mult.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.