コード例 #1
0
        public void HandleRequest(IRequest request)
        {
            var offsetInDays = request.Data.GetOrDefault <int>(k.offset);
            var siteEid      = request.Data.GetOrDefault <long>(k.eid);

            var outpost  = _dockingBaseHelper.GetDockingBase(siteEid).ThrowIfNotType <Outpost>(ErrorCodes.ItemNotFound);
            var siteInfo = outpost.GetIntrusionSiteInfo();

            var character      = request.Session.Character;
            var corporationEid = character.CorporationEid;

            siteInfo.Owner.ThrowIfNotEqual(corporationEid, ErrorCodes.AccessDenied);

            var sapActivityDict   = outpost.GetIntrusionCorporationLog(offsetInDays, corporationEid);
            var dockingRightsDict = outpost.GetDockingRightsLog(offsetInDays, corporationEid);
            var effectsDict       = outpost.GetIntrusionEffectLog(offsetInDays, corporationEid);
            var messageLogDict    = outpost.GetMessageChangeLog(offsetInDays, corporationEid);
            var productionLog     = outpost.GetIntrusionProductionLog(offsetInDays, corporationEid);

            Message.Builder.FromRequest(request).WithData(new Dictionary <string, object>
            {
                { "activityLog", sapActivityDict },
                { "dockingRightsLog", dockingRightsDict },
                { "effectsLog", effectsDict },
                { "messageLog", messageLogDict },
                { "production", productionLog },
                { k.siteEID, siteEid }
            }).Send();
        }
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var baseEid = request.Data.GetOrDefault <long>(k.baseEID);

                var dockingBase = _dockingBaseHelper.GetDockingBase(baseEid);

                var hangarStorage = dockingBase.GetPublicCorporationHangarStorage();
                if (hangarStorage == null)
                {
                    //hangar already exists
                    throw new PerpetuumException(ErrorCodes.ItemAlreadyExists);
                }

                var mainHangar = Entity.Factory.CreateWithRandomEID(DefinitionNames.PUBLIC_CORPORATE_HANGARS_STORAGE);
                mainHangar.Owner  = dockingBase.Owner;
                mainHangar.Parent = baseEid;
                mainHangar.Save();

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

                scope.Complete();
            }
        }
コード例 #3
0
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var eid = request.Data.GetOrDefault <long>(k.eid);

                var dockingBase = _dockingBaseHelper.GetDockingBase(eid);
                if (dockingBase == null)
                {
                    throw new PerpetuumException(ErrorCodes.DockingBaseNotFound);
                }

                if (request.Data.TryGetValue(k.welcome, out string welcome))
                {
                    dockingBase.DynamicProperties.Update(k.welcome, welcome);
                }

                if (request.Data.TryGetValue(k.name, out string name))
                {
                    dockingBase.Name = name;
                }

                dockingBase.Save();

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

                scope.Complete();
            }
        }
コード例 #4
0
        private SparkTeleport CreateFromRecord(IDataRecord record)
        {
            var teleport = new SparkTeleport();

            teleport.ID = record.GetValue <int>("id");
            var baseEid = record.GetValue <long>("baseeid");

            teleport.DockingBase = _dockingBaseHelper.GetDockingBase(baseEid);
            teleport.Character   = Character.Get(record.GetValue <int>("characterid"));
            return(teleport);
        }
コード例 #5
0
        public void HandleRequest(IRequest request)
        {
            var daysBack = request.Data.GetOrDefault <int>(k.day);
            var siteEid  = request.Data.GetOrDefault <long>(k.eid);

            var outpost         = _dockingBaseHelper.GetDockingBase(siteEid).ThrowIfNotType <Outpost>(ErrorCodes.ItemNotFound);
            var sapActivityDict = outpost.GetIntrusionStabilityLog(daysBack);

            Message.Builder.FromRequest(request)
            .WithData(new Dictionary <string, object> {
                { "stabilityLog", sapActivityDict }, { k.siteEID, siteEid }
            })
            .Send();
        }
コード例 #6
0
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var siteEid   = request.Data.GetOrDefault <long>(k.eid);
                var message   = request.Data.GetOrDefault <string>(k.message);
                var character = request.Session.Character;

                var eventType    = IntrusionEvents.messageSet;
                var clearMessage = false;
                if (string.IsNullOrEmpty(message))
                {
                    clearMessage = true;
                    eventType    = IntrusionEvents.messageClear;
                }

                var outpost  = _dockingBaseHelper.GetDockingBase(siteEid).ThrowIfNotType <Outpost>(ErrorCodes.ItemNotFound);
                var siteInfo = outpost.GetIntrusionSiteInfo();

                var owner = siteInfo.Owner.ThrowIfNull(ErrorCodes.AccessDenied);
                siteInfo.Owner.ThrowIfNotEqual(character.CorporationEid, ErrorCodes.AccessDenied);

                var role = Corporation.GetRoleFromSql(character);
                role.IsAnyRole(CorporationRole.CEO, CorporationRole.DeputyCEO, CorporationRole.PRManager).ThrowIfFalse(ErrorCodes.InsufficientPrivileges);

                if (!message.IsNullOrEmpty() && message.Length > 256)
                {
                    message = message.Substring(0, 256);
                }

                if (clearMessage)
                {
                    outpost.ClearSiteMessage();
                }
                else
                {
                    outpost.SetSiteMessage(message);
                }

                outpost.InsertIntrusionSiteMessageLog(character, message, owner, eventType);

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

                Transaction.Current.OnCommited(() => outpost.SendSiteInfoToOnlineCharacters());

                scope.Complete();
            }
        }
コード例 #7
0
        public void HandleRequest(IRequest request)
        {
            var baseEid     = request.Data.GetOrDefault <long>(k.baseEID);
            var dockingBase = _dockingBaseHelper.GetDockingBase(baseEid);

            if (dockingBase == null)
            {
                throw new PerpetuumException(ErrorCodes.DockingBaseNotFound);
            }

            var publicContainer = dockingBase.GetPublicContainerWithItems(request.Session.Character);
            var result          = publicContainer.ToDictionary();

            result.Add(k.baseEID, baseEid);
            Message.Builder.FromRequest(request).WithData(result).Send();
        }
コード例 #8
0
        public void HandleRequest(IRequest request)
        {
            var baseEid     = request.Data.GetOrDefault <long>(k.baseEID);
            var dockingBase = _dockingBaseHelper.GetDockingBase(baseEid);

            if (dockingBase is PBSDockingBase pbsDockingBase)
            {
                //after successful login this is just a check... maybe useless
                var issuerCharacter = request.Session.Character;
                pbsDockingBase.IsDockingAllowed(issuerCharacter).ThrowIfError();
            }

            var dockingBaseInfo = dockingBase?.ToDictionary();

            Message.Builder.FromRequest(request).WithData(dockingBaseInfo).Send();
        }
コード例 #9
0
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var id = request.Data.GetOrDefault <int>(k.characterID);
                var characterSession = _sessionManager.GetByCharacter(id);
                var Zone             = characterSession.Character.GetCurrentZone();

                var baseEid     = 561; // TMA.
                var dockingbase = _dockingBaseHelper.GetDockingBase(baseEid);
                var player      = Zone.GetPlayer(characterSession.Character.GetActiveRobot().Eid);
                player.DockToBase(Zone, dockingbase);

                Message.Builder.ToClient(characterSession).WithError(ErrorCodes.YouAreHappyNow).Send();

                scope.Complete();
            }
        }
コード例 #10
0
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                const string sqlCmd = "SELECT characterID,activeChassis,baseEID FROM dbo.characters WHERE docked = 0";

                var records = Db.Query().CommandText(sqlCmd).Execute();

                foreach (var group in records.GroupBy(r => r.GetValue <long>(2)))
                {
                    try
                    {
                        var publicContainer = _dockingBaseHelper.GetDockingBase(group.Key).GetPublicContainer();

                        foreach (var record in group)
                        {
                            var character = Character.Get(record.GetValue <int>(0));
                            var robotEid  = record.GetValue <long>(1);

                            var robot = Robot.GetOrThrow(robotEid);

                            robot.Initialize(character);
                            robot.Parent = publicContainer.Eid;

                            robot.Save();
                            Logger.Info("dockAll: robot (" + robotEid + ") => container (" + publicContainer.Eid + ") ok.");
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Exception(ex);
                    }
                }

                var id = records.Select(r => r.GetValue <int>(0).ToString(CultureInfo.InvariantCulture)).Aggregate((a, b) => a + "," + b);

                var updateCmd = "update characters set docked = 1,zoneid = null,instanceid = null,positionX = null,positionY = null,positionZ = null where characterid in (" + id + ")";
                Db.Query().CommandText(updateCmd).ExecuteNonQuery();

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

                scope.Complete();
            }
        }
コード例 #11
0
ファイル: Player.cs プロジェクト: pahpa/PerpetuumServer
        public void CheckDockingConditionsAndThrow(long baseEid, bool checkRange = true)
        {
            if (!Session.AccessLevel.IsAdminOrGm())
            {
                HasAggressorEffect.ThrowIfTrue(ErrorCodes.NotAllowedForAggressors);
                HasPvpEffect.ThrowIfTrue(ErrorCodes.CantDockThisState);
                HasTeleportSicknessEffect.ThrowIfTrue(ErrorCodes.CantDockThisState);
            }

            var zone = Zone;

            if (zone == null)
            {
                return;
            }

            var dockingBase = _dockingBaseHelper.GetDockingBase(baseEid);

            if (dockingBase == null)
            {
                return;
            }

            if (dockingBase.Zone == zone)
            {
                // csak akkor van range check ha a terepen van
                if (checkRange)
                {
                    // alapbol van checkrange
                    dockingBase.IsInDockingRange(this).ThrowIfFalse(ErrorCodes.DockingOutOfRange);
                }
            }

            var currentAccess = Session.AccessLevel;

            if (!currentAccess.IsAdminOrGm())
            {
                dockingBase.IsDockingAllowed(Character).ThrowIfError();
            }

            DockToBase(zone, dockingBase);
        }
コード例 #12
0
        public void HandleRequest(IRequest request)
        {
            var character = request.Session.Character;
            var inBaseEid = request.Data.GetOrDefault <long>(k.baseEID);

            var dockingBase = _dockingBaseHelper.GetDockingBase(inBaseEid == 0 ? character.CurrentDockingBaseEid : inBaseEid);

            if (dockingBase == null)
            {
                throw new PerpetuumException(ErrorCodes.DockingBaseNotFound);
            }

            var shop   = dockingBase.GetItemShop();
            var result = shop.EntriesToDictionary();

            Message.Builder.FromRequest(request)
            .WithData(new Dictionary <string, object> {
                { k.shop, result },
            })
            .Send();
        }
コード例 #13
0
 protected override Entity LoadParentEntity(long parent)
 {
     return(DockingBaseHelper.GetDockingBase(parent));
 }
コード例 #14
0
 public DockingBase GetDockingBase()
 {
     return(_dockingBaseHelper.GetDockingBase(Parent));
 }
コード例 #15
0
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var character = request.Session.Character;

                var    lockBase      = request.Data.GetOrDefault <int>(k.locked) == 1;
                double?standingLimit = request.Data.GetOrDefault <double>(k.standing);
                var    baseEid       = request.Data.GetOrDefault <long>(k.baseEID);

                var eventType = IntrusionEvents.dockingRightsSet;
                if (!lockBase)
                {
                    standingLimit = null; //opening the outpost for everyone
                    eventType     = IntrusionEvents.dockingRightsClear;
                }

                if (!(_dockingBaseHelper.GetDockingBase(baseEid) is Outpost outpost))
                {
                    throw new PerpetuumException(ErrorCodes.OperationAllowedOnlyOnIntrusionSites);
                }

                var siteInfo = outpost.GetIntrusionSiteInfo();
                if (siteInfo.DockingStandingLimit == standingLimit)
                {
                    //nothing to do => exit
                    Message.Builder.FromRequest(request).WithData(new Dictionary <string, object> {
                        { k.baseEID, outpost.Eid }
                    }).Send();
                    return;
                }

                var owner = siteInfo.Owner.ThrowIfNull(ErrorCodes.AccessDenied);

                var corporationEid = character.CorporationEid;

                //only owner corp controls the docking rights
                corporationEid.ThrowIfNotEqual((long)owner, ErrorCodes.AccessDenied);

                DefaultCorporationDataCache.IsCorporationDefault(corporationEid).ThrowIfTrue(ErrorCodes.CharacterMustBeInPrivateCorporation);

                var role = Corporation.GetRoleFromSql(character);
                role.IsAnyRole(CorporationRole.CEO, CorporationRole.DeputyCEO, CorporationRole.Accountant).ThrowIfFalse(ErrorCodes.InsufficientPrivileges);

                var stabilityLimit = Outpost.GetDockingRightsStabilityLimit();

                siteInfo.Stability.ThrowIfLess(stabilityLimit, ErrorCodes.StabilityTooLow);

                var dockingControlLimit = siteInfo.DockingControlLimit;
                if (dockingControlLimit != null)
                {
                    DateTime.Now.ThrowIfLess((DateTime)dockingControlLimit, ErrorCodes.DockingRightsChangeCooldownInProgress);
                }

                outpost.SetDockingControlDetails(standingLimit, !lockBase);
                outpost.InsertDockingRightsLog(character, standingLimit, corporationEid, eventType);

                Transaction.Current.OnCommited(() => outpost.SendSiteInfoToOnlineCharacters());

                Message.Builder.FromRequest(request).WithData(new Dictionary <string, object> {
                    { k.baseEID, baseEid }
                }).Send();

                scope.Complete();
            }
        }
コード例 #16
0
        public DockingBase GetDockingBase()
        {
            var dockingBase = DockingBaseHelper.GetDockingBase(Parent);

            return(dockingBase);
        }
コード例 #17
0
        public void HandleRequest(IRequest request)
        {
            var result         = new Dictionary <string, object>();
            var charactersDict = new Dictionary <string, object>();

            var count = 0;

            var records = Db.Query().CommandText(@"select
c.characterid as characterid,
c.rootEID as rooteid,
c.moodMessage as moodmessage,
c.lastUsed as lastused,
c.creation as creation,
c.credit as credit,
c.nick as nick,
c.inUse as inuse,
c.avatar as avatar,
c.docked as docked,
c.activechassis as activechassis,
c.zoneID as zoneid,
c.baseEID as baseeid,
c.homebaseEID as homebaseeid,
c.offensivenick as offensivenick,
e.ename as currentbasename,
h.ename as homebasename
from characters c JOIN entities e on e.eid=c.baseEID 
LEFT JOIN entities h ON c.homebaseEID=h.eid 
where accountID = @accountID and active = 1").SetParameter("@accountID", request.Session.AccountId)
                          .Execute();

            foreach (var record in records)
            {
                var characterID     = record.GetValue <int>("characterid");
                var isDocked        = record.GetValue <bool>("docked");
                var zoneId          = record.GetValue <int?>("zoneid");
                var currentBaseEID  = record.GetValue <long>("baseeid");
                var homeBaseEID     = record.GetValue <long?>("homebaseeid") ?? 0L;
                var offensiveNick   = record.GetValue <bool>("offensivenick");
                var currentBaseName = record.GetValue <string>("currentbasename");
                var homeBaseName    = record.GetValue <string>("homebasename");
                var moodMessage     = record.GetValue <string>("moodmessage");
                var lastUsed        = record.GetValue <DateTime?>("lastused");
                var creation        = record.GetValue <DateTime>("creation");
                var credit          = record.GetValue <double>("credit");
                var nick            = record.GetValue <string>("nick");
                var inUse           = record.GetValue <bool>("inuse");
                var avatar          = record.GetValue <string>("avatar");
                var rootEid         = record.GetValue <long>("rooteid");

                var currentDockingBase = _dockingBaseHelper.GetDockingBase(currentBaseEID);
                var homeDockingBase    = _dockingBaseHelper.GetDockingBase(homeBaseEID);

                var dict = new Dictionary <string, object>
                {
                    { k.characterID, characterID },
                    { k.rootEID, rootEid },
                    { k.moodMessage, moodMessage },
                    { k.lastUsed, lastUsed },
                    { k.creation, creation },
                    { k.credit, (long)credit },
                    { k.nick, nick },
                    { k.inUse, inUse ? 1 : 0 },
                    { k.avatar, (GenxyString)avatar },
                    { k.docked, isDocked },
                    { k.zoneID, zoneId },
                    { k.baseEID, currentBaseEID },
                    { k.homeBaseEID, homeBaseEID },
                    { k.baseName, currentBaseName },
                    { k.homeBaseName, homeBaseName },
                    { k.offensiveNick, offensiveNick },
                    { k.currentBaseZone, currentDockingBase?.Zone.Id },
                    { k.homeBaseZone, homeDockingBase?.Zone.Id },
                    { k.baseDefinition, currentDockingBase?.Definition },
                    { k.homeBaseDefinition, homeDockingBase?.Definition },
                    { k.dockingBaseInfo, currentDockingBase?.GetDockingBaseDetails() }
                };

                charactersDict.Add("c" + count++, dict);
            }

            result.Add("characters", charactersDict);

            var account = _accountManager.Repository.Get(request.Session.AccountId);
            var ep      = _accountManager.CalculateCurrentEp(account);

            result.Add("extensionPoints", ep);

            Message.Builder.FromRequest(request).WithData(result).WrapToResult().WithEmpty().Send();
        }
コード例 #18
0
        /// <summary>
        /// take credit for the production from the character
        /// </summary>
        public bool TryWithdrawCredit()
        {
            Logger.Info("withdrawing credit for: " + this);

            var transactionType = TransactionType.ProductionManufacture;

            switch (type)
            {
            case ProductionInProgressType.licenseCreate:
            case ProductionInProgressType.manufacture:
            case ProductionInProgressType.patentMaterialEfficiencyDevelop:
            case ProductionInProgressType.patentNofRunsDevelop:
            case ProductionInProgressType.patentTimeEfficiencyDevelop:
            {
                Logger.Error("consistency error! outdated production type. " + type);
                throw new PerpetuumException(ErrorCodes.ServerError);
            }

            case ProductionInProgressType.research:
                transactionType = TransactionType.ProductionResearch;
                break;

            case ProductionInProgressType.prototype:
                transactionType = TransactionType.ProductionPrototype;
                break;

            case ProductionInProgressType.massProduction:
                transactionType = TransactionType.ProductionMassProduction;
                break;

            case ProductionInProgressType.calibrationProgramForge:
                transactionType = TransactionType.ProductionCPRGForge;
                break;
            }

            //no price, no process
            if (Math.Abs(Price) < double.Epsilon)
            {
                Logger.Info("price is 0 for " + this);
                return(true);
            }

            //take his money
            creditTaken = Price; //safety for the cancel

            var wallet = character.GetWallet(useCorporationWallet, transactionType);

            if (wallet.Balance < Price)
            {
                return(false);
            }

            wallet.Balance -= Price;

            var b = TransactionLogEvent.Builder()
                    .SetTransactionType(transactionType)
                    .SetCreditBalance(wallet.Balance)
                    .SetCreditChange(-Price)
                    .SetCharacter(character)
                    .SetItem(resultDefinition, GetResultingAmount());
            var corpWallet = wallet as CorporationWallet;

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

            _dockingBaseHelper.GetDockingBase(baseEID).AddCentralBank(transactionType, Price);
            return(true);
        }
コード例 #19
0
        public DockingBase GetDockingBase()
        {
            var eid = DockingBaseEids[Eid];

            return(_dockingBaseHelper.GetDockingBase(eid));
        }
コード例 #20
0
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var character = request.Session.Character;

                var primaryactivity   = request.Data.GetOrDefault(k.primaryActivity, -1);
                var primaryzone       = request.Data.GetOrDefault(k.zoneID, -1);
                var primarybase       = request.Data.GetOrDefault(k.baseEID, (long)-1);
                var orientation       = request.Data.GetOrDefault(k.orientation, -1);
                var lookingfor        = request.Data.GetOrDefault(k.lookingFor, -1);
                var preferredfaction  = request.Data.GetOrDefault(k.preferredFaction, -1);
                var providesinsurance = request.Data.GetOrDefault(k.providesInsurance, -1);
                var timezone          = request.Data.GetOrDefault(k.timeZone, -1);
                var requiredactivity  = request.Data.GetOrDefault(k.requiredActivity, -1);
                var communication     = request.Data.GetOrDefault(k.communication, -1);
                var services          = request.Data.GetOrDefault(k.services, -1);

                var updateList = new List <string>();
                var insertDict = new Dictionary <string, object>();

                var corporationeid = character.CorporationEid;

                DefaultCorporationDataCache.IsCorporationDefault(corporationeid).ThrowIfTrue(ErrorCodes.CharacterMustBeInPrivateCorporation);

                var role = Corporation.GetRoleFromSql(character);
                role.IsAnyRole(CorporationRole.CEO, CorporationRole.DeputyCEO, CorporationRole.HRManager, CorporationRole.PRManager).ThrowIfFalse(ErrorCodes.InsufficientPrivileges);

                var update = false;

                var query = Db.Query();

                var id = query.CommandText("select id from yellowpages where corporationeid=@corporationeid")
                         .SetParameter("@corporationeid", corporationeid)
                         .ExecuteScalar <int>();

                if (id > 0)
                {
                    update = true;
                }

                insertDict.Add("corporationeid", corporationeid);

                if (primaryactivity >= 0)
                {
                    insertDict.Add("primaryactivity", primaryactivity);
                    updateList.Add("primaryactivity=@primaryactivity ");
                    query.SetParameter("@primaryactivity", primaryactivity);
                }

                if (primaryzone >= 0)
                {
                    _zoneManager.ContainsZone(primaryzone).ThrowIfFalse(ErrorCodes.ZoneNotFound);
                    insertDict.Add("zoneID", primaryzone);
                    updateList.Add("zoneID = @primaryzone ");
                    query.SetParameter("@primaryzone", primaryzone);
                }

                //set explicitely on the client
                if (request.Data.ContainsKey(k.zoneID) && primaryzone == -1)
                {
                    updateList.Add("zoneID = NULL ");
                }

                //na ezert nem lehet pbs base-t a yellow pagesbe beallitani
                if (primarybase > 0)
                {
                    var dockingBase = _dockingBaseHelper.GetDockingBase(primarybase);
                    insertDict.Add("baseEID", dockingBase.Eid);
                    updateList.Add("baseEID = @primarybase ");
                    query.SetParameter("@primarybase", primarybase);
                }

                if (request.Data.ContainsKey(k.baseEID) && primarybase == -1)
                {
                    updateList.Add("baseEID = NULL ");
                }

                if (orientation >= 0)
                {
                    insertDict.Add("orientation", orientation);
                    updateList.Add("orientation=@orientation ");
                    query.SetParameter("@orientation", orientation);
                }

                if (lookingfor >= 0)
                {
                    insertDict.Add("lookingfor", lookingfor);
                    updateList.Add("lookingfor=@lookingfor ");
                    query.SetParameter("@lookingfor", lookingfor);
                }

                if (preferredfaction >= 0)
                {
                    insertDict.Add("preferredfaction", preferredfaction);
                    updateList.Add("preferredfaction = @preferredfaction ");
                    query.SetParameter("@preferredfaction", preferredfaction);
                }

                if (request.Data.ContainsKey(k.preferredFaction) && preferredfaction == -1)
                {
                    updateList.Add("preferredfaction = NULL ");
                }

                if (providesinsurance >= 0)
                {
                    insertDict.Add("providesinsurance", providesinsurance);
                    updateList.Add("providesinsurance=@providesinsurance ");
                    query.SetParameter("@providesinsurance", providesinsurance);
                }

                if (timezone >= 0)
                {
                    insertDict.Add("timezone", timezone);
                    updateList.Add("timezone=@timezone ");
                    query.SetParameter("@timezone", timezone);
                }

                if (requiredactivity >= 0)
                {
                    insertDict.Add("requiredactivity", requiredactivity);
                    updateList.Add("requiredactivity=@requiredactivity ");
                    query.SetParameter("@requiredactivity", requiredactivity);
                }

                if (communication >= 0)
                {
                    insertDict.Add("communication", communication);
                    updateList.Add("communication=@communication ");
                    query.SetParameter("@communication", communication);
                }

                if (services >= 0)
                {
                    insertDict.Add("services", services);
                    updateList.Add("services=@services");
                    query.SetParameter("@services", services);
                }

                updateList.Count.ThrowIfEqual(0, ErrorCodes.NothingDefined);

                string cmdStr;

                if (update)
                {
                    cmdStr = "update yellowpages set " + updateList.ArrayToString() + " where id=@id";
                    query.CommandText(cmdStr).SetParameter("@id", id);
                }
                else
                {
                    cmdStr = insertDict.ToInsertString("yellowpages", "nothing");
                    query.CommandText(cmdStr);
                }

                query.ExecuteNonQuery().ThrowIfNotEqual(1, ErrorCodes.SQLExecutionError);

                var entry  = _corporationManager.GetYellowPages(corporationeid);
                var result = new Dictionary <string, object> {
                    { k.data, entry }
                };
                Message.Builder.FromRequest(request).WithData(result).Send();
                CorporationData.RemoveFromCache(corporationeid);

                scope.Complete();
            }
        }
コード例 #21
0
        public void HandleRequest(IRequest request)
        {
            using (var scope = Db.CreateTransaction())
            {
                var character = request.Session.Character;
                var member    = Character.Get(request.Data.GetOrDefault <int>(k.memberID));
                var role      = request.Data.GetOrDefault <CorporationRole>(k.role);

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


                var corporation = character.GetCorporation().CheckAccessAndThrowIfFailed(character, CorporationRole.CEO, CorporationRole.DeputyCEO);

                var isIssuerCEO = corporation.HasAllRoles(character, CorporationRole.CEO);

                //check target
                corporation.IsMember(member).ThrowIfFalse(ErrorCodes.NotMemberOfCorporation);

                _corporationManager.IsInLeavePeriod(member).ThrowIfTrue(ErrorCodes.RoleChangeOnLeavingMember);

                var CEOBitSet = ((int)role & (int)CorporationRole.CEO) > 0;

                if (!isIssuerCEO)
                {
                    //only CEO can set a roles of a CEO
                    corporation.HasAllRoles(member, CorporationRole.CEO).ThrowIfTrue(ErrorCodes.InsufficientPrivileges);
                }

                (CEOBitSet && !isIssuerCEO).ThrowIfTrue(ErrorCodes.InsufficientPrivileges);

                //issuer is ceo and he/she wants to clear his/her own CEO role
                if (isIssuerCEO && (member == character))
                {
                    CEOBitSet.ThrowIfFalse(ErrorCodes.CharacterIsCEOOperationFailed);
                }

                //if the CEO wants to resign
                if (isIssuerCEO && (member != character))
                {
                    //ceo bit set
                    if (CEOBitSet)
                    {
                        //target member VS current corpmember amount check
                        corporation.CheckMaxMemberCountAndThrowIfFailed(member);

                        //resign as CEO -----------

                        //old roles
                        var currentRole = corporation.GetMemberRole(character);
                        currentRole = currentRole.ClearRole(CorporationRole.CEO);
                        currentRole = currentRole.SetRole(CorporationRole.DeputyCEO);

                        //clear the current CEO's CEO role
                        corporation.SetMemberRole(character, currentRole);

                        //new roles
                        var newRole = corporation.GetMemberRole(character);

                        corporation.WriteRoleHistory(character, character, newRole, currentRole);
                        //%%% remove alliance board nem kene?
                    }
                }

                role = role.CleanUpHangarAccess();
                role = role.CleanUpCharacterPBSRoles();

                //target member's role
                var oldRole = corporation.GetMemberRole(member);

                const int deputyMask = (int)CorporationRole.DeputyCEO;

                var targetDeputyStatus    = (int)oldRole & deputyMask;
                var targetNewDeputyStatus = (int)role & deputyMask;

                (targetNewDeputyStatus != targetDeputyStatus && !isIssuerCEO).ThrowIfTrue(ErrorCodes.InsufficientPrivileges);

                //set the actual target member's role
                corporation.SetMemberRole(member, role);
                corporation.WriteRoleHistory(character, member, role, oldRole);
                //            corporation.GetLogger().SetMemberRole(character,member);
                corporation.Save();

                _channelManager.SetMemberRole(corporation.ChannelName, member, role);

                if (member.IsDocked)
                {
                    var dockingBase = _dockingBaseHelper.GetDockingBase(member.CurrentDockingBaseEid);
                    if (dockingBase is PBSDockingBase pbsDockingBase)
                    {
                        _channelManager.SetMemberRole(pbsDockingBase.ChannelName, member, role);
                    }
                }

                CorporationData.RemoveFromCache(corporation.Eid);

                scope.Complete();
            }
        }