Zapic
本帖最后由 Zapic 于 2020-3-13 22:34 编辑

RT.
现在在写数据包,需要在玩家放下灵魂火把时,在灵魂火把上生成一团药水云.
放置事件监听已经写好了,放下火把会用execute以玩家身份执行一些指令.
现在问题在于如何在事件里使放下的火把上生成一团药水云.

我现在的解决方案是yys给的:
以玩家眼睛为基准,使用^ ^ ^然后对齐方块之后判断当前方块是不是火把,如果是,就在当前位置的~0.5 ~0.5 ~0.5上生成一团药水云.
然后以玩家眼睛为基准,使用^ ^ ^0.125然后对齐方块之后判断当前方块是不是火把,如果是,就在当前位置的~0.5 ~0.5 ~0.5上生成一团药水云.
...
然后以玩家眼睛为基准,使用^ ^ ^6然后对齐方块之后判断当前方块是不是火把,如果是,就在当前位置的~0.5 ~0.5 ~0.5上生成一团药水云.
对,就是穷举(
但是即便精度已经穷举到8x,仍然会有极.端情况导致火把上没有正常生成药水云.

左侧为正常生成药水云的火把.

而且这个方案会导致药水云反复生成,只能外加一个定时器定时清除多余的药水云.

所以想要一种更好的解决方案.
顺便附上半成品数据包:
faketorcherino.zip (6.35 KB, 下载次数: 5)
顺便附上我的最终目的:


纱夜
本帖最后由 阴阳师元素祭祀 于 2020-3-13 22:39 编辑
为了实现使灵魂火把周围的作物(就是小麦胡萝卜这些)加速生长,在火把上生成特殊标记的药水云,然后以药水云的位置遍历5*5*5的区域,配合随机数发生器,再通过穷举状态,使作物加速生长.
如果有更好的方案,也欢迎提出来.


虽然我没用过加速火把
但是加速火把我觉得加上一个可开可关的选项比较好吧
让玩家自由打开关闭。

既然自由开关了
为什么还需要你获得位置呢?
我记得我在qq说过这个话 可惜大佬们并不会在意这个垃圾

xmdhs
没必要自己造轮子嘛(

https://www.mcbbs.net/thread-784662-1-1.html 中的方块设计。

效果

chyx
xmdhs 发表于 2020-3-13 22:38
没必要自己造轮子嘛(

https://www.mcbbs.net/thread-784662-1-1.html 中的方块设计。

我是说,
你放置火把的时候,视线很可能根本没有和火把所在的方块相交。

比如你贴着梯子对着梯子放,
火把会插在你背后的。

不行的啦

晴路卡
本帖最后由 晴路卡 于 2020-3-14 11:24 编辑

我的建议是直接废弃视线追踪这个方案,同时增加一个对普通灵魂火把放置事件的探测。
每当玩家放下一个普通灵魂火把,就在该玩家的坐标位置生成一个物品展示框
并以这个展示框为中心递归查找玩家可放置范围内的灵魂火把。
如果这个灵魂火把上没有药水云,就在该火把上生成一个tag为regular的药水云(Duration尽量大)
而当玩家放下一个加速火把,在该玩家的坐标位置生成一个物品展示框以这个展示框为中心递归查找玩家可放置范围内的灵魂火把。
如果这个火把上没有药水云,就在该灵魂火把上生成一个tag为turbo的药水云
这些药水云都会在自己的坐标没有灵魂火把的时候消失。

顺便在这tick结束清掉这个展示框

至于自然生成的灵魂火把嘛...
那恐怕不是放下普通火把的时候执行递归生成regular了
而是接高频...

顺便0.125对于视线追踪来说还是太大了
懒得穷举可以递归






Zapic
晴路卡 发表于 2020-3-14 11:05
我的建议是直接废弃视线追踪这个方案,同时增加一个对普通灵魂火把放置事件的探测。
每当玩家放下一个普通 ...

不是,这跟直接原地穷举搜索12*12*12有什么区别(
就是想要避免大范围穷举才想要视线追踪的.

晴路卡
Zapic 发表于 2020-3-14 11:57
不是,这跟直接原地穷举搜索12*12*12有什么区别(
就是想要避免大范围穷举才想要视线追踪的. ...

区别就是能解决梯子的极端情况
另外0.125真的不够精准

ruhuasiyu
可以直接用记分板来计算玩家视线和方块的面的交点,然后再该连线的所有交点寻找加速火把。如果没有找到,那么在邻近的6个面也进行同样的操作(比如贴着上半砖下方放火把,或者贴着梯子放的情形)。找到了就行了。

具体实现可以看一下 http://home.ustc.edu.cn/~zsxqq/craftingpp/v1.10-0314.zip 中 functions/misc/loc文件夹下的函数。

Zapic
本帖最后由 Zapic 于 2020-3-14 16:17 编辑
晴路卡 发表于 2020-3-13 22:30
我的建议是直接废弃视线追踪这个方案,同时增加一个对普通灵魂火把放置事件的探测。
每当玩家放下一个普通 ...

最后还是觉得麻烦,老老实实递归检查12*12*12每一个方块了(
果然还是暴力的来得最方便,就是不知道性能开销会不会巨大(

ruhuasiyu
Zapic 发表于 2020-3-14 16:16
最后还是觉得麻烦,老老实实递归检查12*12*12每一个方块了(
果然还是暴力的来得最方便,就是不知道性能开销 ...

你这方法过于离谱,根本就不考虑方块是什么时候放的啊……

Zapic
ruhuasiyu 发表于 2020-3-14 17:46
你这方法过于离谱,根本就不考虑方块是什么时候放的啊……

不考虑,就是需要所有被放置的灵魂火把都生成一个药水云.
不想太多,不做特征识别.