Laser
------------
--Client
------------
addEventHandler ("onClientGUIClick", getRootElement(), function(button, state, absoluteX, absoluteY) if ( source == aLaser ) then triggerServerEvent("aLaser", localPlayer) end end) local dots = {} CMD_LASER = "laser" CMD_LASERCOLOR = "lasercolor" laserWidth = 2 dotSize = .05 localPlayer = getLocalPlayer() picklasercolor = 0 colorPickerInitialized = 0 oldcolors = {r=255,g=0,b=0,a=255} addEventHandler("onClientResourceStart", getRootElement(), function(res) if res == getThisResource() then SetLaserColor(localPlayer, oldcolors.r,oldcolors.g,oldcolors.b,oldcolors.a) if colorPickerInitialized == 0 then initColorPicker() end elseif res == getResourceFromName("colorpicker") then if colorPickerInitialized == 0 then initColorPicker() end end end ) addEventHandler("onClientResourceStop", getRootElement(), function(res) if res == getThisResource() then SetLaserEnabled(localPlayer, false) end end ) addEventHandler("onClientElementDataChange", localPlayer, function(dataName, oldValue) if getElementType(source) == "player" and source == localPlayer and dataName == "laser.on" then local newValue = getElementData(source, dataName) if oldValue == true and newValue == false then unbindKey("aim_weapon", "both", AimKeyPressed) elseif oldValue == false and newValue == true then bindKey("aim_weapon", "both", AimKeyPressed) end end end ) addEventHandler( "onClientRender", getRootElement(), function() local players = getElementsByType("player") for k,v in ipairs(players) do if getElementData(v, "laser.on") then DrawLaser(v) end end end ) addEventHandler( "onClientPreRender", getRootElement(), function() local players = getElementsByType("player") for k,v in ipairs(players) do if getElementData(v, "laser.on") then end end end ) function AimKeyPressed(key, state) if state == "down" then setElementData(localPlayer, "laser.aim", true, true) elseif state == "up" then setElementData(localPlayer, "laser.aim", false, true) end end function DrawLaser(player) if getElementData(player, "laser.on") then local targetself = getPedTarget(player) if targetself and targetself == player then targetself = true else targetself = false end if getElementData(player, "laser.aim") and IsPlayerWeaponValidForLaser(player) == true and targetself == false then local x,y,z = getPedWeaponMuzzlePosition(player) if not x then outputDebugString("getPedWeaponMuzzlePosition failed") x,y,z = getPedTargetStart(player) end local x2,y2,z2 = getPedTargetEnd(player) if not x2 then --outputDebugString("getPedTargetEnd failed") return end local x3,y3,z3 = getPedTargetCollision(player) local r,g,b,a = GetLaserColor(player) if x3 then -- collision detected, draw til collision and add a dot dxDrawLine3D(x,y,z,x3,y3,z3, tocolor(r,g,b,a), laserWidth) DrawLaserDot(player, x3,y3,z3) else -- no collision, draw til end of weapons range dxDrawLine3D(x,y,z,x2,y2,z2, tocolor(r,g,b,a), laserWidth) DestroyLaserDot(player) end else DestroyLaserDot(player) -- not aiming, remove dot, no laser end else DestroyLaserDot(player) end end function DrawLaserDot (player, x,y,z) if not dots[player] then dots[player] = createMarker(x,y,z, "corona", .05, GetLaserColor(player)) else setElementPosition(dots[player], x,y,z) end end function DestroyLaserDot(player) if dots[player] and isElement(dots[player]) then destroyElement(dots[player]) dots[player] = nil end end function SetLaserColor(player,r,g,b,a) setElementData(player, "laser.red", r) setElementData(player, "laser.green", g) setElementData(player, "laser.blue", b) setElementData(player, "laser.alpha", a) return true end function GetLaserColor(player) r = getElementData(player, "laser.red") g = getElementData(player, "laser.green") b = getElementData(player, "laser.blue") a = getElementData(player, "laser.alpha") return r,g,b,a end function IsPlayerWeaponValidForLaser(player) local weapon = getPedWeapon(player) if weapon and weapon > 21 and weapon < 39 and weapon ~= 35 and weapon ~= 36 then return true end return false end function SetLaserEnabled(player, state) -- returns false if invalid params passed, true if successful changed laser enabled if not player or isElement(player) == false then return false end if getElementType(player) ~= "player" then return false end if state == nil then return false end if state == true then -- enable laser setElementData(player, "laser.on", true, true) setElementData(player, "laser.aim", false, true) return true elseif state == false then setElementData(player, "laser.on", false, true) setElementData(player, "laser.aim", false, true) return true end return false end function IsLaserEnabled(player) if getElementData(player, "laser.on") == true then return true else return false end end function initColorPicker() if getResourceFromName("colorpicker") == false then return false end addEventHandler("onClientPickedColor", localPlayer, function(r,g,b,a) if picklasercolor == 1 then SetLaserColor(source,r,g,b,a) end end ) addEventHandler("onClientCancelColorPick", localPlayer, function() if picklasercolor == 1 then SetLaserColor(source,oldcolors.r,oldcolors.g,oldcolors.b,oldcolors.a) picklasercolor = 0 end end ) colorPickerInitialized = 1 return true end ------------- addEvent("LaserWin",true) addEventHandler("LaserWin",root,function() out("Select Your Color",2) LaserWin = guiCreateWindow(494,269,97,150,"Laser Color",false) guiSetVisible(LaserWin,true) guiWindowSetSizable(LaserWin,false) showCursor(true) --- Center Window --- local screenW,screenH=guiGetScreenSize() local windowW,windowH=guiGetSize(LaserWin,false) local x,y = (screenW-windowW)/2,(screenH-windowH)/2 guiSetPosition(LaserWin,x,y,false) ----- Center Window ----- Red = guiCreateRadioButton(10,29,16,14,"",false,LaserWin) guiRadioButtonSetSelected(Red,true) RedL = guiCreateLabel(30,28,69,15,"Red",false,LaserWin) guiLabelSetColor(RedL,255,0,0) Blue = guiCreateRadioButton(10,51,16,14,"",false,LaserWin) BlueL = guiCreateLabel(30,50,69,15,"Blue",false,LaserWin) guiLabelSetColor(BlueL,0,127,255) Green = guiCreateRadioButton(10,71,16,14,"",false,LaserWin) GreenL = guiCreateLabel(30,70,69,15,"Green",false,LaserWin) guiLabelSetColor(GreenL,0,255,0) Yellow = guiCreateRadioButton(10,90,16,14,"",false,LaserWin) YellowL = guiCreateLabel(30,88,69,15,"Yellow",false,LaserWin) guiLabelSetColor(YellowL,255,255,0) LaserOK = guiCreateButton(9,114,74,24,"OK",false,LaserWin) ---- addEventHandler("onClientGUIClick",root,function() if source == LaserOK then R = guiRadioButtonGetSelected(Red) B = guiRadioButtonGetSelected(Blue) G = guiRadioButtonGetSelected(Green) Y = guiRadioButtonGetSelected(Yellow) if R then r,g,b = 255,0,0 elseif B then r,g,b = 0,127,255 elseif G then r,g,b = 0,255,0 elseif Y then r,g,b = 255,255,0 end triggerServerEvent("AfterLaserColor",lp,r,g,b) guiSetVisible(LaserWin,false) showCursor(false) out("You Will Have Laser For 2 Mins",2) end