Portal SAMP
[Ajuda] Teleport com FOR - 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] Teleport com FOR (/showthread.php?tid=3255)



Teleport com FOR - MatheuzPatoo - 27/01/2023

Basicamente quero fazer um sistema que pega informações de entrada e saida, da enum e execute um comando.
Porém está dando algum problema.

Da primeira vez o script estava assim:

Código PHP:
hook OnPlayerKeyStateChange(playeridnewkeysoldkeys)
{
    if(newkeys == KEY_YES)
    {
        for(new iNumEmpi++)
        {
            if(GetPlayerPos(playeridStrInfoEmp[i][EmpLocX], StrInfoEmp[i][EmpLocY], StrInfoEmp[i][EmpLocZ]))
            {
                SetPlayerPos(playeridStrInfoEmp[i][EmpIntX], StrInfoEmp[i][EmpIntY], StrInfoEmp[i][EmpIntZ]);
                SetPlayerInterior(playeridStrInfoEmp[i][EmpInt]);
                SetPlayerVirtualWorld(playeridStrInfoEmp[i][EmpID]);
            }

            else if(GetPlayerPos(playeridStrInfoEmp[i][EmpIntX], StrInfoEmp[i][EmpIntY], StrInfoEmp[i][EmpIntZ]))
            {
                SetPlayerPos(playeridStrInfoEmp[i][EmpLocX], StrInfoEmp[i][EmpLocY], StrInfoEmp[i][EmpLocZ]);
                SetPlayerInterior(playerid0);
                SetPlayerVirtualWorld(playerid0);
            }
        }
    }
    return 1;

Desse jeito o player ia até a localização mas voltava logo em seguida, por conta da sequencia do codigo, dai pensei em inverter os IFs, então o player foi parar em outra localização ditada no enum.

Alguem pode me ajudar?



RE: Teleport com FOR - MarcosBrazz - 27/01/2023

Se você quer que o jogador pressione a KEY_YES se ele estiver fora da empresa entrar, e se estiver dentro da empresa e  sair, esse é o codigo correto:
Código PHP:
hook OnPlayerKeyStateChange(playeridnewkeysoldkeys)
{
    if(newkeys == KEY_YES)
    {
        for(new iNumEmpi++)
        {
            if(IsPlayerInRangeOfPoint(playerid1.5StrInfoEmp[i][EmpLocX], StrInfoEmp[i][EmpLocY], StrInfoEmp[i][EmpLocZ]))
            {
                SetPlayerPos(playeridStrInfoEmp[i][EmpIntX], StrInfoEmp[i][EmpIntY], StrInfoEmp[i][EmpIntZ]);
                SetPlayerInterior(playeridStrInfoEmp[i][EmpInt]);
                SetPlayerVirtualWorld(playeridStrInfoEmp[i][EmpID]);
            }
            else if(IsPlayerInRangeOfPoint(playerid1.5StrInfoEmp[i][EmpIntX], StrInfoEmp[i][EmpIntY], StrInfoEmp[i][EmpIntZ]) && GetPlayerInterior(playerid) == StrInfoEmp[i][EmpInt] && GetPlayerVirtualWorld(playerid) == StrInfoEmp[i][EmpID])//se o player estiver na a 1.5m de distancia da saida e estiver no interior e mundo virtual da empresa ele irá sair
            {
                SetPlayerPos(playeridStrInfoEmp[i][EmpLocX], StrInfoEmp[i][EmpLocY], StrInfoEmp[i][EmpLocZ]);
                SetPlayerInterior(playerid0);
                SetPlayerVirtualWorld(playerid0);
            }
            
//codigo antigo para comparar
            /*if(GetPlayerPos(playerid, StrInfoEmp[i][EmpLocX], StrInfoEmp[i][EmpLocY], StrInfoEmp[i][EmpLocZ]))
            {
                SetPlayerPos(playerid, StrInfoEmp[i][EmpIntX], StrInfoEmp[i][EmpIntY], StrInfoEmp[i][EmpIntZ]);
                SetPlayerInterior(playerid, StrInfoEmp[i][EmpInt]);
                SetPlayerVirtualWorld(playerid, StrInfoEmp[i][EmpID]);
            }

            else if(GetPlayerPos(playerid, StrInfoEmp[i][EmpIntX], StrInfoEmp[i][EmpIntY], StrInfoEmp[i][EmpIntZ]))
            {
                SetPlayerPos(playerid, StrInfoEmp[i][EmpLocX], StrInfoEmp[i][EmpLocY], StrInfoEmp[i][EmpLocZ]);
                SetPlayerInterior(playerid, 0);
                SetPlayerVirtualWorld(playerid, 0);
            }*/
        }
    }
    return 1;


GetPlayerPos retorna true(1) se funcionar, então ele iria executar os 2 ifs pois ambos estão retornando true (1)
Utilize IsPlayerInRangeOfPoint se quiser verificar se o jogador está perto de uma posição.

Veja como utilizar essas funções corretamente:
https://www.open.mp/docs/scripting/functions/GetPlayerPos
https://www.open.mp/docs/scripting/functions/IsPlayerInRangeOfPoint