· 8 years ago · Mar 04, 2018, 03:28 AM
1#include <a_samp>
2#include <zcmd>
3#include <streamer>
4
5#define MAX_HOUSES 300
6#define MAX_HOUSES_PER_PLAYER 1 //1 - Player can own only 1 house, change it to 2 if you want that Player can own 2 houses or else like 99 or 3
7#define databasename "housedb.db"
8#define COLOR_SUPERGREEN 0xFF01FF
9#define COLOR_RED 0xFF0000AA
10
11enum hinfo
12{
13 owner[24],
14 Hname[100],
15 costprice,
16 Float:EnterPos[3],
17 Float:TelePos[3],
18 sellprice,
19 interiors,
20 Text3D:textid,
21 checkpointidx[2]
22};
23
24new DB:database, DBResult:queryresult, fquery[300];
25new HouseInformation[MAX_HOUSES][hinfo], houseid;
26new InHouse[MAX_PLAYERS], InHouseCP[MAX_PLAYERS];
27
28public OnFilterScriptInit()
29{
30 database = db_open(databasename);
31 db_query(database, "CREATE TABLE IF NOT EXISTS `HOUSEINFO` (housename varchar(51), houseowner varchar(25))");
32 //USAGE: CreateHouse(HouseName, Price, Float:EnterX, Float:EnterY, Float:EnterZ, Float:ExitX, Float:ExitY, Float:ExitZ, SellPrice, Interiorx)
33 CreateHouse("My House :)", 100, 1765.9399,-1364.8022,15.7578, 266.857757, 305.001586, 999.148437, 2, 1);
34 CreateHouse("SAFE HOUSE 1 :)", 300000, 2486.4529,-1644.5380,14.0772, 223.04, 1287.26, 1081.2, 5000, 1);
35 return 1;
36}
37
38public OnPlayerConnect(playerid)
39{
40 InHouse[playerid] = -1;
41 InHouseCP[playerid] = -1;
42 return 1;
43}
44
45stock CreateHouse(HouseName[], CostP, Float:EnterX, Float:EnterY, Float:EnterZ, Float:TeleX, Float:TeleY, Float:TeleZ, Interiorx, SellP)
46{
47 format(HouseInformation[houseid][Hname], 100, "%s", HouseName);
48 HouseInformation[houseid][costprice] = CostP;
49 HouseInformation[houseid][EnterPos][0] = EnterX;
50 HouseInformation[houseid][EnterPos][1] = EnterY;
51 HouseInformation[houseid][EnterPos][2] = EnterZ;
52 HouseInformation[houseid][TelePos][0] = TeleX;
53 HouseInformation[houseid][TelePos][1] = TeleY;
54 HouseInformation[houseid][TelePos][2] = TeleZ;
55 HouseInformation[houseid][sellprice] = SellP;
56 HouseInformation[houseid][interiors] = Interiorx;
57 format(fquery, sizeof(fquery), "SELECT houseowner FROM HOUSEINFO WHERE housename = '%s'", HouseName);
58 queryresult = db_query(database, fquery);
59 if(db_num_rows(queryresult) != 0) db_get_field_assoc(queryresult, "houseowner", HouseInformation[houseid][owner], 24);
60 HouseInformation[houseid][checkpointidx][0] = CreateDynamicCP(EnterX, EnterY, EnterZ, 2.0);
61 HouseInformation[houseid][checkpointidx][1] = CreateDynamicCP(TeleX, TeleY, TeleZ, 1.0, 15500000+houseid, Interiorx);
62 if(!HouseInformation[houseid][owner][0]) format(fquery, sizeof(fquery), "[ House ] \n %s \n Price: %d $", HouseName, CostP);
63 else if(HouseInformation[houseid][owner][0] != 0) format(fquery, sizeof(fquery), "[ House ] \n %s \n Owner: %s", HouseName, HouseInformation[houseid][owner]);
64 HouseInformation[houseid][textid] = CreateDynamic3DTextLabel(fquery, COLOR_SUPERGREEN, EnterX, EnterY, EnterZ + 0.5, 50.0);
65 houseid ++;
66 return 1;
67}
68
69stock SetOwner(HouseName[], ownername[], houseids)
70{
71 format(fquery, sizeof(fquery), "INSERT INTO `HOUSEINFO` (`housename`, `houseowner`) VALUES('%s', '%s')", HouseName, ownername);
72 db_query(database, fquery);
73 format(HouseInformation[houseids][owner], 24, "%s", ownername);
74 format(fquery, sizeof(fquery), "[ House ] \n %s \n Owner: %s", HouseName, HouseInformation[houseids][owner]);
75 UpdateDynamic3DTextLabelText(HouseInformation[houseids][textid], COLOR_SUPERGREEN, fquery);
76 return 1;
77}
78
79stock DeleteOwner(HouseName[], houseids)
80{
81 format(HouseInformation[houseids][owner], 24, "%s", "\0");
82 format(fquery, sizeof(fquery), "DELETE FROM `HOUSEINFO` WHERE `housename` = '%s'", HouseName);
83 db_query(database, fquery);
84 format(fquery, sizeof(fquery), "[ House ] \n %s \n Price: %d $", HouseName, HouseInformation[houseids][costprice], HouseInformation[houseids][sellprice]);
85 UpdateDynamic3DTextLabelText(HouseInformation[houseids][textid], COLOR_SUPERGREEN, fquery);
86 return 1;
87}
88
89public OnPlayerEnterDynamicCP(playerid, checkpointid)
90{
91 for(new x; x<houseid; x++)
92 {
93 if(HouseInformation[x][checkpointidx][0] == checkpointid)
94 {
95 if(InHouse[playerid] != -1)
96 {
97 InHouse[playerid] = -1;
98 return 1;
99 }
100 InHouseCP[playerid] = x;
101 new Pname[24];
102 GetPlayerName(playerid, Pname, 24);
103 if(HouseInformation[x][owner][0] != 0 && !strcmp(Pname, HouseInformation[x][owner][0]))
104 {
105 SetPlayerPos(playerid, HouseInformation[x][TelePos][0], HouseInformation[x][TelePos][1], HouseInformation[x][TelePos][2]);
106 SetPlayerInterior(playerid, HouseInformation[x][interiors]);
107 SetPlayerVirtualWorld(playerid, 15500000 + x);
108 }
109 if(!HouseInformation[x][owner][0]) SendClientMessage(playerid, COLOR_SUPERGREEN, "***This House is free to buy ! [ {FFFFFF}/buyhouse {00FF00}]");
110 return 1;
111 }
112 if(HouseInformation[x][checkpointidx][1] == checkpointid)
113 {
114 if(InHouse[playerid] == -1)
115 {
116 InHouse[playerid] = x;
117 return 1;
118 }
119 SetPlayerPos(playerid, HouseInformation[x][EnterPos][0], HouseInformation[x][EnterPos][1], HouseInformation[x][EnterPos][2]);
120 SetPlayerInterior(playerid, 0);
121 SetPlayerVirtualWorld(playerid, 0);
122 return 1;
123 }
124 }
125 return 1;
126}
127
128public OnPlayerLeaveDynamicCP(playerid, checkpointid)
129{
130 if(InHouseCP[playerid] != - 1) InHouseCP[playerid] = -1;
131 return 1;
132}
133
134CMD:buyhouse(playerid, params)
135{
136 if(InHouseCP[playerid] == -1) return SendClientMessage(playerid,COLOR_RED, "[!] You're not in your house !");
137 if(HouseInformation[InHouseCP[playerid]][owner][0] != 0) return SendClientMessage(playerid,COLOR_RED, "[!] This House someone already owns !");
138 if(GetPlayerMoney(playerid) < HouseInformation[InHouseCP[playerid]][costprice]) return SendClientMessage(playerid,COLOR_RED, "[!] You don't have enough money to buy this House !");
139 new PlayerName[24];
140 GetPlayerName(playerid, PlayerName, 24);
141 format(fquery, sizeof(fquery), "SELECT `houseowner` FROM `HOUSEINFO` WHERE `houseowner` = '%s'", PlayerName);
142 queryresult = db_query(database, fquery);
143 if(db_num_rows(queryresult) == MAX_HOUSES_PER_PLAYER) return SendClientMessage(playerid,COLOR_RED, "[!] You have reached the maximum amount of houses !");
144 db_free_result(queryresult);
145 SetOwner(HouseInformation[InHouseCP[playerid]][Hname], PlayerName, InHouseCP[playerid]);
146 SetPlayerPos(playerid, HouseInformation[InHouseCP[playerid]][TelePos][0], HouseInformation[InHouseCP[playerid]][TelePos][1], HouseInformation[InHouseCP[playerid]][TelePos][2]);
147 SetPlayerVirtualWorld(playerid, 15500000 + InHouseCP[playerid]);
148 GivePlayerMoney(playerid, - HouseInformation[InHouseCP[playerid]][costprice]);
149 SendClientMessage(playerid, COLOR_SUPERGREEN, "[*] You have successfully {FFFFFF}bought {00FF00}a {FFFFFF}new house {00FF00}!");
150 return 1;
151}
152
153CMD:sellhouse(playerid, params)
154{
155 if(InHouse[playerid] == -1) return SendClientMessage(playerid,COLOR_RED, "[!] You're not in your house !");
156 new Pname[24];
157 GetPlayerName(playerid, Pname, 24);
158 if(strcmp(HouseInformation[InHouse[playerid]][owner], Pname) != 0) return SendClientMessage(playerid,COLOR_RED, "[!] This is not your house !");
159 DeleteOwner(HouseInformation[InHouse[playerid]][Hname], InHouse[playerid]);
160 GivePlayerMoney(playerid, HouseInformation[InHouse[playerid]][sellprice]);
161 SetPlayerPos(playerid, HouseInformation[InHouse[playerid]][EnterPos][0], HouseInformation[InHouse[playerid]][EnterPos][1], HouseInformation[InHouse[playerid]][EnterPos][2]);
162 SetPlayerInterior(playerid, 0);
163 SetPlayerVirtualWorld(playerid, 0);
164 InHouseCP[playerid] = InHouse[playerid];
165 SendClientMessage(playerid, COLOR_RED, "[*] You have successfully {FFFFFF}sold {FF0000}your {FFFFFF}house {FF0000}!");
166 return 1;
167}