public override void ProcessPacket(BeltUpdatePutItemOnPacket packet, NebulaConnection conn)
 {
     using (Multiplayer.Session.Factories.IsIncomingRequest.On())
     {
         CargoTraffic cargoTraffic = GameMain.galaxy.PlanetById(packet.PlanetId)?.factory?.cargoTraffic;
         if (cargoTraffic == null)
         {
             return;
         }
         if (packet.ItemCount == 1)
         {
             if (!cargoTraffic.PutItemOnBelt(packet.BeltId, packet.ItemId, packet.ItemInc))
             {
                 Log.Warn($"BeltUpdatePutItemOn: Cannot put item{packet.ItemId} on belt{packet.BeltId}, planet{packet.PlanetId}");
             }
         }
         else
         {
             bool ret = false;
             if (cargoTraffic.beltPool[packet.BeltId].id != 0 && cargoTraffic.beltPool[packet.BeltId].id == packet.BeltId)
             {
                 int index = cargoTraffic.beltPool[packet.BeltId].segIndex + cargoTraffic.beltPool[packet.BeltId].segPivotOffset;
                 ret = cargoTraffic.GetCargoPath(cargoTraffic.beltPool[packet.BeltId].segPathId).TryInsertItem(index, packet.ItemId, packet.ItemCount, packet.ItemInc);
             }
             if (!ret)
             {
                 Log.Warn($"BeltUpdatePutItemOn: Cannot put item{packet.ItemId} on belt{packet.BeltId}, planet{packet.PlanetId}");
             }
         }
     }
 }
Esempio n. 2
0
        public void ProcessPacket(BeltUpdatePickupItemsPacket packet, NebulaConnection conn)
        {
            CargoTraffic traffic = GameMain.data.factories[packet.FactoryIndex].cargoTraffic;

            //Iterate though belt updates and remove target items
            for (int i = 0; i < packet.BeltUpdates.Length; i++)
            {
                CargoPath cargoPath = traffic.GetCargoPath(traffic.beltPool[packet.BeltUpdates[i].BeltId].segPathId);
                //Check if belt exists
                if (cargoPath != null)
                {
                    cargoPath.TryPickItem(packet.BeltUpdates[i].SegId - 4 - 1, 12);
                }
            }
        }
Esempio n. 3
0
 public void ProcessPacket(BeltUpdatePickupItemsPacket packet, NebulaConnection conn)
 {
     if (GameMain.galaxy.PlanetById(packet.PlanetId)?.factory?.cargoTraffic != null)
     {
         CargoTraffic traffic = GameMain.galaxy.PlanetById(packet.PlanetId)?.factory?.cargoTraffic;
         //Iterate though belt updates and remove target items
         for (int i = 0; i < packet.BeltUpdates.Length; i++)
         {
             if (packet.BeltUpdates[i].BeltId >= traffic.beltPool.Length)
             {
                 return;
             }
             CargoPath cargoPath = traffic.GetCargoPath(traffic.beltPool[packet.BeltUpdates[i].BeltId].segPathId);
             //Check if belt exists
             if (cargoPath != null)
             {
                 cargoPath.TryPickItem(packet.BeltUpdates[i].SegId - 4 - 1, 12);
             }
         }
     }
 }
        public override void ProcessPacket(BeltUpdatePickupItemsPacket packet, NebulaConnection conn)
        {
            CargoTraffic traffic = GameMain.galaxy.PlanetById(packet.PlanetId)?.factory?.cargoTraffic;

            if (traffic != null)
            {
                //Iterate though belt updates and remove target items
                for (int i = 0; i < packet.BeltUpdates.Length; i++)
                {
                    if (packet.BeltUpdates[i].BeltId >= traffic.beltPool.Length)
                    {
                        return;
                    }
                    BeltComponent beltComponent = traffic.beltPool[packet.BeltUpdates[i].BeltId];
                    CargoPath     cargoPath     = traffic.GetCargoPath(beltComponent.segPathId);
                    int           ItemId        = packet.BeltUpdates[i].ItemId;
                    //Check if belt exists
                    if (cargoPath != null)
                    {
                        // Search downstream for target item
                        for (int k = beltComponent.segIndex + beltComponent.segPivotOffset; k <= (beltComponent.segIndex + beltComponent.segLength - 1); k++)
                        {
                            if (cargoPath.TryPickItem(k - 4 - 1, 12, ItemId, out _, out _) != 0)
                            {
                                return;
                            }
                        }
                        // Search upstream for target item
                        for (int k = beltComponent.segIndex + beltComponent.segPivotOffset - 1; k >= beltComponent.segIndex; k--)
                        {
                            if (cargoPath.TryPickItem(k - 4 - 1, 12, ItemId, out _, out _) != 0)
                            {
                                return;
                            }
                        }
                        Log.Warn($"BeltUpdatePickupItem: Cannot pick item{ItemId} on belt{packet.BeltUpdates[i].BeltId}, planet{packet.PlanetId}");
                    }
                }
            }
        }