using GTANetworkAPI; using Newtonsoft.Json; using ReallifeGamemode.Server.Entities; using ReallifeGamemode.Server.Extensions; using ReallifeGamemode.Server.Models; using ReallifeGamemode.Server.Services; using ReallifeGamemode.Server.Util; using System; using System.Collections.Generic; using System.Linq; using System.Text; /** * @overview Life of German Reallife - Managers Interaction (InteractionManager.cs) * @author VegaZ * @copyright (c) 2008 - 2018 Life of German */ namespace ReallifeGamemode.Server.Managers { public class InteractionManager : Script { #region Umgebungsinteraktionen PFEILTASTE-HOCH #endregion #region Eigeninteraktionen PFEILTASTE-RUNTER [RemoteEvent("CLIENT:InteractionMenu_AcceptInvite")] public void InteractionMenuAcceptInvite(Client player, string type) { if (type != "Fraktion" || type != "Gruppe") return; if (type == "Fraktion") // Fraktions Invite annehmen { if (!player.HasData("accept_faction_invite")) { ChatService.Error(player, "Du hast keine Einladung in eine Fraktion erhalten"); return; } Client leader = NAPI.Player.GetPlayerFromHandle((NetHandle)player.GetData("accept_faction_invite")); player.ResetData("accept_faction_invite"); if (leader == null) { ChatService.Error(player, "Die Einladung ist abgelaufen"); return; } using (var dbContext = new DatabaseContext()) { User u = leader.GetUser(dbContext); User own = player.GetUser(dbContext); own.FactionId = u.FactionId; own.FactionLeader = false; own.FactionRankId = dbContext .FactionRanks .OrderBy(x => x.Order) .Where(r => r.FactionId == own.FactionId) .FirstOrDefault()?.Id ?? null; leader.SendChatMessage("!{02FCFF}" + player.Name + " hat die Einladung angenommen."); player.SendChatMessage("!{02FCFF}Du hast die Einladung angenommen."); dbContext.SaveChanges(); } } else if (type == "Gruppe") // Gruppen Einladung annehmen { if (!player.HasData("accept_group_invite")) { ChatService.Error(player, "Du hast keine Einladung in eine Gruppe erhalten"); return; } Client leader = NAPI.Player.GetPlayerFromHandle((NetHandle)player.GetData("accept_group_invite")); player.ResetData("accept_group_invite"); if (leader == null) { ChatService.Error(player, "Die Einladung ist abgelaufen"); return; } using (var dbContext = new DatabaseContext()) { User u = leader.GetUser(dbContext); User own = player.GetUser(dbContext); own.Group = u.Group; own.GroupRank = GroupRank.MEMBER; leader.SendChatMessage("!{02FCFF}" + player.Name + " hat die Einladung angenommen."); player.SendChatMessage("!{02FCFF}Du hast die Einladung angenommen."); dbContext.SaveChanges(); } } } [RemoteEvent("CLIENT:InteractionMenu_InviteFaction")] public void InteractionMenuInviteFaction(Client player, string nameOrId) { if (player.GetUser()?.FactionId == null || player.GetUser().FactionLeader == false) { ChatService.NotAuthorized(player); return; } Client target = ClientService.GetClientByNameOrId(nameOrId); if (target == null || !target.IsLoggedIn()) { ChatService.PlayerNotFound(player); return; } if (target.GetUser()?.FactionId != null) { ChatService.Error(player, "Dieser Spieler ist schon in einer Fraktion"); return; } target.SetData("accept_faction_invite", player.Handle); player.SendChatMessage("!{02FCFF}Du hast dem Spieler " + target.Name + " eine Einladung in deine Fraktion gesendet."); target.SendChatMessage("!{02FCFF}Du hast von " + player.Name + " eine Einladung in die Fraktion \"" + player.GetUser().Faction.Name + "\" erhalten."); target.SendChatMessage("!{02FCFF}Benutze das Interaktionsmenü, um die Einladung anzunehmen"); } #endregion #region Spielerinteraktionen PFEILTASTE-LINKS [RemoteEvent("openTradeInventory")] public void OpenTradeInventory(Client player, string targetPlayer) { InventoryManager.GetUserItems(player); player.TriggerEvent("openTradeMenu", targetPlayer); } [RemoteEvent("sendTradeItemsToPartner")] public void SendTradeItemsToPartner(Client player, string tradeItemArray, int tradePrize, string tradePartnerName) { var tradeItems = JsonConvert.DeserializeObject(tradeItemArray); Client tradePartner = ClientService.GetClientByNameOrId(tradePartnerName); InventoryManager.GetUserItems(player); tradePartner.TriggerEvent("showTradeRequest", player.Name, tradeItems, tradePrize); player.TriggerEvent("startTradeRequestTimer"); } [RemoteEvent("tradeDecision")] public void TradeDecision(Client player, string tradeSelection, string tradeItemArray, string tradeRequesterName) { var tradeItems = JsonConvert.DeserializeObject(tradeItemArray); Client tradeRequester = ClientService.GetClientByNameOrId(tradeRequesterName); if (tradeSelection == "accept") { InventoryManager.GetUserItems(player); tradeRequester.TriggerEvent("clearTradeItems"); player.TriggerEvent("showTradeItems", tradeItemArray); //TODO: Geld abziehen } else { tradeRequester.TriggerEvent("unlockTradeItems"); } } #endregion #region Fraktionsinteraktionen / Jobinteraktionen PFEILTASTE-RECHTS #endregion } }