超级玩家
![Rank: 5](static/image/common/star_level3.gif) ![Rank: 5](static/image/common/star_level1.gif)
- 贡献度
- 97
- 金元
- 5218
- 积分
- 920
- 精华
- 1
- 注册时间
- 2010-3-23
![3DM MOD站(白银)](static/image/common/medal584.gif)
|
本帖最后由 c4sunyx 于 2021-4-28 19:32 编辑
使用方法:将dll改名为Assembly-CSharp.dll,放在steam\steamapp\common\PathOfWuxia\PathOfWuxia_Data\Managed\下面替换官方版本(原版记得备份)
然后手动修改游戏文件路径下的Config.json文件,将ExternalDirectory设为你要玩的Mod路径即可
例如"ExternalDirectory":"Mods/<你的Mod名>/",建议路径用英文
然后你的Mod文件夹里面的路径要和AssetBundle里的对应比如主题曲替换是audio/music/In_theme_01.wav,文本替换是config/textfiles/stringTable.txt,等等
这样这个文件夹下的对应文件就会优先于本体AssetBundle文件读取,如果没有再去找本体
还可以下载多个不同Mod后,用修改Mod路径的方式进行更换
插件更新后,支持方式变更为多个Mod可同时加载,可自行增删
附Harmony插件形式的功能mod,功能不定期添加中,目前除了加载外部文件效果外,还包括如下杂项效果
1.可随时更改难度
2.自定义加速自由场景和战斗(默认F2)
3.视角解锁,包括战斗和自由活动,以及战斗视角跟随方式等
4.可在战斗中使用招式时获得招式经验,并可突破10级上限(只限战斗经验)
5.随机事件设定(可选择贴吧水友zhzzdhd的小概率必发生方式,以及自设随机数的方式)
6.血条直接显示角色的五行、姓名;修炼时显示需要多少点数可一次练满到10级
7.添加半即时制战斗模式,类似金庸群侠传系列,灵巧排序
8.新建角色时可自定属性和特性点数,并可自定义模型和头像
9.装备锻造重铸功能(锻造菜单中按对应键切换)
10.可装备多个饰品
11.可自行配置语音,包括战斗语音和剧情语音
12.自定义调整队伍人数
13.战斗中切换姿势
14.可开启自动战斗
链接1 http://pathofwuxia.ys168.com/
链接2 https://github.com/Binarizer/Plugin-Pow/releases
* 所有功能均可开关可调节,以增强且不影响原版游戏体验为原则
* 所有功能均可开关可调节,以增强且不影响原版游戏体验为原则
* 所有功能均可开关可调节,以增强且不影响原版游戏体验为原则
游戏中按F1设置
下面是思路和修改方法
Unity游戏加载是实现DataProvider来弄的,引擎推荐用的都是打包好的AssetBundle,但很多游戏也有读外部(External)媒体文件的需求
河洛做了4个Provider,其中在AssetBundle之前还有2个,其中有一个就叫ExternalResourceProvider,并且已经写好了不少逻辑
但是其发布版路径设为空了,这样我们只要将其设定为你的Mod路径,就可以正常工作了。
找到类Heluo.GameConfig,添加成员变量
[JsonProperty]
public static string ExternalDirectory = string.Empty;
为避免每次覆盖设置,找到类Heluo.UI.ConfigData,添加成员变量
public string ExternalDirectory;
然后找到CtrlOption.StoreSetting()函数,在写设置之前加入
configData.ExternalDirectory = GameConfig.ExternalDirectory;
string text = JsonUtility.ToJson(configData);
File.WriteAllText(GameConfig.ConfigName, text);
最后找到Heluo.Resource.ExternalResourceProvider
改掉构造函数
public ExternalResourceProvider(ICoroutineRunner runner, IModManager mod) : base(runner)
{
this.modManager = mod;
this.ExternalDirectory = ((mod != null) ? mod.GetCurrentModInfo().FolderPath : null);
this.ExternalDirectory = ((GameConfig.Mod.ExternalDirectory != string.Empty) ? GameConfig.Mod.ExternalDirectory : this.ExternalDirectory);
string text = this.ExternalDirectory + "/Config.zip";
if (File.Exists(text))
{
this.zip = ZipFile.Read(text);
this.allEntry = this.zip.ToDictionary((ZipEntry x) => x.FileName.ToLower(), (ZipEntry x) => x);
}
}
*实际上直接将此路径硬编码为你的Mod相对/绝对路径也是可以的,但是我还是希望游戏能通过配置文件来修改不同Mod路径来支持多个Mod。按以上这样修改可以放很多mod互不冲突,在Config.json中改Mod路径就可以随时换Mod了,有心者还能在游戏里弄个菜单来换
我们可以看到这个类本身已经写好了对外部文本和图片的读取逻辑,但是其他类型都不支持直接返回Default<T>了,所以要支持其他种类需要自己写加载逻辑
看到贴吧很多老哥喜欢换战斗音乐,所以我就去网上搜了下怎么加载音乐,如下所示加上就好了,代码很糙但是It Just Works就好,毕竟我也不是专业搞Unity的
找到Load()函数添加如下红色部分
else if (typeFromHandle == typeof(Texture2D) || typeFromHandle == typeof(Sprite))
{
byte[] data = File.ReadAllBytes(path2);
Texture2D texture2D = new Texture2D(2, 2);
texture2D.LoadImage(data);
if (typeFromHandle == typeof(Sprite))
{
result = (Sprite.Create(texture2D, new Rect(0f, 0f, (float)texture2D.width, (float)texture2D.height), new Vector2((float)(texture2D.width / 2), (float)(texture2D.height / 2))) as T);
}
else
{
result = (texture2D as T);
}
}
else if (typeFromHandle == typeof(AudioClip))
{
string path3 = Path.GetFullPath(path2);
WWW www = new WWW(path3);
if (www.error != null)
{
Debug.LogError("www " + www.error);
return default(T);
}
while (!www.isDone)
{
}
AudioClip audioClip = www.GetAudioClip();
if (audioClip == null)
{
Debug.LogError("Failed!! file://" + path3);
return default(T);
}
audioClip.LoadAudioData();
return audioClip as T;
}
else
{
result = default(T);
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
评分
-
4
查看全部评分
-
|