[討論] 遊戲中的距離限制

看板Minecraft (當個創世神)作者 (女子 食我 口阿)時間12年前 (2013/05/06 15:15), 編輯推噓0(003)
留言3則, 2人參與, 最新討論串1/1
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)

05/06 15:33, , 1F
有個問題 暴雨的時候射箭會受影響嗎 還是全天候通用...
05/06 15:33, 1F

05/06 15:36, , 2F
應該是沒影響 不過我現在懶得確認
05/06 15:36, 2F

05/07 09:34, , 3F
印象中沒有檢查天氣
05/07 09:34, 3F
文章代碼(AID): #1HXrXszI (Minecraft)
文章代碼(AID): #1HXrXszI (Minecraft)