Gonçalo MTA

Members
  • Content Count

    1
  • Joined

  • Last visited

Community Reputation

0 Neutral

About Gonçalo MTA

  • Rank
    I ordered some spaghetti with marinara sauce and I got egg noodles and ketchup. I'm an average nobody.
  1. local function toggleEvents ( window, bool ) local func = removeEventHandler if bool then func = addEventHandler end func("onClientClick", root, onClick) func("onClientCursorMove", root, onMove) func("onClientRender", root, onRender) local actions = { onClientGUIDoubleClick = onDoubleClick, onClientMouseEnter = onEnter, onClientMouseLeave = onLeave, onClientGUIFocus = onFocus, onClientGUIBlur = onBlur, onClientGUIAccepted = onEditBoxAccept, onClientGUIComboBoxAccepted = onComboBoxAccept } for event, fn in pairs(actions) do func(event, window, fn) end return true end function startBuilding ( ) outputDebugString ( "Building the gui.." ) if heditGUI.window then destroyGUI ( ) end local window = buildMainWindow() buildMenubar() buildViewButtons() buildViews() buildSpecials() guiSetVisible ( window, false ) toggleEvents ( window, true ) forceVehicleChange ( ) bindKey ( getUserConfig ( "usedKey" ), "down", toggleEditor ) addCommandHandler ( getUserConfig ( "usedCommand" ), toggleEditor ) return true end function destroyGUI ( ) toggleEvents ( heditGUI.window, false ) if heditGUI.window then destroyElement ( heditGUI.window ) end unbindKey ( "lctrl", "both", showOriginalValue ) unbindKey ( "rctrl", "both", showOriginalValue ) unbindKey ( "lshift", "both", showPreviousValue ) unbindKey ( "rshift", "both", showPreviousValue ) guiElements = {} heditGUI = resetGUI end function buildMainWindow() local wnd = template.window heditGUI.window = guiCreateElement ( wnd.type, wnd.pos[1], wnd.pos[2], wnd.size[1], wnd.size[2], getText ( "windowHeader" ), wnd.alpha, wnd.hovercolor ) if wnd.centered then guiSetPosition ( heditGUI.window, (scrX/2)-(wnd.size[1]/2), (scrY/2)-(wnd.size[2]/2), false ) end guiWindowSetSizable ( heditGUI.window, wnd.sizable or false ) guiWindowSetMovable ( heditGUI.window, wnd.movable or false ) guiElements[heditGUI.window] = { "window", "window", "none", 1, wnd.events } for layer,gui in ipairs(wnd) do local element = guiCreateElement ( gui.type, gui.pos[1], gui.pos[2], gui.size and gui.size[1] or gui.width, gui.size and gui.size[2] or gui.width, "", gui.alpha, gui.hovercolor ) guiSetEnabled ( element, false ) table.insert ( heditGUI.background, element ) guiElements[element] = { "window", "background", "none", layer, gui.events } end return heditGUI.window end function buildMenubar() local offset = 65 local size = {60, 19} local pos = {10-offset, 22} for k,menu in ipairs ( template.menubar ) do pos[1] = pos[1] + offset local element = guiCreateElement("button", pos[1], pos[2], size[1], size[2], getText("menubar", menu.title), 255, {255, 27, 224, 224}) guiElements[element] = { "menuButton", "button", "none", menu.title, nil} table.insert ( heditGUI.menuButtons, element ) local buttons = {} if menu[1] then local longestName = 100 for item,list in ipairs(menu) do local posY = ( pos[2] + 7 ) + ( 20 * item ) local menuButton = guiCreateElement ( "button", pos[1], posY, 100, 20, getViewShortName ( list ) ) local textextent = guiCreateElement ( "label", pos[1], posY, 100, 20, getViewShortName ( list ) ) local extent = guiLabelGetTextExtent ( textextent ) if extent > longestName then longestName = extent end destroyElement ( textextent ) guiSetVisible ( menuButton, false ) guiElements[menuButton] = { "menuItem", "button", "none", list, nil } table.insert ( buttons, menuButton ) end for i,v in ipairs ( buttons ) do guiSetSize ( v, longestName + 10, 20, false ) end end heditGUI.menuItems[menu.title] = buttons end end function buildViewButtons() local hovercolor = { 255, 255, 255, 128 } local offset = 55 local size = {50, 50} local pos = {10, 54-offset} for k,view in pairs ( template.views ) do pos[2] = pos[2] + offset local subContents = view.contents if subContents then local width = size[1] / #subContents for _, title in ipairs(subContents) do local element = guiCreateElement ("button", pos[1]+(width*_)-width, pos[2], width, size[2], guiTemplateGetViewButtonText ( title ), alpha, hovercolor ) guiElements[element] = { "viewButton", "button", "none", title } table.insert ( heditGUI.viewButtons, element ) end else local element = guiCreateElement ("button", pos[1], pos[2], size[1], size[2], guiTemplateGetViewButtonText ( view.title ), alpha, hovercolor ) guiElements[element] = { "viewButton", "button", "none", view.title } table.insert ( heditGUI.viewButtons, element ) end end end -- these are for views function buildViews() local function scanSpecialView ( menu, itemName, gui ) local res = {} for k,v in pairs ( gui ) do if type ( v ) == "table" then if not v.type then res[k] = scanSpecialView ( menu, k, v ) else local text = guiTemplateGetItemText ( menu, k ) local element = guiCreateElement ( v.type, v.pos[1], v.pos[2], v.size[1], v.size[2], text, v.alpha, v.hovercolor ) if type ( v.runfunction ) == "function" then v.runfunction ( element ) end res[k] = element guiElements[element] = { "viewItem", "special", "none", k, v.events } end end end return res end for menu,v in pairs ( template.viewcontents ) do if v.redirect ~= "THIS_IS_ONE" then local items = {} if v.redirect == "handlingconfig" then ------------------------- -- HANDLINGCONFIG MENU ------------------------- local guiInfo = template.viewcontents.redirect_handlingconfig.content for i,property in ipairs ( v.content ) do if isHandlingPropertyValid ( property ) then local propertyName = getHandlingPropertyFriendlyName ( property ) local propertyName = getHandlingPropertyFriendlyName ( property ) local labelInfo = guiInfo.labels local label = guiCreateElement ( labelInfo.type, labelInfo.pos[1], labelInfo.pos[2], labelInfo.size[1], labelInfo.size[2], propertyName, labelInfo.alpha, labelInfo.hovercolor ) local configInfo = guiInfo.buttons if property == "centerOfMass" then local labelPosX = guiGetPosition ( label, false ) local labelWidth = guiLabelGetTextExtent ( label ) guiSetSize ( label, labelWidth + 5, labelInfo.size[2], false ) local labelX = guiCreateElement ( labelInfo.type, labelPosX + labelWidth + 20, labelInfo.pos[2], 15, 20, "X", labelInfo.alpha, labelInfo.hovercolor ) local labelY = guiCreateElement ( labelInfo.type, labelPosX + labelWidth + 35, labelInfo.pos[2], 15, 20, "Y", labelInfo.alpha, labelInfo.hovercolor ) local labelZ = guiCreateElement ( labelInfo.type, labelPosX + labelWidth + 50, labelInfo.pos[2], 15, 20, "Z", labelInfo.alpha, labelInfo.hovercolor ) table.insert ( items, labelX ) table.insert ( items, labelY ) table.insert ( items, labelZ ) guiElements[labelX] = { "viewItem", "infolabel", "centerOfMassX", i, labelInfo.events } guiElements[labelY] = { "viewItem", "infolabel", "centerOfMassY", i, labelInfo.events } guiElements[labelZ] = { "viewItem", "infolabel", "centerOfMassZ", i, labelInfo.events } local buttonPosX = configInfo.pos[1] local buttonWidth = math.round ( configInfo.size[1] / 3, 0 ) local buttonX = guiCreateElement ( "button", buttonPosX, configInfo.pos[2], buttonWidth, configInfo.size[2], "", configInfo.alpha, configInfo.hovercolor ) local buttonY = guiCreateElement ( "button", buttonPosX + buttonWidth, configInfo.pos[2], buttonWidth, configInfo.size[2], "", configInfo.alpha, configInfo.hovercolor ) local buttonZ = guiCreateElement ( "button", buttonPosX + ( buttonWidth * 2 ), configInfo.pos[2], buttonWidth, configInfo.size[2], "", configInfo.alpha, configInfo.hovercolor ) guiSetFont ( buttonX, "default-small" ) guiSetFont ( buttonY, "default-small" ) guiSetFont ( buttonZ, "default-small" ) table.insert ( items, buttonX ) table.insert ( items, buttonY ) table.insert ( items, buttonZ ) guiElements[buttonX] = { "viewItem", "config", "centerOfMassX", i, configInfo.events } guiElements[buttonY] = { "viewItem", "config", "centerOfMassY", i, configInfo.events } guiElements[buttonZ] = { "viewItem", "config", "centerOfMassZ", i, configInfo.events } else -- If a table, return table. Otherwise, false. local propertyOptions = type ( handlingLimits[property].options ) == "table" and handlingLimits[property].options or false -- If propertyOptions is not false, return the combobox as type. Otherwise a button. local buttonType = propertyOptions and "combobox" or "button" --If propertyOptions is not false, return a size needed for the height. Otherwise, the normal button size. local buttonHeight = propertyOptions and ( #propertyOptions * 20 ) + 20 or configInfo.size[2] -- Create it with no text local button = guiCreateElement ( buttonType, configInfo.pos[1], configInfo.pos[2], configInfo.size[1], buttonHeight, "", configInfo.alpha, configInfo.hovercolor ) -- If we had a combobox with options if propertyOptions then for num,option in ipairs ( propertyOptions ) do guiComboBoxAddItem ( button, getHandlingPropertyOptionName ( property, option ) ) end end table.insert ( items, button ) guiElements[button] = { "viewItem", "config", property, i, configInfo.events } end table.insert ( items, label ) guiElements[label] = { "viewItem", "infolabel", property, i, labelInfo.events } else outputDebugString ( "Invalid property used for handling menu "..menu..": "..tostring(property) ) end end elseif v.redirect == "handlingflags" then ------------------------- -- HANDLINGFLAG MENU ------------------------- local property = v.content[1] if isHandlingPropertyHexadecimal ( property ) then local guiInfo = template.viewcontents.redirect_handlingflags.content -- Make sure we have extras as it's optional if type ( guiInfo.extras ) == "table" then items.extra = {} for i,gui in ipairs ( guiInfo.extras ) do local element = guiCreateElement ( gui.type, gui.pos[1], gui.pos[2], gui.size[1], gui.size[2], tostring(gui.text), gui.alpha, gui.hovercolor ) table.insert ( items.extra, element ) guiElements[element] = { "viewItem", "extra", property, i, gui.events } end end for byte,tab in ipairs ( guiInfo.checkboxes ) do items[byte] = {} for value,gui in pairs ( tab ) do local byteName = getHandlingPropertyByteName ( property, byte, value ) local element = guiCreateElement ( gui.type, gui.pos[1], gui.pos[2], gui.size[1], gui.size[2], byteName, gui.alpha, gui.hovercolor ) items[byte][value] = element guiElements[element] = { "viewItem", "infolabel", property, { byte=byte, value=value }, gui.events } end end else outputDebugString ( "Menu "..menu.." does not have a valid handling/model-flag property!" ) outputDebugString ( "Please change the first parameter of this menu to \"modelFlags\" or \"handlingFlags\"!" ) end else ------------------------- -- SPECIAL MENU ------------------------- items = scanSpecialView ( menu, "", v.content ) if type ( v.runfunction ) == "function" then v.runfunction ( items ) end end heditGUI.viewItems[menu] = { redirect = v.redirect, requireLogin = v.requirelogin, requireAdmin = v.requireadmin, disabled = v.disable, onOpen = v.onOpen, onClose = v.onClose, guiItems = items } toggleViewItemsVisibility ( menu, false ) end end end function buildSpecials() local function create ( gui, parent ) local element = guiCreateElement ( gui.type, gui.pos[1], gui.pos[2], gui.size[1], gui.size[2], "", gui.alpha, gui.hovercolor ) if type ( gui.runfunction ) == "function" then gui.runfunction ( element ) end return element end for parent,v in pairs ( template.specials ) do local items = {} if not isValidGUI ( v ) then for sub,item in pairs ( v ) do if not isValidGUI ( item ) then -- MiniLog only! We won't go deeper! items = {} for logsub,logitem in pairs ( item ) do if isValidGUI ( logitem ) then items[logsub] = create ( logitem, parent ) guiElements[ items[logsub] ] = { "special", "special", "none", parent, logitem.events } end end else items = create ( item, parent ) guiElements[ items ] = { "special", "special", "none", parent, v.events } end end else items = create ( v, parent ) guiElements[items] = { "special", "special", "none", parent, v.events } end heditGUI.specials[parent] = items end end