原作者是亚服的:jprosk#6749,亚服原版旧代码:GETVX。我们只是做了性能优化,请支持原作者。
优化内容:1、无限循环计算光标位置,导致占用资源过大,我们修改为“直到等待”后只会在光标回到原本位置时才更新一次。
2、由于大部分工坊作者需要显示实时变化的变量,特意制作了两条可以放实时变化变量的模板。
优化作者:kotone#51614(国服)、Mechabrave#1917(亚服)
这是一个光标工具扩展的模板。
我们的无偿制作优化和添加注释,只求帮助到更多工坊新手,让他们少走弯路。

预览

预览
————————————————————————————
建议使用vscode(使用Xcrystal的Overwatch Workshop扩展)打开

预览
设置
{
主程序
{
模式名称: "光标kotone优化版"
描述: "由kotone#51614优化修复的光标,内含光标系统模板\r\n原作者:Josbird's Cursor Menu | Code: GETVX | Created by jprosk#6749 on Discord | See documentation at workshop.codes/cursor-menu for details | Current version: 1.1.0"
}
大厅
{
比赛语音聊天: 启用
观战者人数上限: 4
返回大厅: 从不
队列中的玩家可以加入: 是
}
模式
{
突击模式
{
启用地图
{
哈瓦那 972777519512068153 972777519512068154
}
}
综合
{
复生时间: 0%
英雄限制: 关闭
}
}
}
变量
{
全局:
35: cms
//光标数据
36: cm_Buttons
37: cm_Ctrl
38: Motion//负载
39: point//回城
40: hg
//光标bug
41: hex
//光标bug
玩家:
60: Perspective//视角
61: Collision//碰撞
70: cm_Open
//光标开启
71: cm_originalFacing
//修改朝向
72: cm_ButtonsPlayer
73: cm_CurrentHover
74: cm_CurrentPage
//光标页面
75: cm_CurrentClick
}
子程序
{
0: cm_Lock
//光标上锁
1: cm_Unlock
//解锁光标
3: click
}
规则("游戏描述——使用此光标工具请在代码内,标注原作者:jprosk#6749/Alomare#11266和优化作者:kotone#51614、Mechabrave#1917,我们的无偿制作优化和添加注释,只求帮助到更多工坊新手,让他们少走弯路")
{
事件
{
持续 - 全局;
}
动作
{
设置目标点描述(本地玩家, 自定义字符串("kotone优化版光标\r\n修复无限循环导致的脚本过多崩溃的问题\r\n按下【{0}】打开光标菜单",输入绑定字符串(按钮(互动))), 可见和字符串);
等待(10, 无视条件);
设置目标点描述(本地玩家, 自定义字符串("代码:暂无\r\n按下【{0}】打开光标菜单",输入绑定字符串(按钮(互动))), 可见和字符串);
等待(10, 无视条件);
设置目标点描述(本地玩家, 自定义字符串("kotone#51614\r\n按下【{0}】打开光标菜单",输入绑定字符串(按钮(互动))), 可见和字符串);
等待(10, 无视条件);
循环;
}
}
规则("[光标]Alo's Cursor Menu / By Alomare#11266 [光标数据 初始化-Alo的光标菜单感谢原作者]")
{
事件
{
持续 - 全局;
}
动作
{
"Cursor Scale [1 to 4]"
全局.cms[0] = 4;
"Cursor Sensitivity"
全局.cms[1] = 20;
"Cursor Color [color or custom color]"
全局.cms[2] = 颜色(白色);
"Tooltip Scale [1 to 4]"
全局.cms[3] = 1.4;
}
}
规则("[CM] Toggle Cursor Menu [互动键 切换光标菜单]")
{
事件
{
持续 - 每名玩家;
双方;
全部;
}
条件
{
按钮被按下(事件玩家, 按钮(互动)) == 真;
死亡(事件玩家)!=真;
}
动作
{
If(事件玩家.cm_Open);
事件玩家.cm_CurrentPage=1;
调用子程序(cm_Unlock);
Else;
调用子程序(cm_Lock);
End;
事件玩家.cm_Open = !事件玩家.cm_Open;
}
}
规则("[CM] Close Menu on Death [死亡关闭菜单]")
{
事件
{
玩家阵亡;
双方;
全部;
}
条件
{
事件玩家.cm_Open == 真;
}
动作
{
调用子程序(cm_Unlock);
事件玩家.cm_Open = 假;
}
}
规则("[CM] cm_Lock [锁定]")
{
事件
{
子程序;
cm_Lock;
}
动作
{
事件玩家.cm_originalFacing = 矢量(X方向分量(面朝方向(事件玩家)),(Y方向分量(面朝方向(事件玩家))>0.9||Y方向分量(面朝方向(事件玩家))<-0.9 ? 0 :Y方向分量(面朝方向(事件玩家))), Z方向分量(面朝方向(事件玩家)));
设置朝向(事件玩家, 事件玩家.cm_originalFacing, 至地图);
隐藏英雄HUD(事件玩家);
隐藏游戏模式HUD(事件玩家);
设置瞄准速度(事件玩家, 1);
禁用按钮(事件玩家, 按钮(主要攻击模式));
禁用按钮(事件玩家, 按钮(跳跃));
禁用按钮(事件玩家, 按钮(辅助攻击模式));
}
}
规则("[CM] cm_Unlock [解锁]")
{
事件
{
子程序;
cm_Unlock;
}
动作
{
显示英雄HUD(事件玩家);
显示游戏模式HUD(事件玩家);
设置瞄准速度(事件玩家, 100);
可用按钮(事件玩家, 按钮(主要攻击模式));
可用按钮(事件玩家, 按钮(跳跃));
可用按钮(事件玩家, 按钮(辅助攻击模式));
}
}
规则("[CM] Out Of Screen Bounds [屏幕外边界]")
{
事件
{
持续 - 每名玩家;
双方;
全部;
}
条件
{
事件玩家.cm_Open == 真;
(绝对值(角度差(与此方向的水平角度(面朝方向(事件玩家)), 与此方向的水平角度(事件玩家.cm_originalFacing)) * 全局.cms[1]) > 125 || 绝对值(角度差(与此方向的垂直角度(面朝方向(事件玩家)), 与此方向的垂直角度(
事件玩家.cm_originalFacing)) * 全局.cms[1]) > 70) == 真;
}
动作
{
等待(0.100, 无视条件);
If(角度差(与此方向的水平角度(面朝方向(事件玩家)), 与此方向的水平角度(事件玩家.cm_originalFacing)) * 全局.cms[1] > 125);
设置朝向(事件玩家, 与此角度的相对方向(-125 / 全局.cms[1] + 与此方向的水平角度(事件玩家.cm_originalFacing), 与此方向的垂直角度(面朝方向(事件玩家))), 至地图);
Else If(角度差(与此方向的水平角度(面朝方向(事件玩家)), 与此方向的水平角度(事件玩家.cm_originalFacing)) * 全局.cms[1] < -125);
设置朝向(事件玩家, 与此角度的相对方向(125 / 全局.cms[1] + 与此方向的水平角度(事件玩家.cm_originalFacing), 与此方向的垂直角度(面朝方向(事件玩家))), 至地图);
Else If(角度差(与此方向的垂直角度(面朝方向(事件玩家)), 与此方向的垂直角度(事件玩家.cm_originalFacing)) * 全局.cms[1] > 70);
设置朝向(事件玩家, 与此角度的相对方向(与此方向的水平角度(面朝方向(事件玩家)), -70 / 全局.cms[1] + 与此方向的垂直角度(事件玩家.cm_originalFacing)), 至地图);
Else If(角度差(与此方向的垂直角度(面朝方向(事件玩家)), 与此方向的垂直角度(事件玩家.cm_originalFacing)) * 全局.cms[1] < -70);
设置朝向(事件玩家, 与此角度的相对方向(与此方向的水平角度(面朝方向(事件玩家)), 70 / 全局.cms[1] + 与此方向的垂直角度(事件玩家.cm_originalFacing)), 至地图);
End;
// 设置状态(事件玩家, 事件玩家,击晕, 0.25);
如条件为“真”则循环;
}
}
//国服图标失效只能用文字或符号光标
/* 规则("[左键光标图标]")
{
事件
{
持续 - 全局;
}
动作
{
全局.hex = 自定义字符串(
"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3{0}{1}{2}",
自定义字符串(
"B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7"),
自定义字符串(
"B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BAB"),
自定义字符串(
"BBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9{0}",
自定义字符串("FAFBFCFDFEFF")));
"Extract unescaped '<' (thanks to Zezombye)"
生成机器人(全部英雄, 主机玩家, 假, 空, 空);
开始为机器人强制设置名称(最后创建的实体, 自定义字符串(
"______________________________________________________________________________________________________________________________〼"));
全局.hg = 字符串分割(首个(最后创建的实体), 空数组);
开始为机器人强制设置名称(最后创建的实体, 自定义字符串(
"______________________________________________________________________________________________________________________________ࡀ"));
全局.hg = 截取字符串(字符串替换(自定义字符串(
"______________________________________________________________________________________________________________________________〼"),
全局.hg, 首个(最后创建的实体)), 126, 真);
移除所有机器人;
等待(0.160, 无视条件);
}
} */
规则("[CM] Base Elements [基本元素 光标和提示框]")
{
事件
{
持续 - 全局;
}
动作
{
//自定义字符串("{0}TX C0000000002DD21>", 全局.hg)
//自定义字符串(" \n\n\n ↖")
//自定义字符串(" \n\n\n ↖")
//这里原本是亚服特有的图片,但是国服不能读取图片,所以光标改为箭头↖
"The Cursor"
创建地图文本(本地玩家.cm_Open && 总计消耗时间 % 0.032 > 0.016 ? 本地玩家 : 空,自定义字符串("\n\n\n ↖"/* , 全局.hg */),
逐帧更新(眼睛位置(本地玩家) + 面朝方向(本地玩家) * 100 + 归一化(矢量积(面朝方向(本地玩家), 上)) * 角度差(与此方向的水平角度(面朝方向(本地玩家)), 与此方向的水平角度(本地玩家.cm_originalFacing)) *
全局.cms[1] + 归一化(矢量积(矢量积(面朝方向(本地玩家), 上), 面朝方向(本地玩家))) *
角度差(与此方向的垂直角度(面朝方向(本地玩家)), 与此方向的垂直角度(本地玩家.cm_originalFacing)) * 全局.cms[1]),
全局.cms[0], 不要截取, 可见,位置和字符串, 全局.cms[2],
默认可见度);
创建地图文本(本地玩家.cm_Open && 总计消耗时间 % 0.032 <= 0.016 ? 本地玩家 : 空,自定义字符串("\n\n\n ↖"/* , 全局.hg */), 逐帧更新(眼睛位置(本地玩家) + 面朝方向(本地玩家) * 100 + 归一化(矢量积(面朝方向(
本地玩家), 上)) * 角度差(与此方向的水平角度(面朝方向(本地玩家)), 与此方向的水平角度(本地玩家.cm_originalFacing)) * 全局.cms[1] + 归一化(矢量积(矢量积(面朝方向(本地玩家), 上), 面朝方向(
本地玩家))) * 角度差(与此方向的垂直角度(面朝方向(本地玩家)), 与此方向的垂直角度(本地玩家.cm_originalFacing)) * 全局.cms[1]), 全局.cms[0], 不要截取, 可见,位置和字符串, 全局.cms[2],
默认可见度);
"Tooltip"
创建地图文本(本地玩家.cm_Open && 总计消耗时间 % 0.032 > 0.016 && 首个(已过滤的数组(本地玩家.cm_ButtonsPlayer, 本地玩家.cm_CurrentHover == 当前数组元素[1]))
[10] ? 本地玩家 : 空, 首个(已过滤的数组(本地玩家.cm_ButtonsPlayer, 本地玩家.cm_CurrentHover == 当前数组元素[1]))[10], 逐帧更新(眼睛位置(本地玩家) + 面朝方向(本地玩家)
* 100 + 归一化(矢量积(面朝方向(本地玩家), 上)) * 角度差(与此方向的水平角度(面朝方向(本地玩家)), 与此方向的水平角度(本地玩家.cm_originalFacing)) * 全局.cms[1] + 归一化(矢量积(矢量积(面朝方向(
本地玩家), 上), 面朝方向(本地玩家))) * 角度差(与此方向的垂直角度(面朝方向(本地玩家)), 与此方向的垂直角度(本地玩家.cm_originalFacing)) * 全局.cms[1] + 矢量(0, -6, 0)), 全局.cms[3],
不要截取, 可见,位置,字符串和颜色, 首个(已过滤的数组(本地玩家.cm_ButtonsPlayer, 本地玩家.cm_CurrentHover == 当前数组元素[1]))[11], 默认可见度);
创建地图文本(本地玩家.cm_Open && 总计消耗时间 % 0.032 <= 0.016 && 首个(已过滤的数组(本地玩家.cm_ButtonsPlayer, 本地玩家.cm_CurrentHover == 当前数组元素[1]))
[10] ? 本地玩家 : 空, 首个(已过滤的数组(本地玩家.cm_ButtonsPlayer, 本地玩家.cm_CurrentHover == 当前数组元素[1]))[10], 逐帧更新(眼睛位置(本地玩家) + 面朝方向(本地玩家)
* 100 + 归一化(矢量积(面朝方向(本地玩家), 上)) * 角度差(与此方向的水平角度(面朝方向(本地玩家)), 与此方向的水平角度(本地玩家.cm_originalFacing)) * 全局.cms[1] + 归一化(矢量积(矢量积(面朝方向(
本地玩家), 上), 面朝方向(本地玩家))) * 角度差(与此方向的垂直角度(面朝方向(本地玩家)), 与此方向的垂直角度(本地玩家.cm_originalFacing)) * 全局.cms[1] + 矢量(0, -6, 0)), 全局.cms[3],
不要截取, 可见,位置,字符串和颜色, 首个(已过滤的数组(本地玩家.cm_ButtonsPlayer, 本地玩家.cm_CurrentHover == 当前数组元素[1]))[11], 默认可见度);
}
}
规则("[CM] Copy Global Button Data to Player on Join [在加入时将全局按钮数据复制到玩家]")
{
事件
{
玩家加入比赛;
双方;
全部;
}
动作
{
事件玩家.cm_ButtonsPlayer = 全局.cm_Buttons;
}
}
规则("[CM] Reevaluate Hovered Button [重新评估悬停按钮]")
{
事件
{
持续 - 每名玩家;
双方;
全部;
}
条件
{
事件玩家.cm_Open == 真;
}
动作
{
//我们优化了这里,原作者是无限循环导致占用资源过大,修改为直到等待后只会在光标回到原本位置时才更新一次
"Buttons with smaller default scale are prioritized"
事件玩家.cm_CurrentHover = 首个(已排序的数组(已过滤的数组(事件玩家.cm_ButtonsPlayer, 当前数组元素[3] && 当前数组元素[12] && (
!当前数组元素[0] || 事件玩家.cm_CurrentPage == 当前数组元素[0]) && 角度差(与此方向的水平角度(面朝方向(事件玩家)), 与此方向的水平角度(事件玩家.cm_originalFacing))
* 全局.cms[1] > 当前数组元素[4] * 1.250 - 字符串长度(当前数组元素[2]) / 1.800 * 当前数组元素[6] && 角度差(与此方向的水平角度(面朝方向(事件玩家)), 与此方向的水平角度(
事件玩家.cm_originalFacing)) * 全局.cms[1] < 当前数组元素[4] * 1.250 + 字符串长度(当前数组元素[2]) / 1.800 * 当前数组元素[6] && 角度差(与此方向的垂直角度(面朝方向(事件玩家)),
与此方向的垂直角度(事件玩家.cm_originalFacing)) * 全局.cms[1] > 当前数组元素[5] * 0.700 - 1 * (当前数组元素[6] / 3.200) && 角度差(与此方向的垂直角度(面朝方向(事件玩家)),
与此方向的垂直角度(事件玩家.cm_originalFacing)) * 全局.cms[1] < 当前数组元素[5] * 0.700 + 6 * (当前数组元素[6] / 2.700)), 当前数组元素[6]))[1];
等待(0.1, 无视条件);
等待直到(首个(已排序的数组(已过滤的数组(事件玩家.cm_ButtonsPlayer, 当前数组元素[3] && 当前数组元素[12] && (
!当前数组元素[0] || 事件玩家.cm_CurrentPage == 当前数组元素[0]) && 角度差(与此方向的水平角度(面朝方向(事件玩家)), 与此方向的水平角度(事件玩家.cm_originalFacing))
* 全局.cms[1] > 当前数组元素[4] * 1.250 - 字符串长度(当前数组元素[2]) / 1.800 * 当前数组元素[6] && 角度差(与此方向的水平角度(面朝方向(事件玩家)), 与此方向的水平角度(
事件玩家.cm_originalFacing)) * 全局.cms[1] < 当前数组元素[4] * 1.250 + 字符串长度(当前数组元素[2]) / 1.800 * 当前数组元素[6] && 角度差(与此方向的垂直角度(面朝方向(事件玩家)),
与此方向的垂直角度(事件玩家.cm_originalFacing)) * 全局.cms[1] > 当前数组元素[5] * 0.700 - 1 * (当前数组元素[6] / 3.200) && 角度差(与此方向的垂直角度(面朝方向(事件玩家)),
与此方向的垂直角度(事件玩家.cm_originalFacing)) * 全局.cms[1] < 当前数组元素[5] * 0.700 + 6 * (当前数组元素[6] / 2.700)), 当前数组元素[6]))[1]
!=
事件玩家.cm_CurrentHover
// &&事件玩家.cm_CurrentHover!=0
, 99999);
// 播放效果(事件玩家,爆炸声音, 自定义颜色(随机整数(0, 255),随机整数(0, 255),随机整数(0, 255), 255), 事件玩家, 10);
如条件为“真”则循环;
}
}
规则("[CM] Button Click - Primary Fire / Jump [按钮点击-主要攻击模式/跳跃]")
{
事件
{
持续 - 每名玩家;
双方;
全部;
}
条件
{
事件玩家.cm_Open == 真;
(按钮被按下(事件玩家, 按钮(主要攻击模式)) || 按钮被按下(事件玩家, 按钮(跳跃))) == 真;
}
动作
{
根据条件中止(事件玩家.cm_CurrentClick);
事件玩家.cm_CurrentClick = 事件玩家.cm_CurrentHover;
调用子程序(click);
等待直到 (!按钮被按下(事件玩家, 按钮(主要攻击模式)) && !按钮被按下(事件玩家, 按钮(跳跃)), 99999);
事件玩家.cm_CurrentClick = 空;
}
}
规则("服务器过载")
{
事件
{
持续 - 全局;
}
动作
{
创建HUD文本( 本地玩家, 空, 全局.Motion >= 20 ? 自定义字符串("KOTONE提示:\r\n由于服务器负载过高\r\n游戏已被减速{0}%", 全局.Motion) : 自定义字符串("") ,
全局.Motion <= 20 ? 自定义字符串("服务器负载:{0}",服务器负载):自定义字符串("") , 顶部, 99, 颜色(白色), 颜色(玫红), 颜色(玫红),
可见和字符串, 默认可见度);
}
}
规则("降低服务器负载")
{
事件
{
持续 - 全局;
}
条件
{
服务器负载平均值 >= 254;
全局.Motion < 90;
}
动作
{
等待(3, 当为“假”时中止);
While(服务器负载平均值 >= 254 && 全局.Motion < 90);
全局.Motion += 1;
设置慢动作(100 - 全局.Motion);
等待(0.500, 无视条件);
End;
如条件为“真”则循环;
}
}
规则("负载恢复")
{
事件
{
持续 - 全局;
}
条件
{
服务器负载平均值 < 250;
全局.Motion > 0;
}
动作
{
全局.Motion -= 1;
设置慢动作(100 - 全局.Motion);
等待(0.020, 无视条件);
// 禁用 If(全局.A);
// 禁用 等待(服务器负载平均值 / 250, 无视条件);
// 禁用 End;
如条件为“真”则循环;
}
}
规则("AAA[CM] Add Buttons ★ [添加按钮]")
{
事件
{
持续 - 全局;
}
动作
{
"//按钮数据引用
//0 页面 (0为全部)
//1 id (为整数)
//2 【按钮文本】
//3 类型(0仅标签,1=可点击标签)
//4 x坐标 (-100~100)
//5 y坐标 (-100~100)
//6 比例 (1~4)
//7 悬停比例 (1~4)
//8 颜色
//9 悬停颜色
//10 【光标工具提示内容】
//11 光标工具提示颜色
//12 可见 (真假)"
End;
//原作者注释↓
"BUTTON DATA REFERENCES\n\n0 - Page (0 = All)\n1 - ID [positive integer]\n2 - Label\n3 - Type (0 = Label Only, 1 = Clickable)\n4 - X Coordinate [-100 to 100]\n5 - Y Coordinate [-100 to 100]\n6 - Default Scale [1 to 4]
7 - Hover Scale [1 to 4]\n8 - Default Color [color or custom color]\n9 - Hover Color [color or custom color]\n10 - Cursor Tooltip\n11 - Cursor Tooltip Color [color or custom color]\n12 - Visible [true/false]"
End;
全局.cm_Buttons=数组(
数组(空,1 ,自定义字符串("常驻小菜单") ,0 ,75,-20 ,3.5 ,3.5 ,颜色(水绿色),颜色(水绿色),空,空,真),
数组(空,2 ,自定义字符串("B") ,1 ,75,-30 ,2.5 ,3.5 ,颜色(白色),颜色(灰绿色),自定义字符串("A描述"),颜色(黄色),真),
数组(空,3 ,自定义字符串("C") ,1 ,75,-40 ,2.5 ,3.5 ,颜色(白色),颜色(灰绿色),自定义字符串("B描述"),颜色(黄色),真),
数组(空,4 ,自定义字符串("D") ,1 ,75,-50 ,2.5 ,3.5 ,颜色(白色),颜色(灰绿色),自定义字符串("C描述"),颜色(黄色),真),
数组(空,5 ,自定义字符串("E") ,1 ,75,-60 ,2.5 ,3.5 ,颜色(白色),颜色(灰绿色),自定义字符串("D描述"),颜色(黄色),真),
数组(空,6 ,自定义字符串("F") ,1 ,75,-70 ,2.5 ,3.5 ,颜色(白色),颜色(灰绿色),自定义字符串("E描述"),颜色(黄色),真),
//↑永久存在
//1页
数组(1,7 ,自定义字符串("这里是光标主界面\r\n打开代码复制") ,0 ,0 ,40 ,3.5 ,3.5 ,颜色(橙色),颜色(橙色),空,空,真),//标题
数组(1,8 ,自定义字符串("第二页") ,1 ,-15 ,10 ,2.5 ,3.5 ,颜色(白色),颜色(橙色),自定义字符串("A"),颜色(水绿色),真),//按钮
数组(1,9 ,自定义字符串("B") ,1 ,0 ,10 ,2.5 ,3.5 ,颜色(白色),颜色(橙色),自定义字符串("B"),颜色(水绿色),真),
数组(1,10 ,自定义字符串("C") ,1 ,15 ,10 ,2.5 ,3.5 ,颜色(白色),颜色(橙色),自定义字符串("C"),颜色(水绿色),真),
数组(1,11 ,自定义字符串("D") ,1 ,-15 ,-10 ,2.5 ,3.5 ,颜色(白色),颜色(橙色),自定义字符串("D"),颜色(水绿色),真),
数组(1,12 ,自定义字符串("E") ,1 ,0 ,-10 ,2.5 ,3.5 ,颜色(白色),颜色(橙色),自定义字符串("E"),颜色(水绿色),真),
数组(1,13 ,自定义字符串("F") ,1 ,15 ,-10 ,2.5 ,3.5 ,颜色(白色),颜色(橙色),自定义字符串("F"),颜色(水绿色),真),
//2页
数组(2,15 ,自定义字符串("此处可以放按钮。") ,1 ,20 ,0 ,2.5 ,3.5 ,颜色(白色),颜色(橙色),空,颜色(水绿色),真),
数组(2,16 ,自定义字符串("此处可以放按钮。") ,1 ,20 ,-15 ,2.5 ,3.5 ,颜色(白色),颜色(橙色),空,颜色(水绿色),真),
数组(2,17 ,自定义字符串("此处可以放按钮。") ,1 ,20 ,-30 ,2.5 ,3.5 ,颜色(白色),颜色(橙色),空,颜色(水绿色),真),
数组(2,18 ,自定义字符串("此处可以放按钮。") ,1 ,20 ,-45 ,2.5 ,3.5 ,颜色(白色),颜色(橙色),空,颜色(水绿色),真),
数组(2,19 ,自定义字符串("此处可以放按钮。") ,1 ,20 ,-60 ,2.5 ,3.5 ,颜色(白色),颜色(橙色),空,颜色(水绿色),真),
数组(2,20 ,自定义字符串("A") ,1 ,65 ,65 ,2.5 ,3.5 ,颜色(白色),颜色(橙色),自定义字符串("aaa"),颜色(水绿色),真),
数组(2,21 ,自定义字符串("返回主菜单") ,1 ,-65 ,65 ,2.5 ,3.5 ,颜色(白色),颜色(橙色),自定义字符串("点击返回主页"),颜色(水绿色),真),
数组(2,22 ,自定义字符串("▲") ,1 ,-20 ,15 ,3.5 ,3.5 ,颜色(橙色),颜色(橙色),空,空,真),//标题
数组(2,23 ,自定义字符串("此处可以放按钮。") ,1 ,-20 ,0 ,2.5 ,3.5 ,颜色(白色),颜色(橙色),空,颜色(水绿色),真),
数组(2,24 ,自定义字符串("此处可以放按钮。") ,1 ,-20 ,-15 ,2.5 ,3.5 ,颜色(白色),颜色(橙色),空,颜色(水绿色),真),
数组(2,25 ,自定义字符串("此处可以放按钮。") ,1 ,-20 ,-30 ,2.5 ,3.5 ,颜色(白色),颜色(橙色),空,颜色(水绿色),真),
数组(2,26 ,自定义字符串("此处可以放按钮。") ,1 ,-20 ,-45 ,2.5 ,3.5 ,颜色(白色),颜色(橙色),空,颜色(水绿色),真),
数组(2,27 ,自定义字符串("此处可以放按钮。") ,1 ,-20 ,-60 ,2.5 ,3.5 ,颜色(白色),颜色(橙色),空,颜色(水绿色),真),
数组(2,28 ,自定义字符串("▼") ,1 ,-20 ,-75 ,3.5 ,3.5 ,颜色(橙色),颜色(橙色),空,空,真),//标题
数组(2,29 ,自定义字符串("▲") ,1 ,20 ,15 ,3.5 ,3.5 ,颜色(橙色),颜色(橙色),空,空,真),//标题
数组(2,30 ,自定义字符串("▼") ,1 ,20 ,-75 ,3.5 ,3.5 ,颜色(橙色),颜色(橙色),空,空,真),//标题
数组(2,31 ,自定义字符串("A") ,1 ,65,30 ,2 ,2.3 ,颜色(白色),颜色(橙色),自定义字符串("AAA"),颜色(水绿色),真),
数组(2,32 ,自定义字符串("B") ,1 ,65,20 ,2 ,2.3 ,颜色(白色),颜色(橙色),自定义字符串("BBB"),颜色(水绿色),真),
数组(2,33 ,自定义字符串("C") ,1 ,65,10 ,2 ,2.3 ,颜色(白色),颜色(橙色),自定义字符串("CCC"),颜色(水绿色),真),
数组());
}
}
规则("AAA[子程序-点击]")
{
事件
{
子程序;
click;
}
动作
{
"这里是按钮位置点击后的作用。如第八个是切换页面到页面2"
If(事件玩家.cm_CurrentClick>=1&&事件玩家.cm_CurrentClick<10);
If(事件玩家.cm_CurrentClick == 1);
Else If(事件玩家.cm_CurrentClick==2);
Else If(事件玩家.cm_CurrentClick==3);
Else If(事件玩家.cm_CurrentClick==4);
Else If(事件玩家.cm_CurrentClick==5);
Else If(事件玩家.cm_CurrentClick==6);
Else If(事件玩家.cm_CurrentClick==7 );
Else If(事件玩家.cm_CurrentClick==8 );
事件玩家.cm_CurrentPage=2;
Else If(事件玩家.cm_CurrentClick==9 );
End;
Else If(事件玩家.cm_CurrentClick>=10&&事件玩家.cm_CurrentClick<20);
If(事件玩家.cm_CurrentClick == 10);
Else If(事件玩家.cm_CurrentClick == 11);
Else If(事件玩家.cm_CurrentClick == 12);
Else If(事件玩家.cm_CurrentClick == 13);
Else If(事件玩家.cm_CurrentClick == 14);
Else If(事件玩家.cm_CurrentClick == 15);
Else If(事件玩家.cm_CurrentClick == 16);
Else If(事件玩家.cm_CurrentClick == 17);
Else If(事件玩家.cm_CurrentClick == 18);
Else If(事件玩家.cm_CurrentClick == 19);
End;
Else If(事件玩家.cm_CurrentClick>=20&&事件玩家.cm_CurrentClick<30);
If(事件玩家.cm_CurrentClick == 20);
Else If(事件玩家.cm_CurrentClick == 21);
事件玩家.cm_CurrentPage=0;
Else If(事件玩家.cm_CurrentClick == 22);
Else If(事件玩家.cm_CurrentClick == 23);
Else If(事件玩家.cm_CurrentClick == 24);
Else If(事件玩家.cm_CurrentClick == 25);
Else If(事件玩家.cm_CurrentClick == 26);
Else If(事件玩家.cm_CurrentClick == 27);
Else If(事件玩家.cm_CurrentClick == 28);
Else If(事件玩家.cm_CurrentClick == 29);
End;
Else If(事件玩家.cm_CurrentClick>=30&&事件玩家.cm_CurrentClick<40);
If(事件玩家.cm_CurrentClick == 30);
Else If(事件玩家.cm_CurrentClick == 31);
Else If(事件玩家.cm_CurrentClick == 32);
Else If(事件玩家.cm_CurrentClick == 33);
Else If(事件玩家.cm_CurrentClick == 34);
Else If(事件玩家.cm_CurrentClick == 35);
Else If(事件玩家.cm_CurrentClick == 36);
Else If(事件玩家.cm_CurrentClick == 37);
Else If(事件玩家.cm_CurrentClick == 38);
Else If(事件玩家.cm_CurrentClick == 39);
End;
Else If(事件玩家.cm_CurrentClick>=40&&事件玩家.cm_CurrentClick<50);
If(事件玩家.cm_CurrentClick == 40);
Else If(事件玩家.cm_CurrentClick == 41);
Else If(事件玩家.cm_CurrentClick == 42);
Else If(事件玩家.cm_CurrentClick == 43);
Else If(事件玩家.cm_CurrentClick == 44);
Else If(事件玩家.cm_CurrentClick == 45);
Else If(事件玩家.cm_CurrentClick == 46);
Else If(事件玩家.cm_CurrentClick == 47);
Else If(事件玩家.cm_CurrentClick == 48);
Else If(事件玩家.cm_CurrentClick == 49);
End;
End;
}
}
规则("[CM] Generate Buttons [生成按钮]")
{
事件
{
持续 - 全局;
}
动作
{
//注意:以下两条模板动作可以往里面塞实时变化的变量
创建进度条地图文本(本地玩家.cm_Open && (本地玩家.cm_CurrentPage ==
0//这里填页数
)?本地玩家:空,
100//这里填进度条
,自定义字符串("这一条是常驻进度条模板{0}{1}{2}", 空, 空, 空)
,逐帧更新(眼睛位置(本地玩家) + 面朝方向(本地玩家) * 100
+ 归一化(矢量积(面朝方向(本地玩家), 上))
* /* x坐标(把这行内容换成“*数字”) */ 20 * 1.250
+ 归一化(矢量积(矢量积(面朝方向(本地玩家), 上), 面朝方向(本地玩家)))
* /* y坐标(把这行内容换成“*数字”) */ 单次赋值(全局.I*-15) * 0.700),
//这里的单次赋值是用来for循环的,可以把整个直接改为数字
0.5, 不要截取, 颜色(玫红), 颜色(玫红), 可见,位置,值和颜色, 默认可见度);
创建地图文本(本地玩家.cm_Open && (本地玩家.cm_CurrentPage ==
0//页数
)?本地玩家:空,
自定义字符串("这一条是常驻文本模板{0}{1}{2}",空,空,空), //填内容
逐帧更新(眼睛位置(本地玩家) + 面朝方向(本地玩家) * 100
+ 归一化(矢量积(面朝方向(本地玩家), 上))
* /* x坐标(把这行内容换成“*数字”) */ 20 * 1.250
+ 归一化(矢量积(矢量积(面朝方向(本地玩家), 上), 面朝方向(本地玩家)))
* /* y坐标(把这行内容换成“*数字”) */ 单次赋值(全局.I*-15) * 0.700),
1.5, 不要截取, 可见,位置,字符串和颜色, 颜色(玫红), 默认可见度);
//注意:以下自动生成的不可放实时变化的变量
For 全局变量(cm_Ctrl, 0, 数量(全局.cm_Buttons), 1);//程序自动化生成按钮
等待(0.016, 无视条件);
If(全局.cm_Buttons[全局.cm_Ctrl] != 空);
If(全局.cm_Buttons[全局.cm_Ctrl][6] == 全局.cm_Buttons[全局.cm_Ctrl][7]);//如果大小一致只生成1个
创建地图文本(本地玩家.cm_Open && 本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][12] && (本地玩家.cm_CurrentPage == 本地玩家.cm_ButtonsPlayer[单次赋值(
全局.cm_Ctrl)][0] || !本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][0]) ? 本地玩家 : 空,
本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][2],
逐帧更新(眼睛位置(本地玩家) + 面朝方向(本地玩家) * 100 + 归一化(矢量积(面朝方向(本地玩家), 上))
* 本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][4] * 1.250 + 归一化(矢量积(矢量积(面朝方向(本地玩家), 上), 面朝方向(本地玩家))) *
本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][5] * 0.700),
全局.cm_Buttons[全局.cm_Ctrl][6],
不要截取,可见,位置,字符串和颜色,
本地玩家.cm_CurrentHover == 本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][1] && 绝对值(本地玩家.cm_CurrentClick)!= 本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][1] ?
本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][9] : 本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][8], 默认可见度);
"Different Scale"
Else;
"Not Hovered"
创建地图文本(本地玩家.cm_Open && 本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][12] && (本地玩家.cm_CurrentPage == 本地玩家.cm_ButtonsPlayer[单次赋值(
全局.cm_Ctrl)][0] || !本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][0]) && (本地玩家.cm_CurrentHover != 本地玩家.cm_ButtonsPlayer[单次赋值(
全局.cm_Ctrl)][1] || 绝对值(本地玩家.cm_CurrentClick) == 本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][1]) ? 本地玩家 : 空,
本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][2],
逐帧更新(眼睛位置(本地玩家) + 面朝方向(本地玩家) * 100 + 归一化(矢量积(面朝方向(本地玩家), 上))
* 本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][4] * 1.250 + 归一化(矢量积(矢量积(面朝方向(本地玩家), 上), 面朝方向(本地玩家))) *
本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][5] * 0.700),
全局.cm_Buttons[全局.cm_Ctrl][6],
不要截取, 可见,位置,字符串和颜色, 绝对值(本地玩家.cm_CurrentClick)
== 本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][1] ? 本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][9] : 本地玩家.cm_ButtonsPlayer[单次赋值(
全局.cm_Ctrl)][8], 默认可见度);
"Hovered"
创建地图文本(本地玩家.cm_Open && 本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][12] && (本地玩家.cm_CurrentPage == 本地玩家.cm_ButtonsPlayer[单次赋值(
全局.cm_Ctrl)][0] || !本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][0]) && 本地玩家.cm_CurrentHover == 本地玩家.cm_ButtonsPlayer[单次赋值(
全局.cm_Ctrl)][1] && 绝对值(本地玩家.cm_CurrentClick) != 本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][1] ? 本地玩家 : 空,
本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][2],
逐帧更新(眼睛位置(本地玩家) + 面朝方向(本地玩家) * 100
+ 归一化(矢量积(面朝方向(本地玩家), 上))
* 本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][4] * 1.250
+ 归一化(矢量积(矢量积(面朝方向(本地玩家), 上),面朝方向(本地玩家)))
* 本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][5] * 0.700),
全局.cm_Buttons[全局.cm_Ctrl][7],
不要截取, 可见,位置,字符串和颜色, 本地玩家.cm_ButtonsPlayer[单次赋值(全局.cm_Ctrl)][9], 默认可见度);
End;
End;
End;
}
}
评论
这里空空如也~