diff --git a/ReallifeGamemode.Client/Interaction/factioninteraction.ts b/ReallifeGamemode.Client/Interaction/factioninteraction.ts index 22948bf8..f10a8a11 100644 --- a/ReallifeGamemode.Client/Interaction/factioninteraction.ts +++ b/ReallifeGamemode.Client/Interaction/factioninteraction.ts @@ -1,5 +1,6 @@ import * as NativeUI from '../libs/NativeUI'; import InputHelper from '../inputhelper'; +import relativeVector from '../util/relativevector'; const Menu = NativeUI.Menu; const UIMenuItem = NativeUI.UIMenuItem; const UIMenuListItem = NativeUI.UIMenuListItem; @@ -17,7 +18,7 @@ export default function factionInteraction(globalData: IGlobalData) { var sorting = 0; var firstSorting = true; var activeTask = null; - var activeCheckpoint; + var activeCheckpoint: CheckpointMp; var taskStart; var taskFinish; var taskRange; @@ -216,6 +217,7 @@ export default function factionInteraction(globalData: IGlobalData) { let reviveTaskMenuMedic; let healTaskMenuMedic; let fireTaskMenuMedic; + let deleteCheckpointItem; if (userFactionId == 2) { if (isDuty) { @@ -231,6 +233,12 @@ export default function factionInteraction(globalData: IGlobalData) { fireTaskMenuMedic.SetRightLabel(fPM + fireTaskCountMedic); factionInteractionMenu.AddItem(fireTaskMenuMedic); */ + if (activeTask != null) { + if (activeTask.Type == 1 && activeCheckpoint && mp.checkpoints.exists(activeCheckpoint)) { + deleteCheckpointItem = new UIMenuItem("~r~Checkpoint löschen"); + factionInteractionMenu.AddItem(deleteCheckpointItem); + } + } } } @@ -260,6 +268,13 @@ export default function factionInteraction(globalData: IGlobalData) { mp.gui.chat.activate(true); globalData.InMenu = false; break; + case deleteCheckpointItem: + factionInteractionMenu.Close(); + mp.gui.chat.activate(true); + globalData.InMenu = false; + mp.events.call("destroyMedicTaskCheckpoint"); + break; + } }); @@ -305,7 +320,7 @@ export default function factionInteraction(globalData: IGlobalData) { mp.game.graphics.requestStreamedTextureDict("medicimages", true); mp.events.callRemote("updateMedicTask", 0, tasks[index].Victim); mp.game.ui.setNewWaypoint(tasks[index].Position.x, tasks[index].Position.y); - activeCheckpoint = mp.checkpoints.new(1, new mp.Vector3(tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z - 2), 3.0, + activeCheckpoint = mp.checkpoints.new(4, new mp.Vector3(tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z - 2), 3.0, { direction: new mp.Vector3(tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z - 5), color: [255, 0, 0, 150], @@ -359,7 +374,7 @@ export default function factionInteraction(globalData: IGlobalData) { mp.game.graphics.requestStreamedTextureDict("medicimages", true); mp.events.callRemote("updateMedicTask", 1, tasks[index].Victim); mp.game.ui.setNewWaypoint(tasks[index].Position.x, tasks[index].Position.y); - activeCheckpoint = mp.checkpoints.new(1, new mp.Vector3(tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z - 2), 3.0, + activeCheckpoint = mp.checkpoints.new(4, new mp.Vector3(tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z - 2), 3.0, { direction: new mp.Vector3(tasks[index].Position.x, tasks[index].Position.y, tasks[index].Position.z - 5), color: [255, 0, 0, 150], @@ -389,73 +404,13 @@ export default function factionInteraction(globalData: IGlobalData) { } }); - /* - mp.events.add("sortFactionTasks", (sortByKey) => { - if (firstSorting) { - sortText = "Nach Uhrzeit"; - firstSorting = false; - //mp.gui.chat.push("Init Sort"); - return; - } else { - if (sortByKey) { - if (sorting < 1) { - sorting++; - } else { - sorting = 0; - } - - switch (sorting) { - case 0: //Standartsortierung - - reviveTaskMenuMedic.Close(); - factionInteractionMenu.Close(); - sortText = "Nach Uhrzeit"; - mp.events.call("showMedicTasks", 0, JSON.stringify(initTasks)); - break; - - case 1: //Sortierung nach Metern (aufsteigend) - for (var d = 0; d < tasks.length; d++) { - for (var e = 0; e < tasks.length - 1; e++) { - if (getDistance1(e) > getDistance2(e + 1)) { - var tempTask = tasks[e]; - tasks[e] = tasks[e + 1]; - tasks[e + 1] = tempTask; - mp.gui.chat.push("SWITCH"); - } - } - } - reviveTaskMenuMedic.Close(); - factionInteractionMenu.Close(); - sortText = "Entfernung aufsteigend"; - mp.events.call("showMedicTasks", 0, JSON.stringify(tasks)); - break; - - //case 2: //Sortierung nach Metern (absteigend) - // mp.gui.chat.push("Sorting 2"); - // sortText = "Entfernung absteigend"; - // break; - //case 3: //Sortierung nach Zeit (aufsteigend) - // mp.gui.chat.push("Sorting 3"); - // sortText = "Restzeit aufsteigend"; - // break; - //case 4: //Sortierung nach Zeit (absteigend) - // mp.gui.chat.push("Sorting 4"); - // sortText = "Restzeit absteigend"; - // break; - } - } + mp.events.add('playerEnterCheckpoint', (activeCheckpoint) => { + if (activeTask.Type == 1) { + activeCheckpoint.destroy(); + activeCheckpoint = null; + activeTask = null; + timeLeft = null; } - });*/ - - function getDistance1(index) { - return mp.game.gameplay.getDistanceBetweenCoords(player.position.x, player.position.y, player.position.z, newTasks[index].Position.x, newTasks[index].Position.y, newTasks[index].Position.z, true).toFixed(2); - } - function getDistance2(index) { - return mp.game.gameplay.getDistanceBetweenCoords(player.position.x, player.position.y, player.position.z, newTasks[index].Position.x, newTasks[index].Position.y, newTasks[index].Position.z, true).toFixed(2); - } - - mp.events.add("cutMedicEarnings", () => { - deadRespawned = true; }); mp.events.add("destroyMedicTaskCheckpoint", () => { @@ -464,24 +419,6 @@ export default function factionInteraction(globalData: IGlobalData) { activeCheckpoint = null; activeTask = null; timeLeft = null; - mp.events.callRemote("MedicTaskTimeout"); - } - }); - - mp.events.add('playerEnterCheckpoint', (activeCheckpoint) => { - if (deadRespawned == true) { - activeCheckpoint.destroy(); - activeCheckpoint = null; - mp.events.callRemote("PayCutMedicEarnings"); - activeTask = null; - deadRespawned = false; - timeLeft = null; - } else if (activeTask.Type == 1) { - activeCheckpoint.destroy(); - activeCheckpoint = null; - mp.events.callRemote("delHealTaskAsMedic", activeTask.Victim); - activeTask = null; - timeLeft = null; } }); @@ -491,7 +428,23 @@ export default function factionInteraction(globalData: IGlobalData) { } }); - mp.events.add('render', () => { + mp.events.add('updateHealCheckpoint', (xPos, yPos, zPos) => { + if (activeTask && activeTask.Type == 1) { + activeCheckpoint.destroy(); + activeCheckpoint = null; + activeCheckpoint = mp.checkpoints.new(4, new mp.Vector3(xPos, yPos, zPos - 2), 3.0, + { + direction: new mp.Vector3(xPos, yPos, zPos - 5), + color: [255, 0, 0, 150], + visible: true, + dimension: 0 + }); + + mp.game.ui.setNewWaypoint(xPos, yPos); + } + }); + + function renderMedicGui() { if (activeTask) { rangeLeft = mp.game.gameplay.getDistanceBetweenCoords(player.position.x, player.position.y, player.position.z, taskFinish.x, taskFinish.y, taskFinish.z, true).toFixed(2); if (rangeLeft > 1.9) { @@ -513,18 +466,10 @@ export default function factionInteraction(globalData: IGlobalData) { } } - var currentDate = new Date(); - if (timeLeft != null) { if (deadRespawned == false) { - //timeLeft = Math.round(Math.abs(Math.floor(currentDate.getTime() / 1000) - activeTask.TimeLeft - 60)); - if (timeLeft < 120) mp.events.call("cutMedicEarnings"); - } else { - //timeLeft = Math.round(Math.abs(Math.floor(currentDate.getTime() / 1000) - activeTask.TimeLeft - 120)); if (timeLeft < 1) mp.events.call("destroyMedicTaskCheckpoint"); - } - if (deadRespawned == false) { mp.game.graphics.drawText(timeLeft + "s", [0.5, 0.85], { font: 7, color: [60, 179, 113, 255], @@ -545,5 +490,9 @@ export default function factionInteraction(globalData: IGlobalData) { } } } + } + + mp.events.add('render', () => { + renderMedicGui(); }); } \ No newline at end of file diff --git a/ReallifeGamemode.Server/Commands/AdminCommands.cs b/ReallifeGamemode.Server/Commands/AdminCommands.cs index 041f31dc..f6a425a6 100644 --- a/ReallifeGamemode.Server/Commands/AdminCommands.cs +++ b/ReallifeGamemode.Server/Commands/AdminCommands.cs @@ -471,13 +471,14 @@ namespace ReallifeGamemode.Server.Commands Medic.UpdateDutyMedics(-1); } - string targetPlayername = NAPI.Player.GetPlayerName(target); string adminPlayername = NAPI.Player.GetPlayerName(player); - ChatService.SendMessage(target, "~r~KICKINFO: ~w~Du wurdest von " + adminPlayername + " vom Server gekickt: " + reason); - target.Kick(); - ChatService.BroadcastAdmin("~y~SKICK: ~w~" + targetPlayername + " wurde von " + player.GetUser().AdminLevel.GetName() + " " + adminPlayername + " gekickt: " + reason, AdminLevel.SUPPORTER); + NAPI.Task.Run(() => { + target.Kick(); + }, 2500); + + ChatService.BroadcastAdmin("~y~SKICK: ~w~" + targetname + " wurde von " + player.GetUser().AdminLevel.GetName() + " " + adminPlayername + " gekickt: " + reason, AdminLevel.SUPPORTER); } [Command("clearchat", "~m~Benutzung: ~s~/clearchat")] @@ -785,14 +786,15 @@ namespace ReallifeGamemode.Server.Commands Medic.UpdateDutyMedics(-1); } - string targetPlayername = NAPI.Player.GetPlayerName(target); string adminPlayername = NAPI.Player.GetPlayerName(player); ChatService.SendMessage(target, "~r~KICKINFO: ~w~Du wurdest von " + adminPlayername + " vom Server gekickt: " + reason); - target.Kick(); + NAPI.Task.Run(() => { + target.Kick(); + }, 2500); - ChatService.Broadcast("~y~INFO: ~w~" + targetPlayername + " wurde von " + player.GetUser().AdminLevel.GetName() + " " + adminPlayername + " gekickt: " + reason); + ChatService.Broadcast("~y~INFO: ~w~" + targetname + " wurde von " + player.GetUser().AdminLevel.GetName() + " " + adminPlayername + " gekickt: " + reason); } [Command("warn", "~m~Benutzung: ~s~/warn [Player] [Grund]", GreedyArg = true)] @@ -874,7 +876,19 @@ namespace ReallifeGamemode.Server.Commands reason = Regex.Replace(reason, "(~[a-zA-Z]~)|(!{(.*)})", ""); - target.GetUser().BanPlayer(admin, reason, mins); + string adminPlayername = NAPI.Player.GetPlayerName(admin); + String banMessage = "~r~BANINFO: ~w~Du wurdest von " + adminPlayername + " vom Server gebannt: " + reason; + + if (mins > 0) + { + banMessage = "~r~BANINFO: ~w~Du wurdest von " + adminPlayername + " für " + mins + " Minuten vom Server gebannt: " + reason; + } + + ChatService.SendMessage(target, banMessage); + + NAPI.Task.Run(() => { + target.GetUser().BanPlayer(admin, reason, mins); + }, 2500); } [Command("unban", "~m~Benutzung: ~s~/unban [Name] ")] diff --git a/ReallifeGamemode.Server/Commands/FactionCommands.cs b/ReallifeGamemode.Server/Commands/FactionCommands.cs index 358cb273..eec24506 100644 --- a/ReallifeGamemode.Server/Commands/FactionCommands.cs +++ b/ReallifeGamemode.Server/Commands/FactionCommands.cs @@ -398,6 +398,7 @@ namespace ReallifeGamemode.Server.Commands 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.delHealTask(target); Medic.HealDecisions.Add(new Medic.HealDecision { dMedic = player, dTarget = target, dPrice = price }); } diff --git a/ReallifeGamemode.Server/Events/Death.cs b/ReallifeGamemode.Server/Events/Death.cs index 60da325f..3d8993d1 100644 --- a/ReallifeGamemode.Server/Events/Death.cs +++ b/ReallifeGamemode.Server/Events/Death.cs @@ -13,6 +13,7 @@ using ReallifeGamemode.Server.Services; using ReallifeGamemode.Server.Types; using ReallifeGamemode.Server.Util; using ReallifeGamemode.Server.Wanted; +using ReallifeGamemode.Services; /** * @overview Life of German Reallife - Events Death (Death.cs) @@ -233,7 +234,10 @@ namespace ReallifeGamemode.Server.Events dbContext.SaveChanges(); } player.RemoveAllWeapons(); - //Medic.delReviveTask(player); + MedicTask task = Medic.ReviveTasks.FirstOrDefault(t => t.Victim == player.Name); + Player medicPlayer = PlayerService.GetPlayerByNameOrId(task.MedicName); + Medic.RemoveTaskFromList(task); + NAPI.Player.SpawnPlayer(player, new Vector3(-495.45, -336.33, 34.5), -98.36f); } } diff --git a/ReallifeGamemode.Server/Events/Disconnect.cs b/ReallifeGamemode.Server/Events/Disconnect.cs index 00e16acc..886357c5 100644 --- a/ReallifeGamemode.Server/Events/Disconnect.cs +++ b/ReallifeGamemode.Server/Events/Disconnect.cs @@ -65,14 +65,14 @@ namespace ReallifeGamemode.Server.Events } } */ - var listReports = Report.Report.listReports; ReportManage temp; - for (int a = 0; a < listReports.Count; a++) + for (int a = 0; a < Report.Report.listReports.Count; a++) { - temp = listReports[a]; + temp = Report.Report.listReports[a]; + if (temp.getAdmin().Equals(player.Name)) { - listReports.Remove(temp); + Report.Report.listReports.Remove(temp); Player user = PlayerService.GetPlayerByNameOrId(temp.getUser()); user.SendChatMessage("!{#008fff}[REPORT]!{#FFFFFF} Chat beendet. Der Admin hat den Server verlassen"); @@ -81,10 +81,12 @@ namespace ReallifeGamemode.Server.Events if (temp.getUser().Equals(player.Name)) { - listReports.Remove(temp); - Player admin = PlayerService.GetPlayerByNameOrId(temp.getAdmin()); - admin.SendChatMessage("!{#008fff}[REPORT]!{#FFFFFF} Chat beendet. Der User hat den Server verlassen"); + if (admin != null) + { + admin.SendChatMessage("!{#008fff}[REPORT]!{#FFFFFF} Chat beendet. Der User hat den Server verlassen"); + } + Report.Report.listReports.Remove(temp); break; } } @@ -132,12 +134,19 @@ namespace ReallifeGamemode.Server.Events user.PositionZ = pos.Z; saveUser.SaveChanges(); user.Dead = player.HasData("isDead") ? (bool)player.GetData("isDead") : false; + + if (user.Wanteds > 0) + { + ChatService.HQMessage("Der Straftäter " + player.GetUser().Name + " ist vom Radar verschwunden"); + } + } player.SetData("isLoggedIn", false); player.TriggerEvent("CLIENT:DestroyPed", 1); player.TriggerEvent("CLIENT:DestroyPed", 2); - player.TriggerEvent("CLIENT:DestroyPed", 3); + player.TriggerEvent("CLIENT:DestroyPed", 3); player.TriggerEvent("CLIENT:DestroyPed", 4); + Medic.delHealTask(player); Medic.delReviveTask(player); if (player.GetData("duty") == true) diff --git a/ReallifeGamemode.Server/Events/Login.cs b/ReallifeGamemode.Server/Events/Login.cs index 1da5ec9f..95b25e83 100644 --- a/ReallifeGamemode.Server/Events/Login.cs +++ b/ReallifeGamemode.Server/Events/Login.cs @@ -37,117 +37,121 @@ namespace ReallifeGamemode.Server.Events if (user == null) { player.TriggerEvent("SERVER:Login_Error", "Der Benutzer existiert nicht! Registriere dich zuerst!"); + return; + } + + if (user.SocialClubName != player.SocialClubName && user.Password == NAPI.Util.GetHashSha256(password)) + { + player.TriggerEvent("SERVER:Login_Error", "Dieser Benutzer gehört dir nicht!"); + //TODO ?? Log einbauen für den bösen Bub. + player.Kick(); + return; + } + + if (user.Password != NAPI.Util.GetHashSha256(password)) + { + player.TriggerEvent("SERVER:Login_Error", "Passwort inkorrekt!"); + return; + } + + player.SetData("dbId", user.Id); + player.Name = username; + player.TriggerEvent("SERVER:Login_Success"); + player.TriggerEvent("CLIENT:StopSound"); + player.SetData("isLoggedIn", true); + player.SetSharedData("isLoggedIn", JsonConvert.SerializeObject(true)); + player.SetData("spec", true); + player.SetData("duty", false); + player.SetData("Adminduty", false); + player.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney, 0); + player.TriggerEvent("headshotoff"); + Gangwar.Gangwar.loadPlayer(player); + if (user.FactionLeader) + { + player.TriggerEvent("CLIENT:Turf_LoadLeaderBlip"); + } + if (user.IsAdmin(AdminLevel.HEADADMIN)) + { + player.SetData("editmode", false); + player.SetData("quicksavemode", "none"); + } + + var userBankAccount = user.BankAccount; + userBankAccount.Balance = userBankAccount.Balance; + + user.Wanteds = user.Wanteds; + + if (user.Wanteds > 0) + { + ChatService.HQMessage("Der Straftäter" + user.Name + " hat sich mit " + user.Wanteds + " Wanteds eingeloggt."); + } + + if (user.Group != null) + { + string msg = $"{player.Name} ist wieder online."; + ChatService.BroadcastGroup(msg, user.Group); + } + + if (GlobalHelper.CustomJoinMessages.ContainsKey(player.SocialClubName)) + { + ChatService.BroadcastAdmin("!{#FFFF00}*** " + GlobalHelper.CustomJoinMessages[player.SocialClubName] + " [ID: " + player.Handle.Value + "] (" + user.AdminLevel.GetName() + ")", AdminLevel.MAPPING); + } + else if (user.IsAdmin(AdminLevel.MAPPING)) + { + ChatService.BroadcastAdmin("!{#FFFF00}*** " + user.Name + " [ID: " + player.Handle.Value + "]" + " hat sich als " + user.AdminLevel.GetName() + " eingeloggt!", AdminLevel.MAPPING); + } + + + var userItems = dbContext.UserItems.Where(u => u.UserId == user.Id).ToList(); + player.SetData("items", userItems); + + user.SetBlipAndNametagColor(); + + if (user.CharacterId == null) + { + var currentPlayerCreatorDimension = (uint)NAPI.Data.GetWorldData("playerCreatorDimension"); + currentPlayerCreatorDimension++; + NAPI.Data.SetWorldData("playerCreatorDimension", currentPlayerCreatorDimension); + player.Dimension = NAPI.Data.GetWorldData("playerCreatorDimension"); + player.Position = new Vector3(402.8664, -996.4108, -99.00027); + player.Rotation = new Vector3(0, 0, 180); + player.TriggerEvent("toggleCreator"); } else { - if (user.SocialClubName != player.SocialClubName && user.Password == NAPI.Util.GetHashSha256(password)) + CharacterCreator.ApplyCharacter(player); + UpdateCharacterCloth.LoadCharacterDefaults(player); + if (user.JailTime <= 0) { - player.TriggerEvent("SERVER:Login_Error", "Dieser Benutzer gehört dir nicht!"); - //TODO ?? Log einbauen für den bösen Bub. - player.Kick(); - return; - } - - if (user.Password != NAPI.Util.GetHashSha256(password)) - { - player.TriggerEvent("SERVER:Login_Error", "Passwort inkorrekt!"); + NAPI.Player.SpawnPlayer(player, new Vector3(user.PositionX, user.PositionY, user.PositionZ), 0); } else { - player.SetData("dbId", user.Id); - player.Name = username; - player.TriggerEvent("SERVER:Login_Success"); - player.TriggerEvent("CLIENT:StopSound"); - player.SetData("isLoggedIn", true); - player.SetSharedData("isLoggedIn", JsonConvert.SerializeObject(true)); - player.SetData("spec", true); - player.SetData("duty", false); - player.SetData("Adminduty", false); - player.TriggerEvent("SERVER:SET_HANDMONEY", user.Handmoney, 0); - player.TriggerEvent("headshotoff"); - Gangwar.Gangwar.loadPlayer(player); - if (user.FactionLeader) - { - player.TriggerEvent("CLIENT:Turf_LoadLeaderBlip"); - } - if (user.IsAdmin(AdminLevel.HEADADMIN)) - { - player.SetData("editmode", false); - player.SetData("quicksavemode", "none"); - } - - var userBankAccount = user.BankAccount; - userBankAccount.Balance = userBankAccount.Balance; - - user.Wanteds = user.Wanteds; - - - if (user.Group != null) - { - string msg = $"{player.Name} ist wieder online."; - ChatService.BroadcastGroup(msg, user.Group); - } - - if (GlobalHelper.CustomJoinMessages.ContainsKey(player.SocialClubName)) - { - ChatService.BroadcastAdmin("!{#FFFF00}*** " + GlobalHelper.CustomJoinMessages[player.SocialClubName] + " [ID: " + player.Handle.Value + "] (" + user.AdminLevel.GetName() + ")", AdminLevel.MAPPING); - } - else if (user.IsAdmin(AdminLevel.MAPPING)) - { - ChatService.BroadcastAdmin("!{#FFFF00}*** " + user.Name + " [ID: " + player.Handle.Value + "]" + " hat sich als " + user.AdminLevel.GetName() + " eingeloggt!", AdminLevel.MAPPING); - } - - - var userItems = dbContext.UserItems.Where(u => u.UserId == user.Id).ToList(); - player.SetData("items", userItems); - - user.SetBlipAndNametagColor(); - - if (user.CharacterId == null) - { - var currentPlayerCreatorDimension = (uint)NAPI.Data.GetWorldData("playerCreatorDimension"); - currentPlayerCreatorDimension++; - NAPI.Data.SetWorldData("playerCreatorDimension", currentPlayerCreatorDimension); - player.Dimension = NAPI.Data.GetWorldData("playerCreatorDimension"); - player.Position = new Vector3(402.8664, -996.4108, -99.00027); - player.Rotation = new Vector3(0, 0, 180); - player.TriggerEvent("toggleCreator"); - } - else - { - CharacterCreator.ApplyCharacter(player); - UpdateCharacterCloth.LoadCharacterDefaults(player); - if (user.JailTime <= 0) - { - NAPI.Player.SpawnPlayer(player, new Vector3(user.PositionX, user.PositionY, user.PositionZ), 0); - } - else - { - Jail.Check_PutBehindBars(user); - } - } - - player.TriggerEvent("draw", player.Name, player.Handle.Value); - if (user.Dead == true) - { - if (user.IsAdmin(AdminLevel.ADMIN) == true) - { - player.TriggerEvent("startDeathTimer", true); - player.Health = 0; - } - else - { - player.TriggerEvent("startDeathTimer", false); - player.Health = 0; - } - player.SetData("isDead", true); - } - else - { - player.SetData("isDead", false); - } + Jail.Check_PutBehindBars(user); } } + + player.TriggerEvent("draw", player.Name, player.Handle.Value); + NAPI.Task.Run(() => + { + if (user.Dead == true) + { + if (user.IsAdmin(AdminLevel.ADMIN) == true) + { + player.TriggerEvent("startDeathTimer", true); + } + else + { + player.TriggerEvent("startDeathTimer", false); + } + player.Health = 0; + player.SetData("isDead", true); + } + else + { + player.SetData("isDead", false); + } + }, delayTime: 1000); } } } diff --git a/ReallifeGamemode.Server/Extensions/ClientExtension.cs b/ReallifeGamemode.Server/Extensions/ClientExtension.cs index e20a998e..3853d13b 100644 --- a/ReallifeGamemode.Server/Extensions/ClientExtension.cs +++ b/ReallifeGamemode.Server/Extensions/ClientExtension.cs @@ -179,7 +179,7 @@ namespace ReallifeGamemode.Server.Extensions dbContext.SaveChanges(); } 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); + ChatService.SendMessage(user.Player, " !{#FFFF00}Fahndungslevel:~s~ " + newWanteds); foreach (var copPlayer in NAPI.Pools.GetAllPlayers()) { diff --git a/ReallifeGamemode.Server/Factions/Medic/Medic.cs b/ReallifeGamemode.Server/Factions/Medic/Medic.cs index 41447614..89c8fbe7 100644 --- a/ReallifeGamemode.Server/Factions/Medic/Medic.cs +++ b/ReallifeGamemode.Server/Factions/Medic/Medic.cs @@ -26,7 +26,7 @@ namespace ReallifeGamemode.Server.Factions.Medic public static List HealDecisions = new List(); public static int ReviveIncome = 100; public static int dutyMedics = 0; - public static int reviveTaskTime = 240; + public static int reviveTaskTime = 120; public class HealDecision { @@ -149,21 +149,21 @@ namespace ReallifeGamemode.Server.Factions.Medic 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); + delHealTask(activeDecision.dTarget); } HealDecisions.Remove(activeDecision); } public static void UpdateTaskTimeLeft() { - DateTime actualTime = DateTime.Now; if (ReviveTasks.Count != 0) { + DateTime actualTime = DateTime.Now; foreach (var task in ReviveTasks) { - if (task.MedicName != null) + if (task.MedicName != "none") { - var taskTimeLeft = Math.Abs((Int32)(((DateTimeOffset)actualTime).ToUnixTimeSeconds() - ((DateTimeOffset)task.Time).ToUnixTimeSeconds() - reviveTaskTime)); + var taskTimeLeft = Math.Abs((int)(((DateTimeOffset)actualTime).ToUnixTimeSeconds() - ((DateTimeOffset)task.Time).ToUnixTimeSeconds() - reviveTaskTime)); task.TimeLeft = taskTimeLeft; var medic = PlayerService.GetPlayerByNameOrId(task.MedicName); if(medic != null) medic.TriggerEvent("setTaskTimeLeft", taskTimeLeft); @@ -172,6 +172,23 @@ namespace ReallifeGamemode.Server.Factions.Medic } } + public static void UpdateHealTaskCheckpoint() + { + if (HealTasks.Count != 0) + { + foreach(var task in HealTasks) + { + if(task.MedicName != "none") + { + var medic = PlayerService.GetPlayerByNameOrId(task.MedicName); + var victim = PlayerService.GetPlayerByNameOrId(task.Victim); + task.Position = victim.Position; + medic.TriggerEvent("updateHealCheckpoint", victim.Position.X, victim.Position.Y, victim.Position.Z); + } + } + } + } + [RemoteEvent("loadMedicTasks")] public void LoadMedicTasks(Player player, int type) { @@ -221,8 +238,16 @@ namespace ReallifeGamemode.Server.Factions.Medic public static void delHealTask(Player player) { MedicTask task = HealTasks.FirstOrDefault(t => t.Victim == player.Name); - if(task != null) RemoveTaskFromList(task); - player.SetData("healauftrag", false); + if (task != null) + { + player.SetData("healauftrag", false); + var medicPlayer = PlayerService.GetPlayerByNameOrId(task.MedicName); + if (task.MedicName != "none") + { + medicPlayer.TriggerEvent("destroyMedicTaskCheckpoint"); + } + RemoveTaskFromList(task); + } } [RemoteEvent("delHealTaskAsMedic")] @@ -231,54 +256,21 @@ namespace ReallifeGamemode.Server.Factions.Medic MedicTask task = HealTasks.FirstOrDefault(t => t.Victim == victimName); RemoveTaskFromList(task); player.SetData("healauftrag", false); + } [RemoteEvent("delReviveTask")] public static void delReviveTask(Player player) { MedicTask task = ReviveTasks.FirstOrDefault(t => t.Victim == player.Name); - RemoveTaskFromList(task); - } - [RemoteEvent("delReviveTaskMedic")] - public static void delReviveTaskMedic(Player player) - { - MedicTask task = ReviveTasks.FirstOrDefault(t => t.MedicName == player.Name); - RemoveTaskFromList(task); - } - - [RemoteEvent("CutMedicEarnings")] - public void CutMedicEarnings(Player player) - { - MedicTask task = ReviveTasks.FirstOrDefault(t => t.Victim == player.Name); - var medic = PlayerService.GetPlayerByNameOrId(task.MedicName); - medic.TriggerEvent("cutMedicEarnings"); - } - [RemoteEvent("PayCutMedicEarnings")] - public void PayCutMedicEarnings(Player player) - { - using var dbContext = new DatabaseContext(); + if (task != null) { - dbContext.Factions.Include(f => f.BankAccount).Where(f => f.Id == 2).First().BankAccount.Balance += Medic.ReviveIncome / 4; - player.SendNotification($"Du hast den Einsatzort erreicht und ~g~{Medic.ReviveIncome / 4}$ ~s~für die Fraktion verdient."); - Medic.delReviveTaskMedic(player); - dbContext.SaveChanges(); - } - } - - [RemoteEvent("MedicTaskTimeout")] - public void RemoveMedicTask(Player player) - { - Medic.delReviveTaskMedic(player); - } - - [RemoteEvent("getTaskTimeLeft")] - public void GetTaskTimeLeft(Player player, string victimName) - { - using var dbContext = new DatabaseContext(); - { - var activeTaskTime = ReviveTasks.FirstOrDefault(t => t.MedicName == player.Name && t.Victim == victimName).TimeLeft; - - player.TriggerEvent("setTaskTimeLeft", activeTaskTime); + var medicPlayer = PlayerService.GetPlayerByNameOrId(task.MedicName); + if (task.MedicName != "none") + { + medicPlayer.TriggerEvent("destroyMedicTaskCheckpoint"); + } + RemoveTaskFromList(task); } } diff --git a/ReallifeGamemode.Server/Gangwar/Turf.cs b/ReallifeGamemode.Server/Gangwar/Turf.cs index 8ab9c64f..5d9c8f7d 100644 --- a/ReallifeGamemode.Server/Gangwar/Turf.cs +++ b/ReallifeGamemode.Server/Gangwar/Turf.cs @@ -210,11 +210,12 @@ namespace ReallifeGamemode.Server.Gangwar public void enter(Player client) { + User user = client.GetUser(); if (this.status == "attack") { - if (client.GetUser().Faction.Name != getOwner() && client.GetUser().Faction.Name != getAttacker()) + if (user.Faction.Name != getOwner() && user.Faction.Name != getAttacker()) return; - Player gPlayer = playerInGangwar.Where(c => c.GetUser().Id == client.GetUser().Id).FirstOrDefault(); + Player gPlayer = playerInGangwar.Where(c => c != null && !c.Handle.IsNull && c.IsLoggedIn() && c.GetUser().Id == user.Id).FirstOrDefault(); if (gPlayer == null) { using (var dbContext = new DatabaseContext()) @@ -226,6 +227,7 @@ namespace ReallifeGamemode.Server.Gangwar } } + if (playerInside.Find(c => c == client) == null) { playerInside.Add(client); diff --git a/ReallifeGamemode.Server/Util/ThreadTimers.cs b/ReallifeGamemode.Server/Util/ThreadTimers.cs index 1d79d970..f0b2a057 100644 --- a/ReallifeGamemode.Server/Util/ThreadTimers.cs +++ b/ReallifeGamemode.Server/Util/ThreadTimers.cs @@ -14,6 +14,7 @@ namespace ReallifeGamemode.Server.Util private static Timer timer500 = new Timer(500); //0.5 seconds timer private static Timer timer1000 = new Timer(1000); //1 seconds timer private static Timer timer2500 = new Timer(2500); //2.5 seconds timer + private static Timer timer5000 = new Timer(5000); //5 seconds timer private static Timer timer10000 = new Timer(10000); // 10 second timer private static Timer timer60000 = new Timer(60000); //60 seconds timer @@ -28,6 +29,9 @@ namespace ReallifeGamemode.Server.Util timer2500.Start(); timer2500.Elapsed += Timer2500_Elapsed; + timer5000.Start(); + timer5000.Elapsed += Timer5000_Elapsed; + timer10000.Start(); timer10000.Elapsed += Timer10000_Elapsed; @@ -53,6 +57,15 @@ namespace ReallifeGamemode.Server.Util }); } + private static void Timer5000_Elapsed(object sender, ElapsedEventArgs e) + { + NAPI.Task.Run(() => + { + Medic.UpdateHealTaskCheckpoint(); + }); + } + + private static void Timer60000_Elapsed(object sender, ElapsedEventArgs e) { NAPI.Task.Run(() => diff --git a/ReallifeGamemode.Server/Wanted/Autowanted.cs b/ReallifeGamemode.Server/Wanted/Autowanted.cs index 6ca6db5a..f24841dc 100644 --- a/ReallifeGamemode.Server/Wanted/Autowanted.cs +++ b/ReallifeGamemode.Server/Wanted/Autowanted.cs @@ -28,7 +28,7 @@ namespace ReallifeGamemode.Server.Wanted using (var dbContext = new DatabaseContext()) { killer = killerPlayer.GetUser(dbContext); - killer.GiveWanteds(copPlayer, 10, "Beamten-Mord"); + killer.GiveWanteds(copPlayer, 14, "Beamten-Mord"); dbContext.SaveChanges(); } } diff --git a/ReallifeGamemode.Server/Wanted/WantedEscapeTimer.cs b/ReallifeGamemode.Server/Wanted/WantedEscapeTimer.cs index a9640a8b..ab02d365 100644 --- a/ReallifeGamemode.Server/Wanted/WantedEscapeTimer.cs +++ b/ReallifeGamemode.Server/Wanted/WantedEscapeTimer.cs @@ -9,6 +9,7 @@ using GTANetworkAPI; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Database.Models; using ReallifeGamemode.Server.Extensions; +using ReallifeGamemode.Server.Services; namespace ReallifeGamemode.Server.Wanted { @@ -68,10 +69,11 @@ namespace ReallifeGamemode.Server.Wanted if (waTimer[user.Id] <= 0) { ResetWantedTimeToElapse(player); - player.SendChatMessage("~y~Du hast erfolgtreich einen Wanted abgetaucht."); + player.SendChatMessage("~y~Du hast erfolgreich einen Wanted abgetaucht."); user.Wanteds -= 1; if (user.Wanteds == 0) { + ChatService.HQMessage(player.Name + " konnte solange abtauchen, sodass er nicht mehr gesucht wird."); user.SetBlipAndNametagColor(); dbContext.SaveChanges(); }