

[
{
"Id": "MyMod.MyMailId", // ID de la lettre. Il est important que la chaîne soit unique pour éviter les conflits. De plus, elle ne doit pas contenir d'espace.
"GroupId": "MyMod.MyGroupId", // Identifiant du groupe de lettres. Les lettres portant le même identifiant ne sont jamais distribuées le même jour. Les lettres enregistrées en premier sont prioritaires, sauf si l'identifiant du groupe se termine par « .Random ». Dans ce cas, une lettre aléatoire est sélectionnée. La valeur par défaut est nulle.
"Titre" : « Titre de ma lettre », // Le titre de la lettre. Il sera affiché dans le menu des collections. Définissez-le à « Null » ou supprimez la ligne si vous ne souhaitez pas que la lettre apparaisse dans la collection. Si un fichier de traduction est fourni, vous devez indiquer une clé de traduction ici, mais vous pouvez toujours laisser la valeur « Null » pour ne pas avoir de titre.
Texte : « Cher @^Ceci est mon courrier personnalisé. », // Texte de la lettre. Vous pouvez utiliser @ pour indiquer le nom du joueur et ^ pour les sauts de ligne. Vous pouvez également utiliser les commandes du jeu de base pour ajouter de l'argent, des objets et d'autres éléments. Si un fichier de traduction est fourni, vous devez indiquer une clé de traduction ici.
"RandomlyChooseAttachment": 2, // Si un nombre est défini, le nombre d'éléments sélectionnés sera choisi aléatoirement dans la liste des pièces jointes, par groupe. La valeur par défaut est null.
"RandomlyChooseAttachmentPerGroup": { "CaveItems": 3 }, // Si un groupe et un montant sont définis ici, ce montant sera utilisé pour sélectionner les éléments au lieu de celui défini dans RandomlyChooseAttachment. La valeur par défaut est vide.
"AttachmentGroupWithReplacement": [ "CaveItems" ], // Les pièces jointes sont choisies aléatoirement dans une liste, sans remplacement par défaut. Si vous souhaitez que le groupe soit choisi en remplacement des pièces jointes, ajoutez le groupe à la liste. Si vous n'avez pas ajouté de groupes, utilisez une chaîne vide. La valeur par défaut est une liste vide.
« Pièces jointes » : [ // Liste des pièces jointes. Supprimez la propriété pour ne pas joindre d'éléments au courrier.
{
"Type": "Object", // [Object|BigCraftable|Tool|Ring|Furniture|Weapon|Boots|DGA|QualifiedItemId|None] Obligatoire. Type d'objet à joindre. S'il n'est pas renseigné, l'objet sera ignoré. « None » est toujours ignoré sans erreur dans le journal et doit être utilisé pour connaître la probabilité de ne pas ajouter d'objet joint.
"Nom" : "Cave Carrot", // Utilisé pour trouver l'index de l'élément. Ceci est requis si vous utilisez des objets personnalisés comme ceux des ressources JSON. Doit contenir l'ID DGA complet. S'il n'est pas fourni, l'index sera utilisé. La valeur par défaut est null.
"Index": "(0)78", // L'index d'un élément. Doit être l'ID d'élément qualifié sous forme de chaîne, mais peut également être utilisé comme entier pour la rétrocompatibilité. Si aucun nom n'est fourni ou si aucun élément correspondant à ce nom n'est trouvé, l'index est utilisé. Sinon, la pièce jointe est ignorée. Ignoré si le type est DGA.
"Stack" : 1, // Valeur de pile de l'objet à livrer. Utilisé uniquement pour les objets et BigCraftable. La valeur par défaut est 1.
« Qualité » : 2, // La valeur de qualité de l'article à livrer. Utilisé uniquement pour les objets. 0 = aucune, 1 = argent, 2 = or, 4 = iridium. La valeur par défaut est 0 ;
"RequireMailReceived": [ "jojaVault", "ccVault" ], // Exige qu'un des e-mails ait été reçu. La liste des jeux contient également d'autres éléments qui ne sont pas des e-mails, comme les indicateurs du centre communautaire. La valeur par défaut est null, ce qui signifie qu'aucun e-mail n'est requis.
"RequireAllMailReceived": false, // Si la valeur est true, tous les e-mails de la liste « RequireMailReceived » doivent avoir été reçus. La valeur par défaut est false.
"ProbabilityWeight": 1, // Le poids de cette pièce jointe lors du choix de celle à livrer. Le modérateur additionne tous les poids d'un groupe donné et attribue une probabilité en divisant ce poids par le total. La valeur par défaut est 1.
"RandomGroup": "CaveItems" // Lors de la sélection aléatoire des éléments, regroupez la liste selon les groupes trouvés et sélectionnez le nombre défini dans chaque groupe. La valeur par défaut est une chaîne vide qui sert de groupe par défaut.
},
{
"Type" : "Outil", // Lors de l'utilisation d'un outil, seuls ceux pris en charge peuvent être attachés.
"Nom" : "Hache", // [Hache|Bêche|Arrosoir|Pioche|Faux|Faux doré|Seau à lait|Ciseaux|Canne à pêche|Pan|Sceptre de retour] Requis pour les outils. Nom de l'outil pris en charge. Sinon, la pièce jointe est ignorée.
"UpgradeLevel" : 1 // Niveau d'amélioration de l'outil. Outils standards : 0 = pierre, 1 = cuivre, 2 = acier, 3 = or, 4 = iridium. Canne à pêche : 0 = canne en bambou, 1 = canne d'entraînement, 2 = canne en fibre de verre, 3 = canne en iridium. Ignoré pour les autres types. La valeur par défaut est 0.
},
{
"Type" : "DGA", //élément DGA
"Nom" : "spacechase0.DynamicGameAssets.Example/My Custom Item", // utilisez l'ID DGA complet. Obligatoire.
"Stack" : 10, // Valeur de pile de l'objet à livrer. Utilisé uniquement pour les objets et BigCraftable. La valeur par défaut est 1.
« Qualité » : 2 // La valeur de qualité de l'article à livrer. Utilisé uniquement pour les objets. 0 = aucune, 1 = argent, 2 = or, 4 = iridium. La valeur par défaut est 0 ;
},
{
"Type": "QualifiedItemId", //Tout élément pris en charge
"Index": "(0)78", // L'ID d'élément qualifié d'un élément.
"Stack": 10, // La valeur de la pile de l'objet à livrer. Utilisé uniquement pour les objets et BigCraftable. La valeur par défaut est 1 ;
« Qualité » : 2 // La valeur de qualité de l'article à livrer. Utilisé uniquement pour les objets. 0 = aucune, 1 = argent, 2 = or, 4 = iridium. La valeur par défaut est 0 ;
}
],
"Recette" : "Nom de la recette", // Supprimez la ligne si vous ne souhaitez pas joindre de recette au message. Cela ne fonctionnera que si vous n'avez pas d'autres pièces jointes. Pour les recettes DGA, utilisez uniquement la partie ID (ignorez le ModID).
"AdditionalMailReceived": ["MyMod.AnotherMailId", "VANILLA_FLAG"], // Utilisez ceci pour ajouter du texte supplémentaire à la liste MailReceived. Cela peut être utile pour ajouter des indicateurs de type "vanilla" ou d'autres identifiants de lettre MFM.
"MailReceivedToRemove": ["MyMod.AnotherMailThatNeedToBeResent","MyMod.SomeFlagThatWasLockingSomeFeature"], // Texte à supprimer de la liste MailReceived. Ceci peut être utilisé pour déclencher de nouveaux messages, des événements, des indicateurs de validation, et empêcher l'envoi d'autres messages MFM…
"LetterBG": "CustomLetterBG.png", // Nom du fichier de votre pack de contenu contenant l'arrière-plan de lettre personnalisé à utiliser. Il doit suivre la même structure que le fichier LetterBG du jeu. WhichBG sera relatif à ce fichier pour cette lettre. Si ce paramètre est nul ou supprimé, le mod utilisera le LetterBG du jeu.
"WhichBG" : 0, // L'identifiant de l'arrière-plan de la lettre. 0 = classique, 1 = bloc-notes, 2 = pyramides
"TextColor": -1, // Supprimez cette ligne pour utiliser la couleur par défaut. Elle sera ignorée si une couleur de texte personnalisée est définie. -1 = Rouge foncé, 0 = Noir, 1 = Bleu ciel, 2 = Rouge, 3 = Bleu violet, 4 = Blanc, 5 = Rouge orangé, 6 = Vert citron, 7 = Cyan, 8 = Gris foncé
"CustomTextColorName": "White", //La couleur du texte.[http://www.foszor.com/blog/xna-color-chart/] La propriété TextColor sera utilisée par défaut.
"UpperRightCloseButton": "CustomCloseButton.png", // Nom du fichier de votre pack de contenu contenant le bouton de fermeture personnalisé à utiliser. Il doit être de 12 x 12. Si la valeur est nulle ou supprimée, le bouton par défaut sera utilisé.
"ReplyConfig": { // Si vous souhaitez que le joueur envoie une réponse après avoir lu la lettre, les options de réponse s'afficheront et ajouteront un ou plusieurs « ReceivedMail » en fonction de la réponse du joueur. Toute logique supplémentaire liée à la réponse doit être implémentée en fonction du ReceivedMail ajouté.
"QuestionKey": "MyMod.MyMailId.Question", //Une clé pour identifier votre question. Elle est à usage interne uniquement, mais doit être unique dans votre pack de contenu pour éviter les conflits entre les réponses.
"QuestionDialog": "Envoyer une réponse en choisissant votre récompense :", //Votre question ou texte qui s'affichera au-dessus des options de réponse. Si un fichier de traduction est fourni, vous devez indiquer une clé de traduction ici.
« Réponses » : [
{
"ReplyKey": "MyMod.MyMailId.Reply1", //Doit être unique entre les réponses à la question.
"ReplyOptionDialog": "Je veux des graines.", //Le texte de l'option qui s'affichera dans la liste des réponses. Si un fichier de traduction est fourni, vous devez indiquer une clé de traduction ici.
"RequireMailReceived": [ "jojaVault", "ccVault" ], // Exige qu'un des e-mails ait été reçu. La liste des jeux contient également d'autres éléments qui ne sont pas des e-mails, comme les indicateurs du centre communautaire. La valeur par défaut est null, ce qui signifie qu'aucun e-mail n'est requis.
"RequireAllMailReceived": false, // Si la valeur est true, tous les e-mails de la liste « RequireMailReceived » doivent avoir été reçus. La valeur par défaut est false.
"MailReceivedToAdd": [ "MyMod.MyMailId.PlayerSeedOption" ], // Texte à ajouter à la liste MailReceived. Cela peut servir à déclencher de nouveaux messages, des événements, des indicateurs de validation, ou à empêcher l'envoi d'autres messages MFM.
"MailReceivedToRemove": [ "MyMod.MyMailId.PlayerSapplingOption" ], // Texte à supprimer de la liste MailReceived. Ceci peut être utilisé pour déclencher de nouveaux messages, des événements, des indicateurs de validation, et empêcher l'envoi d'autres messages MFM...
"ReplyResponseDialog": "Votre lettre de demande de semences a été envoyée." // Texte qui s'affichera après avoir sélectionné cette option de réponse. Si un fichier de traduction est fourni, vous devez indiquer une clé de traduction ici.
Coût : 50 // Le montant d'argent dont le joueur a besoin pour choisir cette option. S'il la choisit, ce montant est immédiatement déduit de son argent. Proposez toujours une option gratuite, sinon vous risquez de bloquer le joueur.
}
]
},
"Répétable" : faux, // Si la valeur est vraie, le mod ne vérifiera pas si l'identifiant de la lettre a déjà été fourni. La valeur par défaut est faux.
"AutoOpen": false, // Si la valeur est true, le mod ouvrira la lettre en début de journée, une fois les conditions remplies. L'identifiant de la lettre sera marqué comme lu et, si une recette est définie, elle sera apprise. Comme la lettre ne s'affichera jamais, les propriétés visuelles comme le titre, le texte, l'arrière-plan, etc., ne seront jamais utilisées, tout comme les pièces jointes.
// CONDITIONS DE LIVRAISON
//Voici les conditions de livraison. Supprimez les lignes si vous ne souhaitez pas les vérifier.
"Date" : "10 printemps Y1", // Doit être cette date ou une date ultérieure. Le format est « [1-28] [printemps|été|automne|hiver] Y[1-999] ».
"Jours" : [7,14,21,28], // Doit être l'un des jours de la liste.
"Saisons" : ["automne"], // Doit être l'une des saisons de la liste. [printemps|été|automne|hiver]
"Météo" : "ensoleillé", // Doit correspondre à la météo du match. Le format est "[ensoleillé|pluvieux]".
"HouseUpgradeLevel": 2, // Le niveau de mise à niveau de la maison doit être égal ou supérieur à ce qui est défini. 0 - maison de départ (aucune raison d'utiliser ceci, supprimez simplement la ligne), 1 - cuisine, 2 - deuxième étage, 3 - cave.
"DeepestMineLevel": 80, // Le niveau de la mine la plus profonde doit être égal ou supérieur à ce qui est défini. 120 est le dernier niveau de la mine, 121 est le premier niveau de la caverne du crâne.
"CurrentMoney": 10000, // L'argent actuel doit être égal ou supérieur à ce qui est défini.
"TotalMoneyEarned" : 500000, // L'argent total gagné doit être égal ou supérieur à ce qui est défini.
"FriendshipConditions": // Chaque PNJ de la liste doit vérifier toutes les conditions.
[
{
"NpcName": "Lewis", //Nom du PNJ. Possibilité d'utiliser des PNJ personnalisés.
"FriendshipLevel": 8, // Le PNJ doit avoir un niveau d'amitié égal ou supérieur à celui défini. La valeur par défaut est 0.
"FriendshipStatus": ["Dating","Engaged","Married"] // [Friendly|Dating|Engaged|Married|Divorced] Exige que le statut d'amitié du PNJ soit un statut de la liste. Supprimez-le pour ne pas exiger de statut.
}
],
"SkillConditions": // Chaque compétence de la liste doit avoir un niveau égal ou supérieur à celui défini. Toutes les compétences codées du jeu standard peuvent être utilisées, y compris Chance. Les compétences personnalisées ne sont pas autorisées.
[
{ "SkillName": "Agriculture", "SkillLevel": 1 }
],
"StatsConditions" : // Chaque statistique de la liste doit avoir une valeur supérieure ou égale à celle définie. Choisissez un StatsName ou un StatsLabel.
[
{
"StatsName": "FromageFabriqué", //[GrainesSemées|ArticlesExpédiés|ArticlesCuits|ArticlesFabriqués|ŒufsDePoulePondus|ŒufsDeCanardPondus|LaitDeVacheProduit|LaitDeChèvreProduit|LaineDeLapinProduite|LaineDeMoutonProduite|FromageFabriqué|FromageDeChèvreFabriqué|TruffesTrouvées|PierresRécoltées|RochersConcassés|SaletéSauvée|CadeauxOfferts|NombreDePertesInconscientes|HeureMoyenneDeCoucher|NombreDePêches|PoissonsPêchés|RochersFêlés|SouchesHachées|PasFaits|MonstresTués|DiamantsTrouvés|Prismatiques ardsTrouvés|AutresPierresPrécieusesTrouvées|CarottesDeGrotteTrouvées|CuivreTrouvé|FerTrouvé|CharbonTrouvé|PiècesTrouvées|OrTrouvé|IridiumTrouvé|BarresFondues|BoissonsFabriquées|ConservesFabriquées|MorceauxDeDéchetsRecyclés|PierresMystiquesÉcrasées|JoursDeJoué|Mauvaises HerbesÉliminées|BâtonsHachés|NotesTrouvées|QuêtesTerminées|NiveauÉtoileRécoltesExpédiées|RécoltesExpédiées|ObjetsCueillis|SlimesTués|GéodesFêlées|BonsAmis|ArgentIndividuelGagné] La valeur par défaut est null.
"StatsLabel": "Name", // [exMemoriesWiped|childrenTurnedToDoves|trashCansChecked|boatRidesToIsland|beachFarmSpawns|hardModeMonstersKilled|timesEnchanted] Voici les statistiques actuelles du jeu, identifiées par une étiquette. Si d'autres sont ajoutées, elles devraient également être prises en charge. Cela identifiera également les étiquettes de statistiques personnalisées ajoutées par d'autres mods. La valeur par défaut est nulle.
"Montant" : 1 // Le montant auquel le statut doit être égal ou supérieur pour que la condition soit valide.
}
],
"CollectionConditions": // Chaque condition de collecte de la liste doit avoir une valeur égale ou supérieure au montant défini.
[
{
"Collection" : "Expédié", //[Expédié|Poisson|Artefacts|Minéraux|Cuisine|Artisanat] Requis.
"Nom" : "Huile", // Obsolète, utilise des identifiants. Nom de l'objet ou de la recette de la collection « Artisanat ». S'il ne s'agit pas d'une collection d'artisanat, ce nom sera recherché dans la liste d'objets pour trouver l'index. Si le nom est introuvable, la lettre est ignorée. La propriété sera combinée avec les autres propriétés. La valeur par défaut est nulle.
"Index" : 211, // Obsolète, utilise plutôt les identifiants. Index de l'objet. Se combine avec les autres propriétés. La valeur par défaut est null.
"Ids" : [ "282", "MossSoup" ], // Identifiants des objets ou noms des recettes de fabrication. Ces valeurs seront combinées avec les autres propriétés. Les quantités sont additionnées pour être comparées à la propriété Quantité.
"Montant" : 10 // Le montant total auquel les objets de la collection doivent être égaux ou supérieurs pour que la condition soit valide.
}
],
"SpecialDateCondition" : // Doit être cette date ou après.
{
"SpecialDate": "Naissance", //[Mariage|Naissance] Obligatoire
"YearsSince": 1, //Nombre d'années écoulées depuis la date. 0 correspond à la date réelle, 1 à l'année écoulée. La valeur par défaut est 0.
"WhichChild": 1 //Si la propriété SpecialDate est ChildBirth, elle fera référence à quel enfant. La valeur par défaut est 1 ;
},
"ExpandedPrecondition": "d Mon Fri/HasItem Pink Cake/!JojaMartComplete/!w rainy", // Nécessite le module Utilitaire Expanded Preconditions. Consultez la documentation de ce module pour comprendre son fonctionnement. Si le module n'est pas chargé, la lettre ne sera pas livrée.
"ExpandedPreconditions": [ "!z spring/t 600 1000", "f Linus 1000/w rainy/z spring", "f Linus 2500" ], // Nécessite le module Utilitaire Expanded Preconditions. Consultez la documentation de ce module pour comprendre son fonctionnement. Si le module n'est pas chargé, la lettre ne sera pas livrée.
"RandomChance": 0.25, // Le mod vérifie si un nombre aléatoire compris entre 0 et 1 est inférieur au nombre donné. Une même sauvegarde, effectuée le même jour et pour la même lettre, produira toujours le même résultat afin d'éviter toute triche.
"Bâtiments" : ["Coop", "Big Coop", "Deluxe Coop"], // Nécessite qu'un des bâtiments soit actuellement construit dans la ferme.
"RequireAllBuildings": false, // Si la valeur est true, tous les bâtiments de la liste « Bâtiments » doivent être actuellement construits dans la ferme. La valeur par défaut est false.
"MailReceived": ["jojaVault","ccVault"], // Exige qu'un des messages ait été reçu. La liste des jeux contient également d'autres éléments qui ne sont pas du courrier, comme les drapeaux du centre communautaire.
"RequireAllMailReceived": false, // Si la valeur est true, tous les e-mails de la liste « MailReceived » doivent avoir été reçus. La valeur par défaut est false.
"MailNotReceived": ["jojaVault","ccVault"], // Exige que les e-mails n'aient pas été reçus. La liste des jeux contient également d'autres éléments qui ne sont pas des e-mails, comme les drapeaux du centre communautaire.
"EventsSeen": [ "4", "32423" ], // Exige que l'un des événements ait été vu par le joueur. Doit être une chaîne, mais peut également fonctionner comme un entier pour la compatibilité rétro.
"RequireAllEventsSeen": false, // Si la valeur est true, tous les événements de la liste « EventsSeen » doivent avoir été vus par le joueur. La valeur par défaut est false.
"HasMods": [ "SMAPI.ConsoleCommands", "SMAPI.SaveBackup" ], // Nécessite le chargement d'un des mods. Doit correspondre à l'ID unique du mod.
"RequireAllMods": false, // Si vrai, exige que tous les mods de la liste "HasMods" soient chargés. La valeur par défaut est false.
"EventsNotSeen": [ "4", "32423" ], // Exige que les événements n'aient pas été vus par le joueur. Doit être une chaîne, mais peut également fonctionner comme un entier pour la compatibilité rétro.
"RecipeKnown": ["Pizza","Survival Burger"], // Exige que l'une des recettes ait été apprise par le joueur.
"RequireAllRecipeKnown": false, // Si la valeur est true, le joueur doit avoir appris toutes les recettes de la liste « RecipeKnown ». La valeur par défaut est false.
"RecipeNotKnown": ["Wild Bait"], // Exige que les recettes n'aient pas été apprises par le joueur.
"KeepValid": false // Si cette option est vraie, une fois les conditions remplies, le courrier reste valide jusqu'à sa lecture. La valeur par défaut est false.
}
]MailRepository.SaveLetter(
nouvelle lettre(
« LetterUniqueId »
« Lettre texte personnalisé ».
,(l)=>!Game1.player.mailReceived.Contains(l.Id)
,(l)=>Game1.player.mailReceived.Add(l.Id)
)
);
MailRepository.SaveLetter(
nouvelle lettre(
« LetterUniqueId »
« Lettre texte personnalisé ».
,nouvelle liste<élément> { nouveau StardewValley.Object(60,5) }
,(l)=>!Game1.player.mailReceived.Contains(l.Id)
,(l)=>Game1.player.mailReceived.Add(l.Id)
)
);
MailRepository.SaveLetter(
nouvelle lettre(
« LetterUniqueId »
« Texte personnalisé de la lettre. »
, "NomUniqueDeLaRecette"
, (l) => !Game1.player.cookingRecipes.ContainsKey(l.Recipe)
)
);
MailRepository.SaveLetter(
nouvelle lettre(
« LetterUniqueId »
« Lettre texte personnalisé ».
,(l)=>!Game1.player.mailReceived.Contains(l.Id)
,(l)=>Game1.player.mailReceived.Add(l.Id)
1
){TextColor=8}
);
MailRepository.SaveLetter(
nouvelle lettre(
« LetterUniqueId »
« Lettre texte personnalisé ».
,(l)=>!Game1.player.mailReceived.Contains(l.Id)
,Game1.player.mailReceived.Add(l.Id)
1
){
LetterTexture=helper.Content.Load("CustomLetterBG.png")
,TextColor=4
}
);
Où CustomLetterBG.png est un fichier image qui suit la même structure que « LooseSprites//letterBG »MailRepository.SaveLetter(
nouvelle lettre(
« LetterUniqueId »
,"myletter.translation.key.text"
,(l)=>!Game1.player.mailReceived.Contains(l.Id)
,(l)=>Game1.player.mailReceived.Add(l.Id)
){
Titre = "myletter.translation.key.title",
I18N = aide.Traduction
}
);
Besoin d’aide pour le téléchargement ou l’installation ? Rejoignez notre communauté Discord pour obtenir de l'aide!
Solutions de jeu
Ressources
Partenaires
Suivez-nous sur
Larvas Limited
Room 1201, 12/F Tai Sang Bank Building 130-132 Des Voeux Road Central HK