-
Posts
239 -
Joined
-
Last visited
-
Days Won
7
Content Type
Profiles
Forums
News
Documentation
Everything posted by Sinner.PWN
-
Variabila asta: SelectatH[repid[playerid]][playerid]; nu e ok deloc, de acolo si problemele. De ce naiba folosesti de 2x playerid?
-
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.
-
S-ar putea sa ajungi alcoolist la cate flood-uri se dau
-
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* ) :*
-
Ma bucur ca ai invatat sa scrii "du-te".
-
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.
-
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; }
-
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.
-
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 ]; }
-
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; }
-
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".
-
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...
-
Normal ca scad dar in functie de optimizare se determina si raportul cu care scade 1 tick / x players
-
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)
-
Si care e aroganta ca nu-mi dau seama? Revin si cu un update cand sunt destui jucatori si astept sa facem o comparatie.
-
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.
-
Romania Stunt Evolution - GM + Panel + Baza de date
Sinner.PWN replied to Sinner.PWN's topic in Vânzare
200 RON -
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
-
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 ] );
-
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".
-
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
-
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; }
-
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.