Files
reallife-gamemode/Server/Commands/Admin.cs

2424 lines
99 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;
using reallife_gamemode.Server.Inventory.Items;
using reallife_gamemode.Server.Inventory.Interfaces;
using reallife_gamemode.Server.Saves;
using reallife_gamemode.Server.Business;
using System.Text.RegularExpressions;
using reallife_gamemode.Server.Classes;
/**
* @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("eat", "~m~Benutzung: ~s~/eat [Item]")]
public void CmdAdminEat(Client player, string item)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
IItem iItem = InventoryManager.GetItemByName(item);
if(iItem == null)
{
player.SendChatMessage("Dieses Essen existiert nicht.");
return;
}
List<UserItem> itemList = player.GetUser().GetItems();
UserItem eatItem = itemList.FirstOrDefault(i => i.ItemId == iItem.Id);
if(eatItem == null)
{
player.SendChatMessage("Du hast dieses Item nicht");
return;
}
if(iItem is IUsableItem usableItemObj)
{
usableItemObj.Use(eatItem);
}
}
#region Support
[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;
}
message = Regex.Replace(message, "(~[a-zA-Z]~{1})|(!{(.*)})", "");
message = Regex.Replace(message, "#([0-9A-Fa-f]{6})", m => "!{" + m.Groups[0].Value + "}");
string publicMessage = "~b~(( " + player.GetUser().AdminLevel.GetName() + " " + player.Name + ": " + message + " ~b~))";
NAPI.Chat.SendChatMessageToAll(publicMessage);
}
[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().FindAll(c => c.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? false).OrderByDescending(c => c.GetUser().AdminLevel).ToList();
foreach (Client currentPlayer in playerlist)
{
player.SendChatMessage(currentPlayer.GetUser().AdminLevel.GetName() + " | " + currentPlayer.Name);
}
}
[Command("dimension", "~m~Benutzung: ~s~/dimension")]
public void CmdAdminDimension(Client player)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
player.SendChatMessage("Deine Dimension ist ~g~" + player.Dimension);
}
[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.GetClientByNameOrId(name);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
//TODO: Als Supporter nur, wenn mit dem Ziel ein offenes Ticket besteht. Ansonsten kein Teleport
if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = target.Position;
else player.Position = target.Position;
}
[Command("position", "~m~Benutzung: ~s~/position")]
public void CmdAdminShowPos(Client player)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
player.SendChatMessage("Position: X Y Z: " + player.Position);
}
[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.GetClientByNameOrId(name);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
//TODO: Als Supporter nur, wenn mit dem Ziel ein offenes Ticket besteht. Ansonsten kein Teleport
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("aw", "~m~Benutzung: ~s~/aw [Spieler] [Nachricht]", GreedyArg = true)]
public void CmdAdminMsg(Client player, string name, string msg)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Client target = ClientService.GetClientByNameOrId(name);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
if (target == player)
{
ChatService.ErrorMsg(player);
return;
}
msg = Regex.Replace(msg, "(~[a-zA-Z]~{1})|(!{(.*)})", "");
player.SendChatMessage("~y~PM an " + target.Name + ": " + msg + " ");
string Message = "~y~PM von " + player.GetUser().AdminLevel.GetName() + " " + player.Name + ": " + msg + "";
NAPI.Chat.SendChatMessageToPlayer(target, Message);
}
[Command("factionlist", "~m~Benutzung: ~s~/factionlist")]
public void CmdAdminFactionlist(Client player)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? 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("businesslist", "~m~Benutzung: ~s~/businesslist")]
public void CmdAdminBusinessList(Client player)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
player.SendChatMessage("~m~__________ ~s~Businesses ~m~__________");
foreach (BusinessBase b in BusinessManager.Businesses.OrderBy(b => b.Id))
{
player.SendChatMessage(b.Id.ToString().PadRight(3) + " | " + b.Name + (b is CarDealerBusinessBase ? " | Autohaus" : ""));
}
}
#endregion
#region ALevel1
[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;
}
message = Regex.Replace(message, "(~[a-zA-Z]~{1})|(!{(.*)})", "");
ChatService.BroadcastAdmin("~r~[ADMINCHAT]~s~ " + player.GetUser().AdminLevel.GetName() + " " + player.Name + "~w~: " + message, AdminLevel.ADMIN);
}
[Command("freeze", "~m~Benutzung: ~s~/freeze [Spieler]")]
public void CmdAdminFreeze(Client player, string targetname)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Client target = ClientService.GetClientByNameOrId(targetname);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
player.SendChatMessage("Du hast ~y~" + target.Name + " ~s~gefreezed.");
target.SendChatMessage("Du wurdest von ~y~" + player.Name + "~s~ gefreezed.");
target.Freeze(true);
}
[Command("unfreeze", "~m~Benutzung: ~s~/unfreeze [Spieler]")]
public void CmdAdminUnfreeze(Client player, string targetname)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Client target = ClientService.GetClientByNameOrId(targetname);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
player.SendChatMessage("Du hast ~y~" + target.Name + " ~s~unfreezed.");
target.SendChatMessage("Du wurdest von ~y~" + player.Name + "~s~ unfreezed.");
target.Freeze(false);
}
[Command("gotolist", "~m~Benutzung: ~s~/gotolist")] //TODO Als Browser anzeigeN??
public void CmdAdminGotoList(Client player)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
var gotoString = "";
using(var dbContext = new DatabaseContext())
{
foreach (GotoPoint point in dbContext.GotoPoints)
{
if (point.Active)
{
gotoString += point.Description + ", ";
}
}
}
player.SendChatMessage(gotoString);
}
[Command("mark", "~m~Benutzung: ~s~/mark")]
public void CmdAdminMark(Client player)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
player.SetData("mark", player.Position);
player.SendNotification("~y~Mark ~s~gespeichert", true);
}
[Command("gotomark", "~m~Benutzung: ~s~/gotomark")]
public void CmdAdminGotoMark(Client player)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
if (!player.HasData("mark"))
{
player.SendChatMessage("~r~[FEHLER]~s~ Du hast noch keine Markierung gesetzt. ~m~(/mark)");
return;
}
if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = player.GetData("mark");
else player.Position = player.GetData("mark");
}
[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);
if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition;
else player.Position = playerPosition;
}
else if (playerHeading < 315 && playerHeading >= 225)
{
Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y - value, player.Position.Z);
if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition;
else player.Position = playerPosition;
}
else if (playerHeading >= 135 && playerHeading < 225)
{
Vector3 playerPosition = new Vector3(player.Position.X - value, player.Position.Y, player.Position.Z);
if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition;
else player.Position = playerPosition;
}
else if (playerHeading >= 45 && playerHeading < 135)
{
Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y + value, player.Position.Z);
if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition;
else 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);
if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition;
else player.Position = playerPosition;
}
else if (playerHeading < 315 && playerHeading >= 225)
{
Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y + value, player.Position.Z);
if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition;
else player.Position = playerPosition;
}
else if (playerHeading >= 135 && playerHeading < 225)
{
Vector3 playerPosition = new Vector3(player.Position.X + value, player.Position.Y, player.Position.Z);
if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition;
else player.Position = playerPosition;
}
else if (playerHeading >= 45 && playerHeading < 135)
{
Vector3 playerPosition = new Vector3(player.Position.X, player.Position.Y - value, player.Position.Z);
if (player.IsInVehicle && player.VehicleSeat == -1) player.Vehicle.Position = playerPosition;
else player.Position = playerPosition;
}
}
[Command("setdimension", "~m~Benutzung: ~s~/setdimension [Spieler] [Dimension]")]
public void CmdAdminSetDimension(Client player, string targetname, uint dimension)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Client target = ClientService.GetClientByNameOrId(targetname);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
target.Dimension = dimension;
target.SendChatMessage("~s~Deine Dimension wurde auf ~g~" + dimension + "~s~ geändert.");
player.SendChatMessage("~s~Die Dimension von ~y~" + target.Name + " ~s~wurde auf ~g~" + dimension + "~s~ geändert.");
}
[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.GetClientByNameOrId(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 " + player.GetUser().AdminLevel.GetName() + " " + adminPlayername + " gekickt: " + reason);
}
[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.GetClientByNameOrId(targetname);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
player.SendChatMessage("IP von ~y~" + NAPI.Player.GetPlayerName(target) + ": ~g~" + target.Address);
}
[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.GetClientByNameOrId(user);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(admin);
return;
}
reason = Regex.Replace(reason, "(~[a-zA-Z]~{1})|(!{(.*)})", "");
target.GetUser().BanPlayer(admin, reason, mins);
}
[Command("unban", "~m~Benutzung: ~s~/unban [Name] ")]
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();
}
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();
}
string message = "~b~[ADMIN] ~s~Der Spieler ~y~" + user.Name + " ~s~wurde von ~y~" + admin.Name + " ~s~entbannt.";
ChatService.BroadcastAdmin(message, AdminLevel.ADMIN);
}
[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())
{
GotoPoint p = dbContext.GotoPoints.FirstOrDefault(x => x.Description == location);
if(p == null)
{
player.SendChatMessage("~r~[FEHLER]~s~ Dieser Goto-Punkt existiert nicht.");
return;
}
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("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.GetClientByNameOrId(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("slap", "~m~Benutzung: ~s~/slap [Spieler] (Höhe)")]
public void CmdAdminSlap(Client player, string name, int wert = 5)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Client target = ClientService.GetClientByNameOrId(name);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
Vector3 oldPos = target.Position;
target.Position = new Vector3(oldPos.X, oldPos.Y, oldPos.Z + wert);
player.SendChatMessage("Du hast " + target.Name + " geslappt. Höhe: " + wert + "");
}
[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.GetClientByNameOrId(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("tov", "~m~Benutzung: ~s~/tov [Fahrzeug ID]")]
public void CmdAdminTov(Client player, int vehid)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Vehicle v = VehicleManager.GetVehicleFromId(vehid);
if(v == null)
{
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Fahrzeug existiert nicht.");
return;
}
player.Position = v.Position.Add(new Vector3(0, 0, 2));
}
[Command("ghv", "~m~Benutzung: ~s~/ghv [Fahrzeug ID]")]
public void CmdAdminGhv(Client player, int vehid)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Vehicle v = VehicleManager.GetVehicleFromId(vehid);
if (v == null)
{
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Fahrzeug existiert nicht.");
return;
}
v.Position = player.Position;
player.Position = player.Position.Add(new Vector3(0, 0, 2));
}
#endregion
#region ALevel2
[Command("sethp", "~m~Benutzung: ~s~/sethp [Spieler] (Hp)")]
public void CmdAdminSetHp(Client player, string name, int hp = 100)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN2) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Client target = ClientService.GetClientByNameOrId(name);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
target.Health = hp;
target.SendChatMessage("~b~Deine HP wurden von " + player.Name + " auf " + hp + " gesetzt.");
player.SendChatMessage("~b~Du hast die HP von " + target.Name + " auf " + hp + " gesetzt.");
}
[Command("clothes", "~m~Benutzung: ~s~/clothes [Spieler] [Slot] [Component ID] (Textur)")]
public void CmdAdminClothes(Client player, string name, int slot, int component, int texture = 0)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN2) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Client target = ClientService.GetClientByNameOrId(name);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
target.SetClothes(slot, component, texture);
}
[Command("props", "~m~Benutzung: ~s~/props [Spieler] [Slot] [Component ID] (Textur)")]
public void CmdAdminProps(Client player, string name, int slot, int component, int texture = 0)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN2) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Client target = ClientService.GetClientByNameOrId(name);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
target.SetAccessories(slot, component, texture);
}
[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.ADMIN2) ?? 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);
}
#endregion
#region ALevel3
[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.ADMIN3) ?? true)
//TODO: Bestimmte Autos nur ab Adminlevel 1337, "normale Fahrzeuge" schon ab Adminlevel 3.
{
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;
}
if(!uint.TryParse(hash, out uint uHash))
uHash = NAPI.Util.GetHashKey(hash);
if(!VehicleManager.IsValidHash(uHash))
{
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Fahrzeug existiert nicht.");
return;
}
Vehicle v = NAPI.Vehicle.CreateVehicle(uHash, player.Position, player.Rotation.Z, color1, color2, engine: false);
VehicleStreaming.SetEngineState(v, true);
VehicleStreaming.SetLockStatus(v, false);
player.SetIntoVehicle(v.Handle, -1);
}
[Command("fv", "~m~Benutzung: ~s~/fv")]
public void CmdAdminFixveh(Client player)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? 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", "~m~Benutzung: ~s~/vdestroy (ID)")]
public void CmdAdminVdestroy(Client player, int vid = -1)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Vehicle targetVeh;
if (vid == -1)
{
if (!player.IsInVehicle)
{
player.SendChatMessage("~m~Benutzung: ~s~/vdestroy (ID)");
return;
}
targetVeh = player.Vehicle;
}
else
{
targetVeh = VehicleManager.GetVehicleFromId(vid);
if(targetVeh == null)
{
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Fahrzeug existiert nicht.");
return;
}
}
ServerVehicle veh = VehicleManager.GetServerVehicleFromVehicle(targetVeh);
if(veh != null)
{
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Fahrzeug wird von einem Server-System benutzt: ~m~" + veh.GetType().Name);
return;
}
VehicleManager.DeleteVehicle(targetVeh);
}
[Command("vlivery", "~m~Benutzung: ~s~/vlivery [Livery]")]
public void CmdAdminVlivery(Client player, int livery)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
if (!player.IsInVehicle)
{
player.SendChatMessage("~r~[FEHLER]~s~ Du sitzt momentan nicht in einem Fahrzeug.");
return;
}
Vehicle playerVeh = player.Vehicle;
playerVeh.Livery = livery;
}
[Command("vcolor", "~m~Benutzung: ~s~/vcolor [Farb-ID1] [Farb-ID2]")]
public void CmdAdminColor(Client player, int color1, int color2)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? 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("giveweapon", "~m~Benutzung: ~s~/giveweapon [Spieler] [Waffe] [Munition]")]
public void CmdAdminGiveweapon(Client player, string name, string weapon, int ammo)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
if (ammo <= 0)
{
player.SendChatMessage("~r~[FEHLER]~s~ Es muss mindestens 1 Munition vergeben werden.");
return;
}
Client target = ClientService.GetClientByNameOrId(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("arevive", "~m~Benutzung: ~s~/arevive [Spieler]")]
public void CmdAdminRevive(Client player, string name)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Client target = ClientService.GetClientByNameOrId(name);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
if (target.Health != 0)
{
player.SendChatMessage("~r~[FEHLER]:~s~Spieler ist nicht tot");
return;
}
target.TriggerEvent("onPlayerRevived");
target.SendNotification("Du wurdest von Admin ~y~" + player.Name + "~s~ wiederbelebt.");
target.SetData("isDead", false);
NAPI.Player.SpawnPlayer(target, target.Position);
target.Health = 100;
}
[Command("setarmor", "~m~Benutzung: ~s~/setarmor [Spieler] (Armor)")]
public void CmdAdminSetArmor(Client player, string name, int armor = 100)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.ADMIN3) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Client target = ClientService.GetClientByNameOrId(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.");
}
#endregion
#region ALevel1337
[Command("giveitem", "~m~Benutzung: ~s~/giveitem [Target] [Item ID] [Anzahl]")]
public void CmdAdminGiveItem(Client player, string targetname, int itemId, int amount)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Client target = ClientService.GetClientByNameOrId(targetname);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
var invWeight = 0;
using (var context = new DatabaseContext())
{
List<UserItem> userItems = context.UserItems.ToList().FindAll(i => i.UserId == target.GetUser().Id);
foreach(var uItem in userItems)
{
invWeight += uItem.Amount * InventoryManager.GetItemById(uItem.ItemId).Gewicht;
}
}
if (invWeight + (amount * InventoryManager.GetItemById(itemId).Gewicht) > 40000)
{
player.SendChatMessage("~y~" + target.Name + " ~s~hat nicht mehr genug Platz in seinem Inventar.");
}
else
{
UserItem item = new UserItem() { ItemId = itemId, UserId = target.GetUser().Id, Amount = amount };
InventoryManager.AddItemToInventory(target, item);
}
}
[Command("inventory", "~m~Benutzung: ~s~/inventory [Spieler]")]
public void CmdAdminGiveItem(Client player, string targetname)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.SUPPORTER) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Client target = ClientService.GetClientByNameOrId(targetname);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
var user = target.GetUser();
InventoryManager.GetUserItemsAsAdmin(player, user);
}
[Command("editmode", "~m~Benutzung: ~s~/editmode")]
public void CmdAdminToggleEditMode(Client player)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
if(player.GetData("editmode") == false)
{
player.SetData("editmode", true);
player.SendNotification("Edit-Mode ~g~aktiviert");
player.TriggerEvent("toggleEditMode", true);
}
else
{
player.SetData("editmode", false);
player.SendNotification("Edit-Mode ~r~deaktiviert");
player.TriggerEvent("toggleEditMode", false);
}
}
[Command("setbliptemplate", "~m~Benutzung: ~s~/setbliptemplate [byte COLOR] [byte ALPHA] [bool SHORTRANGE] [uint SPRITE] [float SCALE] [string NAME]", GreedyArg = true)]
public void CmdAdminSetBlipTemplate(Client player, byte color, byte alpha, bool shortRange, uint sprite, float scale, string name)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
TempBlip newTempBlip = new TempBlip()
{
Color = color,
Name = name,
Transparency = alpha,
ShortRange = shortRange,
Sprite = sprite,
Scale = scale,
};
NAPI.Data.SetWorldData("blipTemplate", newTempBlip);
}
[Command("vmod", "~m~Benutzung: ~s~/vmod [Slot] [Mod ID]")]
public void CmdAdminVmod(Client player, int slot, int mod)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
if (!player.IsInVehicle)
{
player.SendChatMessage("~r~[FEHLER]~s~ Du sitzt momentan nicht in einem Fahrzeug.");
return;
}
player.Vehicle.SetMod(slot, mod);
}
[Command("aneon", "~m~Benutzung: ~s~/aneon [R][G][B]")]
public void CmdAdminNeon(Client player, int r, int g, int b)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
if (!player.IsInVehicle)
{
player.SendChatMessage("~r~[FEHLER]~s~ Du sitzt momentan nicht in einem Fahrzeug.");
return;
}
Vehicle veh = NAPI.Player.GetPlayerVehicle(player);
NAPI.Vehicle.SetVehicleNeonColor(veh, r, g, b);
NAPI.Vehicle.SetVehicleNeonState(veh, true);
}
[Command("vehsmoke", "~m~Benutzung: ~s~/vehsmoke [R][G][B]")]
public void CmdAdminVehSmoke(Client player, int r, int g, int b)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
if (!player.IsInVehicle)
{
player.SendChatMessage("~r~[FEHLER]~s~ Du sitzt momentan nicht in einem Fahrzeug.");
return;
}
Vehicle veh = NAPI.Player.GetPlayerVehicle(player);
NAPI.Vehicle.SetVehicleTyreSmokeColor(veh, new Color(r, g, b));
}
[Command("ipl", "~m~Benutzung: ~s~/ipl [Load / Remove] [Name]")]
public void CmdAdminIpl(Client player, string option, string name)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? 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("rsethp", "~m~Benutzung: ~s~/rsethp [Radius] (Leben)")]
public void CmdAdminRangeSetHP(Client player, float radius, int hp = 100)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? 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("freekh", "~m~Benutzung: ~s~/freekh (Radius)")]
public void CmdAdminFreekh(Client player, float radius = -1)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
var peopleInRange = radius == -1 ? NAPI.Pools.GetAllPlayers() : NAPI.Player.GetPlayersInRadiusOfPlayer(radius, player);
int playerRevided = 0;
string toPlayerChat = "~b~Admin " + player.Name + " hat alle Spieler wiederbelebt";
string toPlayerNotification = "Du wurdest von Admin ~y~" + player.Name + "~s~ wiederbelebt.";
foreach (var managedClient in peopleInRange)
{
if (!managedClient.IsLoggedIn()) return;
if (!managedClient.HasData("isDead") || managedClient.GetData("isDead") == false) continue;
playerRevided++;
managedClient.TriggerEvent("onPlayerRevived");
managedClient.SetData("isDead", false);
managedClient.SendNotification(toPlayerNotification);
managedClient.SendChatMessage(toPlayerChat);
NAPI.Player.SpawnPlayer(managedClient, managedClient.Position);
managedClient.Health = 100;
}
player.SendChatMessage("~b~Du hast " + playerRevided + " Spieler wiederbelebt.");
}
[Command("rsetarmor", "~m~Benutzung: ~s~/rsetarmor [Radius] (Armor)")]
public void CmdAdminRangeSetArmor(Client player, float radius, int Armor = 100)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? 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("rgiveweapon", "~m~Benutzung: ~s~/rgiveweapon [Radius] [Waffe] [Munition]")]
public void CmdAdminRangeGiveWeapon(Client player, float radius, string weapon, int munition)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? 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("time", "~m~Benutzung: ~s~/time [Stunde] (Minuten) (Sekunden)")]
public void CmdAdminTime(Client player, int hour, int min = 0, int sec = 0)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
if(hour > 23 || min > 59 || sec > 59)
{
player.SendChatMessage("~r~[FEHLER]~s~ Es wurde eine ungültige Zeit eingegeben.");
return;
}
if(hour == -1)
{
player.SendChatMessage("Es wird nun wieder die Echtzeit genutzt.");
TimeManager.StartTimeManager();
return;
}
string broadcastMsg = $"Serverzeit wurde auf {hour:D2}:{min:D2}:{sec:D2} gesetzt!";
NAPI.Notification.SendNotificationToAll(broadcastMsg);
TimeManager.PauseTimeManager();
NAPI.World.SetTime(hour, min, sec);
return;
}
[Command("ainvite", "~m~Benutzung: ~s~/ainvite [Name] [Fraktion]")]
public void CmdAdminAinvite(Client player, string name, int faction)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Client target = ClientService.GetClientByNameOrId(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.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Client target = ClientService.GetClientByNameOrId(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 ~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~s~, ~g~Goto (X)~s~, ~r~Marker~s~, ~r~Ped~s~, ~r~Pickup~s~, ~r~TextLabel~s~, ~g~Vehicle~s~, ~g~FVehicle~s~, ~g~SVehicle (X)~s~] (Beschreibung) = (X)")]
public void CmdAdminSave(Client player, string typ, string option1 = null, string option2 = null)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
switch (typ.ToLower())
{
case "blip":
player.TriggerEvent("saveBlip");
break;
case "goto":
if (option1 == null)
{
player.SendChatMessage("Für Goto musst du einen dritten Parameter angeben. Beispiel: Ort des Goto-Punktes.");
return;
}
else
{
using (var dbContext = new DatabaseContext())
{
GotoPoint p = dbContext.GotoPoints.FirstOrDefault(x => x.Description == option1);
if (p == null)
{
SaveManager.SaveGotoPoint(player, option1);
player.SendNotification("Goto-Punkt ~g~" + option1 + "~s~ gespeichert.", true);
}
else
{
player.SendChatMessage("Einen Goto-Punkt mit dieser Bezeichnung gibt es schon!");
}
}
}
break;
case "vehicle":
if (player.IsInVehicle)
{
Vehicle vehicle = player.Vehicle;
int playerSeat = player.VehicleSeat;
vehicle = SaveManager.SaveVehicleData(vehicle, (VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate,
Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), vehicle.Locked);
player.SendNotification("Fahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true);
player.SetIntoVehicle(vehicle, playerSeat);
}
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
break;
case "fvehicle":
if (player.IsInVehicle)
{
if (player.GetUser().GetFaction() == null)
{
player.SendChatMessage("~m~Du bist in keiner Fraktion! Invite dich erst mit ~y~/ainvite");
return;
}
else
{
Vehicle vehicle = player.Vehicle;
int playerSeat = player.VehicleSeat;
vehicle = SaveManager.SaveFactionVehicleData(vehicle, (VehicleHash)vehicle.Model, vehicle.Position, vehicle.Heading, vehicle.NumberPlate,
vehicle.PrimaryColor, vehicle.SecondaryColor, vehicle.Locked, vehicle.EngineStatus, player.GetUser().FactionId);
player.SendNotification("Fraktionsfahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true);
player.SetIntoVehicle(vehicle, playerSeat);
}
}
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
break;
case "svehicle":
if (player.IsInVehicle)
{
if(option1 == null || option2 == null)
{
player.SendChatMessage("~m~Benutzung: ~s~/save SVehicle [Carshop Business ID] [Preis]");
return;
}
if(!int.TryParse(option1, out int businessId) || !int.TryParse(option2, out int price))
{
player.SendChatMessage("~m~Benutzung: ~s~/save SVehicle [Carshop Business ID] [Preis]");
return;
}
BusinessBase business = BusinessManager.GetBusiness(businessId);
if(business == null)
{
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Business existiert nicht.");
return;
}
if(!(business is CarDealerBusinessBase))
{
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Business ist kein Fahrzeug-Business.");
return;
}
Vehicle vehicle = player.Vehicle;
int playerSeat = player.VehicleSeat;
vehicle = SaveManager.SaveShopVehicleData(vehicle, (VehicleHash)vehicle.Model, vehicle.DisplayName, vehicle.Position, vehicle.Heading, vehicle.NumberPlate,
Convert.ToByte(vehicle.PrimaryColor), Convert.ToByte(vehicle.SecondaryColor), business, price);
player.SendNotification("Shopfahrzeug ~g~" + vehicle.DisplayName + "~s~ gespeichert.", true);
Vector3 oldPos = player.Position;
player.Position = new Vector3(oldPos.X, oldPos.Y, oldPos.Z + 2.5);
}
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
break;
}
}
[Command("remove", "~m~Benutzung: ~s~/remove [Vehicle, Goto] [Option]")]
public void CmdAdminRemove(Client player, string type, string option = "")
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
switch(type.ToLower())
{
case "vehicle":
if(!player.IsInVehicle)
{
player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
return;
}
ServerVehicle veh = player.Vehicle.GetServerVehicle();
if(veh == null)
{
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Fahrzeug wird nicht von einem Server-System genutzt.");
return;
}
if(option.ToLower() != "yes")
{
player.SendChatMessage("Bist du sicher, dass du folgendes Fahrzeug löschen willst: ~m~" + veh.ToString() + " ~s~?");
player.SendChatMessage("Falls ~g~Ja~s~, nutze ~y~/remove vehicle yes");
return;
}
using (var dbContext = new DatabaseContext())
{
VehicleManager.DeleteVehicle(player.Vehicle);
dbContext.ServerVehicles.Remove(veh);
dbContext.SaveChanges();
}
break;
case "goto":
if(option == "")
{
player.SendChatMessage("~m~Benutzung: ~s~/remove [Goto] [Punkt]");
return;
}
if (!player.GetUser()?.IsAdmin(AdminLevel.PROJEKTLEITUNG) ?? true) //1338
{
ChatService.NotAuthorized(player);
return;
}
using (var dbContext = new DatabaseContext())
{
GotoPoint p = dbContext.GotoPoints.FirstOrDefault(x => x.Description == option);
if(p == null)
{
player.SendChatMessage("~r~[FEHLER]~s~ Dieser Goto-Punkt existiert nicht.");
return;
}
dbContext.GotoPoints.Remove(p);
dbContext.SaveChanges();
player.SendNotification("Der Goto-Punkt ~r~" + p.Description + "~s~ wurde erfolgreich gelöscht.");
}
break;
}
}
#region loadCommand
[Command("load", "~m~Benutzung: ~s~/load [Typ = OnlineBunkers, ArcadiusBusinessCentre, MazeBankBuilding, LomBank, MazeBankWest, ClubWareHouse, SpecialLocations, GRHYacht, DHYacht, PYacht, AircraftCarrier, BridgeTC, BridgeTN, NorthYankton, ONeilsFarmB, ONeilsFarm, Morgue")]
public void CmdAdminloadlocation(Client player, string typ)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
switch (typ)
{
case "OnlineBunkers":
NAPI.World.RequestIpl("gr_case10_bunkerclosed");
NAPI.World.RequestIpl("gr_case9_bunkerclosed");
NAPI.World.RequestIpl("gr_case3_bunkerclosed");
NAPI.World.RequestIpl("gr_case0_bunkerclosed");
NAPI.World.RequestIpl("gr_case1_bunkerclosed");
NAPI.World.RequestIpl("gr_case2_bunkerclosed");
NAPI.World.RequestIpl("gr_case5_bunkerclosed");
NAPI.World.RequestIpl("gr_case7_bunkerclosed");
NAPI.World.RequestIpl("gr_case11_bunkerclosed");
NAPI.World.RequestIpl("gr_case6_bunkerclosed");
NAPI.World.RequestIpl("gr_case11_bunkerclosed");
NAPI.World.RequestIpl("gr_case6_bunkerclosed");
NAPI.World.RequestIpl("gr_case4_bunkerclosed");
player.SendChatMessage("~y~ Online Bunkers~s~ erfolgreich geladen!");
break;
case "ArcadiusBusinessCentre":
NAPI.World.RequestIpl("ex_dt1_02_office_02b");
NAPI.World.RequestIpl("ex_dt1_02_office_02c");
NAPI.World.RequestIpl("ex_dt1_02_office_02a");
NAPI.World.RequestIpl("ex_dt1_02_office_01a");
NAPI.World.RequestIpl("ex_dt1_02_office_01b");
NAPI.World.RequestIpl("ex_dt1_02_office_01c");
NAPI.World.RequestIpl("ex_dt1_02_office_03a");
NAPI.World.RequestIpl("ex_dt1_02_office_03b");
NAPI.World.RequestIpl("ex_dt1_02_office_03c");
NAPI.World.RequestIpl("imp_dt1_02_cargarage_a");
NAPI.World.RequestIpl("imp_dt1_02_cargarage_b");
NAPI.World.RequestIpl("imp_dt1_02_cargarage_c");
NAPI.World.RequestIpl("imp_dt1_02_modgarage");
player.SendChatMessage("~y~ Arcadius Business Centre~s~ erfolgreich geladen!");
break;
case "MazeBankBuilding":
NAPI.World.RequestIpl("ex_dt1_11_office_02b");
NAPI.World.RequestIpl("ex_dt1_11_office_02c");
NAPI.World.RequestIpl("ex_dt1_11_office_02a");
NAPI.World.RequestIpl("ex_dt1_11_office_01a");
NAPI.World.RequestIpl("ex_dt1_11_office_01b");
NAPI.World.RequestIpl("ex_dt1_11_office_01c");
NAPI.World.RequestIpl("ex_dt1_11_office_03a");
NAPI.World.RequestIpl("ex_dt1_11_office_03b");
NAPI.World.RequestIpl("ex_dt1_11_office_03c");
NAPI.World.RequestIpl("imp_dt1_11_cargarage_a");
NAPI.World.RequestIpl("imp_dt1_11_cargarage_b");
NAPI.World.RequestIpl("imp_dt1_11_cargarage_c");
NAPI.World.RequestIpl("imp_dt1_11_modgarage");
player.SendChatMessage("~y~ Maze Bank Building~s~ erfolgreich geladen!");
break;
case "LomBank":
NAPI.World.RequestIpl("ex_sm_13_office_02b");
NAPI.World.RequestIpl("ex_sm_13_office_02c");
NAPI.World.RequestIpl("ex_sm_13_office_02a");
NAPI.World.RequestIpl("ex_sm_13_office_01a");
NAPI.World.RequestIpl("ex_sm_13_office_01b");
NAPI.World.RequestIpl("ex_sm_13_office_01c");
NAPI.World.RequestIpl("ex_sm_13_office_03a");
NAPI.World.RequestIpl("ex_sm_13_office_03b");
NAPI.World.RequestIpl("ex_sm_13_office_03c");
NAPI.World.RequestIpl("imp_sm_13_cargarage_a");
NAPI.World.RequestIpl("imp_sm_13_cargarage_b");
NAPI.World.RequestIpl("imp_sm_13_cargarage_c");
NAPI.World.RequestIpl("imp_sm_13_modgarage");
player.SendChatMessage("~y~Lom Bank~s~ erfolgreich geladen!");
break;
case "MazeBankWest":
NAPI.World.RequestIpl("ex_sm_15_office_02b");
NAPI.World.RequestIpl("ex_sm_15_office_02c");
NAPI.World.RequestIpl("ex_sm_15_office_02a");
NAPI.World.RequestIpl("ex_sm_15_office_01a");
NAPI.World.RequestIpl("ex_sm_15_office_01b");
NAPI.World.RequestIpl("ex_sm_15_office_01c");
NAPI.World.RequestIpl("ex_sm_15_office_03a");
NAPI.World.RequestIpl("ex_sm_15_office_03b");
NAPI.World.RequestIpl("ex_sm_15_office_03c");
NAPI.World.RequestIpl("imp_sm_15_cargarage_a");
NAPI.World.RequestIpl("imp_sm_15_cargarage_b");
NAPI.World.RequestIpl("imp_sm_15_cargarage_c");
NAPI.World.RequestIpl("imp_sm_15_modgarage");
player.SendChatMessage("~y~Maze Bank West~s~ erfolgreich geladen!");
break;
case "ClubWareHouse":
NAPI.World.RequestIpl("bkr_biker_interior_placement_interior_0_biker_dlc_int_01_milo");
NAPI.World.RequestIpl("bkr_biker_interior_placement_interior_1_biker_dlc_int_02_milo");
NAPI.World.RequestIpl("bkr_biker_interior_placement_interior_2_biker_dlc_int_ware01_milo");
NAPI.World.RequestIpl("bkr_biker_interior_placement_interior_3_biker_dlc_int_ware02_milo");
NAPI.World.RequestIpl("bkr_biker_interior_placement_interior_4_biker_dlc_int_ware03_milo");
NAPI.World.RequestIpl("bkr_biker_interior_placement_interior_5_biker_dlc_int_ware04_milo");
NAPI.World.RequestIpl("bkr_biker_interior_placement_interior_6_biker_dlc_int_ware05_milo");
NAPI.World.RequestIpl("ex_exec_warehouse_placement_interior_1_int_warehouse_s_dlc_milo");
NAPI.World.RequestIpl("ex_exec_warehouse_placement_interior_0_int_warehouse_m_dlc_milo");
NAPI.World.RequestIpl("ex_exec_warehouse_placement_interior_2_int_warehouse_l_dlc_milo");
NAPI.World.RequestIpl("imp_impexp_interior_placement_interior_1_impexp_intwaremed_milo_");
NAPI.World.RequestIpl("bkr_bi_hw1_13_int");
player.SendChatMessage("~y~Clubs & Warehouses~s~ erfolgreich geladen!");
break;
case "SpecialLocations":
NAPI.World.RequestIpl("cargoship");
NAPI.World.RequestIpl("sunkcargoship");
NAPI.World.RequestIpl("SUNK_SHIP_FIRE");
NAPI.World.RequestIpl("redCarpet");
NAPI.World.RequestIpl("DES_StiltHouse_imapend");
NAPI.World.RequestIpl("DES_stilthouse_rebuild");
NAPI.World.RequestIpl("FINBANK");
NAPI.World.RequestIpl("TrevorsMP");
NAPI.World.RequestIpl("TrevorsTrailerTidy");
NAPI.World.RequestIpl("SP1_10_real_interior");
NAPI.World.RequestIpl("refit_unload");
NAPI.World.RequestIpl("post_hiest_unload");
NAPI.World.RequestIpl("FIBlobby");
player.SendChatMessage("~y~Special Locations~s~ erfolgreich geladen!");
break;
case "GRHYacht":
NAPI.World.RequestIpl("gr_heist_yacht2");
NAPI.World.RequestIpl("gr_heist_yacht2_bar");
NAPI.World.RequestIpl("gr_heist_yacht2_bedrm");
NAPI.World.RequestIpl("gr_heist_yacht2_bridge");
NAPI.World.RequestIpl("gr_heist_yacht2_enginrm");
NAPI.World.RequestIpl("gr_heist_yacht2_lounge");
player.SendChatMessage("~y~Gunrunning heist Yacht~s~ erfolgreich geladen!");
break;
case "DHYacht":
NAPI.World.RequestIpl("hei_yacht_heist");
NAPI.World.RequestIpl("hei_yacht_heist_enginrm");
NAPI.World.RequestIpl("hei_yacht_heist_Lounge");
NAPI.World.RequestIpl("hei_yacht_heist_Bridge");
NAPI.World.RequestIpl("hei_yacht_heist_Bar");
NAPI.World.RequestIpl("hei_yacht_heist_Bedrm");
NAPI.World.RequestIpl("hei_yacht_heist_DistantLights");
NAPI.World.RequestIpl("hei_yacht_heist_LODLights");
player.SendChatMessage("~y~Dignity heist Yacht~s~ erfolgreich geladen!");
break;
case "PYacht":
NAPI.World.RequestIpl("smboat");
NAPI.World.RequestIpl("smboat_lod");
player.SendChatMessage("~y~Party Yacht~s~ erfolgreich geladen!");
break;
case "AircraftCarrier":
NAPI.World.RequestIpl("hei_carrier");
NAPI.World.RequestIpl("hei_carrier_DistantLights");
NAPI.World.RequestIpl("hei_Carrier_int1");
NAPI.World.RequestIpl("hei_Carrier_int2");
NAPI.World.RequestIpl("hei_Carrier_int3");
NAPI.World.RequestIpl("hei_Carrier_int4");
NAPI.World.RequestIpl("hei_Carrier_int5");
NAPI.World.RequestIpl("hei_Carrier_int6");
NAPI.World.RequestIpl("hei_carrier_LODLights");
player.SendChatMessage("~y~Aircraft Carrier~s~ erfolgreich geladen!");
break;
case "BridgeTC":
NAPI.World.RequestIpl("canyonriver01_traincrash");
NAPI.World.RequestIpl("canyonriver01_traincrash");
player.SendChatMessage("~y~Bridge Train Crash~s~ erfolgreich geladen!");
break;
case "BridgeTN":
NAPI.World.RequestIpl("canyonriver01");
NAPI.World.RequestIpl("railing_start");
player.SendChatMessage("~y~Bridge Train Normal~s~ erfolgreich geladen!");
break;
case "NorthYankton":
NAPI.World.RequestIpl("prologue01");
NAPI.World.RequestIpl("prologue01c");
NAPI.World.RequestIpl("prologue01d");
NAPI.World.RequestIpl("prologue01e");
NAPI.World.RequestIpl("prologue01f");
NAPI.World.RequestIpl("prologue01g");
NAPI.World.RequestIpl("prologue01h");
NAPI.World.RequestIpl("prologue01i");
NAPI.World.RequestIpl("prologue01j");
NAPI.World.RequestIpl("prologue01k");
NAPI.World.RequestIpl("prologue01z");
NAPI.World.RequestIpl("prologue02");
NAPI.World.RequestIpl("prologue03");
NAPI.World.RequestIpl("prologue03b");
NAPI.World.RequestIpl("prologue03_grv_dug");
NAPI.World.RequestIpl("prologue_grv_torch");
NAPI.World.RequestIpl("prologue04");
NAPI.World.RequestIpl("prologue04b");
NAPI.World.RequestIpl("prologue04_cover");
NAPI.World.RequestIpl("des_protree_end");
NAPI.World.RequestIpl("des_protree_start");
NAPI.World.RequestIpl("prologue05");
NAPI.World.RequestIpl("prologue05b");
NAPI.World.RequestIpl("prologue06");
NAPI.World.RequestIpl("prologue06b");
NAPI.World.RequestIpl("prologue06_int");
NAPI.World.RequestIpl("prologue06_pannel");
NAPI.World.RequestIpl("plg_occl_00");
NAPI.World.RequestIpl("prologue_occl");
NAPI.World.RequestIpl("prologuerd");
NAPI.World.RequestIpl("prologuerdb");
player.SendChatMessage("~y~North Yankton~s~ erfolgreich geladen!");
break;
case "ONeilsFarmB":
NAPI.World.RequestIpl("farmint");
NAPI.World.RequestIpl("farm_burnt");
NAPI.World.RequestIpl("farm_burnt_props");
NAPI.World.RequestIpl("des_farmhs_endimap");
NAPI.World.RequestIpl("des_farmhs_end_occl");
player.SendChatMessage("~y~ONeils Farm Burnt~s~ erfolgreich geladen!");
break;
case "ONeilsFarm":
NAPI.World.RequestIpl("farm");
NAPI.World.RequestIpl("farm_props");
NAPI.World.RequestIpl("farm_int");
player.SendChatMessage("~y~ONeils Farm~s~ erfolgreich geladen!");
break;
case "Morgue":
NAPI.World.RequestIpl("coronertrash");
NAPI.World.RequestIpl("Coroner_Int_On");
player.SendChatMessage("~y~Morgue~s~ erfolgreich geladen!");
break;
}
}
#endregion
//
[Command("managefactionranks", "~m~Benutzung: ~s~/managefactionranks [Fraktions-ID]")]
public void CmdFactionManageFactionRanks(Client player, int factionID)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? 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);
}
}
[Command("setweather", "~m~Benutzung: ~s~/setweather [Wetter]")]
public void CmdAdminSetweather(Client player, string weather)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? 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.Notification.SendNotificationToAll("Das Wetter wurde auf ~g~ " + NAPI.World.GetWeather() + "~s~ geändert.", true);
}
else
{
NAPI.Chat.SendChatMessageToPlayer(player, "~w~Das Wetter konnte nicht geändert werden");
}
}
[Command("aspeed", "~m~Benutzung: ~s~/aspeed [Modifier]")] //TODO: Überarbeiten ?? SetPlayerVelocity ??
public void CmdAdminAspeed(Client player, float modifier)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? 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;
}
[Command("setmoney", "~m~Benutzung: ~s~/setmoney [Name] [Menge]")]
public void SetPlayerMoney(Client player, string receiver, int amount)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Client target = ClientService.GetClientByNameOrId(receiver);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
using (var dbContext = new DatabaseContext())
{
target.GetUser().GetBankAccount(dbContext).Balance = amount;
dbContext.SaveChanges();
}
player.SendChatMessage("~b~[ADMIN]~s~ Du hast das Geld von " + target.Name + " auf ~g~$" + amount + "~s~ gesetzt.");
target.SendChatMessage("~b~[ADMIN]~s~ Dein Geld wurde von Admin " + player.Name + " auf ~g~$" + amount + "~s~ gesetzt.");
}
[Command("givemoney", "~m~Benutzung: ~s~/givemoney [Name] [Menge]")]
public void GivePlayerMoney(Client player, string receiver, int amount)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Client target = ClientService.GetClientByNameOrId(receiver);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
using (var dbContext = new DatabaseContext())
{
target.GetUser().GetBankAccount(dbContext).Balance += amount;
dbContext.SaveChanges();
}
player.SendChatMessage("~b~[ADMIN]~s~ Du hast " + target.Name + " ~g~$" + amount + "~s~ gegeben.");
target.SendChatMessage("~b~[ADMIN]~s~ Admin " + player.Name + " hat dir ~g~$" + amount + "~s~ gegeben.");
}
[Command("setbusinessowner", "~m~Benutzung: ~s~/setbusinessowner [Name] [Business ID]")]
public void CmdAdminSetbusinessowner(Client player, string name, int businessid)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
Client target = ClientService.GetClientByNameOrId(name);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
if(target.GetUser().BusinessId != null)
{
player.SendChatMessage("~r~[FEHLER]~s~ Der Spieler besitzt momentan schon ein Business: ~o~" + BusinessManager.GetBusiness(target.GetUser().BusinessId).Name);
return;
}
BusinessBase business = BusinessManager.GetBusiness(businessid);
if(business == null)
{
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Business existiert nicht. ~m~/businesslist");
return;
}
if(business.GetOwner() != null)
{
player.SendChatMessage("~r~[FEHLER]~s~ Das Business hat momentan noch einen Besitzer: ~o~" + business.GetOwner().Name + "~s~. Entferne diesen Besitzer erst mit ~m~/clearbusiness");
return;
}
using(var dbContext = new DatabaseContext())
{
Entities.User targetUser = target.GetUser(dbContext);
targetUser.BusinessId = businessid;
dbContext.SaveChanges();
business.Update();
}
}
[Command("clearbusiness", "~m~Benutzung:~s~ /clearbusiness [Business ID]")]
public void CmdAdminClearbusiness(Client player, int businessid)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
BusinessBase business = BusinessManager.GetBusiness(businessid);
if (business == null)
{
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Business existiert nicht. ~m~/businesslist");
return;
}
using(var dbContext = new DatabaseContext())
{
Entities.User owner = business.GetOwner(dbContext);
if(owner == null)
{
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Business hat momentan keinen Besitzer.");
return;
}
owner.BusinessId = null;
business.GetBankAccount(dbContext).Balance = 0;
owner.GetClient()?.SendChatMessage("~b~[ADMIN]~s~ Dir wurde von ~y~" + player.Name + "~s~ dein Business entzogen.");
player.SendChatMessage("~b~[ADMIN]~s~ Du hast ~y~" + owner.Name + "~s~ sein Business ~o~" + business.Name + "~s~ entzogen.");
dbContext.SaveChanges();
business.Update();
}
}
[Command("setbusinessbankbalance", "~m~Benutzung: ~s~/setbusinessbankbalance [Business ID] [Menge]")]
public void CmdAdminGivebusinessbankbalance(Client player, int businessid, int amount)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
BusinessBase business = BusinessManager.GetBusiness(businessid);
if (business == null)
{
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Business existiert nicht. ~m~/businesslist");
return;
}
BankManager.SetMoney(player, business, amount, "Admin");
}
[Command("showtuningmenu", "~m~Benutzung: ~s~/showtuningmenu")]
public void CmdAdminShowtuningmenu(Client player)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
player.TriggerEvent("showTuningMenu");
}
[Command("interior", "~m~Benutzung: ~s~/interior [Add / Remove / SetEnterPosition / SetExitPosition] [Name]")]
public void CmdAdminInterior(Client player, string option1, string option2)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.HEADADMIN) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
option1 = option1.ToString();
if(option1 != "add" && option1 != "remove" && option1 != "setenterposition" && option1 != "setexitposition")
{
player.SendChatMessage("~m~Benutzung: ~s~/interior [Add / Remove / SetEnterPosition / SetExitPosition] [Name]");
return;
}
switch(option1)
{
case "add":
if(InteriorManager.GetInteriorByName(option2) != null)
{
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Interior existiert schon.");
return;
}
using(var dbContext = new DatabaseContext())
{
Interior interiorAdd = new Interior
{
Name = option2
};
dbContext.Interiors.Add(interiorAdd);
dbContext.SaveChanges();
player.SendChatMessage("~b~[ADMIN]~s~ Das Interior ~y~" + option2 + "~s~ wurde erstellt. ~m~ID: " + interiorAdd.Id);
}
break;
case "remove":
using (var dbContext = new DatabaseContext())
{
Interior interiorRemove = InteriorManager.GetInteriorByName(option2, dbContext);
if(interiorRemove == null)
{
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Interior existiert nicht.");
return;
}
TextLabel enT = InteriorManager.GetInteriorEnterTextLabel(interiorRemove);
TextLabel exT = InteriorManager.GetInteriorExitTextLabel(interiorRemove);
Marker enM = InteriorManager.GetInteriorEnterMarker(interiorRemove);
Marker exM = InteriorManager.GetInteriorExitMarkers(interiorRemove);
if (enT != null) enT.Delete();
if (exT != null) exT.Delete();
if (enM != null) enM.Delete();
if (exM != null) exM.Delete();
InteriorManager.DeleteInterior(interiorRemove);
dbContext.Interiors.Remove(interiorRemove);
dbContext.SaveChanges();
}
player.SendChatMessage("~b~[ADMIN]~s~ Das Interior wurde gelöscht.");
break;
case "setenterposition":
using (var dbContext = new DatabaseContext())
{
Interior interior = InteriorManager.GetInteriorByName(option2, dbContext);
if (interior == null)
{
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Interior existiert nicht.");
return;
}
interior.EnterPosition = player.Position;
dbContext.SaveChanges();
InteriorManager.LoadInteriors();
}
player.SendChatMessage("~b~[ADMIN]~s~ Die Eingangs-Position vom Interior ~y~" + option2 + "~s~ wurde gesetzt.");
break;
case "setexitposition":
using (var dbContext = new DatabaseContext())
{
Interior interior = InteriorManager.GetInteriorByName(option2, dbContext);
if (interior == null)
{
player.SendChatMessage("~r~[FEHLER]~s~ Dieses Interior existiert nicht.");
return;
}
interior.ExitPosition = player.Position;
dbContext.SaveChanges();
InteriorManager.LoadInteriors();
}
player.SendChatMessage("~b~[ADMIN]~s~ Die Ausgangs-Position vom Interior ~y~" + option2 + "~s~ wurde gesetzt.");
break;
}
}
#endregion
#region ALevel1338
[Command("whitelist", "~m~Benutzung: ~s~/whitelist [Add / Remove] [Socialclub Name]")]
public void CmdAdminWhitelist(Client player, string option, string scName)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.PROJEKTLEITUNG) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
option = option.ToLower();
if (option != "add" && option != "remove")
{
player.SendChatMessage("~m~Benutzung: ~s~/whitelist [Add / Remove] [Socialclub Name]");
return;
}
using (var dbContext = new DatabaseContext())
{
if (option == "add")
{
if (dbContext.WhitelistEntries.Any(w => w.SocialClubName.ToLower() == scName.ToLower()))
{
player.SendChatMessage("~r~[FEHLER]~s~ Dieser Name ist schon auf der Whitelist.");
return;
}
Whitelist whitelist = new Whitelist { SocialClubName = scName.ToLower() };
dbContext.WhitelistEntries.Add(whitelist);
player.SendChatMessage("~b~[ADMIN]~s~ ~y~" + scName + "~s~ wurde erfolgreich zur Whitelist hinzugefügt.");
}
else if (option == "remove")
{
if (!dbContext.WhitelistEntries.Any(w => w.SocialClubName.ToLower() == scName.ToLower()))
{
player.SendChatMessage("~r~[FEHLER]~s~ Dieser Name ist nicht auf der Whitelist.");
return;
}
Whitelist whitelist = dbContext.WhitelistEntries.FirstOrDefault(w => w.SocialClubName.ToLower() == scName.ToLower());
dbContext.WhitelistEntries.Remove(whitelist);
player.SendChatMessage("~b~[ADMIN]~s~ ~y~" + scName + "~s~ wurde erfolgreich aus der Whitelist entfernt.");
}
dbContext.SaveChanges();
}
}
[Command("makeadmin", "~m~Benutzung: ~s~/makeadmin [Name] [Adminlevel]")]
public void CmdAdminSetadmin(Client player, string name, int rank)
{
if (!player.GetUser()?.IsAdmin(AdminLevel.PROJEKTLEITUNG) ?? true)
{
ChatService.NotAuthorized(player);
return;
}
if (!Enum.IsDefined(typeof(AdminLevel), rank))
{
player.SendChatMessage("~r~[FEHLER]~s~ Dieser Adminrang ist nicht definiert.");
return;
}
Client target = ClientService.GetClientByNameOrId(name);
if (target == null || !target.IsLoggedIn())
{
ChatService.PlayerNotFound(player);
return;
}
using (var dbContext = new DatabaseContext())
{
target.GetUser(dbContext).AdminLevel = (AdminLevel)rank;
dbContext.SaveChanges();
}
target.SendChatMessage("Du wurdest durch " + player.Name + " auf Adminlevel " + target.GetUser().AdminLevel.GetName() + ":(" + rank + ") gesetzt.");
player.SendChatMessage("Du hast " + target.Name + " auf Adminlevel " + target.GetUser().AdminLevel.GetName() + ":(" + rank + ") gesetzt.");
}
#endregion
/* ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// */
//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;
int playerSeat = player.VehicleSeat;
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 = playerVehicle.PrimaryColor,
SecondaryColor = playerVehicle.SecondaryColor,
Locked = playerVehicle.Locked,
Active = true
};
saveVehicle.UserVehicles.Add(dataSet);
saveVehicle.SaveChanges();
player.SetIntoVehicle(dataSet.Spawn(playerVehicle), -1);
}
}
else player.SendChatMessage("~m~Du sitzt in keinem Fahrzeug!");
}
//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, int 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);
if(receiverUser == null)
{
player.SendChatMessage("~r~[FEHLER]~s~ Diese Fraktion existiert nicht.");
return;
}
BankManager.TransferMoney(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.TransferMoney(player.GetUser(), receiverUser, sVehicle.Price, "Fahrzeug gekauft: " + NAPI.Vehicle.GetVehicleDisplayName(sVehicle.Model));
//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", 255, 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();
}
}
}