Exemplo n.º 1
0
        public static void Synchronize(this AtlasCharacter character)
        {
            var player = Cache.Player;

            player.User.Characters.RemoveAll(self => self.Seed == character.Seed);
            player.User.Characters.Add(character);
        }
Exemplo n.º 2
0
        private void LookAtId(AtlasCharacter character, string ssn)
        {
            API.SendNuiMessage(new JsonBuilder().Add("Operation", "SHOW_ID_CARD").Add("Character", character)
                               .Add("SSN", ssn).Build());

            LookingAtId = true;
        }
Exemplo n.º 3
0
        public static async Task Save(this AtlasCharacter character)
        {
            character.Metadata.LastPosition = Cache.Entity.Position;

            await EventSystem.GetModule().Request <object>("characters:save", character);

            Logger.Info($"[Characters] Saved `{character.Name} {character.Surname}` and it's changed assets.");
        }
Exemplo n.º 4
0
        public async Task ResetMask(AtlasPlayer player, AtlasCharacter character)
        {
            var equipped = character.Metadata.EquippedMask;

            character.Style.Mask.Current     = equipped?.Item1 ?? 0;
            character.Style.MaskType.Current = equipped?.Item2 ?? 0;

            await character.Style.Commit(player);
        }
Exemplo n.º 5
0
        public static void Revive(this AtlasCharacter character, Position position)
        {
            var ped = Cache.Entity.Id;

            API.RemoveAllPedWeapons(ped, false);
            API.ClearPedTasksImmediately(ped);
            API.ClearPlayerWantedLevel(API.PlayerId());
            API.SetEntityVisible(ped, true, true);
            API.SetEntityHealth(ped, API.GetEntityMaxHealth(ped));
            API.NetworkResurrectLocalPlayer(position.X, position.Y, position.Z, position.Heading, false, false);
            API.ClearPedBloodDamage(ped);
        }
Exemplo n.º 6
0
        public static async Task Save(this AtlasCharacter character)
        {
            using (var context = new StorageContext())
                using (var transaction = context.BeginTransaction())
                {
                    context.Characters.AddOrUpdate(character);

                    await context.SaveChangesAsync();

                    transaction.Commit();

                    Logger.Debug($"[User] [{character.Seed}] - Saving `{character.Name} {character.Surname}` and it's assets.");
                }
        }
Exemplo n.º 7
0
        public static async Task Load(this AtlasCharacter character)
        {
            var player = Cache.Player;
            var style  = character.Style;

            await style.Commit(player);

            StyleManager.GetModule().Cache(style);

            var voice = VoiceChat.GetModule();

            voice.Range = VoiceChatRange.Normal;
            voice.Commit();
        }
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 static async Task PostLoad(this AtlasCharacter character)
        {
            AtlasPlugin.Instance.AttachTickHandler(Intro);

            Session.CreatingCharacter = true;

            var player    = Cache.Player;
            var timestamp = API.GetGameTimer();

            while (timestamp + 5000 > API.GetGameTimer())
            {
                await BaseScript.Delay(100);
            }

            Session.Reload();

            AtlasPlugin.Instance.DetachTickHandler(Intro);

            var board = new MugshotBoardAttachment();

            player.DisableHud();

#pragma warning disable 4014
            board.Attach(player);

            player.CameraQueue.View(new CameraBuilder()
                                    .WithMotionBlur(0.5f)
                                    .WithInterpolation(CameraViews[0], CameraViews[1], 5000)
                                    );
#pragma warning restore 4014

            API.DoScreenFadeIn(5000);

            await player.AnimationQueue.PlayDirectInQueue(new AnimationBuilder()
                                                          .Select("mp_character_creation@customise@male_a", "intro")
                                                          );

            player.AnimationQueue.AddToQueue(new AnimationBuilder()
                                             .Select("mp_character_creation@customise@male_a", "loop")
                                             .WithFlags(AnimationFlags.Loop)
                                             .SkipTask()
                                             ).PlayQueue();

            var registered = false;
            var view       = 0;

            StyleManager.GetModule().OpenStyleChange(character.Style, "General", 0, async type =>
            {
                if (type == 0)
                {
                    registered = true;
                }
                else
                {
                    var item = InterfaceManager.GetModule().MenuContext.Selected;

                    if (item == null)
                    {
                        return;
                    }

                    var head = HeadComponents.Select(self => self.ToLower())
                               .Contains(item.Seed.Replace("style_component_", "").ToLower());

                    if (head && view == 0)
                    {
                        view = 1;

                        player.CameraQueue.Reset();

                        await player.CameraQueue.View(new CameraBuilder()
                                                      .SkipTask()
                                                      .WithMotionBlur(0.5f)
                                                      .WithInterpolation(CameraViews[1], CameraViews[2], 300)
                                                      );
                    }
                    else if (!head && view == 1)
                    {
                        view = 0;

                        player.CameraQueue.Reset();

                        await player.CameraQueue.View(new CameraBuilder()
                                                      .SkipTask()
                                                      .WithMotionBlur(0.5f)
                                                      .WithInterpolation(CameraViews[2], CameraViews[1], 300)
                                                      );
                    }
                }
            }, "CHAR_CREATE", "All");

            while (!registered)
            {
                if (!API.IsEntityPlayingAnim(player.Entity.Id, "mp_character_creation@customise@male_a", "loop", 3))
                {
                    player.AnimationQueue.AddToQueue(new AnimationBuilder()
                                                     .Select("mp_character_creation@customise@male_a", "loop")
                                                     .WithFlags(AnimationFlags.Loop)
                                                     .SkipTask()
                                                     ).PlayQueue();

                    board.IsAttached = false;

#pragma warning disable 4014
                    board.Attach(player);
#pragma warning restore 4014
                }

                await BaseScript.Delay(100);
            }

            player.AnimationQueue.AddToQueue(new AnimationBuilder()
                                             .Select("mp_character_creation@customise@male_a", "outro")
                                             .WithFlags(AnimationFlags.StayInEndFrame)
                                             ).PlayQueue();

            API.DoScreenFadeOut(3000);

            await BaseScript.Delay(5500);

            Session.Join(1);

            board.IsAttached = false;

            await SafeTeleport.Teleport(player.Entity.Id, new Position(-1045.326f, -2750.793f, 21.36343f, 330.1637f));

#pragma warning disable 4014
            player.CameraQueue.View(new CameraBuilder()
#pragma warning restore 4014
                                    .WithMotionBlur(0.5f)
                                    .WithInterpolation(
                                        new RotatablePosition(-1032.415f, -2726.847f, 26.48441f, 152.7852f, -7f, 0f),
                                        new RotatablePosition(-1032.415f, -2726.847f, 22.23441f, 152.7852f, -7f, 0f),
                                        10000)
                                    );

            API.DoScreenFadeIn(8000);

            API.TaskGoStraightToCoord(player.Entity.Id, DefaultPosition.X, DefaultPosition.Y, DefaultPosition.Z,
                                      1f,
                                      -1,
                                      DefaultPosition.Heading, 0f);

            while (DefaultPosition.Distance(player.Entity.Position) > 0.1 ||
                   Math.Abs(DefaultPosition.Heading - player.Entity.Position.Heading) > 1)
            {
                await BaseScript.Delay(10);
            }

            character.MarkedAsRegistered = true;

            await character.Save();

            await player.AnimationQueue.PlayDirectInQueue(new AnimationBuilder()
                                                          .Select("move_p_m_one_idles@generic", "fidget_look_around")
                                                          );

            API.TransitionToBlurred(0f);

            player.EnableHud();
            player.CameraQueue.Reset();

            await BaseScript.Delay(10);

            API.TransitionFromBlurred(500f);

            await BaseScript.Delay(1000);

            Session.CreatingCharacter = false;
        }
Exemplo n.º 10
0
 public void Commit(AtlasCharacter character)
 {
     character.Metadata.JailCases.RemoveAll(self => self.Seed == Seed);
     character.Metadata.JailCases.Add(this);
 }