A full blown painting canvas editor with support for images
Preview
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 regardingQB
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
AddedConfig.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)
Addedgraffiti
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!
Code is accessible | Partly (server side framework integration & configuration) |
Subscription-based | No, you pay only ONCE |
Lines (approximately) | 700 |
Requirements | ox_lib |
Support | Yes |