作者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)
→ mabikerry:有個問題 暴雨的時候射箭會受影響嗎 還是全天候通用... 05/06 15:33
→ jeffffliu:應該是沒影響 不過我現在懶得確認 05/06 15:36
→ jeffffliu:印象中沒有檢查天氣 05/07 09:34