class menu_WeaponManager extends GUIPage transient; //============================================================================= var PlayerController pc; var a_WeaponManager a_weaponManager; var string colorG, colorR; var automated BackgroundArea ba_Group1, ba_Group2, ba_Group3, ba_Group4, ba_Group5, ba_Group6, ba_Group7, ba_Group8, ba_Group9, ba_Presets; var automated GUIListBox lb_Group1, lb_Group2, lb_Group3, lb_Group4, lb_Group5, lb_Group6, lb_Group7, lb_Group8, lb_Group9, lb_Presets; var GUIList li_Group1, li_Group2, li_Group3, li_Group4, li_Group5, li_Group6, li_Group7, li_Group8, li_Group9, li_Presets; var automated GUIButton b_VanillaReset, b_BasicCleaning, b_FullCleaning, b_SavePreset, b_DeletePreset; var automated moEditBox eb_PresetName; var automated moCheckbox cb_UseVanillaManagement, cb_FastWeaponChanging; var automated GUILabel l_Group1, l_Group2, l_Group3, l_Group4, l_Group5, l_Group6, l_Group7, l_Group8, l_Group9, l_Presets; //============================================================================= simulated function initComponent(GUIController MyController, GUIComponent MyOwner) { super.initComponent(MyController,MyOwner); pc = playerOwner(); SetupHmi(); li_Group1 = lb_Group1.List; li_Group1.TextAlign = TXTA_Left; li_Group1.bMultiSelect = true; li_Group1.bDropSource = true; li_Group1.bDropTarget = true; li_Group1.OnDblClick = ListDblClick; // li_Group1.bDrawSelectionBorder = true; li_Group2 = lb_Group2.List; li_Group2.TextAlign = TXTA_Left; li_Group2.bMultiSelect = true; li_Group2.bDropSource = true; li_Group2.bDropTarget = true; li_Group2.OnDblClick = ListDblClick; li_Group3 = lb_Group3.List; li_Group3.TextAlign = TXTA_Left; li_Group3.bMultiSelect = true; li_Group3.bDropSource = true; li_Group3.bDropTarget = true; li_Group3.OnDblClick = ListDblClick; li_Group4 = lb_Group4.List; li_Group4.TextAlign = TXTA_Left; li_Group4.bMultiSelect = true; li_Group4.bDropSource = true; li_Group4.bDropTarget = true; li_Group4.OnDblClick = ListDblClick; li_Group5 = lb_Group5.List; li_Group5.TextAlign = TXTA_Left; li_Group5.bMultiSelect = true; li_Group5.bDropSource = true; li_Group5.bDropTarget = true; li_Group5.OnDblClick = ListDblClick; li_Group6 = lb_Group6.List; li_Group6.TextAlign = TXTA_Left; li_Group6.bMultiSelect = true; li_Group6.bDropSource = true; li_Group6.bDropTarget = true; li_Group6.OnDblClick = ListDblClick; li_Group7 = lb_Group7.List; li_Group7.TextAlign = TXTA_Left; li_Group7.bMultiSelect = true; li_Group7.bDropSource = true; li_Group7.bDropTarget = true; li_Group7.OnDblClick = ListDblClick; li_Group8 = lb_Group8.List; li_Group8.TextAlign = TXTA_Left; li_Group8.bMultiSelect = true; li_Group8.bDropSource = true; li_Group8.bDropTarget = true; li_Group8.OnDblClick = ListDblClick; li_Group9 = lb_Group9.List; li_Group9.TextAlign = TXTA_Left; li_Group9.bMultiSelect = true; li_Group9.bDropSource = true; li_Group9.bDropTarget = true; li_Group9.OnDblClick = ListDblClick; li_Presets = lb_Presets.List; li_Presets.TextAlign = TXTA_Left; li_Presets.bMultiSelect = true; li_Presets.bDropSource = true; li_Presets.bDropTarget = true; li_Presets.OnDblClick = ListDblClick; colorG = chr(27)$chr(1)$chr(240)$chr(1); colorR = chr(27)$chr(240)$chr(1)$chr(1); refreshLists(); refreshPresetNames(); } event opened(GUIComponent sender) { // local int i; // local string KeyName; // local array KeyNames; super.opened(sender); pc = playerOwner(); SetupHmi(); refreshLists(); refreshPresetNames(); cb_UseVanillaManagement.SetComponentValue(a_weaponManager.bUseVanillaManagement, true); cb_FastWeaponChanging.SetComponentValue(a_weaponManager.bFastWeaponChanging, true); // write in KeyNames all bind keys that onen this window to use 'closeWindowWithBind()' then // CloseKey.Remove(0, CloseKey.Length); // KeyName = PC.ConsoleCommand("BINDINGTOKEY hideMenu"); // Split(KeyName, ",", KeyNames); // for (i = 0; i < KeyNames.Length; i++) // CloseKey[CloseKey.Length] = byte(PC.ConsoleCommand("KEYNUMBER"@KeyNames[i])); } final private function SetupHmi() { local HideMutInteraction tempHmi; forEach AllObjects(class'HideMutInteraction', tempHmi) break; if (tempHmi.a_weaponManager == none) tempHmi.a_weaponManager = pc.Spawn(class'a_WeaponManager'); tempHmi.a_weaponManager.kfpc = KFPlayerController(pc); a_weaponManager = tempHmi.a_weaponManager; } simulated function closed(GUIComponent sender, bool bCancelled) { eb_PresetName.SetComponentValue(""); super.closed(sender, bCancelled); saveChanges(); } simulated function refreshLists() { RefreshGUIList(li_Group1, a_weaponManager.weaponGroup1); RefreshGUIList(li_Group2, a_weaponManager.weaponGroup2); RefreshGUIList(li_Group3, a_weaponManager.weaponGroup3); RefreshGUIList(li_Group4, a_weaponManager.weaponGroup4); RefreshGUIList(li_Group5, a_weaponManager.weaponGroup5); RefreshGUIList(li_Group6, a_weaponManager.weaponGroup6); RefreshGUIList(li_Group7, a_weaponManager.weaponGroup7); RefreshGUIList(li_Group8, a_weaponManager.weaponGroup8); a_weaponManager.updateUnusedWeapons(); RefreshGUIList(li_Group9, a_weaponManager.weaponGroup9); } final private function RefreshGUIList(GUIList gList, array weaponGroup) { local int i; local class tempWeaponClass; // cleanup first gList.clear(); for (i = 0; i < weaponGroup.length; i++) { tempWeaponClass = class(DynamicLoadObject(weaponGroup[i], class'Class', true)); if (tempWeaponClass != none) gList.add(getColor(weaponGroup[i])$tempWeaponClass.default.itemName,,weaponGroup[i]); else gList.add(colorR$weaponGroup[i],,weaponGroup[i]); } } simulated function refreshPresetNames() { local array names; local int i; li_Presets.clear(); names = a_weaponManager.getAllPresetNames(); for ( i = 0; i < names.length; i++ ) li_Presets.add(names[i]); } simulated function string getColor(string weaponClass) { local Inventory inv; if (pc.pawn == none) return ""; for (inv = pc.pawn.inventory; inv != none; inv = inv.inventory) { if (string(inv.class) ~= weaponClass) { return colorG; } } return ""; } simulated function saveChanges() { local int i; a_weaponManager.clearAllGroups(); for(i = 0; i < li_Group1.elements.length; i++) { a_weaponManager.weaponGroup1[a_weaponManager.weaponGroup1.length] = li_Group1.elements[i].ExtraStrData; } for(i = 0; i < li_Group2.elements.length; i++) { a_weaponManager.weaponGroup2[a_weaponManager.weaponGroup2.length] = li_Group2.elements[i].ExtraStrData; } for(i = 0; i < li_Group3.elements.length; i++) { a_weaponManager.weaponGroup3[a_weaponManager.weaponGroup3.length] = li_Group3.elements[i].ExtraStrData; } for(i = 0; i < li_Group4.elements.length; i++) { a_weaponManager.weaponGroup4[a_weaponManager.weaponGroup4.length] = li_Group4.elements[i].ExtraStrData; } for(i = 0; i < li_Group5.elements.length; i++) { a_weaponManager.weaponGroup5[a_weaponManager.weaponGroup5.length] = li_Group5.elements[i].ExtraStrData; } for(i = 0; i < li_Group6.elements.length; i++) { a_weaponManager.weaponGroup6[a_weaponManager.weaponGroup6.length] = li_Group6.elements[i].ExtraStrData; } for(i = 0; i < li_Group7.elements.length; i++) { a_weaponManager.weaponGroup7[a_weaponManager.weaponGroup7.length] = li_Group7.elements[i].ExtraStrData; } for(i = 0; i < li_Group8.elements.length; i++) { a_weaponManager.weaponGroup8[a_weaponManager.weaponGroup8.length] = li_Group8.elements[i].ExtraStrData; } a_weaponManager.updateUnusedWeapons(); //weaponGroup9 a_weaponManager.saveWeaponList("CurrentWeaponList"); } function checkboxUsed(GUIComponent sender) { switch (sender) { case cb_UseVanillaManagement: a_weaponManager.bUseVanillaManagement = cb_UseVanillaManagement.isChecked(); a_weaponManager.SaveConfig(); break; case cb_FastWeaponChanging: a_weaponManager.bFastWeaponChanging = cb_FastWeaponChanging.isChecked(); a_weaponManager.SaveConfig(); break; } } simulated function bool buttonClicked(GUIComponent sender) { switch (sender) { case b_VanillaReset: a_weaponManager.fullReset(); refreshLists(); break; case b_BasicCleaning: a_weaponManager.basicCleaning(); refreshLists(); break; case b_FullCleaning: a_weaponManager.fullCleaning(); refreshLists(); break; case b_SavePreset: addNewPreset(); break; case b_DeletePreset: a_weaponManager.deleteWeaponList(li_Presets.get()); li_Presets.removeItem(li_Presets.get()); eb_PresetName.SetComponentValue(""); break; } // ADDITION return true; } function bool ListDblClick(GUIComponent C) { if (C == li_Group1 || C == li_Group2 || C == li_Group3 || C == li_Group4 || C == li_Group5 || C == li_Group6 || C == li_Group7 || C == li_Group8 || C == li_Group9) return buyWeaponFromList(c); if (C == li_Presets) { a_weaponManager.loadWeaponList(li_Presets.get()); refreshLists(); return true; } return false; } final private function bool buyWeaponFromList(GUIList gList) { local class weaponToBuy; if (KFPawn(pc.pawn) == none) return false; weaponToBuy = class(DynamicLoadObject(gList.getExtra(), class'Class', true)); if (weaponToBuy == none) return false; KFPawn(pc.pawn).serverBuyWeapon(weaponToBuy, 0); saveChanges(); refreshLists(); return true; } function addNewPreset() { if (len(eb_PresetName.getComponentValue()) == 0) { pc.clientMessage("Please, type at least 1 character of preset's name"); return; } if (inStr(eb_PresetName.getComponentValue(), " ") > 0) { pc.clientMessage("Don't use spaces at preset's name"); return; } saveChanges(); a_weaponManager.saveWeaponList(eb_PresetName.GetComponentValue()); li_Presets.add(eb_PresetName.GetComponentValue()); eb_PresetName.SetComponentValue(""); } //============================================================================= defaultproperties { Begin Object Class=BackgroundArea Name=BackgroundArea_Group1 WinTop=0.100000 WinLeft=0.180000 WinWidth=0.150000 WinHeight=0.304000 End Object ba_Group1=BackgroundArea'HideMut.menu_WeaponManager.BackgroundArea_Group1' Begin Object Class=BackgroundArea Name=BackgroundArea_Group2 WinTop=0.100000 WinLeft=0.345000 WinWidth=0.150000 WinHeight=0.304000 End Object ba_Group2=BackgroundArea'HideMut.menu_WeaponManager.BackgroundArea_Group2' Begin Object Class=BackgroundArea Name=BackgroundArea_Group3 WinTop=0.100000 WinLeft=0.510000 WinWidth=0.150000 WinHeight=0.304000 End Object ba_Group3=BackgroundArea'HideMut.menu_WeaponManager.BackgroundArea_Group3' Begin Object Class=BackgroundArea Name=BackgroundArea_Group4 WinTop=0.100000 WinLeft=0.675000 WinWidth=0.150000 WinHeight=0.304000 End Object ba_Group4=BackgroundArea'HideMut.menu_WeaponManager.BackgroundArea_Group4' Begin Object Class=BackgroundArea Name=BackgroundArea_Group5 WinTop=0.100000 WinLeft=0.840000 WinWidth=0.150000 WinHeight=0.304000 End Object ba_Group5=BackgroundArea'HideMut.menu_WeaponManager.BackgroundArea_Group5' Begin Object Class=BackgroundArea Name=BackgroundArea_Group6 WinTop=0.450000 WinLeft=0.180000 WinWidth=0.150000 WinHeight=0.304000 End Object ba_Group6=BackgroundArea'HideMut.menu_WeaponManager.BackgroundArea_Group6' Begin Object Class=BackgroundArea Name=BackgroundArea_Group7 WinTop=0.450000 WinLeft=0.345000 WinWidth=0.150000 WinHeight=0.304000 End Object ba_Group7=BackgroundArea'HideMut.menu_WeaponManager.BackgroundArea_Group7' Begin Object Class=BackgroundArea Name=BackgroundArea_Group8 WinTop=0.450000 WinLeft=0.510000 WinWidth=0.150000 WinHeight=0.304000 End Object ba_Group8=BackgroundArea'HideMut.menu_WeaponManager.BackgroundArea_Group8' Begin Object Class=BackgroundArea Name=BackgroundArea_Group9 WinTop=0.100000 WinLeft=0.015000 WinWidth=0.150000 WinHeight=0.800000 End Object ba_Group9=BackgroundArea'HideMut.menu_WeaponManager.BackgroundArea_Group9' Begin Object Class=BackgroundArea Name=BackgroundArea_Presets WinTop=0.450000 WinLeft=0.840000 WinWidth=0.150000 WinHeight=0.304000 End Object ba_Presets=BackgroundArea'HideMut.menu_WeaponManager.BackgroundArea_Presets' Begin Object Class=GUIListBox Name=ListBox_Group1 bVisibleWhenEmpty=True OnCreateComponent=ListBox_Group1.InternalOnCreateComponent WinTop=0.102000 WinLeft=0.182000 WinWidth=0.146000 WinHeight=0.300000 End Object lb_Group1=GUIListBox'HideMut.menu_WeaponManager.ListBox_Group1' Begin Object Class=GUIListBox Name=ListBox_Group2 bVisibleWhenEmpty=True OnCreateComponent=ListBox_Group2.InternalOnCreateComponent WinTop=0.102000 WinLeft=0.347000 WinWidth=0.146000 WinHeight=0.300000 End Object lb_Group2=GUIListBox'HideMut.menu_WeaponManager.ListBox_Group2' Begin Object Class=GUIListBox Name=ListBox_Group3 bVisibleWhenEmpty=True OnCreateComponent=ListBox_Group3.InternalOnCreateComponent WinTop=0.102000 WinLeft=0.512000 WinWidth=0.146000 WinHeight=0.300000 End Object lb_Group3=GUIListBox'HideMut.menu_WeaponManager.ListBox_Group3' Begin Object Class=GUIListBox Name=ListBox_Group4 bVisibleWhenEmpty=True OnCreateComponent=ListBox_Group4.InternalOnCreateComponent WinTop=0.102000 WinLeft=0.677000 WinWidth=0.146000 WinHeight=0.300000 End Object lb_Group4=GUIListBox'HideMut.menu_WeaponManager.ListBox_Group4' Begin Object Class=GUIListBox Name=ListBox_Group5 bVisibleWhenEmpty=True OnCreateComponent=ListBox_Group5.InternalOnCreateComponent WinTop=0.102000 WinLeft=0.842000 WinWidth=0.146000 WinHeight=0.300000 End Object lb_Group5=GUIListBox'HideMut.menu_WeaponManager.ListBox_Group5' Begin Object Class=GUIListBox Name=ListBox_Group6 bVisibleWhenEmpty=True OnCreateComponent=ListBox_Group6.InternalOnCreateComponent WinTop=0.452000 WinLeft=0.182000 WinWidth=0.146000 WinHeight=0.300000 End Object lb_Group6=GUIListBox'HideMut.menu_WeaponManager.ListBox_Group6' Begin Object Class=GUIListBox Name=ListBox_Group7 bVisibleWhenEmpty=True OnCreateComponent=ListBox_Group7.InternalOnCreateComponent WinTop=0.452000 WinLeft=0.347000 WinWidth=0.146000 WinHeight=0.300000 End Object lb_Group7=GUIListBox'HideMut.menu_WeaponManager.ListBox_Group7' Begin Object Class=GUIListBox Name=ListBox_Group8 bVisibleWhenEmpty=True OnCreateComponent=ListBox_Group8.InternalOnCreateComponent WinTop=0.452000 WinLeft=0.512000 WinWidth=0.146000 WinHeight=0.300000 End Object lb_Group8=GUIListBox'HideMut.menu_WeaponManager.ListBox_Group8' Begin Object Class=GUIListBox Name=ListBox_Group9 bVisibleWhenEmpty=True OnCreateComponent=ListBox_Group9.InternalOnCreateComponent WinTop=0.102000 WinLeft=0.017000 WinWidth=0.146000 WinHeight=0.796000 End Object lb_Group9=GUIListBox'HideMut.menu_WeaponManager.ListBox_Group9' Begin Object Class=GUIListBox Name=ListBox_Presets bVisibleWhenEmpty=True OnCreateComponent=ListBox_Presets.InternalOnCreateComponent WinTop=0.452000 WinLeft=0.842000 WinWidth=0.146000 WinHeight=0.300000 End Object lb_Presets=GUIListBox'HideMut.menu_WeaponManager.ListBox_Presets' Begin Object Class=GUIButton Name=VanillaResetButton Caption="Full reset" WinTop=0.450000 WinLeft=0.675000 WinWidth=0.150000 WinHeight=0.080000 OnClick=menu_WeaponManager.ButtonClicked OnKeyEvent=VanillaResetButton.InternalOnKeyEvent End Object b_VanillaReset=GUIButton'HideMut.menu_WeaponManager.VanillaResetButton' Begin Object Class=GUIButton Name=BasicCleaningButton Caption="Basic cleaning" WinTop=0.550000 WinLeft=0.675000 WinWidth=0.150000 WinHeight=0.080000 OnClick=menu_WeaponManager.ButtonClicked OnKeyEvent=BasicCleaningButton.InternalOnKeyEvent End Object b_BasicCleaning=GUIButton'HideMut.menu_WeaponManager.BasicCleaningButton' Begin Object Class=GUIButton Name=FullCleaningButton Caption="Full cleaning" WinTop=0.650000 WinLeft=0.675000 WinWidth=0.150000 WinHeight=0.080000 OnClick=menu_WeaponManager.ButtonClicked OnKeyEvent=FullCleaningButton.InternalOnKeyEvent End Object b_FullCleaning=GUIButton'HideMut.menu_WeaponManager.FullCleaningButton' Begin Object Class=GUIButton Name=SavePresetButton Caption="Save" WinTop=0.787000 WinLeft=0.840000 WinWidth=0.074000 WinHeight=0.050000 OnClick=menu_WeaponManager.ButtonClicked OnKeyEvent=SavePresetButton.InternalOnKeyEvent End Object b_SavePreset=GUIButton'HideMut.menu_WeaponManager.SavePresetButton' Begin Object Class=GUIButton Name=DeletePresetButton Caption="Delete" WinTop=0.787000 WinLeft=0.916000 WinWidth=0.073000 WinHeight=0.050000 OnClick=menu_WeaponManager.ButtonClicked OnKeyEvent=DeletePresetButton.InternalOnKeyEvent End Object b_DeletePreset=GUIButton'HideMut.menu_WeaponManager.DeletePresetButton' Begin Object Class=moEditBox Name=EditBoxPresetName CaptionWidth=0.000000 OnCreateComponent=EditBoxPresetName.InternalOnCreateComponent WinTop=0.754000 WinLeft=0.840000 WinWidth=0.150000 End Object eb_PresetName=moEditBox'HideMut.menu_WeaponManager.EditBoxPresetName' Begin Object Class=moCheckBox Name=checkBox_UseVanillaManagement Caption="Native system" OnCreateComponent=checkBox_UseVanillaManagement.InternalOnCreateComponent WinTop=0.020000 WinLeft=0.050000 WinWidth=0.100000 WinHeight=0.100000 OnChange=menu_WeaponManager.checkboxUsed End Object cb_UseVanillaManagement=moCheckBox'HideMut.menu_WeaponManager.checkBox_UseVanillaManagement' Begin Object Class=moCheckBox Name=checkBox_FastWeaponChanging Caption="Instaswitching" OnCreateComponent=checkBox_FastWeaponChanging.InternalOnCreateComponent WinTop=0.020000 WinLeft=0.250000 WinWidth=0.100000 WinHeight=0.100000 OnChange=menu_WeaponManager.checkboxUsed End Object cb_FastWeaponChanging=moCheckBox'HideMut.menu_WeaponManager.checkBox_FastWeaponChanging' Begin Object Class=GUILabel Name=Group1Label Caption="Group 1" TextAlign=TXTA_Center VertAlign=TXTA_Center StyleName="TextLabel" WinTop=0.070000 WinLeft=0.180000 WinWidth=0.150000 WinHeight=0.020000 End Object l_Group1=GUILabel'HideMut.menu_WeaponManager.Group1Label' Begin Object Class=GUILabel Name=Group2Label Caption="Group 2" TextAlign=TXTA_Center VertAlign=TXTA_Center StyleName="TextLabel" WinTop=0.070000 WinLeft=0.345000 WinWidth=0.150000 WinHeight=0.020000 End Object l_Group2=GUILabel'HideMut.menu_WeaponManager.Group2Label' Begin Object Class=GUILabel Name=Group3Label Caption="Group 3" TextAlign=TXTA_Center VertAlign=TXTA_Center StyleName="TextLabel" WinTop=0.070000 WinLeft=0.512000 WinWidth=0.150000 WinHeight=0.020000 End Object l_Group3=GUILabel'HideMut.menu_WeaponManager.Group3Label' Begin Object Class=GUILabel Name=Group4Label Caption="Group 4" TextAlign=TXTA_Center VertAlign=TXTA_Center StyleName="TextLabel" WinTop=0.070000 WinLeft=0.677000 WinWidth=0.150000 WinHeight=0.020000 End Object l_Group4=GUILabel'HideMut.menu_WeaponManager.Group4Label' Begin Object Class=GUILabel Name=Group5Label Caption="Group 5" TextAlign=TXTA_Center VertAlign=TXTA_Center StyleName="TextLabel" WinTop=0.070000 WinLeft=0.842000 WinWidth=0.150000 WinHeight=0.020000 End Object l_Group5=GUILabel'HideMut.menu_WeaponManager.Group5Label' Begin Object Class=GUILabel Name=Group6Label Caption="Group 6" TextAlign=TXTA_Center VertAlign=TXTA_Center StyleName="TextLabel" WinTop=0.422000 WinLeft=0.180000 WinWidth=0.150000 WinHeight=0.020000 End Object l_Group6=GUILabel'HideMut.menu_WeaponManager.Group6Label' Begin Object Class=GUILabel Name=Group7Label Caption="Group 7" TextAlign=TXTA_Center VertAlign=TXTA_Center StyleName="TextLabel" WinTop=0.422000 WinLeft=0.345000 WinWidth=0.150000 WinHeight=0.020000 End Object l_Group7=GUILabel'HideMut.menu_WeaponManager.Group7Label' Begin Object Class=GUILabel Name=Group8Label Caption="Group 8" TextAlign=TXTA_Center VertAlign=TXTA_Center StyleName="TextLabel" WinTop=0.422000 WinLeft=0.510000 WinWidth=0.150000 WinHeight=0.020000 End Object l_Group8=GUILabel'HideMut.menu_WeaponManager.Group8Label' Begin Object Class=GUILabel Name=Group9Label Caption="Group 9 [Unused weapons]" TextAlign=TXTA_Center VertAlign=TXTA_Center StyleName="TextLabel" WinTop=0.070000 WinLeft=0.015000 WinWidth=0.150000 WinHeight=0.020000 End Object l_Group9=GUILabel'HideMut.menu_WeaponManager.Group9Label' Begin Object Class=GUILabel Name=PresetsLabel Caption="Presets" TextAlign=TXTA_Center VertAlign=TXTA_Center StyleName="TextLabel" WinTop=0.422000 WinLeft=0.842000 WinWidth=0.150000 WinHeight=0.020000 End Object l_Presets=GUILabel'HideMut.menu_WeaponManager.PresetsLabel' bRenderWorld=True bRequire640x480=False bPersistent=True bAllowedAsLast=True BackgroundRStyle=MSTY_Modulated }