· 8 years ago · Apr 15, 2018, 05:30 PM
1#include <a_samp>
2#include <sscanf2>
3#include <a_mysql>
4
5
6// -------------------------------
7#define HOST "127.0.0.1"
8#define USER "root"
9#define SENHA ""
10#define DATABASE "samp"
11
12new MySQL: MYSQLConnected;
13// -------------------------------
14#define DIALOG_LOGIN 1
15#define DIALOG_REGISTRO 2
16// -------------------------------
17#define TEMPO_LOGIN 30
18
19#define DEFAULTPOSX 1139.4064
20#define DEFAULTPOSY -1761.9249
21#define DEFAULTPOSZ 13.5955
22#define DEFAULTPOSA 4.5833
23// -------------------------------
24enum E_PLAYERS{
25 ID, // MYSQL ID, int
26 Nome[MAX_PLAYER_NAME], // string
27 Senha, // string
28 Money, // int
29 Skin, // int
30 Score, // int
31 Float: PosX, // float
32 Float: PosY, // float
33 Float: PosZ, // float
34 Float: PosA, // float
35 Interior, // int
36 VirtualWorld, // int
37
38 bool: pLogado, // se o player estiver logado
39}
40new Player[MAX_PLAYERS][E_PLAYERS];
41// --------------------------------
42
43main() {}
44
45public OnGameModeInit()
46{
47 MySQLConnect(); // Verifica se o banco de dados está ligado
48 CriarTabela(); // Crias as tabelas
49 return 1;
50}
51
52public OnGameModeExit()
53{
54 FecharServidor(); // Quando o servidor fechar todos os jogadores onlines vão sair como se fosse por contra propria
55 return 1;
56}
57
58public OnPlayerRequestClass(playerid, classid)
59{
60 SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
61 SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
62 SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
63 return 1;
64}
65
66public OnPlayerConnect(playerid)
67{
68 MYSQLConnected = mysql_connect(HOST, USER, SENHA, DATABASE);
69 GetPlayerName(playerid, Player[playerid][Nome], 20);
70
71 new Query[90];
72 mysql_format(MYSQLConnected, Query, sizeof(Query), "SELECT `ID`, `SENHA` FROM `Jogadores` WHERE `Player`='%s' ",Player[playerid][Nome]);
73 mysql_tquery(MYSQLConnected, Query, "VerificarContas", "i", playerid);
74
75 return 1;
76}
77
78public OnPlayerDisconnect(playerid, reason)
79{
80 SalvarDados(playerid);
81 return 1;
82}
83
84public OnPlayerSpawn(playerid)
85{
86 return 1;
87}
88
89public OnPlayerDeath(playerid, killerid, reason)
90{
91 return 1;
92}
93
94public OnVehicleSpawn(vehicleid)
95{
96 return 1;
97}
98
99public OnVehicleDeath(vehicleid, killerid)
100{
101 return 1;
102}
103
104public OnPlayerText(playerid, text[])
105{
106 return 1;
107}
108
109public OnPlayerCommandText(playerid, cmdtext[])
110{
111 if (strcmp("/mycommand", cmdtext, true, 10) == 0)
112 {
113 // Do something here
114 return 1;
115 }
116 return 0;
117}
118
119public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
120{
121 return 1;
122}
123
124public OnPlayerExitVehicle(playerid, vehicleid)
125{
126 return 1;
127}
128
129public OnPlayerStateChange(playerid, newstate, oldstate)
130{
131 return 1;
132}
133
134public OnPlayerEnterCheckpoint(playerid)
135{
136 return 1;
137}
138
139public OnPlayerLeaveCheckpoint(playerid)
140{
141 return 1;
142}
143
144public OnPlayerEnterRaceCheckpoint(playerid)
145{
146 return 1;
147}
148
149public OnPlayerLeaveRaceCheckpoint(playerid)
150{
151 return 1;
152}
153
154public OnRconCommand(cmd[])
155{
156 return 1;
157}
158
159public OnPlayerRequestSpawn(playerid)
160{
161 return 1;
162}
163
164public OnObjectMoved(objectid)
165{
166 return 1;
167}
168
169public OnPlayerObjectMoved(playerid, objectid)
170{
171 return 1;
172}
173
174public OnPlayerPickUpPickup(playerid, pickupid)
175{
176 return 1;
177}
178
179public OnVehicleMod(playerid, vehicleid, componentid)
180{
181 return 1;
182}
183
184public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
185{
186 return 1;
187}
188
189public OnVehicleRespray(playerid, vehicleid, color1, color2)
190{
191 return 1;
192}
193
194public OnPlayerSelectedMenuRow(playerid, row)
195{
196 return 1;
197}
198
199public OnPlayerExitedMenu(playerid)
200{
201 return 1;
202}
203
204public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
205{
206 return 1;
207}
208
209public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
210{
211 return 1;
212}
213
214public OnRconLoginAttempt(ip[], password[], success)
215{
216 return 1;
217}
218
219public OnPlayerUpdate(playerid)
220{
221 return 1;
222}
223
224public OnPlayerStreamIn(playerid, forplayerid)
225{
226 return 1;
227}
228
229public OnPlayerStreamOut(playerid, forplayerid)
230{
231 return 1;
232}
233
234public OnVehicleStreamIn(vehicleid, forplayerid)
235{
236 return 1;
237}
238
239public OnVehicleStreamOut(vehicleid, forplayerid)
240{
241 return 1;
242}
243
244public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
245{
246 GetPlayerName(playerid, Player[playerid][Nome], 20);
247 new Dialog[240];
248
249 if(dialogid == DIALOG_REGISTRO){
250 if(!response) return Kick(playerid);
251
252 if(strlen(inputtext) < 4 || strlen(inputtext) > 20){
253 SendClientMessage(playerid, -1,"{0xFF0000AA}[ERRO]Apenas entre 4 a 20 Caracteres");
254
255 format(Dialog, sizeof(Dialog), "{0xFFFFFFAA}%s\n{0x80FF00AA}STATUS: NÃO REGISTRADA", Player[playerid][Nome]);
256 ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_INPUT, "REGISTRO", Dialog, "Confirmar", "Sair");
257 }else{
258
259 new Query[256];
260 mysql_format(MYSQLConnected, Query, sizeof(Query), "INSERT INTO `Jogadores`(`Player`,`Senha`) VALUES('%s','%s')", Player[playerid][Nome], inputtext);
261 mysql_tquery(MYSQLConnected, Query, "DadosRegistrados", "i", playerid);
262
263 RegistrarDados(playerid);
264 SetSpawnInfo(playerid, 0, Player[playerid][Skin], Player[playerid][PosX], Player[playerid][PosY], Player[playerid][PosZ], Player[playerid][PosA], 0, 0, 0, 0, 0, 0);
265 }
266 }
267
268 if(dialogid == DIALOG_LOGIN){
269
270 if(!response) return Kick(playerid);
271
272 if(!strcmp(Player[playerid][Senha], inputtext, true, 20)){
273 new Query[70];
274 mysql_format(MYSQLConnected, Query, sizeof(Query), "SELECT * FROM `Jogadores` Player='%s'", Player[playerid][Nome]);
275 mysql_tquery(MYSQLConnected, Query, "CarregarContas", "d", playerid);
276 SetSpawnInfo(playerid, 0, Player[playerid][Skin], Player[playerid][PosX], Player[playerid][PosY], Player[playerid][PosZ], Player[playerid][PosA], 0, 0, 0, 0, 0, 0);
277 }else{
278 SendClientMessage(playerid, -1,"{0xFF0000AA}[ERRO]Senha incorreta");
279 format(Dialog, sizeof(Dialog), "{0xFFFFFFAA}%s\n{0xFF0000AA}STATUS: Registrado", Player[playerid][Nome]);
280 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", Dialog, "Confirmar", "Sair");
281 }
282 }
283
284 // == //
285 return 1;
286}
287
288public OnPlayerClickPlayer(playerid, clickedplayerid, source)
289{
290 return 1;
291}
292
293//=========================
294forward MySQLConnect();
295public MySQLConnect(){
296
297
298 MYSQLConnected = mysql_connect(HOST, USER, SENHA, DATABASE);
299 if (MYSQLConnected == MYSQL_INVALID_HANDLE || mysql_errno(MYSQLConnected) != 0){
300 printf("[MySQL]Conexão com o banco de dados falhou");
301 SendRconCommand("exit");
302 }else{
303 printf("[MySQL]Conectado ao banco de dados com sucesso");
304 }
305 return 1;
306}
307
308// --------------------------
309forward FecharServidor();
310public FecharServidor(){
311
312 for (new i = 0, j = GetPlayerPoolSize(); i <= j; i++){
313 if (IsPlayerConnected(i)){
314 OnPlayerDisconnect(i, 1);
315 }
316 }
317 mysql_close(MYSQLConnected);
318 return 1;
319}
320// -------------------------
321forward CriarTabela();
322public CriarTabela(){
323 MYSQLConnected = mysql_connect(HOST, USER, SENHA, DATABASE);
324 mysql_query(MYSQLConnected ,"CREATE TABLE IF NOT EXISTS Jogadores(ID INT AUTO_INCREMENT PRIMARY KEY,Player VARCHAR(24),Senha VARCHAR(24), Dinheiro INT(20), Skin INT(20), Score INT(20), PosX FLOAT(20), PosY FLOAT(20), PosZ FLOAT(20), PosA FLOAT(20), Interior INT(10), VirtualWorld INT(10))");
325 return 1;
326}
327// -------------------------
328forward VerificarContas(playerid);
329public VerificarContas(playerid){
330 new Dialog[240];
331
332 if(cache_num_rows() > 0){
333 cache_get_value(0, "Senha", Player[playerid][Senha]);
334 format(Dialog, sizeof(Dialog), "{0xFFFFFFAA}%s\n{0xFF0000AA}STATUS: Registrado", Player[playerid][Nome]);
335 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", Dialog, "Confirmar", "Sair");
336 }else{
337 format(Dialog, sizeof(Dialog), "{0xFFFFFFAA}%s\n{0x80FF00AA}STATUS: NÃO REGISTRADA", Player[playerid][Nome]);
338 ShowPlayerDialog(playerid, DIALOG_REGISTRO, DIALOG_STYLE_INPUT, "Registro", Dialog, "Confirmar", "Sair");
339 }
340 return 1;
341}
342// --------------------------
343forward DadosRegistrados(playerid);
344public DadosRegistrados(playerid){
345 Player[playerid][ID] = cache_insert_id();
346 printf("CONTA ID %d REGISTRADA", Player[playerid][ID]);
347 return 1;
348}
349// --------------------------
350forward CarregarContas(playerid);
351public CarregarContas(playerid){
352 cache_get_value_int(0, "ID", Player[playerid][ID]);
353 cache_get_value_int(0, "Skin", Player[playerid][Skin]);
354 cache_get_value_int(0, "Score", Player[playerid][Score]);
355 cache_get_value_int(0, "Dinheiro", Player[playerid][Money]);
356 cache_get_value_int(0, "Interior", Player[playerid][Interior]);
357 cache_get_value_int(0, "VirtualWorld", Player[playerid][VirtualWorld]);
358
359 cache_get_value_float(0, "PosX", Player[playerid][PosX]);
360 cache_get_value_float(0, "PosY", Player[playerid][PosY]);
361 cache_get_value_float(0, "PosZ", Player[playerid][PosZ]);
362 cache_get_value_float(0, "PosA", Player[playerid][PosA]);
363
364 CarregarDados(playerid);
365 return 1;
366}
367// ----------------------------
368stock RegistrarDados(playerid){
369 Player[playerid][Skin] = 23;
370 Player[playerid][Score] = 0;
371 Player[playerid][Money] = 1500;
372 Player[playerid][Interior] = 0;
373 Player[playerid][VirtualWorld] = 0;
374
375 Player[playerid][PosX] = DEFAULTPOSX;
376 Player[playerid][PosY] = DEFAULTPOSY;
377 Player[playerid][PosZ] = DEFAULTPOSZ;
378 Player[playerid][PosA] = DEFAULTPOSA;
379 CarregarDados(playerid);
380 return 1;
381}
382// -----------------------------
383stock CarregarDados(playerid){
384 Player[playerid][pLogado] = true;
385 SetPlayerScore(playerid, Player[playerid][Score]);
386 GivePlayerMoney(playerid, Player[playerid][Money]);
387 SetPlayerInterior(playerid, Player[playerid][Interior]);
388 SetPlayerVirtualWorld(playerid, Player[playerid][VirtualWorld]);
389
390 SetSpawnInfo(playerid, 0, Player[playerid][Skin], Player[playerid][PosX], Player[playerid][PosY], Player[playerid][PosZ], Player[playerid][PosA], 0, 0, 0, 0, 0, 0);
391 return 1;
392}
393// ------------------------------
394stock SalvarDados(playerid){
395 Player[playerid][Score] = GetPlayerScore(playerid);
396 Player[playerid][Skin] = GetPlayerSkin(playerid);
397 Player[playerid][Money] = GetPlayerMoney(playerid);
398 Player[playerid][Interior] = GetPlayerInterior(playerid);
399 Player[playerid][VirtualWorld] = GetPlayerVirtualWorld(playerid);
400
401 GetPlayerPos(playerid ,Player[playerid][PosX], Player[playerid][PosY], Player[playerid][PosZ]);
402 GetPlayerFacingAngle(playerid, Player[playerid][PosA]);
403 GetPlayerName(playerid, Player[playerid][Nome], 20);
404
405 new Query[350];
406 mysql_format(MYSQLConnected, Query, sizeof(Query), "UPDATE `Jogadores` SET `Player`='%s', `Dinheiro`=%d, `Skin`=%d, `Score`=%d, `PosY`='%f',`PosZ`='%f',`PosX`='%f',`PosA`='%f', `Interior`=%d, `VirtualWorld`=%d WHERE `ID`=%d",
407 Player[playerid][Nome],
408 Player[playerid][Money],
409 Player[playerid][Skin],
410 Player[playerid][Score],
411 Player[playerid][PosX],
412 Player[playerid][PosY],
413 Player[playerid][PosZ],
414 Player[playerid][PosA],
415 Player[playerid][Interior],
416 Player[playerid][VirtualWorld],
417 Player[playerid][ID]);
418
419 mysql_tquery(MYSQLConnected, Query, "DadosSalvos", "d", playerid);
420
421 Player[playerid][Money] = 0;
422 Player[playerid][Score] = 0;
423 Player[playerid][Skin] = 0;
424 Player[playerid][PosX] = 0;
425 Player[playerid][PosY] = 0;
426 Player[playerid][PosZ] = 0;
427 Player[playerid][PosA] = 0;
428 Player[playerid][Interior] = 0;
429 Player[playerid][VirtualWorld] = 0;
430 Player[playerid][pLogado] = false;
431 DadosSalvos(playerid);
432 return 1;
433
434}
435// --------------------------------------------------
436forward DadosSalvos(playerid);
437public DadosSalvos(playerid) return printf("-> Conta salva ID: %d", Player[playerid][ID]);