26.08.2014, 04:14
Tenйs que quitar la lнnea "CreatePickup(370,3,X,Y,Z);", ya que йsta lo que estб haciendo es crear un pickup con el modelo de Jetpack, que al pisarlo active el mismo, asн obteniendo un Jetpack como acciуn especial (client side).
Por cierto, si querйs tener los jetpacks server side en conjunto con un anticheat bбsico, serнa asн:
Lo realicй utilizando "OnPlayerSpecialActionChange", se agradece a Chaoz por lo mencionado.
Por cierto, si querйs tener los jetpacks server side en conjunto con un anticheat bбsico, serнa asн:
pawn Код:
new bool:Jetpack[MAX_PLAYERS];
enum aeInfo // Enumerador que contiene variables que serбn usadas con la nueva callback.
{
aeActual,
aeUltimaActualizacion
};
new AccionEspecial[MAX_PLAYERS][aeInfo];
public OnPlayerConnect(playerid)
{
Jetpack[playerid] = false; // Cuando se conecta un jugador, le establecemos el valor de falso a la variable de Jetpack.
return 1;
}
public OnPlayerUpdate(playerid)
{
new string[128];
if(!AccionEspecial[playerid][aeUltimaActualizacion] || (GetTickCount() - AccionEspecial[playerid][aeUltimaActualizacion]) > 250)
{
new accionespecial = GetPlayerSpecialAction(playerid);
if(AccionEspecial[playerid][aeActual] != accionespecial)
{
CallLocalFunction("OnPlayerSpecialActionChange", "iii", playerid, AccionEspecial[playerid][aeActual], accionespecial);
AccionEspecial[playerid][aeActual] = accionespecial;
}
AccionEspecial[playerid][aeUltimaActualizacion] = GetTickCount();
}
if(GetPlayerSpecialAction(playerid) == 2 && Jetpack[playerid] == false) // Detectamos si un jugador estб usando un jetpack sin la variable server side activada.
{
format(string, sizeof(string), "[ANTICHEAT] El jugador %s [ID: %d] estб utilizando cheat (Jetpack hack).", ObtenerNombre(playerid), playerid);
SendClientMessageToAll(0xFFFF00AA, string);
return 1;
}
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp(cmdtext, "/jetpack", true))
{
// Podrнas aсadir un condicional que detecte si el que lo usa es administrador.
if(Jetpack[playerid] == true) return SendClientMessage(playerid, 0xBFC0C2FF, "[ERROR] Ya tienes puesto un jetpack.");
DarJetpack(playerid); // Le damos un jetpack mediante la funciуn server side, que se lo da con variable.
return 1;
}
return 0;
}
forward OnPlayerSpecialActionChange(playerid, oldspecialaction, newspecialaction);
public OnPlayerSpecialActionChange(playerid, oldspecialaction, newspecialaction) // La callback que detectarб cuбndo a un jugador se le desaparece su acciуn especial, y tambiйn cuбndo se le establece una nueva.
{
if(oldspecialaction == SPECIAL_ACTION_USEJETPACK && Jetpack[playerid] == true) // Detectamos si la acciуn especial vieja fue la de Jetpack, y si en conjunto a eso tenнa activada la variable booleana Jetpack.
{
Jetpack[playerid] = false; // De cumplirse dicha condiciуn, la variable se vuelve falsa.
}
return 1;
}
stock DarJetpack(playerid) // Usada cada vez que quieras dar un jetpack server side.
{
Jetpack[playerid] = true; // Le establecemos el valor de verdadero a la variable Jetpack.
SetPlayerSpecialAction(playerid, 2); // Le damos el jetpack client side.
}
stock ObtenerNombre(playerid) // Funciуn que usaremos para obtener el nombre del jugador al que se lo use como primer argumento.
{
new string[32];
GetPlayerName(playerid, string, 32);
return string;
}