private static void CloneArtifactDropRateTable(SpaceDestinationType destination, ArtifactTier tier, float weight_percent) { var result = new ArtifactDropRate(); float weight = destination.artifactDropTable.totalWeight * weight_percent; foreach (var rate in destination.artifactDropTable.rates) { if (rate.first == DECOR.SPACEARTIFACT.TIER_NONE) { result.AddItem(rate.first, rate.second - weight); } else { result.AddItem(rate.first, rate.second); } } result.AddItem(tier, weight); destination.artifactDropTable = result; }
public ArtifactTier GetArtifactDropTier(StoredMinionIdentity minionID, SpaceDestination destination) { ArtifactDropRate artifactDropTable = destination.GetDestinationType().artifactDropTable; bool flag = minionID.traitIDs.Contains("Archaeologist"); if (artifactDropTable != null) { float num = artifactDropTable.totalWeight; if (flag) { num -= artifactDropTable.GetTierWeight(DECOR.SPACEARTIFACT.TIER_NONE); } float num2 = Random.value * num; foreach (Tuple <ArtifactTier, float> rate in artifactDropTable.rates) { switch (flag) { default: if (rate.first == DECOR.SPACEARTIFACT.TIER_NONE) { break; } goto case false; case false: num2 -= rate.second; break; } if (num2 <= 0f) { return(rate.first); } } } return(DECOR.SPACEARTIFACT.TIER0); }
public MySpaceDestinationTypes(ResourceSet parent) : base(parent) { destinationDictionary = new Dictionary <string, SpaceDestinationType>(); foreach (var dest in resources) { destinationDictionary.Add(dest.Id, dest); } //flush out the old resources now that they have been added resources.Clear(); var planetDefs = new Dictionary <string, JConfig.PlanetDefinition>(); foreach (string planetDefString in JConfig.ReadPlanetFiles()) { JConfig.PlanetDefinition pDef = JsonConvert.DeserializeObject <JConfig.PlanetDefinition>(planetDefString); bool isNew = !destinationDictionary.ContainsKey(pDef.ID); //Debug.Log("pDef: " + pDef.ID + " table: "); //foreach (var kvpair in pDef.elementTable) // Debug.Log("element: " + kvpair.Key + " min: "+kvpair.Value.min+" max: "+kvpair.Value.max); planetDefs.Add(pDef.ID, pDef); ArtifactDropRate artifactDropRate = null; switch (pDef.artifactDropRate) { case "Bad": artifactDropRate = Db.Get().ArtifactDropRates.Bad; break; case "Mediocre": artifactDropRate = Db.Get().ArtifactDropRates.Mediocre; break; case "Good": artifactDropRate = Db.Get().ArtifactDropRates.Good; break; case "Great": artifactDropRate = Db.Get().ArtifactDropRates.Great; break; case "Amazing": artifactDropRate = Db.Get().ArtifactDropRates.Amazing; break; case "Perfect": artifactDropRate = Db.Get().ArtifactDropRates.Perfect; break; case null: if (isNew) { artifactDropRate = Db.Get().ArtifactDropRates.Bad; } break; } SpaceDestinationType planet; if (isNew) { //If planet is new, create new definition planet = new SpaceDestinationType(pDef.ID, parent, pDef.typeName, pDef.description, pDef.iconSize, pDef.spriteName, JConfig.convertElementTable(pDef.elementTable), pDef.recoverableEntities, artifactDropRate); destinationDictionary.Add(pDef.ID, planet); } else { planet = destinationDictionary[pDef.ID]; if (pDef.description != null) { destinationDictionary[pDef.ID].description = pDef.description; } if (pDef.iconSize != 0) { destinationDictionary[pDef.ID].iconSize = pDef.iconSize; } if (pDef.spriteName != null) { destinationDictionary[pDef.ID].spriteName = pDef.spriteName; } if (pDef.elementTable != null) { destinationDictionary[pDef.ID].elementTable = JConfig.convertElementTable(pDef.elementTable); } if (pDef.recoverableEntities != null) { destinationDictionary[pDef.ID].recoverableEntities = pDef.recoverableEntities; } if (artifactDropRate != null) { destinationDictionary[pDef.ID].artifactDropTable = artifactDropRate; } } base.Add(planet); } if (planetDefs.Count == 0) { Debug.Log("PlanetaryCustomization: Could not find any planet definitions!"); } else { Debug.Log("PlanetaryCustomization: Loaded " + planetDefs.Count + " planet definitions!"); } //create destination pools for random planet rolls destPools = new List <List <string> >(); for (double dist = 9999.0; dist < 110001.0; dist += 10000.0) { var distPool = new List <string>(); foreach (var pDef in planetDefs) { if (pDef.Value.distanceRange.min < dist && pDef.Value.distanceRange.max > dist) { distPool.Add(pDef.Value.ID); } } destPools.Add(distPool); } /* * //This exists for compatibility reasons so mods that modify existing planets _maybe_ don't get screwed (please don't smack me Cairath :( ) * base.Satellite = destinationDictionary["Satellite"]; * * base.MetallicAsteroid = destinationDictionary["MetallicAsteroid"]; * * base.RockyAsteroid = destinationDictionary["RockyAsteroid"]; * * base.CarbonaceousAsteroid = destinationDictionary["CarbonaceousAsteroid"]; * * base.IcyDwarf = destinationDictionary["IcyDwarf"]; * * base.OrganicDwarf = destinationDictionary["OrganicDwarf"]; * * base.DustyMoon = destinationDictionary["DustyMoon"]; * * base.TerraPlanet = destinationDictionary["TerraPlanet"]; * * base.VolcanoPlanet = destinationDictionary["VolcanoPlanet"]; * * base.GasGiant = destinationDictionary["GasGiant"]; * * base.IceGiant = destinationDictionary["IceGiant"];*/ }