Beispiel #1
0
        public void AllocatesWork()
        {
            var state = new SystemState(staticState);

            var worklist = new RefineryWorklist(staticState.OreTypes, staticState.IngotTypes, staticState.RefineryFactory, staticState.Blueprints);

            worklist.Initialise(new List <Refinery> {
                Refinery.Get(Mocks.MockRefinery(), Constants.REFINERY_TYPES.Single(t => t.BlockDefinitionName.EndsWith("LargeRefinery")), 1),
            });
            var ingotWorklist = new IngotWorklist(state.Ingots);

            var inventoryScanner = new InventoryScanner(staticState.IngotTypes.AllIngotItemTypes, staticState.OreTypes.All);

            inventoryScanner.Ore[new ItemType("Ore/Iron")] = new List <OreDonor> {
                CreateOreDonor(new ItemType("Ore/Iron"), 4000)
            };

            state.Ingots.UpdateQuantities(new Dictionary <ItemType, double>());  // No existing ingots.
            ingotWorklist.Initialise();

            var refineryWorkAllocator = new RefineryWorkAllocator(worklist, inventoryScanner.Ore);

            var allocated = refineryWorkAllocator.AllocateSingle(ingotWorklist);

            Assert.True(allocated);
        }
Beispiel #2
0
        public void IteratorReturnsOnlyRefineriesAbleToProduceIngotType()
        {
            var worklist = new RefineryWorklist(staticState.OreTypes, staticState.IngotTypes, staticState.RefineryFactory, staticState.Blueprints);

            worklist.Initialise(new List <Refinery> {
                Refinery.Get(Mocks.MockRefinery(), Constants.REFINERY_TYPES.Single(t => t.BlockDefinitionName.EndsWith("LargeRefinery")), 1),
                Refinery.Get(Mocks.MockRefinery(), Constants.REFINERY_TYPES.Single(t => t.BlockDefinitionName.EndsWith("Blast Furnace")), 1),
                Refinery.Get(Mocks.MockRefinery(), Constants.REFINERY_TYPES.Single(t => t.BlockDefinitionName.EndsWith("LargeRefinery")), 1)
            });

            IRefineryIterator iterator;

            Assert.True(worklist.TrySelectIngot(new ItemType("Ingot/Gold"), out iterator));

            Assert.True(iterator.CanAllocate());
            Assert.That(iterator.Current.BlockDefinitionString, Does.EndWith("LargeRefinery"));

            iterator.Next();

            Assert.True(iterator.CanAllocate());
            Assert.That(iterator.Current.BlockDefinitionString, Does.EndWith("LargeRefinery"));

            iterator.Next();

            Assert.False(iterator.CanAllocate());
        }
Beispiel #3
0
    protected override void Awake()
    {
        base.Awake();

        nearbyObjects = WorkManager.FindNearbyObjects(transform.position, detectionRange * 2);
        List <WorldObject> refineryObjects = new List <WorldObject>();

        foreach (WorldObject nearbyObject in nearbyObjects)
        {
            if (nearbyObject.GetPlayer() != player)
            {
                continue;
            }
            Refinery refinery = nearbyObject.GetComponent <Refinery>();
            if (refinery)
            {
                refineryObjects.Add(nearbyObject);
            }
        }

        WorldObject closestObject = WorkManager.FindNearestWorldObjectInListToPosition(refineryObjects, transform.position);

        if (closestObject)
        {
            resourceStore = (Building)closestObject;
        }
    }
        public IDictionary <string, object> Refine(Refinery refinery, Character character, Container sourceContainer, int targetDefinition, int amount)
        {
            refinery.IsOpen.ThrowIfFalse(ErrorCodes.FacilityClosed);
            _productionDescriptions.TryGetValue(targetDefinition, out ProductionDescription productionDescription).ThrowIfFalse(ErrorCodes.DefinitionNotSupported);

            return(refinery.Refine(character, sourceContainer, amount, productionDescription));
        }
Beispiel #5
0
            static void Postfix(KilnConfig __instance, ref GameObject go)
            {
                bool     KilnDupeWork = DynamicBuildingsState.StateManager.State.KilnDupe;
                Refinery refinery     = go.AddOrGet <Refinery>();

                refinery.duplicantOperated = KilnDupeWork;
            }
Beispiel #6
0
    public GameObject PlayEff(Refinery refinery)
    {
        GameObject eff = null;

        switch (refinery)
        {
        case Refinery.Complete:
            eff = Eff_Refining_Complete;
            break;

        case Refinery.Fail:
            eff = Eff_Refining_Fail;
            break;

        case Refinery.Success:
            eff = Eff_Refining_Success;
            break;

        case Refinery.Underway:
            eff = Eff_Refining_Underway;
            break;
        }

        if (gLastEff != null)
        {
            Destroy(gLastEff);
            gLastEff = null;
        }
        gLastEff = (GameObject)Instantiate(eff);
        gLastEff.transform.parent        = EffEmissionTrans;
        gLastEff.transform.localPosition = Vector3.zero;
        gLastEff.transform.localScale    = eff.transform.localScale;

        return(gLastEff);
    }
        public override void OnStateUndock(Actor self)
        {
            // If dock animation hasn't played, we didn't actually dock and have to skip the undock anim and notification
            if (!dockAnimPlayed)
            {
                dockingState = DockingState.Complete;
                return;
            }

            dockingState = DockingState.Wait;
            wsb.PlayCustomAnimationBackwards(self, wda.DockSequence,
                                             () =>
            {
                dockingState = DockingState.Complete;
                foreach (var trait in self.TraitsImplementing <INotifyHarvesterAction>())
                {
                    trait.Undocked();
                }

                if (Refinery.IsInWorld && !Refinery.IsDead)
                {
                    foreach (var nd in Refinery.TraitsImplementing <INotifyDocking>())
                    {
                        nd.Undocked(Refinery, self);
                    }
                }
            });
        }
Beispiel #8
0
        public void AssignedWorkAffectsQuotaFactor()
        {
            var blueprint  = new Blueprint("A", 1, new ItemAndQuantity("Ore/A", 10), new ItemAndQuantity("Ingot/A", 10));
            var stockpiles = new IngotStockpiles(new TestIngotDefinitions {
                { "Ingot/A", 100 }
            });
            var ingotWorklist = new IngotWorklist(stockpiles);
            var refinery      = Refinery.Get(mockRefinery, new RefineryType("Refinery")
            {
                SupportedBlueprints = { "A" }
            }, 1);

            stockpiles.UpdateQuantities(new TestIngotQuantities {
                { "Ingot/A", 50 }
            });
            ingotWorklist.Initialise();

            IngotStockpile preferred;

            Assume.That(ingotWorklist.TryGetPreferred(out preferred));
            Assume.That(preferred.EstimatedProduction, Is.EqualTo(0));

            var initialQuotaFraction = preferred.QuotaFraction;

            ingotWorklist.UpdateStockpileEstimates(refinery, blueprint, 5);

            IngotStockpile updatedPreferred;

            Assume.That(ingotWorklist.TryGetPreferred(out updatedPreferred));

            Assert.That(updatedPreferred.QuotaFraction, Is.GreaterThan(initialQuotaFraction));
            Assert.That(updatedPreferred.EstimatedProduction, Is.GreaterThan(0));
        }
Beispiel #9
0
        public override void OnStateDock(Actor self)
        {
            body.Docked = true;
            foreach (var trait in self.TraitsImplementing <INotifyHarvesterAction>())
            {
                trait.Docked();
            }
            foreach (var nd in Refinery.TraitsImplementing <INotifyDocking>())
            {
                nd.Docked(Refinery, self);
            }

            if (spriteOverlay != null && !spriteOverlay.Visible)
            {
                spriteOverlay.Visible = true;
                spriteOverlay.WithOffset.Animation.PlayThen(spriteOverlay.Info.Sequence, () =>
                {
                    dockingState          = DockingState.Loop;
                    spriteOverlay.Visible = false;
                });
            }
            else
            {
                dockingState = DockingState.Loop;
            }
        }
 public override void _EnterTree()
 {
     refinery    = (Refinery)building;
     btnGive     = GetNode <Button>("back/BtnGive");
     btnTransfer = GetNode <Button>("back/BtnTransfer");
     entry       = GetNode <LineEdit>("back/LineEdit");
     entry.Text  = "0";
     RefreshBtn();
 }
Beispiel #11
0
        private void registerRefinery(Refinery r)
        {
            List <Refinery> li = null;

            refineries.TryGetValue(r.type, out li);
            if (li == null)
            {
                li = new List <Refinery>();
            }
            li.Add(r);
            refineries[r.type] = li;
            refineryCount++;
        }
Beispiel #12
0
    private WorldObject FindNearestRefinery()
    {
        List <WorldObject> refinerys = new List <WorldObject>();

        foreach (WorldObject nearbyObject in nearbyObjects)
        {
            Refinery refinery = nearbyObject.GetComponent <Refinery>();
            if (refinery)
            {
                refinerys.Add(nearbyObject);
            }
        }
        return(WorkManager.FindNearestWorldObjectInListToPosition(refinerys, transform.position));
    }
Beispiel #13
0
        public void ToleratesBlueprintsWithUnknownIngotTypes()
        {
            var blueprint  = new Blueprint("A", new ItemAndQuantity("Ore/A", 10f), new ItemAndQuantity("Ingot/A", 10f));
            var stockpiles = new Stockpiles(
                new IngotStockpile[0],
                new[] { blueprint });

            var refinery = new Refinery(new Mock <IMyRefinery>().Object, new RefineryType("Refinery")
            {
                SupportedBlueprints = { "A" }
            });

            stockpiles.UpdateStockpileEstimates(refinery, blueprint, 5f);
        }
Beispiel #14
0
        public override void OnStateUndock(Actor self)
        {
            // If body.Docked wasn't set, we didn't actually dock and have to skip the undock overlay
            if (!body.Docked)
            {
                dockingState = DockingState.Complete;
            }
            else if (Refinery.IsInWorld && !Refinery.IsDead && spriteOverlay != null && !spriteOverlay.Visible)
            {
                dockingState          = DockingState.Wait;
                spriteOverlay.Visible = true;
                spriteOverlay.WithOffset.Animation.PlayBackwardsThen(spriteOverlay.Info.Sequence, () =>
                {
                    dockingState          = DockingState.Complete;
                    body.Docked           = false;
                    spriteOverlay.Visible = false;

                    foreach (var trait in self.TraitsImplementing <INotifyHarvesterAction>())
                    {
                        trait.Undocked();
                    }

                    if (Refinery.IsInWorld && !Refinery.IsDead)
                    {
                        foreach (var nd in Refinery.TraitsImplementing <INotifyDocking>())
                        {
                            nd.Undocked(Refinery, self);
                        }
                    }
                });
            }
            else
            {
                dockingState = DockingState.Complete;
                body.Docked  = false;

                foreach (var trait in self.TraitsImplementing <INotifyHarvesterAction>())
                {
                    trait.Undocked();
                }

                if (Refinery.IsInWorld && !Refinery.IsDead)
                {
                    foreach (var nd in Refinery.TraitsImplementing <INotifyDocking>())
                    {
                        nd.Undocked(Refinery, self);
                    }
                }
            }
        }
        public override void OnStateDock(Actor self)
        {
            foreach (var trait in self.TraitsImplementing <INotifyHarvesterAction>())
            {
                trait.Docked();
            }
            foreach (var nd in Refinery.TraitsImplementing <INotifyDocking>())
            {
                nd.Docked(Refinery, self);
            }

            wsb.PlayCustomAnimation(self, wda.DockSequence, () => wsb.PlayCustomAnimationRepeating(self, wda.DockLoopSequence));
            dockAnimPlayed = true;
            dockingState   = DockingState.Loop;
        }
Beispiel #16
0
        public void AssignedWorkAffectsQuotaFactor()
        {
            var blueprint = new Blueprint("A", new ItemAndQuantity("Ore/A", 10f), new ItemAndQuantity("Ingot/A", 10f));

            var stockpiles = new Stockpiles(
                new[] { new IngotStockpile { Ingot = new IngotType("Ingot/A", 1, 10), CurrentQuantity = 50, TargetQuantity = 100 } },
                new[] { blueprint });

            var refinery = new Refinery(new Mock<IMyRefinery>().Object, new RefineryType("Refinery") { SupportedBlueprints = { "A" } });

            var initialStockpile = stockpiles.GetStockpiles().Single();
            stockpiles.UpdateStockpileEstimates(refinery, blueprint, 5f);
            var updatedStockpile = stockpiles.GetStockpiles().Single();

            Assert.That(updatedStockpile.QuotaFraction, Is.GreaterThan(initialStockpile.QuotaFraction));
            Assert.That(updatedStockpile.EstimatedProduction, Is.GreaterThan(0));
        }
Beispiel #17
0
    void Start()
    {
        if (GameObject.FindGameObjectWithTag("LevelManager").GetComponent <WorldData>() != null)
        {
            worldData = GameObject.FindGameObjectWithTag("LevelManager").GetComponent <WorldData>();
        }
        else
        {
            Debug.Log("could not locate worldData in sellresourcerefinery");
        }
        if (GameObject.FindGameObjectWithTag("LevelManager").GetComponent <PlayerInfo>() != null)
        {
            playerInfo = GameObject.FindGameObjectWithTag("LevelManager").GetComponent <PlayerInfo>();
        }
        else
        {
            Debug.Log("could not locate playerInfo in sellresourcerefinery");
        }
        if (GetComponent <SellPriceRefinery>() != null)
        {
            sellPriceRefinery = GetComponent <SellPriceRefinery>();
        }
        else
        {
            Debug.Log("could not locate sellpricerefinery in sellresourcerefinery");
        }
        if (GetComponent <Refinery>() != null)
        {
            refinery = GetComponent <Refinery>();
        }
        else
        {
            Debug.Log("could not locate refinery in sellresourcerefinery");
        }

        GameObject tempObject = GameObject.Find("tradeMenuRefinery");

        if (tempObject != null)
        {
            sellMenu = tempObject.GetComponent <Canvas>();
            if (sellMenu == null)
            {
                Debug.Log("Could not locate Canvas component on " + tempObject.name);
            }
        }
    }
Beispiel #18
0
        static bool Prefix(Refinery __instance, List <Fabricator.UserOrder> ___userOrders, List <Fabricator.MachineOrder> ___machineOrders)
        {
            if (!Main.enabled)
            {
                return(true);
            }

            if (___userOrders.Count > 1)
            {
                var machineOrder = ___machineOrders[0];
                if (!machineOrder.parentOrder.infinite)
                {
                    ___userOrders.Remove(machineOrder.parentOrder);
                    ___userOrders.Insert(0, machineOrder.parentOrder);
                }
            }

            return(true);
        }
Beispiel #19
0
        public static async Task Run()
        {
            //from https://github.com/tslater2006/AdventOfCode2019 , this one was hurting my brain
            var refinery = new Refinery(await File.ReadAllLinesAsync("inputs\\14.txt"));

            refinery.ProduceMaterial(new RefineryProduction()
            {
                Amount = 1, Chemical = "FUEL"
            });

            Console.WriteLine("Part 1: " + refinery.OreRequired.ToString());

            refinery = new Refinery(await File.ReadAllLinesAsync("inputs\\14.txt"));
            long fuelCount        = 0;
            var  productionFactor = 10000;
            Dictionary <string, int> oldSurplus = null;
            long oldOreRequired = 0;

            while (productionFactor >= 1)
            {
                while (refinery.OreRequired < 1000000000000)
                {
                    oldSurplus     = new Dictionary <string, int> (refinery.Surplus);
                    oldOreRequired = refinery.OreRequired;
                    refinery.ProduceMaterial(new RefineryProduction()
                    {
                        Amount = productionFactor, Chemical = "FUEL"
                    });
                    fuelCount += productionFactor;
                }

                /* we've gone over... */
                if (productionFactor >= 1)
                {
                    /*reset old state*/
                    refinery.Surplus     = new Dictionary <string, int> (oldSurplus);
                    refinery.OreRequired = oldOreRequired;
                    fuelCount           -= productionFactor;
                    productionFactor    /= 10;
                }
            }
            Console.WriteLine("Part 2: " + fuelCount.ToString());
        }
Beispiel #20
0
        private void tryMoveOre(string ore, Refinery refinery)
        {
            //show("Attempting to move "+ore+" into "+refinery.refinery.CustomName);
            FoundItem item = findItem(new ItemProfile("ore/" + ore));

            if (item == null && ore == "scrap")
            {
                item = findItem(new ItemProfile("ingot/scrap"));
            }
            if (item != null)
            {
                MyFixedPoint amt = min(item.item.Amount, 1000);
                moveItem(item.source, refinery.refinery.InputInventory, item.item, amt);
            }
            else
            {
                //show("Not found.");
            }
        }
Beispiel #21
0
        public void ToleratesBlueprintsWithUnknownIngotTypes()
        {
            var blueprint  = new Blueprint("A", 1, new ItemAndQuantity("Ore/A", 10), new ItemAndQuantity("Ingot/A", 10));
            var stockpiles = new IngotStockpiles(new TestIngotDefinitions {
                { "Ingot/B", 100 }
            });
            var ingotWorklist = new IngotWorklist(stockpiles);
            var refinery      = Refinery.Get(mockRefinery, new RefineryType("Refinery")
            {
                SupportedBlueprints = { "A" }
            }, 1);

            stockpiles.UpdateQuantities(new TestIngotQuantities {
                { "Ingot/B", 20 }
            });
            ingotWorklist.Initialise();

            ingotWorklist.ScoreBlueprint(blueprint);
            ingotWorklist.UpdateStockpileEstimates(refinery, blueprint, 5);
        }
Beispiel #22
0
        private static void Postfix(Refinery __instance)
        {
            Debug.Log(" === AlternateOrdersMod2b Postfix === ");
            try
            {
                FieldInfo userOrders_ = AccessTools.Field(typeof(Refinery), "userOrders");
                //FieldInfo operational_ = AccessTools.Field(typeof(Refinery), "operational");
                FieldInfo isCancellingOrder_ = AccessTools.Field(typeof(Refinery), "isCancellingOrder");
                FieldInfo machineOrders_     = AccessTools.Field(typeof(Refinery), "machineOrders");
                //MethodInfo AlreadyMachineQueued = AccessTools.Method(typeof(Refinery), "AlreadyMachineQueued", new Type[] { typeof(Refinery.UserOrder) });
                //MethodInfo CompleteOrder = AccessTools.Method(typeof(Refinery), "CompleteOrder", new Type[] { typeof(Refinery.UserOrder) });
                //MethodInfo UpdateOrderQueue = AccessTools.Method(typeof(Refinery), "UpdateOrderQueue", new Type[] { typeof(bool) });
                //MethodInfo OnCompleteWork = AccessTools.Method(typeof(Workable), "OnCompleteWork", new Type[] { typeof(Worker) });

                List <Refinery.UserOrder> userOrders = (List <Refinery.UserOrder>)userOrders_.GetValue(__instance);
                //Operational operational = (Operational)operational_.GetValue(__instance);
                bool isCancellingOrder = (bool)isCancellingOrder_.GetValue(__instance);
                List <Refinery.MachineOrder> machineOrders = (List <Refinery.MachineOrder>)machineOrders_.GetValue(__instance);


                if (!isCancellingOrder)
                {
                    if (machineOrders.Count > 0)
                    {
                        Refinery.MachineOrder machineOrder = machineOrders[0];
                        if (machineOrder.parentOrder.infinite)
                        {
                            Refinery.UserOrder last = userOrders[0];
                            userOrders.RemoveAt(0);
                            userOrders.Add(last);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.Log(ex);
                Debug.Log(ex.StackTrace);
            }
        }
Beispiel #23
0
        /// <summary>
        /// Creates a Object3D of given type.
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="z"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        private Object3D CreateObject(double x, double y, double z, string type)
        {
            switch (type)
            {
            case "Robot":
                Object3D r = new Robot(x, y, z, 0, 0, 0);
                worldObjects.Add(r);
                return(r);

            case "Export":
                Object3D e = new ExportVehicle(x, y, z, 0, Math.PI, 0);
                worldObjects.Add(e);
                return(e);

            case "Import":
                Object3D i = new ImportVehicle(x, y, z, 0, 0.5 * Math.PI, 0);
                worldObjects.Add(i);
                return(i);

            case "Crate":
                Object3D c = new Crate(x, y, z);
                worldObjects.Add(c);
                return(c);

            case "Shelf":
                Object3D s = new StationaryObject(x, y, z, 0, 0, 0, "Shelf");
                worldObjects.Add(s);
                return(s);

            case "Refinery":
                Object3D refi = new Refinery(x, y, z, 0, 0, 0);
                worldObjects.Add(refi);
                return(refi);

            default:
                throw new ArgumentException("there is no model that corresponds with that type");
            }
        }
Beispiel #24
0
        public void AssignedWorkAffectsQuotaFactor()
        {
            var blueprint = new Blueprint("A", new ItemAndQuantity("Ore/A", 10f), new ItemAndQuantity("Ingot/A", 10f));

            var stockpiles = new Stockpiles(
                new[] { new IngotStockpile {
                            Ingot = new IngotType("Ingot/A", 1, 10), CurrentQuantity = 50, TargetQuantity = 100
                        } },
                new[] { blueprint });

            var refinery = new Refinery(new Mock <IMyRefinery>().Object, new RefineryType("Refinery")
            {
                SupportedBlueprints = { "A" }
            });

            var initialStockpile = stockpiles.GetStockpiles().Single();

            stockpiles.UpdateStockpileEstimates(refinery, blueprint, 5f);
            var updatedStockpile = stockpiles.GetStockpiles().Single();

            Assert.That(updatedStockpile.QuotaFraction, Is.GreaterThan(initialStockpile.QuotaFraction));
            Assert.That(updatedStockpile.EstimatedProduction, Is.GreaterThan(0));
        }
Beispiel #25
0
        public void Main()           //called each cycle
        //tick++;
        //if (tick%4 != 0)
        //	return;

        {
            tick++;
            bool cancel = false;

            foreach (IMyShipConnector conn in connectors)
            {
                if (conn.Enabled && conn.Status == MyShipConnectorStatus.Connected)
                {
                    if (shutdownWhenDockedTo(conn.DisplayName, conn.OtherConnector.DisplayName, conn.OtherConnector.CubeGrid.DisplayName))
                    {
                        cancel = true;
                        break;
                    }
                }
            }
            if (cancel)
            {
                Echo("Docked to dominant grid; not managing inventories.");
                return;
            }

            Echo("Managing " + refineryCount + " refineries, " + assemblers.Count + " assemblers, " + oxyGenerators.Count + " O2 gens, and " + cargo.Count + " cargo containers.");
            if (tick % 50 == 0)
            {
                cacheSources();
            }

            if (ENABLE_ORE_SORTING)
            {
                foreach (var entry in refineries)
                {
                    Refinery r = getRandom <Refinery>(entry.Value);
                    if (r != null && (r.refinery.Enabled || !SKIP_OFFLINE_REFINERIES))
                    {
                        ICollection <string> li = r.validOres;
                        if (ORE_PRIORITY.Length > 0)
                        {
                            li = applyPriorityRules(li);
                        }
                        foreach (string ore in li)
                        {
                            if (isOreValid(ore, r))
                            {
                                tryMoveOre(ore, r);
                            }
                        }
                        empty(r.refinery.OutputInventory);
                        if (!SKIP_OFFLINE_REFINERIES)
                        {
                            r.refinery.Enabled = r.hasWork();
                        }
                    }
                }

                IMyAssembler ass = getRandom <IMyAssembler>(assemblers);
                if (ass != null)
                {
                    empty(ass.Mode == MyAssemblerMode.Disassembly ? ass.InputInventory : ass.OutputInventory);
                    List <MyProductionItem> li = new List <MyProductionItem>();
                    ass.GetQueue(li);
                    ass.Enabled = li.Count > 0 || ass.CooperativeMode || ass.BlockDefinition.SubtypeName.ToLowerInvariant().Contains("survivalkit");
                }

                IMyGasGenerator gas = getRandom <IMyGasGenerator>(oxyGenerators);
                if (gas != null && (gas.Enabled || ENABLE_O2_GENS))
                {
                    tryMoveIce(gas);
                    if (ENABLE_O2_GENS)
                    {
                        gas.Enabled = true;                        // || gas.GetInventory().ItemCount > 0;
                    }
                }
            }
            if (MOVE_FROM_SMALL_TO_LARGE)
            {
                IMyCargoContainer box = getRandom <IMyCargoContainer>(cargo);
                if (box != null)
                {
                    if (box.GetInventory().ItemCount > 0 && box.BlockDefinition.SubtypeName.ToLowerInvariant().Contains("small"))
                    {
                        IMyInventory inv = box.GetInventory();
                        empty(inv, false);
                        //break;
                    }
                }
            }
            if (tick % 5 == 0)
            {
                bool flag = false;
                if (ejectionWatchers.Count > 0 && usedVolume / (float)maxCapacity >= EJECTION_THRESHOLD)
                {
                    foreach (ItemProfile p in ejectionWatchers)
                    {
                        float f = getItemFraction(p);
                        Echo("Item type " + p.ToString() + " represents " + f * 100 + "% of items.");
                        if (f >= EJECTION_THRESHOLD)
                        {
                            Echo("Ejecting excess.");
                            tryPrepareEjection(p);
                            flag = true;
                        }
                    }
                }
                if (!flag)
                {
                    Echo("No excess to eject.");
                    foreach (IMyShipConnector conn in ejectors)
                    {
                        conn.ThrowOut = false;
                    }
                }                /*
                                  * foreach (IMyShipConnector con in connectors) {
                                  *     if (con.Status == MyShipConnectorStatus.Connected) {
                                  *             FlowDirection flow = getActiveFlowDirection(con.CustomName, con.OtherConnector.CustomName, con.OtherConnector.CubeGrid.CustomName);
                                  *             if (flow != FlowDirection.INERT) {
                                  *
                                  *             }
                                  *     }
                                  * }*/
            }
        }
Beispiel #26
0
        static bool Prefix(Refinery __instance, bool force_update, Operational ___operational, List <Refinery.UserOrder> ___userOrders,
                           List <Refinery.MachineOrder> ___machineOrders)
        {
            if (!Main.enabled)
            {
                return(true);
            }

            if (!force_update && !___operational.IsOperational)
            {
                return(false);
            }

            if (___userOrders.Count <= 1)
            {
                return(true);
            }

            foreach (var userOrder in ___userOrders)
            {
                int count = ___machineOrders.Count(x => x.parentOrder == userOrder);
                if (userOrder.infinite && count < 2)
                {
                    for (int i = count; i < 2; i++)
                    {
                        ___machineOrders.Add(new Refinery.MachineOrder()
                        {
                            parentOrder = userOrder
                        });
                    }
                }
                else if (count == 0)
                {
                    ___machineOrders.Add(new Refinery.MachineOrder()
                    {
                        parentOrder = userOrder
                    });
                }
            }

            var ingregientsAvailable = new bool[___userOrders.Count];

            for (int i = 0, c = ___userOrders.Count; i < c; i++)
            {
                ingregientsAvailable[i] = true;
                var userOrder      = ___userOrders[i];
                var allIngredients = userOrder.recipe.ingredients;
                foreach (var ingredient in allIngredients)
                {
                    if (__instance.inStorage.GetUnitsAvailable(ingredient.material) < ingredient.amount)
                    {
                        ingregientsAvailable[i] = false;
                        break;
                    }
                }
            }

            Comparison <Refinery.MachineOrder> comparison = delegate(Refinery.MachineOrder x, Refinery.MachineOrder y)
            {
                if (x.chore != null)
                {
                    return(-1);
                }
                else if (y.chore != null)
                {
                    return(1);
                }
                else
                {
                    int idx1 = ___userOrders.FindIndex(n => n == x.parentOrder);
                    int idx2 = ___userOrders.FindIndex(n => n == y.parentOrder);

                    if (idx1 != -1 && idx2 != -1)
                    {
                        if (ingregientsAvailable[idx1] && !ingregientsAvailable[idx2])
                        {
                            return(-1);
                        }
                        else if (!ingregientsAvailable[idx1] && ingregientsAvailable[idx2])
                        {
                            return(1);
                        }
                    }

                    if (idx1 == idx2)
                    {
                        return(0);
                    }
                    else
                    {
                        return(idx1 < idx2 ? -1 : 1);
                    }
                }
            };

            ___machineOrders.Sort(comparison);

            return(true);
        }
 public IDictionary <string, object> RefineQuery(Refinery refinery, Character character, int targetDefinition, int targetAmount)
 {
     _productionDescriptions.TryGetValue(targetDefinition, out ProductionDescription productionDescription).ThrowIfFalse(ErrorCodes.DefinitionNotSupported);
     return(refinery.RefineQuery(character, targetDefinition, targetAmount, productionDescription));
 }
Beispiel #28
0
        public void ToleratesBlueprintsWithUnknownIngotTypes()
        {
            var blueprint = new Blueprint("A", new ItemAndQuantity("Ore/A", 10f), new ItemAndQuantity("Ingot/A", 10f));
            var stockpiles = new Stockpiles(
                new IngotStockpile[0],
                new[] { blueprint });

            var refinery = new Refinery(new Mock<IMyRefinery>().Object, new RefineryType("Refinery") { SupportedBlueprints = { "A" } });

            stockpiles.UpdateStockpileEstimates(refinery, blueprint, 5f);
        }
Beispiel #29
0
 private bool isOreValid(string ore, Refinery refinery)
 {
     if (NO_PROCESS.Contains(ore))
     {
         return(false);
     }
     if (!refinery.validOres.Contains(ore))
     {
         return(false);
     }
     if (refinery.type != RefineryType.STONE)
     {
         if (ore == "stone")
         {
             List <Refinery> li = null;
             refineries.TryGetValue(RefineryType.STONE, out li);
             if (SKIP_OFFLINE_REFINERIES)
             {
                 li = filterRefineryList(li);
             }
             if (li != null && li.Count > 0)
             {
                 return(false);
             }
         }
     }
     if (refinery.type != RefineryType.PLATINUM)
     {
         if (ore == "platinum")
         {
             List <Refinery> li = null;
             refineries.TryGetValue(RefineryType.PLATINUM, out li);
             if (SKIP_OFFLINE_REFINERIES)
             {
                 li = filterRefineryList(li);
             }
             if (li != null && li.Count > 0)
             {
                 return(false);
             }
         }
     }
     if (refinery.type != RefineryType.URANIUM)
     {
         if (ore == "uranium")
         {
             List <Refinery> li = null;
             refineries.TryGetValue(RefineryType.URANIUM, out li);
             if (SKIP_OFFLINE_REFINERIES)
             {
                 li = filterRefineryList(li);
             }
             if (li != null && li.Count > 0)
             {
                 return(false);
             }
         }
     }
     if (refinery.type != RefineryType.BLAST)
     {
         if (ore == "iron" || ore == "nickel" || ore == "silicon" || ore == "cobalt")
         {
             List <Refinery> li = null;
             refineries.TryGetValue(RefineryType.BLAST, out li);
             if (SKIP_OFFLINE_REFINERIES)
             {
                 li = filterRefineryList(li);
             }
             if (li != null && li.Count > 0)
             {
                 return(false);
             }
         }
     }
     if (refinery.type == RefineryType.BASIC)
     {
         List <Refinery> li = null;
         refineries.TryGetValue(RefineryType.NORMAL, out li);
         if (SKIP_OFFLINE_REFINERIES)
         {
             li = filterRefineryList(li);
         }
         return(li == null || li.Count == 0);
     }
     return(true);
 }
Beispiel #30
0
        public static void LoadServer(bool KnowConfig)
        {
            Time32 Start = Time32.Now;

            RandomSeed    = Convert.ToInt32(DateTime.Now.Ticks.ToString().Remove(DateTime.Now.Ticks.ToString().Length / 2));
            Console.Title = "Conquord Is Loading...";
            Kernel.Random = new FastRandom(RandomSeed);
            if (!KnowConfig)
            {
                ConquordDBName = "test";
                ConquordDBPass = "******";
                ConquordIP     = "149.202.128.35";
            }
            System.Console.ForegroundColor = ConsoleColor.DarkGray;
            IntPtr hWnd = FindWindow(null, Console.Title);

            System.Console.WriteLine(@"      `       ______                                       __   `     `      ");
            System.Console.WriteLine(@"             / ____/___  ____  ____ ___  ______  _________/ /                ");
            System.Console.WriteLine(@"        `   / /   / __ \/ __ \/ __ `/ / / / __ \/ ___/ __  /  `      `    _  ");
            System.Console.WriteLine(@"          _/ /___/ /_/ / / / / /_/ / /_/ / /_/ / /  / /_/ /              | | ");
            System.Console.WriteLine(@"   `       \____/\____/_/ /_/\__, /\__,_/\____/_/   \__,_/        `   ___| | ");
            System.Console.WriteLine(@"         `                     /_/            `               `      (    .' ");
            System.Console.WriteLine(@" __        ...       _____ Michael Nashaat _____        ...       __  )  (   ");
            System.Console.WriteLine();
            System.Console.WriteLine(@"                  Copyright (c) Conquord Project 2015-2016.                  ");
            Console.BackgroundColor        = ConsoleColor.Black;
            System.Console.ForegroundColor = ConsoleColor.DarkGray;
            Database.DataHolder.CreateConnection(ConquordDBName, ConquordDBPass);
            Database.EntityTable.EntityUID = new Counter(0);
            new MySqlCommand(MySqlCommandType.UPDATE).Update("entities").Set("Online", 0).Execute();
            using (MySqlCommand cmd = new MySqlCommand(MySqlCommandType.SELECT))
            {
                cmd.Select("configuration");
                using (MySqlReader r = new MySqlReader(cmd))
                {
                    if (r.Read())
                    {
                        if (!KnowConfig)
                        {
                            ConquordIP = r.ReadString("ConquordIP");
                            GamePort   = 5816;
                            AuthPort   = r.ReadUInt16("ConquordPort");
                        }
                        Database.EntityTable.EntityUID = new Counter(r.ReadUInt32("EntityID"));
                        if (Database.EntityTable.EntityUID.Now == 0)
                        {
                            Database.EntityTable.EntityUID.Now = 1;
                        }
                        Union.UnionCounter   = new Counter(r.ReadUInt32("UnionID"));
                        Kernel.ServerKingdom = (r.ReadUInt32("ServerKingdom"));
                        if (r.ReadByte("LastDailySignReset") != DateTime.Now.Month)
                        {
                            MsgSignIn.Reset();
                        }
                        Game.ConquerStructures.Society.Guild.GuildCounter = new Conquord.Counter(r.ReadUInt32("GuildID"));
                        Network.GamePackets.ConquerItem.ItemUID           = new Conquord.Counter(r.ReadUInt32("ItemUID"));
                        Constants.ExtraExperienceRate   = r.ReadUInt32("ExperienceRate");
                        Constants.ExtraSpellRate        = r.ReadUInt32("SpellExperienceRate");
                        Constants.ExtraProficiencyRate  = r.ReadUInt32("ProficiencyExperienceRate");
                        Constants.MoneyDropRate         = r.ReadUInt32("MoneyDropRate");
                        Constants.ConquerPointsDropRate = r.ReadUInt32("ConquerPointsDropRate");
                        Constants.ItemDropRate          = r.ReadUInt32("ItemDropRate");
                        Constants.ItemDropQualityRates  = r.ReadString("ItemDropQualityString").Split('~');
                        Database.EntityVariableTable.Load(0, out Vars);
                    }
                }
            }
            using (var cmd = new MySqlCommand(MySqlCommandType.UPDATE).Update("configuration"))
                cmd.Set("LastDailySignReset", DateTime.Now.Month).Execute();
            Database.JiangHu.LoadStatus();
            Database.JiangHu.LoadJiangHu();
            Console.WriteLine("JiangHu Loaded.");
            Way2Heroes.Load();
            QuestInfo.Load();
            AuctionBase.Load();
            Database.DataHolder.ReadStats();
            Conquord.Soul.SoulProtection.Load();
            Database.PerfectionTable.Load();
            Console.WriteLine("Perfection Loaded.");
            Database.LotteryTable.Load();
            Database.ConquerItemTable.ClearNulledItems();
            Database.ConquerItemInformation.Load();
            Console.WriteLine("Items Loaded.");
            Database.GameUpdetess.LoadRates();
            Database.MonsterInformation.Load();
            Database.IPBan.Load();
            Database.SpellTable.Load();
            Database.ShopFile.Load();
            Database.HonorShop.Load();
            Database.RacePointShop.Load();
            Database.ChampionShop.Load();
            Database.EShopFile.Load();
            Database.EShopV2File.Load();
            Console.WriteLine("Shops Loaded.");
            Database.MapsTable.Load();
            Database.Flowers.LoadFlowers();
            Database.Flowers.SaveFlowers();
            Console.WriteLine("Flowers Systems Loaded.");
            Database.NobilityTable.Load();
            Database.ArenaTable.Load();
            Database.TeamArenaTable.Load();
            Database.GuildTable.Load();
            Database.ChiTable.LoadAllChi();
            Console.WriteLine("Social Systems Loaded.");
            Refinery.LoadItems();
            StorageManager.Load();
            UnionTable.Load();
            Console.WriteLine("Union Loaded.");
            World = new World();
            World.Init();
            Database.Statue.Load();
            Console.WriteLine("Tops And Quests Loaded.");
            Database.PoketTables.LoadTables();
            Database.InnerPowerTable.LoadDBInformation();
            Database.InnerPowerTable.Load();
            Console.WriteLine("InnerPower Loaded.");
            Map.CreateTimerFactories();
            Database.SignInTable.Load();
            Database.DMaps.Load();
            Console.WriteLine("Maps Loaded.");
            Game.Screen.CreateTimerFactories();
            World.CreateTournaments();
            Game.GuildWar.Initiate();
            Game.ClanWar.Initiate();
            Game.Tournaments.SkillTournament.LoadSkillTop8();
            Game.Tournaments.TeamTournament.LoadTeamTop8();
            Clan.LoadClans();
            Game.EliteGuildWar.EliteGwint();
            Console.WriteLine("Guilds and Clans loaded.");
            Booths.Load();
            Console.WriteLine("Booths Loaded.");

            Database.FloorItemTable.Load();
            Database.ReincarnationTable.Load();
            new MsgUserAbilityScore().GetRankingList();
            new MsgEquipRefineRank().UpdateRanking();
            PrestigeRank.LoadRanking();
            Console.WriteLine("Ranks Loaded.");
            BruteForceProtection.CreatePoll();
            Console.WriteLine("Protection System On.");
            {
                Client.GameClient gc = new Client.GameClient(new ClientWrapper());
                gc.Account      = new AccountTable("NONE");
                gc.Socket.Alive = false;
                gc.Entity       = new Entity(EntityFlag.Player, false)
                {
                    Name = "NONE"
                };
                Npcs.GetDialog(new NpcRequest(), gc, true);
            }
            #region OpenSocket
            Network.Cryptography.AuthCryptography.PrepareAuthCryptography();
            AuthServer = new ServerSocket();
            AuthServer.OnClientConnect    += AuthServer_OnClientConnect;
            AuthServer.OnClientReceive    += AuthServer_OnClientReceive;
            AuthServer.OnClientDisconnect += AuthServer_OnClientDisconnect;
            AuthServer.Enable(AuthPort, "0.0.0.0");
            GameServer = new ServerSocket();
            GameServer.OnClientConnect    += GameServer_OnClientConnect;
            GameServer.OnClientReceive    += GameServer_OnClientReceive;
            GameServer.OnClientDisconnect += GameServer_OnClientDisconnect;
            GameServer.Enable(GamePort, "0.0.0.0");
            #endregion
            Console.WriteLine("Server loaded iN : " + (Time32.Now - Start) + " MilliSeconds.");
            ConquordHandler += ConquordConsole_CloseEvent;
            Native.SetConsoleCtrlHandler(ConquordHandler, true);
            GC.Collect();
            WorkConsole();
        }