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(); } }
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(); } }
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); }
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(); }
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(); } }
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(); }
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(); }
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(); } }
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(); } }
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); }
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(); }
protected override Entity LoadParentEntity(long parent) { return(DockingBaseHelper.GetDockingBase(parent)); }
public DockingBase GetDockingBase() { return(_dockingBaseHelper.GetDockingBase(Parent)); }
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(); } }
public DockingBase GetDockingBase() { var dockingBase = DockingBaseHelper.GetDockingBase(Parent); return(dockingBase); }
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(); }
/// <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); }
public DockingBase GetDockingBase() { var eid = DockingBaseEids[Eid]; return(_dockingBaseHelper.GetDockingBase(eid)); }
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(); } }
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(); } }