Portal SAMP
[Include] OpenGate (Abrir Portões por Aproximação) - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Lançamentos (https://portalsamp.com/forumdisplay.php?fid=26)
+---- Fórum: Includes (https://portalsamp.com/forumdisplay.php?fid=27)
+---- Tópico: [Include] OpenGate (Abrir Portões por Aproximação) (/showthread.php?tid=5143)



OpenGate (Abrir Portões por Aproximação) - Crazy_ArKzX - 13/11/2025

Com Esta Include Você Pode Abrir Portões Somente se Aproximando Deles



Download: https://github.com/crazy-arkzx/opengate

Código PHP:
CreateAutoGate(
    modelid// Object Model 
    Float:closeXFloat:closeYFloat:closeZFloat:closeRXFloat:closeRYFloat:closeRZ// Gate Position
    move[], // Direction of Movement: "left", "right", "up", "down", "forward", "backward"
    Float:movement// How Many Meters Will the Gate Move 
    Float:range 10.0// Distance to Open the Gate 
    speed 2// Opening Speed
    autoclose_time 5000// Time to Auto Close
    bool:auto_open true // Automatically Open to Anyone (true) or (false) Only With Condition 
    

=== Lista de Direções ===
- up
- down
- left
- right
- forward
- backward

Exemplo:
Código PHP:
CreateAutoGate(9801803.3665, -1722.062313.54280.00.00.0"up"3.852610.025000true); 

Veja Mais Sobre no Github
https://github.com/crazy-arkzx/opengate


RE: OpenGate (Abrir Portões por Aproximação) - xbruno1000x - 13/11/2025

Boa lib, mas ainda está muito simples. Seria interessante adicionar os sons do portão abrindo e fechando.

Além disso poderia ter uma callback OnGateRequestAccess(playerid, gateid);, onde eu poderia autorizar o portão abrir de dentro do meu GM se um jogador X pertence a organização BOPE por exemplo. Poderia ter uma Callback OnGateOpened, OnGateClosed também.

Com isso você abriria uma gama maior de opções para quem usa a sua lib.


RE: OpenGate (Abrir Portões por Aproximação) - Calasans - 13/11/2025

Ótimo include.


RE: OpenGate (Abrir Portões por Aproximação) - Crazy_ArKzX - 14/11/2025

(13/11/2025 21:06)xbruno1000x Escreveu: Boa lib, mas ainda está muito simples. Seria interessante adicionar os sons do portão abrindo e fechando.

Além disso poderia ter uma callback OnGateRequestAccess(playerid, gateid);, onde eu poderia autorizar o portão abrir de dentro do meu GM se um jogador X pertence a organização BOPE por exemplo. Poderia ter uma Callback OnGateOpened, OnGateClosed também.

Com isso você abriria uma gama maior de opções para quem usa a sua lib.

Obrigado Pelas Sugestões Burno!
A parte de fazer com que o portão só abra para certos players já é possível, você pode colocar em OnPlayerUpdate e verificar se o player está perto do portão

Código PHP:
new portaoml
Código PHP:
public OnGameModeInit()
{
    portaoml CreateAutoGate(9801803.3665, -1722.062313.54280.00.00.0"up"3.852610.025000false);
    return 1;

Código PHP:
public OnPlayerUpdate(playerid)
{
    if(PlayerInfo[playerid][pEmprego] == 1)
    {
        OpenManualGate(portaomlplayerid);
    }
    return 1;


Na parte do som ao abrir o portão, acho que posso sim adicionar isso, vou pensar sobre

Ah uma nova update da include no github


RE: OpenGate (Abrir Portões por Aproximação) - xbruno1000x - 14/11/2025

(14/11/2025 07:51)Crazy_ArKzX Escreveu: Obrigado Pelas Sugestões Burno!
A parte de fazer com que o portão só abra para certos players já é possível, você pode colocar em OnPlayerUpdate e verificar se o player está perto do portão

Código PHP:
new portaoml
Código PHP:
public OnGameModeInit()
{
    portaoml CreateAutoGate(9801803.3665, -1722.062313.54280.00.00.0"up"3.852610.025000false);
    return 1;

Código PHP:
public OnPlayerUpdate(playerid)
{
    if(PlayerInfo[playerid][pEmprego] == 1)
    {
        OpenManualGate(portaomlplayerid);
    }
    return 1;


Na parte do som ao abrir o portão, acho que posso sim adicionar isso, vou pensar sobre

Ah uma nova update da include no github

A callback OnPlayerUpdate é executada, aproximadamente, 30 vezes por segundo. Não é muito viável usá-la para algo simples assim. Sem contar que a implementação de uma callback de verificação seria extremamente simples de ser feita.

Código:
stock Call_OnGateRequestAccess(gateid, playerid)
{
    #if defined OG_OnGateRequestAccess
        return OG_OnGateRequestAccess(gateid, playerid);
    #else
        return 1; //permitir
    #endif
}

Na OnPlayerEnterDynamicArea teria que mudar o trecho
Código:
if(GateInfo[gateID][gateAutoOpen] && !GateInfo[gateID][gateIsOpen])
{
    OpenAutoGate(gateID);
}
Para:
Código:
if(GateInfo[gateID][gateAutoOpen] && !GateInfo[gateID][gateIsOpen])
{
    if(Call_OnGateRequestAccess(gateID, playerid))
    {
        OpenAutoGate(gateID);
    }
}


Depois é só colocar no gamemode algo como:
Código:
public OnGateRequestAccess(gateid, playerid)
{
    // portão restrito
    if (gateid == portaoadmin)
    {
        if (IsPlayerAdmin(playerid))
            return 1;  // autorizado

        return 0;      // negado para quem não é admin
    }

    // portões comuns
    return 1;
}



RE: OpenGate (Abrir Portões por Aproximação) - Crazy_ArKzX - 25/11/2025

(14/11/2025 19:02)xbruno1000x Escreveu:
(14/11/2025 07:51)Crazy_ArKzX Escreveu: Obrigado Pelas Sugestões Burno!
A parte de fazer com que o portão só abra para certos players já é possível, você pode colocar em OnPlayerUpdate e verificar se o player está perto do portão

Código PHP:
new portaoml
Código PHP:
public OnGameModeInit()
{
    portaoml CreateAutoGate(9801803.3665, -1722.062313.54280.00.00.0"up"3.852610.025000false);
    return 1;

Código PHP:
public OnPlayerUpdate(playerid)
{
    if(PlayerInfo[playerid][pEmprego] == 1)
    {
        OpenManualGate(portaomlplayerid);
    }
    return 1;


Na parte do som ao abrir o portão, acho que posso sim adicionar isso, vou pensar sobre

Ah uma nova update da include no github

A callback OnPlayerUpdate é executada, aproximadamente, 30 vezes por segundo. Não é muito viável usá-la para algo simples assim. Sem contar que a implementação de uma callback de verificação seria extremamente simples de ser feita.

Código:
stock Call_OnGateRequestAccess(gateid, playerid)
{
    #if defined OG_OnGateRequestAccess
        return OG_OnGateRequestAccess(gateid, playerid);
    #else
        return 1; //permitir
    #endif
}

Na OnPlayerEnterDynamicArea teria que mudar o trecho
Código:
if(GateInfo[gateID][gateAutoOpen] && !GateInfo[gateID][gateIsOpen])
{
    OpenAutoGate(gateID);
}
Para:
Código:
if(GateInfo[gateID][gateAutoOpen] && !GateInfo[gateID][gateIsOpen])
{
    if(Call_OnGateRequestAccess(gateID, playerid))
    {
        OpenAutoGate(gateID);
    }
}


Depois é só colocar no gamemode algo como:
Código:
public OnGateRequestAccess(gateid, playerid)
{
    // portão restrito
    if (gateid == portaoadmin)
    {
        if (IsPlayerAdmin(playerid))
            return 1;  // autorizado

        return 0;      // negado para quem não é admin
    }

    // portões comuns
    return 1;
}

Acabamos de Lançar uma Update Referente a Isso
https://github.com/crazy-arkzx/opengate
Agradecimentos Especiais a Becker Pela Contribuição