1309 lines
49 KiB
C#
1309 lines
49 KiB
C#
using System;
|
|
using System.ComponentModel.DataAnnotations;
|
|
using System.ComponentModel.DataAnnotations.Schema;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Text;
|
|
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;
|
|
using reallife_gamemode.Server.Managers;
|
|
|
|
/**
|
|
* @overview Life of German Reallife - Admin Commands (Admin.cs)
|
|
* @author VegaZ, hydrant, xSprite, balbo
|
|
* @copyright (c) 2008 - 2018 Life of German
|
|
*/
|
|
|
|
namespace reallife_gamemode.Server.Commands
|
|
{
|
|
public class Admin : Script
|
|
{
|
|
[Command("vmod", "~m~Benutzung: ~s~/vmod [Slot] [Mod ID]")]
|
|
public void CmdAdminVmod(Client player, int slot, int mod)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
if (!player.IsInVehicle)
|
|
{
|
|
player.SendChatMessage("~r~[FEHLER]~s~ Du sitzt momentan nicht in einem Fahrzeug.");
|
|
return;
|
|
}
|
|
|
|
if (mod == -1) player.Vehicle.RemoveMod(slot);
|
|
else player.Vehicle.SetMod(slot, mod);
|
|
}
|
|
|
|
[Command("clothes", "~m~Benutzung: ~s~/clothes [Slot] [Component ID] (Textur)")]
|
|
public void CmdAdminClothes(Client player, int slot, int component, int texture = 0)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
player.SetClothes(slot, component, texture);
|
|
}
|
|
|
|
[Command("props", "~m~Benutzung: ~s~/props [Slot] [Component ID] (Textur)")]
|
|
public void CmdAdminProps(Client player, int slot, int component, int texture = 0)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
player.SetAccessories(slot, component, texture);
|
|
}
|
|
|
|
[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, string 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;
|
|
}
|
|
|
|
hash = hash.ToUpper();
|
|
|
|
if (!uint.TryParse(hash, out uint vehHash))
|
|
{
|
|
if (!Enum.TryParse(hash, true, out VehicleHash realHash))
|
|
{
|
|
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Fahrzeug existiert nicht.");
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
vehHash = (uint)realHash;
|
|
}
|
|
}
|
|
|
|
Vehicle v = NAPI.Vehicle.CreateVehicle(vehHash, player.Position, player.Rotation.Z, color1, color2);
|
|
|
|
player.SetIntoVehicle(v.Handle, -1);
|
|
}
|
|
|
|
[Command("fv")]
|
|
public void CmdAdminFixveh(Client player)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
if (!player.IsInVehicle)
|
|
{
|
|
player.SendChatMessage("~r~[FEHLER]~s~ Du sitzt momentan nicht in einem Fahrzeug.");
|
|
return;
|
|
}
|
|
|
|
player.Vehicle.Repair();
|
|
}
|
|
|
|
[Command("vdestroy")]
|
|
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("to", "~m~Benutzung: ~s~/to [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 || !target.IsLoggedIn())
|
|
{
|
|
ChatService.PlayerNotFound(player);
|
|
return;
|
|
}
|
|
|
|
if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = target.Position;
|
|
else player.Position = target.Position;
|
|
}
|
|
|
|
[Command("position")]
|
|
public void CmdAdminShowPos(Client player)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
player.SendChatMessage("Position: X Y Z: " + player.Position);
|
|
}
|
|
|
|
[Command("goto", "~m~Benutzung: ~s~/goto [Ort]")]
|
|
public void CmdAdminGotoPoint(Client player, string location)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
using (var dbContext = new DatabaseContext())
|
|
{
|
|
Entities.GotoPoint p = dbContext.GotoPoints.FirstOrDefault(x => x.Description == location);
|
|
|
|
if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = new Vector3(p.X, p.Y, p.Z);
|
|
else player.Position = new Vector3(p.X, p.Y, p.Z);
|
|
|
|
}
|
|
}
|
|
[Command("gotohelp", "~m~Benutzung: ~s~/gotohelp")]
|
|
public void CmdAdminGotolist(Client player)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
using (var dbContext = new DatabaseContext())
|
|
{
|
|
player.SendChatMessage("~m~__________ ~s~Goto ~m~__________");
|
|
foreach (Entities.GotoPoint f in dbContext.GotoPoints)
|
|
{
|
|
player.SendChatMessage("/goto "+f.Description+"");
|
|
}
|
|
}
|
|
}
|
|
|
|
[Command("gotox", "~m~Benutzung: ~s~/gotox [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;
|
|
}
|
|
|
|
if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = new Vector3(x, y, z);
|
|
else player.Position = new Vector3(x, y, z);
|
|
}
|
|
|
|
[Command("gh", "~m~Benutzung: ~s~/gh [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 || !target.IsLoggedIn())
|
|
{
|
|
ChatService.PlayerNotFound(player);
|
|
return;
|
|
}
|
|
|
|
if (target.IsInVehicle && target.VehicleSeat == -1) target.Vehicle.Position = player.Position;
|
|
else target.Position = player.Position;
|
|
target.SendChatMessage("Du wurdest von " + player.Name + " teleportiert.");
|
|
}
|
|
|
|
[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 || !target.IsLoggedIn())
|
|
{
|
|
ChatService.PlayerNotFound(player);
|
|
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);
|
|
target.SendChatMessage("~b~Du hast von " + player.Name + " eine/n " + wHash + " mit einer Munition von " + ammo + " erhalten.");
|
|
player.SendChatMessage("~b~Du hast " + target.Name + " eine/n " + wHash + " mit einer Munition von " + ammo + " gegeben.");
|
|
}
|
|
|
|
[Command("sethp", "~m~Benutzung: ~s~/sethp [Spieler] (Leben)")]
|
|
public void CmdAdminSetHp(Client player, string name, int hp = 100)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
Client target = ClientService.GetClientByName(name);
|
|
if (target == null || !target.IsLoggedIn())
|
|
{
|
|
ChatService.PlayerNotFound(player);
|
|
return;
|
|
}
|
|
|
|
target.Health = hp;
|
|
target.SendChatMessage("~b~Dein Leben wurde von " + player.Name + " auf " + hp + " gesetzt.");
|
|
player.SendChatMessage("~b~Du hast das Leben von " + target.Name + " auf " + hp + " gesetzt.");
|
|
}
|
|
|
|
[Command("setarmor", "~m~Benutzung: ~s~/setarmor [Spieler] (Armor)")]
|
|
public void CmdAdminSetArmor(Client player, string name, int armor = 100)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
Client target = ClientService.GetClientByName(name);
|
|
if (target == null || !target.IsLoggedIn())
|
|
{
|
|
ChatService.PlayerNotFound(player);
|
|
return;
|
|
}
|
|
|
|
target.Armor = armor;
|
|
target.SendChatMessage("~b~Deine Rüstung wurde von " + player.Name + " auf " + armor + " gesetzt.");
|
|
player.SendChatMessage("~b~Du hast die Rüstung von " + target.Name + " auf " + armor + " gesetzt.");
|
|
}
|
|
|
|
[Command("setskin", "~m~Benutzung: ~s~/setskin [Spieler] [Skin]")]
|
|
public void CmdAdminSetSkin(Client player, string name, string Skin)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
Client target = ClientService.GetClientByName(name);
|
|
if (target == null || !target.IsLoggedIn())
|
|
{
|
|
ChatService.PlayerNotFound(player);
|
|
return;
|
|
}
|
|
|
|
var skin = NAPI.Util.PedNameToModel(Skin);
|
|
target.SendChatMessage("~b~Dein Skin wurde von " + player.Name + " zu " + skin + " gesetzt.");
|
|
player.SendChatMessage("~b~Du hast den Skin von " + target.Name + " zu " + skin + " gesetzt.");
|
|
target.SetSkin(NAPI.Util.PedNameToModel(Skin));
|
|
}
|
|
|
|
[Command("vcolor", "~m~Benutzung: ~s~/vcolor [Farb-ID1] [Farb-ID2]")]
|
|
public void CmdAdminColor(Client player, int color1, int color2)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
if (!player.IsInVehicle)
|
|
{
|
|
player.SendChatMessage("~r~[FEHLER]~s~ Du sitzt momentan in keinem Fahrzeug!");
|
|
return;
|
|
}
|
|
|
|
player.Vehicle.PrimaryColor = color1;
|
|
player.Vehicle.SecondaryColor = color2;
|
|
player.SendChatMessage("Farb-ID1 " + color1 + ", Farb-ID2 " + color2 + "");
|
|
}
|
|
|
|
[Command("aw", "~m~Benutzung: ~s~/aw [Spieler] [Nachricht]", GreedyArg = true)]
|
|
public void CmdAdminMsg(Client player, string name, string msg)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
Client target = ClientService.GetClientByName(name);
|
|
if (target == null || !target.IsLoggedIn())
|
|
{
|
|
ChatService.PlayerNotFound(player);
|
|
return;
|
|
}
|
|
|
|
if (target == player)
|
|
{
|
|
ChatService.ErrorMsg(player);
|
|
return;
|
|
}
|
|
|
|
target.SendChatMessage("~y~PM von " + player.Name + ": " + msg + " ");
|
|
player.SendChatMessage("~y~PM an " + target.Name + ": " + msg + " ");
|
|
}
|
|
|
|
[Command("takeweapon", "~m~Benutzung: ~s~/takeweapon [Spieler]")]
|
|
public void CmdAdminTakeWeapon(Client player, string name)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
Client target = ClientService.GetClientByName(name);
|
|
if (target == null || !target.IsLoggedIn())
|
|
{
|
|
ChatService.PlayerNotFound(player);
|
|
return;
|
|
}
|
|
target.RemoveAllWeapons();
|
|
target.SendChatMessage("~b~Deine Waffen wurden dir von " + player.Name + "(Admin) abgenommen");
|
|
player.SendChatMessage("~b~Dem Spieler " + target.Name + " wurden erfolgreich alle Waffen abgenommen ");
|
|
}
|
|
|
|
[Command("rsethp", "~m~Benutzung: ~s~/rsethp [Radius] (Leben)")]
|
|
public void CmdAdminRangeSetHP(Client player, float radius, int hp = 100)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
var peopleInRange = NAPI.Player.GetPlayersInRadiusOfPlayer(radius, player);
|
|
|
|
foreach (var managedClient in peopleInRange)
|
|
{
|
|
if (!managedClient.IsLoggedIn()) return;
|
|
managedClient.Health = hp;
|
|
managedClient.SendChatMessage("~b~Admin " + player.Name + " hat im Radius von " + radius + " die HP auf " + hp + " gesetzt.");
|
|
}
|
|
player.SendChatMessage("~b~Das Leben von " + peopleInRange.Count + " Spielern wurde auf " + hp + " gesetzt.");
|
|
}
|
|
|
|
[Command("rsetarmor", "~m~Benutzung: ~s~/rsetarmor [Radius] (Armor)")]
|
|
public void CmdAdminRangeSetArmor(Client player, float radius, int Armor = 100)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
var peopleInRange = NAPI.Player.GetPlayersInRadiusOfPlayer(radius, player);
|
|
|
|
foreach (var managedClient in peopleInRange)
|
|
{
|
|
if (!managedClient.IsLoggedIn()) return;
|
|
managedClient.Armor = Armor;
|
|
managedClient.SendChatMessage("~b~Admin " + player.Name + " hat im Radius von " + radius + " die Rüstung auf " + Armor + " gesetzt.");
|
|
}
|
|
player.SendChatMessage("~b~Die Rüstung von " + peopleInRange.Count + " Spielern wurde auf " + Armor + " gesetzt.");
|
|
}
|
|
|
|
[Command("time", "~m~Benutzung: ~s~/time [Stunde] (Minuten) (Sekunden)")]
|
|
public void CmdAdminSetTime(Client player, int hour, int min = 0, int sec = 0)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
string broadcastMsg = $"Serverzeit wurde auf {hour:D2}:{min:D2}:{sec:D2} gesetzt!";
|
|
|
|
NAPI.Chat.SendChatMessageToAll(broadcastMsg);
|
|
NAPI.World.SetTime(hour, min, sec);
|
|
return;
|
|
|
|
}
|
|
|
|
[Command("val")]
|
|
public void Val(Client player)
|
|
{
|
|
// TODO: Remove on release
|
|
NAPI.Chat.SendChatMessageToAll("Value of " + player.Name + ": " + player.Handle.Value);
|
|
}
|
|
|
|
[Command("rgiveweapon", "~m~Benutzung: ~s~/rgiveweapon [Radius] [Waffe] [Munition]")]
|
|
public void CmdAdminRangeGiveWeapon(Client player, float radius, string weapon, int munition)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
WeaponHash wHash = NAPI.Util.WeaponNameToModel(weapon);
|
|
|
|
if (wHash == default(WeaponHash))
|
|
{
|
|
player.SendChatMessage("~r~[FEHLER]~s~ Diese Waffe existiert nicht.");
|
|
return;
|
|
}
|
|
|
|
var peopleInRange = NAPI.Player.GetPlayersInRadiusOfPlayer(radius, player);
|
|
|
|
foreach (var managedClient in peopleInRange)
|
|
{
|
|
if (!managedClient.IsLoggedIn()) return;
|
|
managedClient.GiveWeapon(wHash, munition);
|
|
managedClient.SendChatMessage("~b~Admin " + player.Name + " hat im Radius von " + radius + " eine/n " + weapon + " mit " + munition + " Munition vergeben.");
|
|
}
|
|
player.SendChatMessage("~b~Du hast " + peopleInRange.Count + " Spielern eine " + weapon + " mit " + munition + " Munition gegeben");
|
|
}
|
|
|
|
[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 || !target.IsLoggedIn())
|
|
{
|
|
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;
|
|
}
|
|
|
|
Entities.User u = target.GetUser(dbContext);
|
|
|
|
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 || !target.IsLoggedIn())
|
|
{
|
|
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;
|
|
}
|
|
|
|
Entities.User u = target.GetUser(dbContext);
|
|
|
|
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("ban", "~m~Benutzung: ~s~/ban [User] [Zeit in Minuten(0 für Permanent)] [Grund] ", GreedyArg = true)]
|
|
public void CmdAdminBan(Client admin, string user, int mins, string reason)
|
|
{
|
|
if (!admin.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(admin);
|
|
return;
|
|
}
|
|
|
|
Client target = ClientService.GetClientByName(user);
|
|
|
|
if(target == null || !target.IsLoggedIn())
|
|
{
|
|
ChatService.PlayerNotFound(admin);
|
|
return;
|
|
}
|
|
|
|
target.GetUser().BanPlayer(admin, reason, mins);
|
|
}
|
|
|
|
[Command("save", "~m~Benutzung: ~s~/save [Typ = ~g~Blip, Goto (X), ~r~Marker, Ped, Pickup, TextLabel, ~g~Vehicle, FVehicle, SVehicle] (Beschreibung) = (X)")]
|
|
public void CmdAdminSave(Client player, string typ, string description = null)
|
|
{
|
|
switch (typ)
|
|
{
|
|
case "Blip":
|
|
player.TriggerEvent("saveBlip");
|
|
break;
|
|
case "Goto":
|
|
if(description == null)
|
|
{
|
|
player.SendChatMessage("Für Goto musst du einen dritten Parameter angeben. Beispiel: Ort des Goto-Punktes.");
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
using (var dbContext = new DatabaseContext())
|
|
{
|
|
Entities.GotoPoint p = dbContext.GotoPoints.FirstOrDefault(x => x.Description == description);
|
|
if(p == null)
|
|
{
|
|
SaveManager.SaveGotoPoint(player, description);
|
|
}
|
|
else
|
|
{
|
|
player.SendChatMessage("Einen Goto-Punkt mit dieser Bezeichnung gibt es schon!");
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
case "Vehicle":
|
|
if (player.IsInVehicle)
|
|
{
|
|
Vehicle vehicle = player.Vehicle;
|
|
SaveManager.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;
|
|
case "FVehicle":
|
|
if (player.IsInVehicle)
|
|
{
|
|
if(player.GetUser().FactionId == null)
|
|
{
|
|
player.SendChatMessage("~m~Du bist in keiner Fraktion! Invite dich erst mit ~y~/ainvite");
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
Vehicle vehicle = player.Vehicle;
|
|
SaveManager.SaveFactionVehicleData((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), player.GetUser().FactionId);
|
|
vehicle.SetData("factionId", player.GetUser().FactionId);
|
|
LoadManager.FactionVehicleList.Add(vehicle);
|
|
}
|
|
}
|
|
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
|
|
break;
|
|
case "SVehicle":
|
|
if (player.IsInVehicle)
|
|
{
|
|
Vehicle vehicle = player.Vehicle;
|
|
SaveManager.SaveShopVehicleData((VehicleHash)vehicle.Model, vehicle.DisplayName, vehicle.Position, vehicle.Heading, vehicle.NumberPlate,
|
|
Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), Convert.ToByte(vehicle.Dimension), player.GetUser().FactionId);
|
|
LoadManager.ShopVehicleList.Add(vehicle);
|
|
}
|
|
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
[Command("unban", "~m~Benutzung: ~s~/unban [Name] ", GreedyArg = true)]
|
|
public void CmdAdminUnban(Client admin, string userName)
|
|
{
|
|
if (!admin.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(admin);
|
|
return;
|
|
}
|
|
|
|
Entities.User user;
|
|
|
|
using (var dbContext = new DatabaseContext())
|
|
{
|
|
user = dbContext.Users.FirstOrDefault(u => u.Name == userName);
|
|
if(user == null)
|
|
{
|
|
admin.SendChatMessage("~r~[FEHLER]~s~ Dieser Spieler existiert nicht.");
|
|
return;
|
|
}
|
|
|
|
if(user.BanId == null)
|
|
{
|
|
admin.SendChatMessage("~r~[FEHLER]~s~ Dieser Spieler ist nicht gebannt.");
|
|
return;
|
|
}
|
|
|
|
Ban ban = dbContext.Bans.FirstOrDefault(b => b.Id == user.BanId);
|
|
if(ban == null)
|
|
{
|
|
admin.SendChatMessage("~r~[FEHLER]~s~ Dieser Spieler ist nicht gebannt.");
|
|
return;
|
|
}
|
|
|
|
if(ban.Applied == ban.UntilDateTime)
|
|
{
|
|
user.UnbanPlayer(admin);
|
|
}
|
|
else
|
|
{
|
|
int currentTimestamp = (int)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
|
|
if(ban.UntilDateTime < currentTimestamp)
|
|
{
|
|
admin.SendChatMessage("~r~[FEHLER]~s~ Dieser Spieler ist nicht gebannt.");
|
|
return;
|
|
}
|
|
}
|
|
user.UnbanPlayer(admin);
|
|
}
|
|
|
|
string message = "~y~INFO: ~s~Der Spieler ~y~" + user.Name + " ~s~wurde von ~y~" + admin.Name + " ~s~entbannt.";
|
|
ChatService.BroadcastAdmin(message, AdminLevel.ADMIN);
|
|
}
|
|
|
|
[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);
|
|
player.TriggerEvent("manageFactionRanks", json);
|
|
}
|
|
}
|
|
|
|
//TEST COMMAND
|
|
[Command("own")]
|
|
public void CmdAdminOwn(Client player)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
if (player.IsInVehicle)
|
|
{
|
|
Vehicle playerVehicle = player.Vehicle;
|
|
LoadManager.UserVehicleList.Add(playerVehicle);
|
|
using (var saveVehicle = new DatabaseContext())
|
|
{
|
|
var dataSet = new UserVehicle
|
|
{
|
|
UserId = player.GetUser().Id,
|
|
Model = (VehicleHash) playerVehicle.Model,
|
|
PositionX = playerVehicle.Position.X,
|
|
PositionY = playerVehicle.Position.Y,
|
|
PositionZ = playerVehicle.Position.Z,
|
|
Heading = playerVehicle.Heading,
|
|
NumberPlate = playerVehicle.NumberPlate,
|
|
PrimaryColor = Convert.ToByte(playerVehicle.PrimaryColor),
|
|
SecondaryColor = Convert.ToByte(playerVehicle.SecondaryColor),
|
|
Locked = playerVehicle.Locked,
|
|
Engine = playerVehicle.EngineStatus,
|
|
Dimension = Convert.ToByte(playerVehicle.Dimension),
|
|
};
|
|
playerVehicle.SetData("ownerId",player.GetUser().Id);
|
|
saveVehicle.UserVehicles.Add(dataSet);
|
|
saveVehicle.SaveChanges();
|
|
}
|
|
}
|
|
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
|
|
}
|
|
|
|
[Command("a", "~m~Benutzung: ~s~/a [Nachricht]", GreedyArg = true)]
|
|
public void CmdAdminA(Client player, string message)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
ChatService.BroadcastAdmin("~r~Admin " + player.Name + "~w~: " + message, AdminLevel.ADMIN);
|
|
}
|
|
|
|
[Command("team", "~m~Benutzung: ~s~/team")]
|
|
public void CmdAdminTeam(Client player)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
player.SendChatMessage("Online Teammitglieder:");
|
|
|
|
List<Client> playerlist = NAPI.Pools.GetAllPlayers();
|
|
foreach (Client currentPlayer in playerlist)
|
|
{
|
|
if (currentPlayer.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? false)
|
|
{
|
|
player.SendChatMessage(currentPlayer.Name);
|
|
}
|
|
}
|
|
}
|
|
|
|
[Command("setweather", "~m~Benutzung: ~s~/setweather [WEATHER]")]
|
|
public void CmdAdminSetweather(Client player, string weather)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
bool found = false;
|
|
foreach(string w in Enum.GetNames(typeof(Weather)))
|
|
{
|
|
if (w.ToLower() == weather)
|
|
{
|
|
found = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(!found)
|
|
{
|
|
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Wetter existiert nicht.");
|
|
return;
|
|
}
|
|
|
|
Weather weatherBefore = NAPI.World.GetWeather();
|
|
NAPI.World.SetWeather(weather);
|
|
Weather weatherAfter = NAPI.World.GetWeather();
|
|
|
|
if (!weatherBefore.Equals(weatherAfter))
|
|
{
|
|
NAPI.Chat.SendChatMessageToPlayer(player, "~w~Wetter geändert: " + NAPI.World.GetWeather());
|
|
NAPI.Chat.SendChatMessageToAll("Das Wetter wurde auf " + weatherAfter + " gesetzt!");
|
|
}
|
|
else
|
|
{
|
|
NAPI.Chat.SendChatMessageToPlayer(player, "~w~Das Wetter konnte nicht geändert werden");
|
|
}
|
|
}
|
|
|
|
[Command("freeze", "~m~Benutzung: ~s~/freeze [Player]")]
|
|
public void CmdAdminFreeze(Client player, string targetname)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
Client target = ClientService.GetClientByName(targetname);
|
|
if (target == null || !target.IsLoggedIn())
|
|
{
|
|
ChatService.PlayerNotFound(player);
|
|
return;
|
|
}
|
|
|
|
target.Freeze(true);
|
|
}
|
|
|
|
[Command("unfreeze", "~m~Benutzung: ~s~/freeze [Player]")]
|
|
public void CmdAdminUnfreeze(Client player, string targetname)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
Client target = ClientService.GetClientByName(targetname);
|
|
if (target == null || !target.IsLoggedIn())
|
|
{
|
|
ChatService.PlayerNotFound(player);
|
|
return;
|
|
}
|
|
|
|
target.Freeze(false);
|
|
}
|
|
|
|
[Command("kick", "~m~Benutzung: ~s~/kick [Player] [Grund]")]
|
|
public void CmdAdminKick(Client player, string targetname, string reason)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
Client target = ClientService.GetClientByName(targetname);
|
|
if (target == null || !target.IsLoggedIn())
|
|
{
|
|
ChatService.PlayerNotFound(player);
|
|
return;
|
|
}
|
|
|
|
string targetPlayername = NAPI.Player.GetPlayerName(target);
|
|
string adminPlayername = NAPI.Player.GetPlayerName(player);
|
|
|
|
NAPI.Chat.SendChatMessageToPlayer(target, "~r~KICKINFO: ~w~Du wurdest von " + adminPlayername + " vom Server gekickt: " + reason);
|
|
target.Kick();
|
|
NAPI.Chat.SendChatMessageToAll("~y~INFO: ~w~" + targetPlayername + " wurde von " + adminPlayername + " gekickt: " + reason);
|
|
}
|
|
|
|
[Command("clearchat", "~m~Benutzung: ~s~/clearchat")]
|
|
public void CmdAdminClearchat(Client player)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
for (int i = 0; i < 20; i++)
|
|
{
|
|
NAPI.Chat.SendChatMessageToAll("");
|
|
}
|
|
}
|
|
|
|
[Command("up", "~m~Benutzung: ~s~/up [Wert]")]
|
|
public void CmdAdminUp(Client player, int value = 5)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
if (player.IsInVehicle)
|
|
{
|
|
player.Vehicle.Position = new Vector3(player.Vehicle.Position.X, player.Vehicle.Position.Y, player.Vehicle.Position.Z + value);
|
|
}
|
|
else
|
|
{
|
|
player.Position = new Vector3(player.Position.X, player.Position.Y, player.Position.Z + value);
|
|
}
|
|
}
|
|
|
|
[Command("dn", "~m~Benutzung: ~s~/dn [Wert]")]
|
|
public void CmdAdminDn(Client player, int value = 5)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
if (player.IsInVehicle)
|
|
{
|
|
player.Vehicle.Position = new Vector3(player.Vehicle.Position.X, player.Vehicle.Position.Y, player.Vehicle.Position.Z - value);
|
|
} else
|
|
{
|
|
player.Position = new Vector3(player.Position.X, player.Position.Y, player.Position.Z - value);
|
|
}
|
|
}
|
|
|
|
[Command("rt", "~m~Benutzung: ~s~/rt [Wert]")]
|
|
public void CmdAdminRt(Client player, int value = 5)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
float playerHeading = player.Heading;
|
|
|
|
if (playerHeading < 45 || playerHeading >= 315)
|
|
{
|
|
Vector3 playerPosition = new Vector3(player.Position.X + value, player.Position.Y, player.Position.Z);
|
|
player.Position = playerPosition;
|
|
|
|
}
|
|
else if (playerHeading < 315 && playerHeading >= 225)
|
|
{
|
|
Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y - value, player.Position.Z);
|
|
player.Position = playerPosition;
|
|
}
|
|
else if (playerHeading >= 135 && playerHeading < 225)
|
|
{
|
|
Vector3 playerPosition = new Vector3(player.Position.X - value, player.Position.Y, player.Position.Z);
|
|
player.Position = playerPosition;
|
|
}
|
|
else if (playerHeading >= 45 && playerHeading < 135)
|
|
{
|
|
Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y + value, player.Position.Z);
|
|
player.Position = playerPosition;
|
|
}
|
|
}
|
|
|
|
[Command("lt", "~m~Benutzung: ~s~/lt [Wert]")]
|
|
public void CmdAdminLt(Client player, int value = 5)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
float playerHeading = player.Heading;
|
|
|
|
if (playerHeading < 45 || playerHeading >= 315)
|
|
{
|
|
Vector3 playerPosition = new Vector3(player.Position.X - value, player.Position.Y, player.Position.Z);
|
|
player.Position = playerPosition;
|
|
|
|
}
|
|
else if (playerHeading < 315 && playerHeading >= 225)
|
|
{
|
|
Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y + value, player.Position.Z);
|
|
player.Position = playerPosition;
|
|
}
|
|
else if (playerHeading >= 135 && playerHeading < 225)
|
|
{
|
|
Vector3 playerPosition = new Vector3(player.Position.X + value, player.Position.Y, player.Position.Z);
|
|
player.Position = playerPosition;
|
|
}
|
|
else if (playerHeading >= 45 && playerHeading < 135)
|
|
{
|
|
Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y - value, player.Position.Z);
|
|
player.Position = playerPosition;
|
|
}
|
|
}
|
|
|
|
|
|
[Command("spec", "~m~Benutzung: ~s~/spec [Player]")]
|
|
public void CmdAdminSpectate(Client player, string name)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
Client target = ClientService.GetClientByName(name);
|
|
if (target == null || !target.IsLoggedIn())
|
|
{
|
|
ChatService.PlayerNotFound(player);
|
|
return;
|
|
}
|
|
if (target == player)
|
|
{
|
|
ChatService.ErrorMsg(player);
|
|
return;
|
|
}
|
|
|
|
bool spec = player.GetData("spec");
|
|
|
|
if (spec == false)
|
|
{
|
|
NAPI.Player.SetPlayerToSpectatePlayer(player, target);
|
|
player.SetData("spec", true);
|
|
}
|
|
else
|
|
{
|
|
NAPI.Player.UnspectatePlayer(player);
|
|
player.SetData("spec", false);
|
|
}
|
|
|
|
}
|
|
|
|
[Command("ip", "~m~Benutzung: ~s~/ip [Spieler]")]
|
|
public void CmdAdminIp(Client player, string targetname)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
Client target = ClientService.GetClientByName(targetname);
|
|
if (target == null || !target.IsLoggedIn())
|
|
{
|
|
ChatService.PlayerNotFound(player);
|
|
return;
|
|
}
|
|
player.SendChatMessage("IP von " + NAPI.Player.GetPlayerName(target) + ": " + target.Address);
|
|
}
|
|
|
|
//TODO TEST COMMAND
|
|
[Command("aspeed", "~m~Benutzung: ~s~/aspeed [Modifier]")]
|
|
public void CmdAdminAspeed(Client player, float modifier)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
if (!player.IsInVehicle)
|
|
{
|
|
player.SendChatMessage("~r~[FEHLER]~s~ Du sitzt momentan nicht in einem Fahrzeug.");
|
|
return;
|
|
}
|
|
|
|
player.Vehicle.EnginePowerMultiplier = modifier;
|
|
}
|
|
|
|
//TEST COMMAND
|
|
[Command("myvehicles")]
|
|
public void CmdAdminMyVehicles(Client player)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
player.SendChatMessage("Deine Fahrzeuge: ");
|
|
|
|
int userID = player.GetUser().Id;
|
|
using (var loadData = new DatabaseContext())
|
|
{
|
|
foreach (UserVehicle v in loadData.UserVehicles)
|
|
{
|
|
if (v.UserId == userID)
|
|
{
|
|
player.SendChatMessage("~b~" + v.Model);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//TODO
|
|
[Command("fpay")]
|
|
public void FPay(Client player, string receiver, float amount)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
using (var getFaction = new DatabaseContext())
|
|
{
|
|
Entities.Faction receiverUser = getFaction.Factions.FirstOrDefault(u => u.Name == receiver);
|
|
BankManager.TransferUserMoneyToFaction(player.GetUser(), receiverUser, amount, "/FPAY");
|
|
}
|
|
}
|
|
//TODO Ausführen bei Tastendruck wenn in Fahrzeug.
|
|
[Command("buyv")]
|
|
public void BuyShopVehicle(Client player)
|
|
{
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
if (player.IsInVehicle)
|
|
{
|
|
if (player.Vehicle.HasData("shopVehicleId"))
|
|
{
|
|
int shopVehicleId = player.Vehicle.GetData("shopVehicleId");
|
|
using (var getShopVehicle = new DatabaseContext())
|
|
{
|
|
ShopVehicle sVehicle = getShopVehicle.ShopVehicles.FirstOrDefault(u => u.Id == shopVehicleId);
|
|
Entities.Faction receiverUser = getShopVehicle.Factions.FirstOrDefault(u => u.Name == "LSPD");
|
|
BankManager.TransferUserMoneyToFaction(player.GetUser(), receiverUser, sVehicle.Price, "Fahrzeug gekauft: " + sVehicle.ModelName);
|
|
//TODO Anpassen
|
|
Vehicle boughtVehicle = NAPI.Vehicle.CreateVehicle(sVehicle.Model, new Vector3(sVehicle.PositionX, sVehicle.PositionY + 10, sVehicle.PositionZ + 0.5), sVehicle.Heading,
|
|
sVehicle.PrimaryColor, sVehicle.SecondaryColor, "LoG", sVehicle.Alpha, false, true, 0);
|
|
player.SetIntoVehicle(boughtVehicle, 0);
|
|
//TODO fügt das Fahrzeug als Userfahrzeug hinzu
|
|
CmdAdminOwn(player);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
[Command("saveall")]
|
|
public void SaveAll(Client player)
|
|
{
|
|
SaveManager.SaveAllOnSave();
|
|
}
|
|
|
|
/*
|
|
[Command("restart")]
|
|
public void CmdAdminRestart(Client player)
|
|
{
|
|
if (ClientExtension.IsLoggedIn(player) == false)
|
|
{
|
|
ChatService.PlayerNotLoggedIn(player);
|
|
return;
|
|
}
|
|
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
|
|
{
|
|
ChatService.NotAuthorized(player);
|
|
return;
|
|
}
|
|
|
|
var users = NAPI.Pools.GetAllPlayers();
|
|
|
|
foreach(Client user in users)
|
|
{
|
|
user.SendChatMessage("~r~Server startet neu.~s~ Bitte verbinde dich über ~y~F1~s~ neu.");
|
|
user.Kick();
|
|
}
|
|
|
|
NAPI.Resource.StopResource("reallife-gamemode");
|
|
}*/
|
|
}
|
|
}
|