· 7 years ago · Oct 05, 2018, 06:52 AM
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//enumeration where you store your player data / any data.
27enum playerInfo
28{
29 ID,
30 Name[MAX_PLAYER_NAME],
31 Password[129], // let it be 129, don't change it
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 //Enable/Disables & Others
60 SetGameModeText("Blank");
61
62 //MYSQL
63 mysql_log(LOG_ERROR | LOG_WARNING, LOG_TYPE_HTML); // for checking logs
64 connection = mysql_connect("localhost", "name", "db", "password");
65
66 "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'";
67 return 1;
68}
69
70public OnGameModeExit()
71{
72 for(new i = 0; i < MAX_PLAYERS; i++) // loop ahhh fucking part
73 {
74 OnPlayerDisconnect(i, 1); // it will be like the player is disconnecting.
75 }
76 mysql_close(connection); // closes the connection handle
77 return 1;
78}
79
80public OnPlayerRequestClass(playerid, classid)
81{
82 return 1;
83}
84
85public OnPlayerConnect(playerid)
86{
87
88 //Reset player's stats for evading bugs
89 PlayerData[playerid][Score] = 0;
90 PlayerData[playerid][Money] = 0;
91 PlayerData[playerid][Kills] = 0;
92 PlayerData[playerid][Deaths] = 0;
93 PlayerData[playerid][Admin] = 0;
94 PlayerData[playerid][VIP] = 0;
95
96 new query[128];
97 GetPlayerName(playerid, PlayerData[playerid][Name], MAX_PLAYER_NAME);
98 // SELECT * FROM `tablename` WHERE `string` = '%e' , %e can be used only in MySQL.
99 mysql_format(connection, query, sizeof(query), "SELECT * FROM `player` WHERE `name` = '%e' LIMIT 1", PlayerData[playerid][Name]);
100 mysql_tquery(connection, query, "OnAccountCheck", "i", playerid); // function , mysql_tquery(connection handle, variable, function name, params, ....);
101
102 PlayerIsLogged[playerid] = 0;
103 return 1;
104}
105
106forward OnAccountCheck(playerid); // creating public function
107public OnAccountCheck(playerid)
108{
109 if(cache_num_rows() > 0) // This means that ' The data exists ', ' if(cache_num_rows() > 0) means if the data exists in the table
110 {
111 PlayerData[playerid][ID] = cache_get_field_content_int(0, "id");
112 cache_get_field_content(0, "password", PlayerData[playerid][Password], connection, 129);
113 PlayerData[playerid][Score] = cache_get_field_content_int(0, "score");
114 PlayerData[playerid][Money] = cache_get_field_content_int(0, "money");
115 PlayerData[playerid][Kills] = cache_get_field_content_int(0, "kills");
116 PlayerData[playerid][Deaths] = cache_get_field_content_int(0, "deaths");
117 PlayerData[playerid][Admin] = cache_get_field_content_int(0, "admin");
118 PlayerData[playerid][VIP] = cache_get_field_content_int(0, "vip");
119 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "LOGIN TYPE:", "Login", "Leave");
120 }
121 else // if the data doesn't exists
122 {
123 ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Register", "REGISTER TEXT:", "Register", "Leave");
124 }
125 return 1;
126}
127
128public OnPlayerDisconnect(playerid, reason)
129{
130 //MYSQL ACCCOUNT
131 new query[128];
132 GetPlayerName(playerid, PlayerData[playerid][Name], MAX_PLAYER_NAME);
133 if(PlayerIsLogged[playerid] == 0) return 0;
134 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]);
135 mysql_tquery(connection, query);
136 return 1;
137}
138
139public OnPlayerSpawn(playerid)
140{
141 return 1;
142}
143
144public OnPlayerDeath(playerid, killerid, reason)
145{
146
147 //mysql Account save
148 if(killerid == INVALID_PLAYER_ID) return 0;
149 if(PlayerIsLogged[killerid] == 0) return 0;
150 if(PlayerIsLogged[playerid] == 0) return 0;
151 PlayerData[killerid][Kills]++;
152 PlayerData[playerid][Deaths]++;
153 return 1;
154}
155
156public OnVehicleSpawn(vehicleid)
157{
158 return 1;
159}
160
161public OnPlayerCommandPerformed(playerid, cmdtext[], success)
162{
163 return 1;
164}
165
166public OnVehicleDeath(vehicleid, killerid)
167{
168 return 1;
169}
170
171public OnPlayerText(playerid, text[])
172{
173 return 1;
174}
175
176public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid,bodypart)
177{
178 return 1;
179}
180
181public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
182{
183 return 1;
184}
185
186public OnPlayerExitVehicle(playerid, vehicleid)
187{
188 return 1;
189}
190
191public OnPlayerStateChange(playerid, newstate, oldstate)
192{
193 return 1;
194}
195
196public OnPlayerEnterCheckpoint(playerid)
197{
198 return 1;
199}
200
201public OnPlayerLeaveCheckpoint(playerid)
202{
203 return 1;
204}
205
206public OnPlayerEnterRaceCheckpoint(playerid)
207{
208 return 1;
209}
210
211public OnPlayerLeaveRaceCheckpoint(playerid)
212{
213 return 1;
214}
215
216public OnRconCommand(cmd[])
217{
218 return 1;
219}
220
221public OnPlayerRequestSpawn(playerid)
222{
223 return 1;
224}
225
226public OnObjectMoved(objectid)
227{
228 return 1;
229}
230
231public OnPlayerObjectMoved(playerid, objectid)
232{
233 return 1;
234}
235
236public OnPlayerPickUpPickup(playerid, pickupid)
237{
238 return 1;
239}
240
241public OnVehicleMod(playerid, vehicleid, componentid)
242{
243 return 1;
244}
245
246public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
247{
248 return 1;
249}
250
251public OnVehicleRespray(playerid, vehicleid, color1, color2)
252{
253 return 1;
254}
255
256public OnPlayerSelectedMenuRow(playerid, row)
257{
258 return 1;
259}
260
261public OnPlayerExitedMenu(playerid)
262{
263 return 1;
264}
265
266public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
267{
268 return 1;
269}
270
271public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
272{
273 return 1;
274}
275
276public OnRconLoginAttempt(ip[], password[], success)
277{
278 return 1;
279}
280
281public OnPlayerUpdate(playerid)
282{
283 return 1;
284}
285
286public OnPlayerStreamIn(playerid, forplayerid)
287{
288 return 1;
289}
290
291public OnPlayerStreamOut(playerid, forplayerid)
292{
293 return 1;
294}
295
296public OnVehicleStreamIn(vehicleid, forplayerid)
297{
298 return 1;
299}
300
301public OnVehicleStreamOut(vehicleid, forplayerid)
302{
303 return 1;
304}
305
306public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
307{
308 //Account MYSQL
309 switch(dialogid)
310 {
311 case DIALOG_LOGIN:
312 {
313 if(!response) return Kick(playerid);
314 new hashed_pass[129];
315 WP_Hash(hashed_pass, sizeof(hashed_pass), inputtext);
316 if(strcmp(hashed_pass, PlayerData[playerid][Password]) == 0) // if the player types correct password
317 {
318 PlayerIsLogged[playerid] = 1; // the player is logged in,
319 }
320 else // if the player types wrong password
321 {
322 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "LOGIN TEXT:", "Login", "Leave");
323 }
324 }
325 case DIALOG_REGISTER:
326 {
327 if(!response) return Kick(playerid);
328 if(strlen(inputtext) <= 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Register", "REGISTER TEXT:", "Register", "Leave");
329 new query[256];
330 mysql_format(connection, query, sizeof(query), "INSERT INTO `player` (`name`, `password`) VALUES ('%e', '%e')", PlayerData[playerid][Name], PlayerData[playerid][Password]);
331 mysql_tquery(connection, query, "OnAccountCreate", "i", playerid);
332 }
333 }
334 return 1;
335}
336
337forward OnAccountCreate(playerid);
338public OnAccountCreate(playerid)
339{
340 PlayerData[playerid][ID] = cache_insert_id();
341 PlayerIsLogged[playerid] = 1; // sets the player to logged in.
342 return 1;
343}
344
345public OnPlayerClickPlayer(playerid, clickedplayerid, source)
346{
347 return 1;
348}
349
350stock GetName(playerid)
351{
352 new name[MAX_PLAYER_NAME];
353 GetPlayerName(playerid, name, sizeof(name));
354 return name;
355}
356
357
358//Commands
359CMD:admins(playerid, params[])
360{
361 new string[128];
362 for(new i = 0; i <MAX_PLAYERS; i++)
363 {
364 if(PlayerData[i][Admin] >= 1)
365 {
366 GetPlayerName(i, PlayerData[i][Name], MAX_PLAYER_NAME);
367 format(string, sizeof(string), "{FFFF00}------------------Online Administrators-------------------\nAdmin: %s, Level: %i", PlayerData[i][Name], PlayerData[i][Admin]);
368 SendClientMessage(playerid, -1, string);
369 }
370 else
371 {
372 SendClientMessage(playerid, -1, "{FF0000}No administrators online.");
373 }
374 }
375 return 1;
376}
377
378CMD:stats(playerid, params[])
379{
380 new playerID;
381 if(sscanf(params, "i", playerID)) return SendClientMessage(playerid, -1, "{FFFF00}Usage: /stats <playerid>");
382 if(IsPlayerConnected(playerID))
383 {
384 new string[256];
385 GetPlayerName(playerid, PlayerData[playerID][Name], MAX_PLAYER_NAME);
386 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]);
387 ShowPlayerDialog(playerid, DIALOG_STATS, DIALOG_STYLE_MSGBOX, "Player's Stats", string, "Close", "");
388 }
389 return 1;
390}