From 104615774746f95d7dca5cf8c19ec6c908fa6fb5 Mon Sep 17 00:00:00 2001 From: Fabian Date: Sat, 8 May 2021 02:16:16 +0200 Subject: [PATCH] Lol --- .../Jobs/FarmerFieldSelect.ts | 134 +++++++++++++ ReallifeGamemode.Client/Player/polygons.ts | 1 - ReallifeGamemode.Client/index.ts | 3 + ReallifeGamemode.Server/Events/Key.cs | 37 ++++ ReallifeGamemode.Server/Job/FarmerJob.cs | 176 ++++++++++++++++++ .../Managers/PositionManager.cs | 13 ++ 6 files changed, 363 insertions(+), 1 deletion(-) create mode 100644 ReallifeGamemode.Client/Jobs/FarmerFieldSelect.ts create mode 100644 ReallifeGamemode.Server/Job/FarmerJob.cs diff --git a/ReallifeGamemode.Client/Jobs/FarmerFieldSelect.ts b/ReallifeGamemode.Client/Jobs/FarmerFieldSelect.ts new file mode 100644 index 00000000..d89c7f32 --- /dev/null +++ b/ReallifeGamemode.Client/Jobs/FarmerFieldSelect.ts @@ -0,0 +1,134 @@ +import * as NativeUI from '../libs/NativeUI'; + +var fieldSelectColShape = mp.colshapes.newCircle(2415.229, 4993.037, 46.230038); +const Menu = NativeUI.Menu; +var fieldMenu: NativeUI.Menu; +const Point = NativeUI.Point; +const UIMenuListItem = NativeUI.UIMenuListItem; +const ItemsCollection = NativeUI.ItemsCollection; +const UIMenuItem = NativeUI.UIMenuItem; +const Color = NativeUI.Color; + +let sendItem = new UIMenuItem("Starten", "Route starten"); +sendItem.BackColor = new Color(13, 71, 161); +sendItem.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); + +let screenRes = mp.game.graphics.getScreenResolution(0, 0); +var checkpoint = new mp.Vector3(2416.3723, 4993.94, 45); + +export default function farmerFieldList(globalData: IGlobalData) { + var skillSelect; + var skill = 60; + var fieldSelected = false; + var fieldSelect; + + mp.events.add(RageEnums.EventKey.PLAYER_EXIT_COLSHAPE, (colshape) => { + if (colshape == fieldSelectColShape) { + if (fieldMenu && fieldMenu.Visible) { + fieldMenu.Close(); + } + } + }); + + mp.events.add('SERVER:selectField', () => { + + skill = 100; + + if (!globalData.InMenu) { + globalData.InMenu = true; + + skillSelect = ["Knecht (1)", "Hilfsarbeiter (2)", "Ackersmann (3)", "Landwirt (4)", "Ökonom (5)"]; + + fieldMenu = new Menu("Bus Job", "", new Point(0, screenRes.y / 3), null, null); + fieldMenu.AddItem(new UIMenuListItem("Stufe wählen", "", new ItemsCollection(skillSelect))); + fieldSelect = "Anfänger"; + fieldMenu.AddItem(sendItem); + fieldMenu.AddItem(cancelItem); + fieldMenu.Visible = true; + + fieldMenu.ListChange.on((item, index) => { + switch (item.Text) { + case "Stufe wählen": + fieldSelect = String(item.SelectedItem.DisplayText); + break; + } + }); + + fieldMenu.ItemSelect.on((item) => { + if (item.Text === "Starten") { + + if (fieldSelect == skillSelect[1] && skill < 5) { + mp.game.audio.playSoundFrontend(1, "Hack_Failed", "DLC_HEIST_BIOLAB_PREP_HACKING_SOUNDS", true); + } + else if (fieldSelect == skillSelect[2] && skill < 10) { + mp.game.audio.playSoundFrontend(1, "Hack_Failed", "DLC_HEIST_BIOLAB_PREP_HACKING_SOUNDS", true); + } + else if (fieldSelect == skillSelect[3] && skill < 25) { + mp.game.audio.playSoundFrontend(1, "Hack_Failed", "DLC_HEIST_BIOLAB_PREP_HACKING_SOUNDS", true); + } + else if (fieldSelect == skillSelect[4] && skill < 50) { + mp.game.audio.playSoundFrontend(1, "Hack_Failed", "DLC_HEIST_BIOLAB_PREP_HACKING_SOUNDS", true); + } + else { + mp.events.callRemote("CLIENT:StartFieldSelected", fieldSelect); + fieldSelected = true; + fieldMenu.Close(); + globalData.InMenu = false; + } + + + } else if (item.Text === "Abbrechen") { + fieldMenu.Close(); + } + }); + + fieldMenu.MenuClose.on(() => { + if (!fieldSelected) { + //mp.events.callRemote("CLIENT:Job_StopJob"); + } + fieldSelected = false; + globalData.InMenu = false; + }); + } + }); + + var activeCheckpoint; + var activeBlip = null; + var myVar; + var activeCheckpointId; + + mp.events.add('farmerSetCheckpoint', (position, markerId, markerSize, cpId) => { + activeCheckpointId = cpId; + + activeCheckpoint = mp.markers.new(markerId, position, markerSize, { + color: [255, 0, 0, 150], + visible: true, + dimension: 0 + }); + + activeBlip = mp.blips.new(1, position, + { + color: 33, + alpha: 255, + shortRange: false, + }); + activeBlip.setRoute(true); + activeBlip.setRouteColour(33); + + clearInterval(myVar); + myVar = setInterval(checkpointTimer, 50); + }); + + function checkpointTimer() { + let dist = mp.game.gameplay.getDistanceBetweenCoords(mp.players.local.position.x, mp.players.local.position.y, 0, checkpoint.x, checkpoint.y, 0, false); + + if (dist <= 2) { + clearInterval(myVar); + activeCheckpoint.destroy(); + } + } +} \ No newline at end of file diff --git a/ReallifeGamemode.Client/Player/polygons.ts b/ReallifeGamemode.Client/Player/polygons.ts index 6c755cbf..75cd2f87 100644 --- a/ReallifeGamemode.Client/Player/polygons.ts +++ b/ReallifeGamemode.Client/Player/polygons.ts @@ -57,7 +57,6 @@ const muellbaseVector2 = new mp.Vector3(454.88348, -2158.1938, 5.9788494); const muellbaseVector3 = new mp.Vector3(529.06635, -2088.4097, 8.303088); const krankenhausVector1 = new mp.Vector3(-508.50705, -351.24368, 34); -//const krankenhausVector2 = new mp.Vector3(-437.00146, -357.10526, 32.735916 const krankenhausVector2 = new mp.Vector3(-442.62323, -356.99185, 33); const krankenhausVector3 = new mp.Vector3(-448.9346, -297.23972, 33.68); const krankenhausVector4 = new mp.Vector3(-504.952, -315.21698, 35.04881); diff --git a/ReallifeGamemode.Client/index.ts b/ReallifeGamemode.Client/index.ts index e1b91d2d..e3ed1f78 100644 --- a/ReallifeGamemode.Client/index.ts +++ b/ReallifeGamemode.Client/index.ts @@ -268,6 +268,9 @@ antiAfk(globalData); import ammunation from './Interaction/ammunation/ammunation'; ammunation(globalData); +import farmerFieldList from './Jobs/FarmerFieldSelect'; +farmerFieldList(globalData); + import handsup from './Player/handsup'; handsup(); diff --git a/ReallifeGamemode.Server/Events/Key.cs b/ReallifeGamemode.Server/Events/Key.cs index 22b9e783..07a412e6 100644 --- a/ReallifeGamemode.Server/Events/Key.cs +++ b/ReallifeGamemode.Server/Events/Key.cs @@ -585,6 +585,43 @@ namespace ReallifeGamemode.Server.Events } } + if (player.Position.DistanceTo(FarmerJob.POSITION_SCHEUNE) <= 1.5) + { + if (JobManager.GetJob().GetUsersInJob().Contains(player)) + { + player.TriggerEvent("SERVER:selectField"); + return; + } + } + + if (player.Position.DistanceTo(FarmerJob.POSITION_FAHRZEUGHALLE) <= 1.5) + { + if (FarmerJob.playersWaitingForVehicle.Contains(player) || true) + { + FarmerJob.spawnVehicle(player); + return; + } + } + + if (CharacterCreator.surgeryPoint.DistanceTo(player.Position) <= 1.5) + { + if (user.GetData("duty")) + { + player.SendNotification("~r~Im Dienst kannst du nicht operiert werden", false); + return; + } + if (JobBase.GetPlayerInJob().Contains(player)) + { + player.SendNotification("~r~Im aktiven Job kannst du nicht operiert werden", false); + return; + } + if (user.Wanteds > 0) + { + player.SendNotification("~r~Wenn du gesucht wirst kannst du nicht operiert werden", false); + return; + } + } + //if (CharacterCreator.surgeryPoint.DistanceTo(player.Position) <= 1.5) //{ // if (user.GetData("duty")) diff --git a/ReallifeGamemode.Server/Job/FarmerJob.cs b/ReallifeGamemode.Server/Job/FarmerJob.cs new file mode 100644 index 00000000..f6504b76 --- /dev/null +++ b/ReallifeGamemode.Server/Job/FarmerJob.cs @@ -0,0 +1,176 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using GTANetworkAPI; +using ReallifeGamemode.Database.Entities; +using ReallifeGamemode.Database.Models; +using ReallifeGamemode.Server.Extensions; + +namespace ReallifeGamemode.Server.Job +{ + public class FarmerJob : JobBase + { + public override int Id => 5; + + public override string Name => "Farmer"; + + public override bool NeedVehicleToStart => false; + + public override bool Deactivated => false; + + private static FarmerJob _Instance; + + public static Vector3 POSITION_JOB_START = new Vector3(2434.2983, 4976.952, 46.571423); + public static Vector3 POSITION_SCHEUNE = new Vector3(2416.3723, 4993.94, 45); + public static Vector3 POSITION_SCHEUNE_LABEL = new Vector3(2416.3723, 4993.94, 46); + public static Vector3 POSITION_FAHRZEUGHALLE = new Vector3(2494.346, 4964.773, 43.5833); + public static Vector3 POSITION_FAHRZEUGHALLE_LABEL = new Vector3(2494.346, 4964.773, 44.5833); + + private static TextLabel labelScheune = null; + private static TextLabel labelFahrzeughalle = null; + + public static List playersWaitingForVehicle = new List(); + public static Dictionary playerHasField = new Dictionary(); + + private static readonly Dictionary VEHICLE_SPAWNS = new Dictionary + { + { new Vector3(2500.026, 4982.7485, 44.50283), (float)-148.8139 }, + { new Vector3(2511.2246, 4981.6924, 44.722702), (float)139.25208 }, + { new Vector3(2518.3486, 4977.3125, 44.716434), (float)131.3338 }, + { new Vector3(2522.8215, 4966.823, 44.53701), (float)118.17867 } + }; + + private static int spawnIndex = 0; + + public static readonly List CHECKPOINTS_FIELD1 = new List() + { + new Vector3(2335.83984375, 5114.8525390625, 47.83000183105469), + new Vector3(2295.81201171875, 5153.26123046875, 54.64070129394531), + new Vector3(2277.558837890625, 5139.4453125, 53.3763542175293), + new Vector3(2318.217041015625, 5099.271484375, 46.98373031616211), + new Vector3(2283.467041015625, 5066.1025390625, 45.97780227661133), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3() + }; + + public FarmerJob() + { + JobStart += FarmerDriverJobJobStart; + JobStop += FarmerDriverJobJobStop; + } + + public static FarmerJob GetInstance() + { + if (_Instance == null) + _Instance = new FarmerJob(); + return _Instance; + } + private void FarmerDriverJobJobStart(Player player) + { + labelScheune = NAPI.TextLabel.CreateTextLabel("Scheune - Drücke ~y~E ~w~um ein Feld auszuwählen", POSITION_SCHEUNE_LABEL, 15, 1, 0, new Color(255, 255, 255), false, 0); + + player.SendChatMessage("~y~[JOB]~w~ Begebe dich zur Scheune um Felder zu pachten"); + player.TriggerEvent("farmerSetCheckpoint", POSITION_SCHEUNE, 1, 1, "scheune"); + } + private void FarmerDriverJobJobStop(Player player) + { + player.SendChatMessage("Job stop"); + } + + [RemoteEvent("CLIENT:StartFieldSelected")] + public void startFieldSelected(Player player, String field) + { + labelScheune.Delete(); + labelFahrzeughalle = NAPI.TextLabel.CreateTextLabel("Fahrzeughalle - Drücke ~y~E ~w~um dir ein Fahrzeug zu holen", POSITION_FAHRZEUGHALLE_LABEL, 15, 1, 0, new Color(255, 255, 255), false, 0); + player.SendChatMessage("~y~[JOB]~w~ Begebe dich zur nun zur Fahrzeughalle um dein Fahrzeug abzuholen"); + player.TriggerEvent("farmerSetCheckpoint", POSITION_FAHRZEUGHALLE, 1, 1, "fahrzeughalle"); + playersWaitingForVehicle.Add(player); + playerHasField.Add(player, field); + } + + public static void spawnVehicle(Player player) + { + if (!playerHasField.ContainsKey(player)) + playerHasField.Add(player, "Landwirt (4)"); + + player.SendChatMessage("player " + player.Name + " with field " + playerHasField[player]); + + //NEXT: verschiedene spawnpositionen für fahrzeuge in VEHICLE_SPAWNS + + //Vector3 spawnPoint = VEHICLE_SPAWNS[spawnIndex++ % VEHICLE_SPAWNS.Count]; + Random rnd = new Random(); + spawnIndex = rnd.Next(VEHICLE_SPAWNS.Count); + + Vector3 spawnPoint = VEHICLE_SPAWNS.ElementAt(spawnIndex).Key; + float vehicleHeading = VEHICLE_SPAWNS[spawnPoint]; + Vehicle vehicle = null; + + if (playerHasField[player] == "Knecht (1)") + { + vehicle = NAPI.Vehicle.CreateVehicle(0x61D6BA8C, spawnPoint, vehicleHeading, 111, 111, "JOB"); + } else if (playerHasField[player] == "Hilfsarbeiter (2)") + { + vehicle = NAPI.Vehicle.CreateVehicle(0x61D6BA8C, spawnPoint, vehicleHeading, 111, 111, "JOB"); + } + else if (playerHasField[player] == "Ackersmann (3)") + { + vehicle = NAPI.Vehicle.CreateVehicle(0x843B73DE, spawnPoint, vehicleHeading, 111, 111, "JOB"); + } + else if (playerHasField[player] == "Landwirt (4)") + { + vehicle = NAPI.Vehicle.CreateVehicle(0x843B73DE, spawnPoint, vehicleHeading, 111, 111, "JOB"); + } + else if (playerHasField[player] == "Ökonom(5)") + { + vehicle = NAPI.Vehicle.CreateVehicle(0x843B73DE, spawnPoint, vehicleHeading, 111, 111, "JOB"); + } + + vehicle.NumberPlate = "JOB-" + vehicle.Id; + + _CHANGING_VEHICLE.Add(player); + if (playerVehiclePair.ContainsKey(player)) + { + Vehicle previousVehicle = null; + if (playerVehiclePair[player] != null) + previousVehicle = playerVehiclePair[player]; + playerVehiclePair.Remove(player); + + previousVehicle?.Delete(); + } + playerVehiclePair.Add(player, vehicle); + + player.SetIntoVehicle(vehicle.Handle, 0); + + } + + public override void LastCheckpoint(Player player) + { + //nothing + } + + public override void StartJobEndTimer(Player player) + { + //nothing + } + + public override bool CheckVehicle(Player player, Vehicle vehicle) + { + //nothig, kack jobsystem + return false; + } + } +} diff --git a/ReallifeGamemode.Server/Managers/PositionManager.cs b/ReallifeGamemode.Server/Managers/PositionManager.cs index d07d9e46..76e9ad3f 100644 --- a/ReallifeGamemode.Server/Managers/PositionManager.cs +++ b/ReallifeGamemode.Server/Managers/PositionManager.cs @@ -9,6 +9,7 @@ using ReallifeGamemode.Server.Extensions; using ReallifeGamemode.Server.Shop.Ammunation; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; +using ReallifeGamemode.Server.Job; namespace ReallifeGamemode.Server.Managers @@ -207,11 +208,18 @@ namespace ReallifeGamemode.Server.Managers jobId = 4, Skill = 0 }; + JobPoint jobPointFarmer = new JobPoint() + { + Position = FarmerJob.POSITION_JOB_START, + jobId = 5, + Skill = 0 + }; JobPoints.Add(jobPointRefuseCollector); JobPoints.Add(jobPointPilot); JobPoints.Add(jobPointPilot2); JobPoints.Add(jobPointBusDriver); + JobPoints.Add(jobPointFarmer); foreach (JobPoint p in JobPoints) { @@ -240,6 +248,11 @@ namespace ReallifeGamemode.Server.Managers NAPI.TextLabel.CreateTextLabel("Busfahrer - Dr\u00fccke ~y~E~s~ um Job zu starten/beenden", p.Position, 15, 1, 0, new Color(255, 255, 255), false, 0); NAPI.Blip.CreateBlip(513, p.Position, 1f, 16, "Busfahrer", 255, 0, true); } + if (p.jobId == 5) + { + NAPI.TextLabel.CreateTextLabel("Farmer - Dr\u00fccke ~y~E~s~ um Job zu starten/beenden", p.Position, 15, 1, 0, new Color(255, 255, 255), false, 0); + NAPI.Blip.CreateBlip(369, p.Position, 1f, 16, "Farmer", 255, 0, true); + } } #endregion JobPoints