class Engram(ExportModel): description: Optional[StringProperty] blueprintPath: str = Field( ..., title="Full blueprint path of the engram", ) itemBlueprintPath: Optional[str] = Field( ..., title="Full blueprint path of the item", ) group: Optional[str] = Field( ..., title="DLC group", ) requirements: EngramRequirements manualUnlock: bool = Field( ..., title="Unlockable in UI", description="Whether the engram can be unlocked by the player in UI", ) givesBP: bool = Field( ..., title="Craftable in inventory", description="Whether the player can craft the item in their inventory", )
class EngramRequirements(ExportModel): characterLevel: Optional[IntProperty] = Field( None, title="Required character level") engramPoints: Optional[IntProperty] = Field( None, title="Required number of points") otherEngrams: Optional[List[Optional[str]]] = Field( None, title="Required engrams")
class WorldSettings(ExportModel): source: Optional[str] name: Union[StringProperty, str] # Geo latOrigin: FloatProperty = Field( title="Latitude Origin", description= "World origin of Y axis, used by the in-game map, in centimeters.", ) longOrigin: FloatProperty = Field( title="Longitude Origin", description= "World origin of X axis, used by the in-game map, in centimeters.", ) latScale: FloatProperty = Field( title="Latitude Scale", description= "Height of the map, used by the in-game map, in tens of meters.", ) longScale: FloatProperty = Field( title="Longitude Scale", description= "Width of the map, used by the in-game map, in tens of meters.", ) latMulti: Optional[FloatLike] = Field( title="Latitude Multiplier", description= "Latitude scale in meters. Divide centimeter distance from Y axis by this value.", ) longMulti: Optional[FloatLike] = Field( title="Longitude Multiplier", description= "Longitude scale in meters. Divide centimeter distance from X axis by this value", ) latShift: Optional[FloatLike] = Field( title="Latitude Shift", description="Shift of coordinates on the Y axis.", ) longShift: Optional[FloatLike] = Field( title="Longitude Shift", description="Shift of coordinates on the X axis.", ) # Gameplay Settings maxDifficulty: FloatProperty mapTextures: InGameMapTextureSet = Field( ..., description= "Preview textures of the map. Weapon refers to the map player can hold.", ) # Spawn Settings onlyEventGlobalSwaps: bool = Field( False, description= "Controls whether Primal Game Data's random non-event class replacements are allowed.", ) randomNPCClassWeights: List[WeighedClassSwap] = [] # Uploads allowedDinoDownloads: List[ObjectPath] = []
class CookingIngredientData(ExportModel): health: FloatLike = Field(0, description="Health increased per item") stamina: FloatLike = Field(0, description="Stamina increased per item") food: FloatLike = Field(0, description="Food increased per item") weight: FloatLike = Field(0, description="Weight increased per item") water: FloatLike = Field(0, description="Water increased per item in a drink")
class BiomeTempWindSettings(ExportModel): override: Optional[FloatProperty] range: Optional[MinMaxRange] = Field( None, description="Only applies to Temperature.", ) initial: Optional[EnvironmentalOffset] = Field( None, description= f"Applied before other offsets. {EnvironmentalOffsetAbsoluteDesc}", ) above: Optional[EnvironmentalOffset] = Field( None, description= f"Applied only if previous calculation is greater than threshold. {EnvironmentalOffsetRelativeDesc}", ) below: Optional[EnvironmentalOffset] = Field( None, description= f"Applied only if previous calculation is lower than threshold. {EnvironmentalOffsetRelativeDesc}", ) final: Optional[EnvironmentalOffset] = Field( None, description= f"Applied after all other calculations. {EnvironmentalOffsetAbsoluteDesc}", )
class Drop(ExportModel): bp: str = Field( ..., description="Full blueprint path", ) sets: Optional[List[ItemSet]] = Field( None, description="Loot sets", )
class Drop(ExportModel): bp: str = Field( ..., description="Full blueprint path", ) name: StringLikeProperty = Field('') description: StringLikeProperty = Field('') maxItems: IntProperty = Field(0) maxWeight: FloatProperty = Field(25) noRepeatsInSets: Optional[BoolProperty] = Field( None, title="No repeats in sets", description="Entries cannot be picked more than once per set", ) qualityMult: Optional[MinMaxRange] = Field( MinMaxRange(min=1, max=1), title="Quality range", ) qtyMult: Optional[MinMaxPowerRange] = Field( MinMaxPowerRange(min=1, max=1, pow=1), title="Quantity range", ) sets: Optional[List[ItemSet]] = Field( None, description="Loot sets", )
class DeathData(ExportModel): dossierId: IntProperty = Field(-1) lootBagChance: float = Field(0, description="Chance for a loot bag to appear on death") lootBags: List[ItemChancePair] = Field( [], description="Lists of possible loot bag drop sets (for cross-reference with drops.json files)", ) engrams: List[str] = Field([], description="Engrams player receives when this creature is defeated") baseXP: FloatProperty = Field( 0, description="XP awarded when level 1 creature is killed. Formula for specific level: baseXP * (1 + 0.1 * (level - 1))", )
class NPCManager(ExportModel): disabled: bool = False spawnGroup: ObjectPath = Field(description="Path to a container of spawning groups.") minDesiredNumberOfNPC: IntProperty neverSpawnInWater: BoolProperty forceUntameable: BoolProperty # Zones locations: List[Box] = Field( [], title="Counting volumes", ) spawnLocations: List[WeighedBox] = Field([], title="Spawning volumes") spawnPoints: List[Location] = []
class StatEffectData(ExportModel): stat: str value: FloatProperty = Field(..., description="Stat value to set/add") useItemQuality: bool = Field(False, description="Whether item quality is used") pctOf: Optional[str] = Field(None, description="If set, this effect's value is a percentage of current/max stat value.") pctAbsRange: Optional[MinMaxRange] = None setValue: bool = Field(False, description="Whether the current stat value is overriden by this effect's value.") setAddValue: bool = Field(False, description="Whether this effect's is instantly added to current stat value.") forceUseOnDino: bool = Field(False, description="Whether can be used on dinos") allowWhenFull: bool = Field(True, description="Whether allowed when stat is full") qualityMult: float = Field(1.0, description="Item quality effect (addition)") duration: FloatLike = Field(0, description="Effect duration in seconds")
class SupplyCrateSpawn(ExportModel): maxCrateNumber: IntProperty crateClasses: List[ObjectPath] crateLocations: List[Location] minTimeBetweenSpawnsAtSamePoint: FloatProperty delayBeforeFirst: MinMaxRange intervalBetweenSpawns: MinMaxRange intervalBetweenMaxedSpawns: MinMaxRange intervalBetweenSpawnsSP: Optional[MinMaxRange] = Field( None, description="Single-player override of intervalBetweenSpawns.", ) intervalBetweenMaxedSpawnsSP: Optional[MinMaxRange] = Field( None, description="Single-player override of intervalBetweenMaxedSpawns.", )
class ItemChancePair(ExportModel): chance: float = Field( ..., description= "Chance this item will be selected, in an inclusive range from 0 to 1." ) item: str
class WeighedClassSwap(ExportModel): # TODO: Possibly move into export.wiki.models after spawn_groups are moved from_class: Optional[ObjectPath] = Field(alias='from') exact: bool = False to: List[Optional[ObjectPath]] weights: List[FloatProperty] during: str = 'None'
class DropExportModel(ExportFileModel): drops: List[Drop] = Field( ..., description="List of loot crates", ) class Config: title = "Dino drop loot tables"
class PlayerSpawn(ExportModel): regionId: IntProperty = Field(description="ID of an element of region definitions list located in PGD or PWS.", ) x: FloatLike y: FloatLike z: FloatLike lat: Optional[float] long: Optional[float]
class CloningData(ExportModel): costBase: float = Field( None, title="Base Cost to Clone", ) costLevel: float = Field( None, title="Cost per Level", ) timeBase: float = Field( None, title="Base Time to Clone", ) timeLevel: float = Field( None, title="Time per Level", )
class LootCrate(ExportModel): bp: str = Field( ..., title="Full blueprint path", ) levelReq: Optional[MinMaxRange] = Field( None, title="Level requirements", description= "This is a really long description that would mess up the nice structure above", ) decayTime: Optional[DecayTime] = Field( None, title="Decay timing", ) noRepeatsInSets: Optional[BoolProperty] = Field( None, title="No repeats in sets", description="Entries cannot be picked more than once per set", ) qualityMult: Optional[MinMaxRange] = Field( None, title="Quality range", ) setQty: Optional[MinMaxPowerRange] = Field( None, title="Quantity range", ) sets: List[ItemSet] = Field( [], description="List of item sets that can drop", )
class MinMaxPowerRange(ExportModel): min: FloatLike max: FloatLike pow: FloatLike = Field( ..., title="Power", description= "Affects the power curve used to select a value in the range", )
class MinMaxPowerRange(ExportModel): min: Union[FloatProperty, IntProperty, float] max: Union[FloatProperty, IntProperty, float] pow: Union[FloatProperty, IntProperty, float] = Field( ..., title="Power", description= "Affects the power curve used to select a value in the range", )
class ExplorerNote(ExportModel): noteIndex: IntProperty = Field(description="Index of an explorer note entry from Primal Game Data.", ) hidden: bool = False x: FloatProperty y: FloatProperty z: FloatProperty lat: Optional[float] long: Optional[float]
class Glitch(ExportModel): noteId: Optional[IntProperty] = Field(description="Index of an explorer note entry from Primal Game Data.", ) hidden: bool = False hexagons: IntProperty x: FloatProperty y: FloatProperty z: FloatProperty lat: Optional[float] long: Optional[float]
class ItemSetEntry(ExportModel): name: Optional[StringLikeProperty] weight: FloatProperty qty: MinMaxPowerRange quality: MinMaxPowerRange forceBP: BoolProperty items: List[Tuple[Union[FloatProperty, float], Optional[str]]] = Field( ..., description="Pairs of (weighted chance, item class name)", )
class LevelData(ExportModel): ramp: str = Field( 'DinoEasy', description= "Name of ramp that describes amount of experience needed to progress.", ) maxExperience: Optional[FloatProperty] maxLevels: Optional[int] = Field( None, title="Max Level Ups", description= "Max amount of level ups this species can have at default server settings.", ) capOffset: Optional[IntProperty] = Field( None, title="Tame Level Cap Offset", description= "Number of extra levels (above normal cap) this species can gain when tamed without getting destroyed by validation", )
class MissionDispatcher(ExportModel): type_: Union[str, int] = Field( alias="type", description="Friendly mission type name, or internal ID if unknown.", ) missions: List[ObjectPath] x: FloatProperty y: FloatProperty z: FloatProperty lat: Optional[float] long: Optional[float]
class MissionDispatcher(ExportModel): type_: Optional[Union[str, int]] = Field( None, alias="type", description= "Friendly mission type name, or internal ID if unknown, if the dispatcher is restricted to a single type (like on " "Genesis 1)", ) missions: Optional[List[ObjectPath]] = Field( None, description= "List of missions that can be activated at this dispatcher. If null, any mission can be activated (like on Genesis 2).", ) isRockwellBattle: bool = Field( False, description= "Whether the dispatcher is used to activate the Rockwell Prime boss battle of Genesis 2.", ) x: FloatProperty y: FloatProperty z: FloatProperty lat: Optional[float] long: Optional[float]
class CraftingData(ExportModel): xp: FloatProperty = Field(..., description="XP granted per item crafted") time: FloatProperty = Field( ..., description="Time it takes to craft a blueprint") levelReq: IntProperty = Field(..., title="Required player level") productCount: int = Field( ..., description= "If zero, the item is likely given via scripts or triggers a specific action (like boss summoners)", ) skillQualityMult: MinMaxRange = Field( ..., description= "Min and max multipliers of Crafting Skill's effect on quality") recipe: List[RecipeIngredient] = Field(...)
class LevelData(ExportModel): wildForcedLevel: Optional[IntLike] = Field( None, description="A value here means the spawns will not respect difficulty." ) ignoresLevelModifiers: BoolLike = Field( False, description= "Forced level will also not be influenced by spawner's level scaling or other settings on the species.", ) wildLevelTable: List[MinMaxChanceRange] = [ MinMaxChanceRange(chance=0.5405405, min=1.0, max=5.0), # weight = 1.0 MinMaxChanceRange(chance=0.2702703, min=6.0, max=12.0), # weight = 0.5 MinMaxChanceRange(chance=0.1351351, min=13.0, max=20.0), # weight = 0.25 MinMaxChanceRange(chance=0.05405405, min=21.0, max=30.0), # weight = 0.1 ] xpRamp: str = Field( 'DinoEasy', description= "Name of ramp that describes amount of experience needed to progress.", ) maxExperience: FloatLike = 22213970 maxTameLevels: int = Field( 88, description= "Max amount of level ups this species can have at default server settings.", ) levelCapOffset: IntLike = Field( 0, description= "Extra levels this species can have before getting destroyed on servers with the DestroyTamesOverLevelClamp setting " "enabled.", ) mutagenCost: int = Field( 0, description="Amount of Mutagen needed to use it on this dino.")
class RecipeIngredient(ExportModel): exact: bool = Field( False, description="If true, child classes cannot be used in place") qty: FloatLike = Field(..., title="Base quantity") type: str = Field(..., title="Item class name")
class WeighedClassSwap(ExportModel): from_class: Optional[str] = Field(alias="from") exact: bool = Field(False, title="Match class exactly") to: List[Tuple[float, Optional[str]]] during: str = Field('None', title="Event the rule is active in")
class RepairData(ExportModel): xp: FloatProperty = Field(..., description="XP granted per item repaired") time: FloatProperty = Field(..., description="Time to repair an item") recipe: List[RecipeIngredient] = Field( [], description="Required ingredients, if different from crafting")