mirror of
https://github.com/electronicarts/CNC_TS_and_RA2_Mission_Editor.git
synced 2025-05-01 01:21:41 -04:00
Feature/AI Trigger Editor (#80)
This commit is contained in:
parent
3bd8d39469
commit
22fa8291be
5 changed files with 247 additions and 105 deletions
|
@ -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);
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
|
|
|
@ -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=成员组类型:
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue