BuildingsData
A classe BuildingsData permite adicionar ou alterar construções ao jogo.
Construtor
def __init__(
self,
*,
key: str,
Name: str,
Description: str,
Texture: str,
NameForGeneralType: Optional[str] = None,
Builder: Optional[str] = None,
BuildCost: Optional[int] = None,
BuildMaterials: Optional[List[BuildMaterials]] = None,
BuildDays: Optional[int] = None,
BuildCondition: Optional[str] = None,
BuildMenuDrawOffset: Optional[Position] = None,
AdditionalPlacementTiles: Optional[list[AdditionalPlacementTiles]] = None,
IndoorItems: Optional[list[IndoorItems]] = None,
MagicalConstruction: Optional[bool] = None,
AddMailOnBuild: Optional[list[str]] = None,
BuildingToUpgrade: Optional[str] = None,
IndoorItemMoves: Optional[list[IndoorItemMoves]] = None,
UpgradeSignTile: Optional[Position] = None,#use getStr() to return a valid value for this variable
UpgradeSignHeight: Optional[float] = 0.0,
Size: Optional[Position] = None,
CollisionMap: Optional[str] = None,
HumanDoor: Optional[Position] = None,
AnimalDoor: Optional[Rectangle]=None,
AnimalDoorOpenDuration: Optional[float] = None,
AnimalDoorCloseDuration: Optional[float] = None,
AnimalDoorOpenSound: Optional[str] = None,
AnimalDoorCloseSound: Optional[str] = None,
SourceRect: Optional[Rectangle] = None,
Skins: Optional[list[Skins]] = None,
FadeWhenBehind: Optional[bool] = None,
DrawOffset: Optional[Position] = None,#use getStr() to return a valid value for this variable
SeasonOffset: Optional[Position] = None,
SortTileOffset: Optional[float] = None,
AllowsFlooringUnderneath: Optional[bool] = None,
DrawLayers: Optional[list[DrawLayers]] = None,
DrawShadow: Optional[bool] = True,
IndoorMap: Optional[str] = None,
IndoorMapType: Optional[str] = None,
NonInstancedIndoorLocation: Optional[str] = None,
MaxOccupants: Optional[int] = None,
AllowAnimalPregnancy: Optional[bool] = None,
ValidOccupantTypes: Optional[list[str]] = None,
HayCapacity: Optional[int] = None,
ItemConversions: Optional[list[ItemConversions]] = None,
Chests: Optional[list[Chests]] = None,
ActionTiles: Optional[list[ActionTiles]] = None,
DefaultAction: Optional[str] = None,
TileProperties: Optional[list[TileProperties]] = [],
AdditionalTilePropertyRadius: Optional[int] = None,
Metadata: Optional[dict[str, str]] = None,
BuildingType: Optional[str] = None,
ModData: Optional[dict[str, str]] = None,
CustomFields: Optional[str] = None
)
Parâmetros
| Name | Type | Description |
|---|---|---|
key |
(str) |
Identificação da construção |
Name |
(str) |
Nome da construção |
Description |
(str) |
Descrição da construção |
Texture |
(str) |
Objeto da textura da construção |
NameForGeneralType |
(str, Optional) |
Nome Geral da construção |
Builder |
(str, Optional) |
Npc responsável pela construção: Apenas Robin e Wizard são válidos. |
BuildCost |
(int, Optional) |
Custo da construção |
BuildMaterials |
(list[BuildMaterials], Optional) |
Materiais usados na construção, veja a clase em BuildMaterials |
BuildDays |
(int, Optional) |
Dias de construção, default:0 |
BuildCondition |
(str, Optional) |
Condições para construção, usando uma game query, exemplos na (wiki)[https://stardewvalleywiki.com/Modding:Game_state_queries] |
BuildMenuDrawOffset |
(Position, Optional) |
Sprite a ser exibido no menu de construções, padrão: nenhum. Classe usada: Position |
AdditionalPlacementTiles |
(list[AdditionalPlacementTiles], Optional) |
Tiles adicionais que são tratados como parte da construção ao colocar no menu de construção, usando a classe em AdditionalPlacementTiles |
IndoorItems |
(list[IndoorItems], Optional) |
Itens adicionados dentro da construção ao ser concluída. Veja a classe em IndoorItems |
MagicalConstruction |
(bool, Optional) |
Temática mística durante o menu de construções, além de ser conclúida de imediato |
AddMailOnBuild |
(list[str], Optional) |
Identificações de cartas a serem recebidas por todos os jogadores ao contruir pela primeira vez |
BuildingToUpgrade |
(str, Optional) |
Identificação de construção que pode ser construida a partir da primeira, como um aprimoramento, se for omitida, a construção será construida como nova |
IndoorItemMoves |
(list[IndoorItemMoves], Optional) |
Itens que podem ser movidos dentro da construção ao ser atualizada. Veja a classe em IndoorItemMoves |
UpgradeSignTile |
(Position, Optional) |
Posição do tile para sinal de aprimoração na construção durante a atualização. Default: Position(0, 0). Classe usada: Position |
UpgradeSignHeight |
(float, Optional) |
Altura em pixels do sinal de melhoria quando Robin está construindo uma melhoria. O padrão é 0. |
Size |
(Position, Optional) |
Tamanho da construção. Default Position(1,1). Classe usada: Position |
CollisionMap |
(str, Optional) |
Um bloco de texto ASCII que indica em quais peças do edifício os jogadores podem andar, onde cada personagem pode ser X (bloqueado) ou O (passável). O padrão é que todas as peças sejam bloqueadas. Ex: single line with \n line breaks: CollisionMap= "XXXX\nXOOX" |
HumanDoor |
(Position, Optional) |
A posição da porta que pode ser clicada para se teletransportar para o interior do edifício. Isso é medido em blocos em relação ao bloco do canto superior esquerdo. O padrão é desabilitado. Classe usada: Position |
AnimalDoor |
(Rectangle, Optional) |
A posição e o tamanho da porta que os animais usam para entrar/sair do edifício, se o interior do edifício for um local para animais, especificado como um objeto com os campos X, Y, Largura e Altura. Isso é medido em blocos em relação ao bloco do canto superior esquerdo. O padrão é desabilitado. Classe usada: Rectangle |
AnimalDoorOpenDuration |
(float, Optional) |
Tempo de abertura da animação da porta animal, em milisegundos, se omitida, a porta abre instantaneamente. |
AnimalDoorCloseDuration |
(float, Optional) |
Tempo de fechamento da animação da porta animal, em milisegundos, se omitida, a porta fecha instantaneamente. |
AnimalDoorOpenSound |
(str, Optional) |
ID respectivo ao som de abertura da porta animal. Padrão: desativado |
AnimalDoorCloseSound |
(str, Optional) |
ID respectivo ao som de fechamento da porta animal. Padrão desativado |
SourceRect |
(Rectangle, Optional) |
Área em pixels da construção especificada com os campos X, Y, Width, Height, por padrão é o tamanho da texture. Classe usada: Rectangle |
Skins |
(list[Skins], Optional) |
As aparências que podem ser selecionadas no menu do Robin (como cabanas de pedra/tábua/tronco), além da aparência padrão baseada em Textura. Veja a classe em Skins |
FadeWhenBehind |
(bool, Optional) |
Se a construção deve se tornar semitransparente quando o jogador estiver atrás dele. Padrão: true. |
DrawOffset |
(Position, Optional) |
Deslocamento de pixel aplicado em relação ao Sprite da construção no mundo. Padrão: Position(0, 0). Classe usada: Position |
SeasonOffset |
(Position, Optional) |
Um deslocamento de pixel a ser aplicado a cada estação. Isso é aplicado à posição do SourceRect multiplicando o deslocamento por 0 (primavera), 1 (verão), 2 (outono) ou 3 (inverno). Padrão Position(0, 0), para que todas as estações usem o mesmo retângulo de origem. Classe usada: Position |
SortTileOffset |
(float, Optional) |
Um deslocamento de ladrilho Y aplicado ao calcular as camadas de renderização. Por exemplo, um valor de 2,5 tratará o edifício como se ele estivesse 2,5 blocos mais à frente na tela para fins de disposição em camadas. Padrão 0 |
AllowsFlooringUnderneath |
(bool, Optional) |
Se o piso pode ser colocado embaixo e, quando o edifício é colocado, se ele deixará o piso embaixo dele. Padrão: true. |
DrawLayers |
(list[DrawLayers], Optional) |
Uma lista de texturas para desenhar sobre ou atrás do edifício, com suporte para condições e animações. Isso consiste em uma lista de modelos com os campos da classe DrawLayers |
DrawShadow |
(bool, Optional) |
Se deve ser desenhada uma sombra automática ao longo da borda inferior do sprite do edifício. Padrão: true. |
IndoorMap |
(str, Optional) |
O nome do objeto de mapa em Maps a ser carregado para o interior da construção. Por exemplo, "Shed" carregará o mapa Maps/Shed do galpão. |
IndoorMapType |
(str, Optional) |
Nome completo da classe em C# que gerenciará a parte interna da construção. Exemplos: StardewValley.AnimalHouse; StardewValley.Locations.Cabin, etc. O default é o local genérico: StardewValley.Locations.GameLocation |
NonInstancedIndoorLocation |
(str, Optional) |
Nome global e único a ser tratado pelo interior da construção como FarmHouse e Greenhouse para suas construções. Cada local só pode ser usado por um edifício. Se o local já estiver em uso (por exemplo, porque o jogador tem dois desses edifícios), cada edifício subsequente usará o IndoorMap e o IndoorMapType. Por exemplo, a primeira estufa usará o local global Greenhouse (Estufa), e qualquer estufa subsequente usará um local instanciado separado. |
MaxOccupants |
(int, Optional) |
Quantidade máxima de animais na construção |
AllowAnimalPregnancy |
(bool, Optional) |
Permite a reprodução de animais na construção. Default: False |
ValidOccupantTypes |
(list[str], Optional) |
Uma lista de IDs de construções cujos animais também devem ser permitidos nessa construção. Por exemplo, [ "Barn", "Coop" ] permitirá animais de celeiro e de galinheiro nessa construção. Padrão: nenhum |
HayCapacity |
(int, Optional) |
A quantidade de feno que pode ser armazenada nessa construção, se construido na fazenda, funciona como silos e contribui para o feno disponível na fazenda. |
ItemConversions |
(list[ItemConversions], Optional) |
Conversões de itens na construção #Continuar |
Chests |
(list[Chests], Optional) |
Caixas de armazenamento na construção |
ActionTiles |
(list[ActionTiles], Optional) |
Tiles de ações na construção |
DefaultAction |
(str, Optional) |
Ação padrão na construção |
TileProperties |
(list[TileProperties], Optional) |
Propriedades de tiles na construção |
AdditionalTilePropertyRadius |
(int, Optional) |
Ao interagir, um tile adicional será criado ao redor, manter 0 para que apenas os tiles padrões funcionem |
Metadata |
(dict[str, str], Optional) |
Propriedades extras que podem ser usadas pelo jogo. Exemplo: Caso houver uma chaminé, ela produzirá fumaça caso acesa |
BuildingType |
(str, Optional) |
Nome completo do tipo em C# para a instancia da construção. Caso seja personalizado, utilize ferramentas como o SpaceCore para lidar com serialização e sincronização multijogador |
ModData |
(dict[str, str], Optional) |
Propriedades extras anexadas a construção quando for contruída |
CustomFields |
(str, Optional) |
Campos personalizados |
Comportamento
...
Criando um novo objeto
ModEntry.py
from StardewValley import Manifest, EditData
from StardewValley.helper import Helper
from StardewValley.Data import BuildingsData
nova_building = BuildingsData(
key="author.modName_NomeConstrução",
Name="Nome da construção",
Description="Descrição da construção",
Texture="NomeConstrução_texture", # Carregar usando Load
)
# Registrando o objeto através do EditData
self.content.registryContentData(
EditData(
LogName="Criando uma nova construção",
Target="Data/Buildings",
Entries={
# Mapeia a chave do seu objeto para a representação JSON do objeto
nova_building.key: nova_building.getJson()
}
)
)
Criando um novo objeto através de uma classe personalizada
Para usar uma classe personalizada, você pode criar um novo arquivo ou no mesmo arquivo criar uma classe:
Um novo arquivo.py:
building.py
from StardewValley.Data import BuildingsData
from StardewValley.helper import Helper
class NovaConstrução(BuildingsData):
def __init__(self, mod: Helper):
self.key = f"{mod.content.Manifest.UniqueID}_NomeConstrução"
self.Name = "Nome da construção"
self.Description = "Descrição da construção"
self.Texture = "NomeConstrução_texture" # Carregar usando Load
ModEntry.py
from StardewValley import Manifest, EditData
from StardewValley.helper import Helper
from building import NovaConstrução # Importando classe personalizada
#... (dentro de um método como contents(self) na sua classe de mod)
nova_building = NovaConstrução(self)
# Registrando o objeto através do EditData
self.content.registryContentData(
EditData(
LogName="Criando uma nova construção",
Target="Data/Buildings",
Entries={
# Mapeia a chave do seu objeto para a representação JSON do objeto
nova_building.key: nova_building.getJson()
}
)
)