MOD介绍
使用游戏邮箱的框架。用于调整邮件的控制台命令。代码和内容包接口。 目标: 简化向玩家发送邮件的过程,更好地控制何时以及应接收什么内容。 还提供了更多仅编辑数据文件不可能的选项,例如随意更改字母的文本颜色和背景。 更改日志: 1.20.0 向游戏添加新的自定义资产。 (DIGUS.MailFrameworkMod/MailData) 这意味着 MFM 信件现在可以使用 Content Patcher 加载,并利用其所有功能(如令牌)。它支持相同的属性。 内容包字母也会加载到新的自定义资源中,因此可以使用内容修补程序进行编辑。 内容包现在在游戏开始时加载到缓存中,而不是每次加载保存时重新加载。您可以使用控制台命令强制重新加载内容包。 文本和标题属性现在支持可标记化字符串。 纹理资源现在可以是游戏资源,而不仅仅是 mod 文件夹中的资源。 新的 GameStateQuery 属性作为投递信件的条件。 1.19.0 新属性将在一天内满足所有条件后保持邮件有效,但当天未阅读该邮件。 处理随机选择附件的新功能 新属性用于设置应选择发送附件列表中的多少项目。 用于将“RandomGroup”设置为附件的新属性,因此可以从该组而不是整个列表中进行选择。 新属性用于在随机选取给定附件时设置“重量”。 新属性用于设置应从给定组中选择多少项目,而不是使用默认值。 新属性表示是否可以多次选择给定组中的项目。 用于设置附件和回复的 MailReceived 要求的新属性集 新属性可将 MailReceived 设置为在阅读信件或选中回复选项时删除。 用于设置给定回复选项成本的新属性。 新项目类型“无”。它基本上用于当您希望有随机机会不交付物品而不触发日志中的错误/警告时。 1.18.0 新的 Ids 属性用于替换 CollectionConditions 的索引和名称。它可以聚合多个项目的数量,将它们的价值相加以与金额进行比较。 新的 ReplyConfig 属性添加回复行为。您可以在阅读邮件后向播放器显示一些选项,它会根据所选选项添加一个或多个 MailReceived 文本。可以根据该选择来实现附加的 mod 逻辑。 修复了配方不支持 CustomTextColorName 属性的字母。 修复游戏中加载具有空名称的项目时出现空引用异常的问题。 1.17.1 如果未获知配方,则具有配方属性的内容包邮件无需包含要重新传送的附件。 (如果有附件,则忽略配方属性) 使用与之前制作食谱相同的逻辑修复烹饪食谱。 1.17.0 用于设置附件质量的新属性 如果未获悉菜谱,则应重新发送包含菜谱的内容包邮件。 修复使用限定项目 ID 时有关 Slingshot 的警告。 修复已交付的工艺品的配方,即使配方已经学会。 由于遗留原因,如果在学习的菜谱中找不到菜谱 ID,它将查找创建具有菜谱 ID 名称的项目的菜谱。 1.16.1 修复菜谱翻译名称。 1.16.0 更新mod以兼容星露谷物语1.6 重新加载内容包的新命令 将 MailDao 名称更改为 MailRepository。 (仅影响使用它的 SMAPI mods) 如果您使用正确的资格,附件的新项目类型“QualifiedItemId”应该适用于游戏中的每种类型的项目。 特殊日期条件的新财产。 (结婚及生育) CustomTextColor 的新属性,已弃用旧属性。 新的 HasMods 属性 新的 RequireAllMods 属性 事件 ID 现在是字符串。 (数字应该仍然有效) 删除了从 MFM 合并的过时逻辑 SV 1.6。 修复了 Alpha 版本中信件无法在邮件收集页面中打开的问题。 对于 Modders 使用内容包: mod 文件夹中有一个模板,其中包含有关每个属性的作用的注释说明。 除了条件和回调之外,所有字母功能都与框架编码相同。 条件仅限于已实现的条件,并且回调始终将收到的信件 ID 设置为接收到的信件 ID。如果您需要高级条件,您仍然应该对其进行编码。或者你可以礼貌地建议我在内容包中添加一个条件,如果它有意义,我可能会添加它。 这是 mod 文件中添加的模板: 加载一封简单的信件,如果之前没有读过,就会显示给玩家,并且在玩家打开后不会再次发送: MailRepository.SaveLetter( new Letter( "LetterUniqueId" ,"Letter custom text." ,(l)=>!Game1.player.mailReceived.Contains(l.Id) ,(l)=>Game1.player.mailReceived.Add(l.Id) ) );像以前一样加载一封简单的信,但附加了 5 个翡翠: MailRepository.SaveLetter( new Letter( "LetterUniqueId" ,"Letter custom text." ,new List<Item> { new StardewValley.Object(60,5) } ,(l)=>!Game1.player.mailReceived.Contains(l.Id) ,(l)=>Game1.player.mailReceived.Add(l.Id) ) );玩家不会收到相同的物品,而是从 getOne() 方法返回的副本。 加载一封简单的信件,该信件将教授烹饪食谱,如果玩家不知道食谱,则会发送该信件。当玩家加载时,mod 会自动教授菜谱,无需在此处回调: MailRepository.SaveLetter( new Letter( "LetterUniqueId" , "Letter custom text." , "RecipeUniqueName" , (l) => !Game1.player.cookingRecipes.ContainsKey(l.Recipe) ) );“RecipeUniqueName”必须与“Data//CookingRecipes”或“Data//CraftingRecipes”中存储的相同。 加载具有不同文本和背景的简单信件: MailRepository.SaveLetter( new Letter( "LetterUniqueId" ,"Letter custom text." ,(l)=>!Game1.player.mailReceived.Contains(l.Id) ,(l)=>Game1.player.mailReceived.Add(l.Id) 1 ){TextColor=8} );加载带有自定义背景的简单信件: MailRepository.SaveLetter( new Letter( "LetterUniqueId" ,"Letter custom text." ,(l)=>!Game1.player.mailReceived.Contains(l.Id) ,Game1.player.mailReceived.Add(l.Id) 1 ){ LetterTexture=helper.Content.Load<Texture2D>("CustomLetterBG.png") ,TextColor=4 } );加载带有文本和标题翻译的简单信件。 MailRepository.SaveLetter( new Letter( "LetterUniqueId" ,"myletter.translation.key.text" ,(l)=>!Game1.player.mailReceived.Contains(l.Id) ,(l)=>Game1.player.mailReceived.Add(l.Id) ){ Title = "myletter.translation.key.title", I18N = helper.Translation } );

