Jump to content

Sinner.PWN

Membru
  • Posts

    239
  • Joined

  • Last visited

  • Days Won

    7

Everything posted by Sinner.PWN

  1. Variabila asta: SelectatH[repid[playerid]][playerid]; nu e ok deloc, de acolo si problemele. De ce naiba folosesti de 2x playerid?
  2. Da cine se cearta? I-am dat un sfat despre cum sa scrie si el corect si se pare ca tot eu sunt analfabetul. Daca voi acceptati un astfel de limbaj intr-o comunitate "romaneasca" atunci imi pare rau.
  3. S-ar putea sa ajungi alcoolist la cate flood-uri se dau
  4. Ce pot sa zic, s-au trezit hackerii din voi mai ales Hurdok, scripterul minune. Mai mult de un DDOS nu va duce capul asa ca eu zic ca cei de pe sa-mp.ro sa stea cu o bere in mana si sa-l urmareasca pe asta cum face topic-uri ca flooadeaza din ora in ora P.S. @s4uriK injura-l corect macar sau nu-l mai judeca deloc ( dati*, aveti*, sunteti*, cautati* ) :*
  5. Ma bucur ca ai invatat sa scrii "du-te".
  6. Normal ca n-am vazut nicaieri asa ceva pentru ca in Romania exista foarte putini scripteri care au habar macar ca exista #emit sau au macar notiunea de "optimizare" imprimata pe creier. M-am mai certat si ieri cu un fraierica Saurik sau cum il mai cheama pe motiv ca a fostat un GM de tot kktul si el se bate cu pumnul in piept ca detine nu stiu ce comunitate si ca e scripter cunoscut.
  7. function ShowFormat_MSG(playerid, ms_time, text[], {Float, _}:...) { #define BYTES_PER_CELL 4 static const STATIC_ARGS = 3; new n = (numargs() - STATIC_ARGS) * BYTES_PER_CELL; if(n) { new arg_start, arg_end, buffer[256]; #emit CONST.alt text #emit LCTRL 5 #emit ADD #emit STOR.S.pri arg_start #emit LOAD.S.alt n #emit ADD #emit STOR.S.pri arg_end do { #emit LREF.S.pri arg_end #emit PUSH.pri arg_end -= BYTES_PER_CELL; } while (arg_end > arg_start); #emit PUSH.S text #emit PUSH.C 256 #emit PUSH.ADR buffer n += BYTES_PER_CELL * 3; #emit PUSH.S n #emit SYSREQ.C format n += BYTES_PER_CELL; #emit LCTRL 4 #emit LOAD.S.alt n #emit ADD #emit SCTRL 4 // Update the player's information textdraw with the custom buffer PlayerTextDrawSetString( playerid, PLAYER_TD[ 2 ], buffer ); } else { // Update the textdraw with the parameter input PlayerTextDrawSetString( playerid, PLAYER_TD[ 2 ], text ); } return true; }
  8. Folosit intr-o functie care o folosesti foarte des gen ceva care iti arata un text, un TD se arata a fi destul de util si benefic.
  9. Multumit? stock CalculatePaintballWinner( paintID ) { new stockVar[ 2 ]; foreach( Player, i ) if( playerVariables[ i ][ pPaintBall ] == paintID ) if( playerVariables[ i ][ pPaintBallKills ] > stockVar[ 0 ] ) stockVar[ 0 ] = playerVariables[ i ][ pPaintBallKills ], stockVar[ 1 ] = i; return stockVar[ 1 ]; }
  10. Pentru a calcula cel mai bun scor pentru o arena de Paintball de exemplu avem nevoie de un mic stock care ne va fi de mare ajutor asa ca vom incepe cu ce e mai usor: Definim functia noastra. PaintID pentru mine reprezinta Arena de paintball in care se desfasoara "lupta". ( puteti sa inlaturati aceasta verificare daca nu aveti nevoie de ea ). stock CalculatePaintballWinner( paintID ) Definim variabilele de care ne vom folosi pentru a compara rezultatul si pentru a returna ID-ul jucatorului. new paintScore = 0, bestID; Mai departe avem nevoie de #include "foreach" pentru un loop mai optimizat. (aceasta functie trece doar printre jucatorii conectati pe server) foreach( Player, i ) Pentru a determina cel mai bun jucator trebuie sa comparam Kill-urile acestuia cu variabila noastra de referinta si anume paintScore. Daca jucatorum are Kill-urile mai mari decat paintScore atunci el va figura ca fiind cel mai bun jucator. Variabila paintScore va fi egala cu numarul de kill-uri furnizate de jucatorul verificat. La urmatoarea verificare se va compara iar numarul de Kill-uri ale jucatorului cu noua valoare a variabilei paintScore. In acelasi timp daca se determina cea mai mare variabila stocam si ID-ul jucatorului cu ajutorul variabilei bestID pe care il vom returna la finalul functiei. if( playerVariables[ i ][ pPaintBallKills ] > paintScore ) { paintScore = playerVariables[ i ][ pPaintBallKills ]; bestID = i; } Ca finalizare va las mai jos intreaga functie. Sper ca am reusit sa va explic cat de cat pe intelesul vostru ce face si cum functioneaza. stock CalculatePaintballWinner( paintID ) { new paintScore = 0, bestID; foreach( Player, i ) if( playerVariables[ i ][ pPaintBall ] == paintID ) if( playerVariables[ i ][ pPaintBallKills ] > paintScore ) paintScore = playerVariables[ i ][ pPaintBallKills ], bestID = i; return bestID; }
  11. In primul rand nu se pune in veci '%d' pentru ca %d nu e string sa-l pui intre '' Puneti mana si pe un tutorial de MySQL inainte sa deveniti "scripteri".
  12. Am postat imaginea cu gandul ca o sa fie si oameni care sa inteleaga ce e ala un tick rate dar se pare ca doar 1 stie cu adevarat...
  13. Normal ca scad dar in functie de optimizare se determina si raportul cu care scade 1 tick / x players
  14. Nici macar functia nu arata asa valori indiferent de limite, se pare ca nici macar un tick corect nu-i afiseaza pe server. (6 jucatori - tick 196)
  15. Si care e aroganta ca nu-mi dau seama? Revin si cu un update cand sunt destui jucatori si astept sa facem o comparatie.
  16. Ca rezultat dupa 6 luni de munca intensa la un server de RPG facut de la 0 (stiu ca seamana cu bugg** dar asta se cere) am testat de curiozitate sa vad ce tick am si se vede optimizarea mea destul de bine aici.
  17. Si inca ma minunez ca esti moderator scripting... @star69 din cate vad functia ta returneaza niste float-uri mult prea mari asa ca vezi fa-ti debug si cauta sursa problemei. Un float maxim ar veni ceva de genul "1103.4492"... [debug] #0 0002d890 in ?? (-1004440722, -996053380, 3395424) from plm.amx
  18. Folosesti sscanf pentru a scoate ce vrei tu. Ai mai jos un exemplu de script pe care l-am facut la sistemul meu de masini personale. // ( Load Personal Cars ) Login_Field[ 0 ] = EOS; cache_get_field_content( i, "playerVehicleSlots", Login_Field, g_Handle ); sscanf( Login_Field, "p<:>ddddd", playerVariables[ playerid ][ Vehicle ][ 0 ], playerVariables[ playerid ][ Vehicle ][ 1 ], playerVariables[ playerid ][ Vehicle ][ 2 ], playerVariables[ playerid ][ Vehicle ][ 3 ], playerVariables[ playerid ][ Vehicle ][ 4 ] );
  19. stock SetPlayerFactionColor( playerid ) { switch( playerVariables[ playerid ][ pFaction ] ) { // Civilian case 0: SetPlayerColor( playerid, COLOR_WHITE ); // LVPD case 1: SetPlayerColor( playerid, 0x0064FF00 ); // Taxi LV case 2: SetPlayerColor( playerid, COLOR_YELLOW ); // Paramedic case 3: SetPlayerColor( playerid, 0xFF634700 ); // School Instructors case 4: SetPlayerColor( playerid, COLOR_SI ); // case 5: SetPlayerColor( playerid, 0x6A5ACD00 ); // case 6: SetPlayerColor( playerid, 0x7FFFD400 ); // case 7: SetPlayerColor( playerid, COLOR_RED ); // case 8: SetPlayerColor( playerid, 0xA52A2A00 ); // LSPD case 9: SetPlayerColor( playerid, 0x0064FF00 ); // Taxi LS case 10: SetPlayerColor( playerid, COLOR_YELLOW ); // Grove case 11: SetPlayerColor( playerid, COLOR_Grove ); // Los Vagos case 12: SetPlayerColor( playerid, COLOR_Vagos ); // Hitman case 13: SetPlayerColor( playerid, COLOR_HITMAN ); // News Reporters case 14: SetPlayerColor( playerid, COLOR_NEWS ); // Russian Mafia case 15: SetPlayerColor( playerid, COLOR_RussianMafia ); } } @Mister asta stia si el, cred ca era util sa-l ajuti nu sa-i confirmi esecul. Arata-i "serviciile de calitate".
  20. Salut, dupa cum se vede si in titlu am de vanzare GM + Panel + Baza de date cu 200.000 conturi. Am inchis proiectul dupa 3 ani de functionare continua cu suisuri si coborasuri. Totul vine la pachet pentru doar 300 RON(domeniul inca 50 RON). La cerere si cu o taxa in plus de 50 RON pot da si IP-ul pe care a fost deschis in ultimele 18 luni la 0ping. https://rse-samp.com/admins
  21. CMD:areagun(playerid, params[]) // adaugat 'count' { if(gPlayerLogged[playerid] == 0) return SendClientMessage(playerid, COLOR_RED2, "Nu poti folosi nicio comanda pentru ca nu esti logat."); if(PlayerInfo[playerid][pAdmin] < 2) return SendClientMessage(playerid, COLOR_ERROR, "You are not authorized to use this command."); new range,gun,ammo,string[256],sendername[25],wcount=0; if(sscanf(params, "iii", range, gun, ammo)) return SendClientMessage(playerid,COLOR_WHITE,"Usage: /areagun [range] [weapon id] [ammo]"); GetPlayerName(playerid, sendername, sizeof(sendername)); if(gun < 1||gun > 46||gun==19||gun==20||gun==21||gun==45) return SendClientMessage(playerid,COLOR_WHITE,"Invalid weapond ID."); if(ammo <1||ammo > 1000) return SendClientMessage(playerid,COLOR_WHITE,"Invalid ammo (1-1000)."); foreach(Player,i) { if(ProxDetectorS(range, playerid, i)) { wcount++; GivePlayerWeaponEx(i, gun, ammo); new gun2,tmp; GetPlayerWeaponData(i,5,gun2,tmp); #pragma unused tmp if(gun2)SetPlayerArmedWeapon(i,gun2); else SetPlayerArmedWeapon(i,0); } } format(string, sizeof(string), "AdmCmd: {FFFFFF}%s has given gun %d with %d bullets to all players on range %d (Count:%d)", sendername,gun,ammo,range,wcount); ABroadCast(COLOR_ADMCOMMANDS,string,1); return 1; }
  22. Fiind folosit la sisteme de case/bizz de exemplu cred ca reprezinta o optimizare deoarece economisesti memorie si viteza de executie nu reprezinta chiar o problema. In continuare folosesc si eu variabile simple pentru playeri unde sunt mult mai frecvent utilizate si viteza devine o necesitate.
×
×
  • 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.