Beispiel #1
0
        public void Commit()
        {
            var storage = NetworkPackage.GetModule().GetLoad <Storage>(Seed);

            storage.Update(Storage);
            storage.Commit();
        }
Beispiel #2
0
            public override void Begin()
            {
                NetworkPackage.GetModule().Imports += (package, index) =>
                {
                    if (index != "World.Items.Dropped")
                    {
                        return;
                    }

                    Messages = package.GetLoad <List <ActionMessage> >("Ingame.Action.Messages").Get() ??
                               new List <ActionMessage>();
                };
            }
Beispiel #3
0
        public override async void Begin(Job job)
        {
            await Session.Loading();

            var package = NetworkPackage.GetModule();

            Seed    = $"storage::{job.Attachment.ToString().ToLower()}";
            Storage = await EventSystem.GetModule().Request <Storage>("storage:fetch", Seed) ??
                      (package.GetLoad <Storage>(Seed).Get() ?? new Storage
            {
                Seed = Seed, Owner = job.Attachment.ToString().ToLower(),
                Metadata = new StorageMetadata {
                    Items = new List <InventoryItem>()
                }
            });

            var inventory = new JobStorageInventory(new InventoryContainerBase
            {
                Seed       = Seed,
                Name       = $"Förråd ({job.Label})",
                SlotAmount = 100,
                Slots      = Storage.Metadata.Items.OrderBy(self => self.Slot).ToArray()
            }, this);

            package.Imports += (__package, index) =>
            {
                if (index != "World.Items.Dropped")
                {
                    return;
                }

                var storage = package.GetLoad <Storage>(Seed).Get();

                if (storage == null)
                {
                    return;
                }

                Storage = storage;

                inventory.Slots = storage.Metadata.Items.OrderBy(self => self.Slot).ToArray();
                inventory.Commit();
            };

            InventoryManager.GetModule().RegisterContainer(inventory);

            Logger.Info(
                $"[Job] [{job.Attachment.ToString()}] Fetched {Storage.Metadata.Items.Count} item(s) in `{Seed}` from the database.");
        }
Beispiel #4
0
 public void Commit()
 {
     NetworkPackage.GetModule()
     .GetLoad <List <ActionMessage> >("Ingame.Action.Messages")
     .UpdateAndCommit(Messages);
 }
Beispiel #5
0
        public override async void Begin()
        {
            API.NetworkClearVoiceChannel();
            API.NetworkSetTalkerProximity(0.1f);
            API.NetworkSetFriendlyFireOption(true);
            API.SetCanAttackFriendly(API.PlayerPedId(), true, true);
            API.StopPlayerSwitch();

            var sound  = new SoundSystem();
            var handle = API.GetPlayerServerId(API.PlayerId());

            sound.Disable();

            await Game.Player.ChangeModel(new Model(API.GetHashKey("mp_m_freemode_01")));

            var ped = Game.PlayerPed.Handle;

            API.RemoveAllPedWeapons(ped, false);
            API.ClearPedTasksImmediately(ped);
            API.ClearPlayerWantedLevel(API.PlayerId());
            API.SetEntityVisible(ped, true, true);
            API.SetEntityHealth(ped, API.GetEntityMaxHealth(ped));
            API.NetworkResurrectLocalPlayer(0, 0, 70f, 0f, true, false);
            API.FreezeEntityPosition(ped, false);
            API.SendLoadingScreenMessage(new JsonBuilder().Add("eventName", "UPDATE_STATUS").Add("status", "Laddar in användare").Build());

            var transition = new CharacterManager.LoadTransition();
            var user       = await EventSystem.Request <AtlasUser>("user:login");

            var payloads = new Dictionary <string, string>();

            try
            {
                payloads = JsonConvert.DeserializeObject <Dictionary <string, string> >(
                    (await EventSystem.Request <object>("network:package:latest")).ToString());
            }
            catch (Exception)
            {
                // Ignored
            }

            var package = NetworkPackage.GetModule();

            foreach (var payload in payloads)
            {
                package.Payloads[payload.Key] = JsonConvert.DeserializeObject <NetworkPayload <object> >(payload.Value);
            }

            Logger.Info($"[User] [{user.Seed}] Creating local player...");

            Atlas.Local = new AtlasPlayer(user.SteamId, new AtlasEntity(ped))
            {
                Handle = handle,
                Name   = user.LastName,
                User   = user
            };

            var voice = VoiceChat.GetModule();

            voice.Range = 0f;
            voice.Commit();

            Atlas.AttachTickHandlers(voice);
            Atlas.Local.DisableHud();

            Logger.Info(
                $"[User] [{user.Seed}] Logged into the server with the role `{user.Role.ToString()}` and metadata: {JsonConvert.SerializeObject(user.Metadata)}");

#pragma warning disable 4014
            transition.Up(Atlas.Local);
#pragma warning restore 4014

            // Synchronize characters with the server-side, that is fetching from the database.
            await CharacterManager.GetModule().Synchronize();
        }
Beispiel #6
0
        public override async void Begin(Job job)
        {
            var model = new Model(MerchantModel);

            if (MerchantModel != 0 && MerchantPosition != null)
            {
                var merchantId = $"merchant::{job.Attachment.ToString().ToLower()}";
                var package    = NetworkPackage.GetModule();

                if (Session.IsSpawnHost() && !API.NetworkDoesNetworkIdExist(package.GetLoad <int>(merchantId).Get()))
                {
                    await model.Request(5000);

                    var ped = API.CreatePed(6, (uint)model.Hash, MerchantPosition.X, MerchantPosition.Y,
                                            MerchantPosition.Z, MerchantPosition.Heading, true, false);

                    Merchant = new Merchant(ped)
                    {
                        Important = true,
                        Position  = MerchantPosition
                    };

                    package.GetLoad <int>(merchantId).UpdateAndCommit(Merchant.NetworkModule.GetId());

                    await SafeTeleport.Teleport(ped, MerchantPosition);

                    Merchant.Movable = false;
                }
                else
                {
                    while ((Merchant = MerchantManager.GetModule()
                                       .GetMerchantById(package.GetLoad <int>(merchantId).Get())) == null)
                    {
                        await BaseScript.Delay(1000);
                    }
                }
            }

            await Session.Loading();

            var player    = Cache.Player;
            var character = Cache.Character;
            var marker    = new Marker(Armory)
            {
                Message   = "Tryck ~INPUT_CONTEXT~ för att komma åt förrådet",
                Color     = Color.Transparent,
                Condition = self => character.Metadata.Employment == job.Attachment
            };

            marker.Callback += async() =>
            {
                if (MerchantPosition != null && Merchant != null)
                {
                    await player.Entity.AnimationQueue.PlayDirectInQueue(new AnimationBuilder()
                                                                         .Select("gestures@m@standing@casual", "gesture_hello")
                                                                         .AtPosition(Armory)
                                                                         );
                }

                Callback?.Invoke();
            };

            marker.Show();

            Atlas.AttachTickHandler(OnTick);
        }
Beispiel #7
0
        public void Register()
        {
            var package = NetworkPackage.GetModule();
            var manager = InventoryManager.GetModule();

            manager.StateChanged += state =>
            {
                if (state != InventoryStateChange.Show)
                {
                    return;
                }

                Rework();
            };

            Update += (item, type) =>
            {
                if (item == null)
                {
                    return;
                }

                if (type == InventoryUpdateType.Add)
                {
                    var player = Cache.Player;

                    if (item.Seed != "__none")
                    {
                        DroppedWorldItems.Add(new InventoryItemDroppedAdapter(Clipboard.Process(item),
                                                                              Clipboard.Process(player.Entity.Position)));
                    }
                }
                else if (type == InventoryUpdateType.Remove)
                {
                    DroppedWorldItems.Where(self => self.Item.Seed == item.Seed).ToList()
                    .ForEach(self => self.Destroy());
                    DroppedWorldItems.RemoveAll(self => self.Item.Seed == item.Seed);
                }

                var load = package.GetLoad <List <InventoryItemDroppedAdapter> >("World.Items.Dropped");

                load.Update(DroppedWorldItems);
                load.Commit();
            };

            package.Imports += (__package, index) =>
            {
                if (index != "World.Items.Dropped")
                {
                    return;
                }

                var load = package.GetLoad <List <InventoryItemDroppedAdapter> >("World.Items.Dropped").Get() ??
                           new List <InventoryItemDroppedAdapter>();

                foreach (var item in load.Where(self =>
                                                DroppedWorldItems.FirstOrDefault(adapter => self.Item.Seed == adapter.Item.Seed) == null))
                {
                    item.Activate();
                }

                foreach (var item in DroppedWorldItems.Where(self =>
                                                             load.FirstOrDefault(adapter => self.Item.Seed == adapter.Item.Seed) == null))
                {
                    item.Destroy();
                }

                DroppedWorldItems = load;
                Rework();
            };
        }