【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);
}
第二年出了,等大佬更新 1111111111 好像新更新后不能用了,不能触发必然随机事件 走近你 发表于 2021-2-2 14:02
好像新更新后不能用了,不能触发必然随机事件
可以用的,文本要自己改,感谢大佬
牛逼嗷,这个视角是真的难受 楼主,二周目似乎不能用你的DLL,新建人物没有属性点可加了,特技点也变为了1 太感谢了 亲更新后有bug了,建议改下。 谢谢楼主分享,下来试试,sl到要吐了 感谢分享 本帖最后由 a745775195 于 2021-3-23 23:42 编辑
感谢大佬 终于用上了! 请问功能mod放在哪个文件夹
多谢大佬,新版本总算能用以前的mod改模型和立绘了 geleisisisi 发表于 2021-5-2 08:17
多谢大佬,新版本总算能用以前的mod改模型和立绘了
...从2月新版就一直能用,从没坏过
太强了!!!感谢!!! 大佬!!!!事件概率默认50的选项,100是必定触发,还是1必定触发阿? 大佬怎么替换主角立绘和头像啊,不会操作{:3_126:} jsw741258 发表于 2021-6-16 13:04
大佬怎么替换主角立绘和头像啊,不会操作
好像现在这版斗不能用改了一到换装的时候就又变回去了 老子玩玩
66666666666666666 老哥贴吧是不是也是你?还更新吗? 666666666666 要重新开档才能玩吗 大佬,进游戏f1后只有mod路径和音乐路径,其他都没有,咋搞 感谢分享
页:
[1]