プレイヤーごとにワールドをロードする方法

題名がかなりざっくりしててすみません skriptではないく、plugin自体作ってます 大規模サーバーではよく、プレイヤーごとに自由に建築できるスペースを用意しているのを見かけます ほとんどの場合、みんながいるグローバルなワールドから、各プレイヤーごとの建築スペースに移動する場合、ロードが入っているので、ワールド自体を作っていると思うのですが、どのように実現しているのでしょうか? 本当にプレイヤーごとにワールドを作成しているのであれば、サーバーが起動するたびにロードしなければいけないworldがかなり多くなってしまい、起動時間はもちろん、容量とラグの面においてきついと思います ワールドの必要な情報をDBで保存して、プレイヤーが入る際にそのデータを使用してワールドを作成し、抜ける際にまたDBの情報を上書きして、world消してる的なことをしてるんですかね?
Solution:
ありがとうございました。
Jump to solution
24 Replies
soramame_256
soramame_2566d ago
Wynncraftの場合おそらく特定の座標(例えばx+100000など)にストラクチャをペーストしている感じかと。 かぶる場合は座標をずらす形で実装していそうです。 (ロードも入らないので多分同一ワールドで行ってるのかな) Hypixelの場合は多分個別でサーバー作ってます
yukkina
yukkina6d ago
あれでいいんじゃないの なんだっけ
soramame_256
soramame_2566d ago
こんな感じで。 ただこの機能使ってる人割と多いはずなんですけど毎回座標65536周辺な気がするのでもしかしたらghost blockとプレイヤーの非表示使って実装してる可能性はあります。 さすがにないとは思いますしそうするにしてもコストが高すぎるので座標分割したほうが早いかと 一つだけワールド作成して座標割り当てて終わりでも一応いい感じはしますね。さすがに大規模鯖だと厳しいとは思いますけど
yukkina
yukkina6d ago
ワールドいっぱい作れるプラグイン
soramame_256
soramame_2566d ago
読めよ
本当にプレイヤーごとにワールドを作成しているのであれば、サーバーが起動するたびにロードしなければいけないworldがかなり多くなってしまい、起動時間はもちろん、容量とラグの面においてきついと思います
yukkina
yukkina6d ago
あは
Mars -> まあす
この方法を使用する場合、プレイヤーの島のようなテーマの小さいストラクチャであればいいと思うんですけど、大きめの構造物をプレイヤーごとに作りたい場合や、スカイブロックのようにプレイヤーの行動範囲が理論的には無限の場合などに問題が発生してしまうとおもうんですよね 一つのワールドをかなり広い規模でロードするよりも、複数ワールド作って、それぞれで処理を行った方が軽いというのもよく耳にするのですがそのようなことも踏まえると、ワールドを作成しているアルゴリズムを大体知りたいと思いました
soramame_256
soramame_2566d ago
なるほど。 ASkyblock プラグインとかちょっと見てきます。 プレイヤーごとにスカイブロックを作るようなプラグインなので参考になりそう ASkyblockは座標での実装してますね...うーん。
Mars -> まあす
そうっぽいですね
soramame_256
soramame_2566d ago
使用していないワールドをzip圧縮するとか方法はある気がしますけど容量問題はいずれ起きますし... 実装したことがないので僕だと厳しいかもです... unload->圧縮 解凍->load 的な手順で
Mars -> まあす
なるほど そのような方法もあるのですね。わざわざ意見を下さりありがとうございました。
soramame_256
soramame_2566d ago
参考になるかはわかりませんけどお役に立てたなら幸いです
yukkina
yukkina6d ago
ちなみにだけど mv coreは ワールドのunloadとかできるからね
soramame_256
soramame_2566d ago
そもそもBukkitにunloadWorldってメソッドある
Want results from more Discord servers?
Add your server