示例#1
0
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var corpName  = request.Data.GetOrDefault <string>(k.name).Trim();
                var nick      = request.Data.GetOrDefault <string>(k.nick).Trim();
                var character = request.Session.Character;

                //get corp and role check
                var corporation = character.GetCorporation().CheckAccessAndThrowIfFailed(character, CorporationRole.CEO, CorporationRole.DeputyCEO);

                (corporation is PrivateCorporation).ThrowIfFalse(ErrorCodes.CorporationMustBePrivate);

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

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

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

                //write OLD name to alias history
                Corporation.WriteRenameHistory(corporation.Eid, character, corporation.CorporationName, corporation.CorporationNick);

                var product = _mtProductHelper.GetByAccountTransactionType(AccountTransactionType.CorporationRename);

                var account = _accountManager.Repository.Get(request.Session.AccountId).ThrowIfNull(ErrorCodes.AccountNotFound);
                var wallet  = _accountManager.GetWallet(account, AccountTransactionType.CorporationRename);
                wallet.Balance -= product.price;

                var e = new AccountTransactionLogEvent(account, AccountTransactionType.CorporationRename)
                {
                    Credit = wallet.Balance, CreditChange = -product.price
                };
                _accountManager.LogTransaction(e);

                corporation.SetName(corpName, nick);

                _accountRepository.Update(account);

                Transaction.Current.OnCommited(() =>
                {
                    //force cache reload
                    CorporationData.RemoveFromCache(corporation.Eid);

                    //send to members
                    var corpInfo = corporation.GetInfoDictionaryForMember(character);
                    Message.Builder.SetCommand(Commands.CorporationGetMyInfo).WithData(corpInfo).ToCharacters(corporation.GetCharacterMembers()).Send();
                });

                scope.Complete();
            }
        }
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var account = _accountManager.Repository.Get(request.Session.AccountId).ThrowIfNull(ErrorCodes.AccountNotFound);
                var product = _mtProductHelper.GetByAccountTransactionType(AccountTransactionType.EpBoost);

                var wallet = _accountManager.GetWallet(account, AccountTransactionType.EpBoost);
                wallet.Balance -= product.price;
                var e = new AccountTransactionLogEvent(account, AccountTransactionType.EpBoost)
                {
                    Credit = wallet.Balance, CreditChange = -product.price
                };
                _accountManager.LogTransaction(e);

                var currentValidUntil = account.ValidUntil ?? DateTime.MaxValue;

                if (currentValidUntil == DateTime.MaxValue || currentValidUntil < DateTime.Now)
                {
                    //validuntil is NULL -- never purchased an EP boost
                    //validUntil is in the past

                    var startTime = DateTime.Now;
                    var endTime   = DateTime.Now.AddDays(EP_BOOST_PERIOD_LENGTH_IN_DAYS);
                    _accountManager.ExtensionSubscriptionStart(account, startTime, endTime);
                    account.ValidUntil = endTime;
                }
                else
                {
                    //validUntil > now  -- is in the future

                    //extend validuntil
                    var extendedValidUntil = currentValidUntil.AddDays(EP_BOOST_PERIOD_LENGTH_IN_DAYS);

                    _accountManager.ExtensionSubscriptionExtend(account, extendedValidUntil);
                    account.ValidUntil = extendedValidUntil;
                }

                //for stats and stuff
                account.PayingCustomer = true;

                _accountRepository.Update(account);

                Transaction.Current.OnCommited(() =>
                {
                    var info = new Dictionary <string, object>
                    {
                        { k.validUntil, account.ValidUntil }
                    };

                    Message.Builder.FromRequest(request).WithData(info).Send();
                });

                scope.Complete();
            }
        }
示例#3
0
        public override void Activate(Account account, Character character)
        {
            AccountManager.AddExtensionPoints(account, ED.Options.ExtensionPoints);

            var e = new AccountTransactionLogEvent(account, AccountTransactionType.EPRedeem)
            {
                Eid        = Eid,
                Definition = Definition
            };

            AccountManager.LogTransaction(e);
        }
示例#4
0
        public override void Activate(Account account, Character character)
        {
            var wallet = AccountManager.GetWallet(account, AccountTransactionType.IceRedeem);

            wallet.Balance += ICE_CREDIT_VALUE;
            var e = new AccountTransactionLogEvent(account, AccountTransactionType.IceRedeem)
            {
                Credit       = wallet.Balance,
                CreditChange = ICE_CREDIT_VALUE,
                Eid          = Eid
            };

            AccountManager.LogTransaction(e);
        }
示例#5
0
        public override void Activate(Account account, Character character)
        {
            var wallet = AccountManager.GetWallet(account, AccountTransactionType.CreditRedeem);

            wallet.Balance += ED.Options.Credit;
            var e = new AccountTransactionLogEvent(account, AccountTransactionType.CreditRedeem)
            {
                Credit       = wallet.Balance,
                CreditChange = ED.Options.Credit,
                Eid          = Eid
            };

            AccountManager.LogTransaction(e);
        }
示例#6
0
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var account = _accountManager.Repository.Get(request.Session.AccountId).ThrowIfNull(ErrorCodes.AccountNotFound);

                //the locked ep the user wants to release
                var amount = request.Data.GetOrDefault <int>(k.amount);

                (amount <= 0).ThrowIfTrue(ErrorCodes.WTFErrorMedicalAttentionSuggested);

                var currentlockedEp = _accountManager.GetLockedEpByAccount(account);

                (amount > currentlockedEp).ThrowIfTrue(ErrorCodes.InputTooHigh);

                var creditCost = (int)Math.Ceiling(amount / 60.0);

                var wallet = _accountManager.GetWallet(account, AccountTransactionType.FreeLockedEp);
                wallet.Balance -= creditCost;

                var e = new AccountTransactionLogEvent(account, AccountTransactionType.FreeLockedEp)
                {
                    Credit = wallet.Balance, CreditChange = -1 * creditCost
                };
                _accountManager.LogTransaction(e);

                //inject VS delete

                //delete version
                _accountManager.FreeLockedEp(account, amount);

                _accountRepository.Update(account);

                var character = request.Session.Character;
                var data      = _accountManager.GetEPData(account, character);

                Message.Builder.FromRequest(request).WithData(data).Send();

                scope.Complete();
            }
        }
示例#7
0
        public override void Activate(Account account, Character character)
        {
            if (_sparkHelper.IsSparkUnlocked(character, ED.Options.SparkID))
            {
                throw new PerpetuumException(ErrorCodes.SparkAlreadyUnlocked);
            }

            _sparkHelper.UnlockSpark(character, ED.Options.SparkID);

            var e = new AccountTransactionLogEvent(account, AccountTransactionType.SparkRedeem)
            {
                Eid = Eid
            };

            AccountManager.LogTransaction(e);

            Transaction.Current.OnCommited(() =>
            {
                _sparkHelper.CreateSparksListMessage(character).ToCharacter(character).Send();
            });
        }
示例#8
0
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var account = _accountManager.Repository.Get(request.Session.AccountId).ThrowIfNull(ErrorCodes.AccountNotFound);

                var character = Character.Get(request.Data.GetOrDefault <int>(k.characterID));

                if (character == Character.None)
                {
                    throw new PerpetuumException(ErrorCodes.CharacterNotFound);
                }

                //only characters that belong to the issuers account
                if (character.AccountId != account.Id)
                {
                    throw new PerpetuumException(ErrorCodes.AccessDenied);
                }

                (character.IsDocked).ThrowIfFalse(ErrorCodes.CharacterHasToBeDocked);

                var product = _mtProductHelper.GetByAccountTransactionType(AccountTransactionType.ExtensionReset);
                var wallet  = _accountManager.GetWallet(account, AccountTransactionType.ExtensionReset);

                wallet.Balance -= product.price;

                var e = new AccountTransactionLogEvent(account, AccountTransactionType.ExtensionReset)
                {
                    Credit       = wallet.Balance,
                    CreditChange = -product.price
                };

                _accountManager.LogTransaction(e);

                _accountRepository.Update(account);

                //current extensions
                var extensionCollection = character.GetExtensions();

                //default extensions
                var defaultExtensionHandler = new CharacterDefaultExtensionHelper(character);

                foreach (var extension in extensionCollection)
                {
                    //returns 0 if the extension is not starter extension
                    //returns the minimum level if the extension is starter
                    int newLevel;
                    defaultExtensionHandler.IsStartingExtension(extension, out newLevel);

                    var resultExtension = new Extension(extension.id, newLevel);

                    character.SetExtension(resultExtension);
                }

                character.DeleteAllSpentPoints();

                //ezt nem csinalja, csak nyersen reseteli az extensionoket

                /*
                 * ExtensionHelper.DeleteAllNonForeverPenaltyPoints(character);
                 */

                // %%% itt hagytuk abba

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

                scope.Complete();
            }
        }
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var account = _accountManager.Repository.Get(request.Session.AccountId).ThrowIfNull(ErrorCodes.AccountNotFound);

                var nick            = request.Data.GetOrDefault <string>(k.nick).Trim();
                var targetCharacter = Character.Get(request.Data.GetOrDefault <int>(k.characterID));

                if (targetCharacter == Character.None)
                {
                    throw new PerpetuumException(ErrorCodes.CharacterNotFound);
                }

                //only characters that belong to the issuers account
                if (targetCharacter.AccountId != account.Id)
                {
                    throw new PerpetuumException(ErrorCodes.AccessDenied);
                }

                //sosem fordulhat elo, de azert megis
                if (!targetCharacter.IsActive)
                {
                    throw new PerpetuumException(ErrorCodes.AccessDenied);
                }

                //check nick and other conditions
                Character.CheckNickAndThrowIfFailed(nick, request.Session.AccessLevel, account);

                //withdrw credit
                var product = _mtProductHelper.GetByAccountTransactionType(AccountTransactionType.CharacterRename);
                var wallet  = _accountManager.GetWallet(account, AccountTransactionType.CharacterRename);
                wallet.Balance -= product.price;

                var e = new AccountTransactionLogEvent(account, AccountTransactionType.CharacterRename)
                {
                    Credit       = wallet.Balance,
                    CreditChange = -product.price
                };

                _accountManager.LogTransaction(e);

                //do the heavy lifting
                var oldNick = targetCharacter.Nick;
                targetCharacter.Nick = nick;

                //log
                Db.Query().CommandText("INSERT dbo.characternickhistory ( characterid, accountid, nick ) VALUES  ( @characterid, @accountid, @nick )")
                .SetParameter("@characterid", targetCharacter.Id)
                .SetParameter("@accountid", account.Id)
                .SetParameter("@nick", oldNick)
                .ExecuteNonQuery();

                _accountRepository.Update(account);

                Transaction.Current.OnCommited(() =>
                {
                    var character = request.Session.Character;

                    if (_characterProfiles is CachedReadOnlyRepository <int, CharacterProfile> cached)
                    {
                        cached.Remove(character.Id);
                    }

                    var profile = character.GetFullProfile();
                    Message.Builder
                    .FromRequest(request)
                    .SetCommand(Commands.CharacterGetMyProfile)
                    .WithData(profile).Send();
                });

                scope.Complete();
            }
        }
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var account     = _accountManager.Repository.Get(request.Session.AccountId).ThrowIfNull(ErrorCodes.AccountNotFound);
                var character   = request.Session.Character;
                var extensionId = request.Data.GetOrDefault <int>(k.extensionID);
                var isAdmin     = request.Session.AccessLevel.IsAdminOrGm();


                //only docked
                character.IsDocked.ThrowIfFalse(ErrorCodes.CharacterHasToBeDocked);

                var extensionInfo = _extensionReader.GetExtensionByID(extensionId).ThrowIfNull(ErrorCodes.ExtensionNotFound);

                //validate extension

                var currentExtensionLevel = character.GetExtensionLevel(extensionId);

                //this extension is not learnt for this character yet
                currentExtensionLevel.ThrowIfLessOrEqual(0, ErrorCodes.ItemNotFound);

                var defaultExtensionHandler = new CharacterDefaultExtensionHelper(character);

                if (defaultExtensionHandler.IsStartingExtension(extensionInfo, out int minimumLevel))
                {
                    (currentExtensionLevel == minimumLevel).ThrowIfTrue(ErrorCodes.ExtensionMinimumReached);
                }


                if (currentExtensionLevel == 1)
                {
                    //extension is getting deleted
                }


                // these extensions need the current one on a specific level as a requirement
                var prerequiredOf = _extensionReader.GetPrerequiredExtensionsOf(extensionId);

                var learntExtensions = character.GetExtensions().ToList();

                foreach (var requiresExtension in prerequiredOf)
                {
                    foreach (var learntExtension in learntExtensions)
                    {
                        if (learntExtension.id != requiresExtension.id)
                        {
                            continue;
                        }

                        if (requiresExtension.level < currentExtensionLevel)
                        {
                            continue;
                        }

                        //extension cant be downgraded because
                        Logger.DebugWarning($"extension:{_extensionReader.GetExtensionName(requiresExtension.id)} requires:{_extensionReader.GetExtensionName(extensionId)} on level:{requiresExtension.level} current level:{currentExtensionLevel}  requests:{requiresExtension.id}->this:{extensionId}");
                        throw PerpetuumException.Create(ErrorCodes.ExtensionIsRequired)
                              .SetData("thisNeeds", requiresExtension.id)
                              .SetData("level", requiresExtension.level)
                              .SetData("downgrading", extensionId);
                    }
                }

                var spentId     = 0;
                var spentPoints = 0;
                character.GetTableIndexForAccountExtensionSpent(extensionId, currentExtensionLevel, ref spentId, ref spentPoints);

                if (spentId == 0)
                {
                    isAdmin.ThrowIfFalse(ErrorCodes.ExtensionLevelCantBeRemoved);
                }

                //add negative spent points
                var spentPoints1   = -1 * spentPoints;
                var extensionLevel = currentExtensionLevel - 1;
                _accountManager.AddExtensionPointsSpent(account, character, spentPoints1, extensionId, extensionLevel);

                //insert log
                _accountManager.InsertExtensionRemoveLog(account, character, extensionId, currentExtensionLevel, spentPoints);
                character.SetExtension(new Extension(extensionId, currentExtensionLevel - 1));

                var price = spentPoints / 60;

                //var priceBase = AccountWallet.GetProductPrice(AccountTransactionType.extensionRemoveLevel.ToString().ToLower());
                //var price = currentExtensionLevel * priceBase; //current level * base price

                var wallet = _accountManager.GetWallet(account, AccountTransactionType.ExtensionRemoveLevel);
                wallet.Balance -= price;
                var e = new AccountTransactionLogEvent(account, AccountTransactionType.ExtensionRemoveLevel)
                {
                    Credit = wallet.Balance, CreditChange = -price
                };
                _accountManager.LogTransaction(e);

                _accountRepository.Update(account);

                var result = _accountManager.GetEPData(account, character);

                //The amount of EP gained
                result.Add("pointsReturned", spentPoints);
                result.Add(k.extensionID, extensionId);
                result.Add(k.extensionLevel, currentExtensionLevel - 1);

                Message.Builder.FromRequest(request).WithData(result).Send();

                scope.Complete();
            }
        }