15.05.2012, 19:49
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
Thanks.
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.