Portal SAMP
[Ajuda] Integrar variaveis da GM com FS - 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] Integrar variaveis da GM com FS (/showthread.php?tid=3776)



Integrar variaveis da GM com FS - ViniBicalho17 - 13/07/2023

Galera fiz um sistema de radio por voip e por frequencia de radio, a parte do voipe e do sistema de radio já esta funcionando 100%. O problema que estou tendo é em utilizar variavel da minha GM no meu FS, eu estou colocando o radio no inventario e preciso interagir as variaveis da GM com o FS. Vou mostrar oq estou fazendo pra vcs entenderem:

***Dentro da GM***
Quando o player equipa o radio no seu inventario:
Código:
RadioUse[playerid] = 1;
SetPVarInt(playerid, "RadioDebugVoip", RadioUse[playerid]);

Mandando a informação pro FS:
Código:
forward GetPlayerRadioUse(playerid);
public GetPlayerRadioUse(playerid)
{
    return RadioUse[playerid];
}
Código:
BPR::OnPlayerAtualizador(playerid) //
{
    SetPVarInt(playerid, "RadioDebugVoip", RadioUse[playerid]);
}




***Dentro do FS*** 
Código:
forward GetPlayerRadioUse(playerid);
public GetPlayerRadioUse(playerid)
{
return GetPVarInt(playerid, "RadioDebugVoip");
}

Dentro do comando /radioon:
Código:
if(GetPlayerRadioUse(playerid) == 0) return SendClientMessage(playerid, -1, "Rádio não equipado! Para equipar use no seu inventario.");

Ou seja, eu puxo o valor lá do game mode, pra poder usar no FS. Quando eu usar o outro comando pra desligar o radio, /radiooff. O GetPlayerRadioUse(playerid) precisa zerar. Entao utilizei isso dentro do comando /radiooff:
Código:
SetPVarInt(playerid, "RadioDebugVoip", 0);

O objetivo é o rádio desligar e o player ter que usar novamente o radio clicando no inventario, pra poder utilizar o /radioon. Porem nao consigo zerar a variavel dessa forma. Alguem pode me ajudar?


RE: Integrar variaveis da GM com FS - xbruno1000x - 13/07/2023

SetPVar e GetPVar são funções feitas para justamente não serem necessárias variáveis. Use essas funções sem esse monte de variáveis e public's.


RE: Integrar variaveis da GM com FS - ViniBicalho17 - 13/07/2023

(13/07/2023 13:16)xbruno1000x Escreveu: SetPVar e GetPVar são funções feitas para justamente não serem necessárias variáveis. Use essas funções sem esse monte de variáveis e public's.

Mas essa public eu preciso usar, certo? Tentei usar sem ela e não deu certo.
Código:
forward GetPlayerRadioUse(playerid);
public GetPlayerRadioUse(playerid)
{
    return RadioUse[playerid];

}
Enfim, tive avanços e falta agr só mais um detalhe...

Vou explicar o que eu fiz:
-----Na Game Mode--------
Código:
new RadioUse[MAX_PLAYERS];

//Aqui é o Inventario
if(item == 19942) // Radio
{
    printf("Radio Inv: Get RadioUse %d",GetPlayerRadioUse(playerid)); //Printf para verificar o valor que vem do /radiooff, aqui eu nao consigo puxar o valor manipulado de lá.
            
    if(GetPlayerRadioUse(playerid) == 1) return SendClientMessage(playerid, -1, "Você já esta usando um Radio, para desligar digite:/radiooff.");
           
        //restante codigo....

    RadioUse[playerid] = 1;
    SetPVarInt(playerid, "RadioUse", RadioUse[playerid]); //aqui tá certinho, consigo enviar o valor pro FS
                        
    return 1;
}

forward GetPlayerRadioUse(playerid);
public GetPlayerRadioUse(playerid)
{
    return RadioUse[playerid];

}

-------No FS:---------------

Código:
forward GetPlayerRadioUse(playerid);
public GetPlayerRadioUse(playerid)
{
    return GetPVarInt(playerid, "RadioUse");
}

CMD:radiooff(playerid)
{
    if(GetPlayerRadioUse(playerid) == 0) return SendClientMessage(playerid, -1, "Seu Rádio Comunicador já está desligado.");
    //restante comando...
    
    SetPVarInt(playerid, "RadioUse", 0);
    printf("/radioff: Set RadioUse %d",GetPlayerRadioUse(playerid)); //Deu certo (O problema é que nao consigo mandar esse valor lá pra GM)

    return 1;
}

CMD:radioon(playerid, params[])
{
        new rfq;

        printf("/radioon: Get RadioUse %d",GetPlayerRadioUse(playerid)); //printf para verificar valor da variavel (Deu certo)
       
        if(GetPlayerRadioUse(playerid) == 0) return SendClientMessage(playerid, -1, "Rádio não equipado! Para equipar use no seu inventario.");
        if(sscanf(params, "d", rfq))
        {
            return SendClientMessage(playerid, -1, "Use: /radioon [frequencia 0 a 99.]");
        }
        //restante codigo....
        return 1;
}

Consegui resolver colocando mais uma public, agora deu certinho. Só nao sei se tem algum jeito mais limpo e mais pratico.

No FS:
Código:
forward SetPlayerRadioUse(playerid);
public SetPlayerRadioUse(playerid)
{
    return SetPVarInt(playerid, "RadioUse",GetPlayerRadioUse(playerid));

}


Na GM:
Código:
forward SetPlayerRadioUse(playerid);
public SetPlayerRadioUse(playerid)
{
    return GetPVarInt(playerid, "RadioUse");
}


Assim, deu certo !


RE: Integrar variaveis da GM com FS - White_Blue - 14/07/2023

Se você quer chamar uma callback de um Filterscript recomendo que leia sobre a função CallRemoteFunction: https://www.open.mp/docs/scripting/functions/CallRemoteFunction