Files
reallife-gamemode/Client/Tuning/main.js
2018-11-29 22:03:07 +01:00

280 lines
7.7 KiB
JavaScript

/**
* @overview Life of German Reallife - Tuning tuning.js
* @author hydrant
* @copyright (c) 2008 - 2018 Life of German
*/
var keyBound = false;
var carModTypes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 22, 25, 27, 28, 30, 33, 34, 35, 38, 46, 48];
var carModSlotName = [
{ Slot: 0, Name: "Spoiler" }, // 0
{ Slot: 1, Name: "Frontstoßstange"}, // 1
{ Slot: 2, Name: "Heckstoßstange"}, // 2
{ Slot: 3, Name: "Seitenschweller"}, // 3
{ Slot: 4, Name: "Auspuff"}, // 4
{ Slot: 5, Name: "Rahmen"}, // 5
{ Slot: 6, Name: "Kühlergrill"}, // 6
{ Slot: 7, Name: "Motorhaube"}, // 7
{ Slot: 8, Name: "Linker Kotflügel"}, // 8
{ Slot: 9, Name: "Rechter Kotflügel"}, // 9
{ Slot: 10, Name: "Dach"}, // 10
{ Slot: 11, Name: "Motor" }, // 11
{ Slot: 12, Name: "Bremsen"}, // 12
{ Slot: 13, Name: "Getriebe"}, // 13
{ Slot: 14, Name: "Hupe"}, // 14
{ Slot: 15, Name: "Federung"}, // 15
{ Slot: 18, Name: "Turbo"}, // 18
{ Slot: 22, Name: "Licht"}, // 22
{ Slot: 23, Name: "Reifen"} // 23
];
var customPartNames = [
{
Model: 1093792632,
Names: [
{
Slot: 8,
Name: "Lüftungsschlitze"
}
]
},
{
Model: 159274291,
Names: [
{
Slot: 8,
Name: "Kotflügel"
}
]
},
{
Model: 223240013,
Names: [
{
Slot: 9,
Name: "Heckkotflügel"
}
]
},
{
Model: 1031562256,
Names: [
{
Slot: 5,
Name: "Stoßdämpfer"
}
]
}
];
var bikeModTypes = [];
const NativeUI = require("nativeui");
const Menu = NativeUI.Menu;
const UIMenuItem = NativeUI.UIMenuItem;
const UIMenuListItem = NativeUI.UIMenuListItem;
const UIMenuCheckboxItem = NativeUI.UIMenuCheckboxItem;
const UIMenuSliderItem = NativeUI.UIMenuSliderItem;
const BadgeStyle = NativeUI.BadgeStyle;
const Point = NativeUI.Point;
const ItemsCollection = NativeUI.ItemsCollection;
const Color = NativeUI.Color;
const ListItem = NativeUI.ListItem;
var mainMenu;
mp.events.add('showTuningInfo', () => {
mp.game.ui.setTextComponentFormat('STRING');
mp.game.ui.addTextComponentSubstringPlayerName('Drücke ~INPUT_CONTEXT~, um dein Fahrzeug zu modifizieren');
mp.game.ui.displayHelpTextFromStringLabel(0, true, true, -1);
mp.keys.bind(0x45, false, keyPressHandler);
keyBound = true;
});
mp.events.add('hideTuningInfo', (unbind) => {
mp.game.ui.clearHelp(true);
mp.gui.chat.show(true);
if (typeof mainMenu !== "undefined" && unbind) {
mainMenu.Visible = false;
globalData.InTuning = false;
}
if (keyBound && unbind) {
mp.keys.unbind(0x45, false, keyPressHandler);
keyBound = false;
}
});
function keyPressHandler() {
mp.events.callRemote("startPlayerTuning");
}
mp.events.add("showTuningMenu", () => {
mp.events.call("hideTuningInfo" , false);
mp.gui.chat.show(false);
var localPlayer = mp.players.local;
var localVehicle = localPlayer.vehicle;
if (typeof mainMenu !== "undefined" && mainMenu.Visible) {
return;
}
globalData.InTuning = true;
mainMenu = new Menu("Fahrzeugwerkstatt", "Modifiziere dein Fahrzeug", new Point(50, 50));
carModTypes.forEach((modType) => {
if (localVehicle.getModSlotName(modType) !== "undefined") {
var slotName = mp.game.ui.getLabelText(localVehicle.getModSlotName(modType));
if (slotName === "NULL") {
slotName = getCustomName(localVehicle.model, modType);
if (slotName === undefined) slotName = getSlotName(modType);
}
if (slotName === "undefined") slotName = "Slot " + modType;
var menuItem = new UIMenuItem(slotName);
if(localVehicle.getNumMods(modType) !== 0) mainMenu.AddItem(menuItem);
}
});
mainMenu.Visible = true;
mainMenu.ItemSelect.on((item) => {
var modSlot = getSlotId(item.Text);
if (item.Text.startsWith("Slot")) {
restStr = item.Text.substring(5);
modSlot = parseInt(restStr);
}
var currentMod = localVehicle.getMod(modSlot);
var currentModItem;
var modNum = localVehicle.getNumMods(modSlot);
var modMenu = new Menu(item.Text, "Änderung: " + item.Text, new Point(50, 50));
for (var i = -1; i < modNum; i++) {
var modItem;
if (i === -1) {
modItem = new UIMenuItem("Serie", "");
} else {
var modName = localVehicle.getModTextLabel(modSlot, i);
var realModName = mp.game.ui.getLabelText(modName);
modItem = new UIMenuItem(realModName, "");
}
if (i === currentMod) {
modItem.SetRightBadge(BadgeStyle.Car);
currentModItem = modItem;
modFound = true;
}
modMenu.AddItem(modItem);
}
modMenu.ItemSelect.on((selectedItem, index) => {
if (currentModItem !== undefined) {
currentModItem.SetRightBadge(BadgeStyle.None);
}
if (selectedItem !== undefined) {
selectedItem.SetRightBadge(BadgeStyle.Car);
currentModItem = selectedItem;
}
mp.events.callRemote("setVehicleMod", modSlot, index);
if (index === 0) index = -1;
currentMod = index - 1;
});
modMenu.IndexChange.on((index) => {
if (index === 0) index = -1;
localVehicle.setMod(modSlot, index - 1);
});
modMenu.MenuClose.on(() => {
localVehicle.setMod(modSlot, currentMod);
mainMenu.Visible = true;
modMenu.Visible = false;
});
mainMenu.Visible = false;
modMenu.Visible = true;
});
mainMenu.MenuClose.on(() => {
globalData.InTuning = false;
mp.events.call("hideTuningInfo", false);
});
});
mp.events.add("playerLeaveVehicle", () => {
mp.events.call("hideTuningInfo", true);
});
function getSlotName(slot) {
var toReturn = "undefined";
carModSlotName.forEach((name) => {
if (name.Slot === slot) toReturn = name.Name;
});
return toReturn;
}
function getSlotId(slotName) {
var toReturn = "undefined";
carModSlotName.forEach((name) => {
if (name.Name === slotName) toReturn = name.Slot;
});
if (toReturn === "undefined") {
toReturn = getCustomId(mp.players.local.vehicle.model, slotName);
if (toReturn === undefined) {
carModTypes.forEach((modType) => {
if (mp.game.ui.getLabelText(mp.players.local.vehicle.getModSlotName(modType)) === slotName) toReturn = getSlotId(getSlotName(modType));
});
}
}
return toReturn;
}
function getCustomName(model, slot) {
var toReturn = undefined;
customPartNames.forEach((cpn) => {
if (cpn.Model === model) {
cpn.Names.forEach((names) => {
if (names.Slot === slot) toReturn = names.Name;
});
}
});
return toReturn;
}
function getCustomId(model, name) {
var toReturn = undefined;
customPartNames.forEach((cpn) => {
if (cpn.Model === model) {
cpn.Names.forEach((names) => {
if (names.Name === name) toReturn = names.Slot;
});
}
});
return toReturn;
}