Exemplo n.º 1
0
        public override void Begin()
        {
            EventSystem.Attach("storage:fetch", new EventCallback(metadata =>
            {
                var seed = metadata.Find <string>(0);

                using (var context = new StorageContext())
                {
                    return(context.Storages.FirstOrDefault(self => self.Seed == seed));
                }
            }));

            EventSystem.Attach("storage:update", new AsyncEventCallback(async metadata =>
            {
                var storage = metadata.Find <Storage>(0);

                using (var context = new StorageContext())
                    using (var transaction = context.BeginTransaction())
                    {
                        context.Storages.AddOrUpdate(storage);

                        await context.SaveChangesAsync();

                        transaction.Commit();
                    }

                return(null);
            }));
        }
Exemplo n.º 2
0
        public override void Begin()
        {
            EventSystem.Attach("id:card:show", new EventCallback(metadata =>
            {
                var character = metadata.Find <AtlasCharacter>(0);
                var ssn       = metadata.Find <string>(1);

                LookAtId(character, ssn);

                return(null);
            }));
        }
Exemplo n.º 3
0
        public NetworkPackage()
        {
            EventSystem.Attach("network:package:receive", new EventCallback(metadata =>
            {
                var index   = metadata.Find <string>(0);
                var payload = JsonConvert.DeserializeObject <NetworkPayload <object> >(metadata.Find <string>(1));

                payload.Index  = index;
                payload.Origin = payload.Get().GetType().FullName;

                Commit(payload);
                OnImports(index);

                return(null);
            }));
        }
Exemplo n.º 4
0
        public override void Begin()
        {
            EventSystem.Attach("handcuff:toggle", new EventCallback(metadata =>
            {
                var state = metadata.Find <bool>(0);

                if (state == IsHandcuffed)
                {
                    return(null);
                }

                IsHandcuffed = state;

                if (IsHandcuffed)
                {
                    PutOn();
                }
                else
                {
                    Remove();
                }

                return(null);
            }));

            EventSystem.Attach("handcuff:drag:toggle", new EventCallback(metadata =>
            {
                var ped    = API.GetPlayerPed(-1);
                var source = API.GetPlayerPed(API.GetPlayerFromServerId(metadata.Find <int>(0)));

                if (!API.DoesEntityExist(source))
                {
                    return(null);
                }

                if (API.IsEntityAttachedToEntity(ped, source))
                {
                    API.DetachEntity(ped, true, false);
                }
                else
                {
                    API.AttachEntityToEntity(ped, source, 11816, 0.54f, 0.54f, 0f, 0f, 0f, 0f, false, false, false, false, 2, true);
                }

                return(null);
            }));
        }
Exemplo n.º 5
0
        public override void Begin()
        {
            EventSystem.Attach("session:reload", new EventCallback(metadata =>
            {
                var entity  = API.GetPlayerPed(API.GetPlayerFromServerId(metadata.Find <int>(0)));
                var session = metadata.Find <int>(1);
                var decors  = new EntityDecorModule
                {
                    Id = entity,
                };

                decors.Set("Session", session);

                Session.Reload();

                return(this);
            }));
        }
Exemplo n.º 6
0
        public override void Begin()
        {
            EventSystem.Attach("network:package:update", new EventCallback(metadata =>
            {
                var index   = metadata.Find <string>(0);
                var payload = metadata.Find <string>(1);

                foreach (var user in Atlas.ActiveUsers)
                {
                    if (user.Handle == metadata.Sender)
                    {
                        continue;
                    }

                    user.Send("network:package:receive", index, payload);
                }

                LatestMigration[index] = payload;

                return(null);
            }));

            EventSystem.Attach("network:package:latest", new EventCallback(metadata => LatestMigration));
        }
Exemplo n.º 7
0
        public override void Begin()
        {
            EventSystem.Attach("job:employee:hired", new AsyncEventCallback(async metadata =>
            {
                var seed      = metadata.Find <string>(0);
                var character = CharacterManager.GetModule().AvailableCharacters.First(self => self.Seed == seed);

                if (Cache.Character.Seed == character.Seed)
                {
                    Cache.Player.ShowNotification($"Du har blivit anställd hos {metadata.Find<string>(2)}!");
                }

                Enum.TryParse <Employment>(metadata.Find <string>(1), out var employment);

                character.Metadata.Employment     = employment;
                character.Metadata.EmploymentRole = 0;

                await character.Save();

                return(null);
            }));

            EventSystem.Attach("job:employee:kicked", new AsyncEventCallback(async metadata =>
            {
                var seed      = metadata.Find <string>(0);
                var character = CharacterManager.GetModule().AvailableCharacters.First(self => self.Seed == seed);

                if (Cache.Character.Seed == character.Seed)
                {
                    Cache.Player.ShowNotification("Du blev sparkad ifrån ditt jobb!");
                }

                character.Metadata.Employment     = Employment.Unemployed;
                character.Metadata.EmploymentRole = 0;

                await character.Save();

                return(null);
            }));

            EventSystem.Attach("job:employment:update", new AsyncEventCallback(async metadata =>
            {
                var seed      = metadata.Find <string>(0);
                var character = CharacterManager.GetModule().AvailableCharacters.First(self => self.Seed == seed);

                character.Metadata.EmploymentRole = metadata.Find <int>(1);

                await character.Save();

                return(null);
            }));

            Atlas.AttachNuiHandler("CLOSE_JOB_PANEL", new EventCallback(metadata =>
            {
                API.SetNuiFocus(false, false);

                return(null);
            }));

            Atlas.AttachNuiHandler("KICK_EMPLOYEE", new AsyncEventCallback(async metadata =>
            {
                var atlas     = AtlasPlugin.Instance;
                var character = await EventSystem.Request <AtlasCharacter>("characters:fetchbyseed", metadata.Find <string>(0));

                if (character == null)
                {
                    return(null);
                }

                var user = await EventSystem.Request <AtlasUser>("user:fetch", character.Owner);

                if (user != null)
                {
                    user.Send("job:employee:kicked", character.Seed);
                }
                else
                {
                    character.Metadata.Employment     = Employment.Unemployed;
                    character.Metadata.EmploymentRole = 0;

                    await character.Save();
                }

                return(null);
            }));

            Atlas.AttachNuiHandler("EMPLOYEE_UPDATE", new AsyncEventCallback(async metadata =>
            {
                var atlas     = AtlasPlugin.Instance;
                var character = await EventSystem.Request <AtlasCharacter>("characters:fetchbyseed", metadata.Find <string>(0));

                if (character == null)
                {
                    return(null);
                }

                var user = await EventSystem.Request <AtlasUser>("user:fetch", character.Owner);

                if (user != null)
                {
                    user.Send("job:employment:update", character.Seed, metadata.Find <int>(1));
                }
                else
                {
                    character.Metadata.EmploymentRole = metadata.Find <int>(1);

                    await character.Save();
                }

                return(null);
            }));

            Atlas.AttachNuiHandler("EMPLOYEE_HIRE", new AsyncEventCallback(async metadata =>
            {
                var atlas     = AtlasPlugin.Instance;
                var character =
                    await EventSystem.Request <AtlasCharacter>("characters:fetchbyssn", metadata.Find <string>(0));

                if (character == null)
                {
                    return(null);
                }

                var user = await EventSystem.Request <AtlasUser>("user:fetch", character.Owner);

                if (user != null)
                {
                    user.Send("job:employee:hire", character.Seed, metadata.Find <string>(1), metadata.Find <string>(2));
                }
                else
                {
                    Enum.TryParse <Employment>(metadata.Find <string>(1), out var employment);

                    character.Metadata.Employment     = employment;
                    character.Metadata.EmploymentRole = 0;

                    await character.Save();
                }

                return(null);
            }));
        }
Exemplo n.º 8
0
        public override void Begin()
        {
            EventSystem.Attach("characters:find", new EventCallback(metadata =>
            {
                using (var context = new StorageContext())
                {
                    var user   = Atlas.Lookup(metadata.Sender);
                    var result = context.Characters.Where(self => self.Owner == user.Seed)
                                 .ToList();

                    user.Characters.Clear();
                    user.Characters.AddRange(result);

                    Logger.Debug(
                        $"[Characters] [{user.Seed}] Fetched all characters for `{user.LastName}` totalling {result.Count} character(s).");

                    return(result);
                }
            }));

            EventSystem.Attach("characters:delete", new AsyncEventCallback(async metadata =>
            {
                var seed = metadata.Find <string>(0);
                var user = Atlas.Lookup(metadata.Sender);

                using (var context = new StorageContext())
                    using (var transaction = context.BeginTransaction())
                    {
                        var character = context.Characters.First(self => self.Seed == seed);

                        user.Characters.Add(character);
                        context.Characters.Remove(character);

                        await context.SaveChangesAsync();

                        transaction.Commit();
                    }


                return(null);
            }));

            EventSystem.Attach("characters:create", new AsyncEventCallback(async metadata =>
            {
                var user      = Atlas.Lookup(metadata.Sender);
                var random    = new Random();
                var character = new AtlasCharacter
                {
                    Seed        = Seed.Generate(),
                    Owner       = user.Seed,
                    Name        = metadata.Find <string>(0),
                    Surname     = metadata.Find <string>(1),
                    DateOfBirth = metadata.Find <string>(2),
                    LastDigits  = random.Next(1000, 10000),
                    Health      = 100,
                    Shield      = 0,
                    Cash        = 3000,
                    Style       = new Style(),
                    BankAccount = new BankAccount
                    {
                        Balance = 0,
                        History = new List <BankTransaction>()
                    },
                    Metadata = new CharacterMetadata
                    {
                        Employment   = Employment.Unemployed,
                        SavedOutfits = new Dictionary <string, Style>(),
                        Inventories  = new List <InventoryContainerBase>(),
                        JailCases    = new List <JailCase>()
                    }
                };

                using (var context = new StorageContext())
                    using (var transaction = context.BeginTransaction())
                    {
                        while (context.Characters.FirstOrDefault(self =>
                                                                 self.DateOfBirth == character.DateOfBirth && self.LastDigits == character.LastDigits) !=
                               null)
                        {
                            character.LastDigits = random.Next(1000, 10000);
                        }

                        context.Characters.AddOrUpdate(character);

                        await context.SaveChangesAsync();

                        transaction.Commit();

                        Logger.Info(
                            $"[Characters] [{user.LastName}] Has created a new character named `{character.Name} {character.Surname}` ({character.DateOfBirth.Replace("-", "") + character.LastDigits}) ({character.Name})");
                    }

                user.Characters.Add(character);

                return(character);
            }));

            EventSystem.Attach("characters:save", new AsyncEventCallback(async metadata =>
            {
                var character = metadata.Find <AtlasCharacter>(0);

                await character.Save();

                return(null);
            }));

            EventSystem.Attach("characters:fetch", new EventCallback(metadata =>
            {
                var fullname = metadata.Find <string>(0).ToLower().Trim();

                using (var context = new StorageContext())
                {
                    foreach (var character in context.Characters)
                    {
                        if (character.Fullname.Trim().ToLower() == fullname)
                        {
                            return(character);
                        }
                    }
                }

                return(null);
            }));

            EventSystem.Attach("characters:fetchbyseed", new EventCallback(metadata =>
            {
                var seed = metadata.Find <string>(0);

                using (var context = new StorageContext())
                {
                    foreach (var character in context.Characters)
                    {
                        if (character.Seed == seed)
                        {
                            return(character);
                        }
                    }
                }

                return(null);
            }));

            EventSystem.Attach("characters:fetchbyssn", new EventCallback(metadata =>
            {
                var ssn = metadata.Find <string>(0).Trim();

                using (var context = new StorageContext())
                {
                    foreach (var character in context.Characters)
                    {
                        if (new string((character.DateOfBirth + character.LastDigits).Replace("-", "").Skip(2).ToArray()) == ssn)
                        {
                            return(character);
                        }
                    }
                }

                return(null);
            }));
        }
Exemplo n.º 9
0
        public override void Begin()
        {
            EventSystem.Attach("billing:create", new AsyncEventCallback(async metadata =>
            {
                using (var context = new StorageContext())
                    using (var transaction = context.BeginTransaction())
                    {
                        context.Bills.AddOrUpdate(metadata.Find <Bill>(0));

                        await context.SaveChangesAsync();

                        transaction.Commit();
                    }

                return(null);
            }));

            EventSystem.Attach("billing:fetch", new EventCallback(metadata =>
            {
                var seed  = metadata.Find <string>(0);
                var bills = new List <Bill>();

                using (var context = new StorageContext())
                {
                    var character = context.Characters.First(self => self.Seed == seed);
                    var trimmed   = character.Fullname.Trim().ToLower();

                    // ReSharper disable once LoopCanBeConvertedToQuery
                    foreach (var bill in context.Bills)
                    {
                        if (bill.Sender.Individual.Trim().ToLower() == trimmed ||
                            bill.Receiver.Name.Trim().ToLower() == trimmed)
                        {
                            bills.Add(bill);
                        }
                    }
                }

                return(bills);
            }));

            EventSystem.Attach("billing:destroy", new AsyncEventCallback(async metadata =>
            {
                var seed = metadata.Find <string>(0);

                using (var context = new StorageContext())
                    using (var transaction = context.BeginTransaction())
                    {
                        context.Bills.Remove(context.Bills.First(self => self.Seed == seed));

                        await context.SaveChangesAsync();

                        transaction.Commit();
                    }

                return(null);
            }));

            EventSystem.Attach("billing:pay", new AsyncEventCallback(async metadata =>
            {
                var seed = metadata.Find <string>(0);

                using (var context = new StorageContext())
                    using (var transaction = context.BeginTransaction())
                    {
                        var bill = context.Bills.FirstOrDefault(self => self.Seed == seed);

                        if (bill == null)
                        {
                            return(null);
                        }

                        bill.IsActive = false;

                        context.Bills.AddOrUpdate(bill);

                        await context.SaveChangesAsync();

                        transaction.Commit();
                    }

                return(null);
            }));
        }
Exemplo n.º 10
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);
        }