マインクラフトでゲームを作ろうとしたときにああ、マインクラフトってクソなんだな。
と思ったことについて書いていきます。
Note
このリポジトリの内容はQiitaに移行されました!
Qiita
体力と衝撃吸収を持っているプレイヤーがいるするじゃないですか。
通常のゲームプレイにはないけど、衝撃吸収を貫通してダメージを与えたい!
そうして実装した後、気づくでしょう。
サーバー側の体力はあってるのに、クライアントの表示だと体力は減らずに衝撃吸収が減っているぞ?
マジでカス。
なぜかクライアント側で勝手にダメージ計算されて衝撃吸収に肩代わりされます。
普通に体力を減らしてクライアントに送信するだけだとうまくいきません。
なのでダメージ処理、つまり体力の増減処理をする前にクライアントの衝撃吸収を0にした後、処理を実行します
こうすれば勝手に肩代わりされずに済みます
(Health = 20, Absorption = 10)
体力増減を検知 (5 の衝撃吸収貫通ダメージ)
↓
UpdateAttributesPacket (Health = 20, Absorption = 0)
↓
体力増減処理 (ダメージ処理)
↓
UpdateAttributesPacket (Health = 15, Absorption = 10)
↓
TADA!!