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