ゲーム(仮称)_スキル関連
ゲーム(仮称)
スキル、また、コマンド自体の仕組みをどこまで作ったかおさらいしておく。
というよりかなり見づらいのでリファクタリングが必要。
リファクタリングリスト
✅はほぼ対応して動作確認もしたということで。
味方
ATTACK ✅
SKILL ✅
味方対象
特殊系 ✅
回復系 ✅
バフ系 ✅
敵対象
攻撃系 ✅
範囲対象
特殊系 ✅
攻撃系 ✅
回復系 ✅
バフ系 ✅
ITEM
味方対象
回復系 ✅
バフ系 ✅
敵対象
攻撃系 ✅
範囲対象
攻撃系 ✅
回復系 ✅
バフ系 ✅
DEFENCE✅
ESCAPE ✅
敵
ATTACK ✅
調整していく
味方
SKILL: バフ系
防御した味方にバフをかけるとエラーになる
$buffsの配列が異なるからだと思う
code:php
# DEFENSE
$buffs = [
// 10の場合、+5されて合計15になる
'buffed_def' => ceil((int) $data->value_def * 0.5),
'remaining_turn' => 1,
'buffed_from' => 'DEFENSE',
];
# SKILL 例えば 60: ガードスペル
$buffs = [
'buffed_skill_id' => $selected_skill->id,
'buffed_skill_name' => $selected_skill->name,
'buffed_def' => ceil($opponents_data$opponents_index->value_def * $selected_skill->skill_percent),
'remaining_turn' => $selected_skill->buff_turn,
];
storePartyBuffの部分で、エラーになる
Debugbar::debug($already_buff['buffed_skill_id']);
防御で付与されたバフに、buffed_skill_idがないので、undefined array keyとなる
バフの配列を定数にして使い回す。影響範囲がそこそこあるため1つずつ潰していく
DEFENSE
バフを調整する前に、思ったこと
まずstdClass->で使うのか、array['']で呼ぶのかを絶対に決めた方がいい
型が結構やばいことになっている
arrayで呼べるようにしたい。
大改修
collectionは使ってもいい。ただ、arrayの形で呼ぶようにする。
バフの配列の形について
配列を入れていく感じになる。
code:json
"buffs": [
{
"buffed_int": -60,
"buffed_str": 60,
"buffed_from": "SKILL",
"buffed_item_id": null,
"remaining_turn": 5,
"buffed_skill_id": 45,
"buffed_item_name": null,
"buffed_skill_name": "バトルメイジ"
},
{
"buffed_int": -60,
"buffed_str": 60,
"buffed_from": "SKILL",
"buffed_item_id": null,
"remaining_turn": 5,
"buffed_skill_id": 45,
"buffed_item_name": null,
"buffed_skill_name": "バトルメイジ"
},
],
DEFENCEのバフ
code:php
case 'DEFENCE':
// 防御は現状味方だけだが、敵も作るならelseに書けば良い。
if ($data->is_enemy === false) {
// 防御というバフを1ターン、150%の補正でかけておく
Debugbar::debug("【防御】使用者: {$data->name} ");
$buffs = [
// 10の場合、+5されて合計15になる
'buffed_def' => ceil((int) $data->value_def * 0.5),
'remaining_turn' => 1,
'buffed_from' => 'DEFENCE',
];
$data->buffs[] = $buffs;
$logs->push("{$data->name}は防御の構えを取った!");
$buffsに新しいバフを入れて、$data->buffs[]にinsertしている感じ。
なので
json時点では、[]という空の入れ物を仕込んでおく
防御コマンドとかの時に、テンプレートの配列をベースにしてそこに値を入れていく感じにする
で良さそう
防御バフ
初回はバフが配列ベースなのでOK
2回目以降は、jsonをcollectionで取った後、さらにその中の要素になるのでstdClassが返ってくる
ヘルパで状況別に取得方法を分別できるようなファイルを作った
ターン終了後、バフの調整処理
調整できた
SKILLのバフ
例えば、バトルメイジ
例えば、ガードアップ
例えば、ワイドガード
全部動いているので大丈夫になったかも。
ITEMのバフ
対応。
バフ(及び、ワイドガードの特殊)は一旦大丈夫そう。残りは攻撃系と回復系。
攻撃系
SKILL
例えば、プチブラスト
例えば、マナエクスプロージョン
例えば、ミドルブロウ
例えば、ミドルキック
動いている。
ITEM
例えば、ミニボム
例えば、ターミネイトボム
例えば、エーテルカプセル
例えば、エーテルクリスタル
大丈夫そう!
回復系
SKILL
例えば、プチヒール
例えば、ポップヒール
ITEM
回復系アイテム使った。
問題なさそう
いい感じかも!
? TARGET_RANGE_ALLなどの定数は、モデルで管理するのではなくConstantsファイルとかで定義してく
BUFFS_DEFAULT_DATAの配列
ATTACK_NO_TYPE とかのタイプは、Constantsファイルで管理するようにしよう
それかまあわんちゃんenumを使うか。
せっかくなので、enumを使ってみる。
例えば以下なら、AttackType.phpとかに分類して書いていく
code:php
public const ATTACK_NO_TYPE = 0; // 分類なし(ワイドガードなど)
public const ATTACK_PHYSICAL_TYPE = 1; // 物理
public const ATTACK_MAGIC_TYPE = 2; // 魔法
...
定数配列も定義する
これはenumより、定数ファイルを作った方がいい
この辺
PLAYERS_JSON_SKILLS_DEFAULT_DATA
PLAYERS_JSON_ITEMS_DEFAULT_DATA
ENEMY_DROPS_DEFAULT_DATA
PLAYERS_JSON_DEFAULT_DATA
ENEMIES_JSON_DEFAULT_DATA
BUFFS_DEFAULT_DATA
全て戦闘に関するもの
いい感じ。
ステージクリア後、HP,APが回復するようにする
いつからか回復しなくなってるので、調整する
ステージ2以降のbattle_stateは、戦闘終了後に作成される。
createPlayersDataで昔は管理していたが、jsonで戦闘を調整するようになってから使ってない
無理にこれを使わず、バトル終了後に調整するメソッドを作ればいい
フィールドクリア後もバフが続いているので、リセットが必要
対応!
25.4.10
味方のスキルを軽く作ってみよう
色々やってきたので、ゆるく作ってすぐ動くようになるか検証してみるとよい
治療師
ライフリカバリ
skillシーダー追加
skill_requirementシーダーに必要なら書く
Skillモデル、decideExecSkillに処理を追加(breakを忘れずに)
これで動く。お〜
弓馭者
ダメージ与えつつデバフを与えてみたい!それか自分にバフ。
自分になら一旦できるかも。ウインドアクセル
作れた
? 味方しか選択できず、味方に攻撃しちゃうので直す
vue側が悪さしている。effect_typeが攻撃なら敵を、そうでないなら味方を指定する形になっている
skillテーブルに、effect_typeが特殊の場合、味方を選ぶか敵を選ぶかのカラムを作ろう
is_target_enemyとか。
デバフもかけるなら、なおさらやった方が良いだろう。
$ php artisan make:migration add_column_to_rpg_skills_table
実装。いい感じだ!
ブレイクボウガン
デバフを実装してみようか。
特殊と、storeParty系のログを関数にまとめる ✅
簡易的にはまとめた。
特殊スキルが、先制となってしまう(ワイドガードの名残)ので、素早さ調整をする ✅
これもフラグかな。直した
? デバフ時、値をマイナスにはならないようにする
DEFがバフ込みで-10とか、そうなるとインフレしそう。
? selected_skill_idという項目を調整する
selected_skillという配列にして使い回す方が良さそう。
メモ
属性という概念について
エレメントの処理を考えるのは大変なので特効という扱いにすると楽かも。
ダメージ与える時にこのフラグ持ってたらクリティカルみたいな感じで。