private void OpenInteractionMenu() { new Menu($"{Label} | Interaktionsmeny") { Items = new List <MenuItem> { new MenuItem("revive_nearest", "Återuppliva") }, Callback = (menu, item, operation) => { if (operation.Type != MenuOperationType.Select) { return; } var player = GetClosestPlayer(1.5f, self => API.IsEntityDead(API.GetPlayerPed(self))); if (player != -1) { var user = new AtlasUser { Handle = API.GetPlayerServerId(player) }; user.Send("ambulance:revive"); } else { Cache.Player.ShowNotification("Det finns ingen i närheten som du kan återuppliva!"); } } }.Commit(); }
public async Task SaveOperation(AtlasUser user) { await user.Save(); foreach (var character in user.Characters) { await character.Save(); } }
private void OpenInteractionMenu() { new Menu("Interaktionsmeny") { Items = new List <MenuItem> { new MenuItem("give_idcard", "Visa ID"), new MenuItem("look_idcard", "Kolla på ditt ID"), new MenuItem("view_bills", "Dina fakturor"), }, Callback = (menu, item, operation) => { if (operation.Type != MenuOperationType.Select) { return; } if (item.Seed == "view_bills") { ViewBills(); } else if (item.Seed == "look_idcard") { var character = Cache.Character; LookAtId(character, new string( (character.DateOfBirth + character.LastDigits).Replace("-", "").Skip(2).ToArray())); } else if (item.Seed == "give_idcard") { var player = GetClosestPlayer(3f, self => true); if (player != -1) { var character = Cache.Character; var ssn = new string((character.DateOfBirth + character.LastDigits).Replace("-", "").Skip(2) .ToArray()); var user = new AtlasUser { Handle = API.GetPlayerServerId(player) }; user.Send("id:card:show", character, ssn); } else { Cache.Player.ShowNotification( "Det finns ingen i närheten som du kan ge ditt id till!"); } } } }.Commit(); }
public static async Task Save(this AtlasUser user) { using (var context = new StorageContext()) using (var transaction = context.BeginTransaction()) { context.Users.AddOrUpdate(user); await context.SaveChangesAsync(); transaction.Commit(); Logger.Debug( $"[User] [{user.Seed}] Saving `{user.LastName}` last changes and commiting it to `{context.Database.Connection.Database}`."); } }
public static void Send(this AtlasUser user, string target, params object[] payloads) { if (payloads == null) { payloads = new object[] { false } } ; var modified = new object[2 + payloads.Length]; var index = 2; modified[0] = user.Handle; modified[1] = target; foreach (var payload in payloads) { modified[index] = payload; index++; } EventSystem.GetModule().Send("user:redirect", modified); } }
public static void PostUpdates(this AtlasUser user) { EventSystem.GetModule().Send("user:postupdates", user); }
public static void Send(this AtlasUser user, string target) { Send(user, target, null); }
public override void Begin() { EventSystem.Attach("user:login", new AsyncEventCallback(async metadata => { var player = new PlayerList()[metadata.Sender]; var steam = player.Identifiers.FirstOrDefault(self => self.StartsWith("steam:"))?.ToString(); var connectedBefore = true; using (var context = new StorageContext()) using (var transaction = context.BeginTransaction()) { var user = context.Users.FirstOrDefault(self => self.SteamId == steam); var connection = new Tuple <string, DateTime>(player.EndPoint, DateTime.Now); if (user == null) { user = new AtlasUser { Seed = Seed.Generate(), SteamId = steam, Role = Role.Member, ConnectionHistory = new List <Tuple <string, DateTime> >(), Metadata = new UserMetadata() }; connectedBefore = false; } user.Handle = int.Parse(player.Handle); user.LastName = player.Name; user.LatestActivity = DateTime.Now; var last = user.ConnectionHistory.LastOrDefault(); if (last == null || last.Item1 != connection.Item1) { user.ConnectionHistory.Add(connection); } context.Users.AddOrUpdate(user); await context.SaveChangesAsync(); transaction.Commit(); Logger.Info(connectedBefore ? $"[User] [{user.Seed}] [{user.LastName}] Has connected to the server ({connection.Item1})" : $"[User] [{steam}] [{player.Name}] Has connected for the first time ({connection.Item1})"); Atlas.ActiveUsers.Add(user); return(user); } })); EventSystem.Attach("user:save", new AsyncEventCallback(async metadata => { await Atlas.Lookup(metadata.Sender).Save(); return(null); })); EventSystem.Attach("user:fetch", new EventCallback(metadata => { var seed = metadata.Find <string>(0); return(Atlas.ActiveUsers.FirstOrDefault(self => self.Seed == seed)); })); EventSystem.Attach("user:postupdates", new EventCallback(metadata => { var user = metadata.Find <AtlasUser>(0); Atlas.ActiveUsers.RemoveAll(self => self.Seed == user.Seed); Atlas.ActiveUsers.Add(user); return(null); })); EventSystem.Attach("user:redirect", new EventCallback(metadata => { EventSystem.Send(metadata.Find <string>(1), metadata.Find <int>(0), metadata.AsEnumerable().Skip(2).ToArray()); return(null); })); Atlas.EventRegistry["playerDropped"] += new Action <Player, string>(OnUserDisconnect); }
public static void Send(this AtlasUser user, string target, params object[] payloads) { EventSystem.GetModule().Send(target, user.Handle, payloads); }
private void OpenInteractionMenu() { new Menu($"{Label} | Interaktionsmeny") { Items = new List <MenuItem> { new MenuItem("handcuff", "Sätt på handbojor"), new MenuItem("remove_handcuffs", "Ta bort handbojor"), new MenuItem("drag", "Dra närmsta person"), new MenuItem("bill", "Skriv en böter") }, Callback = (menu, item, operation) => { if (operation.Type != MenuOperationType.Select) { return; } if (item.Seed == "handcuff") { var player = GetClosestPlayer(1.5f, self => { var decors = new EntityDecorModule { Id = API.GetPlayerPed(self) }; return(!decors.GetBoolean("Player.IsHandcuffed")); }); if (player != -1) { var user = new AtlasUser { Handle = API.GetPlayerServerId(player) }; user.Send("handcuff:toggle", true); } else { Cache.Player.ShowNotification("Det finns ingen i närheten som du kan handboja!"); } } else if (item.Seed == "remove_handcuffs") { var player = GetClosestPlayer(1.5f, self => { var decors = new EntityDecorModule { Id = API.GetPlayerPed(self) }; return(decors.GetBoolean("Player.IsHandcuffed")); }); if (player != -1) { var user = new AtlasUser { Handle = API.GetPlayerServerId(player) }; user.Send("handcuff:toggle", false); } else { Cache.Player.ShowNotification("Det finns ingen i närheten som har handbojor på sig!"); } } else if (item.Seed == "drag") { var player = GetClosestPlayer(2f, self => { var decors = new EntityDecorModule { Id = API.GetPlayerPed(self) }; return(decors.GetBoolean("Player.IsHandcuffed")); }); if (player != -1) { var user = new AtlasUser { Handle = API.GetPlayerServerId(player) }; user.Send("handcuff:drag:toggle", API.GetPlayerServerId(API.PlayerId())); } else { Cache.Player.ShowNotification("Det finns ingen i närheten som har handbojor på sig!"); } } else if (item.Seed == "bill") { var character = Cache.Character; BillingManager.GetModule().CreateBill(new BillSender { Business = Label, Individual = character.Fullname }, new BillReceiver { Type = BillReceiverType.Individual, Name = "" }); } } }.Commit(); }