说在之前

  • 你是一个通过视频或者直播得知这个软件的,认为这是一个懒人带团神器。那么现在放弃还来得及。
  • FVTT本身属于“虚拟跑团软件”,它所有的功能需要你先基于“面团”思维进行思考,再思考是否有mod能够帮助你简化一定的操作。
  • FVTT系统本身作为一个VTT已经是足够成熟的,但是作为一个电子游戏辅助软件他仍然处于初级阶段,需要你自己往里填充不同的资源。由于每个人需求不同,所以使用到的情况也不一致,中文社区亦无法在更深入的内容里帮助你,绝大多数时间需要你自行研究使用。若有需要,可以访问FVTT官方Discord向社区进行求助(限英文)。
  • 最后这也是一个需要你不断学习的软件,并且需要涉及网络原理,服务器配置、js宏编写、Mod使用,甚至内容魔改等。
  • 虽然本文档会尽量保持更新,但是参考过的旧材料依然可能会过期,所以使用前请谨慎思考甄别。

基本知识篇

软件需要每个玩家都购买吗

  • 不需要,只要Dm购买,Pc使用Chrome浏览器访问即可。

为什么我无法注册

  • 注册过程中有一个Google验证码在国内环境下无法加载。你需要使用工具或者寻找其他群友帮助。

软件一定需要服务器吗

  • 绝大多数情况下推荐购买服务器。哪怕你具有公网IPV4地址,在国内的网络环境下,很难有较好的P2P体验(参照Steam、主机联机游戏)。如果你执意采用P2P方式,可以自行上网寻找 ZerotierHamachi 之类的内网联机工具进行部署。

我可以和我的DM/PC一起合购软件/服务器吗

  • 可以,但是同一时间只能有一组人使用这个软件。具体详见下方软件共享的EULA政策

我购买的FVTT可以多人共用吗(关于软件共享的EULA政策)

  • 【EULA原则】一个CDK只能运行一个FVTT软件(实例)
  • 【EULA中描述的合理使用原则】在同一时间、同一CDK运行的FVTT软件(实例)中只能有一组有DM正在带团
  • 【最终建议(开发商回复)】一般运行两个实例即一个用于带团、一个用于个人测试(含备团或其他用途)
  • 注意:CDK运行的软件(实例)均不会自动注销,如果你违反合理使用原则,将会收警告信;继续违反可能会封停key的权限

这个软件的折扣码如何获取?平常会打折吗?

  • 这个软件的折扣码仅提供给在正式版本发布前曾经Parteon订阅支持过的用户,按照订阅总值的2/3提供抵用优惠码,平常渠道基本上不可能获取。
  • 关与打折信息,本软件会在每年进行两次打折促销活动。第一次为FVTT周年庆,一般于5月24日举行。第二次为黑色星期五,一般于11月最后一个星期五举行。两次折扣额度均为【20%off】。

服务器篇

服务器应该选择什么系统

  • 绝大部分云服务器商均可以选择的WinServer系统,建议从 WinServer 2016 版本以上开始使用。(境外选择winServer可能需要1-2刀/月的授权费,但花费的成本远低于强行选择linux系统带来的烦恼
  • 如果没有linux的操作基础,请不要选择此类系统,包含ubuntu、麒麟、Red Het、CentOS等
  • (特殊情况-非建议操作)部分野鸡云服务器商若只有Win10系统,则需要选择Pro(专业)版以上。

我该如何购买部署用的服务器

服务器无法打开。提示无法找到入口,各种报错。

  • FVTTv11版本以后需求Node.js版本提高到16、WinNT内核提高到10,无法支持WinServer2012系统,需要升级到更高的**2016
  • FVTTv12版本以后需求Node.js版本提高到18,部分Linux服务器Glibc版本较低(尤其以centos为首),需要升级Glibc后方可运行。

安装好程序却无法从公网打开

  • Fvtt软件服务器上是否开启
  • 检查IP与端口是否正确
  • 检查系统防火墙(windows防火墙,linux的iptables)
  • 检查云服务器端口放行(在云服务器官网的防火墙、安全组等,尤其是软件端口30000)

服务器不好用玩家卡加载慢怎么办

  • 首先FVTT本身是一个强网络轻性能的应用,其次国内网络环境上行带宽价格昂贵,一般的套餐必然只有少量的上行带宽。若不善于使用软件自带的“预加载”功能,玩家加载慢基本上是必然问题。
  • 低成本套餐使用的体验必然受限,上方选择服务器问题中有具体描述。如果你的套餐无法满足你的需求,那么你可以支付更多费用升级你的服务器(简称:加钱),或者看一下另外一篇攻略【使用Fvtt本地映射工具包】 来提升一定的加载速度。

我在服务器上打开软件的时候提示“不支持硬件加速”是怎么回事

  • Fvtt软件的设计是你在服务器内安装好以后,接下来的操作都只在你自己电脑上进行,服务器上不支持硬件加速对于FVTT使用没有任何关系
  • 一般来说只需要服务器保持FVTT程序软件窗口打开即可。

为什么我上传服务器的时候速度这么慢

  • 是否文件过大,一般来说服务器的上行带宽(约为10-30m),这个上行带宽同你家庭网络的上行带宽(一般为20m)取最小值,为实际上传速度。
  • 是否文件数量过多,不建议直接上传文件夹的方式,若需要上传文件夹的内容,建议创建压缩包后再上传,然后在服务器上解压。

软件篇

FVTT能否支持移动设备

  • 目前FVTT不能支持移动设备,官方也没有计划为移动设备提供支持,尤其本身的设计理念是基于电脑操作,导致几乎所有的第三方mod都有大量问题存在。
  • 同时由于移动设备基础问题(GPU驱动问题),渲染大小,窗口大小以及操作逻辑也均无法实现正常兼容。
  • 如果一定要使用移动设备,只能建议采用云电脑的方式使用。(常见大厂的云游戏,比如网易云游戏的云电脑模式
  • 目前基于移动设备唯一解为 Surface Pro(或者其他基于Win的二合一超极本平板模式)+Touch Vtt(第三方触屏兼容模组,可以将部分touch函数映射为click函数)

管理员密码是什么,为啥一直提示错误

  • 管理员密码在【主界面】-【设置】-【管理员密码】中设置
  • 未设置过管理员密码或者输错管理员密码,则无法再世界登录页使用【返回设置(Return to Setup)】功能,出错提示统一为“管理员密码错误”
  • 忘记【管理员密码】需要删除【Config】文件夹中的【admin.txt】文件,若未设置过则不会有此文件。

组件列表无法加载,组件无法在线安装,组件安装后无法识别

  • 因为组件列表原始数据存放于Github上,境内用户无论是加载列表,还是安装mod。实际速度都十分缓慢,需要长时间等待,甚至于直接报错。
  • 境内用户建议使用【手动安装】方式进行安装mod。

我要如何汉化界面

  • 你需要在系统中安装汉化MOD: Translation: 中文 [Core] 以及对应的系统汉化例如: Translation: 中文 [Dnd5e]Translation: 中文 [PF] 或者其他游戏系统汉化。进入FVTT设置中启动Core汉化,并在游戏世界中启动对应的世界汉化。
  • (关于其他mod汉化):可以选择安装Translation: 中文 [Mod] 来汉化一部分支持mod,需要在游戏世界中启用方可生效。

我需要的一个Mod无法再列表里找到

  • 由于官方Mod列表仅上架无风险类Mod,所以有版权风险、包含未授权素材、以及部分官方认为不合适上架Mod列表的Mod将不会列出。如果你确认有此Mod,请去Github、Gitlab等网站自行搜索下载。

我指定用户数据路径没办法保存怎么办

  • fvtt系统自身设置,不支持将用户数据路径保存到软件安装路径。你必须设置一个不同的文件夹才行。

Mod无法启动,在世界包找不到对应的Mod或者启动后无效

  • MOD是否被正确安装,路径和文件是否正确
  • MOD对应的环境(包含主程序版本、游戏系统版本)是否符合条件
  • Mod的依赖是否被正确安装
  • 是否需要在系统设置中进行Mod设置
  • 是否和其他MOD有冲突

Mod的依赖项如何查看

  • V10以前的版本在系统设置界面的Mod分页,将Mod列表配置为显示详情,即可看到依赖项。
  • V11以后的版本在世界包激活Mod的分页,点击右上角的一个向上箭头展开Mod详情,即可看到依赖项。

FVTT如何备份,用户数据路径在哪里?

  • 打开你需要迁移的FVTT主程序,右上角找到螺丝图标并点击,查看【用户数据路径】的对应位置。
  • 找到你的用户数据目录,将其中的【Data】目录打包并下载到本地。
  • 在新服务器上安装完FVTT后,将文件覆盖到新服务器的【用户数据路径】中的【Data】目录中即可。
  • (V11版本)由于V11.311后更新了内置组件备份功能可以临时给世界包、模组包、系统创建快照和操作回滚。但是由于比较初级,建议仅用来备份临时数据,不建议迁移使用。(内置备份文件夹为 用户数据目录\Backups )

如何汉化合集数据

  • 由于5E合集数据存在版权问题,故合集数据汉化包无法加入MOD列表,请到github上搜索【HJSmile/classpack】并下载。
  • 同时又由于5ecn汉化采用独立合集包的方式,所以5e本身所携带的SRD数据将不会被汉化,会影响到5e角色卡上的部分数据保持英文状态,如:武器熟练、工具熟练等熟练项。英文熟练项也不影响item里熟练标记。

组件包Mod挂了、世界一开就报错根本关不掉

  • 重启FVTT主程序
  • 找到世界设置-以安全模式启动
  • 然后启动世界,你的所有mod会被自动禁用,但是仅限本次启动,所以需要尽快关闭可能出错的Mod

世界包无法打开,提示需要依赖组件

  • 由于V11系统升级后,世界包依赖从推荐改为强制所以出现此问题
  • 去下载对应的依赖组件并安装。
  • 或者修改世界包的dependencies字段,将依赖mod字段直接删除

世界包登录账号提示密码错误怎么办

  • 打开游戏世界,登录GM权限,找到【设置】-【配置玩家】,修改对应玩家的访问密码就行
  • 忘记GM密码怎么办,重启FVTT软件,右键对应的世界包,找到【编辑】-【重置用户密码】
  • 如果GM账号被删了怎么办,关闭FVTT软件,找到用户数据目录中对应的世界包位置,删除【user.db】文件(V11版本以后是user文件夹),再启动FVTT正常开启世界等待重建。

世界包内有错误的设置,无法关闭怎么处理

  • 关闭FVTT软件,找到用户数据目录中对应的世界包位置,删除【user.db】和【setting.db】文件(V11版本以后是user文件夹、setting文件夹),再启动FVTT正常开启世界等待重建。

世界篇

旧系统世界包升级到新系统世界包出现问题怎么办

  • 目前由于LevelDB转换器因素,如果直升世界包出现兼容性错误,需要按照以下步骤进行代理转换。
  • 【V10版本操作】在本地电脑上安装FVTT的最后一个NeDB版本(即10.303版本),并且找到基于此版本对应系统包(Dnd5e版本为2.2.2)。
  • 【V10版本操作】将低版本世界包放入对应目录的world中。开启FVTT主程序,点击对应的世界包开始迁移。
  • 【V10版本操作】迁移完毕后将FVTT主程序关闭,然后打包迁移后的世界包。
  • 【V11版本操作】拷贝到服务器对应的路径,在服务器上再次迁移到V11版本,即可正常使用。

地图对不准怎么办

  • 系统网格生成方式为,按照网格像素px生成网格(可以在场景中配置)然后加上左上角起点格偏移量(对其工具可以使用系统自带工具或者gird类mod协助)。
  • 由于制作地图的方式不一,绝大部分完善第三方电子地图是能够对齐网格的(也同时提供无网格地图下载),第一方电子地图(非扫描地图)也可以对齐
  • 但是扫描地图和手绘地图精度不足,无法完美对齐,如果遇上这种情况,则建议只填写网格像素后关闭系统网格,转而要求PC拖token的时候对准点。

其他

我该去哪里寻找世界包

  • 目前的世界包绝大部分来源于【R20】网站,需要购买后使用专用转换器进行转换。
  • 少量世界包为玩家自备共享,则需要你自行寻找。

Mod不会用怎么办

  • 找到这个MOD对应的Github、Gitlab页面,查看其中的Readme.md,里面有关于该MOD的使用方法。

为什么没有这个System、Mod、世界包等

  • 由于Fvtt只是个框架软件,所有内容都需要社区用户自行填充。所以根据 “谁提出,谁解决” 原则。建议现在开始动手,做好以后回馈给社区。

魔改

WARNING:魔改系统属于深度开发,任何的修改都有可能对系统稳定性和安全产生影响。只建议在了解其工作原理并具备适当开发知识的情况下进行操作。

如何修改登入页面样式

  • 寻找Core文件夹的join.hbs文件(V10版本后为join-game.html),调整对应字段、div框架或者css样式表。

如何修改iframe网址安全列表

  • 寻找Core文件夹中的sandboxed-systems.js文件,并修改其中的对应字段,添加上你需要的网址或者ip地址。

WARNING:宏编写需要你有足够的Javascript知识,否则请不要尝试下面的内容,否则会给系统世界带来损坏风险。

用于获取当前角色数据(优先级 选择角色 > player配置角色 )

let actorData = actor || canvas.tokens.controlled[0] || game.user.character;

用于获取当前target角色数据

let targetActorData = game.user.targets.values().next().value.actor;

用item名称找到角色卡上的对应数据(特性、物品)

let itemData = actorData ? actorData.items.find(i => i.name=="itemName") : null;
//或者
let itemData = actorData ? actorData.items.getName("itemName") : null;

更新角色卡的某个参数

await actorData.update({ "system.attributes.hp.value" : 0 });

更新一个item的某个参数

await itemData.update({ "system.uses.value" : 0 });

聊天中创建一个投掷卡片(发言人为最近一次代表)

await new Roll("1d8+1").toMessage({speaker: ChatMessage.getSpeaker(),flavor: `描述` });

聊天中创建一行聊天记录(发言人为最近一次代表)

await ChatMessage.create({speaker: ChatMessage.getSpeaker(),content: '描述' });

检查并刷新某个人物角色卡

if (actorData.sheet.rendered) {
    await actorData.render(true);
}