· 8 years ago · Jun 29, 2018, 09:08 AM
1// For public use
2
3#include <a_samp>
4#include <zcmd>
5#include <sscanf2>
6#include <streamer>
7
8#undef MAX_VEHICLES
9#define MAX_VEHICLES 100
10#define MAX_GAS 50
11#define DATABASE "voiture.db"
12
13new DB:voiture;
14new gas = 0;
15new FuelAllowed[MAX_PLAYERS] = 0;
16new PlayerText:td_fuel[MAX_PLAYERS];
17new ptimer[MAX_PLAYERS];
18new vehs=1;
19new engine, lights, alarm, doors, bonnet, boot, objective;
20
21enum ginfo
22{
23 ID,
24 Float:X,
25 Float:Y,
26 Float:Z,
27 Text3D:lab,
28 CP
29}
30new GasInfo[MAX_GAS][ginfo];
31
32enum vinfo
33{
34 ID,
35 vowner[24],
36 Model,
37 Float:X,
38 Float:Y,
39 Float:Z,
40 Float:A,
41 Fuel,
42 Engine,
43 Col1,
44 Col2,
45 Plate[15],
46 Prix,
47 Text3D:vtext,
48 Locked
49};
50
51new VehicleInfo[MAX_VEHICLES][vinfo];
52
53
54public OnPlayerConnect(playerid)
55{
56 td_fuel[playerid] = PlayerText:CreatePlayerTextDraw(playerid, 45,324,"Fuel: 100");
57 PlayerTextDrawBackgroundColor(playerid, td_fuel[playerid],0x00000033);
58 PlayerTextDrawFont(playerid, td_fuel[playerid],3);
59 PlayerTextDrawLetterSize(playerid, td_fuel[playerid],0.699999,1.700000);
60 PlayerTextDrawColor(playerid, td_fuel[playerid],0x000000ff);
61 PlayerTextDrawSetShadow(playerid, td_fuel[playerid],3);
62 ptimer[playerid] = SetTimerEx("PlayerUpdate", 1000, true, "i", playerid);
63 return 1;
64}
65
66public OnPlayerDisconnect(playerid, reason)
67{
68 KillTimer(ptimer[playerid]);
69 PlayerTextDrawDestroy(playerid, td_fuel[playerid]);
70 return 1;
71}
72
73public OnPlayerExitVehicle(playerid, vehicleid)
74{
75 FuelAllowed[playerid] = 0;
76 return 1;
77}
78
79public OnFilterScriptInit()
80{
81 voiture = db_open(DATABASE);
82
83 if((voiture = db_open("voiture.db")) == DB:0)
84 {
85 print("Failed to open a connection to \"voiture.db\".");
86 SendRconCommand("exit");
87 }
88 else
89 {
90
91 db_free_result(db_query(voiture, "CREATE TABLE IF NOT EXISTS `vehicle` (`id` INTEGER PRIMARY KEY, `model` integer, `vowner` varchar(24), `x` float, `y` float, `z` float, `a` float, `col1` integer, `col2` integer, `fuel` integer, `engine` integer, `plate` varchar(15), `prix` integer, `locked` integer)"));
92 db_free_result(db_query(voiture, "CREATE TABLE IF NOT EXISTS `gas` (`id` INTEGER PRIMARY KEY, `x` float, `y` float, `z` float)"));
93
94 print("Successfully created a connection to \"voiture.db\".");
95 }
96
97
98 LoadCarss();
99 LoadGas();
100
101 SetTimer("GlobalVeh", 5000, true);
102
103 return 1;
104}
105
106public OnPlayerStateChange(playerid, newstate, oldstate)
107{
108 if(newstate == PLAYER_STATE_ONFOOT)
109 {
110 PlayerTextDrawHide(playerid,td_fuel[playerid]);
111 }
112 if(newstate == PLAYER_STATE_DRIVER)
113 {
114 PlayerTextDrawShow(playerid,td_fuel[playerid]);
115 }
116 return 1;
117}
118
119
120
121
122forward PlayerUpdate(playerid);
123public PlayerUpdate(playerid)
124{
125 new vid = GetPlayerVehicleID(playerid);
126 for(new i = 1; i < vehs; i++)
127 {
128 if(vid == VehicleInfo[vid][ID])
129 {
130 GetVehicleParamsEx(vid, engine, lights, alarm, doors, bonnet, boot, objective);
131 if(engine == 0)
132 {
133 new string[125];
134 format(string,sizeof string,"Engine OFF! (/engine)",VehicleInfo[vid][Fuel]);
135 PlayerTextDrawSetString(playerid, td_fuel[playerid],string);
136 }
137 else
138 {
139 new string[125];
140 format(string,sizeof string,"Fuel: %i",VehicleInfo[vid][Fuel]);
141 PlayerTextDrawSetString(playerid, td_fuel[playerid],string);
142 }
143 break;
144 }
145 }
146
147 if(FuelAllowed[playerid] == 1)
148 {
149 for(new i = 0; i < gas; i++)
150 {
151 if(IsPlayerInRangeOfPoint(playerid, 5.0, GasInfo[i][X], GasInfo[i][Y], GasInfo[i][Z]) )
152 {
153 for(new j = 0; j < vehs; j++)
154 {
155 if(vid == VehicleInfo[i][ID])
156 {
157 VehicleInfo[j][Fuel] ++;
158 break;
159 }
160 }
161 }
162 }
163 }
164 for(new i = 1; i < vehs; i++)
165 {
166
167 new str[128];
168 format(str, sizeof(str), "Owner: %s\nVehicle ID: %d\nLocked: %d\nEngine: %d\nFuel: %d", VehicleInfo[i][vowner], VehicleInfo[i][ID], VehicleInfo[i][Locked], VehicleInfo[i][Engine], VehicleInfo[i][Fuel]);
169 Update3DTextLabelText(VehicleInfo[i][vtext], 0xFFFFFFFF, str);
170
171 new id = VehicleInfo[i][ID];
172 GetVehicleParamsEx(id, engine, lights, alarm, doors, bonnet, boot, objective);
173
174
175 }
176 return 1;
177}
178
179forward GlobalVeh();
180public GlobalVeh()
181{
182 for(new i = 1; i < vehs; i++)
183 {
184
185 new id = VehicleInfo[i][ID];
186 GetVehicleParamsEx(id, engine, lights, alarm, doors, bonnet, boot, objective);
187 if(engine == 1)
188 {
189 if(VehicleInfo[i][Fuel] > 0)
190 {
191 VehicleInfo[i][Fuel] -= 1;
192 }
193 else
194 {
195 SetVehicleParamsEx(id, 0, lights,alarm,doors,bonnet,boot,objective);
196 }
197 }
198 }
199 return 1;
200}
201
202public OnFilterScriptExit()
203{
204 SaveCars();
205 for(new i = 1; i < vehs; i++)
206 DestroyVehicle(VehicleInfo[i][ID]);
207
208 db_close(voiture);
209 return 1;
210}
211
212stock IsValidModelID(ModelID) {
213 switch(ModelID) {
214 case 400 .. 611: return true;
215 }
216 return false;
217}
218
219stock SaveCars()
220{
221
222 new query[512];
223 for(new i = 1; i <= vehs; i++)
224 {
225
226 format(query, sizeof(query), "insert into `vehicle` (`id` , `model` , `vowner` , `x` , `y` , `z` , `a` , `col1` , `col2` , `fuel` , `engine` , `plate` , `prix`, `locked`) values (%d, %d, '%s', %f, %f, %f, %f, %d, %d, %d, 0, '%s', %d, 0)", VehicleInfo[i][ID], VehicleInfo[i][Model], VehicleInfo[i][vowner], VehicleInfo[i][X], VehicleInfo[i][Y], VehicleInfo[i][Z], VehicleInfo[i][A], VehicleInfo[i][Col1], VehicleInfo[i][Col2], VehicleInfo[i][Fuel], VehicleInfo[i][Plate], VehicleInfo[i][Prix]);
227 db_free_result(db_query(voiture, query));
228
229 }
230 return 1;
231}
232
233stock LoadGas()
234{
235
236 new i = 1,str[64], Query[512];
237 while(i < MAX_GAS)
238 {
239 format(Query,sizeof(Query),"SELECT * FROM `gas` WHERE `id` = %d",i);
240 new DBResult:res = db_query(voiture,Query);
241 if(db_num_rows(res))
242 {
243 db_get_field_assoc(res, "x", str, 56);
244 GasInfo[i][X] = floatstr(str);
245
246 db_get_field_assoc(res, "y", str, 56);
247 GasInfo[i][Y] = floatstr(str);
248
249 db_get_field_assoc(res, "z", str, 56);
250 GasInfo[i][Z] = floatstr(str);
251
252
253 GasInfo[i][lab] = Create3DTextLabel("/refuel to fuel your vehicle!", 0x008080FF, GasInfo[i][X], GasInfo[i][Y], GasInfo[i][Z], 20, 0, 0);
254 GasInfo[i][CP] = CreateDynamicCP(GasInfo[i][X], GasInfo[i][Y], GasInfo[i][Z] , 1.50, -1, -1, -1, 40.0);
255
256 gas++;
257 }
258 db_free_result(res);
259
260
261 i++;
262 }
263 new queryt[256];
264 format(queryt,sizeof(queryt),"DELETE FROM `gas`");
265 db_free_result(db_query(voiture, queryt));
266 format(Query,sizeof(Query),"");
267 return 1;
268
269
270}
271
272stock LoadCarss()
273{
274 new i = 1,str[64], Query[512];
275 while(i < MAX_VEHICLES)
276 {
277 format(Query,sizeof(Query),"SELECT * FROM `vehicle` WHERE `id` = %d",i);
278 new DBResult:res = db_query(voiture,Query);
279 if(db_num_rows(res))
280 {
281 db_get_field_assoc(res, "model", str, 56);
282 VehicleInfo[i][Model] = strval(str);
283
284 db_get_field_assoc(res, "vowner", str, 56);
285 format(VehicleInfo[i][vowner], 56, "%s", str);
286
287 db_get_field_assoc(res, "x", str, 56);
288 VehicleInfo[i][X] = floatstr(str);
289
290 db_get_field_assoc(res, "y", str, 56);
291 VehicleInfo[i][Y] = floatstr(str);
292
293 db_get_field_assoc(res, "z", str, 56);
294 VehicleInfo[i][Z] = floatstr(str);
295
296 db_get_field_assoc(res, "a", str, 56);
297 VehicleInfo[i][A] = floatstr(str);
298
299 db_get_field_assoc(res, "col1", str, 56);
300 VehicleInfo[i][Col1] = strval(str);
301
302 db_get_field_assoc(res, "col2", str, 56);
303 VehicleInfo[i][Col2] = strval(str);
304
305 db_get_field_assoc(res, "fuel", str, 56);
306 VehicleInfo[i][Fuel] = strval(str);
307
308 db_get_field_assoc(res, "engine", str, 56);
309 VehicleInfo[i][Engine] = strval(str);
310
311 db_get_field_assoc(res, "plate", str, 56);
312 format(VehicleInfo[i][Plate], 56, "%s", str);
313
314 db_get_field_assoc(res, "prix", str, 56);
315 VehicleInfo[i][Prix] = strval(str);
316
317 db_get_field_assoc(res, "locked", str, 56);
318 VehicleInfo[i][Locked] = strval(str);
319
320 VehicleInfo[i][ID] = CreateVehicle(VehicleInfo[i][Model], VehicleInfo[i][X], VehicleInfo[i][Y], VehicleInfo[i][Z], VehicleInfo[i][A], VehicleInfo[i][Col1], VehicleInfo[i][Col2], 0);
321 SetVehicleNumberPlate(VehicleInfo[i][ID], VehicleInfo[i][Plate]);
322 SetVehicleParamsEx(VehicleInfo[i][ID], 0, lights,alarm,doors,bonnet,boot,objective);
323 new strr[128];
324 format(strr, sizeof(strr), "{008080}Owner: {FFFFFF}%s\n{008080}Vehicle ID: {FFFFFF}%d\n{008080}Locked: {FFFFFF}%d\n{008080}Engine: {FFFFFF}%d\n{008080}Fuel: {FFFFFF}%d", VehicleInfo[vehs][vowner], VehicleInfo[vehs][ID], VehicleInfo[vehs][Locked], VehicleInfo[vehs][Engine], VehicleInfo[vehs][Fuel]);
325 VehicleInfo[i][vtext] = Create3DTextLabel(strr, 0x008080FF, 0, 0, 0, 20, 0, 0);
326 Attach3DTextLabelToVehicle( VehicleInfo[i][vtext] , VehicleInfo[i][ID], 0.0, 0.0, 2.0);
327 vehs++;
328 }
329 db_free_result(res);
330
331
332 i++;
333 }
334 new queryt[256];
335 format(queryt,sizeof(queryt),"DELETE FROM `vehicle`");
336 db_free_result(db_query(voiture, queryt));
337 format(Query,sizeof(Query),"");
338 return 1;
339
340}
341
342CMD:refuel(playerid, params[])
343{
344 if(IsPlayerInAnyVehicle(playerid))
345 {
346 new vid = GetPlayerVehicleID(playerid);
347 for(new i = 0; i < gas; i++)
348 {
349 if(IsPlayerInRangeOfPoint(playerid, 5.0, GasInfo[i][X], GasInfo[i][Y], GasInfo[i][Z]) )
350 {
351 for(new j = 0; j < vehs; j++)
352 {
353 if(vid == VehicleInfo[i][ID])
354 {
355 FuelAllowed[playerid] = 1;
356 break;
357 }
358 }
359 }
360 }
361 }
362 else return SendClientMessage(playerid, -1, "You should be in a vehicle");
363 return 1;
364}
365
366CMD:creategas(playerid, params[])
367{
368 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Vous n'etes pas admin");
369
370 new Float:gx, Float:gy, Float:gz, query[256];
371 GetPlayerPos(playerid, gx, gy, gz);
372 format(query, sizeof(query), "insert into `gas` (`x` , `y` , `z`) values (%f, %f, %f)", gx, gy, gz);
373
374 GasInfo[gas][X] = gx;
375 GasInfo[gas][Y] = gy;
376 GasInfo[gas][Z] = gz;
377
378 db_free_result(db_query(voiture, query));
379 new str[128];
380 format(str, sizeof(str), "Gas Station ID: %d\n /refuel to fuel your car!", gas);
381 GasInfo[gas][lab] = Create3DTextLabel(str, 0x008080FF, gx, gy, gz, 20, 0, 0);
382 SendClientMessage(playerid, -1, "Gas Station ajout�e!");
383 GasInfo[gas][CP] = CreateDynamicCP(GasInfo[gas][X], GasInfo[gas][Y], GasInfo[gas][Z] , 1.50, -1, -1, -1, 40.0);
384 gas++;
385 return 1;
386}
387
388
389
390CMD:deletegas(playerid, params[])
391{
392 new query[256], i;
393 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Vous n'etes pas admin");
394 if(sscanf(params, "d", i)) return SendClientMessage(playerid, -1, "/deletegas <id>");
395 format(query, sizeof(query), "delete `gas` where `id` = %d", i);
396 db_free_result(db_query(voiture, query));
397 GasInfo[i][X] = 0;
398 GasInfo[i][Y] = 0;
399 GasInfo[i][Z] = 0;
400 Delete3DTextLabel(GasInfo[i][lab]);
401 DestroyDynamicCP(GasInfo[i][CP]);
402
403 return 1;
404}
405
406CMD:cars(playerid, params[])
407{
408 new string[128];
409
410 for(new i = 1; i < vehs; i++)
411 {
412 if(strcmp(VehicleInfo[i][vowner], "notbuyable", true) == 0)
413 {
414 format(string, sizeof(string), "[%d] ID: %d, Owner: %s, Model: %d, Engine: %d, Fuel: %d, Plate: %s, Price: %d, Buyable: not Buyable",i, VehicleInfo[i][ID], VehicleInfo[i][vowner], VehicleInfo[i][Model], VehicleInfo[i][Engine], VehicleInfo[i][Fuel], VehicleInfo[i][Plate], VehicleInfo[i][Prix]);
415
416 }
417 else
418 {
419 format(string, sizeof(string), "[%d] ID: %d, Owner: %s, Model: %d, Engine: %d, Fuel: %d, Plate: %s, Price: %d, Buyable: Buyable",i, VehicleInfo[i][ID], VehicleInfo[i][vowner],VehicleInfo[i][Model], VehicleInfo[i][Engine], VehicleInfo[i][Fuel], VehicleInfo[i][Plate], VehicleInfo[i][Prix]);
420 }
421 SendClientMessage(playerid, -1, string);
422
423 }
424 return 1;
425}
426CMD:lockcar(playerid, params[])
427{
428 for(new i = 1; i < vehs; i++)
429 {
430 if(IsPlayerInRangeOfPoint(playerid, 5.0, VehicleInfo[i][X], VehicleInfo[i][Y], VehicleInfo[i][Z]))
431 {
432 if(strcmp(VehicleInfo[i][vowner], PlayerName(playerid), true) == 0)
433 {
434 GetVehicleParamsEx(VehicleInfo[i][ID],engine,lights,alarm,doors,bonnet,boot,objective);
435
436 if(doors == 1)
437 {
438 SetVehicleParamsEx(VehicleInfo[i][ID],engine,lights,alarm,false,bonnet,boot,objective);
439 VehicleInfo[i][Locked] = 0;
440 SendClientMessage(playerid, -1, "Voiture ouverte!");
441 }
442
443 else
444 {
445 SetVehicleParamsEx(VehicleInfo[i][ID],engine,lights,alarm,true,bonnet,boot,objective);
446 VehicleInfo[i][Locked] = 1;
447 SendClientMessage(playerid, -1, "Voiture fermer!");
448 }
449 break;
450 }
451 }
452 }
453 return 1;
454}
455
456
457
458CMD:createcar(playerid, params[])
459{
460 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "[ERREUR] vous n'etes pas un administrateur RCON");
461 new Float:x, Float:y, Float:z, Float:a, buyable, plate[15], fuel, model, col1, col2, prix;
462 if(sscanf(params, "dddddds[15]", model, buyable, col1, col2, fuel, prix, plate)) return SendClientMessage(playerid, -1, "[USAGE] /createcar <model> <achetable(0-1)> <color1> <color2> <fuel> <prix> <plate>");
463
464 if(!IsValidModelID(model)) return SendClientMessage(playerid, -1, "Model de voiture non valide! (400-611)");
465 GetPlayerPos(playerid, x, y, z);
466 GetPlayerFacingAngle(playerid, a);
467
468 new str[24];
469
470 new str2[15];
471 if(buyable == 0)
472 {
473 format(str, sizeof(str), "notbuyable");
474 VehicleInfo[vehs][vowner] = str;
475 VehicleInfo[vehs][Model] = model;
476 VehicleInfo[vehs][X] = x;
477 VehicleInfo[vehs][Y] = y;
478 VehicleInfo[vehs][Z] = z;
479 VehicleInfo[vehs][A] = a;
480 VehicleInfo[vehs][Col1] = col1;
481 VehicleInfo[vehs][Col2] = col2;
482 VehicleInfo[vehs][Fuel] = fuel;
483 VehicleInfo[vehs][Engine] = 0;
484 VehicleInfo[vehs][Locked] = 0;
485
486 format(str2, sizeof(str2), "%s", plate);
487 VehicleInfo[vehs][Plate] = str2;
488
489 VehicleInfo[vehs][Prix] = prix;
490 VehicleInfo[vehs][ID] = CreateVehicle(model, x, y, z, a, col1, col2 ,0);
491 SetVehicleNumberPlate(VehicleInfo[vehs][ID], VehicleInfo[vehs][Plate]);
492 SetVehicleParamsEx(VehicleInfo[vehs][ID], 0, lights,alarm,doors,bonnet,boot,objective);
493 new strr[256];
494 format(strr, sizeof(strr), "{008080}Owner: {FFFFFF}%s\n{008080}Vehicle ID: {FFFFFF}%d\n{008080}Locked: {FFFFFF}%d\n{008080}Engine: {FFFFFF}%d\n{008080}Fuel: {FFFFFF}%d", VehicleInfo[vehs][vowner], VehicleInfo[vehs][ID], VehicleInfo[vehs][Locked], VehicleInfo[vehs][Engine], VehicleInfo[vehs][Fuel]);
495 VehicleInfo[vehs][vtext] = Create3DTextLabel(strr, -1, 0, 0, 0, 0, 0);
496 Attach3DTextLabelToVehicle( VehicleInfo[vehs][vtext] , VehicleInfo[vehs][ID], 0.0, 0.0, 2.0);
497 print("Voiture unbuyble added");
498 vehs++;
499 }
500 else
501 {
502 format(str, sizeof(str), "none");
503 VehicleInfo[vehs][vowner] = str;
504 VehicleInfo[vehs][Model] = model;
505 VehicleInfo[vehs][X] = x;
506 VehicleInfo[vehs][Y] = y;
507 VehicleInfo[vehs][Z] = z;
508 VehicleInfo[vehs][A] = a;
509 VehicleInfo[vehs][Col1] = col1;
510 VehicleInfo[vehs][Col2] = col2;
511 VehicleInfo[vehs][Fuel] = fuel;
512 VehicleInfo[vehs][Engine] = 0;
513 VehicleInfo[vehs][Locked] = 0;
514 format(str2, sizeof(str2), "%s", plate);
515 VehicleInfo[vehs][Plate] = str2;
516 VehicleInfo[vehs][Prix] = prix;
517 VehicleInfo[vehs][ID] = CreateVehicle(model, x, y, z, a, col1, col2 ,0);
518 SetVehicleNumberPlate(VehicleInfo[vehs][ID], VehicleInfo[vehs][Plate]);
519 SetVehicleParamsEx(VehicleInfo[vehs][ID], 0, lights,alarm,doors,bonnet,boot,objective);
520 new strr[256];
521 format(strr, sizeof(strr), "{008080}Owner: {FFFFFF}%s\n{008080}Vehicle ID: {FFFFFF}%d\n{008080}Locked: {FFFFFF}%d\n{008080}Engine: {FFFFFF}%d\n{008080}Fuel: {FFFFFF}%d", VehicleInfo[vehs][vowner], VehicleInfo[vehs][ID], VehicleInfo[vehs][Locked], VehicleInfo[vehs][Engine], VehicleInfo[vehs][Fuel]);
522 VehicleInfo[vehs][vtext] = Create3DTextLabel(strr, -1, 0, 0, 0, 0, 0);
523 Attach3DTextLabelToVehicle( VehicleInfo[vehs][vtext] , VehicleInfo[vehs][ID], 0.0, 0.0, 2.0);
524 print("Voiture buyable added");
525 vehs++;
526 }
527
528
529 return 1;
530}
531
532CMD:achetable(playerid, params[])
533{
534 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "[ERREUR] vous n'etes pas un administrateur RCON");
535 if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1, "[ERREUR] Vous devez etre dans une voiture");
536
537 new vid = GetPlayerVehicleID(playerid);
538
539
540 for(new i = 1; i < vehs; i++)
541 {
542 if(vid == VehicleInfo[i][ID])
543 {
544 if(!strcmp(VehicleInfo[i][vowner], "notbuyable"))
545 {
546 new str[24];
547 format(str, sizeof(str), "none");
548 VehicleInfo[i][vowner] = str;
549 SendClientMessage(playerid, -1, "Voiture est achetable");
550 }
551 else if(!strcmp(VehicleInfo[i][vowner], "none"))
552 {
553 new str[24];
554 format(str, sizeof(str), "notbuyable");
555 VehicleInfo[i][vowner] = str;
556 SendClientMessage(playerid, -1, "Voiture n'est plus achetable");
557 }
558 break;
559 }
560
561 }
562
563 return 1;
564}
565
566CMD:deletecar(playerid, params[])
567{
568 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "[ERREUR] vous n'etes pas un administrateur RCON");
569 if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1, "[ERREUR] Vous devez etre dans une voiture");
570 new vid = GetPlayerVehicleID(playerid);
571
572
573
574
575
576 new str[24];
577
578 format(str, sizeof(str), " ");
579 VehicleInfo[vid][vowner] = str;
580 VehicleInfo[vid][Model] = -1;
581 VehicleInfo[vid][X] = 0;
582 VehicleInfo[vid][Y] = 0;
583 VehicleInfo[vid][Z] = 0;
584 VehicleInfo[vid][A] = 0;
585 VehicleInfo[vid][Col1] = 0;
586 VehicleInfo[vid][Col2] = 0;
587 VehicleInfo[vid][Fuel] = 0;
588 VehicleInfo[vid][Engine] = 0;
589 VehicleInfo[vid][Locked] = 0;
590 new str2[15];
591 format(str2, sizeof(str2), " ");
592 VehicleInfo[vid][Plate] = str2;
593 VehicleInfo[vid][Prix] = 0;
594 DestroyVehicle(vid);
595 Delete3DTextLabel(VehicleInfo[vid][vtext]);
596
597
598
599
600 return 1;
601}
602
603CMD:vehcmds(playerid, params[])
604{
605 if(IsPlayerAdmin(playerid))
606 {
607 SendClientMessage(playerid, -1, "/createcar /deletecar /achetable");
608 SendClientMessage(playerid, -1, "/achetervoiture /vendrevoiture /park /engine /lockcar");
609
610 }
611 else
612 {
613 SendClientMessage(playerid, -1, "/achetervoiture /vendrevoiture /park /engine /lockcar");
614 }
615
616 return 1;
617}
618
619CMD:achetervoiture(playerid, params[])
620{
621 if(IsPlayerInAnyVehicle(playerid))
622 {
623 new vehicleid = GetPlayerVehicleID(playerid);
624
625 new bool:buyable1 = false;
626 for(new i = 1; i < vehs; i++)
627 {
628 if(vehicleid == VehicleInfo[i][ID])
629 {
630 if(!strcmp(VehicleInfo[i][vowner], "none"))
631 {
632 buyable1 = true;
633 }
634 break;
635 }
636 }
637
638
639
640 new bool:buyable = true;
641 for(new i = 1; i < vehs; i++)
642 {
643 if(vehicleid == VehicleInfo[i][ID])
644 {
645 if(!strcmp(VehicleInfo[i][vowner], "notbuyable"))
646 {
647 buyable = false;
648 }
649 break;
650 }
651 }
652
653 if(buyable1 == true)
654 {
655 if(buyable == true)
656 {
657 for(new i = 1; i < vehs; i++)
658 {
659 if(vehicleid == VehicleInfo[i][ID])
660 {
661 if(GetPlayerMoney(playerid) < VehicleInfo[i][Prix]) return SendClientMessage(playerid, -1, "You dont have enough money to buy this car!");
662
663 GivePlayerMoney(playerid, -VehicleInfo[i][Prix]);
664
665 new str[24];
666 format(str, sizeof(str), "%s", PlayerName(playerid));
667 VehicleInfo[i][vowner] = str;
668 SendClientMessage(playerid, -1, "Tu as acheter une voiture");
669 new strr[128];
670 format(strr, sizeof(strr), "{008080}Owner: {FFFFFF}%s\n{008080}Vehicle ID: {FFFFFF}%d\n{008080}Locked: {FFFFFF}%d\n{008080}Engine: {FFFFFF}%d\n{008080}Fuel: {FFFFFF}%d", VehicleInfo[vehs][vowner], VehicleInfo[vehs][ID], VehicleInfo[vehs][Locked], VehicleInfo[vehs][Engine], VehicleInfo[vehs][Fuel]);
671 Update3DTextLabelText(VehicleInfo[vehicleid][vtext], 0xFFFFFFFF, strr);
672
673
674 break;
675 }
676 }
677 }
678 else return SendClientMessage(playerid, -1, "Car is not buyable");
679 }
680 else return SendClientMessage(playerid, -1, "Car is already bought");
681 }
682 else return SendClientMessage(playerid,-1, "You are not inside any vehicle");
683 return 1;
684}
685
686CMD:engine(playerid, params[])
687{
688 if(IsPlayerInAnyVehicle(playerid))
689 {
690 if(GetPlayerState(playerid) == 2)
691 {
692
693 new vehicleid = GetPlayerVehicleID(playerid);
694 GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
695 for(new i = 1; i < vehs; i++)
696 {
697 if(vehicleid == VehicleInfo[i][ID])
698 {
699 if(strcmp(VehicleInfo[i][vowner], PlayerName(playerid), true) == 0)
700 {
701 if(VehicleInfo[i][Engine]== 2) return SendClientMessage(playerid, -1, "Attendez un peu svp..");
702
703
704 GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
705 if(engine == 0)
706 {
707 SetTimerEx("CarLock", 2000, false, "ii", playerid, VehicleInfo[i][ID]);
708 VehicleInfo[i][Engine] = 2;
709 }
710 else
711 {
712 SetVehicleParamsEx(vehicleid, 0, lights, alarm, doors, bonnet, boot, 0);
713 SendClientMessage(playerid, -1, "Engine stopped!");
714 VehicleInfo[i][Engine] = 0;
715 }
716 }
717 break;
718 }
719 }
720 }
721 }
722 return 1;
723}
724
725forward CarLock(playerid, vehicleid);
726
727public CarLock(playerid, vehicleid)
728{
729 if(IsPlayerInVehicle(playerid, vehicleid))
730 {
731 SetVehicleParamsEx(vehicleid, 1, lights, alarm, doors, bonnet, boot, 0);
732 VehicleInfo[vehicleid][Engine] = 1;
733 SendClientMessage(playerid, -1, "Engine started!");
734 }
735 return 1;
736}
737
738CMD:park(playerid, params[])
739{
740 if(IsPlayerInAnyVehicle(playerid))
741 {
742 new vehicleid = GetPlayerVehicleID(playerid);
743
744 for(new i = 1; i < vehs; i++)
745 {
746 if(vehicleid == VehicleInfo[i][ID])
747 {
748 if(strcmp(VehicleInfo[i][vowner], PlayerName(playerid), true) == 0)
749 {
750 new Float:x, Float:y, Float:z, Float:a;
751
752 GetVehiclePos(vehicleid, x, y, z);
753 GetVehicleZAngle(vehicleid, a);
754 VehicleInfo[i][X] = x;
755 VehicleInfo[i][Y] = y;
756 VehicleInfo[i][Z] = z;
757 VehicleInfo[i][A] = a;
758 SendClientMessage(playerid, -1, "[PARKING] Position saved");
759
760 break;
761 }
762
763 }
764 }
765 }
766 else return SendClientMessage(playerid,-1, "You are not inside any vehicle");
767 return 1;
768}
769
770stock PlayerName(playerid)
771{
772 new ppName[24];
773 GetPlayerName(playerid, ppName, 24);
774 return ppName;
775}
776
777stock DB_Escape(text[])
778{
779 new
780 ret[80 * 2],
781 ch,
782 i,
783 j;
784 while ((ch = text[i++]) && j < sizeof (ret))
785 {
786 if (ch == '\'')
787 {
788 if (j < sizeof (ret) - 2)
789 {
790 ret[j++] = '\'';
791 ret[j++] = '\'';
792 }
793 }
794 else if (j < sizeof (ret))
795 {
796 ret[j++] = ch;
797 }
798 else
799 {
800 j++;
801 }
802 }
803 ret[sizeof (ret) - 1] = '\0';
804 return ret;
805}