[HELP]: House exits getting mixed -
Eoussama - 19.10.2016
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=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][hInsideVir]);
}
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] = true;
SendClientMessage(playerid, ORANGE, "[SERVER]: {FFFFFF}Welcome inside your house!");
return 1;
}
else{
SendClientMessage(playerid, RED, "[SERVER]: {FFFFFF}This is not your house!");
}
}
}
else if(IsPlayerInRangeOfPoint(playerid, 2, HouseInfo[i][hExitX],HouseInfo[i][hExitY],HouseInfo[i][hExitZ])){
SetPlayerPos(playerid, HouseInfo[i][hEnterX], HouseInfo[i][hEnterY], HouseInfo[i][hEnterZ]);
SetPlayerInterior(playerid, HouseInfo[i][hOutsideInt]);
SetPlayerVirtualWorld(playerid, HouseInfo[i][hOutsideVir]);
PlayerInfo[playerid][InHouse] = false;
return 1;
}
}
Re: [HELP]: House exits getting mixed -
lackmail - 19.10.2016
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]);
}
Re: [HELP]: House exits getting mixed -
Eoussama - 19.10.2016
Thanks for replying, but it seems that one problem still happens
Re: [HELP]: House exits getting mixed -
lackmail - 19.10.2016
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
Re: [HELP]: House exits getting mixed -
Eoussama - 19.10.2016
Still the same brah, but thanks anyway
Re: [HELP]: House exits getting mixed -
Eoussama - 19.10.2016
For the record, this is the command I use to create houses,
PHP код:
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][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(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] = 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(playerid, GREEN, "[RCON]: {FFFFFF}House Created!");
return 1;
}
else{
ErrorMessage(playerid, 6);
}
return 1;
}
Re: [HELP]: House exits getting mixed -
Eoussama - 19.10.2016
Guys, anyone?
Re: [HELP]: House exits getting mixed -
lackmail - 19.10.2016
Код:
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
Re: [HELP]: House exits getting mixed -
Eoussama - 19.10.2016
This worked, but when I create a new house, the previous one gets overwrite,
Re: [HELP]: House exits getting mixed -
ThatFag - 19.10.2016
How do you check if a player is inside the house ?