House System Help - Help Is Appreciated
#1

Hello!

Well, As some of you know me and some of you dont, I have decided to try and solve things on my own, I have been trying and so far it has been going well, Apart from this house system.... I have been having trouble with it for ages, Pretty much i have a couple of problems, Well not problems just what i really need to add, I was hoping i could get some help.

Pretty much when i create a house and buy it other people cant enter it, how would i be able to make it so they can enter it.

When i create a house and then create another one the first one goes for some reason, how would i stop this


Also i am kind of confused about the virtual world of the houses, how would i make it so players cant find each other if they have the same house interior


pawn Код:
CMD:createhouse(playerid,params[])
{
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,-1,"You aren't an admin!");//Check if the player is currently rcon logged in.
    new HousePrice,id = HouseCount;//Creating the house price for the selected value in the command, and the last house id created.
    if(sscanf(params,"i",HousePrice)) return SendClientMessage(playerid,-1,"USAGE: /createhouse <price>");//Checking if the player uses the correct syntax. The parameter "i" in sscanf means integer, also could be used as "d".
    new Float:x,Float:y,Float:z;//Creating the floats, to store the player's position.
    GetPlayerPos(playerid,x,y,z);//Getting the player's position and storing it
    HInfo[id][Price] = HousePrice;//Setting the house price to the selected one.
    HInfo[id][Owned] = 0;//Setting the house id owned = 0
    HInfo[id][XPos] = x;//Storing the XPos value to the player's x.
    HInfo[id][YPos] = y;//Storing the YPos value to the player's y.
    HInfo[id][ZPos] = z;//Storing the ZPos value to the player's z.
    HInfo[id][VirtualWorld] = GetPlayerVirtualWorld(playerid);
    format(HInfo[id][Owner],24,"Nonusablenameforthishouse");//Formating the "Owner" house id value to "Nonusablenameforthishouse".
    SendClientMessage(playerid,-1,"House created");
    HouseEnter[id]  = CreateDynamicCP(x,y,z,1.5,GetPlayerVirtualWorld(playerid));//Creating the checkpoint and storing it in the HouseEnter value.
    HouseExit[id] = CreateDynamicCP(443.9237,509.4609,1001.4195,1.5,GetPlayerVirtualWorld(playerid));//Creating the house exit checkpoint and storing it in the HouseExit value.
    new INI:File = INI_Open(UserPath(playerid));
    INI_SetTag(File,"data");    
    INI_WriteInt(File, "Price",HousePrice);//Writing in the place "Price" the inputted "Price" value.
    INI_WriteInt(File, "Owned",0);//Setting to "Owned" = 0 in the ini file.
    INI_WriteInt(File, "VirtualWorld",GetPlayerVirtualWorld(playerid));//Writing "VirtualWorld" = GetPlayerVirtualWorld(..);
    INI_WriteFloat(File, "XPos",x);//Writing the players pos for the check point position.
    INI_WriteFloat(File, "YPos",y);//Self explanatory.
    INI_WriteFloat(File, "ZPos",z);//Self explanatory.
    INI_WriteString(File, "Owner","Nonusablenameforthishouse");//Writing a string in "Owned" to "Nonusablenameforthishouse"
    INI_Close(File);//Closing the file with SII.
    HouseCount++;
    return 1;
}

CMD:buy(playerid,params[])
{
    for(new i = 0; i < MAX_HOUSES;i++)//Loop threw all houses.
    {
        if(!IsPlayerInRangeOfPoint(playerid,8.0,HInfo[i][XPos],HInfo[i][YPos],HInfo[i][ZPos])) continue;//Check if the player is near a house checkpoint
        if(GetPlayerMoney(playerid) < HInfo[i][Price]) return SendClientMessage(playerid,-1,"You don't have enough money");//Checking the players money, to see if he has enough to buy the house.
        if(HInfo[i][Owned] == 1) return SendClientMessage(playerid,-1,"This house is already owned");//Checking if the house is already owned.
        HInfo[i][Owned] = 1;//Setting the house owned var to 1.
        GetPlayerName(playerid,pname,sizeof(pname));//Retrieving the player's name.
        format(HInfo[i][Owner],24,"%s",pname);//Setting the House Owner's var
        new INI:File = INI_Open(UserPath(playerid));
        INI_SetTag(File, "House");
        INI_WriteInt(File, "Owned",1);//Setting in the ini file "Owned" to 1
        INI_WriteString(File, "Owner",pname);//Setting the "Owner" to the player's name.
        INI_Close(File);//Closing the ini
        return 1;
    }
    SendClientMessage(playerid,-1,"You aren't near a house!");
    return 1;
}

pawn Код:
public OnPlayerEnterDynamicCP(playerid,checkpointid)
{
    for(new i = 0; i < MAX_HOUSES;i++)//Looping threw all houses.
    {
        if(checkpointid == HouseEnter[i])//Checking if the checkpoint id corresponds to one of the house interiors
        {
            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
                SetPlayerInterior(playerid,12);//Setting the players interior.
                SetPlayerPos(playerid,446.7281,507.0475,1001.4195);//Setting the players position.
                SetPlayerVirtualWorld(playerid,HInfo[i][VirtualWorld]);//Preventing players from different houses, finding each other.
                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(checkpointid == HouseExit[i])//Checking if the checkpointid is an House exit
        {
            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;
}

Thanks.
Reply
#2

For the virtual world:

Well you would have to create a folder for properties and making it save on the number.ini
for example if you would create a house , the first one would be saved on number 1.ini with the VirWorld = 1
the second house you would create would be saved on number 2.ini so the VirtualWoarld would be = 2 etc... that way players wouldn't find each other.
What you are making there right here HInfo[id][VirtualWorld] = GetPlayerVirtualWorld(playerid);. is that if the player ID is for example 10 then it saves it as virtual world Id 10, and when someone enters his house if the house was created by someone with the same (playerID) that you had on creating your house he goes to virtual world ID 10 and you will too when you enter yours.

I am telling you the idea, as i am a begginer i cant script it well without looking on all the pages at the same time,but i would suggest you to check the Ravens Roleplay gamemode wich has a working house system (i am not sure if i am allowed to use a gamemode as a reference but well, i just want to help)

By the way good luck with that
Reply
#3

Quote:
Originally Posted by flrp
Посмотреть сообщение
For the virtual world:

Well you would have to create a folder for properties and making it save on the number.ini
for example if you would create a house , the first one would be saved on number 1.ini with the VirWorld = 1
the second house you would create would be saved on number 2.ini so the VirtualWoarld would be = 2 etc... that way players wouldn't find each other.
What you are making there right here HInfo[id][VirtualWorld] = GetPlayerVirtualWorld(playerid);. is that if the player ID is for example 10 then it saves it as virtual world Id 10, and when someone enters his house if the house was created by someone with the same (playerID) that you had on creating your house he goes to virtual world ID 10 and you will too when you enter yours.

I am telling you the idea, as i am a begginer i cant script it well without looking on all the pages at the same time,but i would suggest you to check the Ravens Roleplay gamemode wich has a working house system (i am not sure if i am allowed to use a gamemode as a reference but well, i just want to help)

By the way good luck with that
Hmmm. Thank You for your reply.

Has anyone else got any help i could learn off please


Thank You
Reply
#4

Still looking for help


Thank You
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)