FlyingSpoon Posted December 31, 2014 Share Posted December 31, 2014 ----------------------- -- The Menu -- ----------------------- function DxMenu() font = dxCreateFont("Digital.ttf",30) dxDrawRectangle(261, 125, 292, 287, tocolor(50, 160, 212, 144), false) dxDrawRectangle(312, 196, 186, 43, tocolor(0, 0, 0, 255), false) dxDrawRectangle(313, 197, 184, 41, tocolor(50, 160, 212, 255), false) dxDrawLine(261, 170, 552, 170, tocolor(1, 1, 1, 219), 1, true) dxDrawRectangle(312, 255, 186, 43, tocolor(0, 0, 0, 255), false) dxDrawRectangle(313, 256, 184, 41, tocolor(50, 160, 212, 255), false) dxDrawRectangle(312, 316, 186, 43, tocolor(0, 0, 0, 255), false) dxDrawRectangle(313, 317, 184, 41, tocolor(50, 160, 212, 255), false) closeBtn = dxDrawRectangle(481, 380, 70, 29, tocolor(0, 0, 0, 255), false) dxDrawRectangle(482, 381, 68, 27, tocolor(50, 160, 212, 255), false) dxDrawText("Game Settings", 359, 269, 431, 287, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "top", false, false, true, false, false) dxDrawText("Help Menu", 371, 210, 443, 228, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "top", false, false, true, false, false) dxDrawText("Coming Soon...", 359, 329, 431, 347, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "top", false, false, true, false, false) dxDrawText("Close", 498, 386, 534, 400, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "top", false, false, true, false, false) dxDrawText("Settings Menu", 335, 128, 434, 155, tocolor(0, 0, 0, 255), 1.00, font, "left", "top", false, false, true, false, false) end ----------------------- ----------------------- -- Menu Moved -- ----------------------- function bindKeys() bindKey("F1", "down", F1RPhelp) end addEventHandler("onClientResourceStart", getRootElement(), bindKeys) function resetState() pressed = false end function F1RPhelp() outputChatBox("This menu has been moved to /settingsmenu!", 0, 179, 255) end ---------------------- ---------------------- -- Binded CMD -- ---------------------- function cmdType() addEventHandler("onClientRender", getRootElement(), DxMenu) showCursor(true) end addCommandHandler("settingsmenu", cmdType) ---------------------- ----------------------- -- Clicks -- ----------------------- function allClicks() if source == closeBtn then removeEventHandler("onClientRender", getRootElement(), DxMenu) end end addEventHandler("onClientGUIClick", getRootElement(), allClicks) ----------------------- I am trying to create a simple script, but when I press that DxRectangle the DxMenu doesn't close or dissapear ! Please help it's urgent please! Link to comment
Castillo Posted December 31, 2014 Share Posted December 31, 2014 That's because DX drawing isn't interactive, you need to calculate the current cursor position with the dx rectangle position, and use the event onClientClick. Link to comment
FlyingSpoon Posted December 31, 2014 Author Share Posted December 31, 2014 Can you give me an example or show me how it's done. I am new to Dx and I want to learn it really badly for personal uses Link to comment
Castillo Posted December 31, 2014 Share Posted December 31, 2014 Use this small function: function isMouseInPosition ( x, y, width, height ) if ( not isCursorShowing ( ) ) then return false end local sx, sy = guiGetScreenSize ( ) -- Get the player screen resolution local cx, cy = getCursorPosition ( ) -- Get the cursor position local cx, cy = ( cx * sx ), ( cy * sy ) -- Convert relative positions to absolute if ( cx >= x and cx <= x + width ) and ( cy >= y and cy <= y + height ) then return true else return false end end Then you can do this: addEventHandler ( "onClientClick", root, function ( ) if isMouseInPosition ( 481, 380, 70, 29 ) then outputChatBox ( "CLICKED!" ) end end ) Link to comment
FlyingSpoon Posted December 31, 2014 Author Share Posted December 31, 2014 It works fine, but imagine I want to click there to open up a GUI, even if the gui is off and by accident a player clicks there it will open up the gui that's not good What then? Link to comment
Castillo Posted December 31, 2014 Share Posted December 31, 2014 Define a variable with the status of your interface. Link to comment
FlyingSpoon Posted December 31, 2014 Author Share Posted December 31, 2014 What do you mean? So if I click game settings dx, how can I make a GUI appear? Link to comment
Castillo Posted December 31, 2014 Share Posted December 31, 2014 Define a global variable, then update the state inside the function "F1RPhelp". Link to comment
FlyingSpoon Posted December 31, 2014 Author Share Posted December 31, 2014 I am a noob in scripting, can you help me out I am seriously stuck Link to comment
Castillo Posted December 31, 2014 Share Posted December 31, 2014 http://www.lua.org/pil/1.2.html Link to comment
FlyingSpoon Posted December 31, 2014 Author Share Posted December 31, 2014 (edited) function bTest() tWindow = guiCreateWindow(233, 251, 297, 226, "", false) guiWindowSetSizable(tWindow, false) end ----------------------- -- The Menu -- ----------------------- function DxMenu() font = dxCreateFont("Digital.ttf",30) dxDrawRectangle(261, 125, 292, 287, tocolor(50, 160, 212, 144), false) dxDrawRectangle(312, 196, 186, 43, tocolor(0, 0, 0, 255), false) dxDrawRectangle(313, 197, 184, 41, tocolor(50, 160, 212, 255), false) dxDrawLine(261, 170, 552, 170, tocolor(1, 1, 1, 219), 1, true) dxDrawRectangle(312, 255, 186, 43, tocolor(0, 0, 0, 255), false) dxDrawRectangle(313, 256, 184, 41, tocolor(50, 160, 212, 255), false) dxDrawRectangle(312, 316, 186, 43, tocolor(0, 0, 0, 255), false) dxDrawRectangle(313, 317, 184, 41, tocolor(50, 160, 212, 255), false) closeBtn = dxDrawRectangle(481, 380, 70, 29, tocolor(0, 0, 0, 255), false) dxDrawRectangle(482, 381, 68, 27, tocolor(50, 160, 212, 255), false) gameSet = dxDrawText("Game Settings", 359, 269, 431, 287, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "top", false, false, true, false, false) dxDrawText("Help Menu", 371, 210, 443, 228, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "top", false, false, true, false, false) dxDrawText("Coming Soon...", 359, 329, 431, 347, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "top", false, false, true, false, false) dxDrawText("Close", 498, 386, 534, 400, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "top", false, false, true, false, false) dxDrawText("Settings Menu", 335, 128, 434, 155, tocolor(0, 0, 0, 255), 1.00, font, "left", "top", false, false, true, false, false) end ----------------------- ----------------------- -- Menu Moved -- ----------------------- function bindKeys() bindKey("F1", "down", F1RPhelp) end addEventHandler("onClientResourceStart", getRootElement(), bindKeys) function resetState() pressed = false end function F1RPhelp() outputChatBox("This menu has been moved to /settingsmenu!", 0, 179, 255) end ---------------------- ---------------------- -- Binded CMD -- ---------------------- function cmdType() addEventHandler("onClientRender", getRootElement(), DxMenu) showCursor(true) end addCommandHandler("settingsmenu", cmdType) ---------------------- ----------------------- -- Clicks -- ----------------------- function allClicks() if source == closeBtn then removeEventHandler("onClientRender", getRootElement(), DxMenu) end end addEventHandler("onClientGUIClick", getRootElement(), allClicks) ----------------------- Here's an example, so what would I do next? function clickIt() if source == gameSet then guiSetVisible(tWindow, true) Edited December 31, 2014 by Guest Link to comment
Castillo Posted December 31, 2014 Share Posted December 31, 2014 Why are you creating a GUI window? Link to comment
FlyingSpoon Posted December 31, 2014 Author Share Posted December 31, 2014 Because once I click Game Settings, I want a GUI to appear. gameSet = dxDrawText("Game Settings", 359, 269, 431, 287, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "top", false, false, true, false, false) Link to comment
Castillo Posted December 31, 2014 Share Posted December 31, 2014 dxDrawText only returns a boolean (true/false). I told you to use onClientClick, use my example. Link to comment
FlyingSpoon Posted December 31, 2014 Author Share Posted December 31, 2014 Use this small function: function isMouseInPosition ( x, y, width, height ) if ( not isCursorShowing ( ) ) then return false end local sx, sy = guiGetScreenSize ( ) -- Get the player screen resolution local cx, cy = getCursorPosition ( ) -- Get the cursor position local cx, cy = ( cx * sx ), ( cy * sy ) -- Convert relative positions to absolute if ( cx >= x and cx <= x + width ) and ( cy >= y and cy <= y + height ) then return true else return false end end Then you can do this: addEventHandler ( "onClientClick", root, function ( ) if isMouseInPosition ( 481, 380, 70, 29 ) then outputChatBox ( "CLICKED!" ) end end ) This example? But when I click there for example a player click by accident, then the GUI will appear. Link to comment
Castillo Posted December 31, 2014 Share Posted December 31, 2014 That's why you need to define a global variable specifying if the menu is open or not. Link to comment
FlyingSpoon Posted December 31, 2014 Author Share Posted December 31, 2014 Well can you give me an example, I don't understand this I feel embarrassed. Link to comment
FlyingSpoon Posted December 31, 2014 Author Share Posted December 31, 2014 Is it done like this? addEventHandler ( "onClientClick", root, function ( ) if DxMenu then if isMouseInPosition ( 481, 380, 70, 29 ) then removeEventHandler("onClientRender", getRootElement(), DxMenu) showCursor(false) end end end ) Link to comment
Castillo Posted December 31, 2014 Share Posted December 31, 2014 local menuState = false -- Menu is hidden And then, inside your "F1RPhelp" function: menuState = true -- Menu is visible Then you check if the menu is visible inside the onClientClick function: addEventHandler ( "onClientClick", root, function ( ) if ( menuState ) then -- if the menu is visible... if isMouseInPosition ( 481, 380, 70, 29 ) then outputChatBox ( "CLICKED!" ) end end end ) Link to comment
FlyingSpoon Posted December 31, 2014 Author Share Posted December 31, 2014 One question, why shall I put it in F1RPhelp? Link to comment
FlyingSpoon Posted December 31, 2014 Author Share Posted December 31, 2014 Like this? ----------------------- -- The Menu -- ----------------------- function DxMenu() font = dxCreateFont("Digital.ttf",30) dxDrawRectangle(261, 125, 292, 287, tocolor(50, 160, 212, 144), false) dxDrawRectangle(312, 196, 186, 43, tocolor(0, 0, 0, 255), false) dxDrawRectangle(313, 197, 184, 41, tocolor(50, 160, 212, 255), false) dxDrawLine(261, 170, 552, 170, tocolor(1, 1, 1, 219), 1, true) dxDrawRectangle(312, 255, 186, 43, tocolor(0, 0, 0, 255), false) dxDrawRectangle(313, 256, 184, 41, tocolor(50, 160, 212, 255), false) dxDrawRectangle(312, 316, 186, 43, tocolor(0, 0, 0, 255), false) dxDrawRectangle(313, 317, 184, 41, tocolor(50, 160, 212, 255), false) dxDrawRectangle(481, 380, 70, 29, tocolor(0, 0, 0, 255), false) dxDrawRectangle(482, 381, 68, 27, tocolor(50, 160, 212, 255), false) gameSet = dxDrawText("Game Settings", 359, 269, 431, 287, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "top", false, false, true, false, false) dxDrawText("Help Menu", 371, 210, 443, 228, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "top", false, false, true, false, false) dxDrawText("Coming Soon...", 359, 329, 431, 347, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "top", false, false, true, false, false) closeBtn = dxDrawText("Close", 498, 386, 534, 400, tocolor(255, 255, 255, 255), 1.00, "clear", "left", "top", false, false, true, false, false) dxDrawText("Settings Menu", 335, 128, 434, 155, tocolor(0, 0, 0, 255), 1.00, font, "left", "top", false, false, true, false, false) end ----------------------- ----------------------- -- Menu Moved -- ----------------------- function bindKeys() bindKey("F1", "down", F1RPhelp) end addEventHandler("onClientResourceStart", getRootElement(), bindKeys) function resetState() pressed = false end function F1RPhelp() outputChatBox("This menu has been moved to /settingsmenu!", 0, 179, 255) DxMenu = true end ---------------------- ---------------------- -- Binded CMD -- ---------------------- function cmdType() addEventHandler("onClientRender", getRootElement(), DxMenu) showCursor(true) end addCommandHandler("settingsmenu", cmdType) ---------------------- ---------------------- -- Test -- ---------------------- function bTest() tWindow = guiCreateWindow(233, 251, 297, 226, "", false) guiWindowSetSizable(tWindow, false) end local DxMenu = false ----------------------- -- Clicks -- ----------------------- function isMouseInPosition ( x, y, width, height ) if ( not isCursorShowing ( ) ) then return false end local sx, sy = guiGetScreenSize ( ) -- Get the player screen resolution local cx, cy = getCursorPosition ( ) -- Get the cursor position local cx, cy = ( cx * sx ), ( cy * sy ) -- Convert relative positions to absolute if ( cx >= x and cx <= x + width ) and ( cy >= y and cy <= y + height ) then return true else return false end end addEventHandler ( "onClientClick", root, function ( ) if ( DxMenu ) then if isMouseInPosition ( 481, 380, 70, 29 ) then outputChatBox("Hi") removeEventHandler("onClientRender", getRootElement(), DxMenu) showCursor(false) end end end ) ------------------------- local DxMenu = false DxMenu = true Link to comment
FlyingSpoon Posted December 31, 2014 Author Share Posted December 31, 2014 Don't work, now the Dx don't appear. Link to comment
John Smith Posted December 31, 2014 Share Posted December 31, 2014 put font line outside DxMenu function it just hurts me knowing that font would be created over 50 times in a second... edit: please give information what debugscript 3 says Link to comment
FlyingSpoon Posted December 31, 2014 Author Share Posted December 31, 2014 Here's the error, function cmdType() addEventHandler("onClientRender", getRootElement(), DxMenu) showCursor(true) DxMenu = true end addCommandHandler("settingsmenu", cmdType) Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now