仅占用一个地图文本的键盘
互动打开键盘
以下代码,可直接复制粘贴到工坊。注意变量!
更新:2022.01.04
变量
{
全局:
0: data_dictionary
1: data_angel
玩家:
0: isInput
1: inputAngel
2: inputTextID
3: outputString
4: item
}
规则("数据初始化")
{
事件
{
持续 - 全局;
}
动作
{
全局.data_angel = 数组(
数组(25, 20.400, 15.740, 10.600, 5.340, 0, -5.340, -10.600, -15.740, -20.400, -25),
数组(-12.380, -9.210, -5.940, -2.680));
全局.data_dictionary = 映射的数组(
字符串分割(自定义字符串("1·2·3·4·5·6·7·8·9·0/Q·W·E·R·T·Y·U·I·O·P/A·S·D·F·G·H·J·K·L·-/Z·X·C·V·B·N·M· ·,·."), 自定义字符串("/")),
字符串分割(当前数组元素, 自定义字符串("·")));
}
}
规则("打开键盘")
{
事件
{
持续 - 每名玩家;
双方;
全部;
}
条件
{
按钮被按下(事件玩家, 按钮(互动)) == 真;
}
动作
{
事件玩家.isInput = !事件玩家.isInput;
If(事件玩家.isInput);
开始强制设置玩家位置(事件玩家, 所选位置(事件玩家), 真);
设置主要攻击模式启用(事件玩家, 假);
事件玩家.outputString = 自定义字符串("");
事件玩家.inputAngel = 数组(水平朝向角度(事件玩家), 0);
创建地图文本(事件玩家, 自定义字符串("1 2 3 4 5 6 7 8 9 0 ←\r\nQ W E R T Y U I O P 重\r\nA S D F G H J K L - 置\r\nZ X C V B N M 空 逗 句 √"),
眼睛位置(事件玩家) + 与此角度的相对方向(事件玩家.inputAngel[0], 0),
2, 不要截取, 可见, 颜色(白色), 默认可见度);
事件玩家.inputTextID[0] = 上一个文本ID;
创建地图文本(事件玩家, 自定义字符串("请输入:{0}", 事件玩家.outputString),
眼睛位置(事件玩家) + 与此角度的相对方向(事件玩家.inputAngel[0], -15),
2, 不要截取, 可见和字符串, 颜色(白色), 默认可见度);
事件玩家.inputTextID[1] = 上一个文本ID;
Else;
消除地图文本(事件玩家.inputTextID[0]);
消除地图文本(事件玩家.inputTextID[1]);
停止强制设置玩家位置(事件玩家);
设置主要攻击模式启用(事件玩家, 真);
End;
}
}
规则("键盘输入")
{
事件
{
持续 - 每名玩家;
双方;
全部;
}
条件
{
事件玩家.isInput == 真;
按钮被按下(事件玩家, 按钮(主要攻击模式)) == 真;
}
动作
{
事件玩家.inputAngel[2] = 水平朝向角度(事件玩家) - 事件玩家.inputAngel[0];
事件玩家.inputAngel[3] = 垂直朝向角度(事件玩家);
If(绝对值(事件玩家.inputAngel[2]) > 180);
事件玩家.inputAngel[2] = (360 - 绝对值(水平朝向角度(事件玩家))) * (事件玩家.inputAngel[2] > 180 ? -1 : 1) - 事件玩家.inputAngel[0];
End;
事件玩家.inputAngel[4] = -1;
事件玩家.inputAngel[5] = -1;
For 玩家变量(事件玩家, item, 0, 11, 1);
If(绝对值(事件玩家.inputAngel[2] - 全局.data_angel[0][事件玩家.item]) <= 1.500);
事件玩家.inputAngel[4] = 事件玩家.item;
中断;
End;
End;
For 玩家变量(事件玩家, item, 0, 4, 1);
If(绝对值(事件玩家.inputAngel[3] - 全局.data_angel[1][事件玩家.item]) <= 1.300);
事件玩家.inputAngel[5] = 事件玩家.item;
中断;
End;
End;
If(事件玩家.inputAngel[4] == 10);
If(事件玩家.inputAngel[5] == 0);
事件玩家.outputString = 截取字符串(事件玩家.outputString, 0, 字符串长度(事件玩家.outputString) - 1);
Else If(事件玩家.inputAngel[5] == 1 || 事件玩家.inputAngel[5] == 2);
事件玩家.outputString = 自定义字符串("");
Else If(事件玩家.inputAngel[5] == 3);
小字体信息(所有玩家(所有队伍), 自定义字符串("{0}:{1}", 事件玩家, 事件玩家.outputString));
End;
Else If(事件玩家.inputAngel[4] != -1 && 事件玩家.inputAngel[5] != -1);
事件玩家.outputString = 自定义字符串("{0}{1}", 事件玩家.outputString, 全局.data_dictionary[事件玩家.inputAngel[5]][事件玩家.inputAngel[4]]);
End;
}
}
以下为初始版本:
变量
{
全局:
0: InputData
1: InputAngel
玩家:
0: InputAngel
1: Message
2: TextID
3: Status
}
规则("数据初始化")
{
事件
{
持续 - 全局;
}
动作
{
全局.InputAngel = 数组(数组(25, 20.400, 15.740, 10.600, 5.340, 0, -5.340, -10.600, -15.740, -20.400, -25), 数组(-12.380, -9.210, -5.940,
-2.680));
全局.InputData = 数组(数组(自定义字符串("A"), 自定义字符串("B"), 自定义字符串("C"), 自定义字符串("D"), 自定义字符串("E"), 自定义字符串("F"), 自定义字符串("G"), 自定义字符串("0")), 数组(
自定义字符串("H"), 自定义字符串("I"), 自定义字符串("J"), 自定义字符串("K"), 自定义字符串("L"), 自定义字符串("M"), 自定义字符串("N"), 自定义字符串("1"), 自定义字符串("2"), 自定义字符串(
"3")), 数组(自定义字符串("O"), 自定义字符串("P"), 自定义字符串("Q"), 自定义字符串(""), 自定义字符串("R"), 自定义字符串("S"), 自定义字符串("T"), 自定义字符串("4"), 自定义字符串("5"),
自定义字符串("6")), 数组(自定义字符串("U"), 自定义字符串("V"), 自定义字符串("W"), 自定义字符串(""), 自定义字符串("X"), 自定义字符串("Y"), 自定义字符串("Z"), 自定义字符串("7"), 自定义字符串(
"8"), 自定义字符串("9")));
}
}
规则("打开键盘")
{
事件
{
持续 - 每名玩家;
双方;
全部;
}
条件
{
事件玩家.Status == 0;
按钮被按下(事件玩家, 按钮(互动)) == 真;
}
动作
{
事件玩家.Status = 2;
设置状态(事件玩家, 无, 定身, 9999);
设置主要攻击模式启用(事件玩家, 假);
事件玩家.Message = 自定义字符串("");
事件玩家.InputAngel = 数组(水平朝向角度(事件玩家), 0);
创建地图文本(事件玩家, 自定义字符串("A B C D E F G 0 ← √ 退\r\nH I J K L M N 1 2 3 出\r\nO P Q R S T 4 5 6 键\r\nU V W X Y Z 7 8 9 盘"), 眼睛位置(事件玩家)
+ 与此角度的相对方向(事件玩家.InputAngel[0], 0), 2, 不要截取, 可见, 颜色(白色), 默认可见度);
事件玩家.TextID[0] = 上一个文本ID;
创建HUD文本(事件玩家, 字符串长度(事件玩家.Message) == 0 ? 自定义字符串("请点击字符输入:") : 事件玩家.Message, 无, 无, 顶部, 1, 颜色(白色), 颜色(白色), 颜色(白色), 字符串, 默认可见度);
事件玩家.TextID[1] = 上一个文本ID;
等待直到 (事件玩家.Status == 0, 99999);
消除地图文本(事件玩家.TextID[0]);
消除HUD文本(事件玩家.TextID[1]);
清除状态(事件玩家, 定身);
设置主要攻击模式启用(事件玩家, 真);
}
}
规则("键盘输入")
{
事件
{
持续 - 每名玩家;
双方;
全部;
}
条件
{
事件玩家.Status == 2;
按钮被按下(事件玩家, 按钮(主要攻击模式)) == 真;
}
动作
{
事件玩家.InputAngel[2] = 水平朝向角度(事件玩家) - 事件玩家.InputAngel[0];
事件玩家.InputAngel[3] = 垂直朝向角度(事件玩家);
If(绝对值(事件玩家.InputAngel[2]) > 180);
事件玩家.InputAngel[2] = (360 - 绝对值(水平朝向角度(事件玩家))) * (事件玩家.InputAngel[2] > 180 ? -1 : 1) - 事件玩家.InputAngel[0];
End;
事件玩家.InputAngel[4] = -1;
事件玩家.InputAngel[5] = -1;
For 玩家变量(事件玩家, I, 0, 11, 1);
If(绝对值(事件玩家.InputAngel[2] - 全局.InputAngel[0][事件玩家.I]) <= 1.500);
事件玩家.InputAngel[4] = 事件玩家.I;
中断;
End;
End;
If(事件玩家.InputAngel[4] == 10);
事件玩家.Status[0] = 0;
Else If(事件玩家.InputAngel[4] != -1);
For 玩家变量(事件玩家, I, 0, 4, 1);
If(绝对值(事件玩家.InputAngel[3] - 全局.InputAngel[1][事件玩家.I]) <= 1.300);
事件玩家.InputAngel[5] = 事件玩家.I;
中断;
End;
End;
If(事件玩家.InputAngel[5] != -1);
If(事件玩家.InputAngel[4] == 3 && (事件玩家.InputAngel[5] == 2 || 事件玩家.InputAngel[5] == 3));
Else If(事件玩家.InputAngel[4] == 8 && 事件玩家.InputAngel[5] == 0);
事件玩家.Message = 截取字符串(事件玩家.Message, 0, 字符串长度(事件玩家.Message) - 1);
Else If(事件玩家.InputAngel[4] == 9 && 事件玩家.InputAngel[5] == 0);
小字体信息(事件玩家, 自定义字符串("已接收"));
Else;
事件玩家.Message = 自定义字符串("{0}{1}", 事件玩家.Message, 全局.InputData[事件玩家.InputAngel[5]][事件玩家.InputAngel[4]]);
End;
End;
End;
}
}
评论
这里空空如也~