OnPlayerPickUpPickup delay y optimizacion
#1

Hola estoy haciendo un sistema de casas utiliazando pickups.

Mi problema es que cuando estoy encima del pickup este se repite cada 2 segundos, es decir cada 2 segundos se ejecuta todo el codigo, quisiera saber como podria ponerle un timer.

Tambien quiero optimizar un poco el codigo, quisiera detectar si el icono es 1272 o 1273 (casa azul y casa verde) se ejecute un bucle que recorra las casa, no se como obtener el ID del icono. Lo que quiero con esto es evitar recorrer todas las casas si un usuario no esta en el pickup 1272 o 1273.

pawn Код:
public OnPlayerPickUpPickup(playerid, pickupid)
{
    new string[64];
    for (new idx = 0; idx < TotalCasas; idx ++)
    {
        if(pickupid == CasaInfo[idx][Icono])
        {
            if (strcmp(CasaInfo[idx][Propietario], "0")) // Si Propietario 0, la casa estara en venta. Si no es 0 traera el nombre del dueсo.
            {
                format(string, sizeof(string), "Estas en la casa ID %i y su dueсo es %s.", CasaInfo[idx][ID], CasaInfo[idx][Propietario]);
                SendClientMessage(playerid, COLOR_BLANCO, string);
            }
            else
            {
                format(string, sizeof(string), "Estas en la casa ID %i y esta en venta por ($) %i.", CasaInfo[idx][ID], CasaInfo[idx][Precio]);
                SendClientMessage(playerid, COLOR_BLANCO, string);
            }
        }
    }
    return 1;
}

public CargarCasasInfo()
{
    new fila, campo, vendida;
    cache_get_data(fila, campo, MySQL);

    if (fila)
    {
        for (new idx = 0; idx < fila; idx ++)
        {
            /* Aqui cargo las variables */
            /* ..... */
           
            if (strcmp(CasaInfo[idx][Propietario], "0")) vendida = 1272; else vendida = 1273;
           
            CasaInfo[idx][Icono] = CreatePickup(vendida, 1, CasaInfo[idx][Exterior_X], CasaInfo[idx][Exterior_Y], CasaInfo[idx][Exterior_Z]);
           
            TotalCasas++;
        }
        printf("Total de casas cargadas: %d (MAXIMO: %d)", TotalCasas, MAX_CASAS);
    }
    return 1;
}
Reply
#2

amigo utiliza YSF allн estб esa funciуn de detectar el modelo del pickup (GetPickupModel)
Reply
#3

Quote:
Originally Posted by Adoniiz
Посмотреть сообщение
amigo utiliza YSF allн estб esa funciуn de detectar el modelo del pickup (GetPickupModel)
O directamente almacenar el modelo del pickup.
Reply
#4

Quote:
Originally Posted by EnzoMetlc
Посмотреть сообщение
O directamente almacenar el modelo del pickup.
No se me habia ocurrido eso, me gusta mas. їAlguna manera de hacer un timer al estar parado en el pickup?

Cada dos segundos se ejecuta la funcion.

Edit: Yo quiero evitar recorrer un bucle si no es necesario. Cuando implemente negocios me quedaria algo asi:

pawn Код:
public OnPlayerPickUpPickup(playerid, pickupid)
{
    new string[64];
   
    for (new idx = 0; idx < TotalCasas; idx ++)
    {
        if(pickupid == CasaInfo[idx][Icono])
        {
            if (strcmp(CasaInfo[idx][Propietario], "0"))
            {
                format(string, sizeof(string), "Estas en la casa ID %i y su dueсo es %s.", CasaInfo[idx][ID], CasaInfo[idx][Propietario]);
                SendClientMessage(playerid, COLOR_BLANCO, string);
            }
            else
            {
                format(string, sizeof(string), "Estas en la casa ID %i y esta en venta por ($) %i.", CasaInfo[idx][ID], CasaInfo[idx][Precio]);
                SendClientMessage(playerid, COLOR_BLANCO, string);
            }
        }
    }
   
    for (new idx = 0; idx < TotalNegocios; idx ++)
    {
        if(pickupid == NegocioInfo[idx][Icono])
        {
            if (strcmp(NegocioInfo[idx][Propietario], "0"))
            {
                format(string, sizeof(string), "Negocio ID: %i - Propietario: %s.", NegocioInfo[idx][ID], NegocioInfo[idx][Propietario]);
                SendClientMessage(playerid, COLOR_BLANCO, string);
            }
            else
            {
                format(string, sizeof(string), "Negocio ID: %i En venta: ($) %i.", NegocioInfo[idx][ID], NegocioInfo[idx][Precio]);
                SendClientMessage(playerid, COLOR_BLANCO, string);
            }
        }
    }
    return 1;
}
Si el usuario se para en un pickup de un negocio tambien se ejecutara el bucle que recorre las casas y viceversa...
Reply
#5

lo que te recomendarнa es que pongas una cantidad en especifico en las dos variables y poner las dos funciones en un mismo bucle y si detectу que estб cerca de una casa o negocio, usar break.

O crear una variable chequeando si estб dentro de una casa/negocio y utilizar return y break
Reply
#6

Hasta ahora todo bien, pero alguna forma de evitar que me mande el mensaje "Estas en la casa ID %i y su dueсo es %s." cada dos segundos cuando estoy sobre el pickup ?

PD: їQue tal el break, esta bien?... nunca lo he utilizado.

pawn Код:
public OnPlayerPickUpPickup(playerid, pickupid)
{
    new string[64];
    for (new idx = 0; idx < TotalCasas; idx ++)
    {
        if(pickupid == CasaInfo[idx][Icono])
        {
            if (strcmp(CasaInfo[idx][Propietario], "0"))
            {
                format(string, sizeof(string), "Estas en la casa ID %i y su dueсo es %s.", CasaInfo[idx][ID], CasaInfo[idx][Propietario]);
                SendClientMessage(playerid, COLOR_BLANCO, string);
            }
            else
            {
                format(string, sizeof(string), "Estas en la casa ID %i y esta en venta por ($) %i.", CasaInfo[idx][ID], CasaInfo[idx][Precio]);
                SendClientMessage(playerid, COLOR_BLANCO, string);
            }
            break;
        }
    }
    return 1;
}
Reply
#7

Como te dije, puedes crear una variable para chequear si estб dentro de la casa, si estб dentro de una casa no se ejecuta mas el cуdigo, ejemplo:

pawn Код:
new EstaEn[MAX_PLAYERS];

// en la callback

if(EstaEn[playerid] != -1)
{
    EstaEn[playerid] = idx;
}
Reply
#8

Ocupa el tipo 2.

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


Forum Jump:


Users browsing this thread: 1 Guest(s)