首发于
在上篇教程中,我们学习了如何添加游戏事件,其中我们知道了AssetRequested
事件,它也可以替换或者修改游戏内的内容。在这篇教程中,我们将学习如何替换修改游戏内的内容。
这里就先替换游戏的肖像图片,我们可以在Stardew Valley\Content (unpacked)\Portraits
文件夹下找到肖像图片,比如这里我选择替换Abigail.png
。
private void OnAssetRequested(object? sender, AssetRequestedEventArgs e)
{
if (e.Name.IsEquivalentTo("Portraits/Abigail"))
{
e.LoadFromModFile<Texture2D>("assets/Abigail.png", AssetLoadPriority.Medium);
}
}
这里依旧是修改Abigail.png
,这里准备一张有Alpah
通道的图片,然后将它遮罩到Abigail.png
上。
private void OnAssetRequested(object? sender, AssetRequestedEventArgs e)
{
if (e.Name.IsEquivalentTo("Portraits/Abigail"))
{
e.Edit(asset =>
{
var editor = asset.AsImage();
IRawTextureData sourceImage = Helper.ModContent.Load<IRawTextureData>("assets/Black.png");
editor.PatchImage(sourceImage, patchMode: PatchMode.Overlay);
});
}
}
调用Edit
方法,之后将资源转为一个图片,然后加载我们的图片文件,之后调用PatchImage
方法,第一个参数是我们的图片文件,第二个参数是修补模式,这里选择Overlay
,这样就可以将我们的图片遮罩到游戏内的图片上了。
这里我们选择修改商店的数据,我们可以在Stardew Valley\Content (unpacked)\Data
文件夹下找到Shops.json
文件,这个文件包含了所有物品的数据。
private void OnAssetRequested(object? sender, AssetRequestedEventArgs e)
{
if (e.Name.IsEquivalentTo("Data/Shops"))
{
e.Edit(asset =>
{
var editor = asset.AsDictionary<string, ShopData>();
ShopItemData? parsnip = editor.Data["SeedShop"].Items.Find(it => it.Id == "(O)472");
if (parsnip != null)
{
parsnip.Price = 0;
}
});
}
}
首先判断资源名称是否为Data/Shops
,然后将资源转为一个字典,它的键就是字符串类型,值就是ShopData
类型,之后我们就可以修改数据了,这里我们修改皮埃尔商店的防风草种子的价格为0
,商店的键值就是SeedShop
,之后找到防风草种子也就是Id
为(O)472
的物品,然后将价格修改为0
。
因篇幅问题不能全部显示,请点此查看更多更全内容