

[
{
"Id": "MyMod.MyMailId", // ID de la carta. Es importante que sea una cadena única para evitar conflictos. Además, no debe contener espacios.
"GroupId": "MyMod.MyGroupId", // ID del grupo de cartas. Las cartas con el mismo ID de grupo nunca se entregan el mismo día. Las cartas registradas primero tienen prioridad, a menos que el ID de grupo termine en ".Random". En ese caso, se elegirá una carta aleatoria. El valor predeterminado es nulo.
"Título": "Título de mi carta", // Título de la carta. Se mostrará en el menú de colecciones. Si no desea que la carta aparezca en la colección, defínala como nula o elimine la línea. Si se proporciona un archivo de traducción, debe incluir una clave de traducción aquí; sin embargo, puede dejarla como nula si no hay título.
"Texto": "Estimado @^Este es mi correo personalizado.", // Texto de la carta. Puedes usar @ para escribir el nombre del jugador y ^ para saltos de línea. También puedes usar los comandos del juego base para añadir dinero, objetos y demás. Si se proporciona un archivo de traducción, debes incluir aquí la clave de traducción.
"RandomlyChooseAttachment": 2, // Si se establece un número, se seleccionará aleatoriamente esa cantidad de elementos de la lista de adjuntos, por grupo. El valor predeterminado es nulo.
"RandomlyChooseAttachmentPerGroup": { "CaveItems": 3 }, // Si se configura un grupo y una cantidad aquí, se usará esa cantidad para seleccionar elementos en lugar de la configurada en RandomlyChooseAttachment. El valor predeterminado es vacío.
"AttachmentGroupWithReplacement": [ "CaveItems" ], // Los archivos adjuntos se seleccionan aleatoriamente de una lista, sin reemplazo, por defecto. Si desea que la selección se realice reemplazando los archivos adjuntos, agregue el grupo a la lista. Si no agregó grupos, use una cadena vacía. El valor predeterminado es una lista vacía.
"Adjuntos": [ // Lista de adjuntos. Eliminar la propiedad para no adjuntar elementos al correo.
{
"Tipo": "Objeto", // [Objeto|BigCraftable|Herramienta|Anillo|Muebles|Arma|Botas|DGA|QualifiedItemId|Ninguno] Obligatorio. El tipo de objeto que se adjuntará. Si no se proporciona, se ignorará. "Ninguno" siempre se ignora sin errores en el registro y se debe usar cuando se desea una probabilidad de no añadir un objeto adjunto.
"Nombre": "Cave Carrot", // Se usa para encontrar el índice del elemento. Es necesario si se usan objetos personalizados, como los de activos JSON. Debe ser el ID completo de DGA si se usa DGA. Si no se proporciona, se usará el índice. El valor predeterminado es nulo.
"Índice": "(0)78", // El índice de un elemento. Debe ser el ID del elemento calificado como cadena, pero también funciona como un entero para compatibilidad con versiones anteriores. Si no se proporciona un nombre o no se encuentra un elemento para ese nombre, se utiliza el índice. De lo contrario, se ignora el archivo adjunto. Se ignora si el tipo es DGA.
"Pila": 1, // El valor de pila del artículo que se entregará. Se usa solo para objetos y BigCraftable. El valor predeterminado es 1.
"Calidad": 2, // El valor de calidad del artículo a entregar. Solo se usa para objetos. 0 = ninguno, 1 = plata, 2 = oro, 4 = iridio. El valor predeterminado es 0.
"RequireMailReceived": [ "jojaVault", "ccVault" ], // Requiere que se haya recibido uno de los correos. La lista de juegos también contiene otros elementos que no son correos, como las banderas del centro comunitario. El valor predeterminado es nulo para no requerir que se haya recibido ningún correo.
"RequireAllMailReceived": falso. Si es verdadero, se requiere que se hayan recibido todos los correos de la lista "RequireMailReceived". El valor predeterminado es falso.
"ProbabilityWeight": 1, // El peso que tiene este accesorio al elegir cuál entregar. El módulo suma todos los pesos de un grupo dado y le asigna una probabilidad dividiendo este peso entre el total. El valor predeterminado es 1.
"RandomGroup": "CaveItems" // Al seleccionar los elementos aleatoriamente, se agrupa la lista según los grupos encontrados y se selecciona la cantidad establecida de cada grupo. El valor predeterminado es una cadena vacía que funciona como grupo predeterminado.
},
{
"Tipo": "Herramienta", // Al utilizar herramientas, solo se pueden adjuntar las compatibles.
"Nombre": "Hacha", // [Hacha|Azada|Regadera|Pico|Guadaña|Guadaña dorada|Cubo de leche|Tijeras|Caña de pescar|Sartén|Cetro de retorno] Requerido para herramientas. El nombre de la herramienta compatible. De lo contrario, el accesorio se ignora.
"UpgradeLevel": 1 // El nivel de mejora de la herramienta. Herramientas comunes: 0 = piedra, 1 = cobre, 2 = acero, 3 = oro, 4 = iridio. Caña de pescar: 0 = caña de bambú, 1 = caña de entrenamiento, 2 = caña de fibra de vidrio, 3 = caña de iridio. Se ignora para los demás tipos. El valor predeterminado es 0.
},
{
"Tipo": "DGA", //Elemento DGA
"Nombre": "spacechase0.DynamicGameAssets.Example/Mi Artículo Personalizado", // usa el ID completo de DGA. Obligatorio.
"Pila": 10, // El valor de pila del artículo a entregar. Se usa solo para objetos y BigCraftable. El valor predeterminado es 1.
"Calidad": 2 // El valor de calidad del artículo a entregar. Solo se usa para objetos. 0 = ninguno, 1 = plata, 2 = oro, 4 = iridio. El valor predeterminado es 0.
},
{
"Tipo": "QualifiedItemId", //Cualquier artículo compatible
"Índice": "(0)78", // El Id. de artículo calificado de un artículo.
"Pila": 10, // El valor de la pila del artículo que se entregará. Se usa solo para objetos y BigCraftable. El valor predeterminado es 1.
"Calidad": 2 // El valor de calidad del artículo a entregar. Solo se usa para objetos. 0 = ninguno, 1 = plata, 2 = oro, 4 = iridio. El valor predeterminado es 0.
}
],
"Receta": "Nombre de la receta", // Si no desea adjuntar una receta al correo, elimine esta línea. Solo funcionará si no tiene otros archivos adjuntos. Para recetas DGA, use solo el ID (omita el ModID).
"AdditionalMailReceived": ["MyMod.AnotherMailId", "VANILLA_FLAG"], // Use esto para agregar texto adicional a la lista MailReceived. Puede ser útil para agregar indicadores de vainilla u otros identificadores de letras MFM.
"MailReceivedToRemove": ["MyMod.AnotherMailThatNeedToBeResent","MyMod.SomeFlagThatWasLockingSomeFeature"], //Texto que se eliminará de la lista de correo recibido. Esto puede usarse para activar nuevos correos, eventos, indicadores de estado, detener el envío de otros correos MFM...
"LetterBG": "CustomLetterBG.png", // Nombre del archivo en tu paquete de contenido que contiene el fondo de letra personalizado. Debe seguir la misma estructura que el archivo LetterBG del juego. WhichBG será relativo a este archivo para esta letra. Si se establece en null o se elimina, el mod usará el LetterBG del juego.
"WhichBG": 0, //El ID del fondo de la carta. 0 = clásico, 1 = bloc de notas, 2 = pirámides
"TextColor": -1, //Elimine esta línea para usar el color predeterminado. Se ignorará si se establece un CustomTextColor. -1 = Rojo oscuro, 0 = Negro, 1 = Azul cielo, 2 = Rojo, 3 = Violeta azul, 4 = Blanco, 5 = Rojo anaranjado, 6 = Verde lima, 7 = Cian, 8 = Gris oscuro
"CustomTextColorName": "Blanco", //El color del texto.[http://www.foszor.com/blog/xna-color-chart/] De forma predeterminada, se utilizará la propiedad TextColor.
"UpperRightCloseButton": "CustomCloseButton.png", // Nombre del archivo en tu paquete de contenido que contiene el botón de cierre personalizado. Debe tener un tamaño de 12 x 12. Si se establece en null o se elimina, se usará el botón predeterminado.
"ReplyConfig": { // Si desea que el jugador envíe una respuesta después de leer la carta, se mostrarán las opciones de respuesta que agregarán uno o más "ReceivedMail" según la respuesta del jugador. Cualquier lógica adicional relacionada con la respuesta debe implementarse según el ReceivedMail agregado.
"QuestionKey": "MyMod.MyMailId.Question", //Una clave para identificar tu pregunta. Es de uso interno, pero debe ser única en tu paquete de contenido para evitar conflictos entre respuestas.
"QuestionDialog": "Envía una respuesta eligiendo tu recompensa:", //Tu pregunta o texto que aparecerá sobre las opciones de respuesta. Si se proporciona un archivo de traducción, debes incluir aquí la clave de traducción.
"Respuestas": [
{
"ReplyKey": "MyMod.MyMailId.Reply1", //Debe ser único entre las respuestas de la pregunta.
"ReplyOptionDialog": "Quiero semillas.", //El texto de la opción que se mostrará en la lista de respuestas. Si se proporciona un archivo de traducción, debe incluir aquí la clave de traducción.
"RequireMailReceived": [ "jojaVault", "ccVault" ], // Requiere que se haya recibido uno de los correos. La lista de juegos también contiene otros elementos que no son correos, como las banderas del centro comunitario. El valor predeterminado es nulo para no requerir que se haya recibido ningún correo.
"RequireAllMailReceived": falso. Si es verdadero, se requiere que se hayan recibido todos los correos de la lista "RequireMailReceived". El valor predeterminado es falso.
"MailReceivedToAdd": [ "MyMod.MyMailId.PlayerSeedOption" ], // Texto para añadir a la lista MailReceived. Esto puede usarse para activar nuevos correos, eventos, indicadores de estado, impedir el envío de otros correos MFM...
"MailReceivedToRemove": [ "MyMod.MyMailId.PlayerSapplingOption" ], //Texto que se eliminará de la lista de correos recibidos. Esto puede usarse para activar nuevos correos, eventos, indicadores de estado, detener el envío de otros correos MFM...
"ReplyResponseDialog": "Su carta solicitando semillas fue enviada." //Texto que se mostrará después de seleccionar esta opción de respuesta. Si se proporciona un archivo de traducción, debe incluir aquí la clave de traducción.
"Costo": 50 // La cantidad de dinero que el jugador necesita para elegir esta opción. Si la elige, esa cantidad se resta inmediatamente de su dinero. Siempre ofrece una opción sin costo; de lo contrario, podrías bloquear al jugador.
}
]
},
"Repetible": falso. Si es verdadero, el mod no comprobará si el ID de la carta ya se ha entregado. El valor predeterminado es falso.
"AutoOpen": falso, // Si es verdadero, el mod abrirá la carta al comienzo del día, una vez que se cumplan las condiciones. El ID de la carta se marcará como leído y, si hay una receta establecida, se aprenderá. Dado que la carta nunca se mostrará, las propiedades visuales como el título, el texto, el fondo, etc., tampoco se usarán, al igual que los archivos adjuntos.
// CONDICIONES DE ENTREGA
A continuación se muestran las condiciones de entrega. Si no desea marcarlas, elimine cualquier línea.
"Fecha": "10 primavera Y1", // Debe ser esa fecha o posterior. El formato es "[1-28] [primavera|verano|otoño|invierno] Y[1-999]".
"Días": [7,14,21,28], // Debe ser uno de los días de la lista.
"Estaciones": ["otoño"], // Debe ser una de las estaciones de la lista. [primavera|verano|otoño|invierno]
"Tiempo": "soleado", // Debe ser el tiempo del juego. El formato es "[soleado|lluvioso]".
"HouseUpgradeLevel": 2, // El nivel de mejora de la casa debe ser igual o superior al definido. 0 - casa inicial (no hay razón para usar esto, solo elimine la línea), 1 - cocina, 2 - segundo piso, 3 - sótano.
"DeepestMineLevel": 80, // El nivel de la mina más profunda debe ser igual o mayor al definido. 120 es el último nivel de la mina, 121 es el primer nivel de la caverna del cráneo.
"CurrentMoney": 10000, // El dinero actual debe ser igual o mayor al definido.
"TotalMoneyEarned": 500000, // El dinero total ganado debe ser igual o mayor a lo definido.
"FriendshipConditions": // Cada NPC de la lista debe cumplir todas las condiciones.
[
{
"NpcName": "Lewis", //Nombre del PNJ. Se pueden usar PNJ personalizados.
"NivelAmistad": 8, // El PNJ debe tener un nivel de corazón de amistad igual o superior al definido. El valor predeterminado es 0.
"FriendshipStatus": ["Citas","Comprometido","Casado"] // [Amistoso|Citas|Comprometido|Casado|Divorciado] Requerir que el estado de amistad del PNJ sea uno de la lista. Eliminar para no requerir un estado.
}
],
"SkillConditions": // Cada habilidad de la lista debe tener un nivel igual o superior al definido. Se pueden usar todas las habilidades codificadas del juego original, incluyendo Suerte. No se pueden usar habilidades personalizadas.
[
{ "SkillName": "Agricultura", "SkillLevel": 1 }
],
"StatsConditions": // Cada estadística de la lista debe tener un valor igual o superior al definido. Elija un StatsName o un StatsLabel.
[
{
"StatsName": "Queso Hecho", //[Semillas Sembradas | Objetos Enviados | Objetos Cocinados | Objetos Elaborados | Huevos de Gallina Puestos | Huevos de Pato Puestos | Leche de Vaca Producida | Leche de Cabra Producida | Lana de Conejo Producida | Lana de Oveja Producida | Queso Hecho | Queso de Cabra Hecho | Trufas Encontradas | Piedras Recolectadas | Rocas Trituradas | Tierra Desenterrada | Regalos Recibidos | Veces Inconsciente | Promedio de Hora de Acostarse | Veces Pescadas | Peces Capturados | Rocas Agrietadas | Tocones Troceados | Pasos Dados | Monstruos Muertos | Diamantes Encontrados | Prismáticos ardsEncontrados|OtrasGemasPreciosasEncontradas|ZanahoriasDeCuevaEncontradas|CobreEncontrado|HierroEncontrado|CarbónEncontrado|MonedasEncontradas|OroEncontrado|IridioEncontrado|LingotesFundidos|BebidasFabricadas|ConservasFabricadas|PedazosDeBasuraReciclados|PiedrasMísticasTrituradas|DíasJugados|Mala hierbaEliminada|PalosCortados|NotasEncontradas|MisionesCompletadas|NivelEstrellaCosechasEnviadas|CosechasEnviadas|ObjetosRecolectados|SlimesMatados|GeodasRompidas|BuenosAmigos|DineroIndividualGanado] El valor predeterminado es nulo.
"StatsLabel": "Nombre", // [exMemoriesWiped|childrenTurnedToDoves|trashCansChecked|boatRidesToIsland|beachFarmSpawns|hardModeMonstersKilled|timesEnchanted] Estas son las estadísticas actuales del juego identificadas por etiqueta. Si se agregan más, también deberían ser compatibles. También identificará las etiquetas de estadísticas personalizadas agregadas por otros mods. El valor predeterminado es nulo.
"Cantidad": 1 // La cantidad que el estado debe ser igual o mayor para que la condición sea válida.
}
],
"CollectionConditions": // Cada condición de colección de la lista debe tener un valor igual o mayor que la cantidad definida.
[
{
"Colección": "Enviado", //[Enviado|Pescado|Artefactos|Minerales|Cocina|Elaboración] Obligatorio.
"Nombre": "Aceite", //Obsoleto, usa identificadores en su lugar. El nombre del objeto o receta de la colección "Artesanía". Si no es una colección de artesanía, se buscará ese nombre en la lista de objetos para encontrar el índice. Si no se encuentra el nombre, se ignora la letra. Se combinará con las demás propiedades. El valor predeterminado es nulo.
"Índice": 211, //Obsoleto, usa identificadores en su lugar. El índice del objeto. Se combinará con las demás propiedades. El valor predeterminado es nulo.
"Ids": [ "282", "MossSoup" ], //Los IDs de los artículos o los nombres de las recetas de elaboración. Se combinarán con las demás propiedades. Las cantidades se suman para compararlas con la propiedad Cantidad.
"Cantidad": 10 // La cantidad total de objetos en la colección debe ser igual o mayor para que la condición sea válida.
}
],
"SpecialDateCondition": // Debe ser esa fecha o posterior.
{
"FechaEspecial": "Nacimiento", //[Boda|Nacimiento] Obligatorio
"YearsSince": 1, // La cantidad de años transcurridos desde la fecha. 0 corresponde a la fecha actual, 1 al año siguiente. El valor predeterminado es 0.
"WhichChild": 1 //Si la propiedad SpecialDate es ChildBirth, se hará referencia a qué hijo. El valor predeterminado es 1.
},
"ExpandedPrecondition": "d Mon Fri/HasItem Pink Cake/!JojaMartComplete/!w rainy", //Necesita el mod "Utilidad de Precondiciones Expandidas". Consulta la documentación de dicho mod para ver cómo funciona. Si el mod no está instalado, la carta no se entregará.
"ExpandedPreconditions": [ "!z spring/t 600 1000", "f Linus 1000/w rainy/z spring", "f Linus 2500" ], //Requiere el módulo "Utilidad de Precondiciones Expandidas". Consulte la documentación de dicho módulo para ver cómo funciona. Si el módulo no está cargado, la carta no se entregará.
"RandomChance": 0.25, // El mod comprobará si un número aleatorio del 0 al 1 está por debajo del número dado. La misma partida guardada, el mismo día y para la misma letra, siempre tendrá el mismo resultado para evitar trampas.
"Edificios": ["Coop","Big Coop","Deluxe Coop"], // Requiere que uno de los edificios esté actualmente construido en la granja.
"RequireAllBuildings": falso, // Si es verdadero, se requiere que todos los edificios de la lista "Edificios" estén actualmente construidos en la granja. El valor predeterminado es falso.
"MailReceived": ["jojaVault","ccVault"], // Requiere que se haya recibido uno de los correos. La lista de juegos también contiene otros elementos que no son correo, como las banderas del centro comunitario.
"RequireAllMailReceived": falso, // Si es verdadero, se requiere que se hayan recibido todos los correos de la lista "MailReceived". El valor predeterminado es falso.
"MailNotReceived": ["jojaVault","ccVault"], // Requiere que los correos no se hayan recibido. La lista de juegos también contiene otros elementos que no son correo, como las banderas del centro comunitario.
"EventsSeen": [ "4", "32423" ], // Requiere que el jugador haya visto uno de los eventos. Debe ser una cadena, pero también funciona como un entero para compatibilidad con versiones anteriores.
"RequireAllEventsSeen": falso, // Si es verdadero, se requiere que el jugador haya visto todos los eventos de la lista "EventsSeen". El valor predeterminado es falso.
"HasMods": [ "SMAPI.ConsoleCommands", "SMAPI.SaveBackup" ], // Requiere que se cargue uno de los mods. Debe ser el ID único del mod.
"RequireAllMods": falso, // Si es verdadero, se requiere que se hayan cargado todos los mods de la lista "HasMods". El valor predeterminado es falso.
"EventsNotSeen": [ "4", "32423" ], // Requiere que el jugador no haya visto los eventos. Debe ser una cadena, pero también funciona como un entero para compatibilidad con versiones anteriores.
"RecipeKnown": ["Pizza","Hamburguesa de supervivencia"], // Requiere que el jugador haya aprendido una de las recetas.
"RequireAllRecipeKnown": falso, // Si es verdadero, se requiere que el jugador haya aprendido todas las recetas de la lista "RecipeKnown". El valor predeterminado es falso.
"RecipeNotKnown": ["Cebo salvaje"], // Requiere que el jugador no haya aprendido las recetas.
"KeepValid": falso // Si es verdadero, una vez que se cumplan las condiciones, el correo se mantendrá válido hasta su lectura. El valor predeterminado es falso.
}
]MailRepository.SaveLetter(
nueva carta(
"Identificador único de letra"
,"Texto de carta personalizado."
,(l)=>!Juego1.jugador.correoRecibido.Contiene(l.Id)
,(l)=>Juego1.jugador.mailRecibido.Añadir(l.Id)
)
);
MailRepository.SaveLetter(
nueva carta(
"Identificador único de letra"
,"Texto de carta personalizado."
,nueva Lista { nuevo StardewValley.Object(60,5) }
,(l)=>!Juego1.jugador.correoRecibido.Contiene(l.Id)
,(l)=>Juego1.jugador.mailRecibido.Añadir(l.Id)
)
);
MailRepository.SaveLetter(
nueva carta(
"Identificador único de letra"
, "Texto personalizado de carta."
, "NombreÚnicoReceta"
, (l) => !Juego1.jugador.recetasdecocina.ContieneClave(l.Receta)
)
);
MailRepository.SaveLetter(
nueva carta(
"Identificador único de letra"
,"Texto de carta personalizado."
,(l)=>!Juego1.jugador.correoRecibido.Contiene(l.Id)
,(l)=>Juego1.jugador.mailRecibido.Añadir(l.Id)
1
){Color del texto=8}
);
MailRepository.SaveLetter(
nueva carta(
"Identificador único de letra"
,"Texto de carta personalizado."
,(l)=>!Juego1.jugador.correoRecibido.Contiene(l.Id)
,Juego1.jugador.mailRecibido.Añadir(l.Id)
1
){
TexturaDeLetra=helper.Contenido.Cargar("CustomLetterBG.png")
,Color del texto=4
}
);
Donde CustomLetterBG.png es un archivo de imagen que sigue la misma estructura que "LooseSprites//letterBG"MailRepository.SaveLetter(
nueva carta(
"Identificador único de letra"
,"micarta.traducción.clave.texto"
,(l)=>!Juego1.jugador.correoRecibido.Contiene(l.Id)
,(l)=>Juego1.jugador.mailRecibido.Añadir(l.Id)
){
Título = "micarta.traducción.clave.título",
I18N = ayudante.Traducción
}
);
¿Necesitas ayuda con la descarga o instalación? Únete a nuestra comunidad de Discord para soporte!
Soluciones de juego
Recursos
Fogonadura
Síguenos en
Larvas Limited
Room 1201, 12/F Tai Sang Bank Building 130-132 Des Voeux Road Central HK