· 7 years ago · Feb 03, 2019, 11:46 AM
1local vehicleSpawns = {
2};
3
4local hospitalPacks = {
5{-2670.87890625,636.8984375,14.453125},
6{-2637.0556640625,635.03125,14.453125},
7{-1515.669921875,2519.166015625,56.0703125},
8{-1513.888671875,2519.5908203125,56.064819335938},
9{-1528.8955078125,2516.724609375,55.986171722412},
10{2022.1650390625,-1402.6806640625,17.18045425415},
11{2042.7001953125,-1409.4775390625,17.1640625},
12{-316.5478515625,1051.6494140625,20.340259552002},
13{-337.9541015625,1049.490234375,19.739168167114},
14{-331.5849609375,1046.037109375,26.012474060059},
15{-307.0419921875,1045.27734375,26.012474060059},
16{1171.490234375,-1310.560546875,13.986573219299},
17{1171.609375,-1306.556640625,13.996350288391},
18{1158.5048828125,-1326.333984375,31.503561019897},
19{1159.80078125,-1323.9013671875,31.498970031738},
20{1238.7119140625,328.2431640625,19.7555103302},
21{1229.365234375,311.1435546875,24.7578125},
22{-2204.07421875,-2309.58203125,31.375},
23{1615.939453125,1818.0537109375,10.8203125},
24{1601.9443359375,1816.736328125,10.8203125},
25{1590.0166015625,1792.0234375,30.46875},
26{1607.3232421875,1776.7412109375,37.3125},
27{2107.7626953125,926.16015625,10.8203125},
28{2116.12890625,925.7705078125,10.9609375},
29{2122.1865234375,925.3193359375,10.8203125},
30};
31local patrolPoints = {
32 {-1603.2197265625,-2712.736328125,48.9453125},
33 {2465.748046875,-2215.55859375,13.546875},
34 {2473.439453125,-2215.56640625,13.546875},
35 {2480.0732421875,-2216.140625,13.546875},
36 {2487.24609375,-2215.5966796875,13.546875},
37 {2494.1005859375,-2215.5859375,13.546875},
38 {-1686.6728515625,408.9970703125,7.3984375},
39 {-1682.34375,412.9384765625,7.3984375},
40 {-1680.0263671875,402.3642578125,7.3984375},
41 {-1675.84375,406.4677734375,7.3984375},
42 {-1670.5615234375,411.8359375,7.3984375},
43 {-1666.2392578125,416.2509765625,7.3984375},
44 {-1672.7939453125,422.81640625,7.3984375},
45 {-1677.20703125,418.46484375,7.3984375},
46 {-2410.7021484375,969.9091796875,45.4609375},
47 {-2410.744140625,975.220703125,45.4609375},
48 {-2410.837890625,980.5302734375,45.4609375},
49 {-1329.3046875,2668.5126953125,50.46875},
50 {-1328.7314453125,2673.90625,50.0625},
51 {-1327.0185546875,2679.3876953125,50.46875},
52 {-1327.3798828125,2684.62890625,50.0625},
53 {1940.7099609375,-1778.5244140625,13.390598297119},
54 {1940.6552734375,-1774.908203125,13.390598297119},
55 {1940.630859375,-1771.728515625,13.390598297119},
56 {1940.7080078125,-1767.3837890625,13.390598297119},
57 {-1477.921875,1868.138671875,32.639846801758},
58 {-1466.1552734375,1869.0048828125,32.6328125},
59 {-1464.5224609375,1861.3828125,32.639846801758},
60 {-1477.4599609375,1860.5205078125,32.6328125},
61 {-735.9208984375,2744.0087890625,47.2265625},
62 {-739.0439453125,2744.2421875,47.165451049805},
63 {377.6953125,2601.1083984375,16.484375},
64 {624.5263671875,1676.25390625,6.9921875},
65 {620.2958984375,1681.2431640625,6.9921875},
66 {616.248046875,1686.4169921875,7.1875},
67 {612.783203125,1691.1650390625,7.1875},
68 {609.2060546875,1696.201171875,7.1875},
69 {605.8505859375,1700.978515625,7.1875},
70 {602.27734375,1706.3603515625,7.1875},
71 {2141.037109375,2742.734375,10.960174560547},
72 {2142.3115234375,2752.6982421875,10.96019744873},
73 {2147.9521484375,2752.3203125,10.8203125},
74 {2152.60546875,2751.953125,10.8203125},
75 {2152.984375,2743.85546875,10.8203125},
76 {2147.75,2743.7392578125,10.8203125},
77 {-97.6298828125,-1175.0283203125,2.4990689754486},
78 {-90.74609375,-1177.853515625,2.2021217346191},
79 {-84.75390625,-1163.853515625,2.3359375},
80 {-91.5771484375,-1160.5732421875,2.4453125},
81 {-1606.525390625,-2717.2138671875,48.9453125},
82 {-1609.7109375,-2721.544921875,48.9453125},
83 {-1599.83203125,-2708.302734375,48.9453125},
84 {-2246.314453125,-2558.8212890625,32.0703125},
85 {-2241.3125,-2561.3662109375,32.0703125},
86 {-1132.2880859375,-135.0986328125,14.14396572113},
87 {-1153.529296875,-156.373046875,14.1484375},
88 {-1142.826171875,-145.67578125,14.14396572113},
89 {655.611328125,-557.9912109375,16.501491546631},
90 {655.6572265625,-572.1728515625,16.501491546631},
91 {1601.791015625,2203.90625,11.060997009277},
92 {1596.806640625,2203.4345703125,10.8203125},
93 {1590.197265625,2203.4853515625,10.8203125},
94 {1589.4775390625,2195.43359375,10.8203125},
95 {1596.125,2194.294921875,10.8203125},
96 {1601.6591796875,2194.3369140625,10.8203125},
97 {2206.8466796875,2470.47265625,10.8203125},
98 {2206.94140625,2474.75,10.8203125},
99 {2206.9267578125,2478.86328125,10.8203125},
100 {2198.06640625,2480.6953125,10.8203125},
101 {2197.541015625,2475.791015625,10.995170593262},
102 {2197.609375,2471.9169921875,10.995170593262},
103 {2120.8251953125,915.4833984375,10.8203125},
104 {2115.1181640625,915.44140625,10.8203125},
105 {2109.076171875,915.4228515625,10.8203125},
106 {2109.22265625,924.8779296875,10.9609375},
107 {2114.9404296875,924.8857421875,10.9609375},
108 {2119.5126953125,925.2861328125,10.9609375},
109 {2645.7197265625,1112.7802734375,10.8203125},
110 {2639.984375,1112.56640625,10.8203125},
111 {2634.828125,1112.3466796875,10.9609375},
112 {2634.1826171875,1101.9482421875,10.8203125},
113 {2636.7509765625,1101.6748046875,10.8203125},
114 {2643.5126953125,1101.81640625,10.8203125},
115 {2209.576171875,2469.8251953125,10.8203125},
116 {2208.8310546875,2475.09375,10.8203125},
117 {1005.078125,-901.7490234375,42.216625213623},
118 {993.025390625,-902.474609375,42.222496032715},
119};
120
121local heliCrashSites = {
122 {-1360.0478515625,-1070.7314453125,160.4069519043},
123 {-421.4619140625,-1284.4345703125,33.740924835205},
124 {-2357.654296875,-1634.3623046875,483.703125},
125 {979.0849609375,160.59375,28.935249328613},
126 {-2057.2294921875,2781.73828125,163.12780761719},
127 {826.90234375,2803.6259765625,74.863929748535},
128 {2577.7060546875,-650.541015625,136.37449645996},
129};
130
131local lootItems = {
132 ["helicrashsides"] = {
133 {"Night Vision Goggles",368,1,90,10},
134 {"Box of Matches",328,0.4,90,2},
135 {"M1911",346,1,90,10},
136 {"M9 SD",347,1,90,7},
137 {"Winchester 1866",349,1,90,6},
138 {"PDW",352,1,90,5.5},
139 {"Hunting Knife",335,1,90,4},
140 {"Hatchet",339,1,90,3},
141 {"Pizza",1582,1,0,2},
142 {"Soda Bottle",2647,1,0,2},
143 {"Empty Gas Canister",1650,1,0,2},
144 {"Roadflare",324,1,90,2},
145 {"Milk",2856,1,0,1},
146 {"Painkiller",2709,0.5,0,4},
147 {"Empty Soda Cans",2673,0.5,0,2},
148 {"Scruffy Burgers",2675,0.5,0,3},
149 {"Grenade",342,1,0,4},
150 {"Parachute",342,1,0,80},
151 {"Sawn-Off Shotgun",350,1,90,5},
152 {"SPAZ-12 Combat Shotgun",351,1,90,4},
153 {"MP5A5",353,1,90,6},
154 {"Watch",2710,1,0,4},
155 {"Heat Pack",1576,1,0,3},
156 {"Wire Fence",933,0.25,0,1},
157 {"Lee Enfield",357,1,90,6},
158 {"Alice Pack",3026,1,0,4},
159 {"Night Vision Goggles",368,1,90,1.5},
160 {"Tire",1073,1,0,2},
161 {"Morphine",1579,1,0,4},
162 {"Camouflage Clothing",1577,1,0,4.5},
163 {"Civilian Clothing",1577,1,0,3},
164 {"AK-47",355,1,90,7},
165 {"GPS",2976,0.15,0,3},
166 {"Map",1277,0.8,90,7},
167 {"Toolbox",2969,0.5,0,1},
168 {"Engine",929,0.3,0,2},
169 {"Tent",1279,1,0,4.5},
170 {"Ghillie Suit",1577,1,0,0.5},
171 {"M4",356,1,90,1},
172 {"CZ 550",358,1,90,1.5},
173 {"Infrared Goggles",369,1,90,3},
174 {"Assault Pack (ACU)",3026,0.5,0,5},
175 {"Coyote Backpack",3026,1.3,0,2},
176 },
177 ["hospital"] = {
178 {"Medic Kit",2891,0.7,0},
179 {"Heat Pack",1576,1,0},
180 {"Bandage",1578,0.5,0},
181 {"Blood Bag",1580,1,0},
182 {"Morphine",1579,1,0},
183 {"Blood Bag",1580,1,0},
184 {"Medic Kit",2891,0.7,0},
185 {"Blood Bag",1580,1,0},
186 {"Painkiller",1580,1,0},
187 {"Transfusion Kit",1580,1,0},
188 {"Blood Bag (Empty)",1580,1,0},
189 },
190};
191
192local backupItemsTable = {
193 {"Bandage"},
194 {"Painkiller"},
195 {"Wood Pile"},
196 {"Water Bottle"},
197 {"Pasta Can"},
198 {"Beans Can"},
199 {"Burger"},
200 {"Box of Matches"},
201 {"PDW"},
202 {"Hunting Knife"},
203 {"Hatchet"},
204 {"Pizza"},
205 {"Morphine"},
206 {"Soda Bottle"},
207 {"Empty Gas Canister"},
208 {"Full Gas Canister"},
209 {"Roadflare"},
210 {"Milk"},
211 {"PDW Mag"},
212 {"MP5A5 Mag"},
213 {"Tear Gas"},
214 {"Grenade"},
215 {"M1911"},
216 {"M1911 Mag"},
217 {"M9 SD"},
218 {"M9 SD Mag"},
219 {"Desert Eagle"},
220 {"Desert Eagle Mag"},
221 {"MP5A5"},
222 {"Watch"},
223 {"Medic Kit"},
224 {"Heat Pack"},
225 {"Blood Bag"},
226 {"GPS"},
227 {"Map"},
228 {"Toolbox"},
229 {"Wire Fence"},
230 {"Tire"},
231 {"Engine"},
232 {"Satchel"},
233 {"Infrared Goggles"},
234 {"Night Vision Goggles"},
235 {"Tent"},
236 {"Raw Meat"},
237 {"Cooked Meat"},
238 {"Camouflage Clothing"},
239 {"Ghillie Suit"},
240 {"Civilian Clothing"},
241 {"Survivor Clothing"},
242 {"Binoculars"},
243 {"Empty Water Bottle"},
244 {"Empty Soda Cans"},
245 {"Scruffy Burgers"},
246 {"Radio Device"},
247 {"Baseball Bat"},
248 {"Shovel"},
249 {"Tank Parts"},
250 {"Golf Club"},
251 {"Radio Device"},
252 {"Parachute"},
253 {"Winchester 1866"},
254 {"SPAZ-12 Combat Shotgun"},
255 {"Sawn-Off Shotgun"},
256 {"CZ550"},
257 {"1866 Slug"},
258 {"2Rnd. Slug"},
259 {"SPAZ-12 Pellet"},
260 {"DMR Mag"},
261 {"AS50 Mag"},
262 {"CZ550 Mag"},
263};
264
265local vehicleAddonsInfo = {
266 {411, 4, 1, 1, 35},
267 {475, 4, 1, 1, 35},
268 {548, 3, 1, 1, 60},
269 {471, 4, 1, 1, 35},
270 {542, 4, 1, 1, 35},
271 {506, 4, 1, 1, 35},
272 {603, 4, 1, 1, 35},
273 {463, 2, 1, 1, 20},
274 {422, 4, 1, 1, 25},
275 {522, 2, 1, 1, 20},
276 {470, 4, 1, 1, 46},
277 {593, 3, 1, 1, 35},
278 {468, 2, 1, 1, 10},
279 {433, 6, 1, 1, 70},
280 {437, 6, 1, 1, 60},
281 {509, 0, 0, 0, 0},
282 {487, 0, 1, 1, 20},
283 {497, 0, 1, 1, 20},
284 {453, 0, 1, 1, 35},
285};
286
287local vehicleFuelInfo = {
288 {471, 0.25},
289 {411, 0.75},
290 {548, 0.75},
291 {603, 0.95},
292 {506, 0.95},
293 {542, 0.95},
294 {463, 0.75},
295 {475, 0.70},
296 {422, 0.25},
297 {522, 0.75},
298 {593, 0.45},
299 {470, 0.1},
300 {468, 0.1},
301 {433, 0.5},
302 {437, 0.5},
303 {509, 0},
304 {487, 0.25},
305 {497, 0.25},
306 {453, 0.1},
307};
308
309local vehicleFuelTable = {
310 {422, 80},
311 {548, 180},
312 {471, 60},
313 {542, 100},
314 {603, 100},
315 {463, 80},
316 {411, 100},
317 {506,100},
318 {522, 80},
319 {470, 100},
320 {475,100},
321 {468, 30},
322 {593,100},
323 {433, 140},
324 {437, 140},
325 {509, 0},
326 {487, 60},
327 {497, 60},
328 {453, 60},
329};
330
331local hospitalCol = {};
332local WeaponBoxCol = {};
333local dayzVehicles = {};
334local repairTimer = {};
335local last_veh_id = 0;
336local last_tent_id = 0;
337local backupdone = false;
338
339addEvent("respawnVehiclesInWater", true);
340addEvent("repairVehicle", true);
341addEvent("respawnDayZVehicle", true);
342
343if fileExists("tools/backup.db") then
344 backupdone = true;
345else
346 backupdone = false;
347end
348
349local db = dbConnect("sqlite", "tools/backup.db");
350dbExec(db, "CREATE TABLE IF NOT EXISTS `vehicles` (model, x, y, z, rX, rY, rZ, slots, fuel, engines, moving, parts, items, health, dayz, sx, sy, sz, id)");
351
352function getVehicleAddonInfos(id)
353 for _,v in ipairs(vehicleAddonsInfo) do
354 if (v[1] == id) then return v[2], v[3], v[4], v[5]; end
355 end
356end
357
358function createHeliCrashSite()
359 if isElement(cargoCol) then
360 destroyElement(getElementData(cargoCol, "parent"));
361 destroyElement(cargoCol);
362 end
363 local nr = math.random(7);
364 local x,y,z = heliCrashSites[nr][1], heliCrashSites[nr][2], heliCrashSites[nr][3];
365 local cargobob = createVehicle(548, x, y, z);
366 setElementHealth(cargobob, 0);
367 setElementFrozen(cargobob, true);
368 local cargoCol = createColSphere(x, y, z, 3);
369 setElementData(cargoCol, "parent", cargobob);
370 setElementData(cargoCol, "helicrash", true);
371 setElementData(cargoCol, "MAX_Slots", 0);
372 for _,v in ipairs(lootItems["helicrashsides"]) do
373 local value = math.percentChance(v[5]*3.5, math.random(2));
374 setElementData(cargoCol, v[1], value);
375 local ammoData,_ = getWeaponAmmoType(v[1], true);
376 if (ammoData and value > 0) then
377 setElementData(cargoCol, ammoData, math.random(2));
378 end
379 end
380 setTimer(createHeliCrashSite, 3600000, 1);
381end
382
383function updateHospitals()
384 for i,_ in pairs(hospitalCol) do
385 for _,v in ipairs(lootItems["hospital"]) do
386 setElementData(hospitalCol[i], v[1], math.random(5));
387 end
388 end
389 setTimer(updateHospitals, 3600000, 1);
390end
391
392function createHospitalPacks()
393 local number1 = 0;
394 for i,v in ipairs(hospitalPacks) do
395 number1 = number1+1;
396 local x,y,z = v[1], v[2], v[3]-0.8;
397 local object = createObject(1558, x, y, z, nil, nil, nil);
398 hospitalCol[i] = createColSphere(x, y, z, 2);
399 setElementData(hospitalCol[i], "parent", object);
400 setElementData(hospitalCol[i], "hospitalbox", true);
401 setElementData(hospitalCol[i], "MAX_Slots", 20);
402 end
403 updateHospitals();
404end
405
406function spawnDayZVehicles()
407 for _,v in ipairs(getElementsByType("vehicle")) do
408 local col = getElementData(v, "parent");
409 if col then
410 destroyElement(col);
411 end
412 destroyElement(v);
413 end
414 for _,v in ipairs(vehicleSpawns) do
415 local x,y,z = v[1], v[2], v[3];
416 local veh = createVehicle(v[1], x, y, z);
417 local vehCol = createColSphere(x, y, z, 2.5);
418 attachElements(vehCol, veh);
419 setElementData(vehCol, "parent", veh);
420 setElementData(veh, "parent", vehCol);
421 setElementData(vehCol, "vehicle", true);
422 setElementData(veh, "dayzvehicle", 1);
423 local tires,engine,parts,slots = getVehicleAddonInfos(v[1]);
424 setElementData(vehCol, "MAX_Slots", tonumber(slots));
425 setElementData(vehCol, "Tire_inVehicle", math.random(0, tires));
426 setElementData(vehCol, "Engine_inVehicle", math.random(0, engine));
427 setElementData(vehCol, "Parts_inVehicle", math.random(0, parts));
428 setElementHealth(vehCol,math.random(300,1000))
429 setElementData(vehCol, "spawn", {v[1], x, y, z});
430 setElementData(vehCol, "fuel", math.random(5, 20));
431 for _,v in ipairs(lootItems["helicrashsides"]) do
432 local value = math.percentChance(v[5], math.random(2));
433 setElementData(vehCol, v[1], value);
434 local ammoData,_ = getWeaponAmmoType(v[1], true);
435 if (ammoData and value > 0) then
436 setElementData(vehCol, ammoData, math.random(2));
437 end
438 end
439 end
440 backup();
441end
442
443addEventHandler("onVehicleExplode", root, function()
444 for _,v in pairs(getVehicleOccupants(source)) do
445 triggerEvent("kilLDayZPlayer", v);
446 end
447 local x1,y1,z1 = getElementPosition(source);
448 local col = getElementData(source, "parent");
449 local id,x,y,z = unpack(getElementData(col, "spawn"));
450 setElementData(col, "deadVehicle", true);
451 setElementData(source, "isExploded", true);
452 if (getElementData(source, "dayzvehicle") == 1) then
453 setTimer(respawnDayZVehicle, 1800000, 1, id, x, y, z, source, col);
454 else
455 setTimer(function(col, source)
456 if isElement(col) then destroyElement(col); end
457 if isElement(source) then destroyElement(source); end
458 end, (5*60000), 1, col, source);
459 end
460end);
461
462setTimer(function()
463 for _,v in ipairs(getElementsByType("vehicle")) do
464 if (getElementModel(v) ~= 453) then
465 local col = getElementData(v, "parent");
466 if not getElementData(col, "deadVehicle") then
467 if isElementInWater(v) then
468 local id,x,y,z = unpack(getElementData(col, "spawn"));
469 if (getElementData(v, "dayzvehicle") == 1) then
470 setTimer(respawnDayZVehicle, (5*60000), 1, id, x, y, z, v, col);
471 else
472 setTimer(function(col, v)
473 if col then destroyElement(col); end
474 if v then destroyElement(v); end
475 end, (5*60000), 1, col, v);
476 end
477 end
478 end
479 end
480 end
481end, (30*60000), 0);
482
483function respawnDayZVehicle(id, x, y, z, veh, col)
484 if veh then destroyElement(veh); end
485 if col then destroyElement(col); end
486 local veh = createVehicle(id, x, y, (tonumber(z)+1));
487 local vehCol = createColSphere(x, y, z, 4);
488 attachElements(vehCol, veh);
489 setElementData(vehCol, "parent", veh);
490 setElementData(veh, "parent", vehCol);
491 setElementData(vehCol, "vehicle", true);
492 setElementData(veh, "dayzvehicle", 1);
493 local tires,engine,parts,slots = getVehicleAddonInfos(id);
494 setElementData(vehCol, "MAX_Slots", tonumber(slots));
495 setElementData(vehCol, "Tire_inVehicle", math.random(0, tires));
496 setElementData(vehCol, "Engine_inVehicle", math.random(0, engine));
497 setElementData(vehCol, "Parts_inVehicle", math.random(0, parts));
498 setElementData(vehCol, "spawn", {id, x, y, z});
499 setElementData(vehCol, "fuel", 10);
500 for _,v in ipairs(lootItems["helicrashsides"]) do
501 local value = math.percentChance(v[5], math.random(2));
502 setElementData(vehCol, v[1], value);
503 local ammoData,_ = getWeaponAmmoType(v[1], true);
504 if (ammoData and value > 0) then
505 setElementData(vehCol, ammoData, math.random(2));
506 end
507 end
508end
509addEventHandler("respawnDayZVehicle", root, respawnDayZVehicle);
510
511function getVehicleMaxFuel(id)
512 for _,v in ipairs(vehicleFuelTable) do
513 if (id == v[1]) then return v[2]; end
514 end
515 return false;
516end
517
518addEventHandler("onPlayerVehicleEnter", root, function(veh, seat)
519 local id = getElementModel(veh);
520 setVehicleEngineState(veh, true);
521 if (id == 548) then cancelEvent(); end
522 if (id == 509) then return; end
523 local col = getElementData(veh, "parent");
524 local tires,engine,parts,_ = getVehicleAddonInfos(id);
525 setElementData(veh, "maxfuel", getVehicleMaxFuel(id));
526 setElementData(veh, "needtires", tires);
527 setElementData(veh, "needparts", parts);
528 setElementData(veh, "needengines", engine);
529 setVehicleEngineState(veh, false);
530 if (getElementData(col, "Parts_inVehicle") == parts) then
531 setElementData(veh, "fplus", 5);
532 else
533 setElementData(veh, "fplus", 20);
534 end
535 if (getElementData(col, "Tire_inVehicle") == tires) then
536 if (getElementData(col, "Engine_inVehicle") == engine) then
537 if (getElementData(col, "fuel") > 0) then
538 setVehicleEngineState(veh, true);
539 if (seat == 0) then
540 --bindKey(source, "k", "down", setEngineStateByPlayer);
541 --outputChatBox("Press [K] to toggle the engine!", source, 255, 255, 255);
542 end
543 else
544 triggerClientEvent(source, "displayClientInfo", source, "Fuel tank is empty!", 22, 255, 0);
545 setVehicleEngineState(veh, false);
546 end
547 else
548 triggerClientEvent(source, "displayClientInfo", source, "This veh doesn't have Engine!", 22, 255, 0);
549 setVehicleEngineState(veh, false);
550 end
551 else
552 triggerClientEvent(source, "displayClientInfo", source, "Some Tires are missing!", 22, 255, 0);
553 setVehicleEngineState(veh, false);
554 end
555end);
556
557addEventHandler("onPlayerVehicleExit", root, function(veh, seat)
558 if (seat == 0) then
559 setVehicleEngineState(veh, false);
560 unbindKey(source, "k", "down", setEngineStateByPlayer);
561 end
562end);
563
564function getVehicleFuelRemove(id)
565 for _,v in ipairs(vehicleFuelInfo) do
566 if (v[1] == id) then return v[2]; end
567 end
568end
569
570setTimer(function()
571 for _,v in pairs(getElementsByType("vehicle")) do
572 if (getElementModel(v) ~= 509) then
573 if (getVehicleEngineState(v) == true) then
574 if (getElementData(getElementData(v, "parent"), "fuel") >= 1) then
575 setElementData(getElementData(v, "parent"), "fuel", getElementData(getElementData(v, "parent"), "fuel")-(getVehicleFuelRemove(getElementModel(v))*getElementData(v, "fplus"))/60);
576 else
577 setVehicleEngineState(v, false);
578 end
579 end
580 end
581 end
582end, 1000, 0);
583
584timeranim = {}
585function repairVehicle (veh)
586 if repairTimer[veh] then triggerClientEvent (source, "displayClientInfo", source,"Vehicle","The Vehicle is already repaired",255,255,255) return end
587 local health = math.floor(getElementHealth(veh))
588 repairTimer[veh] = setTimer(fixVehicleDayZ, 1000, 0, veh, source)
589 setElementFrozen (veh,true)
590 setElementData(veh,"repairer",source)
591 setElementData(source,"repairingvehicle",veh)
592 --setPedAnimation (source,"SCRATCHING","sclng_r",nil,false,false)
593end
594addEvent("repairVehicle",true)
595addEventHandler("repairVehicle",getRootElement(),repairVehicle)
596
597function fixVehicleDayZ(veh,player)
598 if getElementData(veh,"repairer") then
599 setElementData(player,"repairerTab",true)
600 setElementHealth(veh,getElementHealth(veh)+10)
601 end
602 setPedAnimation (player,"SCRATCHING","sclng_r",nil,false,false)
603 if getElementHealth(veh) >= 1000 then
604 fixVehicle (veh)
605 setPedAnimation(player,false)
606 setElementFrozen (veh,false)
607 setVehicleDamageProof (veh,false)
608 setElementData(veh,"repairer",nil)
609 setElementData(player,"repairingvehicle",nil)
610 setElementData(player,"repairerTab",false)
611 killTimer(repairTimer[veh])
612 repairTimer[veh] = nil
613 triggerClientEvent(player,"displayClientInfo",player,"Vehicle","You have completed the repair Vehicle",255,255,255)
614 end
615end
616
617function stopFixxingWhileMoving(veh,player)
618 local veh = getElementData(source,"repairingvehicle")
619 setPedAnimation(source)
620 setElementFrozen (veh,false)
621 setVehicleDamageProof (veh,false)
622 setElementData(veh,"repairer",nil)
623 setElementData(source,"repairingvehicle",nil)
624 setElementData(source,"Repairing",false)
625 killTimer(repairTimer[veh])
626 repairTimer[veh] = nil
627 triggerClientEvent(source,"displayClientInfo",source,"Vehicle","You stopped the repair Vehicle",255,255,255)
628end
629addEvent("onClientMovesWhileAnimation",true)
630addEventHandler("onClientMovesWhileAnimation",getRootElement(),stopFixxingWhileMoving)
631
632function debugFixxing()
633 for i,veh in ipairs(getElementsByType("vehicle")) do
634 if getElementData(veh,"repairer") == source then
635 setVehicleDamageProof (veh,false)
636 outputDebugString("Vehicle repairer disconnected - destroyed tables")
637 killTimer(repairTimer[veh])
638 setElementFrozen (veh,false)
639 repairTimer[veh] = nil
640 setElementData(veh,"repairer",nil)
641 end
642 end
643end
644addEventHandler("onPlayerQuit",getRootElement(),debugFixxing)
645
646--[[addEventHandler("repairVehicle", root, function(veh)
647 if repairTimer[veh] then triggerClientEvent(source, "displayClientInfo", source, getVehicleName(veh).." is already in repair!", 255, 22, 0) return; end
648 repairTimer[veh] = setTimer(fixDayZVehicle, (1000-(math.floor(getElementHealth(veh))))*120, 1, veh, source);
649 setElementFrozen(veh, true);
650 setElementFrozen(source, true);
651 setPedWeaponSlot(source, 0);
652 setElementData(veh, "repairer", source);
653 setElementData(source, "repairingvehicle", veh);
654 setElementData(source, "repairvehicle", true);
655 setPedAnimation(source, "SCRATCHING", "sclng_r", nil, true, false);
656 triggerClientEvent(source, "displayClientInfo", source, "Started to repair "..getVehicleName(veh), 22, 255, 0);
657end);
658
659function fixDayZVehicle(veh, player)
660 setElementHealth(veh, 1000);
661 fixVehicle(veh);
662 setPedAnimation(player, false);
663 setElementFrozen(veh, false);
664 setElementFrozen(player, false);
665 setElementData(player, "repairvehicle", false);
666 repairTimer[veh] = nil;
667 setElementData(veh, "repairer", nil);
668 setElementData(player, "repairingvehicle", nil);
669 triggerClientEvent(player, "displayClientInfo", player, "You repaired "..getVehicleName(veh), 22, 255, 0);
670end
671
672addEventHandler("onPlayerQuit", root, function()
673 for _,v in ipairs(getElementsByType("vehicle")) do
674 if (getElementData(v, "repairer") and getElementData(v, "repairer") == source) then
675 outputDebugString("Vehicle repairer disconnected - destroyed tables", 3);
676 killTimer(repairTimer[v]);
677 setElementFrozen(v, false);
678 repairTimer[v] = nil;
679 setElementData(v, "repairer", nil);
680 end
681 end
682end);--]]
683
684function setEngineStateByPlayer(player)
685 local veh = getPedOccupiedVehicle(player);
686 if (getElementData(getElementData(veh,"parent"), "fuel") <= 0) then return; end
687 if (getVehicleEngineState(veh) == false) then
688 setVehicleEngineState(veh, true);
689 triggerClientEvent(player, "displayClientInfo", player, "Engine started!", 22, 255, 0);
690 else
691 setVehicleEngineState(veh, false);
692 triggerClientEvent(player, "displayClientInfo", player, "Engine stopped!", 255, 22, 0);
693 end
694end
695
696function backup()
697 dbExec(db, "DELETE FROM `vehicles`");
698 local vc = 0;
699 for _,veh in ipairs(getElementsByType("vehicle")) do
700 if not getElementData(veh, "helicrash") then
701 local col = getElementData(veh, "parent");
702 if col then
703 local x,y,z = getElementPosition(veh);
704 local rX,rY,rZ = getElementRotation(veh);
705 local health = getElementHealth(veh);
706 if (health < 500) then health = 500; end
707 local _,sx,sy,sz = unpack(getElementData(col, "spawn"));
708 local items = {};
709 vc = vc+1;
710 for _,item in ipairs(backupItemsTable) do
711 local quantity = getElementData(col, item[1]) or 0;
712 if (quantity > 0) then
713 table.insert(items, {item[1], quantity});
714 end
715 end
716 dbExec(db, "INSERT INTO `vehicles` (model, x, y, z, rX, rY, rZ, slots, fuel, engines, moving, parts, items, dayz, health, sx, sy, sz, id) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
717 getElementModel(veh), x, y, z, rX, rY, rZ, getElementData(col, "MAX_Slots") or 20, getElementData(col, "fuel") or 0, getElementData(col, "Engine_inVehicle") or 0,
718 getElementData(col, "Tire_inVehicle") or 0, getElementData(col, "Parts_inVehicle") or 0, toJSON(items), getElementData(veh, "dayzvehicle") or 0, health, sx, sy, sz, vc);
719 end
720 end
721 end
722 outputDebugString("Backup done ("..vc.." Vehicles)", 3);
723end
724
725function createDayzVeh(model, x, y, z, rX, rY, rZ, slots, fuel, engines, moving, parts, items, dayz, health, sx, sy, sz)
726 local veh = createVehicle(model, x, y, z);
727 local vehCol = createColSphere((x+5), y, z, 4);
728 setElementRotation(veh, rX, rY, rZ);
729 attachElements(vehCol, veh);
730 setElementHealth(veh, tonumber(health));
731 setElementData(vehCol, "parent", veh);
732 setElementData(veh, "parent", vehCol);
733 setElementData(veh, "dayzvehicle", tonumber(dayz));
734 setElementData(vehCol, "vehicle", true);
735 setElementData(vehCol, "MAX_Slots", tonumber(slots));
736 setElementData(vehCol, "Tire_inVehicle", tonumber(moving));
737 setElementData(vehCol, "Engine_inVehicle", tonumber(engines));
738 setElementData(vehCol, "Parts_inVehicle", tonumber(parts));
739 setElementData(vehCol, "spawn", {model, sx, sy, sz});
740 setElementData(vehCol, "fuel", tonumber(fuel));
741 for _,v in ipairs(fromJSON(items)) do
742 setElementData(vehCol, v[1], v[2]);
743 end
744end
745
746
747function loadBackup()
748 for _,v in pairs(getElementsByType("vehicle")) do
749 local col = getElementData(v, "parent");
750 if col then
751 destroyElement(col);
752 end
753 destroyElement(v);
754 end
755 local p = dbPoll(dbQuery(db, "SELECT * FROM `vehicles`"), -1);
756 if (#p > 0) then
757 for _,d in pairs(p) do
758 createDayzVeh(d["model"], d["x"], d["y"], d["z"], d["rX"], d["rY"], d["rZ"], d["slots"], d["fuel"], d["engines"], d["moving"], d["parts"], d["items"], d["dayz"], d["health"], d["sx"], d["sy"], d["sz"]);
759 end
760 end
761end
762
763if not backupdone then
764 spawnDayZVehicles();
765 backupdone = true;
766else
767 loadBackup();
768end
769setTimer(backup, (10*60000), 0);
770
771addCommandHandler("dobackup", function(player)
772 if isObjectInACLGroup("user."..getAccountName(getPlayerAccount(player)), aclGetGroup("Admin")) then
773 backup();
774 end
775end);
776
777function updatepatrol ()
778 for i,box in pairs(patrolCol) do
779 local rand = math.random(1,3); if rand == 1 then litras = 100 elseif rand == 2 then litras = 80 elseif rand == 3 then litras = 60 end
780 setElementData(patrolCol[i],"patrollitras",litras)
781 end
782 setTimer(updatepatrol,10800000,1)
783end
784
785patrolCol = {}
786function createPatrols()
787 number1 = 0
788 for i,patrol in ipairs(patrolPoints) do
789 number1 = number1+1
790 local x,y,z = patrol[1],patrol[2],patrol[3]
791 patrolCol[i] = createColSphere(x,y,z,3)
792 local rand = math.random(1,3); if rand == 1 then litras = 100 elseif rand == 2 then litras = 80 elseif rand == 3 then litras = 60 end
793 setElementData(patrolCol[i],"patrolstation",true)
794 setElementData(patrolCol[i],"patrollitras",litras)
795 end
796 setTimer(updatepatrol,10800000,1)
797end
798createPatrols()
799
800createHeliCrashSite();
801createHospitalPacks();
802
803MylitaryBox = {
804{-1474.201171875,430.1845703125,7.1875},
805{-1474.453125,390.53125,7.1875},
806{-1473.5263671875,354.23046875,7.1875},
807{1594.8056640625,-1678.2626953125,5.890625},
808{2521.990234375,2512.064453125,10.8203125},
809{2406.33984375,2542.603515625,21.875},
810{-2197.115234375,-2260.0517578125,30.655773162842},
811{-2264.9052734375,2307.7177734375,4.8202133178711,56},
812{2279.57421875,2459.5595703125,10.8203125},
813}
814
815 -------------------------------------
816lootItemsMylitary = {
817["weaponbox"] = {
818{"M1911",346,1,90,5},
819{"M9 SD",347,1,90,4},
820{"Desert Eagle",348,1,90,0.2},
821{"Winchester 1866",349,1,90,3},
822{"PDW",352,1,90,4},
823{"Hunting Knife",335,1,90,2.4},
824{"Hatchet",339,1,90,2.1},
825{"Empty Gas Canister",1650,1,0,4},
826{"Roadflare",324,1,90,4},
827{"Painkiller",2709,3,0,4},
828{"Sawn-Off Shotgun",350,1,90,2.3},
829{"SPAZ-12 Combat Shotgun",351,1,90,2.3},
830{"MP5A5",353,1,90,2.8},
831{"Watch",2710,1,0,4},
832{"Lee Enfield",357,1,90,3.5},
833{"Alice Pack",1248,1,0,4},
834{"Night Vision Goggles",368,1,90,4},
835{"Binoculars",369,1,0,4},
836{"Tire",1073,1,0,2},
837{"Morphine",1579,1,0,4},
838{"AK-47",355,1,90,3.8},
839{"GPS",2976,0.15,0,3},
840{"Map",1277,0.8,90,7},
841{"M4",356,1,90,2.4},
842{"CZ 550",358,1,90,0.4},
843{"Infrared Goggles",369,1,90,3},
844{"Assault Pack (ACU)",3026,1,0,5},
845{"Drybag(Yellow)",1809,1,0,0.1},
846{"Mountain Backpack",1669,1,0,0.1},
847{"Czech Backpack",1239,1,0,2},
848{"Coyote Backpack",1252,1,0,0.9},
849{"Shovel",337,1,90,1},
850{"AK Mag",1271,2,0},
851{"M4 Mag",1271,2,0},
852{"M1911 Mag",3013,2,0},
853{"M9 SD Mag",3013,2,0},
854{"Desert Eagle Mag",3013,2,0},
855{"Pizza",1582,1,0,4},
856{"Soda Bottle",2647,1,0,4},
857{"CZ 550 Mag",2358,2,0},
858{"Lee Enfield Mag",2358,2,0},
859{"PDW Mag",2041,2,0},
860{"MP5A5 Mag",2041,2,0},
861},
862}
863 -------------------------------------
864
865function WeaponBox ()
866 for i,box in pairs(WeaponBoxCol) do
867 for _,items in ipairs(lootItemsMylitary["weaponbox"]) do
868 setElementData(WeaponBoxCol[i],items[1],math.random(-7,1000))
869 end
870 end
871 setTimer(WeaponBox,3600000,1)
872end
873
874
875function WeaponPacks()
876 number1 = 0
877 for i,box in ipairs(MylitaryBox) do
878 number1 = number1+1
879 local x,y,z = box[1],box[2],box[3]-0.9;
880 object = createObject(964,x,y,z,nil,nil,nil)
881 --setElementCollisionsEnabled(object, false)
882 WeaponBoxCol[i] = createColSphere(x,y,z,2)
883 setElementData(WeaponBoxCol[i],"parent",object)
884 setElementData(WeaponBoxCol[i],"weaponbox",true)
885 setElementData(WeaponBoxCol[i],"MAX_Slots",10000)
886 for _,items in ipairs(lootItemsMylitary["weaponbox"]) do
887 local randomNumber = math.random(1,10)
888 if randomNumber >= 2 then
889 setElementData(WeaponBoxCol[i],items[1],math.random(30,70))
890 end
891 end
892 end
893 setTimer(WeaponBox,3600000,1)
894end
895WeaponPacks()