Jump to content

Banditul

Moderator
  • Posts

    1,134
  • Joined

  • Last visited

  • Days Won

    96

Posts posted by Banditul

  1. Ceea ce cauti tu nu se numeste criptare, ci hasurare pentru ca la criptare vei avea nevoie de o parola in plus doar pentru a decripta in schimb la hashurare este in inclus direct in string rezultat

    Ai probleme cu cel actual sau doresti sa implementezi acest sistem? Daca ai probleme cu cel actual doar specifica ce anume nu merge si ce erori intampini

    Daca vrei sa implementezi unul iti recomand bcrypt https://github.com/lassir/bcrypt-samp

    #include <a_samp>
    #include <bcrypt>
    
    #define BCRYPT_COST 12
    
    forward OnPasswordHashed(playerid);
    forward OnPasswordChecked(playerid);
     
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
        switch(dialogid)
        {
            case DIALOG_REGISTRATION:
            {
    			bcrypt_hash(inputtext, BCRYPT_COST, "OnPasswordHashed", "d", playerid);
            }
    
            case DIALOG_LOGIN:
            {
                // Variable hash is expected to contain the hash loaded from the database
                bcrypt_check(inputtext, hash,  "OnPasswordChecked", "d", playerid);
            }
        }
    
        return 1;
    }
    
    public OnPasswordHashed(playerid)
    {
    	new hash[BCRYPT_HASH_LENGTH];
    	bcrypt_get_hash(hash);
    	
    	printf("Password hashed for player %d: %s", playerid, hash);
    	return 1;
    }
    
    public OnPasswordChecked(playerid)
    {
    	new bool:match = bcrypt_is_equal();
    	
    	printf("Password checked for %d: %s", (match) ? ("Match") : ("No match"));
    	return 1;
    }

    Acest cod l-am luat direct din exemplul oferit in link acela de la bcrypt. Esssential ce ar trebui sa faci la DIALOG_LOGIN este sa extragi parola curenta din baza de date inainte sa chemi bcrypt_check astfel incat sa se poate verifica si eventual la register sa inserezi/actualizezi parola playerului care tocmai ce si-a facut la OnPasswordHashed astfel incat sa ai parola hashurata

  2. Citat

    public OnPlayerText (playerid=101, text[]=@028be5fc "flood_by_hpq<3")

    Citat

    [14:07:51] [debug] Run time error 4: "Array index out of bounds"
    [14:07:51] [debug]  Accessing element at index 101 past array upper bound 100

    Cel mai probabil ai mai multe sloturi de 100 si cel mai probabil undeva la OnPlayerText (sau ceva ce face hook la callback) foloseste un array pentru playeri care nu a fost actualizat cum trebuie cu marimea necesara serverului. Ti-as recomanda sa folosesti MAX_PLAYERS pentru astfel de array care se foloseste pentru playeri astfel incat doar sa redefinesti valoarea MAX_PLAYERS cu valoarea de sloturi disponibile

  3. Da. Din pacate in mometul in care lipsesc acolade sau alte lucruri de genul conpilatorul este pe principiu

    "Nu e treaba mea, te descurci"

    Acum nu stiu sigur daca compilatorul actualizat de comunitate (acel zeex compiler) renunta la acest atact asupra vieti lui asa usor.

    Da, chiar ti-as recomanda un text editor ca notepad++/sublime text/visual studio code unde,crede-ma FOARTE folositor, iti aliniaza el codul in momentul in care pui { si incepi sa scrii ce ai de scris(daca e vorba de cod nou) sau chiar te ajuta sa vezi ce acolada corespunde cu ce acolada si sa vezi ce lipseste.  Te poate ajuta enorm un astfel de editor fata de pawno doar pentru ca esti mai productiv si comiti mai putine greseli de genul

  4. Citat

    mysql_fetch_field_row(result,"BReason"); strmid(PlayerInfo[playerid][pBReason], result, 0, strlen(result), 255);

    Daca te referi la faptul ca  imediat dupa parametrul result apare 0 nu are nici o legatura

    https://open.mp/docs/scripting/functions/strmid#!

    In functia strmid acolo unde se afla 0 este de fapt pozitia de start de unde sa inceapa sa extraga caractere si 0 inseamna de la inceputul stringului

    Si  nu, nu va afecta cu aabsolut nimic daca o setezi 0

    Citat

    `ShowCeas` int(10) NOT NULL DEFAULT 1,

    ShowCeas are valoarea 1 default (implicit) deoarece pur si simplu asta este logica scriptului. Cand un player nou isi face cont pe server scriptul doreste sa ii arate ceasul ca si setare de inceput (presupunand ca asta afecteaza valoarea)

    Metaforic:

    Sa zicem ca la Money se afla valoarea default setat 1000 asta inseamna ca orice nou jucator inserat in baza de date va avea mereu 1000 bani pentru ca asta gm/serverul respectiv doreste ca si setare de inceput pentru toti jucatori noi

  5. Chiar daca setezi 0 sau setezi gen Fara Ban sau orice alta valoare intodeuna va fi string. Presupunand faptul ca valoarea va fi afisata doar cand x are ban conditie pe care probabil o va indeplini doar daca primeste ban din script sau de la un admin deja valoarea initiala de la BReason va fi deja suprascrisa de o valoare gen A folosit cheats sau whatever

    Deci pe scurt ii poti oferi orice valoare doresti sincer, atat timp cat se intampla ca si presupunerea de mai sus. In principiu aceste valori default din baza de date date trebuie sa reflecte valorile default din gm (daca desigur sunt setate si in script)

  6. Problema e in felul urmatorul. Daca la nici una din coloane nu ai setat o valaore la DEFAULT si nu faci INSERT incluzand si coloana cu valoarea sa, iti va returna aceasta eroare legata de

    Citat

    Error ID: 1364, Eroare: Field 'nume coloana' doesn't have a default value

    Sfatul meu este, sa atasezi la toate o valoare default daca nu ai in plan sa o faci prin INSERT (in functie de ce e necesar) sau sa introduci o valoare prin INSERT

  7. In general faptul ca este 0kb inseamna ca a fost o eroare la compilare si compilarea a esuat(sau pur si simplu a esuat compilarea)

    Ti-as recomanda sa folosesti https://github.com/pawn-lang/compiler/releases (3.10.8 eventual daca nu vrei sa fi speriat de warning legate de const desi recomand ultima versiune). Descarci si pui ce se afla in bin in folderul pawno si dupa dai compile si adauga si acest fisier pawn.cfg tot in acelasi folder ca sa nu ai anumite erori

    pawn.cfg

  8. Username-ul tau de la baza de date nu ii este permis sa se conecteze remote serverul respectiv unde se afla baza de date respectiva. Ti-as recomanda sa revizuiesti inca o data datele pe care le primesti pentru conectare, este posibil sa fi nevoit sa folosesti spre exemplu localhost/127.0.0.1 in loc de un alt ip avand acces doar din localhost.

    Poti citi asta pentru putin mai multe informatii: https://www.tecmint.com/fix-error-1130-hy000-host-not-allowed-to-connect-mysql/ desi nu poti aplica ce se afla in topic pentru ca nu vei avea acces la acele detalii

    In cel mai rau caz va fi nevoie sa le trimiti un ticket

  9. Oh well, verificand topicurile mai vechi de pe forum (la care am mai raspusn si eu) ori este lipsa de main (care nu e cazul tau) sau legat de faptul ca pluginurile si includeurile acestora nu sunt actualizate. Aparent la cel putin doua persoane dupa actualizarea lor le-a mers

    Eventual ma gandesc la: streamer/crashdetect(daca folsoesti) si altele (nu as actualiza totusi plugin de mysql in cazul in care gm e mai vechi, e posibil sa fie destul de mult de munca)

    • Thanks 1
  10. Asta nu ar trebui sa se intample pentru ca ai

    Citat

    if(id == INVALID_PLAYER_ID)return SCM(playerid, COLOR_LIGHTRED, "ID sau nume incorect !");

    Care iti verifica primul parametru si daca e invalid adica nu ai introdus nimic) pur si simplu nu se executa. (asta daca ai un space intre ) si return )

    Ti-as recomanda sa folosesti unltima versiunea de sscanf

    https://github.com/maddinat0r/sscanf/releases/tag/v2.8.3

    Descarca versiunea de win32, pune fisierul din folderul pawno>include sscanf2.inc si inlocuieste pe cel existent in folderul cu acelasi nume dingm tau. De asemea poti face cu plugin si sa inlocuiesti cu ce ai tu in folderul din gm

    Este posibil sa ai o versiune mai veche care are aumite buguri

    • Like 2
  11. Nu se vede deoarece e posibil sa nu ai nici un fel de data incarcata in fvsVariables

    Chestia aia se numeste query si nu il bagi in database ci o folosesti in script, presupun ca trebuie folosit in OnGameModeInit

    public OnGameModeInit()
    {
    	// Cod aici
    	mysql_tquery(handle, "SELECT * FROM `server_fvs` ORDER BY `server_fvs`.`fvsID` ASC", "LoadServerFvs", "");
    	// Alt cod aici
    }
    
    LoadServerFvs()
    {
    	// Aici codul pentru incarcarea datelor in variabilele tale
    }
    

    Daca ai copiat din alt script, ti-as sugera sa cauti acest cod de incarcare in acel script

  12. Citat

    Linia (14256)   new string[128];

    Inseamna ca ai un alt new string la un nivel mai sus, adica in exteriorul else if-ului else if(CP[playerid] == 100000). Solutie denumeste altfel acest new string la care e warning

    Citat

    Linia ( (20609)GetPlayerPos(playerid, X, Y, Z);

    X Y si Z trebuie sa fie float adica

    new Float:X, Float:Y, Float:Z;

    Pentru ca functia respectiva asteapta float nu integer ca si parametru

    Citat

    warning 203: symbol is never used: "Insta"

    warning 203: symbol is never used: "instac"

    Asta inseamna ca cele doua simboluri cum le numeste compilatorul nu sunt folosite. Adica undeva in scriptul tau posibil exista aceste doua variabile globale new insta si new instac sauuuu cele doua sunt de fapt functi si nu sunt folosite nicaieri in cod

    • Thanks 1
×
×
  • 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.