AchivementsData
A classe AchivementsData é usada para modificar a coleção de conquistas.
Arquivo de conteúdo: Data/Achievements
Construtor
def __init__(
self, key: str,
Name: str,
Description:str,
DisplayAchievementOnCollectionsTabBeforeItsEarned:bool,
PrerequisiteAchievement:int,
HatEarned:str
)
Parâmetros
| Name | Type | Description |
|---|---|---|
key |
(str) |
Identificação da conquista |
Name |
(str) |
Nome de exbição na conquista |
Description |
(str) |
Descrição de exibição na conquista |
DisplayAchievementOnCollectionsTabBeforeItsEarned |
(bool) |
Exibir conquista na coleção do jogo, antes de ser conquistada |
PrerequisiteAchievement |
(int) |
Conquista requerida para a perfeição do jogo |
HatEarned |
(str) |
ID respectivo ao chapéu desbloqueado pela conquista |
Comportamento
Instâncias de AchievementsData são projetadas para serem usadas dentro do campo Entries de uma ação EditData. Quando você deseja adicionar um novo objeto ou substituir completamente os dados de um objeto existente. Ao criar um objeto AchievementsData com os parâmetros desejados e fornecer sua representação JSON (getJson()) como um valor no dicionário Entries (usando a chave do objeto), você instrui o Content Patcher a escrever esses dados no arquivo Data/Achievements. Essa abordagem estruturada ajuda os desenvolvedores a evitar erros comuns associados a arquivos JSON manuais. Criando um novo objeto usando AchievementsData Para criar um novo objeto, você primeiro instancia a classe AchievementsData com todos os detalhes necessários para o novo item. Em seguida, você usa esta instância AchievementsData dentro do dicionário Entries de uma ação EditData, mapeando a chave do AchievementsData para sua representação JSON obtida via novo_item.getJson(). A ação EditData deve ter Data/Achievements como alvo (Target).
Criando um novo objeto
ModEntry.py:
from StardewValley import Manifest, EditData, Helper
from StardewValley.Data import AchievementsData
# Criando o objeto AchievementsData
novo_item = AchievementsData(
key = "author.modName_NomeConquista",
Name = "Nome da conquista",
Description = "Descrição da conquista",
DisplayAchievementOnCollectionsTabBeforeItsEarned = True, # Deixe False caso seja uma conquista secreta
PrerequisiteAchievement = -1, # ID respectivo das conquistas requeridas para que a mesma apareça nas coleções, deixe '-1' para uma conquista visível acinzentada
HatEarned = "13"
)
# Registrando o objeto através do EditData
self.content.registryContentData(
EditData(
LogName="Criando uma nova conquista",
Target="Data/Achievements",
Entries={
# Mapeia a chave do seu objeto para a representação JSON do objeto
novo_item.key: novo_item.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:
conquista.py
from StardewValley.Data import AchievementsData
from StardewValley import Helper
class NovaConquista(AchievementsData):
def __init__(self, mod: Helper):
self.key = f"{mod.content.Manifest.UniqueID}_NomeConquista"
self.Name = "Nome da conquista"
self.Description = "Descrição da conquista"
self.DisplayAchievementOnCollectionsTabBeforeItsEarned = True # Deixe False caso seja uma conquista secreta
self.PrerequisiteAchievement = -1 # ID respectivo das conquistas requeridas para que a mesma apareça nas coleções, deixe '-1' para uma conquista visível acinzentada
self.HatEarned = "13"
ModEntry.py
from StardewValley import Manifest, EditData, Helper
from conquista import NovaConquista # Importando classe personalizada
#... (dentro de um método como contents(self) na sua classe de mod)
nova_conquista=NovaConquista(self)
self.content.registryContentData(
EditData(
LogName="Criando uma nova conquista",
Target="Data/Achievements",
Entries={
# Mapeia a chave do seu objeto para a representação JSON do objeto
nova_conquista.key: nova_conquista.getJson()
}
)
)