Команда покупки:
PHP код:
CMD:buyhouse(playerid, params[])
{
if(!player_is_authorized{playerid})
return SendClientMessage(playerid, COLOR_GREY, !"Вы не авторизировались.");
new house = -1;
for(new h = 0; h < TOTALHOUSE; h++)
{
if(!IsPlayerInRangeOfPoint(playerid, 2.0, HouseInfo[h][henter_pos_x],HouseInfo[h][henter_pos_y], HouseInfo[h][henter_pos_z]) && HouseInfo[h][hOwned] == 0)
continue;
if(HouseInfo[h][hOwned] == 1)
return SendClientMessage(playerid,COLOR_GREY,!"Этот дом уже куплен.");
house = h;
}
if(house == -1)
return SendClientMessage(playerid,COLOR_GREY,!"Ты не рядом с иконкой дома.");
if(pInfo[playerid][pHouse] > 0)
return SendClientMessage(playerid,COLOR_GREY,!"У вас уже есть дом.");
if(pInfo[playerid][pLevel] < HouseInfo[house][hLevel])
return SendClientMessage(playerid,COLOR_GREY,!"У вас маленький уровень.");
if(pInfo[playerid][pMoney] < HouseInfo[house][hPrice])
return SendClientMessage(playerid,COLOR_GREY,!"У вас не хватает денег.");
strmid(HouseInfo[house][hOwner], pInfo[playerid][pName], 0, strlen(pInfo[playerid][pName]), 255);
pInfo[playerid][pMoney] -= HouseInfo[house][hPrice];
GivePlayerMoney(playerid, -HouseInfo[house][hPrice]);
SetPlayerInterior(playerid,HouseInfo[house][hInt]);
SetPlayerPos(playerid,HouseInfo[house][hexit_pos_x],HouseInfo[house][hexit_pos_y],HouseInfo[house][hexit_pos_z]);
SetPlayerVirtualWorld(playerid,house+50);
HouseCar[house] = CreateVehicle(HouseInfo[house][hHouse_Car],HouseInfo[house][hcar_pos_x],HouseInfo[house][hcar_pos_y],HouseInfo[house][hcar_pos_z],HouseInfo[house][hcar_pos_angle],HouseInfo[house][hCar_Color_1],HouseInfo[house][hCar_Color_2], -1);
HouseInfo[house][hOwned] = 1;
pInfo[playerid][pHouse] = house+1;
SendClientMessage(playerid, COLOR_WHITE, !"Поздравляем с покупкой дома.");
new string[50];
format(string, sizeof(string), "UPDATE accounts SET house = '%d' WHERE id = %i",pInfo[playerid][pHouse]+1, pInfo[playerid][pID]);
mysql_tquery(mysql_connect_ID, string, "", "");
UpdateHouse(house);
SaveHouse(house);
return true;
}
Команда продажи:
PHP код:
CMD:sellhouse(playerid, params[])
{
if(!player_is_authorized{playerid})
return SendClientMessage(playerid, COLOR_GREY, !"Вы не авторизировались.");
if(pInfo[playerid][pHouse] == 0)
return SendClientMessage(playerid, COLOR_GREY, !"У тебя нет дома.");
if(isnull(params))
{
new house = pInfo[playerid][pHouse]-1;
static const fmt_str[] = "Ты точно хочешь продать дом штату за $%d? Введи /accept sh для подтверждения или /cancel sh для отмены.";
new string[sizeof(fmt_str) - 2 + 25];
format(string, sizeof string, fmt_str, HouseInfo[house][hPrice]);
SendClientMessage(playerid, COLOR_LBLUE, string);
Prodaga{playerid} = true;
}
else
{
new giveplayerid,
currency,
price,
money[25];
if(sscanf(params, "uci", giveplayerid, currency, price))
return SendClientMessage(playerid, COLOR_GREY, !"/sellhouse [id] [$/M/D] [Цена]");
if(giveplayerid == INVALID_PLAYER_ID)
return SendClientMessage(playerid, COLOR_GREY, !"Указан неверный ID игрока.");
if(pInfo[giveplayerid][pHouse] != 0)
return SendClientMessage(playerid, COLOR_GREY, !"У этого игрока есть дом.");
if(HouseInfo[pInfo[playerid][pHouse]][hLevel] > pInfo[giveplayerid][pLevel])
return SendClientMessage(playerid, COLOR_GREY, !"Уровень игрока не позволяет ему купить ваш дом.");
if(pInfo[giveplayerid][pMoney] < price)
return SendClientMessage(playerid, COLOR_GREY, !"У игрока нет данной суммы.");
if(GetPVarType(giveplayerid, "SellHouse_Currency") != PLAYER_VARTYPE_NONE)
return SendClientMessage(playerid, COLOR_GREY, !"Данному игроку уже сделали предложение по продаже дома.");
ConvertNumber(price, money);
switch(currency)
{
case '$':
{
if(!(1 <= price <= cellmax))
return SendClientMessage(playerid, COLOR_GREY, !"Цена от $1.");
static const fmt_str[] = "Игрок %s предложил вам купить дом за $%s. Для покупки введите /accept house";
new string[sizeof(fmt_str) - 4 + MAX_PLAYER_NAME + 25];
format(string, sizeof string, fmt_str, pInfo[playerid][pName], money);
SendClientMessage(giveplayerid, COLOR_YELLOW, string);
SetPVarInt(giveplayerid, "SellHouse_Currency", '$');
format(string, sizeof string,"Ты предложил купить дом игроку %s за $%s.",pInfo[giveplayerid][pName], money);
SendClientMessage(playerid,COLOR_YELLOW,string);
}
case 'м', 'М', 'm', 'M':
{
if(!(100 <= price <= cellmax))
return SendClientMessage(playerid, COLOR_GREY, !"Цена от 100 материалов.");
static const fmt_str[] = "Игрок %s предложил вам купить дом за %s материалов. Для покупки введите /accept house";
new string[sizeof(fmt_str) - 4 + MAX_PLAYER_NAME + 25];
format(string, sizeof string, fmt_str, pInfo[playerid][pName], money);
SendClientMessage(giveplayerid, COLOR_YELLOW, string);
SetPVarInt(giveplayerid, "SellHouse_Currency", 'M');
format(string, sizeof string,"Ты предложил купить дом игроку %s за %s материалов.",pInfo[giveplayerid][pName], money);
SendClientMessage(playerid,COLOR_YELLOW,string);
}
case 'd', 'D':
{
if(!(1 <= price <= cellmax))
return SendClientMessage(playerid, COLOR_GREY, !"Цена от 1 грамма наркотиков");
static const fmt_str[] = "Игрок %s предложил вам купить дом за %s грамм нарко. Для покупки введите /accept house";
new string[sizeof(fmt_str) - 4 + MAX_PLAYER_NAME + 25];
format(string, sizeof string, fmt_str, pInfo[playerid][pName], money);
SendClientMessage(giveplayerid, COLOR_YELLOW, string);
SetPVarInt(giveplayerid, "SellHouse_Currency", 'D');
format(string, sizeof string,"Ты предложил купить дом игроку %s за %s грамм нарко.",pInfo[giveplayerid][pName], money);
SendClientMessage(playerid,COLOR_YELLOW,string);
}
}
SetPVarInt(giveplayerid, "BUYHOME", playerid);
SetPVarInt(giveplayerid, "BUYCENA", price);
}
return true;
}
Подтверждение покупки:
PHP код:
if(strcmp(accept, "house", true) == 0)
{
if(GetPVarType(playerid, "BUYHOME") == PLAYER_VARTYPE_NONE)
return SendClientMessage(playerid, COLOR_GREY, !"Вам не кто не предлогал купить дом.");
new price = GetPVarInt(playerid, "BUYCENA"),
sellpl = GetPVarInt(playerid,"BUYHOME");
DeletePVar(playerid,"BUYHOME");
DeletePVar(playerid,"BUYCENA");
if(pInfo[playerid][pMoney] < price)
return SendClientMessage(playerid, COLOR_GREY, !"У вас недостаточно средств.");
if(pInfo[playerid][pMats] < price)
return SendClientMessage(playerid, COLOR_GREY, !"У вас недостаточно материалов.");
if(pInfo[playerid][pDrugs] < price)
return SendClientMessage(playerid, COLOR_GREY, !"У вас недостаточно наркотиков.");
switch(GetPVarInt(playerid, "SellHouse_Currency"))
{
case '$':
{
format(string,sizeof string, "Вы купили дом у игрока %s за %d$.",pInfo[sellpl][pName], price);
SendClientMessage(playerid, COLOR_LBLUE, string);
format(string,sizeof string ,"Вы продали дом игроку %s за %d$.",pInfo[playerid][pName],price);
SendClientMessage(sellpl, COLOR_LBLUE, string);
pInfo[playerid][pMoney] -= price;
pInfo[sellpl][pMoney] += price;
}
case 'M':
{
format(string,sizeof string, "Вы купили дом у игрока %s за %d материалов.",pInfo[sellpl][pName], price);
SendClientMessage(playerid, COLOR_LBLUE, string);
format(string,sizeof string ,"Вы продали дом игроку %s за %d материалов.",pInfo[playerid][pName],price);
SendClientMessage(sellpl, COLOR_LBLUE, string);
pInfo[playerid][pMats] -= price;
pInfo[sellpl][pMats] += price;
}
case 'D':
{
format(string,sizeof string, "Вы купили дом у игрока %s за %d грамм нарко.",pInfo[sellpl][pName], price);
SendClientMessage(playerid, COLOR_LBLUE, string);
format(string,sizeof string ,"Вы продали дом игроку %s за %d грамм нарко.",pInfo[playerid][pName],price);
SendClientMessage(sellpl, COLOR_LBLUE, string);
pInfo[playerid][pDrugs] -= price;
pInfo[sellpl][pDrugs] += price;
}
}
new houseid = pInfo[playerid][pHouse] = pInfo[sellpl][pHouse];
pInfo[sellpl][pHouse] = HouseInfo[houseid][hOwner][0] = 0;
format(HouseInfo[houseid][hOwner], MAX_PLAYER_NAME, pInfo[playerid][pName]);
format(string, sizeof(string), "UPDATE accounts AS owner, accounts AS buyer SET buyer.house = owner.house, owner.house = 0 WHERE owner.id = %i AND buyer.id = %i", pInfo[sellpl][pID], pInfo[playerid][pID]);
mysql_tquery(mysql_connect_ID, string, "", "");
printf(string);
format(string, sizeof(string), "UPDATE house SET owner = '%s', owned = 1 WHERE id = %i",pInfo[playerid][pName], HouseInfo[houseid][hID]-1);
mysql_tquery(mysql_connect_ID, string, "", "");
printf(string);
UpdateHouse(pInfo[playerid][pHouse]);
DeletePVar(playerid, "SellHouse_Currency");
}
UpdateHouse
PHP код:
stock UpdateHouse(houseid)
{
if(!(0 <= houseid < sizeof(HouseInfo)))
return 0;
static const h_null[] = "{FFDEAD}ID: {FFFFFF}[%d]\n{FFDEAD}Владелец: {FFFFFF}Нет\n{FFDEAD}Стоимость: {FFFFFF}%d\n{FFDEAD}Уровень: {FFFFFF}%d";
static const h_not_null[] = "{FFDEAD}ID: {FFFFFF}[%d]\n{FFDEAD}Владелец: {FFFFFF}%s\n{FFDEAD}Уровень: {FFFFFF}%d";
new h_buff[sizeof(h_null) + ((3-2) + (24-2) + (20-2) + (5-2))];
DestroyDynamicMapIcon(HouseInfo[houseid][hMapicon]);
DestroyPickup(HouseInfo[houseid][hPickup]);
Delete3DTextLabel(HouseInfo[houseid][hText]);
if(!HouseInfo[houseid][hOwned])
{
format(h_buff, sizeof(h_buff), h_null, HouseInfo[houseid][hID], HouseInfo[houseid][hPrice],HouseInfo[houseid][hLevel]);
HouseInfo[houseid][hPickup] = CreatePickup(1273, 1, HouseInfo[houseid][henter_pos_x], HouseInfo[houseid][henter_pos_y], HouseInfo[houseid][henter_pos_z], -1);
HouseInfo[houseid][hText] = Create3DTextLabel(h_buff, 0x008080FF, HouseInfo[houseid][henter_pos_x], HouseInfo[houseid][henter_pos_y], HouseInfo[houseid][henter_pos_z], 7, 0);
HouseInfo[houseid][hMapicon] = CreateDynamicMapIcon(HouseInfo[houseid][henter_pos_x], HouseInfo[houseid][henter_pos_y], HouseInfo[houseid][henter_pos_z], 31, COLOR_WHITE, 0, -1, -1, 100.0);
}
else
{
format(h_buff, sizeof(h_buff), h_not_null, HouseInfo[houseid][hID], HouseInfo[houseid][hOwner],HouseInfo[houseid][hLevel]);
HouseInfo[houseid][hPickup] = CreatePickup(1272, 1, HouseInfo[houseid][henter_pos_x], HouseInfo[houseid][henter_pos_y], HouseInfo[houseid][henter_pos_z], -1);
HouseInfo[houseid][hText] = Create3DTextLabel(h_buff, 0xFFFFFF, HouseInfo[houseid][henter_pos_x], HouseInfo[houseid][henter_pos_y], HouseInfo[houseid][henter_pos_z], 7.0, 0);
}
return 1;
}