From a1feadfd5d70792dc21bae9526d8f393aa9ac4d5 Mon Sep 17 00:00:00 2001 From: VegaZ Date: Sun, 21 Oct 2018 21:31:31 +0200 Subject: [PATCH] Extend Death System; Add Revive-System --- Client/Gui/deathscreen.js | 1 - Server/Commands/Faction.cs | 42 ++++++++++++++++++++++++++++++------- Server/Entities/User.cs | 2 ++ Server/Events/Connect.cs | 15 +++++++++++++ Server/Events/Death.cs | 9 ++------ Server/Events/Disconnect.cs | 1 + 6 files changed, 54 insertions(+), 16 deletions(-) diff --git a/Client/Gui/deathscreen.js b/Client/Gui/deathscreen.js index 806ec6d2..99f30604 100644 --- a/Client/Gui/deathscreen.js +++ b/Client/Gui/deathscreen.js @@ -30,7 +30,6 @@ mp.events.add("onPlayerRevived", () => { isDeath = false; mp.gui.chat.activate(true); mp.game.gameplay.setFadeOutAfterDeath(false); - mp.events.callRemote('RespawnPlayerAtDeathpoint'); }); mp.events.add("respawnDeathPlayer", () => { diff --git a/Server/Commands/Faction.cs b/Server/Commands/Faction.cs index f1b84674..06d407b8 100644 --- a/Server/Commands/Faction.cs +++ b/Server/Commands/Faction.cs @@ -20,11 +20,13 @@ namespace reallife_gamemode.Server.Commands { class Faction : Script { + #region Chat Commands + [Command("f", "~m~Benutzung: ~s~/f [Nachricht]", GreedyArg = true)] public void CmdFactionF(Client player, string message) { Entities.Faction f = player.GetUser()?.GetFaction(); - if(f == null || f.StateOwned) + if (f == null || f.StateOwned) { ChatService.NotAuthorized(player); return; @@ -59,16 +61,18 @@ namespace reallife_gamemode.Server.Commands } string broadcastMessage = "!{CC3333}** " + player.GetUser().GetFactionRank().RankName + " " + player.Name + ": " + message + ", over **"; - using(var context = new DatabaseContext()) + using (var context = new DatabaseContext()) { ChatService.BroadcastFaction(broadcastMessage, context.Factions.ToList().FindAll(c => c.StateOwned)); } } + #endregion + #region Leader Commands [Command("invite", "~m~Benutzung: ~s~/invite [Name]")] public void CmdFactionInvite(Client player, string name) { - if(player.GetUser()?.FactionId == null || player.GetUser().FactionLeader == false) + if (player.GetUser()?.FactionId == null || player.GetUser().FactionLeader == false) { ChatService.NotAuthorized(player); return; @@ -81,7 +85,7 @@ namespace reallife_gamemode.Server.Commands return; } - if(target.GetUser()?.FactionId != null) + if (target.GetUser()?.FactionId != null) { player.SendChatMessage("~r~[FEHLER]~s~ Dieser Spieler ist schon in einer Fraktion."); return; @@ -121,7 +125,7 @@ namespace reallife_gamemode.Server.Commands using (var dbContext = new DatabaseContext()) { FactionRank fr = dbContext.FactionRanks.FirstOrDefault(r => r.RankName == rank && r.FactionId == player.GetUser(dbContext).FactionId); - if(fr == null) + if (fr == null) { player.SendChatMessage("~r~[FEHLER]~s~ Dieser Rang existiert nicht."); return; @@ -158,13 +162,13 @@ namespace reallife_gamemode.Server.Commands return; } - if(player.Handle == target.Handle) + if (player.Handle == target.Handle) { player.SendChatMessage("~r~[FEHLER]~s~ Du kannst dich nicht selber uninviten."); return; } - if(target.GetUser()?.FactionLeader ?? false) + if (target.GetUser()?.FactionLeader ?? false) { player.SendChatMessage("~r~[FEHLER]~s~ Du kannst keinen Leader uninviten."); return; @@ -183,7 +187,7 @@ namespace reallife_gamemode.Server.Commands } } - [Command("lc", "~m~Benutzung: ~s~/lc [Nachricht]", GreedyArg = true)] + [Command("lc", "~m~Benutzung: ~s~/lc [Nachricht]", GreedyArg = true)] public void CmdFactionLc(Client player, string message) { if (player.GetUser()?.FactionId == null || player.GetUser().FactionLeader == false) @@ -199,5 +203,27 @@ namespace reallife_gamemode.Server.Commands if (p.GetUser()?.FactionLeader ?? false) p.SendChatMessage(broadcastMsg); }); } + #endregion + #region Sanitäter Commands + + [Command("revive", "~m~Benutzung: ~s~/invite")] + public void CmdFactionMedicRevive(Client player) + { + if (player.GetUser()?.FactionId == null || player.GetUser().FactionId != 2) + { + ChatService.NotAuthorized(player); + return; + } + + var nearPlayers = NAPI.Player.GetPlayersInRadiusOfPlayer(2, player); + var deadPlayer = nearPlayers.Where(i => i.GetData("isDead") == true).FirstOrDefault(); + + deadPlayer.TriggerEvent("onPlayerRevived"); + deadPlayer.SendNotification("Du wurdest von ~y~" + player.Name + "~s~ wiederbelebt."); + deadPlayer.SetData("isDead", false); + NAPI.Player.SpawnPlayer(deadPlayer, deadPlayer.Position); + deadPlayer.Health = 50; + } + #endregion } } diff --git a/Server/Entities/User.cs b/Server/Entities/User.cs index 474cdf1a..8628237f 100644 --- a/Server/Entities/User.cs +++ b/Server/Entities/User.cs @@ -36,6 +36,8 @@ namespace reallife_gamemode.Server.Entities public string Email { get; set; } public AdminLevel AdminLevel { get; set; } + public bool Dead { get; set; } + public float PositionX { get; set; } public float PositionY { get; set; } public float PositionZ { get; set; } diff --git a/Server/Events/Connect.cs b/Server/Events/Connect.cs index 53a19793..7a46fc9a 100644 --- a/Server/Events/Connect.cs +++ b/Server/Events/Connect.cs @@ -47,6 +47,21 @@ namespace reallife_gamemode.Server.Events return; } + + using (var loginUser = new DatabaseContext()) + { + var user = loginUser.Users.SingleOrDefault(b => b.Name == player.Name); + if(user.Dead == true) + { + player.TriggerEvent("startDeathTimer"); + player.SetData("isDead", true); + } + else + { + player.SetData("isDead", false); + } + } + player.SetData("isLoggedIn", false); player.Position = new Vector3(-1883.736, -781.4911, -10); player.FreezePosition = true; diff --git a/Server/Events/Death.cs b/Server/Events/Death.cs index 048d43a5..15139c9f 100644 --- a/Server/Events/Death.cs +++ b/Server/Events/Death.cs @@ -22,7 +22,7 @@ namespace reallife_gamemode.Server.Events [ServerEvent(Event.PlayerDeath)] public void OnPlayerDeath(Client player, Client killer, uint reason) { - + player.SetData("isDead", true); player.TriggerEvent("startDeathTimer"); //TODO: Zum Full Release entfernen @@ -65,14 +65,9 @@ namespace reallife_gamemode.Server.Events [RemoteEvent("RespawnPlayerAtHospital")] public void RespawnPlayerAtHospital(Client player) { + player.SetData("isDead", false); player.RemoveAllWeapons(); NAPI.Player.SpawnPlayer(player, new Vector3(-495.45, -336.33, 34.5)); } - [RemoteEvent("RespawnPlayerAtDeathpoint")] - public void RespawnPlayerAtDeathpoint(Client player) - { - NAPI.Player.SpawnPlayer(player, player.Position); - } } - } diff --git a/Server/Events/Disconnect.cs b/Server/Events/Disconnect.cs index d923476f..1811d970 100644 --- a/Server/Events/Disconnect.cs +++ b/Server/Events/Disconnect.cs @@ -46,6 +46,7 @@ namespace reallife_gamemode.Server.Events user.PositionX = player.Position.X; user.PositionY = player.Position.Y; user.PositionZ = player.Position.Z; + user.Dead = player.GetData("isDead"); saveUser.SaveChanges(); } }