21.02.2016, 14:25
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
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