Module:Test/data/virtual
< Module:Test | data
Jump to navigation
Jump to search
Revision as of 21:07, 17 May 2021 by Dr. Strangelove (talk | contribs)
This page has been marked as needing documentation of its function and purpose. You can help RimWorld Wiki by creating it here |
---------- -- diet -- ---------- local VF = {} VF.diet = {} VF.diet.foodType = { None = true, VegetableOrFruit = true, Meat = true, Fluid = true, Corpse = true, Seed = true, AnimalProduct = true, Plant = true, Tree = true, Meal = true, Processed = true, Liquor = true, Kibble = true, VegetarianAnimal = { VegetableOrFruit = true, Seed = true, Meal = true, Processed = true, Liquor = true, Kibble = true }, VegetarianRoughAnimal = { VegetableOrFruit = true, Seed = true, Plant = true, Meal = true, Processed = true, Liquor = true, Kibble = true }, CarnivoreAnimal = { Meat = true, Corpse = true, Meal = true, Processed = true, Kibble = true }, CarnivoreAnimalStrict = { Meat = true, Corpse = true }, OmnivoreAnimal = { VegetableOrFruit = true, Meat = true, Corpse = true, Seed = true, Meal = true, Processed = true, Liquor = true, Kibble = true }, OmnivoreRoughAnimal = { VegetableOrFruit = true, Meat = true, Corpse = true, Seed = true, Plant = true, Meal = true, Processed = true, Liquor = true, Kibble = true }, DendrovoreAnimal = { VegetableOrFruit = true, Seed = true, Tree = true, Processed = true, Kibble = true }, OvivoreAnimal = { AnimalProduct = true, Meal = true, Processed = true, Kibble = true }, OmnivoreHuman = { VegetableOrFruit = true, Meat = true, Fluid = true, Corpse = true, Seed = true, AnimalProduct = true, Meal = true, Processed = true, Liquor = true, Kibble = true } } --~ function VF.diet.resolveDietCategory(foodType) --~ if util.diet[foodType].None then --~ return "Never eats" --~ end --~ if util.diet[foodType].Tree then --~ return "Dendrovorous" --~ end --~ if util.diet[foodType].Meat then --~ if util.diet[foodType].VegetableOrFruit or util.diet[foodType].Plant then --~ return "Omnivorous" --~ end --~ return "Carnivorous" --~ end --~ if util.diet[foodType].AnimalProduct then --~ return "Ovivorous" --~ end --~ return "Herbivorous" --~ end --~ ------------------------ --~ -- module entry point -- --~ ------------------------ --~ function VF.expand(mergedDef) --~ for k,func in pairs(VF.vfields) do --~ func(mergedDef) --~ end --~ end return { -------------- -- tool DPS -- -------------- toolDPS = function (def) if not def.tools then return nil end for _,tool in ipairs(def.tools) do if tool.power and tool.cooldownTime then local dps = tool.power / tool.cooldownTime tool.DPS = Util.round(dps, 3) end end return true end, --------------- -- verb DPS -- --------------- verbDPS = function (def) local filters = { {'verbs', 1, 'defaultProjectile'}, {'verbs', 1, 'warmupTime'}, {'statBases', 'RangedWeapon_Cooldown'} } if not Util.table.checkMultiple(def, filters) then return nil end local projectileDef local damageDef local damage local warmup local cooldown local burst local burstPause local dps projectileDef = DefInfo.getDef(def.verbs[1].defaultProjectile, false) if not projectileDef then return nil end -- def.verbs[1].defaultProjectile = projectile if Util.table.check(projectileDef, 'projectile', 'damageAmountBase') then damage = projectileDef.projectile.damageAmountBase elseif Util.table.check(projectileDef, 'projectile', 'damageDef') and projectileDef.projectile.damageDef == 'Bomb' then damageDef = DefInfo.getDef(projectileDef.projectile.damageDef, false) if damageDef then damage = damageDef.defaultDamage -- def.verbs[1].defaultProjectile.projectile.damageDef = damageDef end end warmup = def.verbs[1].warmupTime burst = def.verbs[1].burstShotCount burstPause = def.verbs[1].ticksBetweenBurstShots cooldown = def.statBases.RangedWeapon_Cooldown if burst and pause then dps = damage * burst / (warmup + cooldown + (burst-1)*(burstPause/60)) else dps = damage / (warmup + cooldown) end if dps then def.verbs[1].DPS = Util.round(dps, 3) return true end end, ------------------------------------- -- naturally lives in these biomes -- ------------------------------------- pawnLivesIn = function (def) if def.thingClass ~= 'Pawn' then return nil end local biomes = {} for biomeK,biome in pairs(Data) do if Util.table.check(biome, 'wildAnimals') then for animalK,animal in pairs(biome.wildAnimals) do if animalK == def.defName then table.insert(biomes, biome.defName) end end end end if #biomes > 0 then def._.livesIn = biomes return true end end, ----------------------- -- foodType expanded -- ----------------------- foodTypeExpanded = function (def) if def.thingClass ~= 'Pawn' then return nil end -- if not Util.table.check(def, 'race', 'foodType') then return nil end local diet = def.race.foodType local flags = {} local expandedFoodTypes = {} for _,foodType in ipairs(diet) do if type(VF.diet.foodType[foodType]) == "boolean" then flags[foodType] = true else for foodItem,_ in pairs(VF.diet.foodType[foodType]) do flags[foodItem] = true end end end for flag,_ in pairs(flags) do table.insert(expandedFoodTypes, flag) end if #expandedFoodTypes > 0 then def.race.foodTypeExpanded = expandedFoodTypes return true end end, ----------------- -- MarketValue -- works only for items (not stuffables) ----------------- MarketValue = function (def) if Util.table.check(def, 'statBases', 'MarketValue') then return nil end if not Util.table.check(def, 'statBases', 'WorkToMake') then return nil end if not Util.table.check(def, 'costList') then return nil end local workRate = 0.0036 local workCost local ingredientCost = 0 if def.costList then for k,v in pairs(def.costList) do ingredientCost = ingredientCost + Data['ThingDef:'..k].statBases.MarketValue * v end end workCost = def.statBases.WorkToMake * workRate def.statBases.MarketValue = ingredientCost + workCost return true end }