Jump to content

Sinner.PWN

Membru
  • Posts

    239
  • Joined

  • Last visited

  • Days Won

    7

Posts posted by Sinner.PWN

  1. 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* ) :*

  2. 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.

  3. 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;
    }

     

  4. Acum 50 minute, ImpulsE a spus:

    Eu aș spune că acest topic nu își prea are rostul fiindcă dacă nu știți ce este #emit nici nu o să aveți nevoie să îl folosiți. #emit nu trebuie folosit să programezi în PAWN ci să ”extinzi” limbajul. Dacă dorești să faci un gamemode/filterscript sau să faci o librărie nu ai nevoie de #emit. Ca să întelegi #emit-ul trebuie să înțelegi prima dată formatul AMX.

    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.

  5. 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 ];
    }
  6. 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:

     

    1. 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 )

       

    2. Definim variabilele de care ne vom folosi pentru a compara rezultatul si pentru a returna ID-ul jucatorului. 
      new paintScore = 0, bestID;

       

    3. Mai departe avem nevoie de #include "foreach" pentru un loop mai optimizat. (aceasta functie trece doar printre jucatorii conectati pe server) 
      foreach( Player, i )

       

    4. 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;
      }

       

    5. 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;
      }

       

  7. Acum 14 ore, Spman a spus:

    Nu inteleg ce vrei sa spui.

    Daca ai un tick rate ~100-200, atunci nu ar trebui sa iti faci probleme. Daca ai tick rate sub 32, atunci ar trebui sa iti pui semne de intrebare ce nu merge bine in gamemode.

    // https://www.reddit.com/r/Overwatch/comments/3u5kfg/everything_you_need_to_know_about_tick_rate/ - se aplica si la SA-MP.

     

    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...

  8. La 7/15/2016 la 13:58, ImpulsE a spus:

    @star69Acea condiție nu este bună.

    
    DeerKO[DeerID]==0&&DeerMove[DeerID]==0 

    Trebuie să fie așa:

    
    DeerKO[DeerID]==0 && DeerMove[DeerID]==0 

     

    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
  9. 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 ] );

     

  10. 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".

  11. 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;
    }

     

  12. 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.