Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.18 KB | None | 0 0
  1. MapManager = {}
  2. MapManager.objects = {}
  3. MapManager.pickups = {}
  4. MapManager.elements = {}
  5. MapManager.vehicles = {}
  6. MapManager.helicopterIDs = {425,592,553,577,488,511,497,548,563,512,476,593,447,425,519,520,460,417,469,487,513,501,465}
  7. MapManager.pickUpTimer = nil
  8. MapManager.checkpoints = {}
  9.  
  10. function MapManager.loadMap(mapName,mapTable)
  11. if mapTable.settings["#time"] then
  12. local hour = string.match(mapTable.settings["#time"],"%d+")
  13. mapTable.settings["#time"] = string.reverse(mapTable.settings["#time"])
  14. local minute = string.match(mapTable.settings["#time"],"%d+")
  15. if hour and minute then
  16. setTime(hour,minute)
  17. end
  18. end
  19. if mapTable.settings["#weather"] then
  20. local weather = string.match(mapTable.settings["#weather"],"%d+")
  21. if weather then
  22. setWeather(weather)
  23. end
  24. end
  25. setCloudsEnabled(false)
  26. for i,m in ipairs(mapTable.objects) do
  27. local object = Object(m.modelId,m.posX,m.posY,m.posZ,m.rotX,m.rotY,m.rotZ)
  28. if object then
  29. if m.collisions == "false" then
  30. object:setCollisionsEnabled(false)
  31. else
  32. object:setCollisionsEnabled(true)
  33. end
  34. if m.doublesided == "true" then
  35. setElementDoubleSided(object,true)
  36. end
  37. if m.breakable == "false" then
  38. object:setBreakable(false)
  39. else
  40. object:setBreakable(true)
  41. end
  42. object:setDimension(source.dimension)
  43. object:setInterior(m.interiorID)
  44. object:setAlpha(m.alpha)
  45. object:setScale(m.scale)
  46. table.insert(MapManager.objects,object)
  47. end
  48. end
  49. for i,m in ipairs(mapTable.vehicles) do
  50. local vehicle = Vehicle(m.modelId,m.posX,m.posY,m.posZ,m.rotX,m.rotY,m.rotZ)
  51. if vehicle then
  52. if m.frozen == "false" then
  53. vehicle:setFrozen(false)
  54. else
  55. vehicle:setFrozen(true)
  56. end
  57. vehicle:setDimension(source.dimension)
  58. vehicle:setInterior(m.interiorID)
  59. table.insert(MapManager.vehicles,vehicle)
  60. end
  61. end
  62. for i,r in ipairs(mapTable.removeWorldObjects) do
  63. removeWorldModel(r.model,r.radius,r.posX,r.posY,r.posZ,r.interior)
  64. end
  65. for i,m in ipairs(mapTable.marker) do
  66. local r,g,b,a = getColorFromString(m.color)
  67. local marker = Marker(m.posX,m.posY,m.posZ,m.theType,m.size,r,g,b,a)
  68. if marker then
  69. marker:setDimension(source.dimension)
  70. table.insert(MapManager.objects,marker)
  71. end
  72. end
  73. for i,m in ipairs(mapTable.pickup) do
  74. MapManager.pickups[i] = {}
  75. local pickup
  76. local colshape
  77. if m.pickupType == "repair" then
  78. pickup = Object(2222,m.posX,m.posY,m.posZ,0,0,0,true)
  79. colshape = ColShape.Sphere(m.posX,m.posY,m.posZ,3.5)
  80. colshape:setData("type","repair")
  81. colshape:setData("object",pickup)
  82. elseif m.pickupType == "nitro" then
  83. pickup = Object(2221,m.posX - 0.25,m.posY - 0.25,m.posZ,0,0,0,true)
  84. colshape = ColShape.Sphere(m.posX,m.posY,m.posZ,3.5)
  85. colshape:setData("type","nitro")
  86. colshape:setData("object",pickup)
  87. elseif m.pickupType == "vehiclechange" then
  88. pickup = Object(2223,m.posX + 0.25,m.posY + 0.25,m.posZ,0,0,0,true)
  89. colshape = ColShape.Sphere(m.posX,m.posY,m.posZ,3.5)
  90. colshape:setData("type","vehiclechange")
  91. colshape:setData("model",m.vehicle)
  92. colshape:setData("object",pickup)
  93. end
  94. if colshape and pickup then
  95. colshape:setDimension(source.dimension)
  96. pickup:setDimension(source.dimension)
  97. pickup:setCollisionsEnabled(false)
  98. MapManager.pickups[i].pickup = pickup
  99. MapManager.pickups[i].colshape = colshape
  100. end
  101. end
  102. for i,c in ipairs(mapTable.Jumps) do
  103. local element = Element("Jump",c.id)
  104. element:setPosition(c.posX,c.posY,c.posZ)
  105. element:setData("power",c.power)
  106. element:setData("id",c.id)
  107. element:setData("color",c.color)
  108. element:setData("type",c.type)
  109. element:setData("size",c.size)
  110. table.insert(MapManager.elements,element)
  111. end
  112. for i,c in ipairs(mapTable.SpeedUp) do
  113. local element = Element("SpeedUp",c.id)
  114. element:setPosition(c.posX,c.posY,c.posZ)
  115. element:setData("power",c.power)
  116. element:setData("id",c.id)
  117. element:setData("color",c.color)
  118. element:setData("type",c.type)
  119. element:setData("size",c.size)
  120. table.insert(MapManager.elements,element)
  121. end
  122. for i,c in ipairs(mapTable.Freeze) do
  123. local element = Element("Freeze",c.id)
  124. element:setPosition(c.posX,c.posY,c.posZ)
  125. element:setData("time",c.time)
  126. element:setData("id",c.id)
  127. element:setData("color",c.color)
  128. element:setData("type",c.type)
  129. element:setData("size",c.size)
  130. table.insert(MapManager.elements,element)
  131. end
  132. for i,c in ipairs(mapTable.Flip) do
  133. local element = Element("Flip",c.id)
  134. element:setPosition(c.posX,c.posY,c.posZ)
  135. element:setData("id",c.id)
  136. element:setData("color",c.color)
  137. element:setData("type",c.type)
  138. element:setData("size",c.size)
  139. table.insert(MapManager.elements,element)
  140. end
  141. for i,c in ipairs(mapTable.Reverse) do
  142. local element = Element("Reverse",c.id)
  143. element:setPosition(c.posX,c.posY,c.posZ)
  144. element:setData("id",c.id)
  145. element:setData("color",c.color)
  146. element:setData("type",c.type)
  147. element:setData("size",c.size)
  148. table.insert(MapManager.elements,element)
  149. end
  150. for i,c in ipairs(mapTable.Rotate) do
  151. local element = Element("Rotate",c.id)
  152. element:setPosition(c.posX,c.posY,c.posZ)
  153. element:setData("id",c.id)
  154. element:setData("color",c.color)
  155. element:setData("type",c.type)
  156. element:setData("size",c.size)
  157. table.insert(MapManager.elements,element)
  158. end
  159. addEventHandler("onClientRender",root,MapManager.rotatePickups)
  160. addEventHandler("onClientColShapeHit",root,MapManager.pickupHit)
  161. end
  162. addEvent("MJ-Loader:onClientLoadMap",true)
  163. addEventHandler("MJ-Loader:onClientLoadMap",root,MapManager.loadMap)
  164.  
  165.  
  166. function MapManager.unloadMap()
  167. setWeather(0)
  168. setTime(12,0)
  169. for i,object in pairs(MapManager.objects) do
  170. if isElement(object) then destroyElement(object) end
  171. end
  172. for i,vehicle in pairs(MapManager.vehicles) do
  173. if isElement(vehicle) then destroyElement(vehicle) end
  174. end
  175. for i,p in pairs(MapManager.pickups) do
  176. if isElement(p.pickup) then destroyElement(p.pickup) end
  177. if isElement(p.colshape) then destroyElement(p.colshape) end
  178. end
  179. for i,element in pairs(MapManager.elements) do
  180. if isElement(element) then destroyElement(element) end
  181. end
  182. for i,checkpoint in pairs(MapManager.checkpoints) do
  183. if isElement(checkpoint.marker) then destroyElement(checkpoint.marker) end
  184. if isElement(checkpoint.colshape) then destroyElement(checkpoint.colshape) end
  185. end
  186. MapManager.objects = {}
  187. MapManager.elements = {}
  188. MapManager.vehicles = {}
  189. MapManager.pickups = {}
  190. MapManager.checkpoints = {}
  191. restoreAllWorldModels()
  192. resetSkyGradient()
  193. resetWaterColor()
  194. removeEventHandler("onClientRender",root,MapManager.rotatePickups)
  195. removeEventHandler("onClientColShapeHit",root,MapManager.pickupHit)
  196.  
  197. end
  198. addEvent("MJ-Loader:unloadMap",true)
  199. addEventHandler("MJ-Loader:unloadMap",root,MapManager.unloadMap)
  200.  
  201.  
  202. function MapManager.getCheckpoints()
  203. return MapManager.checkpoints
  204. end
  205.  
  206. function MapManager.isRaceMap()
  207. return #MapManager.checkpoints > 0
  208. end
  209. export_isRaceMap = MapManager.isRaceMap
  210.  
  211. function MapManager.rotatePickups()
  212. for i,p in pairs(MapManager.pickups) do
  213. if isElement(p.pickup) and isElementStreamedIn(p.pickup) then
  214. local xr,yr,zr = getElementRotation(p.pickup)
  215. setElementRotation(p.pickup,xr,yr,zr+3)
  216. if getElementData(p.colshape,"type") == "vehiclechange" then
  217. local x,y,z = getElementPosition(p.pickup)
  218. local cx,cy,cz = getCameraMatrix()
  219. local distance = getDistanceBetweenPoints3D(x,y,z,cx,cy,cz )
  220. local model = getElementData(p.colshape,"model")
  221. local sx,sy = getScreenFromWorldPosition(x,y,z + 1.1,0.08 )
  222. if sx then
  223. if distance < 80 and isLineOfSightClear(cx,cy,cz,x,y,z,true,false,false,true,false) then
  224. alpha = 255 - ((distance-60)*(255/20))
  225. elseif distance < 60 and isLineOfSightClear(cx,cy,cz,x,y,z,true,false,false,true,false) then
  226. alpha = 255
  227. else
  228. alpha = 0
  229. end
  230. scale = (60/distance)*0.3
  231. dxDrawText(getVehicleNameFromModel(model),sx,sy,sx,sy,tocolor(255,255,255,math.min(255,alpha)),math.min (scale,1.5),"bankgothic","center","bottom",false,false,false )
  232. end
  233. end
  234. end
  235. end
  236. end
  237.  
  238. function MapManager.pickupHit(element)
  239. if getElementType(element) ~= "player" then return end
  240. if element == localPlayer then
  241. if source:getData("cancelled") then return end
  242. if not getPedOccupiedVehicle(localPlayer) then return end
  243. local type = source:getData("type")
  244. local model = source:getData("model")
  245. local vehicle = getPedOccupiedVehicle(localPlayer)
  246. if type == "vehiclechange" then
  247. if model == getElementModel(vehicle) then
  248. return
  249. end
  250. end
  251. if type == "nitro" then
  252. addVehicleUpgrade(vehicle,1010)
  253. playSoundFrontEnd(46)
  254. elseif type == "repair" then
  255. fixVehicle(vehicle)
  256. playSoundFrontEnd(46)
  257. elseif type == "vehiclechange" then
  258. if model == 425 then
  259. if getElementData(localPlayer,"state") ~= "Alive" then return end
  260. setTime(5,0)
  261. setWeather(1)
  262. else
  263. -- yolo
  264. end
  265. if isTimer(MapManager.pickUpTimer) then return end
  266. MapManager.pickUpTimer = setTimer(function()
  267. setElementModel(vehicle,model)
  268. MapManager.vehicleChanging(model)
  269. end,50,1)
  270. end
  271. triggerServerEvent("onPlayerDerbyPickupHit",localPlayer,type,model)
  272. end
  273. if source:getData("unique") then
  274. local object = source:getData("object")
  275. if isElement(object) then destroyElement(object) end
  276. destroyElement(source)
  277. end
  278. end
  279.  
  280.  
  281. function MapManager.vehicleChanging(model)
  282. local vehicle = getPedOccupiedVehicle(localPlayer)
  283. local vehicleHeight = getElementDistanceFromCentreOfMassToBaseOfModel(vehicle)
  284. local x,y,z = getElementPosition(vehicle)
  285. setElementModel(vehicle,model)
  286. playSoundFrontEnd(46)
  287. local matrix = getElementMatrix(vehicle)
  288. local Right = Vector3( matrix[1][1],matrix[1][2],matrix[1][3] )
  289. local Fwd = Vector3( matrix[2][1],matrix[2][2],matrix[2][3] )
  290. local Up = Vector3( matrix[3][1],matrix[3][2],matrix[3][3] )
  291. local Velocity = Vector3(getElementVelocity(vehicle))
  292. local rz
  293. if Velocity:getLength() > 0.05 and Up.z < 0.001 then
  294. rz = directionToRotation2D(Velocity.x,Velocity.y)
  295. else
  296. rz = directionToRotation2D(Fwd.x,Fwd.y)
  297. end
  298. setElementRotation(vehicle,0,0,rz)
  299. local newVehicleHeight = getElementDistanceFromCentreOfMassToBaseOfModel(vehicle)
  300. if vehicleHeight and newVehicleHeight > vehicleHeight then
  301. z = z - vehicleHeight + newVehicleHeight
  302. end
  303. z = z + 1.2
  304. setElementPosition(vehicle,x,y,z)
  305. vehicleHeight = nil
  306. if table.contains(MapManager.helicopterIDs,model) then
  307. setHelicopterRotorSpeed(getPedOccupiedVehicle(localPlayer),0.2)
  308. setVehicleLandingGearDown(getPedOccupiedVehicle(localPlayer),true)
  309. end
  310. end
  311.  
  312.  
  313. function MapManager.orderCheckpoints(checkpointTable)
  314. local lastCheckPoint = false
  315. local found
  316. local orderedList = {}
  317. for i=0,#checkpointTable,1 do
  318. for j,checkpoint in ipairs(checkpointTable) do
  319. if checkpoint.nextid == lastCheckPoint then
  320. lastCheckPoint = checkpoint.id
  321. table.insert(orderedList,1,checkpoint)
  322. break
  323. end
  324. end
  325. end
  326. return orderedList
  327. end
  328.  
  329.  
  330. function rem( a,b )
  331. local result = a - b * math.floor( a / b )
  332. if result >= b then
  333. result = result - b
  334. end
  335. return result
  336. end
  337.  
  338.  
  339. function directionToRotation2D( x,y )
  340. return rem( math.atan2( y,x ) * (360/6.28) - 90,360 )
  341. end
  342.  
  343. function MapManager.removeRepairs()
  344. for i,p in pairs(MapManager.pickups) do
  345. if getElementData(p.colshape,"type") == "repair" then
  346. if isElement(p.pickup) then destroyElement(p.pickup) end
  347. if isElement(p.colshape) then destroyElement(p.colshape) end
  348. end
  349. end
  350. end
  351. addEvent("onClientRemoveRepairPickups",true)
  352. addEventHandler("onClientRemoveRepairPickups",root,MapManager.removeRepairs)
  353.  
  354. function MapManager.removeObjects()
  355. for i,object in pairs(MapManager.objects) do
  356. if isElement(object) then destroyElement(object) end
  357. end
  358. end
  359. addEvent("onClientRemoveObjects",true)
  360. addEventHandler("onClientRemoveObjects",root,MapManager.removeObjects)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement