Portal SAMP
[Ajuda] problemas com TogglePlayerControllable - 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] problemas com TogglePlayerControllable (/showthread.php?tid=709)



problemas com TogglePlayerControllable - zBL4CK - 31/01/2021

eae galera blz

bom fiz um sistema de posto de combustivel e quando o player abre o menu apertando H eu seto TogglePlayerControllable(playerid, 0); para ele nao controlar o carro porem quando o player aperta espaço para fechar o menu eu seto TogglePlayerControllable(playerid, 1); porem nao funciona ele ainda continua travado alguem sabe o por que?

Código:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
    if(newkeys == KEY_SPRINT && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) { // quando apertar 'H' NO POSTO
        if(IsPlayerInRangeOfPoint(playerid, 7, 1939.1224, -1775.5885, 12.9718)) {
            TogglePlayerControllable(playerid, 0);
            for(new pc; pc != 4; pc++) PlayerTextDrawShow(playerid, PostGas[playerid][pc]);
        }
    }
    if(newkeys == KEY_HANDBRAKE) { // quando apertar 'ESPAÇO' NO POSTO
        if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
            TogglePlayerControllable(playerid, 1);
            for(new pc; pc != 4; pc++) PlayerTextDrawHide(playerid, PostGas[playerid][pc]);
        }
    }
    return 1;
}



RE: problemas com TogglePlayerControllable - Hatiro - 31/01/2021

Código:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
    if(newkeys == KEY_SPRINT && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) { // quando apertar 'H' NO POSTO
        if(IsPlayerInRangeOfPoint(playerid, 7, 1939.1224, -1775.5885, 12.9718)) {
            TogglePlayerControllable(playerid, 0);
            for(new pc; pc != 4; pc++) PlayerTextDrawShow(playerid, PostGas[playerid][pc]);
        }
    }
    else if(newkeys == KEY_HANDBRAKE) { // quando apertar 'ESPAÇO' NO POSTO
        if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
            TogglePlayerControllable(playerid, 1);
            for(new pc; pc != 4; pc++) PlayerTextDrawHide(playerid, PostGas[playerid][pc]);
        }
    }
    return 1;
}
talvez o if nem tava sendo executado


RE: problemas com TogglePlayerControllable - zBL4CK - 31/01/2021

(31/01/2021 20:25)Hatiro Escreveu:
Código:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
    if(newkeys == KEY_SPRINT && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) { // quando apertar 'H' NO POSTO
        if(IsPlayerInRangeOfPoint(playerid, 7, 1939.1224, -1775.5885, 12.9718)) {
            TogglePlayerControllable(playerid, 0);
            for(new pc; pc != 4; pc++) PlayerTextDrawShow(playerid, PostGas[playerid][pc]);
        }
    }
    else if(newkeys == KEY_HANDBRAKE) { // quando apertar 'ESPAÇO' NO POSTO
        if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
            TogglePlayerControllable(playerid, 1);
            for(new pc; pc != 4; pc++) PlayerTextDrawHide(playerid, PostGas[playerid][pc]);
        }
    }
    return 1;
}
talvez o if nem tava sendo executado
Nao funcionou mano eu to achando que quando o player ta travado com o TogglePlayerControllable as teclas funfam


RE: problemas com TogglePlayerControllable - Hatiro - 31/01/2021

tenta remover o if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) de quando aperta espaço pra testar

ou faz assim
Código:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
    if(newkeys == KEY_SPRINT && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) { // quando apertar 'H' NO POSTO
        if(IsPlayerInRangeOfPoint(playerid, 7, 1939.1224, -1775.5885, 12.9718)) {
            TogglePlayerControllable(playerid, 0);
            for(new pc; pc != 4; pc++) PlayerTextDrawShow(playerid, PostGas[playerid][pc]);
        }
    }
    else if(newkeys == KEY_HANDBRAKE) { // quando apertar 'ESPAÇO' NO POSTO
        TogglePlayerControllable(playerid, 1);
        if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
            for(new pc; pc != 4; pc++) PlayerTextDrawHide(playerid, PostGas[playerid][pc]);
        }
    }
    return 1;
}
se pegar você vai ter que mudar o tipo de detecção


RE: problemas com TogglePlayerControllable - xbruno1000x - 31/01/2021

(31/01/2021 21:57)Hatiro Escreveu: tenta remover o if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) de quando aperta espaço pra testar

ou faz assim
Código:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
    if(newkeys == KEY_SPRINT && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) { // quando apertar 'H' NO POSTO
        if(IsPlayerInRangeOfPoint(playerid, 7, 1939.1224, -1775.5885, 12.9718)) {
            TogglePlayerControllable(playerid, 0);
            for(new pc; pc != 4; pc++) PlayerTextDrawShow(playerid, PostGas[playerid][pc]);
        }
    }
    else if(newkeys == KEY_HANDBRAKE) { // quando apertar 'ESPAÇO' NO POSTO
        TogglePlayerControllable(playerid, 1);
        if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
            for(new pc; pc != 4; pc++) PlayerTextDrawHide(playerid, PostGas[playerid][pc]);
        }
    }
    return 1;
}
se pegar você vai ter que mudar o tipo de detecção

Qual o sentido de usar else if em uma situação onde não está adicionando uma exceção/caminho alternativo? Isso nunca iria funcionar, são teclas distintas, else seria caso o cara quisesse utilizar a mesma tecla para ambas as situações.

Tente o seguinte:
Código:
if(newkeys == KEY_HANDBRAKE) { // quando apertar 'ESPAÇO' NO POSTO
        if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
            SetTimerEx("Descongelar", 1000, false, "i", playerid);
            for(new pc; pc != 4; pc++) PlayerTextDrawHide(playerid, PostGas[playerid][pc]);

Stock para descongelar:
Código:
forward Descongelar(playerid);
public Descongelar(playerid)
{
    TogglePlayerControllable(playerid, 1);
    return 1;
}