DestroyVehicle Duda
#1

Hola, tengo una duda respecto a como usar lo siguiente, intento realizar un comando que cuando el sistema /COD este activo, puedan sacar vehiculos de guerra como rhinos, hunters e hydras, hasta ahi todo bien.

Con el sig parametro saco los autos en mi servidor.
Crearauto(playerid,425);

Pero al momento de desactivar dicha funcion /CODOFF , se destruyan todos los autos creados con esas id's 425 -Hunter , 432 - Rhino y 520 Hydra. Que si un usuario saco alguno de esos autos al momento de desactivar el sistema /CODOFF , se destruyan en automatico.

gracias por su atencion.
Reply
#2

Quote:
Originally Posted by Fpwn
Посмотреть сообщение
Hola, tengo una duda respecto a como usar lo siguiente, intento realizar un comando que cuando el sistema /COD este activo, puedan sacar vehiculos de guerra como rhinos, hunters e hydras, hasta ahi todo bien.

Con el sig parametro saco los autos en mi servidor.
Crearauto(playerid,425);

Pero al momento de desactivar dicha funcion /CODOFF , se destruyan todos los autos creados con esas id's 425 -Hunter , 432 - Rhino y 520 Hydra. Que si un usuario saco alguno de esos autos al momento de desactivar el sistema /CODOFF , se destruyan en automatico.

gracias por su atencion.
Quizб te pueda ayudar esta funciуn:

pawn Код:
new bool:COD;
new VehiculosGuerra[MAX_PLAYERS];

if(COD == true)
{
     VehiculosGuerra[playerid] = CreateVehicle(425,...);
     VehiculosGuerra[playerid] = CreateVehicle(432,...);
     VehiculosGuerra[playerid] = CreateVehicle(520,...);
}
else if(COD == false)
{
     for(new i = 0; i < MAX_PLAYERS; i++)
    {
          DestroyVehicle(VehiculosGuerra[i]);
    }
    return 1;
}
Reply
#3

Hola, gracias por el dato, te comento que tengo algo asi en mi GM , solo que cuando alguien mas se conecta e intenta sacar un auto de guerra , se me desaparece ami al igual yo intento sacar otro auto de guerra y se le desaparece al otro usuario, no encuentro la falla.

Tengo algo asi para sacar los autos de guerra por dialogo mira ->


Код:
new VehiculosGuerra[MAX_PLAYERS];
----------------

CMD:AUTOSCOD...........bla bla bla.........
----------------

CMD:CODOFF(playerid,params[])
{

for(new i = 0; i < MAX_PLAYERS; i++)
    {
    DestroyVehicle(VehiculosGuerra[i]);
    }
return 1;
}
------------------

case DIALOGO_COD:
  	{
		    if(response)
		    {
		        switch(listitem)
		        {
		            case 0:
				 {
                     DestroyVehicle(VehiculosGuerra[playerid]);
                     new Float:X,Float:Y,Float:Z,Float:ROT;
                     GetPlayerPos(playerid,X,Y,Z);
                     GetPlayerFacingAngle (playerid,ROT);
                     VehiculosGuerra[playerid] = CreateVehicle(432,-9017.8018,-2270.8801,761.9372,ROT,-1,-1,60); SetVehiclePos(VehiculosGuerra[playerid],X,Y,Z);
                     PutPlayerInVehicle(playerid,VehiculosGuerra[playerid],0);
					}
					case 1:
					{
                      DestroyVehicle(VehiculosGuerra[playerid]);
                      new Float:X,Float:Y,Float:Z,Float:ROT;
                      GetPlayerPos(playerid,X,Y,Z);
                      GetPlayerFacingAngle (playerid,ROT);
                      VehiculosGuerra[playerid] = CreateVehicle(520,-9017.8018,-2270.8801,761.9372,ROT,-1,-1,60); SetVehiclePos(VehiculosGuerra[playerid],X,Y,Z);
                      PutPlayerInVehicle(playerid,VehiculosGuerra[playerid],0);
					}
					case 2:
					{
                     DestroyVehicle(VehiculosGuerra[playerid]);
                     new Float:X,Float:Y,Float:Z,Float:ROT;
                     GetPlayerPos(playerid,X,Y,Z);
                     GetPlayerFacingAngle (playerid,ROT);
                     VehiculosGuerra[playerid] = CreateVehicle(425,-9017.8018,-2270.8801,761.9372,ROT,-1,-1,60); SetVehiclePos(VehiculosGuerra[playerid],X,Y,Z);
                     PutPlayerInVehicle(playerid,VehiculosGuerra[playerid],0);
					}

		        }
		    }
		}
Reply
#4

1. їPor quй usas 3 casos con una misma funciуn?
2. їPor quй usas DestroyVehicle al apenas "entrar" a la guerra?
3. їEn OnPlayerExitVehicle tienes alguna sentencia que elimine el vehнculo al bajarse?, si no, deberнas aсadirlo.
4. їEstбs reiniciando los valores de las variables al conectar un jugador y/o salirse de la guerra?

Aquн te dejarй un cуdigo base para que te guнes.

PHP код:
new VehiculosGuerra[MAX_PLAYERS];
public 
OnPlayerConnect(playerid)
{
    
VehiculosGuerra[playerid] = -1;
    
// ** Otros cуdigos.
    
return true;
}
// ** El CMD que tengas para entrar a la guerra...
case DIALOGO_COD
{  
    if(
response)  
    {  
        if(
VehiculosGuerra[playerid] != -1) return SendClientMessage(playerid, -1"Usted ya spawneу un auto."); // Si el jugador ya spawneу un auto y no lo borrу, marcarб error.  
        
if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1"Ya estбs en un vehнculo."); // Si el jugador ya se encuentra en un auto, marcarб error.  
        
new Float:XFloat:YFloat:ZFloat:ROT
        
GetPlayerPos(playeridXYZ);  
        
GetPlayerFacingAngle(playeridROT);  
        switch(
listitem)  
        {  
            case 
0VehiculosGuerra[playerid] = CreateVehicle(432XYZROT, -1, -160); 
            case 
1VehiculosGuerra[playerid] = CreateVehicle(520XYZROT, -1, -160); 
            case 
2VehiculosGuerra[playerid] = CreateVehicle(425XYZROT, -1, -160); 
        } 
        
PutPlayerInVehicle(playeridVehiculosGuerra[playerid], 0); 
    }  
}
public 
OnPlayerExitVehicle(playeridvehicleid)
{
    if(
VehiculosGuerra[playerid] != -1// ** Aquн se comprueba que si el jugador se baja de su auto de guerra, se elimine y se reinicie el valor para crear otro auto.
    
{
         
DestroyVehicle(VehiculosGuerra[playerid]);
         
VehiculosGuerra[playerid] = -1;
    }
    
    
// ** Otros cуdigos.
    
return true;
}
public 
OnVehicleDeath(vehicleidkillerid// En caso de que el auto explote "muera" se resetea el valor de la variable para el jugador.
{
    for(new 
0GetPlayerPoolSize(); <= ji++) // Recomiendo el foreach para la verificaciуn.
    
{
        if(
VehiculosGuerra[i] == vehicleid)
        {
            
VehiculosGuerra[i] = -1;
            break; 
// Rompemos el bucle y que siga con el el cуdigo de abajo.
        
}
    }
    
// ** Otros cуdigos.
    
return true;

Tйcnicamente, el sistema te lo dejй hecho nada mбs de copiar y pegar, saludos.
Reply
#5

Код:
new bool:_@CODIsActive;

public OnFilterScriptInit()
{
    _@CODIsActive = false;
    for(new i = 1, j = GetVehiclePoolSize(); i <= j; i++)
    {
        if(GetVehicleModel(i) == 425 || GetVehicleModel(i) == 432 || GetVehicleModel(i) == 520)
        {
            DestroyVehicle(i);
        }
    }
    return 1;
}

CMD:cod(playerid,params[])
{
    _@CODIsActive = true;
    return 1;
}

CMD:codoff(playerid,params[])
{
    _@CODIsActive = false;
    for(new i = 1, j = GetVehiclePoolSize(); i <= j; i++)
    {
        if(GetVehicleModel(i) == 425 || GetVehicleModel(i) == 432 || GetVehicleModel(i) == 520)
        {
            DestroyVehicle(i);
        }
    }
    return 1;
}
Y usas la variable para saber si pueden o no crear esos vehнculos
Reply
#6

Quote:
Originally Posted by Unrea1
Посмотреть сообщение
1. їPor quй usas 3 casos con una misma funciуn?
2. їPor quй usas DestroyVehicle al apenas "entrar" a la guerra?
3. їEn OnPlayerExitVehicle tienes alguna sentencia que elimine el vehнculo al bajarse?, si no, deberнas aсadirlo.
4. їEstбs reiniciando los valores de las variables al conectar un jugador y/o salirse de la guerra?

Aquн te dejarй un cуdigo base para que te guнes.

PHP код:
new VehiculosGuerra[MAX_PLAYERS];
public 
OnPlayerConnect(playerid)
{
    
VehiculosGuerra[playerid] = -1;
    
// ** Otros cуdigos.
    
return true;
}
// ** El CMD que tengas para entrar a la guerra...
case DIALOGO_COD:
{
    if(
response)
    {
        if(
VehiculosGuerra[playerid] != -1) return SendClientMessage(playerid, -1"Usted ya spawneу un auto."); // Si el jugador ya spawneу un auto y no lo borrу, marcarб error.
        
if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1"Ya estбs en un vehнculo."); // Si el jugador ya se encuentra en un auto, marcarб error.
        
switch(listitem)
        {
            case 
0..2:
             {
                new 
Float:XFloat:YFloat:ZFloat:ROT;
                
GetPlayerPos(playeridXYZ);
                
GetPlayerFacingAngle(playeridROT);
                
VehiculosGuerra[playerid] = CreateVehicle(432, -9017.8018, -2270.8801761.9372ROT, -1, -160); 
                
SetVehiclePos(VehiculosGuerra[playerid], XYZ);
                
PutPlayerInVehicle(playeridVehiculosGuerra[playerid], 0);
            }
        }
    }
}
public 
OnPlayerExitVehicle(playeridvehicleid)
{
    if(
VehiculosGuerra[playerid] != -1// ** Aquн se comprueba que si el jugador se baja de su auto de guerra, se elimine y se reinicie el valor para crear otro auto.
    
{
         
DestroyVehicle(VehiculosGuerra[playerid]);
         
VehiculosGuerra[playerid] = -1;
    }
    
    
// ** Otros cуdigos.
    
return true;
}
public 
OnVehicleDeath(vehicleidkillerid// En caso de que el auto explote "muera" se resetea el valor de la variable para el jugador.
{
    for(new 
0GetPlayerPoolSize(); <= ji++) // Recomiendo el foreach para la verificaciуn.
    
{
        if(
VehiculosGuerra[i] == vehicleid)
        {
            
VehiculosGuerra[i] = -1;
            break; 
// Rompemos el bucle y que siga con el el cуdigo de abajo.
        
}
    }
    
// ** Otros cуdigos.
    
return true;

Tйcnicamente, el sistema te lo dejй hecho nada mбs de copiar y pegar, saludos.
1. їPor quй usas 3 casos con una misma funciуn? -- No uso 3 casos para la misma funcion , son 3 casos para sacar 1-Rhino 2-Hunter y 3- Hydra

2. їPor quй usas DestroyVehicle al apenas "entrar" a la guerra?
No uso Destroyvehicle al entrar ala guerra ese cmd es para cuando finalizo la guerra /CODOFF que tйcnicamente destruirнa los vehнculos

3. їEn OnPlayerExitVehicle tienes alguna sentencia que elimine el vehнculo al bajarse?, si no, deberнas aсadirlo.
Si, cuento con ello

4. їEstбs reiniciando los valores de las variables al conectar un jugador y/o salirse de la guerra?
Si


Al momento de activar el sistema /CODON , pueden usar el cmd /COD el cual abre un dialogo para elegir entre el rhino, hunter o hydra, hasta ahi todo bien, pasa que cuando otro jugador se conecta y usa el sistema /COD , abre el dialogo y elije un vehнculo de los antes mencionados se destruye el vehнculo que tenia otro usuario que tambiйn uso el cmd /COD y que cuenta con un vehнculo de guerra, ahi estoy teniendo el problema.

Me surgiу una duda el si podнa eliminar esos vehнculos por id , osea que al momento de finalizar el sistema /CODOFF , elimine todos los vehнculos creados por usuarios en el servidor con esas id's (Rhino, Hunter e Hydra)

No se si me explique, agradezco su atenciуn.
Reply
#7

Pues es obvio, por que el jugador nuevo que entre a COD y use el dialog, lo primero por delante es DestroyVehicle, ahн tienes el cуdigo hecho, no me fijй que el modelo de auto cambia en CreateVehicle, en todo caso, la funciуn del dialog serнa de esta manera:

PHP код:
case DIALOGO_COD:

    if(
response
    { 
        if(
VehiculosGuerra[playerid] != -1) return SendClientMessage(playerid, -1"Usted ya spawneу un auto."); // Si el jugador ya spawneу un auto y no lo borrу, marcarб error. 
        
if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1"Ya estбs en un vehнculo."); // Si el jugador ya se encuentra en un auto, marcarб error. 
        
new Float:XFloat:YFloat:ZFloat:ROT;
        
GetPlayerPos(playeridXYZ); 
        
GetPlayerFacingAngle(playeridROT); 
        switch(
listitem
        { 
            case 
0VehiculosGuerra[playerid] = CreateVehicle(432XYZROT, -1, -160);
            case 
1VehiculosGuerra[playerid] = CreateVehicle(520XYZROT, -1, -160);
            case 
2VehiculosGuerra[playerid] = CreateVehicle(425XYZROT, -1, -160);
        }
        
PutPlayerInVehicle(playeridVehiculosGuerra[playerid], 0);
    } 

Con respecto a el comando /codoff, tienes la opciуn de aoEXE, pero si nos fijamos en el comando, tendrб problemas ya que eliminarб todos los autos de los modelos mencionados estйn o no en el modo COD, por tanto puedes usarlo asн:

PHP код:
new bool:StatusCOD;
public 
OnGameModeInit()
{
    
StatusCOD false;
    
// ** Otros cуdigos...
    
return true;
}
CMD:codon(playeridparams[])
{
    
// ** Aсadir sentencias de nivel administrativo, etc.
    
if(StatusCOD) return SendClientMessage(playerid, -1"Ya se encuentra activado el modo COD.");
    
StatusCOD true;
    
SendClientMessageToAll(-1"COD ON.");
    return 
true;
}
CMD:codoff(playerid,params[])
{
    
// ** Aсadir sentencias de nivel administrativo, etc.
    
if(!StatusCOD) return SendClientMessage(playerid, -1"No estб activado el modo COD.");
    
StatusCOD false;
    
SendClientMessageToAll(-1"COD OFF.");
    for(new 
0GetPlayerPoolSize(); <= ji++)
    {
        if(
VehiculosGuerra[i] != -1)
        {
            
DestroyVehicle(VehiculosGuerra[i]);
            
VehiculosGuerra[i] = -1;
        }
    }
    return 
true;

Reply
#8

Quote:
Originally Posted by Unrea1
Посмотреть сообщение
Pues es obvio, por que el jugador nuevo que entre a COD y use el dialog, lo primero por delante es DestroyVehicle, ahн tienes el cуdigo hecho, no me fijй que el modelo de auto cambia en CreateVehicle, en todo caso, la funciуn del dialog serнa de esta manera:

PHP код:
case DIALOGO_COD:

    if(
response
    { 
        if(
VehiculosGuerra[playerid] != -1) return SendClientMessage(playerid, -1"Usted ya spawneу un auto."); // Si el jugador ya spawneу un auto y no lo borrу, marcarб error. 
        
if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1"Ya estбs en un vehнculo."); // Si el jugador ya se encuentra en un auto, marcarб error. 
        
new Float:XFloat:YFloat:ZFloat:ROT;
        
GetPlayerPos(playeridXYZ); 
        
GetPlayerFacingAngle(playeridROT); 
        switch(
listitem
        { 
            case 
0VehiculosGuerra[playerid] = CreateVehicle(432XYZROT, -1, -160);
            case 
1VehiculosGuerra[playerid] = CreateVehicle(520XYZROT, -1, -160);
            case 
2VehiculosGuerra[playerid] = CreateVehicle(425XYZROT, -1, -160);
        }
        
PutPlayerInVehicle(playeridVehiculosGuerra[playerid], 0);
    } 

Con respecto a el comando /codoff, tienes la opciуn de aoEXE, pero si nos fijamos en el comando, tendrб problemas ya que eliminarб todos los autos de los modelos mencionados estйn o no en el modo COD, por tanto puedes usarlo asн:

PHP код:
new bool:StatusCOD;
public 
OnGameModeInit()
{
    
StatusCOD false;
    
// ** Otros cуdigos...
    
return true;
}
CMD:codon(playeridparams[])
{
    
// ** Aсadir sentencias de nivel administrativo, etc.
    
if(StatusCOD) return SendClientMessage(playerid, -1"Ya se encuentra activado el modo COD.");
    
StatusCOD true;
    
SendClientMessageToAll(-1"COD ON.");
    return 
true;
}
CMD:codoff(playerid,params[])
{
    
// ** Aсadir sentencias de nivel administrativo, etc.
    
if(!StatusCOD) return SendClientMessage(playerid, -1"No estб activado el modo COD.");
    
StatusCOD false;
    
SendClientMessageToAll(-1"COD OFF.");
    for(new 
0GetPlayerPoolSize(); <= ji++)
    {
        if(
VehiculosGuerra[i] != -1)
        {
            
DestroyVehicle(VehiculosGuerra[i]);
            
VehiculosGuerra[i] = -1;
        }
    }
    return 
true;

Ya veo gracias por la aclaracion, ahora mi duda es la sig linea ->

if(VehiculosGuerra[playerid] != -1) return SendClientMessage(playerid, -1, "Usted ya spawneу un auto."); // Si el jugador ya spawneу un auto y no lo borrу, marcarб error.

Como sera que el usuario al usar otro auto del mismo dialogo de guerra lo borre en automбtico antes de usar y que no elimine los demбs autos como el dialogo anterior que pase.

Ya que si el usuario por error sale del vehнculo para sacar otro no lo dejara por que ya spawneo uno

No se si me explique,gracias.
Reply
#9

Si el usuario sale del auto puede crear otro a su gusto, sуlo que mientras estб conduciendo uno no podrб spawnear nada, tendrнa que bajarse primero, fнjate en el cуdigo de OnPlayerExitVehicle.

Si quieres que el usuario pueda cambiar a gusto el auto estando ya manejando uno, serнa asн:

PHP код:
case DIALOGO_COD:
{
    if(
response)
    {
        if(
IsValidVehicle(VehiculosGuerra[playerid]))
        {
            
DestroyVehicle(VehiculosGuerra[playerid]);
            
VehiculosGuerra[playerid] = -1;
        }
        new 
Float:XFloat:YFloat:ZFloat:ROT;
        
GetPlayerPos(playeridXYZ);
        
GetPlayerFacingAngle(playeridROT);
        switch(
listitem)
        {
            case 
0VehiculosGuerra[playerid] = CreateVehicle(432XYZROT, -1, -160);
            case 
1VehiculosGuerra[playerid] = CreateVehicle(520XYZROT, -1, -160);
            case 
2VehiculosGuerra[playerid] = CreateVehicle(425XYZROT, -1, -160);
        }
        
        
PutPlayerInVehicle(playeridVehiculosGuerra[playerid], 0);
    }

Si no quieres que se elimine el auto al bajarse, solo remueve el cуdigo de OnPlayerVehicleExit.

EDIT:

PD: Si te marca error/warning de que IsValidVehicle no existe, aсade йste cуdigo debajo de los includes:

PHP код:
#if !defined IsValidVehicle
    
native IsValidVehicle(vehicleid);
#endif 
Mбs informaciуn de la funciуn: https://sampwiki.blast.hk/wiki/IsValidVehicle
Reply
#10

Код:
Defines la variable de los vehiculos de guerra:
new AutosG[MAX_PLAYERS];

En cada auto, bueno yo lo tengo asi:
CMD:rhino(playerid, params[])
{
	if(AutosG[playerid] != -1) DestroyVehicle(AutosG[playerid]);
	new Float:x, Float:y, Float:z, Float:angle;
	{
		GetPlayerPos( playerid, x, y, z );
		GetPlayerFacingAngle( playerid, angle );
	}
	AutosG[playerid] = CreateVehicle(432, x+3, y, z, angle, -1, -1, 300);
	LinkVehicleToInterior( AutosG[playerid], GetPlayerInterior( playerid ) );
	SetVehicleVirtualWorld( AutosG[playerid], GetPlayerVirtualWorld( playerid ) );
	PutPlayerInVehicle( playerid, AutosG[playerid], 0 );
	GameTextForPlayer(playerid, "~g~~h~rhino", 6000, 5); //-Rhino
	SetVehicleHealth(GetPlayerVehicleID(playerid), 1000);
	PlayerPlaySound(playerid, 1133, 0.0, 0.0, 0.0);
	return 1;
}

Si hay un rhino, hunter o hydra en el mapa y la guerra estб desactivada:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
	if(Informacion[playerid][Evento] == 0) // tu variable de evento
	{
		if(newstate == PLAYER_STATE_DRIVER)
		{
			if(AutosGu(GetPlayerVehicleID(playerid)))
			{
 				RemovePlayerFromVehicle(playerid);
				GameTextForPlayer(playerid, "~w~El evento ~g~~h~guerra total ~w~esta desactivado~n~no puedes usar este vehiculo!",6000,3);
			}
		}
	}
	return 1;
}

Stock para ver en que auto entra:
stock AutosGu(modelo)
{
	switch(GetVehicleModel(modelo))
	{
		case 432,520,579: // ID DEL RHINO, HUNTER Y HYDRA
		return 1;
	}
	return 0;
}
Y en tu comando para desactivar la guerra, destruirб todos los vehнculos que tengan un vehiculo creado por el comando:

for(new i=0;i<MAX_PLAYERS;i++)
{
	GameTextForPlayer(i, "~w~guerra total ~g~~h~~h~desactivada!", 4000, 3);
	PlayerPlaySound(i,1057,0.0,0.0,0.0);
        Informacion[i][Evento] = 0; // usa tu variable
	DestroyVehicle(AutosG[i]); //destruye todos los autos de la guerra
}
Insisto, solo cambia tus variables
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)