Jump to content

Sinner.PWN

Membru
  • Posts

    239
  • Joined

  • Last visited

  • Days Won

    7

Everything posted by Sinner.PWN

  1. Nu e mai rapid decat variabila dar e mai util in business-uri si case acolo unde le folosesti foarte rar Hai explica-mi te rog de ce ar trebui sa stau sa imi triplez liniile de cod in loc sa folosesc un stock si tac.
  2. Pentru cultura ta generala un stock iti face viata mai usoara dar de unde sa stii tu asa ceva...GM-ul meu are toate sistemele dinamice bazate pe gvar si un stock ca cel al lui @Spmn ma scuteste de cateva sute de linii de cod Daca 3 oameni iti spun ca ai gresit eu cred ca ar trebui sa te potolesti. Ai vazut @Spmn ca degeaba faci stock-uri? Nici nu stiu de ce le-ai mai facut. Oricum respect din partea mea si a lui stuntman
  3. @Spmn am pus tag-ul MySQL pentru ca asa sunt definite in R40, fara tag imi da warning peste tot deoarece acum vine new MySQL:g_Handle; si am scos valoarea implicita pentru ca nu imi da voie sa o folosesc de cand cu noul tag. Cat despre public l-am facut asa pentru ca am eu un fix cu returnarea valorilor float. Eu mi-am facut functiile dupa ideea ta si dupa necesitatile mele Daca tu ai facut asa nu inseamna ca trebuie sa fac si eu la fel nu? @Mister ai probleme de comportament? Faci pe dracu' in patru doar ca sa te scremi sa ai dreptate atunci cand nu ai? Spmn stie ce zice acolo si R40 functioneaza asa cum zice el. Daca tu ti-ai facut GM-ul in R40 cu new value = inseamna ca nu prea ai ce cauta ca moderator pe aceasta sectiune fara suparare.
  4. Si tu faci asta cu CTRL+H nu? Si ti-e mai usor sa faci asta la 100 de variabile decat sa folosesti un stock, am ras. *de fapt
  5. Sa-ti ofere @s4uriK suport pentru acest GM.
  6. Transforma urmatoarea chestie cu ctrl+h: playerVariables[ playerid ][ pGasCan ] = cache_get_field_content_int( i, "playerGasCan", g_Handle ); // Sau asta: cachet_get_data( Rows, Fields, g_Handle ); // In asta: cache_get_row_count( Rows ); cache_get_field_count( Fields ); Se pare ca n-ai trecut cu privirea deloc prin R40 daca zici ca e usor sa treci in R40 cu CTRL+H.
  7. Sincer si eu le folosesc pentru ca nu am timp sa rescriu 200 linii de cod. Daca iti faci viata mai usoara nu inseamna ca nu inveti functiile. Le-am analizat foarte bine si le stiu doar ca imi vine mai usor asa.
  8. Pentru a va face mai usoara trecerea de la versiunea R33+ la R40 a plugin-ului MySQL creat de BlueG si continuat de maddinat0r va voi ajuta cu doua "functii" relativ simple dar foarte utile pentru a evita rescrierea in totalitate a liniilor de cod. Pentru valorile intregi vom folosi urmatorul stock: stock cache_get_field_content_int(row, field_name[], MySQL:connectionHandle ) // Vechea forma din R33+ { #pragma unused connectionHandle // Ignoram connectionHandle care este folosit in prezent new retval = cellmin; // Dam aceasta valoare in caz de eroare. cache_get_value_name_int(row, field_name, retval); // Folosim aici noua functie din R40 si stocam valoarea in variabila "retval" return retval; // Returnam valoarea din baza de date } Pentru valorile float vom folosi urmatoarea functie: #define function%0(%1) \ forward%0(%1); public%0(%1) // Ne folosim de acest define pentru a evita crearea unui forward pentru fiecare public necesar. function Float:cache_get_field_content_float(row, field_name[], MySQL:connectionHandle ) // Vechea forma din R33+ { #pragma unused connectionHandle // La fel ca in stock-ul de mai sus new Float:retval = cellmin; // Aici singura diferenta este valoarea definita ca Float cache_get_value_name_float(row, field_name, retval); // La fel ca in stock-ul de mai sus return retval; // La fel ca in stock-ul de mai sus } Pentru alte nelamuriri si informatii nu ezitati sa postati aici. Aceste functii sunt create cu ajutorul lui Spmn.
  9. Nu vreau sa fiu rau da asa patesti cand nu e GM-ul tau...Ce-i facut de la 0 si de manutele tale e sfant.
  10. Este un cod original din calculatorul meu. Daca ai avea idee cum sa-l folosesti ar fi aur pentru tine.
  11. Trebuie urmarit cu atentie comportamentul ID-urilor deoarece atata timp cat tu ai sa dai destroy la o masina, urmatoarea creata va avea ca ID cel mai mic ID disponibil de la alta masina care a fost in trecut creata si in prezent distrusa. Eu spre exemplu am un simplu load cu gvar a masinilor ce apartin de factiune si provin din baza de date dupa care 10 biciclete care nu sunt stocate in niciun fel, is libere pentru ca mereu vor avea intervalul de ID-uri 220-230. Ei bine cand vine vorba de masini la mine sunt pe variabilele facute pe slot-uri si ma asigur ca dupa fiecare destroy ii dau si un = INVALID_VEHICLE_ID; pentru a fi sigur ca am anulat variabila respectiva. La job-uri am venit cu ideea de a crea masina doar cand ai nevoie de ea si anume cand dai /work pentru a nu avea masini aiurea spawnate care oricum nu vor fi destule niciodata. In fine poate n-ai sa citesti tot ce ti-am scris mai sus dar iti recomand sa rescreii cat de cat codul si sa bagi mult DEBUG pentru a vedea ce si cum se intampla cu masinile.
  12. Callback-ul el mai indicat aici este OnPlayerStateChange si verifici daca newstate == on foot si oldstate == driver pentru a evita cazurile in care esti teleportat de un admin sau primesti spawn si OnPlayerExitVehicle nu va fi apelat. Baieti nu va zic cu rautate dar daca tot il ajutati cu ceva invatati-l asa cum trebuie ca sa nu vina iar cu probleme pe server...Ca o completare vezi ca daca ai animatia de la /pee activa cand dai pe /startwork o sa te dea pe langa masina si poti pleca linistit sa-ti faci job-ul cu masina personala
  13. // Pui acest stock in Gamemode. stock SendLanguageMessage( playerid, textColor, textEngleza[], textRomana[] ) { switch( PlayerInfo[ playerid ][ pLanguage ] ) { case 1: SendClientMessage( playerid, textColor, textEngleza ); case 2: SendClientMessage( playerid, textColor, textRomana ); } return true; } // Cand o folosesti faci ceva de genul: SendLanguageMessage( playerid, COLOR_RED, "Hello m8!", "Salut tovarase!" );
  14. Incearca sa le distrugi cand iese jucatorul de pe server ca sa nu se mai ameteasca intre ele.
  15. Pune restrictie pe zilele 2, 4, 6.
  16. Arata-ne functia GetWeekDay
  17. Asa cum a zis si HONNOR mai sus incearca sa scoti din timere daca vrei sa faci ceva ok...Poti incerca cu gettime() sau simplu faci un timer general in care folosesti ceva de genul: if( playerVariables[ i ][ pNMuted ] != 0 ) { playerVariables[ i ][ pNMuted ]--; if( playerVariables[ i ][ pNMuted ] == 0 ) SendClientMessage( i, ~1, "Your mute for /n has been removed by Server!" ); }
  18. Nu putem sa te ajutam daca nu ne dai si variabilele tale ca sa stim cum se stocheaza liderii, membrii sau alte minunatii. Iti las mai jos un exemplu de /factions asa cum am eu. SQL_Function ShowFactionsDialog( playerid ) { new X, Rows, Fields; cache_get_data( Rows, Fields, g_Handle ); gsBigString[ 0 ] = EOS; for( new i = 0; i < Rows; i++ ) { X = cache_get_field_content_int( i, "factionKey", g_Handle ); SetGVarInt( "faction_Applications", cache_get_field_content_int( i, "factionApplications", g_Handle ), X ); SetGVarInt( "faction_Members", cache_get_field_content_int( i, "factionMembers", g_Handle ), X ); SetGVarInt( "faction_Slots", cache_get_field_content_int( i, "factionSlots", g_Handle ), X ); } gsString[ 0 ] = EOS; format( gsString, sizeof gsString, "Nume Factiune\tMembri\tSloturi\tAplicatii\n" ); foreach( ServerFactions, f ) { new fStatus[ 32 ]; fStatus = ( GetGVarInt( "faction_Applications", f ) ) ? ("{7CFC00}Deschise") : ("{ec2913}Inchise" ); format( gsString, sizeof(gsString),"%s%s\t%d\t%d\t%s"COL_W"\n", gsString, GetGVarStringEx( "faction_Name", f ), GetGVarInt( "faction_Members", f ), GetGVarInt( "faction_Slots", f ), fStatus ); } ShowPlayerDialog( playerid, DIALOG_FACTIONS, DIALOG_STYLE_TABLIST_HEADERS, "Server: Factions", gsString, "FindHQ", "Cancel" ); return true; }
  19. Cam slabut TICK. In rest arata binisor, sper sa-l vinzi.
  20. Imi cer scuze daca am fost arogant sau am jignit aiurea. Am fost indus in eroare deoarece ai dat quote la codul meu de mai sus si ai scris " Asta te scapă doar de Flood, dar de sql inject nu." Eu ce sa inteleg? Am crezut ca ai zis de codul meu ca e pentru flood.
  21. Eu i-am dat solutia baiatului de mai sus. Daca tu zici ca ce i-am dat eu acolo e solutie pentru "flood" inseamna ca sunt eu prost rau de tot. Intr-adevar nu ii asigura protectie impotriva a SQL Inject-ului dar bat la pariu ca nici nu o sa i se faca prin dialogurile alea pentru ca in ultimele versiuni de plugin sunt stopate automat tentativele si n-au efect. Important e sa scoti semnele: ' si ; nu ` pentru ca poti face si table_name nu doar `table_name` Ai mai jos o lista cu caractere care sunt capabile de SQL Injection. Daca am jignit tin sa-mi cer scuze new len = strlen( inputtext ); for( new i = 0; i < len; ++i ) { if( inputtext [ i ] == '%' || inputtext [ i ] == ';' || inputtext [ i ] == '`' || inputtext [ i ] == '/' || inputtext [ i ] == '\' ) inputtext [ i ] = '#'; } \0 An ASCII NUL (0x00) character. \' A single quote (“'”) character. \" A double quote (“"”) character. \b A backspace character. \n A newline (linefeed) character. \r A carriage return character. \t A tab character. \Z ASCII 26 (Control-Z). See note following the table. \\ A backslash (“\”) character. \% A “%” character. See note following the table. \_ A “_” character. See note following the table.
  22. Da-mi un PM sa-ti arat proiectul meu daca esti interesat.
  23. Esti paralel daca ai scos asa porumbel pe gura. Analizeaza codul mai bine si ai sa vezi ca e pentru sql inject nu "flood"...
  24. new len = strlen( inputtext ); for( new i = 0; i < len; ++i ) { if( inputtext [ i ] == '%' ) inputtext [ i ] = '#'; } Foloseste asta cu incredere, e mai optimizata si da un randament mai bun.
×
×
  • 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.