[Tutorial] Creating a house system with checkpoints!
#1

Introduction
Hello y'all (:
I was wondering around the forums, and certainly it popped in to my head to make a house system tutorial.
Well it won't be an advanced one, but you can edit it to your style.
For this tutorial we will only use 1 interior for the houses.

Resources
Well for this tutorial, we will need:
  • SII (Credits to [Drug]Slick)
  • sscanf (Credits to Y_less)
  • Streamer (Credits to Incognito)
  • ZCMD (Credits to Zeex)
Basic scripting
Lets start of by creating the enum
P.S: If you don't know what enums are, I won't explain, try reading some tutorials, and searching ******(Click).
This enum will be to store all the house info instead of creating each and every var.
pawn Code:
#define MAX_HOUSES 100//Lets define that we can have the max limit of our houses to 100.
enum HouseInfo//Naming the enum
{  
Owner[24],//This will be where it will store the house owner name, in a 24 bit size array.
Owned,//To store if the house is owned or not.
Price,//How much the house will cost.
Float:XPos,//Float X position of the checkpoint
Float:YPos,//Self explanatory.
Float:ZPos,//Self explanatory.
VirtualWorld,//The checkpoints virtual world.
Text3D:HouseLabel//That label where it says "Owned Price..."
}
new HInfo[MAX_HOUSES][HouseInfo];//This is the var where we will read the house info.
Ok great.
Now lets create the normal vars to know which house id is the last.
pawn Code:
new HouseCount;//To check how many houses have we created.
new HouseEnter[MAX_HOUSES];//This will be where we will store the house entrance checkpoint
new HouseExit[MAX_HOUSES];//This will be where we will store the house exit checkpoint.
new PlayerInHouseID[MAX_PLAYERS];//To check what house id is the player in.
Ok compiled, no errors?! Great!

Scripting it

Now this will be a bit hard for me to explain, because I have done so many house system's that it's hard for me to explain :b
So lets create the /createhouse command.

pawn Code:
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(pl ayerid));//Creating the checkpoint and storing it in the HouseEnter value.
HouseExit[id] = CreateDynamicCP(443.9237,509.4609,1001.4195,1.5,Ge tPlayerVirtualWorld(playerid));//Creating the house exit checkpoint and storing it in the HouseExit value.
new file[40],labelstring[100];//Creating the "file", and the labelstring var.
format(file,sizeof(file),"FHouse/Houses/%i.ini",id);//Formating the var to the selected house directory.
INI_Open(file);//Opening the file with SII.
INI_WriteInt("Price",HousePrice);//Writing in the place "Price" the inputted "Price" value.
INI_WriteInt("Owned",0);//Setting to "Owned" = 0 in the ini file.
INI_WriteInt("VirtualWorld",GetPlayerVirtualWorld( playerid));//Writing "VirtualWorld" = GetPlayerVirtualWorld(..);
INI_WriteFloat("XPos",x);//Writing the players pos for the check point position.
INI_WriteFloat("YPos",y);//Self explanatory.
INI_WriteFloat("ZPos",z);//Self explanatory.
INI_WriteString("Owner","Nonusablenameforthishouse ");//Writing a string in "Owned" to "Nonusablenameforthishouse"
INI_Save();//Saving file with SII.
INI_Close();//Closing the file with SII.
format(labelstring,sizeof(labelstring),"Owned: No \nPrice: %i",HousePrice);
HInfo[id][HouseLabel] = Create3DTextLabel(labelstring,0xFF0000FF,x,y,z,25. 0,GetPlayerVirtualWorld(playerid));
HouseCount++;
return 1;
}
Making it buyable

Ok if you compiled the previous steps and no errors occured, continue the tutorial else try posting it and we may discuss about it.

Lets make the /buy command.
pawn Code:
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.
new file[60],pName[24],string[100];//Creating the necessary vars.
GetPlayerName(playerid,pName,sizeof(pName));//Retrieving the player's name.
format(HInfo[i][Owner],24,"%s",pName);//Setting the House Owner's var
format(file,sizeof(file),"FHouse/Houses/%i.ini",i);//Formating the house file
INI_Open(file);//Opening the house file
INI_WriteInt("Owned",1);//Setting in the ini file "Owned" to 1
INI_WriteString("Owner",pName);//Setting the "Owner" to the player's name.
INI_Save();//Saving the ini
INI_Close();//Closing the ini
format(string,sizeof(string),"Owned: Yes \nPrice: %i \nOwner: %s",HInfo[i][Price],pName);//Formating the string, so we can update the label of the house
Update3DTextLabelText(HInfo[i][HouseLabel],0xFF0000FF,string);//Updating the label with a red color
GivePlayerMoney(playerid,-HInfo[i][Price]);
return 1;
}
SendClientMessage(playerid,-1,"You aren't near a house!");
return 1;
}
Putting it up for sale again
For every house system there should be a sell command. (:
pawn Code:
CMD:sell(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(HInfo[i][Owned] == 0) return SendClientMessage(playerid,-1,"This house isn't owned");//Checking if the house is already owned.
new pName[24];
GetPlayerName(playerid,pName,sizeof(pName));//Retrieving the player's name.
if(HInfo[i][Owned] == 1 && strcmp(pName,HInfo[i][Owner]) != 0) return SendClientMessage(playerid,-1,"You aren't the owner of this house!");//Checking if the house is owned but the owners name is different
HInfo[i][Owned] = 0;//Setting the house owned var to 1.
new file[60],string[100];//Creating the necessary vars.
format(HInfo[i][Owner],24,"Nonusablenameforthishouse");//Setting the House Owner's var
format(file,sizeof(file),"FHouse/Houses/%i.ini",i);//Formating the house file
INI_Open(file);//Opening the house file
INI_WriteInt("Owned",0);//Setting in the ini file "Owned" to 0
INI_WriteString("Owner","Nonusablenameforthishouse ");//Setting the "Owner" to the "Nonusablenameforthishouse".
INI_Save();//Saving the ini
INI_Close();//Closing the ini
format(string,sizeof(string),"Owned: No \nPrice: %i \nOwner: None",HInfo[i][Price],pName);//Formating the string, so we can update the label of the house
Update3DTextLabelText(HInfo[i][HouseLabel],0xFF0000FF,string);//Updating the label with a red color
return 1;
}
SendClientMessage(playerid,-1,"You aren't near a house!");
return 1;
}
Checking if the player enters the checkpoint
Aswell, every house system needs to check if the player wants to enter his house (:
pawn Code:
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",GetPlay erInterior(playerid));//Storing, so later we can reset it back
SetPVarInt(playerid,"PlayerVirtualWorldHouse",GetP layerVirtualWorld(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,"Pl ayersInteriorHouse"));//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;
}
+ Dude I sucked in this tut so i deleted it, its bs.

-
Loading the houses
So now we have to make them load, so after a server restart, we can have them back!
pawn Code:
stock LoadHouses()//Creating the stock function
{
new file[60],houseowner[24];//creating the "file" var. And also creating the "houseowner" var so we can store it, when we are reading the house owner ini line.
for(new i = 0; i < MAX_HOUSES;i++)//Looping threw every house
{
format(file,sizeof(file),"FAdmin/Houses/%i.ini",i);//Opening the house file with the current selected number with "i".
if(!INI_Exist(file)) continue;//Checking if the ini house file exist, if not to stop there.
INI_Open(file);//Opening the house ini
HInfo[i][Price] = INI_ReadInt("Price");//Reading the price.
HInfo[i][Owned] = INI_ReadInt("Owned");//Reading if it's owned.
HInfo[i][XPos] = INI_ReadInt("XPos");//Reading the X float position.
HInfo[i][YPos] = INI_ReadInt("YPos");//Reading the Y float position.
HInfo[i][ZPos] = INI_ReadInt("ZPos");//Reading the Z float position.
HInfo[i][VirtualWorld] = INI_ReadInt("VirtualWorld");//Reading the virtual world.
INI_ReadString(houseowner,"Owner");//Reading the house owner.
format(HInfo[i][Owner],24,"%s",houseowner);//Formating the "Owner" house id value to the red one.
HouseEnter[i] = CreateDynamicCP(HInfo[i][XPos],HInfo[i][YPos],HInfo[i][ZPos],1.5,HInfo[i][VirtualWorld]);//Creating the checkpoint and storing it in the HouseEnter value.
HouseExit[i] = CreateDynamicCP(443.9237,509.4609,1001.4195,1.5,HI nfo[i][VirtualWorld]);//Creating the house exit checkpoint and storing it in the HouseExit value.
new labelstring[100];//Creating the labelstring var.
switch(HInfo[i][Owned])//Using the "switch" method to check if the house is owned
{
case 0:{format(labelstring,sizeof(labelstring),"Owned: No \nPrice: %i",HInfo[i][Price]);}//If it isnt...
case 1:{format(labelstring,sizeof(labelstring),"Owned: Yes \nPrice: %i \nOwner: %s",HInfo[i][Price],HInfo[i][Owner]);}//If it is...
}
HInfo[i][HouseLabel] = Create3DTextLabel(labelstring,0xFF0000FF,HInfo[i][XPos],HInfo[i][YPos],HInfo[i][ZPos],25.0,HInfo[i][VirtualWorld]);//Creating the label with the formatted string.
HouseCount++;//+ counting the HouseCount var.
INI_Close();//Closing the SII file.
}
return 1;
}
Reply


Messages In This Thread
Creating an house system with checkpoints! - by FireCat - 03.10.2011, 17:58
Re: Creating a house system with checkpoints! - by Wesley221 - 03.10.2011, 18:07
Re: Creating a house system with checkpoints! - by FireCat - 03.10.2011, 18:08
Re: Creating a house system with checkpoints! - by Wesley221 - 03.10.2011, 18:12
Re: Creating a house system with checkpoints! - by [MWR]Blood - 03.10.2011, 18:15
Re: Creating a house system with checkpoints! - by FireCat - 03.10.2011, 18:16
Re: Creating a house system with checkpoints! - by Kingunit - 03.10.2011, 19:19
Re: Creating a house system with checkpoints! - by FireCat - 03.10.2011, 19:20
Re: Creating a house system with checkpoints! - by Max_Coldheart - 03.10.2011, 19:20
Re: Creating a house system with checkpoints! - by FireCat - 03.10.2011, 19:31
Re: Creating a house system with checkpoints! - by Jafet_Macario - 03.10.2011, 19:34
Re: Creating a house system with checkpoints! - by FireCat - 03.10.2011, 19:56
Re: Creating a house system with checkpoints! - by Tigerkiller - 03.10.2011, 20:24
Re: Creating a house system with checkpoints! - by FireCat - 03.10.2011, 20:40
Re: Creating a house system with checkpoints! - by Surferdude - 04.10.2011, 00:31
Re: Creating a house system with checkpoints! - by [HiC]TheKiller - 04.10.2011, 05:41
Re: Creating a house system with checkpoints! - by FireCat - 04.10.2011, 06:56
Re: Creating a house system with checkpoints! - by Lorenc_ - 04.10.2011, 07:14
Re : Creating a house system with checkpoints! - by TheBest6 - 04.10.2011, 16:26
Respuesta: Creating a house system with checkpoints! - by [00]Luis - 04.10.2011, 20:02
Re: Respuesta: Creating a house system with checkpoints! - by FireCat - 04.10.2011, 22:44
Re: Creating a house system with checkpoints! - by Stefans94 - 05.10.2011, 07:36
Re: Creating a house system with checkpoints! - by FireCat - 05.10.2011, 10:33
Re: Creating a house system with checkpoints! - by Zonoya - 07.10.2011, 19:07
Re: Creating a house system with checkpoints! - by FireCat - 07.10.2011, 19:24
Re: Creating a house system with checkpoints! - by =WoR=G4M3Ov3r - 07.10.2011, 19:53
Re: Creating a house system with checkpoints! - by Zonoya - 07.10.2011, 21:39
Re: Creating a house system with checkpoints! - by FireCat - 07.10.2011, 22:10
Re: Creating a house system with checkpoints! - by Zonoya - 07.10.2011, 22:12
Re: Creating a house system with checkpoints! - by gamer931215 - 07.10.2011, 22:16
Re: Creating a house system with checkpoints! - by FireCat - 08.10.2011, 08:50
Re: Creating a house system with checkpoints! - by HyperZ - 08.10.2011, 11:30
Re: Creating a house system with checkpoints! - by FireCat - 08.10.2011, 20:37
Re: Creating a house system with checkpoints! - by MusicBeast - 11.10.2011, 20:51
Re: Creating a house system with checkpoints! - by FireCat - 11.10.2011, 21:03
Re: Creating a house system with checkpoints! - by Exclusive! - 04.12.2011, 18:16
Re: Creating a house system with checkpoints! - by Dziugsas - 09.05.2012, 11:57
Re: Creating a house system with checkpoints! - by thimo - 09.05.2012, 14:08
Re: Creating a house system with checkpoints! - by Ballu Miaa - 14.05.2012, 01:37
Re: Creating a house system with checkpoints! - by gtakillerIV - 17.08.2012, 18:52
Re: Creating a house system with checkpoints! - by Guitar - 24.08.2012, 10:40
Re: Creating a house system with checkpoints! - by GhostyXL - 25.08.2012, 13:00
Re: Creating a house system with checkpoints! - by DeadLy™ - 25.08.2012, 14:41
Re: Creating a house system with checkpoints! - by Mariooo - 14.09.2012, 09:55
Re: Creating a house system with checkpoints! - by HuSs3n - 14.09.2012, 14:07
Respuesta: Creating a house system with checkpoints! - by Sarzoc - 12.11.2012, 13:04
Re: Creating a house system with checkpoints! - by MatZZPL - 16.11.2012, 16:10
Re: Creating a house system with checkpoints! - by SiraBots - 18.11.2012, 23:47
Re: Creating a house system with checkpoints! - by [HK]Ryder[AN] - 19.11.2012, 11:50
Re: Creating a house system with checkpoints! - by MoDee - 19.11.2012, 11:57
Re: Creating a house system with checkpoints! - by Buzzbomb - 20.12.2012, 20:00
Re: Creating a house system with checkpoints! - by Dark Killer - 20.01.2013, 10:19
Re: Creating a house system with checkpoints! - by karam jaber - 22.01.2013, 15:08
Re: Creating a house system with checkpoints! - by _Mohit_ - 09.03.2013, 11:24
Re: Creating a house system with checkpoints! - by burnfire - 17.04.2013, 13:09
Re: Creating a house system with checkpoints! - by michaelcosyns - 17.04.2013, 17:02
Re: Creating a house system with checkpoints! - by michaelcosyns - 18.04.2013, 19:12
Re: Creating a house system with checkpoints! - by Syntax - 24.04.2013, 19:38
Re: Creating a house system with checkpoints! - by Excelize - 11.05.2013, 07:45
Re: Creating a house system with checkpoints! - by Syntax - 11.05.2013, 07:47
Re: Creating a house system with checkpoints! - by Extasy4 - 07.08.2013, 12:18
Re: Creating a house system with checkpoints! - by qazwsx - 08.08.2013, 11:06
Re: Creating a house system with checkpoints! - by AnonScripter - 27.09.2013, 20:51
Re: Creating a house system with checkpoints! - by jdog105 - 29.10.2013, 02:35
Re: Creating a house system with checkpoints! - by Youssef214 - 24.01.2014, 14:07
Re: Creating a house system with checkpoints! - by Equuuuin0X - 01.02.2014, 06:59
Re: Creating a house system with checkpoints! - by JohnD123 - 18.04.2014, 02:03
Re: Creating a house system with checkpoints! - by Nikhiltej - 14.11.2014, 06:06
Re: Creating a house system with checkpoints! - by [TMS]Legena - 29.11.2014, 21:07
Re: Creating a house system with checkpoints! - by Jihanz - 13.01.2015, 12:20
Re: Creating a house system with checkpoints! - by GJ123 - 21.03.2015, 13:51
Re: Creating a house system with checkpoints! - by AndreiWow - 05.09.2015, 15:39
Re: Creating a house system with checkpoints! - by mrkingz - 08.10.2015, 14:28

Forum Jump:


Users browsing this thread: 5 Guest(s)