feat: 萨米肉鸽增加凹远见密文板

This commit is contained in:
Lancarus
2024-03-09 12:17:13 +08:00
parent f12323deeb
commit bf73e14937
14 changed files with 112 additions and 15 deletions

View File

@@ -100,6 +100,9 @@ bool asst::RoguelikeTask::set_params(const json::value& params)
// 是否凹指定干员开局直升
m_roguelike_config_ptr->set_start_with_elite_two(params.get("start_with_elite_two", false));
m_roguelike_config_ptr->set_only_start_with_elite_two(params.get("only_start_with_elite_two", false));
// 是否凹开局远见密文板
m_roguelike_config_ptr->set_first_floor_foldartal(params.contains("first_floor_foldartal"));
m_roguelike_config_ptr->set_start_floor_foldartal(params.get("first_floor_foldartal", ""));
// 是否生活队凹开局板子
m_roguelike_config_ptr->set_start_foldartal(params.contains("start_foldartal_list"));

View File

@@ -55,6 +55,10 @@ namespace asst
bool get_start_with_elite_two() const { return m_start_with_elite_two; }
void set_only_start_with_elite_two(bool value) { m_only_start_with_elite_two = value; }
bool get_only_start_with_elite_two() const { return m_only_start_with_elite_two; }
void set_first_floor_foldartal(bool first_floor_foldartal) { m_first_floor_foldartal = first_floor_foldartal; }
bool get_first_floor_foldartal() const { return m_first_floor_foldartal; }
void set_start_floor_foldartal(std::string value) { m_start_floor_foldartal = value; }
std::string get_start_floor_foldartal() const { return m_start_floor_foldartal; }
void set_start_foldartal(bool start_foldartal) { m_start_foldartal = start_foldartal; }
bool get_start_foldartal() const { return m_start_foldartal; }
void set_start_foldartal_list(std::vector<std::string> string) { m_start_foldartal_list = string; }
@@ -70,6 +74,8 @@ namespace asst
int m_difficulty = 0; // 难度
bool m_start_with_elite_two = false; // 在刷开局模式下凹开局干员精二直升
bool m_only_start_with_elite_two = false; // 只凹开局干员精二直升且不进行作战
bool m_first_floor_foldartal = false; // 凹远见密文板
std::string m_start_floor_foldartal; // 需要凹的远见
bool m_start_foldartal = false; // 生活队凹开局密文板
std::vector<std::string> m_start_foldartal_list; // 需要凹的板子
int m_invest_maximum = 0; // 投资次数上限
@@ -101,16 +107,16 @@ namespace asst
const std::vector<std::string>& get_foldartal() const { return m_foldartal; }
private:
int m_recruitment_count = 0; // 招募次数
bool m_recruitment_starts_complete = false; // 开局干员是否已经招募
bool m_recruitment_team_complete = false; // 阵容是否完备
bool m_trader_no_longer_buy = false; // 不再购买藏品
std::string m_core_char; // 开局干员名
bool m_team_full_without_rookie = false;
int m_recruitment_count = 0; // 招募次数
bool m_recruitment_starts_complete = false; // 开局干员是否已经招募
bool m_recruitment_team_complete = false; // 阵容是否完备
bool m_trader_no_longer_buy = false; // 不再购买藏品
std::string m_core_char; // 开局干员名
bool m_team_full_without_rookie = false; // 编队内没有预干员
bool m_use_support = false; // 开局干员是否为助战干员
bool m_use_nonfriend_support = false; // 是否可以是非好友助战干员
std::unordered_map<std::string, RoguelikeOper> m_oper; // 干员精英&等级
std::optional<std::string> m_foldartal_floor; // 当前层的预见密文板,在下一层获得
std::vector<std::string> m_foldartal; // 所有密文板
std::vector<std::string> m_foldartal; // 所有已获得密文板
};
} // namespace asst

View File

@@ -37,9 +37,9 @@ bool asst::RoguelikeDifficultySelectionTaskPlugin::_run()
// 当前难度
int difficulty = m_config->get_difficulty();
// 是否只凹直升
bool only_start_with_elite_two = m_config->get_only_start_with_elite_two();
if (m_config->get_theme() != RoguelikeTheme::Phantom && mode == RoguelikeMode::Collectible && !only_start_with_elite_two) {
// 是否不进行作战
bool no_battle = m_config->get_only_start_with_elite_two() || m_config->get_first_floor_foldartal();
if (m_config->get_theme() != RoguelikeTheme::Phantom && mode == RoguelikeMode::Collectible && !no_battle) {
if (difficulty == INT_MAX) {
ProcessTask(*this, { m_config->get_theme() + "@Roguelike@ChooseDifficulty_Hardest" }).run();
}

View File

@@ -2,6 +2,7 @@
#include "Controller/Controller.h"
#include "Status.h"
#include "Task/ProcessTask.h"
#include "Utils/Logger.hpp"
#include "Vision/OCRer.h"
@@ -78,7 +79,26 @@ void asst::RoguelikeFoldartalGainTaskPlugin::enter_next_floor()
OCRer analyzer(ctrler()->get_image());
analyzer.set_task_info(m_config->get_theme() + "@Roguelike@FoldartalGainOcrNextLevel");
if (analyzer.analyze()) {
foldartal_floor = analyzer.get_result().front().text;
std::string foldartar_will_get_next_floor = analyzer.get_result().front().text;
foldartal_floor = foldartar_will_get_next_floor;
auto info = basic_info_with_what("FoldartalGainOcrNextLevel");
info["details"]["foldartal"] = foldartar_will_get_next_floor;
callback(AsstMsg::SubTaskExtraInfo, info);
if (m_config->get_first_floor_foldartal()) {
Log.info("Foldartal will get next floor:", foldartar_will_get_next_floor);
if (foldartar_will_get_next_floor == m_config->get_start_floor_foldartal()) {
m_task_ptr->set_enable(false);
}
else {
ProcessTask(*this, { m_config->get_theme() + "@Roguelike@NextLevel" })
.set_times_limit("Roguelike@StrategyChange", 0)
.run();
ProcessTask(*this, { m_config->get_theme() + "@Roguelike@ExitThenAbandon" })
.set_times_limit("Roguelike@Abandon", 0)
.run();
}
}
}
m_config->set_foldartal_floor(std::move(foldartal_floor));
}

View File

@@ -105,6 +105,8 @@ namespace MaaWpfGui.Constants
public const string RoguelikeCoreChar = "Roguelike.CoreChar";
public const string RoguelikeStartWithEliteTwo = "Roguelike.RoguelikeStartWithEliteTwo";
public const string RoguelikeOnlyStartWithEliteTwo = "Roguelike.RoguelikeOnlyStartWithEliteTwo";
public const string Roguelike3FirstFloorFoldartal = "Roguelike.Roguelike3FirstFloorFoldartal";
public const string Roguelike3StartFloorFoldartal = "Roguelike.Roguelike3StartFloorFoldartal";
public const string Roguelike3NewSquad2StartingFoldartal = "Roguelike.Roguelike3NewSquad2StartingFoldartal";
public const string Roguelike3NewSquad2StartingFoldartals = "Roguelike.Roguelike3NewSquad2StartingFoldartals";
public const string RoguelikeUseSupportUnit = "Roguelike.RoguelikeUseSupportUnit";

View File

@@ -1237,6 +1237,10 @@ namespace MaaWpfGui.Main
Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("RoguelikeEvent") + $" {subTaskDetails["name"]}");
break;
case "FoldartalGainOcrNextLevel":
Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("FoldartalGainOcrNextLevel") + $" {subTaskDetails["foldartal"]}");
break;
case "PenguinId":
{
string id = subTaskDetails["id"]?.ToString();
@@ -2039,6 +2043,8 @@ namespace MaaWpfGui.Main
/// <param name="coreChar"><paramref name="coreChar"/> TODO.</param>
/// <param name="startWithEliteTwo">是否凹开局直升</param>
/// <param name="onlyStartWithEliteTwo">是否只凹开局直升,不进行作战</param>
/// <param name="roguelike3FirstFloorFoldartal">凹第一层远见板子</param>
/// <param name="roguelike3StartFloorFoldartal">需要凹的板子</param>
/// <param name="roguelike3NewSquad2StartingFoldartal">是否在萨米肉鸽生活队凹开局板子</param>
/// <param name="roguelike3NewSquad2StartingFoldartals">需要凹的板子,用;连接的字符串</param>
/// <param name="useSupport">是否core_char使用好友助战</param>
@@ -2047,7 +2053,9 @@ namespace MaaWpfGui.Main
/// <param name="refreshTraderWithDice">是否用骰子刷新商店购买特殊商品,目前支持水月肉鸽的指路鳞</param>
/// <returns>是否成功。</returns>
public bool AsstAppendRoguelike(int mode, int starts, bool investmentEnabled, bool investmentEnterSecondFloor, int invests, bool stopWhenFull,
string squad, string roles, string coreChar, bool startWithEliteTwo, bool onlyStartWithEliteTwo, bool roguelike3NewSquad2StartingFoldartal, string roguelike3NewSquad2StartingFoldartals, bool useSupport, bool enableNonFriendSupport, string theme, bool refreshTraderWithDice)
string squad, string roles, string coreChar, bool startWithEliteTwo, bool onlyStartWithEliteTwo, bool roguelike3FirstFloorFoldartal,
string roguelike3StartFloorFoldartal, bool roguelike3NewSquad2StartingFoldartal, string roguelike3NewSquad2StartingFoldartals,
bool useSupport, bool enableNonFriendSupport, string theme, bool refreshTraderWithDice)
{
var taskParams = new JObject
{
@@ -2081,6 +2089,11 @@ namespace MaaWpfGui.Main
taskParams["start_with_elite_two"] = mode == 4 && theme != "Phantom" && startWithEliteTwo;
taskParams["only_start_with_elite_two"] = mode == 4 && theme != "Phantom" && startWithEliteTwo && onlyStartWithEliteTwo;
if (mode == 4 && theme == "Sami" && roguelike3FirstFloorFoldartal && roguelike3StartFloorFoldartal.Length > 0)
{
taskParams["first_floor_foldartal"] = roguelike3StartFloorFoldartal;
}
if (mode == 4 && theme == "Sami" && roguelike3NewSquad2StartingFoldartal && roguelike3NewSquad2StartingFoldartals.Length > 0)
{
taskParams["start_foldartal_list"] = new JArray(roguelike3NewSquad2StartingFoldartals.Trim().Split(';').Where(i => !string.IsNullOrEmpty(i)).Take(3));

View File

@@ -115,6 +115,7 @@
<system:String x:Key="RoguelikeStartingCoreCharNotFound">The agent entered「{0}」is not in battle_data. Check that the name entered is correct, or check the maa resource version.</system:String>
<system:String x:Key="RoguelikeStartWithEliteTwo">Repeat for「Starting Operator」Elite 2</system:String>
<system:String x:Key="RoguelikeOnlyStartWithEliteTwo">Only Repeat for「Starting Operator」Elite 2, No Battle</system:String>
<system:String x:Key="Roguelike3FirstFloorFoldartal">Repeat for foldartal foreseed first floorNo Battle</system:String>
<!--<system:String x:Key="Roguelike3NewSquad2StartingFoldartal">生活队凹开局密文板</system:String>
<system:String x:Key="Roguelike3NewSquad2StartingFoldartalTip">Write up to three and Separate with ; </system:String>-->
<system:String x:Key="RoguelikeUseSupportUnit">Select 「Starting Operator」 from support unit list</system:String>
@@ -606,7 +607,7 @@ The video aspect ratio needs to be 16:9 without interference factors such as bla
<system:String x:Key="DropRecognitionError">Drops recognition error</system:String>
<system:String x:Key="GiveUpUploadingPenguins">Abort upload to Penguin Statistics</system:String>
<system:String x:Key="TheEx">No bonus stage, stopped</system:String>
<system:String x:Key="MissingOperators">Operators of the following operator groups are missing: </system:String>
<system:String x:Key="MissingOperators">Operators of the following operator groups are missing:</system:String>
<system:String x:Key="StageQueue">Stage Queue:</system:String>
<system:String x:Key="UnableToAgent">Unable to use PRTS</system:String>
<system:String x:Key="MissionStart">Mission started</system:String>
@@ -639,6 +640,7 @@ The video aspect ratio needs to be 16:9 without interference factors such as bla
<system:String x:Key="EmergencyDps">Node: Emergency Operation</system:String>
<system:String x:Key="DreadfulFoe">Node: Dreadful Foe</system:String>
<system:String x:Key="RoguelikeEvent">Event:</system:String>
<system:String x:Key="FoldartalGainOcrNextLevel">FoldartalForesee:</system:String>
<system:String x:Key="RoguelikeInvestment">Invested {1}(+{0}), deposit: {2}</system:String>
<system:String x:Key="RoguelikeSettlement">Roguelike Settlement: {0}\nExplore: {1} Floor {2} Step\nCombat: {3} / {4} Emergency / {5} BOSS\nRecruit: {6}\nCollectibles: {7}\nDifficulty: {8}\nScore: {9}\nExp: {10}, Skill: {11}</system:String>
<system:String x:Key="CurTimes">Current times</system:String>

View File

@@ -115,8 +115,9 @@
<system:String x:Key="RoguelikeStartingCoreCharNotFound">入力のスタッフ「{0}」がbattle_dataにありません。入力の名前が正しいか、maaリソースのバージョンをチェックしてください。</system:String>
<system:String x:Key="RoguelikeStartWithEliteTwo">「最初のオペレーター」直接昇進</system:String>
<system:String x:Key="RoguelikeOnlyStartWithEliteTwo">指定オペレーターの昇進招集までリセマラし、戦闘を行わない</system:String>
<system:String x:Key="Roguelike3FirstFloorFoldartal">凹第一層遠見暗号文板、戦闘を行わない</system:String>
<system:String x:Key="Roguelike3NewSquad2StartingFoldartal">生活重視分隊で開始、指定された啓示板を取得する</system:String>
<system:String x:Key="Roguelike3NewSquad2StartingFoldartalTip">最大3つ書き込み、半角セミコロン;で区切る</system:String>
<system:String x:Key="Roguelike3NewSquad2StartingFoldartalTip">最大3つ書き込み、半角セミコロン;で区切る</system:String>
<system:String x:Key="RoguelikeUseSupportUnit">「最初のオペレーター」をサポートから選択</system:String>
<system:String x:Key="RoguelikeUseNonFriendSupport">フレンド以外のサポートの使用を許可</system:String>
<system:String x:Key="RoguelikeDelayAbortUntilCombatComplete">戦闘終了まえに「停止」を遅らせる</system:String>
@@ -639,6 +640,7 @@ Bilibili: ログイン インターフェイスに表示されるアカウント
<system:String x:Key="EmergencyDps">ステージ: 緊急作戦</system:String>
<system:String x:Key="DreadfulFoe">ステージ: 悪路凶敵</system:String>
<system:String x:Key="RoguelikeEvent">イベント:</system:String>
<system:String x:Key="FoldartalGainOcrNextLevel">予見暗号文板:</system:String>
<system:String x:Key="RoguelikeInvestment">投資しました: {1}(+{0})、デポジット: {2}</system:String>
<system:String x:Key="RoguelikeSettlement">ローグライク決済: {0}\n探検する: {1} 床 {2} ステップ\n戦闘: {3} / {4} 緊急 / {5} BOSS\nリクルート: {6}\nコレクション: {7}\n困難: {8}\nスコア: {9}\n経験値: {10}, スキル: {11}</system:String>
<system:String x:Key="CurTimes">現在の回数</system:String>

View File

@@ -115,6 +115,7 @@
<system:String x:Key="RoguelikeStartingCoreCharNotFound">입력한 오퍼레이터 「{0}」는 battle_data에 없습니다. 입력한 이름이 올바른지 확인하거나 MAA 리소스 버전을 확인하세요.</system:String>
<system:String x:Key="RoguelikeStartWithEliteTwo">시작 오퍼레이터 2정예화까지 반복</system:String>
<system:String x:Key="RoguelikeOnlyStartWithEliteTwo">시작 오퍼레이터 2정예화까지 반복(전투 X)</system:String>
<system:String x:Key="Roguelike3FirstFloorFoldartal">오목 1 층 원견 밀문판(전투 X)</system:String>
<system:String x:Key="Roguelike3NewSquad2StartingFoldartal">생존지상 분대 목표 암호판 설정</system:String>
<system:String x:Key="Roguelike3NewSquad2StartingFoldartalTip">최대 3개까지 지원하며 ";"로 구분합니다</system:String>
<system:String x:Key="RoguelikeUseSupportUnit">시작 오퍼레이터로 지원 유닛 사용</system:String>
@@ -639,6 +640,7 @@ Bilibili: 로그인 인터페이스에 표시되는 계정 이름(예: 장산)
<system:String x:Key="EmergencyDps">레벨: 긴급 작전</system:String>
<system:String x:Key="DreadfulFoe">레벨: 험난한 길</system:String>
<system:String x:Key="RoguelikeEvent">이벤트:</system:String>
<system:String x:Key="FoldartalGainOcrNextLevel">예견 밀문판:</system:String>
<system:String x:Key="RoguelikeInvestment">각뿔 투자함: {1}(+{0}), 예금: {2}</system:String>
<system:String x:Key="RoguelikeSettlement">로그라이크 종착점: {0}\n클리어 : {1} 구역 {2} 노드\n전투 횟수: {3} 일반 / {4} 정예 / {5} 리더\n모집 횟수 : {6} 회\n수집: {7}\n난이도: {8}\n점수: {9}\n경험치: {10}, 스킬: {11}</system:String>
<system:String x:Key="CurTimes">현재 횟수</system:String>

View File

@@ -115,6 +115,7 @@
<system:String x:Key="RoguelikeStartingCoreCharNotFound">输入的干员「{0}」未在 battle_data 中,请检查输入的名称是否正确,或检查 maa 资源版本。</system:String>
<system:String x:Key="RoguelikeStartWithEliteTwo">凹「开局干员」直升精二</system:String>
<system:String x:Key="RoguelikeOnlyStartWithEliteTwo">只凹「开局干员」直升精二,不进行作战</system:String>
<system:String x:Key="Roguelike3FirstFloorFoldartal">凹第一层远见密文板,不进行作战</system:String>
<system:String x:Key="Roguelike3NewSquad2StartingFoldartal">生活队凹开局密文板</system:String>
<system:String x:Key="Roguelike3NewSquad2StartingFoldartalTip">最多写三个,并用英文分号;隔开</system:String>
<system:String x:Key="RoguelikeUseSupportUnit">「开局干员」使用助战</system:String>
@@ -639,6 +640,7 @@
<system:String x:Key="EmergencyDps">关卡: 紧急作战</system:String>
<system:String x:Key="DreadfulFoe">关卡: 险路恶敌</system:String>
<system:String x:Key="RoguelikeEvent">事件:</system:String>
<system:String x:Key="FoldartalGainOcrNextLevel">预见密文板:</system:String>
<system:String x:Key="RoguelikeInvestment">已投资 {1}(+{0}), 存款: {2}</system:String>
<system:String x:Key="RoguelikeSettlement">肉鸽结算: {0}\n探索: {1} 层 {2} 步\n战斗: {3}/{4} 紧急/{5} BOSS\n招募: {6} 收藏品: {7}\n难度: {8} 得分: {9}\nExp: {10} Skill: {11}</system:String>
<system:String x:Key="CurTimes">当前次数</system:String>

View File

@@ -115,6 +115,7 @@
<system:String x:Key="RoguelikeStartingCoreCharNotFound">輸入的幹員「{0}」未在 battle_data 中,請檢查輸入的名稱是否正確,或檢查 maa 資源版本。</system:String>
<system:String x:Key="RoguelikeStartWithEliteTwo">凹「開局幹員」直升精二</system:String>
<system:String x:Key="RoguelikeOnlyStartWithEliteTwo">只凹「開局幹員」直升精二,不進行作戰</system:String>
<system:String x:Key="Roguelike3FirstFloorFoldartal">凹第一層遠見密文板,不進行作戰</system:String>
<system:String x:Key="Roguelike3NewSquad2StartingFoldartal">生活隊凹開局密文板</system:String>
<system:String x:Key="Roguelike3NewSquad2StartingFoldartalTip">最多寫三個,並用英文分號;隔開</system:String>
<system:String x:Key="RoguelikeUseSupportUnit">「開局幹員」使用助戰</system:String>
@@ -637,6 +638,7 @@
<system:String x:Key="EmergencyDps">關卡: 緊急作戰</system:String>
<system:String x:Key="DreadfulFoe">關卡: 險路惡敵</system:String>
<system:String x:Key="RoguelikeEvent">事件:</system:String>
<system:String x:Key="FoldartalGainOcrNextLevel">預見密文板:</system:String>
<system:String x:Key="RoguelikeInvestment">已投資 {1}(+{0}), 存款: {2}</system:String>
<system:String x:Key="RoguelikeSettlement">肉鴿結算: {0}\n探索: {1} 层 {2} 步\n戰鬥: {3}/{4} 緊急/{5} BOSS\n招募: {6} 收藏品: {7}\n難度: {8} 得分: {9}\nExp: {10} Skill: {11}</system:String>
<system:String x:Key="CurTimes">目前次數</system:String>

View File

@@ -1929,6 +1929,33 @@ namespace MaaWpfGui.ViewModels.UI
}
}
private string _roguelike3FirstFloorFoldartal = ConfigurationHelper.GetValue(ConfigurationKeys.Roguelike3FirstFloorFoldartal, false.ToString());
/// <summary>
/// Gets or sets a value indicating whether core char need start with elite two.
/// </summary>
public bool Roguelike3FirstFloorFoldartal
{
get => bool.Parse(_roguelike3FirstFloorFoldartal);
set
{
SetAndNotify(ref _roguelike3FirstFloorFoldartal, value.ToString());
ConfigurationHelper.SetValue(ConfigurationKeys.Roguelike3FirstFloorFoldartal, value.ToString());
}
}
private string _roguelike3StartFloorFoldartal = ConfigurationHelper.GetValue(ConfigurationKeys.Roguelike3StartFloorFoldartal, string.Empty);
public string Roguelike3StartFloorFoldartal
{
get => _roguelike3StartFloorFoldartal;
set
{
SetAndNotify(ref _roguelike3StartFloorFoldartal, value);
ConfigurationHelper.SetValue(ConfigurationKeys.Roguelike3StartFloorFoldartal, value);
}
}
private string _roguelike3NewSquad2StartingFoldartal = ConfigurationHelper.GetValue(ConfigurationKeys.Roguelike3NewSquad2StartingFoldartal, false.ToString());
/// <summary>

View File

@@ -1393,7 +1393,9 @@ namespace MaaWpfGui.ViewModels.UI
mode, Instances.SettingsViewModel.RoguelikeStartsCount,
Instances.SettingsViewModel.RoguelikeInvestmentEnabled, Instances.SettingsViewModel.RoguelikeInvestmentEnterSecondFloor, Instances.SettingsViewModel.RoguelikeInvestsCount, Instances.SettingsViewModel.RoguelikeStopWhenInvestmentFull,
Instances.SettingsViewModel.RoguelikeSquad, Instances.SettingsViewModel.RoguelikeRoles, DataHelper.GetCharacterByNameOrAlias(Instances.SettingsViewModel.RoguelikeCoreChar)?.Name ?? Instances.SettingsViewModel.RoguelikeCoreChar,
Instances.SettingsViewModel.RoguelikeStartWithEliteTwo, Instances.SettingsViewModel.RoguelikeOnlyStartWithEliteTwo, Instances.SettingsViewModel.Roguelike3NewSquad2StartingFoldartal, Instances.SettingsViewModel.Roguelike3NewSquad2StartingFoldartals,
Instances.SettingsViewModel.RoguelikeStartWithEliteTwo, Instances.SettingsViewModel.RoguelikeOnlyStartWithEliteTwo,
Instances.SettingsViewModel.Roguelike3FirstFloorFoldartal, Instances.SettingsViewModel.Roguelike3StartFloorFoldartal,
Instances.SettingsViewModel.Roguelike3NewSquad2StartingFoldartal, Instances.SettingsViewModel.Roguelike3NewSquad2StartingFoldartals,
Instances.SettingsViewModel.RoguelikeUseSupportUnit, Instances.SettingsViewModel.RoguelikeEnableNonfriendSupport, Instances.SettingsViewModel.RoguelikeTheme, Instances.SettingsViewModel.RoguelikeRefreshTraderWithDice);
}

View File

@@ -139,6 +139,20 @@
TextWrapping="Wrap" />
</CheckBox>
<CheckBox
Margin="0,10"
IsChecked="{Binding Roguelike3FirstFloorFoldartal}"
Visibility="{c:Binding 'RoguelikeMode == &quot;4&quot; and RoguelikeTheme == &quot;Sami&quot; '}">
<TextBlock
Block.TextAlignment="Left"
Text="{DynamicResource Roguelike3FirstFloorFoldartal}"
TextWrapping="Wrap" />
</CheckBox>
<TextBox
IsReadOnly="{c:Binding !Idle}"
Style="{StaticResource TextBoxExtend}"
Text="{Binding Roguelike3StartFloorFoldartal, UpdateSourceTrigger=LostFocus}"
Visibility="{c:Binding 'Roguelike3FirstFloorFoldartal and RoguelikeMode == &quot;4&quot; and RoguelikeTheme == &quot;Sami&quot; '}" />
<CheckBox
Margin="0,10"
IsChecked="{Binding Roguelike3NewSquad2StartingFoldartal}"
Visibility="{c:Binding 'RoguelikeMode == &quot;4&quot; and RoguelikeTheme == &quot;Sami&quot; and RoguelikeSquad == &quot;生活至上分队&quot; '}">