Feature/AI Trigger Editor (#80)

This commit is contained in:
Zero Fanker 2024-07-05 07:39:50 +08:00 committed by GitHub
parent 3bd8d39469
commit 22fa8291be
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 247 additions and 105 deletions

View file

@ -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 += "<none>";
}
@ -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);

View file

@ -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()
};

View file

@ -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
/////////////////////////////////////////////////////////////////////////////
//

View file

@ -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=成员组类型:

View file

@ -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