#1

No me funciona

onplayerconnect
pawn Код:
CrearTextPublicidad(playerid); //crea textdraws
PublicidadNum = 0;
SetTimer("Publicidad",10000,1);
pawn Код:
public Publicidad(playerid)
{
   if(PublicidadNum == 0)
   {
      TextDrawHideForPlayer(playerid,PublicidadTexto[playerid]);
      TextDrawSetString(PublicidadTexto[playerid],"asd");
      TextDrawShowForPlayer(playerid,PublicidadTexto[playerid]);
      PublicidadNum = 1;
      return 1;
   }
   if(PublicidadNum == 1)
   {
      TextDrawHideForPlayer(playerid,PublicidadTexto[playerid]);
      TextDrawSetString(PublicidadTexto[playerid],"asdf! ");
      TextDrawShowForPlayer(playerid,PublicidadTexto[playerid]);
      PublicidadNum = 2;
      return 1;
   }
   if(PublicidadNum == 2)
   {
      TextDrawHideForPlayer(playerid,PublicidadTexto[playerid]);
      TextDrawSetString(PublicidadTexto[playerid],"asdgfhah");
      TextDrawShowForPlayer(playerid,PublicidadTexto[playerid]);
      PublicidadNum = 3;
      return 1;
   }
   if(PublicidadNum == 3)
   {
      TextDrawHideForPlayer(playerid,PublicidadTexto[playerid]);
      TextDrawSetString(PublicidadTexto[playerid],"akjhgkjashglkhasdiguhasdg");
      TextDrawShowForPlayer(playerid,PublicidadTexto[playerid]);
      PublicidadNum = 0;
      return 1;
   }
   return 1;
}
Reply
#2

pawn Код:
CrearTextPublicidad(playerid); //crea textdraws
PublicidadNum = 0;
SetTimerEx("Publicidad", 1000, true, "i", playerid);
Reply
#3

SetTimerEx("Publicidad",10000,1,"i",playerid);

PD: me gano Dreyfuz por segundos.
Reply
#4

Muchas graciass a los dos
Reply
#5

Aunque el script que usas ahora esta bien, hay un problema, como sabrбs los timers pueden darte problemas a la hora de la optimizaciуn del script. Te recomendarнa que uses un SetTimer en OnGameModeInit y crear los TextDraws en el mismo sitio, luego haces un bucle for en la funciуn de Publicidad y los muestras, y de esta forma se usarнa nada mбs que un timer.

Otro fallo que tienes es que no se destruye el timer, cuando se conecta el jugador se activa, pero cuando sale no se destruye y queda ejecutandose intentando mostrar los TextDraws a un jugador que no estб conectado. Y cuando se conecte otro jugador con la misma ID que el que abandonу el servidor, se activa otro timer y serнan como dos timers para un jugador, y asн sucesivamente. Al tener varios timers, los TextDraws cambiarнan en un tiempo muy corto ya que los timers no estarбn sincronizados, se necesita mucha suerte para eso. Aun asн, serнa un gran error.
Reply
#6

Quote:
Originally Posted by [DOG]irinel1996
Посмотреть сообщение
Aunque el script que usas ahora esta bien, hay un problema, como sabrбs los timers pueden darte problemas a la hora de la optimizaciуn del script. Te recomendarнa que uses un SetTimer en OnGameModeInit y crear los TextDraws en el mismo sitio, luego haces un bucle for en la funciуn de Publicidad y los muestras, y de esta forma se usarнa nada mбs que un timer.

Otro fallo que tienes es que no se destruye el timer, cuando se conecta el jugador se activa, pero cuando sale no se destruye y queda ejecutandose intentando mostrar los TextDraws a un jugador que no estб conectado. Y cuando se conecte otro jugador con la misma ID que el que abandonу el servidor, se activa otro timer y serнan como dos timers para un jugador, y asн sucesivamente. Al tener varios timers, los TextDraws cambiarнan en un tiempo muy corto ya que los timers no estarбn sincronizados, se necesita mucha suerte para eso. Aun asн, serнa un gran error.
Imposible explicarlo mejor que vos, muy buena explicaciуn.
Reply
#7

pawn Код:
#include <a_samp>
new MatarPublicidad[MAX_PLAYERS];

public OnPlayerConnect(playerid)
{
    TextDrawShowForPlayer(playerid,PublicidadTexto[playerid]);
    MatarPublicidad[playerid] = SetTimerEx("Publicidad", 10000, true, "i", playerid);
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    TextDrawHideForPlayer(playerid,PublicidadTexto[playerid]);
    KillTimer(MatarPublicidad[playerid]);
    return 1;
}

forward Publicidad(playerid);
public Publicidad(playerid)
{
    switch(random(5))
    {
       case 0:
       {
          TextDrawSetString(PublicidadTexto[playerid],"texto 1");
       }
       case 1:
       {
          TextDrawSetString(PublicidadTexto[playerid],"texto 2");
       }
       case 2:
       {
          TextDrawSetString(PublicidadTexto[playerid],"texto 3");
       }
       case 3:
       {
          TextDrawSetString(PublicidadTexto[playerid],"texto 4");
       }
       case 4:
       {
          TextDrawSetString(PublicidadTexto[playerid],"texto 5");
       }
    }
    return 1;
}
Reply
#8

Estuve a punto de cometer un gran error entonces, jaja. Se puede poner un solo timer en vez de uno por user poniendo el timer en ongamemodeinit ? y a todos les cambiara el mensaje a la misma vez?

PD: Lo que hice fue: 1-a los tds les saque el [playerid] PublicidadTexto[playerid] ---> Publicidad texto, los cree en ongamemodeinit. 2- Saque el settimerex de onplayerspawn y puse un settimer en ongamemodeinit que cada 20 segundos ejecuta la funcion Publicidad (igual que antes) 3- Agregue el killtimer en onplayerdisconnect (No entendi bien lo del bucle for)
Reply
#9

Quote:
Originally Posted by ValenRatti
Посмотреть сообщение
Estuve a punto de cometer un gran error entonces, jaja. Se puede poner un solo timer en vez de uno por user poniendo el timer en ongamemodeinit ? y a todos les cambiara el mensaje a la misma vez?

PD: Lo que hice fue: 1-a los tds les saque el [playerid] PublicidadTexto[playerid] ---> Publicidad texto, los cree en ongamemodeinit. 2- Saque el settimerex de onplayerspawn y puse un settimer en ongamemodeinit que cada 20 segundos ejecuta la funcion Publicidad (igual que antes) 3- Agregue el killtimer en onplayerdisconnect (No entendi bien lo del bucle for)
Serнa algo asн:
pawn Код:
new
    Variable
;

public OnGameModeInit() {
    //---Creas los TextDraws.

    SetTimer("Publicidad", 20000, true);
    return 1;
}

public Publicidad() {
    Variable++; //Aquн aumentamos el valor de 'Variable' para saber que mensaje mostrar.
    for (new p; p < MAX_PLAYERS; p++) {
        if (!IsPlayerConnected(p)) continue; //Si el jugador con la ID 'p' no estб conectado pasamos a la siguiente ID.
        switch(variable) { //їQuй valor tiene 'Variable'?
            case 1: {
                //Si tiene 1, mostraremos el primer mensaje aquн.
            }
            case 2: {
            }
            case 3: {
            }
            case 4: {
                //4є Mensaje.
                TextDrawShowForPlayer(p, TuTextDraw);

                //Al llegar al 4є mensaje ponemos la variable en 0. Y empezarб de nuevo.
                Variable = 0;
            }
            /* Puedes aсadir mбs 'case' si quieres pero no olvides de poner 'Variable = 0;' en el ъltimo como hice yo arriba */
        }
    }
    return 1;
}
Saludos!

PD: ya aquн no harнa falta KillTimer, recuerda que existe TextDrawSetString, no hace falta crear un TextDraw por cada mensaje.
Reply
#10

Muuchisimas gracias !
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)