Create NotificationService.cs
This commit is contained in:
152
ReallifeGamemode.Server/Services/NotificationService.cs
Normal file
152
ReallifeGamemode.Server/Services/NotificationService.cs
Normal file
@@ -0,0 +1,152 @@
|
||||
/**
|
||||
* @overview Benachrichtigungen (NotificationService.cs)
|
||||
* @author Luke, hydrant, xSprite
|
||||
* @copyright Life of German
|
||||
*/
|
||||
|
||||
using GTANetworkAPI;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using ReallifeGamemode.Database.Entities;
|
||||
using ReallifeGamemode.Database.Models;
|
||||
using ReallifeGamemode.Server.Extensions;
|
||||
using ReallifeGamemode.Server.Job;
|
||||
using ReallifeGamemode.Server.Types;
|
||||
|
||||
namespace ReallifeGamemode.Server.Services
|
||||
{
|
||||
internal class NotificationService
|
||||
{
|
||||
/// <summary>
|
||||
/// Sendet eine Benachrichtigung an einen bestimmten Spieler
|
||||
/// </summary>
|
||||
/// <param name="player">Der Spieler, der die Benachrichtigung erhalten soll</param>
|
||||
/// <param name="message">Die Nachricht, die dem Spieler als Benachrichtigung zugestellt werden soll</param>
|
||||
public static void SendNotification(Player player, string message)
|
||||
{
|
||||
if (player == null || !player.IsLoggedIn())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
player.SendNotification(message);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sendet eine Fehlermeldung als Benachrichtigung an einen bestimmten Spieler
|
||||
/// </summary>
|
||||
/// <param name="player">Der Spieler, der die Benachrichtigung erhalten soll</param>
|
||||
/// <param name="message">Die Nachricht, die dem Spieler als Benachrichtigung zugestellt werden soll</param>
|
||||
public static void SendErrorNotification(Player player, string message)
|
||||
{
|
||||
if (message.EndsWith("."))
|
||||
{
|
||||
message.Substring(0, message.Length - 1);
|
||||
}
|
||||
|
||||
SendNotification(player, $"~r~Fehler:~n~~s~{message}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sendet eine Benachrichtigung an alle Spieler
|
||||
/// </summary>
|
||||
/// <param name="message">Die Nachricht, die dem Spieler als Benachrichtigung zugestellt werden soll</param>
|
||||
public static void SendServerNotification(string message) => NAPI.Pools.GetAllPlayers().ForEach(player => SendNotification(player, message));
|
||||
|
||||
/// <summary>
|
||||
/// Sendet eine Benachrichtigung an die Mitglieder einer Fraktion
|
||||
/// </summary>
|
||||
/// <param name="faction">Die Fraktion, deren Mitglieder diese Benachrichtigung erhalten soll</param>
|
||||
/// <param name="message">Die Nachricht, die den Mitgliedern als Benachrichtigung zugestellt werden soll</param>
|
||||
public static void SendFactionNotification(Faction faction, string message) => SendFactionNotification(new List<Faction>() { faction }, message);
|
||||
|
||||
/// <summary>
|
||||
/// Sendet eine Benachrichtigung an die Mitglieder mehrerer Fraktionen
|
||||
/// </summary>
|
||||
/// <param name="factions">Die Liste an Fraktionen, deren Mitglieder diese Benachrichtigung erhalten sollen</param>
|
||||
/// <param name="message">Die Nachricht, die den Mitgliedern als Benachrichtigung zugestellt werden soll</param>
|
||||
public static void SendFactionNotification(List<Faction> factions, string message)
|
||||
{
|
||||
foreach (Player player in NAPI.Pools.GetAllPlayers())
|
||||
{
|
||||
User user = player.GetUser();
|
||||
Faction userFaction = user.Faction;
|
||||
|
||||
if (userFaction != null && factions.Find(faction => faction.Id == userFaction.Id) != null)
|
||||
{
|
||||
SendNotification(player, message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sendet eine Nachricht an die Mitglieder der Strafverfolgungsbehörden
|
||||
/// </summary>
|
||||
/// <param name="message">Die Nachricht, die den Beamten als Benachrichtigung zugestellt werden soll</param>
|
||||
public static void SendPolicingNotification(string message) => SendFactionNotificationByFactionIds(new List<int>() { 1, 3 }, $"!{{#8181E9}}HQ-Meldung:~n~~s~{message}");
|
||||
|
||||
/// <summary>
|
||||
/// Sendet eine Benachrichtigung an alle Spieler mit einem bestimmten Admin-Level
|
||||
/// </summary>
|
||||
/// <param name="minLevel">Das Admin-Level, dass für den Erhalt dieser Benachrichtigung erforderlich ist</param>
|
||||
/// <param name="message">Die Nachricht, die den Spielern als Benachrichtigung zugestellt werden soll</param>
|
||||
public static void SendAdminLevelNotification(AdminLevel minLevel, string message)
|
||||
{
|
||||
NAPI.Pools.GetAllPlayers()
|
||||
.Where(player => player.IsLoggedIn())
|
||||
.Where(player => player.GetUser().IsAdmin(minLevel)).ToList()
|
||||
.ForEach(player => SendNotification(player, message));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sendet eine Benachrichtigung an alle Spieler, die sich im T-Support befinden
|
||||
/// </summary>
|
||||
/// <param name="message">Die Nachricht, die den Spielern als Benachrichtigung zugestellt werden soll</param>
|
||||
public static void SendDutyTeamMemberNotification(string message)
|
||||
{
|
||||
NAPI.Pools.GetAllPlayers()
|
||||
.Where(player => player.IsAdminDuty()).ToList()
|
||||
.ForEach(player => SendNotification(player, message));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sendet eine Benachrichtigung an Spieler, die sich in der Nähe eines Punktes befinden
|
||||
/// </summary>
|
||||
/// <param name="position">Position, von der die Distanz ermittelt wird</param>
|
||||
/// <param name="range">Distanz, bis zu welcher Spieler benachrichtigt werden</param>
|
||||
/// <param name="message">Die Nachricht, die dem Spieler als Benachrichtigung zugestellt werden soll</param>
|
||||
internal static void SendRangeNotification(Vector3 position, int range, string message)
|
||||
{
|
||||
NAPI.Pools.GetAllPlayers()
|
||||
.Where(player => player.Position.DistanceTo(position) <= range).ToList()
|
||||
.ForEach(player => SendNotification(player, message));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sendet eine Benachrichtigung an die Mitglieder einer Gruppe
|
||||
/// </summary>
|
||||
/// <param name="group">Die Gruppe, deren Mitglieder diese Benachrichtigung erhalten soll</param>
|
||||
/// <param name="message">Die Nachricht, die den Mitgliedern als Benachrichtigung zugestellt werden soll</param>
|
||||
public static void SendGroupNotification(Group group, string message)
|
||||
{
|
||||
NAPI.Pools.GetAllPlayers()
|
||||
.Where(player => player.GetUser().Group.Id == group.Id).ToList()
|
||||
.ForEach(player => SendNotification(player, $"!{{FF8080}}Gruppe:~n~~s~{message}"));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sendet eine Benachrichtigung an Personen, die einem bestimmten Beruf nachgehen
|
||||
/// </summary>
|
||||
/// <param name="job">Der Beruf, dessen Arbeiter diese Benachrichtigung erhalten soll</param>
|
||||
/// <param name="message">Die Nachricht, die den Mitgliedern als Benachrichtigung zugestellt werden soll</param>
|
||||
public static void SendJobNotification(JobBase job, string message) => job.GetUsersInJob().ForEach(player => SendNotification(player, message));
|
||||
|
||||
internal static void SendFactionNotificationByFactionIds(List<int> factionIds, string message)
|
||||
{
|
||||
using (var dbContext = new DatabaseContext())
|
||||
{
|
||||
SendFactionNotification(dbContext.Factions.Where(faction => factionIds.Contains(faction.Id)).ToList(), message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user