Jump to content

Banditul

Moderator
  • Posts

    1,134
  • Joined

  • Last visited

  • Days Won

    96

Everything posted by Banditul

  1. https://github.com/pBlueG/SA-MP-MySQL/releases/tag/R34 Din ce vad eu ai nevoie de versiunea r34 in nici un caz versiuena r40+ cu toate ca un update la o versiune mai noua ar fi mai recomandat, in orice caz
  2. #define houseInterior Si cu asta ti-am spus toata problema Nu poti defini asa un Array 2D (din ce vad eu) si stiu sigur ca ai copiat-o de undeva doar ca ai ratat parti importante. Sau daca as l-ai cumparat, atunci imi pare rau dar ti-a dat putin de munca Si din pacate nu ma pot gandi cum ar putea fi scris acel array enum e_houseInterior{ Float:x, Float:y, Float:z }; houseInterior[MAX_HOUSES][e_houseInterior]; Ceva de genu din ce vad eu in codul tau Edit: Daca ma gandesc mai bine, acel enum poate sa fie array la randu lui care contine coordonatele interioarelor. Habar nu am Edit2: Acel houseInterior poate arata in asa multe moduri, ce ti-am dat poate sa fie deasemenea gresit
  3. Banditul

    BUG-Login

    Singura problema pe care eu personal o vad este la SetPlayerUnjail care este chemat la fiecare secunda si in cazul in care nu esti logat iti afiseaza dialogul de login. E singura logica pe care o vad, daca altcineva vede altceva....
  4. Banditul

    BUG-Login

    Niste informatii in plus ar fi fost mai bune, dispare dupa ce scrii parola bine? Dispare in timp ce o scrii? De asemenea, dispare dialogul sau doar scrisul? Posteaza codul de la dialogul login aici(daca ai folosi pastebin.com ar fi ok)
  5. Eroare se explica de la sine, ai creat un array 2D pe care nu l-ai umplut. I-ai promis ca ii vei da 59 de seturi de coordonate dar i-ai dat doar 2 Ai 2 solutii, ori lasi [][] si isi face singur dimensiunile in functie de ce bagi tu sau schimbi acel 59 in 2 ca sa respecti dimensiunea
  6. Mesajul il adaugi in if-u in care verifici engine, respectiv else-u lui
  7. Imi place ca doresti sa porneasca motorul dar nu ii spui niciodata sa il porneasca SetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective) Nu e de ajuns sa ii iei conditia si sa zici ca tmp_engine = 1, trebuie sa ii si transmiti ca e 1
  8. https://pastebin.com/NbDx4nYC Incearca asa. Si asa aprecia in acelasi timp daca cineva (prin pm sau aici) mi-ar explica la ce se refera asta https://pastebin.com/Dx4hxUvB pentru ca nu ma pot gandi la un motiv logic ca sa fie acolo
  9. Eu unu as paria pe cod contradictoriu la OnPlayerSpawn/OnPlayerClassSelection/SetPlayerSpawn sau orice ce alta functie care e legata de partea de spawn/respawn . Am vazut de curand in gm saints astfel de contradictie(nu cred ca are legatura dar sigur multe gm-uri au aceste contradicti)
  10. Nu intoarce nici un fel de mesaj? Incearca sa pui un printf inainte de if tuttime, unu in interiorul tuttime si unu inainte de return-ul de la sfarsit si vezi daca este unul din ele chemat
  11. YCMD:skip(playerid, params[], help) playerid - integer paams - string help - bool
  12. Prima stergi strcpy din gm tau fiind inclus in YSI Iar faza cu public OnPlayerLogin nu ai dat exact argumentele functiei, dar presupun ca nu seamana cu argumentele de la forward
  13. Si iti compileaza mai repede, fisierele pe care le descarci se baga in folderu pawno
  14. http://forum.sa-mp.com/showthread.php?t=598933 Sau http://forum.sa-mp.com/showthread.php?t=372994 Sau iti poti crea propriu sistem care se foloseste de string pentru a stoca numere si de a le calcula.(dificil)
  15. Se putea folosi un singur timer, iar ca si culoare se putea folosi functia random. Asa ieseai mai ieftin fara sa tot repeti o functie/timer pentru fiecare culoare Dar acum fiecare cum vrea sa il faca, nu dau in cap a fost doar o mica observatie
  16. Intrebarea e, ai introdus datele bazei de date corect sau ai lasat gol ca in tutorial? E o intrebare stupida dar e se cam intampla asta Edit: MySQL r40+ are locul parolei si numele bazei de date inversate fata de r39- . Nici o problema FDH_
  17. DisableInteriorEnterExits(); Pui la OnGamemodeInit
  18. Banditul

    T/C

    CMD:m(playerid, params[]) { return cmd_megaphone(playerid, params); } Daca transformi din YCMD in CMD nu e de ajuns sa schimbi numa acel CMD, trebuie sters si ultmu parametru adica help
  19. Banditul

    T/C

    Ai y_commands sau zcmd? Pentru ca din ce vad eu e zcmd format si nu ar trebui sa aibe parametrul de help
  20. Desigur. Iti datorez o explicatie mai ales ca ti-am dat codul gata facut. public MySQLCheckCar(carname[]) { new query[128]; new escstr[MAX_PLAYER_NAME]; mysql_real_escape_string(carname, escstr);//Asta e functia care face escape la string pentru nu lasa pe nimeni sa iti dea SQL Injection, dar in versiunile noi de MySQL a fost introdusa automat in mysql_format deci poate fie stearsa mysql_format(SQL, query, sizeof(query), "SELECT `ID` FROM stock WHERE `Car` = '%e'", escstr);//mysql_format il vei folosi pentru toate query(stiu ca nu e nevoie dar astfel vei stii care e format pt mysql si care nu) si are introdus un now specificator %e pentru stringuri care va face escape automat mysql_query(SQL,query); //Asta e funtia care trimite un query care va fi executat imediat(serverul se va opri pana se primeste raspuns de la baza de date) si care va crea un cache(memorie temporara) si vei folosi new Cache: cache = mysql_query pentru a putea sterge acea memorie temporara si a nu aglomera memoria hostului(daca nu va fi stearsa la un moment dat serverul va putea intra in insuficienta de memorie) mysql_store_result(); //ASta e o functie veche pentru a face acelasi lucru pe care il face new Cache: cache = mysql_query, deci este inutila in r40 deci va fi stearsa if (mysql_num_rows()==0)//Asta se explica de la sine, verifica daca a fost returnat sau nu un rezultat(se modifica cu cache_num_rows()) { mysql_free_result();//Acesta este functia care scapa de acea memorie temporara, dar acum stocam o referinta a acelei memori in variabila Cache: cache deci von folosi cache_delete(cache) return 0; } else { new strid[32]; new intid; mysql_fetch_row(strid);//Aceasa functie era folosita pentru a prelua rezultatu intors din baza de date si stocarea lui intr-un string apoi transformat intr-un integer, dara acum vei folosi direct cache_get_value_name_int(0, "ID", intid) care va prelua direct valoarea stocata in baza de date la ID si o va pune direct in variabila intid fara sa mai transforme nimic intid = strval(strid); mysql_free_result(); return intid; } } //Asta e echivalentul functie de mai sus(scrisa cat mai asemanatoare) public MySQLCheckCar(carname[]) { new query[128]; mysql_format(SQL, query, sizeof(query), "SELECT `ID` FROM stock WHERE `Car` = '%e'", carname); new Cache: cache = mysql_query(SQL,query); if (cache_num_rows() == 0) { cache_delete(cache); return 0; } else { new intid; cache_get_value_name_int(0, "ID", intid); cache_delete(cache); return intid; } } Stiu ca ce ti-am dat eu mai sus cu cateva reply-uri nu seamana cu ce ti-am dat acum dar acolo am incercat sa il fac cat mai compact si de inteles. Si sper sa intelegi, nu sunt prea bun la explicat dar incerc @AndreiB EDIT: Nu recomand sa lasi mysql_query la query de forma "UPDATE ETC ETC", recomand sa il transformi in mysql_tquery
  21. Esti sigur ca nu lipseste ; undeva mai sus de aia? Pentru ca nu e nimic gresit in poza
  22. public MySQLCheckCar(carname[]) { new query[90], Cache: result, id; mysql_format(SQL, query, sizeof(query), "SELECT `ID` FROM stock WHERE `Car` = '%e'", carname); result = mysql_query(SQL,query); if (!cache_num_rows()) id = 0; else cache_get_value_name_int(0, "ID", id); cache_delete(result); return id; } public MySQLCheckClan(sqlclanname[]) { new query[128], Cache: result, id; mysql_format(SQL, query, sizeof(query), "SELECT `ID` FROM users WHERE `ClanTag` = '%e'", sqlclanname); result = mysql_query(SQL,query); if (!cache_num_rows()) id = 0; else cache_get_value_name_int(0, "ID", id); cache_delete(result); return id; } public MySQLCheckAccount(sqlplayersname[]) { new query[128], Cache: result, id; mysql_format(SQL, query, sizeof(query), "SELECT `ID` FROM users WHERE `name` = '%e'", sqlplayersname); result = mysql_query(SQL,query); if (!cache_num_rows()) id = 0; else cache_get_value_name_int(0, "ID", id); cache_delete(result); return id; } Practic: mysql_free_result(); devine delete_cache(); (asta daca ai ai facut mysql_query in felul asta: new Cache: cache = mysql_query(...); //Fa chestie aici cu cache-u cache_delete(cache); mysql_store_result() e acea parte cu new Cache: cache mysql_num_rows() devine cache_num_rows() iar mysql_real_escape_string(); se poate introduce in mysql_format cu ajutorul %e in loc de %s (face automat escape la string)
  23. Este tot string deci va fi cu cache_get_value_name , cele cu strmid sunt stringuri
  24. Daca te astepti sa iti fac eu toate alea nu se va intampla, o sa iti dau un exemplu dar tu va trebui sa il continui pentru ca nu vei invata niciodata daca dai copy-paste public OnPlayerLogin(playerid,password[]) { new playername2[MAX_PLAYER_NAME]; GetPlayerName(playerid, playername2, sizeof(playername2)); new qstr[100]; new result[456]; mysql_formatformat(SQL, qstr,100,"SELECT * FROM users WHERE `name`='%s' AND `password`='%s'",playername2,password); new Cache: cache = mysql_query(SQL,qstr); if(cache_num_rows()) { cache_get_value_name(0, "password", PlayerInfo[playerid][pKey], 128); cache_get_value_name_int(0, "Level", PlayerInfo[playerid][pLevel]); cache_get_value_name_float(0, "pHealth", PlayerInfo[playerid][pHealth]); //Aici convertesti restu lucrurilor //Astea trebuie sterse, dar ti-am lasat exemplu de vechea functie vs noua functie(deasupra) mysql_fetch_field_row(result,"password"); format(PlayerInfo[playerid][pKey], 128, result); mysql_fetch_field_row(result,"Level"); PlayerInfo[playerid][pLevel] = strval( result ); mysql_fetch_field_row(result,"pHealth"); PlayerInfo[playerid][pHealth] = floatstr( result ); } cache_delete(cache); } Edit: Si foloseste acel wiki sa vezi cum e si ce face fiecare functie
  25. Asta e simplu tot ce trebuie sa faci este sa te uiti aici: http://wiki.sa-mp.com/wiki/MySQL si cauti functiile cu cache_get_value_name si vezi care ecum corespunde Dar ca sa te ajut iti zic direct //Asta este un string deci vei folosi cache_get_value_name mysql_fetch_field_row(result,"password"); format(PlayerInfo[playerid][pKey], 128, result); Cache_get_value_name(0, "password", PlayerInfo[playerid][pKey], 128); //Astea sunt integer deci vei folosi cache_get_value_name_int mysql_fetch_field_row(result,"Level"); PlayerInfo[playerid][pLevel] = strval( result ); mysql_fetch_field_row(result,"Admin"); PlayerInfo[playerid][pAdmin] = strval( result ); mysql_fetch_field_row(result,"Helper"); PlayerInfo[playerid][pHelper] = strval( result ); cache_get_value_name_int(0, "Level", PlayerInfo[playerid][pLevel]); cache_get_value_name_int(0, "Admin", PlayerInfo[playerid][pAdmin]); cache_get_value_name_int(0, "Helper", PlayerInfo[playerid][pHelper]); Iiti recomand sa te uiti peste acel link si sa vezi functiile Pentru float vei folosi cache_get_value_name_float
×
×
  • 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.