· 7 years ago · Oct 30, 2018, 08:34 PM
1/* DIALOZI:
2
3DIALOG_FURNITURE_MENU
4DIALOG_FURNITURE_BUY
5DIALOG_FURNITURE_SELL
6
7*/
8
9new
10 InHouse[MAX_PLAYERS] = {INVALID_HOUSE_ID, ...},
11 SelectMode[MAX_PLAYERS] = {SELECT_MODE_NONE, ...},
12 bool: EditingFurniture[MAX_PLAYERS] = {false, ...};
13
14enum e_furnituredata
15{
16 ModelID,
17 Name[32],
18 Price
19};
20
21enum e_furniture
22{
23 SQLID,
24 HouseID,
25 ArrayID,
26 Float: furnitureX,
27 Float: furnitureY,
28 Float: furnitureZ,
29 Float: furnitureRX,
30 Float: furnitureRY,
31 Float: furnitureRZ
32};
33
34new
35 HouseFurnitures[][e_furnituredata] = {
36 // modelid, furniture name, price
37 {3111, "Building Plan", 500},
38 {2894, "Book", 20},
39 {2277, "Cat Picture", 100},
40 {1753, "Leather Couch", 150},
41 {1703, "Black Couch", 200},
42 {1255, "Lounger", 75},
43 {19581, "Frying Pan", 10},
44 {19584, "Sauce Pan", 12},
45 {19590, "Woozie's Sword", 1000},
46 {19525, "Wedding Cake", 50},
47 {1742, "Bookshelf", 80},
48 {1518, "TV 1", 130},
49 {19609, "Drum Kit", 500},
50 {19787, "Small LCD TV", 2000},
51 {19786, "Big LCD TV", 4000},
52 {2627, "Treadmill", 130}
53 };
54
55
56//
57mysql_tquery(SQLHandle, "SELECT * FROM housefurnitures", "LoadFurnitures", "");
58public LoadFurnitures()
59{
60 new rows = cache_num_rows();
61 if(rows)
62 {
63 new id, loaded, vw, interior, data[e_furniture];
64 while(loaded < rows)
65 {
66 cache_get_value_name_int(loaded, "ID", data[SQLID]);
67 cache_get_value_name_int(loaded, "HouseID", data[HouseID]);
68 cache_get_value_name_int(loaded, "FurnitureID", data[ArrayID]);
69 cache_get_value_name_float(loaded, "FurnitureX", data[furnitureX]);
70 cache_get_value_name_float(loaded, "FurnitureY", data[furnitureY]);
71 cache_get_value_name_float(loaded, "FurnitureZ", data[furnitureZ]);
72 cache_get_value_name_float(loaded, "FurnitureRX", data[furnitureRX]);
73 cache_get_value_name_float(loaded, "FurnitureRY", data[furnitureRY]);
74 cache_get_value_name_float(loaded, "FurnitureRZ", data[furnitureRZ]);
75 cache_get_value_name_int(loaded, "FurnitureVW", vw);
76 cache_get_value_name_int(loaded, "FurnitureInt", interior);
77
78 id = CreateDynamicObject(
79 HouseFurnitures[ data[ArrayID] ][ModelID],
80 data[furnitureX], data[furnitureY], data[furnitureZ],
81 data[furnitureRX], data[furnitureRY], data[furnitureRZ],
82 vw, interior
83 );
84
85 Streamer_SetArrayData(STREAMER_TYPE_OBJECT, id, E_STREAMER_EXTRA_ID, data);
86 loaded++;
87 }
88
89 printf(" [House System] Loaded %d furnitures.", loaded);
90 }
91
92 return 1;
93}
94//
95mysql_tquery(SQLHandle, "CREATE TABLE IF NOT EXISTS `housefurnitures` (\
96 `ID` int(11) NOT NULL auto_increment,\
97 `HouseID` int(11) NOT NULL,\
98 `FurnitureID` tinyint(11) NOT NULL,\
99 `FurnitureX` float NOT NULL,\
100 `FurnitureY` float NOT NULL,\
101 `FurnitureZ` float NOT NULL,\
102 `FurnitureRX` float NOT NULL,\
103 `FurnitureRY` float NOT NULL,\
104 `FurnitureRZ` float NOT NULL,\
105 `FurnitureVW` int(11) NOT NULL,\
106 `FurnitureInt` int(11) NOT NULL,\
107 PRIMARY KEY (`ID`)\
108 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;", "", "");
109//
110if(dialogid == DIALOG_FURNITURE_MENU)
111 {
112 if(!response) return ShowHouseMenu(playerid);
113 new id = InHouse[playerid];
114 if(id == INVALID_HOUSE_ID) return SendClientMessage(playerid, 0xE74C3CFF, "You're not in a house.");
115 if(strcmp(HouseData[id][Owner], Player_GetName(playerid))) return SendClientMessage(playerid, 0xE74C3CFF, "You're not the owner of this house.");
116 if(HouseData[id][SalePrice] > 0) return SendClientMessage(playerid, 0xE74C3CFF, "You can't use this feature while the house is for sale.");
117
118 if(listitem == 0)
119 {
120 new list[512];
121 format(list, sizeof(list), "#\tFurniture Name\tPrice\n");
122 for(new i; i < sizeof(HouseFurnitures); ++i)
123 {
124 format(list, sizeof(list), "%s%d\t%s\t$%s\n", list, i+1, HouseFurnitures[i][Name], convertNumber(HouseFurnitures[i][Price]));
125 }
126
127 ShowPlayerDialog(playerid, DIALOG_FURNITURE_BUY, DIALOG_STYLE_TABLIST_HEADERS, "Buy Furniture", list, "Buy", "Back");
128 }
129
130 if(listitem == 1)
131 {
132 SelectMode[playerid] = SELECT_MODE_EDIT;
133 SelectObject(playerid);
134 SendClientMessage(playerid, 0xFFFFFFFF, "Click on the furniture you want to edit.");
135 }
136
137 if(listitem == 2)
138 {
139 SelectMode[playerid] = SELECT_MODE_SELL;
140 SelectObject(playerid);
141 SendClientMessage(playerid, 0xFFFFFFFF, "Click on the furniture you want to sell.");
142 }
143
144 if(listitem == 3)
145 {
146 new money, sold, data[e_furniture], query[64];
147 for(new i; i < Streamer_GetUpperBound(STREAMER_TYPE_OBJECT); ++i)
148 {
149 if(!IsValidDynamicObject(i)) continue;
150 Streamer_GetArrayData(STREAMER_TYPE_OBJECT, i, E_STREAMER_EXTRA_ID, data);
151 if(data[SQLID] > 0 && data[HouseID] == id)
152 {
153 sold++;
154 money += HouseFurnitures[ data[ArrayID] ][Price];
155 DestroyDynamicObject(i);
156 }
157 }
158
159 new string[64];
160 format(string, sizeof(string), "Sold %d furnitures for $%s.", sold, convertNumber(money));
161 SendClientMessage(playerid, -1, string);
162 GivePlayerMoney(playerid, money);
163
164 mysql_format(SQLHandle, query, sizeof(query), "DELETE FROM housefurnitures WHERE HouseID=%d", id);
165 mysql_tquery(SQLHandle, query, "", "");
166 }
167
168 return 1;
169 }
170
171 if(dialogid == DIALOG_FURNITURE_BUY)
172 {
173 if(!response) return ShowHouseMenu(playerid);
174 new id = InHouse[playerid];
175 if(id == INVALID_HOUSE_ID) return SendClientMessage(playerid, 0xE74C3CFF, "You're not in a house.");
176 if(strcmp(HouseData[id][Owner], Player_GetName(playerid))) return SendClientMessage(playerid, 0xE74C3CFF, "You're not the owner of this house.");
177 if(HouseData[id][SalePrice] > 0) return SendClientMessage(playerid, 0xE74C3CFF, "You can't use this feature while the house is for sale.");
178 if(HouseFurnitures[listitem][Price] > GetPlayerMoney(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "You can't afford this furniture.");
179 GivePlayerMoney(playerid, -HouseFurnitures[listitem][Price]);
180 new Float: x, Float: y, Float: z;
181 GetPlayerPos(playerid, x, y, z);
182 GetXYInFrontOfPlayer(playerid, x, y, 3.0);
183 new objectid = CreateDynamicObject(HouseFurnitures[listitem][ModelID], x, y, z, 0.0, 0.0, 0.0, GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid)), query[256];
184 mysql_format(SQLHandle, query, sizeof(query), "INSERT INTO housefurnitures SET HouseID=%d, FurnitureID=%d, FurnitureX=%f, FurnitureY=%f, FurnitureZ=%f, FurnitureVW=%d, FurnitureInt=%d", id, listitem, x, y, z, GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid));
185 new Cache: add = mysql_query(SQLHandle, query), data[e_furniture];
186 data[SQLID] = cache_insert_id();
187 data[HouseID] = id;
188 data[ArrayID] = listitem;
189 data[furnitureX] = x;
190 data[furnitureY] = y;
191 data[furnitureZ] = z;
192 data[furnitureRX] = 0.0;
193 data[furnitureRY] = 0.0;
194 data[furnitureRZ] = 0.0;
195 cache_delete(add);
196 Streamer_SetArrayData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_EXTRA_ID, data);
197
198 EditingFurniture[playerid] = true;
199 EditDynamicObject(playerid, objectid);
200 return 1;
201 }
202
203 if(dialogid == DIALOG_FURNITURE_SELL)
204 {
205 if(!response) return 1;
206 new id = InHouse[playerid];
207 if(id == INVALID_HOUSE_ID) return SendClientMessage(playerid, 0xE74C3CFF, "You're not in a house.");
208 if(strcmp(HouseData[id][Owner], Player_GetName(playerid))) return SendClientMessage(playerid, 0xE74C3CFF, "You're not the owner of this house.");
209 if(HouseData[id][SalePrice] > 0) return SendClientMessage(playerid, 0xE74C3CFF, "You can't use this feature while the house is for sale.");
210 new objectid = GetPVarInt(playerid, "SelectedFurniture"), query[64], data[e_furniture];
211 Streamer_GetArrayData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_EXTRA_ID, data);
212 GivePlayerMoney(playerid, HouseFurnitures[ data[ArrayID] ][Price]);
213 mysql_format(SQLHandle, query, sizeof(query), "DELETE FROM housefurnitures WHERE ID=%d", data[SQLID]);
214 mysql_tquery(SQLHandle, query, "", "");
215 DestroyDynamicObject(objectid);
216 DeletePVar(playerid, "SelectedFurniture");
217 return 1;
218 }
219
220//
221public OnPlayerSelectDynamicObject(playerid, objectid, modelid, Float: x, Float: y, Float: z)
222{
223 switch(SelectMode[playerid])
224 {
225 case SELECT_MODE_EDIT:
226 {
227 EditingFurniture[playerid] = true;
228 EditDynamicObject(playerid, objectid);
229 }
230
231 case SELECT_MODE_SELL:
232 {
233 CancelEdit(playerid);
234
235 new data[e_furniture], string[128];
236 SetPVarInt(playerid, "SelectedFurniture", objectid);
237 Streamer_GetArrayData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_EXTRA_ID, data);
238 format(string, sizeof(string), "Do you want to sell your %s?\nYou'll get {2ECC71}$%s.", HouseFurnitures[ data[ArrayID] ][Name], convertNumber(HouseFurnitures[ data[ArrayID] ][Price]));
239 ShowPlayerDialog(playerid, DIALOG_FURNITURE_SELL, DIALOG_STYLE_MSGBOX, "Confirm Sale", string, "Sell", "Close");
240 }
241 }
242
243 SelectMode[playerid] = SELECT_MODE_NONE;
244 return 1;
245}
246
247public OnPlayerEditDynamicObject(playerid, objectid, response, Float: x, Float: y, Float: z, Float: rx, Float: ry, Float: rz)
248{
249 if(EditingFurniture[playerid])
250 {
251 switch(response)
252 {
253 case EDIT_RESPONSE_CANCEL:
254 {
255 new data[e_furniture];
256 Streamer_GetArrayData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_EXTRA_ID, data);
257 SetDynamicObjectPos(objectid, data[furnitureX], data[furnitureY], data[furnitureZ]);
258 SetDynamicObjectRot(objectid, data[furnitureRX], data[furnitureRY], data[furnitureRZ]);
259
260 EditingFurniture[playerid] = false;
261 }
262
263 case EDIT_RESPONSE_FINAL:
264 {
265 new data[e_furniture], query[256];
266 Streamer_GetArrayData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_EXTRA_ID, data);
267 data[furnitureX] = x;
268 data[furnitureY] = y;
269 data[furnitureZ] = z;
270 data[furnitureRX] = rx;
271 data[furnitureRY] = ry;
272 data[furnitureRZ] = rz;
273 SetDynamicObjectPos(objectid, data[furnitureX], data[furnitureY], data[furnitureZ]);
274 SetDynamicObjectRot(objectid, data[furnitureRX], data[furnitureRY], data[furnitureRZ]);
275 Streamer_SetArrayData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_EXTRA_ID, data);
276
277 mysql_format(SQLHandle, query, sizeof(query), "UPDATE housefurnitures SET FurnitureX=%f, FurnitureY=%f, FurnitureZ=%f, FurnitureRX=%f, FurnitureRY=%f, FurnitureRZ=%f WHERE ID=%d", data[furnitureX], data[furnitureY], data[furnitureZ], data[furnitureRX], data[furnitureRY], data[furnitureRZ], data[SQLID]);
278 mysql_tquery(SQLHandle, query, "", "");
279
280 EditingFurniture[playerid] = false;
281 }
282 }
283 }
284
285 return 1;
286}