Other

世界设定

世界是指游戏中唯一的世界,世界是所有玩家共同的世界(单机内核只有一个玩家)。

自定义世界属性

高级作者通过可视化编辑器编辑世界的属性,以及通过脚本实现世界属性的功能, 以便该游戏模板可以可视化调整相关的世界参数。
比如TBRPG-梦之剑模板中预设了战斗相关的参数

  • 更多请参考自定义世界设定

alt text

数据储存

自定义世界属性和全局变量/二周目变量都是封装好的系统自动储存,网络版本内核会定期储存至数据库中,而单机版在调用存档相关的功能时储存。

脚本调用:世界属性

单机版-世界数据读写

比如定义了一个变量名为abc的世界变量,是数值类型

Script.ts
// 获取世界属性
WorldData.abc;
// 修改世界属性
WorldData.abc = 123;

网络版-客户端世界数据读取

玩家登陆后会一次性获取到世界的全部公开属性,但之后世界属性更改如果没有手动同步给玩家的话客户端缓存值是旧的。

此外虽然客户端可以修改该值,但是其实是并没有实际意义,因为数据是储存在服务器的。

Script.ts
//获取世界属性的客户端缓存:比如定义了一个变量名为abc的世界变量,是数值类型
WorldData.abc

网络版-服务端世界数据读写

读取世界自定义数据

Script.ts
WorldData.abc

写入世界自定义数据:由于世界数据需要全场景线程同步,所以需要调用特殊的函数以便同步。

使用ServerWorld的dataWrite方法,注意事项:

  • 方法内代码在其他线程是独立运行,所以不能依赖外部的变量,需要使用外部的数据应通过args传递过来。
  • 方法内不应该含有随机的因素,必须是确定的,否则同步有误。
  • 参数必须可经过JSON打包复制的纯数据。

示例

Script.ts
let a = new DataStructure数据结构2();
a.AAA = MathUtils.rand(1000000000) + 1000000000;
a.BBB = 22222222
a.CCC = 33333333
let aaa = Math.random();
ServerWorld.dataWrite(function (a: DataStructure数据结构2,aaa) {
    ServerWorld.data.我的数据组.push(a);
    ServerWorld.data.随机数=aaa;
}, [a,aaa]);

Copyright © 2021 - 2025