Bueno, hay una forma simple:
Colocas a todos los jugadores que van a participar en el DM en un mismo mundo virtual (por ejemplo: 10), luego a cada uno aplicas un Timer de unos 3 segundos, aсades estas funciones:
pawn Код:
forward Float:GetDistanceBetweenPlayers(P1, P2); // Detectar la distancia entre los jugadores.
forward GetClosestPlayer(P1); // Detectar al jugador mбs cercano.
pawn Код:
public GetClosestPlayer(P1)
{
new X, Float:Dis, Float:Dis2, Player;
Player = -1;
Dis = 99999.99;
for(X = 0; X < MAX_PLAYERS; X++)
{
if(IsPlayerConnected(X))
{
if(X != P1)
{
Dis2 = GetDistanceBetweenPlayers(X, P1);
if(Dis2 < Dis && Dis2 != -1.00)
{
Dis = Dis2;
Player = X;
}
}
}
}
return Player;
}
pawn Код:
public Float:GetDistanceBetweenPlayers(P1, P2)
{
new Float:X1, Float:Y1, Float:Z1, Float:X2, Float:Y2, Float:Z2;
if(!IsPlayerConnected(P1) || !IsPlayerConnected(P2))
{
return -1.00;
}
GetPlayerPos(P1, X1, Y1, Z1);
GetPlayerPos(P2, X2, Y2, Z2);
return floatsqroot(floatpower(floatabs(floatsub(X2, X1)), 2) + floatpower(floatabs(floatsub(Y2, Y1)), 2) + floatpower(floatabs(floatsub(Z2, Z1)), 2));
}
Y en el timer pones algo como:
pawn Код:
new Target = GetClosestPlayer(playerid);
if(IsPlayerConnected(Target))
if((GetDistanceBetweenPlayers(playerid, Target) > 2000 && (GetPlayerVirtualWorld(Target) == GetPlayerVirtualWorld(playerid))) // El valor 2000 es la distancia, lo puedes cambiar a otro si quieres.
{
SendClientMessage(playerid, -1, "Ningъn jugador cerca."); // Acб la funciуn para ganar.
}
Suerte amigo