import { Menu, Point, UIMenuItem, Color } from 'NativeUI'; import moneyFormat from '../moneyformat'; import InputHelper from '../inputhelper'; export default function house(globalData: GlobalData) { var houseMenu: Menu; var houseData: any; var houseState: number; var keyBound = false; mp.events.add("SERVER:ShowHouseMenu", (dataStr, state: number) => { houseData = JSON.parse(dataStr); houseState = state; mp.gui.chat.push(state.toString()); mp.gui.chat.push(dataStr); mp.game.ui.setTextComponentFormat('STRING'); mp.game.ui.addTextComponentSubstringPlayerName('Drücke ~INPUT_CONTEXT~, um das Hausmenü öffnen'); mp.game.ui.displayHelpTextFromStringLabel(0, true, true, -1); mp.keys.bind(0x45, false, keyPressHandler); keyBound = true; }); function keyPressHandler() { mp.gui.chat.push("open menu"); mp.game.ui.clearHelp(true); houseMenu = new Menu("Hausverwaltung", houseData.Type, new Point(50, 50), null, null); globalData.InMenu = true; mp.gui.chat.push(houseState.toString()); var rentInItem: UIMenuItem; var buyHouseItem: UIMenuItem; var setRentalFeeItem: UIMenuItem; var cancelRentalsItem: UIMenuItem; var houseRentals = 0; if (houseData.Rentals) houseRentals = houseData.Rentals.length; if (houseState === -1) { // Keine Beziehung zum Haus mp.gui.chat.push("einmieten"); rentInItem = new UIMenuItem("Einmieten", "Miete dich in das Haus ein"); rentInItem.SetRightLabel(moneyFormat(houseData.RentalFee.toString(), 0)); houseMenu.AddItem(rentInItem); } else if (houseState === 0) { // Haus hat keinen Eigentümer mp.gui.chat.push("kaufen"); buyHouseItem = new UIMenuItem("Haus kaufen", "Kaufe das Haus"); buyHouseItem.SetRightLabel(moneyFormat(houseData.Price, 0) + "$"); houseMenu.AddItem(buyHouseItem); } else if (houseState === 1) { // Hausbesitzer mp.gui.chat.push("besitzer"); setRentalFeeItem = new UIMenuItem("Miete setzen", "Setze den Mietpreis"); setRentalFeeItem.SetRightLabel(moneyFormat(houseData.RentalFee, 0) + "$"); houseMenu.AddItem(setRentalFeeItem); cancelRentalsItem = new UIMenuItem("Mieter", "Liste deine Mieter auf"); cancelRentalsItem.SetRightLabel(houseRentals.toString()); if (houseRentals > 0) { var cancelRentalsMenu = new Menu("Mieter", "Kündige einen Mieter", new Point(50, 50), null, null); cancelRentalsMenu.Visible = false; houseData.Rentals.forEach(rental => { var item = new UIMenuItem(rental.Name, ""); item.SetRightLabel("Kündigen"); cancelRentalsMenu.AddItem(item); }); houseMenu.BindMenuToItem(cancelRentalsMenu, cancelRentalsItem); } } var cancelItem = new UIMenuItem("Abbrechen"); cancelItem.BackColor = new Color(213, 0, 0); cancelItem.HighlightedBackColor = new Color(229, 57, 53); houseMenu.AddItem(cancelItem); houseMenu.Open(); houseMenu.ItemSelect.on((item, index) => { if (item === cancelItem) { mp.events.call("SERVER:CloseHouseMenu"); } else if (item === buyHouseItem) { mp.events.callRemote("CLIENT:House_BuyHouse"); mp.events.call("SERVER:CloseHouseMenu"); } else if (item === setRentalFeeItem) { var rentalFeeInput = new InputHelper("Wie viel soll die Miete betragen?", globalData); rentalFeeInput.getValue(data => { if (isNaN(data)) { return; } var rentalFee = parseInt(data); mp.events.callRemote("CLIENT:House_SetRentalFee", rentalFee); mp.events.call("SERVER:CloseHouseMenu"); }); } }); } mp.events.add("SERVER:CloseHouseMenu", () => { mp.game.ui.clearHelp(true); globalData.InMenu = false; if (houseMenu != null) { houseMenu.Close(); } if (keyBound) { keyBound = false; mp.keys.unbind(0x45, false, keyPressHandler); } }); }