-- EDITABLE (NO RECOMMENDED) parts = 10 -- amount of sides that is displayed behind the vehicle (you can see the corners) partLength = 1 -- length of every part in SA coördinates lineThickness = 15 -- thickness of every line (not sure about the unit) xOff, yOff, zOff = 0, -2.5, 0 -- offset of the rainbow fadeLength = 5 -- amount of parts from the end to the front that's in the fade, for some reason it starts bugging when you make it larger than 5 colors = { -- colors in the rainbow in RGB { 255, 0, 0 }, { 255, 150, 0 }, { 255, 255, 0 }, { 50, 255, 0 }, { 0, 150, 255 }, { 100, 50, 255 } } -- DO NOT EDIT ANYTHING BELOW HERE, UNLESS YOU KNOW WHAT YOU'RE DOING lineOffsetZMultiplier = 0.01 vehicleTable = {} oldPosTable = {} partsTable = {} if fadeLength >= parts then fadeLength = parts - 1 end startFade = parts - fadeLength fadeIndex = 255 / fadeLength lineOffsetZ = lineThickness * lineOffsetZMultiplier lineStartZ = zOff + #colors * lineOffsetZ * 0.5 function render () for i, v in pairs ( getElementsByType ( "vehicle" ) ) do if not vehicleTable[v] then vehicleTable[v] = {} else local vx, vy, vz = getElementPosition ( v ) local matrix = getElementMatrix ( v ) local x = xOff * matrix[1][1] + yOff * matrix[2][1] + zOff * matrix[3][1] + 1 * matrix[4][1] local y = xOff * matrix[1][2] + yOff * matrix[2][2] + zOff * matrix[3][2] + 1 * matrix[4][2] local z = xOff * matrix[1][3] + yOff * matrix[2][3] + zOff * matrix[3][3] + 1 * matrix[4][3] if oldPosTable[v] then local oldX, oldY, oldZ = unpack ( oldPosTable[v] ) if getDistanceBetweenPoints3D ( x, y, z, oldX, oldY, oldZ ) > partLength then table.insert ( vehicleTable[v], { oldX, oldY, oldZ, x, y, z } ) oldPosTable[v] = { x, y, z } end for i, part in pairs ( vehicleTable[v] ) do if #vehicleTable[v] <= parts or i >= #vehicleTable[v] - parts then local a = 255 if i < #vehicleTable[v] - parts + fadeLength then local index = i - ( #vehicleTable[v] - parts ) a = 255 * fadeIndex * ( fadeLength - index ) end local px1, py1, pz1, px2, py2, pz2 = unpack ( part ) drawRainbow ( px1, py1, pz1, px2, py2, pz2, a ) end end drawRainbow ( x, y, z, oldX, oldY, oldZ, 255 ) else oldPosTable[v] = { x, y, z } end end end end addEventHandler ( "onClientRender", getRootElement(), render ) function drawRainbow ( x1, y1, z1, x2, y2, z2, alpha ) for i, color in pairs ( colors ) do local i = #colors - i local r, g, b = unpack ( color ) local z1 = z1 + - lineStartZ + ( i - 1 ) * lineOffsetZ local z2 = z2 + - lineStartZ + ( i - 1 ) * lineOffsetZ dxDrawLine3D ( x1, y1, z1, x2, y2, z2, tocolor(r, g, b, alpha), lineThickness ) end end