diff --git a/ReallifeGamemode.Client/Gui/introduction.ts b/ReallifeGamemode.Client/Gui/introduction.ts new file mode 100644 index 00000000..aa96efdd --- /dev/null +++ b/ReallifeGamemode.Client/Gui/introduction.ts @@ -0,0 +1,44 @@ +/** + * @overview Life of German Reallife - Gui Introduction + * @author MichaPlays + * @copyright (c) 2008 - 2021 Life of German + */ + +export default function Introduction(globalData: IGlobalData): void { + + var IntroductionBrowser: BrowserMp = null; + + mp.events.add("showIntroduction", () => { + + if (IntroductionBrowser !== null) { + IntroductionBrowser.destroy(); + IntroductionBrowser = null; + globalData.InInput = false; + mp.gui.cursor.show(false, false); + mp.gui.chat.activate(true); + } + else if (!globalData.InInput) { + globalData.InInput = true; + IntroductionBrowser = mp.browsers.new('package://assets/html/Introduction/Introduciton.html'); + mp.gui.chat.activate(false); + mp.gui.cursor.show(true, true); + + } + }); + + mp.events.add("removeIntroduction", () => { + + if (IntroductionBrowser == null) { + return; + } + else if (globalData.InInput) { + IntroductionBrowser.destroy(); + IntroductionBrowser = null; + globalData.InInput = false; + mp.gui.cursor.show(false, false); + mp.gui.chat.activate(true); + + } + }); + +} \ No newline at end of file diff --git a/ReallifeGamemode.Client/assets/css/Introduction/style.css b/ReallifeGamemode.Client/assets/css/Introduction/style.css new file mode 100644 index 00000000..f4ccc5c7 --- /dev/null +++ b/ReallifeGamemode.Client/assets/css/Introduction/style.css @@ -0,0 +1,116 @@ +html { + -webkit-box-sizing: border-box; + box-sizing: border-box; + user-select: none; +} + +*, *::before, *::after { + -webkit-box-sizing: inherit; + box-sizing: inherit; +} + +body { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + height: 100vh; + width: -webkit-fit-content; + width: -moz-fit-content; + width: fit-content; + margin: 0 auto; + padding: 1em .5em; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; + font-weight: 400; + color: #FFF; +} + +main { + height: auto; + position: relative; + min-width: 50ch; + max-width: 35vw; + padding: 1em; + border-radius: .25em; + font-size: 1em; + line-height: 1.25; + background-color: rgba(0, 0, 0, 0.5); +} + + main a#close { + position: absolute; + right: 1em; + top: 1em; + height: 1em; + width: 1em; + opacity: 0.25; + } + + main a#close:hover { + opacity: 1; + } + + main a#close:before, main a#close:after { + content: ' '; + position: absolute; + left: .5em; + height: 1em; + width: 2px; + background-color: #FFF; + border-radius: 1px; + } + + main a#close:before { + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + } + + main a#close:after { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg); + } + + main h1, main p { + margin: 0; + } + + main h1 { + font-size: 1.5em; + line-height: 1; + margin-bottom: .125em; + padding-right: 1em; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + } + + main p { + margin-bottom: 1em; + line-height: 1.125; + } + + main .form { + margin-top: .25em; + } + + main .form input { + width: 100%; + padding: .5em; + font-family: "Roboto Mono"; + font-weight: 500; + font-size: 1em; + border: none; + border-radius: 5px; + background-color: rgba(0, 0, 0, 0.125); + color: inherit; + } + + main .form input:focus { + outline-width: 0; + } diff --git a/ReallifeGamemode.Client/assets/html/Introduction/Introduciton.html b/ReallifeGamemode.Client/assets/html/Introduction/Introduciton.html new file mode 100644 index 00000000..b0a76111 --- /dev/null +++ b/ReallifeGamemode.Client/assets/html/Introduction/Introduciton.html @@ -0,0 +1,37 @@ + + + + + + Eingabe | Life of German + + + + + + + + + +
+
+

Willkommen auf Life of German

+
+
+ In dieser Info findest du alles wichtige zum Thema Steuerung und Funktionen.

+ + Steuerung:
+ T - Chat öffnen
+ M - Interaktionsmenü öffnen und schließen
+ X - Fahrzeug auf-/abschließen sowie im Fahrzeuginteraktionsmenü öffnen
+ N - Fahrzeugmotor Starten
+ O - Onlineliste öffnen/schließen
+ I - Inventar öffnen/schließen
+
+ + +
+ + + + \ No newline at end of file diff --git a/ReallifeGamemode.Client/assets/js/Introduction/application.js b/ReallifeGamemode.Client/assets/js/Introduction/application.js new file mode 100644 index 00000000..5e46270a --- /dev/null +++ b/ReallifeGamemode.Client/assets/js/Introduction/application.js @@ -0,0 +1,25 @@ + +let close = document.getElementById('close'); + +close.onclick = function closeWindow() { + mp.trigger('removeIntroduction'); + console.log('Fenster geschlossen!'); +} + + +/* Enter wird im Input-Feld gedrückt */ +input.onkeyup = e => { + let code = e.keyCode ? e.keyCode : e.which; + if (code === 13) { + // TODO: Wert entgegennehmen + closeWindow(); + } +} + +/* ESC wird gedrückt */ +document.onkeyup = e => { + let code = e.keyCode ? e.keyCode : e.which; + if (code === 27) { closeWindow(); } +} + +close.onclick = e => { closeWindow(); } diff --git a/ReallifeGamemode.Client/index.ts b/ReallifeGamemode.Client/index.ts index 8102c94c..4a6b07c1 100644 --- a/ReallifeGamemode.Client/index.ts +++ b/ReallifeGamemode.Client/index.ts @@ -234,6 +234,9 @@ import bankMenuHandle from './Interaction/bankmenu'; import InputHelper from './inputhelper'; bankMenuHandle(globalData); +import Introduction from './Gui/introduction'; +Introduction(globalData); + require('./Gui/policedepartment'); interface VehicleData { diff --git a/ReallifeGamemode.Server/Bank/bank.cs b/ReallifeGamemode.Server/Bank/bank.cs index 967aa731..31cefee7 100644 --- a/ReallifeGamemode.Server/Bank/bank.cs +++ b/ReallifeGamemode.Server/Bank/bank.cs @@ -1,7 +1,7 @@ /** * @overview Life of German Reallife - Managers Interaction (InteractionManager.cs) * @author MichaPlays -* @copyright (c) 2008 - 2018 Life of German +* @copyright (c) 2008 - 2021 Life of German */ using GTANetworkAPI; using Newtonsoft.Json; diff --git a/ReallifeGamemode.Server/Main.cs b/ReallifeGamemode.Server/Main.cs index 44356a1c..7d9f1a24 100644 --- a/ReallifeGamemode.Server/Main.cs +++ b/ReallifeGamemode.Server/Main.cs @@ -17,6 +17,7 @@ using ReallifeGamemode.Server.Util; using ReallifeGamemode.Services; using System.Threading; using Microsoft.EntityFrameworkCore; +using ReallifeGamemode.Server.newbie; /** * @overview Life of German Reallife - Main Class (Main.cs) @@ -130,6 +131,7 @@ namespace ReallifeGamemode.Server PlaneSchool.Setup(); Gangwar.Gangwar.loadTurfs(); Bank.bank.Setup(); + Introduction.Setup(); TempBlip tempBlip = new TempBlip() { diff --git a/ReallifeGamemode.Server/Managers/NewbieManager.cs b/ReallifeGamemode.Server/Managers/NewbieManager.cs new file mode 100644 index 00000000..9939ead9 --- /dev/null +++ b/ReallifeGamemode.Server/Managers/NewbieManager.cs @@ -0,0 +1,17 @@ +using System.Linq; +using GTANetworkAPI; +using ReallifeGamemode.Database; +using ReallifeGamemode.Database.Entities; +using ReallifeGamemode.Database.Entities.Logs; +using ReallifeGamemode.Database.Models; +using ReallifeGamemode.Server.Util; + +namespace ReallifeGamemode.Server.Managers +{ + class NewbieManager : Script + { + + + + } +} diff --git a/ReallifeGamemode.Server/newbie/Introduction.cs b/ReallifeGamemode.Server/newbie/Introduction.cs new file mode 100644 index 00000000..1d31b55f --- /dev/null +++ b/ReallifeGamemode.Server/newbie/Introduction.cs @@ -0,0 +1,46 @@ +using GTANetworkAPI; +using Newtonsoft.Json; +using ReallifeGamemode.Database.Models; +using ReallifeGamemode.Server.Extensions; +using ReallifeGamemode.Server.Finance; +using ReallifeGamemode.Services; +using System; + +/** +* @overview Life of German Reallife - Managers Interaction (InteractionManager.cs) +* @author MichaPlays +* @copyright (c) 2008 - 2021 Life of German +*/ + + +namespace ReallifeGamemode.Server.newbie +{ + class Introduction : Script + { + private static TextLabel informationLabel; + private static Marker marker; + private static ColShape _colShape; + public static Vector3 Position { get; } + public static void Setup() + { + informationLabel = NAPI.TextLabel.CreateTextLabel("Einführung", new Vector3(-1025.57, -2732.15, 13.75), 20.0f, 1.3f, 0, new Color(255, 255, 255)); + marker = NAPI.Marker.CreateMarker(MarkerType.VerticalCylinder, new Vector3(-1025.57, -2732.15, 12.75), new Vector3(), new Vector3(), 2f, new Color(107, 0, 0)); + + + _colShape = NAPI.ColShape.CreateSphereColShape(new Vector3(-1025.57, -2732.15, 13.75), 2f); + _colShape.OnEntityEnterColShape += EntityEnterBankColShape; + _colShape.OnEntityExitColShape += EntityExitBankColShape; + } + private static void EntityEnterBankColShape(ColShape colShape, Player client) + { + if (client.IsInVehicle || !client.IsLoggedIn()) return; + + client.TriggerEvent("showIntroduction"); + } + + private static void EntityExitBankColShape(ColShape colShape, Player client) + { + client.TriggerEvent("removeIntroduction"); + } + } +}