// =========================================================================== // Asshat-Gaming Roleplay // https://github.com/VortrexFTW/gtac_asshat_rp // Copyright (c) 2020 Asshat-Gaming (https://asshatgaming.com) // --------------------------------------------------------------------------- // FILE: gui.js // DESC: Provides GUI functionality and styles (using MexUI) // TYPE: Client (JavaScript) // =========================================================================== var app = {}; let robotoFont = "Roboto"; let mainLogoPath = "files/images/main-logo.png"; let primaryColour = [200, 200, 200]; let focusedColour = [200, 200, 200]; let invalidValueColour = [200, 200, 200]; let focusedColourOffset = 50; let windowAlpha = 185; let windowTitleAlpha = 200; let buttonAlpha = 200; let textInputAlpha = 200; let login = { window: null, logoImage: null, messageLabel: null, passwordLabel: null, passwordInput: null, loginButton: null, }; let twoFactorAuth = { window: null, logoImage: null, qrCode: null, messageLabel: null, codeLabel: null, codeInput: null, submitButton: null, }; let register = { window: null, logoImage: null, messageLabel: null, passwordInput: null, confirmPasswordInput: null, emailInput: null, registerButton: null, }; let newCharacter = { window: null, firstNameInput: null, lastNameInput: null, skinDropDown: null, spawnAreaDropDown: null, createButton: null, skinImage: null, }; let errorDialog = { window: null, messageLabel: null, okayButton: null, }; let infoDialog = { window: null, messageLabel: null, okayButton: null, }; let listDialog = { window: null, messageLabel: null, listGrid: null, }; let yesNoDialog = { window: null, messageLabel: null, yesButton: null, noButton: null, }; let characterSelect = { window: null, skinImage: null, nameText: null, dateOfBirthText: null, placeOfOriginText: null, previousCharacterButton: null, nextCharacterButton: null, selectCharacterButton: null, newCharacterButton: null, }; let skinNames = [ [], [ // GTA III //[0, "Claude", "Skin000.png"], //[1, "Police Officer", "Skin001.png"], //[2, "SWAT Officer", "Skin002.png"], //[3, "FBI Agent", "Skin003.png"], //[4, "Army Soldier", "Skin004.png"], //[5, "Paramedic", "Skin005.png"], //[6, "Firefighter", "Skin006.png"], [7, "Wise Guy", "Skin007.png"], //[8, "Taxi Driver", "Skin008.png"], [9, "Pimp", "Skin009.png"], [10, "Mafia Member", "Skin010.png"], [11, "Mafia Member", "Skin011.png"], [12, "Triad Member", "Skin012.png"], [13, "Triad Member", "Skin013.png"], [14, "Diablo Member", "Skin014.png"], [15, "Diablo Member", "Skin015.png"], [16, "Yakuza Member", "Skin016.png"], [17, "Yakuza Member", "Skin017.png"], [18, "Yardie Member", "Skin018.png"], [19, "Yardie Member", "Skin019.png"], [20, "Cartel Soldier", "Skin020.png"], [21, "Cartel Soldier", "Skin021.png"], [22, "Red Jacks Thug", "Skin022.png"], [23, "Purple Nines Thug", "Skin023.png"], [24, "Street Criminal", "Skin024.png"], [25, "Street Criminal", "Skin025.png"], [30, "Male Client", "Skin030.png"], [31, "Random Guy", "Skin031.png"], [32, "Vacationist", "Skin032.png"], [33, "Dj", "Skin033.png"], [34, "Young Woman", "Skin034.png"], [35, "Young Woman", "Skin035.png"], [36, "Business Woman", "Skin036.png"], [37, "Elder Woman", "Skin037.png"], [38, "Elder Woman", "Skin038.png"], [39, "Prostitute", "Skin039.png"], [40, "Prostitute", "Skin040.png"], [41, "Random Guy", "Skin041.png"], [42, "Diseased Man", "Skin042.png"], [43, "Deseased Woman", "Skin043.png"], [44, "Young Woman", "Skin044.png"], [45, "Old Man", "Skin045.png"], [46, "Random Guy", "Skin046.png"], [47, "Old Woman", "Skin047.png"], [48, "Old Woman", "Skin048.png"], [49, "Old Man", "Skin049.png"], [50, "Random Guy", "Skin050.png"], [51, "Old Woman", "Skin051.png"], [52, "Young Woman", "Skin052.png"], [53, "Docks Worker", "Skin053.png"], [54, "Docks Worker", "Skin054.png"], [55, "Male Street Bum", "Skin055.png"], [56, "Female Street Bum", "Skin056.png"], [57, "Delivery Guy", "Skin057.png"], [58, "Delivery Guy", "Skin058.png"], [59, "Business Man", "Skin059.png"], [60, "Marty Chonks", "Skin060.png"], [61, "CIA Agent", "Skin061.png"], [62, "Female Client", "Skin062.png"], [63, "Young Woman", "Skin063.png"], [64, "Business Woman", "Skin064.png"], [65, "Business Man", "Skin065.png"], [66, "Female Client", "Skin066.png"], [67, "Male Steward", "Skin067.png"], [68, "Female Steward", "Skin068.png"], [69, "Male Cocks Fan", "Skin069.png"], [70, "Male Cocks Fan", "Skin070.png"], [71, "Female Cocks Fan", "Skin071.png"], [72, "Male Paramedics Assistant", "Skin072.png"], [73, "Female Paramedics Assistant", "Skin073.png"], [74, "Construction Worker", "Skin074.png"], [75, "Construction Worker", "Skin075.png"], [76, "Zip Customer", "Skin076.png"], [77, "Party Woman", "Skin077.png"], [78, "Party Woman", "Skin078.png"], [80, "Female College Student", "Skin080.png"], [81, "Old Man", "Skin081.png"], [82, "Female Jogger", "Skin082.png"], [83, "Asuka Kasen", "Skin083.png"], [84, "Spank Suicide Bomber", "Skin084.png"], [85, "Salvatore's Butler", "Skin085.png"], [86, "Catalina", "Skin086.png"], [87, "Lee Chong", "Skin087.png"], [88, "Colombian Cartel Member", "Skin088.png"], [89, "Colombian Cartel Member", "Skin089.png"], [90, "Colombian Cartel Member", "Skin090.png"], [91, "Colombian Cartel Member", "Skin091.png"], //[92, "Police Officer", "Skin092.png"], [93, "Curly Bob", "Skin093.png"], [94, "Phil Cassidy", "Skin094.png"], [95, "Detective", "Skin095.png"], [96, "8-Ball", "Skin096.png"], [97, "8-Ball", "Skin097.png"], [98, "Salvatore Leone", "Skin098.png"], [99, "Mafia Member", "Skin099.png"], [100, "Joey Leone", "Skin100.png"], [101, "Joey Leone", "Skin101.png"], [102, "Bar Owner", "Skin102.png"], [103, "Kenji Kasen", "Skin103.png"], [104, "Mike Forelli", "Skin104.png"], [105, "Donald Love", "Skin105.png"], [106, "Donald Love", "Skin106.png"], [107, "Luigi Goterelli", "Skin107.png"], [108, "Maria Latore", "Skin108.png"], [109, "Mickey Hamfists", "Skin109.png"], [110, "Miguel", "Skin110.png"], [111, "Misty", "Skin111.png"], [112, "Old Oriental Gentleman", "Skin112.png"], [113, "Old Oriental Gentleman", "Skin113.png"], [114, "Old Oriental Gentleman", "Skin114.png"], [115, "Ray Machowski", "Skin115.png"], [116, "Mafia Member", "Skin116.png"], [118, "Tanner", "Skin118.png"], [119, "Toni Cipriani", "Skin119.png"], [120, "Darkel", "Skin120.png"], //[121, "Chuff Security Officer", "Skin121.png"] ], [ // GTA Vice City //[0, "Tommy Vercetti", false], //[1, "Police Officer", false], //[2, "SWAT Officer", false], //[3, "FBI Agent", false], //[4, "Army Soldier", false], //[5, "Paramedic", false], //[6, "Fireman", false], [7, "Golfer", false], //[8, "INVALID", false], [9, "Random Lady", false], [10, "Bum", false], [11, "Greaser", false], [12, "Random Guy", false], [13, "Random Guy", false], [14, "Random Lady", false], [15, "Random Guy", false], [16, "Random Guy", false], [17, "Beach Girl", false], [18, "Fat Beach Lady", false], [19, "Beach Guy", false], [20, "Fat Beach Guy", false], [21, "Random Lady", false], [22, "Random Lady", false], [23, "Random Lady", false], [24, "Prostitute", false], [25, "Bum", false], [26, "Bum", false], [27, "Random Guy", false], [28, "Taxi Driver", false], [29, "Haitian", false], [30, "Criminal", false], [31, "Random Lady", false], [32, "Random Lady", false], [33, "Random Guy", false], [34, "Random Guy", false], [35, "Random Lady", false], [36, "Random Lady", false], [37, "Random Guy", false], [38, "Beach Lady", false], [39, "Beach Guy", false], [40, "Beach Lady", false], [41, "Beach Guy", false], [42, "Random Guy", false], [43, "Prostitute", false], [44, "Bum", false], [45, "Bum", false], [46, "Random Guy", false], [47, "Random Guy", false], [48, "Punk", false], [49, "Prostitute", false], [50, "Random Old Lady", false], [51, "Punk", false], [52, "Random Guy", false], [53, "Random Lady", false], [54, "Random Lady", false], [55, "Random Guy", false], [56, "Random Guy", false], [57, "Beach Lady", false], [58, "Beach Guy", false], [59, "Beach Lady", false], [60, "Beach Guy", false], [61, "Construction Worker", false], [62, "Golfer", false], [63, "Golfer", false], [64, "Golfer", false], [65, "Beach Lady", false], [66, "Beach Guy", false], [67, "Random Lady", false], [68, "Random Guy", false], [69, "Random Guy", false], [70, "Prostitute", false], [71, "Bum Lady", false], [72, "Random Guy", false], [73, "Random Guy", false], [74, "Taxi Driver", false], [75, "Random Woman", false], [76, "Skater Guy", false], [77, "Beach Lady", false], [78, "Skater Guy", false], [79, "Young Woman Shopper", false], [80, "Old Women Shopper", false], [81, "Tourist", false], [82, "Tourist", false], [83, "Cuban", false], [84, "Cuban", false], [85, "Haitian", false], [86, "Haitian", false], [87, "Shark", false], [88, "Shark", false], [89, "Diaz Guy", false], [90, "Diaz Guy", false], //[91, "Security Guard", false], //[92, "Security Guard", false], [93, "Biker", false], [94, "Biker", false], [95, "Vercetti Guy", false], [96, "Vercetti Guy", false], //[97, "Undercover Cop", false], //[98, "Undercover Cop", false], //[99, "Undercover Cop", false], //[100, "Undercover Cop ", false], //[101, "Undercover Cop", false], //[102, "Undercover Cop", false], [103, "Random Guy", false], [104, "Bodyguard", false], [105, "Prostitute", false], [106, "Prostitute", false], [107, "Ricardo Diaz", false], [108, "Love Fist Guy", false], [109, "Ken Rosenburg", false], [110, "Candy Suxx", false], [111, "Hilary", false], [112, "Love Fist", false], [113, "Phil", false], [114, "Rockstar Guy", false], [115, "Sonny", false], [116, "Lance", false], [117, "Mercedes", false], [118, "Love Fist", false], [119, "Alex Scrub", false], //[120, "Officer Lance Vance", false], [121, "Lance Vance", false], [122, "Cortez", false], //[123, "SWAT 2", false], [124, "Columbian", false], [125, "Hilary", false], [126, "Mercedes", false], [127, "Cam", false], [128, "Cam", false], [129, "Phil", false], [130, "Phil", false], [131, "Bodyguard", false], [132, "Pizza Worker", false], [133, "Taxi Driver", false], [134, "Taxi Driver", false], [135, "Sailor", false], [136, "Sailor", false], [137, "Sailor", false], [138, "Chef", false], [139, "Criminal", false], [140, "French Guy", false], [141, "Worker", false], [142, "Haitian", false], [143, "Waitress", false], [144, "Forelli Member", false], [145, "Forelli Member", false], [146, "Forelli Member", false], [147, "Columbian", false], [148, "Random Guy", false], [149, "Beach Guy", false], [150, "Random Guy", false], [151, "Random Guy", false], [152, "Random Guy", false], [153, "Drag Queen", false], [154, "Diaz Traitor", false], [155, "Random Guy", false], [156, "Random Guy", false], [157, "Stripper", false], [158, "Stripper", false], [159, "Stripper", false], [160, "Store Clerk", false], [161, "Tommy Vercetti", false], [162, "Tommy Vercetti (Business Suit)", false], [163, "Tommy Vercetti (SpandEx Overalls)", false], [164, "Tommy Vercetti (Golfer)", false], [165, "Tommy Vercetti (Cuban)", false], //[166, "Tommy Vercetti (Cop)", false], [167, "Tommy Vercetti (Robbery Suit)", false], [168, "Tommy Vercetti (T-Shirt and Jeans)", false], [169, "Tommy Vercetti (Striped Suit)", false], [170, "Tommy Vercetti (Black Tracksuit)", false], [171, "Tommy Vercetti (Red Tracksuit)", false], [172, "Club Bouncer", false], [173, "Club Bouncer", false], [174, "Stripclub Dancer", false], [175, "Random Guy", false], [176, "Stripclub Dancer", false], [177, "Stripclub Dancer", false], [178, "Stripclub Dancer", false], [179, "Gang Member", false], [180, "Tommy Vercetti (Endgame T-Shirt)", false], [181, "Forelli Thug", false], [182, "Forelli Thug", false], [183, "Random Lady", false], [184, "Gang Member", false], [185, "Party Waitress", false], [186, "Kent Paul", false], [187, "Big Head Taxi Driver", false], ], [ // GTA San Andreas //[0, "Carl 'CJ' Johnson", false], [1, "The Truth", false], [2, "Maccer", false], [6, "Taxi Driver/Train Driver", false], [9, "Normal Ped", false], [10, "Old Woman", false], [11, "Casino Croupier", false], [12, "Rich Woman", false], [13, "Street Girl", false], [14, "Normal Ped", false], [15, "Mr.Whittaker (RS Haul Owner)", false], [16, "Airport Ground Worker", false], [17, "Businessman", false], [18, "Beach Visitor", false], [19, "DJ", false], [20, "Rich Guy (Madd Doggs Manager)", false], [21, "Normal Ped", false], [22, "Normal Ped", false], [23, "Bmxer", false], [24, "Madd Dogg Bodyguard", false], [25, "Madd Dogg Bodyguard", false], [26, "Backpacker", false], [27, "Construction Worker", false], [28, "Drug Dealer", false], [29, "Drug Dealer", false], [30, "Drug Dealer", false], [31, "Farm-Town Inhabitant", false], [32, "Farm-Town Inhabitant", false], [33, "Farm-Town Inhabitant", false], [34, "Farm-Town Inhabitant", false], [35, "Gardener", false], [36, "Golfer", false], [37, "Golfer", false], [38, "Normal Ped", false], [39, "Normal Ped", false], [40, "Normal Ped", false], [41, "Normal Ped", false], [43, "Normal Ped", false], [44, "Normal Ped", false], [45, "Beach Visitor", false], [46, "Normal Ped", false], [47, "Normal Ped", false], [48, "Normal Ped", false], [49, "Snakehead (Da Nang)", false], [50, "Mechanic", false], [51, "Mountain Biker", false], [52, "Mountain Biker", false], [53, "Unknown", false], [54, "Normal Ped", false], [55, "Normal Ped", false], [56, "Normal Ped", false], [57, "Oriental Ped", false], [58, "Oriental Ped", false], [59, "Normal Ped", false], [60, "Normal Ped", false], [61, "Pilot", false], [62, "Colonel Fuhrberger", false], [63, "Prostitute", false], [64, "Prostitute", false], [66, "Pool Player", false], [67, "Pool Player", false], [68, "Priest/Preacher", false], [69, "Normal Ped", false], [70, "Scientist", false], [71, "Security Guard", false], [72, "Hippy", false], [73, "Hippy", false], [75, "Prostitute", false], [76, "Stewardess", false], [77, "Homeless", false], [78, "Homeless", false], [79, "Homeless", false], [80, "Boxer", false], [81, "Boxer", false], [82, "Black Elvis", false], [83, "White Elvis", false], [84, "Blue Elvis", false], [85, "Prostitute", false], [87, "Stripper", false], [88, "Normal Ped", false], [89, "Normal Ped", false], [90, "Jogger", false], [91, "Rich Woman", false], [92, "Rollerskater", false], [93, "Normal Ped", false], [94, "Normal Ped", false], [95, "Normal Ped", false], [96, "Jogger", false], [97, "Lifeguard", false], [98, "Normal Ped", false], [99, "Rollerskater", false], [100, "Biker", false], [101, "Normal Ped", false], [102, "Ballas Gang Member", false], [103, "Ballas Gang Member", false], [104, "Ballas Gang Member", false], [105, "Grove Street Families Gang Member", false], [106, "Grove Street Families Gang Member", false], [107, "Grove Street Families Gang Member", false], [108, "Los Santos Vagos Gang Member", false], [109, "Los Santos Vagos Gang Member", false], [110, "Los Santos Vagos Gang Member", false], [111, "Russian Mafioso", false], [112, "Russian Mafioso", false], [113, "Russian Mafioso", false], [114, "Varios Los Aztecas Gang Member", false], [115, "Varios Los Aztecas Gang Member", false], [116, "Varios Los Aztecas Gang Member", false], [117, "Triad", false], [118, "Triad", false], [120, "Triad Boss", false], [121, "Da Nang Boy", false], [122, "Da Nang Boy", false], [123, "Da Nang Boy", false], [124, "Italian Mafioso", false], [125, "Italian Mafioso", false], [126, "Italian Mafioso", false], [127, "Italian Mafioso", false], [128, "Farm Inhabitant", false], [129, "Farm Inhabitant", false], [130, "Farm Inhabitant", false], [131, "Farm Inhabitant", false], [132, "Farm Inhabitant", false], [133, "Farm Inhabitant", false], [134, "Homeless", false], [135, "Homeless", false], [136, "Normal Ped", false], [137, "Homeless", false], [138, "Beach Visitor", false], [139, "Beach Visitor", false], [140, "Beach Visitor", false], [141, "Businesswoman", false], [142, "Taxi Driver", false], [143, "Crack Maker", false], [144, "Crack Maker", false], [145, "Crack Maker", false], [146, "Crack Maker", false], [147, "Businessman", false], [148, "Businesswoman", false], //[149, "INVALID", false], [150, "Businesswoman", false], [151, "Normal Ped", false], [152, "Prostitute", false], [153, "Construction Worker", false], [154, "Beach Visitor", false], [155, "Well Stacked Pizza Worker", false], [156, "Barber", false], [157, "Hillbilly", false], [158, "Farmer", false], [159, "Hillbilly", false], [160, "Hillbilly", false], [161, "Farmer", false], [162, "Hillbilly", false], [163, "Black Bouncer", false], [164, "White Bouncer", false], [165, "White MIB Agent", false], [166, "Black MIB Agent", false], [167, "Cluckin Bell Worker", false], [168, "Hotdog/Chilli Dog Vendor", false], [169, "Normal Ped", false], [170, "Normal Ped", false], [171, "Blackjack Dealer", false], [172, "Casino Croupier", false], [173, "San Fierro Rifa", false], [174, "San Fierro Rifa", false], [175, "San Fierro Rifa", false], [176, "Barber", false], [177, "Barber", false], [178, "Whore", false], [179, "Ammunation Salesman", false], [180, "Tattoo Artist", false], [181, "Punk", false], [182, "Cab Driver", false], [183, "Normal Ped", false], [184, "Normal Ped", false], [185, "Normal Ped", false], [186, "Normal Ped", false], [187, "Businessman", false], [188, "Normal Ped", false], [189, "Valet", false], [190, "Barbara Schternvart", false], [191, "Helena Wankstein", false], [192, "Michelle Cannes", false], [193, "Katie Zhan", false], [194, "Millie Perkins", false], [195, "Denise Robinson", false], [196, "Farm-Town Inhabitant", false], [197, "Hillbilly", false], [198, "Farm-Town Inhabitant", false], [199, "Farm-Town Inhabitant", false], [200, "Hillbilly", false], [201, "Farmer", false], [202, "Farmer", false], [203, "Karate Teacher", false], [204, "Karate Teacher", false], [205, "Burger Shot Cashier", false], [206, "Cab Driver", false], [207, "Prostitute", false], [209, "Oriental Noodle Stand Vendor", false], [210, "Oriental Boating School Instructor", false], [211, "Clothes Shop Staff", false], [212, "Homeless", false], [213, "Weird Old Man", false], [214, "Waitress (Maria Latore)", false], [215, "Normal Ped", false], [216, "Normal Ped", false], [217, "Clothes Shop Staff", false], [218, "Normal Ped", false], [219, "Rich Woman", false], [220, "Cab Driver", false], [221, "Normal Ped", false], [222, "Normal Ped", false], [223, "Normal Ped", false], [224, "Normal Ped", false], [225, "Normal Ped", false], [226, "Normal Ped", false], [227, "Oriental Businessman", false], [228, "Oriental Ped", false], [229, "Oriental Ped", false], [230, "Homeless", false], [231, "Normal Ped", false], [232, "Normal Ped", false], [233, "Normal Ped", false], [234, "Cab Driver", false], [235, "Normal Ped", false], [236, "Normal Ped", false], [237, "Prostitute", false], [238, "Prostitute", false], [239, "Homeless", false], [240, "The D.A", false], [241, "Afro-American", false], [242, "Mexican", false], [243, "Prostitute", false], [244, "Stripper", false], [245, "Prostitute", false], [246, "Stripper", false], [247, "Biker", false], [248, "Biker", false], [249, "Pimp", false], [250, "Normal Ped", false], [251, "Lifeguard", false], [252, "Naked Valet", false], [253, "Bus Driver", false], [254, "Biker Drug Dealer", false], [255, "Chauffeur (Limo Driver)", false], [256, "Stripper", false], [257, "Stripper", false], [258, "Heckler", false], [259, "Heckler", false], [260, "Construction Worker", false], [261, "Cab Driver", false], [262, "Cab Driver", false], [263, "Normal Ped", false], [264, "Clown (Ice-Cream Van Driver)", false], //[265, "Officer Frank Tenpenny", false], //[266, "Officer Eddie Pulaski", false], //[267, "Officer Jimmy Hernandez", false], [268, "Dwaine/Dwayne", false], [269, "Melvin Big Smoke Harris (Mission)", false], [270, "Sean Sweet Johnson", false], [271, "Lance Ryder Wilson", false], [272, "Mafia Boss", false], //[274, "Paramedic", false], //[275, "Paramedic", false], //[276, "Paramedic", false], //[277, "Firefighter", false], //[278, "Firefighter", false], //[279, "Firefighter", false], //[280, "Los Santos Police Officer", false], //[281, "San Fierro Police Officer", false], //[282, "Las Venturas Police Officer", false], //[283, "County Sheriff", false], //[284, "Motorbike Cop", false], //[285, "S.W.A.T.", false], //[286, "Federal Agent", false], //[287, "Army Soldier", false], //[288, "Desert Sheriff", false], [290, "Ken Rosenberg", false], [291, "Kent Paul", false], [292, "Cesar Vialpando", false], [293, "Jeffery Og Loc Martin/Cross", false], [294, "Wu Zi Mu (Woozie)", false], [295, "Michael Toreno", false], [296, "Jizzy B.", false], [297, "Madd Dogg", false], [298, "Catalina", false], [299, "Claude Speed", false], [300, "Lance Ryder Wilson", false], [301, "Lance Ryder Wilson (robbery mask)", false], [302, "Emmet", false], [303, "Unknown", false], [304, "Denise", false], [305, "Jethro", false], [306, "Zero", false], [307, "T-Bone Mendez", false], [308, "Forelli", false], [309, "Mechanic", false], [310, "Barry Big Bear Thorne (Skinny)", false], [311, "Melvin Big Smoke Harris (Vest)", false], //[312, "Army Guy", false], [313, "Barry Big Bear Thorne (Fat)", false], ], [ // Underground ], [ // GTA IV //[-2020305438,"Male Multiplayer",false], //[-641875910,"Female Multiplayer",false], //[-1370810922,"MODEL_SUPERLOD",false], [1853617247,"Anna",false], [-1646893330,"Anthony",false], [1495769888,"Badman",false], [1500493064,"Bernie Crane",false], [1731510984,"Bledar",false], [422305098,"Brian",false], [-1729980128,"Brucie",false], [237511807,"Bulgarin",false], [88667657,"Charise",false], [-1328445565,"Charlie Undercover",false], [1343144208,"Clarence",false], [1468450703,"Dardan",false], [386513184,"Darko",false], [1169442297,"Derric",false], [237497537,"Dmitri",false], [-617264103,"Dwayne",false], [-1600585231,"Eddie",false], [57218969,"Faustin",false], [1710545037,"Francis",false], [1424670436,"French Tom",false], [2129490787,"Gordon",false], [-357652594,"Gracie",false], [980768434,"Hossan",false], [-835225126,"Ilyena",false], [-479595866,"Issac",false], [1166762483,"Ivan",false], [364686627,"Jay",false], [170756246,"Jason",false], [390357829,"Jeff",false], [-366421228,"Jimmy",false], [-911507684,"Johnny Klebitz",false], [-773750838,"Kate",false], [995576506,"Kenny",false], [1487004273,"Lil Jacob",false], [-1275031987,"Lil Jacob 2,",false], [-681942840,"Luca",false], [-492470690,"Luis",false], [-1040287406,"Mallorie",false], [-322700377,"Mam",false], [1445589009,"Manny",false], [411185872,"Marnie",false], [-807339118,"Mel",false], [735211577,"Michael",false], [-1080659212,"Michelle",false], [-636669566,"Mickey",false], [1690783035,"Packie",false], [-165448092,"Pathos",false], [-1947682830,"Petrovic",false], [-1826458934,"Phil Bell",false], [1794146792,"Playboy X",false], [954215094,"Ray Boccino",false], [-587324132,"Ricky",false], [-1992728631,"Roman",false], [558221221,"Roman 2,",false], [-17823883,"Sarah",false], [1384833284,"Tuna",false], [-1014976873,"Vinny Spaz",false], [896408642,"Vlad",false], [-301223260,"Black Street Thug 1,",false], [-1143910864,"Black Street Thug 2,",false], [869501081,"Black Street OG 1,",false], [632613980,"Black Street OG 1,",false], [-503930010,"Albanian Thug 1,",false], [-235584669,"Albanian Thug 2,",false], [207714363,"Albanian Thug 3,",false], [514268366,"Albanian Thug 4,",false], [43005364,"Biker 1,",false], [1346668127,"Biker 2,",false], [-1677255197,"Biker 3,",false], [-1461281345,"Biker 4,",false], [1574850459,"Biker 5,",false], [-1953289472,"Biker 6,",false], [280474699,"Irish Man 1,",false], [-19263344,"Irish Man 2,",false], [1844702918,"Irish Man 3,",false], [1609755055,"Jamaican OG 1,",false], [-330497431,"Jamaican OG 2,",false], [1117105909,"Jamaican OG 3,",false], [-1500397869,"Jamaican Thug 1,",false], [-881358690,"Jamaican Thug 2,",false], [1540383669,"Asian Man 1,",false], [764249904,"Asian Man 2,",false], [492147228,"Hispanic Man 1,",false], [-1926041127,"Hispanic Man 2,",false], [1168388225,"Hispanic Man 3,",false], [-1746774780,"Hispanic Man 4,",false], [-302362397,"Fat Italian Mafia Boss",false], [-1616890832,"Italian Mafia Boss",false], [64730935,"Italian Mafia Associate",false], [510389335,"Fat Italian Mafia Associate",false], [-1836006237,"Russian Thug 1,",false], [-2088164056,"Russian Thug 2,",false], [1976502708,"Russian Thug 3,",false], [1543404628,"Russian Thug 4,",false], [1865532596,"Russian Thug 5,",false], [431692232,"Russian Thug 6,",false], [1724587620,"Russian Thug 7,",false], [-1180674815,"Russian Thug 8,",false], [871281791,"Triad Boss 1,",false], [683712035,"Triad Boss 2,",false], [-1084007777,"Triad Member 3,",false], [-164935626,"Triad Member 4,",false], [-751071255,"Female Maid",false], [-109247258,"Female Binco Worker",false], [1366257926,"Female Bank Teller",false], [346338575,"Female Doctor",false], [1350216795,"Female Gym Worker",false], [924926104,"Female Burger Shot Worker",false], [-346378101,"Female Cluckin Bell Worker",false], [-2104311883,"Female Rockstar Cafe Worker",false], [212900845,"Female TW@ Cafe Worker",false], [-290070895,"Female Well Stacked Pizza Worker",false], [552542187,"Hooker",false], [996267216,"Hooker 2,",false], [-1193778389,"Nurse",false], [1113677074,"Stripper 1,",false], [1353709999,"Stripper 2,",false], [24233425,"Waitress",false], [-1761003415,"Alcoholic Man",false], [1075583233,"Armoured Truck Driver",false], [134077503,"Bus Driver",false], [757349871,"Generic Asian Man",false], [-1827421800,"Black Crackhead",false], [219393781,"Doctor (Scrubs)",false], [-1186940778,"Doctor",false], [375732086,"Doctor (Blood Covered Coat)",false], [2105015949,"Cook",false], [-200234085,"Italian Mob Enforcer",false], [800131009,"Factory Worker",false], [-999506922,"FIB Agent",false], [-1993909080,"Fat Delivery Driver",false], [610888851,"Fire Chief",false], [486302863,"Mercenary Soldier",false], [-778316080,"Helicopter Pilot",false], [624314380,"Hotel Doorman",false], [-1784833142,"Korean Cook",false], [-1852976689,"Lawyer 1,",false], [-1134712978,"Lawyer 2,",false], [379171768,"Loony Black Man",false], [-1945168882,"Pilot",false], [807236245,"Generic Man",false], [-284362863,"Postal Worker",false], [-1188246269,"Saxophone Player",false], [-1870989171,"Security Guard",false], [420915580,"Stadium Food Vendor",false], [1878085135,"Stadium Food Cook",false], [142730876,"Street Food Vendor",false], [-690681764,"Street Sweeper Driver",false], [8772846,"Taxi Driver",false], [1186270890,"Telephone Company Worker",false], [-379234846,"Tennis Player",false], [1159759556,"Train Conductor",false], [-142386662,"Homeless Black Man",false], [-46564867,"Trucker",false], [-1284047560,"Janitor",false], [22944263,"Hotel Doorman 2,",false], [1178487645,"Mob Boss",false], [-1464712858,"Airport Worker",false], [-2139064254,"Bartender",false], [-1780698891,"Biker Bouncer",false], [-409283472,"High End Club Bouncer",false], [-799229885,"Bowling Alley Worker",false], [-434183225,"Bowling Alley Worker 2,",false], [768442188,"Chinese Food Vendor",false], [676448572,"Club Security",false], [-722019798,"Construction Worker",false], [-1015957728,"Construction Worker 2,",false], [-714220780,"Construction Worker 3,",false], [-183203150,"Police Officer",false], [-1518937979,"Traffic Officer",false], [-370395528,"Fat Police Officer",false], [-1371133859,"Courier",false], [-573788283,"Cowboy 1,",false], [-1283406538,"Drug Dealer 1,",false], [1448755353,"Drug Dealer 2,",false], [989485,"Male Burger Shot Worker",false], [-1011530423,"Male Cluckin Bell Worker",false], [1979561477,"Male Rockstar Cafe Worker",false], [-786449781,"Male TW@ Cafe Worker",false], [206941425,"Male Well Stacked Pizza Worker",false], [-610224615,"Firefighter",false], [1136499716,"Garbage Collector",false], [897868981,"Goon",false], [-1902758612,"Male Gym Worker",false], [-356904519,"Mechanic 2,",false], [-1056268969,"Male Modo Worker",false], [1201610759,"Helicopter Pilot",false], [-151000142,"Perseus",false], [501136335,"Generic Male 1,",false], [186619473,"Generic Male 2,",false], [-111611196,"Generic Male 3,",false], [-1175077216,"Paramedic",false], [-1676937780,"Prisoner",false], [215190023,"Prisoner 2,",false], [1552970117,"Roman's Taxi Service Driver",false], [-1481923910,"Male Runner",false], [357919731,"Male Shop Assistant 1,",false], [-89302119,"State Trooper",false], [-1004762946,"SWAT",false], [-64233032,"Sword Swallower",false], [-1292254815,"Thief",false], [271284208,"Valet",false], [-186113957,"Vendor",false], [-2015686009,"French Tom",false], [1977784957,"Jim Fitz",false], [-203833294,"East European Woman",false], [189853472,"East European Woman 2,",false], [-349043578,"Woman",false], [-114937692,"Jersey Woman",false], [-1697333660,"Oriental Woman",false], [100706569,"Rich Woman",false], [155063868,"Business Woman 1,",false], [394310337,"Business Woman 2,",false], [1375728805,"Chinatown Woman",false], [-284229525,"Business Woman 3,",false], [677687516,"East European Woman 3,",false], [-1188238883,"Fat Black Woman",false], [-2075220936,"Jersey Woman 1,",false], [-1356924456,"Jersey Woman 2,",false], [812112483,"Fat Hispanic Woman 1,",false], [-129242580,"Fat Hispanic Woman 2,",false], [852423121,"White Manhattan Woman",false], [76551508,"Black Manhattan Woman",false], [-2118501976,"Old Asian Woman",false], [1616769823,"Old Rich Woman",false], [453889158,"Business Woman 4,",false], [824245375,"Asian Woman in Dress",false], [-1362442041,"Fat Black Bronx Woman",false], [-1788328884,"Random White Woman",false], [-1523915823,"Random Hispanic Woman",false], [-949987237,"Random Eastern European Woman",false], [-1926577323,"Random Black Woman",false], [168065679,"Black Harlem Woman 1,",false], [441464,"Fat Jersey Woman 1,",false], [54114008,"Fat Hispanic Woman 3,",false], [-292713088,"Hispanic Woman 1,",false], [1743814728,"Hispanic Woman 2,",false], [1670568326,"Manhattan Woman 1,",false], [1354281938,"Manhattan Woman 2,",false], [1056837725,"Manhattan Woman 1,",false], [-1193633577,"Asian Woman 1,",false], [713691120,"Black Woman 2,",false], [-1780385799,"Rich White Woman 1,",false], [-952185135,"Asian Woman",false], [1586287288,"Female Shopper 1,",false], [1848013291,"Female Shopper 2,",false], [-1702036227,"Female Shopper 3,",false], [1182843182,"Female Socialite 1,",false], [-900623157,"Street Woman 1,",false], [286007875,"Street Woman 2,",false], [1473654742,"Street Woman 3,",false], [-1850743775,"Street Woman 4,",false], [1290755317,"Street Woman 5,",false], [1872110126,"Street Woman 6,",false], [1754440500,"Tourist Woman 1,",false], [761763258,"MODEL_F_Y_VILLBO_01,",false], [-636579119,"Business Man 1,",false], [-1754526315,"Business Man 2,",false], [-1516474414,"Street Criminal 1,",false], [-1821258883,"Street Criminal 2,",false], [1952671026,"Obese Mafia Thug",false], [-1991603022,"Gay Man 1,",false], [-1080673049,"Homeless Bum 1,",false], [495499562,"Loony White Man 1,",false], [-1984134881,"MODEL_M_M_MIDTOWN_01,",false], [1063816580,"Business Man 2,",false], [208763854,"Eastern European Man 1,",false], [-1020237172,"Fat Black Man 2,",false], [1782277836,"MODEL_M_M_PINDUS_02,",false], [-1402442039,"Fat Italian Man 1,",false], [-1628417063,"Italian Man 2,",false], [1158569407,"Hispanic Man 1,",false], [1969438324,"Hispanic Man 2,",false], [1621955848,"Hispanic Man 3,",false], [-657489059,"Tourist Man 1,",false], [-1307068958,"Black Business Man 1,",false], [734334931,"Asian Man 3,",false], [1865082075,"MODEL_M_M_PRICH_01,",false], [-432593815,"MODEL_M_O_EASTEURO_01,",false], [-1639359785,"Hasidic Jewish Man 1,",false], [1656087115,"Old Man 1,",false], [2034185905,"MODEL_M_O_PEASTEURO_02,",false], [1316404726,"MODEL_M_O_PHARBRON_01,",false], [980990533,"MODEL_M_O_PJERSEY_01,",false], [-1298691925,"MODEL_M_O_STREET_01,",false], [243672348,"Old Business Man",false], [2085884255,"MODEL_M_Y_BOHO_01,",false], [221246143,"MODEL_M_Y_BOHOGUY_01,",false], [52357603,"MODEL_M_Y_BRONX_01,",false], [1530937394,"Black Business Man 2,",false], [690281432,"Black Business Man 3,",false], [-1149743642,"Asian Man 4,",false], [-314369597,"Chopshop Mechanic 1,",false], [-552829610,"Chopshop Mechanic 2,",false], [-1097188138,"MODEL_M_Y_DODGY_01,",false], [-1775659292,"MODEL_M_Y_DORK_02,",false], [1207402441,"MODEL_M_Y_DOWNTOWN_01,",false], [1500619449,"MODEL_M_Y_DOWNTOWN_02,",false], [594261682,"MODEL_M_Y_DOWNTOWN_03,",false], [-747824291,"MODEL_M_Y_GAYYOUNG",false], [-677160979,"MODEL_M_Y_GENSTREET_11,",false], [-1678614360,"MODEL_M_Y_GENSTREET_16,",false], [989044076,"MODEL_M_Y_GENSTREET_20,",false], [1180218190,"MODEL_M_Y_GENSTREET_34,",false], [-1420592428,"MODEL_M_Y_HARDMAN_01,",false], [-1222963415,"MODEL_M_Y_HARLEM_01,",false], [-1746153269,"MODEL_M_Y_HARLEM_02,",false], [2104499156,"MODEL_M_Y_HARLEM_04,",false], [-1874580889,"Hasidic Jewish Man 2,",false], [-1055386282,"MODEL_M_Y_LEASTSIDE_01,",false], [575808580,"MODEL_M_Y_PBRONX_01,",false], [-71980543,"MODEL_M_Y_PCOOL_01,",false], [-195159218,"MODEL_M_Y_PCOOL_02,",false], [697247370,"MODEL_M_Y_PEASTEURO_01,",false], [670406267,"MODEL_M_Y_PHARBRON_01,",false], [26615298,"MODEL_M_Y_PHARLEM_01,",false], [1542927558,"MODEL_M_Y_PJERSEY_01,",false], [-1806886352,"MODEL_M_Y_PLATIN_01,",false], [-1022920796,"MODEL_M_Y_PLATIN_02,",false], [-1326394505,"MODEL_M_Y_PLATIN_03,",false], [607901190,"MODEL_M_Y_PMANHAT_01,",false], [1968470106,"MODEL_M_Y_PMANHAT_02,",false], [-344136289,"MODEL_M_Y_PORIENT_01,",false], [560413584,"MODEL_M_Y_PQUEENS_01,",false], [1352017873,"MODEL_M_Y_PRICH_01,",false], [223726252,"MODEL_M_Y_PVILLBO_01,",false], [-1252681043,"MODEL_M_Y_PVILLBO_02,",false], [-1562020391,"MODEL_M_Y_PVILLBO_03,",false], [1223224881,"MODEL_M_Y_QUEENSBRIDGE",false], [-1220737489,"MODEL_M_Y_SHADY_02,",false], [1755322862,"MODEL_M_Y_SKATEBIKE_01,",false], [386690478,"MODEL_M_Y_SOHO_01,",false], [62496225,"MODEL_M_Y_STREET_01,",false], [523785438,"MODEL_M_Y_STREET_03,",false], [813889395,"MODEL_M_Y_STREET_04,",false], [-1552214124,"MODEL_M_Y_STREETBLK_02,",false], [-650575089,"MODEL_M_Y_STREETBLK_03,",false], [-740078918,"Street Punk 1,",false], [-1927496394,"Street Punk 2,",false], [1374242512,"Street Punk 3,",false], [-1139941790,"Tough Guy",false], [809067472,"Male Tourist",false], ] ]; let placesOfOrigin = [ "Liberty City", "Vice City", "Los Santos", "San Fierro", "Las Venturas", "San Andreas", "Blaine County", "Red County", "Bone County", "Other", ]; let characterData = []; let currentCharacter = 0; app.init = function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Initializing GUI ...`); logToConsole(LOG_DEBUG, `[Asshat.GUI] Creating login GUI ...`); login.window = mexui.window(game.width/2-150, game.height/2-129, 300, 258, 'LOGIN', { main: { backgroundColour: toColour(0, 0, 0, windowAlpha), transitionTime: 500, }, title: { textSize: 0.0, textColour: toColour(0, 0, 0, 0), }, icon: { textSize: 0.0, textColour: toColour(0, 0, 0, 0), }, focused: { borderColour: toColour(0, 0, 0, 0), }, }); login.window.titleBarIconSize = toVector2(0,0); login.window.titleBarHeight = 0; login.logoImage = login.window.image(100, 20, 100, 100, mainLogoPath, { focused: { borderColour: toColour(0, 0, 0, 0), }, }); login.messageLabel = login.window.text(20, 135, 260, 20, 'Please enter your password!', { main: { textSize: 10.0, textAlign: 0.5, textColour: toColour(200, 200, 200, 255), textFont: robotoFont, }, focused: { borderColour: toColour(0, 0, 0, 0), }, }); login.passwordInput = login.window.textInput(20, 170, 260, 25, '', { main: { backgroundColour: toColour(0, 0, 0, 120), borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], textInputAlpha), textColour: toColour(200, 200, 200, 255), textSize: 10.0, textFont: robotoFont, }, caret: { lineColour: toColour(255, 255, 255, 255), }, placeholder: { textColour: toColour(200, 200, 200, 150), textSize: 10.0, textFont: robotoFont, }, focused: { borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], 255), }, }); login.passwordInput.masked = true; login.passwordInput.placeholder = "Password"; login.loginButton = login.window.button(20, 205, 260, 30, 'LOGIN', { main: { backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), textColour: toColour(0, 0, 0, 255), textSize: 10.0, textFont: robotoFont, textAlign: 0.5, }, focused: { borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), }, }, checkLogin); logToConsole(LOG_DEBUG, `[Asshat.GUI] Created login GUI`); // ------------------------------------------------------------------------------ logToConsole(LOG_DEBUG, `[Asshat.GUI] Creating two factor auth GUI ...`); twoFactorAuth.window = mexui.window(game.width/2-150, game.height/2-129, 300, 258, 'LOGIN', { main: { backgroundColour: toColour(0, 0, 0, windowAlpha), transitionTime: 500, }, title: { textSize: 0.0, textColour: toColour(0, 0, 0, 0), }, icon: { textSize: 0.0, textColour: toColour(0, 0, 0, 0), }, focused: { borderColour: toColour(0, 0, 0, 0), }, }); twoFactorAuth.window.titleBarIconSize = toVector2(0,0); twoFactorAuth.window.titleBarHeight = 0; twoFactorAuth.qrCode = twoFactorAuth.window.image(100, 20, 100, 100, mainLogoPath, { focused: { borderColour: toColour(0, 0, 0, 0), }, }); twoFactorAuth.codeLabel = twoFactorAuth.window.text(20, 135, 260, 20, 'Please enter the code from your authenticator app!', { main: { textSize: 10.0, textAlign: 0.5, textColour: toColour(200, 200, 200, 255), textFont: robotoFont, }, focused: { borderColour: toColour(0, 0, 0, 0), }, }); twoFactorAuth.codeInput = twoFactorAuth.window.textInput(20, 170, 260, 25, '', { main: { backgroundColour: toColour(0, 0, 0, 120), borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], textInputAlpha), textColour: toColour(200, 200, 200, 255), textSize: 10.0, textFont: robotoFont, }, caret: { lineColour: toColour(255, 255, 255, 255), }, placeholder: { textColour: toColour(200, 200, 200, 150), textSize: 10.0, textFont: robotoFont, }, focused: { borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], 255), }, }); twoFactorAuth.codeInput.placeholder = "Code"; twoFactorAuth.submitButton = twoFactorAuth.window.button(20, 205, 260, 30, 'SUBMIT', { main: { backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), textColour: toColour(0, 0, 0, 255), textSize: 10.0, textFont: robotoFont, textAlign: 0.5, }, focused: { borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), }, }, checkTwoFactorAuth); logToConsole(LOG_DEBUG, `[Asshat.GUI] Created two factor auth GUI`); // ------------------------------------------------------------------------------ logToConsole(LOG_DEBUG, `[Asshat.GUI] Creating new character GUI ...`); newCharacter.window = mexui.window(game.width/2-215, game.height/2-83, 430, 166, 'New Character', { main: { backgroundColour: toColour(0, 0, 0, 120), transitionTime: 500, }, title: { textSize: 11.0, textColour: toColour(0, 0, 0, 255), backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha), }, icon: { textSize: 0.0, textColour: toColour(0, 0, 0, 0), backgroundColour: toColour(0, 0, 0, 0), }, focused: { borderColour: toColour(0, 0, 0, 0), }, }); newCharacter.firstNameInput = newCharacter.window.textInput(10, 40, 200, 25, '', { main: { hover: { backgroundColour: toColour(0, 0, 0, 200), textColour: toColour(200, 200, 200, 255), textSize: 10.0, textFont: robotoFont, }, backgroundColour: toColour(0, 0, 0, 200), textColour: toColour(200, 200, 200, 255), textSize: 10.0, textFont: robotoFont, }, caret: { lineColour: toColour(255, 255, 255, 255), }, placeholder: { backgroundColour: toColour(0, 0, 0, 200), textColour: toColour(200, 200, 200, 200), textSize: 10.0, textFont: robotoFont, }, focused: { borderColour: toColour(focusedColour[0], focusedColour[1], focusedColour[2], textInputAlpha), }, invalidValue: { borderColour: toColour(invalidValueColour[0], invalidValueColour[1], invalidValueColour[2], textInputAlpha), }, }); newCharacter.firstNameInput.placeholder = "First Name"; newCharacter.lastNameInput = newCharacter.window.textInput(10, 70, 200, 25, '', { main: { hover: { backgroundColour: toColour(0, 0, 0, textInputAlpha), textColour: toColour(200, 200, 200, 255), textSize: 10.0, textFont: robotoFont, }, backgroundColour: toColour(0, 0, 0, textInputAlpha), textColour: toColour(200, 200, 200, 255), textSize: 10.0, textFont: robotoFont, }, caret: { lineColour: toColour(255, 255, 255, 255), }, placeholder: { backgroundColour: toColour(0, 0, 0, textInputAlpha), textColour: toColour(150, 150, 150, 200), textSize: 10.0, textFont: robotoFont, }, focused: { borderColour: toColour(focusedColour[0], focusedColour[1], focusedColour[2], 255), }, invalidValue: { borderColour: toColour(invalidValueColour[0], invalidValueColour[1], invalidValueColour[2], 255), }, }); newCharacter.lastNameInput.placeholder = "Last Name"; newCharacter.dateOfBirth = newCharacter.window.date(10, 130, 200, 25, 'Date of Birth', { main: { hover: { backgroundColour: toColour(0, 0, 0, 200), textColour: toColour(200, 200, 200, 255), textSize: 10.0, textFont: robotoFont, }, backgroundColour: toColour(0, 0, 0, 200), textColour: toColour(200, 200, 200, 255), textSize: 10.0, textFont: robotoFont, }, focused: { borderColour: toColour(focusedColour[0], focusedColour[1], focusedColour[2], 255), }, invalidValue: { borderColour: toColour(invalidValueColour[0], invalidValueColour[1], invalidValueColour[2], 255), }, }); newCharacter.placeOfOrigin = newCharacter.window.dropDown(10, 100, 200, 25, 'Place of Origin', { main: { hover: { backgroundColour: toColour(0, 0, 0, 200), textColour: toColour(200, 200, 200, 255), textSize: 10.0, textFont: robotoFont, }, backgroundColour: toColour(0, 0, 0, 200), textColour: toColour(200, 200, 200, 255), textSize: 10.0, textFont: robotoFont, }, item: { hover: { backgroundColour: toColour(32, 32, 32, 200), textColour: toColour(200, 200, 200, 255), textSize: 10.0, textFont: robotoFont, width: 200, }, backgroundColour: toColour(0, 0, 0, 200), textColour: toColour(200, 200, 200, 255), textSize: 10.0, textFont: robotoFont, width: 200, }, focused: { borderColour: toColour(focusedColour[0], focusedColour[1], focusedColour[2], 255), }, invalidValue: { borderColour: toColour(invalidValueColour[0], invalidValueColour[1], invalidValueColour[2], 255), }, }); for(let i in placesOfOrigin) { newCharacter.placeOfOrigin.item(placesOfOrigin[i]); } newCharacter.placeOfOrigin.axis.y.scrollBar.styles.innerBar.backgroundColour = toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha); newCharacter.placeOfOrigin.setScrollBarsManual(true); newCharacter.skinImage = newCharacter.window.image(250, 32, 110, 70, "files/images/skins/none.png", { focused: { borderColour: toColour(0, 0, 0, 0), }, }); newCharacter.skinDropDown = newCharacter.window.dropDown(220, 100, 200, 25, 'Choose Skin', { main: { hover: { backgroundColour: toColour(0, 0, 0, 200), textColour: toColour(200, 200, 200, 255), textSize: 10.0, textFont: robotoFont, }, backgroundColour: toColour(0, 0, 0, 120), textColour: toColour(200, 200, 200, 255), textSize: 10.0, textFont: robotoFont, width: 200, }, item: { hover: { backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], 150), textColour: toColour(200, 200, 200, 255), textSize: 10.0, textFont: robotoFont, width: 200, }, backgroundColour: toColour(0, 0, 0, 200), textColour: toColour(200, 200, 200, 255), textSize: 10.0, textFont: robotoFont, width: 200, }, }); newCharacter.skinDropDown.axis.y.scrollBar.styles.innerBar.backgroundColour = toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha); newCharacter.skinDropDown.setScrollBarsManual(true); for(let i in skinNames[gta.game]) { newCharacter.skinDropDown.item(skinNames[gta.game][i][1]); } newCharacter.createButton = newCharacter.window.button(220, 130, 200, 25, 'CREATE', { main: { backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), textColour: toColour(0, 0, 0, 255), textSize: 10.0, textFont: robotoFont, textAlign: 0.5, }, focused: { borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), }, }, checkNewCharacter); logToConsole(LOG_DEBUG, `[Asshat.GUI] Created new character GUI`); // ------------------------------------------------------------------------------ logToConsole(LOG_DEBUG, `[Asshat.GUI] Creating register GUI ...`); register.window = mexui.window(game.width/2-130, game.height/2-125, 300, 250, 'Register', { main: { backgroundColour: toColour(0, 0, 0, windowAlpha), transitionTime: 500, }, title: { textSize: 0.0, textColour: toColour(0, 0, 0, 0), backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha), }, icon: { textSize: 0.0, textColour: toColour(0, 0, 0, 0), backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha), } }); register.window.titleBarIconSize = toVector2(0,0); register.window.titleBarHeight = 0; register.window.image(115, 10, 65, 65, "files/images/main-logo.png", { focused: { borderColour: toColour(0, 0, 0, 0), }, }); register.messageLabel = register.window.text(20, 75, 260, 20, 'Create an account', { main: { textSize: 10.0, textAlign: 0.5, textColour: toColour(200, 200, 200, 255), textFont: robotoFont, }, focused: { borderColour: toColour(0, 0, 0, 0), }, }); register.passwordInput = register.window.textInput(20, 100, 260, 25, '', { main: { backgroundColour: toColour(0, 0, 0, 120), textColour: toColour(200, 200, 200, 255), textSize: 10.0, textFont: robotoFont, }, caret: { lineColour: toColour(255, 255, 255, 255), }, placeholder: { backgroundColour: toColour(0, 0, 0, 120), textColour: toColour(200, 200, 200, 200), textSize: 10.0, textFont: robotoFont, } }); register.passwordInput.masked = true; register.passwordInput.placeholder = "Password"; register.confirmPasswordInput = register.window.textInput(20, 130, 260, 25, '', { main: { backgroundColour: toColour(0, 0, 0, 120), textColour: toColour(200, 200, 200, 255), textSize: 10.0, textFont: robotoFont, }, caret: { lineColour: toColour(255, 255, 255, 255), }, placeholder: { backgroundColour: toColour(0, 0, 0, 120), textColour: toColour(150, 150, 150, 200), textSize: 10.0, textFont: robotoFont, } }); register.confirmPasswordInput.masked = true; register.confirmPasswordInput.placeholder = "Confirm password"; register.emailInput = register.window.textInput(20, 160, 260, 25, '', { main: { backgroundColour: toColour(0, 0, 0, 120), textColour: toColour(200, 200, 200, 255), textSize: 10.0, textFont: robotoFont, }, caret: { lineColour: toColour(255, 255, 255, 255), }, placeholder: { backgroundColour: toColour(0, 0, 0, 120), textColour: toColour(200, 200, 200, 200), textSize: 10.0, textFont: robotoFont, } }); register.emailInput.placeholder = "Email"; register.registerButton = register.window.button(20, 195, 260, 30, 'CREATE ACCOUNT', { main: { backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), textColour: toColour(255, 255, 255, 255), textSize: 12.0, textFont: robotoFont, textAlign: 0.5, }, focused: { borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), }, }, checkRegistration); logToConsole(LOG_DEBUG, `[Asshat.GUI] Created register GUI`); // ------------------------------------------------------------------------------ logToConsole(LOG_DEBUG, `[Asshat.GUI] Creating error GUI ...`); errorDialog.window = mexui.window(game.width/2-200, game.height/2-70, 400, 140, 'ERROR', { main: { backgroundColour: toColour(0, 0, 0, windowAlpha), transitionTime: 500, }, title: { textSize: 11.0, textColour: toColour(0, 0, 0, 255), backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha), }, icon: { textSize: 0.0, textColour: toColour(0, 0, 0, 0), backgroundColour: toColour(0, 0, 0, 0), }, }); errorDialog.messageLabel = errorDialog.window.text(15, 50, 370, 20, 'Error Message', { main: { textSize: 10.0, textAlign: 0.5, textColour: toColour(255, 255, 255, 255), textFont: robotoFont, }, focused: { borderColour: toColour(0, 0, 0, 0), }, }); errorDialog.okayButton = errorDialog.window.button(20, 95, 360, 30, 'OK', { main: { backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), textColour: toColour(0, 0, 0, 255), textSize: 10.0, textFont: robotoFont, textAlign: 0.5, }, focused: { borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], 255), }, }, closeErrorDialog); logToConsole(LOG_DEBUG, `[Asshat.GUI] Created error GUI ...`); // ------------------------------------------------------------------------------ logToConsole(LOG_DEBUG, `[Asshat.GUI] Created prompt GUI ...`); yesNoDialog.window = mexui.window(game.width/2-200, game.height/2-70, 400, 140, 'Question', { main: { backgroundColour: toColour(0, 0, 0, windowAlpha), transitionTime: 500, }, title: { textSize: 11.0, textColour: toColour(0, 0, 0, 255), backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha), }, icon: { textSize: 0.0, textColour: toColour(0, 0, 0, 0), backgroundColour: toColour(0, 0, 0, 0), }, }); yesNoDialog.messageLabel = yesNoDialog.window.text(15, 50, 370, 20, 'Would you like to answer this question?', { main: { textSize: 10.0, textAlign: 0.5, textColour: toColour(255, 255, 255, 255), textFont: robotoFont, }, focused: { borderColour: toColour(0, 0, 0, 0), }, }); yesNoDialog.yesButton = yesNoDialog.window.button(20, 95, 175, 30, 'YES', { main: { backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), textColour: toColour(0, 0, 0, 255), textSize: 10.0, textFont: robotoFont, textAlign: 0.5, }, focused: { borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], 255), }, }, yesNoDialogAnswerYes); yesNoDialog.noButton = yesNoDialog.window.button(205, 95, 175, 30, 'NO', { main: { backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), textColour: toColour(0, 0, 0, 255), textSize: 10.0, textFont: robotoFont, textAlign: 0.5, }, focused: { borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], 255), }, }, yesNoDialogAnswerNo); logToConsole(LOG_DEBUG, `[Asshat.GUI] Created prompt GUI`); // ------------------------------------------------------------------------------ logToConsole(LOG_DEBUG, `[Asshat.GUI] Creating info dialog GUI ...`); infoDialog.window = mexui.window(game.width/2-200, game.height/2-70, 400, 140, 'Information', { main: { backgroundColour: toColour(0, 0, 0, windowAlpha), }, title: { textSize: 11.0, textColour: toColour(0, 0, 0, 255), backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha), }, icon: { textSize: 0.0, textColour: toColour(0, 0, 0, 0), backgroundColour: toColour(0, 0, 0, 0), }, }); infoDialog.messageLabel = infoDialog.window.text(15, 50, 370, 20, 'Information Message', { main: { textSize: 10.0, textAlign: 0.5, textColour: toColour(255, 255, 255, 220), textFont: robotoFont, }, focused: { borderColour: toColour(0, 0, 0, 0), }, }); infoDialog.okayButton = infoDialog.window.button(20, 95, 360, 30, 'OK', { main: { backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), textColour: toColour(0, 0, 0, 255), textSize: 10.0, textFont: robotoFont, textAlign: 0.5, }, focused: { borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], 255), }, }, closeInfoDialog); logToConsole(LOG_DEBUG, `[Asshat.GUI] Created info dialog GUI`); // ------------------------------------------------------------------------------ logToConsole(LOG_DEBUG, `[Asshat.GUI] Creating list dialog GUI ...`); listDialog.window = mexui.window(game.width/2-200, game.height/2-70, 400, 500, 'List', { main: { backgroundColour: toColour(0, 0, 0, windowAlpha), }, title: { textSize: 11.0, textColour: toColour(0, 0, 0, 255), backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha), }, icon: { textSize: 11.0, textColour: toColour(255, 255, 255, 255), backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha), hover: { backgroundColour: toColour(205, 60, 60, windowTitleAlpha), }, }, }); listDialog.messageLabel = infoDialog.window.text(5, 5, 390, 20, 'Select one', { main: { textSize: 10.0, textAlign: 0.5, textColour: toColour(255, 255, 255, 220), textFont: robotoFont, }, focused: { borderColour: toColour(0, 0, 0, 0), }, }); listDialog.listGrid = listDialog.window.grid(5, 25, 390, 450, { main: { backgroundColour: toColour(0, 0, 0, windowAlpha), }, column: { lineColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha), }, header: { backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha-50), textColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha), }, cell: { backgroundColour: toColour(0, 0, 0, windowAlpha), textColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha), }, row: { lineColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha), hover: { backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], 120), } } }); logToConsole(LOG_DEBUG, `[Asshat.GUI] Created list dialog GUI`); // ------------------------------------------------------------------------------ logToConsole(LOG_DEBUG, `[Asshat.GUI] Creating character select GUI ...`); characterSelect.window = mexui.window(game.width/2-215, game.height/2-83, 430, 166, 'Select Character', { main: { backgroundColour: toColour(0, 0, 0, windowAlpha), }, title: { textSize: 11.0, textColour: toColour(0, 0, 0, 255), backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha), }, icon: { textSize: 0.0, textColour: toColour(0, 0, 0, 0), backgroundColour: toColour(0, 0, 0, 0), } }); characterSelect.nameText = characterSelect.window.text(10, 40, 200, 25, 'Lastname, Firstname', { main: { textSize: 14.0, textAlign: 0.0, textColour: toColour(255, 255, 255, 220), textFont: robotoFont, }, focused: { borderColour: toColour(0, 0, 0, 0), } }); characterSelect.dateOfBirthText = characterSelect.window.text(10, 70, 200, 25, 'Born: ', { main: { textSize: 9.0, textAlign: 0.0, textColour: toColour(255, 255, 255, 220), textFont: robotoFont, }, focused: { borderColour: toColour(0, 0, 0, 0), } }); characterSelect.placeOfOrigin = characterSelect.window.text(10, 90, 200, 25, 'From: ', { main: { textSize: 9.0, textAlign: 0.0, textColour: toColour(255, 255, 255, 220), textFont: robotoFont, }, focused: { borderColour: toColour(0, 0, 0, 0), } }); //characterSelect.lastPlayedText = characterSelect.window.text(10, 90, 200, 25, 'Last Played: ', { // main: { // textSize: 9.0, // textAlign: 0.0, // textColour: toColour(255, 255, 255, 220), // textFont: robotoFont, // }, // focused: { // borderColour: toColour(0, 0, 0, 0), // } //}); characterSelect.selectCharacterButton = characterSelect.window.button(90, 130, 250, 25, 'SELECT', { main: { backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), textColour: toColour(0, 0, 0, 255), textSize: 12.0, textFont: robotoFont, textAlign: 0.5, }, focused: { borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), } }, selectThisCharacter); characterSelect.newCharacterButton = characterSelect.window.button(140, 180, 150, 25, 'NEW CHARACTER', { main: { backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), textColour: toColour(0, 0, 0, 255), textSize: 12.0, textFont: robotoFont, textAlign: 0.5, }, focused: { borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), } }, showNewCharacter); characterSelect.previousCharacterButton = characterSelect.window.button(10, 130, 75, 25, '< PREV', { main: { backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), textColour: toColour(0, 0, 0, 255), textSize: 10.0, textFont: robotoFont, textAlign: 0.5, }, focused: { borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), } }, selectPreviousCharacter); characterSelect.nextCharacterButton = characterSelect.window.button(345, 130, 75, 25, 'NEXT >', { main: { backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), textColour: toColour(0, 0, 0, 255), textSize: 10.0, textFont: robotoFont, textAlign: 0.5, }, focused: { borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), } }, selectNextCharacter); characterSelect.skinImage = characterSelect.window.image(310, 32, 100, 90, "files/images/skins/none.png", { focused: { borderColour: toColour(0, 0, 0, 0), } }); logToConsole(LOG_DEBUG, `[Asshat.GUI] Created character select GUI`); // --------------------------------------------------------------------------- logToConsole(LOG_DEBUG, `[Asshat.GUI] All GUI created successfully!`); closeAllWindows(); }; // --------------------------------------------------------------------------- let checkLogin = function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Checking login with server ...`); triggerNetworkEvent("ag.checkLogin", login.passwordInput.lines[0]); } // --------------------------------------------------------------------------- let loginFailed = function(errorMessage) { logToConsole(LOG_DEBUG, `[Asshat.GUI] Server reports login failed`); login.messageLabel.text = errorMessage; login.messageLabel.styles.main.textColour = toColour(180, 32, 32, 255); login.passwordInput.text = ""; } // --------------------------------------------------------------------------- let loginSuccess = function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Server reports login was successful`); closeAllWindows(); } // --------------------------------------------------------------------------- let checkRegistration = function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Checking registration with server ...`); triggerNetworkEvent("ag.checkRegistration", register.passwordInput.lines[0], register.confirmPasswordInput.lines[0], register.emailInput.lines[0]); } // --------------------------------------------------------------------------- let checkNewCharacter = function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Checking new character with server ...`); let skinId = false; if(newCharacter.firstNameInput.lines[0].length < 2) { return false; } if(newCharacter.lastNameInput.lines[0].length < 2) { return false; } if(newCharacter.skinDropDown.selectedEntryIndex != -1) { skinId = skinNames[gta.game][newCharacter.skinDropDown.selectedEntryIndex][0]; } if(newCharacter.placeOfOrigin.selectedEntryIndex == -1) { placeOfOrigin = 0; } triggerNetworkEvent("ag.checkNewCharacter", newCharacter.firstNameInput.lines[0], newCharacter.lastNameInput.lines[0], toString(toString(newCharacter.dateOfBirth.day) + "/" + toString(newCharacter.dateOfBirth.month) + "/" + toString(newCharacter.dateOfBirth.year)), placesOfOrigin[newCharacter.placeOfOrigin.selectedEntryIndex], skinId, ); } // --------------------------------------------------------------------------- let registrationFailed = function(errorMessage) { logToConsole(LOG_DEBUG, `[Asshat.GUI] Server reports registration failed. Reason: ${errorMessage}`); register.messageLabel.text = errorMessage; register.messageLabel.styles.main.textColour = toColour(180, 32, 32, 255); register.passwordInput.text = ""; register.confirmPasswordInput.text = ""; register.emailInput.text = ""; } // --------------------------------------------------------------------------- let registrationSuccess = function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Server reports registration was successful`); closeAllWindows(); } // --------------------------------------------------------------------------- let twoFactorAuthFailed = function(errorMessage) { logToConsole(LOG_DEBUG, `[Asshat.GUI] Server reports two-factor authentication failed. Reason: ${errorMessage}`); login.messageLabel.text = errorMessage; login.messageLabel.styles.main.textColour = toColour(180, 32, 32, 255); login.passwordInput.text = ""; } // --------------------------------------------------------------------------- let twoFactorAuthSuccess = function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Server reports two-factor authentication was successful`); closeAllWindows(); } // --------------------------------------------------------------------------- let checkTwoFactorAuth = function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Checking two-factor authentication with server ...`); triggerNetworkEvent("ag.checkTwoFactorAuth", twoFactorAuth.codeInput.lines[0]); } // --------------------------------------------------------------------------- let characterSelectSuccess = function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Server reports character selection was successful`); closeAllWindows(); } // --------------------------------------------------------------------------- let closeErrorDialog = function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Closing error dialog`); errorDialog.window.shown = false; mexui.setInput(false); } // --------------------------------------------------------------------------- let closeInfoDialog = function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Closing info dialog`); infoDialog.window.shown = false; mexui.setInput(false); } // --------------------------------------------------------------------------- let closeAllWindows = function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Closing all GUI windows`); infoDialog.window.shown = false; yesNoDialog.window.shown = false; errorDialog.window.shown = false; register.window.shown = false; login.window.shown = false; newCharacter.window.shown = false; characterSelect.window.shown = false; twoFactorAuth.window.shown = false; listDialog.window.shown = false; mexui.setInput(false); } // --------------------------------------------------------------------------- let yesNoDialogAnswerNo = function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Responding with answer NO to server prompt`); triggerNetworkEvent("ag.promptAnswerNo"); } // --------------------------------------------------------------------------- let yesNoDialogAnswerYes = function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Responding with answer YES to server prompt`); triggerNetworkEvent("ag.promptAnswerYes"); } // --------------------------------------------------------------------------- let showRegistration = function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Showing registration window`); closeAllWindows(); setChatWindowEnabled(false); mexui.setInput(true); register.window.shown = true; } // --------------------------------------------------------------------------- let showLogin = function() { closeAllWindows(); logToConsole(LOG_DEBUG, `[Asshat.GUI] Showing login window`); setChatWindowEnabled(false); mexui.setInput(true); login.window.shown = true; } // --------------------------------------------------------------------------- let showTwoFactorAuth = function() { closeAllWindows(); logToConsole(LOG_DEBUG, `[Asshat.GUI] Showing two-factor authentication window`); setChatWindowEnabled(false); mexui.setInput(true); twoFactorAuth.window.shown = true; } // --------------------------------------------------------------------------- let showCharacterSelect = function(firstName, lastName, placeOfOrigin, dateOfBirth, skinId) { closeAllWindows(); logToConsole(LOG_DEBUG, `[Asshat.GUI] Showing character selection window`); setChatWindowEnabled(false); mexui.setInput(true); characterSelect.nameText.text = lastName + ", " + firstName; characterSelect.dateOfBirthText.text = "Born: " + toString(dateOfBirth); characterSelect.placeOfOrigin.text = "From: " + toString(placeOfOrigin); characterSelect.skinImage = characterSelect.window.image(310, 32, 100, 90, "files/images/skins/none.png"); characterSelect.window.shown = true; } // --------------------------------------------------------------------------- let showError = function(errorMessage, errorTitle) { closeAllWindows(); logToConsole(LOG_DEBUG, `[Asshat.GUI] Showing error window. Error: ${errorTitle} - ${errorMessage}`); setChatWindowEnabled(false); mexui.setInput(true); errorDialog.messageLabel.text = errorMessage; errorDialog.window.shown = true; } // --------------------------------------------------------------------------- let showYesNo = function(promptMessage, promptTitle) { closeAllWindows(); logToConsole(LOG_DEBUG, `[Asshat.GUI] Showing prompt window. Prompt: ${promptTitle} - ${promptMessage}`); mexui.setInput(true); yesNoDialog.messageLabel.text = promptMessage; yesNoDialog.window.shown = true; } // --------------------------------------------------------------------------- let showInfo = function(infoMessage, infoTitle) { closeAllWindows(); logToConsole(LOG_DEBUG, `[Asshat.GUI] Showing info dialog window. Info: ${infoTitle} - ${infoMessage}`); mexui.setInput(true); infoDialog.messageLabel.text = infoMessage; infoDialog.window.shown = true; } // --------------------------------------------------------------------------- let showNewCharacter = function() { closeAllWindows(); logToConsole(LOG_DEBUG, `[Asshat.GUI] Showing info dialog window`); setChatWindowEnabled(false); mexui.setInput(true); newCharacter.window.shown = true; } // --------------------------------------------------------------------------- let selectNextCharacter = function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Requesting next character info from server for character select window`); triggerNetworkEvent("ag.nextCharacter"); } // --------------------------------------------------------------------------- let selectPreviousCharacter = function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Requesting previous character info from server for character select window`); triggerNetworkEvent("ag.previousCharacter"); } // --------------------------------------------------------------------------- let selectThisCharacter = function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Tell server the current shown character was selected in character select window`); triggerNetworkEvent("ag.selectCharacter"); } // --------------------------------------------------------------------------- let switchCharacterSelect = function(firstName, lastName, placeOfOrigin, dateOfBirth, skinId) { logToConsole(LOG_DEBUG, `[Asshat.GUI] Updating character info with data from server`); setChatWindowEnabled(false); characterSelect.window.shown = false; characterSelect.nameText.text = lastName + ", " + firstName; characterSelect.dateOfBirthText.text = "Born: " + toString(dateOfBirth); characterSelect.placeOfOrigin.text = "From: " + toString(placeOfOrigin); characterSelect.skinImage = characterSelect.window.image(310, 32, 100, 90, "files/images/skins/none.png"); characterSelect.window.shown = true; } // --------------------------------------------------------------------------- addNetworkHandler("ag.showLogin", function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Received request from server to show login window`); showLogin(); }); // --------------------------------------------------------------------------- addNetworkHandler("ag.showRegistration", function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Received request from server to show registration window`); showRegistration(); }); // --------------------------------------------------------------------------- addNetworkHandler("ag.showNewCharacter", function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Received request from server to show new character window`); showNewCharacter(); }); // --------------------------------------------------------------------------- addNetworkHandler("ag.showCharacterSelect", function(firstName, lastName, placeOfOrigin, dateOfBirth, skinId) { logToConsole(LOG_DEBUG, `[Asshat.GUI] Received request from server to show character selection window`); showCharacterSelect(firstName, lastName, placeOfOrigin, dateOfBirth, skinId); }); // --------------------------------------------------------------------------- addNetworkHandler("ag.switchCharacterSelect", function(firstName, lastName, placeOfOrigin, dateOfBirth, skinId) { logToConsole(LOG_DEBUG, `[Asshat.GUI] Received request from server to update character selection window with new info`); switchCharacterSelect(firstName, lastName, placeOfOrigin, dateOfBirth, skinId); }); // --------------------------------------------------------------------------- addNetworkHandler("ag.showError", function(errorMessage, errorTitle) { logToConsole(LOG_DEBUG, `[Asshat.GUI] Received request from server to show error window`); showError(errorMessage, errorTitle); }); // --------------------------------------------------------------------------- addNetworkHandler("ag.showPrompt", function(promptMessage, promptTitle) { logToConsole(LOG_DEBUG, `[Asshat.GUI] Received request from server to show prompt window`); showYesNo(promptMessage, promptTitle); }); // --------------------------------------------------------------------------- addNetworkHandler("ag.showInfo", function(infoMessage) { logToConsole(LOG_DEBUG, `[Asshat.GUI] Received request from server to show info dialog`); showInfo(infoMessage); }); // --------------------------------------------------------------------------- addNetworkHandler("ag.loginSuccess", function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Received signal of successful login from server`); loginSuccess(); }); // --------------------------------------------------------------------------- addNetworkHandler("ag.characterSelectSuccess", function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Received signal of successful character selection from server`); characterSelectSuccess(); setChatWindowEnabled(true); }); // --------------------------------------------------------------------------- addNetworkHandler("ag.loginFailed", function(remainingAttempts) { logToConsole(LOG_DEBUG, `[Asshat.GUI] Received signal of failed login from server`); loginFailed(remainingAttempts); }); // --------------------------------------------------------------------------- addNetworkHandler("ag.registrationSuccess", function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Received signal of successful registration from server`); registrationSuccess(); }); // --------------------------------------------------------------------------- addNetworkHandler("ag.registrationFailed", function(errorMessage) { logToConsole(LOG_DEBUG, `[Asshat.GUI] Received signal of failed registration from server`); registrationFailed(errorMessage); }); // --------------------------------------------------------------------------- addNetworkHandler("ag.guiColour", function(red, green, blue) { logToConsole(LOG_DEBUG, `[Asshat.GUI] Received new GUI colours from server`); primaryColour = [red, green, blue]; focusedColour = [red+focusedColourOffset, green+focusedColourOffset, blue+focusedColourOffset]; }); // --------------------------------------------------------------------------- addNetworkHandler("ag.guiInit", function() { logToConsole(LOG_DEBUG, `[Asshat.GUI] Initializing MexUI app`); app.init(); triggerNetworkEvent("ag.guiReady", true); }); // ---------------------------------------------------------------------------