diff --git a/MissionEditor/AITriggerTypes.cpp b/MissionEditor/AITriggerTypes.cpp index 476835d..47ef439 100644 --- a/MissionEditor/AITriggerTypes.cpp +++ b/MissionEditor/AITriggerTypes.cpp @@ -29,6 +29,7 @@ #include "variables.h" #include "functions.h" #include "inlines.h" +#include "IniMega.h" // AI trigger type enumeration @@ -67,7 +68,6 @@ CAITriggerTypes::CAITriggerTypes() : CDialog(CAITriggerTypes::IDD) m_Flag8 = _T(""); m_Flag9 = _T(""); m_Enabled = FALSE; - m_Condition = -1; m_Number = 0; m_Easy = FALSE; m_Medium = FALSE; @@ -75,7 +75,6 @@ CAITriggerTypes::CAITriggerTypes() : CDialog(CAITriggerTypes::IDD) m_BaseDefense = FALSE; m_Skirmish = FALSE; m_Flag5 = _T(""); - m_MultiSide = _T(""); //}}AFX_DATA_INIT } @@ -101,7 +100,7 @@ void CAITriggerTypes::DoDataExchange(CDataExchange* pDX) DDX_Text(pDX, IDC_FLAG4, m_Flag4); DDX_Text(pDX, IDC_NAME, m_Name); DDX_Check(pDX, IDC_ENABLED, m_Enabled); - DDX_CBIndex(pDX, IDC_CONDITION, m_Condition); + DDX_Control(pDX, IDC_CONDITION, m_Condition); DDX_Text(pDX, IDC_NUMBER, m_Number); DDV_MinMaxInt(pDX, m_Number, 0, 256); DDX_Check(pDX, IDC_EASY, m_Easy); @@ -109,10 +108,79 @@ void CAITriggerTypes::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_HARD, m_Hard); DDX_Check(pDX, IDC_BASEDEFENSE, m_BaseDefense); DDX_Check(pDX, IDC_SKIRMISH, m_Skirmish); - DDX_CBString(pDX, IDC_MULTISIDE, m_MultiSide); + DDX_Control(pDX, IDC_MULTISIDE, m_MultiSide); //}}AFX_DATA_MAP } +BOOL CAITriggerTypes::OnInitDialog() +{ + auto const ret = CDialog::OnInitDialog(); + translateUI(); + initMultisideComboBox(); + initConditionOpComboBox(); + + return ret; +} + +void CAITriggerTypes::initMultisideComboBox() +{ + m_MultiSide.InsertString(0, TranslateStringACP("0 None")); + auto const& rules = IniMegaFile::GetRules(); + auto const& items = rules.GetSection("Sides"); + CString buffer; + auto idx = 1; + for (auto& [_, sideName] : g_data["Sides"]) { + // skip speical category + if (sideName.Find(',') >= 0) { + continue; + } + auto const name = TranslateStringACP(sideName); + buffer.Format("%d %s", idx, name.operator LPCSTR()); + m_MultiSide.InsertString(idx, buffer); + idx++; + } +} + +void CAITriggerTypes::initConditionOpComboBox() +{ + m_Condition.InsertString(COND_LT, TranslateStringACP("less than")); + m_Condition.InsertString(COND_LE, TranslateStringACP("less than or equal to")); + m_Condition.InsertString(COND_EQ, TranslateStringACP("equal to")); + m_Condition.InsertString(COND_GE, TranslateStringACP("greater than or equal to")); + m_Condition.InsertString(COND_GT, TranslateStringACP("greater than")); + m_Condition.InsertString(COND_NE, TranslateStringACP("not equal to")); +} + +void CAITriggerTypes::translateUI() +{ + TranslateWindowCaption(*this, "AITriggerCaption"); + TranslateDlgItem(*this, IDC_ADD, "AITriggerAdd"); + TranslateDlgItem(*this, IDC_AITRIGGER_COPY, "AITriggerCopy"); + TranslateDlgItem(*this, IDC_DELETE, "AITriggerDelete"); + + TranslateDlgItem(*this, IDC_ENABLED, "AITriggerEnabled"); + + TranslateDlgItem(*this, IDC_AITRIGGER_T_TYPE, "AITriggerType"); + TranslateDlgItem(*this, IDC_AITRIGGER_T_TTYPE, "AITriggerCategory"); + TranslateDlgItem(*this, IDC_AITRIGGER_T_NAME, "AITriggerName"); + TranslateDlgItem(*this, IDC_AITRIGGER_T_HOUSE, "AITriggerHouse"); + TranslateDlgItem(*this, IDC_AITRIGGER_T_TEAM1, "AITriggerTeamType1"); + TranslateDlgItem(*this, IDC_AITRIGGER_T_TEAM2, "AITriggerTeamType2"); + TranslateDlgItem(*this, IDC_AITRIGGER_T_SIDE, "AITriggerSide"); + TranslateDlgItem(*this, IDC_BASEDEFENSE, "AITriggerBaseDefense"); + TranslateDlgItem(*this, IDC_SKIRMISH, "AITriggerSkirmishAvailable"); + TranslateDlgItem(*this, IDC_EASY, "AITriggerEasyEnable"); + TranslateDlgItem(*this, IDC_MEDIUM, "AITriggerMediumEnable"); + TranslateDlgItem(*this, IDC_HARD, "AITriggerHardEnable"); + TranslateDlgItem(*this, IDC_AITRIGGER_T_WEIGHT, "AITriggerWeightInitial"); + TranslateDlgItem(*this, IDC_AITRIGGER_T_WEIGHT_MIN, "AITriggerWeightMin"); + TranslateDlgItem(*this, IDC_AITRIGGER_T_WEIGHT_MAX, "AITriggerWeightMax"); + TranslateDlgItem(*this, IDC_AITRIGGER_T_ADDITIONAL, "AITriggerAdditional"); + TranslateDlgItem(*this, IDC_AITRIGGER_T_CONDITION, "AITriggerCondition"); + TranslateDlgItem(*this, IDC_AITRIGGER_T_NUM, "AITriggerNumber"); + TranslateDlgItem(*this, IDC_AITRIGGER_T_UNITTYPE, "AITriggerUnitType"); +} + BEGIN_MESSAGE_MAP(CAITriggerTypes, CDialog) //{{AFX_MSG_MAP(CAITriggerTypes) @@ -144,6 +212,7 @@ BEGIN_MESSAGE_MAP(CAITriggerTypes, CDialog) ON_CBN_EDITCHANGE(IDC_MULTISIDE, OnEditchangeMultiside) ON_CBN_SELCHANGE(IDC_MULTISIDE, OnSelchangeMultiside) //}}AFX_MSG_MAP + ON_BN_CLICKED(IDC_AITRIGGER_COPY, &CAITriggerTypes::OnBnClickedAitriggerCopy) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// @@ -173,6 +242,19 @@ void ListObjects(CComboBox& cb) addToUnitType("BuildingTypes"); } + +CString CAITriggerTypes::getCurrentID() +{ + int sel = m_AITriggerType.GetCurSel(); + if (sel < 0) { + return {}; + } + CString aitrigger; + m_AITriggerType.GetLBText(sel, aitrigger); + TruncSpace(aitrigger); + return aitrigger; +} + void CAITriggerTypes::UpdateDialog() { int sel = m_AITriggerType.GetCurSel(); @@ -214,13 +296,10 @@ void CAITriggerTypes::UpdateDialog() void CAITriggerTypes::OnSelchangeAitriggertype() { - int sel = m_AITriggerType.GetCurSel(); - if (sel < 0) return; - - CString aitrigger; - m_AITriggerType.GetLBText(sel, aitrigger); - TruncSpace(aitrigger); - + auto const aitrigger = getCurrentID(); + if (aitrigger.IsEmpty()) { + return; + } AITRIGGERTYPE aitt; Map->GetAITriggerType(Map->GetAITriggerTypeIndex(aitrigger), &aitt); @@ -241,22 +320,20 @@ void CAITriggerTypes::OnSelchangeAitriggertype() m_Skirmish = isTrue(aitt.skirmish); m_Flag4 = aitt.flag4; //m_Flag5=aitt.multihouse; - m_MultiSide = aitt.multihouse; + m_MultiSide.SetCurSel(INIHelper::StringToInteger(aitt.multihouse, 0)); m_BaseDefense = isTrue(aitt.basedefense); m_TeamType2.SetWindowText(aitt.teamtype2); m_Easy = isTrue(aitt.easy); m_Medium = isTrue(aitt.medium); m_Hard = isTrue(aitt.hard); - m_Enabled = FALSE; - CIniFile& ini = Map->GetIniFile(); - if (ini.GetBool("AITriggerTypesEnable", aitrigger)) { - m_Enabled = TRUE; - } + auto const& ini = Map->GetIniFile(); + m_Enabled = ini.GetBool("AITriggerTypesEnable", aitrigger); + AITrigInfo info; info = ConvertToAITrigInfoFromHex((char*)(LPCSTR)aitt.data); - m_Condition = info.Condition; + m_Condition.SetCurSel(info.Condition); m_Number = info.Number; ListObjects(m_UnitType); @@ -440,16 +517,12 @@ void CAITriggerTypes::OnChangeFlag9() void CAITriggerTypes::OnEnabled() { // enable or disable trigger - UpdateData(); - int sel = m_AITriggerType.GetCurSel(); - if (sel < 0) { + auto const aitrigger = getCurrentID(); + if (aitrigger.IsEmpty()) { return; } - CString aitrigger; - m_AITriggerType.GetLBText(sel, aitrigger); - TruncSpace(aitrigger); CIniFile& ini = Map->GetIniFile(); @@ -465,15 +538,11 @@ void CAITriggerTypes::OnEnabled() void CAITriggerTypes::SetAITriggerParam(const char* value, int param) { - int sel = m_AITriggerType.GetCurSel(); - if (sel < 0) { + auto const aitrigger = getCurrentID(); + if (aitrigger.IsEmpty()) { return; } - CString aitrigger; - m_AITriggerType.GetLBText(sel, aitrigger); - TruncSpace(aitrigger); - CIniFile& ini = Map->GetIniFile(); if (auto const pSec = ini.TryGetSection("AITriggerTypes")) { @@ -481,15 +550,37 @@ void CAITriggerTypes::SetAITriggerParam(const char* value, int param) } } -void CAITriggerTypes::OnAdd() +void CAITriggerTypes::addTrigger(CString&& content) { CString ID = GetFreeID(); CIniFile& ini = Map->GetIniFile(); + + ini.SetString("AITriggerTypes", ID, std::move(content)); + + UpdateDialog(); + + // now make current id visible + int i; + for (i = 0; i < m_AITriggerType.GetCount(); i++) { + CString cuString; + m_AITriggerType.GetLBText(i, cuString); + TruncSpace(cuString); + + if (cuString == ID) { + m_AITriggerType.SetCurSel(i); + OnSelchangeAitriggertype(); + } + } +} + +void CAITriggerTypes::OnAdd() +{ + // now try to set a teamtype + auto const& ini = Map->GetIniFile(); CString data = "New AI Trigger,"; - // now try to set a teamtype if (ini["TeamTypes"].Size() > 0) { - data += *ini["TeamTypes"].Nth(0).second; + data += ini["TeamTypes"].Nth(0).second; } else { data += ""; } @@ -517,32 +608,39 @@ void CAITriggerTypes::OnAdd() data += ",1,1,1"; - ini.SetString("AITriggerTypes", ID, data); - - UpdateDialog(); - - // now make current id visible - int i; - for (i = 0; i < m_AITriggerType.GetCount(); i++) { - CString cuString; - m_AITriggerType.GetLBText(i, cuString); - TruncSpace(cuString); - - if (cuString == ID) { - m_AITriggerType.SetCurSel(i); - OnSelchangeAitriggertype(); - } - } + addTrigger(std::move(data)); } + +void CAITriggerTypes::OnBnClickedAitriggerCopy() +{ + auto const aitrigger = getCurrentID(); + if (aitrigger.IsEmpty()) { + return; + } + + auto const& ini = Map->GetIniFile(); + auto const& toCopy = ini.GetString("AITriggerTypes", aitrigger); + ASSERT(!toCopy.IsEmpty()); + auto const nameSplitter = toCopy.Find(','); + ASSERT(nameSplitter > 0); + auto const name = toCopy.Mid(0, nameSplitter); + auto const restExceptName = toCopy.Mid(nameSplitter + 1); + + CString newContent = name; + newContent += " Clone,"; + newContent += restExceptName; + + addTrigger(std::move(newContent)); +} + + void CAITriggerTypes::OnDelete() { - int sel = m_AITriggerType.GetCurSel(); - if (sel < 0) return; - - CString aitrigger; - m_AITriggerType.GetLBText(sel, aitrigger); - TruncSpace(aitrigger); + auto const aitrigger = getCurrentID(); + if (aitrigger.IsEmpty()) { + return; + } CIniFile& ini = Map->GetIniFile(); @@ -616,7 +714,7 @@ void CAITriggerTypes::OnSelchangeCondition() UpdateData(TRUE); AITrigInfo info; - info.Condition = (ConditionEnum)m_Condition; + info.Condition = ConditionEnum(m_Condition.GetCurSel()); info.Number = m_Number; char buffer[65]; @@ -637,7 +735,7 @@ void CAITriggerTypes::OnChangeNumber() AITrigInfo info; memset(&info, 0, sizeof(AITrigInfo)); - info.Condition = (ConditionEnum)m_Condition; + info.Condition = ConditionEnum(m_Condition.GetCurSel()); info.Number = m_Number; char buffer[65]; @@ -713,7 +811,7 @@ void CAITriggerTypes::OnEditchangeMultiside() UpdateData(); CString value; - value = m_MultiSide; + m_MultiSide.GetLBText(m_MultiSide.GetCurSel(), value); TruncSpace(value); diff --git a/MissionEditor/AITriggerTypes.h b/MissionEditor/AITriggerTypes.h index 976cf0a..50596aa 100644 --- a/MissionEditor/AITriggerTypes.h +++ b/MissionEditor/AITriggerTypes.h @@ -66,7 +66,7 @@ public: CString m_Flag8; CString m_Flag9; BOOL m_Enabled; - int m_Condition; + CComboBox m_Condition; int m_Number; BOOL m_Easy; BOOL m_Medium; @@ -74,7 +74,7 @@ public: BOOL m_BaseDefense; BOOL m_Skirmish; CString m_Flag5; - CString m_MultiSide; + CComboBox m_MultiSide; //}}AFX_DATA @@ -82,13 +82,20 @@ public: // generated virtual overwriteables //{{AFX_VIRTUAL(CAITriggerTypes) protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + virtual void DoDataExchange(CDataExchange* pDX) override; // DDX/DDV support + virtual BOOL OnInitDialog() override; //}}AFX_VIRTUAL // implementation -protected: + void translateUI(); + void initMultisideComboBox(); + void initConditionOpComboBox(); + void addTrigger(CString&& content); + CString getCurrentID(); AITrigInfo ConvertToAITrigInfoFromHex(char* aitinfo); + // generated message maps + DECLARE_MESSAGE_MAP() //{{AFX_MSG(CAITriggerTypes) afx_msg void OnSelchangeAitriggertype(); afx_msg void OnChangeName(); @@ -111,6 +118,7 @@ protected: afx_msg void OnChangeFlag9(); afx_msg void OnEnabled(); afx_msg void OnAdd(); + afx_msg void OnBnClickedAitriggerCopy(); afx_msg void OnDelete(); afx_msg void OnEditchangeAitriggertype(); afx_msg void OnSelchangeCondition(); @@ -123,7 +131,6 @@ protected: afx_msg void OnEditchangeMultiside(); afx_msg void OnSelchangeMultiside(); //}}AFX_MSG - DECLARE_MESSAGE_MAP() }; diff --git a/MissionEditor/MissionEditor.rc b/MissionEditor/MissionEditor.rc index b84fb31..7430c5c 100644 --- a/MissionEditor/MissionEditor.rc +++ b/MissionEditor/MissionEditor.rc @@ -887,41 +887,42 @@ END #if defined(APSTUDIO_INVOKED) || defined(RA2_MODE) #if defined(APSTUDIO_INVOKED) -IDD_AITRIGGERTYPES$(RA2_MODE) DIALOG 0, 0, 303, 234 +IDD_AITRIGGERTYPES$(RA2_MODE) DIALOGEX 0, 0, 303, 234 #else -IDD_AITRIGGERTYPES DIALOG 0, 0, 303, 234 +IDD_AITRIGGERTYPES DIALOGEX 0, 0, 303, 234 #endif STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU CAPTION "AI Trigger Types" -FONT 8, "Tahoma" +FONT 8, "Tahoma", 0, 0, 0x0 BEGIN - LTEXT "AI Trigger:",IDC_STATIC,7,7,43,11 + LTEXT "AI Trigger:",IDC_AITRIGGER_T_TYPE,7,7,43,11 COMBOBOX IDC_AITRIGGERTYPE,60,7,236,307,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "Name:",IDC_STATIC,7,63,43,11 + LTEXT "Name:",IDC_AITRIGGER_T_NAME,7,63,43,11 EDITTEXT IDC_NAME,60,64,94,13,ES_AUTOHSCROLL - LTEXT "Teamtype #1:",IDC_STATIC,7,80,43,17 + LTEXT "Teamtype #1:",IDC_AITRIGGER_T_TEAM1,7,80,52,17 COMBOBOX IDC_TEAMTYPE1,60,81,236,81,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP - LTEXT "House:",IDC_STATIC,165,64,50,16 + LTEXT "House:",IDC_AITRIGGER_T_HOUSE,165,64,50,16 COMBOBOX IDC_OWNER,220,64,76,207,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP - LTEXT "Teamtype #2:",IDC_STATIC,7,98,43,17 + LTEXT "Teamtype #2:",IDC_AITRIGGER_T_TEAM2,7,98,49,17 COMBOBOX IDC_TEAMTYPE2,60,98,235,81,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP LTEXT "Techlevel:",IDC_STATIC,280,206,8,11,NOT WS_VISIBLE COMBOBOX IDC_FLAG1,288,222,16,56,CBS_DROPDOWN | NOT WS_VISIBLE | WS_VSCROLL | WS_TABSTOP - LTEXT "Type:",IDC_STATIC,6,44,53,17 + LTEXT "Type:",IDC_AITRIGGER_T_TTYPE,6,44,53,17 COMBOBOX IDC_FLAG2,60,45,235,71,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT "Data:",IDC_DATALABEL,265,204,8,13,NOT WS_VISIBLE COMBOBOX IDC_DATA,287,222,16,128,CBS_DROPDOWN | CBS_AUTOHSCROLL | NOT WS_VISIBLE | WS_VSCROLL | WS_TABSTOP - LTEXT "Weight:",IDC_STATIC,6,150,33,11 + LTEXT "Weight:",IDC_AITRIGGER_T_WEIGHT,6,150,50,11 EDITTEXT IDC_FLOAT1,59,148,56,13,ES_AUTOHSCROLL - LTEXT "MinWeight:",IDC_STATIC,6,165,38,11 + LTEXT "MinWeight:",IDC_AITRIGGER_T_WEIGHT_MIN,6,165,50,11 EDITTEXT IDC_FLOAT2,59,164,56,13,ES_AUTOHSCROLL - LTEXT "MaxWeight:",IDC_STATIC,125,165,40,11 + LTEXT "MaxWeight:",IDC_AITRIGGER_T_WEIGHT_MAX,125,165,40,11 EDITTEXT IDC_FLOAT3,180,164,54,13,ES_AUTOHSCROLL LTEXT "MinDiff:",IDC_STATIC,279,222,8,12,NOT WS_VISIBLE EDITTEXT IDC_FLAG4,291,222,8,12,ES_AUTOHSCROLL | NOT WS_VISIBLE - LTEXT "Multi-Side:",IDC_STATIC,7,115,33,12 - PUSHBUTTON "Delete",IDC_DELETE,220,23,76,13 - PUSHBUTTON "Add",IDC_ADD,140,23,74,13 + LTEXT "Multi-Side:",IDC_AITRIGGER_T_SIDE,7,115,49,12 + PUSHBUTTON "Add",IDC_ADD,140,23,50,13 + PUSHBUTTON "Clone",IDC_AITRIGGER_COPY,190,23,50,13 + PUSHBUTTON "Delete",IDC_DELETE,240,23,50,13 CONTROL "Enabled",IDC_ENABLED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,60,23,76,11 CONTROL "Easy",IDC_EASY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,59,133,42,13 CONTROL "Medium",IDC_MEDIUM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,124,132,42,13 @@ -929,13 +930,13 @@ BEGIN CONTROL "Base defense",IDC_BASEDEFENSE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,124,116,67,13 CONTROL "Available in Skirmish",IDC_SKIRMISH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,199,116,85,14 COMBOBOX IDC_MULTISIDE,60,116,56,63,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP - LTEXT "Unittype (X):",IDC_STATIC,171,200,51,10 + LTEXT "Unittype (X):",IDC_AITRIGGER_T_UNITTYPE,171,200,51,10 COMBOBOX IDC_UNITTYPE,171,212,125,255,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP - LTEXT "Condition:",IDC_STATIC,8,200,50,11 + LTEXT "Condition:",IDC_AITRIGGER_T_CONDITION,8,200,50,11 COMBOBOX IDC_CONDITION,8,212,95,82,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP EDITTEXT IDC_NUMBER,109,212,54,13,ES_AUTOHSCROLL - LTEXT "Number (N):",IDC_STATIC,110,200,56,11 - LTEXT "Additional parameters for the appropiate AI Trigger Types:",IDC_STATIC,6,188,295,12 + LTEXT "Number (N):",IDC_AITRIGGER_T_NUM,110,200,56,11 + LTEXT "Additional parameters for the appropiate AI Trigger Types:",IDC_AITRIGGER_T_ADDITIONAL,6,188,295,12 END #endif @@ -2611,28 +2612,6 @@ BEGIN 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, "\000" - IDC_MULTISIDE, 0x403, 7, 0 -0x2030, 0x6f4e, 0x656e, "\000" - IDC_MULTISIDE, 0x403, 9, 0 -0x2031, 0x6c41, 0x696c, 0x6465, "\000" - IDC_MULTISIDE, 0x403, 9, 0 -0x2032, 0x6f53, 0x6976, 0x7465, "\000" - IDC_MULTISIDE, 0x403, 8, 0 -0x2033, 0x6854, 0x7269, 0x0064, - IDC_CONDITION, 0x403, 10, 0 -0x656c, 0x7373, 0x7420, 0x6168, 0x006e, - IDC_CONDITION, 0x403, 22, 0 -0x656c, 0x7373, 0x7420, 0x6168, 0x206e, 0x726f, 0x6520, 0x7571, 0x6c61, -0x7420, 0x006f, - IDC_CONDITION, 0x403, 9, 0 -0x7165, 0x6175, 0x206c, 0x6f74, "\000" - IDC_CONDITION, 0x403, 25, 0 -0x7267, 0x6165, 0x6574, 0x2072, 0x6874, 0x6e61, 0x6f20, 0x2072, 0x7165, -0x6175, 0x206c, 0x6f74, "\000" - IDC_CONDITION, 0x403, 13, 0 -0x7267, 0x6165, 0x6574, 0x2072, 0x6874, 0x6e61, "\000" - IDC_CONDITION, 0x403, 13, 0 -0x6f6e, 0x2074, 0x7165, 0x6175, 0x206c, 0x6f74, "\000" 0 END #endif @@ -3637,6 +3616,17 @@ BEGIN 0 END +#if defined(APSTUDIO_INVOKED) || defined(RA2_MODE) +#if defined(APSTUDIO_INVOKED) +IDD_AITRIGGERTYPES$(RA2_MODE) AFX_DIALOG_LAYOUT +#else +IDD_AITRIGGERTYPES AFX_DIALOG_LAYOUT +#endif +BEGIN + 0 +END +#endif + ///////////////////////////////////////////////////////////////////////////// // diff --git a/MissionEditor/data/FinalAlert2/FALanguage.ini b/MissionEditor/data/FinalAlert2/FALanguage.ini index fd06e79..56182e1 100644 --- a/MissionEditor/data/FinalAlert2/FALanguage.ini +++ b/MissionEditor/data/FinalAlert2/FALanguage.ini @@ -1347,6 +1347,38 @@ TriggerOptionHouse=所属方: TriggerOptionAttachedTrigger=关联的触发 TriggerOptionDisableTip=被禁止的触发必须由其它触发激活后才能继续运作 +AITriggerCaption=AI触发编辑 +AITriggerAdd=添加 +AITriggerCopy=复制 +AITriggerDelete=删除 +AITriggerEnabled=启用 +AITriggerType=AI触发: +AITriggerCategory=条件类型: +AITriggerName=触发名称: +AITriggerHouse=限定所属: +AITriggerTeamType1=小队类型 #1: +AITriggerTeamType2=小队类型 #2: +AITriggerSide=限定阵营: +AITriggerBaseDefense=防御基地? +AITriggerSkirmishAvailable=多人模式有效? +AITriggerEasyEnable=简单生效? +AITriggerMediumEnable=中等生效? +AITriggerHardEnable=困难生效? +AITriggerWeightInitial=初始权重: +AITriggerWeightMin=最低权重: +AITriggerWeightMax=最高权重: +AITriggerAdditional=条件参数细节定义 +AITriggerCondition=操作数: +AITriggerNumber=数量(N): +AITriggerUnitType=单位类型(X): +0 None=0 不限制 +less than=< 小于 +less than or equal to=<= 小于等于 +equal to=== 等于 +greater than or equal to=>= 大于等于 +greater than=> 大于 +not equal to=!= 不等于 + ; taskforces TaskforcesCaption=成员组 TaskforcesType=成员组类型: diff --git a/MissionEditor/resource.h b/MissionEditor/resource.h index 81bd9aa..5a50f2c 100644 --- a/MissionEditor/resource.h +++ b/MissionEditor/resource.h @@ -571,6 +571,21 @@ #define IDC_EDIT3 1495 #define IDC_HOUSE_ALLIES_T_ENEMIES 1496 #define IDC_HOUSE_ALLIES_T_ALLIES 1497 +#define IDC_AITRIGGER_COPY 1498 +#define IDC_AITRIGGER_T_TYPE 1499 +#define IDC_AITRIGGER_T_TTYPE 1500 +#define IDC_AITRIGGER_T_NAME 1501 +#define IDC_AITRIGGER_T_HOUSE 1502 +#define IDC_AITRIGGER_T_TEAM1 1503 +#define IDC_AITRIGGER_T_TEAM2 1504 +#define IDC_AITRIGGER_T_SIDE 1505 +#define IDC_AITRIGGER_T_WEIGHT 1506 +#define IDC_AITRIGGER_T_WEIGHT_MIN 1507 +#define IDC_AITRIGGER_T_WEIGHT_MAX 1508 +#define IDC_AITRIGGER_T_ADDITIONAL 1509 +#define IDC_AITRIGGER_T_CONDITION 1510 +#define IDC_AITRIGGER_T_NUM 1511 +#define IDC_AITRIGGER_T_UNITTYPE 1512 #define ID_FILE_OPENMAP 40001 #define ID_FILE_SAVEAS 40002 #define ID_FILE_QUIT 40003 @@ -667,7 +682,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 312 #define _APS_NEXT_COMMAND_VALUE 40144 -#define _APS_NEXT_CONTROL_VALUE 1498 +#define _APS_NEXT_CONTROL_VALUE 1513 #define _APS_NEXT_SYMED_VALUE 111 #endif #endif