作者jeffffliu (女子 食我 口阿)
看板Minecraft
标题[讨论] 游戏中的距离限制
时间Mon May 6 15:14:59 2013
client端处理的是玩家
选取的距离
server端处理的是玩家
限制能不能作这项动作的距离
一、选取目标的距离
距离起算基准点:玩家的眼睛位置(眼睛高度:1.62 Sneak中是1.54)
选取到Block(方块)的距离限制:
创造模式: 5.0
其他模式: 4.5
选取到Entity(实体)的距离限制:
创造模式: 6.0
其他模式: 3.0
资料来源: EntityRenderer.getMouseOver
二、攻击(左键)、互动(右键)的距离限制
距离平方计算: 计算玩家跟目标实体的中心脚底位置的距离平方
距离平方限制:
该实体可以被看到: 36.0
该实体不能被看到: 9.0
结论: 可以看到的距离限制是6.0 不能看到的距离限制是3.0
资料来源:
Client端: Minecraft.playerController.attackEntity (攻击
Minecraft.playerController.func_78768_b (互动
Packet : Packet7UseEntity
Server端: NetServerHandler.handleUseEntity (Vanilla, Forge
PlayerConnection (bukkit
三、挖掘方块的距离限制
距离平方计算: 玩家的座标是玩家的中心脚底位置加上高度1.5
方块的座标中心位置(x+0.5,y+0.5,z+0.5)
距离平方限制:
Vanilla Minecraft, Bukkit : 36.0
Forge : [ 距离限制(预设5.0 有函式可呼叫设定) + 1.0 ] 的平方
其实也是36.0
结论: 距离限制6.0
资料来源:
Clinet端: Minecraft.playerController.clickBlock (点第一下
Minecraft.playerController.onPlayerDamageBlock (持续按住
Packet : Packet14BlockDig
Server端: NetServerHandler.handleBlockDig (Vanilla, Forge
PlayerConnection (bukkit
四、右键方块的距离限制
距离平方计算:
Vanilla Minecraft, Forge: 玩家的座标是玩家的中心脚底位置
方块的座标中心位置(x+0.5,y+0.5,z+0.5)
Bukkit : 玩家的眼睛位置(眼睛高度:1.62 Sneak中是1.54)
方块的某个西北下方的角(x,y,z)
距离平方限制:
Vanilla Minecraft : ?? 检查式子写64.0 实际测试是49.0
Bukkit : 36.0
Forge : [ 距离限制(预设5.0 有函式可呼叫设定) + 1.0 ] 的平方
其实也是36.0
结论: 基本上是6.0 不过Bukkit的距离计算方式不同
Client端: Minecraft.playerController.onPlayerRightClick (右键
Packet : Packet15Place
Server端: NetServerHandler.handlePlace (Vanilla, Forge
PlayerConnection (Bukkit
五、总结
由於选取范围是client端决定才会进行动作
因此server端不会检查是不是创造模式,只会检查最大范围
所以自己写mod来控制玩家的动作就可以超出平常的距离
playerController有很多function可使用
不过持续按住类型的动作可能需要自己送Packet
不然会被playerController的function中断
至於弓箭的射程...
会跟初速,发射角度(内建会飘移),重力影响,空气阻力的影响作计算
(最少游戏都有考虑到)
--
有问题请寄信(推文)大多人不在(????
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 1.173.234.184
※ 编辑: jeffffliu 来自: 1.173.234.184 (05/06 15:15)
1F:→ mabikerry:有个问题 暴雨的时候射箭会受影响吗 还是全天候通用... 05/06 15:33
2F:→ jeffffliu:应该是没影响 不过我现在懒得确认 05/06 15:36
3F:→ jeffffliu:印象中没有检查天气 05/07 09:34