搜索
您的当前位置:首页正文

星露谷模组开发教程#4 替换修改内容

来源:赴品旅游

首发于


在上篇教程中,我们学习了如何添加游戏事件,其中我们知道了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

因篇幅问题不能全部显示,请点此查看更多更全内容

Top