Portal SAMP
[Ajuda] Ajuda com pickups - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Ajuda com pickups (/showthread.php?tid=2544)



Ajuda com pickups - Treze_. - 03/07/2022

Bom, de inicio eu tive problema com ID mas consegui resolver,  agora estou com problema de pickups

Código:
CMD:comprarcasa(playerid)
{
    new doccasa[130];
    for(new i = 1;i < MAX_CASA; i++)
    {
        format(doccasa,130,"Casas/%d.inc",i);
        if(IsPlayerInRangeOfPoint(playerid,2, DOF2_GetFloat(doccasa,"X"),DOF2_GetFloat(doccasa,"Y"), DOF2_GetFloat(doccasa,"Z")))
        {
            DestroyPickup(casas [pickup] [i]);
            break;
        }
    }
    return 1;
}

Código:
stock carregarcasas()
{
    new doccasa[130];
    for(new i = 1;i < MAX_CASA; i++)
    {
        format(doccasa,130,"Casas/%d.inc",i);
        if(DOF2_FileExists(doccasa))
        {
            casas [pickup] [i] = CreateDynamicPickup(1273, 23, casas[x],casas[y], casas [z]);
        }
    }
    return 1;
}

Praticamente cada vez que o player vai digitar o comando /comprarcasa ,o pickup é destruido mas sempre é o anterior exemplo:

o jogador vai comprar a casa id 3,o pickup da casa do id 2 ou 1 q é destruido e do id 3 permanece intacto.-.


RE: Ajuda com pickups - Seck - 03/07/2022

Cade o createpickup? Tem que colocar o id de cada pickup diferente, se colocar todos iguais pode dar conflito


RE: Ajuda com pickups - Treze_. - 03/07/2022

Bom, tem o createdynamicpickup que é criado quando o serve liga

Código:
stock carregarcasas()
{
    new doccasa[130];
    for(new i = 1;i < MAX_CASA; i++)
    {
        format(doccasa,130,"Casas/%d.inc",i);
        if(DOF2_FileExists(doccasa))
        {
            casas [pickup] [i] = CreateDynamicPickup(1273, 23, casas[x],casas[y], casas [z]);
        }
    }
    return 1;
}


e  quando é criado a partir de /criarcasa

Código:
CMD:criarcasa(playerid)
{
    casas [id] ++;
    casas[wordid] ++;
    new doccasa[130],str[60];
    format(doccasa,130,"Casas/%d.inc",casas[id]);
    format(str,60,"Casa id %d criada com sucesso",casas[id]);
    SendClientMessage(playerid,-1, str);
   
    GetPlayerPos(playerid,casas[x],casas[y], casas[z]);

    casas[pickup] [id] = CreateDynamicPickup(1273, 23, casas[x],casas[y], casas[z]);
    return 1;
}


e tem as variáveis só pra deixar anotado aqui
Código:
#define MAX_CASA 300
enum infocasa{
    id,
    tipo,
    Float:x,
    Float:y,
    Float:z,
    Float:xinterior,
    Float:yinterior,
    Float:zinterior,
    wordid,
    dono,
    pickup[MAX_CASA],
    Text3D:texto,
    valor

};

new casas [infocasa];



RE: Ajuda com pickups - k2bi_YT - 03/07/2022

Fiz algumas alterações, como são mais de uma casa, basicamente deve conter uma variavel pra cada casa, entao na "new casa[..]", deve conter "quantas variaveis serão criadas" pra cada casa.

Recomendo que carregue todas as funções que existe na "enum infocasa", já na stock carregarcasas, assim você não precisa ficar usando a DOF2 toda vez, basta usar os valores salvos na variavel. Caso precise de ajuda na formatação do code, pode me adicionar no DC ou pedir ajuda para algum membro aqui do fórum.

Código PHP:
enum infocasa{
    id,
    tipo,
    Float:x,
    Float:y,
    Float:z,
    Float:xinterior,
    Float:yinterior,
    Float:zinterior,
    wordid,
    dono,
    pickup,
    Text3D:texto,
    valor

};

new 
casas[MAX_CASA][infocasa];

CMD:criarcasa(playerid)
{
    new doccasa[65],str[60];
    for(new 1MAX_CASA; ++i)
    {
        format(doccasa64,"Casas/%d.inc"i);
        if(!DOF2_FileExists(doccasa))
        {
            DOF2_CreateFile(doccasa);
            GetPlayerPos(playerid,casas[i][x],casas[i][y], casas[i][z]);
            casas[i][pickup] = CreateDynamicPickup(127323casas[i][x], casas[i][y], casas[i][z]);
            casas[i][worldid] = i;
            DOF2_SetString(doccasa"X"casas[i][x]);
            DOF2_SetString(doccasa"Y"casas[i][y]);
            DOF2_SetString(doccasa"Z"casas[i][z]);
            DOF2_SetString(doccasa"Worldid"casas[i][worldid]);
            format(str,60,"Casa id %d criada com sucesso"i);
            SendClientMessage(playerid,-1str);
            return true;
        }
    }
    return true;
}
CMD:comprarcasa(playerid)
{
    new str[130];
    for(new 1;!= sizeof(casas); i++)
    {
        if(IsPlayerInRangeOfPoint(playerid,2casas[i][x], casas[i][y], casas[i][z]))
        {
            DestroyPickup(casas[i][pickup]);
            format(strsizeof(str), "Você comprou a casa id %d"i);
            SendClientMessage(playerid, -1str);
            return true;
        }
    }
    return 1;
}

stock carregarcasas()
{
    new doccasa[130];
    for(new 1;MAX_CASAi++)
    {
        format(doccasa,130,"Casas/%d.inc",i);
        if(DOF2_FileExists(doccasa))
        {
            casas[i][x] = DOF2_GetFloat(doccasa,"X");
            casas[i][y] = DOF2_GetFloat(doccasa,"Y");
            casas[i][z] = DOF2_GetFloat(doccasa,"Z");
            casas[i][worldid] = DOF2_GetFloat(doccasa,"worldid");
            casas[i][pickup] = CreateDynamicPickup(127323casas[i][x], casas[i][y], casas[i][z]);
        }
    }
    return 1;
}[
color=#d4d4d4][size=small][font=Consolas, "Courier New", monospace][color=#d4d4d4][/color][/font][/size][/color] 



RE: Ajuda com pickups - Treze_. - 03/07/2022

(03/07/2022 15:33)k2bi_YT Escreveu: Fiz algumas alterações, como são mais de uma casa, basicamente deve conter uma variavel pra cada casa, entao na "new casa[..]", deve conter "quantas variaveis serão criadas" pra cada casa.

Recomendo que carregue todas as funções que existe na "enum infocasa", já na stock carregarcasas, assim você não precisa ficar usando a DOF2 toda vez, basta usar os valores salvos na variavel. Caso precise de ajuda na formatação do code, pode me adicionar no DC ou pedir ajuda para algum membro aqui do fórum.

Código PHP:
enum infocasa{
    id,
    tipo,
    Float:x,
    Float:y,
    Float:z,
    Float:xinterior,
    Float:yinterior,
    Float:zinterior,
    wordid,
    dono,
    pickup,
    Text3D:texto,
    valor

};

new 
casas[MAX_CASA][infocasa];

CMD:criarcasa(playerid)
{
    new doccasa[65],str[60];
    for(new 1MAX_CASA; ++i)
    {
        format(doccasa64,"Casas/%d.inc"i);
        if(!DOF2_FileExists(doccasa))
        {
            DOF2_CreateFile(doccasa);
            GetPlayerPos(playerid,casas[i][x],casas[i][y], casas[i][z]);
            casas[i][pickup] = CreateDynamicPickup(127323casas[i][x], casas[i][y], casas[i][z]);
            casas[i][worldid] = i;
            DOF2_SetString(doccasa"X"casas[i][x]);
            DOF2_SetString(doccasa"Y"casas[i][y]);
            DOF2_SetString(doccasa"Z"casas[i][z]);
            DOF2_SetString(doccasa"Worldid"casas[i][worldid]);
            format(str,60,"Casa id %d criada com sucesso"i);
            SendClientMessage(playerid,-1str);
            return true;
        }
    }
    return true;
}
CMD:comprarcasa(playerid)
{
    new str[130];
    for(new 1;!= sizeof(casas); i++)
    {
        if(IsPlayerInRangeOfPoint(playerid,2casas[i][x], casas[i][y], casas[i][z]))
        {
            DestroyPickup(casas[i][pickup]);
            format(strsizeof(str), "Você comprou a casa id %d"i);
            SendClientMessage(playerid, -1str);
            return true;
        }
    }
    return 1;
}

stock carregarcasas()
{
    new doccasa[130];
    for(new 1;MAX_CASAi++)
    {
        format(doccasa,130,"Casas/%d.inc",i);
        if(DOF2_FileExists(doccasa))
        {
            casas[i][x] = DOF2_GetFloat(doccasa,"X");
            casas[i][y] = DOF2_GetFloat(doccasa,"Y");
            casas[i][z] = DOF2_GetFloat(doccasa,"Z");
            casas[i][worldid] = DOF2_GetFloat(doccasa,"worldid");
            casas[i][pickup] = CreateDynamicPickup(127323casas[i][x], casas[i][y], casas[i][z]);
        }
    }
    return 1;
}[
color=#d4d4d4][size=small][font=Consolas, "Courier New", monospace][color=#d4d4d4][/color][/font][/size][/color] 
Bom, não funcionou mt bem, agora ele ta quebrando o próximo pickup, a mensagem está certa, se estou na casa n°4 ele manda a msg falando q comprou a casa id 4 mas quebra o pickup da casa id 5


RE: Ajuda com pickups - k2bi_YT - 03/07/2022

Altera apenas esse comando, e diga se funcionou corretamente

Código PHP:
CMD:comprarcasa(playerid)
{
    new 
str[130];
    for(new 
0;!= sizeof(casas); i++)
    {
        if(
IsPlayerInRangeOfPoint(playerid,2casas[i][x], casas[i][y], casas[i][z]) && IsValidDynamicPickup(casas[i][pickup]))
        {
            
DestroyPickup(casas[i][pickup]);
            
format(strsizeof(str), "Você comprou a casa id %d"i);
            
SendClientMessage(playerid, -1str);
            return 
true;
        }
    }
    return 
true;




RE: Ajuda com pickups - MarcosBrazz - 03/07/2022

Pelo que eu vi no /criarcasa e carregarcasas() o pickup esta sendo criado pelo streamer (CreateDynamicPickup)
E no /comprarcasa esta destruindo com DestroyPickup(...) nativo, se foi criado com streamer, tem que ser destruido com streamer (DestroyDynamicPickup)


RE: Ajuda com pickups - k2bi_YT - 03/07/2022

(03/07/2022 16:35)MarcosBrazz Escreveu: Pelo que eu vi no /criarcasa e carregarcasas() o pickup esta sendo criado pelo streamer (CreateDynamicPickup)
E no /comprarcasa esta destruindo com DestroyPickup(...) nativo, se foi criado com streamer, tem que ser destruido com streamer (DestroyDynamicPickup)

Boa observação, nao tinha prestado atenção nisso


RE: Ajuda com pickups - Treze_. - 03/07/2022

(03/07/2022 16:13)Treze_. Escreveu:
(03/07/2022 15:33)k2bi_YT Escreveu: Fiz algumas alterações, como são mais de uma casa, basicamente deve conter uma variavel pra cada casa, entao na "new casa[..]", deve conter "quantas variaveis serão criadas" pra cada casa.

Recomendo que carregue todas as funções que existe na "enum infocasa", já na stock carregarcasas, assim você não precisa ficar usando a DOF2 toda vez, basta usar os valores salvos na variavel. Caso precise de ajuda na formatação do code, pode me adicionar no DC ou pedir ajuda para algum membro aqui do fórum.

Código PHP:
enum infocasa{
    id,
    tipo,
    Float:x,
    Float:y,
    Float:z,
    Float:xinterior,
    Float:yinterior,
    Float:zinterior,
    wordid,
    dono,
    pickup,
    Text3D:texto,
    valor

};

new 
casas[MAX_CASA][infocasa];

CMD:criarcasa(playerid)
{
    new doccasa[65],str[60];
    for(new 1MAX_CASA; ++i)
    {
        format(doccasa64,"Casas/%d.inc"i);
        if(!DOF2_FileExists(doccasa))
        {
            DOF2_CreateFile(doccasa);
            GetPlayerPos(playerid,casas[i][x],casas[i][y], casas[i][z]);
            casas[i][pickup] = CreateDynamicPickup(127323casas[i][x], casas[i][y], casas[i][z]);
            casas[i][worldid] = i;
            DOF2_SetString(doccasa"X"casas[i][x]);
            DOF2_SetString(doccasa"Y"casas[i][y]);
            DOF2_SetString(doccasa"Z"casas[i][z]);
            DOF2_SetString(doccasa"Worldid"casas[i][worldid]);
            format(str,60,"Casa id %d criada com sucesso"i);
            SendClientMessage(playerid,-1str);
            return true;
        }
    }
    return true;
}
CMD:comprarcasa(playerid)
{
    new str[130];
    for(new 1;!= sizeof(casas); i++)
    {
        if(IsPlayerInRangeOfPoint(playerid,2casas[i][x], casas[i][y], casas[i][z]))
        {
            DestroyPickup(casas[i][pickup]);
            format(strsizeof(str), "Você comprou a casa id %d"i);
            SendClientMessage(playerid, -1str);
            return true;
        }
    }
    return 1;
}

stock carregarcasas()
{
    new doccasa[130];
    for(new 1;MAX_CASAi++)
    {
        format(doccasa,130,"Casas/%d.inc",i);
        if(DOF2_FileExists(doccasa))
        {
            casas[i][x] = DOF2_GetFloat(doccasa,"X");
            casas[i][y] = DOF2_GetFloat(doccasa,"Y");
            casas[i][z] = DOF2_GetFloat(doccasa,"Z");
            casas[i][worldid] = DOF2_GetFloat(doccasa,"worldid");
            casas[i][pickup] = CreateDynamicPickup(127323casas[i][x], casas[i][y], casas[i][z]);
        }
    }
    return 1;
}[
color=#d4d4d4][size=small][font=Consolas, "Courier New", monospace][color=#d4d4d4][/color][/font][/size][/color] 
Bom, não funcionou mt bem, agora ele ta quebrando o próximo pickup, a mensagem está certa, se estou na casa n°4 ele manda a msg falando q comprou a casa id 4 mas quebra o pickup da casa id 5

(03/07/2022 16:35)MarcosBrazz Escreveu: Pelo que eu vi no /criarcasa e carregarcasas() o pickup esta sendo criado pelo streamer (CreateDynamicPickup)
E no /comprarcasa esta destruindo com DestroyPickup(...) nativo, se foi criado com streamer, tem que ser destruido com streamer (DestroyDynamicPickup)

realmente era esse o problema, muito obrigado ai pra quem ajudou  Heart