Inventory and onlinelist now pre load on login and open without delay on keybind press.

This commit is contained in:
2021-05-02 06:19:15 +02:00
parent 6d675018dc
commit 4bd5e5aa49
8 changed files with 181 additions and 174 deletions

View File

@@ -5,30 +5,39 @@
*/ */
export default function playerList(globalData: IGlobalData): void { export default function playerList(globalData: IGlobalData): void {
var playerlistBrowser: BrowserMp = null; var playerlistBrowser: BrowserMp = null;
var pList; var pList = [];
var loaded = false;
var factionPlayersMap: Map<number, number> = new Map<number, number>(); var factionPlayersMap: Map<number, number> = new Map<number, number>();
const factionIds = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; const factionIds = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
mp.events.add("showPlayerlist", (playersJson) => { mp.events.add("loadPlayerListCEF", () => {
if (playerlistBrowser !== null) { if (playerlistBrowser !== null) {
playerlistBrowser.destroy(); playerlistBrowser.destroy();
playerlistBrowser = null;
globalData.InMenu = false;
mp.gui.cursor.show(false, false);
mp.gui.chat.activate(true);
} }
else if (!globalData.InMenu) { playerlistBrowser = mp.browsers.new('package://assets/html/onlinelist/index.html');
});
mp.events.add("showPlayerlist", (playersJson) => {
if (!globalData.InMenu && !loaded) {
globalData.InMenu = true; globalData.InMenu = true;
playerlistBrowser = mp.browsers.new('package://assets/html/onlinelist/index.html'); loaded = true;
mp.gui.chat.activate(false); mp.gui.chat.activate(false);
mp.gui.cursor.show(true, true); mp.gui.cursor.show(true, true);
pList = JSON.parse(playersJson); pList = JSON.parse(playersJson);
playerlistBrowser.execute(`showPlayerList()`);
} else if (loaded) {
globalData.InMenu = false;
loaded = false;
mp.gui.cursor.show(false, false);
mp.gui.chat.activate(true);
playerlistBrowser.execute(`closePlayerList()`);
} }
}); });
mp.events.add("CEF:PlayerList_Loaded", () => { mp.events.add("CEF:PlayerList_Loaded", () => {
playerlistBrowser.execute(`clear_row()`);
factionIds.forEach(f => { factionIds.forEach(f => {
factionPlayersMap.set(f, 0); factionPlayersMap.set(f, 0);
}); });

View File

@@ -8,7 +8,13 @@ html {
-ms-user-select: none; -ms-user-select: none;
user-select: none; user-select: none;
} }
.show {
display: show !important;
}
.hidden {
display: none !important;
}
html, body { html, body {
margin: unset; margin: unset;
} }
@@ -209,4 +215,6 @@ ol.inline.stats {
ol.inline.stats abbr { ol.inline.stats abbr {
text-decoration: none; text-decoration: none;
} }
/*# sourceMappingURL=style.css.map */ /*# sourceMappingURL=style.css.map */

View File

@@ -10,76 +10,78 @@
<body> <body>
<div class="alerts" id='alertbox'> <div name="inventory" class="inventory hidden">
</div>
<div class="sidebar"> <div class="alerts" id='alertbox'>
<ul> </div>
<li name="side1" class="sidebaritem1" onclick="switchSite('backpackClass')">
<img class="sideicon1" src="img/backpack/backpack.svg"><p class="bartext">Rucksack</p>
</li>
<li name="side2" class="sidebaritem2" onclick="getVehicle()">
<img class="sideicon2" src="img/backpack/car.svg"><p class="bartext">Fahrzeug</p>
</li>
<!-- <li name="side3" class="sidebaritem3" onclick="switchSite('tradeClass')"><img class="sideicon4" src="img/backpack/trading.svg"><p class="bartext">Handel</p></li>
<li name="side4" class="sidebaritem4 hidden" onclick="switchSite('handelClass')"><img class="sideicon4" src="img/backpack/trading.svg"><p class="bartext">Handeln</p></li>
<li name="side5" class="sidebaritem5 hidden" onclick="getTrade()"><img class="sideicon4" src="img/backpack/save-money.svg"><p class="bartext">Anfrage</p></li> -->
<li name="side6" class="sidebaritem6 hidden" onclick="switchSite('backClass')">
<img class="sideicon4" src="img/backpack/back.svg"><p class="bartext">Zurück</p>
</li>
</ul>
</div>
<div name="backpackClass" class="backpack"> <div class="sidebar">
<div class="main"> <ul>
<div class="Betrag" style="display: none;"> <li name="side1" class="sidebaritem1" onclick="switchSite('backpackClass')">
<div class="BoxBlue"> <img class="sideicon1" src="img/backpack/backpack.svg"><p class="bartext">Rucksack</p>
<input type="text" id="tf_zahl" name="number" placeholder="Betrag eingeben" min="1" step="1" oninput="this.value=this.value.replace(/[^0-9]/g,'');"> </li>
<button id="tf_cancle" onclick="">Schließen</button> <li name="side2" class="sidebaritem2" onclick="getVehicle()">
<button id="tf_submitZahl" onclick="">Bestätigen</button> <img class="sideicon2" src="img/backpack/car.svg"><p class="bartext">Fahrzeug</p>
<img class="blueIcon1" src="img/backpack/trash2.svg"></img> </li>
<!-- <li name="side3" class="sidebaritem3" onclick="switchSite('tradeClass')"><img class="sideicon4" src="img/backpack/trading.svg"><p class="bartext">Handel</p></li>
<li name="side4" class="sidebaritem4 hidden" onclick="switchSite('handelClass')"><img class="sideicon4" src="img/backpack/trading.svg"><p class="bartext">Handeln</p></li>
<li name="side5" class="sidebaritem5 hidden" onclick="getTrade()"><img class="sideicon4" src="img/backpack/save-money.svg"><p class="bartext">Anfrage</p></li> -->
<li name="side6" class="sidebaritem6 hidden" onclick="switchSite('backClass')">
<img class="sideicon4" src="img/backpack/back.svg"><p class="bartext">Zurück</p>
</li>
</ul>
</div>
<div name="backpackClass" class="backpack">
<div class="main">
<div class="Betrag" style="display: none;">
<div class="BoxBlue">
<input type="text" id="tf_zahl" name="number" placeholder="Betrag eingeben" min="1" step="1" oninput="this.value=this.value.replace(/[^0-9]/g,'');">
<button id="tf_cancle" onclick="">Schließen</button>
<button id="tf_submitZahl" onclick="">Bestätigen</button>
<img class="blueIcon1" src="img/backpack/trash2.svg"></img>
</div>
</div> </div>
</div> <div class="Betrag2" style="display: none;">
<div class="Betrag2" style="display: none;"> <div class="BoxBlue">
<div class="BoxBlue"> <input type="text" id="tf_zahl2" name="number" placeholder="Betrag eingeben" min="1" step="1" oninput="this.value=this.value.replace(/[^0-9]/g,'');">
<input type="text" id="tf_zahl2" name="number" placeholder="Betrag eingeben" min="1" step="1" oninput="this.value=this.value.replace(/[^0-9]/g,'');">
<button id="tf_cancle2" onclick="">Schließen</button> <button id="tf_cancle2" onclick="">Schließen</button>
<button id="tf_submitZahlToVehicle" onclick="">Zum Fahrzeug transferieren</button> <button id="tf_submitZahlToVehicle" onclick="">Zum Fahrzeug transferieren</button>
<img class="blueIcon1" src="img/backpack/car.svg"></img> <img class="blueIcon1" src="img/backpack/car.svg"></img>
</div>
</div>
<div class="title">
<div class="titlecount"><span id="count1">0</span> / 40 Kilogramm</div>
<div class="titletext">Rucksack</div>
</div>
<div class="items">
<ul id="List0"></ul>
</div> </div>
</div>
<div class="title">
<div class="titlecount"><span id="count1">0</span> / 40 Kilogramm</div>
<div class="titletext">Rucksack</div>
</div>
<div class="items">
<ul id="List0"></ul>
</div> </div>
</div> </div>
</div>
<div name="vehClass" class="veh hidden"> <div name="vehClass" class="veh hidden">
<div class="main"> <div class="main">
<div class="title"> <div class="title">
<div class="titlecount"><span id="count2">0</span> / <span id="trunkSize">0</span> Kilogramm</div> <div class="titlecount"><span id="count2">0</span> / <span id="trunkSize">0</span> Kilogramm</div>
<div class="titletext">Fahrzeug</div> <div class="titletext">Fahrzeug</div>
</div> </div>
<div class="Betrag4" style="display: none;"> <div class="Betrag4" style="display: none;">
<div class="BoxBlue"> <div class="BoxBlue">
<img class="blueIcon1" src="img/backpack/backpack.svg"> <img class="blueIcon1" src="img/backpack/backpack.svg">
<button id="tf_cancle4" onclick="">Schließen</button><input type="text" id="tf_zahl4" name="number" placeholder="Betrag eingeben" min="1" step="1" oninput="this.value=this.value.replace(/[^0-9]/g,'');"> <button id="tf_cancle4" onclick="">Schließen</button><input type="text" id="tf_zahl4" name="number" placeholder="Betrag eingeben" min="1" step="1" oninput="this.value=this.value.replace(/[^0-9]/g,'');">
<button id="tf_submitZahl4" onclick="">Zum Rucksack transferieren</button> <button id="tf_submitZahl4" onclick="">Zum Rucksack transferieren</button>
</div>
</div>
<div class="items">
<ul id="List4"></ul>
</div> </div>
</div> </div>
<div class="items">
<ul id="List4"></ul>
</div>
</div> </div>
</div>
<!-- <div name="handelClass" class="handel hidden"> <!-- <div name="handelClass" class="handel hidden">
<div class="main"> <div class="main">
<div class="Betrag3" style="display:none;"> <div class="Betrag3" style="display:none;">
<input type="text" id="tf_zahl3" name="number" placeholder="Betrag eingeben" min="1" step="1" oninput="this.value=this.value.replace(/[^0-9]/g,'');"> <input type="text" id="tf_zahl3" name="number" placeholder="Betrag eingeben" min="1" step="1" oninput="this.value=this.value.replace(/[^0-9]/g,'');">
@@ -107,7 +109,8 @@
</div> </div>
</div> --> </div> -->
<div id="invisible" style="display: none"></div> <div id="invisible" style="display: none"></div>
</div>
<script src="../../js/jquery-3.3.1.min.js"></script> <script src="../../js/jquery-3.3.1.min.js"></script>
<script> <script>
@@ -176,6 +179,20 @@
var vehInvItem = []; var vehInvItem = [];
function showInventory() {
lastClass = "backpackClass";
document.getElementsByName("backpackClass")[0].classList.remove("hidden");
document.getElementsByName("vehClass")[0].classList.remove("hidden");
document.getElementsByName("vehClass")[0].classList.toggle("hidden");
//document.getElementsByName("handelClass")[0].style.visibility = "hidden";
document.getElementsByName("inventory")[0].classList.remove("hidden");
}
function closeInventory() {
document.getElementsByName("inventory")[0].classList.toggle("hidden");
}
function setBackpackItems(jsonItemArr) { function setBackpackItems(jsonItemArr) {
console.log(jsonItemArr); console.log(jsonItemArr);
var parsedItemArr = JSON.parse(jsonItemArr) var parsedItemArr = JSON.parse(jsonItemArr)

View File

@@ -1,4 +1,4 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="de"> <html lang="de">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
@@ -8,44 +8,47 @@
<link rel="stylesheet" href="../../css/onlinelist/style.css"> <link rel="stylesheet" href="../../css/onlinelist/style.css">
</head> </head>
<body> <body>
<div class="wrapper"> <div name="OnlineList" class="onlineList hidden">
<div class="heading"> <div class="wrapper">
<h1>Spielerliste</h1> <div class="heading">
<h2>Spieler: <span id="player-count">0</span></h2> <h1>Spielerliste</h1>
<h2>Spieler: <span id="player-count">0</span></h2>
</div>
<div class="factions">
<ol class="inline stats">
<li><span class="group group--1">LSPD</span>: <span id="1">0</span></li>
<li><span class="group group--3">FIB</span>: <span id="3">0</span></li>
<li><span class="group group--2">LSED</span>: <span id="2">0</span></li>
<li><span class="group group--7">GSF</span>: <span id="7">0</span></li>
<li><span class="group group--8">FYB</span>: <span id="8">0</span></li>
<li><span class="group group--5">LSV</span>: <span id="5">0</span></li>
<li><span class="group group--9">WZN</span>: <span id="9">0</span></li>
<li><span class="group group--0">ZIVI</span>: <span id="0">0</span></li>
</ol>
</div>
<table>
<thead>
<tr>
<th data-sort="int">ID</th>
<th data-sort="string">Name</th>
<th data-sort="string">Fraktion</th>
<th data-sort="int">Ping (ms)</th>
<tr>
</thead>
<tbody id="players">
</tbody>
</table>
</div>
</div> </div>
<div class="factions"> <script src="../../js/jquery-3.3.1.min.js"></script>
<ol class="inline stats"> <script src="../../js/onlinelist/stupidtable.min.js"></script>
<li><span class="group group--1">LSPD</span>: <span id="1">0</span></li> <script src="../../js/onlinelist/script.js"></script>
<li><span class="group group--3">FIB</span>: <span id="3">0</span></li>
<li><span class="group group--2">LSED</span>: <span id="2">0</span></li>
<li><span class="group group--7">GSF</span>: <span id="7">0</span></li>
<li><span class="group group--8">FYB</span>: <span id="8">0</span></li>
<li><span class="group group--5">LSV</span>: <span id="5">0</span></li>
<li><span class="group group--9">WZN</span>: <span id="9">0</span></li>
<li><span class="group group--0">ZIVI</span>: <span id="0">0</span></li>
</ol>
</div>
<table>
<thead>
<tr>
<th data-sort="int">ID</th>
<th data-sort="string">Name</th>
<th data-sort="string">Fraktion</th>
<th data-sort="int">Ping (ms)</th>
<tr>
</thead>
<tbody id="players">
</tbody>
</table>
</div>
<script src="../../js/jquery-3.3.1.min.js"></script>
<script src="../../js/onlinelist/stupidtable.min.js"></script>
<script src="../../js/onlinelist/script.js"></script>
</body> </body>
</html> </html>

View File

@@ -1,5 +1,4 @@
window.onbeforeunload = () => { window.scrollTo(0, 0); } window.onbeforeunload = () => { window.scrollTo(0, 0); }
$(document).ready(function () { mp.trigger('CEF:PlayerList_Loaded'); });
setPlayerCount = (factionId, value) => { setPlayerCount = (factionId, value) => {
if (factionId == -1) { if (factionId == -1) {
@@ -9,6 +8,21 @@ setPlayerCount = (factionId, value) => {
} }
} }
function showPlayerList() {
document.getElementsByName("OnlineList")[0].classList.remove("hidden");
mp.events.call("CEF:PlayerList_Loaded");
window.scrollTo(0, 0);
}
function closePlayerList() {
document.getElementsByName("OnlineList")[0].classList.toggle("hidden");
}
function clear_row() {
document.getElementById('players').innerHTML = '';
}
function getFactionNameByFactionId(factionId) { function getFactionNameByFactionId(factionId) {
switch (parseInt(factionId)) { switch (parseInt(factionId)) {
case 1: return "LSPD"; case 1: return "LSPD";

View File

@@ -12,51 +12,27 @@
var loaded = false; var loaded = false;
mp.events.add('inventoryShow', () => { mp.events.add('loadInventoryCEF', () => {
if (invBrowser !== null) {
invBrowser.destroy()
invBrowser = null;
globalData.InMenu = false;
loaded = false;
mp.gui.cursor.show(false, false);
return;
}
if (!globalData.InMenu) {
globalData.InMenu = true;
mp.gui.cursor.show(true, true);
itemArr = [];
vehItemArr = [];
invBrowser = mp.browsers.new('package://assets/html/inventory/inventory.html');
}
});
var offer = 0;
var tradeItemID;
var tradeItemAmount;
var tradeItemName;
var tradeItemWeight;
mp.events.add('openInventory', () => {
globalData.InMenu = true;
mp.gui.cursor.show(true, true);
itemArr = []; itemArr = [];
vehItemArr = []; vehItemArr = [];
if (invBrowser !== null) {
invBrowser.destroy
}
invBrowser = mp.browsers.new('package://assets/html/inventory/inventory.html'); invBrowser = mp.browsers.new('package://assets/html/inventory/inventory.html');
}); });
mp.events.add('closeInventory', () => {
invBrowser.destroy()
invBrowser = null;
globalData.InMenu = false;
loaded = false;
mp.gui.cursor.show(false, false);
return;
});
mp.events.addDataHandler("tradeOffer", (entity, value) => { mp.events.add('inventoryShow', () => {
if (entity.type === "player") { if (!globalData.InMenu && !loaded) {
offer = parseInt(value); globalData.InMenu = true;
if (invBrowser != null) mp.gui.cursor.show(true, true);
invBrowser.execute(`changeTradeStatus('${JSON.stringify(offer)}')`); loaded = true;
invBrowser.execute(`showInventory()`);
} else if (loaded) {
globalData.InMenu = false;
mp.gui.cursor.show(false, false);
loaded = false;
invBrowser.execute(`closeInventory()`);
} }
}); });
@@ -81,17 +57,6 @@
} }
}); });
mp.events.add("CEF:InventoryLoaded", () => {
invBrowser.execute(`setBackpackItems('${JSON.stringify(itemArr)}')`);
if (vehItemArr.length != 0) {
invBrowser.execute(`setVehicleItems('${JSON.stringify(vehItemArr)}')`);
}
//invBrowser.execute(`setTradeItems('${JSON.stringify(tradeItemArr)}')`);
//invBrowser.execute(`setOfferItems('${JSON.stringify(offerItemArr)}')`);
loaded = true;
});
mp.events.add("CEF:callVehicleInventory", () => { mp.events.add("CEF:callVehicleInventory", () => {
mp.events.callRemote("CLIENT:getVehicleInventory") mp.events.callRemote("CLIENT:getVehicleInventory")
}); });
@@ -117,8 +82,8 @@
mp.events.add("aproveUse", (amount, name) => { mp.events.add("aproveUse", (amount, name) => {
if (invBrowser !== null) { if (invBrowser !== null) {
mp.game.audio.playSoundFrontend(1, "LOCAL_PLYR_CASH_COUNTER_COMPLETE", "DLC_HEISTS_GENERAL_FRONTEND_SOUNDS", true); mp.game.audio.playSoundFrontend(1, "LOCAL_PLYR_CASH_COUNTER_COMPLETE", "DLC_HEISTS_GENERAL_FRONTEND_SOUNDS", true);
invBrowser.execute(`alertGreen('${JSON.stringify(amount)}','${JSON.stringify(name)}')`); //invBrowser.execute(`alertGreen('${JSON.stringify(amount)}','${JSON.stringify(name)}')`);
mp.events.call("closeInventory"); //mp.events.call("inventoryShow");
} }
}); });
@@ -171,16 +136,4 @@
mp.events.add("CEF:UseItemInv", (itemId) => { mp.events.add("CEF:UseItemInv", (itemId) => {
mp.events.callRemote('invUseItem', itemId); mp.events.callRemote('invUseItem', itemId);
}); });
mp.events.add("CEF:tradeItem", (money, User, tradeItems, tradeItemAmount) => {
if (invBrowser !== null) {
try {
invBrowser.destroy()
invBrowser = null;
mp.events.callRemote('tradeItem', 0, User, tradeItems, tradeItemAmount);
} finally {
mp.gui.cursor.show(false, false);
}
}
});
} }

View File

@@ -184,6 +184,9 @@ namespace ReallifeGamemode.Server.Events
} }
} }
player.TriggerEvent("loadInventoryCEF");
player.TriggerEvent("loadPlayerListCEF");
player.TriggerEvent("draw", player.Name, player.Handle.Value); player.TriggerEvent("draw", player.Name, player.Handle.Value);
NAPI.Task.Run(() => NAPI.Task.Run(() =>
{ {

View File

@@ -531,8 +531,7 @@ namespace ReallifeGamemode.Server.Managers
{ {
if (usableItemObj.Use(fItem)) if (usableItemObj.Use(fItem))
{ {
List<InventoryItem> items = backpackItems[player]; SetBackpackItems(player);
player.SetSharedData("backpackItems", JsonConvert.SerializeObject(items.ToArray()));
player.TriggerEvent("aproveUse", 1, iItem.Name); player.TriggerEvent("aproveUse", 1, iItem.Name);
} }
} }
@@ -590,6 +589,7 @@ namespace ReallifeGamemode.Server.Managers
break; break;
} }
context.SaveChanges(); context.SaveChanges();
} }
} }