Pluglog

Tkool Replay コメントは随時受け付けておりますので、古い記事でも遠慮なくお書きくださいませ。
Admin
TOPゲーム創作 ≫ バケットモンタージュ #46 重複バグ進展

バケットモンタージュ #46 重複バグ進展

最近じわじわと制作リズムが戻りつつありテスプレが進んでおります
テスプレというよりテスプレしながらここほしいと思ったら追加するみたいな
旅作業という感じでいい感じに楽しみながらできてる

なんかせっかく作ったのに一部を修正したときにまるごとデータ書き換わってて
作ったもんが参照されてないみたいな事態もちらほら発見してひやひやもの
それからエターナりかけた元凶とも言える地獄のテスプレで悩まされた
ユニークアイテムの重複所持バグがちょっと解決の糸口を得た

20200211165546.png
■重複バグとは
今作ではユニーク(一点もの)のアイテムをランダム生成する仕組みを作った
そのままいくとID配列が膨れ上がるので、削除したデータのIDを再利用する仕組みを作った
アイテムの所持状況はIDで管理することに
このため、例えばID:345のアイテムを所持しているデータは一か所でなければならない
プレイヤーがID345のアイテムを持ち、お店にID345のアイテムがあるという状況が起きると
プレイヤーがID345のアイテムを削除した場合に、お店のアイテムも消えてしまう
これが重複バグ……最悪の場合エラーで落ちたり、所持アイテムがすり替わるとかバグのオンパレードに

■今までの注目点と新たな気づき
ユニークアイテムを生成する処理は必ずその処理を通るはずで
そこを通してる以上、空になっているユニークなIDが振られるはずと考えていて
色んな処理を高速実行しても再現ができなくて困っていた
(ふつうにプレイしてしばらくすると気づかぬうちにバグが起きてるみたいなパターンばかりで苦心)

そんな中、生成処理ではなく削除処理を無作為に実行するテストをしてみたら
同現象が起きうることに気づいた
「所持情報が残っているのにデータを破棄してしまったケースが考えられる」
例)クエ完了→報酬アイテムを即時売る→その後にクエ削除処理で報酬データ削除がかかった
クリア済フラグのあるクエを一括で消去する仕組みになっていた(そのときユニークアイテム情報も破棄)
プレイヤーが所持していた場合はクエ完了でアイテムを受け取っているということで判定していたが
アイテムを売った場合、所持情報がお店に移ったまま、条件をスルーして削除処理が入ってしまう
この状態でID345が再生成された場合、再生成場所+お店の両者で重複される現象が起きてしまう

いやーこの辺の作りがいかにガバガバだったかと…
これは本来クエ完了時に報酬データも同時に消すとかで整合性をとるべきだった感
つまり削除処理の方を見直せばバグ原因をかなり特定できるんじゃないかと希望がわいた感じ!
あまりに原因がわからなかったのですべての所持状況を調べる処理とかも作ったんだけども
これをいちいちアイテム入手や破棄のときに走らせると重くなるのでやだった
重複所持の場合でもその都度データを修正するという力技も考えたりしてたところだった
まあ最悪の場合この処理でデータを修正できるようにどっかに入れとくのはありかなーと

Comment








Trackback

Trackback URL