は、ちょっと気付きにくい処理のミスを指摘してみようと思う。
管理人さんが見てるかどうかは
別として、自己満/(^o^)\
さて、
本題!
チョク少年はある日
敵のHPを調べている時に
「あれ?与えたダメージより減ってない?」って思った時があった
そこで、更に何度か検証をして気付いた…
クレパス(3480)にカッティングLv1を喰らわせたところ
558ダメージを与えた、本来は残りHP2922になっているところだが…
クレパスの残りHPは2364になっている
3480-2364=1116
つまり、カッティングのクライアント側のダメージ計算が2倍になっている
と、いうことである!
ここから先はマニアックな話題になるので続きをポチっとな!
[5回]
と、いうわけで、サーバーとクライアントの処理について考察してみると
HPが1000の敵に500ダメージの複数回攻撃のスキルを発動したとしよう
1.クライアント→
サーバー「スキル発動のキー」パケット送信
2.サーバー(内部処理)「スキルダメージの計算処理(250×2=500ダメージ)」
3.サーバー→
クライアント「250×2=500ダメージを与えた」パケット送信
&その敵のHPを500減らす
4.クライアント(内部処理)「250×2を表示して黄色い表示で合計500ダメージ」
※これはゲームやってる奴にしかわからんが
「
白い文字でダメージを表示」して、更に「合計ダメージを
別の位置に黄色文字で表示する」のだ
5.クライアント(内部処理)「敵のHPを1000減らす」
6.クライアント(内部処理)「敵のHPがゼロになった」
※しかしここで、
クライアントからは「敵を倒した」というパケットは送信しない。
敵を倒したかどうか判断するのは3で
「敵の現在HPがゼロ以下なら分岐して倒したというパケットを送信する」
ってなってるからじゃーないっかな?
結果、敵は死なないがクライアント側では
HPが0になっている。
とゆー現象が起きるわけですよ、OK?
でもでも、5の処理で「HPが0以下な場合、0にする」っていう処理を行ってるから
オーバーフロー的なことも
起きない
クライアントから「敵を倒したよ?」
っていうパケットも出てないから
鯖負担にもならない。
でも、敵のHPをバー表示とかの機能が出てきたらおかしくなってくるかも!
HPバーゼロになってるのに死なないよ!?みたいなね
ちなみに、
どこが間違ってるかと言うと
5番目の手順で、250減らす、250減らす、500減らす、という
3回の処理をしてたところから考えて
「ダメージを表示する+敵HPから減算する」って処理にしちゃってるんだと思う。
だから250、250、合計500!って表示するたびに減算して=2倍のダメージ減ってる
解決策としては、ダメージ表示とダメージ減算の処理を別にする…か、それとも
黄色文字にするって命令を入れた時だけフラグ立てて「減算を行わない」にするとか?
もちろん後でフラグ回収しないと今度は
黄色文字じゃなくても減算が起きないという現象が起きるけど\(^o^)/
以上!
このデータは「より良いゲームになるといいな」という願いを込めて日記に書いてます。
管理人さんが見てるかどうかは
別としてだけど!(大事なことなので二度)
もっちろん苦情が来たら全部「白文字にしてみようかな」という企みもあるわけですが
PR
SNSの日記で書いてあげるといいとおもいますよ^^
細かいバグは指摘されないと中々気づかないですし
ナミツキさんもひとりで作ってるのでケアレスミスもあると思うんですがどうでしゃう(にゃむにゃむ