diff --git a/ReallifeGamemode.Client/Gui/blips.ts b/ReallifeGamemode.Client/Gui/blips.ts index b02ca9f7..5b8e829d 100644 --- a/ReallifeGamemode.Client/Gui/blips.ts +++ b/ReallifeGamemode.Client/Gui/blips.ts @@ -1,8 +1,4 @@ - - -export default function playerBlips() { - - +export default function playerBlips() { var playerBlipMap: Map; var ready = false; @@ -14,12 +10,14 @@ export default function playerBlips() { (player) => { if (mp.players.local == player) return; - + if (!playerBlipMap.has(player)) { let pBlip = mp.blips.new(1, player.position, { + alpha: 200, shortRange: true, dimension: mp.players.local.dimension, - drawDistance: 300 + drawDistance: 300, + scale: 0.7, }); pBlip.setCategory(7); @@ -47,7 +45,6 @@ export default function playerBlips() { } }); - mp.events.addDataHandler("blipColor", (entity, value) => { if (entity.type === "player") { let color = parseInt(value); diff --git a/ReallifeGamemode.Client/Jobs/RefuseCollector.ts b/ReallifeGamemode.Client/Jobs/RefuseCollector.ts index e3a73646..673e4cfd 100644 --- a/ReallifeGamemode.Client/Jobs/RefuseCollector.ts +++ b/ReallifeGamemode.Client/Jobs/RefuseCollector.ts @@ -1,20 +1,19 @@ export default function RefuseCollector() { var State = false; - var Traegt = false; - var HintenVoll = false; + var hasBinBag = false; + var dumptruckIsFull = false; - var BlipTonneHinten = null; - var CheckpointTonneHinten = null; - var ShapeTonneHinten = null; - var BlipTonneBase = null; - var CheckpointTonneBase = null; - var ShapeTonneBase = null; - var vehicle = null; + var blipDumptruck = null; + var dumptruckMarker = null; + var colshapeDumptruck = null; + var blipBase = null; + var markerBase = null; + var colshapeBase = null; + var vehRemoteID = null; var interval = null; - var BlipTonne = []; - var ShapeTonne = []; + var garbageToCollect = new Map(); mp.events.add('SERVER:MuellmannStatusTrue', () => { State = true; @@ -24,111 +23,138 @@ State = false; }); - mp.events.add('SERVER:MuellmannBCSErstellen', (jsonPosArr, veh) => { + mp.events.add('SERVER:MuellmannBCSErstellen', (jsonPosArr, veh: VehicleMp) => { let posArr = JSON.parse(jsonPosArr); - vehicle = veh; + vehRemoteID = veh.remoteId; 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ülltonne', color: 45, shortRange: false })); - BlipTonne[i].setFlashTimer(2000); - ShapeTonne.push(mp.colshapes.newSphere(posArr[i].x, posArr[i].y, posArr[i].z + 0.5, 1.75)); + + let newBlip = mp.blips.new(1, new mp.Vector3(pos.x, pos.y, pos.z), { name: 'Mülltonne', color: 0, shortRange: false, scale: 0.7 }); + let newColShape = mp.colshapes.newSphere(posArr[i].x, posArr[i].y, posArr[i].z + 0.5, 1.75); + newBlip.setPriority(1000); + + newBlip.setFlashTimer(2000); + + garbageToCollect.set(i, { blip: newBlip, colshape: newColShape }); } - BlipTonneBase = mp.blips.new(1, new mp.Vector3(-442.3999, -1701.5234, 18.933002 - 1), { name: 'Recylinganlage', color: 5, shortRange: false }); - CheckpointTonneBase = mp.markers.new(1, new mp.Vector3(-442.3999, -1701.5234, 18.933002 - 1), 10, { direction: new mp.Vector3(-235.5747, -1685.475, 32.7207), color: [255, 255, 0, 150], visible: true, dimension: 0 }); - ShapeTonneBase = mp.colshapes.newSphere(-442.3999, -1701.5234, 18.933002 - 1, 10); + blipBase = mp.blips.new(515, new mp.Vector3(-442.3999, -1701.5234, 18.933002 - 1), { name: 'Recylinganlage', color: 24, shortRange: false }); + markerBase = mp.markers.new(1, new mp.Vector3(-442.3999, -1701.5234, 18.933002 - 1), 10, { direction: new mp.Vector3(-235.5747, -1685.475, 32.7207), color: [255, 255, 0, 150], visible: true, dimension: 0 }); + colshapeBase = mp.colshapes.newSphere(-442.3999, -1701.5234, 18.933002 - 1, 10); }); mp.events.add('SERVER:MuellmannBCSEntfernen', () => { - for (var i = 0; i < BlipTonne.length; i++) { - if (BlipTonne[i] == null) continue; - BlipTonne[i].destroy(); - ShapeTonne[i].destroy(); - } - BlipTonne = []; - ShapeTonne = []; + garbageToCollect.forEach((collection, index) => { + let { blip, colshape } = collection; - if (BlipTonneHinten) BlipTonneHinten.destroy(); - BlipTonneHinten = null; - if (CheckpointTonneHinten) CheckpointTonneHinten.destroy(); - CheckpointTonneHinten = null; - if (ShapeTonneHinten) ShapeTonneHinten.destroy(); - ShapeTonneHinten = null; - if (BlipTonneBase) BlipTonneBase.destroy(); - BlipTonneBase = null; - if (CheckpointTonneBase) CheckpointTonneBase.destroy(); - CheckpointTonneBase = null; - if (ShapeTonneBase) ShapeTonneBase.destroy(); - ShapeTonneBase = null; - Traegt = false; + if (colshape && mp.colshapes.exists(colshape)) + colshape.destroy(); + if (blip && mp.blips.exists(blip)) + blip.destroy(); + }); + + garbageToCollect.clear(); + + if (blipDumptruck) blipDumptruck.destroy(); + blipDumptruck = null; + if (dumptruckMarker) dumptruckMarker.destroy(); + dumptruckMarker = null; + if (colshapeDumptruck) colshapeDumptruck.destroy(); + colshapeDumptruck = null; + if (blipBase) blipBase.destroy(); + blipBase = null; + if (markerBase) markerBase.destroy(); + markerBase = null; + if (colshapeBase) colshapeBase.destroy(); + colshapeBase = null; + hasBinBag = false; }); - mp.events.add("playerEnterColshape", (Shape, player) => { + mp.events.add("playerEnterColshape", (currentShape, player) => { //mp.events.callRemote('CLIENT:ImShape', JSON.stringify(Shape)); - for (var i = 0; i < ShapeTonne.length; i++) { - if (Shape != ShapeTonne[i]) continue; - if (!mp.players.local.vehicle) { - if (!Traegt) { - if (!HintenVoll) { - mp.events.callRemote('CLIENT:MuellmannImShape', i); - Traegt = true; - BlipTonne[i].destroy(); - BlipTonne[i] = null; - ShapeTonne[i].destroy(); - ShapeTonne[i] = null; - interval = setInterval(function () { createMarker(); }, 2); - } - else { - mp.gui.chat.push("Der Müllwagen ist bereits voll! Fahre zur Base und lade ab!"); - return; - } - } - else { - mp.gui.chat.push(`Du trägst bereits einen Müllsack!`); - return; - } + let i = getIndex(currentShape); + + if (garbageToCollect.has(i)) { + let { blip, colshape } = garbageToCollect.get(i); + + if (mp.players.local.vehicle) { mp.events.call("renderTextOnScreen", "Steige aus dem Müllwagen aus um den Müllsack zu entnehmen."); return; } + if (hasBinBag) { mp.gui.chat.push("Du trägst bereits einen Müllsack!"); return; } + + if (!dumptruckIsFull) { + mp.events.callRemote('CLIENT:MuellmannImShape', i); + hasBinBag = true; + + if (colshape) + colshape.destroy(); + if (blip) + blip.destroy(); + + garbageToCollect.delete(i); + + interval = setInterval(function () { createMarker(); }, 2); } else { - mp.events.call("renderTextOnScreen", "Steige aus dem Müllwagen aus um den Müllsack zu entnehmen."); + mp.gui.chat.push("Der Müllwagen ist bereits voll! Fahre zur Base und lade ab!"); + return; } } - if (Shape == ShapeTonneHinten) { - if (Traegt) { - Traegt = false; + + if (currentShape == colshapeDumptruck) { + if (hasBinBag) { + hasBinBag = false; mp.events.callRemote('CLIENT:MuellmannAddSack'); clearInterval(interval); - if (BlipTonneHinten) BlipTonneHinten.destroy(); - BlipTonneHinten = null; - if (CheckpointTonneHinten) CheckpointTonneHinten.destroy(); - CheckpointTonneHinten = null; - if (ShapeTonneHinten) ShapeTonneHinten.destroy(); - ShapeTonneHinten = null; + if (blipDumptruck) blipDumptruck.destroy(); + blipDumptruck = null; + if (dumptruckMarker) dumptruckMarker.destroy(); + dumptruckMarker = null; + if (colshapeDumptruck) colshapeDumptruck.destroy(); + colshapeDumptruck = null; } } - else if (Shape == ShapeTonneBase) { - BlipTonneBase.setRoute(false); + else if (currentShape == colshapeBase) { + blipBase.setRoute(false); mp.events.callRemote('CLIENT:MuellmannBaseSack'); - HintenVoll = false; + dumptruckIsFull = false; } }); mp.events.add("MuellmannUpdateColshape", (index) => { - if (BlipTonne[index] != null) - BlipTonne[index].destroy(); - BlipTonne[index] = null; - if (ShapeTonne[index] != null) - ShapeTonne[index].destroy(); - ShapeTonne[index] = null; + if (!garbageToCollect.has(index)) return; + + let { blip, colshape } = garbageToCollect.get(index); + + if (blip && mp.blips.exists(blip)) { + blip.destroy(); + } + + if (colshape && mp.colshapes.exists(colshape)) { + colshape.destroy(); + } + + garbageToCollect.delete(index); }); mp.events.add("SERVER:MuellmannZuBase", () => { - BlipTonneBase.setRoute(true); - BlipTonneBase.setRouteColour(5); - HintenVoll = true; + blipBase.setRoute(true); + blipBase.setRouteColour(5); + dumptruckIsFull = true; }); + function getIndex(shape: ColshapeMp): number { + let i = -1; + garbageToCollect.forEach((collection, index) => { + let { blip, colshape } = collection; + if (shape == colshape) i = index; + }); + return i; + } + function createMarker() { + let vehicle; + if (vehRemoteID) + vehicle = mp.vehicles.atRemoteId(vehRemoteID); if (vehicle != null) { var boneIndex2 = vehicle.getBoneIndexByName("platelight"); var boneIndex1 = vehicle.getBoneIndexByName("chassis_dummy"); @@ -153,15 +179,15 @@ let pos = plateVec.add(temp); - if (BlipTonneHinten) BlipTonneHinten.destroy(); - BlipTonneHinten = null; - if (CheckpointTonneHinten) CheckpointTonneHinten.destroy(); - CheckpointTonneHinten = null; - if (ShapeTonneHinten) ShapeTonneHinten.destroy(); - ShapeTonneHinten = null; - 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(pos.x, pos.y, pos.z, 2); + if (blipDumptruck) blipDumptruck.destroy(); + blipDumptruck = null; + if (dumptruckMarker) dumptruckMarker.destroy(); + dumptruckMarker = null; + if (colshapeDumptruck) colshapeDumptruck.destroy(); + colshapeDumptruck = null; + blipDumptruck = mp.blips.new(318, pos, { name: 'Müllmann', color: 24, shortRange: false }); + dumptruckMarker = 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 }); + colshapeDumptruck = mp.colshapes.newSphere(pos.x, pos.y, pos.z, 2); } }; } \ No newline at end of file diff --git a/ReallifeGamemode.Client/Player/keys.ts b/ReallifeGamemode.Client/Player/keys.ts index 8f2e3751..f4c11e13 100644 --- a/ReallifeGamemode.Client/Player/keys.ts +++ b/ReallifeGamemode.Client/Player/keys.ts @@ -113,9 +113,7 @@ export default function keys(globalData: IGlobalData) { //N //Motor Starten mp.keys.bind(0x4E, false, function () { if (!globalData.InChat) { - if (!player.vehicle) return; - if (player.vehicle.getSpeed() > 5) return; - mp.events.callRemote("keyPress:N"); + mp.events.callRemote("keyPress:N"); } }); @@ -136,7 +134,8 @@ export default function keys(globalData: IGlobalData) { //J // Job Starten mp.keys.bind(0x4A, false, () => { if (!globalData.InChat && globalData.LoggedIn && !globalData.InTuning) { - mp.events.callRemote("CLIENT:JobManager_ShowJobMenu"); + //mp.events.callRemote("CLIENT:JobManager_ShowJobMenu"); + mp.events.callRemote("keyPress:J"); } }); diff --git a/ReallifeGamemode.Client/core/rage-mp/entities.ts b/ReallifeGamemode.Client/core/rage-mp/entities.ts index df59090c..537c765e 100644 --- a/ReallifeGamemode.Client/core/rage-mp/entities.ts +++ b/ReallifeGamemode.Client/core/rage-mp/entities.ts @@ -203,26 +203,50 @@ class RageVehicle extends RageEntity implements IVehicle { } isSeatFree(seat: VehicleSeat): boolean { + if (!mp.vehicles.exists(this.vehicle)) { + return false; + } + return this.vehicle.isSeatFree(seat - 1); } setEngineStatus(status: boolean, instantly: boolean, otherwise: boolean) { + if (!mp.vehicles.exists(this.vehicle)) { + return false; + } + this.vehicle.setEngineOn(status, instantly, otherwise); } setUndriveable(status: boolean) { + if (!mp.vehicles.exists(this.vehicle)) { + return false; + } + this.vehicle.setUndriveable(status); } setDoorsLocked(state: boolean) { + if (!mp.vehicles.exists(this.vehicle)) { + return false; + } + this.vehicle.setDoorsLocked(state ? 2 : 1); } setDoorOpen(door: number, loose: boolean, instantly: boolean) { + if (!mp.vehicles.exists(this.vehicle)) { + return false; + } + this.vehicle.setDoorOpen(door, loose, instantly); } setDoorShut(door: number, instantly: boolean) { + if (!mp.vehicles.exists(this.vehicle)) { + return false; + } + this.vehicle.setDoorShut(door, instantly); } } diff --git a/ReallifeGamemode.Server/Commands/AdminCommands.cs b/ReallifeGamemode.Server/Commands/AdminCommands.cs index 2979765b..551d092d 100644 --- a/ReallifeGamemode.Server/Commands/AdminCommands.cs +++ b/ReallifeGamemode.Server/Commands/AdminCommands.cs @@ -276,7 +276,8 @@ namespace ReallifeGamemode.Server.Commands [Command("tsupport", "~m~Benutzung: ~s~/tsupport", Alias = "ts")] public void CmdAdminTSupport(Player player) { - if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true) + User user = player.GetUser(); + if (!user.IsAdmin(AdminLevel.SUPPORTER)) { ChatService.NotAuthorized(player); return; @@ -289,51 +290,14 @@ namespace ReallifeGamemode.Server.Commands if (player.GetData("SAdminduty") == false) { player.SetData("SAdminduty", true); - player.SetSharedData("blipColor", 30); - player.SetSharedData("nameTagColor", -2); ChatService.SendMessage(player, "~g~ ** " + "Du befindest dich im T-Support"); } else { player.SetData("SAdminduty", false); ChatService.SendMessage(player, "!{#ee4d2e}** " + "Du befindest dich nicht mehr im T-Support"); - - using (var dbContext = new DatabaseContext()) - { - User targetUser = player.GetUser(dbContext); - switch (targetUser.FactionId) - { - case null: - player.SetSharedData("blipColor", 0); - player.SetSharedData("nameTagColor", 0); - break; - case 0: - player.SetSharedData("blipColor", 0); - player.SetSharedData("nameTagColor", 0); - break; - case 8: - player.SetSharedData("blipColor", 83); - player.SetSharedData("nameTagColor", 8); - break; - - case 7: - player.SetSharedData("blipColor", 52); - player.SetSharedData("nameTagColor", 7); - break; - - case 4: - player.SetSharedData("blipColor", 5); - player.SetSharedData("nameTagColor", 4); - break; - case 9: - player.SetSharedData("blipColor", 25); - player.SetSharedData("nameTagColor", 9); - break; - } - player.SetSharedData("nameTagColor", targetUser.FactionId); - } - } + user.SetBlipAndNametagColor(); } [Command("aduty", "~m~Benutzung: ~s~/aduty")] public void CmdAdminAduty(Player player) @@ -354,6 +318,11 @@ namespace ReallifeGamemode.Server.Commands } else { + if(player.GetData("SAdminduty")) + { + CmdAdminTSupport(player); + } + player.SetData("Adminduty", false); ChatService.Broadcast("!{#ee4d2e}[SUPPORT] " + player.Name + " hat sich vom Support abgemeldet"); @@ -1493,37 +1462,12 @@ namespace ReallifeGamemode.Server.Commands } ChatService.SendMessage(target, "!{#8181E9}Deine Akte wurde vom Admin " + player.Name + " gelöscht. Grund: " + reason); ChatService.BroadcastFaction("!{#8181E9}HQ: Die Akte von " + target.Name + " wurde vom Admin " + player.Name + " gelöscht. Grund: " + reason + ".", new List() { 1, 3 }); - switch (targetUser.FactionId) - { - case null: - target.SetSharedData("blipColor", 0); - target.SetSharedData("nameTagColor", 0); - break; - case 0: - target.SetSharedData("blipColor", 0); - target.SetSharedData("nameTagColor", 0); - break; - case 8: - target.SetSharedData("blipColor", 83); - target.SetSharedData("nameTagColor", 8); - break; - - case 7: - target.SetSharedData("blipColor", 52); - target.SetSharedData("nameTagColor", 7); - break; - - case 4: - target.SetSharedData("blipColor", 5); - target.SetSharedData("nameTagColor", 4); - break; - case 9: - target.SetSharedData("blipColor", 25); - target.SetSharedData("nameTagColor", 9); - break; - } + target.TriggerEvent("jailTime", 0); targetUser.Wanteds = 0; + + targetUser.SetBlipAndNametagColor(); + dbContext.SaveChanges(); } } @@ -1573,7 +1517,7 @@ namespace ReallifeGamemode.Server.Commands return; } - Vehicle v = NAPI.Vehicle.CreateVehicle(uHash, player.Position, player.Rotation.Z, color1, color2, engine: true); + Vehicle v = NAPI.Vehicle.CreateVehicle(uHash, player.Position, player.Heading, color1, color2, engine: true); VehicleStreaming.SetEngineState(v, true); VehicleStreaming.SetLockStatus(v, false); player.SetIntoVehicle(v.Handle, 0); @@ -2489,38 +2433,7 @@ namespace ReallifeGamemode.Server.Commands } u.FactionLeader = false; - switch (u.FactionId) - { - case null: - target.SetSharedData("blipColor", 0); - target.SetSharedData("nameTagColor", 0); - break; - - case 0: - target.SetSharedData("blipColor", 0); - target.SetSharedData("nameTagColor", 0); - break; - - case 8: - target.SetSharedData("blipColor", 83); - target.SetSharedData("nameTagColor", 8); - break; - - case 7: - target.SetSharedData("blipColor", 52); - target.SetSharedData("nameTagColor", 7); - break; - - case 4: - target.SetSharedData("blipColor", 5); - target.SetSharedData("nameTagColor", 4); - break; - case 9: - target.SetSharedData("blipColor", 25); - target.SetSharedData("nameTagColor", 9); - - break; - } + u.SetBlipAndNametagColor(); dbContext.SaveChanges(); } } @@ -2563,36 +2476,7 @@ namespace ReallifeGamemode.Server.Commands ChatService.SendMessage(player, "~b~[ADMIN]~s~ Du hast hast den Spieler ~y~" + target.Name + "~s~ zum Leader der Fraktion ~o~" + f.Name + "~s~ ernannt."); ChatService.SendMessage(target, "~b~[ADMIN]~s~ Du wurdest von ~y~" + player.Name + "~s~ zum Leader der Fraktion ~o~" + f.Name + "~s~ ernannt."); - switch (u.FactionId) - { - case null: - target.SetSharedData("blipColor", 0); - target.SetSharedData("nameTagColor", 0); - break; - case 0: - target.SetSharedData("blipColor", 0); - target.SetSharedData("nameTagColor", 0); - break; - - case 8: - target.SetSharedData("blipColor", 83); - target.SetSharedData("nameTagColor", 8); - break; - - case 7: - target.SetSharedData("blipColor", 52); - target.SetSharedData("nameTagColor", 7); - break; - - case 4: - target.SetSharedData("blipColor", 5); - target.SetSharedData("nameTagColor", 4); - break; - case 9: - target.SetSharedData("blipColor", 25); - target.SetSharedData("nameTagColor", 9); - break; - } + u.SetBlipAndNametagColor(); dbContext.SaveChanges(); } } @@ -3637,7 +3521,7 @@ namespace ReallifeGamemode.Server.Commands public void CmdAdminCheckStats(Player player, string nameOrId) { User user = player.GetUser(); - if(!user.IsAdmin(AdminLevel.ADMIN)) + if(!user.IsAdmin(AdminLevel.SUPPORTER)) { ChatService.NotAuthorized(player); } diff --git a/ReallifeGamemode.Server/Commands/FactionCommands.cs b/ReallifeGamemode.Server/Commands/FactionCommands.cs index 8cebc338..faae6191 100644 --- a/ReallifeGamemode.Server/Commands/FactionCommands.cs +++ b/ReallifeGamemode.Server/Commands/FactionCommands.cs @@ -109,9 +109,9 @@ namespace ReallifeGamemode.Server.Commands string factionName = string.Empty; - if(f.StateOwned) + if(f?.StateOwned ?? false) { - factionName = player.GetUser().GetFactionRank().RankName; + factionName = u.GetFactionRank().RankName; } else { @@ -292,16 +292,15 @@ namespace ReallifeGamemode.Server.Commands if (player.IsInVehicle) { - ChatService.ErrorMessage(player, "Du kannst in einem Auto nicht wiederbeleben."); + ChatService.ErrorMessage(player, "Du kannst in einem Auto nicht wiederbeleben"); return; } - using var dbContext = new DatabaseContext(); var nearPlayers = NAPI.Player.GetPlayersInRadiusOfPlayer(4, player); var deadPlayer = nearPlayers.Where(i => i.GetData("isDead") == true).FirstOrDefault(); if (player == deadPlayer) { - ChatService.ErrorMessage(player, "Du kannst dich nicht selbst wiederbeleben."); + ChatService.ErrorMessage(player, "Du kannst dich nicht selbst wiederbeleben"); return; } @@ -311,34 +310,39 @@ namespace ReallifeGamemode.Server.Commands return; } - var deadPlayerUser = deadPlayer.GetUser(dbContext); - - if (deadPlayerUser.Handmoney >= 100) + if (deadPlayer.HasData("reviveSperre")) { - deadPlayerUser.Handmoney -= 100; + ChatService.ErrorMessage(player, "Der Spieler hat eine Revivesperre"); + return; } - else + using (var dbContext = new DatabaseContext()) { - int bankMoney = 100 - deadPlayerUser.Handmoney; - deadPlayerUser.Handmoney = 0; - deadPlayerUser.BankAccount.Balance -= bankMoney; - } + var deadPlayerUser = deadPlayer.GetUser(dbContext); - dbContext.Factions.Include(f => f.BankAccount).Where(f => f.Id == 2).First().BankAccount.Balance += Medic.ReviveIncome; - - dbContext.SaveChanges(); + if (deadPlayerUser.Handmoney >= 100) + { + deadPlayerUser.Handmoney -= 100; + } + else + { + int bankMoney = 100 - deadPlayerUser.Handmoney; + deadPlayerUser.Handmoney = 0; + deadPlayerUser.BankAccount.Balance -= bankMoney; + } + + player.PlayAnimation("amb@medic@standing@kneel@enter", "enter", 0); - player.PlayAnimation("amb@medic@standing@kneel@enter", "enter", 0); + deadPlayer.TriggerEvent("onPlayerRevived"); + player.TriggerEvent("destroyMedicTaskCheckpoint"); + deadPlayer.SendNotification($"Du wurdest von ~y~{player.Name}~s~ für ~g~{100.ToMoneyString()} ~s~wiederbelebt."); + player.SendNotification($"Du hast ~y~{deadPlayer.Name}~s~ wiederbelebt und ~g~{Medic.ReviveIncome}$ ~s~für die Fraktion verdient."); + deadPlayer.SetData("isDead", false); + deadPlayer.SetData("reviveSperre", 5); + + dbContext.Factions.Include(f => f.BankAccount).Where(f => f.Id == 2).First().BankAccount.Balance += Medic.ReviveIncome; - deadPlayer.TriggerEvent("onPlayerRevived"); - player.TriggerEvent("destroyMedicTaskCheckpoint"); - deadPlayer.SendNotification($"Du wurdest von ~y~{player.Name}~s~ für ~g~{100.ToMoneyString()} ~s~wiederbelebt."); - player.SendNotification($"Du hast ~y~{deadPlayer.Name}~s~ wiederbelebt und ~g~{Medic.ReviveIncome}$ ~s~für die Fraktion verdient."); - deadPlayer.SetData("isDead", false); - using (var dbContext1 = new DatabaseContext()) - { User u; - u = deadPlayer.GetUser(dbContext1); + u = deadPlayer.GetUser(dbContext); u.Dead = false; dbContext.SaveChanges(); } @@ -350,7 +354,7 @@ namespace ReallifeGamemode.Server.Commands } [Command("heal", "~m~Benutzung: ~s~/heal [Spieler] (Preis)")] //TODO Eventuell noch mit Geldbetrag wie bei SA:MP - public void CmdFactionMedicHealive(Player player, string receiver, int price = 100) + public void CmdFactionMedicHealive(Player player, string receiver, int price = 10) { Player target = PlayerService.GetPlayerByNameOrId(receiver); if (player.GetUser()?.FactionId != 2) @@ -359,7 +363,7 @@ namespace ReallifeGamemode.Server.Commands return; } - if(player.Position.DistanceTo(target.Position) > 3) + if(player.Position.DistanceTo(target.Position) > 5) { ChatService.ErrorMessage(player, "Der Patient ist zu weit entfernt"); return; @@ -394,28 +398,10 @@ namespace ReallifeGamemode.Server.Commands return; } - using var dbContext = new DatabaseContext(); - User targetUser = target.GetUser(dbContext); - - if (targetUser.Handmoney >= price) - { - targetUser.Handmoney -= price; - } - else - { - int bankMoney = price - targetUser.Handmoney; - targetUser.Handmoney = 0; - targetUser.BankAccount.Balance -= bankMoney; - } - - dbContext.Factions.Include(f => f.BankAccount).Where(f => f.Id == 2).First().BankAccount.Balance += price; - - dbContext.SaveChanges(); - - target.Health = 100; - target.SendNotification($"Du wurdest von ~g~{player.Name} ~s~ für ~g~{price.ToMoneyString()} geheilt.", false); - player.SendNotification($"Du hast ~g~{target.Name} ~s~ für {price.ToMoneyString()} geheilt.", false); - player.TriggerEvent("delHealTask"); + ChatService.SendMessage(target,"~g~" + player.Name + " ~s~möchte dich für ~g~$" + price + " ~s~heilen. Drücke ~g~J~s~ zum Erlauben oder ~r~N ~s~zum Verbieten"); + player.SendNotification("Du hast " + target.Name + " einen Heal angeboten",false); + target.SetData("healDecision", true); + Medic.HealDecisions.Add(new Medic.HealDecision {dMedic = player, dTarget = target, dPrice = price}); } #endregion Sanitäter Commands @@ -494,40 +480,12 @@ namespace ReallifeGamemode.Server.Commands } ChatService.SendMessage(target, "!{#8181E9}Deine Akte wurde von " + player.Name + " gelöscht. Grund: " + reason); ChatService.BroadcastFaction("!{#8181E9}HQ: Die Akte von " + target.Name + " wurde von " + player.Name + " gelöscht. Grund: " + reason + ".", new List() { 1, 3 }); - target.SetSharedData("blipColor", 0); - switch (targetUser.FactionId) - { - case null: - target.SetSharedData("blipColor", 0); - target.SetSharedData("nameTagColor", 0); - break; - - case 0: - target.SetSharedData("blipColor", 0); - target.SetSharedData("nameTagColor", 0); - break; - - case 8: - target.SetSharedData("blipColor", 83); - target.SetSharedData("nameTagColor", 8); - break; - - case 7: - target.SetSharedData("blipColor", 52); - target.SetSharedData("nameTagColor", 7); - break; - - case 4: - target.SetSharedData("blipColor", 5); - target.SetSharedData("nameTagColor", 4); - break; - case 9: - target.SetSharedData("blipColor", 25); - target.SetSharedData("nameTagColor", 9); - break; - } + target.TriggerEvent("jailTime", 0); targetUser.Wanteds = 0; + + targetUser.SetBlipAndNametagColor(); + dbContext.SaveChanges(); } } diff --git a/ReallifeGamemode.Server/Commands/UserCommands.cs b/ReallifeGamemode.Server/Commands/UserCommands.cs index 5cf6dd91..f61103e3 100644 --- a/ReallifeGamemode.Server/Commands/UserCommands.cs +++ b/ReallifeGamemode.Server/Commands/UserCommands.cs @@ -78,9 +78,12 @@ namespace ReallifeGamemode.Server.Commands return; } - if (pVeh.GetServerVehicle() is ServerVehicle veh) + using var dbContext = new DatabaseContext(); + + if (pVeh.GetServerVehicle(dbContext) is ServerVehicle veh) { - ChatService.SendMessage(player, "~m~" + ((VehicleHash)pVeh.Model) + " | " + veh.ToString() + " | Farbe 1: " + pVeh.PrimaryColor + " | Farbe 2: " + pVeh.SecondaryColor + " | ID: " + pVeh.Handle.Value); + string dbIdStr = player.GetUser(dbContext).IsAdmin(AdminLevel.ADMIN) ? $" | DB-ID: {veh.Id}" : ""; + ChatService.SendMessage(player, "~m~" + ((VehicleHash)pVeh.Model) + " | " + veh.ToString() + " | Farbe 1: " + pVeh.PrimaryColor + " | Farbe 2: " + pVeh.SecondaryColor + " | ID: " + pVeh.Handle.Value + dbIdStr); } else { diff --git a/ReallifeGamemode.Server/Events/Death.cs b/ReallifeGamemode.Server/Events/Death.cs index 365085c1..b4edee69 100644 --- a/ReallifeGamemode.Server/Events/Death.cs +++ b/ReallifeGamemode.Server/Events/Death.cs @@ -32,6 +32,7 @@ namespace ReallifeGamemode.Server.Events player.Kick(); return; } + player.SetData("isDead", true); @@ -42,9 +43,6 @@ namespace ReallifeGamemode.Server.Events userDeath.SaveChanges(); } - - - //TODO: Zum Full Release entfernen if (player.HasData("togdeath")) { ChatService.SendMessage(player, "Du bist durch " + (killer?.Name ?? "Niemanden") + " gestorben: " + reason.ToString()); @@ -92,21 +90,26 @@ namespace ReallifeGamemode.Server.Events if (user.JailTime <= 0) { - //MEDIC AUFTRAG - MedicTask reviveTask = new MedicTask() + if (!player.HasData("reviveSperre")) { - Victim = player.Name, - Position = player.Position, - CauseOfDeath = reason.ToString(), - Caller = null, - Description = "Gestorben", - Time = DateTime.Now, - Type = MedicTaskType.REVIVE, - MedicName = "none" - }; - Medic.AddTaskToList(reviveTask); - Medic.delHealTask(player); - ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " ist soeben verstorben.", new List() { 2 }); + //MEDIC AUFTRAG + MedicTask reviveTask = new MedicTask() + { + Victim = player.Name, + Position = player.Position, + CauseOfDeath = reason.ToString(), + Caller = null, + Description = "Gestorben", + Time = DateTime.Now, + Type = MedicTaskType.REVIVE, + MedicName = "none" + }; + Medic.AddTaskToList(reviveTask); + Medic.delHealTask(player); + ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " ist soeben verstorben.", new List() { 2 }); + } + + if (player.GetUser().IsAdmin(AdminLevel.ADMIN) == true) { diff --git a/ReallifeGamemode.Server/Events/Disconnect.cs b/ReallifeGamemode.Server/Events/Disconnect.cs index bc8e23fc..00e16acc 100644 --- a/ReallifeGamemode.Server/Events/Disconnect.cs +++ b/ReallifeGamemode.Server/Events/Disconnect.cs @@ -99,7 +99,7 @@ namespace ReallifeGamemode.Server.Events { //if (player.Vehicle.GetData("timerJobVehicleRespawn") == true) //{ - if (player.Vehicle.GetServerVehicle() is JobVehicle vehJ) + if (player.Vehicle.GetServerVehicle() is JobVehicle vehJ && job.Id == JobManager.GetJob().Id) { player.Vehicle.ResetData("timerJobVehicleRespawn"); ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(player.Vehicle); diff --git a/ReallifeGamemode.Server/Events/Key.cs b/ReallifeGamemode.Server/Events/Key.cs index b70039f2..b03b7da6 100644 --- a/ReallifeGamemode.Server/Events/Key.cs +++ b/ReallifeGamemode.Server/Events/Key.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using GTANetworkAPI; using Newtonsoft.Json; @@ -11,6 +12,7 @@ using ReallifeGamemode.Server.Factions.Medic; using ReallifeGamemode.Server.Finance; using ReallifeGamemode.Server.Inventory; using ReallifeGamemode.Server.Inventory.Interfaces; +using ReallifeGamemode.Server.Job; using ReallifeGamemode.Server.Managers; using ReallifeGamemode.Server.Services; using ReallifeGamemode.Server.Types; @@ -198,6 +200,14 @@ namespace ReallifeGamemode.Server.Events return; } + if(!player.IsInVehicle) + { + if(GroundItem.PickUpGroundItem(player)) + { + return; + } + } + DutyPoint nearestDuty = PositionManager.DutyPoints.Find(d => d.Position.DistanceTo(player.Position) <= 1.5 && d.FactionId == user.FactionId); WeaponPoint nearestWeapon = PositionManager.WeaponPoints.Find(w => w.Position.DistanceTo(player.Position) <= 1.5 && w.FactionId == user.FactionId); JailReleasePoint nearestJailReleasePoint = PositionManager.JailReleasePoints.Find(j => j.Position.DistanceTo(player.Position) <= 1.5 && (user.FactionId == 1 || user.FactionId == 3) && user.GetData("duty")); @@ -206,7 +216,7 @@ namespace ReallifeGamemode.Server.Events FriseurPoint nearestFriseurPoint = PositionManager.friseurPoints.Find(s => s.Position.DistanceTo(player.Position) <= 1.5 && (!user.GetData("duty"))); ItemshopPoint nearestItemShopPoint = PositionManager.itemshopPoints.Find(s => s.Position.DistanceTo(player.Position) <= 1.5); JobPoint nearestJobPoint = PositionManager.JobPoints.Find(s => s.Position.DistanceTo(player.Position) <= 1.6); - + if (user?.FactionId != null) { BehindVehiclePoint nearestBehindVehiclePoint = MarkerBehinVehicle.behindVehiclePoints.Find(s => s.marker.Position.DistanceTo(player.Position) <= 3 && (user.FactionId == 8 || user.FactionId == 7 || user.FactionId == 1 || user.FactionId == 3)); @@ -285,27 +295,8 @@ namespace ReallifeGamemode.Server.Events } switch (factionId) { - //LSPD - case 1: - //nameTagColor = new Color(28, 134, 238); - //player.TriggerEvent("setNameTag", JsonConvert.SerializeObject(new int[] { 28, 134, 238 })); - player.SetSharedData("nameTagColor", factionId); - player.SetSharedData("blipColor", 38); - break; - - //Medic - case 2: - //nameTagColor = new Color(255, 0, 0); - //player.TriggerEvent("setNameTag", JsonConvert.SerializeObject(new int[] { 255, 0, 0 })); - player.SetSharedData("nameTagColor", factionId); - player.SetSharedData("blipColor", 6); - break; - //FBI case 3: - //nameTagColor = new Color(173, 0, 118); - player.SetSharedData("nameTagColor", factionId); - player.SetSharedData("blipColor", 63); player.SetAccessories(2, 2, 0); break; } @@ -339,10 +330,9 @@ namespace ReallifeGamemode.Server.Events player.SendNotification("Du bist nun ~r~außer Dienst."); player.TriggerEvent("toggleDutyMode", false); Medic.UpdateDutyMedics(-1); - player.SetSharedData("blipColor", 0); - player.SetSharedData("nameTagColor", 0); UpdateCharacterCloth.LoadCharacterDefaults(player); } + user.SetBlipAndNametagColor(); } if (nearestWeapon != null) // Weapon Point @@ -505,6 +495,11 @@ namespace ReallifeGamemode.Server.Events foreach (Player target in NAPI.Pools.GetAllPlayers()) { User c = target.GetUser(); + if(c == null) + { + continue; + } + if (c.JailTime > 0) { criminals.Add(c.Name); @@ -616,6 +611,72 @@ namespace ReallifeGamemode.Server.Events InventoryManager.SetBackpackItems(player); } + [RemoteEvent("keyPress:J")] + public void KeyPressJ(Player player) + { + if (!player.IsLoggedIn()) return; + if (player.GetData("healDecision") == true) + { + player.ResetData("healDecision"); + Medic.MakeHealDecision(player, true); + return; + } + + User u = player.GetUser(); + + if (u.JobId == null) return; + + JobBase job = JobManager.GetJob(u.JobId.Value); + + dynamic data = null; + + if (job.Id == 1 && job.GetUsersInJob().Contains(player)) + { + var taxiCalls = JobManager.GetJob().TaxiContracts; + if (!taxiCalls.Any(t => t.Driver?.Handle == player.Handle)) // Spieler in keiner aktiven Fahrt + { + data = new + { + job.Id, + Status = 0, + JobData = new + { + TaxiCalls = taxiCalls + .Where(t => t.Driver == null) + .Select(t => new + { + t.Name, + Distance = Math.Round(t.Position.DistanceTo(player.Position), 0) + }) + .OrderBy(t => t.Distance) + } + }; + } + else // Spieler in aktiver Fahrt + { + data = new + { + job.Id, + Status = 1, + JobData = new + { + taxiCalls.Where(t => t.Driver.Handle == player.Handle).First().Name + } + }; + } + } + //JobPoint nearJobPoint = PositionManager.JobPoints.Find(p => p.Position.DistanceTo(player.Position) <= 2); + if (u.JobId == 2 || u.JobId == 3 || u.JobId == 4) + { + return; + } + + var json = JsonConvert.SerializeObject(data); + + player.TriggerEvent("SERVER:Job_ShowJobMenu", job.Name, json); + } + + [RemoteEvent("keyPress:O")] public void KeyPressO(Player player) { @@ -704,6 +765,13 @@ namespace ReallifeGamemode.Server.Events { if (!player.IsLoggedIn()) return; + if (player.GetData("healDecision") == true) + { + player.ResetData("healDecision"); + Medic.MakeHealDecision(player, false); + return; + } + if (!player.IsInVehicle) return; if (player.VehicleSeat != 0) return; @@ -875,8 +943,6 @@ namespace ReallifeGamemode.Server.Events if (!player.IsInVehicle) { Vehicle.VehicleMenuLockCarEvent(player); - - GroundItem.PickUpGroundItem(player); } if (player.IsInVehicle && player.VehicleSeat == 0) diff --git a/ReallifeGamemode.Server/Events/Login.cs b/ReallifeGamemode.Server/Events/Login.cs index b89e2269..ccdd6628 100644 --- a/ReallifeGamemode.Server/Events/Login.cs +++ b/ReallifeGamemode.Server/Events/Login.cs @@ -100,42 +100,7 @@ namespace ReallifeGamemode.Server.Events var userItems = dbContext.UserItems.Where(u => u.UserId == user.Id).ToList(); player.SetData("items", userItems); - switch (user.FactionId) - { - case null: - player.SetSharedData("blipColor", 0); - player.SetSharedData("nameTagColor", 0); - break; - - case 0: - player.SetSharedData("blipColor", 0); - player.SetSharedData("nameTagColor", 0); - break; - - case 8: - player.SetSharedData("blipColor", 83); - player.SetSharedData("nameTagColor", 8); - break; - - case 7: - player.SetSharedData("blipColor", 52); - player.SetSharedData("nameTagColor", 7); - break; - - case 4: - player.SetSharedData("blipColor", 5); - player.SetSharedData("nameTagColor", 4); - break; - case 9: - player.SetSharedData("blipColor", 25); - player.SetSharedData("nameTagColor", 9); - break; - default: - player.SetSharedData("blipColor", 0); - player.SetSharedData("nameTagColor", 0); - break; - } - + user.SetBlipAndNametagColor(); if (user.CharacterId == null) { diff --git a/ReallifeGamemode.Server/Extensions/ClientExtension.cs b/ReallifeGamemode.Server/Extensions/ClientExtension.cs index 765d3f05..ebdee723 100644 --- a/ReallifeGamemode.Server/Extensions/ClientExtension.cs +++ b/ReallifeGamemode.Server/Extensions/ClientExtension.cs @@ -129,10 +129,9 @@ namespace ReallifeGamemode.Server.Extensions { User dbUser = dbContext.Users.Where(u => u.Id == user.Id).FirstOrDefault(); dbUser.Wanteds = newWanteds; + dbUser.SetBlipAndNametagColor(); dbContext.SaveChanges(); } - user.Player.SetSharedData("nameTagColor", -1); - user.Player.SetSharedData("blipColor", 64); ChatService.SendMessage(user.Player, "!{#FF614A}Du hast ein Verbrechen begangen: " + reason + "" + (cop != null ? " | Gemeldet von: " + cop.Name + "." : "")); ChatService.SendMessage(user.Player, " !{#FFFF00}Fahnundgslevel:~s~ " + newWanteds); @@ -237,11 +236,83 @@ namespace ReallifeGamemode.Server.Extensions public static bool IsAdmin(this User user, AdminLevel adminLevel) { - if(user == null) + if (user == null) { return false; } return user.AdminLevel >= adminLevel; } + + public static void SetBlipAndNametagColor(this User user) + { + if (user == null) + { + return; + } + + int blipColor = 0; + int nameTagColor = 0; + + Player player = user.Player; + bool duty = user.GetData("duty"); + + if (player.GetData("SAdminduty")) + { + blipColor = 30; + nameTagColor = -2; + } + else if (user.Wanteds > 0) + { + nameTagColor = -1; + blipColor = 64; + } + else if (user.FactionId != null) + { + if(user.FactionId > 3 || (user.FactionId >= 1 && user.FactionId <= 3 && duty)) + { + nameTagColor = user.FactionId.Value; + } + + switch (user.FactionId) + { + case 1 when duty: + blipColor = 38; + break; + + case 2 when duty: + blipColor = 6; + break; + + case 3 when duty: + blipColor = 63; + break; + + case 4: + blipColor = 5; + break; + + case 5: + break; + + case 6: + break; + + case 7: + blipColor = 52; + break; + + case 8: + blipColor = 83; + break; + + case 9: + blipColor = 25; + break; + } + } + + user.Player.SetSharedData("nameTagColor", nameTagColor); + user.Player.SetSharedData("blipColor", blipColor); + } } } diff --git a/ReallifeGamemode.Server/Factions/Medic/Medic.cs b/ReallifeGamemode.Server/Factions/Medic/Medic.cs index a9acc028..f4050385 100644 --- a/ReallifeGamemode.Server/Factions/Medic/Medic.cs +++ b/ReallifeGamemode.Server/Factions/Medic/Medic.cs @@ -8,6 +8,7 @@ using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; using Microsoft.EntityFrameworkCore; using System; +using ReallifeGamemode.Server.Extensions; /** * @overview Life of German Reallife - Server Factions Medic Medic.cs @@ -22,10 +23,18 @@ namespace ReallifeGamemode.Server.Factions.Medic public static List ReviveTasks = new List(); public static List HealTasks = new List(); public static List FireTasks = new List(); + public static List HealDecisions = new List(); public static int ReviveIncome = 100; public static int dutyMedics = 0; public static int reviveTaskTime = 240; + public class HealDecision + { + public Player dMedic; + public Player dTarget; + public int dPrice; + } + public static void AddTaskToList(MedicTask task) { if (task == null) @@ -72,6 +81,79 @@ namespace ReallifeGamemode.Server.Factions.Medic } } + public static void UpdateReviveSperre() + { + var allRevivedPlayers = NAPI.Pools.GetAllPlayers().Where(c => c.HasData("reviveSperre")); + foreach(var player in allRevivedPlayers) + { + var timeLeft = player.GetData("reviveSperre"); + + if (timeLeft > 0) + { + player.SetData("reviveSperre", timeLeft - 1); + } + else + { + player.ResetData("reviveSperre"); + } + } + } + + public static void CheckHealDecisionDistance() + { + foreach(var healAuftrag in HealDecisions.ToList()) + { + if (healAuftrag.dMedic.Position.DistanceTo(healAuftrag.dTarget.Position) > 5) + { + healAuftrag.dMedic.SendNotification("~r~Die Heal-Anfrage wurde abgebrochen"); + healAuftrag.dTarget.SendNotification("~r~Die Heal-Anfrage wurde abgebrochen"); + healAuftrag.dTarget.ResetData("healDecision"); + var activeDecision = HealDecisions.FirstOrDefault(d => d.dTarget == healAuftrag.dTarget); + HealDecisions.Remove(healAuftrag); + } + } + } + + public static void MakeHealDecision(Player target, bool decision) + { + var activeDecision = HealDecisions.FirstOrDefault(d => d.dTarget == target); + if(decision == false) + { + activeDecision.dMedic.SendNotification(activeDecision.dTarget.Name + " hat den Heal ~r~abgelehnt",false); + activeDecision.dTarget.SendNotification("Du hast den Heal ~r~abgelehnt", false); + } + else + { + activeDecision.dMedic.SendNotification(activeDecision.dTarget.Name + " hat den Heal ~g~akzeptiert", false); + activeDecision.dTarget.SendNotification("Du hast den Heal ~g~akzeptiert", false); + using var dbContext = new DatabaseContext(); + { + User targetUser = target.GetUser(dbContext); + + if (targetUser.Handmoney >= activeDecision.dPrice) + { + targetUser.Handmoney -= activeDecision.dPrice; + } + else + { + int bankMoney = activeDecision.dPrice - targetUser.Handmoney; + targetUser.Handmoney = 0; + targetUser.BankAccount.Balance -= bankMoney; + } + + dbContext.Factions.Include(f => f.BankAccount).Where(f => f.Id == 2).First().BankAccount.Balance += activeDecision.dPrice / 2; + activeDecision.dMedic.GetUser(dbContext).Wage += activeDecision.dPrice / 2; + + dbContext.SaveChanges(); + } + activeDecision.dTarget.Health = 100; + activeDecision.dTarget.SendNotification($"Du wurdest von ~g~{activeDecision.dMedic.Name} ~s~ für ~g~{activeDecision.dPrice.ToMoneyString()} geheilt", false); + activeDecision.dMedic.SendNotification($"Du hast ~g~{activeDecision.dTarget.Name} ~s~ für {activeDecision.dPrice.ToMoneyString()} geheilt", false); + delHealTask(activeDecision.dTarget); + } + HealDecisions.Remove(activeDecision); + } + public static void UpdateTaskTimeLeft() { DateTime actualTime = DateTime.Now; @@ -84,7 +166,7 @@ namespace ReallifeGamemode.Server.Factions.Medic var taskTimeLeft = Math.Abs((Int32)(((DateTimeOffset)actualTime).ToUnixTimeSeconds() - ((DateTimeOffset)task.Time).ToUnixTimeSeconds() - reviveTaskTime)); task.TimeLeft = taskTimeLeft; var medic = PlayerService.GetPlayerByNameOrId(task.MedicName); - if(task.MedicName != "none") medic.TriggerEvent("setTaskTimeLeft", taskTimeLeft); + if(medic != null) medic.TriggerEvent("setTaskTimeLeft", taskTimeLeft); } } } @@ -139,7 +221,7 @@ namespace ReallifeGamemode.Server.Factions.Medic public static void delHealTask(Player player) { MedicTask task = HealTasks.FirstOrDefault(t => t.Victim == player.Name); - RemoveTaskFromList(task); + if(task != null) RemoveTaskFromList(task); player.SetData("healauftrag", false); } diff --git a/ReallifeGamemode.Server/Inventory/GroundItem.cs b/ReallifeGamemode.Server/Inventory/GroundItem.cs index 25f8dcb6..4c6ca743 100644 --- a/ReallifeGamemode.Server/Inventory/GroundItem.cs +++ b/ReallifeGamemode.Server/Inventory/GroundItem.cs @@ -26,7 +26,7 @@ namespace ReallifeGamemode.Server.Inventory GroundTextLabels.Add(grndTextLabel); } - public static void PickUpGroundItem(Player player) + public static bool PickUpGroundItem(Player player) { GroundItem nearest = GroundItems.FirstOrDefault(d => d.Position.DistanceTo(player.Position) <= 1.2); if (nearest != null) @@ -39,7 +39,7 @@ namespace ReallifeGamemode.Server.Inventory UserItem existingItem = InventoryManager.UserHasThisItem(player, nearest.ItemId); var user = player.GetUser(); if (player.HasAttachment("ammobox")) - { player.SendNotification("~r~Du kannst momentan nichts tragen!", false); return; } + { player.SendNotification("~r~Du kannst momentan nichts tragen!", false); return false; } if (nearestItem.Gewicht * nearest.Amount + invWeight > 40000) { for (var i = 1; i <= nearest.Amount; i++) @@ -106,7 +106,10 @@ namespace ReallifeGamemode.Server.Inventory NAPI.Player.SetPlayerCurrentWeapon(player, WeaponHash.Unarmed); } } + return true; } + + return false; } public static void RemoveGroundItem(GroundItem grndItem, GTANetworkAPI.Object grndObject, TextLabel grndTextLabel) diff --git a/ReallifeGamemode.Server/Job/MuellmannData.cs b/ReallifeGamemode.Server/Job/MuellmannData.cs index 295205e8..a91d5574 100644 --- a/ReallifeGamemode.Server/Job/MuellmannData.cs +++ b/ReallifeGamemode.Server/Job/MuellmannData.cs @@ -32,7 +32,7 @@ namespace ReallifeGamemode.Server.Job public void removeClientFromData(Player player) { if (client1 == player) { client1 = null; } - if (client2 == player) { client2 = null; } + if (client2 == player) { client2 = null;} } public int getTrashCount() diff --git a/ReallifeGamemode.Server/Job/RefuseCollectorJob.cs b/ReallifeGamemode.Server/Job/RefuseCollectorJob.cs index 5bdde8eb..80ff25ee 100644 --- a/ReallifeGamemode.Server/Job/RefuseCollectorJob.cs +++ b/ReallifeGamemode.Server/Job/RefuseCollectorJob.cs @@ -19,7 +19,7 @@ namespace ReallifeGamemode.Server.Job public override bool NeedVehicleToStart => false; - const int MAX_BAG = 40; + private const int MAX_BAG = 40; public RefuseCollectorJob() { @@ -39,125 +39,125 @@ namespace ReallifeGamemode.Server.Job } public static List muellmanData = new List(); + public float blipHeight = 1000; 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), - new Vector3(-1109.628662109375, -1481.669677734375, 4.9089436531066895), - new Vector3(-1118.3216552734375, -1487.53125, 4.71043586730957), - new Vector3(-1130.783935546875, -1495.6463623046875, 4.425413131713867), - new Vector3(-1108.7491455078125, -1527.6431884765625, 6.779527187347412), - new Vector3(-1078.477783203125, -1524.1884765625, 4.883235454559326), - new Vector3(-1087.1422119140625, -1529.7557373046875, 4.693511486053467), - new Vector3(-1070.019775390625, -1514.546875, 5.107278347015381), - new Vector3(-1058.235595703125, -1540.304443359375, 5.044498920440674), - new Vector3(-1066.30029296875, -1545.3839111328125, 4.898682117462158), - new Vector3(-1077.4962158203125, -1553.4862060546875, 4.626119136810303), - new Vector3(-1085.2286376953125, -1558.1461181640625, 4.497615814208984), - new Vector3(-1026.8060302734375, -1574.6785888671875, 5.1846923828125), - new Vector3(-1022.8525390625, -1615.1187744140625, 5.009416580200195), - new Vector3(-1031.4603271484375, -1620.6160888671875, 5.0109710693359375), - new Vector3(-1754.563720703125, -707.9927368164062, 10.391398429870605), - new Vector3(-1753.5606689453125, -701.3380737304688, 10.276473999023438), - new Vector3(-1780.638427734375, -679.9152221679688, 10.493252754211426), - new Vector3(-1788.612548828125, -671.464599609375, 10.494956970214844), - new Vector3(-1793.9669189453125, -664.3781127929688, 10.487747192382812), - new Vector3(-1803.5460205078125, -662.5227661132812, 10.716209411621094), - new Vector3(-1818.578857421875, -656.5636596679688, 13.811768531799316), - new Vector3(-1824.976806640625, -645.830810546875, 10.946636199951172), - new Vector3(-1836.8272705078125, -631.3432006835938, 10.752060890197754), - new Vector3(-1849.099609375, -632.3333740234375, 11.160981178283691), - new Vector3(-1874.4722900390625, -593.102294921875, 11.885177612304688), - new Vector3(-1880.3685302734375, -588.2398071289062, 11.835262298583984), - new Vector3(-1897.9107666015625, -572.6138916015625, 11.845343589782715), - new Vector3(-1923.3765869140625, -559.2033081054688, 12.060995101928711), - new Vector3(-1947.757080078125, -532.0737915039062, 11.82839584350586), - new Vector3(-1953.445556640625, -526.7276611328125, 11.844695091247559), - new Vector3(-1968.46923828125, -532.5272216796875, 12.170670509338379), - new Vector3(-1968.8458251953125, -523.1318969726562, 11.8456392288208), - new Vector3(-1203.9110107421875, -1021.6611328125, 5.945137977600098), - new Vector3(-1183.8720703125, -1044.6856689453125, 2.1502246856689453), - new Vector3(-1176.88818359375, -1073.1439208984375, 5.906428813934326), - new Vector3(-1145.39697265625, -1127.4779052734375, 6.5086894035339355), - new Vector3(-1128.85546875, -1143.3876953125, 2.8391337394714355), - new Vector3(-1128.4967041015625, -1162.18212890625, 6.494985103607178), - new Vector3(-1082.1358642578125, -1139.9630126953125, 2.158600091934204), - new Vector3(-1069.0244140625, -1161.9306640625, 2.158600091934204), - new Vector3(-1064.1807861328125, -1159.49853515625, 2.15861105918884284), - new Vector3(-1046.37890625, -1159.2188720703125, 2.158600091934204), - new Vector3(-1035.042236328125, -1146.635498046875, 2.158597469329834), - new Vector3(-1025.6204833984375, -1138.19384765625, 2.158599853515625), - new Vector3(-1031.4193115234375, -1109.0096435546875, 2.1585986614227295), - new Vector3(-986.4617309570312, -1122.275390625, 4.545365810394287), - new Vector3(-991.5133056640625, -1104.2479248046875, 2.1503100395202637), - new Vector3(-978.42822265625, -1107.8594970703125, 2.1503751277923584), - new Vector3(-982.0960693359375, -1083.4771728515625, 2.5452053546905518), - new Vector3(-949.2151489257812, -1107.6964111328125, 2.171846866607666), - new Vector3(-945.9578247070312, -1123.4737548828125, 2.1503098011016846), - new Vector3(-921.0493774414062, -1095.1513671875, 2.1503124237060547), - new Vector3(-942.0684204101562, -1077.1378173828125, 2.1503121852874756), - new Vector3(-951.5316772460938, -1078.955078125, 2.1503100395202637), - - }.AsReadOnly(); + { + 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), + new Vector3(-1109.628662109375, -1481.669677734375, 4.9089436531066895), + new Vector3(-1118.3216552734375, -1487.53125, 4.71043586730957), + new Vector3(-1130.783935546875, -1495.6463623046875, 4.425413131713867), + new Vector3(-1108.7491455078125, -1527.6431884765625, 6.779527187347412), + new Vector3(-1078.477783203125, -1524.1884765625, 4.883235454559326), + new Vector3(-1087.1422119140625, -1529.7557373046875, 4.693511486053467), + new Vector3(-1070.019775390625, -1514.546875, 5.107278347015381), + new Vector3(-1058.235595703125, -1540.304443359375, 5.044498920440674), + new Vector3(-1066.30029296875, -1545.3839111328125, 4.898682117462158), + new Vector3(-1077.4962158203125, -1553.4862060546875, 4.626119136810303), + new Vector3(-1085.2286376953125, -1558.1461181640625, 4.497615814208984), + new Vector3(-1026.8060302734375, -1574.6785888671875, 5.1846923828125), + new Vector3(-1022.8525390625, -1615.1187744140625, 5.009416580200195), + new Vector3(-1031.4603271484375, -1620.6160888671875, 5.0109710693359375), + new Vector3(-1754.563720703125, -707.9927368164062, 10.391398429870605), + new Vector3(-1753.5606689453125, -701.3380737304688, 10.276473999023438), + new Vector3(-1780.638427734375, -679.9152221679688, 10.493252754211426), + new Vector3(-1788.612548828125, -671.464599609375, 10.494956970214844), + new Vector3(-1793.9669189453125, -664.3781127929688, 10.487747192382812), + new Vector3(-1803.5460205078125, -662.5227661132812, 10.716209411621094), + new Vector3(-1818.578857421875, -656.5636596679688, 13.811768531799316), + new Vector3(-1824.976806640625, -645.830810546875, 10.946636199951172), + new Vector3(-1836.8272705078125, -631.3432006835938, 10.752060890197754), + new Vector3(-1849.099609375, -632.3333740234375, 11.160981178283691), + new Vector3(-1874.4722900390625, -593.102294921875, 11.885177612304688), + new Vector3(-1880.3685302734375, -588.2398071289062, 11.835262298583984), + new Vector3(-1897.9107666015625, -572.6138916015625, 11.845343589782715), + new Vector3(-1923.3765869140625, -559.2033081054688, 12.060995101928711), + new Vector3(-1947.757080078125, -532.0737915039062, 11.82839584350586), + new Vector3(-1953.445556640625, -526.7276611328125, 11.844695091247559), + new Vector3(-1968.46923828125, -532.5272216796875, 12.170670509338379), + new Vector3(-1968.8458251953125, -523.1318969726562, 11.8456392288208), + new Vector3(-1203.9110107421875, -1021.6611328125, 5.945137977600098), + new Vector3(-1183.8720703125, -1044.6856689453125, 2.1502246856689453), + new Vector3(-1176.88818359375, -1073.1439208984375, 5.906428813934326), + new Vector3(-1145.39697265625, -1127.4779052734375, 6.5086894035339355), + new Vector3(-1128.85546875, -1143.3876953125, 2.8391337394714355), + new Vector3(-1128.4967041015625, -1162.18212890625, 6.494985103607178), + new Vector3(-1082.1358642578125, -1139.9630126953125, 2.158600091934204), + new Vector3(-1069.0244140625, -1161.9306640625, 2.158600091934204), + new Vector3(-1064.1807861328125, -1159.49853515625, 2.15861105918884284), + new Vector3(-1046.37890625, -1159.2188720703125, 2.158600091934204), + new Vector3(-1035.042236328125, -1146.635498046875, 2.158597469329834), + new Vector3(-1025.6204833984375, -1138.19384765625, 2.158599853515625), + new Vector3(-1031.4193115234375, -1109.0096435546875, 2.1585986614227295), + new Vector3(-986.4617309570312, -1122.275390625, 4.545365810394287), + new Vector3(-991.5133056640625, -1104.2479248046875, 2.1503100395202637), + new Vector3(-978.42822265625, -1107.8594970703125, 2.1503751277923584), + new Vector3(-982.0960693359375, -1083.4771728515625, 2.5452053546905518), + new Vector3(-949.2151489257812, -1107.6964111328125, 2.171846866607666), + new Vector3(-945.9578247070312, -1123.4737548828125, 2.1503098011016846), + new Vector3(-921.0493774414062, -1095.1513671875, 2.1503124237060547), + new Vector3(-942.0684204101562, -1077.1378173828125, 2.1503121852874756), + new Vector3(-951.5316772460938, -1078.955078125, 2.1503100395202637), + }.AsReadOnly(); [RemoteEvent("CLIENT:MuellmannJobStarten")] public void MuellmannJobStarten(Player player, Vehicle vehicle) @@ -190,7 +190,7 @@ namespace ReallifeGamemode.Server.Job if (data.hasFreePlace()) { - if(data.vehicle != null) + if (data.vehicle != null) data.vehicle.GetServerVehicle().Spawn(data.vehicle); muellmanData.Remove(data); return; @@ -209,13 +209,13 @@ namespace ReallifeGamemode.Server.Job } [RemoteEvent("CLIENT:MuellmannImShape")] - public void MuellmannImShape(Player player, int colshapeIndex) + public void MuellmannImShape(Player player, int index) { foreach (var data in muellmanData) { if (data.getDataFromClient(player) == null) continue; Player target = data.getPartnerClient(player); - if (target != null) target.TriggerEvent("MuellmannUpdateColshape", colshapeIndex); + if (target != null) target.TriggerEvent("MuellmannUpdateColshape", index); player.TriggerEvent("renderTextOnScreen", "Wirf den Müllsack in den Müllwagen."); player.AddAttachment("binbag", false); return; @@ -258,19 +258,17 @@ namespace ReallifeGamemode.Server.Job } player.TriggerEvent("SERVER:MuellmannZuBase"); } - else if(data.getTrashCount() > MAX_BAG) + else if (data.getTrashCount() > MAX_BAG) { data.setTrashCount(MAX_BAG); ChatService.ErrorMessage((Player)player, "Der Müllwagen ist schon voll."); } else { - if (target != null) { user1.Wage += 25; user2.Wage += 25; - } else { @@ -305,13 +303,13 @@ namespace ReallifeGamemode.Server.Job if (target != null) { user1.Wage += (int)(bonus / 2); - user2.Wage += (int)(bonus / 2); + user2.Wage += (int)(bonus / 2); } else { user1.Wage += bonus; } - + data.setTrashCount(0); dbContext.SaveChanges(); diff --git a/ReallifeGamemode.Server/Managers/InteractionManager.cs b/ReallifeGamemode.Server/Managers/InteractionManager.cs index cc556b6f..5d6875fc 100644 --- a/ReallifeGamemode.Server/Managers/InteractionManager.cs +++ b/ReallifeGamemode.Server/Managers/InteractionManager.cs @@ -63,38 +63,13 @@ namespace ReallifeGamemode.Server.Managers own.FactionRank = dbContext .FactionRanks .OrderBy(x => x.Order) - .Where(r => r.FactionId == own.FactionId) + .Where(r => r.FactionId == u.FactionId) .FirstOrDefault(); ChatService.SendMessage(leader, "!{02FCFF}" + player.Name + " hat die Einladung angenommen."); ChatService.SendMessage(player, "!{02FCFF}Du hast die Einladung angenommen."); - switch (own.FactionId) - { - default: - player.SetSharedData("blipColor", 0); - player.SetSharedData("nameTagColor", 0); - break; - - case 8: - player.SetSharedData("blipColor", 83); - player.SetSharedData("nameTagColor", 8); - break; - - case 7: - player.SetSharedData("blipColor", 52); - player.SetSharedData("nameTagColor", 7); - break; - - case 4: - player.SetSharedData("blipColor", 5); - player.SetSharedData("nameTagColor", 4); - break; - case 9: - player.SetSharedData("blipColor", 25); - player.SetSharedData("nameTagColor", 9); - break; - } + own.SetBlipAndNametagColor(); dbContext.SaveChanges(); } } @@ -247,8 +222,10 @@ namespace ReallifeGamemode.Server.Managers return; } - User targetUser = target.GetUser(); - User playerUser = player.GetUser(); + using var dbContext = new DatabaseContext(); + + User targetUser = target.GetUser(dbContext); + User playerUser = player.GetUser(dbContext); if (type == "Fraktion") { @@ -276,21 +253,16 @@ namespace ReallifeGamemode.Server.Managers return; } - using (var dbContext = new DatabaseContext()) - { - target.SetData("duty", false); - target.TriggerEvent("toggleDutyMode", false); - Medic.UpdateDutyMedics(-1); - target.SetSharedData("blipColor", 0); - UpdateCharacterCloth.LoadCharacterDefaults(target); - target.GetUser(dbContext).FactionRankId = null; - target.GetUser(dbContext).FactionId = null; - ChatService.SendMessage(player, "!{02FCFF}Du hast " + target.Name + " aus der Fraktion geworfen."); - ChatService.SendMessage(target, "!{02FCFF}Du wurdest von " + player.Name + " aus der Fraktion geworfen."); - target.SetSharedData("blipColor", 0); - player.SetSharedData("nameTagColor", 0); - dbContext.SaveChanges(); - } + target.SetData("duty", false); + target.TriggerEvent("toggleDutyMode", false); + Medic.UpdateDutyMedics(-1); + UpdateCharacterCloth.LoadCharacterDefaults(target); + target.GetUser(dbContext).FactionRankId = null; + target.GetUser(dbContext).FactionId = null; + ChatService.SendMessage(player, "!{02FCFF}Du hast " + target.Name + " aus der Fraktion geworfen."); + ChatService.SendMessage(target, "!{02FCFF}Du wurdest von " + player.Name + " aus der Fraktion geworfen."); + targetUser.SetBlipAndNametagColor(); + dbContext.SaveChanges(); } else if (type == "Gruppe") { @@ -318,16 +290,13 @@ namespace ReallifeGamemode.Server.Managers return; } - using (var dbContext = new DatabaseContext()) - { - target.GetUser(dbContext).Group = null; - target.GetUser(dbContext).GroupRank = GroupRank.NONE; + targetUser.Group = null; + targetUser.GroupRank = GroupRank.NONE; - ChatService.SendMessage(player, "!{02FCFF}Du hast " + target.Name + " aus der Gruppe geworfen."); - ChatService.SendMessage(target, "!{02FCFF}Du wurdest von " + player.Name + " aus der Gruppe geworfen."); + ChatService.SendMessage(player, "!{02FCFF}Du hast " + target.Name + " aus der Gruppe geworfen."); + ChatService.SendMessage(target, "!{02FCFF}Du wurdest von " + player.Name + " aus der Gruppe geworfen."); - dbContext.SaveChanges(); - } + dbContext.SaveChanges(); } } @@ -377,7 +346,7 @@ namespace ReallifeGamemode.Server.Managers [RemoteEvent("CLIENT:InteractionMenu_LeaveGroup")] public void InteractionMenuGroupLeageGroup(Player player, string type) { - + if (type == "Gruppe") { using (var dbContext = new DatabaseContext()) @@ -390,15 +359,15 @@ namespace ReallifeGamemode.Server.Managers return; } - if(dbContext.Users.Count(c => c.Group == playerUser.Group) == 1) + if (dbContext.Users.Count(c => c.Group == playerUser.Group) == 1) { - InteractionMenuGroupDeleteGroup(player,"Gruppe"); + InteractionMenuGroupDeleteGroup(player, "Gruppe"); return; } var group = player.GetUser().Group; - if(playerUser.GroupRank == GroupRank.OWNER) + if (playerUser.GroupRank == GroupRank.OWNER) { var memberList = dbContext.Users.Where(u => u.Group == playerUser.Group && u.GroupRank < GroupRank.OWNER).ToList(); var newOwner = memberList.OrderByDescending(c => c.GroupRank).First(); @@ -406,7 +375,7 @@ namespace ReallifeGamemode.Server.Managers newOwner.GroupRank = GroupRank.OWNER; ChatService.BroadcastGroup("~y~" + newOwner.Name + "~s~ wurde zum neuen Besitzer ernannt", playerUser.Group); } - + playerUser.GroupRank = GroupRank.NONE; playerUser.Group = null; ChatService.BroadcastGroup("~y~" + player.Name + "~s~ hat die Gruppe verlassen", group); @@ -422,13 +391,13 @@ namespace ReallifeGamemode.Server.Managers if (type == "Gruppe") { using (var dbContext = new DatabaseContext()) - { + { if (playerUser?.Group == null || playerUser.GroupRank < GroupRank.OWNER) { ChatService.NotAuthorized(player); return; } - + var deletedGroup = dbContext.Groups.FirstOrDefault(g => g.Id == playerUser.Group.Id); foreach (var user in dbContext.Users.Where(u => u.Group == playerUser.Group).ToList()) @@ -443,12 +412,12 @@ namespace ReallifeGamemode.Server.Managers } } - [RemoteEvent("CLIENT:InteractionMenu_CallService_Taxi")] + [RemoteEvent("CLIENT:InteractionMenu_CallService_Taxi")] public void CallServiceTaxi(Player player, string street, string zone) { var taxiJob = JobManager.GetJob(); - if(taxiJob == null) + if (taxiJob == null) { player.SendChatMessage("Aktuell kann kein Taxi gerufen werden."); return; @@ -802,20 +771,20 @@ namespace ReallifeGamemode.Server.Managers { if (!player.IsLoggedIn()) return; List players = NAPI.Pools.GetAllPlayers(); - - var listPlayers = players.Where(p => p.GetUser().Wanteds > 0) - .Select(p => new - { - Id = p.Handle.Value, - p.Name, - wanted = p.GetUser().Wanteds, - }); - if (listPlayers.Count() > 0) - player.TriggerEvent("showWantedlist", JsonConvert.SerializeObject(listPlayers)); - else - player.SendNotification("~r~[Fehler] ~w~Es gibt derzeitig keine Verbrecher!"); - + var listPlayers = players.Where(p => p.GetUser().Wanteds > 0) + .Select(p => new + { + Id = p.Handle.Value, + p.Name, + wanted = p.GetUser().Wanteds, + }); + + if (listPlayers.Count() > 0) + player.TriggerEvent("showWantedlist", JsonConvert.SerializeObject(listPlayers)); + else + player.SendNotification("~r~[Fehler] ~w~Es gibt derzeitig keine Verbrecher!"); + } @@ -854,11 +823,12 @@ namespace ReallifeGamemode.Server.Managers if (player.GetData("healauftrag") == true) { player.SendNotification("~r~[Fehler] ~w~Du hast bereits ein Sanitäter gerufen."); - }else - { - Medic.AddTaskToList(healTask); + } + else + { + Medic.AddTaskToList(healTask); player.SetData("healauftrag", true); - ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " hat soeben einen Serviceauftrag beantragt.", new List() { 2 }); + ChatService.BroadcastFaction("~y~[MEDIC] ~w~" + player.Name + " hat soeben einen Serviceauftrag beantragt.", new List() { 2 }); } } diff --git a/ReallifeGamemode.Server/Managers/JobManager.cs b/ReallifeGamemode.Server/Managers/JobManager.cs index ee82abd5..9cfe6ae4 100644 --- a/ReallifeGamemode.Server/Managers/JobManager.cs +++ b/ReallifeGamemode.Server/Managers/JobManager.cs @@ -13,8 +13,6 @@ using ReallifeGamemode.Server.Util; using ReallifeGamemode.Services; using ReallifeGamemode.Server.Types; - - namespace ReallifeGamemode.Server.Managers { public class JobManager : Script @@ -124,63 +122,6 @@ namespace ReallifeGamemode.Server.Managers } } - [RemoteEvent("CLIENT:JobManager_ShowJobMenu")] - public void ShowJobMenuEvent(Player player) - { - User u = player.GetUser(); - - if (u.JobId == null) return; - - JobBase job = GetJob(u.JobId.Value); - - dynamic data = null; - - if (job.Id == 1 && job.GetUsersInJob().Contains(player)) - { - var taxiCalls = JobManager.GetJob().TaxiContracts; - if (!taxiCalls.Any(t => t.Driver?.Handle == player.Handle)) // Spieler in keiner aktiven Fahrt - { - data = new - { - job.Id, - Status = 0, - JobData = new - { - TaxiCalls = taxiCalls - .Where(t => t.Driver == null) - .Select(t => new - { - t.Name, - Distance = Math.Round(t.Position.DistanceTo(player.Position), 0) - }) - .OrderBy(t => t.Distance) - } - }; - } - else // Spieler in aktiver Fahrt - { - data = new - { - job.Id, - Status = 1, - JobData = new - { - taxiCalls.Where(t => t.Driver.Handle == player.Handle).First().Name - } - }; - } - } - //JobPoint nearJobPoint = PositionManager.JobPoints.Find(p => p.Position.DistanceTo(player.Position) <= 2); - if (u.JobId == 2 || u.JobId == 3 || u.JobId == 4) - { - return; - } - - var json = JsonConvert.SerializeObject(data); - - player.TriggerEvent("SERVER:Job_ShowJobMenu", job.Name, json); - } - [RemoteEvent("CLIENT:Job_StartJob")] public void StartJobEvent(Player player) { @@ -202,7 +143,7 @@ namespace ReallifeGamemode.Server.Managers return; } - if(player.Vehicle != null) + if (player.Vehicle != null) { player.SetData("LastVehicle", player.Vehicle); } @@ -210,6 +151,7 @@ namespace ReallifeGamemode.Server.Managers playerJobStartPosition[player] = player.Position; job.StartJob(player); } + [ServerEvent(Event.PlayerExitVehicle)] public void JobManagerPlayerExitVehicle(Player player, Vehicle veh) { @@ -299,9 +241,13 @@ namespace ReallifeGamemode.Server.Managers { if (LastVehicle != null) { - LastVehicle.ResetData("timerJobVehicleRespawn"); - ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(LastVehicle); - ServerVehicleExtensions.Spawn(sVeh, LastVehicle); + if (job.Id != 2) //Müllman Handelt Fahrzeug respawn eigenständig + { + LastVehicle.ResetData("timerJobVehicleRespawn"); + ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(LastVehicle); + ServerVehicleExtensions.Spawn(sVeh, LastVehicle); + } + job.StopJob(player); ChatService.SendMessage(player, $"~y~[JOB]~s~ Du hast deinen Job ~o~{job.Name}~s~ beendet."); CheckPointHandle.DeleteCheckpoints(player); @@ -397,7 +343,7 @@ namespace ReallifeGamemode.Server.Managers player.Heading = (57.03f); } Vehicle LastVehicle = player.GetData("LastVehicle"); - if (LastVehicle != null) + if (LastVehicle != null && job.Id != GetJob().Id) { LastVehicle.ResetData("timerJobVehicleRespawn"); ServerVehicle sVeh = VehicleManager.GetServerVehicleFromVehicle(LastVehicle); diff --git a/ReallifeGamemode.Server/Util/ThreadTimers.cs b/ReallifeGamemode.Server/Util/ThreadTimers.cs index 92b16424..1d79d970 100644 --- a/ReallifeGamemode.Server/Util/ThreadTimers.cs +++ b/ReallifeGamemode.Server/Util/ThreadTimers.cs @@ -49,6 +49,7 @@ namespace ReallifeGamemode.Server.Util NAPI.Task.Run(() => { Medic.UpdateTaskTimeLeft(); + Medic.CheckHealDecisionDistance(); }); } @@ -59,6 +60,7 @@ namespace ReallifeGamemode.Server.Util Jail.JailOut_Elapsed(); Economy.Timer_Elapsed(); WeaponDealManager.Timer_Elapsed(); + Medic.UpdateReviveSperre(); }); } diff --git a/ReallifeGamemode.Server/Wanted/Jail.cs b/ReallifeGamemode.Server/Wanted/Jail.cs index 54239222..c9cfe660 100644 --- a/ReallifeGamemode.Server/Wanted/Jail.cs +++ b/ReallifeGamemode.Server/Wanted/Jail.cs @@ -66,10 +66,12 @@ namespace ReallifeGamemode.Server.Wanted jailTime /= 2; } - client.GetUser(dbContext).JailTime = jailTime; + User clientUser = client.GetUser(dbContext); + + clientUser.JailTime = jailTime; Jailtime[user.Id] = jailTime; // 54 sec for each wanted star -> in total 45min for 50 Wanteds - client.GetUser(dbContext).Wanteds = 0; + clientUser.Wanteds = 0; client.SetData("isDead", false); client.RemoveAllWeapons(); client.SetSharedData("blipColor", 0); @@ -100,24 +102,7 @@ namespace ReallifeGamemode.Server.Wanted client.TriggerEvent("jailTime", JsonConvert.SerializeObject(timeMinutes)); - switch (user.FactionId) - { - case null: - client.SetSharedData("blipColor", 0); - break; - case 8: - client.SetSharedData("blipColor", 83); - break; - case 7: - client.SetSharedData("blipColor", 52); - break; - case 4: - client.SetSharedData("blipColor", 5); - break; - case 9: - client.SetSharedData("blipColor", 25); - break; - } + clientUser.SetBlipAndNametagColor(); if (announceHq) {