/buyhouse (Y_INI)
#1

Hello. I started making a house system for my gamemode i'm developing and ofcourse I once again massively failed at it Here's what I have got together so far with help :P
Код:
#define HOUSE_PATH "/Houses/%d.ini"

enum hInfo
{
	Float:hx,
	Float:hy,
	Float:hz,
	Price,
	Level,
	Owner
}
new HouseInfo[MAX_HOUSES][hInfo],House[MAX_HOUSES];

under ongamemodeinit..
LoadHouses();

stock HousePath(cameraid)
{
    new string[40];
    format(string,sizeof(string), HOUSE_PATH, cameraid);
    return string;
}

stock GetNextHouseID()
{
    for(new i = 0; i < MAX_HOUSES; i++)
    {
        if(fexist(HousePath(i))) continue;
        return i;
    }
    return -1;
}


stock LoadHouses()
{
    new file[40];
    for(new i = 0; i < MAX_HOUSES; i++)
    {
        format(file, sizeof(file), HOUSE_PATH, i);
        if(fexist(file))
        {
            new string[128];
            INI_ParseFile(file, "LoadHouseData_%s", .bExtra = true, .extra = i);
            House[i] = CreateDynamicPickup(1272, 1, HouseInfo[i][hx], HouseInfo[i][hy], HouseInfo[i][hz]-0.5, -1, -1, -1, 50.0); //line 1458
 			format(string,sizeof(string),"{00FF00}Buy this house using /buyhouse\nHouse Price = %i\nHouse Level = %i\nHouse ID: %d",HouseInfo[i][Price],HouseInfo[i][Level],i);
			HouseLabel[i] = CreateDynamic3DTextLabel(string, 0xFFFFFFFFFF, HouseInfo[i][hx], HouseInfo[i][hy], HouseInfo[i][hz]+0.3,50.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,0,-1,-1,-1,100.0);
        }
    }
    return 1;
}
forward LoadHouseData_Main(houseid, name[], value[]);
public LoadHouseData_Main(houseid, name[], value[])
{
    new INI:File = INI_Open(HousePath(houseid));
    INI_SetTag(File, "Main");
    INI_Float("X", HouseInfo[houseid][hx]);
    INI_Float("Y", HouseInfo[houseid][hy]);
    INI_Float("Z", HouseInfo[houseid][hz]);
	INI_Int("Price", HouseInfo[houseid][Price]);
	INI_Int("Level", HouseInfo[houseid][Level]);
	INI_Int("Owner", HouseInfo[houseid][Owner]);
	INI_Close(File);
    return 1;
}

CMD:createhouse(playerid,params[])
{
    if(PlayerInfo[playerid][pLevel] < 3) return error
    new price,level;
    if(sscanf(params,"ii",price,level)) return SendClientMessage(playerid, COLOR_RED,"USAGE: /createhouse <price> <level>");
    if(level < 1 || level > 10) return SendClientMessage(playerid, COLOR_RED,"Minimum house level: 1\nMaximum house level: 10");
    if(price < 100000) return SendClientMessage(playerid, COLOR_RED,"Too cheap! Please choose a higher value!");
    new Float:x,Float:y,Float:z,string[128];
    GetPlayerPos(playerid,x,y,z); //line 1447
    new nextid = GetNextHouseID();
    if(nextid == -1) return SendClientMessage(playerid, COLOR_RED, "You have reached the maximum amount of houses, please delete one before continuing.");
    new INI:File = INI_Open(HousePath(nextid)); //line 1450
    INI_SetTag(File, "Main");
    INI_WriteFloat(File, "X", x);
    INI_WriteFloat(File, "Y", y);
    INI_WriteFloat(File, "Z", z);
    INI_WriteInt(File, "Price", price);
    INI_WriteInt(File, "Level", level);
   	INI_WriteInt(File, "Owner", 0);
    INI_Close(File);
    HouseInfo[nextid][hx] = x;
    HouseInfo[nextid][hy] = y;
    HouseInfo[nextid][hz] = z;
    HouseInfo[nextid][Price] = price;
    HouseInfo[nextid][Level] = level;
    HouseInfo[nextid][Owner] = 0;
    House[nextid] = CreateDynamicPickup(1272, 1, x, y, z-0.5, -1, -1, -1, 50.0); //line 1458
	format(string,sizeof(string),"{00FF00}Buy this house using /buyhouse\nHouse Price = %i\nHouse Level = %i\nHouse ID: %d",HouseInfo[nextid][Price],HouseInfo[nextid][Level],nextid);
	HouseLabel[nextid] = CreateDynamic3DTextLabel(string, 0xFFFFFFFFFF, HouseInfo[nextid][hx], HouseInfo[nextid][hy], HouseInfo[nextid][hz]+0.3,50.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,0,-1,-1,-1,100.0);
    SendClientMessage(playerid, COLOR_LIMEGREEN,"House successfully created!");
    return 1;
 }

CMD:delhouse(playerid,params[])
{
    if(PlayerInfo[playerid][pLevel] < 3) return error
    for(new i = 0; i < MAX_HOUSES; i++)
    {
        if(!fexist(HousePath(i))) continue;
        if(IsPlayerInRangeOfPoint(playerid, 5.0, HouseInfo[i][hx], HouseInfo[i][hy], HouseInfo[i][hz]))
        {
            new string[40];
            format(string,sizeof(string),"House (ID:%d) removed!",i);
            fremove(HousePath(i));
            DestroyDynamicPickup(House[i]);
           	DestroyDynamic3DTextLabel(HouseLabel[i]);
            SendClientMessage(playerid,COLOR_RED,string);
            break;
        }
    }
    return 1;
}
And here's my so far not working /buyhouse cmd
Код:
CMD:buyhouse(playerid,params[])
{
	for(new i = 0;i<MAX_HOUSES;i++)
	{
	if(HouseInfo[i][Owner] == playerid) return SendClientMessage(playerid, COLOR_RED,"You already own a house!");
		if(IsPlayerInRangeOfPoint(playerid, 5.0,HouseInfo[i][hx],HouseInfo[i][hy],HouseInfo[i][hz]))
		{
		    if(HouseInfo[i][Owner] != -1) return SendClientMessage(playerid,COLOR_RED,"That house is already owned!");
		    if(GetPlayerMoney(playerid) < HouseInfo[i][Price]) return SendClientMessage(playerid,COLOR_RED,"Insufficient funds!");
    			new INI:File = INI_Open(HousePath(i)); //line 1450
    			INI_SetTag(File, "Main");
   				INI_WriteString(File, "Owner", PlayerName(playerid));
    			INI_Close(File);
    			GivePlayerMoney(playerid,-HouseInfo[i][Price]);
		        SendClientMessage(playerid,COLOR_LIMEGREEN,"House successfully bought!");
		
		}
	}
 return 1;
}
Reply
#2

I just realised that his house script was the thing that bugged my commands.. For example /Createhouse with all the parametres created an empty .ini file and said Unknown command in the chat.. Pretty much the same happened with /setlevel which has nothing to do with the house system except for the fact that I use zcmd..

Help? :/
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)