[Tutorial] Simple Easy House
#1

I learnt how to use these stuff and i applied each piece info i knew to create this house info
Needed foreach,sscanf2,streamer,zcmd
Simple
Everythings is pratically self explain if you reach care fully you will know what to do and have 0 errors like i did if you did not follow 100% then you will have errors
Код:
#include <a_samp> //this is for the main publics we use
#include <streamer> //Streamer for objects
#include <sscanf2> //sscanf for cmds
#include <zcmd> //zcmd for creating cmds
#include <foreach>//for cmds

#define COLOR_PURPLE 0x8A2BE2AA //colour purple..This iz needed to send player(s) message in that particular colour

#define MAX_HOUSES 1//define max amount houses you want to have
//add b4 gamemodeint
enum pInfo
{
 pHouseKey, // playerhouse key
 pCash//Player Money

}
new PlayerInfo[MAX_PLAYERS][pInfo];//where are we loading the info from
//add b4 gaemodeint
enum houseInfo
{
	hPrice, //price for house
	hStatus, //lock or unlock house
	hOwner[32], //owner name of the house
	Float:hX,//house pickup position X
	Float:hY,//house pickup position Y
	Float:hZ,//house pickup position Z
	hPickup, //house pickup iz
	Text3D:hText//the textdraw the house iz going to have
}
new HouseInfo[MAX_HOUSES][houseInfo];

//Add @ the bottom of the script
stock LoadHouses()
{
	new tstar[21][32];//for the file
	new string[256];//string
	new File:file = fopen("houses.cfg", io_read);//check the file for the information
	if(file)//for the files
	{
	    new idx = 1;//ids
		while(idx < MAX_HOUSES)//while iz 2 check #define MAX_HOUSES to max sure the house ids arent over the limit
		{
		    fread(file, string);//reading the files
		    split(string, tstar, '|');//split to get file info
		    HouseInfo[idx][hPrice] = strval(tstar[1]);//getting house price
		    HouseInfo[idx][hStatus] = strval(tstar[2]);//getting house name
		    format(HouseInfo[idx][hOwner], 32, "%s", tstar[3]);
		    HouseInfo[idx][hX] = floatstr(tstar[4]);//floatin pos x
		    HouseInfo[idx][hY] = floatstr(tstar[5]);//floatin pos y
		    HouseInfo[idx][hZ] = floatstr(tstar[6]);//floatin pos z
			{//creating pickup and labeling it, i use the id system so it would be easier to edit
			    HouseInfo[idx][hPickup] = CreateDynamicPickup(1273, 1, HouseInfo[idx][hX], HouseInfo[idx][hY], HouseInfo[idx][hZ], 0);
                if(!strcmp("trapstar2020", HouseInfo[idx][hOwner])) format(string, sizeof(string), "ID: %d\nOwner: %s\nStatus: For Sale\nPrice: $%d", idx, HouseInfo[idx][hOwner], HouseInfo[idx][hPrice]);
				else format(string, sizeof(string), "ID: %d\nOwner: %s\nStatus: %s", idx,  HouseInfo[idx][hOwner], hlock(idx));
				HouseInfo[idx][hText] = CreateDynamic3DTextLabel(string, COLOR_PURPLE, HouseInfo[idx][hX], HouseInfo[idx][hY], HouseInfo[idx][hZ]+0.3, 15);

			}
			idx++;//house ids
	    }
	}
	print("trapstar2020 loaded you houses.");
	return 1;
}

stock SaveHouses()
{
	new idx = 1, File:file;
	new string[256];
	while(idx < MAX_HOUSES)
	{
	    format(string, sizeof(string), "%d|%d|%s|%f|%f|%f\r\n",//%d iz use for info %s iz used for player names && %f iz for floating positions
	    HouseInfo[idx][hPrice],//price
	    HouseInfo[idx][hStatus],//locks
	    HouseInfo[idx][hOwner],//owner name
	    HouseInfo[idx][hX],//pos X
	    HouseInfo[idx][hY],//pos Y
	    HouseInfo[idx][hZ]//pos Z
		);
	    if(idx == 1)
	    {
	        file = fopen("houses.cfg", io_write);//creates files
	    }
	    else
	    {
	    	file = fopen("houses.cfg", io_append);
	    }
		fwrite(file, string);//updates info and
		fclose(file);//then closes
		idx++;//writes house ids
	}
	print("Houses saved successfully.");
}
//creating the file
stock fcreate(filename[])
{
	if (fexist(filename)) return false;//search to see if file exsist
	new File:fhnd;
	fhnd=fopen(filename,io_write);//open file
	if (fhnd) {//if file found
		fclose(fhnd);//close it
		return true;//end if itz true
	}
	return false;//create file if itz false
}
//split
stock split(const strsrc[], strdest[][], delimiter)//used for reading files
{
    new i, li;
    new aNum;
    new len;
    while(i <= strlen(strsrc))
    {
        if(strsrc[i] == delimiter || i == strlen(strsrc))
        {
            len = strmid(strdest[aNum], strsrc, li, i, 128);
            strdest[aNum][len] = 0;
            li = i+1;
            aNum++;
        }
        i++;
    }
    return 1;
}
//creating house lock
stock hlock(hid)
{
	new string[16];//string we going to use
	if(!HouseInfo[hid][hStatus]) format(string, sizeof(string), "Closed");
    else if(HouseInfo[hid][hStatus]) format(string, sizeof(string), "Open");
	return string;
}
//saving and loading houses
public OnGameModeInit()
{
	LoadHouses();//load houses when GM Start
	return 1;
}

public OnGameModeExit()
{
    SaveHouses();//save house info when GM closed/Restarts(GMX)
	return 1;
}
//CMD-TIME(ADMINS) /creating a house,deleting the houses and going to the house
CMD:createhouse(playerid, params[])//cmd /createhouse
{
	new string[128];//new for the string we are going to create
	if(IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_PURPLE, "You are not an authorized to use this command.");//if the player Isnt Rcon admin he cannot createhouse
	for(new idx=1; idx<MAX_HOUSES; idx++)//set house id +1 everyone a house iz create
	{
 		    new Float:X, Float:Y, Float:Z;//float the positions
		    GetPlayerPos(playerid, X, Y, Z);//Search for player X Y Z position
		    // Making House
		    HouseInfo[idx][hPrice] = 1; //price the house would be when created
		    HouseInfo[idx][hStatus] = 0; //the lock status of the houses
		    format(HouseInfo[idx][hOwner], 32, "Trapstar2020 House");//the name the will appear when house iz created
		    HouseInfo[idx][hX] = X;//position X of house creation
		    HouseInfo[idx][hY] = Y;//position Y of house creation
		    HouseInfo[idx][hZ] = Z;//position Z of house creation
		    HouseInfo[idx][hPickup] = CreateDynamicPickup(1273, 1, HouseInfo[idx][hX], HouseInfo[idx][hY], HouseInfo[idx][hZ], 0);//create house ticket in the player XYZ postion
            format(string, sizeof(string), "ID: %d\nOwner: %s\nStatus: For Sale\nPrice: $%d", HouseInfo[idx][hOwner], HouseInfo[idx][hPrice]);//house going to shown on houseticket
			HouseInfo[idx][hText] = CreateDynamic3DTextLabel(string, COLOR_PURPLE, HouseInfo[idx][hX], HouseInfo[idx][hY], HouseInfo[idx][hZ]+0.3, 15);//showing the info
			idx = MAX_HOUSES;
	}
	return 1;
}

CMD:deletehouse(playerid, params[])
{
	new id, string[128];//the house id n the string
	if(IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_PURPLE, "You are not an authorized to use this command.");//if player not rcon admin
	if(sscanf(params, "i", id)) return SendClientMessage(playerid, COLOR_PURPLE, "USAGE: /deletehouse [houseid]");//if player didnt input right contanent
    foreach(Player, i)//
		{
		    PlayerInfo[i][pHouseKey] = 0;//checks for online if he ownes house
		    format(string, sizeof(string), " Admin %s has deleted your house.", playername(playerid));//tells player his house his delete
			SendClientMessage(i, COLOR_PURPLE, string);//sends the player the above string
		}
	if(!strcmp("Trapstar2020 House", HouseInfo[id][hOwner]))//if trapstar2020 house send the below strings
	{
		format(string, sizeof(string), ": %s has deleted house ID %d.", playername(playerid), id);//if no one owns it send this message
	}
	else
	{
	    format(string, sizeof(string), "%s has deleted %s's house. (ID %d)", playername(playerid), HouseInfo[id][hOwner], id);//string saying admin & who house iz delete n the id
	}
	//the following will delete all house info
    HouseInfo[id][hPrice] = 0;//sets house info price 2 0
    HouseInfo[id][hStatus] = 0;//sets house info lock 2 0
    format(HouseInfo[id][hOwner], 32, "");//delete house name
    HouseInfo[id][hX] = 0;//sets X position 2 0
    HouseInfo[id][hY] = 0;//sets Y position 2 0
    HouseInfo[id][hZ] = 0;//sets Z position 2 0
    DestroyDynamicPickup(HouseInfo[id][hPickup]);//delete pick
    DestroyDynamic3DTextLabel(HouseInfo[id][hText]);//no more house text
	return 1;
}

CMD:gotohouse(playerid, params[])
{
    new idx, string[128];//house ids n string for messages
	if(IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_PURPLE, "You are not an authorized to use this command.");//if player isnt rcon admin
	if(sscanf(params, "i", idx)) return SendClientMessage(playerid, COLOR_PURPLE, "USAGE: /gotohouse [houseid]");//if player didnt imput text right
	SetPlayerVirtualWorld(playerid, 0);//setiing player virtual world to go to
	SetPlayerInterior(playerid, 0);//setting player interior world to go to
	SetPlayerPos(playerid, HouseInfo[idx][hX], HouseInfo[idx][hY], HouseInfo[idx][hZ]);//setting player XYZ psotion to go to
	format(string, sizeof(string), " You have teleported to house ID %d.", idx);//string for telling player hes there
	SendClientMessage(playerid, COLOR_PURPLE, string);//sending the string
	return 1;
}

stock playername(playerid)//getting player name
{
    new name[MAX_PLAYER_NAME];//what to call the search (new name0
    GetPlayerName(playerid,name,sizeof(name));//searches for player name
    for(new i = 0; i < MAX_PLAYER_NAME; i++)//search all players for the name
    {
        if(name[i] == '_') name[i] = ' ';//get the player name
    }
    return name;//closes once name gotton
}

CMD:buyhouse(playerid, params[])//cmd
{
	new string[128], done;//if itz done and string
	for(new idx=1; idx<MAX_HOUSES; idx++)//house ids
	{
	    if(IsPlayerInRangeOfPoint(playerid, 2, HouseInfo[idx][hX], HouseInfo[idx][hY], HouseInfo[idx][hZ]))//once player in range of house XYZ
	    {
			if(!strcmp("Trapstar2020 House", HouseInfo[idx][hOwner], false))//if the owner of this house has this name it is not owned
			{
			    if(PlayerInfo[playerid][pCash] < HouseInfo[idx][hPrice]) return SendClientMessage(playerid, COLOR_PURPLE, "You don't have enough money to buy this house.");//if player dont have enough money
				GivePlayerMoney(playerid, -HouseInfo[idx][hPrice]);//give player -houseprice money
                PlayerInfo[playerid][pHouseKey] = idx;//writes that player has house key
			    format(HouseInfo[idx][hOwner], 32, "%s", playername(playerid));//gets player name and change owner file to playername
			    format(string, sizeof(string), "ID: %d\nOwner: %s\nStatus: %s", idx, HouseInfo[idx][hOwner], hlock(idx));//sets house info
				UpdateDynamic3DTextLabelText(HouseInfo[idx][hText], COLOR_PURPLE, string);//writes the abouse tex
				SendClientMessage(playerid, COLOR_PURPLE, " You have successfully bought a house.");//sends message to player that the bought a house
				idx = MAX_HOUSES;
				done = 1;
			}
			if(idx == MAX_HOUSES-1 && !done)
			{
			    SendClientMessage(playerid, COLOR_PURPLE, "This house is owned by someone else.");//if house has a different name then a player ownes it
			}
	    }
	    if(idx == MAX_HOUSES-1 && !done)
	    {
	        SendClientMessage(playerid, COLOR_PURPLE, "You are not near a buyable house.");//player not in range of the house
	    }
	}
	return 1;
}

CMD:hlock(playerid, params[])//cmd
{
	new string[128], idx, lockdone;//string for text,houseid,lock
	if(PlayerInfo[playerid][pHouseKey])//checks for phousekey
	{
	    idx = PlayerInfo[playerid][pHouseKey];//phousekey and
	    if(IsPlayerInRangeOfPoint(playerid, 2, HouseInfo[idx][hX], HouseInfo[idx][hY], HouseInfo[idx][hZ]))//if player in range of house XYZ position
	    {
	        if(!HouseInfo[PlayerInfo[playerid][pHouseKey]][hStatus])//checks house stats
	        {
		        HouseInfo[PlayerInfo[playerid][pHouseKey]][hStatus] = 1;//sets the locks stats to 1 check stock hlock to see
				format(string, sizeof(string), "ID: %d\nOwner: %s\nStatus: %s", idx, HouseInfo[idx][hOwner], playername(idx));//changes the text
	            UpdateDynamic3DTextLabelText(HouseInfo[PlayerInfo[playerid][pHouseKey]][hText], COLOR_PURPLE, string);//applies the change
				GameTextForPlayer(playerid, "~g~House Unlocked", 3500, 3);//sends a message to player the his house iz unlock in the colour green 3.5seconds
			}
			else if(HouseInfo[PlayerInfo[playerid][pHouseKey]][hStatus])//checks house status once again
	        {
		        HouseInfo[PlayerInfo[playerid][pHouseKey]][hStatus] = 0;//changes the lock stats check stock hlock for it
				format(string, sizeof(string), "ID: %d\nOwner: %s\nStatus: %s", idx, HouseInfo[idx][hOwner], playername(idx));//changes the pick info
	            UpdateDynamic3DTextLabelText(HouseInfo[PlayerInfo[playerid][pHouseKey]][hText], COLOR_PURPLE, string);//applies the change
				GameTextForPlayer(playerid, "~r~House Locked", 3500, 3);//marks lock in the colour red for 3.5secs
			}
			lockdone = 1;//itz lock
		}
	}
    if(!lockdone)//player not near house to lock it
	{
	    SendClientMessage(playerid, COLOR_PURPLE, "You are not near something you can lock/unlock.");//sends the player a message saying so
	}
	return 1;//return true/false 1 = true
}

CMD:sellhousetomarket(playerid, params[])//
{
	new string[128], done;//string and if sell 2 market iz done
	if(!PlayerInfo[playerid][pHouseKey] ) return SendClientMessage(playerid, COLOR_PURPLE, "You don't own a house.");//if playerinfo player doesnt have house key
	if(sscanf(params, "s[8]", params)) return SendClientMessage(playerid, COLOR_PURPLE, "USAGE: /sellhousetomarket [confirm]");//house to succesfull sell your to the market
	if(!strcmp(params, "confirm", true))//apply the salee
	{
	    new idx = PlayerInfo[playerid][pHouseKey];//checks player for house key
	    if(IsPlayerInRangeOfPoint(playerid, 2, HouseInfo[PlayerInfo[playerid][pHouseKey]][hX], HouseInfo[PlayerInfo[playerid][pHouseKey]][hY], HouseInfo[PlayerInfo[playerid][pHouseKey]][hZ]))//checks to see if player is in point of house positions
	    {
	        GivePlayerMoney(playerid, (75*HouseInfo[PlayerInfo[playerid][pHouseKey]][hPrice])/100);//gives player 75% of his money back
			HouseInfo[PlayerInfo[playerid][pHouseKey]][hStatus] = 0;//sets player house key 2 0
		    format(HouseInfo[PlayerInfo[playerid][pHouseKey]][hOwner], 32, "Trapstar2020 House");//change the house name back to the non house owner name
		    format(string, sizeof(string), "ID: %d\nOwner: %s\nStatus: For Sale\nPrice: $%d", idx, HouseInfo[idx][hOwner], HouseInfo[idx][hPrice]);//changing text info
		    UpdateDynamic3DTextLabelText(HouseInfo[PlayerInfo[playerid][pHouseKey]][hText], COLOR_PURPLE, string);//applying text info
		    PlayerInfo[playerid][pHouseKey] = 0;
		    SendClientMessage(playerid, COLOR_PURPLE, " You have successfully sold your house to The State. (75 percent of the original price was paid back)");//telling player how much they for 4 the house
			done = 1;//sale done
	    }
	    if(!done)//if itz not done itz gonna send a message
	    {
	        SendClientMessage(playerid, COLOR_PURPLE, "You are not near your house.");//if it isnt dont message sent
	        return 1;
	    }
    }
	return 1;
}
/enter & /exit
Код:
CMD:enter(playerid, params[])//cmd
{
	for(new idx=1; idx<MAX_HOUSES; idx++) //house and there ids
	{
		if(IsPlayerInRangeOfPoint(playerid, 2, HouseInfo[idx][hX], HouseInfo[idx][hY], HouseInfo[idx][hZ]))//is player in range of door
	    {
		    if(!HouseInfo[idx][hStatus] && PlayerInfo[playerid][pHouseKey] != idx) return SendClientMessage(playerid, COLOR_PURPLE, "This house is locked.");//if house iz locked
	        SetPlayerVirtualWorld(playerid, idx+500);//set the person world 500+ids=id
			{
				SetPlayerPos(playerid, X,Y,Z);//input the XYZ you want
		        SetPlayerFacingAngle(playerid, Angle);//angle you want
		        SetCameraBehindPlayer(playerid);//sets camera behind player
		        SetPlayerInterior(playerid, interior);//input interior you want <<<^^^^^ if the following inputs were inputed it will not compile
			}
	   }
	   return 1;
}


CMD:exit(playerid, params[])//cmd
{
	new fin;//house
	if(IsPlayerInRangeOfPoint(playerid, range, X,Y,Z)//input player xyz n range
	{
	    new idx;//house ids
		idx = GetPlayerVirtualWorld(playerid)-500;//set back the player virtual world 2 50less
		if(!fin && idx < MAX_HOUSES && HouseInfo[idx]])//if the player is in house
		{
	        SetPlayerPos(playerid, HouseInfo[idx][hX], HouseInfo[idx][hY], HouseInfo[idx][hZ]);//sets player in the house XYZ position/where house iz created
	        SetPlayerInterior(playerid, 0);//sets player int
	        SetPlayerVirtualWorld(playerid, 0);//sets player virtual world
	        fin = 1;//house
        }
	}
	return 1;//return value = true
}
Reply


Messages In This Thread
Simple Easy House - by trapstar2020 - 11.09.2012, 08:16
Re: Simple Easy House - by Infinity - 11.09.2012, 08:29
Re: Simple Easy House - by trapstar2020 - 11.09.2012, 08:32
Re: Simple Easy House - by Cjgogo - 11.09.2012, 08:35
Re: Simple Easy House - by trapstar2020 - 11.09.2012, 08:38
Re: Simple Easy House - by Glint - 11.09.2012, 08:47
Re: Simple Easy House - by trapstar2020 - 11.09.2012, 08:51
Re: Simple Easy House - by Cjgogo - 11.09.2012, 08:55
Re: Simple Easy House - by trapstar2020 - 11.09.2012, 09:26
Re: Simple Easy House - by DaniceMcHarley - 19.09.2014, 10:38

Forum Jump:


Users browsing this thread: 3 Guest(s)