diff --git a/scripts/client/gui/clan-manager.js b/scripts/client/gui/clan-manager.js new file mode 100644 index 00000000..7230c88b --- /dev/null +++ b/scripts/client/gui/clan-manager.js @@ -0,0 +1,444 @@ +// =========================================================================== +// Asshat Gaming Roleplay +// https://github.com/VortrexFTW/agrp_main +// (c) 2022 Asshat Gaming +// =========================================================================== +// FILE: clan-manager.js +// DESC: Provides clan manager GUI +// TYPE: Client (JavaScript) +// =========================================================================== + +let clanManager = { + window: null, + generalTabButton: null, + ranksTabButton: null, + membersTabButton: null, + vehiclesTabButton: null, + businessesTabButton: null, + housesTabButton: null, + generalTab: { + noPermissionsErrorLabel: null, + clanNameInput: null, + clanTagInput: null, + clanMOTDInput: null, + clanDiscordWebhookURLInput: null, + clanDiscordWebhookEnabledCheckbox: null, + clanDiscordWebhookSendVehicleEventsCheckbox: null, + clanDiscordWebhookSendHouseEventsCheckbox: null, + clanDiscordWebhookSendBusinessEventsCheckbox: null, + clanDiscordWebhookSendRankEventsCheckbox: null, + clanDiscordWebhookSendMemberEventsCheckbox: null, + clanDiscordWebhookEnabledLabel: null, + clanDiscordWebhookSendVehicleEventsLabel: null, + clanDiscordWebhookSendHouseEventsLabel: null, + clanDiscordWebhookSendBusinessEventsLabel: null, + clanDiscordWebhookSendRankEventsLabel: null, + clanDiscordWebhookSendMemberEventsLabel: null, + clanSaveButton: null, + }, + ranksTab: { + noPermissionsErrorLabel: null, + ranks: [ + + ] + }, + membersTab: { + noPermissionsErrorLabel: null, + }, + vehiclesTab: { + noPermissionsErrorLabel: null, + }, + businessesTab: { + noPermissionsErrorLabel: null, + }, + housesTab: { + noPermissionsErrorLabel: null, + }, +}; + +class clanRankTab { + rankContainer = null; + rankNameLabel = null; + rankLevelLabel = null; + rankTagLabel = null; + rankExpandButton = null; + rankNameInput = null; + rankLevelNumberSelect = null; + rankTagInput = null; + rankPermissionStartTurfWarCheckbox = null; + rankPermissionStartPointWarCheckbox = null; + rankPermissionInviteMemberCheckbox = null; + rankPermissionSuspendMemberCheckbox = null; + rankPermissionRemoveMemberCheckbox = null; + rankPermissionMemberRankCheckbox = null; + rankPermissionClanTagCheckbox = null; + rankPermissionClanNameCheckbox = null; + rankPermissionManageVehiclesCheckbox = null; + rankPermissionManageHousesCheckbox = null; + rankPermissionManageBusinessesCheckbox = null; + rankPermissionManageNPCsCheckbox = null; + rankPermissionManageRanksCheckbox = null; + rankPermissionOwnerCheckbox = null; + rankPermissionStartTurfWarLabel = null; + rankPermissionStartPointWarLabel = null; + rankPermissionInviteMemberLabel = null; + rankPermissionSuspendMemberLabel = null; + rankPermissionRemoveMemberLabel = null; + rankPermissionMemberRankLabel = null; + rankPermissionClanTagLabel = null; + rankPermissionClanNameLabel = null; + rankPermissionManageVehiclesLabel = null; + rankPermissionManageHousesLabel = null; + rankPermissionManageBusinessesLabel = null; + rankPermissionManageNPCsLabel = null; + rankPermissionManageRanksLabel = null; + rankPermissionOwnerLabel = null; + rankSaveButton = null; + + constructor(data) { + + } +} + +// =========================================================================== + +function initClanManagerGUI() { + logToConsole(LOG_DEBUG, `[VRR.GUI] Creating character select GUI ...`); + clanManager.window = mexui.window(game.width / 2 - 230, game.height / 2 - 170, 460, 340, 'CLAN MANAGER', { + main: { + backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha), + }, + title: { + textSize: 12.0, + textFont: mainFont, + textColour: toColour(0, 0, 0, 255), + backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha), + }, + icon: { + textSize: 10.0, + textFont: mainFont, + textColour: toColour(0, 0, 0, 255), + backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], windowTitleAlpha), + } + }); + clanManager.window.titleBarIconSize = toVector2(0, 0); + clanManager.window.titleBarIconShown = false; + clanManager.window.titleBarHeight = 30; + + clanManager.generalTabButton = clanManager.window.button(5, 5, 85, 20, 'GENERAL', { + main: { + backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), + textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], 255), + textSize: 10.0, + textFont: mainFont, + textAlign: 0.5, + }, + focused: { + borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), + } + }, switchClanManagerToGeneralTab); + + clanManager.ranksTabButton = clanManager.window.button(95, 5, 85, 20, 'RANKS', { + main: { + backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), + textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], 255), + textSize: 10.0, + textFont: mainFont, + textAlign: 0.5, + }, + focused: { + borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), + } + }, switchClanManagerToRanksTab); + + clanManager.membersTabButton = clanManager.window.button(185, 5, 85, 20, 'MEMBERS', { + main: { + backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), + textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], 255), + textSize: 10.0, + textFont: mainFont, + textAlign: 0.5, + }, + focused: { + borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), + } + }, switchClanManagerToMembersTab); + + clanManager.businessesTabButton = clanManager.window.button(275, 5, 85, 20, 'BUSINESSES', { + main: { + backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), + textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], 255), + textSize: 10.0, + textFont: mainFont, + textAlign: 0.5, + }, + focused: { + borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), + } + }, switchClanManagerToBusinessesTab); + + clanManager.housesTabButton = clanManager.window.button(365, 5, 85, 20, 'HOUSES', { + main: { + backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), + textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], 255), + textSize: 10.0, + textFont: mainFont, + textAlign: 0.5, + }, + focused: { + borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), + } + }, switchClanManagerToHousesTab); + + clanManager.vehiclesTabButton = clanManager.window.button(455, 5, 85, 20, 'VEHICLES', { + main: { + backgroundColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), + textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], 255), + textSize: 10.0, + textFont: mainFont, + textAlign: 0.5, + }, + focused: { + borderColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), + } + }, switchClanManagerToVehiclesTab); + + let gridWidth = 80 * (clanManager.window.width / 100); + let gridHeight = 80 * (clanManager.window.height / 100); + clanManager.ranksTab.grid = clanManager.window.grid(5, 30, 450, 200, { + main: { + backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha), + }, + column: { + lineColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), + }, + header: { + backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha), + textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], 255), + }, + cell: { + backgroundColour: toColour(secondaryColour[0], secondaryColour[1], secondaryColour[2], windowAlpha), + textColour: toColour(primaryTextColour[0], primaryTextColour[1], primaryTextColour[2], 255), + }, + row: { + lineColour: toColour(primaryColour[0], primaryColour[1], primaryColour[2], buttonAlpha), + } + }); +} + +// =========================================================================== + +function switchClanManagerToBusinessesTab() { + hideAllClanManagerTabs(); + showClanManagerBusinessesTab(); +} + +// =========================================================================== + +function switchClanManagerToHousesTab() { + hideAllClanManagerTabs(); + showClanManagerHousesTab(); +} + +// =========================================================================== + +function switchClanManagerToGeneralTab() { + hideAllClanManagerTabs(); + showClanManagerGeneralTab(); +} + +// =========================================================================== + +function switchClanManagerToMembersTab() { + hideAllClanManagerTabs(); + showClanManagerMembersTab(); +} + +// =========================================================================== + +function switchClanManagerToRanksTab() { + hideAllClanManagerTabs(); + showClanManagerRanksTab(); +} + +// =========================================================================== + +function switchClanManagerToVehiclesTab() { + hideAllClanManagerTabs(); + showClanManagerVehiclesTab(); +} + +// =========================================================================== + +function hideAllClanManagerTabs() { + hideClanManagerGeneralTab(); + hideClanManagerRanksTab(); + hideClanManagerMembersTab(); + hideClanManagerBusinessesTab(); + hideClanManagerHousesTab(); + hideClanManagerVehiclesTab(); +} + +// =========================================================================== + +function hideClanManagerGeneralTab() { + for (let i in clanManager.generalTab) { + clanManager.generalTab[i].shown = false; + } +} + +// =========================================================================== + +function hideClanManagerRanksTab() { + for (let i in clanManager.ranksTab) { + clanManager.ranksTab[i].shown = false; + } +} + +// =========================================================================== + +function hideClanManagerMembersTab() { + for (let i in clanManager.membersTab) { + clanManager.membersTab[i].shown = false; + } +} + +// =========================================================================== + +function hideClanManagerBusinessesTab() { + for (let i in clanManager.businessesTab) { + clanManager.businessesTab[i].shown = false; + } +} + +// =========================================================================== + +function hideClanManagerHousesTab() { + for (let i in clanManager.housesTab) { + clanManager.housesTab[i].shown = false; + } +} + +// =========================================================================== + +function hideClanManagerVehiclesTab() { + for (let i in clanManager.vehiclesTab) { + clanManager.vehiclesTab[i].shown = false; + } +} + +// =========================================================================== + +function showClanManagerGeneralTab() { + for (let i in clanManager.generalTab) { + clanManager.generalTab[i].shown = true; + } +} + +// =========================================================================== + +function showClanManagerRanksTab() { + for (let i in clanManager.ranksTab) { + clanManager.ranksTab[i].shown = true; + } +} + +// =========================================================================== + +function showClanManagerMembersTab() { + for (let i in clanManager.membersTab) { + clanManager.membersTab[i].shown = true; + } +} + +// =========================================================================== + +function showClanManagerBusinessesTab() { + for (let i in clanManager.businessesTab) { + clanManager.businessesTab[i].shown = true; + } +} + +// =========================================================================== + +function showClanManagerHousesTab() { + for (let i in clanManager.housesTab) { + clanManager.housesTab[i].shown = true; + } +} + +// =========================================================================== + +function showClanManagerVehiclesTab() { + for (let i in clanManager.vehiclesTab) { + clanManager.vehiclesTab[i].shown = true; + } +} + +// =========================================================================== + +function requestClanManagerData() { + sendNetworkEventToServer("agrp.requestClanManagerData"); +} + +// =========================================================================== + +function receiveClanManagerData(generalInfo, ranks, members, businesses, houses, vehicles) { + updateClanManagerData(generalInfo, ranks, members, businesses, houses, vehicles); +} + +// =========================================================================== + +function updateClanManagerData(generalInfo, ranks, members, businesses, houses, vehicles) { + for (let i in ranks) { + rankContainer[i] = null; + rankNameLabel[i] = mexui.window.text(5, 65, 200, 25, 'Cash: $0', { + main: { + textSize: 9.0, + textAlign: 0.0, + textColour: toColour(255, 255, 255, 220), + textFont: mainFont, + }, + focused: { + borderColour: toColour(0, 0, 0, 0), + } + }); + rankLevelLabel[i] = null; + rankTagLabel[i] = null; + rankExpandButton[i] = null; + rankNameInput[i] = null; + rankLevelNumberSelect[i] = null; + rankTagInput[i] = null; + rankPermissionStartTurfWarCheckbox[i] = null; + rankPermissionStartPointWarCheckbox[i] = null; + rankPermissionInviteMemberCheckbox[i] = null; + rankPermissionSuspendMemberCheckbox[i] = null; + rankPermissionRemoveMemberCheckbox[i] = null; + rankPermissionMemberRankCheckbox[i] = null; + rankPermissionClanTagCheckbox[i] = null; + rankPermissionClanNameCheckbox[i] = null; + rankPermissionManageVehiclesCheckbox[i] = null; + rankPermissionManageHousesCheckbox[i] = null; + rankPermissionManageBusinessesCheckbox[i] = null; + rankPermissionManageNPCsCheckbox[i] = null; + rankPermissionManageRanksCheckbox[i] = null; + rankPermissionOwnerCheckbox[i] = null; + rankPermissionStartTurfWarLabel[i] = null; + rankPermissionStartPointWarLabel[i] = null; + rankPermissionInviteMemberLabel[i] = null; + rankPermissionSuspendMemberLabel[i] = null; + rankPermissionRemoveMemberLabel[i] = null; + rankPermissionMemberRankLabel[i] = null; + rankPermissionClanTagLabel[i] = null; + rankPermissionClanNameLabel[i] = null; + rankPermissionManageVehiclesLabel[i] = null; + rankPermissionManageHousesLabel[i] = null; + rankPermissionManageBusinessesLabel[i] = null; + rankPermissionManageNPCsLabel[i] = null; + rankPermissionManageRanksLabel[i] = null; + rankPermissionOwnerLabel[i] = null; + rankSaveButton[i] = null; + } +} + +// ===========================================================================