diff --git a/ReallifeGamemode.Server/Gangwar/Turf.cs b/ReallifeGamemode.Server/Gangwar/Turf.cs index 5d9c8f7d..e1d9768b 100644 --- a/ReallifeGamemode.Server/Gangwar/Turf.cs +++ b/ReallifeGamemode.Server/Gangwar/Turf.cs @@ -133,81 +133,73 @@ namespace ReallifeGamemode.Server.Gangwar private void update() { - #region Ticket system - - /* - try + NAPI.Task.Run(() => { - Player[] owners = NAPI.Pools.GetAllPlayers().Where(c => c.GetUser().Faction.Name == this.Owner).ToArray(); - Player[] attackers = NAPI.Pools.GetAllPlayers().Where(c => c.GetUser().Faction.Name == this.Attacker).ToArray(); - }catch(NullReferenceException ex) - { - int i = 0; - foreach(var c in playerInGangwar) + foreach (Player gangwarPlayer in this.playerInGangwar) { - if (!NAPI.Entity.DoesEntityExist(c.Handle)) + if (!gangwarPlayer.IsLoggedIn()) { - this.playerInside = this.playerInside.Where(gp => gp != c).ToArray(); + continue; } - i++; + + gangwarPlayer.TriggerEvent("GangwarScore", this.Attacker, this.Owner, this.Att_Score, this.Def_Score, 900 - timerCount); } - } - if (owners.Length > attackers.Length) - this.Att_Score -= owners.Length - attackers.Length; - if(owners.Length < attackers.Length) - this.Def_Score -= attackers.Length - owners.Length; - */ - - #endregion Ticket system - - foreach (Player gangwarPlayer in this.playerInGangwar) - { - gangwarPlayer.TriggerEvent("GangwarScore", this.Attacker, this.Owner, this.Att_Score, this.Def_Score, 900 - timerCount); - } - /*if (this.Att_Score >= 200) - { - this.takeOver(this.Attacker); - } - else if (this.Def_Score >= 200) - { - this.takeOver(this.Owner); - }*/ - timerCount += 1; - if (timerCount >= 10) //change to 900 (seconds) before release for testing reasons change to whatever you like - { - if (this.Att_Score > this.Def_Score) + /*if (this.Att_Score >= 200) { - foreach (Player gangwarPlayer in this.playerInGangwar) - { - gangwarPlayer.TriggerEvent("GangwarScore", this.Attacker, this.Owner, 0, 0, 0); - } this.takeOver(this.Attacker); - this.Def_Score = 0; - return; } - else if (this.Att_Score < this.Def_Score) + else if (this.Def_Score >= 200) { - foreach (Player gangwarPlayer in this.playerInGangwar) - { - gangwarPlayer.TriggerEvent("GangwarScore", this.Attacker, this.Owner, 0, 0, 0); - } this.takeOver(this.Owner); - this.Att_Score = 0; - return; - } - else if (this.Def_Score == this.Att_Score) + }*/ + timerCount += 1; + if (timerCount >= 900) //change to 900 (seconds) before release for testing reasons change to whatever you like { - foreach (Player gangwarPlayer in this.playerInGangwar) + if (this.Att_Score > this.Def_Score) { - gangwarPlayer.TriggerEvent("GangwarScore", this.Attacker, this.Owner, 0, 0, 0); + foreach (Player gangwarPlayer in this.playerInGangwar) + { + if (!gangwarPlayer.IsLoggedIn()) + { + continue; + } + + gangwarPlayer.TriggerEvent("GangwarScore", this.Attacker, this.Owner, 0, 0, 0); + } + this.takeOver(this.Attacker); + this.Def_Score = 0; + return; + } + else if (this.Att_Score < this.Def_Score) + { + foreach (Player gangwarPlayer in this.playerInGangwar) + { + gangwarPlayer.TriggerEvent("GangwarScore", this.Attacker, this.Owner, 0, 0, 0); + } + this.takeOver(this.Owner); + this.Att_Score = 0; + return; + } + else if (this.Def_Score == this.Att_Score) + { + foreach (Player gangwarPlayer in this.playerInGangwar) + { + if (!gangwarPlayer.IsLoggedIn()) + { + continue; + } + + gangwarPlayer.TriggerEvent("GangwarScore", this.Attacker, this.Owner, 0, 0, 0); + } + this.takeOver(this.Owner); + this.Def_Score = 0; + return; } - this.takeOver(this.Owner); - this.Def_Score = 0; - return; } - } + }); } + public void enter(Player client) { User user = client.GetUser(); @@ -215,7 +207,7 @@ namespace ReallifeGamemode.Server.Gangwar { if (user.Faction.Name != getOwner() && user.Faction.Name != getAttacker()) return; - Player gPlayer = playerInGangwar.Where(c => c != null && !c.Handle.IsNull && c.IsLoggedIn() && c.GetUser().Id == user.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()) @@ -257,13 +249,11 @@ namespace ReallifeGamemode.Server.Gangwar Player[] attackers = NAPI.Pools.GetAllPlayers().Where(c => c.IsLoggedIn() && c.GetUser().Faction.Name == this.Attacker).ToArray(); foreach (var o in owners) { - if (o != null) - o.TriggerEvent("CLIENT:win"); + o.TriggerEvent("CLIENT:win"); } foreach (var a in attackers) { - if (a != null) - a.TriggerEvent("CLIENT:loose"); + a.TriggerEvent("CLIENT:loose"); } ChatService.BroadcastFaction("~y~[GANGWAR] ~w~Deine Fraktion hat erfolgreich das Gebiet ~g~" + getName() + "~w~ verteidigt.", dbContext.Factions.Where(f => f.Name == getOwner()).FirstOrDefault()); ChatService.BroadcastFaction("~y~[GANGWAR] ~w~Deine Fraktion hat den Angrif auf das Gebiet ~r~" + getName() + "~w~ verloren.", dbContext.Factions.Where(f => f.Name == getAttacker()).FirstOrDefault()); @@ -272,15 +262,8 @@ namespace ReallifeGamemode.Server.Gangwar else if (getOwner() != FactionName) { ChatService.BroadcastFaction("~y~[GANGWAR] ~w~Deine Fraktion konnte das Gebiet ~r~" + getName() + "~w~ nicht verteidigen.", dbContext.Factions.Where(f => f.Name == getOwner()).FirstOrDefault()); - Console.WriteLine("[DEBUG:GANGWAR] getting owners..."); Player[] owners = NAPI.Pools.GetAllPlayers().Where(c => c.IsLoggedIn() && c.GetUser().Faction.Name == this.Owner).ToArray(); - Console.WriteLine($"[DEBUG:GANGWAR] got owners {owners}."); - Console.WriteLine($"[DEBUG:GANGWAR] got owners {owners.ToString()}."); - - Console.WriteLine("[DEBUG:GANGWAR] getting attackers..."); Player[] attackers = NAPI.Pools.GetAllPlayers().Where(c => c.IsLoggedIn() && c.GetUser().Faction.Name == this.Attacker).ToArray(); - Console.WriteLine($"[DEBUG:GANGWAR] got attackers {attackers}."); - Console.WriteLine($"[DEBUG:GANGWAR] got attackers {attackers.ToString()}."); foreach (var o in owners) { if (o != null) @@ -303,6 +286,11 @@ namespace ReallifeGamemode.Server.Gangwar this.Attacker = null; foreach (var c in playerInGangwar) { + if (!c.IsLoggedIn()) + { + continue; + } + c.TriggerEvent("CLIENT:setAttackBlip", false, TurfID); c.ResetData("inGangWar"); c.ResetData("GotInsideOfTurf");