Ordenar jugadores por coordenadas.
#1

Hola.

Bueno, quiero hacer un script que trata de un comando para admin, (ya esta hecho) el cual tira un mensaje a todos que se ha iniciado un evento y deben poner /unirse.

Es sobre un derby, como el del Single Player en el estadio de SF.

El problema es que no sй como hacer para que una coordenada no se repita al momento de que el jugador ponga /unirse, quedarнa en cima de otro, y bueno esa es mi duda.
Reply
#2

Se me ocurre algo ultra sencillo, usar el SetPlayerPos con tus coordenadas, pero en la parte de X o Y (ejes) le sumes playerid (no en los dos, sуlo en uno)..
Reply
#3

Disculpa, pero no entendн mucho Dx.
Si podrнas mandarme el cуdigo hecho para entenderlo mejor te lo agradecerнa.
Reply
#4

Ahн lo armo.
Reply
#5

Puedes hacer algo muy facil, en plan.

pawn Код:
CMD:unirse(playerid, params[])
{
      Unirse(playerid);
      SendClientMessageToPlayerd(playerid, -1, "* Te has unido.");
      return 1;
}

stock Unirse(playerid)
{
      switch(playerid)
      {
            case 0: SetPlayerPos(playerid, x, y, z); //Posiciуn del jugador ID 0
            case 1: SetPlayerPos(playerid, x, y, z); //Posiciуn del jugador ID 1
            case 2: SetPlayerPos(playerid, x, y, z); //Posiciуn del jugador ID 2
            /* Ir implementando aquн todas las posiciones que quieras aсadir. */
      }
}
Espero que te sirva.
Reply
#6

Ya lo terminй, es asн: Un admin RCON usa el comando /evento, entonces su posiciуn queda guardada, es enviado un mensaje global avisando que se activу el evento, entonces un jugador usa /participar, y es enviado al evento, es decir, a la posiciуn del admin RCON que lo activу, sуlo que con un pequeсo cambio de posiciуn debido a un cбlculo de su ID. Cuando un admin RCON desactiva el evento, el jugador es enviado a la comisarнa de Los Santos, por simplemente elegir yo un lugar donde enviarlo.

La posiciуn donde va a spawnear el jugador va a ser cercana pero NUNCA se va a repetir, ya que utilicй mъltiplos o divisores (no me acuerdo quй serнan xdd) diferentes.

pawn Код:
#include <a_samp>
#include <zcmd>

new EstadoEvento = 0;
new EstaEnEvento[MAX_PLAYERS];

new Float:PosEvento[3];
CMD:evento(playerid, params[]){
    if(IsPlayerAdmin(playerid)){
        new string[128];
        if(EstadoEvento == 0){
            EstadoEvento = 1;
            SendClientMessage(playerid, 0xFFFFFFAA, "Has activado el modo evento, para desactivarlo, utiliza nuevamente el comando '/evento'.");
            format(string, sizeof(string), "El administrador %s [ID: %d] activу el modo evento, utiliza el comando '/participar' para entrar.", Nombre(playerid), playerid);
            SendClientMessageToAll(0x21DD00FF, string);
            GetPlayerPos(playerid, PosEvento[0], PosEvento[1], PosEvento[2]);
        }
        else{
            EstadoEvento = 0;
            SendClientMessage(playerid, 0xFFFFFFAA, "Has desactivado el modo evento, para activarlo, utiliza nuevamente el comando '/evento'.");
            format(string, sizeof(string), "El administrador %s [ID: %d] desactivу el modo evento.", Nombre(playerid), playerid);
            SendClientMessageToAll(0xBF0000FF, string);
            static jugadores;
            jugadores = GetMaxPlayers();
            for(new j; j < jugadores; j++){
                if(EstaEnEvento[j] == 1){
                    EstaEnEvento[j] = 0;
                    SetPlayerPos(j, 1529.6, -1691.2, 13.3);
                }
            }
        }
    }else SendClientMessage(playerid, 0xBFC0C2FF, "[ERROR] No estбs autorizado para utilizar este comando administrativo.");
    return 1;
}

CMD:participar(playerid, params[]){
    if(EstadoEvento == 1){
        if(EstaEnEvento[playerid] == 0){
            switch(playerid){
                case 0..20: SetPlayerPos(playerid, PosEvento[0]+playerid, PosEvento[1], PosEvento[2]);
                case 21..40: SetPlayerPos(playerid, PosEvento[0]+playerid/2, PosEvento[1], PosEvento[2]);
                case 41..100: SetPlayerPos(playerid, PosEvento[0]+playerid/5, PosEvento[1], PosEvento[2]);
                case 101..500: SetPlayerPos(playerid, PosEvento[0]+playerid/9, PosEvento[1], PosEvento[2]);
            }
            EstaEnEvento[playerid] = 1;
            SetPlayerHealth(playerid, 100);
            SetPlayerArmour(playerid, 100);
            ResetPlayerWeapons(playerid);
            SendClientMessage(playerid, 0xFFFFFFAA, "Has ingresado al modo evento, sigue las instrucciones del organizador.");
        }else SendClientMessage(playerid, 0xBFC0C2FF, "[ERROR] Ya estбs dentro del evento.");
    }else SendClientMessage(playerid, 0xBFC0C2FF, "[ERROR] El modo evento no se encuentra activado.");
    return 1;
}

stock Nombre(playerid){
    new string[32];
    GetPlayerName(playerid, string, 32);
    return string;
}
Si me explicбs mбs como lo querйs lo puedo modificar y hacer eso de derby de no se quй, y me podйs decir si usбs el procesador de comandos zcmd o lo paso a la funciуn strcmp.
Reply
#7

Bueno, si resulto, el problema, es que las coordenadas estбn en un interior, lo tengo que los jugadores deben estar en un vehнculo para unirse, la cosa es que cuando se teletransportan, los vehнculos se ponen invisibles, no se ven Dx
Reply
#8

Es que a los vehнculos hay que enlazarlos a los interiores, no establecйrselos, pero sн enlazarlos (linkearlos).. Usб йsta funciуn;

https://sampwiki.blast.hk/wiki/LinkVehicleToInterior
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)