Portal SAMP
[Ajuda] Receber dinheiro diferente para cada Checkpoint - 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] Receber dinheiro diferente para cada Checkpoint (/showthread.php?tid=3073)



Receber dinheiro diferente para cada Checkpoint - MisteriumBr - 10/12/2022

Galera eu gostaria que quando o player chegar em determinado checkpoint ele recebesse uma quantia de dinheiro diferente, pois alguns CP são mais longes outros mais pertos.
Código:
new Float:Posicoesc[][]=
{
        { 2098.9116,2673.9832,10.8203 },
    { 1941.637329,-1757.459716,13.382812 },
    { 1682.216796,-2320.880859,13.476512 },
    { -573.077697,-1055.687500,23.984531 },
    { -1398.416748,-1472.172973,101.962890 },
    { -2045.645629,-96.953994,36.423358 }
};


public OnPlayerEnterCheckpoint(playerid)
{

   if(PlayerInfo[playerid][caminhoneiro] == 1)
   {
   PlayerInfo[playerid][caminhoneiro] = 1;

   random(sizeof(Posicoesc));
   DisablePlayerCheckpoint(playerid);

   SendClientMessage(playerid,0xE60000FF," Você recebeu $ 9000 Pelas Entregas");
   GivePlayerMoney(playerid,granacm);
   }


    return 1;
}



RE: Receber dinheiro diferente para cada Checkpoint - xbruno1000x - 10/12/2022

Você pode dar um GetPlayerPos no momento em que começa a entrega e calcular a distância até o checkpoint marcado no mapa do jogador. A partir daí, você multiplica (algum valor * distancia).


RE: Receber dinheiro diferente para cada Checkpoint - MisteriumBr - 13/12/2022

(10/12/2022 14:22)xbruno1000x Escreveu: Você pode dar um GetPlayerPos no momento em que começa a entrega e calcular a distância até o checkpoint marcado no mapa do jogador. A partir daí, você multiplica (algum valor * distancia).

Eita esse tipo de código eu não mexi ainda, como faço pra medir a distância?


RE: Receber dinheiro diferente para cada Checkpoint - Dr Editor - 13/12/2022

(13/12/2022 07:32)MisteriumBr Escreveu:
(10/12/2022 14:22)xbruno1000x Escreveu: Você pode dar um GetPlayerPos no momento em que começa a entrega e calcular a distância até o checkpoint marcado no mapa do jogador. A partir daí, você multiplica (algum valor * distancia).

Eita esse tipo de código eu não mexi ainda, como faço pra medir a distância?

GetPlayerDistanceFromPoint


RE: Receber dinheiro diferente para cada Checkpoint - nilat - 15/12/2022

(13/12/2022 11:36)Dr Editor Escreveu:
(13/12/2022 07:32)MisteriumBr Escreveu:
(10/12/2022 14:22)xbruno1000x Escreveu: Você pode dar um GetPlayerPos no momento em que começa a entrega e calcular a distância até o checkpoint marcado no mapa do jogador. A partir daí, você multiplica (algum valor * distancia).

Eita esse tipo de código eu não mexi ainda, como faço pra medir a distância?

GetPlayerDistanceFromPoint

Se for usar essa função para calcular o local que ele iniciou a rota e o local final, não irá ser preciso, pois o jogador pode partir do ponto A para o ponto C e voltar ao ponto B (Local final), sendo calculado somente a distância entre A e B.

Um jeito mais viável de utilizar essa função, seria fazer cálculos recorrentes em curto período, do ponto anterior ao atual, adicionando o valor a uma variável.


RE: Receber dinheiro diferente para cada Checkpoint - Carlos Victor - 19/12/2022

É necessário que utilize o floatround para deixar a distancia como algo inteiro e não fique 30.419238123, por que a função GetPlayerDistanceFromPoint retorna a distância em metros em float.

Código:
new
    Float:distance = GetPlayerDistanceFromPoint(playerid, 0.0, 0.0, 0.0),
    payment = 40 * floatround(distance);    

GivePlayerMoney(playerid, payment);



RE: Receber dinheiro diferente para cada Checkpoint - Dr Editor - 19/12/2022

(15/12/2022 08:03)nilat Escreveu:
(13/12/2022 11:36)Dr Editor Escreveu:
(13/12/2022 07:32)MisteriumBr Escreveu:
(10/12/2022 14:22)xbruno1000x Escreveu: Você pode dar um GetPlayerPos no momento em que começa a entrega e calcular a distância até o checkpoint marcado no mapa do jogador. A partir daí, você multiplica (algum valor * distancia).

Eita esse tipo de código eu não mexi ainda, como faço pra medir a distância?

GetPlayerDistanceFromPoint

Se for usar essa função para calcular o local que ele iniciou a rota e o local final, não irá ser preciso, pois o jogador pode partir do ponto A para o ponto C e voltar ao ponto B (Local final), sendo calculado somente a distância entre A e B.

Um jeito mais viável de utilizar essa função, seria fazer cálculos recorrentes em curto período, do ponto anterior ao atual, adicionando o valor a uma variável.

Se o jogador não vai receber o dinheiro POR CHECKPOINT, mas sim por rota traçada basta SOMAR A DISTÂNCIA com base nos checkpoints que ele pegou e no fim realizar o pagamento.

CP1 - 500m
CP2 - 200m
CP3 (final) - 8000m

dinheiro a receber = (CP1 + CP2 + CP3) * valor


RE: Receber dinheiro diferente para cada Checkpoint - strelo - 21/12/2022

Aqui está o código revisado onde o índice de ponto de verificação é usado para suporte adicional do granacm:

new Float: Posicoesc[][]=
{
{ 2098.9116,2673.9832,10.8203 },
{ 1941.637329,-1757.459716,13.382812 },
{ 1682.216796,-2320.880859,13.476512 },
{ -573.077697,-1055.687500,23.984531 },
{ -1398.416748,-1472.172973,101.962890 },
{ -2045.645629,-96.953994,36.423358 }
};

new granacm[sizeof(Posicoesc)] = { 9000, 8000, 7000, 6000, 5000, 4000 };

public OnPlayerEnterCheckpoint(playerid)
{
if(PlayerInfo[playerid][caminhoneiro] == 1)
{
PlayerInfo[playerid][caminhoneiro] = 1;

new checkpointIndex = -1;
for(new i = 0; i < sizeof(Posicoesc); i++)
{
if(IsPlayerInRangeOfPoint(playerid, Posicoesc[i][0], Posicoesc[i][1], Posicoesc[i][2], 50.0))
{
checkpointIndex = i;
break;
}
}
if(checkpointIndex != -1)
{
DisablePlayerCheckpoint(playerid);
granacm = granacm[checkpointIndex];
SendClientMessage(playerid, 0xE60000FF, "Você recebeu $ %d pelas entregas", granacm);
GivePlayerMoney(playerid, granacm);
}
}
return 1;
}

Nesse, o jogador só recebe dinheiro quando está em um checkpoint (distância menor que 50 unidades). Se o jogador estiver a mais de 50 unidades do ponto de controle, nada acontece. Você pode alterar este valor.