石橋を叩いて壊すページ

ボスモンスタープラグインを少し更新した

以前公開したボスモンスタープラグインについて、コメントでドロップの変更機能の要望があった。
せっかくなので新スキルやら何やら追加した全く新しいプラグインとして作ろうと思ったのだが、
仕事の都合で引越したりその他なんやらで時間がかかりそうなので、ひとまず既存のプラグインに機能追加したものを公開することにしてみた。


レベル30以上ではウィザースケルトンに変身する!

導入

導入は前回同様、BossMonster.jarをダウンロードしてpluginsフォルダに保存するだけ。
Spigot V1.8.3で動作確認。V1.6.4以上なら動作するはず。

BossMonster.jar - 21KB

使用

導入後、OP権限付きプレイヤーがゲーム内でコマンド「/boss」を実行すると、コマンド実行者のいる場所にボスが現れる。

「/boss 10」のように、コマンドの後ろに数字をつけると難易度調整ができる。指定しない場合のデフォルトは1。
基本的にはボスの討伐に参加する人数(10人なら10)を指定して、あとは好みで増減。最低は1、最大は50。(50以上を指定すると50になる)

もし、ボスを出現させたあとにボスがどこにいるか分からなくなった場合は、もういちど「/boss」コマンドを実行するとコマンド実行者のいる場所にボスを強制移動できる。
ボスを消去したい場合は、OP権限付きプレイヤーが「/reload」コマンド(プラグインを再起動するBukkitのコマンド)を実行すると、プラグインが再起動され、ボスは消去される。

変更内容

ボスの討伐時のドロップアイテムと経験値量を変更可能にした

前回はボス討伐時、レベルによって一定のダイヤモンドと経験値オーブが落ちるだけだった。
今回は落ちるアイテムを変更可能にした。また、落ちる確率も設定できる。

設定は、新しく追加した/bossdropコマンドを使用する(要OP権限)。
具体的な手順は以下のとおり。


  1. ゲームにログインし、ボス討伐時にドロップさせたいアイテムをホットバーに入れる
    アイテムは、最低1スロット、最大9スロットまで設定できる。


  2. チャット欄に「/bossdrop」と入力してEnterを押すと、ホットバーに入っているアイテムがドロップアイテムとして設定される。
    コマンドに引数は不要。


  3. ボスを実際に討伐して、ドロップアイテムが変更されていることを確認する。

上記手順を行うと、コマンド実行時にホットバーに登録されていたアイテムとその数を記憶し、
ボス討伐時にそのアイテムの複製がドロップするようになる。
ドロップする数はホットバーに登録されていた数の半分から2倍の範囲で討伐時にランダムに決まる。
アイテムが落ちる確率は、すべて100%に設定される。

たとえば羊毛を10個手に持った状態で/bossdropコマンドを実行すると、
ボス討伐時には5個以上20個以下の羊毛が100%の確率で落ちるようになる。

討伐するボスがレベル2以上の場合は、ボスのレベルの数だけ同じ計算を行う。
たとえばレベル20のボスを倒せば、アイテムは最大で設定の20倍ドロップすることになる。

設定できるアイテムは、大抵のアイテムは受け付けるようになっている。
エンチャント済みの装備品ではエンチャント状態が、記入済みの本では本の内容が、
使用済みの装備品であれば残り耐久度まで記憶される。

ドロップ確率や個数など、より詳しい設定をしたい場合は、設定フォルダ配下のconfig.ymlファイルを直接編集する。
デフォルトでは以下のようになっている。

dropExp: 
  amountMin: 100
  amountMax: 900
dropItem:
- ==: jp.jias.bukkit.bossmonster.DropItem
  item:
    ==: org.bukkit.inventory.ItemStack
    type: DIAMOND
  amountMin: 0.5
  amountMax: 2.0
  rarity: 100.0

「dropExp」は経験値の設定で、ボスを討伐すると100~900の範囲でランダムな量の経験値が入った経験値オーブが、ボスのレベル1あたり1個落ちる。
たとえばボスのレベルが50ならば、100~900の経験値を持つ経験値オーブが50個落ちる計算になる。

参考までに、前バージョンのボスモンスタープラグインのボス討伐時のドロップ経験値量は、ボスのレベル×500だった。
また、バニラでのエンダードラゴン討伐時のドロップ経験値量は12,000である。このあたりを軸に増減すると良いと思う。

「dropItem」と書かれた設定項目は落とすアイテムの設定で、複数記載できる。
初期設定ではダイヤモンド(type: DIAMOND)を、0.5個以上(amountMin)、2.0個以下(amountMax)、100%の確率(rarity)で落とすという設定になっている。
こちらも経験値同様、ボスのレベル1あたりドロップ計算を1回行うので、ボスのレベルが高ければそれだけたくさんのアイテムがドロップする計算になる。
/bossdropコマンドではアイテムは1~9スロットしか設定できないが、直接編集では0スロット以上、上限無制限で設定できる。

もし設定を間違えて元に戻せなくなった場合は、サーバーをいったん停止してconfig.ymlを削除すれば、
サーバー起動時にデフォルトのconfig.ymlが再度保存される。

ボスのレベルが30以上のとき、ボスの残りHPが30%を下回ると、エンダースケルトンに変身する。

以前にちょっとやってみたら案外可愛かったのを実装してみた。
ボスのスキル「マシンガンショット」の発射誤差が増えた

左:前バージョン、右:今バージョン。
誤差を増やすことで矢が散らばるようになり、今までより若干広い範囲を攻撃するようになった。
経験値オーブが複数ドロップするようにした。

以前のボスモンスタープラグインは討伐時に経験値オーブをひとつしか出さなかったので、経験値を複数メンバーで分配することができなかった。
今回はボスのレベル数分だけ経験値オーブを落とすようになったので、複数メンバーで経験値の分配ができるようになった。
前回の記事で調べたコードを実装。

改善内容

レベルゼロのボスを呼び出すことができたのを修正した。
前回はボスを呼び出す際のコマンドの処理に誤りがあり、「/boss 0」を実行するとレベルゼロのボスを召還できたので修正した。
ネザーではボスがスケルトンではなくウィザースケルトンになる可能性があったのを修正した。
スケルトン(Skeleton)は1つのクラスで通常の(白い)スケルトンとウィザースケルトンの両方を扱っている。
単純にSkeletonをスポーンさせただけでは、どちらのスケルトンが出るかわからず、白いスケルトンにするにはSkeletonTypeを設定する必要がある。
前回のコードではそのあたりを認識していなかったので、設定を追加した。

ソースコード

ソースはドロップアイテムのデータを表すシリアライズ用クラス「DropItem.java」を追加した以外、
前回の公開時からそれほど大きく変えていないので、前回の記事も参考にしていただきたい。
前回からの差分(diff)はこのとおり

  • BossMonster.java - このプラグインの本体。ボスの生成・HP表示・死亡時処理などを行う。
  • Skill.java - ボスが使う必殺技のベースとなるクラス。一定時間おきに必殺技のための処理を呼び出したりする。
  • MachinegunShot.java - 必殺技のひとつ、マシンガンショットの処理をする。
  • ShowerShot.java - 必殺技のひとつ、シャワーショットの処理をする。
  • ThrowPotion.java - 必殺技のひとつ、ヒールポーションの処理をする。
  • TornadoShot.java - 必殺技のひとつ、トルネードショットの処理をする。
  • BossEffect.java - ボスモンスターに存在を示す音と炎のエフェクトをつける処理をする。(ダメージ音や死亡音はBossMonster.javaで処理。)
  • RemoveEntities.java - 射った矢を数秒後に消す処理をする。
  • DropItem.java - 今回新しく追加したクラス。ドロップアイテムの設定クラス。
  • plugin.yml - Bukkitプラグインの実行に必要な設定ファイル。
  • config.yml - Bukkitプラグインの開発に必要な設定ファイル。

この記事を評価

この記事にコメント

  1. ...

【この記事にコメント】
お名前:
コメント:

Menu