仅占用一个地图文本的键盘

互动打开键盘

以下代码,可直接复制粘贴到工坊。注意变量!

更新: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;
	}
}
评论
这里空空如也~
这里空空如也~