diff --git a/ReallifeGamemode.Client/Jobs/RefuseCollector.ts b/ReallifeGamemode.Client/Jobs/RefuseCollector.ts index 2e2cd576..ea5b2729 100644 --- a/ReallifeGamemode.Client/Jobs/RefuseCollector.ts +++ b/ReallifeGamemode.Client/Jobs/RefuseCollector.ts @@ -32,6 +32,7 @@ for (var i = 0; i < posArr.length; i++) { let pos = new mp.Vector3(posArr[i].x, posArr[i].y, posArr[i].z - 1) BlipTonne.push(mp.blips.new(1, pos, { name: 'Müllmann', color: 45, shortRange: false })); + BlipTonne[i].setFlashes(true); ShapeTonne.push(mp.colshapes.newSphere(posArr[i].x, posArr[i].y, posArr[i].z +0.5, 1.75)); } @@ -111,6 +112,7 @@ else if (Shape == ShapeTonneBase) { BlipTonneBase.setRoute(false); mp.events.callRemote('CLIENT:MuellmannBaseSack'); + HintenVoll = false; } }); mp.events.add("MuellmannUpdateColshape", (jsonColShape) => { @@ -132,23 +134,22 @@ HintenVoll = true; }); - mp.events.add("SERVER:MuellmannWiederLeer", () => { - HintenVoll = false; - }); function createMarker() { if (vehicle != null) { - const playerPos = vehicle.position; - let pos = new mp.Vector3(vehicle.position.x, vehicle.position.y - 5.5, vehicle.position.z - 1); + var boneIndex = vehicle.getBoneIndexByName("platelight"); + let pos = vehicle.getWorldPositionOfBone(boneIndex); if (BlipTonneHinten) BlipTonneHinten.destroy(); BlipTonneHinten = null; if (CheckpointTonneHinten) CheckpointTonneHinten.destroy(); CheckpointTonneHinten = null; if (ShapeTonneHinten) ShapeTonneHinten.destroy(); ShapeTonneHinten = null; - BlipTonneHinten = mp.blips.new(1, pos, { name: 'Müllmann', color: 24, shortRange: false }); + BlipTonneHinten = mp.blips.new(318, pos, { name: 'Müllmann', color: 24, shortRange: false }); CheckpointTonneHinten = mp.markers.new(1, pos, 1, { direction: new mp.Vector3(-235.5747, -1685.475, 32.7207), color: [0, 255, 0, 255], visible: true, dimension: 0 }); - ShapeTonneHinten = mp.colshapes.newSphere(vehicle.position.x, vehicle.position.y - 5.5, vehicle.position.z - 1, 2); + ShapeTonneHinten = mp.colshapes.newSphere(pos.x, pos.y, pos.z - 1, 2); + + } }; diff --git a/ReallifeGamemode.Server/Job/JobBase.cs b/ReallifeGamemode.Server/Job/JobBase.cs index 19262aa9..bfda3968 100644 --- a/ReallifeGamemode.Server/Job/JobBase.cs +++ b/ReallifeGamemode.Server/Job/JobBase.cs @@ -2,6 +2,7 @@ using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Services; +using System; using System.Collections.Generic; using System.Linq; diff --git a/ReallifeGamemode.Server/Job/RefuseCollectorJob.cs b/ReallifeGamemode.Server/Job/RefuseCollectorJob.cs index a8ea1585..6e93c586 100644 --- a/ReallifeGamemode.Server/Job/RefuseCollectorJob.cs +++ b/ReallifeGamemode.Server/Job/RefuseCollectorJob.cs @@ -4,10 +4,6 @@ using System.Linq; using GTANetworkAPI; using Newtonsoft.Json; using ReallifeGamemode.Server.Services; -using ReallifeGamemode.Database.Models; -using ReallifeGamemode.Server.Core.Managers; -using ReallifeGamemode.Server.Extensions; -using ReallifeGamemode.Database.Entities; namespace ReallifeGamemode.Server.Job { @@ -19,7 +15,6 @@ namespace ReallifeGamemode.Server.Job public override bool NeedVehicleToStart => false; - public RefuseCollectorJob() { JobStart += RefuseCollectorJobJobStart; @@ -28,35 +23,84 @@ namespace ReallifeGamemode.Server.Job private void RefuseCollectorJobJobStart(Player player) { - //setClothes } private void RefuseCollectorJobJobStop(Player player) { - //removeClothes and replace with old MuellmannJobBeenden(player); } + public static List muellmanData = new List(); - public List muellmanData = new List(); - private List vector3s = new List(); - - [ServerEvent(Event.ResourceStart)] - public void LoadHouses() - { - foreach(var marker in HouseManager.houseMarkers) - { - vector3s.Add(new Vector3(marker.Value.Position.X, marker.Value.Position.Y, marker.Value.Position.Z)); - } - } - + private readonly IReadOnlyCollection vector3s = new List + { + new Vector3(332.9839782714844, -1741.807373046875, 29.73055076599121), + new Vector3(321.3463439941406, -1759.986572265625, 29.644014358520508), + new Vector3(305.2624206542969, -1776.0458984375, 28.871641159057617), + new Vector3(300.1080017089844, -1784.01123046875, 28.438663482666016), + new Vector3(348.7510986328125, -1820.57373046875, 28.89409637451172), + new Vector3(328.7326965332031, -1845.462890625, 27.748090744018555), + new Vector3(439.82269287109375, -1830.4090576171875, 28.36185646057129), + new Vector3(427.9081115722656, -1841.7236328125, 28.463409423828125), + new Vector3(412.9471130371094, -1856.100341796875, 27.32313346862793), + new Vector3(399.9404296875, -1865.1639404296875, 26.716350555419922), + new Vector3(386.0218811035156, -1882.2705078125, 25.788604736328125), + new Vector3(368.0433349609375, -1896.9063720703125, 25.17853355407715), + new Vector3(473.30694580078125, -1775.0206298828125, 28.69390296936035), + new Vector3(475.3251647949219, -1758.085205078125, 28.892553329467773), + new Vector3(479.7771301269531, -1736.3861083984375, 29.151023864746094), + new Vector3(490.24884033203125, -1714.48974609375, 29.618074417114258), + new Vector3(500.4996643066406, -1697.649658203125, 29.78924560546875), + new Vector3(997.3480834960938, -729.1090087890625, 57.81574630737305), + new Vector3(979.4336547851562, -716.036376953125, 58.22065734863281), + new Vector3(970.9692993164062, -700.552978515625, 58.48196029663086), + new Vector3(960.6688232421875, -669.340576171875, 58.44976806640625), + new Vector3(943.6602783203125, -653.6834716796875, 58.4287109375), + new Vector3(929.2879028320312, -639.0972900390625, 58.242271423339844), + new Vector3(903.5896606445312, -616.0307006835938, 58.4549560546875), + new Vector3(886.8736572265625, -607.783447265625, 58.445091247558594), + new Vector3(861.7691650390625, -582.5391845703125, 58.156497955322266), + new Vector3(920.3253784179688, -571.0201416015625, 58.36641311645508), + new Vector3(963.1478881835938, -595.95654296875, 59.902706146240234), + new Vector3(976.3702392578125, -579.7669067382812, 59.63575744628906), + new Vector3(1010.3785400390625, -572.6109008789062, 60.59443283081055), + new Vector3(999.9313354492188, -594.0516357421875, 59.63548278808594), + new Vector3(1200.4964599609375, -576.1556396484375, 69.13911437988281), + new Vector3(1206.1680908203125, -620.3853759765625, 66.43684387207031), + new Vector3(1221.357421875, -668.6166381835938, 63.49313735961914), + new Vector3(1222.5732421875, -697.0482788085938, 60.806724548339844), + new Vector3(1228.840576171875, -725.5143432617188, 60.79587173461914), + new Vector3(1266.1864013671875, -703.4100341796875, 64.55311584472656), + new Vector3(1271.0609130859375, -682.7374267578125, 66.03081512451172), + new Vector3(1265.1763916015625, -647.4813842773438, 67.92143249511719), + new Vector3(1251.595947265625, -621.8599853515625, 69.41301727294922), + new Vector3(1241.6507568359375, -601.6868286132812, 69.42526245117188), + new Vector3(1242.1136474609375, -565.8869018554688, 69.65742492675781), + new Vector3(-1898.0162353515625, 133.0081787109375, 81.85769653320312), + new Vector3(-1960.471435546875, 212.37518310546875, 86.6491470336914), + new Vector3(-1969.3568115234375, 246.49497985839844, 87.61412811279297), + new Vector3(-1995.2470703125, 300.3732604980469, 91.96467590332031), + new Vector3(-2009.92822265625, 445.47509765625, 103.01591491699219), + new Vector3(-1995.321044921875, 590.8935546875, 117.90331268310547), + new Vector3(-1973.7674560546875, 630.2719116210938, 122.53621673583984), + new Vector3(-1929.476806640625, 595.318603515625, 122.28478240966797), + new Vector3(-1939.19873046875, 551.6788330078125, 114.82840728759766), + new Vector3(-1943.7459716796875, 449.3956298828125, 102.92235565185547), + new Vector3(-1932.1275634765625, 362.3074035644531, 93.78870391845703), + new Vector3(-1923.6715087890625, 298.3466796875, 89.28668975830078), + new Vector3(-1874.3028564453125, 201.1282958984375, 84.2945327758789), + new Vector3(-1805.06298828125, 438.19415283203125, 128.7073974609375), + new Vector3(-1540.2606201171875, 421.3618469238281, 110.0140151977539), + new Vector3(-1496.3275146484375, 437.88836669921875, 112.49789428710938), + new Vector3(-1308.279541015625, 449.301513671875, 100.96974182128906), + new Vector3(-1215.8623046875, 458.5867919921875, 91.85366821289062), + }.AsReadOnly(); [RemoteEvent("CLIENT:MuellmannJobStarten")] public void MuellmannJobStarten(Player player, Vehicle vehicle) { - if (vehicle.Model == (uint)Types.VehicleModel.Trash || vehicle.Model == (uint)Types.VehicleModel.Trash2) { Vehicle veh; @@ -72,7 +116,6 @@ namespace ReallifeGamemode.Server.Job } } - public void MuellmannJobBeenden(Player player) { if (player.IsInVehicle) @@ -80,11 +123,24 @@ namespace ReallifeGamemode.Server.Job Vehicle vehicle = player.Vehicle; if (vehicle.Model == (uint)Types.VehicleModel.Trash || vehicle.Model == (uint)Types.VehicleModel.Trash2) { - ChatService.SendMessage((Player)player, "~g~Du hast den Müllmann-Job beendet!"); player.TriggerEvent("SERVER:MuellmannStatusFalse"); player.TriggerEvent("SERVER:MuellmannBCSEntfernen"); + foreach (var data in muellmanData) + { + if (data.getDataFromClient(player) == null) continue; + + if (data.hasFreePlace()) + { + muellmanData.Remove(data); + //müllwagen respawnen + return; + } + + data.removeClientFromData(player); + return; + } } else { @@ -95,8 +151,8 @@ namespace ReallifeGamemode.Server.Job { ChatService.SendMessage((Player)player, "~r~INFO: Zum Job beenden musst du im Auto sein."); } - } + [RemoteEvent("CLIENT:MuellmannImShape")] public void MuellmannImShape(Player player, string jsonColShape) { @@ -145,29 +201,23 @@ namespace ReallifeGamemode.Server.Job { if (data.getDataFromClient(player) == null) continue; - Console.WriteLine($"[DATA DEBUG] vehicle: {data.vehicle.DisplayName} | Players: {data.getClientsFromData()}"); - int count = data.getTrashCount(); - + Player target = data.getPartnerClient(player); if (target != null) ChatService.SendMessage((Player)target, $"Fahrzeug wurde entleert. Säcke: {count}"); ChatService.SendMessage((Player)player, $"Fahrzeug wurde entleert. Säcke: {count}"); - player.TriggerEvent("SERVER:MuellmannHintenWiederLeer"); //bonus pro sack data.setTrashCount(0); - + Console.WriteLine($"[DATA DEBUG] vehicle: {data.vehicle.DisplayName} | Players: {data.getClientsFromData().Count} | Säcke: {data.getTrashCount()}"); return; } } #region zweiSpeieler - [ServerEvent(Event.PlayerDisconnected)] - private void SrvEvent_PlayerDc(Player player) + + public void MuellmannOnPlayerDc(Player player) { - if (!player.IsLoggedIn() || !GetUsersInJob().Contains(player)) return; - - foreach (var data in muellmanData) { if (data.getDataFromClient(player) == null) continue; @@ -182,16 +232,10 @@ namespace ReallifeGamemode.Server.Job data.removeClientFromData(player); return; } - } - [ServerEvent(Event.PlayerDeath)] - private void SrvEvent_PlayerDeath(Player player) + public void MuellmannOnPlayerDeath(Player player) { - if (!player.IsLoggedIn() || !GetUsersInJob().Contains(player)) return; - User u = player.GetUser(); - if (u.JobId != this.Id) return; - foreach (var data in muellmanData) { if (data.getDataFromClient(player) == null) continue; @@ -206,13 +250,12 @@ namespace ReallifeGamemode.Server.Job data.removeClientFromData(player); return; } - } [ServerEvent(Event.VehicleDeath)] - private void SrvEvent_Vehicle(Vehicle veh) + private void MuellmannOnVehicle(Vehicle veh) { - if (veh.Model != (uint)Types.VehicleModel.Trash && veh.Model != (uint)Types.VehicleModel.Trash2) return; + if (veh.Model != (uint)Types.VehicleModel.Trash && veh.Model != (uint)Types.VehicleModel.Trash2) return; foreach (var data in muellmanData) { if (data.vehicle == veh) @@ -220,22 +263,17 @@ namespace ReallifeGamemode.Server.Job //müllfahrzeug respawnen List clients = data.getClientsFromData(); - foreach(var c in clients){ RefuseCollectorJobJobStop(c); } - + foreach (var c in clients) { RefuseCollectorJobJobStop(c); } + muellmanData.Remove(data); return; } } } - [ServerEvent(Event.PlayerEnterVehicleAttempt)] - public void SrvEvent_PlayerEnterVehicle(Player player, Vehicle vehicle, sbyte seat) + public void MuellmannOnPlayerEnterVehicle(Player player, Vehicle vehicle, sbyte seat) { Player target; - if (!player.IsLoggedIn() || !GetUsersInJob().Contains(player)) return; - User u = player.GetUser(); - if (u.JobId != this.Id) return; - if (vehicle.Model == (uint)Types.VehicleModel.Trash || vehicle.Model == (uint)Types.VehicleModel.Trash2) { foreach (var data in muellmanData) @@ -294,20 +332,22 @@ namespace ReallifeGamemode.Server.Job } } - #endregion + #endregion zweiSpeieler #region Data + public class MuellmannData { - Player client1; - Player client2; + private Player client1; + private Player client2; public Vehicle vehicle; - int trashCount = 0; + private static int trashCount = 0; public MuellmannData(Vehicle vehicle) { this.vehicle = vehicle; } + public void setClientToData(Player player) { if (client1 == player || client2 == player) @@ -320,19 +360,23 @@ namespace ReallifeGamemode.Server.Job else if (client2 == null) { client2 = player; return; } else if (client1 != null && client2 != null) { Console.WriteLine("kein Platz"); } } + public void removeClientFromData(Player player) { if (client1 == player) { client1 = null; } if (client2 == player) { client2 = null; } } + public int getTrashCount() { - return this.trashCount; + return trashCount; } + public void setTrashCount(int i) { - this.trashCount = i; + trashCount = i; } + public List getClientsFromData() { List tempList = new List(); @@ -340,18 +384,21 @@ namespace ReallifeGamemode.Server.Job if (client2 != null) { tempList.Add(client2); } return tempList; } + public MuellmannData getDataFromClient(Player player) { if (client1 != player && client2 != player) return null; return this; } + public bool hasFreePlace() { if (client1 != null && client2 != null) return false; return true; } + public Player getPartnerClient(Player player) { if (client1 != player && client2 != player) @@ -362,8 +409,7 @@ namespace ReallifeGamemode.Server.Job return null; } } - #endregion + + #endregion Data } - } - diff --git a/ReallifeGamemode.Server/Managers/JobManager.cs b/ReallifeGamemode.Server/Managers/JobManager.cs index b391be06..0375b32c 100644 --- a/ReallifeGamemode.Server/Managers/JobManager.cs +++ b/ReallifeGamemode.Server/Managers/JobManager.cs @@ -145,8 +145,12 @@ namespace ReallifeGamemode.Server.Managers } } + JobPoint nearJobPoint = PositionManager.jobPoints.Find(p => p.Position.DistanceTo(player.Position) <= 2); + if (nearJobPoint == null && u.JobId == 2) return; + - var json = JsonConvert.SerializeObject(data); + + var json = JsonConvert.SerializeObject(data); player.TriggerEvent("SERVER:Job_ShowJobMenu", job.Name, json); } @@ -256,6 +260,24 @@ namespace ReallifeGamemode.Server.Managers } } + [ServerEvent(Event.PlayerEnterVehicleAttempt)] + private void JobManagerEnterVehicleAttempt(Player player, Vehicle vehicle, sbyte seat) + { + if (JobManager.GetJob().GetUsersInJob().Contains(player)){ JobManager.GetJob().MuellmannOnPlayerEnterVehicle(player, vehicle, seat); } + } + + [ServerEvent(Event.PlayerDeath)] + private void JobManagerOnPlayerDeath(Player player) + { + if (JobManager.GetJob().GetUsersInJob().Contains(player)) { JobManager.GetJob().MuellmannOnPlayerDeath(player); } + } + + [ServerEvent(Event.PlayerDisconnected)] + private void JobManagerOnPlayerDisconnect(Player player, DisconnectionType type, string reason) + { + if (JobManager.GetJob().GetUsersInJob().Contains(player)) { JobManager.GetJob().MuellmannOnPlayerDc(player); } + } + [ServerEvent(Event.PlayerExitVehicle)] public void JobManagerPlayerEnterVehicle(Player player, Vehicle veh) { diff --git a/ReallifeGamemode.Server/Managers/PositionManager.cs b/ReallifeGamemode.Server/Managers/PositionManager.cs index 1f7a7ac8..43f4e249 100644 --- a/ReallifeGamemode.Server/Managers/PositionManager.cs +++ b/ReallifeGamemode.Server/Managers/PositionManager.cs @@ -20,6 +20,8 @@ namespace ReallifeGamemode.Server.Managers public static List itemshopPoints = new List(); + public static List jobPoints = new List(); + [ServerEvent(Event.ResourceStart)] public void OnResourceStart() { @@ -149,6 +151,22 @@ namespace ReallifeGamemode.Server.Managers #endregion ElevetaorPoints + JobPoint jobPointRefuseCollector = new JobPoint() + { + Position = new Vector3(-429.237, -1727.9839, 19.73836), + jobId = 2 + }; + + jobPoints.Add(jobPointRefuseCollector); + + foreach(JobPoint p in jobPoints) + { + NAPI.Marker.CreateMarker(1, new Vector3(p.Position.X, p.Position.Y, p.Position.Z - 2), new Vector3(p.Position.X, p.Position.Y, p.Position.Z + 1), + new Vector3(0, 0, 0), 1.5f, new Color(255, 255, 255, 50), false, 0); + NAPI.TextLabel.CreateTextLabel("M\u00fcllmann - Dr\u00fccke ~y~J~s~ um Job zu starten", p.Position, 7, 1, 0, new Color(255, 255, 255), false, 0); + NAPI.Blip.CreateBlip(318, p.Position, 1f, 0, "Müllmann", 255, 0,true); + } + #region Shops foreach (var shop in ShopManager.clotheStores) { @@ -229,6 +247,13 @@ public class ItemshopPoint } +public class JobPoint +{ + public Vector3 Position { get; set; } + public int jobId { get; set; } + +} + public class ElevatorPoint { public Vector3 Position { get; set; }