Event

代码示例 操作变量

操作变量相关代码示例

代码示例:操作变量

变量系统是系统预设的数据数组,系统提供了全局变量(二周目变量)和玩家变量两种形式的变量。

而每种变量按照变量类型分为:数值变量、字符串变量、开关变量。

单机版变量操作

获取玩家变量:

Stript.ts
获取1号数值变量
Game.player.variable.getVariable(1);
获取1号字符串变量
Game.player.variable.getString(1);
获取1号开关变量
Game.player.variable.getSwitch(1);

设置玩家变量:

Stript.ts
// 设置1号数值变量:设置为100
Game.player.variable.setVariable(1,100);
// 设置1号字符串变量:设置为"kds"
Game.player.variable.setString(1,"kds");
// 设置1号数值变量:设置为1
Game.player.variable.setSwitch(1,1);

监听玩家变量改变(即任何地方改变变量时都能够监听到并在此处追加逻辑处理,比如数值变量控件则是监听数值变量改变并将文本实时更新到最新的变量值):

Stript.ts
// 监听1号数值变量的改变
Game.player.addListenerPlayerVariable(0, 1, Callback.New((typeID: number, varID: number, value: number) => {
    // type的值是0表示数值变量 varID=1表示1号变量 value表示改变后的值
}, this));

// 监听1号字符串变量的改变
Game.player.addListenerPlayerVariable(1, 1, Callback.New((typeID: number, varID: number, value: string) => {
    // type的值是1表示字符串变量 varID=1表示1号变量 value表示改变后的值
}, this));

// 监听1号开关变量的改变
Game.player.addListenerPlayerVariable(1, 1, Callback.New((typeID: number, varID: number, value: number) => {
    // type的值是2表示开关变量 varID=1表示1号变量 value表示改变后的值
}, this));

获取二周目变量:

Stript.ts
// 获取1号二周目数值变量
ClientWorld.variable.getVariable(1);
// 获取1号二周目字符串变量
ClientWorld.variable.getString(1);
// 获取1号二周目开关变量
ClientWorld.variable.getSwitch(1);

设置二周目变量:

Stript.ts
// 设置1号二周目数值变量:设置为100
ClientWorld.variable.setVariable(1,100);
// 设置1号二周目字符串变量:设置为"kds"
ClientWorld.variable.setString(1,"kds");
// 设置1号二周目数值变量:设置为100
ClientWorld.variable.setSwitch(1,1);

监听二周目变量改变:

Stript.ts
// 监听1号二周目数值变量的改变
ClientWorld.addListenerVariable(0, 1, Callback.New((typeID: number, varID: number, value: number) => {
// type的值是0表示二周目数值变量 varID=1表示1号变量 value表示改变后的值
}, this));

// 监听1号二周目数值变量的改变
ClientWorld.addListenerVariable(1, 1, Callback.New((typeID: number, varID: number, value: string) => {
// type的值是1表示二周目字符串变量 varID=1表示1号变量 value表示改变后的值
}, this));

// 监听1号二周目开关变量的改变
ClientWorld.addListenerVariable(1, 1, Callback.New((typeID: number, varID: number, value: number) => {
// type的值是2表示二周目开关变量 varID=1表示1号变量 value表示改变后的值
}, this));

网络版变量操作

网络版是玩家变量和全局变量(又名世界变量)。玩家变量是每个玩家的变量,而全局变量属于整个世界的变量,全部玩家共有。

全局变量由于在所有线程都可以读写,在底层使用锁的形式全线程访问,具有一定的开销, 而变量是储存在服务端的,客户端有限的读取或监听。

玩家变量可以监听:即请求服务器开始监听我这个玩家的N号变量,服务器当发生该玩家的N号变量改变时会通知客户端同步该变量。

而全局变量只能一次性获取当前的值,暂时不能监听。

客户端

监听玩家变量改变(即任何地方改变变量时都能够监听到并在此处追加逻辑处理,比如数值变量控件则是监听数值变量改变并将文本实时更新到最新的变量值):

Stript.ts
// 监听1号数值变量的改变
Game.player.addListenerPlayerVariable(0, 1, Callback.New((typeID: number, varID: number, value: number) => {
    // type的值是0表示数值变量 varID=1表示1号变量 value表示改变后的值
}, this));

// 监听1号字符串变量的改变
Game.player.addListenerPlayerVariable(1, 1, Callback.New((typeID: number, varID: number, value: string) => {
    // type的值是1表示字符串变量 varID=1表示1号变量 value表示改变后的值
}, this));

// 监听1号开关变量的改变
Game.player.addListenerPlayerVariable(1, 1, Callback.New((typeID: number, varID: number, value: number) => {
    // type的值是2表示开关变量 varID=1表示1号变量 value表示改变后的值
}, this));
// 客户端也可以通过Game.player.variable来访问本地缓存的变量(监听获取过一次后即) let a = Game.player.variable.getVariable(1);

获取一次全局变量:需要服务器开启了权限允许获取该编号的变量才行

Stript.ts
// 获取一次1号全局数值变量的值
ClientWorld.requestGetVariable(0, 1, Callback.New((typeID: number, varID: number, value: number) => {
    // type的值是0表示全局数值变量 varID=1表示1号变量 value表示改变后的值
}, this));
// 获取一次1号全局数值变量的改变
ClientWorld.requestGetVariable(1, 1, Callback.New((typeID: number, varID: number, value: string) => {
    // type的值是1表示全局字符串变量 varID=1表示1号变量 value表示改变后的值
}, this));
// 获取一次1号全局开关变量的改变
ClientWorld.requestGetVariable(1, 1, Callback.New((typeID: number, varID: number, value: number) => {
    // type的值是2表示全局开关变量 varID=1表示1号变量 value表示改变后的值
}, this));

服务端

服务器开启允许获取全局变量的权限:

Stript.ts
//服务器设置允许获取1号全局数值变量
ServerWorld.setWorldVariableAccessible(0,1,true);

服务器修改全局变量:

Stript.ts
//设置1号全局数值变量为100
ServerWorld.setWorldVariable(1,100);
//设置1号全局字符串变量为"kds"
ServerWorld.setWorldString(1,"kds");
//设置1号全局开关变量为开启(1=开启 0=关闭)
ServerWorld.setWorldSwitch(1,1);

服务器获取全局变量:

Stript.ts
//获取1号全局数值变量
ServerWorld.getWorldVariable(1);
//获取1号全局变量
ServerWorld.getWorldString(1);
//获取1号全局变量
ServerWorld.getWorldSwitch(1);

服务器监听全局变量:

Stript.ts
// 监听1号全局数值变量的改变
Game.player.addListenerPlayerVariable(0, 1, Callback.New((typeID: number, varID: number, value: number) => {
    // type的值是0表示数值变量 varID=1表示1号变量 value表示改变后的值
}, this));

// 监听1号全局字符串变量的改变
Game.player.addListenerPlayerVariable(1, 1, Callback.New((typeID: number, varID: number, value: string) => {
    // type的值是1表示字符串变量 varID=1表示1号变量 value表示改变后的值
}, this));

// 监听1号全局开关变量的改变
Game.player.addListenerPlayerVariable(1, 1, Callback.New((typeID: number, varID: number, value: number) => {
    // type的值是2表示开关变量 varID=1表示1号变量 value表示改变后的值
}, this));

事件中操作玩家变量:

Stript.ts
// 事件的触发者玩家 triggerPlayer (如果事件触发者不是玩家而是NPC的话是获取不到的,这里考虑触发者是玩家的情况)
// 获取玩家的数值变量 let a = triggerPlayer.variable.getVariable(1); 
// 设置玩家的数值变量 triggerPlayer.variable.setVariable(1,100);

Copyright © 2021 - 2025