284 lines
11 KiB
C#
284 lines
11 KiB
C#
using GTANetworkAPI;
|
|
using ReallifeGamemode.Server.Entities;
|
|
using ReallifeGamemode.Server.Extensions;
|
|
using ReallifeGamemode.Server.Factions.Medic;
|
|
using ReallifeGamemode.Server.Models;
|
|
using ReallifeGamemode.Server.Services;
|
|
using System.Linq;
|
|
using System.Text.RegularExpressions;
|
|
|
|
/**
|
|
* @overview Life of German Reallife - Faction Commands (Faction.cs)
|
|
* @author VegaZ, hydrant
|
|
* @copyright (c) 2008 - 2018 Life of German
|
|
*/
|
|
|
|
namespace ReallifeGamemode.Server.Commands
|
|
{
|
|
class FactionCommands : Script
|
|
{
|
|
#region Chat Commands
|
|
|
|
[Command("f", "~m~Benutzung: ~s~/f [Nachricht]", GreedyArg = true)]
|
|
public void CmdFactionF(Client player, string message)
|
|
{
|
|
Faction f = player.GetUser()?.Faction;
|
|
if (f == null || f.StateOwned)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
message = Regex.Replace(message, "(~[a-zA-Z]~{1})|(!{(.*)})", "");
|
|
|
|
string broadcastMessage = "!{02FCFF}** " + player.GetUser().GetFactionRank().RankName + " " + player.Name + ": " + message + " )) **";
|
|
ChatService.BroadcastFaction(broadcastMessage, f);
|
|
}
|
|
|
|
[Command("r", "~m~Benutzung: ~s~/r [Nachricht]", GreedyArg = true)]
|
|
public void CmdFactionR(Client player, string message)
|
|
{
|
|
Entities.Faction f = player.GetUser()?.Faction;
|
|
if (f == null || !f.StateOwned)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
message = Regex.Replace(message, "(~[a-zA-Z]~{1})|(!{(.*)})", "");
|
|
|
|
string broadcastMessage = "!{33AA33}** " + player.GetUser().GetFactionRank().RankName + " " + player.Name + ": " + message + ", over **";
|
|
ChatService.BroadcastFaction(broadcastMessage, f);
|
|
}
|
|
|
|
[Command("d", "~m~Benutzung: ~s~/d [Nachricht]", GreedyArg = true)]
|
|
public void CmdFactionD(Client player, string message)
|
|
{
|
|
Faction f = player.GetUser()?.Faction;
|
|
if (f == null || !f.StateOwned)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
message = Regex.Replace(message, "(~[a-zA-Z]~{1})|(!{(.*)})", "");
|
|
|
|
string broadcastMessage = "!{CC3333}** " + player.GetUser().GetFactionRank().RankName + " " + player.Name + ": " + message + ", over **";
|
|
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)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
Client target = ClientService.GetClientByNameOrId(name);
|
|
if (target == null || !target.IsLoggedIn())
|
|
{
|
|
ChatService.PlayerNotFound(player);
|
|
return;
|
|
}
|
|
|
|
if (target.GetUser()?.FactionId != null)
|
|
{
|
|
ChatService.Error(player, "Dieser Spieler ist schon in einer Fraktion");
|
|
return;
|
|
}
|
|
|
|
target.SetData("accept_invite", player.Handle);
|
|
|
|
player.SendChatMessage("!{02FCFF}Du hast dem Spieler " + target.Name + " eine Einladung in deine Fraktion gesendet.");
|
|
target.SendChatMessage("!{02FCFF}Du hast von " + player.Name + " eine Einladung in die Fraktion \"" + player.GetUser().Faction.Name + "\" erhalten.");
|
|
target.SendChatMessage("!{02FCFF}Benutze '/accept invite', um die Einladung anzunehmen");
|
|
|
|
return;
|
|
}
|
|
|
|
[Command("giverank", "~m~Benutzung: ~s~/giverank [Name] [Rang]", GreedyArg = true)]
|
|
public void CmdFactionGiverank(Client player, string name, string rank)
|
|
{
|
|
if (player.GetUser()?.FactionId == null || player.GetUser().FactionLeader == false)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
Client target = ClientService.GetClientByNameOrId(name);
|
|
if (target == null || !target.IsLoggedIn())
|
|
{
|
|
ChatService.PlayerNotFound(player);
|
|
return;
|
|
}
|
|
|
|
if (target.GetUser()?.FactionId != player.GetUser()?.FactionId)
|
|
{
|
|
ChatService.Error(player, "Dieser Spieler ist nicht in deiner Fraktion");
|
|
return;
|
|
}
|
|
|
|
using (var dbContext = new DatabaseContext())
|
|
{
|
|
FactionRank fr = dbContext.FactionRanks.FirstOrDefault(r => r.RankName == rank && r.FactionId == player.GetUser(dbContext).FactionId);
|
|
if (fr == null)
|
|
{
|
|
ChatService.Error(player, "Dieser Rang existiert nicht");
|
|
return;
|
|
}
|
|
|
|
target.GetUser(dbContext).FactionRankId = fr.Id;
|
|
|
|
player.SendChatMessage("!{02FCFF}Du hast " + target.Name + " den Rang '" + fr.RankName + "' gegeben.");
|
|
target.SendChatMessage("!{02FCFF}Du hast von " + player.Name + " den Rang '" + fr.RankName + "' erhalten.");
|
|
|
|
dbContext.SaveChanges();
|
|
}
|
|
}
|
|
|
|
[Command("uninvite", "~m~Benutzung: ~s~/uninvite [Name]")]
|
|
public void CmdFactionUninvite(Client player, string name)
|
|
{
|
|
if (player.GetUser()?.FactionId == null || player.GetUser().FactionLeader == false)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
Client target = ClientService.GetClientByNameOrId(name);
|
|
if (target == null || !target.IsLoggedIn())
|
|
{
|
|
ChatService.PlayerNotFound(player);
|
|
return;
|
|
}
|
|
|
|
if (target.GetUser()?.FactionId != player.GetUser()?.FactionId)
|
|
{
|
|
ChatService.Error(player, "Dieser Spieler ist nicht in deiner Fraktion");
|
|
return;
|
|
}
|
|
|
|
if (player.Handle == target.Handle)
|
|
{
|
|
ChatService.Error(player, "Du kannst dich nicht selber uninviten");
|
|
return;
|
|
}
|
|
|
|
if (target.GetUser()?.FactionLeader ?? false)
|
|
{
|
|
ChatService.Error(player, "Du kannst keinen Leader uninviten");
|
|
return;
|
|
}
|
|
|
|
using (var dbContext = new DatabaseContext())
|
|
{
|
|
|
|
target.GetUser(dbContext).FactionRankId = null;
|
|
target.GetUser(dbContext).FactionId = null;
|
|
|
|
player.SendChatMessage("!{02FCFF}Du hast " + target.Name + " aus der Fraktion geworfen.");
|
|
target.SendChatMessage("!{02FCFF}Du wurdest von " + player.Name + " aus der Fraktion geworfen.");
|
|
|
|
dbContext.SaveChanges();
|
|
}
|
|
}
|
|
|
|
[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)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
message = Regex.Replace(message, "(~[a-zA-Z]~{1})|(!{(.*)})", "");
|
|
|
|
string broadcastMsg = "~y~[" + player.GetUser().Faction.Name + "] " + player.Name + ": " + message;
|
|
|
|
NAPI.Pools.GetAllPlayers().ForEach(p =>
|
|
{
|
|
if (p.GetUser()?.FactionLeader ?? false) p.SendChatMessage(broadcastMsg);
|
|
});
|
|
}
|
|
#endregion
|
|
#region Sanitäter Commands
|
|
|
|
[Command("revive", "~m~Benutzung: ~s~/revive")]
|
|
public void CmdFactionMedicRevive(Client player)
|
|
{
|
|
if (player.GetUser()?.FactionId == null || player.GetUser().FactionId != 2)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
if (player.IsInVehicle)
|
|
{
|
|
ChatService.Error(player, "Du kannst in einem Auto nicht wiederbeleben");
|
|
return;
|
|
}
|
|
|
|
var nearPlayers = NAPI.Player.GetPlayersInRadiusOfPlayer(2, player);
|
|
var deadPlayer = nearPlayers.Where(i => i.GetData("isDead") == true).FirstOrDefault();
|
|
if (player == deadPlayer)
|
|
{
|
|
ChatService.Error(player, "Du kannst dich nicht selbst wiederbeleben");
|
|
return;
|
|
}
|
|
player.PlayAnimation("amb@medic@standing@kneel@enter", "enter", 0);
|
|
|
|
deadPlayer.TriggerEvent("onPlayerRevived");
|
|
deadPlayer.SendNotification("Du wurdest von ~r~" + player.Name + "~s~ wiederbelebt.");
|
|
deadPlayer.SetData("isDead", false);
|
|
NAPI.Player.SpawnPlayer(deadPlayer, deadPlayer.Position);
|
|
deadPlayer.Health = 50;
|
|
|
|
MedicTask task = Medic.ReviveTasks.FirstOrDefault(t => t.Victim == deadPlayer.Name);
|
|
Medic.RemoveTaskFromList(task);
|
|
}
|
|
|
|
[Command("heal", "~m~Benutzung: ~s~/heal [Spieler]")] //TODO Eventuell noch mit Geldbetrag wie bei SA:MP
|
|
public void CmdFactionMedicHealive(Client player, string receiver)
|
|
{
|
|
if (player.GetUser()?.FactionId == null || player.GetUser().FactionId != 2)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
if (player.IsInVehicle)
|
|
{
|
|
ChatService.Error(player, "Du kannst in einem Auto nicht heilen");
|
|
return;
|
|
}
|
|
Client target = ClientService.GetClientByNameOrId(receiver);
|
|
target.Health = 100;
|
|
target.SendNotification("Du wurdest von ~g~" + player.Name + " ~s~geheilt.", false);
|
|
player.SendNotification("Du hast~g~" + target.Name + " ~s~geheilt.", false);
|
|
}
|
|
#endregion
|
|
#region Global Fraktions Commands
|
|
[Command("duty", "~m~Benutzung: ~s~/duty")]
|
|
public void CmdFactionDuty(Client player)
|
|
{
|
|
if (player.GetData("duty") == false)
|
|
{
|
|
player.SetData("duty", true);
|
|
player.SendNotification("~g~Du bist jetzt im Dienst!", false);
|
|
}
|
|
else
|
|
{
|
|
player.SetData("duty", false);
|
|
player.SendNotification("~r~Schönen Feierabend!", false);
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
}
|