Esempio n. 1
0
        public void SetTax(Character character, double newTax)
        {
            IsPlayerControlledMarketTax().ThrowIfFalse(ErrorCodes.AccessDenied);

            var oldTax = Tax;

            newTax = newTax.Clamp();

            var coporationEid = character.CorporationEid;

            ProfitingOwnerSelector.GetProfitingOwner(GetDockingBase()).ThrowIfNull(ErrorCodes.AccessDenied);

            var corporation = PrivateCorporation.GetOrThrow(coporationEid);
            var role        = corporation.GetMemberRole(character);

            role.IsAnyRole(CorporationRole.CEO, CorporationRole.DeputyCEO, CorporationRole.Accountant).ThrowIfFalse(ErrorCodes.InsufficientPrivileges);

            //write log
            var e = new MarketTaxChangeLogEvent
            {
                BaseEid     = GetDockingBase().Eid,
                ChangeFrom  = oldTax,
                ChangeTo    = newTax,
                CharacterId = character.Id,
                Owner       = coporationEid,
            };

            GetTaxChangeLogger().Log(e);

            //set value
            Tax = newTax;
        }
        public void HandleRequest(IRequest request)
        {
            var character      = request.Session.Character;
            var offsetInDays   = request.Data.GetOrDefault <int>(k.offset);
            var forCorporation = request.Data.GetOrDefault <int>(k.corporation) == 1;

            PrivateCorporation corporation = null;

            if (forCorporation)
            {
                corporation = character.GetPrivateCorporationOrThrow();

                corporation.GetMemberRole(character).IsAnyRole(CorporationRole.CEO, CorporationRole.DeputyCEO, CorporationRole.Accountant, CorporationRole.ProductionManager).ThrowIfFalse(ErrorCodes.InsufficientPrivileges);
            }

            var dictionary = new Dictionary <string, object>
            {
                { k.history, ProductionHelper.ProductionLogList(character, offsetInDays, corporation) },
                { k.corporation, forCorporation }
            };

            Message.Builder.FromRequest(request)
            .WithData(dictionary)
            .WrapToResult()
            .Send();
        }
Esempio n. 3
0
 public static IEnumerable <CorporationApplication> GetAllByCorporation(PrivateCorporation corporation)
 {
     return(Db.Query().CommandText("select * from corporationApplication where corporationEID=@corporationEID")
            .SetParameter("@corporationEID", corporation.Eid)
            .Execute()
            .ConvertAll(_converter)
            .ToArray());
 }
Esempio n. 4
0
        private void PayBackBuyOrder()
        {
            var submitter = Character.GetByEid(submitterEID);

            //use corporation wallet based on the order and not on the current corp of the character
            PrivateCorporation corporation = null;

            if (forMembersOf != null)
            {
                corporation = PrivateCorporation.Get((long)forMembersOf);
            }

            IWallet <double> wallet;

            if (corporation != null && useCorporationWallet)
            {
                wallet = new CorporationWallet(corporation);
            }
            else
            {
                wallet = submitter.GetWallet(false, TransactionType.buyOrderPayBack);
            }

            wallet.Balance += FullPrice;

            var b = TransactionLogEvent.Builder()
                    .SetTransactionType(TransactionType.buyOrderPayBack)
                    .SetCreditBalance(wallet.Balance)
                    .SetCreditChange(FullPrice)
                    .SetCharacter(submitter)
                    .SetItem(itemDefinition, quantity);


            var corpWallet = wallet as CorporationWallet;

            if (corpWallet != null)
            {
                b.SetCorporation(corpWallet.Corporation);
                corpWallet.Corporation.LogTransaction(b);
            }
            else
            {
                submitter.LogTransaction(b);
            }

            _centralBank.SubAmount(FullPrice, TransactionType.MarketTax);
        }
Esempio n. 5
0
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var character = request.Session.Character;

                var targetCorporationEid = request.Data.GetOrDefault <long>(k.eid);
                var targetCorporation    = PrivateCorporation.GetOrThrow(targetCorporationEid);

                var amount             = request.Data.GetOrDefault <int>(k.amount);
                var privateCorporation = character.GetPrivateCorporationOrThrow();
                privateCorporation.Transfer(targetCorporation, amount, character);

                Message.Builder.FromRequest(request).WithOk().Send();

                scope.Complete();
            }
        }
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var character = request.Session.Character;

                character.IsInTraining().ThrowIfTrue(ErrorCodes.TrainingCharacterInvolved);

                var targetCorporationEID = request.Data.GetOrDefault <long>(k.corporationEID);
                var motivation           = request.Data.GetOrDefault <string>(k.note);

                //from private corp?
                character.GetCorporation().ThrowIfNotType <DefaultCorporation>(ErrorCodes.CharacterMustBeInDefaultCorporation);

                //check corp hopping
                _corporationManager.IsJoinAllowed(character).ThrowIfFalse(ErrorCodes.CorporationChangeTooOften);

                //is valid target corp?
                var targetCorporation = PrivateCorporation.Get(targetCorporationEID).ThrowIfNull(ErrorCodes.OnlyPrivateCorporationAcceptsApplication);

                var applications = character.GetCorporationApplications().ToArray();
                applications.Length.ThrowIfGreater(5, ErrorCodes.CorporationApplicationsNumberExceeded);
                applications.Any(a => a.CorporationEID == targetCorporation.Eid).ThrowIfTrue(ErrorCodes.OneApplicationAllowedPerCorporation);

                //add appliaction
                var newApplication = new CorporationApplication(targetCorporation)
                {
                    Character  = character,
                    Motivation = motivation
                };

                newApplication.InsertToDb();

                var result = character.GetCorporationApplications().ToDictionary();
                Message.Builder.FromRequest(request).WithData(result).Send();

                scope.Complete();
            }
        }
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var character = request.Session.Character;
                var flush     = request.Data.GetOrDefault <int>(k.all) == 1;

                if (flush)
                {
                    character.GetCorporationApplications().DeleteAll();
                }
                else
                {
                    var corporationEID = request.Data.GetOrDefault <long>(k.corporationEID);
                    var corporation    = PrivateCorporation.GetOrThrow(corporationEID);
                    corporation.GetApplicationsByCharacter(character).DeleteAll();
                }

                var result = character.GetCorporationApplications().ToDictionary();
                Message.Builder.FromRequest(request).WithData(result).Send();

                scope.Complete();
            }
        }
Esempio n. 8
0
        public static Dictionary <string, object> ProductionLogList(Character character, int offsetInDays, PrivateCorporation corporation)
        {
            var result  = new Dictionary <string, object>();
            var counter = 0;

            var later   = DateTime.Now.AddDays(-1 * offsetInDays);
            var earlier = later.AddDays(-14);

            var queryString = "select definition,amount,productiontime,productiontype,durationsecs,price,usecorporationwallet,characterid from productionlog where productiontime > @earlier and productiontime < @later ";

            if (corporation != null)
            {
                var members = corporation.GetMembersWithAnyRoles(CorporationRole.CEO, CorporationRole.DeputyCEO, CorporationRole.ProductionManager).Select(m => m.character.Id);
                queryString += " and usecorporationwallet=1 and characterId in ( " + members.ArrayToString() + " )";
            }
            else
            {
                queryString += " and characterID=@characterID";
            }

            var records = Db.Query().CommandText(queryString)
                          .SetParameter("@characterID", character.Id)
                          .SetParameter("@earlier", earlier)
                          .SetParameter("@later", later)
                          .Execute();

            foreach (var record in records)
            {
                var stepper  = record.GetStepper();
                var tempDict = new Dictionary <string, object>
                {
                    { k.definition, stepper.GetNextValue <int>() },
                    { k.amount, stepper.GetNextValue <int>() },
                    { k.date, stepper.GetNextValue <DateTime>() },
                    { k.productionType, stepper.GetNextValue <int>() },
                    { k.duration, stepper.GetNextValue <int>() },
                    { k.price, stepper.GetNextValue <double>() },
                    { k.useCorporationWallet, stepper.GetNextValue <bool>() },
                    { k.characterID, stepper.GetNextValue <int>() },
                };
                result.Add("c" + counter++, tempDict);
            }

            return(result);
        }
Esempio n. 9
0
 public CorporationApplication(PrivateCorporation corporation)
 {
     CorporationEID = corporation.Eid;
 }
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var character     = request.Session.Character;
                var corpName      = request.Data.GetOrDefault <string>(k.name).Trim();
                var taxRate       = request.Data.GetOrDefault <int>(k.taxRate);
                var publicProfile = request.Data.GetOrDefault <Dictionary <string, object> >(k.publicProfile);
                var nick          = request.Data.GetOrDefault <string>(k.nick).Trim();


                character.IsInTraining().ThrowIfTrue(ErrorCodes.TrainingCharacterInvolved);

                nick.Length.ThrowIfGreater(6, ErrorCodes.CorporationNickTooLong);
                nick.Length.ThrowIfLess(2, ErrorCodes.CorporationNickTooShort);
                nick.AllowExtras().ThrowIfFalse(ErrorCodes.CorporationNickNotAllowedCharacters);
                string.IsNullOrEmpty(nick).ThrowIfTrue(ErrorCodes.CorporationNickNotDefined);

                corpName.Length.ThrowIfGreater(128, ErrorCodes.CorporationNameTooLong);
                corpName.Length.ThrowIfLessOrEqual(3, ErrorCodes.CorporationNameTooShort);
                corpName.AllowExtras().ThrowIfFalse(ErrorCodes.CorporationNameNotAllowedCharacters);
                string.IsNullOrEmpty(corpName).ThrowIfTrue(ErrorCodes.CorporationNameNotDefined);

                Corporation.IsNameOrNickTaken(corpName, nick).ThrowIfTrue(ErrorCodes.NameTaken);

                //get the corporation eid the submitter is a member of
                var oldCorporation = character.GetCorporation().ThrowIfNotType <DefaultCorporation>(ErrorCodes.CharacterMustBeInDefaultCorporation);
                //member has role in the current corporation so he/she can't be transferred
                oldCorporation.GetMemberRole(character).ThrowIfNotEqual(CorporationRole.NotDefined, ErrorCodes.MemberHasRolesError);

                //check enabler extension
                var privateCorp = _entityServices.Defaults.GetByName(DefinitionNames.PRIVATE_CORPORATION);

                foreach (var enablerExtension in privateCorp.EnablerExtensions.Keys)
                {
                    var extensionLevelSummary = character.GetExtensionLevelSummaryByName(ExtensionNames.CORPORATION_FOUNDING_BASIC, ExtensionNames.CORPORATION_FOUNDING_ADVANCED, ExtensionNames.CORPORATION_FOUNDING_EXPERT);
                    enablerExtension.level.ThrowIfGreater(extensionLevelSummary, ErrorCodes.ExtensionLevelMismatch);
                }

                character.SubtractFromWallet(TransactionType.corporationCreate, _corporationManager.Settings.FoundingPrice);

                var corporationDescription = new CorporationDescription
                {
                    name           = corpName,
                    nick           = nick,
                    taxRate        = taxRate,
                    publicProfile  = publicProfile,
                    privateProfile = new Dictionary <string, object>(),
                    isDefault      = false,
                    founder        = character.Id
                };

                var newCorporation = PrivateCorporation.Create(corporationDescription);

                var combinedRole = _corporationManager.GetAllRoles();

                newCorporation.AddMember(character, combinedRole, oldCorporation);
                oldCorporation.RemoveMember(character);

                _channelManager.LeaveChannel(oldCorporation.ChannelName, character);
                _channelManager.CreateAndJoinChannel(ChannelType.Corporation, newCorporation.ChannelName, character);

                character.GetCorporationApplications().DeleteAll();

                //get resulting info
                var corpInfo = newCorporation.GetInfoDictionaryForMember(character);
                Message.Builder.FromRequest(request).WithData(corpInfo).Send();

                _corporationManager.InformCorporationMemberTransferred(oldCorporation, newCorporation, character);

                Transaction.Current.OnCommited(() =>
                {
                    character.GetPlayerRobotFromZone()?.UpdateCorporationOnZone(newCorporation.Eid);
                });

                scope.Complete();
            }
        }
 public static IEnumerable <CorporationApplication> GetApplicationsByCharacter(this PrivateCorporation corporation, Character character)
 {
     return(corporation.GetApplications().Where(a => a.Character == character));
 }
 public static IEnumerable <CorporationApplication> GetApplications(this PrivateCorporation corporation)
 {
     return(CorporationApplication.GetAllByCorporation(corporation));
 }