public IDictionary <string, object> LineStartInMill(Character character, Container sourceContainer, int lineId, int cycles, bool useCorporationWallet, bool searchInRobots, Mill mill, int rounds) { const int maxCycles = 1; cycles.ThrowIfGreater(maxCycles, ErrorCodes.ProductionMaxCyclesExceeded); var maxRounds = Mill.GetMaxRounds(character); if (rounds > maxRounds) { rounds = maxRounds; } ProductionLine productionLine; ProductionLine.LoadById(lineId, out productionLine).ThrowIfError(); productionLine.CharacterId.ThrowIfNotEqual(character.Id, ErrorCodes.OwnerMismatch); productionLine.IsActive().ThrowIfTrue(ErrorCodes.ProductionIsRunningOnThisLine); productionLine.IsAtZero().ThrowIfTrue(ErrorCodes.ProductionLineIsAtZero); if (productionLine.Rounds != rounds) { ProductionLine.SetRounds(rounds, productionLine.Id).ThrowIfError(); productionLine.Rounds = rounds; } bool hasBonus; var newProduction = mill.LineStart(character, productionLine, sourceContainer, cycles, useCorporationWallet, out hasBonus); if (newProduction == null) { if (useCorporationWallet) { throw new PerpetuumException(ErrorCodes.CorporationNotEnoughMoney); } throw new PerpetuumException(ErrorCodes.CharacterNotEnoughMoney); } //return info var replyDict = new Dictionary <string, object>(); var linesList = mill.GetLinesList(character); replyDict.Add(k.lines, linesList); replyDict.Add(k.lineCount, linesList.Count); var productionDict = newProduction.ToDictionary(); replyDict.Add(k.production, productionDict); var informDict = sourceContainer.ToDictionary(); replyDict.Add(k.sourceContainer, informDict); var facilityInfo = mill.GetFacilityInfo(character); replyDict.Add(k.facility, facilityInfo); replyDict.Add(k.hasBonus, hasBonus); return(replyDict); }