允许将需要反复使用且数值恒定的 Buff 存储在字符串中。
[Too!0 Effects] 效果预设解析器 V1.0
Feature
允许将需要反复使用且数值恒定的 Buff 存储在字符串中。
Source code
规则("全局 - 资源解析")
{
事件
{
持续 - 全局;
}
动作
{
等待(5, 无视条件);
全局.TIMELOCK = 99999;
全局.SPLITTER = 自定义字符串("|");
全局.SPLITTER2D = 自定义字符串("^");
全局.ZEROTOTEN = 自定义字符串("0123456789");
启用查看器录制;
全局.BuffPresets = 数组(
自定义字符串("0!牢石耐击术|1.2|34|-5.67^鲑鱼上帝|2|9|300"),
自定义字符串("1!罗汉手|5|10|50^好男人也没的身手|3|2|-50^欧内的手|8.5|10|50")
);
全局.CurrentIndex[5] = 空数组;
// 层级 1:以!为界 提取一级元素
While(全局.CurrentIndex[假] < 数量(全局.BuffPresets)); // 首先根据每组字符串最前端的数值确定基础索引偏移量
// 一级索引: [0] 外层索引 [1] 内层索引 [2] 偏移量 [3] 当前外层内容 [4] 当前内层内容 [5] 存储块
// 对于 [5],每个元素应为 [<目标索引>, <内层数组>]
全局.CurrentIndex[真] = 空;
全局.CurrentIndex[3] = 全局.BuffPresets[全局.CurrentIndex[假]];
全局.CurrentIndex[2] = 字符串字符索引(全局.ZEROTOTEN, 字符串中字符(全局.CurrentIndex[3], 假)) * 100;
全局.CurrentIndex[3] = 字符串分割(截取字符串(全局.CurrentIndex[3], 2, 全局.TIMELOCK), 全局.SPLITTER2D);
// 二级索引: [0] 内层数组 [1] 字符索引 [2] 元素索引 [3] 效果数据缓存 [4] 单字符 [5] 单数字 [6] 多类效果索引 [7] 在小数点后 [8] 当前数位 [9] 待存数字 [10] 负号 [11] 字符串缓存
// 对于 [0],应为 ["名称", [[<持续时间1>, <类型1>, <强度1>], [<持续时间2>, <类型2>, <强度2>],...]]
// 层级 2:以^为界 提取二级元素
While(全局.CurrentIndex[真] < 数量(全局.CurrentIndex[3]));
全局.CurrentIndex[4] = 全局.CurrentIndex[3][全局.CurrentIndex[真]];
全局.CurrentIndex2D = 空;
全局.CurrentIndex2D[假] = 空数组;
全局.CurrentIndex2D[3] = 空数组;
While(全局.CurrentIndex2D[真] < 字符串长度(全局.CurrentIndex[4])); // (全局.CurrentIndex2D[真] == (字符串长度(全局.CurrentIndex[4]) - 真))
// 层级 3:读取二级元素 逐字操作
全局.CurrentIndex2D[4] = 字符串中字符(全局.CurrentIndex[4], 全局.CurrentIndex2D[真]);
全局.CurrentIndex2D[5] = 字符串字符索引(全局.ZEROTOTEN, 全局.CurrentIndex2D[4]);
// 根据符号搜索 如非数字检查符号 非符号提取整串字符直到分隔符
// 数字
If(全局.CurrentIndex2D[5] != -1);
全局.CurrentIndex2D[9] = (全局.CurrentIndex2D[9] * 10 + 全局.CurrentIndex2D[5]) / (真 + 9 * 全局.CurrentIndex2D[7]) * ((全局.CurrentIndex2D[10] && (全局.CurrentIndex2D[9] == 空)) ? -1 : 真);
// 小数
Else If(全局.CurrentIndex2D[4] == 自定义字符串("."));
全局.CurrentIndex2D[7] = 真;
// 负号
Else If(全局.CurrentIndex2D[4] == 自定义字符串("-"));
全局.CurrentIndex2D[10] = 真;
// 节段
Else If((全局.CurrentIndex2D[4] == 自定义字符串("|")) || (全局.CurrentIndex2D[真] == (字符串长度(全局.CurrentIndex[4]) - 真)));
跳过(全局.CurrentIndex2D[2] == 空);
在索引处修改全局变量(CurrentIndex2D, 3, 添加至数组, 全局.CurrentIndex2D[9]);
全局.CurrentIndex2D[2] += 真;
全局.CurrentIndex2D[7] = 空;
全局.CurrentIndex2D[8] = 空;
全局.CurrentIndex2D[9] = 空;
全局.CurrentIndex2D[10] = 空;
// 分割
Else If((全局.CurrentIndex2D[4] == 自定义字符串(",")));
全局.CurrentIndex2D[6] += 真;
在索引处修改全局变量(CurrentIndex2D, 3, 添加至数组, 全局.CurrentIndex2D[9]);
在索引处修改全局变量(CurrentIndex2D, 假, 添加至数组, 数组(全局.CurrentIndex2D[3]));
全局.CurrentIndex2D[3] = 空数组;
全局.CurrentIndex2D[2] += 真;
全局.CurrentIndex2D[7] = 空;
全局.CurrentIndex2D[8] = 空;
全局.CurrentIndex2D[9] = 空;
全局.CurrentIndex2D[10] = 空;
// 字符
Else;
全局.CurrentIndex2D[11] = 首个(字符串分割(全局.CurrentIndex[4], 全局.SPLITTER));
在索引处修改全局变量(CurrentIndex2D, 假, 添加至数组, 全局.CurrentIndex2D[11]);
全局.CurrentIndex2D[11] = 字符串长度(全局.CurrentIndex2D[11]);
全局.CurrentIndex2D[真] += 全局.CurrentIndex2D[11] - 真;
全局.CurrentIndex2D[3] = 空数组;
End;
If((全局.CurrentIndex2D[真] == (字符串长度(全局.CurrentIndex[4]) - 真)));
在索引处修改全局变量(CurrentIndex2D, 3, 添加至数组, 全局.CurrentIndex2D[9]);
在索引处修改全局变量(CurrentIndex2D, 假, 添加至数组, 数组(全局.CurrentIndex2D[3]));
End;
全局.CurrentIndex2D[真] += 真;
等待(假, 无视条件);
End;
在索引处修改全局变量(CurrentIndex, 5, 添加至数组, 数组(数组(全局.CurrentIndex[2] + 全局.CurrentIndex[真], 数组(首个(全局.CurrentIndex2D[假]), 数组分割(全局.CurrentIndex2D[假], 真, 数量(全局.CurrentIndex2D[假]) - 真)))));
全局.CurrentIndex[真] += 真;
等待(假, 无视条件);
End;
全局.CurrentIndex[假] += 真;
End;
全局.CurrentIndex2D = 空;
全局.BuffPresets = 空;
While(全局.CurrentIndex2D < 数量(全局.CurrentIndex[5]));
全局.BuffPresets[全局.CurrentIndex[5][全局.CurrentIndex2D][假]] = 全局.CurrentIndex[5][全局.CurrentIndex2D][真];
全局.CurrentIndex2D += 真;
等待(假, 无视条件);
End;
全局.CurrentIndex = 空;
禁用查看器录制;
}
}
评论
这里空空如也~