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. |
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;
}
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); } } } }
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:X, Float:Y, Float:Z, Float:ROT;
GetPlayerPos(playerid, X, Y, Z);
GetPlayerFacingAngle(playerid, ROT);
switch(listitem)
{
case 0: VehiculosGuerra[playerid] = CreateVehicle(432, X, Y, Z, ROT, -1, -1, 60);
case 1: VehiculosGuerra[playerid] = CreateVehicle(520, X, Y, Z, ROT, -1, -1, 60);
case 2: VehiculosGuerra[playerid] = CreateVehicle(425, X, Y, Z, ROT, -1, -1, 60);
}
PutPlayerInVehicle(playerid, VehiculosGuerra[playerid], 0);
}
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
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(vehicleid, killerid) // En caso de que el auto explote "muera" se resetea el valor de la variable para el jugador.
{
for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++) // 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;
}
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; }
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 код:
|
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:X, Float:Y, Float:Z, Float:ROT;
GetPlayerPos(playerid, X, Y, Z);
GetPlayerFacingAngle(playerid, ROT);
switch(listitem)
{
case 0: VehiculosGuerra[playerid] = CreateVehicle(432, X, Y, Z, ROT, -1, -1, 60);
case 1: VehiculosGuerra[playerid] = CreateVehicle(520, X, Y, Z, ROT, -1, -1, 60);
case 2: VehiculosGuerra[playerid] = CreateVehicle(425, X, Y, Z, ROT, -1, -1, 60);
}
PutPlayerInVehicle(playerid, VehiculosGuerra[playerid], 0);
}
}
new bool:StatusCOD;
public OnGameModeInit()
{
StatusCOD = false;
// ** Otros cуdigos...
return true;
}
CMD:codon(playerid, params[])
{
// ** 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 i = 0, j = GetPlayerPoolSize(); i <= j; i++)
{
if(VehiculosGuerra[i] != -1)
{
DestroyVehicle(VehiculosGuerra[i]);
VehiculosGuerra[i] = -1;
}
}
return true;
}
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 код:
PHP код:
|
case DIALOGO_COD:
{
if(response)
{
if(IsValidVehicle(VehiculosGuerra[playerid]))
{
DestroyVehicle(VehiculosGuerra[playerid]);
VehiculosGuerra[playerid] = -1;
}
new Float:X, Float:Y, Float:Z, Float:ROT;
GetPlayerPos(playerid, X, Y, Z);
GetPlayerFacingAngle(playerid, ROT);
switch(listitem)
{
case 0: VehiculosGuerra[playerid] = CreateVehicle(432, X, Y, Z, ROT, -1, -1, 60);
case 1: VehiculosGuerra[playerid] = CreateVehicle(520, X, Y, Z, ROT, -1, -1, 60);
case 2: VehiculosGuerra[playerid] = CreateVehicle(425, X, Y, Z, ROT, -1, -1, 60);
}
PutPlayerInVehicle(playerid, VehiculosGuerra[playerid], 0);
}
}
#if !defined IsValidVehicle
native IsValidVehicle(vehicleid);
#endif
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 }