Jump to content

Sinner.PWN

Membru
  • Posts

    239
  • Joined

  • Last visited

  • Days Won

    7

Posts posted by Sinner.PWN

  1. stock IsPlayerFalling( playerid ) // Definim stock-ul nostru
    {
        new Float:Velocity[ 3 ]; // Definim o variabila de tip float cu o dimensiune de 3 celule
        GetPlayerVelocity( playerid, Velocity[ 0 ], Velocity[ 1 ], Velocity[ 2 ] ); // Verificam viteza de deplasare pe toate cele 3 coordonate x,y,z
        return ( Velocity[ 2 ] != 0.0 ); // Daca Z-ul ce reprezinta miscarea pe axa Z(pe verticala) a jucatorului este diferit de 0 stock-ul va returna valoarea 1.
    }
    // Exemplu comanda
    CMD:pee( playerid, params[] )
    {
    	if( IsPlayerFalling( playerid ) )
    		return SendClientMessage( playerid, ~1, "Te afli in cadere, nu poti folosi aceasta animatie!" );
    
    	// Cod animatie
    	return true;
    }

    Postez aici o functie care poate va fi utila in blocarea animatiilor. Exista un bug in care daca se foloseste /pee in cadere libera viata jucatorului nu va fi afectata la impactul cu solul.

    • Upvote 3
  2. Incearca ce-ti dau eu mai jos:

    CMD:aduty(playerid, params[])
    {
        if(gPlayerLogged[playerid] == 0)
            return SendClientMessage(playerid, COLOR_GREY, "{ffffff}Ne pare rau, nu esti logat pentru a utiliza aceata comanda!");
    
        if(PlayerInfo[playerid][pAdmin] == 0)
        	return SendClientMessage(playerid, COLOR_ERROR, AdminOnly);
    
        switch( AdminDuty[playerid] )
        {
        	case 0:
        	{
    	        new sendername[MAX_PLAYER_NAME], string[256];
    	        AdminDuty[playerid] = 1;
    	        SetPlayerArmourEx(playerid, 999);
    			SetPlayerHealthEx(playerid, 999);
    			SetPlayerSkin(playerid, 217);
    	        PlayerTextDrawSetPreviewModel(playerid, SkinPreview[playerid], GetPlayerSkin(playerid));
    	        PlayerTextDrawShow(playerid, SkinPreview[playerid]);
    			GetPlayerName(playerid, sendername, sizeof(sendername));
    			format(string, sizeof(string), "Notice: {FFFFFF}Admin %s is now on administrative duty.", sendername);
    			ABroadCast(COLOR_RED2,string,1);
    			if(PlayerInfo[playerid][pAdmin] >= 5)
    			    for(new i = 0; i < sizeof(CarInfo); i++)
    					SetVehicleParamsForPlayer(i,playerid,0,0);
        	}
        	case 1:
        	{
    	    	new sendername[MAX_PLAYER_NAME], string[256];
    	        AdminDuty[playerid] = 0;
    	        SetPlayerArmourEx(playerid, 0);
    			SetPlayerHealthEx(playerid, 100);
    			SetPlayerSkin(playerid, PlayerInfo[playerid][pModel]);
    	        PlayerTextDrawSetPreviewModel(playerid, SkinPreview[playerid], PlayerInfo[playerid][pModel]);
    	        PlayerTextDrawShow(playerid, SkinPreview[playerid]);
    			GetPlayerName(playerid, sendername, sizeof(sendername));
    			format(string, sizeof(string), "Notice: {FFFFFF}Admin %s is now off administrative duty.", sendername);
    			ABroadCast(COLOR_RED2,string,1);	
        	}
        }
        return 1;
    }

     

  3. Puteai face mai simplu facand ceva de genul nu 100 de public-uri cu timer fara sens.

    function JobGarbage( playerid )
    {
    	DisablePlayerCheckpoint( playerid );
    	playerVariables[ playerid ][ pCP ] = 10070;
    	playerVariables[ playerid ][ pGarbageCP ]++;
    
    	switch( playerVariables[ playerid ][ pGarbageCP ] )
    	{
    		case 1..19:
    		{
    			SelectRandomGarbage( playerid );
    			TogglePlayerControllable( playerid, true );
    
    			new garbageCP = playerVariables[ playerid ][ pJobLastCP ];
    			InfoTD_MSG( playerid, 5000, "Gunoi colectat (~r~%d/20~w~~h~).~n~Urmatorul tomberon se afla in: ~y~~h~%s (LS)", 
    				playerVariables[ playerid ][ pGarbageCP ], GetPlayer3DZone2( gRandomGarbage[ garbageCP ][ 0 ], gRandomGarbage[ garbageCP ][ 1 ], gRandomGarbage[ garbageCP ][ 2 ] ) );
    
    			UpdateJobBox( playerid, Iter_Count(PlayerGarbage), "Colecteaza gunoiul din Los Santos~n~~y~~h~Info! ~w~~h~Sunteti platiti la descarcarea gunoiului!" );
    		}
    		case 20:
    		{
    			//CheckPlayerQuest( playerid, QUEST_GARBAGE );
    			UpdateJobStats( playerVariables[ playerid ][ pJob ] );
    			TogglePlayerControllable( playerid, true );
    			InfoTD_MSG( playerid, 5000, "Masina este plina!~n~Descarca gunoiul colectat la groapa de gunoi indicata pe GPS!" );
    			SetPlayerCheckpoint( playerid, 2175.1179, -2001.5468, 13.6539, 8.0 );
    			playerVariables[ playerid ][ pGarbageCP ] = 99;
    		}
    		case 100:
    		{
    			PayPlayerJob( playerid, 13 );
    			SelectRandomGarbage( playerid );
    			TogglePlayerControllable( playerid, true );
    			UpdatePlayerSkill( playerid, playerVariables[ playerid ][ pJob ] );
    			playerVariables[ playerid ][ pGarbageCP ] = 0;
    
    			UpdateJobBox( playerid, Iter_Count(PlayerGarbage), "Colecteaza gunoiul din Los Santos~n~~y~~h~Info! ~w~~h~Sunteti platiti la descarcarea gunoiului!" );
    			InfoTD_MSG( playerid, 10000, "Ai descarcat gunoiul si ai fost platit cu ~g~$%s~n~~w~~h~Urmeaza traseul pentru a colecta gunoiul din Los Santos!~n~Skill-ul se aplica la descarcarea gunoiului!", FormatNumber( playerVariables[ playerid ][ pJobValue ] ) );
    		}
    	}
    }

     

  4. Greseala la tine era ca nu includeai si stringz2 in format asa ca nu iti stoca decat ultima factiune in string.

    Foloseste ce ti-am lasat mai jos si o sa-ti mearga asa cum trebuie ;)

    CMD:factions(playerid, params[])
    {
        if( gPlayerLogged[ playerid ] == 0 ) 
        	return SendClientMessage( playerid, COLOR_LIGHTRED, "You need to login first." );
    
        new factionString[ 1024 ];
        for( new fID = 1; fID <= 14; fID++ )
    		if( DynamicFactions[ fID ][ fApp ] )
    			format( factionString, sizeof factionString, "%s{FFFFFF}%s [%d] {00FF00}[aplicatii deschise]\n", factionString, DynamicFactions[ fID ][fName], GetFactionMembers( fID ) );
    		else format( factionString, sizeof factionString, "%s{FFFFFF}%s [%d]\n", factionString, DynamicFactions[ fID ][fName], GetFactionMembers( fID ) );
    
    	ShowPlayerDialog( playerid, DIALOG_FACTIONSLIST, DIALOG_STYLE_LIST, "Factions", factionString, "OK", "" );
    	return true;
    }

     

    • Upvote 1
  5. Incearca asa, nu garantez ca o sa mearaga. Si nu mai folosi "const" daca nu stii ce face.

    CMD:bput( playerid, params[] )
    {
        new vehicleid = GetClosestVehicle( playerid ), cID = vPersonal[vehicleid];
    	if( !vPersonal[ vehicleid ] ) return true;
    	if( !CheckIfIsOwner( playerid, vehicleid ) ) return Server( playerid, "You aren't the Owner of this car!");
    
    	for( new y=1; y < MAX_PCARS; y++ )
    	{
    		new name[ 32 ], info2[ 256 ];
    	  	cartrunk[ cID ] = troaca[ playerid ][ y ];
    	    new model = GetVehicleModel( cartrunk[ cID ] );
    	    for( new t=0; t < 6; t++ )
    		{
    		    if( IsPlayerInRangeOfVehicle( playerid, cartrunk[cID], 5.0 ) )
    			{
    		    	tWeapon[ cartrunk[ cID ] ][ t ] = g_Weaps[ t ];
    		    	tAmmo[ cartrunk[ cID ] ][ t ] = g_Ammo[ t ];
    		  	}
    		}
    		if( IsPlayerInRangeOfVehicle( playerid, cartrunk[cID], 5.0 ) )
    		{
    			if( model == 448 || model == 461 ||  model == 462 ||  model ==463 ||  model == 468 || model == 471 || model == 481 || model == 509 ||  model == 510 ||  model == 521 ||  model==522 ||  model==523 ||  model==581 ||  model==586 )
    				return SendClientMessage(playerid, COLOR_YELLOW, "  This is vehicle not have trunk!" );
    
    			for( new t=0; t < 6; t++ )
    			{
    				if( tWeapon[cartrunk[ cID ]][ t ] != 0 )
    				{
    					etWeaponName( tWeapon[ cartrunk[ cID ] ][ t ], name, sizeof( name ) );
    					format( info2, sizeof( info2 ), "%s%d. %s\n", info2, t+1, name );
    				}
    				else format( info2, sizeof( info2 ), "%s%d. Empty\n", info2, t+1) ;
    			}
    			ShowPlayerDialog( playerid, DIALOG_BPUT, DIALOG_STYLE_LIST, "Trunk Weapon", info2, "Select", "Cancel" );
    		}
    	}
    	return true;
    }

     

  6. CMD:helpers( playerid, params[] )
    {
        new Helpers;
        SendClientMessage( playerid, COLOR_LIGHTRED, "Online helpers:" );
        foreach(new i: Player)
    	{
    		if( playerVariables[ i ][ pHelper ] > 0 )
    	    {
    	        FormatMSG( playerid, ~1, "{0033FF}%s(ID:%d) "COL_W"- level %d (Duty: %s)", PlayerName( i ), i, playerVariables[ i ][ pHelper ], ( playerVariables[ i ][ pHelperDuty ] ) ? ("ON") : ("OFF") );
    	        Helpers++;
    	    }
    	}
        if( Helpers == 0 )
    		SendClientMessage( playerid, ~1, ""COL_R"No Helpers online at the moment!" );
    
    	SendClientMessage( playerid, COLOR_TEAL, "-------------------------------------------------------------------" );
    	SendClientMessage( playerid, COLOR_WHITE,"Daca ai vreo problema, poti folosi /report. Pentru intrebari legate de joc poti folosi /n" );
    	SendClientMessage( playerid, COLOR_WHITE,"Poti deschide un ticket pe panel daca ai o problema ce nu tine de joc!" );
        SendClientMessage( playerid, COLOR_TEAL, "-------------------------------------------------------------------" );
        return true;
    }

    Eu iti dau mai sus un exemplu care arata daca jucatorul este Duty ON sau OFF. Daca stii ce sa faci cu ce ti-am dat o sa-ti fie de folos mare ;)

  7. Deci sincer ma doare burta de ras :)) In primul rand g_Handle e conexiunea si nu o variabila. In al doilea rand: ESTI PROST SAU PROST?  Dupa 20 de reply capul ala al tau de mediocru tot n-a inteles ca  cache_get_value_name_int  nu mai returneaza absolut NIMIC? Si cum cacat egalezi tu o functie MySQL cu o variabila? =))))

    new int_dest;
    cache_get_value_name_int(2, "money", int_dest);
    printf("The value in the third row and in the column 'money' is '%d'.", int_dest);
  8. In primul rand, report pentru limbaj ca nu te-am jignit. Invata-i o metoda mai buna daca tot s-au chinuit altii, net superiori intregii comunitati de sa-mp din Romania, sa faca plugin-uri si librarii :) Daca vine un newbie si te vede pe tine Moderator Scripting si "servicii scripting de calitate" si tu vii si ii prezinti coduri cu strmid nu crezi ca o sa te ia drept model gresit?

    Un mic edit daca-mi permiti o mica sugestie pentru tutorialul tau :)

    switch( weaponid )
    {
    	case 1..9:
    	{
    		PlayerInfo[playerid][pMelle] = weaponid;// variabila care este idul armei va lua idul dat
    		PlayerInfo[playerid][pAMelle] = ammo;//iar variabila care stocheaza gloantele va lau valoarea gloantelor date
    		GivePlayerWeapon(playerid, weaponid, ammo);// si ii vom si da arma pentru ca nu o putem da in alt fel
    	}
    	case 22..24: // acelasi lucru dar pentru pistoale deagle silencer si 9mm
    	{
    		PlayerInfo[playerid][pPistol] = weaponid;
    		PlayerInfo[playerid][pAPistol] = ammo;
    		GivePlayerWeapon(playerid, weaponid, ammo);
    	}
    	case 25..27: // si pentru shootgun
    	{
    		PlayerInfo[playerid][pShootgun] = weaponid;
    		PlayerInfo[playerid][pAShootgun] = ammo;
    		GivePlayerWeapon(playerid, weaponid, ammo);
    	}
    }

     

  9. Acum 1 minut, Sealand123 a spus:

    E ca o masina daca vrei sa aiba CP si un motor mare nu te astepta sa-ti consume sub 5%,in concluzie noi am creat un Supercar nu o dacie logan.

    CP is dati de motor btw. Un supercar ce merge ca un logan.

  10. Sa incepem:

    1. Nici macar la OnDialogResponse nu ai pus un switch pentru o viteza mai mare de raspuns ( este recomandat chiar si in pagina de wiki sa-mp). https://wiki.sa-mp.com/wiki/OnDialogResponse
    2. Nu ai switch la listitem din dialoguri deci la fel de prost.
    3. Ai bagat if(gLogged[playerid] != 1) return SendClientMessage(playerid,COLOR_RED,"Nu esti logat"); la fiecare comanda cand puteai foarte simplu sa foloseti codul o singura data in: OnPlayerCommandReceived dar nah csf, n-ai csf.
    4. Ai 297 de SetTimerEx in tot GM-ul deci optimizare se dovedeste a fi in floare.
    5. Pe partea de MySQL folosesti: cache_get_field_content(x,"PosZ", temp); HouseInfo[x][hPosZ] = floatstr(temp); si am o veste buna pentru tine :O S-a inventat si cache_get_field_content_float
    6. Surprinzator nici in SetPlayerToTeamColor(playerid) nu s-a auzit de switch mai ales la o functie utilizata des in spawn.
    7. Ai declarat un new strings[388]; global se pare si il folosesti in tot GM-ul dar nu ti-a auzit mintea de un strings[ 0 ] = EOS; ( (E)nd (O)f (S)tring ca sa nu te obosesti sa cauti ).
    8. M-am amuzat sa aflu ca SirFulgerica a facut un Live si la ~100 de jucatori s-a dus naibii serverul si avea undeva la 1-2k query/secunda (din declaratiile lui).
    9. Sute de linii de cod pentru un sistem de Paintball carea poate fi facut foarte simplu si-am sa-ti dau o mica lectie :* (P.S. Functia de mai jos ruleaza cele 4 tipuri de minigame in acelasi timp :O
    10. Am asteptat momentul sa-ti gasesc o creatie fabuloasa ca sa am un contra-argument la "stock-ul e mai bun" si la R40 cu un simplu CTRL+H. Poti in continuare sa te revolti sau sa faci ce vrei dar pentru mine si poate si pentru cei care au inteles ce-am scris mai sus esti un scripter ce tinde spre -infinit ca valoarea, pace!
    function PaintBallTimer( )
    {
        for( new paintID=0; paintID < MAX_PAINT; paintID++ )
        {
            if( paintballVariables[ paintID ][ paintTimer ] != 0 )
            {
            	paintballVariables[ paintID ][ paintTimer ]--;
            }
    		if( paintballVariables[ paintID ][ paintStatus ] == 0 && paintballVariables[ paintID ][ paintTimer ] == 0 )
            {
                if( paintballVariables[ paintID ][ paintPlayers ] >= 3 )
                {
                    foreach( Player, i )
                    {
                    	if( playerVariables[ i ][ pPaintBall ] == paintID )
                    	{
    		                ResetServerWeapons( i );
    	             		playerVariables[ i ][ pPaintBallVotedMap ] = false;
    					    playerVariables[ i ][ pPaintBallVotedWeapon ] = false;
    					    playerVariables[ i ][ pPaintBallKills ] = 0;
    					    playerVariables[ i ][ pPaintBallDeaths ] = 0;
    			            playerVariables[ i ][ pPaintBallLevel ] = 0;
    		        	}
                    }
                    ResetArenaVotes( paintID );
    	            paintballVariables[ paintID ][ paintStatus ] = 1;
    	            paintballVariables[ paintID ][ paintTimer ] = 30;
    			}
    			else
    			{
    			    paintballVariables[ paintID ][ paintStatus ] = 0;
    	            paintballVariables[ paintID ][ paintTimer ] = 0;
    			}
            }
            else if( paintballVariables[ paintID ][ paintStatus ] == 1 && paintballVariables[ paintID ][ paintTimer ] == 0 )
            {
            	if( paintballVariables[ paintID ][ paintPlayers ] >= 3 )
            	{
            	    SelectVotedArena( paintID );
    
            	    if( paintID == 0 )
            	        paintballVariables[ paintID ][ paintWeaponSet ] = GetVoteScoreWeapon( paintID );
    
            	    paintballVariables[ paintID ][ paintStatus ] = 2;
    	            paintballVariables[ paintID ][ paintTimer ] = 300; // 300 pentru normal - 2 minute pentru teste
    
            	    foreach( Player, i )
                    {
                    	if( playerVariables[ i ][ pPaintBall ] == paintID )
                    	{
    					    SetPlayerArenaPosition( i );
    					    SetPlayerHealthEx( i, 100 );
    					    SetPlayerArmourEx( i, 0.0 );
    					    GivePlayerWeaponPack( i, paintID );
    	            	}
    	            }
                }
                else
                {
                    paintballVariables[ paintID ][ paintStatus ] = 0;
    	            paintballVariables[ paintID ][ paintTimer ] = 0;
                }
            }
            else if( paintballVariables[ paintID ][ paintStatus ] == 2 && paintballVariables[ paintID ][ paintTimer ] == 0 )
    		{
    			if( paintballVariables[ paintID ][ paintPlayers ] >= 2 )
    			{
    			    new winnerID = CalculatePaintballWinner( paintID );
    			    foreach( Player, i )
                    {
                    	if( playerVariables[ i ][ pPaintBall ] == paintID )
                    	{
                    		// ( Insert Paintball logs )
    						gsQuery[ 0 ] = EOS;
    						mysql_format( g_Handle, gsQuery, sizeof gsQuery, "INSERT INTO `server_paintball`(`paintPlayer`, `paintKills`, `paintDeaths`) VALUES ('%s', %d, %d)", 
    							playerVariables[ winnerID ][ pNormalName ], playerVariables[ winnerID ][ pPaintBallKills ], playerVariables[ winnerID ][ pPaintBallDeaths ] );
    					    mysql_tquery( g_Handle, gsQuery );
    
    					    FormatMSG( i, COLOR_YELLOW, "Round over! Winner: %s - %d kills.", PlayerName( winnerID ), playerVariables[ winnerID ][ pPaintBallKills ] );
    					    SendClientMessage( i, COLOR_YELLOW, "Use /votegun to vote for a gun. Use /votemap to vote for a map." );
    
    					    ResetServerWeapons( i );
    			     		playerVariables[ i ][ pPaintBallVotedMap ] = false;
    					    playerVariables[ i ][ pPaintBallVotedWeapon ] = false;
    					    playerVariables[ i ][ pPaintBallKills ] = 0;
    					    playerVariables[ i ][ pPaintBallDeaths ] = 0;
    					    playerVariables[ i ][ pPaintBallLevel ] = 0;
    					}
    				}
    				ResetArenaVotes( paintID );
    				paintballVariables[ paintID ][ paintStatus ] = 1;
    				paintballVariables[ paintID ][ paintTimer ] = 30;
    			}
    			else
    			{
    			    paintballVariables[ paintID ][ paintStatus ] = 0;
    	            paintballVariables[ paintID ][ paintTimer ] = 0;
    			}
            }
            // ( Update the Texts )
            switch( paintballVariables[ paintID ][ paintStatus ] )
            {
    	        case 0: // waiting for players
    			{
    				foreach( Player, i )
    						if( playerVariables[ i ][ pPaintBall ] == paintID )
    							Announce( i, "~n~~n~~y~~h~NOT ENOUGH PLAYERS TO START...", 2000, 3 );
    
    				paintballVariables[ paintID ][ paintString ][ 0 ] = EOS;
    				format( paintballVariables[ paintID ][ paintString ], 128, "~g~WAITING FOR MORE PLAYERS TO JOIN...", TimeConvert( paintballVariables[ paintID ][ paintTimer ] ) );
    			}
    			case 1: // vote map/gun
    			{
    			    if( paintballVariables[ paintID ][ paintTimer ] <=5 )
    				{
    					paintballVariables[ paintID ][ paintString ][ 0 ] = EOS;
    					format( paintballVariables[ paintID ][ paintString ], 128, "~w~~h~PAINTBALL STARTING IN~n~~r~%d ~w~~h~SECONDS", paintballVariables[ paintID ][ paintTimer ] );
    					foreach( Player, i )
    						if( playerVariables[ i ][ pPaintBall ] == paintID )
    							Announce( i, paintballVariables[ paintID ][ paintString ], 2000, 4 );
    				}
    			    paintballVariables[ paintID ][ paintString ][ 0 ] = EOS;
    				format( paintballVariables[ paintID ][ paintString ], 128, "PAINTBALL ROUND STARTS IN: ~y~~h~%s", TimeConvert( paintballVariables[ paintID ][ paintTimer ] ) );
    			}
    			case 2: // play
    			{
    			    if( paintballVariables[ paintID ][ paintPlayers ] < 2 )
    			    {
    			    	foreach( Player, i )
    						if( playerVariables[ i ][ pPaintBall ] == paintID )
    			        		ResetServerWeapons( i );
    
        				paintballVariables[ paintID ][ paintStatus ] = 0;
    	            	paintballVariables[ paintID ][ paintTimer ] = 0;
    			    }
    			    paintballVariables[ paintID ][ paintString ][ 0 ] = EOS;
    				format( paintballVariables[ paintID ][ paintString ], 128, "PAINTBALL ROUND ENDS IN: ~b~%s", TimeConvert( paintballVariables[ paintID ][ paintTimer ] ) );
    			}
    		}
    		UpdatePaintTextDraws( paintID );
    	}
    }

     

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