1є O player nгo consegue pilotar o balгo normalmente, o balгo se move muito devagar
Код 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