// // Edit the stored resource deposits // void OnServerInitialized() { ValidateConfig(); foreach (Deposit deposit in data.changedDeposits) { ResourceDepositManager.ResourceDeposit rd = ResourceDepositManager.GetOrCreate(GetVector3(deposit.origin)); int oreCount = 0; foreach (ResourceDepositManager.ResourceDeposit.ResourceDepositEntry resource in rd._resources) { switch (resource.type.shortname) { case "sulfur.ore": oreCount++; break; case "metal.ore": oreCount++; break; case "hq.metal.ore": oreCount++; break; default: break; } } if (oreCount > 1) { return; } ItemDefinition sulfur = ItemManager.itemList.Find(x => x.shortname == "sulfur.ore"); ItemDefinition metal = ItemManager.itemList.Find(x => x.shortname == "metal.ore"); ItemDefinition hq = ItemManager.itemList.Find(x => x.shortname == "hq.metal.ore"); foreach (DepositEntry entry in deposit.entries) { switch (entry.type) { case OreType.Metal: rd.Add(metal, 1, entry.amount, entry.workNeeded, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM); break; case OreType.Sulfur: rd.Add(sulfur, 1, entry.amount, entry.workNeeded, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM); break; default: break; } } } }
public void UpdateStaticDeposit() { if (isStatic) { if (_linkedDeposit == null) { _linkedDeposit = new ResourceDepositManager.ResourceDeposit(); } else { _linkedDeposit._resources.Clear(); } if (staticType == QuarryType.None) { _linkedDeposit.Add(ItemManager.FindItemDefinition("stones"), 1f, 1000, 0.3f, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM); _linkedDeposit.Add(ItemManager.FindItemDefinition("metal.ore"), 1f, 1000, 5f, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM); _linkedDeposit.Add(ItemManager.FindItemDefinition("sulfur.ore"), 1f, 1000, 7.5f, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM); _linkedDeposit.Add(ItemManager.FindItemDefinition("hq.metal.ore"), 1f, 1000, 75f, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM); } else if (staticType == QuarryType.Basic) { _linkedDeposit.Add(ItemManager.FindItemDefinition("metal.ore"), 1f, 1000, 2f, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM); _linkedDeposit.Add(ItemManager.FindItemDefinition("stones"), 1f, 1000, 0.3f, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM); } else if (staticType == QuarryType.Sulfur) { _linkedDeposit.Add(ItemManager.FindItemDefinition("sulfur.ore"), 1f, 1000, 2f, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM); } else if (staticType == QuarryType.HQM) { _linkedDeposit.Add(ItemManager.FindItemDefinition("hq.metal.ore"), 1f, 1000, 30f, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM); } _linkedDeposit.Add(ItemManager.FindItemDefinition("crude.oil"), 1f, 1000, 10f, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM, true); } }
public ResourceDepositManager.ResourceDeposit CreateFromPosition(Vector3 pos) { Vector2i indexFrom = ResourceDepositManager.GetIndexFrom(pos); UnityEngine.Random.State state = UnityEngine.Random.state; UnityEngine.Random.InitState((int)(new Vector2((float)indexFrom.x, (float)indexFrom.y)).Seed(World.Seed + World.Salt)); ResourceDepositManager.ResourceDeposit resourceDeposit = new ResourceDepositManager.ResourceDeposit() { origin = new Vector3((float)(indexFrom.x * 20), 0f, (float)(indexFrom.y * 20)) }; if (UnityEngine.Random.Range(0f, 1f) < 0.5f) { resourceDeposit.Add(ItemManager.FindItemDefinition("stones"), 1f, 100, 1f, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM, false); } else if (0 == 0) { resourceDeposit.Add(ItemManager.FindItemDefinition("stones"), 1f, UnityEngine.Random.Range(30000, 100000), UnityEngine.Random.Range(0.3f, 0.5f), ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM, false); float single = 0f; single = (!World.Procedural ? 0.1f : (TerrainMeta.BiomeMap.GetBiome(pos, 2) > 0.5f ? 1f : 0f) * 0.25f); if (UnityEngine.Random.Range(0f, 1f) >= 1f - single) { resourceDeposit.Add(ItemManager.FindItemDefinition("metal.ore"), 1f, UnityEngine.Random.Range(10000, 100000), UnityEngine.Random.Range(2f, 4f), ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM, false); } float single1 = 0f; single1 = (!World.Procedural ? 0.1f : (TerrainMeta.BiomeMap.GetBiome(pos, 1) > 0.5f ? 1f : 0f) * (0.25f + 0.25f * (TerrainMeta.TopologyMap.GetTopology(pos, 8) ? 1f : 0f) + 0.25f * (TerrainMeta.TopologyMap.GetTopology(pos, 1) ? 1f : 0f))); if (UnityEngine.Random.Range(0f, 1f) >= 1f - single1) { resourceDeposit.Add(ItemManager.FindItemDefinition("sulfur.ore"), 1f, UnityEngine.Random.Range(10000, 100000), UnityEngine.Random.Range(4f, 4f), ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM, false); } float single2 = 0f; if (!World.Procedural) { single2 += 0.15f; } else if (TerrainMeta.BiomeMap.GetBiome(pos, 8) > 0.5f || TerrainMeta.BiomeMap.GetBiome(pos, 4) > 0.5f) { single2 += 0.25f; } if (UnityEngine.Random.Range(0f, 1f) >= 1f - single2) { resourceDeposit.Add(ItemManager.FindItemDefinition("hq.metal.ore"), 1f, UnityEngine.Random.Range(5000, 10000), UnityEngine.Random.Range(30f, 50f), ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM, false); } } this._deposits.Add(indexFrom, resourceDeposit); Interface.CallHook("OnResourceDepositCreated", resourceDeposit); UnityEngine.Random.state = state; return(resourceDeposit); }
public ResourceDepositManager.ResourceDeposit CreateFromPosition(Vector3 pos) { Vector2i indexFrom = ResourceDepositManager.GetIndexFrom(pos); Random.State state = Random.get_state(); Random.InitState((int)SeedEx.Seed(new Vector2((float)indexFrom.x, (float)indexFrom.y), World.Seed + World.Salt)); ResourceDepositManager.ResourceDeposit resourceDeposit = new ResourceDepositManager.ResourceDeposit(); resourceDeposit.origin = new Vector3((float)(indexFrom.x * 20), 0.0f, (float)(indexFrom.y * 20)); if ((double)Random.Range(0.0f, 1f) < 0.5) { resourceDeposit.Add(ItemManager.FindItemDefinition("stones"), 1f, 100, 1f, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM, false); } else if (true) { resourceDeposit.Add(ItemManager.FindItemDefinition("stones"), 1f, Random.Range(30000, 100000), Random.Range(0.3f, 0.5f), ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM, false); if ((double)Random.Range(0.0f, 1f) >= 1.0 - (!World.Procedural ? 0.100000001490116 : ((double)TerrainMeta.BiomeMap.GetBiome(pos, 2) > 0.5 ? 1.0 : 0.0) * 0.25)) { resourceDeposit.Add(ItemManager.FindItemDefinition("metal.ore"), 1f, Random.Range(10000, 100000), Random.Range(2f, 4f), ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM, false); } if ((double)Random.Range(0.0f, 1f) >= 1.0 - (!World.Procedural ? 0.100000001490116 : ((double)TerrainMeta.BiomeMap.GetBiome(pos, 1) > 0.5 ? 1.0 : 0.0) * (0.25 + 0.25 * (TerrainMeta.TopologyMap.GetTopology(pos, 8) ? 1.0 : 0.0) + 0.25 * (TerrainMeta.TopologyMap.GetTopology(pos, 1) ? 1.0 : 0.0)))) { resourceDeposit.Add(ItemManager.FindItemDefinition("sulfur.ore"), 1f, Random.Range(10000, 100000), Random.Range(4f, 4f), ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM, false); } float num = 0.0f; if (World.Procedural) { if ((double)TerrainMeta.BiomeMap.GetBiome(pos, 8) > 0.5 || (double)TerrainMeta.BiomeMap.GetBiome(pos, 4) > 0.5) { num += 0.25f; } } else { num += 0.15f; } if ((double)Random.Range(0.0f, 1f) >= 1.0 - (double)num) { resourceDeposit.Add(ItemManager.FindItemDefinition("hq.metal.ore"), 1f, Random.Range(5000, 10000), Random.Range(30f, 50f), ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM, false); } } this._deposits.Add(indexFrom, resourceDeposit); Interface.CallHook("OnResourceDepositCreated", (object)resourceDeposit); Random.set_state(state); return(resourceDeposit); }
private void OnResourceDepositCreated(ResourceDepositManager.ResourceDeposit resourceDeposit) { if (Random.Range(0f, 100f) >= oilCrateChance) { return; } if (!pumpjackSolid) { resourceDeposit._resources.Clear(); } resourceDeposit.Add(ItemManager.FindItemDefinition("crude.oil"), 1f, 50000, Random.Range(oilGatherWorkNeededMin, oilGatherWorkNeededMax), ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM, false); }
// // Update salt map when resource deposit is tapped for the first time // void OnEntitySpawned(BaseNetworkable entity) { if (entity is SurveyCharge) { OreType ore = OreType.None; ResourceDepositManager.ResourceDeposit rd = ResourceDepositManager.GetOrCreate(entity.transform.position); if (data.changedDeposits.Exists(d => GetVector3(d.origin) == rd.origin)) { return; } ResourceDepositManager.ResourceDeposit.ResourceDepositEntry originalResource = null; int oreCount = 0; foreach (ResourceDepositManager.ResourceDeposit.ResourceDepositEntry resource in rd._resources) { switch (resource.type.shortname) { case "sulfur.ore": ore = OreType.Sulfur; originalResource = resource; oreCount++; break; case "metal.ore": ore = OreType.Metal; originalResource = resource; oreCount++; break; case "hq.metal.ore": ore = OreType.HighQuality; originalResource = resource; oreCount++; break; default: break; } } if (oreCount > 1) { return; } ItemDefinition sulfur = ItemManager.itemList.Find(x => x.shortname == "sulfur.ore"); ItemDefinition metal = ItemManager.itemList.Find(x => x.shortname == "metal.ore"); ItemDefinition hq = ItemManager.itemList.Find(x => x.shortname == "hq.metal.ore"); Deposit deposit = new Deposit { origin = GetOrigin(rd.origin) }; if (originalResource == null && rd._resources.Count != 0) { originalResource = rd._resources.ToArray()[0]; } System.Random rng = new System.Random(); float workNeeded = (float)(rng.Next(0, 2) + rng.NextDouble()); int choice = rng.Next(1, 100); int amount = 0; switch (ore) { case OreType.Sulfur: // Give a chance at some amount of metal ore if (workNeeded > 1f) { amount = rng.Next(10000, 100000); rd.Add(metal, 1, amount, workNeeded, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM); deposit.entries.Add(new DepositEntry() { type = OreType.Metal, amount = amount, workNeeded = workNeeded }); } break; case OreType.Metal: // Give a chance at some amount of sulfur ore if (workNeeded > 1.75f) { amount = rng.Next(10000, 100000); rd.Add(sulfur, 1, amount, workNeeded, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM); deposit.entries.Add(new DepositEntry() { type = OreType.Sulfur, amount = amount, workNeeded = workNeeded }); } break; case OreType.HighQuality: // Give a chance at some amount of either metal, sulfur, or both ores if (choice < 40) // Just sulfur { amount = rng.Next(10000, 100000); workNeeded = (float)(rng.Next(3, 4) + rng.NextDouble()); rd.Add(sulfur, 1, amount, workNeeded, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM); deposit.entries.Add(new DepositEntry() { type = OreType.Sulfur, amount = amount, workNeeded = workNeeded }); } else if (choice < 80) // Just metal { if (workNeeded < 1.75f) { workNeeded += (1.75f - workNeeded); } amount = rng.Next(10000, 100000); rd.Add(metal, 1, amount, workNeeded, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM); deposit.entries.Add(new DepositEntry() { type = OreType.Metal, amount = amount, workNeeded = workNeeded }); } else // Both sulfur and metal { if (workNeeded < 1.75f) { workNeeded += (1.75f - workNeeded); } amount = rng.Next(10000, 100000); rd.Add(metal, 1, amount, workNeeded, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM); deposit.entries.Add(new DepositEntry() { type = OreType.Metal, amount = amount, workNeeded = workNeeded }); amount = rng.Next(10000, 100000); workNeeded = (float)(rng.Next(3, 4) + rng.NextDouble()); rd.Add(sulfur, 1, amount, workNeeded, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM); deposit.entries.Add(new DepositEntry() { type = OreType.Sulfur, amount = amount, workNeeded = workNeeded }); } break; default: // Give a chance at some amount of either metal, sulfur, or both ores if (oreCount == 1) { return; } if (choice < 40) // Just sulfur { if (workNeeded > 1.75f) { return; } amount = rng.Next(10000, 100000); workNeeded = (float)(rng.Next(3, 4) + rng.NextDouble()); rd.Add(sulfur, 1, amount, workNeeded, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM); deposit.entries.Add(new DepositEntry() { type = OreType.Sulfur, amount = amount, workNeeded = workNeeded }); } else if (choice < 80) // Just metal { if (workNeeded < 1.75f) { workNeeded += (1.75f - workNeeded); } amount = rng.Next(10000, 100000); rd.Add(metal, 1, amount, workNeeded, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM); deposit.entries.Add(new DepositEntry() { type = OreType.Metal, amount = amount, workNeeded = workNeeded }); } else // Both sulfur and metal { if (workNeeded < 1.75f) { workNeeded += (1.75f - workNeeded); } amount = rng.Next(10000, 100000); rd.Add(metal, 1, amount, workNeeded, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM); deposit.entries.Add(new DepositEntry() { type = OreType.Metal, amount = amount, workNeeded = workNeeded }); amount = rng.Next(10000, 100000); workNeeded = (float)(rng.Next(3, 4) + rng.NextDouble()); rd.Add(sulfur, 1, amount, workNeeded, ResourceDepositManager.ResourceDeposit.surveySpawnType.ITEM); deposit.entries.Add(new DepositEntry() { type = OreType.Sulfur, amount = amount, workNeeded = workNeeded }); } break; } data.changedDeposits.Add(deposit); SaveData(); } }