2024-12-29, 01:43 PM
Isso provavelmente acontece porque as coisas tem os mesmos interiores, e quando você vai sair da casa, você está em uma posição que é a mesma das outras casa, "interior", o que eu faço para resolver essa questão é setar o virtual world para o id da casa.
tem várias outras maneiras de corrigir isso, mas essa foi a que eu fiz, da para fazer por variáveis armazenada diretamente no player também, espero que consiga compreender minha solução ;)
PHP Code:
CMD:entrar(jugador, params[])
{
para (new i = 0; i < MAX_PROPERTY; i++) //- Sistema de casas
{
if(IsPlayerInRangeOfPoint(playerid, 1.0, INFO_PROPERTY[i][p_POS_EXT][0], INFO_PROPERTY[i][p_POS_EXT][1], INFO_PROPERTY[i][p_POS_EXT][2]))
{
if(INFO_PROPERTY[i][p_CLOSED] == 0)
{
¡¡if(INFO_PROPERTY[i][p_BOUGHT] == 1 && !strcmp(PlayerName(playerid), INFO_PROPERTY[i][p_OWNER]))
{
SetPlayerPosEx(playerid, INFO_PROPERTY[i][p_POS_INT][0], INFO_PROPERTY[i][p_POS_INT][1], INFO_PROPERTY[i][p_POS_INT][2], 0.0, INFO_PROPERTY[i][p_INTERIOR], i+10);
SetPlayerVirtualWorld(playerid, i); // seta o virtual world para o id da casa
TEMPORAL_PLAYER[playerid][t_AT_HOME] = i;
SetCameraBehindPlayer(jugador);
TogglePlayerControlable(reproductor, falso);
GameTextForPlayer(jugador, "~g~Cargando~n~ ~w~~h~~h~Objetos", 3000, 1);
TEMPORAL_PLAYER[playerid][t_TIMER][2] = SetTimerEx("RemoverObjectos", 3000, false, "i", playerid);
regreso 1;
}
otra cosa
{
ShowPlayerMessage(jugador, "~y~No eres el dueño de esta propiedad", 3);
}
}
otra cosa
{
ShowPlayerMessage(jugador, "~r~Cerrado", 3);
}
regreso 1;
}
}
regreso 1;
}
CMD:salir(jugador, params[])
{
para (new i = 0; i < MAX_PROPERTY; i++) //- Sistema de casas
{
if(IsPlayerInRangeOfPoint(playerid, 1.0, INFO_PROPERTY[i][p_POS_INT][0], INFO_PROPERTY[i][p_POS_INT][1], INFO_PROPERTY[i][p_POS_INT][2]))
{
new j = GetPlayerVirtualWorld(playerid); // pega o id do virtualworld que em teoria é o id da casa
SetPlayerPosEx(playerid, INFO_PROPERTY[j][p_POS_EXT][0], INFO_PROPERTY[j][p_POS_EXT][1], INFO_PROPERTY[j][p_POS_EXT][2], 0.0, 0, 0);
TEMPORAL_PLAYER[playerid][t_AT_HOME] = -1;
SetCameraBehindPlayer(jugador);
TogglePlayerControlable(reproductor, falso);
GameTextForPlayer(jugador, "~g~Cargando~n~ ~w~~h~~h~Objetos", 3000, 1);
TEMPORAL_PLAYER[playerid][t_TIMER][2] = SetTimerEx("RemoverObjectos", 3000, false, "i", playerid);
regreso 1;
}
}
regreso 1;
}
tem várias outras maneiras de corrigir isso, mas essa foi a que eu fiz, da para fazer por variáveis armazenada diretamente no player também, espero que consiga compreender minha solução ;)