🖌️ Graffiti - Spray your ideas [ESX/QB/ANY]

A script by wjuton

No reviews yet.
🖌️ Graffiti - Spray your ideas [ESX/QB/ANY] main image

Full Description

A full blown painting canvas editor with support for images

Preview

Click here to watch

Purchase

Price: 24.99€ (+ tax)
Click here to buy!

Update/Changelog - 1.5.3

Images are now uploaded to a web based server to reduce network latency
Bumped default Width and Height to 400
Fixed bunch of misspellings of the word “graffiti”
Some minor fixes here and there…

Update/Changelog - 1.5.2

Fixed an issue where after cleaning/removing an graffiti it wont remove itself
Added more options to config (animation clip & dict)

Update/Changelog - 1.5.1 // hotfix

Fixed a bug where the texture loads twice
Fixed the server-side loaded graffiti counter for mixed-arrays

Update/Changelog - 1.5

Added opacity clamp to config
Exposed more functions for integration
Fixed few client-side bugs
Fixed a bug regarding QB implementation

--- Returns the runtime list of existing graffitis
---@return Grafitti[]
function GetGraffitiList() end

function UpdateGrafittiDiskData() end

Update/Changelog - 1.4

Added rotation on the Z axis (by pressing SHIFT and arrows when placing)
Graffitis are now saved at an interval and only when needed
Exposed more functions (client-side)
Optimized client-side a bit
Added Config.CleanMaxRayDistance

Update/Changelog - 1.3 & 1.3.1

Added scale clamp to configuration
Added possiblity to change the output opacity

Added more configuration options (toggle animation & its duration, max raycast distance)
(EXPERIMENTAL) Tweaked a bit result position so its more convienient for the player

Update/Changelog - 1.2

Lazy load only new graffitis (HOTFIX)
Added graffiti parameter to all already exposed APIs that can support it

Update/Changelog - 1.1

Added ability to remove graffitis (external item)
Exposed some internal functions

Features

  • Painting
  • Dynamic Custom images
  • Save your graffitis
  • Well optimized (both client sidely and from the networking side)
  • Customizable & Localizable (see config below)
  • Custom integration (includes ESX/QB by default)
  • Debug tools for administration (/grafitti_debug, /grafitti_remove)
  • They disappear after a certain period of time
  • Unlimited graffitis rendering at the same time
  • Transparency
  • Spray animation
  • Cleaning graffitis with animation

Configuration

Config = {
    Canvas = {
        Width = 200,
        Height = 200,
    },

    CullingDistance = 150.0,
    ScaleClamp = {
        Min = 0.25,
        Max = 1.5,
        Step = 0.025
    },

    OpacityClamp = {
        Min = 0, 
        Max = 100, 
        Step = 30
    },


    -- how far from the wall you can be to draw 
    DrawMaxRayDistance = 10.0,

    -- shaking & spraying animation options
    DrawAnimation = {
        Enabled = true,
        ShakeSprayDuration = 2500,
        SprayingDuration = 5000,
    },

    CleanMaxRayDistance = 3.0,
    -- cleaning animation options
    CleanAnimation = {
        Enabled = true,
        Duration = 5000,
    },

    Integration = {
        Item = "spraycan",
        CleanItem = "acetone",
        -- for how long the grafitti should stay (in seconds)
        -- default: 3 days
        DisappearTime = 86400 * 3,
        -- this option is by default set to true but in some cases you would want to set it to false (anticheat-wise?)
        NetworkedAnimation = true,
        -- max distance a player can be from a graffiti to remove it.
        MaxCleanDistance = 10.0
    },

    Localization = {
        CleanGraffiti = "Cleaning graffiti",
        CleanGraffitiText = "Hover over a graffiti and press **ENTER** to clean it. **BACKSPACE** to cancel",
        BrushSize = "Size",
        BrushColor = "Color",
        SavedCanvases = "Saved Canvases",
        Accept = "Accept",
        Cancel = "Cancel",
        EditText = "Use your **ARROW** keys to adjust the grafitti, **SCROLL** to scale and **PGUP/PGDOWN** to change opacity",
        SaveCanvas = "Save Canvas",
        CanvasName = "Canvas Name",
        PasteImage = "Paste Image",
        NoSavedCanvases = "No saved canvases",
        SaveCanvasItem = "Press RMB to save this canvas",
        ShakeSpray = "Shaking the spraycan",
        Spraying = "Spraying"
    }
}

-- How fast (per seconds) should each grafitti sent over the network, by default it's using the maximal canvas size
Config.BytesPerSeconds = (Config.Canvas.Width * Config.Canvas.Height) * 0.25

Support / Issues

If you need any support, have an idea/feature request please reach out and contact me via informations in my bio

Take a look at my other resources!

:fire: > wt_adminpopups - Admin Popups
:bus: > wt_busstop - Bus Transit!

Code is accessible Partly (server side framework integration & configuration)
Subscription-based No, you pay only ONCE
Lines (approximately) 700
Requirements ox_lib
Support Yes