[Ajuda] Sistema Balгo
#1

Estou com um sistema balгo, sу que ocorre uns bugs
1є O player nгo consegue pilotar o balгo normalmente, o balгo se move muito devagar
2є Nгo consigo fazer o balгo respawnar para a posiзгo que foi estacionado
3є Nгo consigo fazer o balao mostrar uma mensagem que o player inseriu

Код HTML:
//Sistema balгo incompleto

#include	< a_samp >

#if defined FILTERSCRIPT

#if	defined	MAX_PLAYERS
#undef		MAX_PLAYERS
#define 	MAX_PLAYERS 201
#endif

#include 	< streamer >
#include 	< foreach >
#include 	< dini >

#define		D_BALAO         79
#define MAX_BALOES 50

#define		COLOR_ERRO				0xFF0000AA
#define     COLOR_AMARELO           0xFFFF00AA


enum infoBalao
{
	BalaoID,
	ObjectFogo,
	ObjectFogo1,
	BalaoDono[ MAX_PLAYER_NAME ],
	Float:posBalaoX,
	Float:posBalaoY,
	Float:posBalaoZ,
	Float:posBOX,
	Float:posBOY,
	Float:posBOZ
}
new bInfo[ MAX_BALOES ][ infoBalao ];

enum ibalaoPlayer
{
	Direcao,
	timerBalao
}
new bpInfo[ MAX_PLAYERS ][ ibalaoPlayer ];


public OnPlayerCommandText( playerid, cmdtext[ ] )
{
   if( !strcmp( cmd, "/balao", true ))
	{
	    if( dini_Int( f( playerid ), "Balao" ) != 0 )
	    {
	    	ShowPlayerDialog( playerid, D_BALAO, DIALOG_STYLE_LIST, "Funзхes Balгo", "\tComandos\n\tModelo\n\tVelocidade\n\tMensagem\n\tRespawn", "OK", "Sair" );
		}
		else
		{
		    SendClientMessage( playerid, COLOR_ERRO, "[ x ] Vocк nгo tem um balгo !" );
		}
		return 1;
	}
	if( !strcmp( cmd, "/criarbalao", true ))
	{
	    if( dini_Int( f( playerid ), "AdminL" ) == 0 )
	    {
	        SendClientMessage( playerid, COLOR_ERRO, "[ x ] Vocк nгo tem permissгo para criar um balгo prуprio !" );
	        return 1;
	    }
 		tmp = strtok( cmdtext, idx );
		if( !strlen( tmp ))
		{
			SendClientMessage( playerid, COLOR_ERRO, "[ x ] Uso correto: /CriarBalao [ ID ]" );
			return 1;
		}
		new
			id = strval( tmp )
		;
		if( !IsPlayerConnected( id ))
		{
		    SendClientMessage( playerid, COLOR_ERRO, "[ x ] Ninguйm online com esse ID !" );
			return 1;
		}
		if( dini_Int( f( id ), "Balao" ) != 0 )
		{
		    SendClientMessage( playerid, COLOR_ERRO, "[ x ] Esse(a) jogador(a) jб possui um balгo	!" );
		    return 1;
		}
		new
			old, ild
		;
		for( new b = 1; b < MAX_BALOES; ++b )
		{
			format( gStr, sizeof( gStr ), "Baloes/Balao%d.ini", b );
			if( fexist( gStr ))
			{
				++ old;
			}
			if( !fexist( gStr ))
			{
				ild = old + 1;
				break;
			}
		}
		new
		    Float:getMypos[ 3 ]
		;
		GetPlayerPos( playerid, getMypos[ 0 ], getMypos[ 1 ], getMypos[ 2 ] );
		CriarBalaoInGame( ild, id, getMypos[ 0 ], getMypos[ 1 ], floatsub( getMypos[ 2 ], 0.5 ));
		format( pFile, sizeof( pFile ), "[ > ] Balгo ID %d criado para %s", ild, PlayerName( id ));
		SendClientMessage( playerid, COLOR_AMARELO, pFile );
		dini_IntSet( f( id ), "Balao", ild );
		return 1;
	}
}

public OnPlayerKeyStateChange( playerid, newkeys, oldkeys )
{
    if( PRESSED( KEY_YES | KEY_WALK )) // Pra cima
	{
		for( new balaoid = 0; balaoid < MAX_BALOES; ++balaoid )
		{
			if( IsPlayerInRangeOfPoint( playerid, 90.0, bInfo[ balaoid ][ posBalaoX ], bInfo[ balaoid ][ posBalaoY ], bInfo[ balaoid ][ posBalaoZ ] ))
			{
			    if( strcmp( bInfo[ balaoid ][ BalaoDono ], PlayerName( playerid ), false ))
			    {
			        format( gStr, sizeof( gStr ), "[ x ] Este balгo pertence а %s e somente ele(a) pode conduzi-lo !", bInfo[ balaoid ][ BalaoDono ] );
			        SendClientMessage( playerid, 0xFF0000AA, gStr );
			    }
			    else
			    {
   					bpInfo[ playerid ][ Direcao ] = 1;
	    			bpInfo[ playerid ][ timerBalao ] = SetTimerEx( "MoverBalao", 100, false, "d", playerid );
			    }
			    return 1;
			}
		}
	}
	if( RELEASED( KEY_YES | KEY_WALK ))
	{
        bpInfo[ playerid ][ Direcao ] = 0;
	}
	if( PRESSED( KEY_NO | KEY_WALK )) // Pra baixo
	{
		for( new balaoid = 0; balaoid < MAX_BALOES; ++balaoid )
		{
			if( IsPlayerInRangeOfPoint( playerid, 15.0, bInfo[ balaoid ][ posBalaoX ], bInfo[ balaoid ][ posBalaoY ], bInfo[ balaoid ][ posBalaoZ ] ))
			{
			    if( strcmp( bInfo[ balaoid ][ BalaoDono ], PlayerName( playerid ), false ))
			    {
			        format( gStr, sizeof( gStr ), "[ x ] Este balгo pertence а %s e somente ele(a) pode conduzi-lo !", bInfo[ balaoid ][ BalaoDono ] );
			        SendClientMessage( playerid, 0xFF0000AA, gStr );
			    }
			    else
			    {
			        bpInfo[ playerid ][ Direcao ] = 2;
			   	    bpInfo[ playerid ][ timerBalao ] = SetTimerEx( "MoverBalao", 30, false, "d", playerid );
			    }
			    return 1;
			}
		}
	}
	if( RELEASED( KEY_NO | KEY_WALK ))
	{
	    bpInfo[ playerid ][ Direcao ] = 0;
	}
	if( PRESSED( KEY_SECONDARY_ATTACK | KEY_YES )) // Pra frente
	{
		for( new balaoid = 0; balaoid < MAX_BALOES; ++balaoid )
		{
			if( IsPlayerInRangeOfPoint( playerid, 3.0, bInfo[ balaoid ][ posBalaoX ], bInfo[ balaoid ][ posBalaoY ], bInfo[ balaoid ][ posBalaoZ ] ))
			{
			    if( strcmp( bInfo[ balaoid ][ BalaoDono ], PlayerName( playerid ), false ))
			    {
			        format( gStr, sizeof( gStr ), "[ x ] Este balгo pertence а %s e somente ele(a) pode conduzi-lo !", bInfo[ balaoid ][ BalaoDono ] );
			        SendClientMessage( playerid, 0xFF0000AA, gStr );
			    }
			    else
			    {
			        bpInfo[ playerid ][ Direcao ] = 3;
			   	    bpInfo[ playerid ][ timerBalao ] = SetTimerEx( "MoverBalao", 30, false, "d", playerid );
			    }
			    return 1;
			}
		}
	}
	if( RELEASED( KEY_SECONDARY_ATTACK | KEY_YES ))
	{
	    bpInfo[ playerid ][ Direcao ] = 0;
	}
	if( PRESSED( KEY_SECONDARY_ATTACK | KEY_NO )) // Pra trбz
	{
		for( new balaoid = 0; balaoid < MAX_BALOES; ++balaoid )
		{
			if( IsPlayerInRangeOfPoint( playerid, 3.0, bInfo[ balaoid ][ posBalaoX ], bInfo[ balaoid ][ posBalaoY ], bInfo[ balaoid ][ posBalaoZ ] ))
			{
			    if( strcmp( bInfo[ balaoid ][ BalaoDono ], PlayerName( playerid ), false ))
			    {
			        format( gStr, sizeof( gStr ), "[ x ] Este balгo pertence а %s e somente ele(a) pode conduzi-lo !", bInfo[ balaoid ][ BalaoDono ] );
			        SendClientMessage( playerid, 0xFF0000AA, gStr );
			    }
			    else
			    {
			        bpInfo[ playerid ][ Direcao ] = 4;
			   		bpInfo[ playerid ][ timerBalao ] = SetTimerEx( "MoverBalao", 30, false, "d", playerid );
			    }
			    return 1;
			}
		}
	}
	if( RELEASED( KEY_SECONDARY_ATTACK | KEY_NO ))
	{
	    bpInfo[ playerid ][ Direcao ] = 0;
	}
	if( PRESSED( KEY_CROUCH | KEY_YES )) // Pra direita
	{
		for( new balaoid = 0; balaoid < MAX_BALOES; ++balaoid )
		{
			if( IsPlayerInRangeOfPoint( playerid, 3.0, bInfo[ balaoid ][ posBalaoX ], bInfo[ balaoid ][ posBalaoY ], bInfo[ balaoid ][ posBalaoZ ] ))
			{
			    if( strcmp( bInfo[ balaoid ][ BalaoDono ], PlayerName( playerid ), false ))
			    {
			        format( gStr, sizeof( gStr ), "[ x ] Este balгo pertence а %s e somente ele(a) pode conduzi-lo !", bInfo[ balaoid ][ BalaoDono ] );
			        SendClientMessage( playerid, 0xFF0000AA, gStr );
			    }
			    else
			    {
			        bpInfo[ playerid ][ Direcao ] = 5;
			   		bpInfo[ playerid ][ timerBalao ] = SetTimerEx( "MoverBalao", 30, false, "d", playerid );
			    }
			    return 1;
			}
		}
	}
	if( RELEASED( KEY_CROUCH | KEY_YES ))
	{
	    bpInfo[ playerid ][ Direcao ] = 0;
	}
	if( PRESSED( KEY_CROUCH | KEY_NO )) // Pra esquerda
	{
		for( new balaoid = 0; balaoid < MAX_BALOES; ++balaoid )
		{
			if( IsPlayerInRangeOfPoint( playerid, 3.0, bInfo[ balaoid ][ posBalaoX ], bInfo[ balaoid ][ posBalaoY ], bInfo[ balaoid ][ posBalaoZ ] ))
			{
			    if( strcmp( bInfo[ balaoid ][ BalaoDono ], PlayerName( playerid ), false ))
			    {
			        format( gStr, sizeof( gStr ), "[ x ] Este balгo pertence а %s e somente ele(a) pode conduzi-lo !", bInfo[ balaoid ][ BalaoDono ] );
			        SendClientMessage( playerid, 0xFF0000AA, gStr );
			    }
			    else
			    {
			        bpInfo[ playerid ][ Direcao ] = 6;
			    	bpInfo[ playerid ][ timerBalao ] = SetTimerEx( "MoverBalao", 30, false, "d", playerid );
			    }
			    return 1;
			}
		}
	}
	if( RELEASED( KEY_CROUCH | KEY_NO ))
	{
	    bpInfo[ playerid ][ Direcao ] = 0;
	}
	/*new vehicleid = GetPlayerVehicleID(playerid);
	if(IsPlayerInAnyVehicle(playerid))
	{
		if(newkeys & KEY_SECONDARY_ATTACK)
		{
			RemovePlayerFromVehicle(playerid);
			TogglePlayerControllable(playerid, 1);
		}
		if(Engine[vehicleid] == 0)
		{
			if(newkeys & KEY_JUMP)
			{
				SetTimerEx("EngineTimer", 2000, 0, "i", playerid);
			}
		}
	}
	return 1;
	//*/
	if( newkeys & KEY_SECONDARY_ATTACK )
	{
        if( !IsPlayerInAnyVehicle( playerid ))
		{
            new
				Float:myx, Float:myy, Float:myz, myvehicle
			;
            GetPlayerPos( playerid, myx, myy, myz );
            GetVehicleWithinDistance( playerid, myx, myy, myz, 20.0, myvehicle );
            if( IsVehicleRc( myvehicle ))
			{
				PutPlayerInVehicle( playerid, myvehicle, 0 );
            }
        }
        else
		{
            new
				vehicleID = GetPlayerVehicleID( playerid )
			;
            if( IsVehicleRc( vehicleID ) || GetVehicleModel( vehicleID ) == RC_CAM )
			{
				if( GetVehicleModel( vehicleID ) != D_TRAM )
				{
                	new
						Float:myx, Float:myy, Float:myz
					;
                	GetPlayerPos( playerid, myx, myy, myz );
                	SetPlayerPos( playerid, myx+0.5, myy, myz+1.0 );
                }
            }
        }
    }
}

public OnDialogResponse( playerid, dialogid, response, listitem, inputtext[ ] )
{
    if( dialogid == D_BALAO )
	{
		if( response )
		{
			if( listitem == 0 ) // Comandos
			{
				ShowPlayerDialog( playerid, 4457, DIALOG_STYLE_MSGBOX, "{FF0000}•»{00FF00} Balгo Comandos", "\tAlt + Y - Move para cima\n\tAlt + N - Move para baixo\n\tF + Y - Move para frente\n\tF + N - Move para trбz\n\tC + Y - Move para direita\n\tC + Y - Move para esquerda", "OK", "" );
				return 1;
	        }
			if( listitem == 1 ) // Modelo
			{
			    //Modelo ID 19333\nModelo ID 19334\nModelo ID 19335\nModelo ID 19332\nModelo ID 19336\nModelo ID 19337\nModelo ID 19338 );
				ShowPlayerDialog( playerid, D_BALA2, DIALOG_STYLE_LIST, "Modelo Balгo", "Modelo ID 1\nModelo ID 2\nModelo ID 3\nModelo ID 4\nModelo ID 5\nModelo ID 6\nModelo ID 7", "Escolher", "Voltar" );
				//ShowPlayerDialog( playerid, 4457, DIALOG_STYLE_MSGBOX, "{FF0000}•»{00FF00} Aviso", "{FF0000}Em desenvolvimento", "OK", "" );
	        }
	        if( listitem == 2 ) // Velocidade
			{
				ShowPlayerDialog( playerid, D_BALA3, DIALOG_STYLE_LIST, "Velocidade Balгo", "Velocidade Lenta\nVelocidade Normal\nVelocidade Rбpida", "Escolher", "Voltar" );
				//ShowPlayerDialog( playerid, 4457, DIALOG_STYLE_MSGBOX, "{FF0000}•»{00FF00} Aviso", "{FF0000}Em desenvolvimento", "OK", "" );
	        }
	        if( listitem == 3 ) // Mensagem
	        {
				format( gStr, sizeof( gStr ), "• Coloque abaixo a mensagem de seu balгo:" );
	        	ShowPlayerDialog( playerid, D_BALA4, DIALOG_STYLE_MSGBOX, "Mensagem Balгo", gStr, "OK", "Voltar" );
	        	//ShowPlayerDialog( playerid, 4457, DIALOG_STYLE_MSGBOX, "{FF0000}•»{00FF00} Aviso", "{FF0000}Em desenvolvimento", "OK", "" );
	        }
	        if( listitem == 4 ) // Respawn
	        {
	            SendClientMessage( playerid, COLOR_AMARELO, "[ > ] Balгo respawnado !" );
	            new
	                iBalaoID = dini_Int( f( playerid ), "Balao" )
				;
				SetDynamicObjectPos( bInfo[ iBalaoID ][ BalaoID ], bInfo[ iBalaoID ][ posBOX ], bInfo[ iBalaoID ][ posBOY ], bInfo[ iBalaoID ][ posBOZ ] );
				bInfo[ iBalaoID ][ posBalaoX ] = bInfo[ iBalaoID ][ posBOX ];
				bInfo[ iBalaoID ][ posBalaoY ] = bInfo[ iBalaoID ][ posBOY ];
				bInfo[ iBalaoID ][ posBalaoZ ] = bInfo[ iBalaoID ][ posBOZ ];
				//ShowPlayerDialog( playerid, 4457, DIALOG_STYLE_MSGBOX, "{FF0000}•»{00FF00} Aviso", "{FF0000}Em desenvolvimento", "OK", "" );
	        }
		}
	}
}
stock CriarBalaoInGame( IDBalao, IDdono, Float:Bx, Float:By, Float:Bz  )
{
	format( gStr, sizeof( gStr ), "Baloes/Balao%d.ini", IDBalao );
	if( !fexist( gStr ))
	{
	    dini_Create( gStr );
	    dini_Set( gStr, "bDono", PlayerName( IDdono ));
	    dini_IntSet( gStr, "bModelo", 19335 );
	    dini_Set( gStr, "bMensagem", "Nenhuma" );
	    dini_IntSet( gStr, "bVelocidade", 1 );
	    dini_FloatSet( gStr, "balaox", Bx );
	    dini_FloatSet( gStr, "balaoy", By );
	    dini_FloatSet( gStr, "balaoz", Bz );
	    bInfo[ IDBalao ][ BalaoID ] = CreateDynamicObject( 19335, Bx, By, Bz, 0.0, 0.0, 0.0 );
	}
	else
	{
		bInfo[ IDBalao ][ BalaoID ] = CreateDynamicObject( dini_Int( gStr, "bModelo" ), dini_Float( gStr, "balaox" ), dini_Float( gStr, "balaoy" ), dini_Float( gStr, "balaoz" ), 0.0, 0.0, 0.0 );
 	}
    bInfo[ IDBalao ][ ObjectFogo ] = CreateDynamicObject( 18692, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 );
    bInfo[ IDBalao ][ ObjectFogo1 ] = CreateDynamicObject( 18692, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 );
	AttachObjectToObject( bInfo[ IDBalao ][ ObjectFogo ], bInfo[ IDBalao ][ BalaoID ], 0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 1 );
    AttachObjectToObject( bInfo[ IDBalao ][ ObjectFogo1 ], bInfo[ IDBalao ][ BalaoID ], 0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 1 );
	new
		gName[ MAX_PLAYER_NAME + 1 ]
	;
	GetPlayerName( IDdono, gName, sizeof( gName ));
	format( bInfo[ IDBalao ][ BalaoDono ], MAX_PLAYER_NAME, gName );
 	bInfo[ IDBalao ][ posBalaoX ] = Bx;
 	bInfo[ IDBalao ][ posBalaoY ] = By;
 	bInfo[ IDBalao ][ posBalaoZ ] = Bz;
 	bInfo[ IDBalao ][ posBOX ] = Bx;
 	bInfo[ IDBalao ][ posBOY ] = By;
 	bInfo[ IDBalao ][ posBOZ ] = Bz;
}

forward MoverBalao( playerid );
public MoverBalao( playerid )
{
    if( bpInfo[ playerid ][ Direcao ] != 0 )
    {
		for( new balaoid = 0; balaoid < MAX_BALOES; ++balaoid )
		{
			if( IsPlayerInRangeOfPoint( playerid, 3.0, bInfo[ balaoid ][ posBalaoX ], bInfo[ balaoid ][ posBalaoY ], bInfo[ balaoid ][ posBalaoZ ] ))
			{
			    new
					Float:GBX, Float:GBY, Float:GBZ
				;
				GetDynamicObjectPos( bInfo[ balaoid ][ BalaoID ], GBX, GBY, GBZ );
				if( bpInfo[ playerid ][ Direcao ] == 1 )
				{
					MoveDynamicObject( bInfo[ balaoid ][ BalaoID ], GBX, GBY, GBZ+0.1, 30.0 );
				   	bInfo[ balaoid ][ posBalaoX ] = GBX;
				 	bInfo[ balaoid ][ posBalaoY ] = GBY;
				 	bInfo[ balaoid ][ posBalaoZ ] = GBZ+0.1;
			 	}
	   			if( bpInfo[ playerid ][ Direcao ] == 2 )
				{
					MoveDynamicObject( bInfo[ balaoid ][ BalaoID ], GBX, GBY, GBZ-0.1, 30.0 );
				   	bInfo[ balaoid ][ posBalaoX ] = GBX;
				 	bInfo[ balaoid ][ posBalaoY ] = GBY;
				 	bInfo[ balaoid ][ posBalaoZ ] = GBZ-0.1;
			 	}
			 	if( bpInfo[ playerid ][ Direcao ] == 3 )
				{
					MoveDynamicObject( bInfo[ balaoid ][ BalaoID ], GBX, GBY+0.5, GBZ, 10.0 );
				   	bInfo[ balaoid ][ posBalaoX ] = GBX;
				 	bInfo[ balaoid ][ posBalaoY ] = GBY+0.5;
				 	bInfo[ balaoid ][ posBalaoZ ] = GBZ;
			 	}
			 	if( bpInfo[ playerid ][ Direcao ] == 4 )
				{
					MoveDynamicObject( bInfo[ balaoid ][ BalaoID ], GBX, GBY-0.5, GBZ, 10.0 );
				   	bInfo[ balaoid ][ posBalaoX ] = GBX;
				 	bInfo[ balaoid ][ posBalaoY ] = GBY-0.5;
				 	bInfo[ balaoid ][ posBalaoZ ] = GBZ;
			 	}
			 	if( bpInfo[ playerid ][ Direcao ] == 5 )
				{
					MoveDynamicObject( bInfo[ balaoid ][ BalaoID ], GBX+0.5, GBY, GBZ, 10.0 );
				   	bInfo[ balaoid ][ posBalaoX ] = GBX+0.5;
				 	bInfo[ balaoid ][ posBalaoY ] = GBY;
				 	bInfo[ balaoid ][ posBalaoZ ] = GBZ;
			 	}
			 	if( bpInfo[ playerid ][ Direcao ] == 6 )
				{
					MoveDynamicObject( bInfo[ balaoid ][ BalaoID ], GBX-0.5, GBY, GBZ, 10.0 );
				   	bInfo[ balaoid ][ posBalaoX ] = GBX-0.5;
				 	bInfo[ balaoid ][ posBalaoY ] = GBY;
				 	bInfo[ balaoid ][ posBalaoZ ] = GBZ;
			 	}
			 	bpInfo[ playerid ][ timerBalao ] = SetTimerEx( "MoverBalao", 90, false, "d", playerid );
			}
		}
	}
	return 1;
}
#endif
//Fim
Reply
#2

Codigos muito grandes use Paste bin
Reply
#3

Ok

http://pastebin.com/sa7spuPv
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)