Change your
OnPlayerKeyStateChange to this.
What I've made to check the house entering is looping through all houses and checking if you're near the "HouseEnter" coordinates of any house.
What I've made to check the house exiting is looping through all houses, decide which house you're inside by comparing your virtual world to the house's virtual world
then checking if you're by the exit checkpoint.
pawn Код:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys == KEY_CROUCH)
{
for(new i = 0; i < MAX_HOUSES;i++)//Looping threw all houses.
{
//new pickupid;
//if(pickupid == HouseEnter[i])//Checking if the checkpoint id corresponds to one of the house interiors
if(IsPlayerInRangeOfPoint(playerid, 2, HInfo[i][XPos],HInfo[i][YPos],HInfo[i][ZPos]))//Checking if the player is near any house
{
new pName[24];//Creating the new var for the players name
GetPlayerName(playerid,pName,24);//Storing the players name
if(HInfo[i][Owned] == 1 && strcmp(HInfo[i][Owner],pName) == 0)//String comparing between the players name and the house owners name, to check if they match.
{
SetPVarInt(playerid,"PlayersInteriorHouse",GetPlayerInterior(playerid));//Storing, so later we can reset it back
SetPVarInt(playerid,"PlayerVirtualWorldHouse",GetPlayerVirtualWorld(playerid));//Storing, so later we can reset it back
SetPlayerPos(playerid,446.7281,507.0475,1001.9195);//Setting the players position.
SetPlayerInterior(playerid,12);//Setting the players interior.
SetPlayerVirtualWorld(playerid,HInfo[i][VirtualWorld]);//Preventing players from different houses,
PlayerInHouseID[playerid] = i;
}
if(HInfo[i][Owned] == 1 && strcmp(HInfo[i][Owner],pName) != 0)//Checking if the house is owned but the house owner and the players name don't match.
{
SendClientMessage(playerid,-1,"You don't own this house");
}
if(HInfo[i][Owned] == 0)//Simply checking if the house isn't owned.
{
SendClientMessage(playerid,-1,"/buy to buy this lovely house");
}
}
//if(pickupid == HouseExit[i])//Checking if the checkpointid is an House exit
if(GetPlayerVirtualWorld(playerid) == HInfo[i][VirtualWorld] && IsPlayerInRangeOfPoint(playerid, 1.5, 443.9237,509.4609,1001.4195)) //Checking which house is the player inside by comparing virutal worlds, also checking if he's near the exit checkpoint
{
SetPlayerPos(playerid,HInfo[i][XPos]+3,HInfo[i][YPos],HInfo[i][ZPos]);//Setting the players position to checkpoint position +3
SetPlayerInterior(playerid,GetPVarInt(playerid,"PlayersInteriorHouse"));//Setting the players interior to the one we stored
SetPlayerVirtualWorld(playerid,GetPVarInt(playerid,"PlayerVirtualWorldHouse"));//Setting the players virtual world to the one we stored.
}
}
}
return 1;
}