· 7 years ago · Oct 16, 2018, 12:00 PM
1//---------------------------- Includes ----------------------------------------
2#include <a_samp>
3#include <sscanf2>
4#include <streamer>
5#include <zcmd>
6#include <foreach>
7#include <a_mysql>
8
9native WP_Hash(buffer[], len, const str[]);
10
11
12#define COLOR_RED 0xFF0000AA
13#define COLOR_BLUE 0x0000BBAA
14#define COLOR_YELLOW 0xFFFF00AA
15#define COLOR_TOMATO 0xFF6347AA
16#define COLOR_WHITE 0xFFFFFFAA
17#define COLOR_ORANGE 0xFF9900AA
18#define COLOR_GREY 0xAFAFAFAA
19#define COLOR_GREEN 0x33AA33AA
20#define COLOR_PINK 0xFFC0CBAA
21
22#define DIALOG_LOGIN 1
23#define DIALOG_REGISTER 2
24#define DIALOG_STATS 3
25
26
27enum playerInfo
28{
29 ID,
30 Name[MAX_PLAYER_NAME],
31 Password[129],
32 Score,
33 Money,
34 Kills,
35 Deaths,
36 Admin,
37 VIP
38};
39new PlayerData[MAX_PLAYERS][playerInfo];
40
41
42/*Tables
43CREATE TABLE IF NOT EXISTS `player` (`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,`name` varchar(25),`password` varchar(129),`score` int(11) NOT NULL DEFAULT '0',`money` int(11) NOT NULL DEFAULT '0',`kills` int(11) NOT NULL DEFAULT '0',`deaths` int(11) NOT NULL DEFAULT '0',`admin` int(11) NOT NULL DEFAULT '0',`vip` int(11) NOT NULL DEFAULT '0' */
44
45//SQL
46new PlayerIsLogged[MAX_PLAYERS];
47new connection = -1;
48main()
49{
50 print("\n==================================");
51 print(" MYSQL BASES GAMEMODE ");
52 print(" By ZigGamerX And Jithu ");
53 print(" 2018 ");
54 print("==================================\n");
55}
56
57public OnGameModeInit()
58{
59 SetGameModeText("Blank");
60
61 //MYSQL
62 mysql_log(LOG_ERROR | LOG_WARNING, LOG_TYPE_HTML);
63 connection = mysql_connect("localhost", "name", "db", "password");
64
65 "CREATE TABLE IF NOT EXISTS `player` (`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,`name` varchar(25),`password` varchar(129),`score` int(11) NOT NULL DEFAULT '0',`money` int(11) NOT NULL DEFAULT '0',`kills` int(11) NOT NULL DEFAULT '0',`deaths` int(11) NOT NULL DEFAULT '0',`admin` int(11) NOT NULL DEFAULT '0',`vip` int(11) NOT NULL DEFAULT '0'";
66 return 1;
67}
68
69public OnGameModeExit()
70{
71 for(new i = 0; i < MAX_PLAYERS; i++)
72 {
73 OnPlayerDisconnect(i, 1);
74 }
75 mysql_close(connection);
76 return 1;
77}
78
79public OnPlayerRequestClass(playerid, classid)
80{
81 return 1;
82}
83
84public OnPlayerConnect(playerid)
85{
86
87 //Reset player's stats for evading bugs
88 PlayerData[playerid][Score] = 0;
89 PlayerData[playerid][Money] = 0;
90 PlayerData[playerid][Kills] = 0;
91 PlayerData[playerid][Deaths] = 0;
92 PlayerData[playerid][Admin] = 0;
93 PlayerData[playerid][VIP] = 0;
94
95 new query[128];
96 GetPlayerName(playerid, PlayerData[playerid][Name], MAX_PLAYER_NAME);
97 // SELECT * FROM `tablename` WHERE `string` = '%e' , %e can be used only in MySQL.
98 mysql_format(connection, query, sizeof(query), "SELECT * FROM `player` WHERE `name` = '%e' LIMIT 1", PlayerData[playerid][Name]);
99 mysql_tquery(connection, query, "OnAccountCheck", "i", playerid); // function , mysql_tquery(connection handle, variable, function name, params, ....);
100
101 PlayerIsLogged[playerid] = 0;
102 return 1;
103}
104
105forward OnAccountCheck(playerid); // creating public function
106public OnAccountCheck(playerid)
107{
108 if(cache_num_rows() > 0) // This means that ' The data exists ', ' if(cache_num_rows() > 0) means if the data exists in the table
109 {
110 PlayerData[playerid][ID] = cache_get_field_content_int(0, "id");
111 cache_get_field_content(0, "password", PlayerData[playerid][Password], connection, 129);
112 PlayerData[playerid][Score] = cache_get_field_content_int(0, "score");
113 PlayerData[playerid][Money] = cache_get_field_content_int(0, "money");
114 PlayerData[playerid][Kills] = cache_get_field_content_int(0, "kills");
115 PlayerData[playerid][Deaths] = cache_get_field_content_int(0, "deaths");
116 PlayerData[playerid][Admin] = cache_get_field_content_int(0, "admin");
117 PlayerData[playerid][VIP] = cache_get_field_content_int(0, "vip");
118 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "LOGIN TYPE:", "Login", "Leave");
119 }
120 else // if the data doesn't exists
121 {
122 ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Register", "REGISTER TEXT:", "Register", "Leave");
123 }
124 return 1;
125}
126
127public OnPlayerDisconnect(playerid, reason)
128{
129 new query[128];
130 GetPlayerName(playerid, PlayerData[playerid][Name], MAX_PLAYER_NAME);
131 if(PlayerIsLogged[playerid] == 0) return 0;
132 mysql_format(connection, query, sizeof(query), "UPDATE `player` SET `score` = '%i',`money` = '%i',`kills` ='%i',`deaths` = '%i',`admin` = '%i',`vip` = '%i' WHERE `name` = '%e' LIMIT 1", GetPlayerScore(playerid), GetPlayerMoney(playerid), PlayerData[playerid][Kills], PlayerData[playerid][Deaths], PlayerData[playerid][Admin], PlayerData[playerid][VIP], PlayerData[playerid][Name]);
133 mysql_tquery(connection, query);
134 return 1;
135}
136
137public OnPlayerSpawn(playerid)
138{
139 return 1;
140}
141
142public OnPlayerDeath(playerid, killerid, reason)
143{
144
145 // Account luu du lieu
146 if(killerid == INVALID_PLAYER_ID) return 0;
147 if(PlayerIsLogged[killerid] == 0) return 0;
148 if(PlayerIsLogged[playerid] == 0) return 0;
149 PlayerData[killerid][Kills]++;
150 PlayerData[playerid][Deaths]++;
151 return 1;
152}
153
154public OnVehicleSpawn(vehicleid)
155{
156 return 1;
157}
158
159public OnPlayerCommandPerformed(playerid, cmdtext[], success)
160{
161 return 1;
162}
163
164public OnVehicleDeath(vehicleid, killerid)
165{
166 return 1;
167}
168
169public OnPlayerText(playerid, text[])
170{
171 return 1;
172}
173
174public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid,bodypart)
175{
176 return 1;
177}
178
179public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
180{
181 return 1;
182}
183
184public OnPlayerExitVehicle(playerid, vehicleid)
185{
186 return 1;
187}
188
189public OnPlayerStateChange(playerid, newstate, oldstate)
190{
191 return 1;
192}
193
194public OnPlayerEnterCheckpoint(playerid)
195{
196 return 1;
197}
198
199public OnPlayerLeaveCheckpoint(playerid)
200{
201 return 1;
202}
203
204public OnPlayerEnterRaceCheckpoint(playerid)
205{
206 return 1;
207}
208
209public OnPlayerLeaveRaceCheckpoint(playerid)
210{
211 return 1;
212}
213
214public OnRconCommand(cmd[])
215{
216 return 1;
217}
218
219public OnPlayerRequestSpawn(playerid)
220{
221 return 1;
222}
223
224public OnObjectMoved(objectid)
225{
226 return 1;
227}
228
229public OnPlayerObjectMoved(playerid, objectid)
230{
231 return 1;
232}
233
234public OnPlayerPickUpPickup(playerid, pickupid)
235{
236 return 1;
237}
238
239public OnVehicleMod(playerid, vehicleid, componentid)
240{
241 return 1;
242}
243
244public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
245{
246 return 1;
247}
248
249public OnVehicleRespray(playerid, vehicleid, color1, color2)
250{
251 return 1;
252}
253
254public OnPlayerSelectedMenuRow(playerid, row)
255{
256 return 1;
257}
258
259public OnPlayerExitedMenu(playerid)
260{
261 return 1;
262}
263
264public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
265{
266 return 1;
267}
268
269public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
270{
271 return 1;
272}
273
274public OnRconLoginAttempt(ip[], password[], success)
275{
276 return 1;
277}
278
279public OnPlayerUpdate(playerid)
280{
281 return 1;
282}
283
284public OnPlayerStreamIn(playerid, forplayerid)
285{
286 return 1;
287}
288
289public OnPlayerStreamOut(playerid, forplayerid)
290{
291 return 1;
292}
293
294public OnVehicleStreamIn(vehicleid, forplayerid)
295{
296 return 1;
297}
298
299public OnVehicleStreamOut(vehicleid, forplayerid)
300{
301 return 1;
302}
303
304public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
305{
306 switch(dialogid)
307 {
308 case DIALOG_LOGIN:
309 {
310 if(!response) return Kick(playerid);
311 new hashed_pass[129];
312 WP_Hash(hashed_pass, sizeof(hashed_pass), inputtext);
313 if(strcmp(hashed_pass, PlayerData[playerid][Password]) == 0)
314 {
315 PlayerIsLogged[playerid] = 1;
316 }
317 else
318 {
319 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "LOGIN TEXT:", "Login", "Leave");
320 }
321 }
322 case DIALOG_REGISTER:
323 {
324 if(!response) return Kick(playerid);
325 if(strlen(inputtext) <= 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Register", "REGISTER TEXT:", "Register", "Leave");
326 new query[256];
327 mysql_format(connection, query, sizeof(query), "INSERT INTO `player` (`name`, `password`) VALUES ('%e', '%e')", PlayerData[playerid][Name], PlayerData[playerid][Password]);
328 mysql_tquery(connection, query, "OnAccountCreate", "i", playerid);
329 }
330 }
331 return 1;
332}
333
334forward OnAccountCreate(playerid);
335public OnAccountCreate(playerid)
336{
337 PlayerData[playerid][ID] = cache_insert_id();
338 PlayerIsLogged[playerid] = 1; // sets the player to logged in.
339 return 1;
340}
341
342public OnPlayerClickPlayer(playerid, clickedplayerid, source)
343{
344 return 1;
345}
346
347stock GetName(playerid)
348{
349 new name[MAX_PLAYER_NAME];
350 GetPlayerName(playerid, name, sizeof(name));
351 return name;
352}
353
354CMD:admins(playerid, params[])
355{
356 new string[128];
357 for(new i = 0; i <MAX_PLAYERS; i++)
358 {
359 if(PlayerData[i][Admin] >= 1)
360 {
361 GetPlayerName(i, PlayerData[i][Name], MAX_PLAYER_NAME);
362 format(string, sizeof(string), "{FFFF00}------------------Online Administrators-------------------\nAdmin: %s, Level: %i", PlayerData[i][Name], PlayerData[i][Admin]);
363 SendClientMessage(playerid, -1, string);
364 }
365 else
366 {
367 SendClientMessage(playerid, -1, "{FF0000}No administrators online.");
368 }
369 }
370 return 1;
371}
372
373CMD:stats(playerid, params[])
374{
375 new playerID;
376 if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, -1, "{FFFF00}USAGE:/stats <playerid>");
377 if(IsPlayerConnected(playerID))
378 {
379 new string[256];
380 GetPlayerName(playerid, PlayerData[playerID][Name], MAX_PLAYER_NAME);
381 format(string, sizeof(string), "{FFFF00}Username: %s\nScore: %i\nMoney: %i\nKills: %i\nDeaths: %i,Admin Level: %i,VIP Level: %i", PlayerData[playerID][Name], GetPlayerScore(playerID), GetPlayerMoney(playerID), PlayerData[playerID][Kills], PlayerData[playerID][Deaths], PlayerData[playerID][Admin], PlayerData[playerID][VIP]);
382 ShowPlayerDialog(playerid, DIALOG_STATS, DIALOG_STYLE_MSGBOX, "Player's Stats", string, "Close", "");
383 }
384 return 1;
385}