>> 特定の味方が生きている際に発動するパッシブを作りたいのですが
とりあえずパッシブスキル「連帯」の中身が知りたいってことだと思うのでまるっと載せときます
public class PassiveAbility_233001 : PassiveAbilityBase
{
// Token: 0x17000994 RID: 2452
// (get) Token: 0x060056CA RID: 22218 RVA: 0x001CA11E File Offset: 0x001C831E
public override string debugDesc
{
get
{
return "막 종료 시 모든 아군이 살아 있다면 다음 막 힘 1을 얻음. 막 종료 시 모든 아군이 죽은 상태라면 다음 막 힘 2를 잃음 단, 혼자 존재하면 효과가 없다.";
}
}
// Token: 0x060056CB RID: 22219 RVA: 0x001CA128 File Offset: 0x001C8328
public override void OnRoundEnd()
{
if (this.owner.IsDead())
{
return;
}
int count = BattleObjectManager.instance.GetList(this.owner.faction).Count;
int count2 = BattleObjectManager.instance.GetAliveList(this.owner.faction).Count;
if (count <= 1)
{
return;
}
BattleCardTotalResult battleCardResultLog = this.owner.battleCardResultLog;
if (battleCardResultLog != null)
{
battleCardResultLog.SetPassiveAbility(this);
}
if (count == count2)
{
this.owner.bufListDetail.AddKeywordBufByEtc(KeywordBuf.Strength, 1, base.Owner);
}
if (count2 == 1)
{
this.owner.bufListDetail.AddKeywordBufByEtc(KeywordBuf.Weak, 2, base.Owner);
}
}
}
>> バニラのパッシブスキルのコードはIDを使ってどうやったらのぞけるのか。
IDだけ知りたいならパッシブスキル一覧のID列がそれ。
>> DiceCardSelfAbilityの説明文追加はどう書き込むのでしょうか
手引きのサンプルにも書いてありますが、こんな感じです。
public class DiceCardSelfAbility_xxxxxxxx : DiceCardSelfAbilityBase
{
public static string Desc = "[使用時] 光3回復"; ←これがカードの説明欄に出る
public override void xxxxxxxxx()
{
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}
}
ちなみに抜粋したのは「PassiveAbility_902012」からなので、全容を見たかったらこれで探してもらえれば良いかと。
多分T-Veronicaさんが必要としてる情報はこれで全部答えたはず
で、上の処理はOnRoundEndTheLast()から内部呼び出しされてるので、
●次幕開始処理
(OnRoundEndTheLast()って意味のまま受け取ると幕終了の最後の方って認識しちゃうけど、「落ち着ける」の[次の幕開始時]の処理もこれで記述されてるので、多分次幕開始時って認識でいいはず)
=============================================================
public override void OnRoundEndTheLast()
{
// ここら辺はパッシブスキル「止められぬ時」の処理用のコードなので無視でよさげ
if (this._curPhaseCount == 12)
{
if (this._curDeadAllyCount >= 12)
{
this.owner.breakDetail.breakGauge = 0;
this.owner.breakDetail.breakLife = 0;
this.owner.breakDetail.DestroyBreakPoint(null);
this.owner.breakDetail.nextTurnBreak = true;
}
else
{
this.owner.allyCardDetail.AddNewCard(990201, false).temporary = true;
}
BattleUnitBuf battleUnitBuf = this.owner.bufListDetail.GetActivatedBufList().Find((BattleUnitBuf x) => x is BattleUnitBuf_Silence_TraceCount);
if (battleUnitBuf != null)
{
battleUnitBuf.Destroy();
}
this._curDeadAllyCount = 0;
return;
}
// ここまでが無視していいやつ
// 以下が13幕目までの通常時の処理。
// this.KillOverheadAlly();はパッシブ「積もる時間」の「既に4つの「時間の痕跡」がある場合、最も体力が少ない個体を倒して全て司書に該当キャラクターの残体力分ダメージを与える。」の処理。
// this.CreateAlly();がパッシブ「積もる時間」の「幕の開始時「時間の痕跡」1名を生成する。」の処理。
if (this._curPhaseCount > 0)
{
this.KillOverheadAlly();
this.CreateAlly();
}
}
とりあえず全部「沈黙の対価」から抜粋で記載しますね
●キャラ生成部分
====================================================
private void CreateAlly()
{
List<BattleUnitModel> aliveList = BattleObjectManager.instance.GetAliveList(this.owner.faction);
// 生存数が5体(沈黙の対価1体+痕跡4体)未満なら生成処理開始
if (aliveList != null && aliveList.Count < 5)
{
int index = aliveList.Count; // 全部生存してる場合前提で、次に生成する痕跡のインデックスを先に取得してる
foreach (BattleUnitModel battleUnitModel in BattleObjectManager.instance.GetList(this.owner.faction)) // ここから痕跡がどれか死んでる場合の処理
{
if (battleUnitModel.IsDead())
{
index = battleUnitModel.index; // ここで既に死んでる奴のインデックスで書き換え。
break;
}
}
BattleUnitModel battleUnitModel2 = Singleton<StageController>.Instance.AddNewUnit(this.owner.faction, 9090202, index, -1); // 味方陣営に「時間の痕跡」を生成。上の処理で空いてる位置が取れるのでそのインデックスを指定
// ここからは生成した「時間の痕跡」にパッシブを付与してる(これやんないとパッシブを何も持ってないただの置物が出来上がる)
PassiveAbilityBase passiveAbilityBase = battleUnitModel2.passiveDetail.PassiveList.Find((PassiveAbilityBase x) => x is PassiveAbility_902021);
if (passiveAbilityBase == null)
{
passiveAbilityBase = new PassiveAbility_902021();
battleUnitModel2.passiveDetail.AddPassive(passiveAbilityBase);
}
else
{
passiveAbilityBase.OnCreated();
}
// ここ以下は正直よく分からんけど、レンダリング処理やってるあたり、画面表示に反映させるもろもろをやってると思われる
index = 0;
foreach (BattleUnitModel battleUnitModel3 in BattleObjectManager.instance.GetList())
{
SingletonBehavior<UICharacterRenderer>.Instance.SetCharacter(battleUnitModel3.UnitData.unitData, index++, true, false);
}
BattleObjectManager.instance.InitUI();
}
}
割とどうでもいい小ネタ
現状、MODで作ったコアぺは全部「遠近両用」のコアぺだけど以下の設定をすれば「近接専用」や「遠距離専用」に変えることはできる。
============================================================
「EquipPage_~~~~.xml」の<RangeType>のタグの値を書き換えれば変更可能
Hybrid:遠近両用(デフォがこれ)
Melee:近接専用
Range:遠距離専用
>> コアペの専用バトペ欄のOnlyPageはBookModelのSetXmlInfo(BookXmlInfo)で読み取られるが、1.1.0.6a6現在、Attributeでstringを設定できるBookPassiveXmlInfo(コアペパッシブ設定欄)とは異なり、OnlyPage欄にはintしか指定できないため(SetXmlInfo中でもintしか想定していない)、元々ある専用ページの共有指定はできるが、MOD由来の専用ページの指定はできない模様。
EquipPage_Librarian.xmlに無理やり以下みたいな感じで追加してみましたが仰る通り無理でした…
コード見た感じでも、まだ公式の機能として実装されてないみたいですね
=======================
<EquipEffect>
<中略>
<OnlyCard>1</OnlyCard>
<OnlyCard>2</OnlyCard>
</EquipEffect>
=======================
これは目から鱗の情報!ありがとうござます!
解禁みたいなカード追加系バトペ効果作るときってカードIDはどう指定したらいいんでしょうね?
処理自体はもう組みあがってるけど、ツールで作成したカードのIDとベースゲーム側で持ってるカードIDがどう住み分けされてるのかが分からない…
>> パッシブ自作した時にコストの最大値が9なのちょっと困る。
>> 自作MODの報酬で「全ダイス威力+2」を用意したいけど、性能的にコスト10じゃないと釣り合いが取れないから下手に出せない… 機能拡張待つしかないか…
とか思ってたけど、XML直でいじればツール上で設定出来ない項目も含めて作れるか。
(自分が調べるまでもなくFirst Sevenさんが全部答えてくれてた…恥ずかしい…)
パッシブ自作した時にコストの最大値が9なのちょっと困る。
自作MODの報酬で「全ダイス威力+2」を用意したいけど、性能的にコスト10じゃないと釣り合いが取れないから下手に出せない… 機能拡張待つしかないか…
楽団フィリップは多分「PassiveAbility_1401016」
ねじれフィリップは多分「PassiveAbility_1301011」
なーるほど。そういうことか。
敵専用パッシブは敵1体に対して一個だけパッシブが用意されてて、そこに全部のパッシブがまとめて書かれてるくさいですね。
なので見た目上複数に分かれてるパッシブは全部「ハリボテ」で、実際は一個しかパッシブもってない模様。
確かに1301017と周辺のパッシブIDには何も書かれてないですね…
> 使用者の感情レベルを格納する変数って何かわかります…?
int level = this.owner.emotionDetail.EmotionLevel; 多分これですね。
感情レベル上昇時効果は「OnLevelUpEmotion()」なのでで多分コレをオーバーライドしてるはず
パッシブスキルの通番はこっち見れば分かるんで、これと実際のコード比較しながら見るのが多分一番わかりやすそう
BattleCardTotalResult battleCardResultLog = this.owner.battleCardResultLog;
if (battleCardResultLog != null)
{
battleCardResultLog.SetPassiveAbility(this);
}
ダイスロール時に表示するようにするのはこれかぁ…
あと出目干渉系はBeforeRollDice()の方を使うべきと。
この二つが分かっただけで大きく進展できますね!ありがとうございます!
一応上でやってることを説明すると
パッシブアビリティでユジン部長の「死の目」を再現しようとしてた
ダイスロール処理にオーバーライドして独自処理を追加
「BattleDiceBehavior」は現在使用しているダイスのオブジェクト
ApplyDiceStatBonus関数が「対象ダイスにボーナスを適用させる」機能なのでこれを利用
DiceStatBonus型の変数渡す必要があったので新規作成してpower(威力ボーナスと予想)のステータスに上げたい威力の数値を設定
最後にbehavior.ApplyDiceStatBonus(bonus);で適用させて終わり。
一応これで威力の反映だけは出来ました。
(色々納得行ってないのでまだ調べるつもり)