28.07.2013, 19:08
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
And here's my so far not working /buyhouse cmd
![Cheesy](images/smilies/biggrin.png)
Код:
#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; }
Код:
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; }