【04.28更新】直接读取外部文件的方法,附杂项魔改插件(难度锁定,解锁视角,战斗经验,去除随机,半即时制,自定开局)
本帖最后由 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,添加成员变量
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);
}
支持一下!!{:3_121:} 受人以鱼不如授人以渔,又学到了,感谢大佬 大佬牛逼,感谢感谢 开始找不到贴吧里问的就是我吧 lys292 发表于 2020-5-14 16:38
开始找不到贴吧里问的就是我吧
不止你:)
c4sunyx 发表于 2020-5-14 16:54
不止你
那可能是私信你的,贴吧楼层里没看到问你的
大佬更新的时候标题可以括号备注下,不然不知道你更新了 支持虫大,也太牛逼效率了 强烈支持!!!!!!!!{:3_94:} 大佬知道主角的脚步声文件在哪么,那个audio里面的walk.wav好像不是啊。 没解锁非战斗视角吗 大佬问下,这个视角解锁加到Assembly-CSharp的哪里 大佬,你的这个dll非战斗视角不能转哦,switch那里多了default吧 lys292 发表于 2020-5-17 00:41
大佬,你的这个dll非战斗视角不能转哦,switch那里多了default吧
我就纯复制的吧主代码,并没看他怎么弄的
刚测了下最终场景可以转Yaw,但不能转Pitch
c4sunyx 发表于 2020-5-17 13:18
我就纯复制的吧主代码,并没看他怎么弄的
刚测了下最终场景可以转Yaw,但不能转Pitch
...
我对比了你的和吧主的代码,不仅switch那里后面多了default,开始的if那里也不一样,你的是if(flag),括号里面少了个感叹号!,应该是if(!flag)
lys292 发表于 2020-5-17 13:33
我对比了你的和吧主的代码,不仅switch那里后面多了default,开始的if那里也不一样,你的是if(flag),括 ...
那是编译器的锅别赖我 我的的确确复制粘贴的 效果应该完全一样的
顺便反馈一下,吧主的非战斗转视角是锁定y轴的,左右旋转的速度比较合适,但是人物走到某些可交互的物体边(比如水井)时会自动转动y轴一定角度,而且是视角几乎对齐地板的那种,体验有点差。不知道能不能优化下,或者不要锁定Y轴? c4sunyx 发表于 2020-5-17 13:43
那是编译器的锅别赖我 我的的确确复制粘贴的 效果应该完全一样的
我没赖你啊大佬,我只是反馈一下
lys292 发表于 2020-5-17 13:45
我没赖你啊大佬,我只是反馈一下
具体哪里有问题 最好给个档我要有空可以测一下
本帖最后由 lys292 于 2020-5-18 12:13 编辑
战斗中右键旋转和右键人物显示人物信息老是冲突,旋转中不小心就点出了人物信息。可不可以设置成双击左键显示人物信息,这样就不会冲突了 更新的真勤,感谢楼主分享 六道轮回0101 发表于 2020-5-19 17:25
更新的真勤,感谢楼主分享
有时间and有兴趣就勤,没时间or没兴趣就咕
大佬发现一个,不知道算不算bug。你默认那个好像默认4%的战斗招式经验加成。然后我用了凤点头由一阶升到二阶,照理来说,体魄加1但是结果是体魄+2 走近你 发表于 2020-5-19 17:48
大佬发现一个,不知道算不算bug。你默认那个好像默认4%的战斗招式经验加成。然后我用了凤点头由一阶升到二 ...
已修复,多谢测试!
大佬你好,问下,经验倍率改成0.00是否就等于关闭不使用?
战斗和动画加速设置1是不是等于原速?
战斗难度1是不是原始难度? 反馈一个bug,战斗胜利没有奖励 六道轮回0101 发表于 2020-5-19 20:31
反馈一个bug,战斗胜利没有奖励
多谢!已修复,修改时疏忽了填掉率默认值了,之前都是0:(
感谢大佬 问下大佬,不同的MOD,复数的Assembly-CSharp.dll该如何共存呢?
想使用魔改MOD和替换立绘/建模MOD,奈何Assembly-CSharp.dll这个不懂怎么共存。