[Ayuda] Checkpoint en movimiento
#1

Bueno, tengo un comando tipo zcmd para que los policнas soliciten refuerzos y se marque su posiciуn en el radar mediante un checkpoint. El problema es que si el checkpoint no estб dentro de la zona visible del radar de los demбs policнas, el checkpoint es fijo, no se mueve. Por eso lo que querrнa es que estй donde estй el agente que solicita refuerzos, el checkpoint estй en movimiento para los demбs policнas.
El comando actualmente queda asн:

pawn Код:
zcmd(bk, playerid, params[])
    {
        if(Info[playerid][pRequestingBackup] == 1) return SendClientMessageEx(playerid, COLOR_GRAD2, "Ya tienes un pedido de ayuda.");
        if(IsAPolice(playerid))
        {
            new Float:px,Float:py,Float:pz,string[128]; GetPlayerPos(playerid, px, py, pz);
            if(Team_SAPD(playerid))
            {
                Info[playerid][pRequestingBackup] = 1;
                format(string, sizeof(string), "* A todas las unidades, %s necesita ayuda (Informaciуn marcada).", GetPlayerNameEx(playerid));
                SendRadioMessage(1, TEAM_RADIO_COLOR, string);
                for(new i = 0; i < MAX_PLAYERS; i++)
                {
                    if(IsPlayerConnected(i))
                    {
                        if(Team_SAPD(i) && OnDuty[i] == 1)
                        {
                            SetPlayerMarkerForPlayer(i, playerid, 0xAA3333AA);
                            if(i != playerid) SetPlayerCheckpoint(i, px, py, pz, 5.0);
                            }
                                        }
                  }
                SendClientMessageEx(playerid, COLOR_WHITE, "Utiliza: /bkc, para cancelar los refuerzos.");
                SetTimerEx("BackupClear", 180000, false, "iii", playerid, 1, 1);
            }
        } else SendClientMessageEx(playerid, COLOR_WHITE, "No autorizado.");
        return 1;
    }
Y asн como estб el checkpoint no se mueve; donde estй el jugador que pone /bk es donde se queda el checkpoint, en lugar de seguir al jugador. Si alguien puede ayudarme con esto, le estarнa muy agradecido.
Reply
#2

Podrнas crear un timer para que cada X segundos se vaya marcando el checkpoint nuevamente, pero..

Sinceramente, no te lo recomiendo. Es mбs sencillo utilizar SetPlayerMarkerForPlayer, que le asigna un color a un jugador, y mediante el bucle podйs comprobar que sуlo lo vean de tal color miembros de la policнa en servicio, entonces, al tener color su nombre, lo verнas marcado en el mapa, en su mismo nombre, y hasta incluso presionando TAB.
Reply
#3

Quote:
Originally Posted by DeadSkyTkb
Посмотреть сообщение
Podrнas crear un timer para que cada X segundos se vaya marcando el checkpoint nuevamente, pero..

Sinceramente, no te lo recomiendo. Es mбs sencillo utilizar SetPlayerMarkerForPlayer, que le asigna un color a un jugador, y mediante el bucle podйs comprobar que sуlo lo vean de tal color miembros de la policнa en servicio, entonces, al tener color su nombre, lo verнas marcado en el mapa, en su mismo nombre, y hasta incluso presionando TAB.
Sн sн, asн estб ahora mismo, pero el problema es que cuando estб marcado en el mapa, si estбs muy lejos, el cuadrado no se mueve (checkpoint). Pero si el que pone /bk estб cerca de ti, sale otro cuadrado de un color mбs claro que el del checkpoint que sн se mueve junto con el jugador.

En conclusiуn, lo que pretendo es que el SetPlayerMarkerForPlayer se mueva tanto estando lejos como cerca del jugador que puso /bk. Y no tengo ni idea de cуmo hacerlo .
Reply
#4

Es que no se tiene que actualizar esa funciуn, їcуmo es que no se mueve? yo pienso que se mueve, pero al estar a una distancia larga no se nota, claramente, como pasa con cualquier checkpoint, necesitбs verlo en el mapa.
Reply
#5

Lo que quiero decir es que cuando alguien pone /bk lejos de donde estamos nosotros sale un cuadrado rojo en el radar que no se mueve, pero si alguien pone /bk al lado nuestra salen dos cuadrados rojos en el radar: uno que corresponde al checkpoint y otro que corresponde al SetPlayerMarkerForPlayer, y este ъltimo se mueve en el radar si el que ha puesto /bk se mueve, pero si se va muy lejos el cuadrado del SetPlayerMarkerForPlayer desaparece y solo queda el del checkpoint. Entonces lo que quiero es que el del SetPlayerMarkerForPlayer se mueva en el radar siempre, como pasa por ejemplo en San Andreas Cops N' Robers o en LS-RP con el comando /ref.
Reply
#6

Ah, sн, ya te entendн..

їConocйs mбs o menos la distancia en la que se deja de ver SetPlayerMarkerForPlayer?

Asн, se puede crear un timer que se ejecute cada X tiempo sуlo para policнas, en el cual, si estб a una posiciуn igual o mayor a X posiciуn, se active nuevamente SetPlayerMarkerForPlayer.. Claramente, tal funciуn tiene que ser una que relacione bien las posiciones, como GetDistanceBetweenPlayers.

De no funcionar eso, ya es un problema de la funciуn de SA-MP.
Reply
#7

Entiendo... їy cуmo se harнa eso? Es que empecй con esto del script hace muy poco y apenas sй hacer nada. Muchas veces he intentado poner timers en algunos comandos y me tiraba error .
Reply
#8

Creo que en realidad no se puede, que llega hasta ahн la funciуn.
Reply
#9

Mira aquн te hice esto rapidito espero que te funcione

pawn Код:
new PlayerCheckPoint[MAX_PLAYERS];
forward UpdateCheckPoint(playerid);
public UpdateCheckPoint(playerid)
{
    new Float: PlayerPosition[3];
    GetPlayerPos(playerid, PlayerPosition[0], PlayerPosition[1], PlayerPosition[2]);
    for (new i; i < GetMaxPlayers(); i++)
    {
        if (IsPlayerConnected(i))
        {
            if (i != playerid)
            {
                if(Team_SAPD(i) && OnDuty[i] == 1)
                {
                    RemovePlayerMapIcon(playerid, 55);
                    SetPlayerMapIcon(i, 55, PlayerPosition[0], PlayerPosition[1], PlayerPosition[2], 0, 0x0000F2FF);
                }
            }
        }
    }
}

stock StartUpdateCheckPoint(playerid)
{
    PlayerCheckPoint[playerid] = SetTimerEx("UpdateCheckPoint", 2000, true, "i", playerid);
    return 1;
}

stock StopUpdateCheckPoint(playerid)
{
    KillTimer(PlayerCheckPoint[playerid]);
    return 1;
}

//Tu comando editado para que se active el UpdateCheckPoint
zcmd(bk, playerid, params[])
{
    if(Info[playerid][pRequestingBackup] == 1) return SendClientMessageEx(playerid, COLOR_GRAD2, "Ya tienes un pedido de ayuda.");
    if(IsAPolice(playerid))
    {
        new Float:px,Float:py,Float:pz,string[128]; GetPlayerPos(playerid, px, py, pz);
        if(Team_SAPD(playerid))
        {
            Info[playerid][pRequestingBackup] = 1;
            format(string, sizeof(string), "* A todas las unidades, %s necesita ayuda (Informaciуn marcada).", GetPlayerNameEx(playerid));
            SendRadioMessage(1, TEAM_RADIO_COLOR, string);
            StartUpdateCheckPoint(playerid);
            SendClientMessageEx(playerid, COLOR_WHITE, "Utiliza: /bkc, para cancelar los refuerzos.");
            SetTimerEx("BackupClear", 180000, false, "iii", playerid, 1, 1);
        }
    }
    else SendClientMessageEx(playerid, COLOR_WHITE, "No autorizado.");
    return 1;
}
//Comando para deter el UpdateChecPoint
zcmd(bkc, playerid, params[])
{
    StopUpdateCheckPoint(playerid);
    RemovePlayerMapIcon(playerid, 55);
    return 1;
}
Reply
#10

Borrar mensaje, doble post sin querer
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)