mirror of
				https://github.com/LDDestroier/CC/
				synced 2025-10-31 15:32:59 +00:00 
			
		
		
		
	Update pain2.lua
This commit is contained in:
		
							
								
								
									
										268
									
								
								pain2.lua
									
									
									
									
									
								
							
							
						
						
									
										268
									
								
								pain2.lua
									
									
									
									
									
								
							| @@ -1,10 +1,13 @@ | |||||||
| -- pain2 | -- pain2 | ||||||
|  |  | ||||||
| local scr_x, scr_y = term.getSize() | local scr_x, scr_y = term.getSize() | ||||||
| local mx, my = scr_x/2, scr_y/2 | local mx, my = scr_x/2, scr_y/2		-- midpoint of screen | ||||||
| local keysDown = {} | local keysDown = {}					-- list of all pushed keys | ||||||
| local miceDown = {} | local miceDown = {}					-- list of all clicked mice buttons | ||||||
| local dragPoses = {{{},{}}, {{},{}}, {{},{}}} | local dragPoses = {{{},{}}, {{},{}}, {{},{}}}	-- records initial and current mouse position per button while scrolling | ||||||
|  |  | ||||||
|  | local TICKNO = 0				-- iterates every time main() loops | ||||||
|  | local flashPaletteOnBar = false	-- whether or not to flash the dot palette numbers on the bottom bar | ||||||
|  |  | ||||||
| -- debug renderer is slower, but the normal one isn't functional yet | -- debug renderer is slower, but the normal one isn't functional yet | ||||||
| local useDebugRenderer = false | local useDebugRenderer = false | ||||||
| @@ -124,17 +127,23 @@ local control = { | |||||||
| 	moveMod = { | 	moveMod = { | ||||||
| 		key = keys.leftShift, | 		key = keys.leftShift, | ||||||
| 		holdDown = true, | 		holdDown = true, | ||||||
| 		modifiers = {}, | 		modifiers = { | ||||||
|  | 			[keys.leftShift] = true | ||||||
|  | 		}, | ||||||
| 	}, | 	}, | ||||||
| 	creepMod = { | 	creepMod = { | ||||||
| 		key = keys.leftAlt, | 		key = keys.leftAlt, | ||||||
| 		holdDown = true, | 		holdDown = true, | ||||||
| 		modifiers = {}, | 		modifiers = { | ||||||
|  | 			[keys.leftAlt] = true | ||||||
| 		}, | 		}, | ||||||
| 	toolSelect = { | 	}, | ||||||
|  | 	toolMod = { | ||||||
| 		key = keys.leftShift, | 		key = keys.leftShift, | ||||||
| 		holdDown = true, | 		holdDown = true, | ||||||
| 		modifiers = {}, | 		modifiers = { | ||||||
|  | 			[keys.leftShift] = true | ||||||
|  | 		}, | ||||||
| 	}, | 	}, | ||||||
| 	pencilTool = { | 	pencilTool = { | ||||||
| 		key = keys.p, | 		key = keys.p, | ||||||
| @@ -164,6 +173,76 @@ local control = { | |||||||
| 			[keys.leftShift] = true | 			[keys.leftShift] = true | ||||||
| 		}, | 		}, | ||||||
| 	}, | 	}, | ||||||
|  | 	selectPalette_0 = { | ||||||
|  | 		key = keys.zero, | ||||||
|  | 		holdDown = false, | ||||||
|  | 		modifiers = { | ||||||
|  | 			[keys.leftShift] = true | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	selectPalette_1 = { | ||||||
|  | 		key = keys.one, | ||||||
|  | 		holdDown = false, | ||||||
|  | 		modifiers = { | ||||||
|  | 			[keys.leftShift] = true | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	selectPalette_2 = { | ||||||
|  | 		key = keys.two, | ||||||
|  | 		holdDown = false, | ||||||
|  | 		modifiers = { | ||||||
|  | 			[keys.leftShift] = true | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	selectPalette_3 = { | ||||||
|  | 		key = keys.three, | ||||||
|  | 		holdDown = false, | ||||||
|  | 		modifiers = { | ||||||
|  | 			[keys.leftShift] = true | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	selectPalette_4 = { | ||||||
|  | 		key = keys.four, | ||||||
|  | 		holdDown = false, | ||||||
|  | 		modifiers = { | ||||||
|  | 			[keys.leftShift] = true | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	selectPalette_5 = { | ||||||
|  | 		key = keys.five, | ||||||
|  | 		holdDown = false, | ||||||
|  | 		modifiers = { | ||||||
|  | 			[keys.leftShift] = true | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	selectPalette_6 = { | ||||||
|  | 		key = keys.six, | ||||||
|  | 		holdDown = false, | ||||||
|  | 		modifiers = { | ||||||
|  | 			[keys.leftShift] = true | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	selectPalette_7 = { | ||||||
|  | 		key = keys.seven, | ||||||
|  | 		holdDown = false, | ||||||
|  | 		modifiers = { | ||||||
|  | 			[keys.leftShift] = true | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	selectPalette_8 = { | ||||||
|  | 		key = keys.eight, | ||||||
|  | 		holdDown = false, | ||||||
|  | 		modifiers = { | ||||||
|  | 			[keys.leftShift] = true | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	selectPalette_9 = { | ||||||
|  | 		key = keys.nine, | ||||||
|  | 		holdDown = false, | ||||||
|  | 		modifiers = { | ||||||
|  | 			[keys.leftShift] = true | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
| } | } | ||||||
|  |  | ||||||
| local checkControl = function(name) | local checkControl = function(name) | ||||||
| @@ -275,6 +354,7 @@ end | |||||||
|  |  | ||||||
| -- deletes a dot on the canvas, fool | -- deletes a dot on the canvas, fool | ||||||
| local deleteDot = function(x, y, frame) | local deleteDot = function(x, y, frame) | ||||||
|  | 	x, y = 1 + x - pain.size.x, 1 + y - pain.size.y | ||||||
| 	if canvas[frame][1][y] then | 	if canvas[frame][1][y] then | ||||||
| 		if canvas[frame][1][y][x] then | 		if canvas[frame][1][y][x] then | ||||||
| 			canvas[frame][1][y][x] = nil | 			canvas[frame][1][y][x] = nil | ||||||
| @@ -286,6 +366,7 @@ end | |||||||
|  |  | ||||||
| -- places a dot on the canvas, predictably enough | -- places a dot on the canvas, predictably enough | ||||||
| local placeDot = function(x, y, frame, dot) | local placeDot = function(x, y, frame, dot) | ||||||
|  | 	x, y = 1 - pain.size.x + x, 1 - pain.size.y + y | ||||||
| 	if not canvas[frame][1][y] then | 	if not canvas[frame][1][y] then | ||||||
| 		canvas[frame][1][y] = {} | 		canvas[frame][1][y] = {} | ||||||
| 		canvas[frame][2][y] = {} | 		canvas[frame][2][y] = {} | ||||||
| @@ -347,20 +428,28 @@ local render = function(x, y, width, height) | |||||||
| 	else | 	else | ||||||
|  |  | ||||||
| 		local gChar, gText, gBack | 		local gChar, gText, gBack | ||||||
| 		for yy = y, height do | 		for yy = 1, -1 + height + y do | ||||||
| 			buffer[1][yy] = "" | 			buffer[1][yy] = "" | ||||||
| 			buffer[2][yy] = "" | 			buffer[2][yy] = "" | ||||||
| 			buffer[3][yy] = "" | 			buffer[3][yy] = "" | ||||||
| 			if pain.showBar and yy == height then | 			if pain.showBar and yy == height then | ||||||
| 				buffer[2][yy] = ("f"):rep(width) | 				term.setTextColor(colors.black) | ||||||
| 				buffer[3][yy] = ("8"):rep(width) | 				term.setBackgroundColor(colors.lightGray) | ||||||
| 				buffer[1][yy] = (( | 				term.setCursorPos(pain.size.x, -1 + pain.size.y + pain.size.height) | ||||||
|  | 				term.write("[" .. pain.scrollX .. "," .. pain.scrollY .. "] ") | ||||||
| 					"["..pain.scrollX..","..pain.scrollY.."] "..pain.barmsg | 				for i = 1, #pain.dots do | ||||||
|  | 					if flashPaletteOnBar then | ||||||
| 				) .. (" "):rep(width)):sub(1, width) | 						term.blit(table.unpack(pain.dots[i])) | ||||||
| 					else | 					else | ||||||
| 				for xx = x, width do | 						term.blit(tostring(i), "7", pain.dots[i][3]) | ||||||
|  | 					end | ||||||
|  | 				end | ||||||
|  | 				if pain.barlife > 0 then | ||||||
|  | 					term.write(" " .. pain.barmsg) | ||||||
|  | 				end | ||||||
|  | 				term.write((" "):rep(x + width - term.getCursorPos())) | ||||||
|  | 			else | ||||||
|  | 				for xx = 1, width do | ||||||
| 					cx = xx + pain.scrollX | 					cx = xx + pain.scrollX | ||||||
| 					cy = yy + pain.scrollY | 					cy = yy + pain.scrollY | ||||||
| 					if canvas[frame][1][cy] then | 					if canvas[frame][1][cy] then | ||||||
| @@ -384,7 +473,7 @@ local render = function(x, y, width, height) | |||||||
| 			end | 			end | ||||||
| 		end | 		end | ||||||
| 		for yy = 0, height - 1 do | 		for yy = 0, height - 1 do | ||||||
| 			term.setCursorPos(1, y + yy) | 			term.setCursorPos(x, y + yy) | ||||||
| 			term.blit(buffer[1][yy+1], buffer[2][yy+1], buffer[3][yy+1]) | 			term.blit(buffer[1][yy+1], buffer[2][yy+1], buffer[3][yy+1]) | ||||||
| 		end | 		end | ||||||
|  |  | ||||||
| @@ -393,7 +482,15 @@ end | |||||||
|  |  | ||||||
| -- every tool at your disposal | -- every tool at your disposal | ||||||
| local tools = { | local tools = { | ||||||
| 	pencil = function(arg) | 	pencil = { | ||||||
|  | 		info = { | ||||||
|  | 			name = "Pencil", | ||||||
|  | 			swapTool = "line",	-- if swap button is held, will turn into this tool | ||||||
|  | 			swapArg = {			-- any values in this table will overwrite those in 'arg' | ||||||
|  | 				size = 1 | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 		run = function(arg) | ||||||
| 			if arg.event == "mouse_click" then | 			if arg.event == "mouse_click" then | ||||||
| 				if arg.button == 1 then | 				if arg.button == 1 then | ||||||
| 					placeDot(arg.sx, arg.sy, frame, arg.dot) | 					placeDot(arg.sx, arg.sy, frame, arg.dot) | ||||||
| @@ -415,8 +512,15 @@ local tools = { | |||||||
| 				end | 				end | ||||||
| 				dragPos = {arg.sx, arg.sy} | 				dragPos = {arg.sx, arg.sy} | ||||||
| 			end | 			end | ||||||
| 	end, | 		end | ||||||
| 	brush = function(arg) | 	}, | ||||||
|  | 	brush = { | ||||||
|  | 		info = { | ||||||
|  | 			name = "Brush", | ||||||
|  | 			swapTool = "line", | ||||||
|  | 			swapArg = {}, | ||||||
|  | 		}, | ||||||
|  | 		run = function(arg) | ||||||
| 			if arg.event == "mouse_click" then | 			if arg.event == "mouse_click" then | ||||||
| 				for y = -arg.size, arg.size do | 				for y = -arg.size, arg.size do | ||||||
| 					for x = -arg.size, arg.size do | 					for x = -arg.size, arg.size do | ||||||
| @@ -450,7 +554,8 @@ local tools = { | |||||||
| 				end | 				end | ||||||
| 				dragPos = {arg.sx, arg.sy} | 				dragPos = {arg.sx, arg.sy} | ||||||
| 			end | 			end | ||||||
| 	end, | 		end | ||||||
|  | 	}, | ||||||
| 	text = function(arg) | 	text = function(arg) | ||||||
| 		pain.paused = true | 		pain.paused = true | ||||||
| 		pain.barmsg = "Type text to add to canvas." | 		pain.barmsg = "Type text to add to canvas." | ||||||
| @@ -468,7 +573,12 @@ local tools = { | |||||||
| 		keysDown = {} | 		keysDown = {} | ||||||
| 		miceDown = {} | 		miceDown = {} | ||||||
| 	end, | 	end, | ||||||
| 	line = function(arg) | 	line = { | ||||||
|  | 		info = { | ||||||
|  | 			name = "Line", | ||||||
|  | 			swapTool = "pencil", | ||||||
|  | 		}, | ||||||
|  | 		run = function(arg) | ||||||
| 			local dots | 			local dots | ||||||
| 			while miceDown[arg.button] do | 			while miceDown[arg.button] do | ||||||
| 				dots = getDotsInLine( | 				dots = getDotsInLine( | ||||||
| @@ -479,10 +589,11 @@ local tools = { | |||||||
| 				) | 				) | ||||||
| 				render() | 				render() | ||||||
| 				for i = 1, #dots do | 				for i = 1, #dots do | ||||||
| 				if dots[i].x >= 1 and dots[i].x <= scr_x then | 					if dots[i].x >= pain.size.x and dots[i].x < pain.size.x + pain.size.width then | ||||||
| 						for y = -arg.size, arg.size do | 						for y = -arg.size, arg.size do | ||||||
| 							for x = -arg.size, arg.size do | 							for x = -arg.size, arg.size do | ||||||
| 								if math.sqrt(x^2 + y^2) <= arg.size / 2 then | 								if math.sqrt(x^2 + y^2) <= arg.size / 2 then | ||||||
|  | 									if (not pain.showBar) or dots[i].y + y < -1 + pain.size.y + pain.size.height then | ||||||
| 										term.setCursorPos(dots[i].x + x, dots[i].y + y) | 										term.setCursorPos(dots[i].x + x, dots[i].y + y) | ||||||
| 										if arg.button == 1 then | 										if arg.button == 1 then | ||||||
| 											term.blit(table.unpack(arg.dot)) | 											term.blit(table.unpack(arg.dot)) | ||||||
| @@ -494,9 +605,11 @@ local tools = { | |||||||
| 							end | 							end | ||||||
| 						end | 						end | ||||||
| 					end | 					end | ||||||
|  | 				end | ||||||
|  |  | ||||||
| 				os.pullEvent() | 				os.pullEvent() | ||||||
| 			end | 			end | ||||||
|  | 			-- write dots to canvas | ||||||
| 			for i = 1, #dots do | 			for i = 1, #dots do | ||||||
| 				for y = -arg.size, arg.size do | 				for y = -arg.size, arg.size do | ||||||
| 					for x = -arg.size, arg.size do | 					for x = -arg.size, arg.size do | ||||||
| @@ -510,24 +623,32 @@ local tools = { | |||||||
| 					end | 					end | ||||||
| 				end | 				end | ||||||
| 			end | 			end | ||||||
| 	end, | 		end | ||||||
|  | 	}, | ||||||
| } | } | ||||||
|  |  | ||||||
| local tryTool = function() | local tryTool = function() | ||||||
|  | 	local swapArg, t = {} | ||||||
|  | 	if checkControl("toolMod") then | ||||||
|  | 		t = tools[tools[pain.tool].info.swapTool] | ||||||
|  | 		swapArg = tools[pain.tool].info.swapArg or {} | ||||||
|  | 	else | ||||||
|  | 		t = tools[pain.tool] | ||||||
|  | 	end | ||||||
| 	for butt = 1, 3 do | 	for butt = 1, 3 do | ||||||
| 		if miceDown[butt] and tools[pain.tool] then | 		if miceDown[butt] and t then | ||||||
| 			tools[pain.tool]({ | 			t.run({ | ||||||
| 				x = miceDown[butt].x, | 				x 		= swapArg.x or miceDown[butt].x, | ||||||
| 				y = miceDown[butt].y, | 				y 		= swapArg.y or miceDown[butt].y, | ||||||
| 				sx = miceDown[butt].x + pain.scrollX, | 				sx 		= swapArg.sx or ((swapArg.x or miceDown[butt].x) + pain.scrollX), | ||||||
| 				sy = miceDown[butt].y + pain.scrollY, | 				sy 		= swapArg.sy or ((swapArg.y or miceDown[butt].y) + pain.scrollY), | ||||||
| 				scrollX = pain.scrollX, | 				scrollX = swapArg.scrollX or pain.scrollX, | ||||||
| 				scrollY = pain.scrollY, | 				scrollY = swapArg.scrollY or pain.scrollY, | ||||||
| 				frame = frame, | 				frame 	= swapArg.frame or frame, | ||||||
| 				dot = pain.dots[dot], | 				dot 	= swapArg.dot or pain.dots[dot], | ||||||
| 				size = pain.brushSize, | 				size 	= swapArg.size or pain.brushSize, | ||||||
| 				button = butt, | 				button 	= swapArg.button or butt, | ||||||
| 				event = miceDown[butt].event | 				event 	= swapArg.event or miceDown[butt].event | ||||||
| 			}) | 			}) | ||||||
| 			pain.doRender = true | 			pain.doRender = true | ||||||
| 			break | 			break | ||||||
| @@ -540,6 +661,10 @@ local getInput = function() | |||||||
| 	while true do | 	while true do | ||||||
| 		evt = {os.pullEvent()} | 		evt = {os.pullEvent()} | ||||||
| 		if evt[1] == "mouse_click" or evt[1] == "mouse_drag" then | 		if evt[1] == "mouse_click" or evt[1] == "mouse_drag" then | ||||||
|  | 			if evt[3] >= pain.size.x and evt[3] <= -1 + pain.size.x + pain.size.width and evt[4] >= pain.size.y and evt[4] <= -1 + pain.size.y + pain.size.height then | ||||||
|  | 				if evt[4] == -1 + pain.size.y + pain.size.height then | ||||||
|  | 					-- openBarMenu() | ||||||
|  | 				else | ||||||
| 					dragPoses[evt[2]] = { | 					dragPoses[evt[2]] = { | ||||||
| 						{ | 						{ | ||||||
| 							x = dragPoses[evt[2]][1].x or evt[3], | 							x = dragPoses[evt[2]][1].x or evt[3], | ||||||
| @@ -556,6 +681,8 @@ local getInput = function() | |||||||
| 						x = evt[3], | 						x = evt[3], | ||||||
| 						y = evt[4], | 						y = evt[4], | ||||||
| 					} | 					} | ||||||
|  | 				end | ||||||
|  | 			end | ||||||
| 		elseif evt[1] == "key" then | 		elseif evt[1] == "key" then | ||||||
| 			keysDown[evt[2]] = true | 			keysDown[evt[2]] = true | ||||||
| 		elseif evt[1] == "mouse_up" then | 		elseif evt[1] == "mouse_up" then | ||||||
| @@ -572,6 +699,15 @@ main = function() | |||||||
| 	while true do | 	while true do | ||||||
|  |  | ||||||
| 		if not pain.paused then | 		if not pain.paused then | ||||||
|  |  | ||||||
|  | 			if TICKNO % 30 <= 20 then | ||||||
|  | 				flashPaletteOnBar = true | ||||||
|  | 				pain.doRender = true | ||||||
|  | 			elseif (TICKNO + 3) % 30 <= 20 then | ||||||
|  | 				flashPaletteOnBar = false | ||||||
|  | 				pain.doRender = true | ||||||
|  | 			end | ||||||
|  |  | ||||||
| 			if pain.doRender then | 			if pain.doRender then | ||||||
| 				render() | 				render() | ||||||
| 				pain.doRender = false | 				pain.doRender = false | ||||||
| @@ -610,51 +746,18 @@ main = function() | |||||||
| 					pain.doRender = true | 					pain.doRender = true | ||||||
| 				end | 				end | ||||||
| 			end | 			end | ||||||
|  | 			for i = 0, 9 do | ||||||
| 			if checkControl("toolSelect") then | 				if checkControl("selectPalette_" .. i) then | ||||||
| 				-- dot palette selection | 					if pain.dots[i] then | ||||||
| 				if keysDown[keys.one] and pain.dots[1] then | 						dot = i | ||||||
| 					dot = 1 |  | ||||||
| 						setBarMsg("Selected palette " .. dot .. ".") | 						setBarMsg("Selected palette " .. dot .. ".") | ||||||
| 					pain.doRender = true | 						break | ||||||
| 				elseif keysDown[keys.two] and pain.dots[2] then |  | ||||||
| 					dot = 2 |  | ||||||
| 					setBarMsg("Selected palette " .. dot .. ".") |  | ||||||
| 					pain.doRender = true |  | ||||||
| 				elseif keysDown[keys.three] and pain.dots[3] then |  | ||||||
| 					dot = 3 |  | ||||||
| 					setBarMsg("Selected palette " .. dot .. ".") |  | ||||||
| 					pain.doRender = true |  | ||||||
| 				elseif keysDown[keys.four] and pain.dots[4] then |  | ||||||
| 					dot = 4 |  | ||||||
| 					setBarMsg("Selected palette " .. dot .. ".") |  | ||||||
| 					pain.doRender = true |  | ||||||
| 				elseif keysDown[keys.five] and pain.dots[5] then |  | ||||||
| 					dot = 5 |  | ||||||
| 					setBarMsg("Selected palette " .. dot .. ".") |  | ||||||
| 					pain.doRender = true |  | ||||||
| 				elseif keysDown[keys.six] and pain.dots[6] then |  | ||||||
| 					dot = 6 |  | ||||||
| 					setBarMsg("Selected palette " .. dot .. ".") |  | ||||||
| 					pain.doRender = true |  | ||||||
| 				elseif keysDown[keys.seven] and pain.dots[7] then |  | ||||||
| 					dot = 7 |  | ||||||
| 					setBarMsg("Selected palette " .. dot .. ".") |  | ||||||
| 					pain.doRender = true |  | ||||||
| 				elseif keysDown[keys.eight] and pain.dots[8] then |  | ||||||
| 					dot = 8 |  | ||||||
| 					setBarMsg("Selected palette " .. dot .. ".") |  | ||||||
| 					pain.doRender = true |  | ||||||
| 				elseif keysDown[keys.nine] and pain.dots[9] then |  | ||||||
| 					dot = 9 |  | ||||||
| 					setBarMsg("Selected palette " .. dot .. ".") |  | ||||||
| 					pain.doRender = true |  | ||||||
| 				elseif keysDown[keys.zero] and pain.dots[0] then |  | ||||||
| 					dot = 0 |  | ||||||
| 					setBarMsg("Selected palette " .. dot .. ".") |  | ||||||
| 					pain.doRender = true |  | ||||||
| 				end |  | ||||||
| 					else | 					else | ||||||
|  | 						setBarMsg("There is no palette " .. i .. ".") | ||||||
|  | 						break | ||||||
|  | 					end | ||||||
|  | 				end | ||||||
|  | 			end | ||||||
| 			if checkControl("pencilTool") then | 			if checkControl("pencilTool") then | ||||||
| 				pain.tool = "pencil" | 				pain.tool = "pencil" | ||||||
| 				setBarMsg("Selected pencil tool.") | 				setBarMsg("Selected pencil tool.") | ||||||
| @@ -668,7 +771,6 @@ main = function() | |||||||
| 				pain.tool = "line" | 				pain.tool = "line" | ||||||
| 				setBarMsg("Selected line tool.") | 				setBarMsg("Selected line tool.") | ||||||
| 			end | 			end | ||||||
| 			end |  | ||||||
|  |  | ||||||
| 			pain.barlife = math.max(pain.barlife - 1, 0) | 			pain.barlife = math.max(pain.barlife - 1, 0) | ||||||
| 			if pain.barlife == 0 and pain.barmsg ~= "" then | 			if pain.barlife == 0 and pain.barmsg ~= "" then | ||||||
| @@ -678,7 +780,9 @@ main = function() | |||||||
|  |  | ||||||
| 		end | 		end | ||||||
|  |  | ||||||
|  | 		TICKNO = TICKNO + 1 | ||||||
| 		sleep(0.05) | 		sleep(0.05) | ||||||
|  |  | ||||||
| 	end | 	end | ||||||
| end | end | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 LDDestroier
					LDDestroier