PalWorld单机存档迁移至服务器存档

整理了迁移工具

整合包下载地址:palworld-host-save-fix-main

依赖以下项目

  1. palworld-host-save-fix大神写的帕鲁存档批量替换id的项目
  2. uesave虚幻引擎的存档读取器

迁移的流程是

  1. 在服务器新建存档,所有玩家都按顺序进来,服主需要记下每个人的新ID
  2. 在单机获取存档,并替换服务器的存档Level.savLevelMeta.sav
  3. 复制单机存档Players到服务器存档Players目录
  4. 调整脚本1执行脚本.bat修改存档地址、玩家新老ID
  5. 执行脚本

执行脚本内容

set DIR=%~dp0
set DIR_TOOL=%DIR%

::目标存档地址 一般是服务器新建的空存档
set DIR_SAVE=%DIR%\304E408F43FDFF861E8B5AB8FBC9843F

::需要迁移的存档   最后两个参数分别是 新ID  老ID
set NEW_ID=DCD1A0D2000000000000000000000000
set OLD_ID=00000000000000000000000000000001

::执行替换脚本
python %DIR_TOOL%\fix-host-save.py "%DIR_TOOL%\uesave.exe" "%DIR_SAVE%" %NEW_ID% %OLD_ID% 

Proxifier+3Proxy搭建内网代理服务器

Proxifier:HA-Proxifier329-破解版
3Proxy:3proxy-0.9.4-x64

启动流程

在服务器用3Proxy脚本启动服务

  1. 修改3proxy-0.9.4-x64\bin64\3proxy.cfg
# 超时的时间值
timeouts 1 5 30 60 180 1800 15 60

# 在windows上作为服务启动
service

# 内部IP地址,不可使用127.0.0.1,要具体地址,这里填写proixifer能连接的ip,如果是外网填公网ip,内网填客户端能ping到的ip
internal 23.23.23.236

#################################
#### socks4/4.5/5 proxy setting
#################################
#无认证
auth none
flush
# 允许所有你配置的用户连接
allow *

# 这里手动指定端口1080
socks -p1180
  1. 运行3proxy-0.9.4-x64\bin64\启动服务.bat

  2. 如果发现没有错误,说明配置没问题,可以尝试在客户端使用proxifier

  3. 另外可以注册为系统服务
    3proxy-0.9.4-x64\bin64\注册系统服务.bat
    3proxy-0.9.4-x64\bin64\取消注册系统服务.bat

    在客户端使用proxifier添加服务器

  4. 配置文件>代理服务器>添加代理服务器
    使用上述internal的ip地址、端口进行测试,通过就可以保存

  5. 配置文件>代理规则
    新增规则,描述目标主机比如我们内网10.*开头,动作使用刚才填的代理服务器

Spine转换版本

准备工具

skeletonviewer 下载
skeletonviewer 查看Github

导出脚本

  1. 查看skeleton.json的版本,比如spine3.6,那么下载对应的skeletonviewer
  2. 查看对应版本的源码JsonRollback.java文件,看参数要求

以3.6为例

导出后的文件支持spine3.3~2.7,需要注意文件的描述文件还是spine3.6

set viewer="skeletonViewer-3.6.53.jar"
set file="skeleton.json"
set out="skeleton.3.3.json"
java -cp %viewer% com.esotericsoftware.spine.JsonRollback %file% %out%

更高版本

可以控制导出文件的spine版本

set viewer="skeletonViewer.jar"
set version="3.3"
set file="skeleton.json"
set out="skeleton.3.3.json"
java -cp %viewer% com.esotericsoftware.spine.JsonRollback %file% %version% %out%

安装node最佳实践

1. 安装nvm

方法1(有梯子推荐):

winget install "NVM for Windows"

方法2:

nvm中文网下载安装文件

2. 安装指定版本node

查询支持版本
nvm list available
启用nvm
nvm on
安装指定版本
nvm install 12.1.0
切换版本
nvm use 16.16.0

3. 注意事项

如果之前已经安装好node了,那么需要把环境变量Path指向npm和nodejs的删掉,保留下面两项
NVM_HOME
NVM_SYMLINK

记一次sass-loader深坑

众所周知sass-loader需要依赖node-sass,但是往往版本对不上号,排查过程如下

1. 检查node版本

node -v
node-sass的页面有对应的版本

NodeJS Supported node-sass version Node Module
Node 17 7.0+ 102
Node 16 6.0+ 93
Node 15 5.0+, <7.0 88
Node 14 4.14+ 83
Node 13 4.13+, <5.0 79
Node 12 4.12+ 72
Node 11 4.10+, <5.0 67
Node 10 4.9+, <6.0 64
Node 8 4.5.3+, <5.0 57
Node <8 <5.0 <57

2. 安装对应版本的node-sass或者node

安装node-sass

npm i -D node-sass@对应版本

或者切换node版本

nvm use 12.1.0使用nvm切换对应node支持版本

3. 然后是sass-loader对应node-sass版本

sass-loader node-sass
sass-loader 4.1.1 node-sass 4.3.0
sass-loader 7.0.3 node-sass 4.7.2
sass-loader 7.3.1 node-sass 4.7.2
sass-loader 7.3.1 node-sass 4.14.1
sass-loader 10.0.1 node-sass 6.0.1

npm i -D sass-loader@对应版本

4. 接下来是最玄学的部分

如果你卡在中间位置,那怎么办。
假如node-sass版本4.12.1,那么sass-loader应该是7.3.1。
此时应该是能install成功的了,接下来就运行
如果运行报错,上下加减版本号,随机组合一下。

如何让Unity Mixer混合器音量控制符合体感

Unity Mixer是什么

游戏中的声音轨道有很多,使用Unity提供Mixer混响可以很方便按组控制音量,只需要暴露变量给代码,就可以调用Mixer.SetFloat("变量", 数值),数值单位是db。

Unity Mixer修改音量为什么不符合体感

真实世界中的声音通过震动产生,
人耳感受最小声压 :
2×10^{-5} (db)
人耳感受最大声压:
2×10^{-1} (db)
Mixer采用的单位是db,最高0db,最低-80db,以模拟真实世界。但是按照直觉我们拖动进度条控制音量[0,-80]反而觉得音量变化不是线性的。这需要看声压级公式:
LP(db) = 10Log_{10}^{(\frac{p}{p0})}
推导求声压比公式:
(\frac{p}{p0}) = 10^\frac{Lp}{10}
当声压级按[0,-80]线性变化时,体感音量(声压比 p/p0)的变化是对数变化,因此如果需要体感音量按线性变化,那么就对LP进行转换。

convertToLp(volume:number){
    let lp = 10 * Math.Log10(volume)
    lp = Math.max(-80, lp)
    return lp
}

convertToVolump(db:number){
    let volume = Math.pow(10, db/10)
    //体感最小音量
    if(volume <= Math.pow(10, -5))
        volume = 0
    return volume
}