public override bool InRabbitHole() { BeginCommodityUpdates(); bool succeeded = false; try { Target.StartPlayerConcert(); StartStages(); succeeded = DoLoop(~(ExitReason.Replan | ExitReason.MidRoutePushRequested | ExitReason.ObjectStateChanged | ExitReason.PlayIdle | ExitReason.MaxSkillPointsReached)); Target.EndPlayerConcert(); } finally { EndCommodityUpdates(succeeded); } if (succeeded) { EventTracker.SendEvent(EventTypeId.kPerformedConcert, Actor); int level = 10; Music job = OmniCareer.Career <Music>(Actor.Occupation); if (job != null) { job.ConcertsPerformed++; OmniCareer omni = Actor.Occupation as OmniCareer; if (omni != null) { if (omni.PaidForConcerts()) { level = 0; } } else { level = Music.LevelToGetPaidForConcerts; } } SkillBasedCareer career = SkillBasedCareerBooter.GetSkillBasedCareer(Actor, SkillNames.Guitar); if (career != null) { level = NRaas.Careers.Settings.mBuskerLevelToGetPaidForConcerts; } if (Actor.Occupation.CareerLevel >= level) { int concertPayAmount = Target.ConcertPayAmount; Actor.ModifyFunds(concertPayAmount); Actor.ShowTNSIfSelectable(LocalizeString(Actor.SimDescription, "ConcertPay", new object[] { Actor, concertPayAmount }), StyledNotification.NotificationStyle.kGameMessagePositive, ObjectGuid.InvalidObjectGuid, Actor.ObjectId); } else { Actor.Occupation.ShowOccupationTNS(OmniCareer.LocalizeString(Actor.SimDescription, "PerformTone:ConcertPerformed", "Gameplay/Careers/Music/PerformTone:ConcertPerformed", new object[] { Actor })); } } return(true); }