public async Task <bool> CreateProspectDataAsync(ProspectSummaryData prospectSummaryData)
        {
            try
            {
                ProspectData prospectData = Mapper.Map <ProspectSummaryData, ProspectData>(prospectSummaryData);
                prospectDBContext.ProspectDatas.Add(prospectData);
                int result = await prospectDBContext.SaveChangesAsync();

                return(result < 1 ? false : true);
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
Esempio n. 2
0
        public ProspectData GetProspectData(InteractionContext context)
        {
            // On errors, or plant entities we have zero normal, that will broke dig results,
            // we need to replace dir with offset of 1 to start prospect from next block downside
            var rawDirection = context.Normal ?? Vector3i.Zero;
            var direction    = rawDirection == Vector3i.Zero ? Vector3i.Up : rawDirection;

            // Apply offset for starting pos by 1 in case we have unusual normal values
            var startingPos = context.BlockPosition.Value;

            if (rawDirection == Vector3i.Zero)
            {
                startingPos -= direction;
            }

            var result = new ProspectData(this, direction, this.DrillDepth);

            for (var i = 0; i < this.DrillDepth; i++)
            {
                if (this.CanProspect(context.Player, i + 1))
                {
                    var data = this.ProspectBlock(startingPos - (direction * i));
                    result.Items.Add(data);

                    // if we hit core, no need to drill further, exit
                    if (data.ItemTypeId == -2)
                    {
                        result.MaxBlocksCanProspect = i + 1;
                        break;
                    }
                }
                else
                {
                    // Clamp max blocks on failed cycle iteration for client-side checks (errors sync)
                    result.MaxBlocksCanProspect = i;
                    break;
                }
            }

            if (result.MaxBlocksCanProspect < 0)
            {
                result.MaxBlocksCanProspect = this.DrillDepth;
            }

            return(result);
        }