Portal SAMP
[Ajuda] Saída de interior - 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] Saída de interior (/showthread.php?tid=3985)



Saída de interior - PauloJBR7 - 19/09/2023

Tem alguma maneira de setar o player para sair do interior pela mesma entrada que ele entrou? Tenho 3 interiores com o mesmo id e sempre que entro e saio do interior ele não saí pela mesma entrada que eu entrei. Alguem pode me informar se tem como?
Código:
//SAÍDA CLUCKIN BELL LS
    if(IsPlayerInRangeOfPoint (playerid, 3.0, 364.9082,-11.1554,1001.8516))
    {
    SetPlayerInterior (playerid, 0);
    SetPlayerPos(playerid, 927.9937,-1352.8876,13.3438);
    }
    //SAÍDA CLUCKIN BELL LS 2
    if(IsPlayerInRangeOfPoint (playerid, 3.0, 364.9082,-11.1554,1001.8516))
    {
    SetPlayerInterior (playerid, 0);
    SetPlayerPos(playerid, 2397.7510,-1898.4891,13.5469);
    }
    //SAÍDA CLUCKIN BELL LS 3
    if(IsPlayerInRangeOfPoint (playerid, 3.0, 364.9082,-11.1554,1001.8516))
    {
    SetPlayerInterior (playerid, 0);
    SetPlayerPos(playerid, 2397.7510,-1898.4891,13.5469);
    }



RE: Saída de interior - zBreno - 19/09/2023

quando o jogador encostar no pickup você só precisa escrever a entrada onde ele passou, se tem dois burguer shot em los santos você tem a entrada um e entrada dois então na variável que você usa para anotar o nome do pickup de entrada você define entrada1 = 1; e entrada2 = 1; dentro da variável do pickup de entrada, já na variável do pickup de saída que ta dentro do interior se a condição if ( entrada1 for == 1 ) você teleporta ele para entrada do pickup 1, então no pickup que ta dentro do interior são colocadas duas variáveis dentro dele

if(pickupid == sair do burger shot)
{

if( se ele entrou pelo pickup 1 entrada1 == 1 )
{
entrada1[playerid] = 0;
set player pos entrada 1
}

if( se ele entrou pelo pickup 2 entrada2 == 1 )
{
entrada2[playerid] = 0;
set player pos entrada 2
}

}


RE: Saída de interior - PauloJBR7 - 19/09/2023

(19/09/2023 07:56)zBreno Escreveu: quando o jogador encostar no pickup você só precisa escrever a entrada onde ele passou, se tem dois burguer shot em los santos você tem a entrada um e entrada dois então na variável que você usa para anotar o nome do pickup de entrada você define entrada1 = 1; e entrada2 = 1; dentro da variável do pickup de entrada, já na variável do pickup de saída que ta dentro do interior se a condição if ( entrada1 for == 1 ) você teleporta ele para entrada do pickup 1, então no pickup que ta dentro do interior são colocadas duas variáveis dentro dele

if(pickupid == sair do burger shot)
{

if( se ele entrou pelo pickup 1 entrada1 == 1 )
{
entrada1[playerid] = 0;
set player pos entrada 1
}

if( se ele entrou pelo pickup 2 entrada2 == 1 )
{
entrada2[playerid] = 0;
set player pos entrada 2
}

}

Fiquei um pouco confuso com a explicação kkk (sou meio leigo no assunto, comecei a montar um servidor recentemente para aprender) Se puder deixar um pouco mais claro essa sua explicaçao vou agradecer muito


RE: Saída de interior - zBreno - 19/09/2023

new entrada1[MAX_PLAYRES] = 0;
new entrada2[MAX_PLAYERS] = 0;
new local1, local2, saida;

public OnPlayerConnect(playerid)
{
entrada1[playerid] = 0;
entrada2[playerid] = 0;
return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{

if(pickupid == local1)
{
entrada1[playerid] = 1;
}

if(pickupid == local2)
{
entrada2[playerid] = 1;
}

if(pickupid == saida)
{

if(entrada1[playerid] == 1)
{
entrada1[playerid] = 0;
}

if(entrada2[playerid] == 1)
{
entrada2[playerid] = 0;
}

}

return 1;
}


RE: Saída de interior - PauloJBR7 - 19/09/2023

(19/09/2023 16:20)zBreno Escreveu: new entrada1[MAX_PLAYRES] = 0;
new entrada2[MAX_PLAYERS] = 0;
new local1, local2, saida;

public OnPlayerConnect(playerid)
{
entrada1[playerid] = 0;
entrada2[playerid] = 0;
return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{

if(pickupid == local1)
{
entrada1[playerid] = 1;
}

if(pickupid == local2)
{
entrada2[playerid] = 1;
}

if(pickupid == saida)
{

if(entrada1[playerid] == 1)
{
entrada1[playerid] = 0;
}

if(entrada2[playerid] == 1)
{
entrada2[playerid] = 0;
}

}

return 1;
}

Mas no caso eu queria fazer por CMD para o player digitar /entrar ou entrar apertando F ou sair digitando /sair ou apertando F, tem como adaptar isso no comando? Pq esse código que mandei acima é por cmd que criei na minha GM


RE: Saída de interior - Aranha - 19/09/2023

(19/09/2023 19:41)PauloJBR7 Escreveu:
(19/09/2023 16:20)zBreno Escreveu: new entrada1[MAX_PLAYRES] = 0;
new entrada2[MAX_PLAYERS] = 0;
new local1, local2, saida;

public OnPlayerConnect(playerid)
{
entrada1[playerid] = 0;
entrada2[playerid] = 0;
return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{

if(pickupid == local1)
{
entrada1[playerid] = 1;
}

if(pickupid == local2)
{
entrada2[playerid] = 1;
}

if(pickupid == saida)
{

if(entrada1[playerid] == 1)
{
entrada1[playerid] = 0;
}

if(entrada2[playerid] == 1)
{
entrada2[playerid] = 0;
}

}

return 1;
}

Mas no caso eu queria fazer por CMD para o player digitar /entrar ou entrar apertando F ou sair digitando /sair ou apertando F, tem como adaptar isso no comando? Pq esse código que mandei acima é por cmd que criei na minha GM
Código:
CMD:entrar(playerid, params[])
{
    if(IsPlayerInRangeOfPoint(playerid, 2.0, x,y,z))
    {
        
        SetPlayerPos(playerid, x,y,z);
        SetPlayerInterior(playerid, id);
    }

    else if(IsPlayerInRangeOfPoint(playerid, 2.0, x,y,z))
    {
        
        SetPlayerPos(playerid, x,y,z);
        SetPlayerInterior(playerid, id);
    }

    return 1;



}



pode fazer o mesmo com o cmdConfusedair

apertando f para sair ou entrar use

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)

Código:
if(newkeys == KEY_SECONDARY_ATTACK)//tecla f
{
    

    if(IsPlayerInRangeOfPoint(playerid, 1.0, x,y,z))
    {
        

        SetPlayerPos(playerid, x,y,z);

        SetPlayerInterior(playerid, id);



    }
}



RE: Saída de interior - PauloJBR7 - 19/09/2023

(19/09/2023 16:20)zBreno Escreveu: new entrada1[MAX_PLAYRES] = 0;
new entrada2[MAX_PLAYERS] = 0;
new local1, local2, saida;

public OnPlayerConnect(playerid)
{
entrada1[playerid] = 0;
entrada2[playerid] = 0;
return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{

if(pickupid == local1)
{
entrada1[playerid] = 1;
}

if(pickupid == local2)
{
entrada2[playerid] = 1;
}

if(pickupid == saida)
{

if(entrada1[playerid] == 1)
{
entrada1[playerid] = 0;
}

if(entrada2[playerid] == 1)
{
entrada2[playerid] = 0;
}

}

return 1;
}

Não deu certo aqui mano, continua saindo por outra entrada


RE: Saída de interior - zBreno - 21/09/2023

(19/09/2023 19:41)PauloJBR7 Escreveu: Mas no caso eu queria fazer por CMD para o player digitar /entrar ou entrar apertando F ou sair digitando /sair ou apertando F, tem como adaptar isso no comando? Pq esse código que mandei acima é por cmd que criei na minha GM

Não faça isso, se o relógio do jogador travar ele vai ficar preso dentro do interior use os pickups, veja agora to mandando um código funcional se você fizer ai e não funcionar provavelmente ta errando no SetPlayerPos

Código:
#include <a_samp>
#include <timerfix>
#include <streamer>

main()
{
}

new entrada1[MAX_PLAYERS] = 0, entrada2[MAX_PLAYERS] = 0, EntrarCB1, EntrarCB2, SairCB;

public OnGameModeInit()
{
DisableInteriorEnterExits();
EntrarCB1 = CreateDynamicPickup(19198, 1, 2422.0315, -1508.9431, 23.9922, -1, -1, -1, 10.0);  //
EntrarCB2 = CreateDynamicPickup(19198, 1, 924.6476, -1352.8187, 13.3766, -1, -1, -1, 10.0);  //
SairCB = CreateDynamicPickup(19198, 1, 364.7711, -10.2328, 1001.8516, -1, -1, -1, 10.0); //
return 1;
}

public OnPlayerConnect(playerid)
{
entrada1[playerid] = 0, entrada2[playerid] = 0;
return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
SetSpawnInfo(playerid, 1, 155, 2429.7324, -1511.2690, 23.8430, 119.3757, 24, 7, 29, 10, 31, 10);
return 1;
}

public OnPlayerPickUpDynamicPickup(playerid, pickupid)
{

if(pickupid == SairCB)
{
if(entrada1[playerid] == 1)
{
entrada1[playerid] = 0;
SetPlayerPos(playerid, 2427.1233, -1509.2976, 23.8347); // SairCB1
SetPlayerInterior(playerid, 0);
}

if(entrada2[playerid] == 1)
{
entrada2[playerid] = 0;
SetPlayerPos(playerid, 919.1171, -1352.8507, 13.2010);
SetPlayerInterior(playerid, 0);
}
}


if(pickupid == EntrarCB1)
{
entrada1[playerid] = 1;
SetPlayerPos(playerid, 368.3214, -8.5612, 1001.8516); // EntrarCB1
SetPlayerInterior(playerid, 9);
}

if(pickupid == EntrarCB2)
{
entrada2[playerid] = 1;
SetPlayerPos(playerid, 368.3214, -8.5612, 1001.8516); // EntrarCB2
SetPlayerInterior(playerid, 9);
}

return 1;
}



RE: Saída de interior - PauloJBR7 - 21/09/2023

(21/09/2023 12:23)zBreno Escreveu:
(19/09/2023 19:41)PauloJBR7 Escreveu: Mas no caso eu queria fazer por CMD para o player digitar /entrar ou entrar apertando F ou sair digitando /sair ou apertando F, tem como adaptar isso no comando? Pq esse código que mandei acima é por cmd que criei na minha GM

Não faça isso, se o relógio do jogador travar ele vai ficar preso dentro do interior use os pickups, veja agora to mandando um código funcional se você fizer ai e não funcionar provavelmente ta errando no SetPlayerPos

Código:
#include <a_samp>
#include <timerfix>
#include <streamer>

main()
{
}

new entrada1[MAX_PLAYERS] = 0, entrada2[MAX_PLAYERS] = 0, EntrarCB1, EntrarCB2, SairCB;

public OnGameModeInit()
{
DisableInteriorEnterExits();
EntrarCB1 = CreateDynamicPickup(19198, 1, 2422.0315, -1508.9431, 23.9922, -1, -1, -1, 10.0);  //
EntrarCB2 = CreateDynamicPickup(19198, 1, 924.6476, -1352.8187, 13.3766, -1, -1, -1, 10.0);  //
SairCB = CreateDynamicPickup(19198, 1, 364.7711, -10.2328, 1001.8516, -1, -1, -1, 10.0); //
return 1;
}

public OnPlayerConnect(playerid)
{
entrada1[playerid] = 0, entrada2[playerid] = 0;
return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
SetSpawnInfo(playerid, 1, 155, 2429.7324, -1511.2690, 23.8430, 119.3757, 24, 7, 29, 10, 31, 10);
return 1;
}

public OnPlayerPickUpDynamicPickup(playerid, pickupid)
{

if(pickupid == SairCB)
{
if(entrada1[playerid] == 1)
{
entrada1[playerid] = 0;
SetPlayerPos(playerid, 2427.1233, -1509.2976, 23.8347); // SairCB1
SetPlayerInterior(playerid, 0);
}

if(entrada2[playerid] == 1)
{
entrada2[playerid] = 0;
SetPlayerPos(playerid, 919.1171, -1352.8507, 13.2010);
SetPlayerInterior(playerid, 0);
}
}


if(pickupid == EntrarCB1)
{
entrada1[playerid] = 1;
SetPlayerPos(playerid, 368.3214, -8.5612, 1001.8516); // EntrarCB1
SetPlayerInterior(playerid, 9);
}

if(pickupid == EntrarCB2)
{
entrada2[playerid] = 1;
SetPlayerPos(playerid, 368.3214, -8.5612, 1001.8516); // EntrarCB2
SetPlayerInterior(playerid, 9);
}

return 1;
}
Acabei conseguindo fazer isso, deixei o comando em "/entrar" e "/sair" mesmo, qualquer coisa caso o jogador bugar ele pode chamar algum administrador para puxar ou dar um tapa nele, creio que irá desbugar caso aconteça. Mas vllw ai por ajudar