Ayuda con rondas!
#1

Hola estoy creando un server de hunger games y estoy usando el sistema de kitten...

(http://forum.sa-mp.com/showthread.ph...+change+system)

lo que necesito es una pequeсa modificacion de ese tutorial, necesito que cuando una ronda ya haya empezado y un player entre al sv este se quede espectando a los demas hasta que empieze una nueva.

porfavor ayudenme!

aqui les dejo los codigos del tutorial de arriba si les sirve de algo


pawn Код:
forward StartedNewRound();
new MapChange;
forward NewMapTimer(playerid);



pawn Код:
public NewMapTimer(playerid)                      // The callback we forwarded on the beginning of the tutorial
{
    MapChange++;                                  // this makes it to go to the second MapChange++ part basically does it
                                                  // Sends everyone in server a gametext
    GameTextForAll("~b~ Cargando nuevo ~w~MAPA",4000,3);
    SetTimer("StartedNewRound",4000,false);       // Starts a new timer for the MapChangechange 4 seconds this basically starts the new MapChangeand always must be in false
    return 1;
}

public StartedNewRound()                          // The callback we forwarded in the beginning of this tutorial
{
    for(new i = 0; i < MAX_PLAYERS; i++) {        // this loops everyone in the server also you can use foreach include for this part
        SpawnPlayer ( i ) ;                       // Re Spawns everyone in the server which then gets OnPlayerSpawn Callback called
        switch ( MapChange ) {                    // This part is basically for your new MapChangesettings like giving them weapons
            case 0:
            {
                SendClientMessage(i,COLOR_RED,"Arena1");
            }
            case 1:
            {
                SendClientMessage(i,COLOR_RED,"Arena2");
            }
            case 2:                               // Next Spawn Settings
            {

            }
        }
    }
    return 1;
}
pawn Код:
public OnPlayerSpawn(playerid)
{
TextDrawShowForPlayer(playerid, Textdraw2);
TextDrawShowForPlayer(playerid, Textdraw3);

    switch ( MapChange  ) {                       // you must have a case for the mapchange to get the list going
        case 0:                                   // MapChange1 this is the part for MapChange = 0; Which basically starts of the first MapChangein the list
        {
        new Random = random(12);
             SetPlayerPos(playerid, RandomSpawns[Random][0], RandomSpawns[Random][1], RandomSpawns[Random][2]);
             TogglePlayerControllable(playerid, 0);
             SetTimer("diez", 1000, 0);//cinco es el nombre del forward cambienlo si lo cambiaron y 1000 significa 1 segundo osea que al 1 segundo pasa el forward cuatro y haci susesivamente
             SetTimer("nueve", 2000, 0);//cuatro es el nombre del forward cambienlo si lo cambiaron y 2000 significa 2 segundo osea que al 2 segundo pasa el forward tres y haci susesivamente
             SetTimer("ocho", 3000, 0);
             SetTimer("siete", 4000, 0);
             SetTimer("seis", 5000, 0);
             SetTimer("cinco", 6000, 0);//cinco es el nombre del forward cambienlo si lo cambiaron y 1000 significa 1 segundo osea que al 1 segundo pasa el forward cuatro y haci susesivamente
             SetTimer("cuatro", 7000, 0);//cuatro es el nombre del forward cambienlo si lo cambiaron y 2000 significa 2 segundo osea que al 2 segundo pasa el forward tres y haci susesivamente
             SetTimer("Tres", 8000, 0);
             SetTimer("dos", 9000, 0);
             SetTimer("uno", 10000, 0);
             SetTimer("ya", 11000, 0);
             ResetPlayerWeapons(playerid);
                    // XYZ Co-rds of the first map
              // Facing Angle of the first map
        }
        case 1:                                   // MapChange2 same settings on top
        {
        new Random = random(12);
            SetPlayerPos(playerid, RandomSpawns2[Random][0], RandomSpawns2[Random][1], RandomSpawns2[Random][2]);
            TogglePlayerControllable(playerid, 0);
            ResetPlayerWeapons(playerid);
           
             SetTimer("diez", 1000, 0);//cinco es el nombre del forward cambienlo si lo cambiaron y 1000 significa 1 segundo osea que al 1 segundo pasa el forward cuatro y haci susesivamente
             SetTimer("nueve", 2000, 0);//cuatro es el nombre del forward cambienlo si lo cambiaron y 2000 significa 2 segundo osea que al 2 segundo pasa el forward tres y haci susesivamente
             SetTimer("ocho", 3000, 0);
             SetTimer("siete", 4000, 0);
             SetTimer("seis", 5000, 0);
             SetTimer("cinco", 6000, 0);//cinco es el nombre del forward cambienlo si lo cambiaron y 1000 significa 1 segundo osea que al 1 segundo pasa el forward cuatro y haci susesivamente
             SetTimer("cuatro", 7000, 0);//cuatro es el nombre del forward cambienlo si lo cambiaron y 2000 significa 2 segundo osea que al 2 segundo pasa el forward tres y haci susesivamente
             SetTimer("Tres", 8000, 0);
             SetTimer("dos", 9000, 0);
             SetTimer("uno", 10000, 0);
             SetTimer("ya", 11000, 0);
           
        }
        case 2:                                   // blah blah next MapChangestuff here
        {

        }
    }
    return 1;
}
Reply
#2

[pawn]

ACA TU CODE

[/pawn1]

el 1 no va. Ponelo asi, asi lo podemos ver mejor
Reply
#3

Esto es realmente fбcil de hacer y no se necesita de mucho conocimiento.

Para hacer esto necesitarбs lo siguiente:

pawn Код:
//Primero crearemos nuestras variables, arriba de todo el script u otro lugar
//donde no intervenga ninguna funciуn.
new bool:Ronda;
new bool:ModoEspectador[MAX_PLAYERS] = {false, ...};
pawn Код:
//Despuйs en esta funciуn, donde supongo la ronda ya ha cargado, estableceremos el valor
//de nuestra variable "Ronda" a true.
public StartedNewRound()
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        Ronda = true; //Establecemos su valor a true, con esto indicamos que hay una ronda activa.
       
        //Verificamos si el jugador estб en modo espectador.
        //Si lo estб, desactivamos la cбmara.
        //Y establecemos el valor de "ModoEspectador" a false.             
        if(ModoEspectador[i]) TogglePlayerSpectate(i, false), ModoEspectador[i] = false;
        //De lo contrario, llamamos "SpawnPlayer" normalmente.
        else SpawnPlayer(i);
        switch ( MapChange )
        {
            case 0:
            {
            SendClientMessage(i,COLOR_RED,"Arena1");
            }
            case 1:
            {
            SendClientMessage(i,COLOR_RED,"Arena2");
            }
            case 2:
            {

            }
        }
    }
    return 1;
}
pawn Код:
//Hacemos lo contrario en esta funciуn, ya que la ronda no ha iniciado todavнa.
public NewMapTimer(playerid)
{
    Ronda = false;  //Establecemos su valor a false, con esto indicamos que no hay ninguna ronda activa.
    MapChange++;
    GameTextForAll("~b~ Cargando nuevo ~w~MAPA",4000,3);
    SetTimer("StartedNewRound",4000,false);
    return 1;
}
Ahora, en OnPlayerConnect utilizaremos las 2 funciones ya antes mencionadas.

pawn Код:
public OnPlayerConnect(playerid)
{
        //Establecemos el valor de la variable a false, para evitar errores inesperados.
    ModoEspectador[playerid] = false;
    //Verificamos si hay alguna ronda activa.
    if(Ronda)
    {
        //Si hay una, ponemos al jugador como espectador.
        SendClientMessage(playerid, -1, "ЎHas llegado tarde, la ronda ya ha comenzado!");
        //Desactivamos la cбmara del jugador.
        TogglePlayerSpectating(playerid, true);
        //Ponemos la cбmara sobre otro jugador.
        PlayerSpectatePlayer(playerid, 0);
        //Finalmente, establecemos el valor de "ModoEspectador" a true.
        ModoEspectador[playerid] = true;
    }
    return 1;
}
Esto sуlo es una idea para hacerlo, no todo el sistema hecho.
Reply
#4

me da este error:
error 017: undefined symbol "playerid"


el forward es

forward StartedNewRound(playerid);
Reply
#5

ahora le puse
new playerid;

y me da esos errores

warning 215: expression has no effect
warning 203: symbol is never used: "playerid"


todos estos errores son en

el public started new round
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)