-
Posts
1,303 -
Joined
-
Last visited
-
Days Won
53
Everything posted by Leonard
-
[Tutorial #2] Cum sa folosim compiler-ul 'Zeex'.
Leonard replied to Leonard's topic in Tutoriale & ghiduri
Am incercat sa fac asta si nu a functionat. -
[REZOLVAT] [Intrebare] Salvare actiuni in baza de date
Leonard replied to equin0x's topic in Closed topics
Eu am facut doar un model, tu trebuie sa-l faci compatibil cu gamemode-ul pe care lucrezi. -
Problema a fost rezolvată. Topicul a fost închis!
-
V-ați săturat să stați o groază la compilare? Atunci, acest tutorial este ceea ce cauți. Pentru început să pregătim instrumentele cu care vom lucra astăzi. 1 - Librăria YSI. ( ultima versiune, bineînțeles ) 2 - Compiler-ul în sine. 3 - Sublime Text 3. ( pe acesta vom lucra ) * Pasul 1 - Descărcarea librăriei YSI și compiler-ului. Librăria YSI : Descărcare Compiler-ul Zeex : Descărcare Pawno gata pregătit : Descărcare * Pasul 2 - Instalarea & Ordonarea librăriei YSI si compiler-ului. Creem un nou folder pe desktop pe care îl numim : 'Execute Compiler'. ( imagine ) Intrăm în acesta și vom creea alt fișier pe care îl vom denumii : 'lnd'. ( imagine ) Adăugăm în acesta fișierele care se află în arhiva compiler-ului. ( imagine ) Dezarhivăm arhiva 'pawno' în folder-ul 'Execute Compiler'. ( imagine ) După ce am făcut asta, dezarhivăm arhiva 'Librăria YSU 4.x' în 'include'. ( imagine ) Iar la final, adăugăm in folderul 'include', include-urile de care avem nevoie pentru gamemode-ul nostru. * Pasul 3 - Configurarea compiler-ului în Sublime Text 3. Deschidem Sublime Text 3. Ne ducem la 'Preferences' -> 'Package Settings' -> 'Pawn Compiler Settings' -> 'Edit Build Settings ( Pawn.sublime-build )'. ( imagine ) După trebuie să adaugăm în acel fișier urmatorul cod: { "cmd": ["pawncc", "$file_name", "-;+", "-v2", "-d3","-Z+", "-\\)+"], "path": "C:/Users/Leonard/Desktop/Execute Compiler/lnd" } * Parametrul 'path' îl modificați fiecare după locația unde ați instalat Zeex Compiler-ul. După ce am făcut și acest pas, salvăm și asta a fost tot. Acum, gamemode-ul vostru ar trebuii să se compileze în maxim 5 - 6 secunde, depinde de liniile gamemode-ului. * Sper că va ajutat acest tutorial, nu uitați să lăsați un LIKE. * Dacă aveți nevoie de ajutor, lăsați un reply sau eventual faceți un topic la -> Click
-
[REZOLVAT] [Intrebare] Salvare actiuni in baza de date
Leonard replied to equin0x's topic in Closed topics
Bun, sa incepem. Definim cateva THREAD-uri ca sa ne fie mai usor: #define THREAD_PLAYER_FPK 1 // define pentru FPK #define THREAD_PLAYER_UNINITE 2 // define pentru UNINITE #define THREAD_PLAYER_INVITE 3 // define pentru INVITE Definim numarul maxim de factiuni dupa server: #define MAX_FACTIONS (10) // define pentru numarul maxim de factiuni, aici il modifici pentru gamemode-ul tau. Declaram cateva variabile: new gQuery[ 256 ]; // o variabila globala de tip 'string' pentru a formata query-uri. new gString[ 512 ]; // o variabila globala de tip 'string' pentru a formata mesaje. new gName[ 32 ]; // o variabila globala de tip 'string' pentru a stoca numele unui jucator. Facem o variabila de tip array pentru a stoca numele factiunilor dupa server: new numeFactiune[ MAX_FACTIONS ][] = { // variabila de tip Array pentru a stoca numele factiunilor, aici la fel, treci numele factiunilor din gamemode-ul tau. {"nume factiune 1"}, {"nume factiune 2"}, {"nume factiune 3"}, {"nume factiune 4"}, {"nume factiune 5"}, {"nume factiune 6"}, {"nume factiune 7"}, {"nume factiune 8"}, {"nume factiune 9"}, {"nume factiune 10"} }; Facem un stock pentru a afla numele unui jucator: stock getPlayerName( playerid ) { // stock pentru a afla numele unui jucator GetPlayerName( playerid, gName, sizeof gName ); // functie pentru a afla numele unui jucator si al scota intr-o variabila. return gName; // returneaza numele aflat. } Facem un stock pentru a insera mai usor ceva in baza de date folosindu-ne de THREAD-urile definite si variabilele declarate mai sus: stock insertAction( playerid, userID, threadType ) { gQuery[ 0 ] = ( EOS ); // Marcheaza sfarsitul variabilei globale de tip 'string' pentru a formata query-uri. gString[ 0 ] = ( EOS ); // Marcheaza sfarsitul variabilei globale de tip 'string' pentru a formata mesaje. switch( threadType ) { case THREAD_PLAYER_FPK: { format( gString, sizeof gString, "Jucatorul %s a fost scos din factiunea %s de catre Administratorul %s.", getPlayerName( userID ), numeFactiune[ PlayerInfo[ userID ][ pMember ] ], getPlayerName( playerid ) ); // formateaza mesajul mysql_format( SQL, gQuery, sizeof gQuery, "INSERT INTO `server_faction_logs` (`Text`) VALUES ('%s')", gString ); // formateaza interogarea mysql_tquery( SQL, gQuery, "", "" ); // trimite interogarea } case THREAD_PLAYER_UNINITE: { format( gString, sizeof gString, "Jucatorul %s a fost scos din factiunea %s de catre lider-ul acesteia %s.", getPlayerName( userID ), numeFactiune[ PlayerInfo[ userID ][ pMember ] ], getPlayerName( playerid ) ); // formateaza mesajul mysql_format( SQL, gQuery, sizeof gQuery, "INSERT INTO `server_faction_logs` (`Text`) VALUES ('%s')", gString ); // formateaza interogarea mysql_tquery( SQL, gQuery, "", "" ); // trimite interogarea } case THREAD_PLAYER_INVITE: { format( gString, sizeof gString, "Jucatorul %s a fost scos invitat factiunea %s de catre lider-ul acesteia %s.", getPlayerName( userID ), numeFactiune[ PlayerInfo[ userID ][ pMember ] ], getPlayerName( playerid ) ); // formateaza mesajul mysql_format( SQL, gQuery, sizeof gQuery, "INSERT INTO `server_faction_logs` (`Text`) VALUES ('%s')", gString ); // formateaza interogarea mysql_tquery( SQL, gQuery, "", "" ); // trimite interogarea } } return true; // returneaza adevarat. } Iar la o comanda procedam astfel: Daca e vorba de 'invite' ne folosim de THREAD-uri corespunzator: insertAction( playerid, id jucator, THREAD_PLAYER_INVITE ); *** Informatii In baza de date faci urmatoarea chestie: * Te duci la baza de date a gamemode-ului, dai pe 'SQL', dupa introduci urmatorul cod in acea casuta si dupa dai 'Executa'. * Imagine: https://i.imgur.com/nQZpiKM.png (!) ATENTIE (!) ** Data si ora se insereaza automat in baza de date. Sper ca ai inteles ce ai de facut. -
Incearca: if( PlayerInfo[ playerid ][ pTruckerLic ] > 1 && !isTruck( GetPlayerVehicleID( playerid ) ) ) { SCM( playerid, COLOR_GREY, "Nu ai licenta de tirist." ); SlapPlayer( playerid ); TogglePlayerControllable( playerid, 1 ); SetTimerEx( "UnFreezeStation", 500, 0, "i", playerid ); } }
-
Problema a fost rezolvată. Topicul a fost închis!
-
Formatezi un mesaj si il inserezi in baza de date. new string[ 128 ], query[ 128 ]; // variabile pt mesaj si interogare. format( string, sizeof string, "aici vine mesaju" ); // mesaj formatat format( query, sizeof query, "INSERT INTO `staff_logs` (`Text`) VALUES ('%s')", string ); // interogare formatata mysql_tquery( SQL, query ); // interogare De aici te descurci si singur.
-
Nu mai e nevoie, poftim: function isTruck( carID ) { switch( GetVehicleModel( carID ) ) { case 403, 514, 515: return true; } return false; } if( PlayerInfo[ playerid ][ pTruckerLic ] > 1 ) { if( isTruck( GetPlayerVehicleID( playerid ) ) ) continue; else { SCM( playerid, COLOR_GREY, "Nu ai licenta de tirist." ); SlapPlayer( playerid ); TogglePlayerControllable( playerid, 1 ); SetTimerEx( "UnFreezeStation", 500, 0, "i", playerid ); } }
-
Pai arata-ne functia IsATruck ca sa vedem
-
Problema a fost rezolvată. Topicul a fost închis!
-
Problema a fost rezolvată. Topicul a fost închis!
-
Problema a fost rezolvată. Topicul a fost închis!
-
Panel-ul in sine e un bug.
-
Problema a fost rezolvată. Topicul a fost închis!
-
De ce include-uri ai nevoie?
-
function IsABike2(vehicleid) { switch (GetVehicleModel(vehicleid)) { case 448, 461, 462, 463, 468, 471, 481, 509, 510, 521, 523, 568, 571, 581, 586: return 1; } return 0; } function CheckGas() { new engine, lights, alarm, doors, bonnet, boot, objective; foreach(new i : Player) { if(GetPlayerState(i) == PLAYER_STATE_DRIVER) { new vehicle = GetPlayerVehicleID(i), query[128]; if(Gas[vehicle] >= 1) { if(vehEngine[vehicle] == 1) { if(IsAPlane(vehicle) || IsABoat(vehicle) || IsABike2(vehicle) || ExamCar[i] == vehicle || JobVehicle[i] == vehicle) { Gas[vehicle]++; } if(!IsPlayerPaused(i)) Gas[vehicle]--; new carid = FindSpawnID(vehicle); if(CarInfo[carid][cID] != -2 && carid != 0) { new spe = Carspeed(i); if(spe > 5 && GetPlayerState(i) == PLAYER_STATE_DRIVER && GetPlayerVehicleID(i) == vehicle && !IsPlayerPaused(i)) { CarInfo[carid][KM] += (spe * 0.27) / 100; mysql_format(SQL, query, sizeof query, "UPDATE `server_players_cars` SET `KM` = '%f' WHERE `ID` = '%d'", CarInfo[carid][KM], carid); mysql_tquery(SQL, query, "", ""); } } } } else if(!IsAFLYCar(vehicle)) { NoFuel[i] = 1; TogglePlayerControllable(i, 0); GameTextForPlayer(i, "Fara benzina", 1500, 3); vehEngine[vehicle] = 0; GetVehicleParamsEx(vehicle, engine, lights, alarm, doors, bonnet, boot, objective); SetVehicleParamsEx(vehicle, VEHICLE_PARAMS_OFF, lights, alarm, doors, bonnet, boot, objective); SetPVarInt(i, "Engine", 0); } } } return 1; } Il updatezi si tu pt gm ul tau.
-
poate @@keNN. ?
-
SA:MP | Newsman Job - Asemanator ruby nephrite.
Leonard replied to Dani3l.'s topic in Proiecte în dezvoltare
iao ca nai maneaua -
Probabil ai redenumit functia OnPlayerLogin, in burned-ul original asa se numeste functia.
-
Din cate vad eu, parolele pe care le 'dehashureaza' panel-ul sunt 'hashurate' in Whrilpool, nu in MD5 cum este pe burned. Descarca plugin-ul Whrilpool de aici: Click Dupa ce l-ai descarcat, il bagi in 'my folder -> plugins'. Dupa ce ai facut asta, adaugi in server.cfg -> plugins -> whirlpool Dupa, in gamemode declari native-ul pentru Whirlpool undeva la inceputul gamemode-ului: native WP_Hash(buffer[], len, const str[]); Pentru inceput, du-te la Dialogul: case DIALOG_LOGIN2: Si acolo o sa ai: case DIALOG_LOGIN2: { if(!response) return Kick(playerid); if(strlen(inputtext)) { new tmppass[64]; mysql_real_escape_string(inputtext, tmppass); OnPlayerLogin(playerid,MD5_Hash(tmppass)); } Si inlocui codu de acolo cu: case DIALOG_LOGIN2: { if(!response) return Kick(playerid); if(strlen(inputtext)) { new tmppass[64]; WP_Hash(tmppass, sizeof tmppass, inputtext); OnPlayerLogin(playerid, tmppass); } Dupa ce ai facut asta, trecem mai departe la dialog-ul: case DIALOG_LOGIN3: { if(!response) return Kick(playerid); if(strlen(inputtext)) { new tmppass[64]; mysql_real_escape_string(inputtext, tmppass); OnPlayerLogin(playerid,MD5_Hash(tmppass)); } Unde procedam la fel ca la primul dialog: case DIALOG_LOGIN3: { if(!response) return Kick(playerid); if(strlen(inputtext)) { new tmppass[64]; WP_Hash(tmppass, sizeof tmppass, inputtext); OnPlayerLogin(playerid, tmppass); } Si la ultimul dialog: case DIALOG_LOGIN1: { if(strlen(inputtext) >= 6 && strlen(inputtext) <= 30) { new tmppass[64]; mysql_real_escape_string(inputtext, tmppass); OnPlayerRegister(playerid,MD5_Hash(tmppass)); } Facem la fel ca la celelalte: case DIALOG_LOGIN1: { if(strlen(inputtext) >= 6 && strlen(inputtext) <= 30) { new tmppass[64]; WP_Hash(tmppass, sizeof tmppass, inputtext); OnPlayerLogin(playerid, tmppass); } La dialogul asta la fel: case DIALOG_NEWPASS: { if(!response) return 1; if(strcmp(MD5_Hash(inputtext), PlayerInfo[playerid][pKey])) { SCM(playerid, COLOR_WARNING, "Parola invalida!"); return 1; } ShowPlayerDialog(playerid, DIALOG_NEWPASS1,DIALOG_STYLE_INPUT, "Change password","Scrie mai jos noua parola pe care vrei s-o ai.","Ok","Close"); } Il modifici in: case DIALOG_NEWPASS: { if(!response) return 1; new tmppass[64]; WP_Hash(tmppass, sizeof tmppass, inputtext); if(strcmp(MD5_Hash(tmppass), PlayerInfo[playerid][pKey])) { SCM(playerid, COLOR_WARNING, "Parola invalida!"); return 1; } ShowPlayerDialog(playerid, DIALOG_NEWPASS1,DIALOG_STYLE_INPUT, "Change password","Scrie mai jos noua parola pe care vrei s-o ai.","Ok","Close"); } si la asta la fel, din: case DIALOG_NEWPASS1: { if(!response) return 1; new length = strlen(inputtext); if(length == 0 || length > 15) return ShowPlayerDialog(playerid, DIALOG_NEWPASS1,DIALOG_STYLE_INPUT, "Change password","Scrie mai jos noua parola pe care vrei s-o ai.","Ok","Close"); if(strlen(inputtext) > 1 && strlen(inputtext) < 16) { new emailtext[64]; mysql_real_escape_string(inputtext, emailtext); format(PlayerInfo[playerid][pKey], 50, MD5_Hash(emailtext)); new str1[512]; format(str1,512,"UPDATE users SET `password`='%s' WHERE `ID`='%d'",PlayerInfo[playerid][pKey],PlayerInfo[playerid][pSQLID]); mysql_query(SQL,str1); format(string, sizeof(string), "Noua ta parola este %s.", inputtext); ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "New password", string, "Ok", ""); format(string, sizeof(string), "Ti-ai schimbat parola!"); SendClientMessage(playerid, COLOR_YELLOW,string); } else ShowPlayerDialog(playerid, DIALOG_NEWPASS1,DIALOG_STYLE_INPUT, "Schimba parola:","Scrie parola pe care vrei s-o ai.","Ok","Iesi"); } in: case DIALOG_NEWPASS1: { if(!response) return 1; new length = strlen(inputtext); if(length == 0 || length > 15) return ShowPlayerDialog(playerid, DIALOG_NEWPASS1,DIALOG_STYLE_INPUT, "Change password","Scrie mai jos noua parola pe care vrei s-o ai.","Ok","Close"); if(strlen(inputtext) > 1 && strlen(inputtext) < 16) { new tmppass[64]; mysql_real_escape_string(inputtext, tmppass); WP_Hash(tmppass, sizeof tmppass, inputtext); format(PlayerInfo[playerid][pKey], 50, tmppass); new str1[512]; format(str1,512,"UPDATE users SET `password`='%s' WHERE `ID`='%d'",PlayerInfo[playerid][pKey],PlayerInfo[playerid][pSQLID]); mysql_query(SQL,str1); format(string, sizeof(string), "Noua ta parola este %s.", inputtext); ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "New password", string, "Ok", ""); format(string, sizeof(string), "Ti-ai schimbat parola!"); SendClientMessage(playerid, COLOR_YELLOW,string); } else ShowPlayerDialog(playerid, DIALOG_NEWPASS1,DIALOG_STYLE_INPUT, "Schimba parola:","Scrie parola pe care vrei s-o ai.","Ok","Iesi"); } Si cam atat, sistemu de securitate ramane pe MD5 deoarece este mai ok, sper ca ai inteles.
-
Arata-mi codul de login de la panel, sa vad exact in ce e 'hashurata' parola.
-
In 2018 se poate face asta, poti ajunge undeva la 2 147 483 647 000 000 000. Include: http://forum.sa-mp.com/showthread.php?t=598933
-
[REZOLVAT] Cum pot sa pun o melodie la login and register ?
Leonard replied to AdyHD's topic in Closed topics
Cred ca si-a dat si el seama asta.
ABOUT LEAKS COMMUNITY
LEAKS.RO is a resource community where aspiring webmasters can share content and receive support for a wide variety of software platforms — no license required.