private static ErrorCodes PrepareDeliverOneAssignment(Character character, long wrapperEid, out VolumeWrapperContainer volumeWrapperContainer) { volumeWrapperContainer = Container.GetOrThrow(wrapperEid) as VolumeWrapperContainer; if (volumeWrapperContainer == null) { return(ErrorCodes.DefinitionNotSupported); } if (volumeWrapperContainer.Owner != character.Eid) { return(ErrorCodes.AccessDenied); } var transportAssignmentInfo = GetByContainer(volumeWrapperContainer); if (transportAssignmentInfo == null) { //no assignment for this container return(ErrorCodes.NoTransportAssignmentForContainer); } var ownerCharacter = transportAssignmentInfo.ownercharacter; if (transportAssignmentInfo.Retrieved) { var targetBaseEid = transportAssignmentInfo.sourcebaseeid; if (!DockingBase.Exists(transportAssignmentInfo.sourcebaseeid)) { targetBaseEid = DefaultCorporation.GetDockingBaseEid(ownerCharacter); } Logger.Info("retrieved assignment was found " + transportAssignmentInfo); transportAssignmentInfo.RetrieveToBasePublicContainer(volumeWrapperContainer, targetBaseEid); return(ErrorCodes.NoError); } var baseOfWrapper = volumeWrapperContainer.TraverseForStructureRootEid(); if (transportAssignmentInfo.targetbaseeid != baseOfWrapper) { return(ErrorCodes.TransportAssignmentCannotBeDeliveredHere); } var publicContainer = Container.GetFromStructure(transportAssignmentInfo.targetbaseeid); publicContainer.ReloadItems(character); AdministerDelivery(transportAssignmentInfo, volumeWrapperContainer, publicContainer); return(ErrorCodes.NoError); }
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)); if (character == member) { return; } //a member was kicked, while he was leaving the corp _corporationManager.CleanUpCharacterLeave(member); var corporation = character.GetPrivateCorporationOrThrow(); var issuerRole = corporation.GetMemberRole(character); issuerRole.IsAnyRole(CorporationRole.CEO, CorporationRole.HRManager, CorporationRole.DeputyCEO).ThrowIfFalse(ErrorCodes.InsufficientPrivileges); var issuerCEO = issuerRole.IsAnyRole(CorporationRole.CEO); var targetRole = corporation.GetMemberRole(member); //if the issuer is NOT ceo then we have some rules if (!issuerCEO) { //no ceo, no deputyCEO targetRole.IsAnyRole(CorporationRole.CEO, CorporationRole.DeputyCEO).ThrowIfTrue(ErrorCodes.InsufficientPrivileges); } //---------------------------------------------- //%%% ALLIANCE stuff es egyebek!!!!!!!! %%% //ez itt egy hack targetRole = CorporationRole.NotDefined; //----------------------------------------------- //alliance board membership and all the rest is protected by this branch targetRole.ThrowIfNotEqual(CorporationRole.NotDefined, ErrorCodes.MemberHasRolesError); var freelancerCorporation = DefaultCorporation.GetFreelancerCorporation(); freelancerCorporation.AddMember(member, CorporationRole.NotDefined, corporation); corporation.RemoveMember(member); freelancerCorporation.Save(); Transaction.Current.OnCommited(() => { if (_characterProfiles is CachedCharacterProfileRepository c) { c.Remove(member.Id); } _channelManager.LeaveChannel(corporation.ChannelName, member); _channelManager.JoinChannel(freelancerCorporation.ChannelName, member, CorporationRole.NotDefined); _corporationManager.InformCorporationMemberTransferred(corporation, freelancerCorporation, member, character); member.GetPlayerRobotFromZone()?.UpdateCorporationOnZone(freelancerCorporation.Eid); //inform the zones var info = new Dictionary <string, object> { { k.from, corporation.Eid }, { k.to, freelancerCorporation.Eid }, { k.characterID, member.Id }, }; _zoneManager.Zones.ForEach(z => z.UpdateCorporation(CorporationCommand.TransferMember, info)); }); Message.Builder.FromRequest(request).WithOk().Send(); scope.Complete(); } }
public void HandleRequest(IRequest request) { using (var scope = Db.CreateTransaction()) { var nick = request.Data.GetOrDefault <string>(k.nick).Trim(); var avatar = request.Data.GetOrDefault <Dictionary <string, object> >(k.avatar); var raceID = request.Data.GetOrDefault <int>(k.raceID); var majorID = request.Data.GetOrDefault <int>(k.majorID); var schoolID = request.Data.GetOrDefault <int>(k.schoolID); var sparkID = request.Data.GetOrDefault <int>(k.sparkID); var account = _accountManager.Repository.Get(request.Session.AccountId); if (account == null) { throw new PerpetuumException(ErrorCodes.AccountNotFound); } Character.CheckNickAndThrowIfFailed(nick, request.Session.AccessLevel, account); //only 3 characters per account is allowed var activeCharactersCount = _accountManager.GetActiveCharactersCount(account); if (activeCharactersCount >= 3) { throw new PerpetuumException(ErrorCodes.MaximumAmountOfCharactersReached); } if (account.FirstCharacterDate == null) { account.FirstCharacterDate = DateTime.Now; _accountManager.Repository.Update(account); } var character = CreateNewCharacter(); character.AccountId = account.Id; character.Nick = nick; character.Avatar = GenxyString.FromDictionary(avatar); character.IsDocked = true; DockingBase dockingBase; DefaultCorporation corporation; if (schoolID > 0) { if (majorID == 0 || raceID == 0 || sparkID == 0) { throw new PerpetuumException(ErrorCodes.WTFErrorMedicalAttentionSuggested); } corporation = DefaultCorporation.GetBySchool(raceID, schoolID) ?? throw new PerpetuumException(ErrorCodes.CorporationNotExists); dockingBase = corporation.GetDockingBase(); dockingBase.CreateStarterRobotForCharacter(character, true); character.MajorId = majorID; character.RaceId = raceID; character.SchoolId = schoolID; character.SparkId = sparkID; character.AddToWallet(TransactionType.CharacterCreate, 20000); var extensions = character.GetDefaultExtensions(); character.SetExtensions(extensions); var sparkToActivate = _sparkHelper.ConvertCharacterWizardSparkIdToSpark(sparkID); _sparkHelper.ActivateSpark(character, sparkToActivate); } else { // training dockingBase = _dockingBaseHelper.GetTrainingDockingBase(); corporation = ((TrainingDockingBase)dockingBase).GetTrainingCorporation(); character.SetAllExtensionLevel(5); dockingBase.CreateStarterRobotForCharacter(character); character.AddToWallet(TransactionType.CharacterCreate, 10000000); } character.CurrentDockingBaseEid = dockingBase.Eid; character.DefaultCorporationEid = corporation.Eid; //add to default corp, only in sql corporation.AddNewCharacter(character); _accountManager.PackageGenerateAll(account); Transaction.Current.OnCommited(() => { _channelManager.JoinChannel(corporation.ChannelName, character); Message.Builder.FromRequest(request).SetData(k.characterID, character.Id).Send(); }); scope.Complete(); } }
public static void DockingBaseKilled(long baseEid) { var assignments = GetRunningTransportAssignmentsByBaseEid(baseEid).ToArray(); foreach (var transportAssignmentInfo in assignments) { var ownerCharacter = transportAssignmentInfo.ownercharacter; var volumeWrapperContainer = transportAssignmentInfo.GetContainer(); var containerRoot = volumeWrapperContainer.TraverseForStructureRootEid(); if (containerRoot > 0) { //yes, the container is retrievable. if (containerRoot == baseEid) { // the container dies Logger.Info("the container was on the killed base. " + transportAssignmentInfo); transportAssignmentInfo.WriteLog(TransportAssignmentEvent.targetBaseDeleted, transportAssignmentInfo.targetbaseeid); } else { Logger.Info("retrieve location is valid. " + transportAssignmentInfo); if (transportAssignmentInfo.sourcebaseeid == baseEid) { //innen kene vinni, de nem rakhatom ide vissza mert ez a bazis semmisul meg eppen baseEid = DefaultCorporation.GetDockingBaseEid(ownerCharacter); } else { baseEid = transportAssignmentInfo.sourcebaseeid; } transportAssignmentInfo.RetrieveToBasePublicContainer(volumeWrapperContainer, baseEid); Logger.Info("transport assignment's related base was deleted " + transportAssignmentInfo); } continue; } //the container is in a robot cargo on the zone, next docking will take care of it transportAssignmentInfo.Retrieved = true; transportAssignmentInfo.WriteLog(TransportAssignmentEvent.targetBaseDeleted, transportAssignmentInfo.targetbaseeid); } Transaction.Current.OnCommited(() => { foreach (var transportAssignmentInfo in assignments) { var result = new Dictionary <string, object> { { k.assignment, transportAssignmentInfo.ToDictionary() } }; Message.Builder.SetCommand(Commands.TransportAssignmentBaseDeleted).WithData(result).ToCharacter(transportAssignmentInfo.ownercharacter).Send(); if (transportAssignmentInfo.volunteercharacter != Character.None) { Message.Builder.SetCommand(Commands.TransportAssignmentBaseDeleted).WithData(result).ToCharacter(transportAssignmentInfo.volunteercharacter).Send(); } } Logger.Info(assignments.Length + " transport assignments were deleted with base:" + baseEid); }); }