示例#1
0
        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();
        }
示例#2
0
        public async Task SaveOperation(AtlasUser user)
        {
            await user.Save();

            foreach (var character in user.Characters)
            {
                await character.Save();
            }
        }
示例#3
0
        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();
        }
示例#4
0
        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}`.");
                }
        }
示例#5
0
        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);
        }
    }
示例#6
0
 public static void PostUpdates(this AtlasUser user)
 {
     EventSystem.GetModule().Send("user:postupdates", user);
 }
示例#7
0
 public static void Send(this AtlasUser user, string target)
 {
     Send(user, target, null);
 }
示例#8
0
        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);
        }
示例#9
0
 public static void Send(this AtlasUser user, string target, params object[] payloads)
 {
     EventSystem.GetModule().Send(target, user.Handle, payloads);
 }
示例#10
0
        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();
        }