using GTANetworkAPI;
using ReallifeGamemode.Database;
using ReallifeGamemode.Database.Entities;
using ReallifeGamemode.Database.Models;
using ReallifeGamemode.Server.Extensions;
using ReallifeGamemode.Server.Job;
using ReallifeGamemode.Server.Util;
using System;
using System.Collections.Generic;
using System.Linq;
/**
* @overview Life of German Reallife - Chat Service (ChatService.cs)
* @author hydrant, xSprite
* @copyright (c) 2008 - 2018 Life of German
*/
namespace ReallifeGamemode.Server.Services
{
class ChatService
{
public static void NotAuthorized(Player player)
{
ChatService.ErrorMessage(player, "Du kannst diesen Befehl nicht ausführen");
}
public static void PlayerNotFound(Player player)
{
ChatService.ErrorMessage(player, "Der Spieler wurde nicht gefunden");
}
public static void ErrorMessage(Player player, string message)
{
ChatService.SendMessage(player, $"~r~[FEHLER]~s~ {message}~s~.");
}
public static void SendMessage(Player player, string message)
{
if (player == null) return;
player.SendChatMessage(message);
}
public static void Broadcast(string message) => NAPI.Pools.GetAllPlayers().Where(c => c.IsLoggedIn()).ToList().ForEach(c => SendMessage(c, message));
///
/// Sendet eine Nachricht an eine Liste von Fraktionen
///
/// Die Nachricht, die gesendet werden soll
/// Die Liste an Fraktionen, die diese Nachricht bekommen sollen
public static void BroadcastFaction(string message, List factions)
{
foreach (Player c in NAPI.Pools.GetAllPlayers())
{
Faction f = c.GetUser()?.Faction;
if (f != null)
{
if (factions.Find(fT => fT.Id == f.Id) != null)
{
ChatService.SendMessage(c, message);
}
}
}
}
///
/// Sendet eine Nachricht an eine Fraktion
///
/// Die Nachricht, die gesendet werden soll
/// Die Fraktion, die diese Nachricht bekommen soll
public static void BroadcastFaction(string message, Faction f)
{
BroadcastFaction(message, new List() { f });
}
///
/// Sendet eine Nachricht an alle Spieler mit einem bestimmten Admin Level
///
/// Die Nachricht, die gesendet werden soll
/// Das mindest Admin Level, das für das Erhalten dieser Nachricht benötigt wird
public static void HQMessage(string message)
{
BroadcastFaction("!{#8181E9}HQ: " + message, new List() { 1, 3 });
}
public static void BroadcastAdmin(string message, AdminLevel minLevel)
{
NAPI.Pools.GetAllPlayers().ForEach(p =>
{
if (p.GetUser()?.IsAdmin(minLevel) ?? false)
{
ChatService.SendMessage(p, message);
}
});
}
public static void BroadcastDutyAdmin(string message)
{
foreach (Player admin in GlobalHelper.DutyAdmins)
{
ChatService.SendMessage(admin, message);
}
}
public static void BroadcastGroup(string message, Group group)
{
message = $"!{{FF8080}}** Gruppe: {message}";
NAPI.Pools.GetAllPlayers().ForEach(p =>
{
Group pGroup = p.GetUser()?.Group;
if (pGroup?.Id == group.Id)
{
ChatService.SendMessage(p, message);
}
});
}
public static void BroadcastJob(string message, JobBase job)
{
job.GetUsersInJob().ForEach(c => ChatService.SendMessage(c, message));
}
internal static void BroadcastFaction(string message, List factionIds)
{
using (var dbContext = new DatabaseContext())
{
BroadcastFaction(message, dbContext.Factions.Where(f => factionIds.Contains(f.Id)).ToList());
}
}
}
}