[HELP]: House exits getting mixed
#1

Hello guys, let's just get right to the point,

so once I made enterable houses, when I start trying them and see if there are any bugs, I bumped with this very annoying bug which when you try to get out of the house, I doesn't teleport you to the house's entrance, it teleports you to an the first created houses with the same house interior virtual world, in other words,

I created houses A with interior 1, and then I created like 10 or 9 other houses with different interiors and virtual world, so ifI go ahead and create and other house B with the same interior as the houses A, if I tried to exit it, I will get teleported to the entrance of the house A not B, you got what I mean?
Please help, there is the code of entering/exiting the house
PHP код:

for(new i=0i<MAX_HOUSES;i++){
            new 
name[MAX_PLAYER_NAME];
            
GetPlayerName(playeridnamesizeof(name));
            if(
IsPlayerInRangeOfPoint(playerid2HouseInfo[i][hEnterX],HouseInfo[i][hEnterY],HouseInfo[i][hEnterZ])){
                if(
HouseInfo[i][hOwned] == 0){
                    
SetPlayerPos(playeridHouseInfo[i][hExitX], HouseInfo[i][hExitY], HouseInfo[i][hExitZ]);
                    
SetPlayerInterior(playeridHouseInfo[i][hInsideVir]);
                }
                else if(
HouseInfo[i][hOwned] == 1){
                    if(!
strcmp(nameHouseInfo[i][hOwner], false24)){
                        
SetPlayerPos(playeridHouseInfo[i][hExitX], HouseInfo[i][hExitY], HouseInfo[i][hExitZ]);
                        
SetPlayerInterior(playeridHouseInfo[i][hInsideInt]);
                        
SetPlayerVirtualWorld(playeridHouseInfo[i][hInsideVir]);
                        
PlayerInfo[playerid][InHouse] = true;
                        
SendClientMessage(playeridORANGE"[SERVER]: {FFFFFF}Welcome inside your house!");
                        return 
1;
                    }
                    else{
                        
SendClientMessage(playeridRED"[SERVER]: {FFFFFF}This is not your house!");
                    }
                }
            }
            else if(
IsPlayerInRangeOfPoint(playerid2HouseInfo[i][hExitX],HouseInfo[i][hExitY],HouseInfo[i][hExitZ])){
                
SetPlayerPos(playeridHouseInfo[i][hEnterX], HouseInfo[i][hEnterY], HouseInfo[i][hEnterZ]);
                
SetPlayerInterior(playeridHouseInfo[i][hOutsideInt]);
                  
SetPlayerVirtualWorld(playeridHouseInfo[i][hOutsideVir]);
                
PlayerInfo[playerid][InHouse] = false;
                return 
1;
            }
        } 
Reply
#2

is this problem with non owned houses? if so then this is your problem:

Код:
if(HouseInfo[i][hOwned] == 0)
{
	SetPlayerPos(playerid, HouseInfo[i][hExitX], HouseInfo[i][hExitY], HouseInfo[i][hExitZ]);
	SetPlayerInterior(playerid, HouseInfo[i][hInsideVir]);
}
you are setting playerinterior to HouseInfo[i][hInsideVir] instead of HouseInfo[i][hInsideInt]

also you are not setting the virtual world which means virtual world is 0 thats why you are being teleported to the first house exterior when ever you exit.

i am not sure but try replacing above code with this one:
Код:
if(HouseInfo[i][hOwned] == 0)
{
	SetPlayerPos(playerid, HouseInfo[i][hExitX], HouseInfo[i][hExitY], HouseInfo[i][hExitZ]);
	SetPlayerInterior(playerid, HouseInfo[i][hInsideInt]);
	SetPlayerVirtualWorld(playerid, HouseInfo[i][hInsideVir]);
}
Reply
#3

Thanks for replying, but it seems that one problem still happens
Reply
#4

try this:
Код:
CMD:house(playerid, parmas[])
{
	if(PlayerInfo[playerid][InHouse] == -1)
	{
		for(new i=0; i<MAX_HOUSES;i++)
		{
			new name[MAX_PLAYER_NAME];
			GetPlayerName(playerid, name, sizeof(name));
			if(IsPlayerInRangeOfPoint(playerid, 2, HouseInfo[i][hEnterX],HouseInfo[i][hEnterY],HouseInfo[i][hEnterZ]))
			{
				if(HouseInfo[i][hOwned] == 0)
				{
					SetPlayerPos(playerid, HouseInfo[i][hExitX], HouseInfo[i][hExitY], HouseInfo[i][hExitZ]);
					SetPlayerInterior(playerid, HouseInfo[i][hInsideInt]);
					SetPlayerVirtualWorld(playerid, HouseInfo[i][hInsideVir]);
		          	PlayerInfo[playerid][InHouse] = i;
				}
				else if(HouseInfo[i][hOwned] == 1)
				{
					if(!strcmp(name, HouseInfo[i][hOwner], false, 24))
					{
						SetPlayerPos(playerid, HouseInfo[i][hExitX], HouseInfo[i][hExitY], HouseInfo[i][hExitZ]);
		       			SetPlayerInterior(playerid, HouseInfo[i][hInsideInt]);
		          		SetPlayerVirtualWorld(playerid, HouseInfo[i][hInsideVir]);
		          		PlayerInfo[playerid][InHouse] = i;
		          		SendClientMessage(playerid, ORANGE, "[SERVER]: {FFFFFF}Welcome inside your house!");
		          		return 1;
					}
					else
					{
						SendClientMessage(playerid, RED, "[SERVER]: {FFFFFF}This is not your house!");
					}
			}
		}
	}
	else
	{
		new i = PlayerInfo[playerid][InHouse];
		if(!IsPlayerInRangeOfPoint(playerid, 2, HouseInfo[i][hExitX],HouseInfo[i][hExitY],HouseInfo[i][hExitZ])) return SendClientMessage(playerid, RED, "[SERVER]: {FFFFFF}You are not near a door!");
		SetPlayerPos(playerid, HouseInfo[i][hEnterX], HouseInfo[i][hEnterY], HouseInfo[i][hEnterZ]);
		SetPlayerInterior(playerid, HouseInfo[i][hOutsideInt]);
		SetPlayerVirtualWorld(playerid, HouseInfo[i][hOutsideVir]);
		PlayerInfo[playerid][InHouse] = -1;
	}
	return 1;
}
i stored the house id in PlayerInfo[playerid][InHouse] instead of true and false also i didnt knew how you access the house with command or with a key try the code above and let me know if it works
Reply
#5

Still the same brah, but thanks anyway
Reply
#6

For the record, this is the command I use to create houses,

PHP код:
CMD:createhouse(playeridparams[]){
    if(
IsPlayerAdmin(playerid)){
        new 
Float:p[3], pricehouseidhinteriorstr[250];
        
houseid HCount;
        if(
sscanf(params"ii"pricehinterior)) return SendClientMessage(playeridBLREN"[USAGE]: {FFFFFF}/createhouse <price> <interior>") && SendClientMessage(playeridBLREN"[FUNCTION]: {FFFFFF}Create a house with setting up its price") && SendClientMessage(playeridBLREN"[HINT]: {FFFFFF}Use /houseint to preview available house interiors");
        if(
hinterior || hinterior 5) return SendClientMessage(playeridRED"[ERROR]: {FFFFFF}invalide interior id, use {FFFF00}/houseint {FFFFFF}to see available interiors");
        if(
HCount >= MAX_HOUSES) return SendClientMessage(playeridRED"[ERROR]: {FFFFFF}There are too many houses");
        
GetPlayerPos(playeridp[0], p[1], p[2]);
        switch(
hinterior){
            case 
0:{//Ryder's house
                
HouseInfo[houseid][hExitX] = 2454.717041;
                 
HouseInfo[houseid][hExitY] = -1700.871582;
                 
HouseInfo[houseid][hExitZ] = 1013.515197;
                 
HouseInfo[houseid][hInsideVir] = 2;
            }
            case 
1:{//Sweet's house
                
HouseInfo[houseid][hExitX] =  2527.654052;
                 
HouseInfo[houseid][hExitY] = -1679.388305;
                 
HouseInfo[houseid][hExitZ] = 1015.498596;
                 
HouseInfo[houseid][hInsideVir] = 1;
            }
            case 
2:{//CJ's house
                
HouseInfo[houseid][hExitX] = 2496.049804;
                 
HouseInfo[houseid][hExitY] = -1695.238159;
                 
HouseInfo[houseid][hExitZ] = 1014.742187;
                 
HouseInfo[houseid][hInsideVir] = 3;
            }
            case 
3:{//Modern house
                
HouseInfo[houseid][hExitX] = 2324.419921;
                 
HouseInfo[houseid][hExitY] = -1145.568359;
                 
HouseInfo[houseid][hExitZ] = 1050.710083;
                 
HouseInfo[houseid][hInsideVir] = 12;
                
            } 
            case 
4:{//Og loc's house
                
HouseInfo[houseid][hExitX] = 513.882507;
                 
HouseInfo[houseid][hExitY] = -11.269994;
                 
HouseInfo[houseid][hExitZ] = 1001.565307;
                 
HouseInfo[houseid][hInsideVir] = 3;
            
            }
            case 
5:{//Mad dogg
                
HouseInfo[houseid][hExitX] = 1267.663208;
                 
HouseInfo[houseid][hExitY] = -781.323242;
                 
HouseInfo[houseid][hExitZ] = 1091.906250;
                 
HouseInfo[houseid][hInsideVir] = 5;
            }
        }
        
HouseInfo[houseid][hPickup] = CreatePickup(12731p[0], p[1], p[2], 0);
        
HouseInfo[houseid][hPrice] = price;
        
format(strsizeof(str), "{FFFFFF}{FF00FF}/buyhouse\n{FFFFFF}Owner: {FFFF00}None\n{FFFFFF}Price: {FFFF00}%i\n{FFFFFF}Press {008080}N {FFFFFF}to enter"HouseInfo[houseid][hPrice]);
        
HouseInfo[houseid][hTextLabel] = Create3DTextLabel(str0xFFFFFFp[0], p[1], p[2], 10.000);
        
HouseInfo[houseid][hEnterX] = p[0];
        
HouseInfo[houseid][hEnterY] = p[1];
        
HouseInfo[houseid][hEnterZ] = p[2];
        
HouseInfo[houseid][hOwned] = 0;
        
HouseInfo[houseid][hOutsideVir] = GetPlayerInterior(playerid);
        
HouseInfo[houseid][hInsideInt] = hinterior;
        
HouseInfo[houseid][hOutsideInt] = GetPlayerVirtualWorld(playerid);
        new 
INI:File INI_Open(PHousePath(houseid));
        
INI_SetTag(File"HousePos");
        
INI_WriteFloat(File"hEnterX"p[0]);
        
INI_WriteFloat(File"hEnterY"p[1]);
        
INI_WriteFloat(File"hEnterZ"p[2]);
        
INI_WriteFloat(File"hExitX"HouseInfo[houseid][hExitX]);
        
INI_WriteFloat(File"hExitY"HouseInfo[houseid][hExitY]);
        
INI_WriteFloat(File"hExitZ"HouseInfo[houseid][hExitZ]);
        
INI_WriteInt(File"hInsideInt"0);
        
INI_SetTag(File"HouseInfo");
        
INI_WriteInt(File"hOwned"0);
        
INI_WriteString(File"hOwner""");
        
INI_WriteString(File"hTitle""");
        
INI_WriteInt(File"hPrice"HouseInfo[houseid][hPrice]);
        
INI_WriteInt(File"hInsideVir"HouseInfo[houseid][hInsideVir]);
        
INI_WriteInt(File"hOutsideVir"HouseInfo[houseid][hOutsideVir]);
        
INI_Close(File);
        
HCount++;
        
SendClientMessage(playeridGREEN"[RCON]: {FFFFFF}House Created!");
        return 
1;
    }
    else{
        
ErrorMessage(playerid6);
    }
    return 
1;

Reply
#7

Guys, anyone?
Reply
#8

Код:
CMD:createhouse(playerid, params[])
{
    if(IsPlayerAdmin(playerid))
	{
        new Float:p[3], price, houseid, hinterior, str[250];
        houseid = HCount;
        if(sscanf(params, "ii", price, hinterior)) return SendClientMessage(playerid, BLREN, "[USAGE]: {FFFFFF}/createhouse <price> <interior>") && SendClientMessage(playerid, BLREN, "[FUNCTION]: {FFFFFF}Create a house with setting up its price") && SendClientMessage(playerid, BLREN, "[HINT]: {FFFFFF}Use /houseint to preview available house interiors");
        if(hinterior < 0 || hinterior > 5) return SendClientMessage(playerid, RED, "[ERROR]: {FFFFFF}invalide interior id, use {FFFF00}/houseint {FFFFFF}to see available interiors");
        if(HCount >= MAX_HOUSES) return SendClientMessage(playerid, RED, "[ERROR]: {FFFFFF}There are too many houses");
        GetPlayerPos(playerid, p[0], p[1], p[2]);
        switch(hinterior)
		{
            case 0:{//Ryder's house
                HouseInfo[houseid][hExitX] = 2454.717041;
                 HouseInfo[houseid][hExitY] = -1700.871582;
                 HouseInfo[houseid][hExitZ] = 1013.515197;
                 HouseInfo[houseid][hInsideInt] = 2;
                 HouseInfo[houseid][hInsideVir] = houseid;
            }
            case 1:{//Sweet's house
                HouseInfo[houseid][hExitX] =  2527.654052;
                 HouseInfo[houseid][hExitY] = -1679.388305;
                 HouseInfo[houseid][hExitZ] = 1015.498596;
                 HouseInfo[houseid][hInsideInt] = 1;
                 HouseInfo[houseid][hInsideVir] = houseid;
            }
            case 2:{//CJ's house
                HouseInfo[houseid][hExitX] = 2496.049804;
                 HouseInfo[houseid][hExitY] = -1695.238159;
                 HouseInfo[houseid][hExitZ] = 1014.742187;
                 HouseInfo[houseid][hInsideInt] = 3;
                 HouseInfo[houseid][hInsideVir] = houseid;
            }
            case 3:{//Modern house
                HouseInfo[houseid][hExitX] = 2324.419921;
                 HouseInfo[houseid][hExitY] = -1145.568359;
                 HouseInfo[houseid][hExitZ] = 1050.710083;
                 HouseInfo[houseid][hInsideInt] = 12;
                 HouseInfo[houseid][hInsideVir] = houseid;

            }
            case 4:{//Og loc's house
                HouseInfo[houseid][hExitX] = 513.882507;
                 HouseInfo[houseid][hExitY] = -11.269994;
                 HouseInfo[houseid][hExitZ] = 1001.565307;
                 HouseInfo[houseid][hInsideInt] = 3;
                 HouseInfo[houseid][hInsideVir] = houseid;

            }
            case 5:{//Mad dogg
                HouseInfo[houseid][hExitX] = 1267.663208;
                 HouseInfo[houseid][hExitY] = -781.323242;
                 HouseInfo[houseid][hExitZ] = 1091.906250;
                 HouseInfo[houseid][hInsideInt] = 5;
                 HouseInfo[houseid][hInsideVir] = houseid;
            }
        }
        HouseInfo[houseid][hPickup] = CreatePickup(1273, 1, p[0], p[1], p[2], 0);
        HouseInfo[houseid][hPrice] = price;
        format(str, sizeof(str), "{FFFFFF}{FF00FF}/buyhouse\n{FFFFFF}Owner: {FFFF00}None\n{FFFFFF}Price: {FFFF00}%i\n{FFFFFF}Press {008080}N {FFFFFF}to enter", HouseInfo[houseid][hPrice]);
        HouseInfo[houseid][hTextLabel] = Create3DTextLabel(str, 0xFFFFFF, p[0], p[1], p[2], 10.0, 0, 0);
        HouseInfo[houseid][hEnterX] = p[0];
        HouseInfo[houseid][hEnterY] = p[1];
        HouseInfo[houseid][hEnterZ] = p[2];
        HouseInfo[houseid][hOwned] = 0;
        HouseInfo[houseid][hOutsideVir] = GetPlayerVirtualWorld(playerid);
        HouseInfo[houseid][hOutsideInt] = GetPlayerInterior(playerid);
        new INI:File = INI_Open(PHousePath(houseid));
        INI_SetTag(File, "HousePos");
        INI_WriteFloat(File, "hEnterX", p[0]);
        INI_WriteFloat(File, "hEnterY", p[1]);
        INI_WriteFloat(File, "hEnterZ", p[2]);
        INI_WriteFloat(File, "hExitX", HouseInfo[houseid][hExitX]);
        INI_WriteFloat(File, "hExitY", HouseInfo[houseid][hExitY]);
        INI_WriteFloat(File, "hExitZ", HouseInfo[houseid][hExitZ]);
        INI_WriteInt(File, "hInsideInt", 0);
        INI_SetTag(File, "HouseInfo");
        INI_WriteInt(File, "hOwned", 0);
        INI_WriteString(File, "hOwner", "");
        INI_WriteString(File, "hTitle", "");
        INI_WriteInt(File, "hPrice", HouseInfo[houseid][hPrice]);
        INI_WriteInt(File, "hInsideVir", HouseInfo[houseid][hInsideVir]);
        INI_WriteInt(File, "hOutsideVir", HouseInfo[houseid][hOutsideVir]);
        INI_Close(File);
        SendClientMessage(playerid, GREEN, "[RCON]: {FFFFFF}House Created!");
        return 1;
    }
    else{
        ErrorMessage(playerid, 6);
    }
    return 1;
}
try this
Reply
#9

This worked, but when I create a new house, the previous one gets overwrite,
Reply
#10

How do you check if a player is inside the house ?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)