· 5 years ago · Jun 25, 2020, 03:50 PM
1#include "a_samp"
2#include "inc/a_mysql"
3#include "inc/foreach"
4#include "inc/streamer"
5#include "inc/sscanf2"
6#include "inc/Pawn.CMD"
7
8main() {}
9
10#define MYSQL_HOST "127.0.0.1"
11#define MYSQL_USER "root"
12#define MYSQL_PASSWORD ""
13#define MYSQL_DATABASE "mojabaza"
14
15new MySQL:SQL;
16
17#define Pub:%0(%1) public %0(%1)
18#define FuncPub:%0(%1) forward %0(%1); public %0(%1)
19
20#define MAPICON_HOUSE_GREEN 31
21#define MAPICON_HOUSE_RED 32
22
23#define PICKUP_HOUSE_BLUE 1272
24#define PICKUP_HOUSE_GREEN 1273
25#define PICKUP_HOUSE_RED 19522
26#define PICKUP_HOUSE_ORANGE 19523
27#define PICKUP_HOUSE_YELLOW 19524
28
29#define MAX_HOUSES 100
30
31enum HouseData
32{
33 HouseID,
34 HouseOwner[24],
35 HousePrice,
36 Float:HouseEnterX,
37 Float:HouseEnterY,
38 Float:HouseEnterZ,
39 Float:HouseEnterA,
40 Float:HouseExitX,
41 Float:HouseExitY,
42 Float:HouseExitZ,
43 Float:HouseExitA,
44 HouseInterior,
45 HousePickup,
46 HouseMapIcon,
47 Text3D:HouseLabel,
48 bool:HouseBuying
49};
50new HouseInfo[MAX_HOUSES][HouseData];
51
52new Iterator:Houses<MAX_HOUSES>;
53
54Pub:OnGameModeInit()
55{
56 new MySQLOpt:option_id = mysql_init_options();
57
58 mysql_set_option(option_id, AUTO_RECONNECT, true);
59
60 SQL = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, option_id);
61
62 if(SQL == MYSQL_INVALID_HANDLE || mysql_errno(SQL) != 0)
63 {
64 print("[MYSQL - BŁĄD] Nie można było połączyć się z bazą danych! Wyłączam serwer...");
65 SendRconCommand("exit");
66 return 1;
67 }
68 else
69 {
70 print("[MYSQL] Połączenie z bazą danych została nawiązana!");
71 }
72
73 SetupHouseTable();
74
75 //mysql_tquery(SQL, "SELECT * FROM houses", "WczytajDom");
76 mysql_tquery(SQL, "SELECT MAX(ID) FROM houses", "WczytajDom");
77
78 return 1;
79}
80
81Pub:OnGameModeExit()
82{
83 mysql_close(SQL);
84 return 1;
85}
86
87Pub:OnPlayerSpawn(playerid)
88{
89 SetPlayerPos(playerid, 1258.7352, -2036.7100, 59.4561);
90 return 1;
91}
92
93FuncPub:StworzDom(playerid, int, cena)
94{
95 new house = Iter_Free(Houses);
96
97 HouseInfo[house][HouseInterior] = int;
98 HouseInfo[house][HousePrice] = cena;
99
100 new Float:hX, Float:hY, Float:hZ, Float:hA;
101
102 GetPlayerPos(playerid, hX, hY, hZ);
103 GetPlayerFacingAngle(playerid, hA);
104
105 HouseInfo[house][HouseEnterX] = hX;
106 HouseInfo[house][HouseEnterY] = hY;
107 HouseInfo[house][HouseEnterZ] = hZ;
108 HouseInfo[house][HouseEnterA] = hA;
109
110 HouseInfo[house][HouseMapIcon] = CreateDynamicMapIcon(HouseInfo[house][HouseEnterX], HouseInfo[house][HouseEnterY], HouseInfo[house][HouseEnterZ], MAPICON_HOUSE_GREEN, -1);
111 HouseInfo[house][HousePickup] = CreatePickup(PICKUP_HOUSE_GREEN, 1, HouseInfo[house][HouseEnterX], HouseInfo[house][HouseEnterY], HouseInfo[house][HouseEnterZ], 0);
112
113 new query[256];
114
115 // Use the ID from Iter_Free instead of AUTO_INCREMENT
116 mysql_format(SQL, query, sizeof(query), "INSERT INTO houses (ID, Buying, Owner, Price, EnterX, EnterY, EnterZ, EnterA, ExitX, ExitY, ExitZ, ExitA, Interior) VALUES \
117 (%d, %d, %d, %d, %f, %f, %f, %f, %f, %f, %f, %f, %d)", house,
118 HouseInfo[house][HouseBuying], HouseInfo[house][HouseOwner], HouseInfo[house][HousePrice], HouseInfo[house][HouseEnterX], HouseInfo[house][HouseEnterY], HouseInfo[house][HouseEnterZ],
119 HouseInfo[house][HouseEnterA], HouseInfo[house][HouseExitX], HouseInfo[house][HouseExitY], HouseInfo[house][HouseExitZ], HouseInfo[house][HouseExitA], HouseInfo[house][HouseInterior]);
120 mysql_tquery(SQL, query);
121
122 HouseInfo[house][HouseID] = house;
123
124 new string[128];
125
126 format(string, sizeof(string), "Dom jest do kupienia!\nDom ID: %d\nWłaściciel: Brak\nCena: $%d", house, HouseInfo[house][HousePrice]);
127 HouseInfo[house][HouseLabel] = Create3DTextLabel(string, -1, HouseInfo[house][HouseEnterX], HouseInfo[house][HouseEnterY], HouseInfo[house][HouseEnterZ], 10.0, 0);
128
129 new komunikat[128];
130
131 format(komunikat, sizeof(komunikat), "Stworzyłeś dom o interiorze %d, cena $%d. Dom UID: %d.", int, cena, house);
132 SendClientMessageToAll(-1, komunikat);
133
134 Iter_Add(Houses, house);
135
136 return 1;
137}
138
139FuncPub:WczytajDom()
140{
141 new rows = cache_num_rows();
142
143 if(rows) printf("Liczba domów: %d", rows);
144 else print("Liczba domów: BRAK");
145
146 new string[128];
147
148 if(rows > 0)
149 {
150 for(new i = 0; i < rows; i++)
151 {
152 cache_get_value_int(i, "ID", HouseInfo[i][HouseID]);
153 cache_get_value_int(i, "Price", HouseInfo[i][HousePrice]);
154 cache_get_value_name(i, "Owner", HouseInfo[i][HouseOwner], 24);
155 cache_get_value_float(i, "EnterX", HouseInfo[i][HouseEnterX]);
156 cache_get_value_float(i, "EnterY", HouseInfo[i][HouseEnterY]);
157 cache_get_value_float(i, "EnterZ", HouseInfo[i][HouseEnterZ]);
158 cache_get_value_float(i, "EnterA", HouseInfo[i][HouseEnterA]);
159 cache_get_value_float(i, "ExitX", HouseInfo[i][HouseExitX]);
160 cache_get_value_float(i, "ExitY", HouseInfo[i][HouseExitY]);
161 cache_get_value_float(i, "ExitZ", HouseInfo[i][HouseExitZ]);
162 cache_get_value_float(i, "ExitA", HouseInfo[i][HouseExitA]);
163 cache_get_value_int(i, "Interior", HouseInfo[i][HouseInterior]);
164 cache_get_value_int(i, "Buying", HouseInfo[i][HouseBuying]);
165
166 if(HouseInfo[i][HouseBuying] == true)
167 {
168 //Kupiony
169 HouseInfo[i][HouseMapIcon] = CreateDynamicMapIcon(HouseInfo[i][HouseEnterX], HouseInfo[i][HouseEnterY], HouseInfo[i][HouseEnterZ], MAPICON_HOUSE_RED, -1);
170 HouseInfo[i][HousePickup] = CreatePickup(PICKUP_HOUSE_RED, 2, HouseInfo[i][HouseEnterX], HouseInfo[i][HouseEnterY], HouseInfo[i][HouseEnterZ], 0);
171
172 format(string, sizeof(string), "Dom jest kupiony!\nDom ID: %d\nWłaściciel: %s\nWartość: $%d", HouseInfo[i][HouseID], HouseInfo[i][HouseOwner], HouseInfo[i][HousePrice]);
173 }
174 else
175 {
176 //Nie kupiony
177 HouseInfo[i][HouseMapIcon] = CreateDynamicMapIcon(HouseInfo[i][HouseEnterX], HouseInfo[i][HouseEnterY], HouseInfo[i][HouseEnterZ], MAPICON_HOUSE_GREEN, -1);
178 HouseInfo[i][HousePickup] = CreatePickup(PICKUP_HOUSE_GREEN, 2, HouseInfo[i][HouseEnterX], HouseInfo[i][HouseEnterY], HouseInfo[i][HouseEnterZ], 0);
179
180 format(string, sizeof(string), "Dom jest do kupienia!\nDom ID: %d\nWłaściciel: Brak\nCena: $%d", HouseInfo[i][HouseID], HouseInfo[i][HousePrice]);
181 }
182
183 HouseInfo[i][HouseLabel] = Create3DTextLabel(string, -1, HouseInfo[i][HouseEnterX], HouseInfo[i][HouseEnterY], HouseInfo[i][HouseEnterZ], 10.0, 0);
184
185 Iter_Add(Houses, i);
186 }
187 }
188
189 return 1;
190}
191
192CMD:stworzdom(playerid, params[])
193{
194 new int, cena;
195
196 if(sscanf(params, "dd", int, cena)) return SendClientMessage(playerid, -1, "Użyj: /stworzdom [Interior] [Cena]");
197
198 StworzDom(playerid, int, cena);
199
200 return 1;
201}
202
203SetupHouseTable()
204{
205 // Remove Auto Increment
206 mysql_tquery(SQL, "CREATE TABLE IF NOT EXISTS `houses` (\
207 `ID` int(11) NOT NULL,\
208 `Price` int(11) NOT NULL,\
209 `Owner` varchar(24) NOT NULL default '-',\
210 `EnterX` float NOT NULL,\
211 `EnterY` float NOT NULL,\
212 `EnterZ` float NOT NULL,\
213 `EnterA` float NOT NULL,\
214 `ExitX` float NOT NULL,\
215 `ExitY` float NOT NULL,\
216 `ExitZ` float NOT NULL,\
217 `ExitA` float NOT NULL,\
218 `Interior` int(11) NOT NULL,\
219 `Buying` int(11) NOT NULL,\
220 PRIMARY KEY (`ID`))");
221 return 1;
222}