Merge develop into feature/inventory-system
This commit is contained in:
5
Client/DoorManager/doormanager.js
Normal file
5
Client/DoorManager/doormanager.js
Normal file
@@ -0,0 +1,5 @@
|
||||
mp.events.add('changeDoorState', (doorHash, x, y, z, locked, p5, p6, p7) => {
|
||||
locked === 1 ? locked = true : locked = false;
|
||||
|
||||
mp.game.object.doorControl(doorHash, x, y, z, locked, p5, p6, p7);
|
||||
});
|
||||
@@ -11,24 +11,6 @@ mp.events.add('manageFactionRanks', (ranks) => {
|
||||
if (manageFactionRanksBrowser !== null) return;
|
||||
manageFactionRanksBrowser = mp.browsers.new('package://FactionManagement/Ranks/index.html');
|
||||
|
||||
//var testRanks = {
|
||||
// FactionId: 3,
|
||||
// Ranks: [
|
||||
// {
|
||||
// Id: 5,
|
||||
// Name: "Officer"
|
||||
// },
|
||||
// {
|
||||
// Id: 6,
|
||||
// Name: "Sergeant"
|
||||
// }
|
||||
// ]
|
||||
//};
|
||||
|
||||
//var json = JSON.stringify(testRanks);
|
||||
|
||||
//mp.events.callRemote('OnFactionRanksEdit', json);
|
||||
|
||||
mp.gui.chat.activate(false);
|
||||
rankData = JSON.parse(ranks);
|
||||
});
|
||||
|
||||
@@ -49,7 +49,7 @@ mp.events.add("respawnDeathPlayer", () => {
|
||||
});
|
||||
|
||||
mp.events.add("updateDutyMedics", (count) => {
|
||||
if (count == true)
|
||||
if (count === true)
|
||||
{
|
||||
dutyMedics++;
|
||||
}
|
||||
@@ -70,11 +70,11 @@ mp.events.add("render", () => {
|
||||
if (dutyMedics > 0) {
|
||||
medicString = "Derzeit sind ~g~" + dutyMedics + " Medics ~s~im Dienst ~c~und versuchen dich wiederzubeleben...";
|
||||
} else {
|
||||
medicString = "Derzeit sind ~r~keine Medics ~s~im Dienst."
|
||||
medicString = "Derzeit sind ~r~keine Medics ~s~im Dienst.";
|
||||
}
|
||||
|
||||
deathSeconds = respawnTime - Math.floor(currentDate.getTime() / 1000);
|
||||
var alpha = fade + (Math.floor((currentDate.getTime() / 1000) - (deathDate.getTime() / 1000)));
|
||||
var alpha = fade + Math.floor(currentDate.getTime() / 1000 - deathDate.getTime() / 1000);
|
||||
if (deathSeconds >= 0) {
|
||||
mp.game.graphics.drawSprite("Mptattoos", "clearout", 0.625, 0.52, 0.1, 0.1, 0, 255, 255, 255, 236);
|
||||
mp.game.graphics.drawText("Respawn in: ~y~" + deathSeconds, [0.5, 0.5],
|
||||
@@ -83,14 +83,14 @@ mp.events.add("render", () => {
|
||||
color: [255, 255, 255, 255],
|
||||
scale: [0.8, 0.8],
|
||||
outline: true
|
||||
})
|
||||
});
|
||||
mp.game.graphics.drawText(medicString, [0.5, 0.975],
|
||||
{
|
||||
font: 4,
|
||||
color: [255, 255, 255, 255],
|
||||
scale: [0.4, 0.4],
|
||||
outline: true
|
||||
})
|
||||
});
|
||||
mp.game.graphics.drawRect(0.5, 0.5, 1, 1, 0, 0, 0, alpha);
|
||||
|
||||
} else {
|
||||
|
||||
@@ -9,6 +9,7 @@ var dateString;
|
||||
var timeString;
|
||||
|
||||
var draw = false;
|
||||
var editMode = false;
|
||||
|
||||
let posX = 0.92;
|
||||
let posY = 0.45;
|
||||
@@ -43,6 +44,26 @@ mp.events.add("draw", (pName, pId) => {
|
||||
|
||||
});
|
||||
|
||||
mp.events.add("toggleEditMode", (toggle) => {
|
||||
editMode = toggle;
|
||||
});
|
||||
|
||||
mp.events.add("toggleUi", (show) => {
|
||||
if (show === false) {
|
||||
draw = false;
|
||||
mp.game.ui.displayRadar(false);
|
||||
mp.game.ui.displayHud(false);
|
||||
mp.gui.chat.show(false);
|
||||
globalData.HideGui = true;
|
||||
} else {
|
||||
draw = true;
|
||||
mp.game.ui.displayRadar(true);
|
||||
mp.game.ui.displayHud(true);
|
||||
mp.gui.chat.show(true);
|
||||
globalData.HideGui = false;
|
||||
}
|
||||
});
|
||||
|
||||
//function currencyFormatDE(num) {
|
||||
// return ('$' + num.toFixed(2).replace('.', ',').replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.'));
|
||||
//}
|
||||
@@ -173,4 +194,13 @@ mp.events.add("render", () => {
|
||||
outline: true
|
||||
})
|
||||
}
|
||||
if (editMode === true) {
|
||||
mp.game.graphics.drawText("~r~EDIT-MODE AKTIV", [0.5, 0],
|
||||
{
|
||||
font: 4,
|
||||
color: [255, 255, 255, 255],
|
||||
scale: [0.7, 0.7],
|
||||
outline: true
|
||||
})
|
||||
}
|
||||
});
|
||||
57
Client/Gui/nametags.js
Normal file
57
Client/Gui/nametags.js
Normal file
@@ -0,0 +1,57 @@
|
||||
const maxDistance = 25 * 25;
|
||||
const width = 0.03;
|
||||
const height = 0.0065;
|
||||
const border = 0.001;
|
||||
const color = [255, 255, 255, 255];
|
||||
|
||||
mp.nametags.enabled = false;
|
||||
|
||||
mp.events.add('render', (nametags) => {
|
||||
const graphics = mp.game.graphics;
|
||||
const screenRes = graphics.getScreenResolution(0, 0);
|
||||
|
||||
nametags.forEach(nametag => {
|
||||
let [player, x, y, distance] = nametag;
|
||||
|
||||
if (distance <= maxDistance) {
|
||||
let scale = distance / maxDistance;
|
||||
if (scale < 0.6) scale = 0.6;
|
||||
|
||||
var health = player.getHealth();
|
||||
health = health < 100 ? 0 : (health - 100) / 100;
|
||||
|
||||
var armour = player.getArmour() / 100;
|
||||
|
||||
y -= scale * (0.005 * (screenRes.y / 1080));
|
||||
|
||||
mp.game.graphics.drawText(player.name + " (" + player.remoteId + ")", [x, y],
|
||||
{
|
||||
font: 4,
|
||||
color: [255, 255, 255, 255],
|
||||
scale: [0.4, 0.4],
|
||||
outline: true
|
||||
});
|
||||
|
||||
if (mp.game.player.isFreeAimingAtEntity(player.handle)) {
|
||||
let y2 = y + 0.042;
|
||||
|
||||
if (armour > 0) {
|
||||
graphics.drawRect(x, y2, width + border * 2, 0.0085, 0, 0, 0, 200);
|
||||
graphics.drawRect(x, y2, width, height, 150, 150, 150, 255);
|
||||
graphics.drawRect(x - width / 2 * (1 - health), y2, width * health, height, 255, 255, 255, 200);
|
||||
|
||||
x2 = x + width / 2 + border / 2;
|
||||
|
||||
graphics.drawRect(x, y2 + height, width + border * 2, height + border * 2, 0, 0, 0, 200);
|
||||
graphics.drawRect(x, y2 + height, width, height, 41, 66, 78, 255);
|
||||
graphics.drawRect(x - width / 2 * (1 - armour), y2 + height, width * armour, height, 48, 108, 135, 200);
|
||||
}
|
||||
else {
|
||||
graphics.drawRect(x, y2, width + border * 2, height + border * 2, 0, 0, 0, 200);
|
||||
graphics.drawRect(x, y2, width, height, 150, 150, 150, 255);
|
||||
graphics.drawRect(x - width / 2 * (1 - health), y2, width * health, height, 255, 255, 255, 200);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
108
Client/Player/dutycloth.js
Normal file
108
Client/Player/dutycloth.js
Normal file
@@ -0,0 +1,108 @@
|
||||
/**
|
||||
* @overview Life of German Reallife - Player DutyClothes dutyclothes.js
|
||||
* @author VegaZ
|
||||
* @copyright (c) 2008 - 2018 Life of German
|
||||
*/
|
||||
|
||||
const NativeUI = require("nativeui");
|
||||
const Menu = NativeUI.Menu;
|
||||
const UIMenuItem = NativeUI.UIMenuItem;
|
||||
const UIMenuListItem = NativeUI.UIMenuListItem;
|
||||
const UIMenuCheckboxItem = NativeUI.UIMenuCheckboxItem;
|
||||
const BadgeStyle = NativeUI.BadgeStyle;
|
||||
const Point = NativeUI.Point;
|
||||
const ItemsCollection = NativeUI.ItemsCollection;
|
||||
const Color = NativeUI.Color;
|
||||
|
||||
var hats;
|
||||
var tops;
|
||||
var legs;
|
||||
var shoes;
|
||||
|
||||
var hat = -1;
|
||||
var top;
|
||||
var leg;
|
||||
var shoe;
|
||||
|
||||
let screenRes = mp.game.graphics.getScreenResolution(0, 0);
|
||||
|
||||
var dutyMenu;
|
||||
let saveItem = new UIMenuItem("Speichern", "Speichert deine Dienstkleidung");
|
||||
saveItem.BackColor = new Color(13, 71, 161);
|
||||
saveItem.HighlightedBackColor = new Color(25, 118, 210);
|
||||
|
||||
let cancelItem = new UIMenuItem("Abbrechen", "");
|
||||
cancelItem.BackColor = new Color(213, 0, 0);
|
||||
cancelItem.HighlightedBackColor = new Color(229, 57, 53);
|
||||
|
||||
|
||||
//Cloth Menu
|
||||
|
||||
mp.events.add('showDutyClothMenu', (hatsArr, topsArr, legsArr, shoesArr) => {
|
||||
|
||||
mp.gui.chat.activate(false);
|
||||
hats = hatsArr;
|
||||
tops = topsArr;
|
||||
legs = legsArr;
|
||||
shoes = shoesArr;
|
||||
|
||||
dutyMenu = new Menu("Dienstkleidung", "Stelle deine Dienstkleidung zusammen", new Point(0, screenRes.y/2));
|
||||
|
||||
dutyMenu.AddItem(new UIMenuListItem("Hut", "", new ItemsCollection(hats)));
|
||||
dutyMenu.AddItem(new UIMenuListItem("Top", "", new ItemsCollection(tops)));
|
||||
dutyMenu.AddItem(new UIMenuListItem("Hose", "", new ItemsCollection(legs)));
|
||||
dutyMenu.AddItem(new UIMenuListItem("Schuhe", "", new ItemsCollection(shoes)));
|
||||
dutyMenu.AddItem(saveItem);
|
||||
dutyMenu.AddItem(cancelItem);
|
||||
dutyMenu.Visible = true;
|
||||
|
||||
dutyMenu.ListChange.on((item, index) => {
|
||||
switch (item.Text) {
|
||||
case "Hut":
|
||||
if (item.SelectedItem.DisplayText === "Keinen") {
|
||||
hat = -1;
|
||||
mp.events.callRemote("updateDutyProp", 0, -1);
|
||||
} else {
|
||||
hat = parseInt(item.SelectedItem.DisplayText);
|
||||
mp.events.callRemote("updateDutyProp", 0, hat);
|
||||
}
|
||||
break;
|
||||
case "Top":
|
||||
top = parseInt(item.SelectedItem.DisplayText);
|
||||
mp.events.callRemote("updateDutyCloth", 11, top);
|
||||
break;
|
||||
case "Hose":
|
||||
leg = parseInt(item.SelectedItem.DisplayText);
|
||||
mp.events.callRemote("updateDutyCloth", 4, leg);
|
||||
break;
|
||||
case "Schuhe":
|
||||
shoe = parseInt(item.SelectedItem.DisplayText);
|
||||
mp.events.callRemote("updateDutyCloth", 6, shoe);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
dutyMenu.ItemSelect.on((item) => {
|
||||
if (item.Text === "Speichern") {
|
||||
var slotType = [1, 0, 0, 0];
|
||||
var slotId = [0, 11, 4, 6];
|
||||
var clothId = [hat, top, leg, shoe];
|
||||
mp.events.callRemote("saveCharacterCloth", JSON.stringify(slotType), JSON.stringify(slotId), JSON.stringify(clothId));
|
||||
dutyMenu.Visible = false;
|
||||
mp.gui.chat.activate(true);
|
||||
} else if (item.Text === "Abbrechen") {
|
||||
dutyMenu.Visible = false;
|
||||
mp.gui.chat.activate(true);
|
||||
mp.events.callRemote("defaultCharacterCloth");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
dutyMenu.MenuClose.on(() => {
|
||||
dutyMenu.Visible = false;
|
||||
mp.gui.chat.activate(true);
|
||||
mp.events.callRemote("defaultCharacterCloth");
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -7,7 +7,11 @@
|
||||
//https://docs.microsoft.com/de-de/windows/desktop/inputdev/virtual-key-codes
|
||||
|
||||
var chat = false;
|
||||
<<<<<<< HEAD
|
||||
var showInventory = false;
|
||||
=======
|
||||
var showGui = true;
|
||||
>>>>>>> develop
|
||||
|
||||
//ENTER
|
||||
mp.keys.bind(0x0D, false, function () {
|
||||
@@ -16,7 +20,32 @@ mp.keys.bind(0x0D, false, function () {
|
||||
}
|
||||
});
|
||||
|
||||
//I
|
||||
|
||||
//F7 //Unshowalles
|
||||
mp.keys.bind(0x76, false, function () {
|
||||
if (showGui === true) {
|
||||
showGui = false;
|
||||
mp.events.call("toggleUi", false);
|
||||
} else {
|
||||
showGui = true;
|
||||
mp.events.call("toggleUi", true);
|
||||
}
|
||||
});
|
||||
|
||||
//NUM2 //Save Blips in Edit Mode
|
||||
mp.keys.bind(0x62, false, function () {
|
||||
mp.events.callRemote("keyPress:NUM2");
|
||||
});
|
||||
|
||||
//E
|
||||
mp.keys.bind(0x45, false, function () {
|
||||
if (!chat) {
|
||||
mp.events.callRemote("keyPress:E");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//I //Spielerliste
|
||||
mp.keys.bind(0x49, false, function () {
|
||||
if (!chat) {
|
||||
mp.events.callRemote("keyPress:I");
|
||||
@@ -24,6 +53,7 @@ mp.keys.bind(0x49, false, function () {
|
||||
}
|
||||
});
|
||||
|
||||
<<<<<<< HEAD
|
||||
//J
|
||||
mp.keys.bind(0x4A, false, function () {
|
||||
if (showInventory === false) {
|
||||
@@ -36,6 +66,23 @@ mp.keys.bind(0x4A, false, function () {
|
||||
});
|
||||
|
||||
//N
|
||||
=======
|
||||
//K //Dienstkleidung
|
||||
mp.keys.bind(0x4B, false, function () {
|
||||
if (!chat) {
|
||||
mp.events.callRemote("keyPress:K");
|
||||
}
|
||||
});
|
||||
|
||||
//L //Türen auf / zuschließen
|
||||
mp.keys.bind(0x4C, false, function () {
|
||||
if (!chat) {
|
||||
mp.events.callRemote("keyPress:L");
|
||||
}
|
||||
});
|
||||
|
||||
//N //Motor Starten
|
||||
>>>>>>> develop
|
||||
mp.keys.bind(0x4E, false, function () {
|
||||
if (!chat) {
|
||||
mp.events.callRemote("keyPress:N");
|
||||
@@ -49,9 +96,10 @@ mp.keys.bind(0x54, false, function () {
|
||||
}
|
||||
});
|
||||
|
||||
//X
|
||||
//X //Anschnallen
|
||||
mp.keys.bind(0x58, false, function () {
|
||||
if (!chat) {
|
||||
mp.events.callRemote("keyPress:X");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ function saveData() {
|
||||
let blipRotation = document.getElementById("blipRotation").value;
|
||||
let blipDimension = document.getElementById("blipDimension").value;
|
||||
|
||||
mp.trigger("saveData", blipSprite, blipName, blipScale, blipColor, blipAlpha, blipDrawDistance, blipShortRange, blipRotation, blipDimension);
|
||||
mp.trigger("saveBlipData", blipSprite, blipName, blipScale, blipColor, blipAlpha, blipDrawDistance, blipShortRange, blipRotation, blipDimension);
|
||||
}
|
||||
|
||||
function cancelData() {
|
||||
@@ -7,12 +7,12 @@ var saveBrowser;
|
||||
|
||||
mp.events.add('saveBlip', () => {
|
||||
|
||||
saveBrowser = mp.browsers.new('package://Save/save.html');
|
||||
saveBrowser = mp.browsers.new('package://Save/blip/save.html');
|
||||
mp.gui.chat.activate(false);
|
||||
mp.gui.cursor.show(true, true);
|
||||
});
|
||||
|
||||
mp.events.add('saveData', (blipSprite, blipName, blipScale, blipColor, blipAlpha, blipDrawDistance, blipShortRange, blipRotation, blipDimension) => {
|
||||
mp.events.add('saveBlipData', (blipSprite, blipName, blipScale, blipColor, blipAlpha, blipDrawDistance, blipShortRange, blipRotation, blipDimension) => {
|
||||
if (saveBrowser) {
|
||||
saveBrowser.destroy();
|
||||
}
|
||||
|
||||
1628
Client/Speedometer/cef/css/style.css
Normal file
1628
Client/Speedometer/cef/css/style.css
Normal file
File diff suppressed because it is too large
Load Diff
3
Client/Speedometer/cef/js/gauge.js
Normal file
3
Client/Speedometer/cef/js/gauge.js
Normal file
File diff suppressed because one or more lines are too long
167
Client/Speedometer/cef/speedometer.html
Normal file
167
Client/Speedometer/cef/speedometer.html
Normal file
@@ -0,0 +1,167 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="css\style.css">
|
||||
<script src="js\gauge.js"></script>
|
||||
<script>
|
||||
function update(speed, rpm, gas)
|
||||
{
|
||||
updateSpeed(speed);
|
||||
updateKM(speed);
|
||||
updateRpm(rpm);
|
||||
updateGas(gas);
|
||||
}
|
||||
function updateSpeed(speed)
|
||||
{
|
||||
document.getElementById("tacho").dataset.value = speed;
|
||||
}
|
||||
function updateKM(km)
|
||||
{
|
||||
var kilometerstandt = ( km )
|
||||
document.getElementById("tacho").dataset.valueText = kilometerstandt.toFixed(1) + " km/h";
|
||||
}
|
||||
function updateRpm(rpm)
|
||||
{
|
||||
document.getElementById("rpm").dataset.value = rpm;
|
||||
}
|
||||
function updateGas(gas)
|
||||
{
|
||||
document.getElementById("gas").dataset.value = gas;
|
||||
//if(gas >= 15){
|
||||
// document.getElementById("gasState").innerHTML = ""
|
||||
//}
|
||||
//if(gas < 15){
|
||||
// document.getElementById("gasState").innerHTML = "<img src=\"..\\Images\\gas_critical.png\" width=\"22px\">";
|
||||
//}
|
||||
//if( gas > 15 && gas < 50 ){
|
||||
// document.getElementById("gasState").innerHTML = "<img src=\"..\\Images\\gas_low.png\" width=\"22px\">";
|
||||
//}
|
||||
}
|
||||
function updateHealth(rotation)
|
||||
{
|
||||
if(rotation >= 50){
|
||||
document.getElementById("repairState").innerHTML = ""
|
||||
}
|
||||
if(rotation < 25){
|
||||
document.getElementById("repairState").innerHTML = "<img src=\"..\\Images\\engine_critical.png\" width=\"18px\">";
|
||||
}
|
||||
if( rotation > 25 && rotation < 50 ){
|
||||
document.getElementById("repairState").innerHTML = "<img src=\"..\\Images\\engine_soft.png\" width=\"18px\">";
|
||||
}
|
||||
}
|
||||
|
||||
function showSpeedo()
|
||||
{
|
||||
document.body.className = "fade";
|
||||
}
|
||||
function hideSpeedo()
|
||||
{
|
||||
document.body.className = "";
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
.blinker_arrow{
|
||||
color: #FFF;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body onload="hideSpeedo()">
|
||||
<div class="w3-container" style="width:350px; position:fixed; bottom: 60px; right:20px;">
|
||||
<div class="w3-display-container" style="height:200px">
|
||||
<div class="w3-display-middle">
|
||||
<canvas id="tacho" data-type="radial-gauge"
|
||||
data-width="200"
|
||||
data-height="200"
|
||||
data-units="Km/h"
|
||||
data-title="false"
|
||||
data-value="0"
|
||||
data-min-value="0"
|
||||
data-max-value="320"
|
||||
data-major-ticks="0,20,40,60,80,100,120,140,160,180,200,220,240,260,280,300,320"
|
||||
data-minor-ticks="2"
|
||||
data-stroke-ticks="false"
|
||||
data-highlights='[
|
||||
{ "from": 200, "to": 320, "color": "rgba(255, 0, 0, .25)" }
|
||||
]'
|
||||
data-border-outer-width=1
|
||||
data-border-middle-width=1
|
||||
data-animation="false"
|
||||
data-color-plate="#222"
|
||||
data-color-major-ticks="#f5f5f5"
|
||||
data-color-minor-ticks="#ddd"
|
||||
data-color-title="#fff"
|
||||
data-color-units="#ccc"
|
||||
data-color-numbers="#eee"
|
||||
data-color-needle-start="rgba(240, 128, 128, 1)"
|
||||
data-color-needle-end="rgba(255, 160, 122, .9)"
|
||||
data-value-box="true"
|
||||
data-value-text="0 Km/h"
|
||||
data-font-value="Arial"
|
||||
></canvas>
|
||||
</div>
|
||||
<div class="w3-display-bottomleft" style="z-index:-5;">
|
||||
<canvas id="gas" data-type="radial-gauge"
|
||||
data-width="100"
|
||||
data-height="100"
|
||||
data-start-angle="20"
|
||||
data-ticks-angle="140"
|
||||
data-title="false"
|
||||
data-value="0"
|
||||
data-min-value="0"
|
||||
data-max-value="100"
|
||||
data-major-ticks="E,F"
|
||||
data-minor-ticks="2"
|
||||
data-stroke-ticks="false"
|
||||
data-value-box="false"
|
||||
data-animation="false"
|
||||
data-highlights='[
|
||||
{ "from": 0, "to": 15, "color": "rgba(255,0,0,.25)" }
|
||||
]'
|
||||
data-border-outer-width=1
|
||||
data-border-middle-width=1
|
||||
data-color-plate="#222"
|
||||
data-color-major-ticks="#f5f5f5"
|
||||
data-color-minor-ticks="#ddd"
|
||||
data-font-numbers-size="32"
|
||||
data-color-title="#fff"
|
||||
data-color-units="#ccc"
|
||||
data-color-numbers="#eee"
|
||||
data-color-needle-start="rgba(240, 128, 128, 1)"
|
||||
data-color-needle-end="rgba(255, 160, 122, .9)"
|
||||
></canvas>
|
||||
</div>
|
||||
<div class="w3-display-bottomright" style="z-index:-5;">
|
||||
<canvas id="rpm" data-type="radial-gauge"
|
||||
data-width="100"
|
||||
data-height="120"
|
||||
data-units="RPM"
|
||||
data-title="false"
|
||||
data-value="0"
|
||||
data-min-value="0"
|
||||
data-max-value="1000"
|
||||
data-major-ticks="0,1,2,3,4,5,6,7,8,9,10"
|
||||
data-minor-ticks="2"
|
||||
data-stroke-ticks="false"
|
||||
data-value-box="false"
|
||||
data-animation="false"
|
||||
data-highlights='[
|
||||
{ "from": 800, "to": 1000, "color": "rgba(255,0,0,.25)" }
|
||||
]'
|
||||
data-border-outer-width=1
|
||||
data-border-middle-width=1
|
||||
data-font-numbers-size="32"
|
||||
data-color-plate="#222"
|
||||
data-color-major-ticks="#f5f5f5"
|
||||
data-color-minor-ticks="#ddd"
|
||||
data-color-title="#fff"
|
||||
data-color-units="#ccc"
|
||||
data-color-numbers="#eee"
|
||||
data-color-needle-start="rgba(240, 128, 128, 1)"
|
||||
data-color-needle-end="rgba(255, 160, 122, .9)"
|
||||
data-font-value="Led"
|
||||
></canvas>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
30
Client/Speedometer/index.js
Normal file
30
Client/Speedometer/index.js
Normal file
@@ -0,0 +1,30 @@
|
||||
let speedo = mp.browsers.new("package://speedometer/CEF/speedometer.html");
|
||||
let showed = false;
|
||||
let player = mp.players.local;
|
||||
|
||||
mp.events.add('render', () =>
|
||||
{
|
||||
if (player.vehicle && player.vehicle.getPedInSeat(-1) === player.handle && !globalData.InTuning && !globalData.HideGui) // Check if player is in vehicle and is driver
|
||||
{
|
||||
if(showed === false) // Check if speedo is already showed
|
||||
{
|
||||
speedo.execute("showSpeedo();");
|
||||
showed = true;
|
||||
}
|
||||
/*Get vehicle infos*/
|
||||
let vel = player.vehicle.getSpeed() * 3.6; //Doc: https://wiki.rage.mp/index.php?title=Entity::getSpeed
|
||||
let rpm = player.vehicle.rpm * 1000; //Doc: https://wiki.rage.mp/index.php?title=Vehicle::rpm
|
||||
let gas = player.vehicle.getPetrolTankHealth(); //Doc: https://wiki.rage.mp/index.php?title=Vehicle::getPetrolTankHealth
|
||||
gas = gas < 0 ? 0: gas / 10;
|
||||
|
||||
speedo.execute(`update(${vel}, ${rpm}, ${gas});`); // Send data do CEF
|
||||
}
|
||||
else
|
||||
{
|
||||
if(showed)
|
||||
{
|
||||
speedo.execute("hideSpeedo();");
|
||||
showed = false;
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
var keyBound = false;
|
||||
|
||||
var carModTypes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 22, 23];
|
||||
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
|
||||
@@ -39,6 +39,33 @@ var customPartNames = [
|
||||
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"
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
@@ -56,13 +83,13 @@ 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.gui.chat.push("Model: " + mp.players.local.vehicle.model);
|
||||
|
||||
mp.keys.bind(0x45, false, keyPressHandler);
|
||||
keyBound = true;
|
||||
});
|
||||
@@ -71,6 +98,11 @@ 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;
|
||||
@@ -88,7 +120,13 @@ mp.events.add("showTuningMenu", () => {
|
||||
var localPlayer = mp.players.local;
|
||||
var localVehicle = localPlayer.vehicle;
|
||||
|
||||
var mainMenu = new Menu("Fahrzeugwerkstatt", "Modifiziere dein Fahrzeug", new Point(50, 50));
|
||||
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") {
|
||||
@@ -99,6 +137,8 @@ mp.events.add("showTuningMenu", () => {
|
||||
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);
|
||||
@@ -107,25 +147,60 @@ mp.events.add("showTuningMenu", () => {
|
||||
|
||||
mainMenu.Visible = true;
|
||||
|
||||
mainMenu.ItemSelect.on(item => {
|
||||
mainMenu.ItemSelect.on((item) => {
|
||||
var modSlot = getSlotId(item.Text);
|
||||
var currentMod = localVehicle.getMod(modSlot);
|
||||
var currentModItem;
|
||||
|
||||
if (item.Text.startsWith("Slot")) {
|
||||
restStr = item.Text.substring(5);
|
||||
modSlot = parseInt(restStr);
|
||||
}
|
||||
|
||||
var modNum = localVehicle.getNumMods(modSlot);
|
||||
|
||||
var modMenu = new Menu(item.Text, "Änderung: " + item.Text, new Point(50, 50));
|
||||
|
||||
modMenu.AddItem(new UIMenuItem("Serie", ""));
|
||||
for (var i = -1; i < modNum; i++) {
|
||||
var modItem;
|
||||
|
||||
for (var i = 0; i < modNum; i++) {
|
||||
var modName = localVehicle.getModTextLabel(modSlot, i);
|
||||
var realModName = mp.game.ui.getLabelText(modName);
|
||||
var modItem = new UIMenuItem(realModName, "");
|
||||
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.IndexChange.on(index => {
|
||||
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);
|
||||
});
|
||||
|
||||
modMenu.MenuClose.on(() => {
|
||||
@@ -138,11 +213,16 @@ mp.events.add("showTuningMenu", () => {
|
||||
});
|
||||
|
||||
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";
|
||||
|
||||
|
||||
@@ -4,20 +4,30 @@
|
||||
* @copyright (c) 2008 - 2018 Life of German
|
||||
*/
|
||||
|
||||
let globalData = {
|
||||
InTuning: false,
|
||||
HideGui: false
|
||||
};
|
||||
|
||||
require('./CharCreator/index.js');
|
||||
|
||||
require('./Login/main.js');
|
||||
require('./FactionManagement/main.js');
|
||||
|
||||
require('./Save/main.js');
|
||||
require('./DoorManager/doormanager.js');
|
||||
|
||||
require('./Gui/deathscreen.js');
|
||||
require('./Gui/infobox.js');
|
||||
require('./Gui/nametags.js');
|
||||
require('./Gui/playerlist.js');
|
||||
require('./Gui/Inventory/inventory.js');
|
||||
|
||||
require('./Login/main.js');
|
||||
|
||||
require('./Player/dutycloth.js');
|
||||
require('./Player/keys.js');
|
||||
|
||||
require('./FactionManagement/main.js');
|
||||
require('./Save/main.js');
|
||||
|
||||
require('./Tuning/main.js');
|
||||
require('./Speedometer/index.js');
|
||||
|
||||
require('./Tuning/main.js');
|
||||
|
||||
Reference in New Issue
Block a user