public override void VisitGravelLayer(GravelLayer layer) { var node = layer.GetNode(_location); if (node == null) { return; } var amounts = Math.Min(node.GetValue(_location), _amount); var m = _materialHelper.GetMaterialInfo(node.Type); _items.Add(m.ToItem((int)amounts)); }
private void DoExtractMinerals(IZone zone) { var terrainLock = GetLock().ThrowIfNotType <TerrainLock>(ErrorCodes.InvalidLockType); var ammo = GetAmmo() as MiningAmmo; if (ammo == null) { return; } var materialInfo = _materialHelper.GetMaterialInfo(ammo.MaterialType); CheckEnablerEffect(materialInfo); var mineralLayer = zone.Terrain.GetMineralLayerOrThrow(materialInfo.Type); var materialAmount = materialInfo.Amount * _miningAmountModifier.Value; var extractedMaterials = Extract(mineralLayer, terrainLock.Location, (uint)materialAmount); extractedMaterials.Count.ThrowIfEqual(0, ErrorCodes.NoMineralOnTile); extractedMaterials.AddRange(_rareMaterialHandler.GenerateRareMaterials(materialInfo.EntityDefault.Definition)); CreateBeam(terrainLock.Location, BeamState.AlignToTerrain); using (var scope = Db.CreateTransaction()) { Debug.Assert(ParentRobot != null, "ParentRobot != null"); var container = ParentRobot.GetContainer(); Debug.Assert(container != null, "container != null"); container.EnlistTransaction(); var player = ParentRobot as Player; Debug.Assert(player != null, "player != null"); foreach (var material in extractedMaterials) { var item = (Item)Factory.CreateWithRandomEID(material.Definition); item.Owner = Owner; item.Quantity = material.Quantity; container.AddItem(item, true); var drilledMineralDefinition = material.Definition; var drilledQuantity = material.Quantity; player.MissionHandler.EnqueueMissionEventInfo(new DrillMineralEventInfo(player, drilledMineralDefinition, drilledQuantity, terrainLock.Location)); player.Zone?.MiningLogHandler.EnqueueMiningLog(drilledMineralDefinition, drilledQuantity); } //save container container.Save(); OnGathererMaterial(zone, player); Transaction.Current.OnCommited(() => container.SendUpdateToOwnerAsync()); scope.Complete(); } }
private int GetHarvestedAmountPerCycle(PlantRule plantRule) { double amount; switch (plantRule.Type) { case PlantType.SlimeRoot: case PlantType.ElectroPlant: case PlantType.RustBush: case PlantType.TreeIron: { var m = _materialHelper.GetMaterialInfo(plantRule.FruitMaterialName.ToMaterialType()); amount = m.Amount; break; } default: throw new PerpetuumException(ErrorCodes.PlantNotHarvestable); } return((int)(amount * _amountModifier)); }
private void OnMineralScanned(MaterialProbeType materialProbeType, MaterialType materialType = MaterialType.Undefined) { var m = _materialHelper.GetMaterialInfo(materialType); _player.MissionHandler.EnqueueMissionEventInfo(new ScanMaterialEventInfo(_player, m.EntityDefault.Definition, materialProbeType, _player.CurrentPosition)); }