Ejemplo n.º 1
0
        private static bool checkGoodsAvailability(Colony colony, SpacegameServer.Core.Transfer transfer)
        {
            Core   core  = Core.Instance;
            Colony dummy = new Colony(colony.id);

            //add
            foreach (var good in colony.goods)
            {
                dummy.goods.Add(good.clone());
            }

            dummy.goods.RemoveAll(good => good.amount < 0);

            //remove TemplateModules
            foreach (var moduleLine in transfer.Goods)
            {
                Module toBuild = core.Modules.First(e => e != null && e.goodsId == moduleLine.Id);

                foreach (var costs in toBuild.ModulesCosts)
                {
                    dummy.addGood(costs.goodsId, -costs.amount * moduleLine.Qty, false);
                }
            }

            //check
            if (dummy.goods.Any(good => good.amount < 0))
            {
                return(false);
            }

            return(true);
        }
        public string BuildModules(int _userID, SpacegameServer.Core.Transfer modules)
        {
            string ret = "";

            try
            {
                string result = "";
                SpacegameServer.Core.Modules.BuildModules(_userID, modules, ref result);
                return(result);
            }
            catch (Exception ex)
            {
                SpacegameServer.Core.Core.Instance.writeExceptionToLog(ex);
            }

            return(ret);
        }
        public string transfer2(int _userID, SpacegameServer.Core.Transfer transfer)
        {
            string ret = "";

            try
            {
                string result = "";
                SpacegameServer.Core.TransferGoods.transfer2(_userID, transfer, ref result);
                return(result);
            }
            catch (Exception ex)
            {
                SpacegameServer.Core.Core.Instance.writeExceptionToLog(ex);
            }

            return(ret);
        }
Ejemplo n.º 4
0
        public static bool transfer2(int userId, SpacegameServer.Core.Transfer transfer, ref string xml)
        {
            SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance;

            SpacegameServer.Core.UserSpaceObject sender = null;
            SpacegameServer.Core.UserSpaceObject receiver = null;
            Ship SenderShip = null;
            Ship TargetShip = null;
            Colony SenderColony = null;
            Colony TargetColony = null;


            int senderUserId = 0;
            int receiverUserId = 0;
            //for sender and receiver
            if (transfer.Sender < 1 || transfer.SenderType < 1 || transfer.TargetType < 1) return false;

            if (transfer.SenderType == 1)
            {
                if (core.ships.ContainsKey(transfer.Sender)) 
                {
                    SenderShip = core.ships[transfer.Sender]; 
                    sender = core.ships[transfer.Sender];
                    senderUserId = SenderShip.userid;
                }
            }
            if (transfer.SenderType == 2)
            {
                if (core.colonies.ContainsKey(transfer.Sender)) 
                {
                    SenderColony = core.colonies[transfer.Sender];
                    sender = core.colonies[transfer.Sender];
                    senderUserId = SenderColony.userId; 
                }
            }

            if (transfer.TargetType == 1)
            {
                if (core.ships.ContainsKey(transfer.Target)) 
                {
                    TargetShip = core.ships[transfer.Target];
                    receiver = core.ships[transfer.Target]; 
                    receiverUserId = core.ships[transfer.Target].userid;
                }
                else
                {
                    
                }
            }
            if (transfer.TargetType == 2)
            {
                if (core.colonies.ContainsKey(transfer.Target)) 
                {
                    TargetColony = core.colonies[transfer.Target]; 
                    receiver = core.colonies[transfer.Target];
                    receiverUserId = TargetColony.userId; 
                }

                //mock a target for srap and recycling actions
                if (transfer.Target < 1)
                {
                    TargetShip = Ship.createTransferMock();
                    receiver = TargetShip;
                    receiverUserId = 0;
                }
            }

            if (sender == null || receiver == null) return false;


            if (!TransferChecks(userId, sender, receiver, transfer, SenderShip, TargetShip, SenderColony, TargetColony)) return false;

            List<Lockable> toLock = new List<Lockable>();
            toLock.Add(sender);
            if (receiver.GetUserId() != 0)
            { 
                toLock.Add(receiver); 
            }

            if (!LockingManager.lockAllOrSleep(toLock)) return false;

            if (!TransferChecks(userId, sender, receiver, transfer, SenderShip, TargetShip, SenderColony, TargetColony)) 
            {
                LockingManager.unlockAll(toLock);
                return false; 
            }

            try
            {

                if (SenderShip != null) SenderShip.RemoveAllTrades();
                if (TargetShip != null) TargetShip.RemoveAllTrades();

                foreach (var transferLine in transfer.Goods)
                {
                    //var Good = Core.Instance.Goods[transferLine.Id];
                    sender.addGood((short)transferLine.Id, -transferLine.Qty);

                    //recycle:
                    if (transfer.Target == 0)
                    {
                        Core.Instance.Goods[transferLine.Id].Recycle(sender, transferLine.Qty);
                    }

                    //add goods if it is not scrapping or rececling...
                    if (TargetShip == null || TargetShip.id > 0) receiver.addGood((short)transferLine.Id, transferLine.Qty);
                }

                //Core.Instance.dataConnection.saveShipGoods(this);
                //core.dataConnection.saveColonyGoods(colony);

                if (SenderShip != null) Core.Instance.dataConnection.saveShipGoods(SenderShip);
                if (TargetShip != null && transfer.Target > 0) Core.Instance.dataConnection.saveShipGoods(TargetShip);

                if (SenderColony != null) Core.Instance.dataConnection.saveColonyGoods(SenderColony);
                if (TargetColony != null && transfer.Target > 0) Core.Instance.dataConnection.saveColonyGoods(TargetColony);

            }
            catch (Exception e)
            {
                Core.Instance.writeExceptionToLog(e);
                return false;
            }
            finally
            {
                //unlock
                LockingManager.unlockAll(toLock);
            }


            return true;
        }
Ejemplo n.º 5
0
        public static bool BuildModules(int userId, SpacegameServer.Core.Transfer transfer, ref string xml)
        {
            SpacegameServer.Core.Core core = SpacegameServer.Core.Core.Instance;

            if (!core.colonies.ContainsKey(transfer.Sender))
            {
                return(false);
            }

            Colony colony = core.colonies[transfer.Sender];

            if (colony.userId != userId)
            {
                return(false);
            }

            User user = Core.Instance.users[userId];

            //check if modules are researched:
            foreach (var moduleLine in transfer.Goods)
            {
                if (moduleLine.Qty < 0)
                {
                    return(false);
                }

                //check that the Module exists
                if (!Core.Instance.Modules.Any(e => e != null && e.goodsId == moduleLine.Id))
                {
                    return(false);
                }

                Module toBuild = Core.Instance.Modules.First(e => e != null && e.goodsId == moduleLine.Id);

                if (!user.hasModuleResearch(toBuild))
                {
                    return(false);
                }
            }

            if (!Modules.checkGoodsAvailability(colony, transfer))
            {
                return(false);
            }

            List <Lockable> elementsToLock = new List <Lockable>(3);

            elementsToLock.Add(colony);

            if (!LockingManager.lockAllOrSleep(elementsToLock))
            {
                return(false);
            }

            try
            {
                if (!Modules.checkGoodsAvailability(colony, transfer))
                {
                    return(false);
                }

                //remove TemplateModules
                foreach (var moduleLine in transfer.Goods)
                {
                    Module toBuild = core.Modules.First(e => e != null && e.goodsId == moduleLine.Id);

                    foreach (var costs in toBuild.ModulesCosts)
                    {
                        colony.addGood(costs.goodsId, -costs.amount * moduleLine.Qty, false);
                    }

                    colony.addGood(toBuild.goodsId, moduleLine.Qty, false);
                }

                Core.Instance.dataConnection.saveColonyGoods(colony);
            }
            catch (Exception ex)
            {
                SpacegameServer.Core.Core.Instance.writeExceptionToLog(ex);
            }
            finally
            {
                //release the ressources and return true
                LockingManager.unlockAll(elementsToLock);
            }

            return(true);
        }