Hallo Community,
da mir auf meinen Testserver immer ein bisschen langweilig ist, und ich gerne wunderschöne Bilder male, habe ich etwas kleiner für MTA:SA gemacht.
- Eine Farbauswahl
- Beliebige Pinselgröße
- Man kann die Bilder abspeichern mit /psave für Doneasty unseren Gott
- Die Bilder sind der Auflösung des Spielers angepasst
- Pinselgröße von 5-Unendlich
- /paint
- etc.
Code :
Spoiler anzeigen
Lua
local screen = {guiGetScreenSize()}
function isMouveOverPosition ( x, y, w, h)
if isCursorShowing () then
local mouse = {getCursorPosition()}
local cursorx,cursory = mouse[1]*screen[1], mouse[2]*screen[2]
if cursorx > x and cursorx < x + w and cursory > y and cursory < y + h then
return true
else
return false
end
end
end
local c_setting = {}
c_setting.SIZE = 20
c_setting.COLOR = { 245, 170, 9 }
local painta = false
local paint = {}
paint.pix = {}
paint.target = dxCreateRenderTarget (screen[1],screen[2])
paint.fenster = guiCreateWindow( screen[1] * 1553 / 1920, screen[2] * 368 / 1080, screen[1] * 295 / 1920, screen[2] * 248 / 1080, "Malkasten für MTA´LER", false)
paint.farbe = guiCreateLabel( screen[1] * 82 / 1920, screen[2] * 33 / 1080, screen[1] * 136 / 1920, screen[2] * 19 / 1080, "Momentane Farbe", false, paint.fenster)
paint.red = guiCreateScrollBar( screen[1] * 27 / 1920, screen[2] * 79 / 1080, screen[1] * 249 / 1920, screen[2] * 15 / 1080, true, false, paint.fenster)
paint.green = guiCreateScrollBar( screen[1] * 27 / 1920, screen[2] * 104 / 1080, screen[1] * 249 / 1920, screen[2] * 15 / 1080, true, false, paint.fenster)
paint.blue = guiCreateScrollBar( screen[1] * 27 / 1920, screen[2] * 129 / 1080, screen[1] * 249 / 1920, screen[2] * 15 / 1080, true, false, paint.fenster)
paint.knopf = guiCreateButton( screen[1] * 27 / 1920, screen[2] * 188 / 1080, screen[1] * 249 / 1920, screen[2] * 30 / 1080, "Bild löschen", false, paint.fenster)
guiLabelSetHorizontalAlign(paint.farbe, "center", false)
guiWindowSetSizable(paint.fenster, false)
guiSetFont(paint.knopf, "default-bold-small")
guiSetFont(paint.farbe, "default-bold-small")
guiSetProperty(paint.knopf, "NormalTextColour", "FFAAAAAA")
guiLabelSetColor(paint.farbe, 245, 170, 9)
guiSetVisible ( paint.fenster, false )
addEventHandler ('onClientResourceStart', resourceRoot, function ()
-- // create GUI - FUNCS
addEventHandler ( "onClientGUIScroll",paint.fenster, function ()
local red = math.floor ( guiScrollBarGetScrollPosition ( paint.red ) * 2.55 )
local green = math.floor ( guiScrollBarGetScrollPosition ( paint.green ) * 2.55 )
local blue = math.floor ( guiScrollBarGetScrollPosition ( paint.blue ) * 2.55 )
guiLabelSetColor(paint.farbe, red, green, blue)
c_setting.COLOR[1] = red
c_setting.COLOR[2] = green
c_setting.COLOR[3] = blue
end )
addEventHandler ('onClientGUIClick', paint.knopf, function ( btn, state )
if source == paint.knopf then
paint.pix = {}
end
end)
-- //
addEventHandler ('onClientCursorMove', root, function ()
if isCursorShowing () and painta then
local mx,my = getCursorPosition()
mx,my = mx*screen[1],my*screen[2]
local query = true
-- //
do
local x,y = guiGetPosition ( paint.fenster, false )
local w,h = guiGetSize ( paint.fenster, false )
if isMouveOverPosition ( x,y,w,h) then
query = false
end
end
--//
if query then
if getKeyState ('mouse1') then
table.insert ( paint.pix, {x = mx - c_setting.SIZE/2,y = my - c_setting.SIZE/2, size = c_setting.SIZE, color = {unpack(c_setting.COLOR)}} )
local t = paint.pix[#paint.pix]
elseif getKeyState ('mouse2') then
for key, v in ipairs (paint.pix) do
if isMouveOverPosition ( v.x, v.y, v.size, v.size ) then
table.remove (paint.pix, key )
break --// Überflüssige Abfragen stoppen, damit die FPS nicht extrem beeinflust werden, bei mehreren Einträgen
end
end
end
end
end
end)
addEventHandler ('onClientKey', root, function ( key)
if isCursorShowing () and painta then
-- //
local amount = 1
if getKeyState ( 'lshift' ) then
amount = 5
end
--//
if ( key == 'mouse_wheel_up' ) then
c_setting.SIZE = c_setting.SIZE + amount
elseif ( key == 'mouse_wheel_down') then
if c_setting.SIZE - amount > 4 then
c_setting.SIZE = c_setting.SIZE - amount
else
outputChatBox ( "Der 'Pinsel' darf nicht kleiner sein als 5 'SIZE' .", 255, 0, 0 )
end
end
end
end)
addEventHandler ('onClientHUDRender', root, function ()
if isCursorShowing () and painta then
dxSetRenderTarget(paint.target, true)
for key, v in ipairs(paint.pix) do
dxDrawRectangle ( v.x, v.y, v.size, v.size, tocolor ( unpack(v.color)) )
end
dxSetRenderTarget()
local mx,my = getCursorPosition()
mx,my = mx*screen[1],my*screen[2]
dxDrawImage ( 0,0,screen[1],screen[2], paint.target )
dxDrawRectangle (mx - c_setting.SIZE/2,my - c_setting.SIZE/2,c_setting.SIZE,c_setting.SIZE,tocolor ( 255, 0, 0, 60 ))
dxDrawText ( "Size : "..c_setting.SIZE.."\nGezeichnete Element : "..#paint.pix, screen[1]/2 - (dxGetTextWidth("Size : "..c_setting.SIZE.."\nGezeichnete Element : "..#paint.pix, 2, "arial")/2), screen[2]*100/1920, 0, 0, tocolor (unpack(c_setting.COLOR)), 2, "arial" )
end
end)
addCommandHandler ('paint', function ()
painta = not painta
guiSetVisible ( paint.fenster, painta )
showCursor ( painta )
end)
addCommandHandler ('psave', function ()
if painta then
local pixels = dxGetTexturePixels(paint.target)
pixels = dxConvertPixels(pixels, 'jpeg')
local tick = getTickCount ()
local tFile = fileCreate( 'art_of_laiph_'..tick..'.jpg' )
outputChatBox ( 'Art of Laiph gespeichert ( resource|'..getResourceName(getThisResource(getResourceRootElement))..'|art_of_laiph_'..tick..'.jpg )' )
fileWrite ( tFile, pixels )
fileClose ( tFile )
end
end)
end)
Alles anzeigen
Hier ein paar Kunstwerke aus meinem Haus :
Externer Inhalt
i.epvpimg.com
Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
Externer Inhalt
i.epvpimg.com
Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
Externer Inhalt
i.epvpimg.com
Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
Externer Inhalt
i.epvpimg.com
Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
Mit freundlichen Grüßen
.FaLsE