#define Player PlayerInfo #include <streamer> #include <zcmd>

Ко всем new
new HOME = макс число домов;

К forward
forward LoadHouses(); forward SaveHouses();

добавляем enum :
enum hInfo { hID, Float:hEnterX, Float:hEnterY, Float:hEnterZ, Float:hExitX, Float:hExitY, Float:hExitZ, hOwner[MAX_PLAYER_NAME], hPrice, hInt, hLock, hOwned, Text3D: hLabel, hPickup, hRentabil, hMIcon }; new HouseInfo[макс число домов][hInfo];

в OnGameModeInit
for(new h = 0; h < sizeof(HouseInfo); h++) { new text[600]; if(HouseInfo[h][hOwned] == 0) { format(text,sizeof(text),"{FF6347}* Дом *{FFFFFF}\nАдрес: {7CFC00}FT %d{FFFFFF}\nЦена: {7CFC00}$%d{FFFFFF}",h,HouseInfo[h][hPrice]); HouseInfo[h][hMIcon] = CreateMapIcon(31, COLOR_WHITE,HouseInfo[h][hEnterX], HouseInfo[h][hEnterY], HouseInfo[h][hEnterZ]); HouseInfo[h][hPickup] = CreatePickup(1274, 23, HouseInfo[h][hEnterX], HouseInfo[h][hEnterY], HouseInfo[h][hEnterZ],-1); } else if(HouseInfo[h][hOwned] == 1) { if(HouseInfo[h][hRentabil] == 1) { format(text,sizeof(text),"{FF6347}* Дом *{FFFFFF}\nАдрес: {7CFC00}FreeTime %d{FFFFFF}\nВладелец: {7CFC00}%s{FFFFFF}",h,HouseInfo[h][hOwner]); Update3DTextLabelText(HouseInfo[h][hLabel], 0xFFFFFFFF, text); HouseInfo[h][hMIcon] = CreateMapIcon(32, COLOR_WHITE,HouseInfo[h][hEnterX], HouseInfo[h][hEnterY], HouseInfo[h][hEnterZ]); HouseInfo[h][hPickup] = CreatePickup(1272, 23, HouseInfo[h][hEnterX], HouseInfo[h][hEnterY], HouseInfo[h][hEnterZ],-1); } else if(HouseInfo[h][hRentabil] == 0) { format(text,sizeof(text),"{FF6347}* Дом *{FFFFFF}\nАдрес: {7CFC00}%d{FFFFFF}\nВладелец: {7CFC00}%s{FFFFFF}",h,HouseInfo[h][hOwner]); Update3DTextLabelText(HouseInfo[h][hLabel], 0xFFFFFFFF, text); } HouseInfo[h][hMIcon] = CreateMapIcon(32, COLOR_WHITE,HouseInfo[h][hEnterX], HouseInfo[h][hEnterY], HouseInfo[h][hEnterZ]); HouseInfo[h][hPickup] = CreatePickup(1272, 23, HouseInfo[h][hEnterX], HouseInfo[h][hEnterY], HouseInfo[h][hEnterZ],-1); } HouseInfo[h][hLabel] = Create3DTextLabel(text,0xFFFFFFFF,HouseInfo[h][hEnterX],HouseInfo[h][hEnterY],HouseInfo[h][hEnterZ]+1,20. 0,0,1); }

в public OnPlayerSpawn(или SetPlayerSpawn)
if(PlayerInfo[playerid][pPhousekey] > 0) { SetPlayerPos(playerid,HouseInfo[Player[playerid][pPhousekey]-1][hExitX],HouseInfo[Player[playerid][pPhousekey] -1][hExitY],HouseInfo[Player[playerid][pPhousekey]-1][hExitZ]); SetPlayerInterior(playerid,HouseInfo[Player[playerid][pPhousekey]-1][hInt]); SetPlayerVirtualWorld(playerid,HouseInfo[Player[playerid][pPhousekey]-1][hID]); SetCameraBehindPlayer(playerid); }

КОМАНДЫ!
CMD:hbuy(playerid, params[]) { new playername[32]; new sendername[32]; new Float:oldposx, Float:oldposy, Float:oldposz; GetPlayerName(playerid, playername, sizeof(playername)); GetPlayerPos(playerid, oldposx, oldposy, oldposz); for(new h = 0; h < HOME; h++) { if(IsPlayerInRangeOfPoint(playerid, 2.0, HouseInfo[h][hEnterX], HouseInfo[h][hEnterY], HouseInfo[h][hEnterZ]) && HouseInfo[h][hOwned] == 0) { if(Player[playerid][pPhousekey] != 0 && strcmp(playername, HouseInfo[Player[playerid][pPhousekey]-1][hOwner], true) == 0) return SendClientMessage(playerid, COLOR_WHITE, "У вас уже есть дом, используйте /sellhouse чтобы продать его!"); if(GetPlayerMoney(playerid) < HouseInfo[h][hPrice]) return SendClientMessage(playerid, COLOR_WHITE, "У вас не хватает денег для приобретение дома!"); Player[playerid][pPhousekey] = HouseInfo[h][hID]; HouseInfo[h][hOwned] = 1; GetPlayerName(playerid, sendername, sizeof(sendername)); strmid(HouseInfo[h][hOwner], sendername, 0, strlen(sendername), 255); GivePlayerMoney(playerid,-HouseInfo[h][hPrice]); SetPlayerInterior(playerid,HouseInfo[h][hInt]); SetPlayerPos(playerid,HouseInfo[h][hExitX],HouseInfo[h][hExitY],HouseInfo[h][hExitZ]); SetPlayerVirtualWorld(playerid,HouseInfo[h][hID]); UpdateHouse(h); SendClientMessage(playerid, COLOR_WHITE, "Поздравляю! Теперь этот дом принадлежит тебе!"); SaveHouses(); } } return 1; } CMD:hsell(playerid, params[]) { new playername[32]; new sendername[32]; GetPlayerName(playerid, playername, sizeof(playername)); if(Player[playerid][pPhousekey] == 0) return SendClientMessage(playerid, COLOR_WHITE, "У тебя нет дома."); if(Player[playerid][pPhousekey] != 0 && strcmp(playername, HouseInfo[Player[playerid][pPhousekey]-1][hOwner], true) == 0) { new house = Player[playerid][pPhousekey]-1; HouseInfo[house][hLock] = 0; HouseInfo[house][hOwned] = 0; GetPlayerName(playerid, sendername, sizeof(sendername)); strmid(HouseInfo[house][hOwner], "The State", 0, strlen("The State"), 255); GivePlayerMoney(playerid,HouseInfo[house][hPrice]*4/5); Player[playerid][pPhousekey] = 0; if(GetPlayerInterior(playerid) == HouseInfo[house][hInt]) { SetPlayerInterior(playerid,0); SetPlayerPos(playerid,HouseInfo[house][hEnterX],HouseInfo[house][hEnterY],HouseInfo[house][hEnterZ]); SetPlayerVirtualWorld(playerid,0); } UpdateHouse(house); SaveHouses(); SendClientMessage(playerid, COLOR_WHITE, "Ты продал свой дом!"); } return 1; } CMD:addhouse(playerid, params[]) { if ((Player[playerid][pAdmin] != 5 && Player[playerid][pAdmin] !=6)) return SendClientMessage(playerid,COLOR_GREY,"У вас не прав на использование даной команды"); new string[256]; new idx; new tmp[32]; tmp = strtok(params, idx); if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "ИНФО: /addhouse [Кол-во этажей] [id]"); new level = strval(tmp); new cost; if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "ИНФО: /addhouse [Кол-во этажей] [id]"); new id = strval(tmp) -1; new inter; if(level == 0) { inter = 9; cost = 250000; } else if(level == 1) { inter = 2+random(6); if(inter == 2) cost = (10+random(3))*100000; if(inter == 3) cost = (5+random(2))*100000; if(inter == 4) cost = (7+random(3))*100000; if(inter == 5) cost = (6+random(2))*100000; if(inter == 6) cost = (5+random(2))*100000; if(inter == 7) cost = (6+random(2))*100000; if(inter == 8) cost = (6+random(2))*100000; } else if(level == 2) { inter = 0; cost = (12+random(3))*100000; if(inter == 1) cost = (13+random(4))*100000; } else if(level == 3) { inter = 1; cost = (13+random(4))*100000; } else return SendClientMessage(playerid, COLOR_GREY, "Количество этажей должно быть 0, 1, 2 или 3."); new Float:X,Float:Y,Float:Z; GetPlayerPos(playerid,X,Y,Z); if(id+1 > HOME) HOME += 1; HouseInfo[id][hEnterX] = X; HouseInfo[id][hEnterY] = Y; HouseInfo[id][hEnterZ] = Z; HouseInfo[id][hPrice] = cost; HouseInfo[id][hOwned] = 0; HouseInfo[id][hID] = id+1; HouseInfo[id][hOwner][0] = 0; HouseInfo[id][hExitX] = HouseExit[inter][0]; HouseInfo[id][hExitY] = HouseExit[inter][1]; HouseInfo[id][hExitZ] = HouseExit[inter][2]; HouseInfo[id][hInt] = HouseInt[inter]; HouseInfo[id][hLock] = 0; strmid(HouseInfo[id][hOwner], "The State", 0, strlen("The State"), 255); new text[600]; format(text,sizeof(text),"{FF6347}* Дом *{FFFFFF}\nАдрес: {7CFC00}FreeTine %d{FFFFFF}\nЦена: {7CFC00}$%d{FFFFFF}",HouseInfo[id][hID],HouseInfo[id][hPrice]); HouseInfo[id][hLabel] = Create3DTextLabel(string,COLOR_GREEN,HouseInfo[id][hEnterX], HouseInfo[id][hEnterY], HouseInfo[id][hEnterZ]+1.2,15.0,0); HouseInfo[idx][hMIcon] = CreateMapIcon(31,COLOR_WHITE,HouseInfo[id][hEnterX], HouseInfo[id][hEnterY], HouseInfo[id][hEnterZ]); HouseInfo[id][hPickup] = CreatePickup(1274, 23, HouseInfo[id][hEnterX], HouseInfo[id][hEnterY], HouseInfo[id][hEnterZ],-1); SaveHouses(); UpdateHouse(id); format(string,sizeof(string),"Создан дом [id]:%d [цена]:%d",HouseInfo[id][hID],HouseInfo[id][hPrice]); return SendClientMessage(playerid, COLOR_GREY, string); }

в public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
if(newkeys == KEY_WALK) { for(new i = 0; i < HOME; i++) { if (IsPlayerInRangeOfPoint(playerid,1,HouseInfo[i][hExitX], HouseInfo[i][hExitY], HouseInfo[i][hExitZ]) && GetPlayerVirtualWorld(playerid) == HouseInfo[i][hID]) { SetPlayerInterior(playerid,0); SetPlayerPos(playerid,HouseInfo[HouseInfo[i][hID]-1][hEnterX],HouseInfo[HouseInfo[i][hID]-1][ hEnterY],HouseInfo[HouseInfo[i][hID]-1][hEnterZ]); SetPlayerVirtualWorld(playerid,0); if(Player[playerid][pPhousekey] == HouseInfo[i][hID]) { new Float:tempheal; GetPlayerHealth(playerid,tempheal); if(tempheal < 100.0) { SetPlayerHealth(playerid,100.0); } } } } } for(new i = 0; i < HOME; i++) { if (IsPlayerInRangeOfPoint(playerid,1,HouseInfo[i][hEnterX], HouseInfo[i][hEnterY], HouseInfo[i][hEnterZ])) { if(Player[playerid][pPhousekey] == i+1 || HouseInfo[i][hLock] == 0) { SetPlayerInterior(playerid,HouseInfo[i][hInt]); SetPlayerPos(playerid,HouseInfo[i][hExitX],HouseInfo[i][hExitY],HouseInfo[i][hExitZ]); GameTextForPlayer(playerid, "~g~Home", 5000, 1); SetPlayerVirtualWorld(playerid,HouseInfo[i][hID]); } else { GameTextForPlayer(playerid, "~r~Locked", 5000, 1); } } } return 1; }

в конец мода суём
stock UpdateHouse(idx) { new text[600]; DestroyMapIcon(HouseInfo[idx][hMIcon]); DestroyPickup(HouseInfo[idx][hPickup]); if(HouseInfo[idx][hOwned] == 0) { format(text,sizeof(text),"{FF6347}* Дом *{FFFFFF}\nАдрес: {7CFC00}FT %d{FFFFFF}\nЦена: {7CFC00}$%d{FFFFFF}",idx,HouseInfo[idx][hPrice]); HouseInfo[idx][hMIcon] = CreateMapIcon(31, COLOR_WHITE,HouseInfo[idx][hEnterX], HouseInfo[idx][hEnterY], HouseInfo[idx][hEnterZ]); HouseInfo[idx][hPickup] = CreatePickup(1274, 23, HouseInfo[idx][hEnterX], HouseInfo[idx][hEnterY], HouseInfo[idx][hEnterZ],-1); } else if(HouseInfo[idx][hOwned] == 1) { if(HouseInfo[idx][hRentabil] == 1) { format(text,sizeof(text),"{FF6347}* Дом *{FFFFFF}\nАдрес: {7CFC00}FT %d{FFFFFF}\nВладелец: {7CFC00}%s{FFFFFF}",idx,HouseInfo[idx][hOwner]); Update3DTextLabelText(HouseInfo[idx][hLabel], 0xFFFFFFFF, text); HouseInfo[idx][hMIcon] = CreateMapIcon(32, COLOR_WHITE,HouseInfo[idx][hEnterX], HouseInfo[idx][hEnterY], HouseInfo[idx][hEnterZ]); HouseInfo[idx][hPickup] = CreatePickup(1272, 23, HouseInfo[idx][hEnterX], HouseInfo[idx][hEnterY], HouseInfo[idx][hEnterZ],-1); } else if(HouseInfo[idx][hRentabil] == 0) { format(text,sizeof(text),"{FF6347}* Дом *{FFFFFF}\nАдрес: {7CFC00}%d{FFFFFF}\nВладелец: {7CFC00}%s{FFFFFF}",idx,HouseInfo[idx][hOwner]); Update3DTextLabelText(HouseInfo[idx][hLabel], 0xFFFFFFFF, text); } HouseInfo[idx][hMIcon] = CreateMapIcon(32, COLOR_WHITE,HouseInfo[idx][hEnterX], HouseInfo[idx][hEnterY], HouseInfo[idx][hEnterZ]); HouseInfo[idx][hPickup] = CreatePickup(1272, 23, HouseInfo[idx][hEnterX], HouseInfo[idx][hEnterY], HouseInfo[idx][hEnterZ],-1); } Update3DTextLabelText(HouseInfo[idx][hLabel], 0xFFFFFFFF, text); } public SaveHouses() { new i; new File:houses; while(i < HOME) { new string[288]; format(string, sizeof(string), "%d|%f|%f|%f|%f|%f|%f|%d|%d|%s|%d|%d|%d\r\n", HouseInfo[i][hID], HouseInfo[i][hEnterX], HouseInfo[i][hEnterY], HouseInfo[i][hEnterZ], HouseInfo[i][hExitX], HouseInfo[i][hExitY], HouseInfo[i][hExitZ], HouseInfo[i][hInt], HouseInfo[i][hOwned], HouseInfo[i][hOwner], HouseInfo[i][hPrice], HouseInfo[i][hLock] ); if(i == 0) { houses = fopen("Houses.cfg", io_write); } else { houses = fopen("Houses.cfg", io_append); } fwrite(houses, string); i++; fclose(houses); } i = 0; return 1; } public LoadHouses() { new string[288]; new arrCoords[12][46]; new File:houses = fopen("Houses.cfg", io_read); new i; if(houses) { while(i < HOME) { fread(houses, string); split(string, arrCoords, '|'); HouseInfo[i][hID] = strval(arrCoords[0]); HouseInfo[i][hEnterX] = floatstr(arrCoords[1]); HouseInfo[i][hEnterY] = floatstr(arrCoords[2]); HouseInfo[i][hEnterZ] = floatstr(arrCoords[3]); HouseInfo[i][hExitX] = floatstr(arrCoords[4]); HouseInfo[i][hExitY] = floatstr(arrCoords[5]); HouseInfo[i][hExitZ] = floatstr(arrCoords[6]); HouseInfo[i][hInt] = strval(arrCoords[7]); HouseInfo[i][hOwned] = strval(arrCoords[8]); strmid(HouseInfo[i][hOwner], arrCoords[9], false, strlen(arrCoords[9]), MAX_PLAYER_NAME+1); HouseInfo[i][hPrice] = strval(arrCoords[10]); HouseInfo[i][hLock] = strval(arrCoords[11]); i++; } } fclose(houses); printf("|Дома: %d",i); return 1; }

Еше вам понадобиться
иклюд zcmd
инклюд streamer
АВТОР : skript47