作为一个解决方案,在地图上随机取一点

地图上的随机一个位置,如果大范围内随机生成XYZ坐标,然后加一个“地图上最近的可行走位置”来实现的,这样的话……极大概率会随机到地图边界的地方

正解是

先找到边界位置

再随机。角色位置到边界中间一个位置

随机一个方向矢量A 然后最近可行走(A*1000+角色位置)就是边界位置

预览

站点图 几个点是连在一个图上的 可能会飞图 解决方案是 利用 地图检测,把代码里面的 乘 200,改小一点

完整代码如下(必须用 英文客户端复制,中文客户端有bug)

rule("按F传送到随机位置,Y值不改变")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Is Button Held(Event Player, Interact) == True;
	}

	actions
	{
		Set Player Variable(Event Player, T, Add(Vector(Random Real(-5.000, 5), 0, Random Real(-5.000, 5)), Position Of(Event Player)));
		Set Player Variable(Event Player, T, Direction Towards(Position Of(Event Player), Player Variable(Event Player, T)));
		Set Player Variable(Event Player, T, Nearest Walkable Position(Add(Multiply(200, Player Variable(Event Player, T)), Position Of(
			Event Player))));
		Teleport(Event Player, Nearest Walkable Position(Vector(Random Real(Min(X Component Of(Position Of(Event Player)), X Component Of(
			Player Variable(Event Player, T))), Max(X Component Of(Position Of(Event Player)), X Component Of(Player Variable(Event Player,
			T)))), Y Component Of(Position Of(Event Player)), Random Real(Min(Z Component Of(Position Of(Event Player)), Z Component Of(
			Player Variable(Event Player, T))), Max(Z Component Of(Position Of(Event Player)), Z Component Of(Player Variable(Event Player,
			T)))))));
		Create Icon(Event Player, Player Variable(Event Player, T), Arrow: Down, Visible To and Position, Red, True);
	}
}

rule("按下蹲传送到边界")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Is Button Held(Event Player, Crouch) == True;
		Player Variable(Event Player, T) != 0;
	}

	actions
	{
		Teleport(Event Player, Nearest Walkable Position(Player Variable(Event Player, T)));
	}
}
评论
这里空空如也~
这里空空如也~