Deletar veiculos (deletando veiculos do spawn) - fear - 11/07/2021
boa noite.
a função esta deletando não apenas veiculos desocupados mas tb os veiculos do spawn. só queria que deletasse os veiculos criados do /car
Código PHP: forward DeletarVeiculos(); public DeletarVeiculos() { new bool:vehicle[MAX_VEHICLES]; for(new j = 1; GetVehicleModel(j); ++j) { vehicle[j] = false; for(new i, p = GetMaxPlayers(); i < p; ++i) { if(!IsPlayerInAnyVehicle(i) || !IsPlayerConnected(i)) continue; if(IsPlayerInVehicle(i, j)) { vehicle[j] = true; break; } } if(!vehicle[j]) DestroyVehicle(j); } tMensagem(Cinza, "{32CD32}» {F8F8FF}Veículos deletados{A9A9A9}."); return 1; }
RE: Deletar veiculos (deletando veiculos do spawn) - ipsLuan - 11/07/2021
Esse loop aí está totalmente errado.
Qual variável que você usa para identificar se um veículo foi criado pelo comando?
O certo é você percorrer o loop com MAX_VEHICLES e fazer a verificação se o ID do veículo foi criado pelo comando.
RE: Deletar veiculos (deletando veiculos do spawn) - fear - 11/07/2021
(11/07/2021 22:14)ipsLuan Escreveu: Esse loop aí está totalmente errado.
Qual variável que você usa para identificar se um veículo foi criado pelo comando?
O certo é você percorrer o loop com MAX_VEHICLES e fazer a verificação se o ID do veículo foi criado pelo comando.
Código PHP: CMD:car(playerid, params[]) { if(pAusente[playerid] == true) return pMensagem(playerid, Vermelho, "-ERRO- Você está ausente."); if(pPreso[playerid] == true) return pMensagem(playerid, Vermelho, "-ERRO- Você está preso."); if(EmArenaDM[playerid] == true) return pMensagem(playerid, Vermelho, "-ERRO- Você não pode usar este comando em uma arena."); if(pEvento[playerid] == true) return pMensagem(playerid, Vermelho, "-ERRO- Você está no evento."); new vID[15], Cor, Cor2; if(sscanf(params, "s[15]ii", vID, Cor, Cor2)) return pMensagem(playerid, Laranja, "[INFO] Use: /Car [Nome] [Corid] [Corid]"); new bool:existe, VeiculoID; for(new r = 0;r < 212; r++) { if(!strcmp(vID, sCars[r],true)) { existe = true; } if(!strcmp(vID, sCars[r],true)) VeiculoID = (r+400); } if(!existe) return pMensagem(playerid, Vermelho, "[ERRO] Veículo não existe."); if(pDMLiberado[playerid] == false && sCAdmin[playerid] < 5) { if(VeiculoID == 520 || VeiculoID == 432 || VeiculoID == 592 || VeiculoID == 425 || VeiculoID == 464 || VeiculoID == 406 || VeiculoID == 476 || VeiculoID == 447) return pMensagem(playerid, -1, "[INFO] Este veículo não é permitido neste mundo."); } GetPlayerPos(playerid, X, Y, Z); GetPlayerFacingAngle(playerid, Angle); CriarVeiculo(playerid, VeiculoID, X, Y, Z+1, Angle, Cor, Cor2, 0); return 1; }
RE: Deletar veiculos (deletando veiculos do spawn) - k2bi_YT - 12/07/2021
(11/07/2021 22:46)fear Escreveu: (11/07/2021 22:14)ipsLuan Escreveu: Esse loop aí está totalmente errado.
Qual variável que você usa para identificar se um veículo foi criado pelo comando?
O certo é você percorrer o loop com MAX_VEHICLES e fazer a verificação se o ID do veículo foi criado pelo comando.
Código PHP: CMD:car(playerid, params[]) { if(pAusente[playerid] == true) return pMensagem(playerid, Vermelho, "-ERRO- Você está ausente."); if(pPreso[playerid] == true) return pMensagem(playerid, Vermelho, "-ERRO- Você está preso."); if(EmArenaDM[playerid] == true) return pMensagem(playerid, Vermelho, "-ERRO- Você não pode usar este comando em uma arena."); if(pEvento[playerid] == true) return pMensagem(playerid, Vermelho, "-ERRO- Você está no evento."); new vID[15], Cor, Cor2; if(sscanf(params, "s[15]ii", vID, Cor, Cor2)) return pMensagem(playerid, Laranja, "[INFO] Use: /Car [Nome] [Corid] [Corid]"); new bool:existe, VeiculoID; for(new r = 0;r < 212; r++) { if(!strcmp(vID, sCars[r],true)) { existe = true; } if(!strcmp(vID, sCars[r],true)) VeiculoID = (r+400); } if(!existe) return pMensagem(playerid, Vermelho, "[ERRO] Veículo não existe."); if(pDMLiberado[playerid] == false && sCAdmin[playerid] < 5) { if(VeiculoID == 520 || VeiculoID == 432 || VeiculoID == 592 || VeiculoID == 425 || VeiculoID == 464 || VeiculoID == 406 || VeiculoID == 476 || VeiculoID == 447) return pMensagem(playerid, -1, "[INFO] Este veículo não é permitido neste mundo."); } GetPlayerPos(playerid, X, Y, Z); GetPlayerFacingAngle(playerid, Angle); CriarVeiculo(playerid, VeiculoID, X, Y, Z+1, Angle, Cor, Cor2, 0); return 1; }
Você deve criar uma variavel global para definir qual veiculo será criado por CMD, nesse meio você deve ver qual vai ser o melhor para o seu sistema, assim sendo criado veiculo salvando na variavel o jogador ou salvando o ID (ID MESMO E NÃO O MODELO_ID) do veiculo
Exemplo:
Código PHP: new VeiculoPorCMD[MAX_VEHICLES]; VeiculoPorCMD[vehicleid//playerid] = CriarVeiculo(....);
RE: Deletar veiculos (deletando veiculos do spawn) - xbruno1000x - 12/07/2021
Código: stock CriarVeiculo(playerid, modelid, Float:posX, Float:posY, Float:posZ, Float:angle, Colour1, Colour2, respawn_delay)
{
new world = GetPlayerVirtualWorld(playerid);
new interior = GetPlayerInterior(playerid);
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
DestroyVehicle(GetPlayerVehicleID(playerid));
GetPlayerPos(playerid, posX, posY, posZ);
GetPlayerFacingAngle(playerid, angle);
SDSCar[playerid] = CreateVehicle(modelid, posX, posY, posZ, angle, Colour1, Colour2, respawn_delay);
LinkVehicleToInterior(SDSCar[playerid], interior);
SetVehicleVirtualWorld(SDSCar[playerid], world);
SetVehicleZAngle(SDSCar[playerid], angle);
PutPlayerInVehicle(playerid, SDSCar[playerid], 0);
SetPlayerInterior(playerid, interior);
}
if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
{
if(VeiculoOcupado(SDSCar[playerid])) {} else DestroyVehicle(SDSCar[playerid]);
GetPlayerPos(playerid, posX, posY, posZ);
GetPlayerFacingAngle(playerid, angle);
SDSCar[playerid] = CreateVehicle(modelid, posX, posY, posZ, angle, Colour1, Colour2, respawn_delay);
LinkVehicleToInterior(SDSCar[playerid], interior);
SetVehicleVirtualWorld(SDSCar[playerid], world);
SetVehicleZAngle(SDSCar[playerid], angle);
PutPlayerInVehicle(playerid, SDSCar[playerid], 0);
SetPlayerInterior(playerid, interior);
}
return 1;
}
Acredito que a stock seja essa, sendo assim o ID é SDSCar[playerid]. Caso não seja a mesma stock, basta procurar por ela e encontrar como está o ID no seu. Depois basta fazer o que os amigos acima recomendaram.
RE: Deletar veiculos (deletando veiculos do spawn) - fear - 12/07/2021
(12/07/2021 00:32)xbruno1000x Escreveu: Código: stock CriarVeiculo(playerid, modelid, Float:posX, Float:posY, Float:posZ, Float:angle, Colour1, Colour2, respawn_delay)
{
new world = GetPlayerVirtualWorld(playerid);
new interior = GetPlayerInterior(playerid);
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
DestroyVehicle(GetPlayerVehicleID(playerid));
GetPlayerPos(playerid, posX, posY, posZ);
GetPlayerFacingAngle(playerid, angle);
SDSCar[playerid] = CreateVehicle(modelid, posX, posY, posZ, angle, Colour1, Colour2, respawn_delay);
LinkVehicleToInterior(SDSCar[playerid], interior);
SetVehicleVirtualWorld(SDSCar[playerid], world);
SetVehicleZAngle(SDSCar[playerid], angle);
PutPlayerInVehicle(playerid, SDSCar[playerid], 0);
SetPlayerInterior(playerid, interior);
}
if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
{
if(VeiculoOcupado(SDSCar[playerid])) {} else DestroyVehicle(SDSCar[playerid]);
GetPlayerPos(playerid, posX, posY, posZ);
GetPlayerFacingAngle(playerid, angle);
SDSCar[playerid] = CreateVehicle(modelid, posX, posY, posZ, angle, Colour1, Colour2, respawn_delay);
LinkVehicleToInterior(SDSCar[playerid], interior);
SetVehicleVirtualWorld(SDSCar[playerid], world);
SetVehicleZAngle(SDSCar[playerid], angle);
PutPlayerInVehicle(playerid, SDSCar[playerid], 0);
SetPlayerInterior(playerid, interior);
}
return 1;
}
Acredito que a stock seja essa, sendo assim o ID é SDSCar[playerid]. Caso não seja a mesma stock, basta procurar por ela e encontrar como está o ID no seu. Depois basta fazer o que os amigos acima recomendaram.
Eu tentei fazer assim:
Código PHP: stock IsVehicleOccupied(vehicleid) { for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerInVehicle(i, vehicleid) && GetPlayerState(i) == PLAYER_STATE_DRIVER) return 1; return 0; }
Código PHP: CMD:dlc(playerid) { for(new v; v<MAX_VEHICLES; v++) if(!IsVehicleOccupied(v)) DestroyVehicle(v); return 1; }
só que da isso...
Código PHP: error 021: symbol already defined: "IsVehicleOccupied"
A Maneira que você falaram acima não consegui entender.
a variavel do car é: sCar[playerid]
se puderem ajudar..
RE: Deletar veiculos (deletando veiculos do spawn) - xbruno1000x - 12/07/2021
(12/07/2021 05:53)fear Escreveu: (12/07/2021 00:32)xbruno1000x Escreveu: Código: stock CriarVeiculo(playerid, modelid, Float:posX, Float:posY, Float:posZ, Float:angle, Colour1, Colour2, respawn_delay)
{
new world = GetPlayerVirtualWorld(playerid);
new interior = GetPlayerInterior(playerid);
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
DestroyVehicle(GetPlayerVehicleID(playerid));
GetPlayerPos(playerid, posX, posY, posZ);
GetPlayerFacingAngle(playerid, angle);
SDSCar[playerid] = CreateVehicle(modelid, posX, posY, posZ, angle, Colour1, Colour2, respawn_delay);
LinkVehicleToInterior(SDSCar[playerid], interior);
SetVehicleVirtualWorld(SDSCar[playerid], world);
SetVehicleZAngle(SDSCar[playerid], angle);
PutPlayerInVehicle(playerid, SDSCar[playerid], 0);
SetPlayerInterior(playerid, interior);
}
if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
{
if(VeiculoOcupado(SDSCar[playerid])) {} else DestroyVehicle(SDSCar[playerid]);
GetPlayerPos(playerid, posX, posY, posZ);
GetPlayerFacingAngle(playerid, angle);
SDSCar[playerid] = CreateVehicle(modelid, posX, posY, posZ, angle, Colour1, Colour2, respawn_delay);
LinkVehicleToInterior(SDSCar[playerid], interior);
SetVehicleVirtualWorld(SDSCar[playerid], world);
SetVehicleZAngle(SDSCar[playerid], angle);
PutPlayerInVehicle(playerid, SDSCar[playerid], 0);
SetPlayerInterior(playerid, interior);
}
return 1;
}
Acredito que a stock seja essa, sendo assim o ID é SDSCar[playerid]. Caso não seja a mesma stock, basta procurar por ela e encontrar como está o ID no seu. Depois basta fazer o que os amigos acima recomendaram.
Eu tentei fazer assim:
Código PHP: stock IsVehicleOccupied(vehicleid) { for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerInVehicle(i, vehicleid) && GetPlayerState(i) == PLAYER_STATE_DRIVER) return 1; return 0; }
Código PHP: CMD:dlc(playerid) { for(new v; v<MAX_VEHICLES; v++) if(!IsVehicleOccupied(v)) DestroyVehicle(v); return 1; }
só que da isso...
Código PHP: error 021: symbol already defined: "IsVehicleOccupied"
A Maneira que você falaram acima não consegui entender.
a variavel do car é: sCar[playerid]
se puderem ajudar..
1° ponto:
Você colocou duas vezes a função IsVehicleOccupied no gamemode e por isso ocorreu um erro.
2° ponto:
Isso não resolveria seu problema, pois deletaria todos veículos que não estão ocupados. Isso deve ser feito utilizando a variável sCar, é a única maneira de deletar apenas veículos criados por comando.
Por fim, tente assim:
Código: for(new i; i != MAX_PLAYERS; i++) DestroyVehicle(sCar[i]);
RE: Deletar veiculos (deletando veiculos do spawn) - fear - 12/07/2021
(12/07/2021 10:51)xbruno1000x Escreveu: (12/07/2021 05:53)fear Escreveu: (12/07/2021 00:32)xbruno1000x Escreveu: Código: stock CriarVeiculo(playerid, modelid, Float:posX, Float:posY, Float:posZ, Float:angle, Colour1, Colour2, respawn_delay)
{
new world = GetPlayerVirtualWorld(playerid);
new interior = GetPlayerInterior(playerid);
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
DestroyVehicle(GetPlayerVehicleID(playerid));
GetPlayerPos(playerid, posX, posY, posZ);
GetPlayerFacingAngle(playerid, angle);
SDSCar[playerid] = CreateVehicle(modelid, posX, posY, posZ, angle, Colour1, Colour2, respawn_delay);
LinkVehicleToInterior(SDSCar[playerid], interior);
SetVehicleVirtualWorld(SDSCar[playerid], world);
SetVehicleZAngle(SDSCar[playerid], angle);
PutPlayerInVehicle(playerid, SDSCar[playerid], 0);
SetPlayerInterior(playerid, interior);
}
if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
{
if(VeiculoOcupado(SDSCar[playerid])) {} else DestroyVehicle(SDSCar[playerid]);
GetPlayerPos(playerid, posX, posY, posZ);
GetPlayerFacingAngle(playerid, angle);
SDSCar[playerid] = CreateVehicle(modelid, posX, posY, posZ, angle, Colour1, Colour2, respawn_delay);
LinkVehicleToInterior(SDSCar[playerid], interior);
SetVehicleVirtualWorld(SDSCar[playerid], world);
SetVehicleZAngle(SDSCar[playerid], angle);
PutPlayerInVehicle(playerid, SDSCar[playerid], 0);
SetPlayerInterior(playerid, interior);
}
return 1;
}
Acredito que a stock seja essa, sendo assim o ID é SDSCar[playerid]. Caso não seja a mesma stock, basta procurar por ela e encontrar como está o ID no seu. Depois basta fazer o que os amigos acima recomendaram.
Eu tentei fazer assim:
Código PHP: stock IsVehicleOccupied(vehicleid) { for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerInVehicle(i, vehicleid) && GetPlayerState(i) == PLAYER_STATE_DRIVER) return 1; return 0; }
Código PHP: CMD:dlc(playerid) { for(new v; v<MAX_VEHICLES; v++) if(!IsVehicleOccupied(v)) DestroyVehicle(v); return 1; }
só que da isso...
Código PHP: error 021: symbol already defined: "IsVehicleOccupied"
A Maneira que você falaram acima não consegui entender.
a variavel do car é: sCar[playerid]
se puderem ajudar..
1° ponto:
Você colocou duas vezes a função IsVehicleOccupied no gamemode e por isso ocorreu um erro.
2° ponto:
Isso não resolveria seu problema, pois deletaria todos veículos que não estão ocupados. Isso deve ser feito utilizando a variável sCar, é a única maneira de deletar apenas veículos criados por comando.
Por fim, tente assim:
Código: for(new i; i != MAX_PLAYERS; i++) DestroyVehicle(sCar[i]);
Vai deletar os abandonados? Ou vai deletar todos independente se tem ocupante ou não?
RE: Deletar veiculos (deletando veiculos do spawn) - fear - 12/07/2021
(12/07/2021 10:51)xbruno1000x Escreveu: (12/07/2021 05:53)fear Escreveu: (12/07/2021 00:32)xbruno1000x Escreveu: Código: stock CriarVeiculo(playerid, modelid, Float:posX, Float:posY, Float:posZ, Float:angle, Colour1, Colour2, respawn_delay)
{
new world = GetPlayerVirtualWorld(playerid);
new interior = GetPlayerInterior(playerid);
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
DestroyVehicle(GetPlayerVehicleID(playerid));
GetPlayerPos(playerid, posX, posY, posZ);
GetPlayerFacingAngle(playerid, angle);
SDSCar[playerid] = CreateVehicle(modelid, posX, posY, posZ, angle, Colour1, Colour2, respawn_delay);
LinkVehicleToInterior(SDSCar[playerid], interior);
SetVehicleVirtualWorld(SDSCar[playerid], world);
SetVehicleZAngle(SDSCar[playerid], angle);
PutPlayerInVehicle(playerid, SDSCar[playerid], 0);
SetPlayerInterior(playerid, interior);
}
if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
{
if(VeiculoOcupado(SDSCar[playerid])) {} else DestroyVehicle(SDSCar[playerid]);
GetPlayerPos(playerid, posX, posY, posZ);
GetPlayerFacingAngle(playerid, angle);
SDSCar[playerid] = CreateVehicle(modelid, posX, posY, posZ, angle, Colour1, Colour2, respawn_delay);
LinkVehicleToInterior(SDSCar[playerid], interior);
SetVehicleVirtualWorld(SDSCar[playerid], world);
SetVehicleZAngle(SDSCar[playerid], angle);
PutPlayerInVehicle(playerid, SDSCar[playerid], 0);
SetPlayerInterior(playerid, interior);
}
return 1;
}
Acredito que a stock seja essa, sendo assim o ID é SDSCar[playerid]. Caso não seja a mesma stock, basta procurar por ela e encontrar como está o ID no seu. Depois basta fazer o que os amigos acima recomendaram.
Eu tentei fazer assim:
Código PHP: stock IsVehicleOccupied(vehicleid) { for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerInVehicle(i, vehicleid) && GetPlayerState(i) == PLAYER_STATE_DRIVER) return 1; return 0; }
Código PHP: CMD:dlc(playerid) { for(new v; v<MAX_VEHICLES; v++) if(!IsVehicleOccupied(v)) DestroyVehicle(v); return 1; }
só que da isso...
Código PHP: error 021: symbol already defined: "IsVehicleOccupied"
A Maneira que você falaram acima não consegui entender.
a variavel do car é: sCar[playerid]
se puderem ajudar..
1° ponto:
Você colocou duas vezes a função IsVehicleOccupied no gamemode e por isso ocorreu um erro.
2° ponto:
Isso não resolveria seu problema, pois deletaria todos veículos que não estão ocupados. Isso deve ser feito utilizando a variável sCar, é a única maneira de deletar apenas veículos criados por comando.
Por fim, tente assim:
Código: for(new i; i != MAX_PLAYERS; i++) DestroyVehicle(sCar[i]);
Funcionou. porem eu queria que deletasse somente os abandonados.. ele ta deletando mesmo os que tem player dentro.
RE: Deletar veiculos (deletando veiculos do spawn) - xbruno1000x - 12/07/2021
Código: for(new i; i != MAX_PLAYERS; i++)
{
if(!IsPlayerInVehicle(i, sCar[i]))
{
DestroyVehicle(sCar[i]);
}
}
|