예제 #1
0
        public static void UnloadUpgradable(Ship ship, int uniqueid)
        {
            var defenition = Definitions.UpgrDef.Items.Item.FirstOrDefault(n => n.DefId == ship.TargetId);
            var lvl        = defenition?.Levels.Level.FirstOrDefault(n => n.Id == ship.TargetLevel);

            if (lvl != null)
            {
                ship.LogUnload();
                var upg = Core.GlobalData.Upgradeables.FirstOrDefault(n => n.DefId == ship.TargetId);
                if (upg != null)
                {
                    upg.Progress += lvl.MaterialKoef * SendingHelper.GetCapacity(ship);
                }

                Networking.AddTask(
                    new Task.UnloadShipTask(
                        ship.InstId,
                        Core.GlobalData.Level,
                        Enums.EObject.upgradeable,
                        SendingHelper.GetCapacity(ship),
                        lvl.MaterialKoef * SendingHelper.GetCapacity(ship),
                        SendingHelper.GetSailors(ship),
                        lvl.Sailors,
                        ship.TargetLevel,
                        null, uniqueid));
                SendingHelper.NullShip(ship);
            }
        }
예제 #2
0
        public static void UnloadOutpost(Ship ship, int uniqueid)
        {
            var loc = Core.GlobalData.Outposts.Where(n => n.DefId == ship.TargetId).First();

            ship.LogUnload();
            var outp = Core.GlobalData.Outposts.Where(n => n.DefId == ship.TargetId).FirstOrDefault();

            if (outp.CargoOnTheWay <= ship.Sailors())
            {
                outp.CargoOnTheWay -= ship.Sailors();
            }

            Networking.AddTask(
                new Task.DockShipTaskOutPost(
                    ship,
                    false,
                    SendingHelper.GetCapacity(ship),
                    ship.Cargo,
                    SendingHelper.GetSailors(ship),
                    ship.Crew,
                    ship.TargetLevel,
                    loc.CargoOnTheWay + loc.Crew,
                    loc.RequiredCrew,
                    uniqueid));
            SendingHelper.NullShip(ship);
        }
예제 #3
0
        public static void UnloadContractor(Ship ship, int uniqueid)
        {
            var currentcontractor = Definitions.ConDef.Items.Item
                                    .FirstOrDefault(n => n.DefId == ship.TargetId);

            var quest = currentcontractor?.Quests.Quest.FirstOrDefault(n => n.Id == ship.TargetLevel);

            if (quest == null)
            {
                return;
            }

            if (currentcontractor.Type == "static")
            {
                var usedshit  = quest.MaterialKoef * SendingHelper.GetCapacity(ship);
                var lcontract = Core.GlobalData.Contracts.FirstOrDefault(n => n.DefId == ship.TargetId);
                // TODO: increasing of progress or amount!
                ship.LogUnload();
                Networking.AddTask(
                    new Task.DockShipTaskContractor(
                        ship,
                        false,
                        SendingHelper.GetCapacity(ship),
                        usedshit,
                        SendingHelper.GetSailors(ship),
                        currentcontractor.Sailors,
                        ship.TargetLevel,
                        currentcontractor.DefId,
                        lcontract.Progress,
                        (int)quest.InputAmount(),
                        quest.ObjectiveTypeId,
                        uniqueid));
            }
            else
            {
                var usedshit  = quest.MaterialKoef * SendingHelper.GetCapacity(ship);
                var lcontract = Core.GlobalData.Contracts.FirstOrDefault(n => n.DefId == ship.TargetId);
                var inp       = quest.InputAmount();
                // TODO: increasing of progress or amount!
                ship.LogUnload();
                Networking.AddTask(
                    new Task.DockShipTaskContractor(
                        ship,
                        false,
                        SendingHelper.GetCapacity(ship),
                        usedshit,
                        SendingHelper.GetSailors(ship),
                        currentcontractor.Sailors,
                        ship.TargetLevel,
                        currentcontractor.DefId,
                        lcontract.Progress,
                        (int)quest.InputAmount(),
                        quest.ObjectiveTypeId,
                        uniqueid));
            }

            SendingHelper.NullShip(ship);
        }
        public static async Task <TransferMessages.TransferCompled> Send <TSender, TCommand>(this TSender sender,
                                                                                             TCommand command, TimeSpan timeout, DataTransferManager manager, Action <string> messages, Func <ITransferData?> getdata)
            where TSender : ISender
            where TCommand : FileTransferCommand <TSender, TCommand>
        {
            command.Manager = manager;
            var id = await SendingHelper.Send <FileTransactionId, TCommand>(sender, command, messages, timeout, false);

            var tranfer = await command.Manager.AskAwaitOperation(new AwaitRequest(timeout, id.Id));

            return(await tranfer.TryStart(getdata));
        }
예제 #5
0
        public static void LoadUpgradeable(Ship ship)
        {
            var lvl = Definitions.UpgrDef.Items.Item.FirstOrDefault(n => n.DefId == ship.TargetId)?.Levels
                      .Level.First(n => n.Id == ship.TargetLevel);

            if (lvl != null)
            {
                Logger.Info(
                    Localization.SHIPS_LOADING + LocalizationCache.GetNameFromLoc(
                        Definitions.ShipDef.Items.Item.First(n => n.DefId == ship.DefId).NameLoc,
                        Definitions.ShipDef.Items.Item.First(n => n.DefId == ship.DefId).Name));
                Core.GlobalData.Upgradeables.First(n => n.DefId == ship.TargetId).CargoOnTheWay -=
                    lvl.MaterialKoef * SendingHelper.GetCapacity(ship);
                Core.GlobalData.Upgradeables.First(n => n.DefId == ship.TargetId).Progress +=
                    lvl.MaterialKoef * SendingHelper.GetCapacity(ship);

                Networking.AddTask(new Task.LoadShipUpgradeableTask(ship.InstId));
                ship.Loaded = 1;
            }
        }
예제 #6
0
        public static void UnloadWreck(Ship ship, int uniqueid)
        {
            var wrk = Core.GlobalData.Wrecks.Where(n => n.InstId == ship.TargetId).FirstOrDefault();

            if (wrk != null)
            {
                ship.LogUnload();
                Networking.AddTask(
                    new Task.UnloadShipTask(
                        ship.InstId,
                        Core.GlobalData.Level,
                        Enums.EObject.wreck,
                        SendingHelper.GetCapacity(ship),
                        0,
                        SendingHelper.GetSailors(ship),
                        wrk.Sailors,
                        ship.TargetLevel,
                        null,
                        uniqueid));
                SendingHelper.NullShip(ship);
            }
        }
예제 #7
0
        public static void UnloadSocialcontract(Ship ship, int uniqueid)
        {
            var co = Core.GlobalData.SocialContracts.Where(n => n.InstId == ship.TargetId)
                     .FirstOrDefault();

            if (co == null)
            {
                return;
            }

            ship.LogUnload();
            Networking.AddTask(
                new Task.DockShipSocialContractor(
                    ship,
                    false,
                    ship.Capacity(),
                    co.MaterialKoef / co.Amount,
                    ship.Sailors(),
                    co.Sailors,
                    ship.TargetLevel,
                    uniqueid));
            SendingHelper.NullShip(ship);
        }
예제 #8
0
        public static void UnloadMarketplace(Ship ship, int uniqueid)
        {
            var market = Definitions.MarketDef.Items.Item.FirstOrDefault(n => n.DefId == ship.TargetId);
            var lvl    = Definitions.MarketDef.Items.Item.FirstOrDefault(n => n.DefId == ship.TargetId);
            var mat    = lvl?.Materials.Material.FirstOrDefault(n => n.Id == ship.MaterialId);

            if (mat != null)
            {
                ship.LogUnload();
                Networking.AddTask(
                    new Task.UnloadShipTask(
                        ship.InstId,
                        Core.GlobalData.Level,
                        Enums.EObject.marketplace,
                        SendingHelper.GetCapacity(ship),
                        mat.InputKoef * SendingHelper.GetCapacity(ship),
                        SendingHelper.GetSailors(ship),
                        market.Sailors,
                        ship.TargetLevel,
                        null,
                        uniqueid));
                SendingHelper.NullShip(ship);
            }
        }
 public static Task Send <TSender, TCommand>(this TSender sender, TCommand command, TimeSpan timeout, Action <string> messages)
     where TCommand : SimpleCommand <TSender, TCommand>, IReporterMessage
     where TSender : ISender
 => SendingHelper.Send <object, TCommand>(sender, command, messages, timeout, true);