Ejemplo n.º 1
0
        public void ProcessPacket(StorageSyncRealtimeChangePacket packet, NebulaConnection conn)
        {
            int itemId = packet.ItemId;
            int count  = packet.Count;

            StorageComponent storage = null;

            StorageComponent[] pool = GameMain.localPlanet?.factory?.factoryStorage?.storagePool;
            if (pool != null && packet.StorageIndex != -1 && packet.StorageIndex < pool.Length)
            {
                storage = pool[packet.StorageIndex];
            }

            if (storage != null)
            {
                StorageManager.EventFromClient = true;
                if (packet.StorageEvent == StorageSyncRealtimeChangeEvent.TakeItemFromGrid)
                {
                    storage.TakeItemFromGrid(packet.Length, ref itemId, ref count);
                    StorageSyncManager.SendToOtherPlayersOnTheSamePlanet(conn, packet, packet.PlanetId);
                }
                else if (packet.StorageEvent == StorageSyncRealtimeChangeEvent.AddItem2)
                {
                    storage.AddItem(itemId, count, packet.StartIndex, packet.Length);
                    StorageSyncManager.SendToOtherPlayersOnTheSamePlanet(conn, packet, packet.PlanetId);
                }
                else if (packet.StorageEvent == StorageSyncRealtimeChangeEvent.AddItemStacked)
                {
                    int result = storage.AddItemStacked(itemId, count);
                    StorageSyncManager.SendToOtherPlayersOnTheSamePlanet(conn, packet, packet.PlanetId);
                }
                StorageManager.EventFromClient = false;
            }
        }
Ejemplo n.º 2
0
        public static void HandleUserInteraction <T>(StorageComponent __instance, T packet) where T : class, new()
        {
            //Skip if change was done in player's inventory
            if (__instance.entityId == 0 && __instance.id == 0)
            {
                return;
            }

            if (LocalPlayer.IsMasterClient)
            {
                StorageSyncManager.SendToPlayersOnTheSamePlanet(packet, GameMain.data.localPlanet.id);
            }
            else
            {
                LocalPlayer.SendPacket(packet);
            }
        }
        public override void ProcessPacket(StorageSyncRealtimeChangePacket packet, NebulaConnection conn)
        {
            StorageComponent storage = null;

            StorageComponent[] pool = GameMain.galaxy.PlanetById(packet.PlanetId)?.factory?.factoryStorage?.storagePool;
            if (pool != null && packet.StorageIndex != -1 && packet.StorageIndex < pool.Length)
            {
                storage = pool[packet.StorageIndex];
            }

            if (storage != null)
            {
                using (Multiplayer.Session.Storage.IsIncomingRequest.On())
                {
                    int itemId = packet.ItemId;
                    int count  = packet.Count;
                    int inc    = packet.Inc;
                    int dummyOut;
                    if (packet.StorageEvent == StorageSyncRealtimeChangeEvent.AddItem2)
                    {
                        storage.AddItem(itemId, count, packet.StartIndex, packet.Length, inc, out dummyOut);
                    }
                    else if (packet.StorageEvent == StorageSyncRealtimeChangeEvent.AddItemStacked)
                    {
                        storage.AddItemStacked(itemId, count, inc, out dummyOut);
                    }
                    else if (packet.StorageEvent == StorageSyncRealtimeChangeEvent.TakeItemFromGrid)
                    {
                        storage.TakeItemFromGrid(packet.Length, ref itemId, ref count, out dummyOut);
                    }

                    if (IsHost)
                    {
                        StorageSyncManager.SendToOtherPlayersOnTheSamePlanet(conn, packet, packet.PlanetId);
                    }
                }
            }
        }