382 lines
14 KiB
C#
382 lines
14 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using GTANetworkAPI;
|
|
using Newtonsoft.Json;
|
|
using reallife_gamemode.Model;
|
|
using reallife_gamemode.Server.Entities;
|
|
using reallife_gamemode.Server.Events;
|
|
using reallife_gamemode.Server.Extensions;
|
|
using reallife_gamemode.Server.Services;
|
|
using reallife_gamemode.Server.Util;
|
|
|
|
/**
|
|
* @overview Life of German Reallife - Admin Commands (Admin.cs)
|
|
* @author VegaZ, hydrant
|
|
* @copyright (c) 2008 - 2018 Life of German
|
|
*/
|
|
|
|
namespace reallife_gamemode.Server.Commands
|
|
{
|
|
public class Admin : Script
|
|
{
|
|
[Command("o", "~m~Benutzung: ~s~/o [Nachricht]", GreedyArg = true)]
|
|
public void CmdAdminO(Client player, string message)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
string publicMessage = "~b~(( " + player.Name + ": " + message + " ))";
|
|
NAPI.Chat.SendChatMessageToAll(publicMessage);
|
|
}
|
|
|
|
[Command("veh", "~m~Benutzung: ~s~/veh [Fahrzeug] (Farbe 1) (Farbe 2)")]
|
|
public void CmdAdminVeh(Client player, VehicleHash hash, int color1 = 111, int color2 = 111)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
if (player.IsInVehicle) // Man darf keine Autos erstellen, wenn man selbst in einem sitzt (verhindert Bugs)
|
|
{
|
|
player.SendChatMessage("~r~[FEHLER]~s~ Du sitzt momentan schon in einem Fahrzeug.");
|
|
return;
|
|
}
|
|
|
|
Vehicle v = NAPI.Vehicle.CreateVehicle(hash, player.Position, player.Rotation.Z, color1, color2);
|
|
|
|
player.SetIntoVehicle(v.Handle, -1);
|
|
}
|
|
|
|
[Command("fixveh")]
|
|
public void CmdAdminFixveh(Client player)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
if (!player.IsInVehicle) // Man darf keine Autos erstellen, wenn man selbst in einem sitzt (verhindert Bugs)
|
|
{
|
|
player.SendChatMessage("~r~[FEHLER]~s~ Du sitzt momentan nicht in einem Fahrzeug.");
|
|
return;
|
|
}
|
|
|
|
player.Vehicle.Repair();
|
|
}
|
|
|
|
[Command("delveh")]
|
|
public void CmdAdminDelveh(Client player)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
if (!player.IsInVehicle) // Man darf keine Autos erstellen, wenn man selbst in einem sitzt (verhindert Bugs)
|
|
{
|
|
player.SendChatMessage("~r~[FEHLER]~s~ Du sitzt momentan nicht in einem Fahrzeug.");
|
|
return;
|
|
}
|
|
|
|
/* TODO: Checken, ob das Fahrzeug in einem System genutzt wird (Fraktions-Autos / Spieler-Auto)
|
|
* Wenn Ja: Abbrechen und mitteilen, dass man den System-spezifischen Befehl zu nutzen hat */
|
|
|
|
player.Vehicle.Delete();
|
|
}
|
|
|
|
[Command("goto", "~m~Benutzung: ~s~/goto [Name]")]
|
|
public void CmdAdminGoto(Client player, string name)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
Client target = ClientService.GetClientByName(name);
|
|
|
|
if (target == null)
|
|
{
|
|
ChatService.PlayerNotFound(player);
|
|
return;
|
|
}
|
|
|
|
player.Position = target.Position;
|
|
}
|
|
|
|
[Command("gotoxyz", "~m~Benutzung: ~s~/gotoxyz [X] [Y] [Z]")]
|
|
public void CmdAdminGotoxyz(Client player, float x, float y, float z)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
player.Position = new Vector3(x, y, z);
|
|
}
|
|
|
|
[Command("gethere", "~m~Benutzung: ~s~/goto [Name]")]
|
|
public void CmdAdminGethere(Client player, string name)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
Client target = ClientService.GetClientByName(name);
|
|
|
|
if (target == null)
|
|
{
|
|
ChatService.PlayerNotFound(player);
|
|
return;
|
|
}
|
|
|
|
target.Position = player.Position;
|
|
}
|
|
|
|
[Command("ipl", "~m~Benutzung: ~s~/ipl [Load / Remove] [Name]")]
|
|
public void CmdAdminIpl(Client player, string option, string name)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
option = option.ToLower();
|
|
|
|
if (option == "load")
|
|
{
|
|
NAPI.World.RequestIpl(name);
|
|
player.SendChatMessage("~g~Das IPL ~s~" + name + " ~g~wurde erfolgreich geladen");
|
|
}
|
|
else if (option == "remove")
|
|
{
|
|
NAPI.World.RemoveIpl(name);
|
|
player.SendChatMessage("~g~Das IPL ~s~" + name + " ~g~wurde erfolgreich entladen");
|
|
}
|
|
else
|
|
{
|
|
player.SendChatMessage("~m~Benutzung: ~s~/ipl [Load / Remove] [Name]");
|
|
}
|
|
}
|
|
|
|
[Command("giveweapon", "~m~Benutzung: ~s~/giveweapon [Spieler] [Waffe] [Munition]")]
|
|
public void CmdAdminGiveweapon(Client player, string name, string weapon, int ammo)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
if (ammo <= 0)
|
|
{
|
|
player.SendChatMessage("~r~[FEHLER]~s~ Es muss mindestens 1 Munition vergeben werden.");
|
|
return;
|
|
}
|
|
|
|
Client target = ClientService.GetClientByName(name);
|
|
if (target == null)
|
|
{
|
|
ChatService.PlayerNotFound(target);
|
|
return;
|
|
}
|
|
|
|
WeaponHash wHash = NAPI.Util.WeaponNameToModel(weapon);
|
|
|
|
if (wHash == default(WeaponHash))
|
|
{
|
|
player.SendChatMessage("~r~[FEHLER]~s~ Diese Waffe existiert nicht.");
|
|
return;
|
|
}
|
|
|
|
target.GiveWeapon(wHash, ammo);
|
|
}
|
|
|
|
[Command("factionlist", "~m~Benutzung: ~s~/factionlist")]
|
|
public void CmdAdminFactionlist(Client player)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
using(var dbContext = new DatabaseContext())
|
|
{
|
|
player.SendChatMessage("~m~__________ ~s~Fraktionen ~m~__________");
|
|
foreach(Entities.Faction f in dbContext.Factions)
|
|
{
|
|
player.SendChatMessage(f.Id.ToString().PadRight(3) + " | " + f.Name);
|
|
}
|
|
}
|
|
}
|
|
|
|
[Command("ainvite", "~m~Benutzung: ~s~/ainvite [Name] [Fraktion]")]
|
|
public void CmdAdminAinvite(Client player, string name, int faction)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
Client target = ClientService.GetClientByName(name);
|
|
if (target == null)
|
|
{
|
|
ChatService.PlayerNotFound(player);
|
|
return;
|
|
}
|
|
|
|
using (var dbContext = new DatabaseContext())
|
|
{
|
|
Entities.Faction f = dbContext.Factions.FirstOrDefault(x => x.Id == faction);
|
|
if (f == null && faction != 0)
|
|
{
|
|
player.SendChatMessage("~r~[FEHLER]~s~ Diese Fraktion existiert nicht (Liste: ~m~/factionlist).");
|
|
return;
|
|
}
|
|
|
|
User u = dbContext.Users.SingleOrDefault(x => x.Name == target.Name);
|
|
|
|
if (faction != 0)
|
|
{
|
|
u.FactionId = f.Id;
|
|
u.FactionRankId = dbContext.FactionRanks.
|
|
OrderBy(x => x.Order)
|
|
.FirstOrDefault(r => r.FactionId == f.Id)?.Id ?? null;
|
|
|
|
player.SendChatMessage("~b~[ADMIN]~s~ Du hast hast den Spieler ~y~" + target.Name + "~s~ administrativ in die Fraktion ~o~" + f.Name + "~s~ eingeladen.");
|
|
target.SendChatMessage("~b~[ADMIN]~s~ Du wurdest von ~y~" + player.Name + "~s~ administrativ in die Fraktion ~o~" + f.Name + "~s~ eingeladen.");
|
|
}
|
|
else
|
|
{
|
|
u.FactionId = null;
|
|
u.FactionRankId = null;
|
|
player.SendChatMessage("~b~[ADMIN]~s~ Du hast hast den Spieler ~y~" + target.Name + "~s~ administrativ aus seiner Fraktion geworfen.");
|
|
target.SendChatMessage("~b~[ADMIN]~s~ Du wurdest von ~y~" + player.Name + "~s~ administrativ aus deiner Fraktion geworfen.");
|
|
}
|
|
|
|
u.FactionLeader = false;
|
|
|
|
dbContext.SaveChanges();
|
|
}
|
|
}
|
|
|
|
[Command("makeleader", "~m~Benutzung: ~s~/makeleader [Name] [Fraktion]")]
|
|
public void CmdAdminMakeleader(Client player, string name, int faction)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
Client target = ClientService.GetClientByName(name);
|
|
if (target == null)
|
|
{
|
|
ChatService.PlayerNotFound(player);
|
|
return;
|
|
}
|
|
|
|
using (var dbContext = new DatabaseContext())
|
|
{
|
|
Entities.Faction f = dbContext.Factions.FirstOrDefault(x => x.Id == faction);
|
|
if (f == null)
|
|
{
|
|
player.SendChatMessage("~r~[FEHLER]~s~ Diese Fraktion existiert nicht (Liste: ~m~/factionlist).");
|
|
return;
|
|
}
|
|
|
|
User u = dbContext.Users.SingleOrDefault(x => x.Name == target.Name);
|
|
|
|
u.FactionId = f.Id;
|
|
u.FactionRankId = dbContext.FactionRanks.
|
|
OrderByDescending(x => x.Order)
|
|
.FirstOrDefault(r => r.FactionId == f.Id)?.Id ?? null;
|
|
u.FactionLeader = true;
|
|
|
|
player.SendChatMessage("~b~[ADMIN]~s~ Du hast hast den Spieler ~y~" + target.Name + "~s~ zum Leader der Fraktion Fraktion ~o~" + f.Name + "~s~ ernannt.");
|
|
target.SendChatMessage("~b~[ADMIN]~s~ Du wurdest von ~y~" + player.Name + "~s~ zum Leader der Fraktion ~o~" + f.Name + "~s~ ernannt.");
|
|
|
|
dbContext.SaveChanges();
|
|
}
|
|
}
|
|
|
|
[Command("save", "~m~Benutzung: ~s~/save [Typ = ~g~Blip, ~r~Marker, Ped, Pickup, TextLabel, ~g~Vehicle")]
|
|
public void CmdAdminSave(Client player, string typ)
|
|
{
|
|
switch (typ)
|
|
{
|
|
case "Blip":
|
|
player.TriggerEvent("saveBlip");
|
|
break;
|
|
case "Ped":
|
|
|
|
break;
|
|
case "Vehicle":
|
|
if (player.IsInVehicle)
|
|
{
|
|
Vehicle vehicle = player.Vehicle;
|
|
SaveData.SaveVehicleData((VehicleHash) vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate,
|
|
Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), vehicle.Locked, vehicle.EngineStatus, Convert.ToByte(vehicle.Dimension));
|
|
}
|
|
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
|
|
break;
|
|
}
|
|
}
|
|
|
|
[Command("managefactionranks", "~m~Benutzung: ~s~/managefactionranks [Fraktions-ID]")]
|
|
public void CmdFactionManageFactionRanks(Client player, int factionID)
|
|
{
|
|
if(!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
using (var context = new DatabaseContext())
|
|
{
|
|
Entities.Faction f = context.Factions.FirstOrDefault(id => id.Id == factionID);
|
|
if (f == null)
|
|
{
|
|
player.SendChatMessage("~r~[FEHLER]~s~ Diese Fraktion existiert nicht (Liste: ~m~/factionlist).");
|
|
return;
|
|
}
|
|
|
|
List<FactionRank> factionRanks = context.FactionRanks.ToList().FindAll(r => r.FactionId == f.Id).OrderByDescending(o => o.Order).ToList();
|
|
List<Rank> rankList = new List<Rank>();
|
|
|
|
factionRanks.ForEach(r =>
|
|
{
|
|
rankList.Add(new Rank
|
|
{
|
|
Id = r.Id,
|
|
Name = r.RankName
|
|
});
|
|
});
|
|
|
|
FactionRankHelper helper = new FactionRankHelper
|
|
{
|
|
FactionId = f.Id,
|
|
Ranks = rankList
|
|
};
|
|
string json = JsonConvert.SerializeObject(helper, Formatting.None);
|
|
Console.WriteLine(json);
|
|
player.TriggerEvent("manageFactionRanks", json);
|
|
}
|
|
}
|
|
}
|
|
}
|