· 5 years ago · Mar 28, 2020, 07:40 AM
1FULL CODE
2
3/*
4 |____________________________________|
5 Thanks To Jonathan For the script - Irwan
6 -{FF0000} merah- -{FFFFFF} putih- -{FFFF00} kuning- -{33AA33} ijo-
7 ____________________________________
8 | |
9*/
10// ============= » INCLUDES =============
11#include <a_samp>
12#include <YSI\y_ini>
13#include <zcmd>
14#include <sscanf2>
15#include <streamer>
16#include <foreach>
17#include <YSI\y_iterate>
18#include <a_mysql>
19#include <sqlitei>
20// ============= » Vending Gun Manchine System By Irwan =============
21#define MAX_MACHINES (30)
22// ============= » Drugs System By Irwan =============
23#define MAX_PLANTS (25000) // limit of drug plants
24#define MAX_DEALERS (15) // limit of drug dealers
25// ============= » MYSQL HOST CONFIGURATION =============
26#define SQL_HOST "127.0.0.1"
27#define SQL_USER "server_3849"
28#define SQL_PASSWORD "irwanbelajar"
29#define SQL_DBNAME "server_3849_irwanbelajar"
30// ============= » Drugs System CONFIGURATION =============
31#define USE_DRUNKLEVEL // remove this line if you don't want SetPlayerDrunkLevel to be used while on drugs
32#define PLAYER_LIMIT (500) // a player can plant up to x drug plants (Default: 5)
33#define PLANT_MAX_GROWTH (10) // a plant will grow up to x grams of drugs (Default: 75)
34#define GROWTH_INTERVAL (10) // a plant will grow up every x seconds (Default: 45)
35#define ROT_INTERVAL (99999) // a plant will rot after x seconds of fully growing (Default: 300)
36#define CARRY_LIMIT (9999) // a player can carry up to x grams of drugs (Default: 150)
37#define SEED_LIMIT (1000) // a player can carry up to x drug plant seeds (Default: 25)
38#define SEED_PRICE (1000) // price players will pay for a drug plant seed (Default: 50)
39#define DRUG_BUY_PRICE (1200) // price players will pay a dealer for a gram of drugs (Default: 20)
40#define DRUG_SELL_PRICE (1100) // price dealers will pay a player for a gram of drugs (Default: 16)
41#define OFFER_COOLDOWN (10) // how many seconds does a player wait to send an another offer to someone (Default: 30)
42// ============= » DIALOGS =============
43#define DIALOG_REGISTER 1
44#define DIALOG_AGE 2
45#define DIALOG_GENDER 3
46#define DIALOG_ORIGIN 4
47#define DIALOG_LOGIN 5
48#define DIALOG_CHARSELECT 6
49#define DIALOG_PROFILE 7
50#define DIALOG_CHANGENAME 8
51#define DIALOG_CHANGEAGE 9
52#define DIALOG_AGEMSG 10
53#define DIALOG_CHANGEGEN 11
54#define DIALOG_GENMSG 12
55#define DIALOG_CHANGEPASS 12
56#define DIALOG_PASSMSG 13
57#define DIALOG_ASTATUS 14
58// ============= » SERVER DEFINES =============
59#define HOSTNAME "Test Server"
60#define VERSION "V.1.0.0"
61#define MAPNAME "San Andreas"
62#define WEBSITE "belajardotcom"
63#define DEVELOPER "Irwan Ibrahim"
64
65#define PATH "Users/%s.ini"
66
67// ============= » OTHER DEFINES =============
68#define DonatorOnly "You don't have the required Donator Level to use this command."
69#define AdminOnly "You don't have the required Admin Level to use this command."
70#define NotSpawnedYet "You need to login in order to use any command."
71#define NotConnected "Player Not Connected."
72#define UnknownCommand "Command not recognized. Use /help for more information."
73
74native IsValidVehicle(vehicleid);
75new LoginAttempt[MAX_PLAYERS], Spawned[MAX_PLAYERS], aStatus[MAX_PLAYERS], AdminChat[MAX_PLAYERS];
76new Text:TDEditor_TD[9];
77
78// ============= » COLORS =============
79#define W 0xFFFFFFFF
80#define WHITE 0xFFFFFFFF
81#define GREY 0x888888C8
82#define RED 0xFF0000FF
83#define GREEN 0x00E228FF
84#define LIBLUE 0x3AB3EDFF
85#define BLUE 0x0073FFFF
86
87#define OYUNCU_MAX_ARAC 3 // Maximum car amount that one player can buy.
88#define GARAJ_MAX_ARAC 5 // Maximum car amount that one player can put into the garage.
89
90#define XV_DIALOGID 3500 // If dialogs make trouble, only change this ID.
91
92enum xv_data
93{
94 xv_Veh,
95 xv_ModelID,
96 xv_Renk[2],
97 Float:xv_Pos[4],
98 xv_Paintjob,
99 xv_Parca[14],
100 xv_Sahip[24],
101 xv_Plaka[8],
102 xv_Garajda,
103 Text3D:xv_Text,
104 xv_Fiyat,
105 xv_HizliPark
106};
107
108new
109 xVehicle[MAX_VEHICLES][xv_data],
110 xVeh[MAX_VEHICLES],
111 offerTimer[MAX_PLAYERS],
112 Iterator:xVehicles<MAX_VEHICLES>,
113 Iterator:xVehicleKeys<MAX_PLAYERS, MAX_VEHICLES>,
114 MySQL:mysqlB
115;
116
117new VehicleNames[][] =
118{
119 "Landstalker", "Bravura", "Buffalo", "Linerunner", "Perrenial", "Sentinel",
120 "Dumper", "Firetruck", "Trashmaster", "Stretch", "Manana", "Infernus",
121 "Voodoo", "Pony", "Mule", "Cheetah", "Ambulance", "Leviathan", "Moonbeam",
122 "Esperanto", "Taxi", "Washington", "Bobcat", "Whoopee", "BFInjection",
123 "Hunter", "Premier", "Enforcer", "Securicar", "Banshee", "Predator", "Bus",
124 "Rhino", "Barracks", "Hotknife", "Trailer", "Previon", "Coach", "Cabbie",
125 "Stallion", "Rumpo", "RC Bandit", "Romero", "Packer", "Monster", "Admiral",
126 "Squalo", "Seasparrow", "Pizzaboy", "Tram", "Trailer", "Turismo", "Speeder",
127 "Reefer", "Tropic", "Flatbed", "Yankee", "Caddy", "Solair", "BerkleysRCVan",
128 "Skimmer", "PCJ-600", "Faggio", "Freeway", "RCBaron", "RCRaider", "Glendale",
129 "Oceanic","Sanchez", "Sparrow", "Patriot", "Quad", "Coastguard", "Dinghy",
130 "Hermes", "Sabre", "Rustler", "ZR-350", "Walton", "Regina", "Comet", "BMX",
131 "Burrito", "Camper", "Marquis", "Baggage", "Dozer", "Maverick", "NewsChopper",
132 "Rancher", "FBI Rancher", "Virgo", "Greenwood", "Jetmax", "Hotring", "Sandking",
133 "BlistaCompact", "PoliceMaverick", "Boxvillde", "Benson", "Mesa", "RCGoblin",
134 "HotringRacerA", "HotringRacerB", "BloodringBanger", "Rancher", "SuperGT",
135 "Elegant", "Journey", "Bike", "MountainBike", "Beagle", "Cropduster", "Stunt",
136 "Tanker", "Roadtrain", "Nebula", "Majestic", "Buccaneer", "Shamal", "Hydra",
137 "FCR-900", "NRG-500", "HPV1000", "CementTruck", "TowTruck", "Fortune",
138 "Cadrona", "FBITruck", "Willard", "Forklift", "Tractor", "Combine", "Feltzer",
139 "Remington", "Slamvan", "Blade", "Freight", "Streak", "Vortex", "Vincent",
140 "Bullet", "Clover", "Sadler", "Firetruck", "Hustler", "Intruder", "Primo",
141 "Cargobob", "Tampa", "Sunrise", "Merit", "Utility", "Nevada", "Yosemite",
142 "Windsor", "Monster", "Monster", "Uranus", "Jester", "Sultan", "Stratium",
143 "Elegy", "Raindance", "RCTiger", "Flash", "Tahoma", "Savanna", "Bandito",
144 "FreightFlat", "StreakCarriage", "Kart", "Mower", "Dune", "Sweeper",
145 "Broadway", "Tornado", "AT-400", "DFT-30", "Huntley", "Stafford", "BF-400",
146 "News Van", "Tug", "Trailer", "Emperor", "Wayfarer", "Euros", "Hotdog", "Club",
147 "FreightBox", "Trailer", "Andromada", "Dodo", "RC Cam", "Launch", "LSPD",
148 "SFPD", "LVPD", "PoliceRanger", "Picador", "S.W.A.T", "Alpha",
149 "Phoenix", "Glendale", "Sadler", "Luggage", "Luggage", "Stairs", "Boxville",
150 "Tiller", "UtilityTrailer"
151};
152
153
154// ============= » ENUMERATORS =============
155enum pInfo
156{
157 Name[32],
158 Password,
159 Level,
160 Helper,
161 Registered,
162 Money,
163 AdminLevel,
164 Age,
165 Gender,
166 Skin,
167 RegDate,
168 RegMonth,
169 RegYear,
170 TimesKicked,
171 Banned,
172 BannedBy[32],
173 BanReason[128],
174 TimesWarned,
175}
176new PlayerInfo[MAX_PLAYERS][pInfo];
177
178enum E_MACHINE
179{
180 // saved
181 Float: mPosX,
182 Float: mPosY,
183 Float: mPosZ,
184 Float: mRotX,
185 Float: mRotY,
186 Float: mRotZ,
187 // temp
188 mObjID,
189 mIconID,
190 Text3D: mLabel,
191 bool: mExists
192}
193
194enum _:E_MACHINE_DIALOG
195{
196 DIALOG_WEAPONS_MENU = 9750,
197 DIALOG_WEAPONS_BUY,
198 DIALOG_WEAPONS_BUY_FINAL,
199 // admin dialogs
200 DIALOG_CREATE_CATEGORY,
201 DIALOG_REMOVE_CATEGORY,
202 DIALOG_RENAME_CATEGORY,
203 DIALOG_RENAME_CATEGORY_FINAL,
204 DIALOG_ADD_WEAPON_1,
205 DIALOG_ADD_WEAPON_2,
206 DIALOG_ADD_WEAPON_3,
207 DIALOG_ADD_WEAPON_FINAL,
208 DIALOG_REMOVE_WEAPON_1,
209 DIALOG_REMOVE_WEAPON_FINAL
210}
211
212new
213 MachineData[MAX_MACHINES][E_MACHINE];
214
215new
216 DB: MachineDatabase;
217
218new
219 DBStatement: LoadMachines,
220 DBStatement: AddMachine,
221 DBStatement: UpdateMachine,
222 DBStatement: RemoveMachine;
223
224new
225 DBStatement: ListCategories,
226 DBStatement: AddCategory,
227 DBStatement: ReturnCategoryID,
228 DBStatement: ReturnCategoryName,
229 DBStatement: RenameCategory,
230 DBStatement: RemoveCategory;
231
232new
233 DBStatement: ListWeapons,
234 DBStatement: LoadWeapon,
235 DBStatement: AddWeapon,
236 DBStatement: RemoveWeapon,
237 DBStatement: RemoveCategoryWeapons;
238
239new
240 CurCategoryID[MAX_PLAYERS] = {-1, ...},
241 CurItemIndex[MAX_PLAYERS] = {-1, ...},
242 EditingMachineID[MAX_PLAYERS] = {-1, ...};
243
244formatInt(intVariable, iThousandSeparator = ',', iCurrencyChar = '$')
245{
246 /*
247 By Kar
248 https://gist.github.com/Kar2k/bfb0eafb2caf71a1237b349684e091b9/8849dad7baa863afb1048f40badd103567c005a5#file-formatint-function
249 */
250 static
251 s_szReturn[ 32 ],
252 s_szThousandSeparator[ 2 ] = { ' ', EOS },
253 s_szCurrencyChar[ 2 ] = { ' ', EOS },
254 s_iVariableLen,
255 s_iChar,
256 s_iSepPos,
257 bool:s_isNegative
258 ;
259
260 format( s_szReturn, sizeof( s_szReturn ), "%d", intVariable );
261
262 if(s_szReturn[0] == '-')
263 s_isNegative = true;
264 else
265 s_isNegative = false;
266
267 s_iVariableLen = strlen( s_szReturn );
268
269 if ( s_iVariableLen >= 4 && iThousandSeparator)
270 {
271 s_szThousandSeparator[ 0 ] = iThousandSeparator;
272
273 s_iChar = s_iVariableLen;
274 s_iSepPos = 0;
275
276 while ( --s_iChar > _:s_isNegative )
277 {
278 if ( ++s_iSepPos == 3 )
279 {
280 strins( s_szReturn, s_szThousandSeparator, s_iChar );
281
282 s_iSepPos = 0;
283 }
284 }
285 }
286 if(iCurrencyChar) {
287 s_szCurrencyChar[ 0 ] = iCurrencyChar;
288 strins( s_szReturn, s_szCurrencyChar, _:s_isNegative );
289 }
290 return s_szReturn;
291}
292
293IsPlayerNearAGVM(playerid)
294{
295 for(new i; i < MAX_MACHINES; i++)
296 {
297 if(!MachineData[i][mExists]) continue;
298 if(IsPlayerInRangeOfPoint(playerid, 3.0, MachineData[i][mPosX], MachineData[i][mPosY], MachineData[i][mPosZ])) return 1;
299 }
300
301 return 0;
302}
303
304ShowCategories(playerid, mode = 0)
305{
306 new name[24];
307 stmt_bind_result_field(ListCategories, 0, DB::TYPE_STRING, name, sizeof(name));
308
309 if(stmt_execute(ListCategories))
310 {
311 new string[512], dialogid, action_string[16], cancel_string[16];
312 switch(mode)
313 {
314 case 1:
315 {
316 dialogid = DIALOG_REMOVE_CATEGORY;
317 format(action_string, sizeof(action_string), "Remove");
318 format(cancel_string, sizeof(cancel_string), "Close");
319 }
320
321 case 2:
322 {
323 dialogid = DIALOG_RENAME_CATEGORY;
324 format(action_string, sizeof(action_string), "Rename");
325 format(cancel_string, sizeof(cancel_string), "Close");
326 }
327
328 case 3:
329 {
330 dialogid = DIALOG_ADD_WEAPON_FINAL;
331 format(action_string, sizeof(action_string), "Add Weapon");
332 format(cancel_string, sizeof(cancel_string), "Back");
333 }
334
335 case 4:
336 {
337 dialogid = DIALOG_REMOVE_WEAPON_1;
338 format(action_string, sizeof(action_string), "Choose");
339 format(cancel_string, sizeof(cancel_string), "Close");
340 }
341
342 default:
343 {
344 dialogid = DIALOG_WEAPONS_MENU;
345 format(action_string, sizeof(action_string), "Choose");
346 format(cancel_string, sizeof(cancel_string), "Close");
347 }
348 }
349
350 while(stmt_fetch_row(ListCategories)) format(string, sizeof(string), "%s%s\n", string, name);
351 ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, "{F1C40F}GVM: {FFFFFF}Choose a Category", string, action_string, cancel_string);
352 }
353
354 return 1;
355}
356
357ShowWeapons(playerid, removing = 0)
358{
359 new id, ammo, price;
360 stmt_bind_value(ListWeapons, 0, DB::TYPE_INTEGER, CurCategoryID[playerid]);
361 stmt_bind_result_field(ListWeapons, 0, DB::TYPE_INTEGER, id);
362 stmt_bind_result_field(ListWeapons, 1, DB::TYPE_INTEGER, ammo);
363 stmt_bind_result_field(ListWeapons, 2, DB::TYPE_INTEGER, price);
364
365 if(stmt_execute(ListWeapons) && stmt_rows_left(ListWeapons) > 0) {
366 new string[256], w_name[24];
367 format(string, sizeof(string), "Weapon\tAmmo\tPrice\n");
368
369 while(stmt_fetch_row(ListWeapons))
370 {
371 GetWeaponName(id, w_name, 24);
372 format(string, sizeof(string), "%s%s\t%s\t{2ECC71}%s\n", string, w_name, formatInt(ammo, .iCurrencyChar = '\0'), formatInt(price));
373 }
374
375 new title[64];
376 format(title, sizeof(title), "{F1C40F}GVM: {FFFFFF}%s", Machine_GetCategoryName(CurCategoryID[playerid]));
377 ShowPlayerDialog(playerid, (removing) ? DIALOG_REMOVE_WEAPON_FINAL : DIALOG_WEAPONS_BUY, DIALOG_STYLE_TABLIST_HEADERS, title, string, (removing) ? ("Remove") : ("Buy"), "Back");
378 }else{
379 SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}No weapons on this category.");
380 ShowCategories(playerid, (removing) ? 4 : 0);
381 }
382
383 return 1;
384}
385
386ShowWeaponList(playerid)
387{
388 new string[666], w_name[24];
389 for(new i = 1; i <= 46; i++)
390 {
391 GetWeaponName(i, w_name, sizeof(w_name));
392 format(string, sizeof(string), "%s%d - %s\n", string, i, w_name);
393 }
394
395 ShowPlayerDialog(playerid, DIALOG_ADD_WEAPON_1, DIALOG_STYLE_LIST, "{F1C40F}GVM: {FFFFFF}Add Weapon", string, "Next", "Cancel");
396 return 1;
397}
398
399Machine_FindFreeID()
400{
401 for(new i; i < MAX_MACHINES; i++) if(!MachineData[i][mExists]) return i;
402 return -1;
403}
404
405Machine_GetCategoryID(name[])
406{
407 new id = -1;
408 stmt_bind_value(ReturnCategoryID, 0, DB::TYPE_STRING, name, 24);
409 stmt_bind_result_field(ReturnCategoryID, 0, DB::TYPE_INTEGER, id);
410
411 if(stmt_execute(ReturnCategoryID) && stmt_rows_left(ReturnCategoryID) > 0) stmt_fetch_row(ReturnCategoryID);
412 return id;
413}
414
415Machine_GetCategoryName(id)
416{
417 new name[24];
418 stmt_bind_value(ReturnCategoryName, 0, DB::TYPE_INTEGER, id);
419 stmt_bind_result_field(ReturnCategoryName, 0, DB::TYPE_STRING, name, 24);
420
421 if(stmt_execute(ReturnCategoryName) && stmt_rows_left(ReturnCategoryName) > 0) stmt_fetch_row(ReturnCategoryName);
422 return name;
423}
424
425Machine_GetWeaponData(catid, index, &weapon, &ammo, &price)
426{
427 stmt_bind_value(LoadWeapon, 0, DB::TYPE_INTEGER, catid);
428 stmt_bind_value(LoadWeapon, 1, DB::TYPE_INTEGER, index);
429 stmt_bind_result_field(LoadWeapon, 0, DB::TYPE_INTEGER, weapon);
430 stmt_bind_result_field(LoadWeapon, 1, DB::TYPE_INTEGER, ammo);
431 stmt_bind_result_field(LoadWeapon, 2, DB::TYPE_INTEGER, price);
432
433 if(stmt_execute(LoadWeapon) && stmt_rows_left(LoadWeapon) > 0)
434 {
435 stmt_fetch_row(LoadWeapon);
436 return 1;
437 }
438
439 return 0;
440}
441
442
443enum vInfo
444{
445 vID,
446}
447
448enum _:E_DIALOG
449{
450 DIALOG_DRUG_STATS = 8620,
451 DIALOG_CONFIRM_RESET,
452 DIALOG_DRUG_DEALER,
453 DIALOG_DRUG_DEALER_BUY_SEEDS,
454 DIALOG_DRUG_DEALER_BUY_DRUGS,
455 DIALOG_DRUG_DEALER_SELL,
456 DIALOG_DRUG_OFFER
457}
458
459enum E_PLANT
460{
461 plantedBy[MAX_PLAYER_NAME],
462 Float: plantX,
463 Float: plantY,
464 Float: plantZ,
465 plantGrowth,
466 plantObj,
467 plantTimer,
468 Text3D: plantLabel,
469 bool: gotLeaves
470}
471
472enum E_PLAYER
473{
474 // saved
475 Drugs,
476 Seeds,
477 TotalUsed,
478 TotalPlanted,
479 TotalHarvestedPlants,
480 TotalHarvestedGrams,
481 TotalGiven,
482 TotalReceived,
483 TotalBought,
484 TotalBoughtPrice,
485 TotalSold,
486 TotalSoldPrice,
487 // temp
488 DrugsCooldown,
489 DealerID,
490 DrugsOfferedBy,
491 DrugsOfferedPrice,
492 DrugsOfferCooldown
493}
494
495enum E_DEALER
496{
497 // loaded from db
498 dealerSkin,
499 dealerDrugs,
500 Float: dealerX,
501 Float: dealerY,
502 Float: dealerZ,
503 Float: dealerA,
504 // temp
505 dealerActorID,
506 Text3D: dealerLabel
507}
508
509new
510 PlantData[MAX_PLANTS][E_PLANT],
511 Iterator: Plants<MAX_PLANTS>;
512
513new
514 PlayerDrugData[MAX_PLAYERS][E_PLAYER],
515 RegenTimer[MAX_PLAYERS] = {-1, ...},
516 EffectTimer[MAX_PLAYERS] = {-1, ...};
517
518new
519 DealerData[MAX_DEALERS][E_DEALER],
520 Iterator: Dealers<MAX_DEALERS>;
521
522new
523 DB: DrugDB;
524
525new
526 DBStatement: LoadPlayer,
527 DBStatement: InsertPlayer,
528 DBStatement: SavePlayer;
529
530new
531 DBStatement: LoadDealers,
532 DBStatement: AddDealer,
533 DBStatement: UpdateDealer,
534 DBStatement: UpdateDealerDrugs,
535 DBStatement: RemoveDealer;
536
537RandomEx(min, max) //Y_Less
538 return random(max - min) + min;
539
540Float: DistanceBetweenPlayers(player1, player2)
541{
542 new Float: x, Float: y, Float: z;
543 GetPlayerPos(player2, x, y, z);
544 return GetPlayerDistanceFromPoint(player1, x, y, z);
545}
546
547GetClosestPlant(playerid, Float: range = 1.5)
548{
549 new id = -1, Float: dist = range, Float: tempdist;
550 foreach(new i : Plants)
551 {
552 tempdist = GetPlayerDistanceFromPoint(playerid, PlantData[i][plantX], PlantData[i][plantY], PlantData[i][plantZ]);
553
554 if(tempdist > range) continue;
555 if(tempdist <= dist)
556 {
557 dist = tempdist;
558 id = i;
559 }
560 }
561
562 return id;
563}
564
565GetClosestDealer(playerid, Float: range = 2.0)
566{
567 new id = -1, Float: dist = range, Float: tempdist;
568 foreach(new i : Dealers)
569 {
570 tempdist = GetPlayerDistanceFromPoint(playerid, DealerData[i][dealerX], DealerData[i][dealerY], DealerData[i][dealerZ]);
571
572 if(tempdist > range) continue;
573 if(tempdist <= dist)
574 {
575 dist = tempdist;
576 id = i;
577 }
578 }
579
580 return id;
581}
582
583ShowDrugStats(playerid)
584{
585 new dialog[350];
586 format(
587 dialog,
588 sizeof(dialog),
589 "Drugs\t%s grams\n\
590 Seeds\t%s\n\
591 Used Drugs\t%s grams\n\
592 Planted Drugs\t%s\n\
593 Harvested Plants\t%s (%s grams)\n\
594 Drugs Given\t%s grams\n\
595 Drugs Received\t%s grams\n\
596 Drugs Bought\t%s grams {2ECC71}(%s)\n\
597 Drugs Sold\t%s grams {2ECC71}(%s)\n\
598 {FF0000}Reset Stats",
599 formatInt(PlayerDrugData[playerid][Drugs], .iCurrencyChar = '\0'),
600 formatInt(PlayerDrugData[playerid][Seeds], .iCurrencyChar = '\0'),
601 formatInt(PlayerDrugData[playerid][TotalUsed], .iCurrencyChar = '\0'),
602 formatInt(PlayerDrugData[playerid][TotalPlanted], .iCurrencyChar = '\0'),
603 formatInt(PlayerDrugData[playerid][TotalHarvestedPlants], .iCurrencyChar = '\0'), formatInt(PlayerDrugData[playerid][TotalHarvestedGrams], .iCurrencyChar = '\0'),
604 formatInt(PlayerDrugData[playerid][TotalGiven], .iCurrencyChar = '\0'),
605 formatInt(PlayerDrugData[playerid][TotalReceived], .iCurrencyChar = '\0'),
606 formatInt(PlayerDrugData[playerid][TotalBought], .iCurrencyChar = '\0'), formatInt(PlayerDrugData[playerid][TotalBoughtPrice]),
607 formatInt(PlayerDrugData[playerid][TotalSold], .iCurrencyChar = '\0'), formatInt(PlayerDrugData[playerid][TotalSoldPrice])
608 );
609
610 ShowPlayerDialog(playerid, DIALOG_DRUG_STATS, DIALOG_STYLE_TABLIST, "Drug Stats", dialog, "Choose", "Close");
611 return 1;
612}
613
614ShowDealerMenu(playerid)
615{
616 new dialog[300], id = PlayerDrugData[playerid][DealerID];
617 format(
618 dialog,
619 sizeof(dialog),
620 "Option\tPrice\tYou Have\n\
621 {%06x}Buy Drug Plant Seed\t{2ECC71}%s\t%s\n\
622 {%06x}Buy Drugs (%s grams on dealer)\t{2ECC71}%s x gram\t%s grams\n\
623 {%06x}Sell Drugs\t{2ECC71}%s x gram\t%s grams",
624 (PlayerDrugData[playerid][Seeds] < SEED_LIMIT) ? 0xFFFFFFFF >>> 8 : 0xE74C3CFF >>> 8, formatInt(SEED_PRICE), formatInt(PlayerDrugData[playerid][Seeds], .iCurrencyChar = '\0'),
625 (PlayerDrugData[playerid][Drugs] >= CARRY_LIMIT || DealerData[id][dealerDrugs] < 1) ? 0xE74C3CFF >>> 8 : 0xFFFFFFFF >>> 8, formatInt(DealerData[id][dealerDrugs], .iCurrencyChar = '\0'), formatInt(DRUG_BUY_PRICE), formatInt(PlayerDrugData[playerid][Drugs], .iCurrencyChar = '\0'),
626 (PlayerDrugData[playerid][Drugs] > 0) ? 0xFFFFFFFF >>> 8 : 0xE74C3CFF >>> 8, formatInt(DRUG_SELL_PRICE), formatInt(PlayerDrugData[playerid][Drugs], .iCurrencyChar = '\0')
627 );
628
629 ShowPlayerDialog(playerid, DIALOG_DRUG_DEALER, DIALOG_STYLE_TABLIST_HEADERS, "Drug Dealer", dialog, "Choose", "Close");
630 return 1;
631}
632
633Player_GetName(playerid)
634{
635 new name[MAX_PLAYER_NAME];
636 GetPlayerName(playerid, name, MAX_PLAYER_NAME);
637 return name;
638}
639
640Player_PlantCount(playerid)
641{
642 new count = 0, name[MAX_PLAYER_NAME];
643 GetPlayerName(playerid, name, MAX_PLAYER_NAME);
644 foreach(new i : Plants) if(!strcmp(PlantData[i][plantedBy], name, true)) count++;
645 return count;
646}
647
648Player_Init(playerid)
649{
650 new emptydata[E_PLAYER];
651 PlayerDrugData[playerid] = emptydata;
652 PlayerDrugData[playerid][DrugsOfferedBy] = INVALID_PLAYER_ID;
653 RegenTimer[playerid] = EffectTimer[playerid] = -1;
654
655 // load player
656 new drugs, seeds, totalused, totalplanted, harvested[2], given, received, bought[2], sold[2];
657 stmt_bind_value(LoadPlayer, 0, DB::TYPE_STRING, Player_GetName(playerid));
658 stmt_bind_result_field(LoadPlayer, 0, DB::TYPE_INTEGER, drugs);
659 stmt_bind_result_field(LoadPlayer, 1, DB::TYPE_INTEGER, seeds);
660 stmt_bind_result_field(LoadPlayer, 2, DB::TYPE_INTEGER, totalused);
661 stmt_bind_result_field(LoadPlayer, 3, DB::TYPE_INTEGER, totalplanted);
662 stmt_bind_result_field(LoadPlayer, 4, DB::TYPE_INTEGER, harvested[0]);
663 stmt_bind_result_field(LoadPlayer, 5, DB::TYPE_INTEGER, harvested[1]);
664 stmt_bind_result_field(LoadPlayer, 6, DB::TYPE_INTEGER, given);
665 stmt_bind_result_field(LoadPlayer, 7, DB::TYPE_INTEGER, received);
666 stmt_bind_result_field(LoadPlayer, 8, DB::TYPE_INTEGER, bought[0]);
667 stmt_bind_result_field(LoadPlayer, 9, DB::TYPE_INTEGER, bought[1]);
668 stmt_bind_result_field(LoadPlayer, 10, DB::TYPE_INTEGER, sold[0]);
669 stmt_bind_result_field(LoadPlayer, 11, DB::TYPE_INTEGER, sold[1]);
670
671 if(stmt_execute(LoadPlayer))
672 {
673 if(stmt_rows_left(LoadPlayer) > 0) {
674 stmt_fetch_row(LoadPlayer);
675
676 PlayerDrugData[playerid][Drugs] = drugs;
677 PlayerDrugData[playerid][Seeds] = seeds;
678 PlayerDrugData[playerid][TotalUsed] = totalused;
679 PlayerDrugData[playerid][TotalPlanted] = totalplanted;
680 PlayerDrugData[playerid][TotalHarvestedPlants] = harvested[0];
681 PlayerDrugData[playerid][TotalHarvestedGrams] = harvested[1];
682 PlayerDrugData[playerid][TotalGiven] = given;
683 PlayerDrugData[playerid][TotalReceived] = received;
684 PlayerDrugData[playerid][TotalBought] = bought[0];
685 PlayerDrugData[playerid][TotalBoughtPrice] = bought[1];
686 PlayerDrugData[playerid][TotalSold] = sold[0];
687 PlayerDrugData[playerid][TotalSoldPrice] = sold[1];
688 }else{
689 stmt_bind_value(InsertPlayer, 0, DB::TYPE_STRING, Player_GetName(playerid));
690 stmt_execute(InsertPlayer);
691 }
692 }
693
694 return 1;
695}
696
697Player_SaveDrugs(playerid)
698{
699 stmt_bind_value(SavePlayer, 0, DB::TYPE_INTEGER, PlayerDrugData[playerid][Drugs]);
700 stmt_bind_value(SavePlayer, 1, DB::TYPE_INTEGER, PlayerDrugData[playerid][Seeds]);
701 stmt_bind_value(SavePlayer, 2, DB::TYPE_INTEGER, PlayerDrugData[playerid][TotalUsed]);
702 stmt_bind_value(SavePlayer, 3, DB::TYPE_INTEGER, PlayerDrugData[playerid][TotalPlanted]);
703 stmt_bind_value(SavePlayer, 4, DB::TYPE_INTEGER, PlayerDrugData[playerid][TotalHarvestedPlants]);
704 stmt_bind_value(SavePlayer, 5, DB::TYPE_INTEGER, PlayerDrugData[playerid][TotalHarvestedGrams]);
705 stmt_bind_value(SavePlayer, 6, DB::TYPE_INTEGER, PlayerDrugData[playerid][TotalGiven]);
706 stmt_bind_value(SavePlayer, 7, DB::TYPE_INTEGER, PlayerDrugData[playerid][TotalReceived]);
707 stmt_bind_value(SavePlayer, 8, DB::TYPE_INTEGER, PlayerDrugData[playerid][TotalBought]);
708 stmt_bind_value(SavePlayer, 9, DB::TYPE_INTEGER, PlayerDrugData[playerid][TotalBoughtPrice]);
709 stmt_bind_value(SavePlayer, 10, DB::TYPE_INTEGER, PlayerDrugData[playerid][TotalSold]);
710 stmt_bind_value(SavePlayer, 11, DB::TYPE_INTEGER, PlayerDrugData[playerid][TotalSoldPrice]);
711 stmt_bind_value(SavePlayer, 12, DB::TYPE_STRING, Player_GetName(playerid));
712 return stmt_execute(SavePlayer);
713}
714
715Plant_GrowthPercentage(id)
716{
717 if(!Iter_Contains(Plants, id)) return 0;
718 return (PlantData[id][plantGrowth] * 100) / PLANT_MAX_GROWTH;
719}
720
721Plant_GetOwnerID(id)
722{
723 if(!Iter_Contains(Plants, id)) return INVALID_PLAYER_ID;
724 foreach(new i : Player) if(!strcmp(PlantData[id][plantedBy], Player_GetName(i), true)) return i;
725 return INVALID_PLAYER_ID;
726}
727
728Plant_Destroy(id)
729{
730 if(!Iter_Contains(Plants, id)) return 0;
731 KillTimer(PlantData[id][plantTimer]);
732 DestroyDynamicObject(PlantData[id][plantObj]);
733 DestroyDynamic3DTextLabel(PlantData[id][plantLabel]);
734
735 PlantData[id][plantObj] = PlantData[id][plantTimer] = -1;
736 PlantData[id][plantLabel] = Text3D: -1;
737 PlantData[id][gotLeaves] = false;
738
739 Iter_Remove(Plants, id);
740 return 1;
741}
742
743// ============= » FORWARDS =============
744forward LoadUser_data(playerid,name[],value[]);
745public LoadUser_data(playerid,name[],value[])
746{
747 INI_String("Name", PlayerInfo[playerid][Name], 32);
748 INI_Int("Password",PlayerInfo[playerid][Password]);
749 INI_Int("Level",PlayerInfo[playerid][Level]);
750 INI_Int("Helper",PlayerInfo[playerid][Helper]);
751 INI_Int("Registered",PlayerInfo[playerid][Registered]);
752 INI_Int("Money",PlayerInfo[playerid][Money]);
753 INI_Int("AdminLevel",PlayerInfo[playerid][AdminLevel]);
754 INI_Int("Age",PlayerInfo[playerid][Age]);
755 INI_Int("Gender",PlayerInfo[playerid][Gender]);
756 INI_Int("Skin",PlayerInfo[playerid][Skin]);
757 INI_Int("RegDate",PlayerInfo[playerid][RegDate]);
758 INI_Int("RegMonth",PlayerInfo[playerid][RegMonth]);
759 INI_Int("RegYear",PlayerInfo[playerid][RegYear]);
760 INI_Int("TimesKicked",PlayerInfo[playerid][TimesKicked]);
761 INI_Int("Banned",PlayerInfo[playerid][Banned]);
762 INI_String("BannedBy",PlayerInfo[playerid][BannedBy], 32);
763 INI_String("BanReason",PlayerInfo[playerid][BanReason], 128);
764 INI_Int("TimesWarned",PlayerInfo[playerid][TimesWarned]);
765 return 1;
766}
767stock SaveUser(playerid)
768{
769 PlayerInfo[playerid][Money] = GetPlayerMoney(playerid);
770 PlayerInfo[playerid][Level] = GetPlayerScore(playerid);
771 new INI:File = INI_Open(UserPath(playerid));
772 INI_WriteString(File,"Name",PlayerInfo[playerid][Name]);
773 INI_WriteInt(File,"Password",PlayerInfo[playerid][Password]);
774 INI_WriteInt(File,"Level",PlayerInfo[playerid][Level]);
775 INI_WriteInt(File,"Helper",PlayerInfo[playerid][Helper]);
776 INI_WriteInt(File,"Registered",PlayerInfo[playerid][Registered]);
777 INI_WriteInt(File,"Money",PlayerInfo[playerid][Money]);
778 INI_WriteInt(File,"AdminLevel",PlayerInfo[playerid][AdminLevel]);
779 INI_WriteInt(File,"Age",PlayerInfo[playerid][Age]);
780 INI_WriteInt(File,"Gender",PlayerInfo[playerid][Gender]);
781 INI_WriteInt(File,"Skin",PlayerInfo[playerid][Skin]);
782 INI_WriteInt(File,"RegDate",PlayerInfo[playerid][RegDate]);
783 INI_WriteInt(File,"RegMonth",PlayerInfo[playerid][RegMonth]);
784 INI_WriteInt(File,"RegYear",PlayerInfo[playerid][RegYear]);
785 INI_WriteInt(File,"TimesKicked",PlayerInfo[playerid][TimesKicked]);
786 INI_WriteInt(File,"Banned",PlayerInfo[playerid][Banned]);
787 INI_WriteString(File,"BannedBy",PlayerInfo[playerid][BannedBy]);
788 INI_WriteString(File,"BanReason",PlayerInfo[playerid][BanReason]);
789 INI_WriteInt(File,"TimesWarned",PlayerInfo[playerid][TimesWarned]);
790 INI_Close(File);
791 return 1;
792}
793forward KickPlayer(playerid);
794public KickPlayer(playerid)
795{
796 SetTimerEx("KickUser", 1000, 0, "i", playerid);
797}
798forward KickUser(playerid);
799public KickUser(playerid)
800{
801 Kick(playerid);
802}
803forward PrepareFirstSpawn(playerid);
804public PrepareFirstSpawn(playerid)
805{
806 Spawned[playerid] = 1;
807 TogglePlayerSpectating(playerid, 0);
808 SetPlayerVirtualWorld(playerid, 0);
809 SetPlayerInterior(playerid, 0);
810 SetSpawnInfo(playerid, 0, 170, -35.5528, 1420.6594, 13.2465, 98, 0, 0, 0, 0, 0, 0);
811 SpawnPlayer(playerid);
812 SetCameraBehindPlayer(playerid);
813 PlayerInfo[playerid][Money] = 3000;
814 GivePlayerMoney(playerid, 5000);
815 PlayerInfo[playerid][Level] = 1;
816 SetPlayerScore(playerid, 1);
817 SendClientMessage(playerid, GREY, "Use /help & /helpme for commands and live help! Enjoy your stay here.");
818 return 1;
819}
820forward InterPol(playerid);
821public InterPol(playerid)
822{
823 ShowMNT(playerid);
824 TogglePlayerSpectating(playerid, 1);
825 SetPlayerVirtualWorld(playerid, 5);
826 new rand = random(5);
827 switch(rand)
828 {
829 case 1:
830 {
831 InterpolateCameraPos(playerid, -17.8958, 1214.2452, 22.9738, -20.1276, 1214.2823, 22.9738, 6000,CAMERA_MOVE);
832 InterpolateCameraLookAt(playerid, -63.2371, 1183.7734, 18.5250, -63.2371, 1183.7734, 18.5250, 6000,CAMERA_MOVE);
833 }
834 case 2:
835 {
836 InterpolateCameraPos(playerid, 423.7457, 1666.7694, 38.0824, 426.0505, 1666.1898, 38.0824, 6000,CAMERA_MOVE);
837 InterpolateCameraLookAt(playerid, 427.7002, 1230.3662, 9.0451, 427.7002, 1230.3662, 9.0451, 6000,CAMERA_MOVE);
838 }
839 case 3:
840 {
841 InterpolateCameraPos(playerid, -34.9903, 950.7279, 20.5772, -42.5423, 950.6465, 20.5772, 6000,CAMERA_MOVE);
842 InterpolateCameraLookAt(playerid, -33.1911, 1037.0138, 20.3607, -42.8496, 1057.9865, 19.9063, 6000,CAMERA_MOVE);
843 }
844 }
845 return 1;
846}
847public OnPlayerText(playerid, text[])
848{
849 new string[128];
850 format(string, sizeof(string), "%s says: %s", RemoveUnderScore(playerid), text);
851 CloseMessage(playerid, GREY, string);
852 return 0;
853}
854// ============= » STOCKS =============
855stock UserPath(playerid)
856{
857 new string[128],playername[MAX_PLAYER_NAME];
858 GetPlayerName(playerid,playername,sizeof(playername));
859 format(string,sizeof(string),PATH,playername);
860 return string;
861}
862stock udb_hash(buf[])
863{
864 new length=strlen(buf);
865 new s1 = 1;
866 new s2 = 0;
867 new n;
868 for (n=0; n<length; n++)
869 {
870 s1 = (s1 + buf[n]) % 65521;
871 s2 = (s2 + s1) % 65521;
872 }
873 return (s2 << 16) + s1;
874}
875stock RemoveUnderScore(playerid)
876{
877 new name[MAX_PLAYER_NAME];
878 GetPlayerName(playerid,name,sizeof(name));
879 for(new i = 0; i < MAX_PLAYER_NAME; i++)
880 {
881 if(name[i] == '_') name[i] = ' ';
882 }
883 return name;
884}
885stock IsValidName(playerid)
886{
887 if (IsPlayerConnected(playerid))
888 {
889 new player[24];
890 GetPlayerName(playerid,player,24);
891 for(new n = 0; n < strlen(player); n++)
892 {
893 if (player[n] == '_') return 1;
894 if (player[n] == ']' || player[n] == '[') return 0;
895 }
896 }
897 return 0;
898}
899stock SendAdminMessage(color, string[])
900{
901 foreach(new i : Player)
902 {
903 if(IsPlayerConnected(i) && PlayerInfo[i][AdminLevel] >= 1)
904 {
905 SendClientMessage(i, color, string);
906 }
907 }
908 return 1;
909}
910stock SendHelperMessage(color, string[])
911{
912 foreach(new i : Player)
913 {
914 if(IsPlayerConnected(i) && PlayerInfo[i][Helper] == 1)
915 {
916 SendClientMessage(i, color, string);
917 }
918 }
919 return 1;
920}
921stock NotAdmin(playerid)
922{
923 SendClientMessage(playerid, GREY, AdminOnly);
924 return 1;
925}
926stock NotLogged(playerid)
927{
928 SendClientMessage(playerid, GREY, NotSpawnedYet);
929 return 1;
930}
931stock SendCitizenship(playerid)
932{
933 new string[128];
934 SendClientMessage(playerid, WHITE, "");
935 SendClientMessage(playerid, WHITE, "");
936 SendClientMessage(playerid, WHITE, "");
937 SendClientMessage(playerid, WHITE, "");
938 SendClientMessage(playerid, WHITE, "");
939 SendClientMessage(playerid, WHITE, "");
940 SendClientMessage(playerid, WHITE, "");
941 SendClientMessage(playerid, WHITE, "(===================[Jakarta DeathMatch]===================)");
942 format(string, sizeof(string), "(====== {50BB44}Selamat Datang Di Server Jakarta DeathMatch {FFFFFF}%s ============)",PlayerInfo[playerid][Name]);
943 SendClientMessage(playerid, WHITE, string);
944 format(string, sizeof(string), "(====== {50BB44}Ini Adalah Umur Yang Kamu Pilih : {FFFFFF}%d ===================================)", PlayerInfo[playerid][Age]);
945 SendClientMessage(playerid, WHITE, string);
946 format(string, sizeof(string), "(====== {50BB44}Jenis Kelamin Kamu : {FFFFFF}%s ===============================)",GetGender(playerid));
947 SendClientMessage(playerid, WHITE, string);
948 SendClientMessage(playerid, WHITE, "(===============================================================)");
949 SendClientMessage(playerid, WHITE, "");
950 format(string, sizeof(string), "Semoga Betah Ya Di Server Jakarta DeathMatch Ini Player %s.",PlayerInfo[playerid][Name]);
951 SendClientMessage(playerid, WHITE, string);
952 PlayerInfo[playerid][Registered] = 1;
953 SetTimerEx("PrepareFirstSpawn", 1000, false, "i", playerid);
954 return 1;
955}
956stock CloseMessage(playerid, color, string[])
957{
958 for(new i = 0; i < MAX_PLAYERS; i++)
959 {
960 new Float:x, Float:y, Float:z;
961 GetPlayerPos(playerid, x, y, z);
962 if(IsPlayerInRangeOfPoint(i, 10.0, x, y, z))
963 {
964 if(GetPlayerVirtualWorld(playerid) == GetPlayerVirtualWorld(i))
965 {
966 if(GetPlayerInterior(playerid) == GetPlayerInterior(i))
967 {
968 SendClientMessage(i, color, string);
969 }
970 }
971 }
972 }
973}
974stock NewStats(playerid)
975{
976 getdate(PlayerInfo[playerid][RegYear], PlayerInfo[playerid][RegMonth], PlayerInfo[playerid][RegDate]);
977 format(PlayerInfo[playerid][Name], 32, RemoveUnderScore(playerid));
978 PlayerInfo[playerid][AdminLevel] = 0;
979 PlayerInfo[playerid][Level] = 0;
980 PlayerInfo[playerid][TimesKicked] = 0;
981 PlayerInfo[playerid][Banned] = 0;
982 format(PlayerInfo[playerid][BannedBy], 32, "N/A");
983 format(PlayerInfo[playerid][BanReason], 128, "N/A");
984 PlayerInfo[playerid][TimesWarned] = 0;
985 PlayerInfo[playerid][Skin] = 170;
986 SetPlayerSkin(playerid, PlayerInfo[playerid][Skin]);
987 return 1;
988}
989stock ShowRegisterDialog(playerid)
990{
991 new string [128];
992 format(string, sizeof(string), "{FFFFFF}Welcome To Jakarta DeathMatch, {50BB44}%s.\n{FFFFFF}Type your desired password below to Register.", RemoveUnderScore(playerid));
993 ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,"Register",string,"Register","Quit");
994 return 1;
995}
996stock ShowLoginDialog(playerid)
997{
998 new string [128];
999 format(string, sizeof(string), "{FFFFFF}Welcome Back, {50BB44}%s.\n{FFFFFF}Type Your below Password To Login.", RemoveUnderScore(playerid));
1000 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,"Login",string,"Login","Quit");
1001 return 1;
1002}
1003stock ShowCharacterDialog(playerid)
1004{
1005 new string[128];
1006 format(string, sizeof(string), "{FFFFFF}Play as {50BB44}%s\n\n{FFFFFF}Profile Settings", PlayerInfo[playerid][Name]);
1007 ShowPlayerDialog(playerid, DIALOG_CHARSELECT, DIALOG_STYLE_LIST,"Menu",string,"Select","Quit");
1008 return 1;
1009}
1010stock ShowCharacterInformation(playerid)
1011{
1012 new string[128];
1013 SendClientMessage(playerid, WHITE, "You have successfully logged in {50BB44}Jakarta DeathMatch.");
1014
1015 format(string, sizeof(string), "Account Name: {50BB44}%s",PlayerInfo[playerid][Name]);
1016 SendClientMessage(playerid, WHITE, string);
1017
1018 if(PlayerInfo[playerid][AdminLevel] == 0) format (string, sizeof(string), "Administrator Level: {50BB44}None.");
1019 else format(string, sizeof(string), "Administrator Level: {50BB44}%s {FFFFFF}(%d)",GetAdminRank(playerid),PlayerInfo[playerid][AdminLevel]);
1020 SendClientMessage(playerid, WHITE, string);
1021
1022 format(string, sizeof(string), "Level: {50BB44}%d",PlayerInfo[playerid][Level]);
1023 SendClientMessage(playerid, WHITE, string);
1024 return 1;
1025}
1026stock ShowProfileSettings(playerid)
1027{
1028 new string[128];
1029 format(string, sizeof(string), "{FFFFFF}Change Name {50BB44}(Current: %s)\nChange Age\nChange Gender\nChange Password", PlayerInfo[playerid][Name]);
1030 ShowPlayerDialog(playerid, DIALOG_PROFILE, DIALOG_STYLE_LIST,"{FFFFFF}Profile",string,"Select","");
1031 return 1;
1032}
1033stock GetGender(playerid)
1034{
1035 new astring[128];
1036 if(PlayerInfo[playerid][Gender] == 1)format(astring, sizeof(astring), "Male");
1037 else if(PlayerInfo[playerid][Gender] == 2)format(astring, sizeof(astring), "Female");
1038 return astring;
1039}
1040stock GetAdminRank(playerid)
1041{
1042 new astring[28];
1043 if(PlayerInfo[playerid][AdminLevel] == 1)format(astring, sizeof(astring), "Trial Administrator");
1044 else if(PlayerInfo[playerid][AdminLevel] == 2)format(astring, sizeof(astring), "Administrator");
1045 else if(PlayerInfo[playerid][AdminLevel] == 3)format(astring, sizeof(astring), "Senior Administrator");
1046 else if(PlayerInfo[playerid][AdminLevel] == 4)format(astring, sizeof(astring), "Management");
1047 else if(PlayerInfo[playerid][AdminLevel] == 5)format(astring, sizeof(astring), "Server Owner");
1048 return astring;
1049}
1050main()
1051{
1052 print("\n----------------------------------");
1053 print(" » Jakarta DeathMatch [ENG] ");
1054 print("----------------------------------\n");
1055}
1056public OnGameModeInit()
1057{
1058 print("[xVeh MySql] Connecting to database...");
1059
1060 mysqlB = mysql_connect(SQL_HOST, SQL_USER, SQL_PASSWORD, SQL_DBNAME);
1061 mysql_log(ALL);
1062 if (mysql_errno(mysqlB) == 0) print("[xVeh MySql] Connection successful!");
1063 else print("[xVeh MySql] The connection has failed!\n\n[!!! xVehicle v2 couldn't init !!!]\n\n");
1064
1065 new query[1024];
1066
1067 strcat(query, "CREATE TABLE IF NOT EXISTS `xVehicle` (\
1068 `ID` int(11),\
1069 `Sahip` varchar(48) default '',\
1070 `Fiyat` int(11) default '0',\
1071 `X` float default '0',\
1072 `Y` float default '0',\
1073 `Z` float default '0',\
1074 `A` float default '0',\
1075 `HizliPark` int(2) default '0',\
1076 `Model` int(5) default '0',\
1077 `Renk1` int(5) default '0',\
1078 `Renk2` int(5) default '0',\
1079 `Plaka` varchar(8),\
1080 `Garajda` int(2) default '0',\
1081 `PJ` int(5) default '-1',");
1082
1083 strcat(query, "`Parca1` int(8) default '0',\
1084 `Parca2` int(8) default '0',\
1085 `Parca3` int(8) default '0',\
1086 `Parca4` int(8) default '0',\
1087 `Parca5` int(8) default '0',\
1088 `Parca6` int(8) default '0',\
1089 `Parca7` int(8) default '0',\
1090 `Parca8` int(8) default '0',");
1091
1092
1093 strcat(query, "`Parca9` int(8) default '0',\
1094 `Parca10` int(8) default '0',\
1095 `Parca11` int(8) default '0',\
1096 `Parca12` int(8) default '0',\
1097 `Parca13` int(8) default '0',\
1098 `Parca14` int(8) default '0',\
1099 PRIMARY KEY (`ID`),\
1100 UNIQUE KEY `ID_2` (`ID`),\
1101 KEY `ID` (`ID`)\
1102 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
1103
1104 mysql_query(mysqlB, query);
1105
1106 mysql_query(mysqlB, "CREATE TABLE IF NOT EXISTS `xVehicleKeys` (\
1107 `AracID` int(11) NOT NULL,\
1108 `Isim` varchar(24) NOT NULL\
1109 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
1110
1111 Iter_Add(xVehicles, 0);
1112
1113 mysql_tquery(mysqlB, "SELECT * FROM `xVehicle`", "LoadxVehicles");
1114 //Diatas adalah script mysql buat kendaraan sistem nya
1115 for(new i; i < MAX_PLANTS; i++)
1116 {
1117 PlantData[i][plantObj] = PlantData[i][plantTimer] = -1;
1118 PlantData[i][plantLabel] = Text3D: -1;
1119 }
1120
1121 for(new i; i < MAX_DEALERS; i++)
1122 {
1123 DealerData[i][dealerActorID] = -1;
1124 DealerData[i][dealerLabel] = Text3D: -1;
1125 }
1126
1127 // database
1128 DrugDB = db_open("drugs.db");
1129 db_query(DrugDB, "CREATE TABLE IF NOT EXISTS playerdrugs (Name TEXT, Drugs INTEGER, Seeds INTEGER, TotalUsed INTEGER, TotalPlanted INTEGER, TotalHarvestedPlants INTEGER, TotalHarvestedGrams INTEGER, TotalGiven INTEGER, TotalReceived INTEGER, TotalBought INTEGER, TotalBoughtPrice INTEGER, TotalSold INTEGER, TotalSoldPrice INTEGER)");
1130 db_query(DrugDB, "CREATE TABLE IF NOT EXISTS dealers (ID INTEGER, Skin INTEGER, Drugs INTEGER, PosX FLOAT, PosY FLOAT, PosZ FLOAT, PosA FLOAT)");
1131
1132 // prepare player queries
1133 LoadPlayer = db_prepare(DrugDB, "SELECT Drugs, Seeds, TotalUsed, TotalPlanted, TotalHarvestedPlants, TotalHarvestedGrams, TotalGiven, TotalReceived, TotalBought, TotalBoughtPrice, TotalSold, TotalSoldPrice FROM playerdrugs WHERE Name=?");
1134 InsertPlayer = db_prepare(DrugDB, "INSERT INTO playerdrugs (Name) VALUES (?)");
1135 SavePlayer = db_prepare(DrugDB, "UPDATE playerdrugs SET Drugs=?, Seeds=?, TotalUsed=?, TotalPlanted=?, TotalHarvestedPlants=?, TotalHarvestedGrams=?, TotalGiven=?, TotalReceived=?, TotalBought=?, TotalBoughtPrice=?, TotalSold=?, TotalSoldPrice=? WHERE Name=?");
1136
1137 // prepare dealer queries
1138 LoadDealers = db_prepare(DrugDB, "SELECT * FROM dealers");
1139 AddDealer = db_prepare(DrugDB, "INSERT INTO dealers (ID, Skin, PosX, PosY, PosZ, PosA) VALUES (?, ?, ?, ?, ?, ?)");
1140 UpdateDealer = db_prepare(DrugDB, "UPDATE dealers SET Skin=?, PosX=?, PosY=?, PosZ=?, PosA=? WHERE ID=?");
1141 UpdateDealerDrugs = db_prepare(DrugDB, "UPDATE dealers SET Drugs=? WHERE ID=?");
1142 RemoveDealer = db_prepare(DrugDB, "DELETE FROM dealers WHERE ID=?");
1143
1144 // initialize connected players
1145 foreach(new i : Player) Player_Init(i);
1146
1147 // load dealers
1148 new id, skin, drugs, Float: pos[4];
1149 stmt_bind_result_field(LoadDealers, 0, DB::TYPE_INTEGER, id);
1150 stmt_bind_result_field(LoadDealers, 1, DB::TYPE_INTEGER, skin);
1151 stmt_bind_result_field(LoadDealers, 2, DB::TYPE_INTEGER, drugs);
1152 stmt_bind_result_field(LoadDealers, 3, DB::TYPE_FLOAT, pos[0]);
1153 stmt_bind_result_field(LoadDealers, 4, DB::TYPE_FLOAT, pos[1]);
1154 stmt_bind_result_field(LoadDealers, 5, DB::TYPE_FLOAT, pos[2]);
1155 stmt_bind_result_field(LoadDealers, 6, DB::TYPE_FLOAT, pos[3]);
1156
1157 if(stmt_execute(LoadDealers))
1158 {
1159 new label[128];
1160 while(stmt_fetch_row(LoadDealers))
1161 {
1162 DealerData[id][dealerSkin] = skin;
1163 DealerData[id][dealerDrugs] = drugs;
1164 DealerData[id][dealerX] = pos[0];
1165 DealerData[id][dealerY] = pos[1];
1166 DealerData[id][dealerZ] = pos[2];
1167 DealerData[id][dealerA] = pos[3];
1168
1169 DealerData[id][dealerActorID] = CreateActor(DealerData[id][dealerSkin], DealerData[id][dealerX], DealerData[id][dealerY], DealerData[id][dealerZ], DealerData[id][dealerA]);
1170 SetActorInvulnerable(DealerData[id][dealerActorID], 1);
1171
1172 format(label, sizeof(label), "Drug Dealer (%d)\n\n{FFFFFF}Use {F1C40F}/dealer {FFFFFF}to open dealer menu.", id);
1173 DealerData[id][dealerLabel] = CreateDynamic3DTextLabel(label, 0xF1C40FFF, DealerData[id][dealerX], DealerData[id][dealerY], DealerData[id][dealerZ] + 0.25, 5.0, .testlos = 1);
1174
1175 Iter_Add(Dealers, id);
1176 }
1177 }
1178 //Diatas adalah drugs system SQL nya
1179 print(" [Gun Vending Machines] Initializing...");
1180
1181 for(new i; i < MAX_MACHINES; i++)
1182 {
1183 MachineData[i][mObjID] = -1;
1184 MachineData[i][mIconID] = -1;
1185 MachineData[i][mLabel] = Text3D: -1;
1186 MachineData[i][mExists] = false;
1187 }
1188
1189 MachineDatabase = db_open("gun_vending.db");
1190 db_query(MachineDatabase, "CREATE TABLE IF NOT EXISTS machines (ID INTEGER, PosX FLOAT, PosY FLOAT, PosZ FLOAT, RotX FLOAT, RotY FLOAT, RotZ FLOAT)");
1191 db_query(MachineDatabase, "CREATE TABLE IF NOT EXISTS categories (ID INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT UNIQUE)");
1192 db_query(MachineDatabase, "CREATE TABLE IF NOT EXISTS weapons (WeaponID INTEGER, Ammo INTEGER, Price INTEGER, Category INTEGER)");
1193
1194 // Machine Queries
1195 LoadMachines = db_prepare(MachineDatabase, "SELECT * FROM machines");
1196 AddMachine = db_prepare(MachineDatabase, "INSERT INTO machines (ID, PosX, PosY, PosZ, RotX, RotY, RotZ) VALUES (?, ?, ?, ?, ?, ?, ?)");
1197 UpdateMachine = db_prepare(MachineDatabase, "UPDATE machines SET PosX=?, PosY=?, PosZ=?, RotX=?, RotY=?, RotZ=? WHERE ID=?");
1198 RemoveMachine = db_prepare(MachineDatabase, "DELETE FROM machines WHERE ID=?");
1199
1200 // Category Queries
1201 ListCategories = db_prepare(MachineDatabase, "SELECT Name FROM categories");
1202 AddCategory = db_prepare(MachineDatabase, "INSERT INTO categories (Name) VALUES (?)");
1203 ReturnCategoryID = db_prepare(MachineDatabase, "SELECT ID FROM categories WHERE Name=?");
1204 ReturnCategoryName = db_prepare(MachineDatabase, "SELECT Name FROM categories WHERE ID=?");
1205 RenameCategory = db_prepare(MachineDatabase, "UPDATE categories SET Name=? WHERE ID=?");
1206 RemoveCategory = db_prepare(MachineDatabase, "DELETE FROM categories WHERE ID=?");
1207
1208 // Weapon Queries
1209 ListWeapons = db_prepare(MachineDatabase, "SELECT WeaponID, Ammo, Price FROM weapons WHERE Category=? ORDER BY WeaponID ASC");
1210 LoadWeapon = db_prepare(MachineDatabase, "SELECT WeaponID, Ammo, Price FROM weapons WHERE Category=? ORDER BY WeaponID ASC LIMIT ?, 1");
1211 AddWeapon = db_prepare(MachineDatabase, "INSERT INTO weapons (WeaponID, Ammo, Price, Category) VALUES (?, ?, ?, ?)");
1212 RemoveWeapon = db_prepare(MachineDatabase, "DELETE FROM weapons WHERE WeaponID=? AND Ammo=? AND Price=? AND Category=?");
1213 RemoveCategoryWeapons = db_prepare(MachineDatabase, "DELETE FROM weapons WHERE Category=?");
1214
1215 // Load Machines
1216 new Float: poss[3], Float: rot[3];
1217 stmt_bind_result_field(LoadMachines, 0, DB::TYPE_INTEGER, id);
1218 stmt_bind_result_field(LoadMachines, 1, DB::TYPE_FLOAT, poss[0]);
1219 stmt_bind_result_field(LoadMachines, 2, DB::TYPE_FLOAT, poss[1]);
1220 stmt_bind_result_field(LoadMachines, 3, DB::TYPE_FLOAT, poss[2]);
1221 stmt_bind_result_field(LoadMachines, 4, DB::TYPE_FLOAT, rot[0]);
1222 stmt_bind_result_field(LoadMachines, 5, DB::TYPE_FLOAT, rot[1]);
1223 stmt_bind_result_field(LoadMachines, 6, DB::TYPE_FLOAT, rot[2]);
1224
1225 if(stmt_execute(LoadMachines))
1226 {
1227 print(" [Gun Vending Machines] Loading data...");
1228
1229 new label[64], loaded;
1230 while(stmt_fetch_row(LoadMachines))
1231 {
1232 MachineData[id][mPosX] = pos[0];
1233 MachineData[id][mPosY] = pos[1];
1234 MachineData[id][mPosZ] = pos[2];
1235 MachineData[id][mRotX] = rot[0];
1236 MachineData[id][mRotY] = rot[1];
1237 MachineData[id][mRotZ] = rot[2];
1238
1239 MachineData[id][mObjID] = CreateDynamicObject(18885, MachineData[id][mPosX], MachineData[id][mPosY], MachineData[id][mPosZ], MachineData[id][mRotX], MachineData[id][mRotY], MachineData[id][mRotZ]);
1240 MachineData[id][mIconID] = CreateDynamicMapIcon(MachineData[id][mPosX], MachineData[id][mPosY], MachineData[id][mPosZ], 18, 0);
1241
1242 format(label, sizeof(label), "Gun Vending Machine (%d)\n\n{FFFFFF}/weapons", id);
1243 MachineData[id][mLabel] = CreateDynamic3DTextLabel(label, 0xF1C40FFF, MachineData[id][mPosX] - (0.65 * floatsin(-MachineData[id][mRotZ], degrees)), MachineData[id][mPosY] - (0.65 * floatcos(-MachineData[id][mRotZ], degrees)), MachineData[id][mPosZ] - 0.15, 10.0, .testlos = 1);
1244 MachineData[id][mExists] = true;
1245 loaded++;
1246 }
1247
1248 printf(" [Gun Vending Machines] Loaded %d gun vending machines.", loaded);
1249 }
1250 //Diatas adalah Gun Vending Machines SQL
1251 LoadMainScreenTXD();
1252 DisableInteriorEnterExits();
1253 ShowNameTags(1);
1254 EnableStuntBonusForAll(0);
1255 LoadMaps();
1256 ManualVehicleEngineAndLights();
1257 SetGameModeText("BC-RP "VERSION"");
1258 SendRconCommand("hostname "HOSTNAME"");
1259 SendRconCommand("mapname "MAPNAME"");
1260 return 1;
1261}
1262public OnGameModeExit()
1263{
1264 foreach(new i : Player) Player_SaveDrugs(i);
1265 foreach(new i : Dealers) DestroyActor(DealerData[i][dealerActorID]);
1266 db_close(DrugDB);
1267 db_close(MachineDatabase);
1268 print(" [Gun Vending Machines] Unloaded.");
1269 return 1;
1270}
1271// ============= » ADMIN COMMANDS =============
1272CMD:ahelp(playerid, params[])
1273{
1274 if(PlayerInfo[playerid][AdminLevel])
1275 {
1276 if(PlayerInfo[playerid][AdminLevel] >= 1)
1277 {
1278 SendClientMessage(playerid, GREY, "{0080FF}|_____________________ Trial Administrator _____________________|");
1279 SendClientMessage(playerid, WHITE, "/a /asay /togadmin /changestatus /setint /setvw ");
1280 }
1281 if(PlayerInfo[playerid][AdminLevel] >= 2)
1282 {
1283 SendClientMessage(playerid, GREY, "{0080FF}|_____________________ Administrator _____________________|");
1284 SendClientMessage(playerid, WHITE, "/kick /ban");
1285 }
1286 if(PlayerInfo[playerid][AdminLevel] >= 3)
1287 {
1288 SendClientMessage(playerid, GREY, "{0080FF}|_____________________ Senior Administrator _____________________|");
1289 SendClientMessage(playerid, WHITE, "/goto /get");
1290 }
1291 if(PlayerInfo[playerid][AdminLevel] >= 4)
1292 {
1293 SendClientMessage(playerid, GREY, "{0080FF}|_____________________ Management _____________________|");
1294 SendClientMessage(playerid, WHITE, "/freeze /unfreeze /slap");
1295 }
1296 if(PlayerInfo[playerid][AdminLevel] == 5)
1297 {
1298 SendClientMessage(playerid, GREY, "{0080FF}|_____________________ Server Owner _____________________|");
1299 SendClientMessage(playerid, WHITE, "/makeadmin /makehelper");
1300 }
1301 }
1302 else return NotAdmin(playerid);
1303 return 1;
1304}
1305CMD:a(playerid, params[])
1306{
1307 if(PlayerInfo[playerid][AdminLevel])
1308 {
1309 if(AdminChat[playerid] == 1)
1310 {
1311 new msg[128], string[168];
1312 if(sscanf(params, "s[128]", msg)) return SendClientMessage(playerid, GREY, "Usage: /a [message]");
1313 {
1314 format(string,sizeof(string), "* %s %s: %s", GetAdminRank(playerid), RemoveUnderScore(playerid), msg);
1315 SendAdminMessage(BLUE, string);
1316 }
1317 }
1318 else return SendClientMessage(playerid, GREY, "Please enable your Admin Chat by /togadmin.");
1319 }
1320 else return NotAdmin(playerid);
1321 return 1;
1322}
1323CMD:asay(playerid, params[])
1324{
1325 if(PlayerInfo[playerid][AdminLevel])
1326 {
1327 new string[128];
1328 if(sscanf(params, "s[128]", params)) return SendClientMessage(playerid, GREY, "Usage: /asay [text]");
1329 format(string, sizeof(string), "{800000}* Admin %s: %s *", RemoveUnderScore(playerid), params);
1330 SendClientMessageToAll(GREY, string);
1331 }
1332 else return NotAdmin(playerid);
1333 return 1;
1334}
1335CMD:togadmin(playerid, params[])
1336{
1337 if(PlayerInfo[playerid][AdminLevel])
1338 {
1339 if(AdminChat[playerid])
1340 {
1341 AdminChat[playerid] = 0;
1342 SendClientMessage(playerid, GREY, "You have {C43C3C}Disabled {888888}the Admin Chat.");
1343 }
1344 else
1345 {
1346 AdminChat[playerid] = 1;
1347 SendClientMessage(playerid, GREY, "You have {008000}Enabled {888888}the Admin Chat.");
1348 }
1349 }
1350 else return NotAdmin(playerid);
1351 return 1;
1352}
1353CMD:changestatus(playerid, params[])
1354{
1355 if(PlayerInfo[playerid][AdminLevel] > 1)
1356 {
1357 ShowPlayerDialog(playerid,DIALOG_ASTATUS,DIALOG_STYLE_LIST,"Administrator Status","{40C040}Administrating\n{D52B2B}Roleplaying\n{EA9515}Off Duty","Change","Back");
1358 }
1359 else return NotAdmin(playerid);
1360 return 1;
1361}
1362CMD:kick(playerid, params[])
1363{
1364 if(PlayerInfo[playerid][AdminLevel] >= 2)
1365 {
1366 new str[128], targetid, reason[128];
1367 if(sscanf(params,"us[128]", targetid, reason)) return SendClientMessage(playerid, GREY, "Usage: /kick [player targetid or name] [reason]");
1368 if(!IsPlayerConnected(targetid)) return SendClientMessage(playerid, GREY, NotConnected);
1369 if(PlayerInfo[targetid][AdminLevel] > PlayerInfo[playerid][AdminLevel]) return SendClientMessage(playerid, GREY, "The person you are trying to kick has Higher Admin Level than you.");
1370 format(str, sizeof(str), "Administrator %s has kicked %s. [Reason: %s]", RemoveUnderScore(playerid), RemoveUnderScore(targetid), reason);
1371 SendClientMessageToAll(GREY, str);
1372 PlayerInfo[targetid][TimesKicked] ++;
1373 KickPlayer(targetid);
1374 }
1375 else return NotAdmin(playerid);
1376 return 1;
1377}
1378CMD:ban(playerid, params[])
1379{
1380 if(PlayerInfo[playerid][AdminLevel] >= 2)
1381 {
1382 new str[128], targetid, reason[128];
1383 if(sscanf(params,"us[128]", targetid, reason)) return SendClientMessage(playerid, GREY, "Usage: /ban [player targetid or name] [reason]");
1384 if(!IsPlayerConnected(targetid)) return SendClientMessage(playerid, GREY, NotConnected);
1385 if(PlayerInfo[targetid][AdminLevel] > PlayerInfo[playerid][AdminLevel]) return SendClientMessage(playerid, GREY, "The person you are trying to Ban has Higher Admin Level than you.");
1386 format(str, sizeof(str), "Administrator %s has Banned %s. [Reason: %s]", RemoveUnderScore(playerid), RemoveUnderScore(targetid), reason);
1387 SendClientMessageToAll(GREY, str);
1388 format(str, sizeof(str), "You have Banned %s's IP Address. [Reason: %s]", RemoveUnderScore(targetid), reason);
1389 SendClientMessage(playerid, GREY, str);
1390 PlayerInfo[targetid][Banned] = 1;
1391 format(PlayerInfo[targetid][BannedBy], 32, "%s", RemoveUnderScore(playerid));
1392 format(PlayerInfo[targetid][BanReason], 128, "%s", reason);
1393 KickPlayer(targetid);
1394 }
1395 else return NotAdmin(playerid);
1396 return 1;
1397}
1398CMD:goto(playerid, params[])
1399{
1400 if(PlayerInfo[playerid][AdminLevel] >= 3)
1401 {
1402 new targetid, Float:x, Float:y, Float:z, interior, vw, string[128];
1403 if(sscanf(params, "u", targetid)) return SendClientMessage(playerid, GREY, "Usage: /goto [player targetid or name]");
1404 {
1405 if(!IsPlayerConnected(targetid))return SendClientMessage(playerid, GREY, NotConnected);
1406 GetPlayerPos(targetid, x, y, z);
1407 interior = GetPlayerInterior(targetid);
1408 vw = GetPlayerVirtualWorld(targetid);
1409
1410 format(string, sizeof(string), "You have teleported to %s's position.", RemoveUnderScore(targetid));
1411 SendClientMessage(playerid, LIBLUE, string);
1412
1413 if(IsPlayerInAnyVehicle(playerid))
1414 {
1415 SetVehiclePos(GetPlayerVehicleID(playerid), x+4, y, z);
1416 }
1417 else
1418 {
1419 SetPlayerPos(playerid, x+4, y, z);
1420 SetPlayerInterior(playerid, interior);
1421 SetPlayerVirtualWorld(playerid, vw);
1422 }
1423 }
1424 }
1425 else return NotAdmin(playerid);
1426 return 1;
1427}
1428CMD:get(playerid, params[])
1429{
1430 if(PlayerInfo[playerid][AdminLevel] >= 3)
1431 {
1432 new targetid, Float:x, Float:y, Float:z, interior, vw, string[128];
1433 if(sscanf(params, "u", targetid)) return SendClientMessage(playerid, GREY, "Usage: /get [player targetid or name]");
1434 {
1435 if(!IsPlayerConnected(targetid))return SendClientMessage(playerid, GREY, NotConnected);
1436 GetPlayerPos(playerid, x, y, z);
1437 interior = GetPlayerInterior(playerid);
1438 vw = GetPlayerVirtualWorld(playerid);
1439
1440 format(string, sizeof(string), "You have teleported %s to your position.", RemoveUnderScore(targetid));
1441 SendClientMessage(playerid, LIBLUE, string);
1442
1443 format(string, sizeof(string), "Admin %s has teleported you to their position.", RemoveUnderScore(playerid));
1444 SendClientMessage(targetid, LIBLUE, string);
1445
1446 if(IsPlayerInAnyVehicle(targetid))
1447 {
1448 SetVehiclePos(GetPlayerVehicleID(targetid), x+4, y, z);
1449 }
1450 else
1451 {
1452 SetPlayerPos(targetid, x+4, y, z);
1453 SetPlayerInterior(targetid, interior);
1454 SetPlayerVirtualWorld(targetid, vw);
1455 }
1456 }
1457 }
1458 else return NotAdmin(playerid);
1459 return 1;
1460}
1461CMD:setint(playerid, params[])
1462{
1463 if(PlayerInfo[playerid][AdminLevel] >= 1)
1464 {
1465 new targetid, vw, string[128];
1466 if(sscanf(params, "ud", targetid, vw)) return SendClientMessage(playerid, GREY, "Usage: /setint [player targetid or name] [interior]");
1467 {
1468 if(!IsPlayerConnected(targetid))return SendClientMessage(playerid, GREY, NotConnected);
1469 SetPlayerInterior(targetid, vw);
1470 format(string, sizeof(string), "Admin %s has set your Interior to %d.", RemoveUnderScore(playerid), vw);
1471 SendClientMessage(targetid, LIBLUE, string);
1472 format(string, sizeof(string), "You have set %s's Interior to %d.", RemoveUnderScore(targetid), vw);
1473 SendClientMessage(playerid, LIBLUE, string);
1474 }
1475 }
1476 else return NotAdmin(playerid);
1477 return 1;
1478}
1479CMD:setvw(playerid, params[])
1480{
1481 if(PlayerInfo[playerid][AdminLevel] >= 1)
1482 {
1483 new targetid, vw, string[128];
1484 if(sscanf(params, "ud", targetid, vw)) return SendClientMessage(playerid, GREY, "Usage: /setvw [player targetid or name] [virtualworld]");
1485 {
1486 if(!IsPlayerConnected(targetid))return SendClientMessage(playerid, GREY, NotConnected);
1487 SetPlayerInterior(targetid, vw);
1488 format(string, sizeof(string), "Admin %s has set your Virtual World to %d.", RemoveUnderScore(playerid), vw);
1489 SendClientMessage(targetid, LIBLUE, string);
1490 format(string, sizeof(string), "You have set %s's Virtual World to %d.", RemoveUnderScore(targetid), vw);
1491 SendClientMessage(playerid, LIBLUE, string);
1492 }
1493 }
1494 else return NotAdmin(playerid);
1495 return 1;
1496}
1497CMD:warn(playerid, params[])
1498{
1499 if(PlayerInfo[playerid][AdminLevel] >= 1)
1500 {
1501 new targetid, warn[128], string[256];
1502 if(sscanf(params, "us[128]", targetid, warn)) return SendClientMessage(playerid, GREY, "Usage: /warn [player targetid or name] [reason]");
1503 {
1504 if(!IsPlayerConnected(targetid)) return SendClientMessage(playerid, GREY, NotConnected);
1505 format(string, sizeof(string), "{FF0000}* WARNING * from Admin %s. [Reason: %s]", RemoveUnderScore(playerid), warn);
1506 SendClientMessage(targetid, WHITE, string);
1507 format(string, sizeof(string), "{FF0000}You have warned %s for %s.", RemoveUnderScore(targetid), warn);
1508 SendClientMessage(playerid, WHITE, string);
1509 PlayerInfo[playerid][TimesWarned] ++;
1510 }
1511 }
1512 else return NotAdmin(playerid);
1513 return 1;
1514}
1515CMD:makeadmin(playerid, params[])
1516{
1517 if(PlayerInfo[playerid][AdminLevel] == 5)
1518 {
1519 new targetid, level, string[128];
1520 if(sscanf(params, "ud", targetid, level)) return SendClientMessage(playerid, GREY, "Usage: /makeadmin [player targetid or name] [level]");
1521 {
1522 if(!IsPlayerConnected(targetid)) return SendClientMessage(playerid, GREY, NotConnected);
1523 PlayerInfo[targetid][AdminLevel] = level;
1524 format(string, sizeof(string), "Administrator %s has set your Admin Level to %s (Level %d).",GetAdminRank(targetid),RemoveUnderScore(playerid), level);
1525 SendClientMessage(targetid, WHITE, string);
1526 format(string, sizeof(string), "You have set %s's Admin Level to %d.", RemoveUnderScore(targetid), level);
1527 SendClientMessage(playerid, WHITE, string);
1528 }
1529 }
1530 else return NotAdmin(playerid);
1531 return 1;
1532}
1533CMD:makehelper(playerid, params[])
1534{
1535 if(PlayerInfo[playerid][AdminLevel] == 5)
1536 {
1537 new targetid, string[128];
1538 if(sscanf(params, "u", targetid)) return SendClientMessage(playerid, GREY, "Usage: /makeadmin [player targetid or name]");
1539 {
1540 if(!IsPlayerConnected(targetid)) return SendClientMessage(playerid, GREY, NotConnected);
1541 PlayerInfo[targetid][Helper] = 1;
1542 format(string, sizeof(string), "Administrator %s has set your Helper Level to 1.",GetAdminRank(targetid),RemoveUnderScore(playerid));
1543 SendClientMessage(targetid, WHITE, string);
1544 format(string, sizeof(string), "You have set %s's Helper Level to 1.", RemoveUnderScore(targetid));
1545 SendClientMessage(playerid, WHITE, string);
1546 }
1547 }
1548 else return NotAdmin(playerid);
1549 return 1;
1550}
1551// Version II
1552CMD:freeze(playerid, params[])
1553{
1554 if(PlayerInfo[playerid][AdminLevel] >=4)
1555 {
1556 new id, string[128];
1557 if(sscanf(params, "u", id)) return SendClientMessage(playerid, GREY, "Usage: /freeze [player id or name]");
1558 {
1559 if(!IsPlayerConnected(id)) return SendClientMessage(playerid, GREY, NotConnected);
1560 TogglePlayerControllable(id, 0);
1561 format(string, sizeof(string), "Administrator %s has Freezed you.", RemoveUnderScore(playerid));
1562 SendClientMessage(id, LIBLUE, string);
1563 format(string, sizeof(string), "You have frozen %s(ID: %d)", RemoveUnderScore(id), id);
1564 SendClientMessage(playerid, LIBLUE, string);
1565 }
1566 }
1567 else return NotAdmin(playerid);
1568 return 1;
1569}
1570CMD:unfreeze(playerid, params[])
1571{
1572 if(PlayerInfo[playerid][AdminLevel] >=4)
1573 {
1574 new id, string[128];
1575 if(sscanf(params, "u", id)) return SendClientMessage(playerid, GREY, "Usage: /unfreeze [player id or name]");
1576 {
1577 if(!IsPlayerConnected(id)) return SendClientMessage(playerid, GREY, NotConnected);
1578 TogglePlayerControllable(id, 1);
1579 format(string, sizeof(string), "Administrator %s has Unfreezed you.", RemoveUnderScore(playerid));
1580 SendClientMessage(id, LIBLUE, string);
1581 format(string, sizeof(string), "You have unfrozen %s(ID: %d)", RemoveUnderScore(id), id);
1582 SendClientMessage(playerid, LIBLUE, string);
1583 }
1584 }
1585 else return NotAdmin(playerid);
1586 return 1;
1587}
1588CMD:slap(playerid, params[])
1589{
1590 if(PlayerInfo[playerid][AdminLevel] >= 4)
1591 {
1592 new id, string[128];
1593 if(sscanf(params, "u", id)) return SendClientMessage(playerid, GREY, "Usage: /slap [player id or name]");
1594 {
1595 if(!IsPlayerConnected(id))return SendClientMessage(playerid, GREY, NotConnected);
1596 new Float:x, Float:y, Float:z;
1597 GetPlayerPos(id, x, y, z);
1598 SetPlayerPos(id, x, y, z+3);
1599 format(string, sizeof(string), "Administrator %s has slapped you.", RemoveUnderScore(playerid));
1600 SendClientMessage(id, LIBLUE, string);
1601 format(string, sizeof(string), "You have slapped %s(ID: %d).", RemoveUnderScore(id), id);
1602 SendClientMessage(playerid, LIBLUE, string);
1603 }
1604 }
1605 else return NotAdmin(playerid);
1606 return 1;
1607}
1608CMD:createdealer(playerid, params[])
1609{
1610 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Only RCON admins can use this command.");
1611 new skin;
1612 if(sscanf(params, "i", skin)) return SendClientMessage(playerid, 0xE88732FF, "SYNTAX: {FFFFFF}/createdealer [skin id]");
1613 if(!(0 <= skin <= 311)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Invalid skin ID.");
1614 new id = Iter_Free(Dealers);
1615 if(id == -1) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Can't add any more dealers.");
1616 GetPlayerPos(playerid, DealerData[id][dealerX], DealerData[id][dealerY], DealerData[id][dealerZ]);
1617 GetPlayerFacingAngle(playerid, DealerData[id][dealerA]);
1618
1619 DealerData[id][dealerSkin] = skin;
1620 DealerData[id][dealerDrugs] = 0;
1621 DealerData[id][dealerActorID] = CreateActor(skin, DealerData[id][dealerX], DealerData[id][dealerY], DealerData[id][dealerZ], DealerData[id][dealerA]);
1622 SetActorInvulnerable(DealerData[id][dealerActorID], 1);
1623
1624 new label[128];
1625 format(label, sizeof(label), "Drug Dealer (%d)\n\n{FFFFFF}Use {F1C40F}/dealer {FFFFFF}to open dealer menu.", id);
1626 DealerData[id][dealerLabel] = CreateDynamic3DTextLabel(label, 0xF1C40FFF, DealerData[id][dealerX], DealerData[id][dealerY], DealerData[id][dealerZ] + 0.25, 5.0, .testlos = 1);
1627 Iter_Add(Dealers, id);
1628
1629 stmt_bind_value(AddDealer, 0, DB::TYPE_INTEGER, id);
1630 stmt_bind_value(AddDealer, 1, DB::TYPE_INTEGER, skin);
1631 stmt_bind_value(AddDealer, 2, DB::TYPE_FLOAT, DealerData[id][dealerX]);
1632 stmt_bind_value(AddDealer, 3, DB::TYPE_FLOAT, DealerData[id][dealerY]);
1633 stmt_bind_value(AddDealer, 4, DB::TYPE_FLOAT, DealerData[id][dealerZ]);
1634 stmt_bind_value(AddDealer, 5, DB::TYPE_FLOAT, DealerData[id][dealerA]);
1635
1636 if(stmt_execute(AddDealer))
1637 {
1638 SendClientMessage(playerid, 0x3498DBFF, "DRUG DEALER: {FFFFFF}Dealer created.");
1639 SetPlayerPos(playerid, DealerData[id][dealerX] + (1.5 * floatsin(-DealerData[id][dealerA], degrees)), DealerData[id][dealerY] + (1.5 * floatcos(-DealerData[id][dealerA], degrees)), DealerData[id][dealerZ]);
1640 }
1641
1642 return 1;
1643}
1644
1645CMD:setdealerskin(playerid, params[])
1646{
1647 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Only RCON admins can use this command.");
1648 if(isnull(params)) return SendClientMessage(playerid, 0xE88732FF, "SYNTAX: {FFFFFF}/setdealerskin [dealer id] [skin id]");
1649 new id, skin;
1650 if(sscanf(params, "ii", id, skin)) return SendClientMessage(playerid, 0xE88732FF, "SYNTAX: {FFFFFF}/setdealerskin [dealer id] [skin id]");
1651 if(!Iter_Contains(Dealers, id)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Invalid ID.");
1652 if(!(0 <= skin <= 311)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Invalid skin ID.");
1653 DealerData[id][dealerSkin] = skin;
1654
1655 DestroyActor(DealerData[id][dealerActorID]);
1656 DealerData[id][dealerActorID] = CreateActor(skin, DealerData[id][dealerX], DealerData[id][dealerY], DealerData[id][dealerZ], DealerData[id][dealerA]);
1657 SetActorInvulnerable(DealerData[id][dealerActorID], 1);
1658
1659 stmt_bind_value(UpdateDealer, 0, DB::TYPE_INTEGER, skin);
1660 stmt_bind_value(UpdateDealer, 1, DB::TYPE_FLOAT, DealerData[id][dealerX]);
1661 stmt_bind_value(UpdateDealer, 2, DB::TYPE_FLOAT, DealerData[id][dealerY]);
1662 stmt_bind_value(UpdateDealer, 3, DB::TYPE_FLOAT, DealerData[id][dealerZ]);
1663 stmt_bind_value(UpdateDealer, 4, DB::TYPE_FLOAT, DealerData[id][dealerA]);
1664 stmt_bind_value(UpdateDealer, 5, DB::TYPE_INTEGER, id);
1665
1666 if(stmt_execute(UpdateDealer)) SendClientMessage(playerid, 0x3498DBFF, "DRUG DEALER: {FFFFFF}Dealer updated.");
1667 return 1;
1668}
1669
1670CMD:setdealerpos(playerid, params[])
1671{
1672 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Only RCON admins can use this command.");
1673 new id;
1674 if(sscanf(params, "i", id)) return SendClientMessage(playerid, 0xE88732FF, "SYNTAX: {FFFFFF}/setdealerpos [dealer id]");
1675 if(!Iter_Contains(Dealers, id)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Invalid ID.");
1676 GetPlayerPos(playerid, DealerData[id][dealerX], DealerData[id][dealerY], DealerData[id][dealerZ]);
1677 GetPlayerFacingAngle(playerid, DealerData[id][dealerA]);
1678
1679 DestroyActor(DealerData[id][dealerActorID]);
1680 DealerData[id][dealerActorID] = CreateActor(DealerData[id][dealerSkin], DealerData[id][dealerX], DealerData[id][dealerY], DealerData[id][dealerZ], DealerData[id][dealerA]);
1681 SetActorInvulnerable(DealerData[id][dealerActorID], 1);
1682
1683 Streamer_SetFloatData(STREAMER_TYPE_3D_TEXT_LABEL, DealerData[id][dealerLabel], E_STREAMER_X, DealerData[id][dealerX]);
1684 Streamer_SetFloatData(STREAMER_TYPE_3D_TEXT_LABEL, DealerData[id][dealerLabel], E_STREAMER_Y, DealerData[id][dealerY]);
1685 Streamer_SetFloatData(STREAMER_TYPE_3D_TEXT_LABEL, DealerData[id][dealerLabel], E_STREAMER_Z, DealerData[id][dealerZ] + 0.25);
1686
1687 stmt_bind_value(UpdateDealer, 0, DB::TYPE_INTEGER, DealerData[id][dealerSkin]);
1688 stmt_bind_value(UpdateDealer, 1, DB::TYPE_FLOAT, DealerData[id][dealerX]);
1689 stmt_bind_value(UpdateDealer, 2, DB::TYPE_FLOAT, DealerData[id][dealerY]);
1690 stmt_bind_value(UpdateDealer, 3, DB::TYPE_FLOAT, DealerData[id][dealerZ]);
1691 stmt_bind_value(UpdateDealer, 4, DB::TYPE_FLOAT, DealerData[id][dealerA]);
1692 stmt_bind_value(UpdateDealer, 5, DB::TYPE_INTEGER, id);
1693
1694 if(stmt_execute(UpdateDealer))
1695 {
1696 SendClientMessage(playerid, 0x3498DBFF, "DRUG DEALER: {FFFFFF}Dealer updated.");
1697 SetPlayerPos(playerid, DealerData[id][dealerX] + (1.5 * floatsin(-DealerData[id][dealerA], degrees)), DealerData[id][dealerY] + (1.5 * floatcos(-DealerData[id][dealerA], degrees)), DealerData[id][dealerZ]);
1698 }
1699
1700 return 1;
1701}
1702
1703CMD:removedealer(playerid, params[])
1704{
1705 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Only RCON admins can use this command.");
1706 new id;
1707 if(sscanf(params, "i", id)) return SendClientMessage(playerid, 0xE88732FF, "SYNTAX: {FFFFFF}/removedealer [dealer id]");
1708 if(!Iter_Contains(Dealers, id)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Invalid ID.");
1709 DestroyActor(DealerData[id][dealerActorID]);
1710 DestroyDynamic3DTextLabel(DealerData[id][dealerLabel]);
1711
1712 DealerData[id][dealerDrugs] = 0;
1713 DealerData[id][dealerActorID] = -1;
1714 DealerData[id][dealerLabel] = Text3D: -1;
1715 Iter_Remove(Dealers, id);
1716
1717 stmt_bind_value(RemoveDealer, 0, DB::TYPE_INTEGER, id);
1718 if(stmt_execute(RemoveDealer)) SendClientMessage(playerid, 0x3498DBFF, "DRUG DEALER: {FFFFFF}Dealer removed.");
1719 return 1;
1720}
1721
1722CMD:amenu(playerid, params[])
1723{
1724 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}Only admins can use that command!");
1725 ShowPlayerDialog(playerid, XV_DIALOGID+16, DIALOG_STYLE_LIST, "xVehicle Admin Menu", "{DCDC22}» {FFFB93}All Vehicles\n{DCDC22}» {FFFB93}Respawn All Vehicles\n{DCDC22}» {FFFB93}Create Vehicle", "Select", "Close");
1726 return 1;
1727}
1728
1729CMD:createmachine(playerid, params[])
1730{
1731 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Only RCON admins can use this command.");
1732 new id = Machine_FindFreeID();
1733 if(id == -1) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Can't create any more machines.");
1734
1735 MachineData[id][mRotX] = MachineData[id][mRotY] = 0.0;
1736 GetPlayerPos(playerid, MachineData[id][mPosX], MachineData[id][mPosY], MachineData[id][mPosZ]);
1737 GetPlayerFacingAngle(playerid, MachineData[id][mRotZ]);
1738
1739 MachineData[id][mPosX] += (2.0 * floatsin(-MachineData[id][mRotZ], degrees));
1740 MachineData[id][mPosY] += (2.0 * floatcos(-MachineData[id][mRotZ], degrees));
1741 MachineData[id][mPosZ] += 0.1;
1742
1743 stmt_bind_value(AddMachine, 0, DB::TYPE_INTEGER, id);
1744 stmt_bind_value(AddMachine, 1, DB::TYPE_FLOAT, MachineData[id][mPosX]);
1745 stmt_bind_value(AddMachine, 2, DB::TYPE_FLOAT, MachineData[id][mPosY]);
1746 stmt_bind_value(AddMachine, 3, DB::TYPE_FLOAT, MachineData[id][mPosZ]);
1747 stmt_bind_value(AddMachine, 4, DB::TYPE_FLOAT, MachineData[id][mRotX]);
1748 stmt_bind_value(AddMachine, 5, DB::TYPE_FLOAT, MachineData[id][mRotY]);
1749 stmt_bind_value(AddMachine, 6, DB::TYPE_FLOAT, MachineData[id][mRotZ]);
1750
1751 MachineData[id][mObjID] = CreateDynamicObject(18885, MachineData[id][mPosX], MachineData[id][mPosY], MachineData[id][mPosZ], MachineData[id][mRotX], MachineData[id][mRotY], MachineData[id][mRotZ]);
1752 if(stmt_execute(AddMachine) && IsValidDynamicObject(MachineData[id][mObjID]))
1753 {
1754 EditingMachineID[playerid] = id;
1755 EditDynamicObject(playerid, MachineData[id][mObjID]);
1756
1757 MachineData[id][mIconID] = CreateDynamicMapIcon(MachineData[id][mPosX], MachineData[id][mPosY], MachineData[id][mPosZ], 18, 0);
1758
1759 new label[64];
1760 format(label, sizeof(label), "Gun Vending Machine (%d)\n\n{FFFFFF}/weapons", id);
1761 MachineData[id][mLabel] = CreateDynamic3DTextLabel(label, 0xF1C40FFF, MachineData[id][mPosX] - (0.65 * floatsin(-MachineData[id][mRotZ], degrees)), MachineData[id][mPosY] - (0.65 * floatcos(-MachineData[id][mRotZ], degrees)), MachineData[id][mPosZ] - 0.15, 10.0, .testlos = 1);
1762 MachineData[id][mExists] = true;
1763
1764 SendClientMessage(playerid, 0x3498DBFF, "GUN VENDING MACHINE: {FFFFFF}Machine created.");
1765 SendClientMessage(playerid, 0x3498DBFF, "GUN VENDING MACHINE: {FFFFFF}You can edit it right now, or cancel editing and edit it some other time.");
1766 }
1767
1768 return 1;
1769}
1770
1771CMD:editmachine(playerid, params[])
1772{
1773 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Only RCON admins can use this command.");
1774 if(isnull(params)) return SendClientMessage(playerid, 0xE88732FF, "SYNTAX: {FFFFFF}/editmachine [machine id]");
1775 new id = strval(params);
1776 if(!(0 <= id < MAX_MACHINES)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Invalid ID.");
1777 if(!MachineData[id][mExists]) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Machine doesn't exist.");
1778 if(!IsPlayerInRangeOfPoint(playerid, 30.0, MachineData[id][mPosX], MachineData[id][mPosY], MachineData[id][mPosZ])) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You're not near the machine you want to edit.");
1779 if(EditingMachineID[playerid] != -1) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You're already editing a machine.");
1780
1781 EditingMachineID[playerid] = id;
1782 EditDynamicObject(playerid, MachineData[id][mObjID]);
1783 return 1;
1784}
1785
1786CMD:removemachine(playerid, params[])
1787{
1788 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Only RCON admins can use this command.");
1789 if(isnull(params)) return SendClientMessage(playerid, 0xE88732FF, "SYNTAX: {FFFFFF}/removemachine [machine id]");
1790 new id = strval(params);
1791 if(!(0 <= id < MAX_MACHINES)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Invalid ID.");
1792 if(!MachineData[id][mExists]) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Machine doesn't exist.");
1793
1794 stmt_bind_value(RemoveMachine, 0, DB::TYPE_INTEGER, id);
1795 if(stmt_execute(RemoveMachine)) {
1796 if(IsValidDynamicObject(MachineData[id][mObjID])) DestroyDynamicObject(MachineData[id][mObjID]);
1797 if(IsValidDynamicMapIcon(MachineData[id][mIconID])) DestroyDynamicMapIcon(MachineData[id][mIconID]);
1798 if(IsValidDynamic3DTextLabel(MachineData[id][mLabel])) DestroyDynamic3DTextLabel(MachineData[id][mLabel]);
1799 MachineData[id][mObjID] = -1;
1800 MachineData[id][mIconID] = -1;
1801 MachineData[id][mLabel] = Text3D: -1;
1802 MachineData[id][mExists] = false;
1803
1804 SendClientMessage(playerid, 0x3498DBFF, "GUN VENDING MACHINE: {FFFFFF}Machine removed.");
1805 }else{
1806 SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Machine removing failed.");
1807 }
1808
1809 return 1;
1810}
1811
1812CMD:createcategory(playerid, params[])
1813{
1814 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Only RCON admins can use this command.");
1815 ShowPlayerDialog(playerid, DIALOG_CREATE_CATEGORY, DIALOG_STYLE_INPUT, "{F1C40F}GVM: {FFFFFF}Create Category", "Choose a category name:", "Create", "Cancel");
1816 return 1;
1817}
1818
1819CMD:renamecategory(playerid, params[])
1820{
1821 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Only RCON admins can use this command.");
1822 ShowCategories(playerid, 2);
1823 return 1;
1824}
1825
1826CMD:removecategory(playerid, params[])
1827{
1828 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Only RCON admins can use this command.");
1829 ShowCategories(playerid, 1);
1830 return 1;
1831}
1832
1833CMD:addweapon(playerid, params[])
1834{
1835 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Only RCON admins can use this command.");
1836 ShowWeaponList(playerid);
1837 return 1;
1838}
1839
1840CMD:removeweapon(playerid, params[])
1841{
1842 if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Only RCON admins can use this command.");
1843 ShowCategories(playerid, 4);
1844 return 1;
1845}
1846
1847// ============= » PLAYER COMMANDS =============
1848CMD:buy(playerid, params[])
1849{
1850 if(!IsPlayerNearAGVM(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You're not near a Gun Vending Machine.");
1851 ShowCategories(playerid);
1852 return 1;
1853}
1854CMD:usedrugs(playerid, params[])
1855{
1856 if(PlayerDrugData[playerid][DrugsCooldown] > gettime()) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You can't use drugs right now.");
1857 new amount;
1858 if(sscanf(params, "i", amount)) return SendClientMessage(playerid, 0xE88732FF, "SYNTAX: {FFFFFF}/usedrugs [grams]");
1859 if(!(0 < amount <= 10)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You can't use less than 1 or more than 10 grams at once.");
1860 if(amount > PlayerDrugData[playerid][Drugs]) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You don't have enough drugs.");
1861 PlayerDrugData[playerid][DrugsCooldown] = gettime() + (10 * amount);
1862 PlayerDrugData[playerid][Drugs] -= amount;
1863 PlayerDrugData[playerid][TotalUsed] += amount;
1864
1865 SetPlayerWeather(playerid, 234);
1866 RegenTimer[playerid] = SetTimerEx("RegenHealth", 500, false, "ii", playerid, (3 * amount));
1867 EffectTimer[playerid] = SetTimerEx("RemoveEffects", (2 * amount) * 1000, false, "i", playerid);
1868
1869 new string[48];
1870 format(string, sizeof(string), "DRUGS: {FFFFFF}Used %d grams of drugs.", amount);
1871 SendClientMessage(playerid, 0x3498DBFF, string);
1872 return 1;
1873}
1874
1875CMD:givedrugs(playerid, params[])
1876{
1877 new id, amount;
1878 if(sscanf(params, "ui", id, amount)) return SendClientMessage(playerid, 0xE88732FF, "SYNTAX: {FFFFFF}/givedrugs [player id] [grams]");
1879 if(id == playerid) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Um... why? You can't just give yourself drugs!");
1880 if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Invalid ID.");
1881 if(DistanceBetweenPlayers(playerid, id) > 5.0) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You must be near to the player you want to give drugs.");
1882 if(!(0 < amount <= 50)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You can't give than 1 or more than 50 grams at once.");
1883 if(amount > PlayerDrugData[playerid][Drugs]) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You don't have enough drugs.");
1884 if(PlayerDrugData[id][Drugs] + amount > CARRY_LIMIT) amount = CARRY_LIMIT - PlayerDrugData[id][Drugs];
1885 PlayerDrugData[playerid][Drugs] -= amount;
1886 PlayerDrugData[playerid][TotalGiven] += amount;
1887
1888 PlayerDrugData[id][Drugs] += amount;
1889 PlayerDrugData[id][TotalReceived] += amount;
1890
1891 new string[96];
1892 format(string, sizeof(string), "DRUGS: {FFFFFF}%s(%d) gave you %d grams of drugs.", Player_GetName(playerid), playerid, amount);
1893 SendClientMessage(id, 0x3498DBFF, string);
1894 format(string, sizeof(string), "DRUGS: {FFFFFF}%d grams of drugs given to %s(%d).", amount, Player_GetName(id), id);
1895 SendClientMessage(playerid, 0x3498DBFF, string);
1896 return 1;
1897}
1898
1899CMD:selldrugs(playerid, params[])
1900{
1901 if(PlayerDrugData[playerid][Drugs] < 1) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You don't have drugs.");
1902 new id, price;
1903 if(sscanf(params, "ui", id, price)) return SendClientMessage(playerid, 0xE88732FF, "SYNTAX: {FFFFFF}/selldrugs [player id] [price per gram]");
1904 if(id == playerid) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Um... why? You can't just sell yourself drugs!");
1905 if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Invalid ID.");
1906 if(DistanceBetweenPlayers(playerid, id) > 5.0) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You must be near to the player you want to offer drugs.");
1907 if(IsPlayerConnected(PlayerDrugData[id][DrugsOfferedBy])) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You can't sell drugs to this player right now.");
1908 if(!(0 < price <= 5000)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Price can't be less than $1 and more than $5,000.");
1909 if(PlayerDrugData[id][Drugs] >= CARRY_LIMIT) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}The player you want to sell drugs can't carry any more drugs.");
1910 if(PlayerDrugData[id][DrugsOfferCooldown] > gettime()) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Wait before offering drugs again to this player.");
1911 PlayerDrugData[id][DrugsOfferedBy] = playerid;
1912 PlayerDrugData[id][DrugsOfferedPrice] = price;
1913 PlayerDrugData[id][DrugsOfferCooldown] = gettime() + OFFER_COOLDOWN;
1914
1915 new string[172];
1916 format(string, sizeof(string), "{FFFFFF}%s(%d) offered you some drugs.\nPrice: {2ECC71}%s per gram {FFFFFF}(has %s grams)\n\nHow many grams would you like to buy?", Player_GetName(playerid), playerid, formatInt(price), formatInt(PlayerDrugData[playerid][Drugs], .iCurrencyChar = '\0'));
1917 ShowPlayerDialog(id, DIALOG_DRUG_OFFER, DIALOG_STYLE_INPUT, "Drug Offer", string, "Buy", "Close");
1918
1919 format(string, sizeof(string), "DRUGS: {FFFFFF}Offer sent to %s(%d).", Player_GetName(id), id);
1920 SendClientMessage(playerid, 0x3498DBFF, string);
1921 return 1;
1922}
1923
1924CMD:drugstats(playerid, params[])
1925{
1926 ShowDrugStats(playerid);
1927 return 1;
1928}
1929
1930CMD:dealer(playerid, params[])
1931{
1932 new id = GetClosestDealer(playerid);
1933 if(id == -1) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You're not near a drug dealer.");
1934 PlayerDrugData[playerid][DealerID] = id;
1935 ShowDealerMenu(playerid);
1936 return 1;
1937}
1938
1939CMD:plant(playerid, params[])
1940{
1941 if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You can't use this command in a vehicle.");
1942 if(isnull(params)) return SendClientMessage(playerid, 0xE88732FF, "SYNTAX: {FFFFFF}/plant [place/harvest]");
1943
1944 if(!strcmp(params, "place", true)) {
1945 /* -- planting -- */
1946 if(PlayerDrugData[playerid][Seeds] < 1) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You don't have a drug seed.");
1947 if(Player_PlantCount(playerid) >= PLAYER_LIMIT) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You can't plant any more drug plants.");
1948 if(GetClosestPlant(playerid) != -1) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You can't place a drug plant here because there is one nearby.");
1949 new id = Iter_Free(Plants);
1950 if(id == -1) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Server drug plant limit reached.");
1951 GetPlayerName(playerid, PlantData[id][plantedBy], MAX_PLAYER_NAME);
1952 GetPlayerPos(playerid, PlantData[id][plantX], PlantData[id][plantY], PlantData[id][plantZ]);
1953
1954 PlantData[id][plantGrowth] = 0;
1955 PlantData[id][plantObj] = CreateDynamicObject(2244, PlantData[id][plantX], PlantData[id][plantY], PlantData[id][plantZ] - 0.70, 0.0, 0.0, 0.0);
1956 SetDynamicObjectMaterial(PlantData[id][plantObj], 2, 19478, "signsurf", "sign", 0xFFFFFFFF);
1957
1958 new label_string[128];
1959 format(label_string, sizeof(label_string), "Drug Plant (%d)\n\n{FFFFFF}Placed by %s\nGrowth: {E74C3C}0%%\n\n{FFFFFF}/plant harvest", id, PlantData[id][plantedBy]);
1960 PlantData[id][plantLabel] = CreateDynamic3DTextLabel(label_string, 0xF1C40FFF, PlantData[id][plantX], PlantData[id][plantY], PlantData[id][plantZ], 5.0);
1961
1962 PlantData[id][plantTimer] = SetTimerEx("PlantGrowth", GROWTH_INTERVAL * 1000, true, "i", id);
1963 Iter_Add(Plants, id);
1964
1965 PlayerDrugData[playerid][Seeds]--;
1966 PlayerDrugData[playerid][TotalPlanted]++;
1967 /* -- planting -- */
1968 }else if(!strcmp(params, "harvest")) {
1969 /* -- harvesting -- */
1970 if(PlayerDrugData[playerid][Drugs] >= CARRY_LIMIT) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You can't carry any more drugs.");
1971 new id = GetClosestPlant(playerid);
1972 if(id == -1) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You're not near a drug plant.");
1973 if(!PlantData[id][gotLeaves]) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You can't harvest this plant because it's not ready.");
1974 new harvested = PlantData[id][plantGrowth], string[96];
1975 if(PlayerDrugData[playerid][Drugs] + harvested > CARRY_LIMIT) harvested = CARRY_LIMIT - PlayerDrugData[playerid][Drugs];
1976 format(string, sizeof(string), "DRUG PLANT: {FFFFFF}You harvested a drug plant and got %d grams of drugs.", harvested);
1977 SendClientMessage(playerid, 0x3498DBFF, string);
1978
1979 PlayerDrugData[playerid][Drugs] += harvested;
1980 PlayerDrugData[playerid][TotalHarvestedPlants]++;
1981 PlayerDrugData[playerid][TotalHarvestedGrams] += harvested;
1982
1983 new owner_id = Plant_GetOwnerID(id);
1984 if(strcmp(PlantData[id][plantedBy], Player_GetName(playerid), true) && IsPlayerConnected(owner_id)) SendClientMessage(owner_id, 0x3498DBFF, "DRUG PLANT: {FFFFFF}Somebody harvested one of your drug plants!");
1985
1986 Plant_Destroy(id);
1987 /* -- harvesting -- */
1988 }else{
1989 SendClientMessage(playerid, 0xE88732FF, "SYNTAX: {FFFFFF}/plant [place/harvest]");
1990 }
1991
1992 return 1;
1993}
1994CMD:park(playerid, params[])
1995{
1996 if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}You have to be in a vehicle to use that command!");
1997 new xid = xVeh[GetPlayerVehicleID(playerid)];
1998 if(xid == 0) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}You can't park this vehicle! This car is not in the vehicle system");
1999 if(xStrcmp(Isim(playerid), xVehicle[xid][xv_Sahip]) && !Iter_Contains(xVehicleKeys<playerid>, xid) && !IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}You can't park this vehicle because of you don't have this car's keys!");
2000 if(xVehicle[xid][xv_HizliPark]) SendClientMessage(playerid, -1, "{00BD00}[!] {00FF00}Your vehicle has parked! {FFFB93}Quick Park feature deactivated!");
2001 else SendClientMessage(playerid, -1, "{00BD00}[!] {00FF00}Your vehicle has parked!");
2002 xVehicle[xid][xv_HizliPark] = 0;
2003 GetVehiclePos(GetPlayerVehicleID(playerid), xVehicle[xid][xv_Pos][0], xVehicle[xid][xv_Pos][1], xVehicle[xid][xv_Pos][2]);
2004 GetVehicleZAngle(GetPlayerVehicleID(playerid), xVehicle[xid][xv_Pos][3]);
2005 SavexVehicle(xid);
2006 return 1;
2007}
2008
2009CMD:v(playerid, params[])
2010{
2011 if(IsPlayerInAnyVehicle(playerid) && xVeh[GetPlayerVehicleID(playerid)] != 0) ShowPlayerDialog(playerid, XV_DIALOGID+6, DIALOG_STYLE_LIST, "Vehicle Menu", "{DCDC22}» {FFFB93}This Vehicle\n{DCDC22}» {FFFB93}My Own Vehicles\n{DCDC22}» {FFFB93}Vehicles That I Have Keys", "Select", "Close");
2012 else ShowPlayerDialog(playerid, XV_DIALOGID+6, DIALOG_STYLE_LIST, "Vehicle Menu", "{DCDC22}» {FFFB93}My Own Vehicles\n{DCDC22}» {FFFB93}Vehicles That I Have Keys", "Select", "Close");
2013 return 1;
2014}
2015
2016CMD:help(playerid, params[])
2017{
2018 if(Spawned[playerid])
2019 {
2020 if(sscanf(params, "s[128]", params))
2021 {
2022 SendClientMessage(playerid, GREY, "{0080FF}|_____________________ Commands Information _____________________|");
2023 SendClientMessage(playerid, GREY, "{0080FF}Usage: {FFFFFF}/help [option]");
2024 SendClientMessage(playerid, GREY, "| general | helper |");
2025 }
2026 else
2027 {
2028 if(!strcmp(params, "general", true))
2029 {
2030 SendClientMessage(playerid, GREY, "GENERAL: /settings /admins /helpme /me /do /stats");
2031 }
2032 if(!strcmp(params, "helper", true))
2033 {
2034 SendClientMessage(playerid, GREY, "HELPER: /helpme /hpm");
2035 }
2036 }
2037 }
2038 else return NotLogged(playerid);
2039 return 1;
2040}
2041CMD:admins(playerid, params[])
2042{
2043 new str[128];
2044 SendClientMessage(playerid, WHITE, "------------------------------------------------");
2045 SendClientMessage(playerid, WHITE, "|--- » Jakarta DeathMatch - ONLINE STAFF ---|");
2046 for(new i = 0; i < MAX_PLAYERS; i++)
2047 {
2048 if(IsPlayerConnected(i) && PlayerInfo[i][AdminLevel] >= 1)
2049 {
2050 if(aStatus[i] == 1)
2051 {
2052 format(str, sizeof(str), "%s: %s ({40C040}Administrating)",GetAdminRank(i), RemoveUnderScore(i),i);
2053 }
2054 else if(aStatus[i] == 2)
2055 {
2056 format(str, sizeof(str), "%s: %s ({D52B2B}Roleplaying)",GetAdminRank(i), RemoveUnderScore(i),i);
2057 }
2058 else if(aStatus[i] == 3)
2059 {
2060 format(str, sizeof(str), "%s: %s ({EA9515}Off Duty)",GetAdminRank(i), RemoveUnderScore(i), i);
2061 }
2062 SendClientMessage(playerid, WHITE, str);
2063 }
2064 }
2065 SendClientMessage(playerid, WHITE, "------------------------------------------------");
2066 return 1;
2067}
2068CMD:settings(playerid, params[])
2069{
2070 if(Spawned[playerid])
2071 {
2072 ShowProfileSettings(playerid);
2073 }
2074 else return NotLogged(playerid);
2075 return 1;
2076}
2077CMD:helpme(playerid, params[])
2078{
2079 new string[128];
2080 if(sscanf(params, "s[128]", params)) return SendClientMessage(playerid, GREY, "Usage: /helpme [Message - What you need help with.]");
2081 format(string, sizeof(string), "[HELP] Player %s (ID: %d): %s",RemoveUnderScore(playerid), playerid, params);
2082 SendHelperMessage(LIBLUE, string);
2083 SendClientMessage(playerid, LIBLUE, "Your report has been posted to Online Advisors.");
2084 return 1;
2085}
2086CMD:hpm(playerid, params[])
2087{
2088 new targetid, string[128], text[128];
2089 if(!PlayerInfo[playerid][Helper]) return SendClientMessage(playerid, GREY, "You don't have the required Helper Level to use this command.");
2090 if(sscanf(params, "us[128]", targetid, text)) return SendClientMessage(playerid, GREY, "Usage: /hpm (playerid) (message)");
2091 if(!strlen(text)) return SendClientMessage(playerid, GREY, "Please Enter Something.");
2092 format(string, sizeof(string), "[HELP] Message Sent to %s (%d): %s", RemoveUnderScore(targetid), targetid, text);
2093 SendClientMessage(playerid, LIBLUE, string);
2094 format(string, sizeof(string), "[HELP] Message from Helper %s (%d): %s", RemoveUnderScore(playerid),playerid,text);
2095 SendClientMessage(targetid, LIBLUE, string);
2096 return 1;
2097}
2098CMD:me(playerid, params[])
2099{
2100 new string[128];
2101 if(sscanf(params, "s[128]", params)) return SendClientMessage(playerid, GREY, "Usage: /me [action]");
2102 format(string, sizeof(string), "%s %s",RemoveUnderScore(playerid), params);
2103 CloseMessage(playerid, LIBLUE, string);
2104 return 1;
2105}
2106CMD:do(playerid, params[])
2107{
2108 new string[128];
2109 if(sscanf(params, "s[128]", params)) return SendClientMessage(playerid, GREY, "Usage: /do [action]");
2110 format(string, sizeof(string), "%s ((%s))",params, RemoveUnderScore(playerid));
2111 CloseMessage(playerid, LIBLUE, string);
2112 return 1;
2113}
2114CMD:stats(playerid, params[])
2115{
2116 new string[512];
2117 SendClientMessage(playerid, BLUE, "|_____[STATS]_____|");
2118 // PLAYER NAME
2119 format(string, sizeof(string), "Account Name: {50BB44}%s",PlayerInfo[playerid][Name]);
2120 SendClientMessage(playerid, WHITE, string);
2121 // GENDER
2122 if(PlayerInfo[playerid][Gender] == 1) format(string, sizeof(string), "Gender: {50BB44}Male");
2123 else if(PlayerInfo[playerid][Gender] == 2) format(string, sizeof(string), "Gender: {50BB44}Female");
2124 SendClientMessage(playerid, WHITE, string);
2125 // ADMIN LEVEL
2126 if(PlayerInfo[playerid][AdminLevel] == 0) format (string, sizeof(string), "Administrator Level: {50BB44}None.");
2127 else format(string, sizeof(string), "Administrator Level: {50BB44}%s {FFFFFF}(%d)",GetAdminRank(playerid),PlayerInfo[playerid][AdminLevel]);
2128 SendClientMessage(playerid, WHITE, string);
2129 // LEVEL
2130 format(string, sizeof(string), "Level: {50BB44}%d",PlayerInfo[playerid][Level]);
2131 SendClientMessage(playerid, WHITE, string);
2132 return 1;
2133}
2134public OnPlayerConnect(playerid)
2135{
2136 CurCategoryID[playerid] = CurItemIndex[playerid] = EditingMachineID[playerid] = -1;
2137 Player_Init(playerid);
2138 SetPVarInt(playerid, "xv_teklif_id", INVALID_PLAYER_ID);
2139 SetPVarInt(playerid, "xv_teklif_gonderen", INVALID_PLAYER_ID);
2140 LoadxVehicleKeys(playerid);
2141 SetPlayerVirtualWorld(playerid, 0);
2142 SetPlayerColor(playerid, WHITE);
2143 SetTimerEx("InterPol", 2000, 0, "i", playerid);
2144 RemoveBuildings(playerid);
2145 aStatus[playerid] = 1; // Administrating
2146 if(IsValidName(playerid))
2147 {
2148 if(fexist(UserPath(playerid)))
2149 {
2150 INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
2151 if(!PlayerInfo[playerid][Banned])
2152 {
2153 ShowLoginDialog(playerid);
2154 }
2155 else if(PlayerInfo[playerid][Banned])
2156 {
2157 new string[128];
2158 SendClientMessage(playerid, GREY, "You are banned from Jakarta DeathMatch. Make a Ban Appeal On Forums, if you wish to be Unbanned.");
2159 format(string, sizeof(string), "Banned By: {50BB44}%s", PlayerInfo[playerid][BannedBy]);
2160 SendClientMessage(playerid, GREY, string);
2161
2162 format(string, sizeof(string), "Ban Reason: {50BB44}%s", PlayerInfo[playerid][BanReason]);
2163 SendClientMessage(playerid, GREY, string);
2164
2165 KickPlayer(playerid);
2166 }
2167 }
2168 else
2169 {
2170 ShowRegisterDialog(playerid);
2171 }
2172 }
2173 else
2174 {
2175 SendClientMessage(playerid, RED, "You have been Kicked for using Incorrect Name Format.Use Firstname_Lastname.");
2176 KickPlayer(playerid);
2177 }
2178 return 1;
2179}
2180public OnPlayerDisconnect(playerid, reason)
2181{
2182 if(RegenTimer[playerid] != -1)
2183 {
2184 KillTimer(RegenTimer[playerid]);
2185 RegenTimer[playerid] = -1;
2186 }
2187
2188 foreach(new i : Player)
2189 {
2190 if(PlayerDrugData[i][DrugsOfferedBy] == playerid)
2191 {
2192 PlayerDrugData[i][DrugsOfferedBy] = INVALID_PLAYER_ID;
2193 ShowPlayerDialog(i, -1, DIALOG_STYLE_MSGBOX, "Title", "Content", "Button1", "Button2");
2194
2195 SendClientMessage(i, 0x3498DBFF, "DRUGS: {FFFFFF}The player who sent you an offer disconnected.");
2196 }
2197 }
2198
2199 RemoveEffects(playerid);
2200 Player_SaveDrugs(playerid);
2201 if(GetPVarInt(playerid, "xv_teklif_gonderen") != INVALID_PLAYER_ID)
2202 {
2203 new gonderen = GetPVarInt(playerid, "xv_teklif_gonderen");
2204 KillTimer(offerTimer[playerid]);
2205 SetPVarInt(gonderen, "xv_teklif_id", INVALID_PLAYER_ID);
2206 SendClientMessage(gonderen, -1, "{FF0000}[!] {DCDC22}Your vehicle offer has cancelled because of the player that you offered has disconnected.");
2207 }
2208
2209 if(GetPVarInt(playerid, "xv_teklif_id") != INVALID_PLAYER_ID)
2210 {
2211 new alan = GetPVarInt(playerid, "xv_teklif_id");
2212 SetPVarInt(alan, "xv_teklif_gonderen", INVALID_PLAYER_ID);
2213 DeletePVar(alan, "xv_teklif_xid");
2214 DeletePVar(alan, "xv_teklif_fiyat");
2215 KillTimer(offerTimer[alan]);
2216 SendClientMessage(alan, -1, "{FF0000}[!] {DCDC22}The offer has cancelled because of the player that make the offer has disconnected.");
2217 }
2218
2219 if(IsPlayerInAnyVehicle(playerid))
2220 {
2221 new xid = xVeh[GetPlayerVehicleID(playerid)], Float:xvHP;
2222 GetVehicleHealth(GetPlayerVehicleID(playerid), xvHP);
2223 if(xid != 0 && xVehicle[xid][xv_HizliPark] == 1 && !IsVehicleFlipped(GetPlayerVehicleID(playerid)) && xvHP > 300)
2224 {
2225 GetVehiclePos(GetPlayerVehicleID(playerid), xVehicle[xid][xv_Pos][0], xVehicle[xid][xv_Pos][1], xVehicle[xid][xv_Pos][2]);
2226 GetVehicleZAngle(GetPlayerVehicleID(playerid), xVehicle[xid][xv_Pos][3]);
2227 SavexVehicle(xid);
2228 }
2229 }
2230 if(PlayerInfo[playerid][Registered])
2231 {
2232 if(Spawned[playerid])
2233 {
2234 SaveUser(playerid);
2235 }
2236 }
2237 new string[128];
2238 switch(reason)
2239 {
2240 case 0: format(string,sizeof string,"%s left the server. (Lost Connection)", RemoveUnderScore(playerid));
2241 case 1: format(string,sizeof string,"%s left the server.", RemoveUnderScore(playerid));
2242 case 2: format(string,sizeof string,"%s left the server. (Kicked/Banned)", RemoveUnderScore(playerid));
2243 }
2244 return 1;
2245}
2246
2247public OnPlayerStateChange(playerid, newstate, oldstate)
2248{
2249 if(newstate == PLAYER_STATE_DRIVER)
2250 {
2251 new xid = xVeh[GetPlayerVehicleID(playerid)];
2252 if(xid != 0)
2253 {
2254 if(!strlen(xVehicle[xid][xv_Sahip]))
2255 {
2256 new str[512];
2257 format(str, sizeof str, "{FFFFFF}---------------------------[Vehicle For Sale]---------------------------\n", str);
2258 format(str, sizeof str, "%s\n", str);
2259 format(str, sizeof str, "%s{00D700}This Vehicle Is For Sale!\n", str);
2260 format(str, sizeof str, "%s\n{0098FF}Vehicle Name: {FFFF00}%s\n", str, GetVehicleNameFromModel(xVehicle[xid][xv_ModelID]));
2261 format(str, sizeof str, "%s{0098FF}Plate Number: {FFFF00}%s\n", str, xVehicle[xid][xv_Plaka]);
2262 format(str, sizeof str, "%s{0098FF}Price: {FFFF00}$%d\n", str, xVehicle[xid][xv_Fiyat]);
2263 format(str, sizeof str, "%s\n{FF8000}Do you want to buy this vehicle?{00D700}\n", str);
2264 format(str, sizeof str, "%s\n{FFFFFF}-------------------------------------------------------------------------", str);
2265 ShowPlayerDialog(playerid, XV_DIALOGID+5, DIALOG_STYLE_MSGBOX, "Vehicle For Sale", str, "Buy", "Close");
2266 }
2267 else if(xStrcmp(Isim(playerid), xVehicle[xid][xv_Sahip]) && !Iter_Contains(xVehicleKeys<playerid>, xid))
2268 {
2269 SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}You don't have this car's keys!");
2270 RemovePlayerFromVehicle(playerid);
2271 }
2272 else
2273 {
2274 SendClientMessage(playerid, -1, "{00FF00}[!] {DCDC22}Type {ECB021}/v {DCDC22}for the vehicle menu.");
2275 }
2276 }
2277 }
2278 return 1;
2279}
2280
2281public OnPlayerExitVehicle(playerid, vehicleid)
2282{
2283 new xid = xVeh[vehicleid], Float:xvHP;
2284 GetVehicleHealth(vehicleid, xvHP);
2285 if(xid != 0 && xVehicle[xid][xv_HizliPark] == 1 && !IsVehicleFlipped(vehicleid) && xvHP > 300)
2286 {
2287 GetVehiclePos(vehicleid, xVehicle[xid][xv_Pos][0], xVehicle[xid][xv_Pos][1], xVehicle[xid][xv_Pos][2]);
2288 GetVehicleZAngle(vehicleid, xVehicle[xid][xv_Pos][3]);
2289 SavexVehicle(xid);
2290 }
2291 return 1;
2292}
2293
2294public OnVehicleSpawn(vehicleid)
2295{
2296 new xid = xVeh[vehicleid];
2297 if(xid != 0)
2298 {
2299 DestroyVehicle(xVehicle[xid][xv_Veh]);
2300 xVehicle[xid][xv_Veh] = CreateVehicle(xVehicle[xid][xv_ModelID], xVehicle[xid][xv_Pos][0], xVehicle[xid][xv_Pos][1], xVehicle[xid][xv_Pos][2], xVehicle[xid][xv_Pos][3], xVehicle[xid][xv_Renk][0], xVehicle[xid][xv_Renk][1], -1);
2301 xVeh[xVehicle[xid][xv_Veh]] = xid;
2302 SetVehicleNumberPlate(xVehicle[xid][xv_Veh], xVehicle[xid][xv_Plaka]);
2303 LoadVehicleMod(xid);
2304 }
2305 return 1;
2306}
2307
2308public OnVehicleRespray(playerid, vehicleid, color1, color2)
2309{
2310 new xid = xVeh[vehicleid];
2311 if(xid != 0)
2312 {
2313 xVehicle[xid][xv_Renk][0] = color1;
2314 xVehicle[xid][xv_Renk][1] = color2;
2315 }
2316 return 1;
2317}
2318
2319public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
2320{
2321 new xid = xVeh[vehicleid];
2322 if(xid != 0) xVehicle[xid][xv_Paintjob] = paintjobid;
2323 return 1;
2324}
2325
2326public OnVehicleMod(playerid,vehicleid,componentid)
2327{
2328 new xid = xVeh[vehicleid];
2329 if(xid != 0)
2330 {
2331 for(new i; i<14; i++)
2332 {
2333 xVehicle[xid][xv_Parca][i] = GetVehicleComponentInSlot(vehicleid, i);
2334 }
2335 }
2336 return 1;
2337}
2338
2339public OnPlayerEnterCheckpoint(playerid)
2340{
2341 DisablePlayerCheckpoint(playerid);
2342 return 1;
2343}
2344
2345public OnPlayerSpawn(playerid)
2346{
2347 SetPlayerVirtualWorld(playerid, 0);
2348 HideMNT(playerid);
2349 Spawned[playerid] = 1;
2350 SetPlayerScore(playerid, PlayerInfo[playerid][Level]);
2351 return 1;
2352}
2353
2354public OnPlayerDeath(playerid, killerid, reason)
2355{
2356 SetPlayerVirtualWorld(playerid, 0);
2357 PlayerDrugData[playerid][DrugsCooldown] = 0;
2358 if(RegenTimer[playerid] != -1)
2359 {
2360 KillTimer(RegenTimer[playerid]);
2361 RegenTimer[playerid] = -1;
2362 }
2363
2364 if(EffectTimer[playerid] != -1)
2365 {
2366 KillTimer(EffectTimer[playerid]);
2367 EffectTimer[playerid] = -1;
2368 }
2369
2370 foreach(new i : Player)
2371 {
2372 if(PlayerDrugData[i][DrugsOfferedBy] == playerid)
2373 {
2374 PlayerDrugData[i][DrugsOfferedBy] = INVALID_PLAYER_ID;
2375 ShowPlayerDialog(i, -1, DIALOG_STYLE_MSGBOX, "Title", "Content", "Button1", "Button2");
2376
2377 SendClientMessage(i, 0x3498DBFF, "DRUGS: {FFFFFF}The player who sent you an offer died.");
2378 }
2379 }
2380 return 1;
2381}
2382
2383public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
2384{
2385 switch( dialogid )
2386 {
2387 case DIALOG_REGISTER:
2388 {
2389 if(!response)
2390 {
2391 SendClientMessage(playerid, GREY,"You cannot proceed without Registeration.");
2392 ShowRegisterDialog(playerid);
2393 }
2394 if(response)
2395 {
2396 if(!strlen(inputtext))
2397 {
2398 ShowRegisterDialog(playerid);
2399 SendClientMessage(playerid, GREY,"You cannot proceed without Registeration.");
2400 }
2401 else
2402 {
2403 PlayerInfo[playerid][Password] = udb_hash(inputtext);
2404 ShowPlayerDialog(playerid, DIALOG_AGE, DIALOG_STYLE_INPUT,"{FFFFFF}Registeration Form","{FFFFFF}\nType in your {50BB44}Age. {FFFFFF} (( e.g '25' ))","Enter","");
2405 }
2406 }
2407 }
2408 case DIALOG_AGE:
2409 {
2410 if(!response)
2411 {
2412 SendClientMessage(playerid, GREY,"Please enter your {50BB44}Age.");
2413 ShowPlayerDialog(playerid, DIALOG_AGE, DIALOG_STYLE_INPUT,"{FFFFFF}Registeration Form","{FFFFFF}\nType in your {50BB44}Age. {FFFFFF} (( e.g '25' ))","Enter","");
2414 }
2415 else if(response)
2416 {
2417 PlayerInfo[playerid][Age] = strval(inputtext);
2418 ShowPlayerDialog(playerid, DIALOG_GENDER, DIALOG_STYLE_INPUT,"{FFFFFF}Registeration Form","{FFFFFF}\nPlease Enter your {50BB44}Gender. {FFFFFF} (( 'Male' or 'Female' ))","Enter","");
2419 }
2420 }
2421 case DIALOG_GENDER:
2422 {
2423 if(!response)
2424 {
2425 SendClientMessage(playerid, GREY,"Please select your {50BB44}Gender.");
2426 ShowPlayerDialog(playerid, DIALOG_GENDER, DIALOG_STYLE_INPUT,"{FFFFFF}Registeration Form","{FFFFFF}\nPlease Enter your {50BB44}Gender. {FFFFFF} (( 'Male' or 'Female' ))","Enter","");
2427 }
2428 else if(response)
2429 {
2430 NewStats(playerid);
2431 if(!strlen(inputtext))
2432 {
2433 ShowPlayerDialog(playerid, DIALOG_GENDER, DIALOG_STYLE_INPUT,"{FFFFFF}Registeration Form","{FFFFFF}\nPlease Enter your {50BB44}Gender. {FFFFFF} (( 'Male' or 'Female' ))","Enter","");
2434 SendClientMessage(playerid, GREY,"Please select your {50BB44}Gender.");
2435 }
2436 if(strcmp(inputtext, "Male", true) == 0)
2437 {
2438 PlayerInfo[playerid][Gender] = 1;
2439 SendCitizenship(playerid);
2440 }
2441 else if(strcmp(inputtext, "Female", true) == 0)
2442 {
2443 PlayerInfo[playerid][Gender] = 2;
2444 SendCitizenship(playerid);
2445 }
2446 else
2447 {
2448 ShowPlayerDialog(playerid, DIALOG_GENDER, DIALOG_STYLE_INPUT,"{FFFFFF}Registeration Form","{FFFFFF}\nPlease Enter your {50BB44}Gender. {FFFFFF} (( 'Male' or 'Female' ))","Enter","");
2449 }
2450 }
2451 }
2452 case DIALOG_LOGIN:
2453 {
2454 if(!response)
2455 {
2456 ShowLoginDialog(playerid);
2457 SendClientMessage(playerid, GREY,"You need to Login in order to play.");
2458 }
2459 if(response)
2460 {
2461 if(udb_hash(inputtext) == PlayerInfo[playerid][Password])
2462 {
2463 INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
2464 GivePlayerMoney(playerid, PlayerInfo[playerid][Money]);
2465 ShowCharacterDialog(playerid);
2466 }
2467 else
2468 {
2469 ShowLoginDialog(playerid);
2470 SendClientMessage(playerid, GREY, "Incorrect Password");
2471 LoginAttempt[playerid] ++;
2472 if(LoginAttempt[playerid] == 2)
2473 {
2474 LoginAttempt[playerid] = 0;
2475 KickPlayer(playerid);
2476 }
2477 }
2478 }
2479 }
2480 case DIALOG_CHARSELECT:
2481 {
2482 if(!response)
2483 {
2484 ShowCharacterDialog(playerid);
2485 SendClientMessage(playerid, GREY,"Please Select your Character in order to spawn, or click 'Profile Settings' for the settings.");
2486 }
2487 if(response)
2488 {
2489 switch(listitem)
2490 {
2491 case 0:
2492 {
2493 SetSpawnInfo(playerid, 0, 0, 1958.33, 1343.12, 15.36, 269.15, 0, 0, 0, 0, 0, 0);
2494 SpawnPlayer(playerid);
2495 TogglePlayerSpectating(playerid, 0);
2496 if(PlayerInfo[playerid][Skin]) SetPlayerSkin(playerid, 170);
2497 else SetPlayerSkin(playerid, PlayerInfo[playerid][Skin]);
2498 ShowCharacterInformation(playerid);
2499 HideMNT(playerid);
2500 }
2501 case 1:
2502 {
2503 ShowProfileSettings(playerid);
2504 }
2505 }
2506 }
2507 }
2508 case DIALOG_PROFILE:
2509 {
2510 if(!response)
2511 {
2512 SendClientMessage(playerid, GREY,"You have chosen to close the Profile Settings.");
2513 if(!Spawned[playerid])
2514 {
2515 ShowLoginDialog(playerid);
2516 }
2517 }
2518 if(response)
2519 {
2520 switch(listitem)
2521 {
2522 case 0:
2523 {
2524 // TO be Done Later
2525 }
2526 case 1:
2527 {
2528 ShowPlayerDialog(playerid, DIALOG_CHANGEAGE, DIALOG_STYLE_INPUT,"{FFFFFF}New Age","{FFFFFF}Please enter your Character's new age.","Enter","");
2529 }
2530 case 2:
2531 {
2532 ShowPlayerDialog(playerid, DIALOG_CHANGEGEN, DIALOG_STYLE_INPUT,"{FFFFFF}New Gender","{FFFFFF}Please enter your Character's new gender. (( 'Male' or 'Female' ))","Enter","");
2533 }
2534 case 3:
2535 {
2536 ShowPlayerDialog(playerid, DIALOG_CHANGEPASS, DIALOG_STYLE_INPUT,"{FFFFFF}New Password","{FFFFFF}Please enter your new password.","Enter","");
2537 }
2538 }
2539 }
2540 }
2541 case DIALOG_CHANGEAGE:
2542 {
2543 if(!response)
2544 {
2545 SendClientMessage(playerid, GREY,"You have chosen to cancel the changes.");
2546 }
2547 else
2548 {
2549 new string[128];
2550 PlayerInfo[playerid][Age] = strval(inputtext);
2551 format(string, sizeof(string), "You have set your Character's Age to {50BB44}%d.", strval(inputtext));
2552 ShowPlayerDialog(playerid, DIALOG_AGEMSG, DIALOG_STYLE_MSGBOX, "{FFFFFF}New Age",string,"Ok","");
2553 }
2554 }
2555 case DIALOG_CHANGEGEN:
2556 {
2557 if(!response)
2558 {
2559 SendClientMessage(playerid, GREY,"You have chosen to cancel the changes.");
2560 }
2561 else
2562 {
2563 if(!strlen(inputtext))
2564 {
2565 SendClientMessage(playerid, GREY,"You have chosen to cancel the changes.");
2566 }
2567 if(strcmp(inputtext, "Male", true) == 0)
2568 {
2569 PlayerInfo[playerid][Gender] = 1;
2570 SendClientMessage(playerid, GREY, "You have successfully changed your Gender to {50BB44}Male.");
2571 }
2572 else if(strcmp(inputtext, "Female", true) == 0)
2573 {
2574 PlayerInfo[playerid][Gender] = 2;
2575 SendClientMessage(playerid, GREY, "You have successfully changed your Gender to {50BB44}Female.");
2576 }
2577 }
2578 }
2579 case DIALOG_CHANGEPASS:
2580 {
2581 if(!response)
2582 {
2583 SendClientMessage(playerid, GREY,"You have chosen to cancel the changes.");
2584 }
2585 else
2586 {
2587 if(!strlen(inputtext))
2588 {
2589 SendClientMessage(playerid, GREY,"You have chosen to cancel the changes.");
2590 }
2591 else
2592 {
2593 new string[128];
2594 format(string, sizeof(string), "You have successfully changed your password to {50BB44}%s.", inputtext);
2595 SendClientMessage(playerid, GREY, string);
2596 PlayerInfo[playerid][Password] = udb_hash(inputtext);
2597 }
2598 }
2599 }
2600 case DIALOG_ASTATUS:
2601 {
2602 if(!response)
2603 {
2604 // Do nothing
2605 }
2606 else if(response)
2607 {
2608 switch(listitem)
2609 {
2610 case 0:
2611 {
2612 aStatus[playerid] = 1;
2613 SendClientMessage(playerid, GREY,"You have Changed your Administrator Status to {58A624}Administrating (On Duty)");
2614 }
2615 case 1:
2616 {
2617 aStatus[playerid] = 2;
2618 SendClientMessage(playerid, GREY,"You have Changed your Administrator Status to {FF0000}Playing Games (Off Duty)");
2619 }
2620 case 2:
2621 {
2622 aStatus[playerid] = 3;
2623 SendClientMessage(playerid, GREY,"You have Changed your Administrator Status to {FF8C00}Busy Do not disturb");
2624 }
2625 }
2626 }
2627 }
2628 }
2629 if(dialogid == XV_DIALOGID)
2630 {
2631 if(response)
2632 {
2633 new tmp[8], xid;
2634 GetPVarString(playerid, "selected_veh_plate", tmp, 8);
2635 xid = GetVehiclexIDFromPlate(tmp);
2636 if(xid == 0) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}Couldn't find the vehicle!");
2637
2638 switch(listitem)
2639 {
2640 case 0: // arac nerede?
2641 {
2642 if(xVehicle[xid][xv_Garajda])
2643 {
2644 if(!xStrcmp(xVehicle[xid][xv_Sahip], Isim(playerid))) ShowPlayerDialog(playerid, XV_DIALOGID+4, DIALOG_STYLE_MSGBOX, "Where Is My Car?", "{FFA500}This vehicle is in the garage. You can take it from the garage by choosing the option in the vehicle menu.", "Back", "");
2645 else ShowPlayerDialog(playerid, XV_DIALOGID+4, DIALOG_STYLE_MSGBOX, "Where Is My Car?", "{FFA500}This vehicle is in the garage. Only the vehicle owner can take it out from the garage.", "Back", "");
2646 }
2647 else
2648 {
2649 new Float:vpos[3];
2650 GetVehiclePos(xVehicle[xid][xv_Veh], vpos[0], vpos[1], vpos[2]);
2651 SetPlayerCheckpoint(playerid, vpos[0], vpos[1], vpos[2], 3);
2652 SendClientMessage(playerid, -1, "{00BD00}[!] {00FF00}Vehicle has marked on the map!");
2653 }
2654 }
2655 case 1: // garaj sok/çýkar
2656 {
2657 if(xStrcmp(xVehicle[xid][xv_Sahip], Isim(playerid))) return ShowPlayerDialog(playerid, XV_DIALOGID+4, DIALOG_STYLE_MSGBOX, inputtext, "{FF0000}[ERROR] {FFA500}Only the vehicle owner can use this feature!", "Back", "");
2658 if(xVehicle[xid][xv_Garajda])
2659 {
2660 new str[128];
2661 GetPlayerPos(playerid, xVehicle[xid][xv_Pos][0], xVehicle[xid][xv_Pos][1], xVehicle[xid][xv_Pos][2]);
2662 GetPlayerFacingAngle(playerid, xVehicle[xid][xv_Pos][3]);
2663 xVehicle[xid][xv_Pos][3] += 90;
2664 GetXYInFrontOfPlayer(playerid, xVehicle[xid][xv_Pos][0], xVehicle[xid][xv_Pos][1], 3);
2665 xVehicle[xid][xv_Veh] = CreateVehicle(xVehicle[xid][xv_ModelID], xVehicle[xid][xv_Pos][0], xVehicle[xid][xv_Pos][1], xVehicle[xid][xv_Pos][2], xVehicle[xid][xv_Pos][3], xVehicle[xid][xv_Renk][0], xVehicle[xid][xv_Renk][1], -1);
2666 xVeh[xVehicle[xid][xv_Veh]] = xid;
2667 SetVehicleNumberPlate(xVehicle[xid][xv_Veh], xVehicle[xid][xv_Plaka]);
2668 SetVehicleToRespawn(xVehicle[xid][xv_Veh]);
2669 xVehicle[xid][xv_Garajda] = 0;
2670 SavexVehicle(xid);
2671 format(str, sizeof(str), "{ECEC13}%s {FFFB93}with {ECEC13}%s {FFFB93}plate number has taken from the garage!", GetVehicleNameFromModel(xVehicle[xid][xv_ModelID]), xVehicle[xid][xv_Plaka]);
2672 SendClientMessage(playerid, -1, str);
2673 }
2674 else
2675 {
2676 if(GetPlayerInGarageVehicleCount(playerid) >= GARAJ_MAX_ARAC) return SendClientMessage(playerid, -1, "{FF0000}[!] {DCDC22}You have reached the limit! You can't put more vehicles into the garage.");
2677 new str[128];
2678 DestroyVehicle(xVehicle[xid][xv_Veh]);
2679 xVehicle[xid][xv_Garajda] = 1;
2680 SavexVehicle(xid);
2681 format(str, sizeof(str), "{ECEC13}%s {FFFB93}with {ECEC13}%s {FFFB93}plate number has put into the garage!", GetVehicleNameFromModel(xVehicle[xid][xv_ModelID]), xVehicle[xid][xv_Plaka]);
2682 SendClientMessage(playerid, -1, str);
2683 }
2684 }
2685 case 2:
2686 {
2687 new str[288];
2688 format(str, sizeof(str), "{FFFB93}Quick Park is a system that parks your vehicle automatically when you get off the vehicle.\nWhen you get off the car, if the vehicle isn't upside down or the vehicle's health more than 300 your vehicle will be parked, otherwise not.\n\nQuick Park is currently %s", (xVehicle[xid][xv_HizliPark]) ? ("{00FF00}Active") : ("{FF0000}Deactive"));
2689 ShowPlayerDialog(playerid, XV_DIALOGID+1, DIALOG_STYLE_MSGBOX, "Quick Park", str, (xVehicle[xid][xv_HizliPark]) ? ("Deactivate") : ("Activate"), "Back");
2690 }
2691 case 3:
2692 {
2693 if(xStrcmp(xVehicle[xid][xv_Sahip], Isim(playerid))) return ShowPlayerDialog(playerid, XV_DIALOGID+4, DIALOG_STYLE_MSGBOX, "Vehicle Keys", "{FF0000}[ERROR] {FFA500}Only the vehicle owner can use this feature!", "Back", "");
2694 ShowPlayerDialog(playerid, XV_DIALOGID+2, DIALOG_STYLE_LIST, "Vehicle Keys", "{DCDC22}» {FFFB93}View Key Owners\n{DCDC22}» {FFFB93}Give Someone Key\n{DCDC22}» {FFFB93}Change the Lock", "Select", "Back");
2695 }
2696 case 4:
2697 {
2698 if(xStrcmp(xVehicle[xid][xv_Sahip], Isim(playerid))) return ShowPlayerDialog(playerid, XV_DIALOGID+4, DIALOG_STYLE_MSGBOX, "Vehicle Sale", "{FF0000}[ERROR] {FFA500}Only the vehicle owner can use this feature!", "Back", "");
2699 ShowPlayerDialog(playerid, XV_DIALOGID+8, DIALOG_STYLE_LIST, "Sell The Vehicle", "{DCDC22}» {FFFB93}Sell To Car Dealer\n{DCDC22}» {FFFB93}Sell To Player", "Select", "Back");
2700 }
2701 case 5:
2702 {
2703 new str[256];
2704 format(str, sizeof(str), "{FFFFFF}----------[ Vehicle Information ]----------\n\n{F0AE0F}-» {ECE913}Owner: {FFFFFF}%s\n{F0AE0F}-» {ECE913}Vehicle Name: {FFFFFF}%s\n{F0AE0F}-» {ECE913}Plate Number: {FFFFFF}%s", xVehicle[xid][xv_Sahip], GetVehicleNameFromModel(xVehicle[xid][xv_ModelID]), xVehicle[xid][xv_Plaka]);
2705 ShowPlayerDialog(playerid, XV_DIALOGID+4, DIALOG_STYLE_MSGBOX, " Vehicle Information", str, "Back", "");
2706 }
2707 }
2708 }
2709 else
2710 {
2711 DeletePVar(playerid, "selected_veh_plate");
2712 cmd_v(playerid, "");
2713 }
2714 }
2715
2716 if(dialogid == XV_DIALOGID+1)
2717 {
2718 new tmp[8], xid;
2719 GetPVarString(playerid, "selected_veh_plate", tmp, 8);
2720 xid = GetVehiclexIDFromPlate(tmp);
2721 if(xid == 0) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}Couldn't find the vehicle!");
2722
2723 if(response)
2724 {
2725 switch(xVehicle[xid][xv_HizliPark])
2726 {
2727 case 0:
2728 {
2729 SendClientMessage(playerid, -1, "{00BD00}[!] {00FF00}Quick Park has activated!");
2730 xVehicle[xid][xv_HizliPark] = 1;
2731 xvMenuGoster(playerid);
2732 }
2733 case 1:
2734 {
2735 SendClientMessage(playerid, -1, "{00BD00}[!] {00FF00}Quick Park has deactivated!");
2736 xVehicle[xid][xv_HizliPark] = 0;
2737 xvMenuGoster(playerid);
2738 }
2739 }
2740 } else xvMenuGoster(playerid);
2741 }
2742
2743 if(dialogid == XV_DIALOGID+2)
2744 {
2745 if(response)
2746 {
2747 new tmp[8], xid;
2748 GetPVarString(playerid, "selected_veh_plate", tmp, 8);
2749 xid = GetVehiclexIDFromPlate(tmp);
2750 if(xid == 0) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}Couldn't find the vehicle!");
2751
2752 switch(listitem)
2753 {
2754 case 0:
2755 {
2756 new query[128], Cache:keys;
2757 mysql_format(mysqlB, query, sizeof(query), "SELECT Isim FROM xVehicleKeys WHERE AracID=%d ORDER BY AracID DESC LIMIT %d, 15", xid, GetPVarInt(playerid, "xvKeysPage")*15);
2758 keys = mysql_query(mysqlB, query);
2759 new rows = cache_num_rows();
2760 if(rows)
2761 {
2762 new list[512], o_isim[MAX_PLAYER_NAME];
2763 format(list, sizeof(list), "Player Name\n");
2764 for(new i; i < rows; ++i)
2765 {
2766 cache_get_value_name(i, "Isim", o_isim);
2767 format(list, sizeof(list), "%s%s\n", list, o_isim);
2768 }
2769 format(list, sizeof(list), "%s{F4D00B}<< Previous Page\n{F4D00B}>> Next Page", list);
2770 ShowPlayerDialog(playerid, XV_DIALOGID+3, DIALOG_STYLE_TABLIST_HEADERS, "Key Owners (Page 1)", list, "Select", "Back");
2771 }
2772 else
2773 {
2774 SendClientMessage(playerid, 0xE74C3CFF, "No one has your vehicle's keys!");
2775 }
2776 cache_delete(keys);
2777 }
2778 case 1: ShowPlayerDialog(playerid, XV_DIALOGID+13, DIALOG_STYLE_INPUT, "Give Vehicle Key", "{FFFB93}Enter the player's ID or name that you want to give the key:", "Next", "Back");
2779 case 2:
2780 {
2781 ShowPlayerDialog(playerid, XV_DIALOGID+15, DIALOG_STYLE_MSGBOX, "Change The Lock", "{FFFB93}Are you sure that you want to change the lock?\nAll keys will be removed from key owners.", "Confirm", "Back");
2782 }
2783 }
2784 } else xvMenuGoster(playerid);
2785 }
2786
2787 if(dialogid == XV_DIALOGID+3)
2788 {
2789 if(response)
2790 {
2791 new tmp[8], xid;
2792 GetPVarString(playerid, "selected_veh_plate", tmp, 8);
2793 xid = GetVehiclexIDFromPlate(tmp);
2794 if(xid == 0) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}Couldn't find the vehicle!");
2795
2796 if(!xStrcmp(inputtext, "<< Previous Page"))
2797 {
2798 SetPVarInt(playerid, "xvKeysPage", GetPVarInt(playerid, "xvKeysPage")-1);
2799 if(GetPVarInt(playerid, "xvKeysPage") < 0)
2800 {
2801 SetPVarInt(playerid, "xvKeysPage", 0);
2802 ShowPlayerDialog(playerid, XV_DIALOGID+2, DIALOG_STYLE_LIST, "Vehicle Keys", "{DCDC22}» {FFFB93}View Key Owners\n{DCDC22}» {FFFB93}Give Someone Key\n{DCDC22}» {FFFB93}Change the Lock", "Select", "Back");
2803 return 1;
2804 }
2805
2806 new query[128], Cache:keys;
2807 mysql_format(mysqlB, query, sizeof(query), "SELECT Isim FROM xVehicleKeys WHERE AracID=%d ORDER BY AracID DESC LIMIT %d, 15", xid, GetPVarInt(playerid, "xvKeysPage")*15);
2808 keys = mysql_query(mysqlB, query);
2809 new rows = cache_num_rows();
2810 if(rows)
2811 {
2812 new list[512], o_isim[MAX_PLAYER_NAME];
2813 format(list, sizeof(list), "Player Name\n");
2814 for(new i; i < rows; ++i)
2815 {
2816 cache_get_value_name(i, "Isim", o_isim);
2817 format(list, sizeof(list), "%s%s\n", list, o_isim);
2818 }
2819 format(list, sizeof(list), "%s{F4D00B}<< Previous Page\n{F4D00B}>> Next Page", list);
2820 new head[32];
2821 format(head, sizeof(head), "Key Owners (Page %d)", GetPVarInt(playerid, "xvKeysPage")+1);
2822 ShowPlayerDialog(playerid, XV_DIALOGID+3, DIALOG_STYLE_TABLIST_HEADERS, head, list, "Select", "Back");
2823 }
2824 else
2825 {
2826 /*SetPVarInt(playerid, "xvKeysPage", 0);
2827 ShowPlayerDialog(playerid, XV_DIALOGID+2, DIALOG_STYLE_LIST, "Aracýn Anahtarlarý", "Anahtarý Olanlarý Gör\nBirine Anahtar Ver\nKilidi Deðiþtir", "Select", "Back");
2828 */
2829 SendClientMessage(playerid, 0xE74C3CFF, "There is no more key owners!");
2830 }
2831 cache_delete(keys);
2832 }
2833 else if(!xStrcmp(inputtext, ">> Next Page"))
2834 {
2835 SetPVarInt(playerid, "xvKeysPage", GetPVarInt(playerid, "xvKeysPage")+1);
2836
2837 new query[128], Cache:keys;
2838 mysql_format(mysqlB, query, sizeof(query), "SELECT Isim FROM xVehicleKeys WHERE AracID=%d ORDER BY AracID DESC LIMIT %d, 15", xid, GetPVarInt(playerid, "xvKeysPage")*15);
2839 keys = mysql_query(mysqlB, query);
2840 new rows = cache_num_rows();
2841 if(rows)
2842 {
2843 new list[512], o_isim[MAX_PLAYER_NAME];
2844 format(list, sizeof(list), "Player Name\n");
2845 for(new i; i < rows; ++i)
2846 {
2847 cache_get_value_name(i, "Isim", o_isim);
2848 format(list, sizeof(list), "%s%s\n", list, o_isim);
2849 }
2850 format(list, sizeof(list), "%s{F4D00B}<< Previous Page\n{F4D00B}>> Next Page", list);
2851 new head[32];
2852 format(head, sizeof(head), "Key Owners (Sayfa %d)", GetPVarInt(playerid, "xvKeysPage")+1);
2853 ShowPlayerDialog(playerid, XV_DIALOGID+3, DIALOG_STYLE_TABLIST_HEADERS, head, list, "Select", "Back");
2854 }
2855 else
2856 {
2857 SetPVarInt(playerid, "xvKeysPage", GetPVarInt(playerid, "xvKeysPage") - 1);
2858 mysql_format(mysqlB, query, sizeof(query), "SELECT Isim FROM xVehicleKeys WHERE AracID=%d ORDER BY AracID DESC LIMIT %d, 15", xid, GetPVarInt(playerid, "xvKeysPage")*15);
2859 keys = mysql_query(mysqlB, query);
2860 rows = cache_num_rows();
2861 if(rows)
2862 {
2863 new list[512], o_isim[MAX_PLAYER_NAME];
2864 format(list, sizeof(list), "Player Name\n");
2865 for(new i; i < rows; ++i)
2866 {
2867 cache_get_value_name(i, "Isim", o_isim);
2868 format(list, sizeof(list), "%s%s\n", list, o_isim);
2869 }
2870 format(list, sizeof(list), "%s{F4D00B}<< Previous Page\n{F4D00B}>> Next Page", list);
2871 new head[32];
2872 format(head, sizeof(head), "Key Owners (Sayfa %d)", GetPVarInt(playerid, "xvKeysPage")+1);
2873 ShowPlayerDialog(playerid, XV_DIALOGID+3, DIALOG_STYLE_TABLIST_HEADERS, head, list, "Select", "Back");
2874 }
2875 SendClientMessage(playerid, 0xE74C3CFF, "There is no more key owners!");
2876 }
2877 cache_delete(keys);
2878 }
2879 else
2880 {
2881 SetPVarString(playerid, "tmp_keyname", inputtext);
2882 ShowPlayerDialog(playerid, XV_DIALOGID+14, DIALOG_STYLE_LIST, "Vehicle Key", "{DCDC22}» {FFFB93}Take The Key Back", "Apply", "Back");
2883 }
2884 }
2885 }
2886
2887 if(dialogid == XV_DIALOGID+4) xvMenuGoster(playerid);
2888
2889 if(dialogid == XV_DIALOGID+5)
2890 {
2891 if(response)
2892 {
2893 new xid = xVeh[GetPlayerVehicleID(playerid)];
2894 if(GetPlayerxVehicleCount(playerid) >= OYUNCU_MAX_ARAC) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}You have reached the limit! You can't buy more vehicle."), RemovePlayerFromVehicle(playerid);
2895 if(GetPlayerMoney(playerid) < xVehicle[xid][xv_Fiyat]) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}You don't have enough money!"), RemovePlayerFromVehicle(playerid);
2896 GivePlayerMoney(playerid, -xVehicle[xid][xv_Fiyat]);
2897 format(xVehicle[xid][xv_Sahip], 24, "%s", Isim(playerid));
2898 SavexVehicle(xid);
2899 Delete3DTextLabel(xVehicle[xid][xv_Text]);
2900 SendClientMessage(playerid, -1, "{00BD00}[!] {00FF00}You have succesfully bought this vehicle! You can manage your vehicles by typing {ECB021}/v");
2901 }
2902 else
2903 {
2904 if(!IsPlayerAdmin(playerid)) RemovePlayerFromVehicle(playerid);
2905 }
2906 }
2907
2908 if(dialogid == XV_DIALOGID+6)
2909 {
2910 if(response)
2911 {
2912 if(!xStrcmp(inputtext, "» This Vehicle"))
2913 {
2914 SetPVarString(playerid, "selected_veh_plate", xVehicle[xVeh[GetPlayerVehicleID(playerid)]][xv_Plaka]);
2915 xvMenuGoster(playerid);
2916 }
2917 else if(!xStrcmp(inputtext, "» My Own Vehicles"))
2918 {
2919 new str[256], cnt;
2920 format(str, sizeof(str), "Plate Number\tVehicle Name\tState");
2921 foreach(new i : xVehicles)
2922 {
2923 if(!xStrcmp(xVehicle[i][xv_Sahip], Isim(playerid))) format(str, sizeof(str), "%s\n%s\t%s\t%s", str, xVehicle[i][xv_Plaka], GetVehicleNameFromModel(xVehicle[i][xv_ModelID]), (xVehicle[i][xv_Garajda]) ? ("{F0CE0F}In the Garage") : ("{8FE01F}On the Map")), cnt++;
2924 }
2925 if(!cnt) ShowPlayerDialog(playerid, XV_DIALOGID-1, DIALOG_STYLE_MSGBOX, "My Own Vehicles", "{FF0000}[!] {F0AE0F}You don't have any vehicle!", "OK", "");
2926 else ShowPlayerDialog(playerid, XV_DIALOGID+7, DIALOG_STYLE_TABLIST_HEADERS, "My Own Vehicles", str, "Choose Car", "Back");
2927 }
2928 else if(!xStrcmp(inputtext, "» Vehicles That I Have Keys"))
2929 {
2930 new str[256], cnt;
2931 format(str, sizeof(str), "Plate Number\tVehicle Name\tState");
2932 foreach(new i : xVehicleKeys<playerid>)
2933 {
2934 format(str, sizeof(str), "%s\n%s\t%s\t%s", str, xVehicle[i][xv_Plaka], GetVehicleNameFromModel(xVehicle[i][xv_ModelID]), (xVehicle[i][xv_Garajda]) ? ("{F0CE0F}In the Garage") : ("{8FE01F}On the Map"));
2935 cnt++;
2936 }
2937 if(!cnt) ShowPlayerDialog(playerid, XV_DIALOGID-1, DIALOG_STYLE_MSGBOX, "Vehicles That I Have Keys", "{FFA500}You don't have any vehicle's keys!", "OK", "");
2938 else ShowPlayerDialog(playerid, XV_DIALOGID+7, DIALOG_STYLE_TABLIST_HEADERS, "Vehicles That I Have Keys", str, "Choose Car", "Back");
2939 }
2940 }
2941 }
2942
2943 if(dialogid == XV_DIALOGID+7)
2944 {
2945 if(response)
2946 {
2947 new tmp[2][8];
2948 split(inputtext, tmp, '\t');
2949 SetPVarString(playerid, "selected_veh_plate", tmp[0]);
2950 xvMenuGoster(playerid);
2951 } else cmd_v(playerid, "");
2952 }
2953
2954 if(dialogid == XV_DIALOGID+8)
2955 {
2956 if(response)
2957 {
2958 new str[256], tmpp[8], xid;
2959 GetPVarString(playerid, "selected_veh_plate", tmpp, 8);
2960 xid = GetVehiclexIDFromPlate(tmpp);
2961 if(xid == 0) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}Couldn't find the vehicle!");
2962
2963 switch(listitem)
2964 {
2965 case 0:
2966 {
2967 format(str, sizeof(str), "{ECCB13}Are you sure that you want to sell your vehicle to car dealer?\n{FFFB93}Amount of payment: {15EC13}$%d\n\n{AAAAAA}(Payment is %%70 of the price that you bought)", (xVehicle[xid][xv_Fiyat] / 100) * 70);
2968 ShowPlayerDialog(playerid, XV_DIALOGID+9, DIALOG_STYLE_MSGBOX, "Sell Vehicle To Car Dealer", str, "Confirm", "Back");
2969 }
2970 case 1:
2971 {
2972 if(GetPVarInt(playerid, "xv_teklif_id") != INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}You already offered to a player! Wait for the response for that offer.");
2973 if(xVehicle[xid][xv_Garajda]) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}Before you sell your vehicle, take it out from the garage!");
2974 ShowPlayerDialog(playerid, XV_DIALOGID+10, DIALOG_STYLE_INPUT, "Sell Vehicle to Player", "{FFFB93}Enter the name or ID of the player that you want to sell your vehicle:", "Next", "Back");
2975 }
2976 }
2977 } else xvMenuGoster(playerid);
2978 }
2979
2980 if(dialogid == XV_DIALOGID+9)
2981 {
2982 if(response)
2983 {
2984 new query[128], tmpp[8], xid;
2985 GetPVarString(playerid, "selected_veh_plate", tmpp, 8);
2986 xid = GetVehiclexIDFromPlate(tmpp);
2987 if(xid == 0) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}Couldn't find the vehicle!");
2988
2989 GivePlayerMoney(playerid, (xVehicle[xid][xv_Fiyat] / 100) * 70);
2990 if(IsValidVehicle(xVehicle[xid][xv_Veh])) DestroyVehicle(xVehicle[xid][xv_Veh]);
2991 Iter_Remove(xVehicles, xid);
2992 DeletePVar(playerid, "selected_veh_plate");
2993 foreach(new i : Player)
2994 {
2995 if(Iter_Contains(xVehicleKeys<i>, xid)) Iter_Remove(xVehicleKeys<i>, xid);
2996 }
2997
2998 mysql_format(mysqlB, query, sizeof(query), "DELETE FROM xVehicleKeys WHERE AracID=%d", xid);
2999 mysql_query(mysqlB, query);
3000 mysql_format(mysqlB, query, sizeof(query), "DELETE FROM xVehicle WHERE ID=%d", xid);
3001 mysql_query(mysqlB, query);
3002 SendClientMessage(playerid, -1, "{00BD00}[!] {00FF00}You sold your vehicle!");
3003 } else ShowPlayerDialog(playerid, XV_DIALOGID+8, DIALOG_STYLE_LIST, "Sell The Vehicle", "{DCDC22}» {FFFB93}Sell To Car Dealer\n{DCDC22}» {FFFB93}Sell To Player", "Select", "Back");
3004 }
3005
3006 if(dialogid == XV_DIALOGID+10)
3007 {
3008 if(response)
3009 {
3010 new pid;
3011 if(sscanf(inputtext, "u", pid)) return ShowPlayerDialog(playerid, XV_DIALOGID+10, DIALOG_STYLE_INPUT, "Sell Vehicle to Player", "{FF0000}[!] {F0AE0F}You wrote nothing!\n\n{FFFB93}Enter the name or ID of the player that you want to sell your vehicle:", "Next", "Back");
3012 if(!IsPlayerConnected(pid)) return ShowPlayerDialog(playerid, XV_DIALOGID+10, DIALOG_STYLE_INPUT, "Sell Vehicle to Player", "{FF0000}[!] {F0AE0F}Player is not connected!\n\n{FFFB93}Enter the name or ID of the player that you want to sell your vehicle:", "Next", "Back");
3013 if(GetPlayerxVehicleCount(playerid) >= OYUNCU_MAX_ARAC) return ShowPlayerDialog(playerid, XV_DIALOGID+10, DIALOG_STYLE_INPUT, "Sell Vehicle to Player", "{FF0000}[!] {F0AE0F}This player has reached the limit! Can't buy more vehicles.\n\n{FFFB93}Enter the name or ID of the player that you want to sell your vehicle:", "Next", "Back");
3014 if(GetPVarInt(pid, "xv_teklif_gonderen") != INVALID_PLAYER_ID) return ShowPlayerDialog(playerid, XV_DIALOGID+10, DIALOG_STYLE_INPUT, "Sell Vehicle to Player", "{FF0000}[!] {F0AE0F}Someone else has offed to this player! Wait for that offer first.\n\n{FFFB93}Enter the name or ID of the player that you want to sell your vehicle:", "Next", "Back");
3015 SetPVarInt(playerid, "xv_teklif_id", pid);
3016 new str[128];
3017 format(str, sizeof(str), "{FFFB93}Selected player: {ECEC13}%s {ECB021}(%d)\n\n{FFFB93}Enter the price you want:", Isim(pid), pid);
3018 ShowPlayerDialog(playerid, XV_DIALOGID+11, DIALOG_STYLE_INPUT, "Sell the Vehicle - Price", str, "Send Offer", "Back");
3019 } else SetPVarInt(playerid, "xv_teklif_id", INVALID_PLAYER_ID), ShowPlayerDialog(playerid, XV_DIALOGID+8, DIALOG_STYLE_LIST, "Sell The Vehicle", "{DCDC22}» {FFFB93}Sell To Car Dealer\n{DCDC22}» {FFFB93}Sell To Player", "Select", "Back");
3020 }
3021
3022 if(dialogid == XV_DIALOGID+11)
3023 {
3024 if(response)
3025 {
3026 new tmpp[8], xid;
3027 GetPVarString(playerid, "selected_veh_plate", tmpp, 8);
3028 xid = GetVehiclexIDFromPlate(tmpp);
3029 if(xid == 0) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}Couldn't find the vehicle!");
3030
3031 new pid = GetPVarInt(playerid, "xv_teklif_id");
3032 if(!IsPlayerConnected(pid)) return SendClientMessage(playerid, -1, "{FF0000}[!] {DCDC22}Offer has cancelled because of the player has disconnected.");
3033 if(!isNumeric(inputtext)) return ShowPlayerDialog(playerid, XV_DIALOGID+11, DIALOG_STYLE_INPUT, "Sell the Vehicle - Price", "{FF0000}[!] {F0AE0F} Only enter numbers!\n\n{FFFB93}Enter the price you want:", "Send Offer", "Back");
3034 if(GetPlayerMoney(pid) < strval(inputtext)) return ShowPlayerDialog(playerid, XV_DIALOGID+11, DIALOG_STYLE_INPUT, "Sell the Vehicle - Price", "{FF0000}[!] {F0AE0F} This player doesn't have that much money!\n\n{FFFB93}Enter the price you want:", "Send Offer", "Back");
3035 SetPVarInt(pid, "xv_teklif_gonderen", playerid);
3036 SetPVarInt(pid, "xv_teklif_fiyat", strval(inputtext));
3037 SetPVarInt(pid, "xv_teklif_xid", xid);
3038 offerTimer[pid] = SetTimerEx("TeklifBitir", 30000, false, "uu", playerid, pid);
3039 new str[400];
3040 format(str, sizeof(str), "{00BD00}[!] {FFFB93}Offer has sent to {ECEC13}%s", Isim(pid));
3041 SendClientMessage(playerid, -1, str);
3042 format(str, sizeof(str), "{FFFFFF}--------------------[ Vehicle Sale Offer ]-------------------\n\n{ECEC13}%s {FFFB93}has offering to sell you a vehicle.\n\nVehicle Name: {ECB021}%s\n{FFFB93}Plate Number: {ECB021}%s\n{FFFB93}Price: {00E900}$%d\n\n{FFFB93}Do you want to buy this vehicle?\n\n{FFFFFF}----------------------------------------------------------------------------", Isim(playerid), GetVehicleNameFromModel(xVehicle[xid][xv_ModelID]), xVehicle[xid][xv_Plaka], strval(inputtext));
3043 ShowPlayerDialog(pid, XV_DIALOGID+12, DIALOG_STYLE_MSGBOX, "Vehicle Sale Offer", str, "Accept", "Reject");
3044 }
3045 else
3046 {
3047 ShowPlayerDialog(playerid, XV_DIALOGID+10, DIALOG_STYLE_INPUT, "Sell Vehicle to Player", "{FFFB93}Enter the name or ID of the player that you want to sell your vehicle:", "Next", "Back");
3048 SetPVarInt(playerid, "xv_teklif_id", INVALID_PLAYER_ID);
3049 }
3050 }
3051
3052 if(dialogid == XV_DIALOGID+12)
3053 {
3054 if(response)
3055 {
3056 new pid = GetPVarInt(playerid, "xv_teklif_gonderen");
3057 new xid = GetPVarInt(playerid, "xv_teklif_xid");
3058 new price = GetPVarInt(playerid, "xv_teklif_fiyat");
3059 if(xid == 0) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}This offers time is up.");
3060 if(!IsPlayerConnected(pid)) return SendClientMessage(playerid, -1, "{FF0000}[!] {DCDC22}This offer has cancelled because of the player that offered has disconnected.");
3061 if(xStrcmp(Isim(pid), xVehicle[xid][xv_Sahip])) return SendClientMessage(playerid, -1, "{FF0000}[!] {DCDC22}This offer has cancelled because of the player that offered is not the owner of that vehicle.");
3062 if(GetPlayerMoney(playerid) < price)
3063 {
3064 SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}This offer has cancelled because of you don't have enough money!");
3065 SendClientMessage(pid, -1, "{FF0000}[!] {F0AE0F}This offer has cancelled because of that player doesn't have enough money!");
3066 }
3067
3068 format(xVehicle[xid][xv_Sahip], 24, "%s", Isim(playerid));
3069 xVehicle[xid][xv_Fiyat] = price;
3070 SavexVehicle(xid);
3071 foreach(new i : Player)
3072 {
3073 if(IsValidVehicle(xVehicle[xid][xv_Veh]) && IsPlayerInVehicle(i, xVehicle[xid][xv_Veh]))
3074 {
3075 SendClientMessage(i, -1, "{FF0000}[!] {DCDC22}You have removed the vehicle because of this vehicle has been sold.");
3076 RemovePlayerFromVehicle(i);
3077 }
3078 }
3079
3080 GivePlayerMoney(playerid, -price);
3081 GivePlayerMoney(pid, price);
3082
3083 new query[256];
3084 format(query, sizeof(query), "{FFFB93}You sold your {ECEC13}%s {FFFB93}with {ECEC13}%s {FFFB93}plate number, to {ECEC13}%s{FFFB93}, for {00E900}$%d{FFFB93} succesfully!", GetVehicleNameFromModel(xVehicle[xid][xv_ModelID]), xVehicle[xid][xv_Plaka], Isim(playerid), price);
3085 ShowPlayerDialog(pid, XV_DIALOGID-1, DIALOG_STYLE_MSGBOX, "Sell Vehicle", query, "OK", "");
3086 format(query, sizeof(query), "{FFFB93}You bought a {ECEC13}%s {FFFB93}with {ECEC13}%s {FFFB93}plate number, from {ECEC13}%s, for {00E900}$%d{FFFB93} succesfully!", GetVehicleNameFromModel(xVehicle[xid][xv_ModelID]), xVehicle[xid][xv_Plaka], Isim(pid), price);
3087 ShowPlayerDialog(playerid, XV_DIALOGID-1, DIALOG_STYLE_MSGBOX, "Buy Vehicle", query, "OK", "");
3088 mysql_format(mysqlB, query, sizeof(query), "DELETE FROM xVehicleKeys WHERE AracID=%d", xid);
3089 mysql_query(mysqlB, query);
3090 mysql_format(mysqlB, query, sizeof(query), "UPDATE xVehicle SET Sahip='%s' WHERE ID=%d", Isim(playerid), xid);
3091 mysql_query(mysqlB, query);
3092 }
3093 else
3094 {
3095 SendClientMessage(playerid, -1, "{FF0000}[!] {DCDC22}You have rejected the offer.");
3096 if(IsPlayerConnected(GetPVarInt(playerid, "xv_teklif_gonderen"))) SendClientMessage(GetPVarInt(playerid, "xv_teklif_gonderen"), -1, "{FF0000}[!] {DCDC22}The player that you offered your vehicle to sell, has rejected your offer!");
3097 }
3098 KillTimer(offerTimer[playerid]);
3099 SetPVarInt(GetPVarInt(playerid, "xv_teklif_gonderen"), "xv_teklif_id", INVALID_PLAYER_ID);
3100 SetPVarInt(playerid, "xv_teklif_gonderen", INVALID_PLAYER_ID);
3101 DeletePVar(playerid, "xv_teklif_xid");
3102 DeletePVar(playerid, "xv_teklif_fiyat");
3103 }
3104
3105 if(dialogid == XV_DIALOGID+13)
3106 {
3107 if(response)
3108 {
3109 new str[150], tmpp[8], xid, pid;
3110 GetPVarString(playerid, "selected_veh_plate", tmpp, 8);
3111 xid = GetVehiclexIDFromPlate(tmpp);
3112 if(xid == 0) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}Couldn't find the vehicle!");
3113
3114 if(sscanf(inputtext, "u", pid)) return ShowPlayerDialog(playerid, XV_DIALOGID+13, DIALOG_STYLE_INPUT, "Give Vehicle Key", "{FF0000}[!] {F0AE0F}You wrote nothing!\n\n{FFFB93}Enter the player's ID or name that you want to give the key:", "Next", "Back");
3115 if(!IsPlayerConnected(pid)) return ShowPlayerDialog(playerid, XV_DIALOGID+13, DIALOG_STYLE_INPUT, "Give Vehicle Key", "{FF0000}[!] {F0AE0F}Player is not connected!\n{FFFB93}Enter the player's ID or name that you want to give the key:", "Next", "Back");
3116 if(pid == playerid) return ShowPlayerDialog(playerid, XV_DIALOGID+13, DIALOG_STYLE_INPUT, "Give Vehicle Key", "{FF0000}[!] {F0AE0F}You can't give the key to yourself!\n{FFFB93}Enter the player's ID or name that you want to give the key:", "Next", "Back");
3117 if(Iter_Contains(xVehicleKeys<pid>, xid)) return ShowPlayerDialog(playerid, XV_DIALOGID+4, DIALOG_STYLE_MSGBOX, "Give Vehicle Key", "{FF0000}[!] {F0AE0F}That player already have this vehicle's key!", "Back", "");
3118 Iter_Add(xVehicleKeys<pid>, xid);
3119 mysql_format(mysqlB, str, sizeof(str), "INSERT INTO xVehicleKeys SET AracID=%d, Isim='%e'", xid, Isim(pid));
3120 mysql_query(mysqlB, str);
3121 format(str, sizeof(str), "You gave the keys of the {ECEC13}%s {FFFB93} with {ECEC13}%s {FFFB93}plate number, to {ECEC13}%s {FFFB93}successfully!", GetVehicleNameFromModel(xVehicle[xid][xv_ModelID]), xVehicle[xid][xv_Plaka], Isim(pid));
3122 SendClientMessage(playerid, -1, str);
3123 format(str, sizeof(str), "{ECEC13}%s {FFFB93}has gave you the keys of {ECEC13}%s {FFFB93}with {ECEC13}%s {FFFB93}plate number!", Isim(playerid), GetVehicleNameFromModel(xVehicle[xid][xv_ModelID]), xVehicle[xid][xv_Plaka]);
3124 SendClientMessage(pid, -1, str);
3125 } else ShowPlayerDialog(playerid, XV_DIALOGID+2, DIALOG_STYLE_LIST, "Vehicle Keys", "{DCDC22}» {FFFB93}View Key Owners\n{DCDC22}» {FFFB93}Give Someone Key\n{DCDC22}» {FFFB93}Change the Lock", "Select", "Back");
3126 }
3127
3128 if(dialogid == XV_DIALOGID+14)
3129 {
3130 if(response)
3131 {
3132 new str[150], tmpp[8], xid, pid;
3133 GetPVarString(playerid, "selected_veh_plate", tmpp, 8);
3134 xid = GetVehiclexIDFromPlate(tmpp);
3135 if(xid == 0) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}Couldn't find the vehicle!");
3136
3137 new p_is[24];
3138 GetPVarString(playerid, "tmp_keyname", p_is, 24);
3139 pid = GetPlayerIDFromName(p_is);
3140 if(IsPlayerConnected(pid))
3141 {
3142 Iter_Remove(xVehicleKeys<pid>, xid);
3143 format(str, sizeof(str), "{ECEC13}%s {FFFB93}has took the keys of {ECEC13}%s {FFFB93} with {ECEC13}%s {FFFB93}plate number, back!", Isim(playerid), GetVehicleNameFromModel(xVehicle[xid][xv_ModelID]), xVehicle[xid][xv_Plaka]);
3144 SendClientMessage(pid, -1, str);
3145 }
3146 mysql_format(mysqlB, str, sizeof(str), "DELETE FROM xVehicleKeys WHERE AracID=%d AND Isim='%e'", xid, p_is);
3147 mysql_query(mysqlB, str);
3148 format(str, sizeof(str), "You took the keys of {ECEC13}%s {FFFB93} with {ECEC13}%s {FFFB93}plate number, from {ECEC13}%s{FFFB93}", GetVehicleNameFromModel(xVehicle[xid][xv_ModelID]), xVehicle[xid][xv_Plaka], p_is);
3149 SendClientMessage(playerid, -1, str);
3150 }
3151 else ShowPlayerDialog(playerid, XV_DIALOGID+2, DIALOG_STYLE_LIST, "Vehicle Keys", "{DCDC22}» {FFFB93}View Key Owners\n{DCDC22}» {FFFB93}Give Someone Key\n{DCDC22}» {FFFB93}Change the Lock", "Select", "Back");
3152 }
3153
3154 if(dialogid == XV_DIALOGID+15)
3155 {
3156 if(response)
3157 {
3158 new str[128], tmpp[8], xid;
3159 GetPVarString(playerid, "selected_veh_plate", tmpp, 8);
3160 xid = GetVehiclexIDFromPlate(tmpp);
3161 if(xid == 0) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}Couldn't find the vehicle!");
3162
3163 foreach(new i : Player)
3164 {
3165 if(IsPlayerInVehicle(i, xVehicle[xid][xv_Veh]) && xStrcmp(xVehicle[xid][xv_Sahip], Isim(i)))
3166 {
3167 SendClientMessage(i, -1, "{FF0000}[!] {DCDC22}You have removed from vehicle because of the owner of this vehicle has changed the lock.");
3168 RemovePlayerFromVehicle(i);
3169 }
3170 if(Iter_Contains(xVehicleKeys<i>, xid)) Iter_Remove(xVehicleKeys<i>, xid);
3171 }
3172 mysql_format(mysqlB, str, sizeof(str), "DELETE FROM xVehicleKeys WHERE AracID=%d", xid);
3173 mysql_query(mysqlB, str);
3174 SendClientMessage(playerid, -1, "{00BD00}[!] {00FF00}You have succesfully changed vehicle's lock!");
3175 } else ShowPlayerDialog(playerid, XV_DIALOGID+2, DIALOG_STYLE_LIST, "Vehicle Keys", "{DCDC22}» {FFFB93}View Key Owners\n{DCDC22}» {FFFB93}Give Someone Key\n{DCDC22}» {FFFB93}Change the Lock", "Select", "Back");
3176 }
3177
3178 if(dialogid == XV_DIALOGID+16)
3179 {
3180 if(response)
3181 {
3182 switch(listitem)
3183 {
3184 case 0:
3185 {
3186 new query[128], Cache:vehs;
3187 SetPVarInt(playerid, "xvKeysPage", 0);
3188 mysql_format(mysqlB, query, sizeof(query), "SELECT ID FROM xVehicle ORDER BY ID ASC LIMIT %d, 15", GetPVarInt(playerid, "xvKeysPage")*15);
3189 vehs = mysql_query(mysqlB, query);
3190 new rows = cache_num_rows();
3191 if(rows)
3192 {
3193 new list[512], v_id;
3194 format(list, sizeof(list), "Vehicle ID\tPlate Number\tVehicle Name\n");
3195 for(new i; i < rows; ++i)
3196 {
3197 cache_get_value_name_int(i, "ID", v_id);
3198 format(list, sizeof(list), "%s%d\t%s\t%s\n", list, v_id, xVehicle[v_id][xv_Plaka], GetVehicleNameFromModel(xVehicle[v_id][xv_ModelID]));
3199 }
3200 format(list, sizeof(list), "%s{F4D00B}<< Previous Page\n{F4D00B}>> Next Page", list);
3201 ShowPlayerDialog(playerid, XV_DIALOGID+17, DIALOG_STYLE_TABLIST_HEADERS, "Vehicle List (Page 1)", list, "Select", "Back");
3202 }
3203 else
3204 {
3205 SendClientMessage(playerid, 0xE74C3CFF, "{FF0000}[!] {DCDC22}No vehicles has been created.");
3206 }
3207 cache_delete(vehs);
3208 }
3209 case 1:
3210 {
3211 new str[128];
3212 foreach(new i : xVehicles) if(!xVehicle[i][xv_Garajda]) SetVehicleToRespawn(xVehicle[i][xv_Veh]);
3213 SendClientMessage(playerid, -1, "{00BD00}[!] {00FF00}All vehicles has respawned!");
3214 format(str, sizeof(str), "{00BD00}[!] Admin {ECEC13}%s {FFFB93}has respawned all vehicles!", Isim(playerid));
3215 SendClientMessageToAll(-1, str);
3216 }
3217 case 2:
3218 {
3219 ShowPlayerDialog(playerid, XV_DIALOGID+22, DIALOG_STYLE_INPUT, "Create Vehicle", "{FFFB93}Enter the model ID or the name of the vehicle:", "Next", "Back");
3220 }
3221 }
3222 }
3223 }
3224
3225 if(dialogid == XV_DIALOGID+17)
3226 {
3227 if(response)
3228 {
3229 if(!xStrcmp(inputtext, "<< Previous Page"))
3230 {
3231 SetPVarInt(playerid, "xvKeysPage", GetPVarInt(playerid, "xvKeysPage")-1);
3232 if(GetPVarInt(playerid, "xvKeysPage") < 0)
3233 {
3234 SetPVarInt(playerid, "xvKeysPage", 0);
3235 cmd_amenu(playerid, "");
3236 return 1;
3237 }
3238
3239 new query[128], Cache:vehs;
3240 mysql_format(mysqlB, query, sizeof(query), "SELECT ID FROM xVehicle ORDER BY ID ASC LIMIT %d, 15", GetPVarInt(playerid, "xvKeysPage")*15);
3241 vehs = mysql_query(mysqlB, query);
3242 new rows = cache_num_rows();
3243 if(rows)
3244 {
3245 new list[512], v_id;
3246 format(list, sizeof(list), "Vehicle ID\tPlate Number\tVehicle Name\n");
3247 for(new i; i < rows; ++i)
3248 {
3249 cache_get_value_name_int(i, "ID", v_id);
3250 format(list, sizeof(list), "%s%d\t%s\t%s\n", list, v_id, xVehicle[v_id][xv_Plaka], GetVehicleNameFromModel(xVehicle[v_id][xv_ModelID]));
3251 }
3252 format(list, sizeof(list), "%s{F4D00B}<< Previous Page\n{F4D00B}>> Next Page", list);
3253 new head[32];
3254 format(head, sizeof(head), "Vehicle List (Page %d)", GetPVarInt(playerid, "xvKeysPage")+1);
3255 ShowPlayerDialog(playerid, XV_DIALOGID+17, DIALOG_STYLE_TABLIST_HEADERS, head, list, "Select", "Back");
3256 }
3257 else
3258 {
3259 SetPVarInt(playerid, "xvKeysPage", 0);
3260 }
3261 cache_delete(vehs);
3262 }
3263 else if(!xStrcmp(inputtext, ">> Next Page"))
3264 {
3265 SetPVarInt(playerid, "xvKeysPage", GetPVarInt(playerid, "xvKeysPage")+1);
3266
3267 new query[128], Cache:vehs;
3268 mysql_format(mysqlB, query, sizeof(query), "SELECT ID FROM xVehicle ORDER BY ID ASC LIMIT %d, 15", GetPVarInt(playerid, "xvKeysPage")*15);
3269 vehs = mysql_query(mysqlB, query);
3270 new rows = cache_num_rows();
3271 if(rows)
3272 {
3273 new list[512], v_id;
3274 format(list, sizeof(list), "Vehicle ID\tPlate Number\tVehicle Name\n");
3275 for(new i; i < rows; ++i)
3276 {
3277 cache_get_value_name_int(i, "ID", v_id);
3278 format(list, sizeof(list), "%s%d\t%s\t%s\n", list, v_id, xVehicle[v_id][xv_Plaka], GetVehicleNameFromModel(xVehicle[v_id][xv_ModelID]));
3279 }
3280 format(list, sizeof(list), "%s{F4D00B}<< Previous Page\n{F4D00B}>> Next Page", list);
3281 new head[32];
3282 format(head, sizeof(head), "Vehicle List (Page %d)", GetPVarInt(playerid, "xvKeysPage")+1);
3283 ShowPlayerDialog(playerid, XV_DIALOGID+17, DIALOG_STYLE_TABLIST_HEADERS, head, list, "Select", "Back");
3284 }
3285 else
3286 {
3287 SetPVarInt(playerid, "xvKeysPage", GetPVarInt(playerid, "xvKeysPage") - 1);
3288 mysql_format(mysqlB, query, sizeof(query), "SELECT ID FROM xVehicle ORDER BY ID ASC LIMIT %d, 15", GetPVarInt(playerid, "xvKeysPage")*15);
3289 vehs = mysql_query(mysqlB, query);
3290 rows = cache_num_rows();
3291 if(rows)
3292 {
3293 new list[512], v_id;
3294 format(list, sizeof(list), "Vehicle ID\tPlate Number\tVehicle Name\n");
3295 for(new i; i < rows; ++i)
3296 {
3297 cache_get_value_name_int(i, "ID", v_id);
3298 format(list, sizeof(list), "%s%d\t%s\t%s\n", list, v_id, xVehicle[v_id][xv_Plaka], GetVehicleNameFromModel(xVehicle[v_id][xv_ModelID]));
3299 }
3300 format(list, sizeof(list), "%s{F4D00B}<< Previous Page\n{F4D00B}>> Next Page", list);
3301 new head[32];
3302 format(head, sizeof(head), "Vehicle List (Page %d)", GetPVarInt(playerid, "xvKeysPage")+1);
3303 ShowPlayerDialog(playerid, XV_DIALOGID+17, DIALOG_STYLE_TABLIST_HEADERS, head, list, "Select", "Back");
3304 }
3305 SendClientMessage(playerid, 0xE74C3CFF, "There is no more vehicle! You are at the last page.");
3306 }
3307 cache_delete(vehs);
3308 }
3309 else
3310 {
3311 new tm[2][8];
3312 split(inputtext, tm, '\t');
3313 SetPVarInt(playerid, "adm_sl_id", strval(tm[0]));
3314 ShowPlayerDialog(playerid, XV_DIALOGID+18, DIALOG_STYLE_LIST, "xVehicle Admin Menu", "{ECCB13}» {FFFFFF}View Vehicle Info\n{ECCB13}» {FFFFFF}Get the Vehicle Here\n{ECCB13}» {FFFFFF}Respawn Vehicle\n{ECCB13}» {FFFFFF}Change Vehicle's Price\n{ECCB13}» {FFFFFF}Remove Vehicle Owner\n{ECCB13}» {FFFFFF}Remove Vehicle", "Select", "Back");
3315 }
3316 } else cmd_amenu(playerid, "");
3317 }
3318
3319 if(dialogid == XV_DIALOGID+18)
3320 {
3321 if(response)
3322 {
3323 new xid = GetPVarInt(playerid, "adm_sl_id");
3324 if(xid == 0 || !Iter_Contains(xVehicles, xid)) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}Couldn't find the vehicle!");
3325 switch(listitem)
3326 {
3327 case 0: // araç bilgileri
3328 {
3329 new str[256], sahip[24];
3330 if(!strlen(xVehicle[xid][xv_Sahip])) format(sahip, sizeof(sahip), "-For Sale-");
3331 else format(sahip, sizeof(sahip), "%s", xVehicle[xid][xv_Sahip]);
3332 format(str, sizeof(str), "{FFFFFF}----------[ Vehicle Information ]----------\n\n{F0AE0F}-» {ECE913}Owner: {FFFFFF}%s\n{F0AE0F}-» {ECE913}Vehicle Name: {FFFFFF}%s\n{F0AE0F}-» {ECE913}Plate Number: {FFFFFF}%s\n{F0AE0F}-» {ECE913}State: %s", sahip, GetVehicleNameFromModel(xVehicle[xid][xv_ModelID]), xVehicle[xid][xv_Plaka], (xVehicle[xid][xv_Garajda]) ? ("{F0CE0F}In The Garage") : ("{8FE01F}On The Map"));
3333 ShowPlayerDialog(playerid, XV_DIALOGID+19, DIALOG_STYLE_MSGBOX, "Vehicle Info", str, "Back", "");
3334 }
3335 case 1: // aracý çek
3336 {
3337 GetPlayerPos(playerid, xVehicle[xid][xv_Pos][0], xVehicle[xid][xv_Pos][1], xVehicle[xid][xv_Pos][2]);
3338 GetPlayerFacingAngle(playerid, xVehicle[xid][xv_Pos][3]);
3339 xVehicle[xid][xv_Pos][0] += 1;
3340 xVehicle[xid][xv_Pos][1] += 1;
3341 if(xVehicle[xid][xv_Garajda])
3342 {
3343 xVehicle[xid][xv_Veh] = CreateVehicle(xVehicle[xid][xv_ModelID], xVehicle[xid][xv_Pos][0], xVehicle[xid][xv_Pos][1], xVehicle[xid][xv_Pos][2], xVehicle[xid][xv_Pos][3], xVehicle[xid][xv_Renk][0], xVehicle[xid][xv_Renk][1], -1);
3344 xVeh[xVehicle[xid][xv_Veh]] = xid;
3345 SetVehicleNumberPlate(xVehicle[xid][xv_Veh], xVehicle[xid][xv_Plaka]);
3346 SetVehicleToRespawn(xVehicle[xid][xv_Veh]);
3347 xVehicle[xid][xv_Garajda] = 0;
3348 }
3349 else
3350 {
3351 SetVehiclePos(xVehicle[xid][xv_Veh], xVehicle[xid][xv_Pos][0], xVehicle[xid][xv_Pos][1], xVehicle[xid][xv_Pos][2]);
3352 SetVehicleZAngle(xVehicle[xid][xv_Veh], xVehicle[xid][xv_Pos][3]);
3353 }
3354 DeletePVar(playerid, "adm_sl_id");
3355 new str[128];
3356 format(str, sizeof(str), "You have teleported the {ECEC13}%s {FFFB93}with {ECEC13}%s {FFFB93}plate number, to you! {ECB021}(ID: %d)", GetVehicleNameFromModel(xVehicle[xid][xv_ModelID]), xVehicle[xid][xv_Plaka], xid);
3357 SendClientMessage(playerid, -1, str);
3358 }
3359 case 2: // yenile
3360 {
3361 if(xVehicle[xid][xv_Garajda]) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}You can not respawn the vehicle in garage!");
3362 SetVehicleToRespawn(xVehicle[xid][xv_Veh]);
3363 SendClientMessage(playerid, -1, "{00BD00}[!] {00FF00}You have respawned the vehicle!");
3364 }
3365 case 3: // fiyatýný deðiþtir
3366 {
3367 new str[128];
3368 format(str, sizeof(str), "{FFFB93}Vehicle's current price: {ECEC13}$%d\n\n{FFFB93}Enter the value you want to change:", xVehicle[xid][xv_Fiyat]);
3369 ShowPlayerDialog(playerid, XV_DIALOGID+26, DIALOG_STYLE_INPUT, "Change the Price", str, "OK", "Back");
3370 }
3371 case 4: // araç sahibini sil
3372 {
3373 new str[256];
3374 format(str, sizeof(str), "{FFFB93}Are you sure that you want to remove the owner of {ECEC13}%s {FFFB93}with {ECEC13}%s {FFFB93}plate number? {ECB021}(ID: %d)\n{AAAAAA}(The vehicle will be put on sale and the vehicle's keys will be removed from the key owners.)", GetVehicleNameFromModel(xVehicle[xid][xv_ModelID]), xVehicle[xid][xv_Plaka], xid);
3375 ShowPlayerDialog(playerid, XV_DIALOGID+20, DIALOG_STYLE_MSGBOX, "Remove Vehicle Owner", str, "Confirm", "Back");
3376 }
3377 case 5: // aracý sil
3378 {
3379 new str[256];
3380 format(str, sizeof(str), "{FFFB93}Are you sure that you want to remove the vehicle {ECEC13}%s {FFFB93}with {ECEC13}%s {FFFB93}plate number? {ECB021}(ID: %d)", GetVehicleNameFromModel(xVehicle[xid][xv_ModelID]), xVehicle[xid][xv_Plaka], xid);
3381 ShowPlayerDialog(playerid, XV_DIALOGID+21, DIALOG_STYLE_MSGBOX, "Remove Vehicle", str, "Confirm", "Back");
3382 }
3383 }
3384 }
3385 else
3386 {
3387 DeletePVar(playerid, "adm_sl_id");
3388 cmd_amenu(playerid, "");
3389 }
3390 }
3391
3392 if(dialogid == XV_DIALOGID+19) ShowPlayerDialog(playerid, XV_DIALOGID+18, DIALOG_STYLE_LIST, "xVehicle Admin Menu", "{ECCB13}» {FFFFFF}View Vehicle Info\n{ECCB13}» {FFFFFF}Get the Vehicle Here\n{ECCB13}» {FFFFFF}Respawn Vehicle\n{ECCB13}» {FFFFFF}Change Vehicle's Price\n{ECCB13}» {FFFFFF}Remove Vehicle Owner\n{ECCB13}» {FFFFFF}Remove Vehicle", "Select", "Back");
3393
3394 if(dialogid == XV_DIALOGID+20)
3395 {
3396 if(response)
3397 {
3398 new xid = GetPVarInt(playerid, "adm_sl_id");
3399 if(xid == 0 || !Iter_Contains(xVehicles, xid)) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}Couldn't find the vehicle!");
3400 if(!strlen(xVehicle[xid][xv_Sahip])) return ShowPlayerDialog(playerid, XV_DIALOGID+19, DIALOG_STYLE_MSGBOX, "Remove Vehicle Owner", "{FF0000}[!] {DCDC22}This vehicle has no owner!", "Back", "");
3401 format(xVehicle[xid][xv_Sahip], 24, "");
3402 foreach(new i : Player)
3403 {
3404 if(IsPlayerInVehicle(i, xVehicle[xid][xv_Veh]))
3405 {
3406 SendClientMessage(i, -1, "{FF0000}[!] {DCDC22}You have removed from the vehicle because of the admin has removed the owner of this vehicle.");
3407 RemovePlayerFromVehicle(i);
3408 }
3409 if(Iter_Contains(xVehicleKeys<i>, xid)) Iter_Remove(xVehicleKeys<i>, xid);
3410 }
3411 new str[150];
3412 mysql_format(mysqlB, str, sizeof(str), "DELETE FROM xVehicleKeys WHERE AracID=%d", xid);
3413 mysql_query(mysqlB, str);
3414 SavexVehicle(xid);
3415 format(str, sizeof(str), "{00FF00}This Vehicle Is For Sale!\n{FFA500}Vehicle Name: {FFFFFF}%s\n{FFA500}Plate Number: {FFFFFF}%s\n{FFA500}Price: {00FF00}$%d", GetVehicleNameFromModel(xVehicle[xid][xv_ModelID]), xVehicle[xid][xv_Plaka], xVehicle[xid][xv_Fiyat]);
3416 xVehicle[xid][xv_Text] = Create3DTextLabel(str, 0x008080FF, 0.0, 0.0, 0.0, 50.0, 0);
3417 Attach3DTextLabelToVehicle(xVehicle[xid][xv_Text], xVehicle[xid][xv_Veh], 0.0, 0.0, 1.0);
3418 DeletePVar(playerid, "adm_sl_id");
3419 format(str, sizeof(str), "{FFFB93}You have removed the owner of the vehicle ID: {ECB021}%d", xid);
3420 SendClientMessage(playerid, -1, str);
3421 } else ShowPlayerDialog(playerid, XV_DIALOGID+18, DIALOG_STYLE_LIST, "xVehicle Admin Menu", "{ECCB13}» {FFFFFF}View Vehicle Info\n{ECCB13}» {FFFFFF}Get the Vehicle Here\n{ECCB13}» {FFFFFF}Respawn Vehicle\n{ECCB13}» {FFFFFF}Change Vehicle's Price\n{ECCB13}» {FFFFFF}Remove Vehicle Owner\n{ECCB13}» {FFFFFF}Remove Vehicle", "Select", "Back");
3422 }
3423
3424 if(dialogid == XV_DIALOGID+21)
3425 {
3426 if(response)
3427 {
3428 new xid = GetPVarInt(playerid, "adm_sl_id");
3429 if(xid == 0 || !Iter_Contains(xVehicles, xid)) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}Couldn't find the vehicle!");
3430 DestroyVehicle(xVehicle[xid][xv_Veh]);
3431 Iter_Remove(xVehicles, xid);
3432 DeletePVar(playerid, "adm_sl_id");
3433 foreach(new i : Player)
3434 {
3435 if(Iter_Contains(xVehicleKeys<i>, xid)) Iter_Remove(xVehicleKeys<i>, xid);
3436 }
3437 new query[128];
3438 mysql_format(mysqlB, query, sizeof(query), "DELETE FROM xVehicleKeys WHERE AracID=%d", xid);
3439 mysql_query(mysqlB, query);
3440 mysql_format(mysqlB, query, sizeof(query), "DELETE FROM xVehicle WHERE ID=%d", xid);
3441 mysql_query(mysqlB, query);
3442 format(query, sizeof(query), "{FFFB93}You have removed the vehicle ID:{ECB021}%d", xid);
3443 SendClientMessage(playerid, -1, query);
3444 } else ShowPlayerDialog(playerid, XV_DIALOGID+18, DIALOG_STYLE_LIST, "xVehicle Admin Menu", "{ECCB13}» {FFFFFF}View Vehicle Info\n{ECCB13}» {FFFFFF}Get the Vehicle Here\n{ECCB13}» {FFFFFF}Respawn Vehicle\n{ECCB13}» {FFFFFF}Change Vehicle's Price\n{ECCB13}» {FFFFFF}Remove Vehicle Owner\n{ECCB13}» {FFFFFF}Remove Vehicle", "Select", "Back");
3445 }
3446
3447 if(dialogid == XV_DIALOGID+22)
3448 {
3449 if(response)
3450 {
3451 if(!strlen(inputtext)) return ShowPlayerDialog(playerid, XV_DIALOGID+22, DIALOG_STYLE_INPUT, "Create Vehicle", "{FF0000}[!] {F0AE0F}You wrote nothing!\n\n{FFFB93}Enter the model ID or the name of the vehicle:", "Next", "Back");
3452 new veh;
3453 if(!isNumeric(inputtext)) veh = GetVehicleModelIDFromName(inputtext); else veh = strval(inputtext);
3454 if(veh < 400 || veh > 611) return ShowPlayerDialog(playerid, XV_DIALOGID+22, DIALOG_STYLE_INPUT, "Create Vehicle", "{FF0000}[!] {F0AE0F}Invalid vehicle name or ID!\n\n{FFFB93}Enter the model ID or the name of the vehicle:", "Next", "Back");
3455 SetPVarInt(playerid, "xv_ao_model", veh);
3456 new str[192];
3457 format(str, sizeof(str), "{00BD00}[!] {00FF00}Selected model: {ECEC13}%s {ECB021}(%d)\n\n{FFFB93}Enter the color 1 of the vehicle:\n{AAAAAA}(Between 0-255)", GetVehicleNameFromModel(GetPVarInt(playerid, "xv_ao_model")), GetPVarInt(playerid, "xv_ao_model"));
3458 ShowPlayerDialog(playerid, XV_DIALOGID+23, DIALOG_STYLE_INPUT, "Create Vehicle - Color", str, "Next", "Back");
3459 } else cmd_amenu(playerid, "");
3460 }
3461
3462 if(dialogid == XV_DIALOGID+23)
3463 {
3464 if(response)
3465 {
3466 if(!strlen(inputtext)) return ShowPlayerDialog(playerid, XV_DIALOGID+23, DIALOG_STYLE_INPUT, "Create Vehicle - Color", "{FF0000}[!] {F0AE0F}You wrote nothing!\n\n{FFFB93}Enter the color 1 of the vehicle:\n{AAAAAA}(Between 0-255)", "Next", "Back");
3467 if(!isNumeric(inputtext))return ShowPlayerDialog(playerid, XV_DIALOGID+23, DIALOG_STYLE_INPUT, "Create Vehicle - Color", "{FF0000}[!] {F0AE0F}Only use numbers!\n\n{FFFB93}Enter the color 1 of the vehicle:\n{AAAAAA}(Between 0-255)", "Next", "Back");
3468 if(strval(inputtext) < 0 || strval(inputtext) > 255) return ShowPlayerDialog(playerid, XV_DIALOGID+23, DIALOG_STYLE_INPUT, "Create Vehicle - Color", "{FF0000}[!] {F0AE0F}You must enter a value between 0 - 255!\n\n{FFFB93}Enter the color 1 of the vehicle:\n{AAAAAA}(Between 0-255)", "Next", "Back");
3469 SetPVarInt(playerid, "xv_ao_col1", strval(inputtext));
3470 new str[128];
3471 format(str, sizeof(str), "{00BD00}[!] {00FF00}Selected color 1: {ECEC13}%d\n\n{FFFB93}Enter the color 2 of the vehicle:\n{AAAAAA}(Between 0-255)", GetPVarInt(playerid, "xv_ao_col1"));
3472 ShowPlayerDialog(playerid, XV_DIALOGID+24, DIALOG_STYLE_INPUT, "Create Vehicle - Color", str, "Next", "Back");
3473 } else DeletePVar(playerid, "xv_ao_model"), ShowPlayerDialog(playerid, XV_DIALOGID+22, DIALOG_STYLE_INPUT, "Create Vehicle", "{FFFB93}Enter the model ID or the name of the vehicle:", "Next", "Back");
3474 }
3475
3476 if(dialogid == XV_DIALOGID+24)
3477 {
3478 if(response)
3479 {
3480 if(!strlen(inputtext)) return ShowPlayerDialog(playerid, XV_DIALOGID+24, DIALOG_STYLE_INPUT, "Create Vehicle - Color", "{FF0000}[!] {F0AE0F}You wrote nothing!\n\n{FFFB93}Enter the color 2 of the vehicle:\n{AAAAAA}(Between 0-255)", "Next", "Back");
3481 if(!isNumeric(inputtext))return ShowPlayerDialog(playerid, XV_DIALOGID+24, DIALOG_STYLE_INPUT, "Create Vehicle - Color", "{FF0000}[!] {F0AE0F}Only use numbers!\n\n{FFFB93}Enter the color 2 of the vehicle:\n{AAAAAA}(Between 0-255)", "Next", "Back");
3482 if(strval(inputtext) < 0 || strval(inputtext) > 255) return ShowPlayerDialog(playerid, XV_DIALOGID+24, DIALOG_STYLE_INPUT, "Create Vehicle - Color", "{FF0000}[!] {F0AE0F}You must enter a value between 0 - 255!\n\n{FFFB93}Enter the color 2 of the vehicle:\n{AAAAAA}(Between 0-255)", "Next", "Back");
3483 SetPVarInt(playerid, "xv_ao_col2", strval(inputtext));
3484 new str[128];
3485 format(str, sizeof(str), "{00BD00}[!] {00FF00}Selected color 2: {ECEC13}%d\n\n{FFFB93}Enter the price of the vehicle:", GetPVarInt(playerid, "xv_ao_col2"));
3486 ShowPlayerDialog(playerid, XV_DIALOGID+25, DIALOG_STYLE_INPUT, "Create Vehicle - Price", str, "Create", "Back");
3487 }
3488 else
3489 {
3490 DeletePVar(playerid, "xv_ao_col1");
3491 new str[192];
3492 format(str, sizeof(str), "{00BD00}[!] {00FF00}Selected model: {ECEC13}%s {ECB021}(%d)\n\n{FFFB93}Enter the color 1 of the vehicle:\n{AAAAAA}(Between 0-255)", GetVehicleNameFromModel(GetPVarInt(playerid, "xv_ao_model")), GetPVarInt(playerid, "xv_ao_model"));
3493 ShowPlayerDialog(playerid, XV_DIALOGID+23, DIALOG_STYLE_INPUT, "Create Vehicle - Color", str, "Next", "Back");
3494 }
3495 }
3496
3497 if(dialogid == XV_DIALOGID+25)
3498 {
3499 if(response)
3500 {
3501 if(!strlen(inputtext)) return ShowPlayerDialog(playerid, XV_DIALOGID+25, DIALOG_STYLE_INPUT, "Create Vehicle - Price", "{FF0000}[!] {F0AE0F}You wrote nothing!\n\n{FFFB93}Enter the price of the vehicle:", "Create", "Back");
3502 if(!isNumeric(inputtext))return ShowPlayerDialog(playerid, XV_DIALOGID+25, DIALOG_STYLE_INPUT, "Create Vehicle - Price", "{FF0000}[!] {F0AE0F}Only use numbers!\n\n{FFFB93}Enter the price of the vehicle:", "Create", "Back");
3503 if(strval(inputtext) < 0) return ShowPlayerDialog(playerid, XV_DIALOGID+25, DIALOG_STYLE_INPUT, "Create Vehicle - Price", "{FF0000}[!] {F0AE0F}Only use positive numbers!\n\n{FFFB93}Enter the price of the vehicle:", "Create", "Back");
3504 new tmp_var[3], Float:ppos[4], veh, xid;
3505 tmp_var[0] = GetPVarInt(playerid, "xv_ao_model");
3506 tmp_var[1] = GetPVarInt(playerid, "xv_ao_col1");
3507 tmp_var[2] = GetPVarInt(playerid, "xv_ao_col2");
3508 GetPlayerPos(playerid, ppos[0], ppos[1], ppos[2]);
3509 GetPlayerFacingAngle(playerid, ppos[3]);
3510 veh = CreatexVehicle(tmp_var[0], "", strval(inputtext), ppos[0], ppos[1], ppos[2], ppos[3], tmp_var[1], tmp_var[2]);
3511 xid = xVeh[veh];
3512 PutPlayerInVehicle(playerid, veh, 0);
3513 new str[256];
3514 SendClientMessage(playerid, -1, "------------------------------------------------------------------------------------------------------------");
3515 format(str, sizeof(str), "{00FF00}[!] Vehicle {ECEC13}%s {ECB021}(%d) {FFFB93}has been created with the colors {ECEC13}%d, %d", GetVehicleNameFromModel(xVehicle[xid][xv_ModelID]), xVehicle[xid][xv_ModelID], xVehicle[xid][xv_Renk][0], xVehicle[xid][xv_Renk][1]);
3516 SendClientMessage(playerid, -1, str);
3517 format(str, sizeof(str), "{FFFB93}Plate number: {ECEC13}%s, {FFFB93}Vehicle ID: {ECB021}%d, {FFFB93}Price: {ECB021}$%d", xVehicle[xid][xv_Plaka], xid, xVehicle[xid][xv_Fiyat]);
3518 SendClientMessage(playerid, -1, str);
3519 SendClientMessage(playerid, -1, "{FFFB93}To change the location of the vehicle, get into vehicle, go wherever you want and type {ECEC13}/park");
3520 SendClientMessage(playerid, -1, "------------------------------------------------------------------------------------------------------------");
3521 DeletePVar(playerid, "xv_ao_model");
3522 DeletePVar(playerid, "xv_ao_col1");
3523 DeletePVar(playerid, "xv_ao_col2");
3524 }
3525 else
3526 {
3527 DeletePVar(playerid, "xv_ao_col2");
3528 new str[128];
3529 format(str, sizeof(str), "{00BD00}[!] {00FF00}Selected color 1: {ECEC13}%d\n\n{FFFB93}Enter the color 2 of the vehicle:\n{AAAAAA}(Between 0-255)", GetPVarInt(playerid, "xv_ao_col1"));
3530 ShowPlayerDialog(playerid, XV_DIALOGID+24, DIALOG_STYLE_INPUT, "Create Vehicle - Color", str, "Next", "Back");
3531 }
3532 }
3533
3534 if(dialogid == XV_DIALOGID+26)
3535 {
3536 if(response)
3537 {
3538 new xid = GetPVarInt(playerid, "adm_sl_id");
3539 if(xid == 0 || !Iter_Contains(xVehicles, xid)) return SendClientMessage(playerid, -1, "{FF0000}[!] {F0AE0F}Couldn't find the vehicle!");
3540 if(!strlen(inputtext)) return ShowPlayerDialog(playerid, XV_DIALOGID+26, DIALOG_STYLE_INPUT, "Change the Price", "{FF0000}[!] {F0AE0F}HYou wrote nothing!\n\n{FFFB93}Enter the value you want to change:", "OK", "Back");
3541 if(!isNumeric(inputtext)) return ShowPlayerDialog(playerid, XV_DIALOGID+26, DIALOG_STYLE_INPUT, "Change the Price", "{FF0000}[!] {F0AE0F}Only use numbers!\n\n{FFFB93}Enter the value you want to change:", "OK", "Back");
3542 if(strval(inputtext) < 0) return ShowPlayerDialog(playerid, XV_DIALOGID+26, DIALOG_STYLE_INPUT, "Change the Price", "{FF0000}[!] {F0AE0F}Only use positive numbers!\n\n{FFFB93}Enter the value you want to change:", "OK", "Back");
3543 xVehicle[xid][xv_Fiyat] = strval(inputtext);
3544 new str[150];
3545 if(!strlen(xVehicle[xid][xv_Sahip]))
3546 {
3547 Delete3DTextLabel(xVehicle[xid][xv_Text]);
3548 format(str, sizeof(str), "{00FF00}This Vehicle Is For Sale!\n{FFA500}Vehicle Name: {FFFFFF}%s\n{FFA500}Plate Number: {FFFFFF}%s\n{FFA500}Price: {00FF00}$%d", GetVehicleNameFromModel(xVehicle[xid][xv_ModelID]), xVehicle[xid][xv_Plaka], xVehicle[xid][xv_Fiyat]);
3549 xVehicle[xid][xv_Text] = Create3DTextLabel(str, 0x008080FF, 0.0, 0.0, 0.0, 50.0, 0);
3550 Attach3DTextLabelToVehicle(xVehicle[xid][xv_Text], xVehicle[xid][xv_Veh], 0.0, 0.0, 1.0);
3551 }
3552 SavexVehicle(xid);
3553 format(str, sizeof(str), "{00BD00}[!] {00FF00}You have changed the price to {ECEC13}$%d!", xVehicle[xid][xv_Fiyat]);
3554 SendClientMessage(playerid, -1, str);
3555 }
3556 ShowPlayerDialog(playerid, XV_DIALOGID+18, DIALOG_STYLE_LIST, "xVehicle Admin Menu", "{ECCB13}» {FFFFFF}View Vehicle Info\n{ECCB13}» {FFFFFF}Get the Vehicle Here\n{ECCB13}» {FFFFFF}Respawn Vehicle\n{ECCB13}» {FFFFFF}Change Vehicle's Price\n{ECCB13}» {FFFFFF}Remove Vehicle Owner\n{ECCB13}» {FFFFFF}Remove Vehicle", "Select", "Back");
3557 }
3558 switch(dialogid)
3559 {
3560 ////////////////////////////////////////////////////////////////
3561 case DIALOG_DRUG_STATS:
3562 {
3563 if(!response) return 1;
3564 if(listitem < 9) {
3565 ShowDrugStats(playerid);
3566 }else{
3567 ShowPlayerDialog(playerid, DIALOG_CONFIRM_RESET, DIALOG_STYLE_MSGBOX, "Drug Stats: Reset", "Do you want to reset your drug stats?", "Yes", "No");
3568 }
3569
3570 return 1;
3571 }
3572 ////////////////////////////////////////////////////////////////
3573 case DIALOG_CONFIRM_RESET:
3574 {
3575 if(!response) return ShowDrugStats(playerid);
3576 PlayerDrugData[playerid][TotalUsed] = PlayerDrugData[playerid][TotalPlanted] = PlayerDrugData[playerid][TotalHarvestedPlants] = PlayerDrugData[playerid][TotalHarvestedGrams] =
3577 PlayerDrugData[playerid][TotalGiven] = PlayerDrugData[playerid][TotalReceived] = PlayerDrugData[playerid][TotalBought] = PlayerDrugData[playerid][TotalBoughtPrice] =
3578 PlayerDrugData[playerid][TotalSold] = PlayerDrugData[playerid][TotalSoldPrice] = 0;
3579
3580 Player_SaveDrugs(playerid);
3581 ShowDrugStats(playerid);
3582 return 1;
3583 }
3584 ////////////////////////////////////////////////////////////////
3585 case DIALOG_DRUG_DEALER:
3586 {
3587 if(response)
3588 {
3589 if(listitem == 0)
3590 {
3591 if(PlayerDrugData[playerid][Seeds] >= SEED_LIMIT)
3592 {
3593 SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You can't buy any more seeds.");
3594 return ShowDealerMenu(playerid);
3595 }
3596
3597 ShowPlayerDialog(playerid, DIALOG_DRUG_DEALER_BUY_SEEDS, DIALOG_STYLE_INPUT, "Drug Dealer: Buying Seeds", "How many seeds would you like to buy?", "Buy", "Back");
3598 }
3599
3600 if(listitem == 1)
3601 {
3602 if(PlayerDrugData[playerid][Drugs] >= CARRY_LIMIT)
3603 {
3604 SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You can't buy any more drugs.");
3605 return ShowDealerMenu(playerid);
3606 }
3607
3608 if(DealerData[ PlayerDrugData[playerid][DealerID] ][dealerDrugs] < 1)
3609 {
3610 SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}This dealer has no drugs.");
3611 return ShowDealerMenu(playerid);
3612 }
3613
3614 ShowPlayerDialog(playerid, DIALOG_DRUG_DEALER_BUY_DRUGS, DIALOG_STYLE_INPUT, "Drug Dealer: Buying Drugs", "How many grams would you like to buy?", "Buy", "Back");
3615 }
3616
3617 if(listitem == 2)
3618 {
3619 if(PlayerDrugData[playerid][Drugs] < 1)
3620 {
3621 SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You don't have any drugs.");
3622 return ShowDealerMenu(playerid);
3623 }
3624
3625 ShowPlayerDialog(playerid, DIALOG_DRUG_DEALER_SELL, DIALOG_STYLE_INPUT, "Drug Dealer: Selling Drugs", "How many grams would you like to sell?", "Sell", "Back");
3626 }
3627 }
3628
3629 return 1;
3630 }
3631 ////////////////////////////////////////////////////////////////
3632 case DIALOG_DRUG_DEALER_BUY_SEEDS:
3633 {
3634 if(!response) return ShowDealerMenu(playerid);
3635 if(isnull(inputtext)) return ShowPlayerDialog(playerid, DIALOG_DRUG_DEALER_BUY_SEEDS, DIALOG_STYLE_INPUT, "Drug Dealer: Buying Seeds", "{E74C3C}Input can't be empty.\n\n{FFFFFF}How many seeds would you like to buy?", "Buy", "Back");
3636 new amount = strval(inputtext);
3637 if(!(0 < amount <= SEED_LIMIT)) return ShowPlayerDialog(playerid, DIALOG_DRUG_DEALER_BUY_SEEDS, DIALOG_STYLE_INPUT, "Drug Dealer: Buying Seeds", "{E74C3C}Invalid amount.\n\n{FFFFFF}How many seeds would you like to buy?", "Buy", "Back");
3638 if(PlayerDrugData[playerid][Seeds] + amount > SEED_LIMIT) amount = SEED_LIMIT - PlayerDrugData[playerid][Seeds];
3639 new price = amount * SEED_PRICE;
3640 if(price > GetPlayerMoney(playerid)) return ShowPlayerDialog(playerid, DIALOG_DRUG_DEALER_BUY_SEEDS, DIALOG_STYLE_INPUT, "Drug Dealer: Buying Seeds", "{E74C3C}You don't have enough money.\n\n{FFFFFF}How many seeds would you like to buy?", "Buy", "Back");
3641 PlayerDrugData[playerid][Seeds] += amount;
3642 GivePlayerMoney(playerid, -price);
3643
3644 new string[96];
3645 format(string, sizeof(string), "DRUG DEALER: {FFFFFF}Bought %s seeds for {2ECC71}%s.", formatInt(amount, .iCurrencyChar = '\0'), formatInt(price));
3646 SendClientMessage(playerid, 0x3498DBFF, string);
3647 return 1;
3648 }
3649 ////////////////////////////////////////////////////////////////
3650 case DIALOG_DRUG_DEALER_BUY_DRUGS:
3651 {
3652 if(!response) return ShowDealerMenu(playerid);
3653 if(isnull(inputtext)) return ShowPlayerDialog(playerid, DIALOG_DRUG_DEALER_BUY_DRUGS, DIALOG_STYLE_INPUT, "Drug Dealer: Buying Drugs", "{E74C3C}Input can't be empty.\n\n{FFFFFF}How many grams would you like to buy?", "Buy", "Back");
3654 new amount = strval(inputtext), id = PlayerDrugData[playerid][DealerID];
3655 if(!(0 < amount <= CARRY_LIMIT)) return ShowPlayerDialog(playerid, DIALOG_DRUG_DEALER_BUY_DRUGS, DIALOG_STYLE_INPUT, "Drug Dealer: Buying Drugs", "{E74C3C}Invalid amount.\n\n{FFFFFF}How many grams would you like to buy?", "Buy", "Back");
3656 if(amount > DealerData[id][dealerDrugs])
3657 {
3658 SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Dealer doesn't have that much drugs.");
3659 return ShowDealerMenu(playerid);
3660 }
3661
3662 if(PlayerDrugData[playerid][Drugs] + amount > CARRY_LIMIT) amount = CARRY_LIMIT - PlayerDrugData[playerid][Drugs];
3663 new price = amount * DRUG_BUY_PRICE;
3664 if(price > GetPlayerMoney(playerid)) return ShowPlayerDialog(playerid, DIALOG_DRUG_DEALER_BUY_DRUGS, DIALOG_STYLE_INPUT, "Drug Dealer: Buying Drugs", "{E74C3C}You don't have enough money.\n\n{FFFFFF}How many grams would you like to buy?", "Buy", "Back");
3665 DealerData[id][dealerDrugs] -= amount;
3666 PlayerDrugData[playerid][Drugs] += amount;
3667 PlayerDrugData[playerid][TotalBought] += amount;
3668 PlayerDrugData[playerid][TotalBoughtPrice] += price;
3669 GivePlayerMoney(playerid, -price);
3670
3671 new string[96];
3672 format(string, sizeof(string), "DRUG DEALER: {FFFFFF}Bought %s grams of drugs for {2ECC71}%s.", formatInt(amount, .iCurrencyChar = '\0'), formatInt(price));
3673 SendClientMessage(playerid, 0x3498DBFF, string);
3674
3675 stmt_bind_value(UpdateDealerDrugs, 0, DB::TYPE_INTEGER, DealerData[id][dealerDrugs]);
3676 stmt_bind_value(UpdateDealerDrugs, 1, DB::TYPE_INTEGER, id);
3677 stmt_execute(UpdateDealerDrugs);
3678 return 1;
3679 }
3680 ////////////////////////////////////////////////////////////////
3681 case DIALOG_DRUG_DEALER_SELL:
3682 {
3683 if(!response) return ShowDealerMenu(playerid);
3684 if(isnull(inputtext)) return ShowPlayerDialog(playerid, DIALOG_DRUG_DEALER_SELL, DIALOG_STYLE_INPUT, "Drug Dealer: Selling Drugs", "{E74C3C}Input can't be empty.\n\n{FFFFFF}How many grams would you like to sell?", "Sell", "Back");
3685 new amount = strval(inputtext), id = PlayerDrugData[playerid][DealerID];
3686 if(!(0 < amount <= CARRY_LIMIT)) return ShowPlayerDialog(playerid, DIALOG_DRUG_DEALER_SELL, DIALOG_STYLE_INPUT, "Drug Dealer: Selling Drugs", "{E74C3C}Invalid amount.\n\n{FFFFFF}How many grams would you like to sell?", "Sell", "Back");
3687 if(amount > PlayerDrugData[playerid][Drugs]) return ShowPlayerDialog(playerid, DIALOG_DRUG_DEALER_SELL, DIALOG_STYLE_INPUT, "Drug Dealer: Selling Drugs", "{E74C3C}You don't have that much drugs.\n\n{FFFFFF}How many grams would you like to sell?", "Sell", "Back");
3688 new price = amount * DRUG_SELL_PRICE;
3689 DealerData[id][dealerDrugs] += amount;
3690 PlayerDrugData[playerid][Drugs] -= amount;
3691 PlayerDrugData[playerid][TotalSold] += amount;
3692 PlayerDrugData[playerid][TotalSoldPrice] += price;
3693 GivePlayerMoney(playerid, price);
3694
3695 new string[96];
3696 format(string, sizeof(string), "DRUG DEALER: {FFFFFF}Sold %s grams of drugs for {2ECC71}%s.", formatInt(amount, .iCurrencyChar = '\0'), formatInt(price));
3697 SendClientMessage(playerid, 0x3498DBFF, string);
3698
3699 stmt_bind_value(UpdateDealerDrugs, 0, DB::TYPE_INTEGER, DealerData[id][dealerDrugs]);
3700 stmt_bind_value(UpdateDealerDrugs, 1, DB::TYPE_INTEGER, id);
3701 stmt_execute(UpdateDealerDrugs);
3702 return 1;
3703 }
3704 ////////////////////////////////////////////////////////////////
3705 case DIALOG_DRUG_OFFER:
3706 {
3707 if(!response)
3708 {
3709 new string[96];
3710 format(string, sizeof(string), "DRUGS: {FFFFFF}Your offer got rejected by %s(%d).", Player_GetName(playerid), playerid);
3711 SendClientMessage(PlayerDrugData[playerid][DrugsOfferedBy], 0x3498DBFF, string);
3712
3713 PlayerDrugData[playerid][DrugsOfferedBy] = INVALID_PLAYER_ID;
3714 return 1;
3715 }
3716
3717 new id = PlayerDrugData[playerid][DrugsOfferedBy], offeredp = PlayerDrugData[playerid][DrugsOfferedPrice], amount = strval(inputtext);
3718 PlayerDrugData[playerid][DrugsOfferedBy] = INVALID_PLAYER_ID;
3719 if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Dealer is offline.");
3720 if(DistanceBetweenPlayers(playerid, id) > 5.0) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You must be near to the dealer you want to buy drugs from.");
3721 if(!(0 < amount <= CARRY_LIMIT)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Invalid amount.");
3722 if(amount > PlayerDrugData[id][Drugs]) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Dealer doesn't have that much drugs.");
3723 if(PlayerDrugData[playerid][Drugs] + amount > CARRY_LIMIT) amount = CARRY_LIMIT - PlayerDrugData[playerid][Drugs];
3724 new price = amount * offeredp;
3725 if(price > GetPlayerMoney(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You don't have enough money.");
3726 PlayerDrugData[playerid][Drugs] += amount;
3727 PlayerDrugData[id][Drugs] -= amount;
3728 GivePlayerMoney(playerid, -price);
3729 GivePlayerMoney(id, price);
3730
3731 new string[128];
3732 format(string, sizeof(string), "DRUGS: {FFFFFF}Sold %s grams of drugs to %s(%d) for {2ECC71}%s.", formatInt(amount, .iCurrencyChar = '\0'), Player_GetName(playerid), playerid, formatInt(price));
3733 SendClientMessage(id, 0x3498DBFF, string);
3734
3735 format(string, sizeof(string), "DRUGS: {FFFFFF}Bought %s grams of drugs from %s(%d) for {2ECC71}%s.", formatInt(amount, .iCurrencyChar = '\0'), Player_GetName(id), id, formatInt(price));
3736 SendClientMessage(playerid, 0x3498DBFF, string);
3737 return 1;
3738 }
3739 ////////////////////////////////////////////////////////////////
3740 }
3741 switch(dialogid)
3742 {
3743 /* ---------------------------------------------------------------------- */
3744 case DIALOG_WEAPONS_MENU:
3745 {
3746 if(!response) return 1;
3747 CurCategoryID[playerid] = Machine_GetCategoryID(inputtext);
3748 if(CurCategoryID[playerid] == -1)
3749 {
3750 SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You've chosen an invalid category.");
3751 ShowCategories(playerid);
3752 return 1;
3753 }
3754
3755 ShowWeapons(playerid);
3756 return 1;
3757 }
3758 /* ---------------------------------------------------------------------- */
3759 case DIALOG_WEAPONS_BUY:
3760 {
3761 if(!response) return ShowCategories(playerid);
3762 CurItemIndex[playerid] = listitem;
3763
3764 new weapon, ammo, price;
3765 if(Machine_GetWeaponData(CurCategoryID[playerid], CurItemIndex[playerid], weapon, ammo, price)) {
3766 if(price > GetPlayerMoney(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You can't afford this weapon.");
3767 new string[256];
3768 GetWeaponName(weapon, string, sizeof(string));
3769 format(string, sizeof(string), "{FFFFFF}You're about to buy a {F1C40F}%s {FFFFFF}with {F1C40F}%s {FFFFFF}ammo.\n\nPrice: {2ECC71}%s\n\n{FFFFFF}How many times would you like to buy this item?", string, formatInt(ammo, .iCurrencyChar = '\0'), formatInt(price));
3770 ShowPlayerDialog(playerid, DIALOG_WEAPONS_BUY_FINAL, DIALOG_STYLE_INPUT, "{F1C40F}GVM: {FFFFFF}Purchase Confirmation", string, "Buy", "Back");
3771 }else{
3772 SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You've chosen an invalid weapon.");
3773 ShowWeapons(playerid);
3774 }
3775
3776 return 1;
3777 }
3778 /* ---------------------------------------------------------------------- */
3779 case DIALOG_WEAPONS_BUY_FINAL:
3780 {
3781 if(!response) return ShowWeapons(playerid);
3782 new times = strval(inputtext);
3783 if(!(0 < times <= 100)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You can't purchase less than 1 or more than 100 weapons at once.");
3784
3785 new weapon, ammo, price;
3786 if(Machine_GetWeaponData(CurCategoryID[playerid], CurItemIndex[playerid], weapon, ammo, price)) {
3787 price = (price * times);
3788 ammo = (ammo * times);
3789 if(price > GetPlayerMoney(playerid)) return SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You can't afford this purchase.");
3790 GivePlayerMoney(playerid, -price);
3791 GivePlayerWeapon(playerid, weapon, ammo);
3792
3793 new string[144];
3794 GetWeaponName(weapon, string, sizeof(string));
3795 SendClientMessage(playerid, 0x3498DBFF, "GUN VENDING MACHINE: {FFFFFF}Purchase complete!");
3796
3797 format(string, sizeof(string), "GUN VENDING MACHINE: {2ECC71}%s {FFFFFF}paid for {F1C40F}%s {FFFFFF}with {F1C40F}%s {FFFFFF}ammo.", formatInt(price), string, formatInt(ammo, .iCurrencyChar = '\0'));
3798 SendClientMessage(playerid, 0x3498DBFF, string);
3799 }else{
3800 SendClientMessage(playerid, 0x3498DBFF, "ERROR: {FFFFFF}You've chosen an invalid weapon.");
3801 ShowWeapons(playerid);
3802 }
3803
3804 return 1;
3805 }
3806 /* ---------------------------------------------------------------------- */
3807 case DIALOG_CREATE_CATEGORY:
3808 {
3809 if(!IsPlayerAdmin(playerid)) return 1;
3810 if(!response) return 1;
3811 if(isnull(inputtext)) return ShowPlayerDialog(playerid, DIALOG_CREATE_CATEGORY, DIALOG_STYLE_INPUT, "{F1C40F}GVM: {FFFFFF}Create Category", "{E74C3C}Category name can't be empty.\n\n{FFFFFF}Choose a category name:", "Create", "Cancel");
3812 if(strlen(inputtext) > 24) return ShowPlayerDialog(playerid, DIALOG_CREATE_CATEGORY, DIALOG_STYLE_INPUT, "{F1C40F}GVM: {FFFFFF}Create Category", "{E74C3C}Category name can't be more than 24 characters.\n\n{FFFFFF}Choose a category name:", "Create", "Cancel");
3813
3814 stmt_bind_value(AddCategory, 0, DB::TYPE_STRING, inputtext, 24);
3815 if(stmt_execute(AddCategory)) {
3816 SendClientMessage(playerid, 0x3498DBFF, "GUN VENDING MACHINE: {FFFFFF}Category created.");
3817
3818 new string[64];
3819 format(string, sizeof(string), "GUN VENDING MACHINE: {FFFFFF}Category ID: %d", db_last_insert_rowid(MachineDatabase));
3820 SendClientMessage(playerid, 0x3498DBFF, string);
3821 }else{
3822 SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Category creation failed.");
3823 }
3824
3825 return 1;
3826 }
3827 /* ---------------------------------------------------------------------- */
3828 case DIALOG_REMOVE_CATEGORY:
3829 {
3830 if(!IsPlayerAdmin(playerid)) return 1;
3831 if(!response) return 1;
3832 new catid = Machine_GetCategoryID(inputtext);
3833 if(catid == -1)
3834 {
3835 SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You've chosen an invalid category.");
3836 ShowCategories(playerid, 1);
3837 return 1;
3838 }
3839
3840 stmt_bind_value(RemoveCategory, 0, DB::TYPE_INTEGER, catid);
3841 if(stmt_execute(RemoveCategory) && db_changes(MachineDatabase) > 0) {
3842 SendClientMessage(playerid, 0x3498DBFF, "GUN VENDING MACHINE: {FFFFFF}Category removed.");
3843
3844 stmt_bind_value(RemoveCategoryWeapons, 0, DB::TYPE_INTEGER, catid);
3845 if(stmt_execute(RemoveCategoryWeapons) && db_changes(MachineDatabase) > 0)
3846 {
3847 new string[72];
3848 format(string, sizeof(string), "GUN VENDING MACHINE: {FFFFFF}Removed %d weapons in the category.", db_changes(MachineDatabase));
3849 SendClientMessage(playerid, 0x3498DBFF, string);
3850 }
3851 }else{
3852 SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Category removing failed.");
3853 }
3854
3855 return 1;
3856 }
3857 /* ---------------------------------------------------------------------- */
3858 case DIALOG_RENAME_CATEGORY:
3859 {
3860 if(!IsPlayerAdmin(playerid)) return 1;
3861 if(!response) return 1;
3862 CurCategoryID[playerid] = Machine_GetCategoryID(inputtext);
3863 if(CurCategoryID[playerid] == -1)
3864 {
3865 SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You've chosen an invalid category.");
3866 ShowCategories(playerid, 2);
3867 return 1;
3868 }
3869
3870 ShowPlayerDialog(playerid, DIALOG_RENAME_CATEGORY_FINAL, DIALOG_STYLE_INPUT, "{F1C40F}GVM: {FFFFFF}Rename Category", "New category name:", "Change", "Back");
3871 return 1;
3872 }
3873 /* ---------------------------------------------------------------------- */
3874 case DIALOG_RENAME_CATEGORY_FINAL:
3875 {
3876 if(!IsPlayerAdmin(playerid)) return 1;
3877 if(!response) return ShowCategories(playerid, 2);
3878 if(isnull(inputtext)) return ShowPlayerDialog(playerid, DIALOG_RENAME_CATEGORY_FINAL, DIALOG_STYLE_INPUT, "{F1C40F}GVM: {FFFFFF}Rename Category", "{E74C3C}Category name can't be empty.\n\n{FFFFFF}New category name:", "Change", "Back");
3879 if(strlen(inputtext) > 24) return ShowPlayerDialog(playerid, DIALOG_RENAME_CATEGORY_FINAL, DIALOG_STYLE_INPUT, "{F1C40F}GVM: {FFFFFF}Rename Category", "{E74C3C}Category name can't be more than 24 characters.\n\n{FFFFFF}New category name:", "Change", "Back");
3880 stmt_bind_value(RenameCategory, 0, DB::TYPE_STRING, inputtext, 24);
3881 stmt_bind_value(RenameCategory, 1, DB::TYPE_INTEGER, CurCategoryID[playerid]);
3882 if(stmt_execute(RenameCategory) && db_changes(MachineDatabase) > 0) {
3883 SendClientMessage(playerid, 0x3498DBFF, "GUN VENDING MACHINE: {FFFFFF}Category renamed.");
3884 }else{
3885 SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Category renaming failed.");
3886 }
3887
3888 return 1;
3889 }
3890 /* ---------------------------------------------------------------------- */
3891 case DIALOG_ADD_WEAPON_1:
3892 {
3893 if(!IsPlayerAdmin(playerid)) return 1;
3894 if(!response) return 1;
3895 new weaponid = listitem+1;
3896 if(weaponid >= 19 && weaponid < 22)
3897 {
3898 SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}Invalid weapon.");
3899 ShowWeaponList(playerid);
3900 return 1;
3901 }
3902
3903 SetPVarInt(playerid, "addingWeaponID", weaponid);
3904 ShowPlayerDialog(playerid, DIALOG_ADD_WEAPON_2, DIALOG_STYLE_INPUT, "{F1C40F}GVM: {FFFFFF}Add Weapon", "Weapon ammo:", "Next", "Back");
3905 return 1;
3906 }
3907 /* ---------------------------------------------------------------------- */
3908 case DIALOG_ADD_WEAPON_2:
3909 {
3910 if(!IsPlayerAdmin(playerid)) return 1;
3911 if(!response) return ShowWeaponList(playerid);
3912 if(isnull(inputtext)) return ShowPlayerDialog(playerid, DIALOG_ADD_WEAPON_2, DIALOG_STYLE_INPUT, "{F1C40F}GVM: {FFFFFF}Add Weapon", "{E74C3C}Ammo can't be empty.\n\n{FFFFFF}Weapon ammo:", "Next", "Back");
3913 SetPVarInt(playerid, "addingWeaponAmmo", strval(inputtext));
3914 ShowPlayerDialog(playerid, DIALOG_ADD_WEAPON_3, DIALOG_STYLE_INPUT, "{F1C40F}GVM: {FFFFFF}Add Weapon", "Weapon price:", "Next", "Back");
3915 return 1;
3916 }
3917 /* ---------------------------------------------------------------------- */
3918 case DIALOG_ADD_WEAPON_3:
3919 {
3920 if(!IsPlayerAdmin(playerid)) return 1;
3921 if(!response) return ShowPlayerDialog(playerid, DIALOG_ADD_WEAPON_2, DIALOG_STYLE_INPUT, "{F1C40F}GVM: {FFFFFF}Add Weapon", "Weapon ammo:", "Next", "Back");
3922 if(isnull(inputtext)) return ShowPlayerDialog(playerid, DIALOG_ADD_WEAPON_3, DIALOG_STYLE_INPUT, "{F1C40F}GVM: {FFFFFF}Add Weapon", "{E74C3C}Price can't be empty.\n\n{FFFFFF}Weapon price:", "Next", "Back");
3923 SetPVarInt(playerid, "addingWeaponPrice", strval(inputtext));
3924 ShowCategories(playerid, 3);
3925 return 1;
3926 }
3927 /* ---------------------------------------------------------------------- */
3928 case DIALOG_ADD_WEAPON_FINAL:
3929 {
3930 if(!IsPlayerAdmin(playerid)) return 1;
3931 if(!response) return ShowPlayerDialog(playerid, DIALOG_ADD_WEAPON_3, DIALOG_STYLE_INPUT, "{F1C40F}GVM: {FFFFFF}Add Weapon", "Weapon price:", "Next", "Back");
3932 new catid = Machine_GetCategoryID(inputtext);
3933 if(catid == -1)
3934 {
3935 SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You've chosen an invalid category.");
3936 ShowCategories(playerid, 3);
3937 return 1;
3938 }
3939
3940 stmt_bind_value(AddWeapon, 0, DB::TYPE_INTEGER, GetPVarInt(playerid, "addingWeaponID"));
3941 stmt_bind_value(AddWeapon, 1, DB::TYPE_INTEGER, GetPVarInt(playerid, "addingWeaponAmmo"));
3942 stmt_bind_value(AddWeapon, 2, DB::TYPE_INTEGER, GetPVarInt(playerid, "addingWeaponPrice"));
3943 stmt_bind_value(AddWeapon, 3, DB::TYPE_INTEGER, catid);
3944 if(stmt_execute(AddWeapon)) SendClientMessage(playerid, 0x3498DBFF, "GUN VENDING MACHINE: {FFFFFF}Weapon added.");
3945 return 1;
3946 }
3947 /* ---------------------------------------------------------------------- */
3948 case DIALOG_REMOVE_WEAPON_1:
3949 {
3950 if(!IsPlayerAdmin(playerid)) return 1;
3951 if(!response) return 1;
3952 CurCategoryID[playerid] = Machine_GetCategoryID(inputtext);
3953 if(CurCategoryID[playerid] == -1)
3954 {
3955 SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You've chosen an invalid category.");
3956 ShowCategories(playerid, 4);
3957 return 1;
3958 }
3959
3960 ShowWeapons(playerid, 1);
3961 return 1;
3962 }
3963 /* ---------------------------------------------------------------------- */
3964 case DIALOG_REMOVE_WEAPON_FINAL:
3965 {
3966 if(!IsPlayerAdmin(playerid)) return 1;
3967 if(!response) return ShowCategories(playerid, 4);
3968 new weapon, price, ammo;
3969 if(Machine_GetWeaponData(CurCategoryID[playerid], listitem, weapon, ammo, price)) {
3970 stmt_bind_value(RemoveWeapon, 0, DB::TYPE_INTEGER, weapon);
3971 stmt_bind_value(RemoveWeapon, 1, DB::TYPE_INTEGER, ammo);
3972 stmt_bind_value(RemoveWeapon, 2, DB::TYPE_INTEGER, price);
3973 stmt_bind_value(RemoveWeapon, 3, DB::TYPE_INTEGER, CurCategoryID[playerid]);
3974 if(stmt_execute(RemoveWeapon)) SendClientMessage(playerid, 0x3498DBFF, "GUN VENDING MACHINE: {FFFFFF}Weapon removed.");
3975 }else{
3976 SendClientMessage(playerid, 0xE74C3CFF, "ERROR: {FFFFFF}You've chosen an invalid weapon.");
3977 ShowWeapons(playerid, 1);
3978 }
3979
3980 return 1;
3981 }
3982 /* ---------------------------------------------------------------------- */
3983 }
3984 return 1;
3985}
3986
3987public OnPlayerEditDynamicObject(playerid, STREAMER_TAG_OBJECT objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
3988{
3989 if(EditingMachineID[playerid] != -1 && MachineData[ EditingMachineID[playerid] ][mExists])
3990 {
3991 if(response == EDIT_RESPONSE_FINAL)
3992 {
3993 new id = EditingMachineID[playerid];
3994 MachineData[id][mPosX] = x;
3995 MachineData[id][mPosY] = y;
3996 MachineData[id][mPosZ] = z;
3997 MachineData[id][mRotX] = rx;
3998 MachineData[id][mRotY] = ry;
3999 MachineData[id][mRotZ] = rz;
4000
4001 SetDynamicObjectPos(objectid, MachineData[id][mPosX], MachineData[id][mPosY], MachineData[id][mPosZ]);
4002 SetDynamicObjectRot(objectid, MachineData[id][mRotX], MachineData[id][mRotY], MachineData[id][mRotZ]);
4003
4004 Streamer_SetFloatData(STREAMER_TYPE_MAP_ICON, MachineData[id][mIconID], E_STREAMER_X, MachineData[id][mPosX]);
4005 Streamer_SetFloatData(STREAMER_TYPE_MAP_ICON, MachineData[id][mIconID], E_STREAMER_Y, MachineData[id][mPosY]);
4006 Streamer_SetFloatData(STREAMER_TYPE_MAP_ICON, MachineData[id][mIconID], E_STREAMER_Z, MachineData[id][mPosZ]);
4007
4008 Streamer_SetFloatData(STREAMER_TYPE_3D_TEXT_LABEL, MachineData[id][mLabel], E_STREAMER_X, MachineData[id][mPosX] - (0.65 * floatsin(-MachineData[id][mRotZ], degrees)));
4009 Streamer_SetFloatData(STREAMER_TYPE_3D_TEXT_LABEL, MachineData[id][mLabel], E_STREAMER_Y, MachineData[id][mPosY] - (0.65 * floatcos(-MachineData[id][mRotZ], degrees)));
4010 Streamer_SetFloatData(STREAMER_TYPE_3D_TEXT_LABEL, MachineData[id][mLabel], E_STREAMER_Z, MachineData[id][mPosZ] - 0.15);
4011
4012 stmt_bind_value(UpdateMachine, 0, DB::TYPE_FLOAT, MachineData[id][mPosX]);
4013 stmt_bind_value(UpdateMachine, 1, DB::TYPE_FLOAT, MachineData[id][mPosY]);
4014 stmt_bind_value(UpdateMachine, 2, DB::TYPE_FLOAT, MachineData[id][mPosZ]);
4015 stmt_bind_value(UpdateMachine, 3, DB::TYPE_FLOAT, MachineData[id][mRotX]);
4016 stmt_bind_value(UpdateMachine, 4, DB::TYPE_FLOAT, MachineData[id][mRotY]);
4017 stmt_bind_value(UpdateMachine, 5, DB::TYPE_FLOAT, MachineData[id][mRotZ]);
4018 stmt_bind_value(UpdateMachine, 6, DB::TYPE_INTEGER, id);
4019 stmt_execute(UpdateMachine);
4020
4021 EditingMachineID[playerid] = -1;
4022 }
4023
4024 if(response == EDIT_RESPONSE_CANCEL)
4025 {
4026 new id = EditingMachineID[playerid];
4027 SetDynamicObjectPos(objectid, MachineData[id][mPosX], MachineData[id][mPosY], MachineData[id][mPosZ]);
4028 SetDynamicObjectRot(objectid, MachineData[id][mRotX], MachineData[id][mRotY], MachineData[id][mRotZ]);
4029 EditingMachineID[playerid] = -1;
4030 }
4031 }
4032
4033 return 1;
4034}
4035
4036public OnPlayerClickPlayer(playerid, clickedplayerid, source)
4037{
4038 return 1;
4039}
4040forward RemoveBuildings(playerid);
4041public RemoveBuildings(playerid)
4042{
4043 // PLACE THE REMOVEBUILDINGS HERE
4044 return 1;
4045}
4046forward LoadMaps();
4047public LoadMaps()
4048{
4049 // PLACE YOUR MAPPINGS HERE
4050 return 1;
4051}
4052stock LoadMainScreenTXD()
4053{
4054 TDEditor_TD[0] = TextDrawCreate(-27.500000, -50.625000, "box");
4055 TextDrawLetterSize(TDEditor_TD[0], 0.000000, 18.599998);
4056 TextDrawTextSize(TDEditor_TD[0], 699.500000, 0.000000);
4057 TextDrawAlignment(TDEditor_TD[0], 1);
4058 TextDrawColor(TDEditor_TD[0], -1);
4059 TextDrawUseBox(TDEditor_TD[0], 1);
4060 TextDrawBoxColor(TDEditor_TD[0], 110);
4061 TextDrawSetShadow(TDEditor_TD[0], 0);
4062 TextDrawSetOutline(TDEditor_TD[0], 0);
4063 TextDrawBackgroundColor(TDEditor_TD[0], 255);
4064 TextDrawFont(TDEditor_TD[0], 1);
4065 TextDrawSetProportional(TDEditor_TD[0], 1);
4066 TextDrawSetShadow(TDEditor_TD[0], 0);
4067
4068 TDEditor_TD[1] = TextDrawCreate(193.000000, 39.062500, "J-DM");
4069 TextDrawLetterSize(TDEditor_TD[1], 0.865500, 3.332499);
4070 TextDrawAlignment(TDEditor_TD[1], 1);
4071 TextDrawColor(TDEditor_TD[1], -1);
4072 TextDrawSetShadow(TDEditor_TD[1], 0);
4073 TextDrawSetOutline(TDEditor_TD[1], 1);
4074 TextDrawBackgroundColor(TDEditor_TD[1], 255);
4075 TextDrawFont(TDEditor_TD[1], 3);
4076 TextDrawSetProportional(TDEditor_TD[1], 1);
4077 TextDrawSetShadow(TDEditor_TD[1], 0);
4078
4079 TDEditor_TD[2] = TextDrawCreate(265.500000, 70.125000, "IND-MLY");
4080 TextDrawLetterSize(TDEditor_TD[2], 0.737999, 2.396251);
4081 TextDrawAlignment(TDEditor_TD[2], 1);
4082 TextDrawColor(TDEditor_TD[2], -1);
4083 TextDrawSetShadow(TDEditor_TD[2], 0);
4084 TextDrawSetOutline(TDEditor_TD[2], 1);
4085 TextDrawBackgroundColor(TDEditor_TD[2], 255);
4086 TextDrawFont(TDEditor_TD[2], 0);
4087 TextDrawSetProportional(TDEditor_TD[2], 1);
4088 TextDrawSetShadow(TDEditor_TD[2], 0);
4089
4090 TDEditor_TD[3] = TextDrawCreate(452.000000, 16.312500, "");
4091 TextDrawLetterSize(TDEditor_TD[3], 0.000000, 0.000000);
4092 TextDrawTextSize(TDEditor_TD[3], 60.000000, 72.062500);
4093 TextDrawAlignment(TDEditor_TD[3], 1);
4094 TextDrawColor(TDEditor_TD[3], -1);
4095 TextDrawSetShadow(TDEditor_TD[3], 0);
4096 TextDrawSetOutline(TDEditor_TD[3], 0);
4097 TextDrawBackgroundColor(TDEditor_TD[3], 0);
4098 TextDrawFont(TDEditor_TD[3], 5);
4099 TextDrawSetProportional(TDEditor_TD[3], 1);
4100 TextDrawSetShadow(TDEditor_TD[3], 0);
4101 TextDrawSetPreviewModel(TDEditor_TD[3], 170);
4102 TextDrawSetPreviewRot(TDEditor_TD[3], 0.000000, 0.000000, -30.000000, 1.000000);
4103
4104 TDEditor_TD[4] = TextDrawCreate(419.500000, 18.062500, "");
4105 TextDrawLetterSize(TDEditor_TD[4], 0.000000, 0.000000);
4106 TextDrawTextSize(TDEditor_TD[4], 60.000000, 72.062500);
4107 TextDrawAlignment(TDEditor_TD[4], 1);
4108 TextDrawColor(TDEditor_TD[4], -1);
4109 TextDrawSetShadow(TDEditor_TD[4], 0);
4110 TextDrawSetOutline(TDEditor_TD[4], 0);
4111 TextDrawBackgroundColor(TDEditor_TD[4], 0);
4112 TextDrawFont(TDEditor_TD[4], 5);
4113 TextDrawSetProportional(TDEditor_TD[4], 1);
4114 TextDrawSetShadow(TDEditor_TD[4], 0);
4115 TextDrawSetPreviewModel(TDEditor_TD[4], 161);
4116 TextDrawSetPreviewRot(TDEditor_TD[4], 0.000000, 0.000000, 30.000000, 1.000000);
4117
4118 TDEditor_TD[5] = TextDrawCreate(-56.000000, 312.937500, "box");
4119 TextDrawLetterSize(TDEditor_TD[5], 0.000000, 18.599998);
4120 TextDrawTextSize(TDEditor_TD[5], 671.000000, 0.000000);
4121 TextDrawAlignment(TDEditor_TD[5], 1);
4122 TextDrawColor(TDEditor_TD[5], -1);
4123 TextDrawUseBox(TDEditor_TD[5], 1);
4124 TextDrawBoxColor(TDEditor_TD[5], 110);
4125 TextDrawSetShadow(TDEditor_TD[5], 0);
4126 TextDrawSetOutline(TDEditor_TD[5], 0);
4127 TextDrawBackgroundColor(TDEditor_TD[5], 255);
4128 TextDrawFont(TDEditor_TD[5], 1);
4129 TextDrawSetProportional(TDEditor_TD[5], 1);
4130 TextDrawSetShadow(TDEditor_TD[5], 0);
4131
4132 TDEditor_TD[6] = TextDrawCreate(0.500000, 123.937500, "box");
4133 TextDrawLetterSize(TDEditor_TD[6], 0.000000, -0.649999);
4134 TextDrawTextSize(TDEditor_TD[6], 697.500000, 0.000000);
4135 TextDrawAlignment(TDEditor_TD[6], 1);
4136 TextDrawColor(TDEditor_TD[6], -1);
4137 TextDrawUseBox(TDEditor_TD[6], 1);
4138 TextDrawBoxColor(TDEditor_TD[6], 110);
4139 TextDrawSetShadow(TDEditor_TD[6], 0);
4140 TextDrawSetOutline(TDEditor_TD[6], 0);
4141 TextDrawBackgroundColor(TDEditor_TD[6], 255);
4142 TextDrawFont(TDEditor_TD[6], 1);
4143 TextDrawSetProportional(TDEditor_TD[6], 1);
4144 TextDrawSetShadow(TDEditor_TD[6], 0);
4145
4146 TDEditor_TD[7] = TextDrawCreate(-18.000000, 311.625000, "box");
4147 TextDrawLetterSize(TDEditor_TD[7], 0.000000, -0.649999);
4148 TextDrawTextSize(TDEditor_TD[7], 679.000000, 0.000000);
4149 TextDrawAlignment(TDEditor_TD[7], 1);
4150 TextDrawColor(TDEditor_TD[7], -1);
4151 TextDrawUseBox(TDEditor_TD[7], 1);
4152 TextDrawBoxColor(TDEditor_TD[7], 110);
4153 TextDrawSetShadow(TDEditor_TD[7], 0);
4154 TextDrawSetOutline(TDEditor_TD[7], 0);
4155 TextDrawBackgroundColor(TDEditor_TD[7], 255);
4156 TextDrawFont(TDEditor_TD[7], 1);
4157 TextDrawSetProportional(TDEditor_TD[7], 1);
4158 TextDrawSetShadow(TDEditor_TD[7], 0);
4159
4160 TDEditor_TD[8] = TextDrawCreate(8.000000, 427.562500, "Discord");
4161 TextDrawLetterSize(TDEditor_TD[8], 0.287499, 1.315625);
4162 TextDrawAlignment(TDEditor_TD[8], 1);
4163 TextDrawColor(TDEditor_TD[8], -1);
4164 TextDrawSetShadow(TDEditor_TD[8], 0);
4165 TextDrawSetOutline(TDEditor_TD[8], 1);
4166 TextDrawBackgroundColor(TDEditor_TD[8], 255);
4167 TextDrawFont(TDEditor_TD[8], 1);
4168 TextDrawSetProportional(TDEditor_TD[8], 1);
4169 TextDrawSetShadow(TDEditor_TD[8], 0);
4170 return 1;
4171}
4172stock ShowMNT(playerid)
4173{
4174 for(new i = 0; i < 9; i++)
4175 {
4176 TextDrawShowForPlayer(playerid, TDEditor_TD[i]);
4177 }
4178}
4179
4180stock HideMNT(playerid)
4181{
4182 for(new i = 0; i < 9; i++)
4183 {
4184 TextDrawHideForPlayer(playerid, TDEditor_TD[i]);
4185 }
4186}
4187
4188xvMenuGoster(playerid)
4189{
4190 new str[256], tmp[8], xid;
4191 GetPVarString(playerid, "selected_veh_plate", tmp, 8);
4192 xid = GetVehiclexIDFromPlate(tmp);
4193 if(xid == 0) return 1;
4194 format(str, sizeof(str), "{FFA500}» {FFFFFF} Where Is My Car?\n%s\n{FFA500}» {FFFFFF} Quick Park\n{FFA500}» {%s} Vehicle Keys\n{FFA500}» {%s} Sell the Vehicle\n{FFA500}» {CACACA} Vehicle Info",
4195 (xVehicle[xid][xv_Garajda]) ? (!xStrcmp(xVehicle[xid][xv_Sahip], Isim(playerid))) ? ("{FFA500}» {FFFFFF} Take Out Vehicle From Garage") : ("{FFA500}» {FF0000} Take Out Vehicle From Garage") : (!xStrcmp(xVehicle[xid][xv_Sahip], Isim(playerid))) ? ("{FFA500}» {FFFFFF} Put Vehicle In Garage") : ("{FFA500}» {FF0000} Put Vehicle In Garage"), (xStrcmp(xVehicle[xid][xv_Sahip], Isim(playerid))) ? ("FF0000") : ("FFFFFF"), (xStrcmp(xVehicle[xid][xv_Sahip], Isim(playerid))) ? ("FF0000") : ("FFFFFF"));
4196 ShowPlayerDialog(playerid, XV_DIALOGID, DIALOG_STYLE_LIST, "Vehicle Menu", str, "Select", "Back");
4197 return 1;
4198}
4199
4200forward TeklifBitir(gonderen, alan);
4201public TeklifBitir(gonderen, alan)
4202{
4203 SetPVarInt(alan, "xv_teklif_gonderen", INVALID_PLAYER_ID);
4204 DeletePVar(alan, "xv_teklif_xid");
4205 DeletePVar(alan, "xv_teklif_fiyat");
4206 if(IsPlayerConnected(gonderen)) SetPVarInt(gonderen, "xv_teklif_id", INVALID_PLAYER_ID), SendClientMessage(gonderen, -1, "{FF0000}[!] {DCDC22}The vehicle sale offer has cancelled because of the player didn't respond.");
4207 return 1;
4208}
4209
4210CreatexVehicle(modelid, owner[], price, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, color1, color2)
4211{
4212 new id = Iter_Free(xVehicles);
4213
4214 xVehicle[id][xv_Veh] = CreateVehicle(modelid, spawn_x, spawn_y, spawn_z, z_angle, color1, color2, -1);
4215
4216 xVeh[xVehicle[id][xv_Veh]] = id;
4217 xVehicle[id][xv_ModelID] = modelid;
4218 xVehicle[id][xv_Renk][0] = color1;
4219 xVehicle[id][xv_Renk][1] = color2;
4220 xVehicle[id][xv_Paintjob] = -1;
4221 xVehicle[id][xv_Pos][0] = spawn_x;
4222 xVehicle[id][xv_Pos][1] = spawn_y;
4223 xVehicle[id][xv_Pos][2] = spawn_z;
4224 xVehicle[id][xv_Pos][3] = z_angle;
4225 format(xVehicle[id][xv_Sahip], 24, "%s", owner);
4226 xVehicle[id][xv_Fiyat] = price;
4227 plate_check:
4228 format(xVehicle[id][xv_Plaka], 8, "%s", CreatePlate());
4229 foreach(new i : xVehicles) if(!xStrcmp(xVehicle[id][xv_Plaka], xVehicle[i][xv_Plaka])) goto plate_check;
4230 SetVehicleNumberPlate(xVehicle[id][xv_Veh], xVehicle[id][xv_Plaka]);
4231 SetVehicleToRespawn(xVehicle[id][xv_Veh]);
4232 Iter_Add(xVehicles, id);
4233 new query[256];
4234 format(query, sizeof(query),"INSERT INTO `xVehicle` (`ID`,`Sahip`,`Fiyat`,`X`,`Y`,`Z`,`A`,`Model`,`Renk1`,`Renk2`,`Plaka`) VALUES ('%d','%s','%d','%f','%f','%f','%f','%d','%d','%d','%s')",
4235 id, owner, price, spawn_x, spawn_y, spawn_z, z_angle, modelid, color1, color2, xVehicle[id][xv_Plaka]);
4236 mysql_query(mysqlB, query);
4237
4238 if(!strlen(xVehicle[id][xv_Sahip]))
4239 {
4240 new str[150];
4241 format(str, sizeof(str), "{00FF00}This Vehicle Is For Sale!\n{FFA500}Vehicle Name: {FFFFFF}%s\n{FFA500}Plate Number: {FFFFFF}%s\n{FFA500}Price: {00FF00}$%d", GetVehicleNameFromModel(xVehicle[id][xv_ModelID]), xVehicle[id][xv_Plaka], xVehicle[id][xv_Fiyat]);
4242 xVehicle[id][xv_Text] = Create3DTextLabel(str, 0x008080FF, 0.0, 0.0, 0.0, 50.0, 0);
4243 Attach3DTextLabelToVehicle(xVehicle[id][xv_Text], xVehicle[id][xv_Veh], 0.0, 0.0, 1.0);
4244 }
4245 return xVehicle[id][xv_Veh];
4246}
4247
4248SavexVehicle(xvehid)
4249{
4250 if(xvehid == 0) return 0;
4251 new query[512];
4252
4253 mysql_format(mysqlB, query, sizeof(query), "UPDATE `xVehicle` SET Sahip='%e', Fiyat=%d, X=%f, Y=%f, Z=%f, A=%f, HizliPark=%d, Model=%d, Renk1=%d, Renk2=%d, Plaka='%s', PJ=%d, Garajda=%d, Parca1=%d, Parca2=%d, Parca3=%d, Parca4=%d, Parca5=%d, Parca6=%d, Parca7=%d, Parca8=%d, Parca9=%d, Parca10=%d, Parca11=%d, Parca12=%d, Parca13=%d, Parca14=%d WHERE ID=%d",
4254 xVehicle[xvehid][xv_Sahip], xVehicle[xvehid][xv_Fiyat], xVehicle[xvehid][xv_Pos][0], xVehicle[xvehid][xv_Pos][1], xVehicle[xvehid][xv_Pos][2], xVehicle[xvehid][xv_Pos][3], xVehicle[xvehid][xv_HizliPark], xVehicle[xvehid][xv_ModelID], xVehicle[xvehid][xv_Renk][0], xVehicle[xvehid][xv_Renk][1], xVehicle[xvehid][xv_Plaka], xVehicle[xvehid][xv_Paintjob], xVehicle[xvehid][xv_Garajda],
4255 xVehicle[xvehid][xv_Parca][0],
4256 xVehicle[xvehid][xv_Parca][1],
4257 xVehicle[xvehid][xv_Parca][2],
4258 xVehicle[xvehid][xv_Parca][3],
4259 xVehicle[xvehid][xv_Parca][4],
4260 xVehicle[xvehid][xv_Parca][5],
4261 xVehicle[xvehid][xv_Parca][6],
4262 xVehicle[xvehid][xv_Parca][7],
4263 xVehicle[xvehid][xv_Parca][8],
4264 xVehicle[xvehid][xv_Parca][9],
4265 xVehicle[xvehid][xv_Parca][10],
4266 xVehicle[xvehid][xv_Parca][11],
4267 xVehicle[xvehid][xv_Parca][12],
4268 xVehicle[xvehid][xv_Parca][13],
4269 xvehid);
4270 mysql_query(mysqlB, query);
4271 return 1;
4272}
4273
4274forward LoadxVehicles();
4275public LoadxVehicles()
4276{
4277 new rows = cache_num_rows();
4278 new id, loaded;
4279 if(rows)
4280 {
4281 while(loaded < rows)
4282 {
4283 cache_get_value_name_int(loaded, "ID", id);
4284 cache_get_value_name(loaded, "Sahip", xVehicle[id][xv_Sahip], MAX_PLAYER_NAME);
4285 cache_get_value_name_int(loaded, "Fiyat", xVehicle[id][xv_Fiyat]);
4286 cache_get_value_name_float(loaded, "X", xVehicle[id][xv_Pos][0]);
4287 cache_get_value_name_float(loaded, "Y", xVehicle[id][xv_Pos][1]);
4288 cache_get_value_name_float(loaded, "Z", xVehicle[id][xv_Pos][2]);
4289 cache_get_value_name_float(loaded, "A", xVehicle[id][xv_Pos][3]);
4290 cache_get_value_name_int(loaded, "HizliPark", xVehicle[id][xv_HizliPark]);
4291 cache_get_value_name_int(loaded, "Model", xVehicle[id][xv_ModelID]);
4292 cache_get_value_name_int(loaded, "Renk1", xVehicle[id][xv_Renk][0]);
4293 cache_get_value_name_int(loaded, "Renk2", xVehicle[id][xv_Renk][1]);
4294 cache_get_value_name(loaded, "Plaka", xVehicle[id][xv_Plaka], 8);
4295 cache_get_value_name_int(loaded, "Garajda", xVehicle[id][xv_Garajda]);
4296 cache_get_value_name_int(loaded, "PJ", xVehicle[id][xv_Paintjob]);
4297 cache_get_value_name_int(loaded, "Parca1", xVehicle[id][xv_Parca][0]);
4298 cache_get_value_name_int(loaded, "Parca2", xVehicle[id][xv_Parca][1]);
4299 cache_get_value_name_int(loaded, "Parca3", xVehicle[id][xv_Parca][2]);
4300 cache_get_value_name_int(loaded, "Parca4", xVehicle[id][xv_Parca][3]);
4301 cache_get_value_name_int(loaded, "Parca5", xVehicle[id][xv_Parca][4]);
4302 cache_get_value_name_int(loaded, "Parca6", xVehicle[id][xv_Parca][5]);
4303 cache_get_value_name_int(loaded, "Parca7", xVehicle[id][xv_Parca][6]);
4304 cache_get_value_name_int(loaded, "Parca8", xVehicle[id][xv_Parca][7]);
4305 cache_get_value_name_int(loaded, "Parca9", xVehicle[id][xv_Parca][8]);
4306 cache_get_value_name_int(loaded, "Parca10", xVehicle[id][xv_Parca][9]);
4307 cache_get_value_name_int(loaded, "Parca11", xVehicle[id][xv_Parca][10]);
4308 cache_get_value_name_int(loaded, "Parca12", xVehicle[id][xv_Parca][11]);
4309 cache_get_value_name_int(loaded, "Parca13", xVehicle[id][xv_Parca][12]);
4310 cache_get_value_name_int(loaded, "Parca14", xVehicle[id][xv_Parca][13]);
4311
4312 if(!xVehicle[id][xv_Garajda])
4313 {
4314 xVehicle[id][xv_Veh] = CreateVehicle(xVehicle[id][xv_ModelID], xVehicle[id][xv_Pos][0], xVehicle[id][xv_Pos][1], xVehicle[id][xv_Pos][2], xVehicle[id][xv_Pos][3], xVehicle[id][xv_Renk][0], xVehicle[id][xv_Renk][1], -1);
4315 xVeh[xVehicle[id][xv_Veh]] = id;
4316 SetVehicleNumberPlate(xVehicle[id][xv_Veh], xVehicle[id][xv_Plaka]);
4317 SetVehicleToRespawn(xVehicle[id][xv_Veh]);
4318 }
4319 Iter_Add(xVehicles, id);
4320 loaded++;
4321
4322 if(!strlen(xVehicle[id][xv_Sahip]))
4323 {
4324 new str[150];
4325 format(str, sizeof(str), "{00FF00}This Vehicle Is For Sale!\n{FFA500}Vehicle Name: {FFFFFF}%s\n{FFA500}Plate Number: {FFFFFF}%s\n{FFA500}Price: {00FF00}$%d", GetVehicleNameFromModel(xVehicle[id][xv_ModelID]), xVehicle[id][xv_Plaka], xVehicle[id][xv_Fiyat]);
4326 xVehicle[id][xv_Text] = Create3DTextLabel(str, 0x008080FF, 0.0, 0.0, 0.0, 50.0, 0);
4327 Attach3DTextLabelToVehicle(xVehicle[id][xv_Text], xVehicle[id][xv_Veh], 0.0, 0.0, 1.0);
4328 }
4329 }
4330 }
4331 printf("[xVehicle] %d vehicle loaded.", loaded);
4332 return 1;
4333}
4334
4335stock LoadVehicleMod(xid)
4336{
4337 for(new c; c<14; c++) AddVehicleComponent(xVehicle[xid][xv_Veh], xVehicle[xid][xv_Parca][c]);
4338 ChangeVehiclePaintjob(xVehicle[xid][xv_Veh], xVehicle[xid][xv_Paintjob]);
4339 return 1;
4340}
4341
4342stock LoadxVehicleKeys(playerid)
4343{
4344 Iter_Clear(xVehicleKeys<playerid>);
4345
4346 new query[72];
4347 mysql_format(mysqlB, query, sizeof(query), "SELECT * FROM xVehicleKeys WHERE Isim='%e'", Isim(playerid));
4348 mysql_tquery(mysqlB, query, "LoadCarKeys", "i", playerid);
4349 return 1;
4350}
4351
4352forward PlantGrowth(id);
4353public PlantGrowth(id)
4354{
4355 new label_string[128];
4356 PlantData[id][plantGrowth] += RandomEx(3, 7);
4357
4358 if(PlantData[id][plantGrowth] >= PLANT_MAX_GROWTH) {
4359 PlantData[id][plantGrowth] = PLANT_MAX_GROWTH;
4360 KillTimer(PlantData[id][plantTimer]);
4361 PlantData[id][plantTimer] = SetTimerEx("PlantRot", ROT_INTERVAL * 1000, false, "i", id);
4362
4363 new percentage = Plant_GrowthPercentage(id);
4364 format(label_string, sizeof(label_string), "Rotting Drug Plant (%d)\n\n{FFFFFF}Placed by %s\nGrowth: {%06x}%d%%\n\n{FFFFFF}/plant harvest", id, PlantData[id][plantedBy], (percentage < 25) ? 0xE74C3CFF >>> 8 : 0x2ECC71FF >>> 8, percentage);
4365 UpdateDynamic3DTextLabelText(PlantData[id][plantLabel], 0xF1C40FFF, label_string);
4366
4367 SetDynamicObjectMaterial(PlantData[id][plantObj], 2, 2, "plants_TABLETOP", "CJ_PLANT", 0xFFD35400);
4368
4369 new owner_id = Plant_GetOwnerID(id);
4370 if(IsPlayerConnected(owner_id)) SendClientMessage(owner_id, 0x3498DBFF, "DRUG PLANT: {FFFFFF}One of your drug plants growed, harvest it before it rots!");
4371 }else{
4372 new percentage = Plant_GrowthPercentage(id);
4373 if(!PlantData[id][gotLeaves] && percentage >= 25)
4374 {
4375 SetDynamicObjectMaterial(PlantData[id][plantObj], 2, 2, "plants_TABLETOP", "CJ_PLANT", 0xFF2ECC71);
4376 PlantData[id][gotLeaves] = true;
4377 }
4378
4379 format(label_string, sizeof(label_string), "Drug Plant (%d)\n\n{FFFFFF}Placed by %s\nGrowth: {%06x}%d%%\n\n{FFFFFF}/plant harvest", id, PlantData[id][plantedBy], (percentage < 25) ? 0xE74C3CFF >>> 8 : 0x2ECC71FF >>> 8, percentage);
4380 UpdateDynamic3DTextLabelText(PlantData[id][plantLabel], 0xF1C40FFF, label_string);
4381 }
4382
4383 return 1;
4384}
4385
4386forward PlantRot(id);
4387public PlantRot(id)
4388{
4389 new owner_id = Plant_GetOwnerID(id);
4390 if(IsPlayerConnected(owner_id)) SendClientMessage(owner_id, 0x3498DBFF, "DRUG PLANT: {FFFFFF}One of your drug plants rotted!");
4391
4392 Plant_Destroy(id);
4393 return 1;
4394}
4395
4396forward RegenHealth(playerid, amount);
4397public RegenHealth(playerid, amount)
4398{
4399 amount--;
4400
4401 new Float: health;
4402 GetPlayerHealth(playerid, health);
4403
4404 if(health + 2.5 < 95.0) SetPlayerHealth(playerid, health + 2.5);
4405 if(amount > 0) {
4406 #if defined USE_DRUNKLEVEL
4407 SetPlayerDrunkLevel(playerid, 4999);
4408 #endif
4409
4410 RegenTimer[playerid] = SetTimerEx("RegenHealth", 500, false, "ii", playerid, amount);
4411 }else{
4412 #if defined USE_DRUNKLEVEL
4413 SetPlayerDrunkLevel(playerid, 0);
4414 #endif
4415
4416 if(RegenTimer[playerid] != -1)
4417 {
4418 KillTimer(RegenTimer[playerid]);
4419 RegenTimer[playerid] = -1;
4420 }
4421 }
4422
4423 return 1;
4424}
4425
4426forward RemoveEffects(playerid);
4427public RemoveEffects(playerid)
4428{
4429 #if defined USE_DRUNKLEVEL
4430 SetPlayerDrunkLevel(playerid, 0);
4431 #endif
4432
4433 SetPlayerWeather(playerid, 10);
4434
4435 if(EffectTimer[playerid] != -1)
4436 {
4437 KillTimer(EffectTimer[playerid]);
4438 EffectTimer[playerid] = -1;
4439 }
4440
4441 return 1;
4442}
4443
4444forward LoadCarKeys(playerid);
4445public LoadCarKeys(playerid)
4446{
4447 if(!IsPlayerConnected(playerid)) return 1;
4448 new rows = cache_num_rows();
4449 if(rows)
4450 {
4451 new loaded, vehid;
4452 while(loaded < rows)
4453 {
4454 cache_get_value_name_int(loaded, "AracID", vehid);
4455 Iter_Add(xVehicleKeys<playerid>, vehid);
4456 loaded++;
4457 }
4458 }
4459
4460 return 1;
4461}
4462
4463stock GetVehiclexIDFromPlate(plate[])
4464{
4465 foreach(new i : xVehicles) if(!xStrcmp(plate, xVehicle[i][xv_Plaka])) return i;
4466 return 0;
4467}
4468
4469stock CreatePlate() // Owner: 'KoczkaHUN'
4470{
4471 const len = 7, hyphenpos = 4;
4472 new plate[len+1];
4473 for (new i = 0; i < len; i++)
4474 {
4475 if (i + 1 == hyphenpos)
4476 {
4477 plate[i] = '-';
4478 continue;
4479 }
4480 if (random(2)) plate[i] = 'A' + random(26);
4481 else plate[i] = '0' + random(10);
4482 }
4483 return plate;
4484}
4485
4486stock IsVehicleFlipped(vehicleid)
4487{
4488 new Float:Quat[2];
4489 GetVehicleRotationQuat(vehicleid, Quat[0], Quat[1], Quat[0], Quat[0]);
4490 return (Quat[1] >= 0.60 || Quat[1] <= -0.60);
4491}
4492
4493stock GetPlayerxVehicleCount(playerid)
4494{
4495 new count;
4496 foreach(new i : xVehicles)
4497 {
4498 if(!xStrcmp(xVehicle[i][xv_Sahip], Isim(playerid))) count++;
4499 }
4500 return count;
4501}
4502
4503stock GetPlayerInGarageVehicleCount(playerid)
4504{
4505 new count;
4506 foreach(new i : xVehicles)
4507 {
4508 if(!xStrcmp(xVehicle[i][xv_Sahip], Isim(playerid)) && xVehicle[i][xv_Garajda]) count++;
4509 }
4510 return count;
4511}
4512
4513stock GetVehicleNameFromModel(modelid)
4514{
4515 new String[64];
4516 format(String,sizeof(String),"%s",VehicleNames[modelid - 400]);
4517 return String;
4518}
4519
4520stock GetVehicleModelIDFromName(vname[])
4521{
4522 for(new i = 0; i < 211; i++)
4523 {
4524 if ( strfind(VehicleNames[i], vname, true) != -1 )
4525 return i + 400;
4526 }
4527 return -1;
4528}
4529
4530stock GetPlayerIDFromName(name[])
4531{
4532 foreach(new i : Player) if(!xStrcmp(Isim(i), name)) return i;
4533 return INVALID_PLAYER_ID;
4534}
4535
4536stock xStrcmp(str1[], str2[])
4537{
4538 if(strlen(str1) == strlen(str2) && strcmp(str1, str2) == 0) return 0;
4539 return 1;
4540}
4541
4542stock split(const src[], dest[][], const delimiter) // From: wiki.samp [Owner: Kaliber|Kaliber]
4543{
4544 new n_pos,num,old,str[1];
4545 str[0] = delimiter;
4546 while(n_pos != -1)
4547 {
4548 n_pos = strfind(src,str,false,n_pos+1);
4549 strmid(dest[num++], src, (!num)?0:old+1,(n_pos==-1)?strlen(src):n_pos,256);
4550 old=n_pos;
4551 }
4552 return 1;
4553}
4554
4555stock Isim(playerid)
4556{
4557 new ism[24];
4558 GetPlayerName(playerid, ism, 24);
4559 return ism;
4560}
4561
4562stock isNumeric(const string[]) {
4563 new length=strlen(string);
4564 if (length==0) return false;
4565 for (new i = 0; i < length; i++) {
4566 if (
4567 (string[i] > '9' || string[i] < '0' && string[i]!='-' && string[i]!='+') // Not a number,'+' or '-'
4568 || (string[i]=='-' && i!=0) // A '-' but not at first.
4569 || (string[i]=='+' && i!=0) // A '+' but not at first.
4570 ) return false;
4571 }
4572 if (length==1 && (string[0]=='-' || string[0]=='+')) return false;
4573 return true;
4574}
4575
4576stock GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
4577{
4578 // Created by Y_Less
4579
4580 new Float:a;
4581
4582 GetPlayerPos(playerid, x, y, a);
4583 GetPlayerFacingAngle(playerid, a);
4584
4585 if (GetPlayerVehicleID(playerid)) {
4586 GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
4587 }
4588
4589 x += (distance * floatsin(-a, degrees));
4590 y += (distance * floatcos(-a, degrees));
4591}