using System; using System.Collections.Generic; using System.Linq; using GTANetworkAPI; using Newtonsoft.Json; using ReallifeGamemode.Server.Services; namespace ReallifeGamemode.Server.Job { public class RefuseCollectorJob : JobBase { public override int Id => 2; public override string Name => "Müllmann"; public override bool NeedVehicleToStart => false; public RefuseCollectorJob() { JobStart += RefuseCollectorJobJobStart; JobStop += RefuseCollectorJobJobStop; } private void RefuseCollectorJobJobStart(Player player) { //setClothes } private void RefuseCollectorJobJobStop(Player player) { //removeClothes and replace with old MuellmannJobBeenden(player); } public static List muellmanData = new List(); 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; foreach (var data in muellmanData) { if (data.getDataFromClient(player) == null) continue; veh = data.vehicle; ChatService.SendMessage((Player)player, "~g~Du hast den Müllmann-Job gestartet!"); player.TriggerEvent("SERVER:MuellmannStatusTrue"); player.TriggerEvent("SERVER:MuellmannBCSErstellen", JsonConvert.SerializeObject(vector3s.ToArray()), veh); return; } } } public void MuellmannJobBeenden(Player player) { 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; } } [RemoteEvent("CLIENT:MuellmannImShape")] public void MuellmannImShape(Player player, int colshapeIndex) { foreach (var data in muellmanData) { if (data.getDataFromClient(player) == null) continue; Player target = data.getPartnerClient(player); if (target != null) target.TriggerEvent("MuellmannUpdateColshape", colshapeIndex); ChatService.SendMessage((Player)player, "Du hast den Müllsack in der Hand. Bringe ihm zum Müllwagen hinten."); return; } } [RemoteEvent("CLIENT:MuellmannAddSack")] public void MuellmannAddSack(Player player) { foreach (var data in muellmanData) { if (data.getDataFromClient(player) == null) continue; int count = data.getTrashCount(); count++; data.setTrashCount(count); Player target = data.getPartnerClient(player); if (target != null) ChatService.SendMessage((Player)target, $"Es sind jetzt {count} Säcke im Müllwagen."); ChatService.SendMessage((Player)player, $"Es sind jetzt {count} Säcke im Müllwagen."); if (data.getTrashCount() >= 20) { ChatService.SendMessage((Player)player, "Auto ist voll fahre nun zu Base."); if (target != null) { ChatService.SendMessage((Player)target, "Auto ist voll fahre nun zu Base."); target.TriggerEvent("SERVER:MuellmannZuBase"); } player.TriggerEvent("SERVER:MuellmannZuBase"); } //bonus pro sack return; } } [RemoteEvent("CLIENT:MuellmannBaseSack")] public void MuellmannBaseSack(Player player) { if (player.VehicleSeat != 0) return; foreach (var data in muellmanData) { if (data.getDataFromClient(player) == null) continue; 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}"); //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 public void MuellmannOnPlayerDc(Player player) { 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; } } public void MuellmannOnPlayerDeath(Player player) { 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; } } [ServerEvent(Event.VehicleDeath)] private void MuellmannOnVehicle(Vehicle veh) { if (veh.Model != (uint)Types.VehicleModel.Trash && veh.Model != (uint)Types.VehicleModel.Trash2) return; foreach (var data in muellmanData) { if (data.vehicle == veh) { //müllfahrzeug respawnen List clients = data.getClientsFromData(); foreach (var c in clients) { RefuseCollectorJobJobStop(c); } muellmanData.Remove(data); return; } } } public void MuellmannOnPlayerEnterVehicle(Player player, Vehicle vehicle, sbyte seat) { Player target; if (vehicle.Model == (uint)Types.VehicleModel.Trash || vehicle.Model == (uint)Types.VehicleModel.Trash2) { foreach (var data in muellmanData) { if (data.vehicle == vehicle) { if (data.getDataFromClient(player) != null) return; if (!data.hasFreePlace()) { player.StopAnimation(); return; } CheckDataForDuplicatePlayer(player, data); data.setClientToData(player); MuellmannJobStarten(player, vehicle); target = data.getPartnerClient(player); if (target == null) return; ChatService.SendMessage((Player)player, $"Dein Partner ist {target.Name} !"); ChatService.SendMessage((Player)target, $"Dein Partner ist {player.Name} !"); return; } } MuellmannData newData = new MuellmannData(vehicle); muellmanData.Add(newData); CheckDataForDuplicatePlayer(player, newData); newData.setClientToData(player); MuellmannJobStarten(player, vehicle); target = newData.getPartnerClient(player); if (target == null) return; ChatService.SendMessage((Player)player, $"Dein Partner ist {target.Name} !"); ChatService.SendMessage((Player)target, $"Dein Partner ist {player.Name} !"); } } public void CheckDataForDuplicatePlayer(Player player, MuellmannData data) { foreach (var d in muellmanData) { if (d == data) continue; MuellmannData temp = d.getDataFromClient(player); if (temp == null) continue; temp.removeClientFromData(player); } } #endregion zweiSpeieler #region Data public class MuellmannData { private Player client1; private Player client2; public Vehicle vehicle; private static int trashCount = 0; public MuellmannData(Vehicle vehicle) { this.vehicle = vehicle; } public void setClientToData(Player player) { if (client1 == player || client2 == player) { Console.WriteLine("Spieler schon gespeichert"); return; } if (client1 == null) { client1 = player; return; } 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 trashCount; } public void setTrashCount(int i) { trashCount = i; } public List getClientsFromData() { List tempList = new List(); if (client1 != null) { tempList.Add(client1); } 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) return null; if (client1 == player) { return client2; } if (client2 == player) { return client1; } return null; } } #endregion Data } }