#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
Вход
Регистрация
Помощь













