Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: マナが無くなったら掘れなくするパッシブスキルを追加 #2370

Open
wants to merge 15 commits into
base: 1_18
Choose a base branch
from

Conversation

kuroma6666
Copy link
Contributor

@kuroma6666 kuroma6666 commented Aug 31, 2024

close #1964


このPRの変更点と理由:

主な変更点

  • パッシブスキルに対して、スキルをONにしている際にマナを消費しきった際に整地スキルによってブロック破壊しない設定を追加

補足情報:

  • デフォルト設定値はOFF設定とする(初心者プレイヤー詰み防止)
  • パッシブスキル設定は永続化することとしました

@kuroma6666 kuroma6666 force-pushed the feat-digging-stop-mana-fully-consumed branch 2 times, most recently from 14a859f to 571abd3 Compare September 14, 2024 17:30
@kuroma6666 kuroma6666 marked this pull request as ready for review September 14, 2024 17:38
@kuroma6666
Copy link
Contributor Author

@rito528
ご確認よろしくお願いします。

Copy link
Member

@rito528 rito528 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

develop ブランチの変更を取り込んでしまっているようなので、 git rebase --rebase-merges 1_18 などを実行して develop ブランチの変更をコミット履歴から消していただけると助かります🙇‍♂️🙇‍♂️

@kuroma6666
Copy link
Contributor Author

了解です。

@kuroma6666 kuroma6666 force-pushed the feat-digging-stop-mana-fully-consumed branch 2 times, most recently from bb09299 to 509644b Compare September 15, 2024 06:27
@kuroma6666 kuroma6666 force-pushed the feat-digging-stop-mana-fully-consumed branch from 509644b to e7c7cd3 Compare September 15, 2024 06:46
@kuroma6666
Copy link
Contributor Author

@rito528
developブランチの変更を取り込んでしまっていた内容については削除しました。

Copy link
Member

@rito528 rito528 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

一旦2つ変更をお願いします

@kuroma6666
Copy link
Contributor Author

kuroma6666 commented Sep 21, 2024

一旦2つ変更をお願いします

@rito528
一旦変更かけました

@kuroma6666
Copy link
Contributor Author

@rito528
レビュー内容について対応実施しました、再確認お願いします。

Copy link
Member

@rito528 rito528 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

テーブル構成が変わることで今と実装がかなり変わりそうなので、一度以下の内容の変更をお願いします!

@@ -28,6 +28,11 @@ trait ManaManipulation[F[_]] {
*/
def tryAcquire(amount: ManaAmount): F[Option[ManaAmount]]

/**
* `amount` だけマナを消費することができれば `true`、消費できなければ `false` を返す作用
Copy link
Member

@rito528 rito528 Sep 22, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

「消費することができれば」と書いてしまうと「マナを消費することが可能ならばマナ消費する関数」であると捉えられる可能性があるので、「消費することが可能ならば」と書いたほうが齟齬が生じない表現になると思います

Suggested change
* `amount` だけマナを消費することができれば `true`、消費できなければ `false` を返す作用
* `amount` だけマナを消費することが可能ならば `true`、そうでないなら `false` を返す作用

Comment on lines +116 to +171
// プレイヤーのY座標
val playerLocY = player.getLocation.getBlockY - 1
// スキル破壊範囲
val skillArea = BreakArea(selectedSkill, skillState.usageMode)
// 破壊エリアリスト
val breakAreaList = skillArea.makeBreakArea(player).unsafeRunSync()
// 複数種類ブロック同時破壊設定
val isMultiTypeBreakingSkillEnabled =
BreakUtil.performsMultipleIDBlockBreakWhenUsingSkills(player).unsafeRunSync()
// 破壊範囲のブロック計算
val totalBreakRangeVolume = {
val breakLength = skillArea.breakLength
breakLength.x * breakLength.y * breakLength.z * skillArea.breakNum
}
// ブロック探索結果
val blockSearchResult
: AxisAlignedCuboid => (List[BlockBreakableBySkill], List[Block], List[Block]) = {
breakArea: AxisAlignedCuboid =>
val BlockSearching.Result(breakBlocks, waterBlocks, lavaBlocks) =
BlockSearching
.searchForBlocksBreakableWithSkill(player, breakArea.gridPoints(), block)
.unsafeRunSync()
.filterSolids(targetBlock =>
isMultiTypeBreakingSkillEnabled || BlockSearching
.multiTypeBreakingFilterPredicate(block)(targetBlock)
)
.filterAll(targetBlock =>
player.isSneaking || targetBlock
.getLocation
.getBlockY > playerLocY || targetBlock == block
)
(breakBlocks, waterBlocks, lavaBlocks)
}

// 消費マナが不足しているか判定
breakAreaList.foreach { breakArea =>
val (breakBlocks, _, _) = blockSearchResult(breakArea)
// 破壊範囲で消費されるマナ計算
val manaToConsumeOnBreakArea = ManaAmount {
(gravity + 1) * selectedSkill.manaCost * (breakBlocks.size + 1).toDouble / totalBreakRangeVolume
}
// 消費マナが不足している場合は処理を終了
manaApi.manaAmount(player).canAcquire(manaToConsumeOnBreakArea).unsafeRunSync() match {
case false if isBreakBlockManaFullyConsumed(player) =>
event.setCancelled(true)
return
case _ =>
}
}

// 追加マナ獲得
manaApi
.manaAmount(player)
.restoreAbsolute(ManaAmount(BreakUtil.calcManaDrop(player)))
.unsafeRunSync()

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ここの差分は、実際のワールドの探索などのコードを含んでいることと、レガシーコードなこともあり正確な読み取りが難しい(大きな変更をするとバグが出る可能性が高い)ので、(まとめで定義したい気持ちはとても良くわかりますが)似たようなコードが複製されていてもいいので、この PR の目的の差分以外が出ない状態にしていただけると大変助かります🙇‍♂️🙇‍♂️

Comment on lines +408 to +421
def isBreakBlockManaFullyConsumed(player: Player): Boolean = {

val isBreakBlockManaFullyConsumed = SeichiAssist
.instance
.breakSkillTriggerConfigSystem
.api
.breakSkillTriggerConfig(player, BreakSkillTriggerConfigKey.ManaFullyConsumed)
.unsafeRunSync()

if (isBreakBlockManaFullyConsumed) {
ActionBarMessageEffect(s"${RED}マナ切れでブロック破壊を止めるスキルは有効化されています").run(player).unsafeRunSync()
}
isBreakBlockManaFullyConsumed
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
def isBreakBlockManaFullyConsumed(player: Player): Boolean = {
val isBreakBlockManaFullyConsumed = SeichiAssist
.instance
.breakSkillTriggerConfigSystem
.api
.breakSkillTriggerConfig(player, BreakSkillTriggerConfigKey.ManaFullyConsumed)
.unsafeRunSync()
if (isBreakBlockManaFullyConsumed) {
ActionBarMessageEffect(s"${RED}マナ切れでブロック破壊を止めるスキルは有効化されています").run(player).unsafeRunSync()
}
isBreakBlockManaFullyConsumed
}
def isBreakBlockManaFullyConsumed(player: Player): IO[Boolean] = {
for {
isBreakBlockManaFullyConsumed <- SeichiAssist
.instance
.breakSkillTriggerConfigSystem
.api
.breakSkillTriggerConfig(player, BreakSkillTriggerConfigKey.ManaFullyConsumed)
_ <- ActionBarMessageEffect(s"${RED}マナ切れでブロック破壊を止めるスキルは有効化されています")
.run(player)
.whenA(isBreakBlockManaFullyConsumed)
} yield isBreakBlockManaFullyConsumed
}

Comment on lines +3 to +9
CREATE TABLE player_break_trigger_preference(
uuid CHAR(36) NOT NULL,
trigger_category ENUM('ManaFullyConsumed') NOT NULL,
do_not_break BOOL NOT NULL DEFAULT FALSE,
PRIMARY KEY(uuid, trigger_category),
INDEX index_player_break_trigger_preference_on_uuid (uuid)
);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

このテーブルで扱うデータは「マナがないときにスキルの発動を抑制するかどうか」ということだけなので、trigger_category カラムが ENUM で複数の値を持つことができる必要がないと思います(あくまで設定が有効か無効かの2値のみを扱うので)
なので、以下のようなテーブルにすると良いと思います。

Suggested change
CREATE TABLE player_break_trigger_preference(
uuid CHAR(36) NOT NULL,
trigger_category ENUM('ManaFullyConsumed') NOT NULL,
do_not_break BOOL NOT NULL DEFAULT FALSE,
PRIMARY KEY(uuid, trigger_category),
INDEX index_player_break_trigger_preference_on_uuid (uuid)
);
CREATE TABLE player_break_suppression_preference(
uuid CHAR(36) NOT NULL,
do_break_suppression_due_to_mana BOOL NOT NULL DEFAULT FALSE,
FOREIGN KEY fk_player_break_suppression_preference_uuid REFERENCES playerdata(uuid)
);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants