public Observer_IsValidTarget_Pre(const this, const iTarget, const bool:bOnlyTeam)
{
static Float:origin[3];
static id;
// Esta funcion se llama cuando un espectador hace click para espectar a otro jugador
// this: id del jugador que hizo click
// iTarget: id del jugador al que deberнa espectar ahora
// Si no esta en alguna sala
if (!g_battle[this])
{
// Hacemos que no espectee a nadie (free look)
// OrpheuSetParam(2, 0);
SetHookChainArg(2, ATYPE_INTEGER, 0);
// Estas coordenadas corresponden a la zona de espera
entity_set_origin(this, Float:{2880.0, 640.0, 150.0});
// Nada mбs que hacer
return;
}
// Vamos a iterar desde el id 'this'+1 hasta 'this'-1
// Ejemplo: si el id this es 16, entonces vamos a iterar desde el id 17 hasta el 15
// (cuando se llegue a 32, continua en 1)
// Esto sirve para que se mantenga un ciclo ordenado
for (new i = 0; i <= 31; i++)
{
id = 1 + ((iTarget + i) % 32);
// Si este jugador esta vivo y juega en la misma sala, hacemos que lo espectee
if (g_status[id] == STATUS_JOINED && g_canbattle[id] && g_battle[id] == g_battle[this])
{
// OrpheuSetParam(2, id);
SetHookChainArg(2, ATYPE_INTEGER, id);
return;
}
}
// Si llegamos aqui es porque no hay jugadores vivos en la sala
// Obtenemos las coordenadas de la posicion central de la sala
origin_from_block(g_battle[this], 7, 7, origin);
origin[2] = 150.0;
// Free look
// OrpheuSetParam(2, 0);
SetHookChainArg(2, ATYPE_INTEGER, 0);
// Vaya aquн
entity_set_origin(this, origin);
}