MOD(BaseMODなどの非公式なもの)について議論?する場所です
Library Of RuinaのMODは制作者の想定していないものであり、場合によってはゲームを壊す可能性があります
また、MODはけして良いものではありません。ゲームバランスを崩すような過度な改変は不快に思う方や、怒りを覚える方がいます。
MDOはゲームに新たなコンテンツを追加することが出来ます。これらのことに気を付けてゲームとして楽しめるMOD制作をしていきましょう。
MOD(BaseMODなどの非公式なもの)について議論?する場所です
Library Of RuinaのMODは制作者の想定していないものであり、場合によってはゲームを壊す可能性があります
また、MODはけして良いものではありません。ゲームバランスを崩すような過度な改変は不快に思う方や、怒りを覚える方がいます。
MDOはゲームに新たなコンテンツを追加することが出来ます。これらのことに気を付けてゲームとして楽しめるMOD制作をしていきましょう。
いろいろ試した結果MapManagerはUnity上でプレハブ化されたオブジェクトから呼び出されているのでこちらで下手にいじるのは危険だという結論に達しました(普通にやってもスクリプトが動かず最悪ゲームが停止します)
幻想体セリフのIndexは各MapManagerの中で設定されていますが肝心の呼び出し先がAssetの中のxmlになっているようなのでこちらも私の技術では不可能でした
BGMだけならだいぶ前に上に挙げたように
OnRoundStart()に
int emotionTotalCoinNumber = Singleton<StageController>.Instance.GetCurrentStageFloorModel().team.emotionTotalCoinNumber;
Singleton<StageController>.Instance.GetCurrentWaveModel().team.emotionTotalBonus = emotionTotalCoinNumber + 2;
(感情コインの有利不利で敵のBGMかセフィラBGMか変わるので敵のBGMに固定)
を追加してから、
任意のタイミングで
SingletonBehavior<BattleSoundManager>.Instance.ChangeFinalCreatureTheme_Roland(0);
(ローラン戦第1段階BGMの場合。詳しくはBattleSoundManagerとかEnemyTeamManagerとか覗いてください)
AudioClip[] audio = new AudioClip[1]{SingletonBehavior<BattleSoundManager>.Instance.CurrentPlayingTheme.clip};
AudioClip[] audio2 = SingletonBehavior<BattleSoundManager>.Instance.SetEnemyTheme(audio);
(敵のBGMリスト(戦闘中に急に流れる接待準備画面めいたあのBGM)を変更したBGMに挿げ替える)
でいけます(bool変数などでChange~Themaの部分以降は再起動しないように制御してください)
WorkShopからのサブスクライブ時やゲーム起動時にAudioCripがどこに格納されるかがわかればStoryBGMから読み取って最終文にぶちこめば外部音声も再生できそうです
(追記)
StoryBGMの場所のアクセスの仕方は分かりましたが読み取りにコルーチンを使っているため現在私たちが使えるコードでは処理は難しいと判断しました。一応アクセスパスの詳細を下記に記しておきます
string modId = "TestMod"
string audioName = "test.ogg";
string basePath = Singleton<ModContentManager>.Instance.GetModPath(modId);
string modBgmPath = ModUtil.GetModBgmPath(basePath);
//上記までは作動を確認
//下記が問題のコルーチン。現在作れるパッシブ、バフ、ダイス能力、ページ能力などではMonoBehaviourやEventSystemが継承できないのとそもそもEventSystemを新たに生成するのは危険極まりなさそうなのでこのコルーチンを制御する術が無いと思われます。ちなみにコールバックメソッドは元の記述から変更しています
AudioUtil.LoadAudioCoroutine(Path.Combine(modBgmPath, audioName), (Action<AudioClip>)(c => SingletonBehavior<BattleSoundManager>.Instance.SetEnemyTheme(new AudioClip[1] { c })));
詳細を知りたい方はStoryManagerのLoadAndPlayBackgroundMusicメソッドを参照してください
というかそもそも公式のアプデを待った方がよさそう
MOD招待についてなんですが、特定の司書だけ使える設定とかってありますか?
特定の階層のみ使用可能にするならstageInfoに<floorOnly>(追加したい階層のSephirahType)</floorOnly>でいけます。複数階層指定したい場合もそのまま直下にSephirahTypeを変えてコピーで大丈夫です
特定司書のみ参加可能な設定に関しては現状ではおそらくできません。
赤い霧戦、オリヴィエ・楽団アルガリア戦などでの特定司書のみ参加可能の設定はBattleUnitModelのisLockUnitメソッド内のこちらが操作できない条件文によって判断されているためです。
なるほど ありがとうございます もう一つ聞きたいのですがDiceCardSelfAbilityの説明文追加はどう書き込むのでしょうか
すみません。既出でしたら申し訳ないのですが質問がしたいです。
・バニラのパッシブスキルのコードはIDを使ってどうやったらのぞけるのか。
・特定の味方が生きている際に発動するパッシブを作りたいのですが、
パッシブで特定の味方を指定する方法とその味方の生存を判別するためにはどのifをかければいいでしょうか。
>> DiceCardSelfAbilityの説明文追加はどう書き込むのでしょうか
手引きのサンプルにも書いてありますが、こんな感じです。
public class DiceCardSelfAbility_xxxxxxxx : DiceCardSelfAbilityBase
{
public static string Desc = "[使用時] 光3回復"; ←これがカードの説明欄に出る
public override void xxxxxxxxx()
{
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}
}
>> バニラのパッシブスキルのコードはIDを使ってどうやったらのぞけるのか。
IDだけ知りたいならパッシブスキル一覧のID列がそれ。
>> 特定の味方が生きている際に発動するパッシブを作りたいのですが
とりあえずパッシブスキル「連帯」の中身が知りたいってことだと思うのでまるっと載せときます
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);
}
}
}
特定の味方、という部分に着目するなら、とりあえずAliveListをExistメソッドで探すとして、
味方を判別する方法に
①.unitdata.isSephirah(指定司書かどうかを判断)
②舞台開始時にバフを付けてHasBuf<>()メソッドで判断
③.unitdata.bookItem.bookId(装備コアペのId)
なんかがパッと思いつきます
「特定の味方」をどのように想定しているのかで色々変わってくると思うのでそのスキルの詳しい仕様などを教えていただければもう少し踏み込んだアドバイスができると思います
あなたの考えは?