· 8 years ago · Apr 04, 2018, 10:28 PM
1/*==========================================================================================================================||
2|| ||
3|| ||
4|| __ __ _________ .__ ||
5|| / \ / \_____ ___________ ______ \_ ___ \_______|__| _____ __________ ____ ||
6|| \ \/\/ /\__ \ / ____/\__ \ / ___/ / \ \/\_ __ \ |/ \ / ___/ _ \ / \ ||
7|| \ / / __ \< <_| | / __ \_\___ \ \ \____| | \/ | Y Y \\___ ( <_> ) | \ ||
8|| \__/\ / (____ /\__ |(____ /____ > \______ /|__| |__|__|_| /____ >____/|___| / /\ ||
9|| \/ \/ |__| \/ \/ \/ \/ \/ \/ \/ ||
10|| ________ .__ _______ ________ ||
11|| __ _ _\______ \ ____ _____ | | ___________ ___ _\ _ \ \_____ \ ||
12|| \ \/ \/ /| | \_/ __ \\__ \ | | _/ __ \_ __ \ \ \/ / /_\ \ / ____/ ||
13|| \ / | ` \ ___/ / __ \| |_\ ___/| | \/ \ /\ \_/ \ / \ ||
14|| \/\_/ /_______ /\___ >____ /____/\___ >__| \_/ \_____ / /\ \_______ \ ||
15|| \/ \/ \/ \/ \/ \/ ||
16|| SA-MP 0.3x ||
17|| Waqas Crimson / Daniel ( wcrymson@hotmail.com ) ||
18|| www.programaciongeneral.com.ar/ ||
19|| Véase 'readme.txt' para más especificaciones. ||
20||==========================================================================================================================*/
21
22/*
23
24 - No se permiten mirror's, sà se caé el/los link(s), avisarme y con gusto lo(s) re-subo.
25 - Este archivo se puede utilizar / modificar / alterar conservando los créditos del autor original.
26 - No permitido publicar una nueva versión de este FS modificada/alterada.
27
28 wDealer v0.1:
29
30 Contenido:
31 - Creación & eliminación de vehÃculos de concesionario.
32 - Guardado & cargado de vehÃculos de concesionario.
33 - Compra & venta de vehÃculos personales.
34 - Guardado & cargado de vehÃculos personales.
35 - 'Sistema' de park.
36 - 'Sistema' de cerrado de puertas ( lock ).
37 - 'Sistema' de recuperación de vehÃculo ( seguro ).
38 - 'Sistema' de respawn de vehÃculos.
39 - 2161 lineas totales.
40
41 wDealer v0.2:
42
43 Contenido:
44 - Reformada la estructura de las variables del sistema.
45 - Sistema de maletero ( armas, chaleco ).
46 - /gmaletero [opción] ( arma | chaleco ). <- Para guardar un item en el vehÃculo.
47 - /smaletero [opcion] ( arma [slot] | chaleco ). <- Para sacar un item del vehÃculo.
48 - Sistema de motor.
49 - Sistema de alarma.
50 - Sistema de luces.
51 - Sistema de capo ( gráfico ).
52 - Sistema de maletero ( gráfico ).
53 - Sistema de concesionarios.
54 - Creación de concesionarios especÃficos.
55 - Guardado & Cargado de concesionarios.
56 - Venta de vehÃculos en sus respectivos concesionarios.
57 - Fixeados bugs menores.
58 - Se removió el posible uso de la función 'sscanf', se utilizará solo el plugin.
59 - 3481 lineas totales.
60
61 Extra:
62 Creación de tablas:
63
64 -- Para vehÃculos de concesionarios:
65 CREATE TABLE IF NOT EXISTS `carsdealers` (
66 `ID_CarDealer` int(4) NOT NULL AUTO_INCREMENT,
67 `CarName` varchar(30),
68 `DealerCar` int(3),
69 `CarModel` int(4),
70 `CarPrice` int(12),
71 `CarPosX` float(12),
72 `CarPosY` float(12),
73 `CarPosZ` float(12),
74 `CarRot` float(12),
75 PRIMARY KEY (`ID_CarDealer`)
76 );
77
78 -- Para los concesionarios:
79 CREATE TABLE IF NOT EXISTS `dealerLocations` (
80 `DealerID` int(5) NOT NULL AUTO_INCREMENT,
81 `DealerName` varchar(30),
82 `countVehs` int(5),
83 `max_X` float(12),
84 `min_X` float(12),
85 `max_Y` float(12),
86 `min_Y` float(12),
87 PRIMARY KEY ( `DealerID` )
88 );
89
90 -- Para los vehÃculos personales:
91 CREATE TABLE IF NOT EXISTS `uservehicles` (
92 `Car_ID` int(5) NOT NULL AUTO_INCREMENT,
93 `OwnerName` varchar(30),
94 `CarName` varchar(30),
95 `CarModel` int(4),
96 `cReparacion` int(12),
97 `Status` int(2),
98 `Pos_X` float(12),
99 `Pos_Y` float(12),
100 `Pos_Z` float(12),
101 `Pos_R` float(12),
102 `pEngine` int(2) DEFAULT 0,
103 `pLights` int(2) DEFAULT 0,
104 `pAlarm` int(2) DEFAULT 0,
105 `pLock` int(2) DEFAULT 0,
106 `pBonnet` int(2) DEFAULT 0,
107 `pBoot` int(2) DEFAULT 0,
108 `pObjective` int(2) DEFAULT 0,
109 `dHealth` float(12) DEFAULT 1000.0,
110 `dPanels` int(12) DEFAULT 0,
111 `dDoors` int(12) DEFAULT 0,
112 `dLights` int(12) DEFAULT 0,
113 `dTires` int(12) DEFAULT 0,
114 `Color1` int(6),
115 `Color2` int(6),
116 `Spoiler` int(6),
117 `Hood` int(6),
118 `Roof` int(6),
119 `RightSideskirt` int(11),
120 `LeftSideskirt` int(11),
121 `Nitro` int(6),
122 `Lamps` int(6),
123 `Exhaust` int(6),
124 `Wheels` int(6),
125 `Stereo` int(6),
126 `Hidraulics` int(6),
127 `Paintjob` int(6),
128 `Bullbar` int(6),
129 `RealBullbars` int(6),
130 `FrontSign` int(6),
131 `FrontBullbars` int(6),
132 `Bullbars` int(6),
133 `RearBumper` int(6),
134 `LeftVents` int(6),
135 `RightVents` int(6),
136 `FrontBumper` int(6),
137 `weapon_1` int(4),
138 `ammo_1` int(4),
139 `weapon_2` int(4),
140 `ammo_2` int(4),
141 `weapon_3` int(4),
142 `ammo_3` int(4),
143 `weapon_4` int(4),
144 `ammo_4` int(4),
145 `weapon_5` int(4),
146 `ammo_5` int(4),
147 `Armour` float(12),
148 PRIMARY KEY(`Car_ID`)
149 );
150*/
151//============================================================================//
152
153 #include < a_samp >
154 #include < a_mysql >
155 #include < zcmd >
156
157//============================================================================//
158
159static
160 const
161 DB_HOST[] = "localhost", // - Host | IP donde se aloja la base de datos.
162 DB_USER[] = "root" , // - Usuario mediante el cual se accederá.
163 DB_PASSWORD[] = "" , // - Password para el ingreso con el usuario.
164 DB_DB[] = "wDealer" ; // - Nombre de la base de datos.
165
166//============================================================================//
167
168#define function::%0(%1) \
169 forward%0(%1); \
170 public%0(%1)
171
172#define MAX_DEALERS 10 // - Cantidad de concesionarios.
173#define MAX_DEALER_VEHICLES 13 // - Cantidad máxima de autos que pueden estar en venta.
174#define MAX_VEH_INDEALER ( 10 ) // - Cantidad de autos que puede haber en cada concesionario.
175#define MAX_VEH_PER_PLAYER ( 2 ) // - Cantidad máxima de autos por jugador.
176
177#define VEH_ENGINE ( 0 )
178#define VEH_LIGHTS ( 1 )
179#define VEH_ALARM ( 2 )
180#define VEH_LOCK ( 3 )
181#define VEH_BONNET ( 4 )
182#define VEH_BOOT ( 5 )
183#define VEH_OBJECTIVE ( 6 )
184
185//============================================================================//
186
187native sscanf(const data[], const format[], {Float,_}:...);
188native unformat(const data[], const format[], {Float,_}:...) = sscanf;
189
190//============================================================================//
191
192enum // - Dialogs.
193{
194 showAnounceVehicle, // 0 - Dialogo para mostrar cartel de venta del vehÃculo.
195 showPlayerVehicles, // 1 - Dialogo para visualizar los vehÃculos del usuario.
196 showMenuCreateDealer, // 2 - Dialogo para visualizar el menú de creación de concesionarios.
197 createDealerName, // 3 - Dialogo para cambiar el nombre del concesionario (creación).
198 showdealerInfoBox, // 4 - Dialogo para la compra de vehÃculos.
199 showMenuDealerEdit, // 5 - Dialogo para la edición de los concesionarios.
200 editDealerName // 6 - Dialogo para la edición del nombre del concesionario.
201};
202
203enum // - Threads.
204{
205 empty@queryReceived, // 0 - Para recibir las query's vacÃas ( sin parámetros ).
206 dealerDataAssign, // 1 - Para cargar los datos de los vehÃculos del concesionario.
207 dealerAssign, // 2 - Para asignar los datos de los concesionarios.
208 load@playerVehicles, // 3 - Para leer los vehÃculos del usuario.
209 sql@insertID, // 4 - Para asignar la ID en la tabla al vehÃculo creado.
210 sql_d@insertID, // 5 - Para asignar la ID en la tabla al vehÃculo de concesionario creado.
211 sql@dealerInsertID,
212};
213
214//============================================================================//
215
216enum dealerLoc
217{
218 id@sqlid, // - ID del concesionario en la tabla.
219 id@num, // - ID del concesionario en el servidor.
220 sz@nameDealer[0x1E], // - Nombre del concesionario.
221 d@vehicles, // - Cantidad de vehÃculos del concesionario.
222 Float:f@maxX, // - Coordenada X máxima.
223 Float:f@minX, // - Coordenada X mÃnima.
224 Float:f@maxY, // - Coordenada Y máxima.
225 Float:f@minY // - Coordenada Y mÃnima.
226};
227
228//============================================================================//
229
230enum dealerEnum
231{
232 inumdID, // - ID del vehÃculo en la tabla.
233 inumID, // - ID del vehÃculo en el servidor.
234 sCarName[0x1E], // - Nombre del vehÃculo.
235 inumDealer, // - Concesionario.
236 iModel, // - Modelo del vehÃculo.
237 iPrice, // - Costo del auto.
238 Float:fdPos_X, // - Coordenada x ( posición del auto en el concesionario ).
239 Float:fdPos_Y, // - Coordenada y ( || ).
240 Float:fdPos_Z, // - Coordenada z ( || ).
241 Float:fdPos_R // - Angúlo de rotación ( || ).
242};
243
244//============================================================================//
245
246enum trunkVeh // Maletero.
247{
248 tArmas[0b101], // - Slots para armas.
249 tMuniciones[0b101], // - Slots para municiones.
250 Float:tArmadura // - Slots para chaleco.
251};
252
253enum modsVeh
254{
255 mColores[0b10],
256 mSpoiler,
257 mHood,
258 mRoof,
259 mSideskirts[0b10],
260 mNitro,
261 mLamps,
262 mExhaust,
263 mWheels,
264 mStereo,
265 mHidraulics,
266 mPaintjob,
267 mBullbar,
268 mRealBullbars,
269 mFrontSign,
270 mFrontBullbars,
271 mBullbars,
272 mRearBumper,
273 mVents[0b10],
274 mFrontBumper
275};
276
277enum paramsV // Parámetros funcionales.
278{
279 pEngine,
280 pLights,
281 pAlarm,
282 ptAlarm,
283 pLock,
284 pBonnet,
285 pBoot,
286 pObjective
287};
288
289enum damageV // Daño del vehÃculo.
290{
291 Float:dHealth,
292 dPanels,
293 dDoors,
294 dLights,
295 dTires
296};
297
298enum carEnum
299{
300 inumcID, // - ID del vehÃculo en la tabla.
301 icnumID, // - ID del vehÃculo en el servidor.
302 sCarName[0x19], // - Nombre del vehÃculo.
303 sCarOwner[0x19], // - Nombre del dueño del vehÃculo.
304 idOwner, // - ID del dueño del vehÃculo.
305 iModel, // - Modelo del vehÃculo.
306 ipRepair, // - Costo de la reparación ( seguro ).
307 bool:status, // - false = VehÃculo destruido.
308 Float:fPos_X, // - Coordenada x ( posición del auto en el concesionario ).
309 Float:fPos_Y, // - Coordenada y ( || ).
310 Float:fPos_Z, // - Coordenada z ( || ).
311 Float:fPos_R, // - Angúlo de rotación ( || ).
312 paramsVeh[paramsV], // - Parámetros funcionales del vehÃculo.
313 damageVeh[damageV], // - Estatus de daño.
314 mods[modsVeh], // - Modificaciones del vehÃculo.
315 Maletero[trunkVeh] // - Maletero del vehÃculo.
316};
317
318//============================================================================//
319
320new
321 cHandle , // - Para realizar la conexión.
322 paramsvDealer [ MAX_VEHICLES ][ dealerEnum ], // - Almacenará los datos de los autos del/los concesionarios.
323 playerVehicle [ MAX_PLAYERS ][MAX_VEH_PER_PLAYER][carEnum], // - Almacenará los datos de los autos de los usuarios.
324 dealerLocations [ MAX_DEALERS+1 ][ dealerLoc ], // - Almacenará los datos de los concesionarios.
325 d@optionsEdit [ MAX_PLAYERS ][ 0b101 ], // - Almacenará los valores para los menús de edición.
326 i@timerUpDealer, // - Timer que guarda los vehÃculos del concesionario cada X tiempo.
327 obs@Venta [ MAX_PLAYERS ][ 0b100 ], // - Almacenará la ID del vehÃculo en venta que vamos a comprar.
328
329 //Piezas de modificación.
330 Spoiler[20] = {
331 1000, 1001, 1002, 1003,
332 1014, 1015, 1016, 1023,
333 1049, 1050, 1058, 1060,
334 1138, 1139, 1146, 1147,
335 1158, 1162, 1163, 1164,
336 },
337 Hood[4] = {
338 1004, 1005, 1011, 1012
339 },
340 Roof[17] = {
341 1006, 1032, 1033, 1035,
342 1038, 1053, 1054, 1055,
343 1061, 1067, 1068, 1088,
344 1091, 1103, 1128, 1130,
345 1131
346 },
347 RightSideskirt[22] = {
348 1007, 1026, 1031, 1036,
349 1041, 1042, 1047, 1048,
350 1056, 1057, 1069, 1070,
351 1090, 1093, 1095, 1106,
352 1108, 1118, 1119, 1122,
353 1133, 1134
354 },
355 LeftSideskirt[20] = {
356 1017, 1027, 1030, 1039,
357 1040, 1051, 1052, 1062,
358 1063, 1071, 1072, 1094,
359 1099, 1101, 1102, 1107,
360 1120, 1121, 1124, 1137
361 },
362 Nitro[3] = {
363 1008, 1009, 1010
364 },
365 Lamps[2] = {
366 1013, 1024
367 },
368 Exhaust[29] = {
369 1018, 1019, 1020, 1021,
370 1022, 1028, 1029, 1034,
371 1037, 1043, 1044, 1045,
372 1046, 1059, 1064, 1065,
373 1066, 1089, 1092, 1104,
374 1105, 1113, 1114, 1126,
375 1127, 1129, 1132, 1135,
376 1136
377 },
378 Wheels[17] = {
379 1025, 1073, 1074, 1075,
380 1076, 1077, 1078, 1079,
381 1080, 1081, 1082, 1083,
382 1084, 1085, 1096, 1097,
383 1098
384 },
385 Stereo = 1086,
386 Hidraulics = 1087,
387 Bullbar = 1100,
388 RealBullbars[2] = {
389 1109, 1110
390 },
391 FrontSign[2] = {
392 1111, 1112
393 },
394 FrontBullbars[2]={
395 1115, 1116
396 },
397 FrontBumper[23] ={
398 1117, 1152, 1153, 1155,
399 1157, 1160, 1165, 1166,
400 1169, 1170, 1171, 1172,
401 1173, 1174, 1175, 1179,
402 1181, 1182, 1185, 1188,
403 1189, 1190, 1191
404 },
405 Bullbars = 1125,
406 RearBumper[22] = {
407 1140, 1141, 1148, 1149,
408 1150, 1151, 1154, 1156,
409 1159, 1161, 1167, 1168,
410 1176, 1177, 1178, 1180,
411 1183, 1184, 1186, 1187,
412 1192, 1193
413 },
414 RightVents[2] = {
415 1143, 1145
416 },
417 LeftVents[2] = {
418 1142, 1144
419 },
420 Float:paynspray[][] = { //Pay N'Spray locations.
421 {1025.05 , -1024.23 , 32.1}, // LS Temple
422 {487.68 , -1740.87 , 11.13}, // LS Santa Maria
423 {-1420.73 , 2583.37 , 55.56}, // El Quebrados
424 {-1904.39 , 284.97 , 40.75}, // Wang Cars
425 {-2425.91 , 1022.33 , 50.10}, // Juniper Hill
426 {1975.60 , 2162.16 , 10.77}, // LV Redsands
427 {2065.38 , -1831.51 , 13.25}, // Idlewood
428 {-99.55 , 1118.36 , 19.44}, // Fort Carson
429 {721.07 , -455.94 , 16.04}, // Dillimore
430 {2393.74 , 1493.01 , 10.52} // LV Unused (Pyramid)
431 };
432
433static const n@Vehicles[0b11010100][] = {
434 !"Landstalker" , !"Bravura" , !"Buffalo" , !"Linerunner" , !"Perennial" , !"Sentinel" , !"Dumper" ,
435 !"Firetruck" , !"Trashmaster" , !"Stretch" , !"Manana" , !"Infernus" , !"Voodoo" , !"Pony" ,
436 !"Mule" , !"Cheetah" , !"Ambulance" , !"Leviathan" , !"Moonbeam" , !"Esperanto" , !"Taxi" ,
437 !"Washington" , !"Bobcat" , !"Mr Whoopee" , !"BF Injection" , !"Hunter" , !"Premier" , !"Enforcer" ,
438 !"Securicar" , !"Banshee" , !"Predator" , !"Bus" , !"Rhino" , !"Barracks" , !"Hotknife" ,
439 !"Trailer" , !"Previon" , !"Coach" , !"Cabbie" , !"Stallion" , !"Rumpo" , !"RC Bandit" ,
440 !"Romero" , !"Packer" , !"Monster" , !"Admiral" , !"Squalo" , !"Seasparrow" , !"Pizzaboy" ,
441 !"Tram" , !"Trailer" , !"Turismo" , !"Speeder" , !"Reefer" , !"Tropic" , !"Flatbed" ,
442 !"Yankee" , !"Caddy" , !"Solair" , !"Berkley's RC Van", !"Skimmer" , !"PCJ-600" , !"Faggio" ,
443 !"Freeway" , !"RC Baron" , !"RC Raider" , !"Glendale" , !"Oceanic" , !"Sanchez" , !"Sparrow" ,
444 !"Patriot" , !"Quad" , !"Coastguard" , !"Dinghy" , !"Hermes" , !"Sabre" , !"Rustler" ,
445 !"ZR-350" , !"Walton" , !"Regina" , !"Comet" , !"BMX" , !"Burrito" , !"Camper" ,
446 !"Marquis" , !"Baggage" , !"Dozer" , !"Maverick" , !"News Chopper" , !"Rancher" , !"FBI Rancher" ,
447 !"Virgo" , !"Greenwood" , !"Jetmax" , !"Hotring" , !"Sandking" , !"Blista Compact" , !"Police Maverick",
448 !"Boxville" , !"Benson" , !"Mesa" , !"RC Goblin" , !"Hotring Racer" , !"Hotring Racer" , !"Bloodring Banger",
449 !"Rancher" , !"Super GT" , !"Elegant" , !"Journey" , !"Bike" , !"Mountain Bike" , !"Beagle" ,
450 !"Cropdust" , !"Stunt" , !"Tanker" , !"RoadTrain" , !"Nebula" , !"Majestic" , !"Buccaneer" ,
451 !"Shamal" , !"Hydra" , !"FCR-900" , !"NRG-500" , !"HPV1000" , !"Cement Truck" , !"Tow Truck" ,
452 !"Fortune" , !"Cadrona" , !"FBI Truck" , !"Willard" , !"Forklift" , !"Tractor" , !"Combine" ,
453 !"Feltzer" , !"Remington" , !"Slamvan" , !"Blade" , !"Freight" , !"Streak" , !"Vortex" ,
454 !"Vincent" , !"Bullet" , !"Clover" , !"Sadler" , !"Firetruck" , !"Hustler" , !"Intruder" ,
455 !"Primo" , !"Cargobob" , !"Tampa" , !"Sunrise" , !"Merit" , !"Utility Truck" , !"Nevada" ,
456 !"Yosemite" , !"Windsor" , !"Monster" , !"Monster" , !"Uranus" , !"Jester" , !"Sultan" ,
457 !"Stratum" , !"Elegy" , !"Raindance" , !"RCTiger" , !"Flash" , !"Tahoma" , !"Savanna" ,
458 !"Bandito" , !"Freight" , !"Trailer" , !"Kart" , !"Mower" , !"Dune" , !"Sweeper" ,
459 !"Broadway" , !"Tornado" , !"AT-400" , !"DFT-30" , !"Huntley" , !"Stafford" , !"BF-400" ,
460 !"Newsvan" , !"Tug" , !"Trailer" , !"Emperor" , !"Wayfarer" , !"Euros" , !"Hotdog" ,
461 !"Club" , !"Trailer" , !"Trailer" , !"Andromada" , !"Dodo" , !"RC Cam" , !"Launch" ,
462 !"Police Car (LSPD)", !"Police Car (SFPD)", !"Police Car (LVPD)", !"Police Ranger" , !"Picador" , !"S.W.A.T. Van" , !"Alpha" ,
463 !"Phoenix" , !"Glendale" , !"Sadler" , !"Luggage Trailer" ,!"Luggage Trailer", !"Stair Trailer" , !"Boxville" ,
464 !"Farm Plow" , !"Utility Trailer"
465};
466
467//============================================================================//
468
469public OnFilterScriptInit()
470{
471 /*--------------------------------------------------
472
473 * OnFilterScriptInit
474
475 * Función:
476
477 - Inicia el timer para almacenar los vehÃculos de los concesionarios.
478 - Ejecuta la función para verificar la conexión con la base de datos.
479 - Deshabilida las funciones del vehÃculo por defecto.
480
481 --------------------------------------------------*/
482
483 ManualVehicleEngineAndLights();
484 i@timerUpDealer = SetTimer("save@DealersData", ( 3516 << 8) /*13000*/, false);
485 return verifyConnection(), 0x01;
486}
487
488//============================================================================//
489
490public OnFilterScriptExit()
491{
492 /*--------------------------------------------------
493
494 * OnFilterScriptExit
495 * Función:
496 - Finaliza el timer con el cual se actualizaban los datos de los concesionarios.
497 - Cierra la conexión mySQL.
498
499 --------------------------------------------------*/
500
501 KillTimer( i@timerUpDealer );
502 return mysql_close(cHandle), 0x01;
503}
504
505//============================================================================//
506
507public OnPlayerConnect(playerid)
508{
509 /*--------------------------------------------------
510
511 * OnPlayerConnect
512 * Params :
513 - playerid
514 * Función:
515 - Reinicia las variables de los vehÃculos al usuario que se conecta (playerid).
516 - Llama el callback que cargará los vehÃculos personales del usuario
517 ( sà es que existen ) alojados en la tabla de la base de datos.
518
519 --------------------------------------------------*/
520 resetvar@playerVehicles( playerid );
521 return CallLocalFunction("loadPlayerVehicles", "d", playerid), 0x01;
522}
523
524//============================================================================//
525
526public OnPlayerDisconnect(playerid, reason)
527{
528 /*--------------------------------------------------
529
530 * OnPlayerDisconnect
531 * Params:
532 - playerid
533 - reason
534 * Función:
535 - Llama a la función que guardará los vehÃculos del jugador en la tabla.
536
537 --------------------------------------------------*/
538
539 save@playerVehicles( playerid );
540 return 1;
541}
542
543//============================================================================//
544
545public OnPlayerUpdate(playerid)
546{
547 /*--------------------------------------------------
548
549 * OnPlayerUpdate
550 * Params:
551 - playerid
552 * Función:
553 - Actualizará las variables del color cuando el
554 vehÃculo sea retocado en el Pay N'Spray.
555
556 --------------------------------------------------*/
557
558 if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
559 {
560 static
561 Float:vHealth;
562
563 GetVehicleHealth(GetPlayerVehicleID(playerid), vHealth);
564 if(vHealth == 1000)
565 {
566 SetVehicleHealth(GetPlayerVehicleID(playerid), 999);
567 for(new i = sizeof(paynspray)-1; i > -1; --i)
568 {
569 if(IsPlayerInRangeOfPoint(playerid, 10, paynspray[i][0], paynspray[i][1], paynspray[i][2]))
570 {
571 CallRemoteFunction("OnVehicleRespray", "iiii", playerid, GetPlayerVehicleID(playerid), -1, -1);
572 return 1;
573 }
574 else continue;
575 }
576 }
577 }
578 return 1;
579}
580
581//============================================================================//
582
583public OnVehicleDeath(vehicleid, killerid)
584{
585 /*--------------------------------------------------
586
587 * OnVehicleDeath
588 * Params:
589 - playerid
590 - killerid
591 * Función:
592 - Mediante un loop obtengo el vehÃculo y el slot correspondiente
593 del vehÃculo que se destruyó, estableciendo valores a las variables
594 las cuales me servirán para la restitución del vehÃculo.
595
596 --------------------------------------------------*/
597
598 for( new i = GetMaxPlayers()-1; i > -1; --i )
599 {
600 static
601 j;
602 j = -1;
603
604 while( ++j < MAX_VEH_PER_PLAYER )
605 {
606 if( playerVehicle[i][j][icnumID] == vehicleid )
607 {
608 SetVehicleParamsForAll( playerVehicle[i][j][icnumID], false, false );
609 DestroyVehicle(playerVehicle[i][j][icnumID]);
610 playerVehicle[i][j][status] = false;
611 playerVehicle[i][j][icnumID] = -1;
612 playerVehicle[i][j][damageVeh][dPanels] = 0;
613 playerVehicle[i][j][damageVeh][dDoors] = 0;
614 playerVehicle[i][j][damageVeh][dLights] = 0;
615 playerVehicle[i][j][damageVeh][dTires] = 0;
616 playerVehicle[i][j][damageVeh][dHealth] = 1000.0;
617 break;
618 }
619 else continue;
620 }
621 }
622 return 1;
623}
624
625//============================================================================//
626
627public OnPlayerStateChange(playerid, newstate, oldstate)
628{
629 /*--------------------------------------------------
630
631 * OnPlayerStateChange
632 * Params:
633 - playerid
634 - newstate
635 - Oldstate
636 * Función:
637 - Detecta sà un jugador ingresó a un vehÃculo de pruebas.
638 - Al confirmar lo anterior se setean unos parámetros al vehÃculo
639 y se muestra el anuncio de venta del mismo ( sà es de concesionario ).
640
641 --------------------------------------------------*/
642
643 if((newstate & PLAYER_STATE_DRIVER) && (oldstate & PLAYER_STATE_ONFOOT))
644 {
645 if( 0 < paramsvDealer[ GetPlayerVehicleID(playerid) ][ inumDealer ] <= MAX_DEALERS )
646 {
647 static
648 sz@vDialogCar[0x190],
649 var@Temp[0x80];
650
651 sz@vDialogCar[0] = '\0', var@Temp[0] = '\0';
652
653 TogglePlayerControllable( playerid, false );
654 SetVehicleParamsForAll( GetPlayerVehicleID(playerid), false, true );
655 obs@Venta[ playerid ][ 1 ] = paramsvDealer[ GetPlayerVehicleID( playerid ) ][ inumID ];
656
657 format(var@Temp, sizeof var@Temp, " \t{FF0000}Nombre: {FFFFFF}%s.\n", paramsvDealer[GetPlayerVehicleID(playerid)][sCarName]);
658 strcat(sz@vDialogCar, var@Temp, 0x136);
659 format(var@Temp, sizeof var@Temp, " \t{FF0000}Precio: {FFFFFF}$%i.\n", paramsvDealer[GetPlayerVehicleID(playerid)][iPrice]);
660 strcat(sz@vDialogCar, var@Temp, 0x136);
661 strcat(sz@vDialogCar, "\t {FF0000}Bienvenido al {FFFFFF}vehÃculo de pruebas.\n", 0x136);
662 strcat(sz@vDialogCar, " {FFFFFF}¿Deseas comprar este vehÃculo ? Pulsa '{008000}Aceptar{FFFFFF}' de lo contrario, '{008000}Cancelar{FFFFFF}'\n.", 0x136);
663
664 format(var@Temp, sizeof var@Temp, "{FF0000}[{FFD700}wDealer{FF0000}]{FFFFFF} ConcesionarÃa N°%d", paramsvDealer[GetPlayerVehicleID(playerid)][inumDealer]);
665
666 ShowPlayerDialog( playerid, showAnounceVehicle, DIALOG_STYLE_MSGBOX, var@Temp, sz@vDialogCar, "Aceptar.", "Cancelar.");
667 }
668 }
669 return 0x01;
670}
671
672//============================================================================//
673
674public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
675{
676 /*---------------------------------------------------
677
678 * OnVehicleRespray.
679 *Params:
680 - playerid
681 - vehicleid
682 - color1
683 - color2
684 *Función:
685 - Mediante dos bucles (recorriendo los jugadores y los vehÃculos
686 de estos, se actualiza el la variable del nuevo paintjob
687 añadido a los vehÃculos.
688
689 --------------------------------------------------*/
690 for( new i = MAX_PLAYERS-1; i > -1; --i )
691 {
692 static
693 j;
694 j = -1;
695
696 while( ++j < MAX_VEH_PER_PLAYER )
697 {
698 if((( playerVehicle[i][j][status] ) && ( playerVehicle[i][j][icnumID] == vehicleid )))
699 {
700 playerVehicle[i][j][mods][mPaintjob] = paintjobid;
701 break;
702 }
703 else continue;
704 }
705 }
706 return 1;
707}
708
709//============================================================================//
710
711public OnVehicleRespray(playerid, vehicleid, color1, color2)
712{
713 /*---------------------------------------------------
714
715 * OnVehicleRespray.
716 *Params:
717 - playerid
718 - vehicleid
719 - color1
720 - color2
721 *Función:
722 - Mediante dos bucles (recorriendo los jugadores y los vehÃculos
723 de estos, se actualiza la variable del nuevo color de pintura añadida
724 a los vehÃculos.
725
726 --------------------------------------------------*/
727
728 for( new i = MAX_PLAYERS-1; i > -1; --i )
729 {
730 static
731 j;
732 j = -1;
733
734 while( ++j < MAX_VEH_PER_PLAYER )
735 {
736 if((( playerVehicle[i][j][status] ) && ( playerVehicle[i][j][icnumID] == vehicleid )))
737 {
738 playerVehicle[i][j][mods][mColores][0] = color1;
739 playerVehicle[i][j][mods][mColores][1] = color2;
740 break;
741 }
742 else continue;
743 }
744 }
745 return 1;
746}
747
748//============================================================================//
749
750public OnVehicleMod(playerid, vehicleid, componentid)
751{
752 /*--------------------------------------------------
753 * OnVehicleMod
754 *Params:
755 - playerid
756 - vehicleid
757 - componentid
758 *Función:
759 - Mediante un bucle se verifica que los componentes cargados ( de la tabla )
760 para el vehÃculo sean correctos, de lo contrario, se le asigna un valor
761 correcto.
762
763 --------------------------------------------------*/
764 for( new i = MAX_PLAYERS-1; i > -1; --i )
765 {
766 static
767 j;
768 j = -1;
769
770 while( ++j < MAX_VEH_PER_PLAYER )
771 {
772 if((( playerVehicle[i][j][status] ) && ( playerVehicle[i][j][icnumID] == vehicleid )))
773 {
774 switch( GetModType( componentid ) )
775 {
776 case 1: playerVehicle[i][j][mods][mSpoiler] = componentid;
777 case 2: playerVehicle[i][j][mods][mRoof] = componentid;
778 case 3: playerVehicle[i][j][mods][mSideskirts][0] = componentid;
779 case 4: playerVehicle[i][j][mods][mSideskirts][1] = componentid;
780 case 5: playerVehicle[i][j][mods][mNitro] = componentid;
781 case 6: playerVehicle[i][j][mods][mLamps] = componentid;
782 case 7: playerVehicle[i][j][mods][mExhaust] = componentid;
783 case 8: playerVehicle[i][j][mods][mWheels] = componentid;
784 case 9: playerVehicle[i][j][mods][mStereo] = componentid;
785 case 10: playerVehicle[i][j][mods][mHidraulics] = componentid;
786 case 11: playerVehicle[i][j][mods][mPaintjob] = componentid;
787 case 12: playerVehicle[i][j][mods][mBullbar] = componentid;
788 case 13: playerVehicle[i][j][mods][mRealBullbars] = componentid;
789 case 14: playerVehicle[i][j][mods][mFrontSign] = componentid;
790 case 15: playerVehicle[i][j][mods][mFrontBullbars] = componentid;
791 case 16: playerVehicle[i][j][mods][mBullbars] = componentid;
792 case 17: playerVehicle[i][j][mods][mRearBumper] = componentid;
793 case 18: playerVehicle[i][j][mods][mVents][0] = componentid;
794 case 19: playerVehicle[i][j][mods][mVents][1] = componentid;
795 case 20: playerVehicle[i][j][mods][mFrontBumper] = componentid;
796 case 21: playerVehicle[i][j][mods][mHood] = componentid;
797 default: continue;
798 }
799 break;
800 }
801 else continue;
802 }
803 }
804 return 1;
805}
806
807//============================================================================//
808
809public OnVehicleStreamIn(vehicleid, forplayerid)
810{
811 /*--------------------------------------------------
812 * OnVehicleStreamIn
813 *Params:
814 - vehicleid
815 - forplayerid
816 *Función:
817 - Mediante un bucle que recorrerá todos los usuarios & vehÃculos
818 seteamos el valor de las puertas ( abiertas | cerradas ) de acuerdo
819 a el valor de su variable.
820
821 --------------------------------------------------*/
822
823 for( new j = GetMaxPlayers()-1; j > -1; --j )
824 {
825 static
826 i;
827 i = -1;
828
829 while( ++i < MAX_VEH_PER_PLAYER )
830 {
831 if( playerVehicle[j][i][icnumID] == vehicleid )
832 {
833 SetVehicleParamsEx( vehicleid, playerVehicle[j][i][paramsVeh][pEngine], playerVehicle[j][i][paramsVeh][pLights],
834 playerVehicle[j][i][paramsVeh][pAlarm], playerVehicle[j][i][paramsVeh][pLock],
835 playerVehicle[j][i][paramsVeh][pBonnet], playerVehicle[j][i][paramsVeh][pBoot],
836 playerVehicle[j][i][paramsVeh][pObjective]);
837 }
838 else continue;
839 }
840 }
841 return 1;
842}
843
844//============================================================================//
845
846obtain@dealerVehicles( dealerid )
847{
848 /*--------------------------------------------------
849
850 * obtain@dealerVehicles
851 * Params:
852 - dealerid
853 * Función:
854 - Obtiene la cantidad de vehÃculos creados pertenecientes
855 al concesionario ingresado (dealerid).
856
857 --------------------------------------------------*/
858
859 static
860 i,
861 count;
862 i = 0, count = 0;
863
864 while( ++i < MAX_VEHICLES )
865 {
866 if( i == 0 ) continue;
867 if( paramsvDealer[ i ][ inumDealer ] == dealerid ) count++;
868 else continue;
869 }
870 return count;
871}
872
873//============================================================================//
874
875function:: save@dealerLocations()
876{
877 /*--------------------------------------------------
878
879 * save@dealerLocations
880 * Params:
881 - Sin parámetros.
882 * Función:
883 - Almacena la información de los concesionarios
884 creados.
885
886 --------------------------------------------------*/
887
888 static
889 query[0x100],
890 count;
891
892 count = 0;
893
894 for( new i = MAX_DEALERS-1; i >= 0; i--)
895 {
896 dealerLocations[i][d@vehicles] = obtain@dealerVehicles( i );
897 if( dealerLocations[ i ][ id@sqlid ] < 1 ) continue;
898 else
899 {
900
901 mysql_format( cHandle, query, "UPDATE `dealerLocations` SET `DealerName` = '%e', `countVehs` = %d, `max_X` = %f, `min_X` = %f, `max_Y` = %f, `min_Y` = %f WHERE `DealerID` = %d;",
902 dealerLocations[i][sz@nameDealer],
903 dealerLocations[i][d@vehicles],
904 dealerLocations[i][f@maxX],
905 dealerLocations[i][f@minX],
906 dealerLocations[i][f@maxY],
907 dealerLocations[i][f@minY],
908 dealerLocations[i][id@sqlid]);
909 mysql_function_query( cHandle, query, false, "OnQueryFinish", "d", empty@queryReceived);
910 count ++;
911 }
912 }
913 return printf("[wDealer]: Se han guardado %d concesionarios.", count-1);
914}
915
916public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
917{
918 static
919 sz@message[0x7D];
920
921 switch( dialogid )
922 {
923 case showAnounceVehicle:
924 {
925 if( !response )
926 {
927 cmd_salirvcar( playerid );
928 SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer{FF0000}]{FFFFFF} Has salido del vehÃculo de pruebas.");
929 }
930 else cmd_buyvehicle( playerid );
931 }
932 case showMenuCreateDealer:
933 {
934 if( !response )
935 {
936 mysql_format( cHandle, sz@message, "DELETE FROM `dealerLocations` WHERE `DealerID` = %d", dealerLocations[d@optionsEdit[playerid][0]][id@sqlid]);
937 mysql_function_query( cHandle, sz@message, false, "OnQueryFinish", "d", empty@queryReceived);
938 for( new i = 4; i > -1; --i)
939 {
940 d@optionsEdit[playerid][i] = 0;
941 }
942 CallLocalFunction("save@dealerLocations", #);
943 SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer{FF0000}]{FFFFFF} Has salido de la edición de concesionarios.");
944 }
945 else
946 {
947 switch( listitem )
948 {
949 case 0: ShowPlayerDialog( playerid, createDealerName, DIALOG_STYLE_INPUT, "{FF0000}[{FFD700}wDealer{FF0000}]{FFFFFF} Cambio de nombre.", "Digite el nuevo nombre para este concesionario.", "Aceptar.", "Atrás.");
950 case 1:
951 {
952 d@optionsEdit[playerid][0b100] = 1;
953 SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Vaya a la primera posición, pulse 'Y' cuando se encuentre listo o pulse 'ctrl' para finalizar.");
954 }
955 case 2:
956 {
957 CallLocalFunction("save@dealerLocations", #);
958 for( new i = 4; i > -1; --i)
959 {
960 d@optionsEdit[playerid][i] = 0;
961 }
962 SendClientMessage(playerid, -1, "[] Concesionario guardado");
963 }
964 }
965 }
966 }
967 case createDealerName:
968 {
969 if( !response )
970 {
971 format( sz@message, sizeof sz@message, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Menú de edición - Concesionario %d", d@optionsEdit[playerid][0]);
972 ShowPlayerDialog( playerid, showMenuCreateDealer, DIALOG_STYLE_LIST, sz@message, " 1)\tNombre del concesionario.\n 2)\tPosición del concesionario.\n 3)\tGuardar concesionario.\n", "Seleccionar.", "Cancelar.");
973 }
974 else
975 {
976 if( isnull( inputtext ) )
977 ShowPlayerDialog( playerid, createDealerName, DIALOG_STYLE_INPUT, "{FF0000}[{FFD700}wDealer{FF0000}]{FFFFFF} Cambio de nombre.", "Digite el nuevo nombre para este concesionario.", "Aceptar.", "Atrás.");
978 else
979 {
980 strmid( dealerLocations[d@optionsEdit[playerid][0]][sz@nameDealer], inputtext, 0, strlen(inputtext), 0x1E);
981
982 format( sz@message, sizeof sz@message, "\t Concesionario actualizado.\n 1) ID: %d.\n 2) Nombre: %s.\n 3) Vehiculos: %d.\n",
983 d@optionsEdit[playerid][0], dealerLocations[d@optionsEdit[playerid][0]][sz@nameDealer],
984 dealerLocations[d@optionsEdit[playerid][0]][d@vehicles]);
985
986 ShowPlayerDialog( playerid, showdealerInfoBox, DIALOG_STYLE_MSGBOX, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Menú de edición", sz@message, "Aceptar.", "Guardar.");
987 }
988 }
989 }
990 case showdealerInfoBox:
991 {
992 if( !response )
993 {
994 CallLocalFunction("save@dealerLocations", #);
995 for( new i = 4; i > -1; --i)
996 {
997 d@optionsEdit[playerid][i] = 0;
998 }
999 }
1000 else
1001 {
1002 format( sz@message, sizeof sz@message, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Menú de edición - Concesionario %d", d@optionsEdit[playerid][0]);
1003 ShowPlayerDialog( playerid, showMenuCreateDealer, DIALOG_STYLE_LIST, sz@message, " 1)\tNombre del concesionario.\n 2)\tPosición del concesionario.\n 3)\tGuardar concesionario.\n", "Seleccionar.", "Cancelar.");
1004 }
1005 }
1006 case showMenuDealerEdit:
1007 {
1008 if(!response)
1009 {
1010 SendClientMessage(playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Has salido del menú de edición de concesionario, todos los cambios se han perdido.");
1011 d@optionsEdit[playerid][0] = 0;
1012 d@optionsEdit[playerid][0b10] = 0;
1013 }
1014 else
1015 {
1016 switch(listitem)
1017 {
1018 case 0: ShowPlayerDialog( playerid, editDealerName, DIALOG_STYLE_INPUT, "{FF0000}[{FFD700}wDealer{FF0000}]{FFFFFF} Cambio de nombre.", "Digite el nuevo nombre para este concesionario.", "Aceptar.", "Atrás.");
1019 case 1:
1020 {
1021 d@optionsEdit[playerid][0b100] = 1;
1022 d@optionsEdit[playerid][0b10] = 1;
1023 SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Menú de edición de posiciones.");
1024 SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Vaya a la primera posición, pulse 'Y' cuando se encuentre listo o pulse 'ctrl' para finalizar.");
1025 }
1026 case 2:
1027 {
1028 mysql_format( cHandle, sz@message, "DELETE FROM `dealerLocations` WHERE `DealerID` = %d", dealerLocations[d@optionsEdit[playerid][0]][id@sqlid]);
1029 mysql_function_query( cHandle, sz@message, false, "OnQueryFinish", "d", empty@queryReceived);
1030 new i = -1;
1031 while( dealerLoc:++i < dealerLoc ) {
1032 dealerLocations[d@optionsEdit[playerid][0]][dealerLoc:i] = 0;
1033 }
1034 for(i = 4; i > -1; --i)
1035 {
1036 d@optionsEdit[playerid][i] = 0;
1037 }
1038 CallLocalFunction("save@dealerLocations", #);
1039 SendClientMessage(playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Has eliminado el concesionario. Has salido del menú de edición.");
1040 }
1041 case 3:
1042 {
1043 CallLocalFunction("save@dealerLocations", #);
1044 for( new i = 4; i > -1; --i)
1045 {
1046 d@optionsEdit[playerid][i] = 0;
1047 }
1048 }
1049 }
1050 }
1051 }
1052 case editDealerName:
1053 {
1054 if( !response )
1055 {
1056 format( sz@message, sizeof sz@message, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Menú de edición - Concesionario %d", d@optionsEdit[playerid][0]);
1057 ShowPlayerDialog(playerid, showMenuDealerEdit, DIALOG_STYLE_LIST, sz@message, "1)\t Nombre del concesionario.\n 2)\tPosicion del concesionario.\n 3)\tEliminar concesionario.\n -> Guardar cambios.", "Seleccionar.", "Cancelar.");
1058 }
1059 else
1060 {
1061 if( isnull( inputtext ) )
1062 ShowPlayerDialog( playerid, editDealerName, DIALOG_STYLE_INPUT, "{FF0000}[{FFD700}wDealer{FF0000}]{FFFFFF} Cambio de nombre.", "Digite el nuevo nombre para este concesionario.", "Aceptar.", "Atrás.");
1063 else
1064 {
1065 strmid( dealerLocations[d@optionsEdit[playerid][0]][sz@nameDealer], inputtext, 0, strlen(inputtext), 0x1E);
1066 SendClientMessage(playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} ¡Nombre actualizado!.");
1067 format( sz@message, sizeof sz@message, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Menú de edición - Concesionario %d", d@optionsEdit[playerid][0]);
1068 ShowPlayerDialog(playerid, showMenuDealerEdit, DIALOG_STYLE_LIST, sz@message, "1)\t Nombre del concesionario.\n 2)\tPosicion del concesionario.\n 3)\tEliminar concesionario.\n -> Guardar cambios.", "Seleccionar.", "Cancelar.");
1069 }
1070 }
1071 }
1072 default: return 0;
1073 }
1074 return 0;
1075}
1076
1077public OnPlayerKeyStateChange( playerid, newkeys, oldkeys )
1078{
1079 /*--------------------------------------------------
1080
1081 * OnPlayerKeyStateChange
1082 * Params:
1083 - playerid
1084 - newkeys
1085 - oldkeys
1086 * Función:
1087 - Es empleada para tomar las posiciones del concesionario
1088 cuando éste se crea o se edita, se hace un cálculo de
1089 comparación básico para determinar xMin, yMin, xMax, yMax.
1090
1091 --------------------------------------------------*/
1092
1093 if( d@optionsEdit[playerid][0b100] )
1094 {
1095 if( newkeys & KEY_FIRE )
1096 ShowPlayerDialog( playerid, showMenuCreateDealer, DIALOG_STYLE_LIST, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Menú de edición de concesionario."," 1)\tNombre del concesionario.\n 2)\tPosición del concesionario.\n", "Seleccionar.", "Cancelar.");
1097 else if( newkeys & KEY_YES )
1098 {
1099 static
1100 Float:f@positions[0b10][0b11];
1101 if( d@optionsEdit[playerid][0b100] == 1 )
1102 {
1103 GetPlayerPos( playerid, f@positions[0][0], f@positions[0][1], f@positions[0][0b10]);
1104 d@optionsEdit[playerid][0b100] = 2;
1105 SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Vaya a la segunda posición, pulse 'Y' cuando se encuentre listo.");
1106 }
1107 else if ( d@optionsEdit[playerid][0b100] == 2 )
1108 {
1109 GetPlayerPos( playerid, f@positions[1][0], f@positions[1][1], f@positions[1][0b10]);
1110
1111 dealerLocations[d@optionsEdit[playerid][0]][f@maxX] = ((f@positions[0][0] > f@positions[1][0]) ? (f@positions[0][0]) : (f@positions[1][0]));
1112
1113 dealerLocations[d@optionsEdit[playerid][0]][f@minX] = ((f@positions[0][0] < f@positions[1][0]) ? (f@positions[0][0]) : (f@positions[1][0]));
1114
1115 dealerLocations[d@optionsEdit[playerid][0]][f@maxY] = ((f@positions[0][1] > f@positions[1][1]) ? (f@positions[0][1]) : (f@positions[1][1]));
1116 dealerLocations[d@optionsEdit[playerid][0]][f@minY] = ((f@positions[0][1] < f@positions[1][1]) ? (f@positions[0][1]) : (f@positions[1][1]));
1117
1118 SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Coordenadas obtenidas correctamente.");
1119
1120 if(d@optionsEdit[playerid][0b10] == 1) ShowPlayerDialog(playerid, showMenuDealerEdit, DIALOG_STYLE_LIST, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Menu de edición.", "1)\t Nombre del concesionario.\n 2)\tPosicion del concesionario.\n 3)\tEliminar concesionario.\n -> Guardar cambios.", "Seleccionar.", "Cancelar.");
1121 else CallLocalFunction("OnDialogResponse","dddds", playerid, createDealerName, 1, 1, dealerLocations[d@optionsEdit[playerid][0]][sz@nameDealer]);
1122 }
1123 }
1124 }
1125 return 1;
1126}
1127
1128//============================================================================//
1129
1130function:: verifyConnection()
1131{
1132 /*--------------------------------------------------
1133
1134 * verifiConnection
1135 *Params:
1136 - No params.
1137 * Función:
1138 - Realiza la conexión con la base de datos.
1139 - Verifica que la conexión se haya realizado correctamente.
1140
1141 --------------------------------------------------*/
1142
1143 cHandle = mysql_connect( DB_HOST, DB_USER, DB_DB, DB_PASSWORD );
1144 print("\n\t||=============[ wDealer/Ownership ]==============||\n");
1145 if( 0 <= mysql_ping(cHandle) < 0b10 ) {
1146
1147 connectUpdate:
1148 mysql_debug( true );
1149 print("\t[mySQL] - Conexión con la base de datos '"#DB_DB"' realizada. \n\t\t\twDealership iniciado.");
1150 CallLocalFunction( "loadDealersData", #);
1151 }
1152 else {
1153
1154 print("\t[mySQL - ¡Warning!] - La conexión con la base de datos '"#DB_DB"' no pudo verificarse. \n\t\t\tReintentando en 5 segundos.");
1155 sleep_ex( 0x271 << 0b11 );
1156 cHandle = mysql_connect( DB_HOST, DB_USER, DB_DB, DB_PASSWORD );
1157
1158 if( 0 <= mysql_ping(cHandle) < 0b10 ) goto connectUpdate;
1159 else {
1160
1161 print("\t[mySQL - ¡Warning!] - No se logro la conexión con la base de datos '"#DB_DB"'. \n\twDealership no puede iniciarse.");
1162 return SendRconCommand("exit"), false;
1163 }
1164 }
1165 print("\n\t||================================================||\n\n");
1166 return true;
1167}
1168
1169//============================================================================//
1170
1171function:: OnQueryFinish( threadID, extraid )
1172{
1173 /*--------------------------------------------------
1174
1175 * OnQueryFinish
1176 * Params:
1177 - threadID
1178 - extraid
1179 * Función:
1180 - Este callback recibirá los datos que el plugin mysql nos
1181 retorne, ya sea por medio de la caché o simplemente al enviar
1182 querys vacÃas.
1183 - Aquà es donde se asignan lo datos del cargado de los vehÃculos
1184 tanto de usuarios como para los concesionarios.
1185
1186 --------------------------------------------------*/
1187
1188 static
1189 rows,
1190 fields,
1191 fetch[0b11110];
1192
1193 cache_get_data(rows, fields);
1194
1195 switch( threadID )
1196 {
1197 case empty@queryReceived: mysql_free_result();
1198 case dealerDataAssign:
1199 {
1200 if( rows )
1201 {
1202 for( new j = 0, i = 0; j <= rows-1; j++)
1203 {
1204 i = getNextVehicleID();
1205
1206 paramsvDealer[ i ][ inumdID ] = strval ((cache_get_row(j, 0, fetch),fetch));
1207 cache_get_row(j, 1, paramsvDealer[ i ][ sCarName ] );
1208 paramsvDealer[ i ][ inumDealer ] = strval ((cache_get_row(j, 2, fetch),fetch));
1209 paramsvDealer[ i ][ iModel ] = strval ((cache_get_row(j, 3, fetch),fetch));
1210 paramsvDealer[ i ][ iPrice ] = strval ((cache_get_row(j, 4, fetch),fetch));
1211 paramsvDealer[ i ][ fdPos_X ] = floatstr ((cache_get_row(j, 5, fetch),fetch));
1212 paramsvDealer[ i ][ fdPos_Y ] = floatstr ((cache_get_row(j, 6, fetch),fetch));
1213 paramsvDealer[ i ][ fdPos_Z ] = floatstr ((cache_get_row(j, 7, fetch),fetch));
1214 paramsvDealer[ i ][ fdPos_R ] = floatstr ((cache_get_row(j,8, fetch),fetch));
1215
1216 paramsvDealer[ i ][ inumID ] = CreateVehicle( paramsvDealer[i][iModel] , paramsvDealer[i][fdPos_X], paramsvDealer[i][fdPos_Y],
1217 paramsvDealer[i][fdPos_Z], paramsvDealer[i][fdPos_R], random(0xFF), random(0xFF), 5<<3);
1218
1219 SetVehicleParamsEx(
1220 paramsvDealer[i][inumID],
1221 VEHICLE_PARAMS_OFF,
1222 VEHICLE_PARAMS_OFF,
1223 VEHICLE_PARAMS_OFF,
1224 VEHICLE_PARAMS_OFF,
1225 VEHICLE_PARAMS_OFF,
1226 VEHICLE_PARAMS_OFF,
1227 VEHICLE_PARAMS_OFF
1228 );
1229 }
1230 printf("[wDealer Debug] - Se han cargado %d vehÃculos de los concesionarios.", rows);
1231 }
1232 mysql_function_query(cHandle, "SELECT * FROM `dealerLocations` LIMIT "#MAX_DEALERS";", true, "OnQueryFinish", "d", dealerAssign);
1233 }
1234 case dealerAssign:
1235 {
1236 if( 0 < rows <= MAX_DEALERS )
1237 {
1238 for( new i = 0, j = 1; i < rows; i++, j++ )
1239 {
1240 dealerLocations[j][id@sqlid] = strval ((cache_get_row(i, 0, fetch),fetch));
1241 cache_get_row(i, 1, dealerLocations[j][sz@nameDealer]);
1242 dealerLocations[j][d@vehicles] = strval ((cache_get_row(i, 0b10, fetch),fetch));
1243 dealerLocations[j][f@maxX] = floatstr ((cache_get_row(i, 0b11, fetch),fetch));
1244 dealerLocations[j][f@minX] = floatstr ((cache_get_row(i,0b100, fetch),fetch));
1245 dealerLocations[j][f@maxY] = floatstr ((cache_get_row(i,0b101, fetch),fetch));
1246 dealerLocations[j][f@minY] = floatstr ((cache_get_row(i,0b110, fetch),fetch));
1247 }
1248 printf("[wDealer Debug] - Se han cargado %d concesionarios.", rows);
1249 }
1250 mysql_free_result();
1251 }
1252 case load@playerVehicles:
1253 {
1254 if( 0 < rows <= MAX_VEH_PER_PLAYER )
1255 {
1256 for( new i = 0; i < rows; i++ )
1257 {
1258 playerVehicle[extraid][i][idOwner] = extraid;
1259
1260 playerVehicle[extraid][i][inumcID] = strval((cache_get_row(i, 0, fetch),fetch));
1261 cache_get_row(i, 1, playerVehicle[extraid][i][sCarOwner]);
1262 cache_get_row(i, 0b10, playerVehicle[extraid][i][sCarName]);
1263 playerVehicle[extraid][i][iModel] = strval ((cache_get_row(i, 0b11, fetch),fetch));
1264 playerVehicle[extraid][i][ipRepair] = strval ((cache_get_row(i, 0b100, fetch),fetch));
1265 playerVehicle[extraid][i][status] = ((strval ((cache_get_row(i, 0b101, fetch),fetch)) == 1 ) ? ( true ) : ( false ));
1266 playerVehicle[extraid][i][fPos_X] = floatstr ((cache_get_row(i, 0b110, fetch),fetch));
1267 playerVehicle[extraid][i][fPos_Y] = floatstr ((cache_get_row(i, 0b111, fetch),fetch));
1268 playerVehicle[extraid][i][fPos_Z] = floatstr ((cache_get_row(i,0b1000, fetch),fetch));
1269 playerVehicle[extraid][i][fPos_R] = floatstr ((cache_get_row(i,0b1001, fetch),fetch));
1270 playerVehicle[extraid][i][paramsVeh][pEngine] = strval ((cache_get_row(i,0b1010, fetch),fetch));
1271 playerVehicle[extraid][i][paramsVeh][pLights] = strval ((cache_get_row(i,0b1011, fetch),fetch));
1272 playerVehicle[extraid][i][paramsVeh][pAlarm] = strval ((cache_get_row(i,0b1100, fetch),fetch));
1273 playerVehicle[extraid][i][paramsVeh][pLock] = strval ((cache_get_row(i,0b1101, fetch),fetch));
1274 playerVehicle[extraid][i][paramsVeh][pBonnet] = strval ((cache_get_row(i,0b1110, fetch),fetch));
1275 playerVehicle[extraid][i][paramsVeh][pBoot] = strval ((cache_get_row(i,0b1111, fetch),fetch));
1276 playerVehicle[extraid][i][paramsVeh][pObjective] = strval ((cache_get_row(i, 0x10, fetch),fetch));
1277 playerVehicle[extraid][i][damageVeh][dHealth] = floatstr ((cache_get_row(i, 0x11, fetch),fetch));
1278 playerVehicle[extraid][i][damageVeh][dPanels] = strval ((cache_get_row(i, 0x12, fetch),fetch));
1279 playerVehicle[extraid][i][damageVeh][dDoors] = strval ((cache_get_row(i, 0x13, fetch),fetch));
1280 playerVehicle[extraid][i][damageVeh][dLights] = strval ((cache_get_row(i, 0x14, fetch),fetch));
1281 playerVehicle[extraid][i][damageVeh][dTires] = strval ((cache_get_row(i, 0x15, fetch),fetch));
1282 playerVehicle[extraid][i][mods][mColores][0] = strval ((cache_get_row(i, 0x16, fetch),fetch));
1283 playerVehicle[extraid][i][mods][mColores][1] = strval ((cache_get_row(i, 0x17, fetch),fetch));
1284 playerVehicle[extraid][i][mods][mSpoiler] = strval ((cache_get_row(i, 0x18, fetch),fetch));
1285 playerVehicle[extraid][i][mods][mHood] = strval ((cache_get_row(i, 0x19, fetch),fetch));
1286 playerVehicle[extraid][i][mods][mRoof] = strval ((cache_get_row(i, 0x1A, fetch),fetch));
1287 playerVehicle[extraid][i][mods][mSideskirts][0] = strval ((cache_get_row(i, 0x1B, fetch),fetch));
1288 playerVehicle[extraid][i][mods][mSideskirts][1] = strval ((cache_get_row(i, 0x1C, fetch),fetch));
1289 playerVehicle[extraid][i][mods][mNitro] = strval ((cache_get_row(i, 0x1D, fetch),fetch));
1290 playerVehicle[extraid][i][mods][mLamps] = strval ((cache_get_row(i, 0x1E, fetch),fetch));
1291 playerVehicle[extraid][i][mods][mExhaust] = strval ((cache_get_row(i, 0x1F, fetch),fetch));
1292 playerVehicle[extraid][i][mods][mWheels] = strval ((cache_get_row(i, 0x20, fetch),fetch));
1293 playerVehicle[extraid][i][mods][mStereo] = strval ((cache_get_row(i, 0x21, fetch),fetch));
1294 playerVehicle[extraid][i][mods][mHidraulics] = strval ((cache_get_row(i, 0x22, fetch),fetch));
1295 playerVehicle[extraid][i][mods][mPaintjob] = strval ((cache_get_row(i, 0x23, fetch),fetch));
1296 playerVehicle[extraid][i][mods][mBullbar] = strval ((cache_get_row(i, 0x24, fetch),fetch));
1297 playerVehicle[extraid][i][mods][mRealBullbars] = strval ((cache_get_row(i, 0x25, fetch),fetch));
1298 playerVehicle[extraid][i][mods][mFrontSign] = strval ((cache_get_row(i, 0x26, fetch),fetch));
1299 playerVehicle[extraid][i][mods][mFrontBullbars] = strval ((cache_get_row(i, 0x27, fetch),fetch));
1300 playerVehicle[extraid][i][mods][mBullbars] = strval ((cache_get_row(i, 0x28, fetch),fetch));
1301 playerVehicle[extraid][i][mods][mRearBumper] = strval ((cache_get_row(i, 0x29, fetch),fetch));
1302 playerVehicle[extraid][i][mods][mVents][0] = strval ((cache_get_row(i, 0x2A, fetch),fetch));
1303 playerVehicle[extraid][i][mods][mVents][1] = strval ((cache_get_row(i, 0x2B, fetch),fetch));
1304 playerVehicle[extraid][i][mods][mFrontBumper] = strval ((cache_get_row(i, 0x2C, fetch),fetch));
1305 playerVehicle[extraid][i][Maletero][tArmas][0] = strval ((cache_get_row(i, 0x2D, fetch),fetch));
1306 playerVehicle[extraid][i][Maletero][tMuniciones][0] = strval ((cache_get_row(i, 0x2E, fetch),fetch));
1307 playerVehicle[extraid][i][Maletero][tArmas][1] = strval ((cache_get_row(i, 0x2F, fetch),fetch));
1308 playerVehicle[extraid][i][Maletero][tMuniciones][1] = strval ((cache_get_row(i, 0x30, fetch),fetch));
1309 playerVehicle[extraid][i][Maletero][tArmas][0b10] = strval ((cache_get_row(i, 0x31, fetch),fetch));
1310 playerVehicle[extraid][i][Maletero][tMuniciones][0b10] = strval ((cache_get_row(i, 0x32, fetch),fetch));
1311 playerVehicle[extraid][i][Maletero][tArmas][0b11] = strval ((cache_get_row(i, 0x33, fetch),fetch));
1312 playerVehicle[extraid][i][Maletero][tMuniciones][0b11] = strval ((cache_get_row(i, 0x34, fetch),fetch));
1313 playerVehicle[extraid][i][Maletero][tArmas][0b100] = strval ((cache_get_row(i, 0x35, fetch),fetch));
1314 playerVehicle[extraid][i][Maletero][tMuniciones][0b100] = strval ((cache_get_row(i, 0x36, fetch),fetch));
1315 playerVehicle[extraid][i][Maletero][tArmadura] = floatstr ((cache_get_row(i, 0x37, fetch),fetch));
1316
1317 if( playerVehicle[extraid][i][status] )
1318 CallLocalFunction("createPlayerVehicle", "dd", extraid, i );
1319
1320 printf("[wDealer:] Se ha cargado el auto N°%d de %s. Este %s.", i+1, playerVehicle[extraid][i][sCarOwner], ( ( playerVehicle[extraid][i][status] ) ? ( "a sido creado correctamente" ) : ( "no a sido creado" )));
1321
1322 }
1323 }
1324 mysql_free_result();
1325 }
1326 case sql@insertID:
1327 {
1328 for( new i = GetMaxPlayers()-1; i > -1; --i )
1329 {
1330 if( isvehicle@playerProperty( i, playerVehicle[i][extraid][icnumID] ) )
1331 playerVehicle[i][extraid][inumcID] = mysql_insert_id(cHandle);
1332 else
1333 continue;
1334 }
1335 }
1336 case sql_d@insertID:
1337 {
1338 paramsvDealer[extraid][inumdID] = mysql_insert_id(cHandle);
1339 CallLocalFunction("save@DealersData", #);
1340 }
1341 case sql@dealerInsertID:
1342 {
1343 dealerLocations[extraid][id@sqlid] = mysql_insert_id(cHandle);
1344 CallLocalFunction("save@dealerLocations", #);
1345 }
1346 default: mysql_free_result();
1347 }
1348 mysql_free_result();
1349}
1350
1351//============================================================================//
1352
1353function:: loadDealersData()
1354{
1355 /*--------------------------------------------------
1356
1357 * loadDealersData
1358 *Params:
1359 - No params.
1360 * Función:
1361 - EnvÃa la consulta que seleccionará todos los vehÃculos
1362 de los concesionarios y los integrará en el caché para después
1363 manipularlos y asà crear los vehÃculos en OnQueryFinish de acuerdo
1364 a la información obtenida.
1365
1366 --------------------------------------------------*/
1367
1368 static
1369 d@iterator;
1370 d@iterator = -1;
1371
1372 for( new i; i < MAX_DEALERS; i++ )
1373 {
1374 while( dealerLoc:++d@iterator < dealerLoc ) {
1375 dealerLocations[i][dealerLoc:d@iterator] = 0;
1376 }
1377 }
1378
1379 mysql_function_query(cHandle, "SELECT * FROM `carsDealers` LIMIT "#MAX_DEALER_VEHICLES"", true, "OnQueryFinish", "d", dealerDataAssign);
1380 return 0x01;
1381}
1382
1383//============================================================================//
1384
1385function:: save@DealersData()
1386{
1387 /*--------------------------------------------------
1388
1389 * save@DealersData
1390 * Params:
1391 - No params.
1392 * Función:
1393 - Esta función mediante un bucle formateará y ejecutará las
1394 consultas correspondientes para almacenar todos los vehÃculos
1395 de los concesionarios
1396
1397 --------------------------------------------------*/
1398
1399 static
1400 query[0x100],
1401 count;
1402
1403 count = 0;
1404
1405 for( new i = MAX_VEHICLES-1; i > 0; --i)
1406 {
1407 if( paramsvDealer[ i ][ inumDealer ] <= 0 ) continue;
1408 else
1409 {
1410 mysql_format( cHandle, query, "UPDATE `carsDealers` SET `CarName` = '%e', `DealerCar` = %d, `CarModel` = %d,`CarPrice` = %d, `CarPosX` = %f, `CarPosY` = %f, `CarPosZ` = %f, `CarRot` = %f WHERE `ID_CarDealer` = %d",
1411 paramsvDealer[i][sCarName], paramsvDealer[i][inumDealer], paramsvDealer[i][iModel], paramsvDealer[i][iPrice], paramsvDealer[i][fdPos_X],
1412 paramsvDealer[i][fdPos_Y], paramsvDealer[i][fdPos_Z], paramsvDealer[i][fdPos_R], paramsvDealer[i][inumdID]);
1413
1414 mysql_function_query( cHandle, query, false, "OnQueryFinish", "d", empty@queryReceived);
1415 count ++;
1416 }
1417 }
1418 CallLocalFunction("save@dealerLocations", #);
1419 return printf("[wDealer]: Se han guardado %d vehÃculos de los concesionarios", count);
1420}
1421
1422//============================================================================//
1423
1424function:: loadPlayerVehicles( playerid )
1425{
1426 /*--------------------------------------------------
1427
1428 * loadPlayerVehicles
1429 * Params:
1430 - playerid
1431 * Función:
1432 - Enviará la consulta correspondiente para cargar los
1433 vehÃculos del usuario determinado ( playerid ), asignando los
1434 datos obtenidos a la caché para después ser manipulados en
1435 OnQueryFinish y asà poder crear los vehÃculos de usuario
1436
1437 --------------------------------------------------*/
1438
1439 static
1440 sz@Query[0b1010101];
1441 mysql_format( cHandle, sz@Query, "SELECT * FROM `uservehicles` WHERE `OwnerName` = '%e'", getPlayerName( playerid, true ));
1442 return mysql_function_query( cHandle, sz@Query, true, "OnQueryFinish", "dd", load@playerVehicles, playerid), 0x01;
1443}
1444
1445//============================================================================//
1446
1447function:: createPlayerVehicle( playerid, vehicleID )
1448{
1449 /*--------------------------------------------------
1450
1451 * createPlayerVehicle
1452 * Params:
1453 - playerid
1454 - vehicleID
1455 * Función:
1456 - Se ejecutará después de asignar los datos a las variables especifÃcas
1457 para crear el vehÃculo & asignarle el Tuning correspondiente además de
1458 establecer el valor de las puertas al vehÃculo.
1459
1460 --------------------------------------------------*/
1461
1462 if( IsPlayerConnected( playerid ) && playerVehicle[playerid][vehicleID][status] )
1463 {
1464 playerVehicle[playerid][vehicleID][icnumID] = CreateVehicle( playerVehicle[playerid][vehicleID][iModel], playerVehicle[playerid][vehicleID][fPos_X], playerVehicle[playerid][vehicleID][fPos_Y], playerVehicle[playerid][vehicleID][fPos_Z],
1465 playerVehicle[playerid][vehicleID][fPos_R], playerVehicle[playerid][vehicleID][mods][mColores][0], playerVehicle[playerid][vehicleID][mods][mColores][1], -1);
1466
1467 if( playerVehicle[playerid][vehicleID][mods][mSpoiler] != -1 ) AddVehicleComponent(playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][mods][mSpoiler]);
1468 if( playerVehicle[playerid][vehicleID][mods][mHood] != -1 ) AddVehicleComponent(playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][mods][mHood]);
1469 if( playerVehicle[playerid][vehicleID][mods][mRoof] != -1 ) AddVehicleComponent(playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][mods][mRoof]);
1470 if( playerVehicle[playerid][vehicleID][mods][mSideskirts][0]!= -1 ) AddVehicleComponent(playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][mods][mSideskirts][0]);
1471 if( playerVehicle[playerid][vehicleID][mods][mSideskirts][1]!= -1 ) AddVehicleComponent(playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][mods][mSideskirts][1]);
1472 if( playerVehicle[playerid][vehicleID][mods][mNitro] != -1 ) AddVehicleComponent(playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][mods][mNitro]);
1473 if( playerVehicle[playerid][vehicleID][mods][mLamps] != -1 ) AddVehicleComponent(playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][mods][mLamps]);
1474 if( playerVehicle[playerid][vehicleID][mods][mExhaust] != -1 ) AddVehicleComponent(playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][mods][mExhaust]);
1475 if( playerVehicle[playerid][vehicleID][mods][mWheels] != -1 ) AddVehicleComponent(playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][mods][mWheels]);
1476 if( playerVehicle[playerid][vehicleID][mods][mStereo] != -1 ) AddVehicleComponent(playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][mods][mStereo]);
1477 if( playerVehicle[playerid][vehicleID][mods][mHidraulics] != -1 ) AddVehicleComponent(playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][mods][mHidraulics]);
1478 if( playerVehicle[playerid][vehicleID][mods][mBullbar] != -1 ) AddVehicleComponent(playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][mods][mBullbar]);
1479 if( playerVehicle[playerid][vehicleID][mods][mRealBullbars] != -1 ) AddVehicleComponent(playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][mods][mRealBullbars]);
1480 if( playerVehicle[playerid][vehicleID][mods][mFrontSign] != -1 ) AddVehicleComponent(playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][mods][mFrontSign]);
1481 if( playerVehicle[playerid][vehicleID][mods][mFrontBullbars]!= -1 ) AddVehicleComponent(playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][mods][mFrontBullbars]);
1482 if( playerVehicle[playerid][vehicleID][mods][mBullbars] != -1 ) AddVehicleComponent(playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][mods][mBullbars]);
1483 if( playerVehicle[playerid][vehicleID][mods][mRearBumper] != -1 ) AddVehicleComponent(playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][mods][mRearBumper]);
1484 if( playerVehicle[playerid][vehicleID][mods][mVents][0] != -1 ) AddVehicleComponent(playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][mods][mVents][0]);
1485 if( playerVehicle[playerid][vehicleID][mods][mVents][1] != -1 ) AddVehicleComponent(playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][mods][mVents][1]);
1486 if( playerVehicle[playerid][vehicleID][mods][mFrontBumper] != -1 ) AddVehicleComponent(playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][mods][mFrontBumper]);
1487 if( playerVehicle[playerid][vehicleID][mods][mPaintjob] != -1 ) ChangeVehiclePaintjob(playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][mods][mPaintjob]);
1488
1489 ChangeVehicleColor(playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][mods][mColores][0], playerVehicle[playerid][vehicleID][mods][mColores][1]);
1490 SetVehicleHealth( playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][damageVeh][dHealth]);
1491
1492 UpdateVehicleDamageStatus( playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][damageVeh][dPanels],
1493 playerVehicle[playerid][vehicleID][damageVeh][dDoors],
1494 playerVehicle[playerid][vehicleID][damageVeh][dLights],
1495 playerVehicle[playerid][vehicleID][damageVeh][dTires]);
1496
1497 SetVehicleParamsEx( playerVehicle[playerid][vehicleID][icnumID], playerVehicle[playerid][vehicleID][paramsVeh][pEngine], playerVehicle[playerid][vehicleID][paramsVeh][pLights],
1498 playerVehicle[playerid][vehicleID][paramsVeh][pAlarm], playerVehicle[playerid][vehicleID][paramsVeh][pLock],
1499 playerVehicle[playerid][vehicleID][paramsVeh][pBonnet], playerVehicle[playerid][vehicleID][paramsVeh][pBoot],
1500 playerVehicle[playerid][vehicleID][paramsVeh][pObjective]);
1501 return true;
1502
1503 }
1504 return false;
1505}
1506
1507//============================================================================//
1508
1509function:: createplayer@vehiclePurchased( playerid, extraid )
1510{
1511 /*--------------------------------------------------
1512
1513 * createplayer@vehiclePurchased
1514 * Params:
1515 - playerid
1516 - extraid
1517 * Función:
1518 - Esta función creará y establecerá las variables correspondientes
1519 a un usuario ( playerid ) después de comprar un vehÃculo de algún
1520 concesionario, donde 'extraid' será el slot que ocupará el vehÃculo
1521 en el usuario.
1522 - Enviará la consulta correspondiente para almacenar el vehÃculo en
1523 la tabla respectiva.
1524 --------------------------------------------------*/
1525
1526 if( ( IsPlayerConnected( playerid ) & IsPlayerInAnyVehicle( playerid ) ) && ( 0 < paramsvDealer[ GetPlayerVehicleID(playerid) ][ inumDealer ] <= MAX_DEALERS ) )
1527 {
1528 static
1529 s@query[0x12C];
1530 strmid( playerVehicle[playerid][extraid][sCarName], paramsvDealer[obs@Venta[playerid][1]][sCarName], 0, strlen(paramsvDealer[obs@Venta[playerid][1]][sCarName]), 30);
1531 strmid( playerVehicle[playerid][extraid][sCarOwner], getPlayerName( playerid, true ), 0, strlen(getPlayerName( playerid, true )), MAX_PLAYER_NAME );
1532 playerVehicle[playerid][extraid][idOwner] = playerid;
1533 playerVehicle[playerid][extraid][iModel] = paramsvDealer[obs@Venta[playerid][1]][iModel];
1534 playerVehicle[playerid][extraid][ipRepair] = ( ( 0b101 * paramsvDealer[obs@Venta[playerid][1]][iPrice] ) / 0x64 ); // 0x64 = 100, 0b101 = 5
1535 playerVehicle[playerid][extraid][status] = true;
1536 playerVehicle[playerid][extraid][fPos_X] = 560.9253;
1537 playerVehicle[playerid][extraid][fPos_Y] = -1262.4637;
1538 playerVehicle[playerid][extraid][fPos_Z] = 17.2422;
1539 playerVehicle[playerid][extraid][fPos_R] = 26.3302;
1540 playerVehicle[playerid][extraid][paramsVeh][pEngine] = VEHICLE_PARAMS_OFF;
1541 playerVehicle[playerid][extraid][paramsVeh][pLights] = VEHICLE_PARAMS_OFF;
1542 playerVehicle[playerid][extraid][paramsVeh][pAlarm] = VEHICLE_PARAMS_OFF;
1543 playerVehicle[playerid][extraid][paramsVeh][pLock] = VEHICLE_PARAMS_ON;
1544 playerVehicle[playerid][extraid][paramsVeh][pBonnet] = VEHICLE_PARAMS_OFF;
1545 playerVehicle[playerid][extraid][paramsVeh][pBoot] = VEHICLE_PARAMS_OFF;
1546 playerVehicle[playerid][extraid][paramsVeh][pObjective] = VEHICLE_PARAMS_OFF;
1547 playerVehicle[playerid][extraid][damageVeh][dHealth] = float( 0x3E8 );
1548 playerVehicle[playerid][extraid][mods][mColores][0] = random(0xFF);
1549 playerVehicle[playerid][extraid][mods][mColores][1] = random(0xFF);
1550
1551 playerVehicle[playerid][extraid][icnumID] = CreateVehicle( playerVehicle[playerid][extraid][iModel], playerVehicle[playerid][extraid][fPos_X], playerVehicle[playerid][extraid][fPos_Y],
1552 playerVehicle[playerid][extraid][fPos_Z], playerVehicle[playerid][extraid][fPos_R], playerVehicle[playerid][extraid][mods][mColores][0],
1553 playerVehicle[playerid][extraid][mods][mColores][1], -1);
1554
1555 GivePlayerMoney(playerid, ((~paramsvDealer[obs@Venta[playerid][1]][iPrice])+1));
1556 PutPlayerInVehicle( playerid, playerVehicle[playerid][extraid][icnumID], 0);
1557
1558 mysql_format( cHandle, s@query, "INSERT INTO `userVehicles` ( `OwnerName`, `CarName`, `carModel`, `cReparacion`, `Status`, `Pos_X`, `Pos_Y`, `Pos_Z`, `Pos_R`, `dHealth`, `Color1`, `Color2` ) "\
1559 "VALUES ( '%e', '%e', %d, %d, %d, %f, %f, %f, %f, %f, %d, %d )",
1560 playerVehicle[playerid][extraid][sCarOwner], playerVehicle[playerid][extraid][sCarName], playerVehicle[playerid][extraid][iModel], playerVehicle[playerid][extraid][ipRepair],
1561 (( playerVehicle[playerid][extraid][status] )?( 1 ):( 0 )),
1562 playerVehicle[playerid][extraid][fPos_X], playerVehicle[playerid][extraid][fPos_Y], playerVehicle[playerid][extraid][fPos_Z], playerVehicle[playerid][extraid][fPos_R],
1563 playerVehicle[playerid][extraid][damageVeh][dHealth], playerVehicle[playerid][extraid][mods][mColores][0], playerVehicle[playerid][extraid][mods][mColores][1]);
1564
1565 mysql_function_query( cHandle, s@query, false, "OnQueryFinish", "dd", sql@insertID, extraid);
1566
1567 format( s@query, sizeof s@query, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Felicidades %s, has comprado un %s por $%d.00. ¡Disfrutalo!",getPlayerName(playerid, true), paramsvDealer[obs@Venta[playerid][1]][sCarName], paramsvDealer[obs@Venta[playerid][1]][iPrice]);
1568 SendClientMessage( playerid, -1, s@query);
1569
1570 TogglePlayerControllable( playerid, true );
1571 SetVehicleParamsForAll( obs@Venta[ playerid ][ 1 ], false, false );
1572 obs@Venta[ playerid ][ 1 ] = -1;
1573
1574 return 0x01;
1575 }
1576 else
1577 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No estás en ningún vehÃculo de pruebas"), 0x01;
1578}
1579
1580public OnQueryError( errorid, error[], callback[], query[], connectionHandle )
1581{
1582 printf("\t\t[ERROR:%d]\nError:%s\nQUERY:\n%s\n, connectionHandle: %d\nCallback:%s", errorid, error, query, connectionHandle, callback);
1583 return 1;
1584}
1585
1586//============================================================================//
1587
1588function:: SetVehicleParamsForAll( carid, objective, doorslocked )
1589{
1590 /*--------------------------------------------------
1591
1592 * SetVehicleParamsForAll
1593 * Params:
1594 - carid
1595 - objective
1596 - doorslocked
1597 * Función:
1598 - Establecerá a el vehÃculo correspondiente (carid) el
1599 valor correspondiente en la parte seleccionada.
1600
1601 --------------------------------------------------*/
1602
1603 for( new i = GetMaxPlayers()-1; i > -1; --i )
1604 SetVehicleParamsForPlayer(carid, i, objective, doorslocked);
1605}
1606
1607//============================================================================//
1608
1609function:: disable@vehicleAlarm( vehicleid )
1610{
1611 /*--------------------------------------------------
1612
1613 * disable@vehicleAlarm
1614 * Params:
1615 - vehicleid
1616 * Función:
1617 - Desactiva/apaga la alarma activa del vehÃculo
1618 insertado ( vehicleid ).
1619
1620 --------------------------------------------------*/
1621 static
1622 engine,
1623 lights,
1624 alarm,
1625 doors,
1626 bonnet,
1627 boot,
1628 objective;
1629
1630 GetVehicleParamsEx( vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
1631 SetVehicleParamsEx( vehicleid, engine, lights, VEHICLE_PARAMS_OFF, doors, bonnet, boot, objective);
1632}
1633
1634//============================================================================//
1635
1636CMD:edealerloc( playerid, params[] )
1637{
1638 /*--------------------------------------------------
1639
1640 * edealerloc ( Comando ).
1641 * Params:
1642 - dealerid
1643 * Función:
1644 - Muestra el menú de edición de datos del
1645 concesionario insertado ( dealerid ).
1646
1647 --------------------------------------------------*/
1648
1649 if(isnull(params)) return SendClientMessage(playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Modo de uso: /edealerloc [dealerid]"), 0x01;
1650 else
1651 {
1652 static
1653 sz@message[0x7D];
1654
1655 d@optionsEdit[playerid][0] = strval(params);
1656 if(0 < d@optionsEdit[playerid][0] <= MAX_DEALERS+1)
1657 {
1658 format(sz@message, sizeof(sz@message), "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Menú de edición - Concesionario N°%d.", d@optionsEdit[playerid][0]);
1659 ShowPlayerDialog(playerid, showMenuDealerEdit, DIALOG_STYLE_LIST, sz@message, "1)\t Nombre del concesionario.\n 2)\tPosicion del concesionario.\n 3)\tEliminar concesionario.\n -> Guardar cambios.", "Seleccionar.", "Cancelar.");
1660 return SendClientMessage(playerid, -1, sz@message), 0x01;
1661 }
1662 else return SendClientMessage(playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} La ID del concesionario debe ir del 1 al "#MAX_DEALERS+1"."), 0x01;
1663 }
1664}
1665
1666//============================================================================//
1667
1668CMD:createvdealer( playerid, params[] )
1669{
1670 /*--------------------------------------------------
1671
1672 * createvdealer ( comando )
1673 * Params:
1674 - modelid | nombre
1675 - concesionario
1676 - precio/costo
1677 * Función:
1678 - Rellenando los parámetros del comando, se creará un vehÃculo
1679 del modelo deseado para el concesionario especificado con el precio
1680 establecido, además de insertarlo directamente en la tabla.
1681
1682 --------------------------------------------------*/
1683
1684 if( isnull( params ) )
1685 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Modo de uso: /createvdealer [modelid|nombre] [concesionario] [precio]"), 1;
1686 else
1687 {
1688 static
1689 sz@dMod[0b11001],
1690 sz@sPart[0x100],
1691 d@nextID;
1692
1693 if( !sscanf( params, "s[25]s[50]", sz@dMod, sz@sPart))
1694 {
1695 d@nextID = getNextVehicleID();
1696 paramsvDealer[d@nextID][iModel] = ( ( isNumeric( sz@dMod ) ) ? ( strval( sz@dMod ) ) : ( getVehicleModelbyName( sz@dMod ) ) );
1697
1698 if( 0x190 <= paramsvDealer[d@nextID][iModel] <= 0x263 )
1699 {
1700 if( !sscanf( sz@sPart, "dd", paramsvDealer[d@nextID][inumDealer], paramsvDealer[d@nextID][iPrice] ) )
1701 {
1702 if( 0 < paramsvDealer[d@nextID][inumDealer] <= MAX_DEALERS )
1703 {
1704 if(IsPlayerInArea(playerid, dealerLocations[paramsvDealer[d@nextID][inumDealer]][f@maxX], dealerLocations[paramsvDealer[d@nextID][inumDealer]][f@maxY], dealerLocations[paramsvDealer[d@nextID][inumDealer]][f@minX], dealerLocations[paramsvDealer[d@nextID][inumDealer]][f@minY]))
1705 {
1706 GetPlayerPos( playerid, paramsvDealer[d@nextID][fdPos_X], paramsvDealer[d@nextID][fdPos_Y], paramsvDealer[d@nextID][fdPos_Z]);
1707 GetPlayerFacingAngle( playerid, paramsvDealer[d@nextID][fdPos_R]);
1708
1709 paramsvDealer[d@nextID][inumID] = CreateVehicle( paramsvDealer[d@nextID][iModel], paramsvDealer[d@nextID][fdPos_X], paramsvDealer[d@nextID][fdPos_Y], paramsvDealer[d@nextID][fdPos_Z], paramsvDealer[d@nextID][fdPos_R], random(0xFF), random(0xFF), -1);
1710 strmid( paramsvDealer[d@nextID][sCarName], getVehicleNamebyID(paramsvDealer[d@nextID][inumID]), 0, strlen(getVehicleNamebyID(paramsvDealer[d@nextID][inumID])), 0b11001);
1711
1712 mysql_format( cHandle, sz@sPart, "INSERT INTO `carsDealers`( `CarName`, `DealerCar`, `CarModel`, `CarPrice`, `CarPosX`, `CarPosY`, `CarPosZ`, `CarRot`) VALUES ('%e', '%d', '%d', '%d', '%f', '%f', '%f', '%f')",
1713 getVehicleNamebyID(paramsvDealer[d@nextID][inumID]), paramsvDealer[d@nextID][inumDealer], paramsvDealer[d@nextID][iModel], paramsvDealer[d@nextID][iPrice],
1714 paramsvDealer[d@nextID][fdPos_X], paramsvDealer[d@nextID][fdPos_Y], paramsvDealer[d@nextID][fdPos_Z], paramsvDealer[d@nextID][fdPos_R]);
1715
1716 mysql_function_query( cHandle, sz@sPart, false, "OnQueryFinish", "dd", sql_d@insertID, d@nextID);
1717 return 0x01;
1718 }
1719 else
1720 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No estás en el concesionario."), 0x01;
1721 }
1722 else
1723 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} ID de concesionario inválida [ 1 - 10 ]"), 0x01;
1724 }
1725 else
1726 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Modo de uso: /createvdealer [modelid|nombre] [concesionario] [precio]"), 0x01;
1727 }
1728 else
1729 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Modelo de vehÃculo inválido. Inserte un ID | Nombre correcto."), 0x01;
1730 }
1731 else
1732 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Modo de uso: /createvdealer [modelid|nombre] [concesionario] [precio]"), 0x01;
1733 }
1734}
1735
1736//============================================================================//
1737
1738CMD:delvdealer( playerid, params[] )
1739{
1740 /*--------------------------------------------------
1741
1742 * delvdealer ( comando )
1743 * Params:
1744 - carid
1745 * Función:
1746 - Elimina un vehÃculo del concesionario de acuerdo a la ID que tenga
1747 InGame, verificando sà es o no de concesionario y sú existencia en
1748 la tabla correspondiente.
1749
1750 --------------------------------------------------*/
1751
1752 if( IsPlayerAdmin( playerid ) )
1753 {
1754 if( isnull( params ) )
1755 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Modo de uso: /delvdealer [carid]"), 1;
1756 else
1757 {
1758 static
1759 d@carID,
1760 Float:f@vehPos[0b11],
1761 sz@query[0b111000];
1762
1763 if( 0 < paramsvDealer[( d@carID = strval(params), d@carID )][ inumDealer ] <= MAX_DEALERS )
1764 {
1765 if( IsPlayerInRangeOfPoint ( playerid, float(0b11), (GetVehiclePos(d@carID, f@vehPos[0], f@vehPos[1], f@vehPos[0b10]), f@vehPos[0]), f@vehPos[1], f@vehPos[0b10] ) )
1766 {
1767 static
1768 i@iterator;
1769 i@iterator = -1;
1770
1771 mysql_format( cHandle, sz@query, "DELETE FROM `carsDealers` WHERE `ID_CarDealer` = %d", paramsvDealer[d@carID][inumdID]);
1772 mysql_function_query( cHandle, sz@query, false, "OnQueryFinish", "d", empty@queryReceived);
1773
1774 DestroyVehicle( d@carID );
1775
1776 while( dealerEnum:++i@iterator < dealerEnum ) {
1777 paramsvDealer[d@carID][dealerEnum:i@iterator] = -1;
1778 }
1779
1780 format(sz@query, sizeof sz@query, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Has eliminado el vehÃculo ID:%d del concesionario.", d@carID);
1781 return SendClientMessage( playerid, -1, sz@query), 0x01;
1782 }
1783 else
1784 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Tienes que estar cerca del vehÃculo a elminar."), 0x01;
1785 }
1786 else
1787 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Has insertado la id de un vehÃculo inválida."), 0x01;
1788 }
1789 }
1790 else
1791 return 0;
1792}
1793
1794//============================================================================//
1795
1796CMD:buyvehicle( playerid )
1797{
1798 /*--------------------------------------------------
1799
1800 * buyvehicle ( comando )
1801 * Params:
1802 - No params.
1803 * Función:
1804 - Al ejecutar este comando compramos el vehÃculo
1805 que nos encontremos observando, nos asignará las variables
1806 y creará un vehÃculo en la entrada de grotty, en fÃn,
1807 el vehÃculo será nuestro.
1808
1809 --------------------------------------------------*/
1810
1811 if( ( IsPlayerConnected( playerid ) & IsPlayerInAnyVehicle( playerid ) ) && ( 0 < paramsvDealer[ GetPlayerVehicleID(playerid) ][ inumDealer ] <= MAX_DEALERS ) )
1812 {
1813 if( paramsvDealer[obs@Venta[playerid][1]][iPrice] <= GetPlayerMoney( playerid ) )
1814 {
1815 static
1816 d@emptySlot;
1817 d@emptySlot = getslot@playerEmpty( playerid );
1818
1819 if( d@emptySlot != -1 )
1820 return CallLocalFunction("createplayer@vehiclePurchased", "dd", playerid, d@emptySlot), 0x01;
1821 else
1822 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Ya tienes todos los slots para vehÃculos ocupados"), cmd_salirvcar(playerid), 0x01;
1823 }
1824 else
1825 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No posees suficiente dinero."), cmd_salirvcar(playerid), 0x01;
1826 }
1827 else
1828 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No estás en ningún vehÃculo de pruebas"), 0x01;
1829}
1830
1831//============================================================================//
1832
1833CMD:venderveh( playerid, params[] )
1834{
1835 /*--------------------------------------------------
1836
1837 * venderveh ( comando )
1838 * Params:
1839 - Concesionario | Usuario
1840 - playerid
1841 - veh(slot)
1842 - precio
1843 * Función:
1844 - Con este comando venderás tú vehÃculo al concesionario
1845 o a algún usuario, con la venta al concesionario obtendrás
1846 el 75% del costo total gastado en el mismo, y con el usuario
1847 obtendrás lo que hayas llenado en el parámetro 'precio'.
1848
1849 --------------------------------------------------*/
1850
1851 if( isnull( params ) )
1852 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Modo de uso: /venderveh [concesionario] || [usuario] [playerID] [veh(slot)] [precio]"), 1;
1853 else
1854 {
1855 if( strcmp( params, "Concesionario", true ) == 0 )
1856 {
1857 if((( IsPlayerInAnyVehicle( playerid ) & isvehicle@playerProperty(playerid, GetPlayerVehicleID(playerid)) ) && ( getslot@playerVehicle(playerid, GetPlayerVehicleID(playerid)) != -1 )))
1858 {
1859 static
1860 d@iterator,
1861 d@slotVehicle,
1862 d@payVehicle,
1863 sz@message[0x7D];
1864
1865 d@iterator = -1, d@slotVehicle = 1;
1866 d@slotVehicle = getslot@playerVehicle(playerid, GetPlayerVehicleID(playerid));
1867 d@payVehicle = floatround(floatmul(float(playerVehicle[playerid][d@slotVehicle][ipRepair]), 0b1111), floatround_round); // 0b1111 = 15
1868
1869 GivePlayerMoney( playerid, d@payVehicle );
1870
1871 mysql_format( cHandle, sz@message, "DELETE FROM `userVehicles` WHERE `Car_ID` = %d", playerVehicle[playerid][d@slotVehicle][inumcID]);
1872 mysql_function_query( cHandle, sz@message, false, "OnQueryFinish", "d", empty@queryReceived);
1873
1874 DestroyVehicle( playerVehicle[playerid][d@slotVehicle][icnumID] );
1875
1876 format( sz@message, sizeof sz@message, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} ¡Felicidades! %s, has vendido tu %s por $%d.00.", getPlayerName(playerid, true), playerVehicle[playerid][d@slotVehicle][sCarName], d@payVehicle);
1877
1878 while( carEnum:++d@iterator < carEnum ) {
1879 playerVehicle[playerid][d@slotVehicle][carEnum:d@iterator] = -1;
1880 }
1881
1882 return SendClientMessage( playerid, -1, sz@message ), 0x01;
1883 }
1884 else
1885 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Tienes que estar en un vehÃculo propio para ejecutar esta acción."), 0x01;
1886 }
1887 else
1888 {
1889 static
1890 d@tmp[0b1000],
1891 d@arrValues[0b11],
1892 Float:f@posArr[0b11],
1893 sz@message[0x4B];
1894 if( !( sscanf( params, "s[8]udd", d@tmp, d@arrValues[0], d@arrValues[1], d@arrValues[0b10] ) ) )
1895 {
1896 if((playerid != d@arrValues[0])&&(IsPlayerConnected(d@arrValues[0]) & IsPlayerInRangeOfPoint(d@arrValues[0], 10.0, (GetPlayerPos(playerid, f@posArr[0], f@posArr[1], f@posArr[0b10]), f@posArr[0]),f@posArr[1],f@posArr[0b10])))
1897 {
1898 if((( -1 < d@arrValues[1] < MAX_VEH_PER_PLAYER ) & ( playerVehicle[playerid][d@arrValues[1]][icnumID] != -1 )))
1899 {
1900 format( sz@message, sizeof sz@message, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} El usuario [%d] %s te ofrece sú %s por $%d.", playerid, getPlayerName(playerid, true), playerVehicle[playerid][d@arrValues[1]][sCarName], d@arrValues[0b10]);
1901 SendClientMessage( d@arrValues[0], -1, sz@message);
1902 SendClientMessage( d@arrValues[0], -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Utiliza '/offreceived 1' para comprar el vehÃculo o '/offreceived 0' para rechazarlo.");
1903 obs@Venta[d@arrValues[0]][0] = d@arrValues[1];
1904 obs@Venta[d@arrValues[0]][1] = d@arrValues[0b10];
1905 obs@Venta[d@arrValues[0]][0b10] = playerid;
1906 obs@Venta[d@arrValues[0]][0b11] = d@arrValues[1];
1907 return 1;
1908 }
1909 else
1910 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} El slot del vehÃculo a ofertar es inválido."), 0x01;
1911 }
1912 else
1913 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Has insertado una ID de usuario inválida"), 0x01;
1914 }
1915 else
1916 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Modo de uso: /venderveh usuario [ID] [veh] [precio]"), 0x01;
1917 }
1918 }
1919}
1920
1921//============================================================================//
1922
1923CMD:offerveh( playerid, params[] )
1924{
1925 /*--------------------------------------------------
1926
1927 * offerveh ( comando )
1928 * Params:
1929 - 0
1930 - 1
1931 * Función:
1932 - Con este comando aceptas/rechazas la compra del
1933 vehÃculo que un usuario se encuentre ofreciendote.
1934
1935 --------------------------------------------------*/
1936
1937 if( obs@Venta[playerid][1] != -1 )
1938 {
1939 if( isnull( params ) )
1940 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Modo de uso: '/offerveh [ 0 | 1 ]' ( rechazar | aceptar )."), 0x01;
1941 else
1942 {
1943 static
1944 sz@message[0x4B],
1945 d@emptySlot,
1946 Float:f@posArr[0b11],
1947 d@iterator;
1948 switch( strval( params ) )
1949 {
1950 case 0:
1951 {
1952 SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Has cancelado la oferta de venta que tenias");
1953 format( sz@message, sizeof sz@message, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} [%d] %s ha cancelado el ofrecimiento que le realizaste", playerid, getPlayerName(playerid, true));
1954 SendClientMessage( obs@Venta[playerid][0b10], -1, sz@message);
1955 obs@Venta[playerid][0] = -1, obs@Venta[playerid][1] = -1, obs@Venta[playerid][0b10] = -1, obs@Venta[playerid][0b11] = -1;
1956 return 1;
1957 }
1958 case 1:
1959 {
1960 d@emptySlot = getslot@playerEmpty( playerid );
1961 if( -1 < d@emptySlot < MAX_VEH_PER_PLAYER )
1962 {
1963 if( obs@Venta[playerid][1] <= GetPlayerMoney( playerid ) )
1964 { //0b1010 = 10
1965 if((IsPlayerConnected(obs@Venta[playerid][0b10]) & IsPlayerInRangeOfPoint(obs@Venta[playerid][0b10], float(0b1010), (GetPlayerPos(playerid,f@posArr[0],f@posArr[1],f@posArr[0b10]),f@posArr[0]),f@posArr[1],f@posArr[0b10])))
1966 {
1967 d@iterator = -1;
1968 while( carEnum:++d@iterator < carEnum )
1969 {
1970 playerVehicle[playerid][d@emptySlot][carEnum:d@iterator] = playerVehicle[obs@Venta[playerid][0b10]][obs@Venta[playerid][0]][carEnum:d@iterator];
1971 playerVehicle[obs@Venta[playerid][0b10]][obs@Venta[playerid][0]][carEnum:d@iterator] = -1;
1972 }
1973 strmid( playerVehicle[playerid][d@emptySlot][sCarOwner], getPlayerName(playerid, true), 0, strlen(getPlayerName(playerid, true)), 0x1E); // 30
1974 playerVehicle[playerid][d@emptySlot][idOwner] = playerid;
1975 format( sz@message, sizeof sz@message, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Felicitaciones %s, has comprado el vehÃculo.", getPlayerName( playerid, true ) );
1976 SendClientMessage( playerid, -1, sz@message);
1977 format( sz@message, sizeof sz@message, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} %s ha aceptado tu oferta de venta.", getPlayerName( playerid, true ));
1978 SendClientMessage(obs@Venta[playerid][0b10], -1, sz@message);
1979 GivePlayerMoney(playerid, ((~obs@Venta[playerid][1])+1));
1980 return GivePlayerMoney( obs@Venta[playerid][0b10], obs@Venta[playerid][1]), 0x01;
1981 }
1982 else
1983 return ( obs@Venta[playerid][0] = -1, obs@Venta[playerid][1] = -1,
1984 obs@Venta[playerid][0b10] = -1, obs@Venta[playerid][0b11] = -1 ),
1985 SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} La transacción finalizo debido a la falta del vendedor."), 0x01;
1986 }
1987 else
1988 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No tienes el monto requerido para la transacción."), 0x01;
1989 }
1990 else
1991 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No tienes ningún slot para vehÃculo disponible."), 0x01;
1992 }
1993 default: return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Modo de uso: '/offreceived [ 0 | 1 ]' ( rechazar | aceptar )."), 0x01;
1994 }
1995 return 1;
1996 }
1997 }
1998 else
1999 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No te han ofertado ningún vehÃculo."), 0x01;
2000}
2001
2002//============================================================================//
2003
2004CMD:salirvcar( playerid )
2005{
2006 /*--------------------------------------------------
2007
2008 * salirvcar ( comando )
2009 * Params:
2010 - No params.
2011 * Función:
2012 - Con este comando te bajas de un vehÃculo de
2013 concesionario sin comprarle.
2014
2015 --------------------------------------------------*/
2016
2017 if( ( IsPlayerConnected( playerid ) & IsPlayerInAnyVehicle( playerid ) ) && ( 0 < paramsvDealer[ GetPlayerVehicleID(playerid) ][ inumDealer ] <= MAX_DEALERS ) )
2018 {
2019 TogglePlayerControllable( playerid, true );
2020 SetVehicleParamsForAll( GetPlayerVehicleID( playerid ), false, false );
2021 obs@Venta[ playerid ][ 1 ] = -1;
2022 return RemovePlayerFromVehicle(playerid), 0x01;
2023 }
2024 else
2025 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No estás en ningún vehÃculo de pruebas"), 0x01;
2026}
2027
2028//============================================================================//
2029
2030CMD:paysecure( playerid )
2031{
2032 /*--------------------------------------------------
2033
2034 * paysecure ( comando )
2035 * Params:
2036 - No params.
2037 * Función:
2038 - Cuando tu vehÃculo explota, este comando utilizarás
2039 para recuperarlo ( pagando una modica cantidad ).
2040
2041 --------------------------------------------------*/
2042
2043 static
2044 d@vehicleID,
2045 sz@message[5000];
2046 d@vehicleID = get@vehicleDeath( playerid );
2047
2048 if( d@vehicleID != -1 )
2049 {
2050 /*if( IsPlayerInRangeOfPoint( playerid, 3.0, Coordenadas donde se podra recuperar el vehÃculo ) )
2051 {*/
2052 if( GetPlayerMoney( playerid ) >= playerVehicle[playerid][d@vehicleID][ipRepair] )
2053 {
2054 GivePlayerMoney( playerid, ((~playerVehicle[playerid][d@vehicleID][ipRepair])+1));
2055
2056 playerVehicle[playerid][d@vehicleID][status] = true;
2057 CallLocalFunction("createPlayerVehicle", "dd", playerid, d@vehicleID);
2058
2059 format( sz@message, sizeof sz@message, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Ha recuperado su %s pagando la factura de $%d.00. El vehÃculo se encuentra en su park.", playerVehicle[playerid][d@vehicleID][sCarName], playerVehicle[playerid][d@vehicleID][ipRepair]);
2060 return SendClientMessage( playerid, -1, sz@message), 0x01;
2061 }
2062 else
2063 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No cuentas con el dinero suficiente para recuperar el vehÃculo"), 0x01;
2064 //}
2065 }
2066 else
2067 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Ninguno de sus vehÃculos esta destruÃdo."), 0x01;
2068}
2069
2070//============================================================================//
2071
2072CMD:misautos( playerid )
2073{
2074 /*--------------------------------------------------
2075
2076 * misautos ( comando )
2077 *Params:
2078 - No params.
2079 * Función:
2080 - Con este comando podrás consultar los autos de tu propiedad.
2081
2082 ----------------------------------------------------*/
2083 static
2084 d@iterator,
2085 bool:count,
2086 tmp[0x7D],
2087 sz@message[0x100];
2088 d@iterator = -1, count = false, sz@message[0] = '\0';
2089
2090 while( ++d@iterator < MAX_VEH_PER_PLAYER )
2091 {
2092 if( playerVehicle[playerid][d@iterator][inumcID] != -1 )
2093 {
2094 format( tmp, sizeof tmp, "\t[ Vehicle slot: %d ]\n Nombre: %s.\n Modelo: %d.\n Estado: %s.\n ID: %d.\n\n", d@iterator, playerVehicle[playerid][d@iterator][sCarName], playerVehicle[playerid][d@iterator][iModel],
2095 ((playerVehicle[playerid][d@iterator][status]) ? ("Normal") : ("DestruÃdo")), playerVehicle[playerid][d@iterator][icnumID]);
2096 strcat(( count = true, sz@message), tmp, sizeof sz@message);
2097 }
2098 else continue;
2099 }
2100 if( count )
2101 return ShowPlayerDialog( playerid, showPlayerVehicles, DIALOG_STYLE_MSGBOX, "[wDealer:] Tus vehÃculos", sz@message, "Aceptar.", "Cancelar."), 0x01;
2102 else
2103 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No posees ningún vehÃculo."), 0x01;
2104}
2105
2106//============================================================================//
2107
2108CMD:respawn(playerid)
2109{
2110 /*--------------------------------------------------
2111
2112 * respawn ( comando )
2113 *Params:
2114 - No params.
2115 * Función:
2116 - Con este comando realizarás un respawn de todos
2117 los vehÃculos del servidor (respetando los autos modificados).
2118
2119 ----------------------------------------------------*/
2120
2121 static
2122 d@iterator, i, d@vehicle, bool:verify[MAX_VEHICLES] = {false, ...};
2123 d@iterator = -1,
2124 i = GetMaxPlayers()-1,
2125 d@vehicle = -1;
2126
2127 while(++d@iterator < MAX_VEHICLES)
2128 {
2129 if(GetVehicleModel(d@iterator))
2130 {
2131 if(is@vehicleOccupied(d@iterator)) continue;
2132 else
2133 {
2134 verify[d@iterator] = false;
2135 while(--i > -1)
2136 {
2137 if(!IsPlayerConnected(i)) continue;
2138 d@vehicle = getslot@playerVehicle(i, d@iterator);
2139 if(d@vehicle != -1 && isvehicle@playerProperty(i, d@iterator))
2140 {
2141 static
2142 Float:f@vPos[4];
2143 f@vPos[0] = EOS;
2144
2145 GetVehiclePos(playerVehicle[i][d@vehicle][icnumID], f@vPos[0], f@vPos[1], f@vPos[0b10]);
2146 GetVehicleZAngle(playerVehicle[i][d@vehicle][icnumID], f@vPos[0b11]);
2147 GetVehicleHealth(playerVehicle[i][d@vehicle][icnumID], playerVehicle[i][d@vehicle][damageVeh][dHealth]);
2148 GetVehicleDamageStatus(playerVehicle[i][d@vehicle][icnumID], playerVehicle[i][d@vehicle][damageVeh][dPanels],
2149 playerVehicle[i][d@vehicle][damageVeh][dDoors],
2150 playerVehicle[i][d@vehicle][damageVeh][dLights],
2151 playerVehicle[i][d@vehicle][damageVeh][dTires]);
2152
2153 playerVehicle[i][d@vehicle][fPos_X] = f@vPos[0];
2154 playerVehicle[i][d@vehicle][fPos_Y] = f@vPos[1];
2155 playerVehicle[i][d@vehicle][fPos_Z] = f@vPos[2];
2156 playerVehicle[i][d@vehicle][fPos_R] = f@vPos[3];
2157
2158 DestroyVehicle( playerVehicle[i][d@vehicle][icnumID] );
2159 verify[d@iterator] = true;
2160
2161 playerVehicle[i][d@vehicle][icnumID] = getNextVehicleID();
2162 createPlayerVehicle( i, d@vehicle);
2163 save@playerVehicles( i, false );
2164 break;
2165 }
2166 else continue;
2167 }
2168 if(verify[d@iterator] == false) SetVehicleToRespawn(d@iterator), i = GetMaxPlayers()-1;
2169 else continue;
2170 }
2171 }
2172 else continue;
2173 }
2174 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Has respawneado todos los vehÃculos"), 0x01;
2175}
2176
2177//============================================================================//
2178
2179CMD:park( playerid )
2180{
2181 /*--------------------------------------------------
2182
2183 * park ( comando )
2184 * Params:
2185 - No params.
2186 * Función:
2187 - Este comando actualiza las variables de posición
2188 del vehÃculo, estacionandolo asà para el reinicio /
2189 cuando vuelvan a cargar tus vehÃculos.
2190 - Este comando funciona en el vehÃculo en el que estés
2191 montado.
2192 --------------------------------------------------*/
2193
2194 static
2195 d@vehicle,
2196 sz@message[0x7D],
2197 Float:f@vPos[0b101];
2198
2199 d@vehicle = getslot@playerVehicle( playerid, GetPlayerVehicleID( playerid ) );
2200
2201 if( IsPlayerInAnyVehicle( playerid ) && isvehicle@playerProperty( playerid, GetPlayerVehicleID( playerid ) ) )
2202 {
2203 GetVehiclePos( GetPlayerVehicleID( playerid ), f@vPos[0], f@vPos[1], f@vPos[0b10]);
2204 GetVehicleZAngle( GetPlayerVehicleID( playerid ), f@vPos[0b11]);
2205 GetVehicleHealth( GetPlayerVehicleID( playerid ), playerVehicle[playerid][d@vehicle][damageVeh][dHealth]);
2206 GetVehicleDamageStatus( GetPlayerVehicleID( playerid ), playerVehicle[playerid][d@vehicle][damageVeh][dPanels],
2207 playerVehicle[playerid][d@vehicle][damageVeh][dDoors],
2208 playerVehicle[playerid][d@vehicle][damageVeh][dLights],
2209 playerVehicle[playerid][d@vehicle][damageVeh][dTires]);
2210
2211 playerVehicle[playerid][d@vehicle][fPos_X] = f@vPos[0];
2212 playerVehicle[playerid][d@vehicle][fPos_Y] = f@vPos[1];
2213 playerVehicle[playerid][d@vehicle][fPos_Z] = f@vPos[2];
2214 playerVehicle[playerid][d@vehicle][fPos_R] = f@vPos[3];
2215
2216 DestroyVehicle( playerVehicle[playerid][d@vehicle][icnumID] );
2217
2218 playerVehicle[playerid][d@vehicle][icnumID] = getNextVehicleID();
2219 createPlayerVehicle( playerid, d@vehicle);
2220
2221 PutPlayerInVehicle( playerid, playerVehicle[playerid][d@vehicle][icnumID], 0);
2222 save@playerVehicles( playerid, false );
2223
2224 format(sz@message, sizeof sz@message, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} %s has estacionado correctamente tu %s.", getPlayerName( playerid, true ), playerVehicle[playerid][d@vehicle][sCarName]);
2225 return SendClientMessage( playerid, -1, sz@message), 0x01;
2226 }
2227 else
2228 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No estás en un vehÃculo o no es de tu propiedad."), 0x01;
2229}
2230
2231//============================================================================//
2232
2233CMD:gmaletero( playerid, params[] )
2234{
2235 /*--------------------------------------------------
2236
2237 * gMaletero ( comando )
2238 * Params:
2239 - arma.
2240 - chaleco.
2241 * Función:
2242 - Con este comando depositarás el arma /
2243 chaleco en el vehÃculo ( según la opción
2244 elegida ).
2245
2246 --------------------------------------------------*/
2247
2248 static
2249 d@vehicle,
2250 sz@message[0x7D << 0b10],
2251 d@slotEmpty;
2252
2253 d@vehicle = get@vehicleInRange( playerid );
2254
2255 if( ( d@vehicle != -1 ) && ( playerVehicle[playerid][d@vehicle][status] ) )
2256 {
2257 if( isnull( params ) ) return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Modo de uso: '/gmaletero [opción] ( arma | chaleco )."), 0x01;
2258 else
2259 {
2260 if( !IsPlayerInAnyVehicle( playerid ) )
2261 {
2262 if( strcmp( params, "arma", true ) == 0 )
2263 {
2264 if( 0 < GetPlayerWeapon( playerid ) <= 46 )
2265 {
2266 static
2267 sz@weapon[0x19];
2268
2269 d@slotEmpty = d@trunkslotEmpty( playerid, d@vehicle );
2270
2271 if( d@slotEmpty != -1 )
2272 {
2273 playerVehicle[playerid][d@vehicle][Maletero][tArmas][d@slotEmpty] = GetPlayerWeapon( playerid );
2274 playerVehicle[playerid][d@vehicle][Maletero][tMuniciones][d@slotEmpty] = GetPlayerAmmo( playerid );
2275
2276 format( sz@message, sizeof sz@message, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Has almacenado tu %s en tu %s en el espacio N°%d para guardar armas.",
2277 (GetWeaponName(playerVehicle[playerid][d@vehicle][Maletero][tArmas][d@slotEmpty], sz@weapon, sizeof(sz@weapon)), sz@weapon), playerVehicle[playerid][d@vehicle][sCarName], d@slotEmpty+1);
2278
2279 remove@playerWeapon(playerid, playerVehicle[playerid][d@vehicle][Maletero][tArmas][d@slotEmpty]);
2280
2281 save@playerVehicles( playerid, false );
2282 }
2283 return SendClientMessage( playerid, -1,(( d@slotEmpty != -1 ) ? (sz@message) : ("{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Tú vehÃculo no tiene slots vacÃos."))), 0x01;
2284 }
2285 else
2286 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No posees un arma válida."), 0x01;
2287 }
2288 else if( strcmp( params, "chaleco", true ) == 0 )
2289 {
2290 static
2291 Float:f@armour;
2292 GetPlayerArmour( playerid, f@armour );
2293 if((floatcmp(f@armour, float(0)) == 1) && (floatcmp(f@armour, float(0x65)) == -1))
2294 {
2295 if( floatcmp( playerVehicle[playerid][d@vehicle][Maletero][tArmadura], float( 1 ) ) == -1 )
2296 {
2297 playerVehicle[playerid][d@vehicle][Maletero][tArmadura] = f@armour;
2298 SetPlayerArmour( playerid, float( 0 ));
2299
2300 save@playerVehicles( playerid, false );
2301
2302 return SendClientMessage( playerid, -1, (format(sz@message, sizeof sz@message, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Has almacenado un chaleco con %.4f impactos de utilidad en tu %s.", f@armour, playerVehicle[playerid][d@vehicle][sCarName]),sz@message)), 0x01;
2303 }
2304 else
2305 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} ¡Ya tienes un chaleco en este vehÃculo!"), 0x01;
2306 }
2307 else
2308 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No posees armadura."), 0x01;
2309 }
2310 else
2311 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Modo de uso: '/gmaletero [opción] ( dejar | sacar )."), 0x01;
2312 }
2313 else
2314 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No puedes hacerlo mientras estas en el vehÃculo."), 0x01;
2315 }
2316 }
2317 else
2318 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No tienes un vehÃculo cerca tuyo."), 0x01;
2319}
2320
2321//============================================================================//
2322
2323CMD:smaletero( playerid, params[] )
2324{
2325 /*--------------------------------------------------
2326
2327 * smaletero ( comando )
2328 * Params:
2329 - Chaleco.
2330 - Armas [slot].
2331 * Función:
2332 - Con este comando puedes retirar el chaleco
2333 almacenado en el vehÃculo.
2334 - Puedes también retirar el arma almacenada
2335 el slot indicado [slot].
2336
2337 --------------------------------------------------*/
2338
2339 static
2340 d@vehicle,
2341 sz@message[0x7D << 0b10];
2342
2343 d@vehicle = get@vehicleInRange( playerid );
2344
2345 if( ( d@vehicle != -1 ) && ( playerVehicle[playerid][d@vehicle][status] ) )
2346 {
2347 if( isnull( params ) ) return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Modo de uso: '/smaletero [opción] ( arma | chaleco )."), 0x01;
2348 else
2349 {
2350 if( !IsPlayerInAnyVehicle( playerid ) )
2351 {
2352 static
2353 sz@option[0b1000],
2354 d@value;
2355
2356 if( strcmp( params, "chaleco", true ) == 0 )
2357 {
2358 if((floatcmp(playerVehicle[playerid][d@vehicle][Maletero][tArmadura],float(0))== 1) && (floatcmp(playerVehicle[playerid][d@vehicle][Maletero][tArmadura],float(0x65))== -1))
2359 {
2360 SetPlayerArmour( playerid, playerVehicle[playerid][d@vehicle][Maletero][tArmadura] );
2361
2362 format( sz@message, sizeof sz@message, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Has tomado tu chaleco con %.4f impactos de utilidad .", playerVehicle[playerid][d@vehicle][Maletero][tArmadura]);
2363
2364 playerVehicle[playerid][d@vehicle][Maletero][tArmadura] = float( 0 );
2365 save@playerVehicles( playerid, false );
2366
2367 return SendClientMessage( playerid, -1, sz@message ), 0x01;
2368 }
2369 else
2370 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No posees un chaleco en tu vehÃculo."), 0x01;
2371 }
2372 else if( !sscanf( params, "s[8]d", sz@option, d@value ) )
2373 {
2374 if( 1 <= d@value <= 5 )
2375 {
2376 static
2377 d@slotWeapon;
2378
2379 d@slotWeapon = floatround(floatsub(float(d@value), float(1)), floatround_round);
2380
2381 if( playerVehicle[playerid][d@vehicle][Maletero][tArmas][d@slotWeapon] > 0 && playerVehicle[playerid][d@vehicle][Maletero][tMuniciones][d@slotWeapon] > 0 )
2382 {
2383 GivePlayerWeapon( playerid, playerVehicle[playerid][d@vehicle][Maletero][tArmas][d@slotWeapon], playerVehicle[playerid][d@vehicle][Maletero][tMuniciones][d@slotWeapon]);
2384
2385 format( sz@message, sizeof sz@message, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Has tomado tu %s del slot N°%d de tu %s.",(GetWeaponName(playerVehicle[playerid][d@vehicle][Maletero][tArmas][d@slotWeapon],sz@message, sizeof(sz@message)), sz@message),
2386 floatround(floatadd(float(d@slotWeapon), float(1)), floatround_round), playerVehicle[playerid][d@vehicle][sCarName]);
2387
2388 playerVehicle[playerid][d@vehicle][Maletero][tArmas][d@slotWeapon] = 0;
2389 playerVehicle[playerid][d@vehicle][Maletero][tMuniciones][d@slotWeapon] = 0;
2390
2391 save@playerVehicles( playerid, false );
2392
2393 return SendClientMessage( playerid, -1, sz@message), 0x01;
2394 }
2395 else
2396 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No tienes un arma en ese slot."), 0x01;
2397 }
2398 else
2399 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Modo de uso: '/smaletero [arma] [slot] ( slot: 1 - 5 )."), 0x01;
2400 }
2401 else
2402 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Modo de uso: '/smaletero [opción] ( [arma] [slot] | [chaleco] )."), 0x01;
2403 }
2404 else
2405 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No puedes hacerlo mientras estas en el vehÃculo."), 0x01;
2406 }
2407 }
2408 else
2409 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No tienes un vehÃculo cerca tuyo."), 0x01;
2410}
2411
2412//============================================================================//
2413
2414CMD:motor( playerid )
2415{
2416 /*--------------------------------------------------
2417
2418 * setVehicleParamsEx
2419 * Params:
2420 - No params.
2421 * Función:
2422 - Con este comando encenderás/apagarás el
2423 motor del vehÃculo en el que te encuentres.
2424
2425 --------------------------------------------------*/
2426
2427 static
2428 d@vehicle,
2429 d@vehSlot,
2430 sz@message[0x7D];
2431
2432 sz@message[0] = '\0';
2433 d@vehicle = GetPlayerVehicleID( playerid );
2434
2435 if((IsPlayerInAnyVehicle( playerid ) && isvehicle@playerProperty( playerid, d@vehicle )))
2436 {
2437 d@vehSlot = getslot@playerVehicle( playerid, d@vehicle );
2438 setVehicleParamsEx( d@vehicle, VEH_ENGINE, playerVehicle[playerid][d@vehSlot][paramsVeh][pEngine]);
2439
2440 format( sz@message, sizeof sz@message, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} %s usted %s{FFFFFF} el motor de su %s{FFFFFF}.",
2441 getPlayerName(playerid, true),
2442 ((playerVehicle[playerid][d@vehSlot][paramsVeh][pEngine]) ? ("{008000}encendió") : ("{FF0000}apagó")),
2443 playerVehicle[playerid][d@vehSlot][sCarName]);
2444
2445 return SendClientMessage( playerid, -1, sz@message), 0x01;
2446 }
2447 else
2448 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No estas en un vehÃculo de tu propiedad.");
2449}
2450
2451//============================================================================//
2452
2453CMD:luces( playerid )
2454{
2455 /*--------------------------------------------------
2456
2457 * luces ( comando ).
2458 * Params:
2459 - No params.
2460 * Función:
2461 - Con esta función enciendes/apagas las luces
2462 del vehÃculo propio en el que te encuentres.
2463
2464 --------------------------------------------------*/
2465
2466 static
2467 d@vehicle,
2468 d@vehSlot,
2469 sz@message[0x7D];
2470
2471 sz@message[0] = '\0';
2472 d@vehicle = GetPlayerVehicleID( playerid );
2473
2474 if((IsPlayerInAnyVehicle( playerid ) && isvehicle@playerProperty( playerid, d@vehicle )))
2475 {
2476 d@vehSlot = getslot@playerVehicle( playerid, d@vehicle );
2477 setVehicleParamsEx( d@vehicle, VEH_LIGHTS, playerVehicle[playerid][d@vehSlot][paramsVeh][pLights]);
2478
2479 format( sz@message, sizeof sz@message, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} %s usted %s{FFFFFF} las luces de su %s{FFFFFF}.",
2480 getPlayerName(playerid, true),
2481 ((playerVehicle[playerid][d@vehSlot][paramsVeh][pLights]) ? ("{008000}encendió") : ("{FF0000}apagó")),
2482 playerVehicle[playerid][d@vehSlot][sCarName]);
2483
2484 return SendClientMessage( playerid, -1, sz@message), 0x01;
2485 }
2486 else
2487 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No estas en un vehÃculo de tu propiedad.");
2488}
2489
2490//============================================================================//
2491
2492CMD:alarma( playerid )
2493{
2494 /*--------------------------------------------------
2495
2496 * alarma
2497 * Params:
2498 - No params.
2499 * Función:
2500 - Con este comando activas/desactivas la alarma
2501 del vehiculo propio en el que te encuentres o el más
2502 cercano a tu posición.
2503
2504 --------------------------------------------------*/
2505
2506 static
2507 d@slot,
2508 sz@message[0x7D];
2509
2510 sz@message[0] = '\0';
2511 d@slot = get@vehicleInRange( playerid );
2512
2513 if( IsPlayerInAnyVehicle( playerid ) && isvehicle@playerProperty( playerid, playerVehicle[playerid][d@slot][icnumID]))
2514 {
2515 goto isVeh;
2516 }
2517 else if((( d@slot != -1 ) && ( playerVehicle[playerid][d@slot][status] )))
2518 {
2519 isVeh:
2520 setVehicleParamsEx( playerVehicle[playerid][d@slot][icnumID], VEH_ALARM, playerVehicle[playerid][d@slot][paramsVeh][pAlarm], playerid);
2521
2522 format( sz@message, sizeof sz@message, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} %s usted %s{FFFFFF} la alarma de su %s{FFFFFF}.",
2523 getPlayerName(playerid, true),
2524 ((playerVehicle[playerid][d@slot][paramsVeh][pAlarm]) ? ("{008000}encendió") : ("{FF0000}apagó")),
2525 playerVehicle[playerid][d@slot][sCarName]);
2526 SendClientMessage( playerid, -1, sz@message);
2527 }
2528 else
2529 SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No estás en un vehÃculo propio o cerca de alguno.");
2530 return 0x01;
2531}
2532
2533//============================================================================//
2534
2535CMD:lock( playerid )
2536{
2537 /*--------------------------------------------------
2538
2539 * lock ( comando )
2540 - Params:
2541 - No params.
2542 * Función:
2543 - Con este comando modificarás el estado de las puertas
2544 del vehÃculo de tu propiedad que más se aproxime
2545 a tu posición o en el que te encuentres.
2546
2547 --------------------------------------------------*/
2548
2549 static
2550 d@slot,
2551 sz@message[0x7D];
2552
2553 sz@message[0] = '\0';
2554 d@slot = get@vehicleInRange( playerid );
2555
2556 if( IsPlayerInAnyVehicle( playerid ) && isvehicle@playerProperty( playerid, playerVehicle[playerid][d@slot][icnumID]))
2557 {
2558 goto isVeh;
2559 }
2560 else if((( d@slot != -1 ) && ( playerVehicle[playerid][d@slot][status] )))
2561 {
2562 isVeh:
2563 setVehicleParamsEx( playerVehicle[playerid][d@slot][icnumID], VEH_LOCK, playerVehicle[playerid][d@slot][paramsVeh][pLock] );
2564
2565 format( sz@message, sizeof sz@message, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} %s usted %s{FFFFFF} su %s{FFFFFF}.",
2566 getPlayerName(playerid, true),
2567 ((playerVehicle[playerid][d@slot][paramsVeh][pLock]) ? ("{FF0000}cerró") : ("{008000}abrió")),
2568 playerVehicle[playerid][d@slot][sCarName]);
2569
2570 SendClientMessage( playerid, -1, sz@message);
2571 }
2572 else SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No hay un vehÃculo de tu propiedad.");
2573 return 0x01;
2574}
2575
2576//============================================================================//
2577
2578CMD:capo( playerid )
2579{
2580 /*--------------------------------------------------
2581
2582 * capo ( comando )
2583 * Params:
2584 - No params.
2585 * Función:
2586 - Con este comando literalmente abres/cierras
2587 el capo del vehÃculo en el que te encuentres.
2588
2589 --------------------------------------------------*/
2590
2591 static
2592 d@vehicle,
2593 d@vehSlot,
2594 sz@message[0x7D];
2595
2596 sz@message[0] = '\0';
2597 d@vehicle = GetPlayerVehicleID( playerid );
2598
2599 if((IsPlayerInAnyVehicle( playerid ) && isvehicle@playerProperty( playerid, d@vehicle )))
2600 {
2601 d@vehSlot = getslot@playerVehicle( playerid, d@vehicle );
2602 setVehicleParamsEx( d@vehicle, VEH_BONNET, playerVehicle[playerid][d@vehSlot][paramsVeh][pBonnet]);
2603
2604 format( sz@message, sizeof sz@message, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} %s usted %s{FFFFFF} el capo de su %s{FFFFFF}.",
2605 getPlayerName(playerid, true),
2606 ((playerVehicle[playerid][d@vehSlot][paramsVeh][pBonnet]) ? ("{008000}abrió") : ("{FF0000}cerró")),
2607 playerVehicle[playerid][d@vehSlot][sCarName]);
2608
2609 return SendClientMessage( playerid, -1, sz@message), 0x01;
2610 }
2611 else
2612 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No estas en un vehÃculo de tu propiedad.");
2613}
2614
2615//============================================================================//
2616
2617CMD:pmaletero( playerid )
2618{
2619 /*--------------------------------------------------
2620
2621 * pmaletero ( comando )
2622 * Params:
2623 - no params.
2624 * Función:
2625 - Con este comando literalmente abres/cierras el maletero
2626 del vehÃculo en el que te encuentres.
2627
2628 --------------------------------------------------*/
2629
2630 static
2631 d@vehicle,
2632 d@vehSlot,
2633 sz@message[0x7D];
2634
2635 sz@message[0] = '\0';
2636 d@vehicle = GetPlayerVehicleID( playerid );
2637
2638 if((IsPlayerInAnyVehicle( playerid ) && isvehicle@playerProperty( playerid, d@vehicle )))
2639 {
2640 d@vehSlot = getslot@playerVehicle( playerid, d@vehicle );
2641 setVehicleParamsEx( d@vehicle, VEH_BOOT, playerVehicle[playerid][d@vehSlot][paramsVeh][pBoot]);
2642
2643 format( sz@message, sizeof sz@message, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} %s usted %s{FFFFFF} el maletero de su %s{FFFFFF}.",
2644 getPlayerName(playerid, true),
2645 ((playerVehicle[playerid][d@vehSlot][paramsVeh][pBoot]) ? ("{008000}abrió") : ("{FF0000}cerró")),
2646 playerVehicle[playerid][d@vehSlot][sCarName]);
2647
2648 return SendClientMessage( playerid, -1, sz@message), 0x01;
2649 }
2650 else
2651 return SendClientMessage( playerid, -1, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} No estas en un vehÃculo de tu propiedad.");
2652}
2653
2654//============================================================================//
2655
2656CMD:cdealerloc( playerid )
2657{
2658 /*--------------------------------------------------
2659
2660 * cdealerloc (Comando)
2661 * Params:
2662 - Sin parámetros.
2663 * Función:
2664 - Se crea un nuevo concesionario en la tabla e inicia
2665 la edición del mismo ( dialogo ).
2666
2667 --------------------------------------------------*/
2668
2669 static
2670 sz@message[0x7D];
2671
2672 d@optionsEdit[playerid][0] = getdealer@idEmpty();
2673 if(d@optionsEdit[playerid][0] != -1)
2674 {
2675 mysql_function_query( cHandle, "INSERT INTO `dealerLocations` ( `DealerName` ) VALUES ( 'Null' );", false, "OnQueryFinish", "dd", sql@dealerInsertID, d@optionsEdit[playerid][0]);
2676 format( sz@message, sizeof sz@message, "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Menú de edición - Concesionario %d", d@optionsEdit[playerid][0]);
2677 ShowPlayerDialog( playerid, showMenuCreateDealer, DIALOG_STYLE_LIST, sz@message, " 1)\tNombre del concesionario.\n 2)\tPosición del concesionario.\n 3)\tGuardar concesionario.\n", "Seleccionar.", "Cancelar.");
2678 }
2679 else
2680 sz@message = "{FF0000}[{FFD700}wDealer:{FF0000}]{FFFFFF} Se a alcanzado el número máximo de concesionarios.";
2681 return SendClientMessage( playerid, -1, sz@message), 0x01;
2682}
2683
2684//============================================================================//
2685
2686save@playerVehicles( playerid, bool:destroy = true )
2687{
2688 /*--------------------------------------------------
2689
2690 * save@playerVehicles
2691 * Params:
2692 - playerid
2693 * Función:
2694 - Ejecuta las consultas correspondientes para almacenar
2695 los vehÃculos de un determinado usuario ( playerid ).
2696
2697 --------------------------------------------------*/
2698
2699 static
2700 i;
2701 i = -1;
2702
2703 while( ++i < MAX_VEH_PER_PLAYER )
2704 {
2705 if( playerVehicle[playerid][i][inumcID] != -1 )
2706 {
2707 static
2708 sz@query[0x400];
2709
2710 GetVehicleHealth( playerVehicle[playerid][i][icnumID], playerVehicle[playerid][i][damageVeh][dHealth]);
2711 GetVehicleDamageStatus( playerVehicle[playerid][i][icnumID], playerVehicle[playerid][i][damageVeh][dPanels],
2712 playerVehicle[playerid][i][damageVeh][dDoors],
2713 playerVehicle[playerid][i][damageVeh][dLights],
2714 playerVehicle[playerid][i][damageVeh][dTires]);
2715
2716 mysql_format( cHandle, sz@query,
2717 "UPDATE `userVehicles` SET `OwnerName` = '%e', `CarName` = '%e', `carModel` = %d, `cReparacion` = %d, `Status` = %d, `Pos_X` = %f, `Pos_Y` = %f, `Pos_Z` = %f,"\
2718 " `Pos_R` = %f, `pEngine` = %d, `pLights` = %d, `pAlarm` = %d, `pLock` = %d, `pBonnet` = %d, `pBoot` = %d, `pObjective` = %d, `Color1` = %d, `Color2` = %d WHERE `CAR_ID` = %d;",
2719 playerVehicle[playerid][i][sCarOwner],
2720 playerVehicle[playerid][i][sCarName],
2721 playerVehicle[playerid][i][iModel],
2722 playerVehicle[playerid][i][ipRepair],
2723 (( playerVehicle[playerid][i][status] )?( 1 ):( 0 )),
2724 playerVehicle[playerid][i][fPos_X],
2725 playerVehicle[playerid][i][fPos_Y],
2726 playerVehicle[playerid][i][fPos_Z],
2727 playerVehicle[playerid][i][fPos_R],
2728 playerVehicle[playerid][i][paramsVeh][pEngine],
2729 playerVehicle[playerid][i][paramsVeh][pLights],
2730 playerVehicle[playerid][i][paramsVeh][pAlarm],
2731 playerVehicle[playerid][i][paramsVeh][pLock],
2732 playerVehicle[playerid][i][paramsVeh][pBonnet],
2733 playerVehicle[playerid][i][paramsVeh][pBoot],
2734 playerVehicle[playerid][i][paramsVeh][pObjective],
2735 playerVehicle[playerid][i][mods][mColores][0],
2736 playerVehicle[playerid][i][mods][mColores][1],
2737 playerVehicle[playerid][i][inumcID]);
2738
2739 mysql_function_query( cHandle, sz@query, false, "OnQueryFinish", "dd", empty@queryReceived, -1);
2740
2741 mysql_format( cHandle, sz@query,
2742 "UPDATE `userVehicles` SET `dHealth` = %f, `dPanels` = %d, `dDoors` = %d, `dLights` = %d, `dTires` = %d WHERE `CAR_ID` = %d;",
2743 playerVehicle[playerid][i][damageVeh][dHealth],
2744 playerVehicle[playerid][i][damageVeh][dPanels],
2745 playerVehicle[playerid][i][damageVeh][dDoors],
2746 playerVehicle[playerid][i][damageVeh][dLights],
2747 playerVehicle[playerid][i][damageVeh][dTires],
2748 playerVehicle[playerid][i][inumcID]);
2749 mysql_function_query( cHandle, sz@query, false, "OnQueryFinish", "dd", empty@queryReceived, -1);
2750
2751 mysql_format( cHandle, sz@query,
2752 "UPDATE `userVehicles` SET `Spoiler` = %d, `Hood` = %d, `Roof` = %d, `RightSideskirt` = %d, `LeftSideskirt` = %d, `Nitro` = %d, `Lamps` = %d, `Exhaust` = %d, `Wheels` = %d, "\
2753 "`Stereo` = %d, `Hidraulics` = %d, `Paintjob` = %d, `Bullbar` = %d, `RealBullbars` = %d, `FrontSign` = %d, `FrontBullbars` = %d, `Bullbars` = %d, `RearBumper` = %d, `LeftVents` = %d, "\
2754 "`RightVents` = %d, `FrontBumper` = %d WHERE `CAR_ID` = %d;",
2755 playerVehicle[playerid][i][mods][mSpoiler],
2756 playerVehicle[playerid][i][mods][mHood],
2757 playerVehicle[playerid][i][mods][mRoof],
2758 playerVehicle[playerid][i][mods][mSideskirts][0],
2759 playerVehicle[playerid][i][mods][mSideskirts][1],
2760 playerVehicle[playerid][i][mods][mNitro],
2761 playerVehicle[playerid][i][mods][mLamps],
2762 playerVehicle[playerid][i][mods][mExhaust],
2763 playerVehicle[playerid][i][mods][mWheels],
2764 playerVehicle[playerid][i][mods][mStereo],
2765 playerVehicle[playerid][i][mods][mHidraulics],
2766 playerVehicle[playerid][i][mods][mPaintjob],
2767 playerVehicle[playerid][i][mods][mBullbar],
2768 playerVehicle[playerid][i][mods][mRealBullbars],
2769 playerVehicle[playerid][i][mods][mFrontSign],
2770 playerVehicle[playerid][i][mods][mFrontBullbars],
2771 playerVehicle[playerid][i][mods][mBullbars],
2772 playerVehicle[playerid][i][mods][mRearBumper],
2773 playerVehicle[playerid][i][mods][mVents][0],
2774 playerVehicle[playerid][i][mods][mVents][1],
2775 playerVehicle[playerid][i][mods][mFrontBumper],
2776 playerVehicle[playerid][i][inumcID]);
2777 //strcat( s@query, tmp, sizeof( s@query ));
2778 mysql_function_query( cHandle, sz@query, false, "OnQueryFinish", "dd", empty@queryReceived, -1);
2779
2780 mysql_format( cHandle, sz@query,
2781 "UPDATE `userVehicles` SET `weapon_1` = %d, `ammo_1` = %d, `weapon_2` = %d, `ammo_2` = %d, `weapon_3` = %d, `ammo_3` = %d, `weapon_4` = %d, `ammo_4` = %d, `weapon_5` = %d, `ammo_5` = %d, `Armour` = %f WHERE `CAR_ID` = %d;",
2782 playerVehicle[playerid][i][Maletero][tArmas][0],
2783 playerVehicle[playerid][i][Maletero][tMuniciones][0],
2784 playerVehicle[playerid][i][Maletero][tArmas][1],
2785 playerVehicle[playerid][i][Maletero][tMuniciones][1],
2786 playerVehicle[playerid][i][Maletero][tArmas][0b10],
2787 playerVehicle[playerid][i][Maletero][tMuniciones][0b10],
2788 playerVehicle[playerid][i][Maletero][tArmas][0b11],
2789 playerVehicle[playerid][i][Maletero][tMuniciones][0b11],
2790 playerVehicle[playerid][i][Maletero][tArmas][0b100],
2791 playerVehicle[playerid][i][Maletero][tMuniciones][0b100],
2792 playerVehicle[playerid][i][Maletero][tArmadura],
2793 playerVehicle[playerid][i][inumcID]); //strcat( s@query, tmp, sizeof s@query );
2794
2795 mysql_function_query( cHandle, sz@query, false, "OnQueryFinish", "dd", empty@queryReceived, -1);
2796
2797 if( destroy ) DestroyVehicle(playerVehicle[playerid][i][icnumID]);
2798 }
2799 else continue;
2800 }
2801}
2802
2803//============================================================================//
2804
2805getPlayerName( playerid, bool:deep = false )
2806{
2807 /*--------------------------------------------------
2808
2809 *getPlayerName
2810 * Params:
2811 - playerid
2812 - deep
2813 * Función:
2814 - Esta función retornará el nombre del usuario especificado
2815 ( playerid ) ya sea con '_' o sin el, esto de acuerdo al valor
2816 que tome deep. ( true = ' ', false = '_').
2817
2818 --------------------------------------------------*/
2819
2820 static
2821 sz@playerName[0b11000];
2822 GetPlayerName( playerid, sz@playerName, sizeof sz@playerName );
2823
2824 if( deep )
2825 {
2826 for( new i = sizeof( sz@playerName )-1; i > -1; --i )
2827 {
2828 if( sz@playerName[i] == '_' ) sz@playerName[i] = ' ';
2829 else continue;
2830 }
2831 }
2832 print(sz@playerName);
2833 return sz@playerName;
2834}
2835
2836//============================================================================//
2837
2838isNumeric( string[] )
2839{
2840 /*--------------------------------------------------
2841
2842 * isNumeric
2843 * Params:
2844 - string
2845 * Función:
2846 - Verifica sà una cadena de texto es solamente
2847 numerica, de ser asÃ, retorna true, de lo contrario
2848 false.
2849
2850 --------------------------------------------------*/
2851
2852 for( new i = strlen( string )-1; i > 0; --i )
2853 {
2854 if( '0' > string[i] || string[i] > '9' ) return false;
2855 else continue;
2856 }
2857 return true;
2858}
2859
2860//============================================================================//
2861
2862is@vehicleOccupied( vehicleid )
2863{
2864 /*--------------------------------------------------
2865
2866 * is@vehicleOccupied
2867 * Params:
2868 - vehicleid
2869 * Función:
2870 - Mediante un bucle se determina sà un vehÃculo ( vehicleid )
2871 posee algún usuario en su interior.
2872
2873 --------------------------------------------------*/
2874
2875 for( new i = GetMaxPlayers()-1; i > -1; --i )
2876 {
2877 if( IsPlayerInVehicle( i, vehicleid ) ) return true;
2878 else continue;
2879 }
2880 return false;
2881}
2882
2883//============================================================================//
2884
2885get@vehicleInRange( playerid )
2886{
2887 /*--------------------------------------------------
2888
2889 * get@vehicleInRange
2890 * Params:
2891 - playerid
2892 * Función:
2893 - Con esta función obtenemos la ID del vehÃculo propio
2894 que se encuentre más cercano a nuestra posición, de no
2895 haber ninguno, retorna -1.
2896
2897 --------------------------------------------------*/
2898
2899 static
2900 d@iterator,
2901 Float:f@posVeh[0b11],
2902 bool:b@ver;
2903
2904 d@iterator = -1, b@ver = false;
2905
2906 while( ++d@iterator < MAX_VEH_PER_PLAYER )
2907 {
2908 GetVehiclePos( playerVehicle[playerid][d@iterator][icnumID], f@posVeh[0], f@posVeh[1], f@posVeh[0b10]);
2909 if(playerVehicle[playerid][d@iterator][icnumID] != -1 && IsPlayerInRangeOfPoint(playerid, float(0b11), f@posVeh[0], f@posVeh[1], f@posVeh[0b10])) {
2910 b@ver = true;
2911 break;
2912 }
2913 }
2914 return ((( b@ver ) ? ( d@iterator ) : ( -1 )));
2915}
2916
2917//============================================================================//
2918
2919getslot@playerVehicle( playerid, vehicleid )
2920{
2921 /*--------------------------------------------------
2922
2923 * getslot@playerVehicle
2924 * Params:
2925 - playerid
2926 - vehicleid
2927 * Función:
2928 - Con esta función obtenemos el número de slot
2929 que es el vehÃculo ( vehicleid ) en el que este
2930 motado el jugador ( playerid ), esto se hará si el vehÃculo
2931 es de la propiedad del jugador, sà no, retornará -1.
2932
2933 --------------------------------------------------*/
2934
2935 static
2936 i, bool:b@ver;
2937 i = -1, b@ver = false;
2938
2939 while( ++i < MAX_VEH_PER_PLAYER )
2940 {
2941 if( playerVehicle[playerid][i][icnumID] == vehicleid ){
2942 b@ver = true;
2943 break;
2944 }
2945 else continue;
2946 }
2947 return (((b@ver) ? ( i ) : ( -1 )));
2948
2949}
2950
2951//============================================================================//
2952
2953isvehicle@playerProperty( playerid, vehicleid )
2954{
2955 /*--------------------------------------------------
2956
2957 * isvehicle@playerProperty
2958 * Params:
2959 - playerid
2960 - vehicleid
2961 * Función:
2962 - Con esta función sabremos si un vehÃculo ( vehicleid )
2963 es de la propiedad de un jugador ( playerid ), retornando
2964 true sà lo es & false sà no lo es.
2965
2966 --------------------------------------------------*/
2967
2968 static
2969 i;
2970 i = -1;
2971 while( ++i < MAX_VEH_PER_PLAYER )
2972 {
2973 if( playerVehicle[playerid][i][icnumID] == vehicleid ) return true;
2974 else continue;
2975 }
2976 return false;
2977}
2978
2979//============================================================================//
2980
2981get@vehicleDeath( playerid )
2982{
2983 /*--------------------------------------------------
2984
2985 * get@vehicleDeath
2986 * Params:
2987 - playerid
2988 * Función:
2989 - Esta función retornará el ID de slot del vehÃculo
2990 de la propiedad del jugador ( playerid ) que se encuentre
2991 destruido ( para pagar la factura ).
2992 Sà no tiene ningún vehÃculo destruÃdo retornará -1.
2993
2994 --------------------------------------------------*/
2995
2996 static
2997 i,
2998 bool: b@var;
2999 b@var = false, i = -1;
3000
3001 while( ++i < MAX_VEH_PER_PLAYER )
3002 {
3003 if( ( !playerVehicle[playerid][i][status] ) & ( playerVehicle[playerid][i][icnumID] == -1 ) ) {
3004 b@var = true;
3005 break;
3006 }
3007 else continue;
3008 }
3009 return ((( b@var ) ? ( i ) : ( -1 )));
3010}
3011
3012//============================================================================//
3013
3014getslot@playerEmpty( playerid )
3015{
3016 /*--------------------------------------------------
3017
3018 * getslot@playerEmpty
3019 * Params:
3020 - playerid
3021 * Función:
3022 - Con esta función obtendremos el ID de un slot vacÃo
3023 de un jugador ( playerid ) para poder asignarle un vehÃculo
3024 ahà mismo.
3025 - Sà no tiene un slot disponible, retornará -1.
3026
3027 --------------------------------------------------*/
3028
3029 static
3030 i, bool:b@ver;
3031 i = -1, b@ver = false;
3032
3033 while( ++i < MAX_VEH_PER_PLAYER )
3034 {
3035 if( ( playerVehicle[playerid][i][inumcID] == -1 ) & ( playerVehicle[playerid][i][icnumID] == -1 ) ) {
3036 b@ver = true;
3037 break;
3038 }
3039 else continue;
3040 }
3041
3042 return (((b@ver) ? ( i ) : ( -1 )));
3043}
3044
3045//============================================================================//
3046
3047resetvar@playerVehicles( playerid )
3048{
3049 /*--------------------------------------------------
3050
3051 *resetvar@playerVehicles
3052 * Params:
3053 - playerid
3054 * Función:
3055 - Con esta función resetearemos las variables
3056 de los vehÃculos al usuario ( siempre que se conecte )
3057 para asà evitar futuros bugs por usuarios que pasarón
3058 por su misma ID.
3059
3060 --------------------------------------------------*/
3061
3062 static
3063 j, d@iterator;
3064 j = -1, d@iterator = -1;
3065
3066 while( ++j < MAX_VEH_PER_PLAYER )
3067 {
3068 while( carEnum:++d@iterator < carEnum )
3069 {
3070 playerVehicle[ playerid ][ j ][ carEnum:d@iterator ] = -1;
3071 }
3072 d@iterator = -1;
3073 }
3074}
3075
3076//============================================================================//
3077
3078getVehicleNamebyID( vehicleid )
3079{
3080 /*--------------------------------------------------
3081
3082 * getVehicleNamebyID
3083 * Params:
3084 - vehicleid
3085 * Función:
3086 - Obtiene el nombre del vehÃculo de acuerdo a la ID
3087 que el vehÃculo tenga InGame.
3088
3089 --------------------------------------------------*/
3090
3091 static
3092 veh@Name[0b10010] = EOS;
3093
3094 if( 0 >= ( vehicleid & 0xFFFF ) <= MAX_VEHICLES ) return veh@Name = "Desconocido.", veh@Name;
3095 else
3096 return (strunpack(veh@Name, n@Vehicles[(GetVehicleModel(vehicleid)-0x190)], 0b10010), veh@Name);
3097}
3098
3099//============================================================================//
3100
3101stock getVehicleNamebyModel( modelid )
3102{
3103 /*--------------------------------------------------
3104
3105 * getVehicleNamebyModel
3106 * Params:
3107 - modelid
3108 * Función:
3109 - Obtiene el nombre del vehÃculo de acuerdo a modelo
3110 insertado ( modelid ).
3111
3112 --------------------------------------------------*/
3113
3114 static
3115 veh@Name[0b10010] = EOS;
3116
3117 if( 0x18F >= modelid >= 0x264 ) return veh@Name = "ID de modelo inválido.", veh@Name;
3118 else
3119 return (strunpack(veh@Name, n@Vehicles[(modelid-0x190)], 0b10010), veh@Name);
3120}
3121
3122//============================================================================//
3123
3124getVehicleModelbyName( const vehiclename[] )
3125{
3126 /*--------------------------------------------------
3127
3128 * getVehicleModelbyName
3129 * Params:
3130 - vehiclename
3131 * Función:
3132 - Obtiene el modelo del vehÃculo
3133 de acuerdo al texto insertado ( vehiclename ).
3134
3135 --------------------------------------------------*/
3136
3137 static
3138 i,
3139 veh@Name[0b10010],
3140 bool:b@ver;
3141 i = sizeof(n@Vehicles),
3142 veh@Name[0] = '\0',
3143 b@ver = false;
3144
3145 while( --i > -1 )
3146 {
3147 if(strfind((strunpack(veh@Name, n@Vehicles[i], sizeof veh@Name), veh@Name), vehiclename, true) != -1){
3148 b@ver = true;
3149 break;
3150 }
3151 else continue;
3152 }
3153 return (((b@ver) ? ( i+0x190 ) : ( -1 )));
3154}
3155
3156//============================================================================//
3157
3158d@trunkslotEmpty( playerid, vehicleid )
3159{
3160 /*--------------------------------------------------
3161
3162 * d@trunkslotEmpty.
3163 * Params:
3164 - playerid.
3165 - vehicleid.
3166 * Función:
3167 - Con esta función obtienes el primer slot
3168 vacÃo de un vehÃculo ( vehicleid ) propio.
3169
3170 --------------------------------------------------*/
3171
3172 static
3173 i,
3174 bool:b@ver;
3175
3176 i = -1, b@ver = false;
3177
3178 while( ++i < 0b101) {
3179
3180 if(((playerVehicle[playerid][vehicleid][Maletero][tArmas][i] <= 0 ) && ( playerVehicle[playerid][vehicleid][Maletero][tMuniciones][i] <= 0 ))) {
3181
3182 b@ver = true;
3183 break;
3184 }
3185 else continue;
3186 }
3187 return ( ( b@ver ) ? ( i ) : ( -1 ) );
3188}
3189
3190//============================================================================//
3191
3192getdealer@idEmpty()
3193{
3194 /*--------------------------------------------------
3195
3196 * getdealer@idEmpty
3197 *Params:
3198 - No params.
3199 * Función:
3200 - Con esta función obtienes la siguiente ID vacÃa
3201 para poder crear un nuevo concesionario.
3202
3203 ----------------------------------------------------*/
3204 static
3205 d@iterator,
3206 bool:b@ver;
3207 d@iterator = 0, b@ver = false;
3208
3209 while( ++d@iterator < MAX_DEALERS )
3210 {
3211 if( dealerLocations[ d@iterator ][ id@sqlid ] != 0 ) continue;
3212 else {
3213 b@ver = true;
3214 break;
3215 }
3216 }
3217 return ((( b@ver ) ? ( d@iterator ) : ( -1 )));
3218}
3219
3220//============================================================================//
3221
3222remove@playerWeapon( playerid, weaponid )
3223{
3224 /*--------------------------------------------------
3225
3226 * remove@playerWeapon
3227 * Params:
3228 - playerid.
3229 - weaponid.
3230 * Función:
3231 - Con esta función remueves del jugador ( playerid )
3232 el arma especificada ( weaponid ).
3233
3234 --------------------------------------------------*/
3235
3236 static
3237 i,
3238 weapon[0xD][0b10];
3239 i = -1;
3240
3241 while( ++i < 0xD ){
3242
3243 GetPlayerWeaponData( playerid, i, weapon[i][0], weapon[i][1]);
3244 if( weapon[i][0] == weaponid ) weapon[i][0] = 0, weapon[i][1] = 0;
3245 }
3246
3247 ResetPlayerWeapons( playerid );
3248
3249 while( i-- > 0 )if ( weapon[i][0] != 0 ) {
3250
3251 GivePlayerWeapon( playerid, weapon[i][0], weapon[i][1]);
3252 }
3253 return true;
3254}
3255
3256//============================================================================//
3257
3258setVehicleParamsEx( vehicleid, option, &value, extraid = -1 )
3259{
3260 /*--------------------------------------------------
3261
3262 * setVehicleParamsEx
3263 * Params:
3264 - vehicleid.
3265 - option.
3266 - value.
3267 - extraid
3268 * Función:
3269 - Con esta función se establecen los parámetros del vehÃculo
3270 (vehicleid) respecto al parámetro elegido ( option ) se
3271 establece dicho parámetro al inverso de su estado y se
3272 asigna el valor correspondiente a la variable especificada
3273 ( value ).
3274
3275 --------------------------------------------------*/
3276
3277 static
3278 engine,
3279 lights,
3280 alarm,
3281 doors,
3282 bonnet,
3283 boot,
3284 objective;
3285
3286 GetVehicleParamsEx( vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
3287
3288 switch ( option ) {
3289
3290 case 0: {
3291 if( engine ) {
3292 value = VEHICLE_PARAMS_OFF;
3293 SetVehicleParamsEx( vehicleid, VEHICLE_PARAMS_OFF, lights, alarm, doors, bonnet, boot, objective);
3294 }
3295 else {
3296 value = VEHICLE_PARAMS_ON;
3297 SetVehicleParamsEx( vehicleid, VEHICLE_PARAMS_ON, lights, alarm, doors, bonnet, boot, objective);
3298 }
3299 }
3300 case 1:{
3301 if( lights ) {
3302 value = VEHICLE_PARAMS_OFF;
3303 SetVehicleParamsEx( vehicleid, engine, VEHICLE_PARAMS_OFF, alarm, doors, bonnet, boot, objective);
3304 }
3305 else {
3306 value = VEHICLE_PARAMS_ON;
3307 SetVehicleParamsEx( vehicleid, engine, VEHICLE_PARAMS_ON, alarm, doors, bonnet, boot, objective);
3308 }
3309 }
3310 case 0b10:{
3311 static
3312 d@slot;
3313 d@slot = get@vehicleInRange( extraid );
3314 if( IsPlayerInAnyVehicle( extraid ) && isvehicle@playerProperty( extraid, playerVehicle[extraid][d@slot][icnumID]))
3315 {
3316 goto isVeh;
3317 }
3318 else if((( d@slot != -1 ) && ( playerVehicle[extraid][d@slot][status] )))
3319 {
3320 isVeh:
3321 if( alarm ) {
3322 KillTimer(playerVehicle[extraid][d@slot][paramsVeh][ptAlarm]);
3323 value = VEHICLE_PARAMS_OFF;
3324 SetVehicleParamsEx( vehicleid, engine, lights, VEHICLE_PARAMS_OFF, doors, bonnet, boot, objective);
3325 }
3326 else {
3327 playerVehicle[extraid][d@slot][paramsVeh][ptAlarm] = SetTimerEx("disable@vehicleAlarm", ( 0xFF << 0b111 ), false, "d", vehicleid);
3328 value = VEHICLE_PARAMS_ON;
3329 SetVehicleParamsEx( vehicleid, engine, lights, VEHICLE_PARAMS_ON, doors, bonnet, boot, objective);
3330 }
3331 }
3332 }
3333 case 0b11:{
3334 if( doors ) {
3335 value = VEHICLE_PARAMS_OFF;
3336 SetVehicleParamsEx( vehicleid, engine, lights, alarm, VEHICLE_PARAMS_OFF, bonnet, boot, objective);
3337 }
3338 else {
3339 value = VEHICLE_PARAMS_ON;
3340 SetVehicleParamsEx( vehicleid, engine, lights, alarm, VEHICLE_PARAMS_ON, bonnet, boot, objective);
3341 }
3342 }
3343 case 0b100:{
3344 if( bonnet ) {
3345 value = VEHICLE_PARAMS_OFF;
3346 SetVehicleParamsEx( vehicleid, engine, lights, alarm, doors, VEHICLE_PARAMS_OFF, boot, objective);
3347 }
3348 else {
3349 value = VEHICLE_PARAMS_ON;
3350 SetVehicleParamsEx( vehicleid, engine, lights, alarm, doors, VEHICLE_PARAMS_ON, boot, objective);
3351 }
3352 }
3353 case 0b101:{
3354 if( boot ) {
3355 value = VEHICLE_PARAMS_OFF;
3356 SetVehicleParamsEx( vehicleid, engine, lights, alarm, doors, bonnet, VEHICLE_PARAMS_OFF, objective);
3357 }
3358 else {
3359 value = VEHICLE_PARAMS_ON;
3360 SetVehicleParamsEx( vehicleid, engine, lights, alarm, doors, bonnet, VEHICLE_PARAMS_ON, objective);
3361 }
3362 }
3363 case 0b110:{
3364 if( objective ) {
3365 value = VEHICLE_PARAMS_OFF;
3366 SetVehicleParamsEx( vehicleid, engine, lights, alarm, doors, bonnet, boot, VEHICLE_PARAMS_OFF);
3367 }
3368 else {
3369 value = VEHICLE_PARAMS_ON;
3370 SetVehicleParamsEx( vehicleid, engine, lights, alarm, doors, bonnet, boot, VEHICLE_PARAMS_ON);
3371 }
3372 }
3373 default: SetVehicleParamsEx( vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
3374 }
3375 return true;
3376}
3377
3378//============================================================================//
3379
3380getNextVehicleID()
3381{
3382 /*--------------------------------------------------
3383
3384 * getNextVehicleID
3385 * Params:
3386 - No params.
3387 * Función:
3388 - Obtener la ID de un slot para vehÃculo vacÃo en el servidor, asÃ
3389 se evitarán bug en el acomodo de las variables de los autos del
3390 concesionario.
3391
3392 --------------------------------------------------*/
3393
3394 static
3395 vehicleid;
3396 return (DestroyVehicle((vehicleid = CreateVehicle(411, 0.0, 0.0, 0.0, 0.0, -1, -1, -1),vehicleid)),vehicleid);
3397}
3398
3399//============================================================================//
3400
3401IsPlayerInArea(playerid, Float:xMax, Float:yMax, Float:xMin, Float:yMin)
3402{
3403 /*--------------------------------------------------
3404
3405 * IsPlayerInArea
3406 * Params:
3407 - playerid
3408 - xMax
3409 - yMax
3410 - xMin
3411 - yMin
3412 * Función:
3413 - Nos retornará true sà un jugador ( playerid ) se encuentra
3414 entre las determinadas coordenadas especificadas ( params ),
3415 para asà poder hacer un checkeo de posición ( que puede servir
3416 para detectar concesionarios ).
3417
3418 --------------------------------------------------*/
3419
3420 static
3421 Float:x, Float:y, Float:z;
3422 GetPlayerPos(playerid, x, y, z);
3423 return ((xMin < x < xMax) && (yMin < y < yMax));
3424}
3425
3426//============================================================================//
3427
3428GetModType(componentid)
3429{
3430 /*--------------------------------------------------
3431
3432 * GetModType
3433 *Params:
3434 - Componentid.
3435 * Función:
3436 - Con esta función obtienes el tipo de mod (componentid)
3437 que se ha colocado a un vehÃculo, para asà poder asignarlo
3438 a la variable correspondiente.
3439
3440 ----------------------------------------------------*/
3441
3442 new i = 0;
3443 for(i = 19; i > -1; --i) if(Spoiler[i] == componentid) return 0b01;
3444 for(i = 3; i > -1; --i) if(Hood[i] == componentid) return 0b10;
3445 for(i = 16; i > -1; --i) if(Roof[i] == componentid) return 0b11;
3446 for(i = 21; i > -1; --i) if(RightSideskirt[i] == componentid) return 0b100;
3447 for(i = 19; i > -1; --i) if(LeftSideskirt[i] == componentid) return 0b101;
3448 for(i = 2; i > -1; --i) if(Nitro[i] == componentid) return 0b110;
3449 for(i = 1; i > -1; --i) if(Lamps[i] == componentid) return 0b111;
3450 for(i = 28; i > -1; --i) if(Exhaust[i] == componentid) return 0b1000;
3451 for(i = 16; i > -1; --i) if(Wheels[i] == componentid) return 0b1001;
3452 if(Stereo == componentid) return 0b1010;
3453 if(Hidraulics == componentid) return 0b1011;
3454 if(Bullbar == componentid) return 0b1110;
3455 for(i = 1; i > -1; --i) if(RealBullbars[i] == componentid) return 0b1111;
3456 for(i = 1; i > -1; --i) if(FrontSign[i] == componentid) return 0b10000;
3457 for(i = 1; i > -1; --i) if(FrontBullbars[i] == componentid) return 0b10001;
3458 for(i = 22; i > -1; --i) if(FrontBumper[i] == componentid) return 0b10010;
3459 if(Bullbars == componentid) return 0b10100;
3460 for(i = 21; i > -1; --i) if(RearBumper[i] == componentid) return 0b11000;
3461 for(i = 1; i > -1; --i) if(RightVents[i] == componentid) return 0b11001;
3462 for(i = 1; i > -1; --i) if(LeftVents[i] == componentid) return 0b11010;
3463 return 0;
3464}
3465
3466//============================================================================//
3467
3468sleep_ex( value )
3469{
3470 /*--------------------------------------------------
3471
3472 * sleep_ex
3473 *Params:
3474 - value.
3475 * Función:
3476 - Función que detendrá la ejecución del servidor por una
3477 determinada cantidad de milisegundos ( value ).
3478
3479 ----------------------------------------------------*/
3480
3481 value += GetTickCount();
3482 while( GetTickCount() < value ){}
3483}
3484
3485//============================================================================//