Exemple #1
0
        public void Implant(ImplantClientData data)
        {
            var receiverAcc = UserContext.Accounts.GetOrFail(data.Receiver, data.ReceiverPass);
            var sellerAcc   = UserContext.Accounts.GetOrFail(data.Seller);
            var parentAcc   = UserContext.Accounts.Get(sellerAcc.ParentID) ?? sellerAcc;

            _rightsManager.CheckForAccessOverSlave(sellerAcc, AccountAccessRoles.Withdraw);
            Try.Condition(parentAcc.Role.IsCompany(), $"Продавать импланты может только компания");
            Try.Condition(receiverAcc.Role == AccountRole.Person, $"Получать импланты может только персона");

            int indexCost = data.Index;

            if (receiverAcc.Insurance == InsuranceType.SuperVip ||
                parentAcc == UserContext.Insurances.GetIssuerFromType(receiverAcc.Insurance))
            {
                var discount = UserContext.Constants.GetDiscount(receiverAcc.EffectiveLevel);
                indexCost = (int)Math.Ceiling(indexCost * (1 - discount));
            }

            Try.Condition(parentAcc.Index >= indexCost, $"Недостаточно индекса");

            data.Description = ParseImplantDescription(data.Description, indexCost > 0);

            var tdata = new TransferClientData(receiverAcc.Login, sellerAcc.Login, data.Price)
            {
                Description = data.Description
            };

            var trList = P2BTransfer(receiverAcc, sellerAcc, tdata);

            using (var dbTransact = UserContext.Data.Database.BeginTransaction())
            {
                UserContext.Data.BeginFastSave();
                trList.ForEach(TransactiontoDb);
                parentAcc.Index -= indexCost;
                dbTransact.Commit();
            }

            if (indexCost > 0)
            {
                if (parentAcc != sellerAcc)
                {
                    UserContext.AddGameEvent(parentAcc.Login, GameEventType.Index,
                                             $"Имплант за {indexCost} индекса установлен магазином {sellerAcc.Fullname}", true);
                }

                UserContext.AddGameEvent(sellerAcc.Login, GameEventType.Index,
                                         $"Имплант за {indexCost} индекса установлен {receiverAcc.Fullname}", true);

                UserContext.AddGameEvent(receiverAcc.Login, GameEventType.Index,
                                         $"Получен имплант от {sellerAcc.Fullname}", true);
            }
        }
 public IHttpActionResult TransferImplant(ImplantClientData data)
 {
     UserContext.Transactions.Implant(data);
     return(Ok());
 }