L10n/chinese translation (#5)

* hotkey tips using \t .
* simplified edit menu translation (ZH_CN)
* refactored GetLanguageStringACP and implemented 'TranslateDlgItem' and 'TranslateWindowCaption' helper function .
---------

Co-authored-by: shuiping233 <49360196+shuiping233@users.noreply.github.com>
This commit is contained in:
Zero Fanker 2024-10-29 00:22:39 -04:00 committed by GitHub
parent 1672fd8901
commit f0d808a912
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
45 changed files with 1162 additions and 533 deletions

View file

@ -68,6 +68,8 @@ BOOL CAITriggerAddDlg::OnInitDialog()
{
CDialog::OnInitDialog();
translateUI();
CListBox* lb = (CListBox*)GetDlgItem(IDC_AITRIGGERS);
int i;
@ -80,3 +82,12 @@ BOOL CAITriggerAddDlg::OnInitDialog()
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zurückgeben
}
void CAITriggerAddDlg::translateUI()
{
TranslateWindowCaption(*this, "AITriggerEnableAddCaption");
TranslateDlgItem(*this, IDC_STATIC, "AITriggerEnableAddDesc");
TranslateDlgItem(*this, IDOK, "AITriggerEnableAddOK");
TranslateDlgItem(*this, IDCANCEL, "AITriggerEnableAddCancel");
}

View file

@ -48,14 +48,14 @@ public:
//{{AFX_VIRTUAL(CAITriggerAddDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung
virtual BOOL OnInitDialog();
//}}AFX_VIRTUAL
// Implementierung
protected:
void translateUI();
// Generierte Nachrichtenzuordnungsfunktionen
//{{AFX_MSG(CAITriggerAddDlg)
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

View file

@ -89,8 +89,8 @@ void CAITriggerTypes::DoDataExchange(CDataExchange* pDX)
DDX_Control(pDX, IDC_TEAMTYPE1, m_TeamType1);
DDX_Control(pDX, IDC_UNITTYPE, m_UnitType);
DDX_Control(pDX, IDC_TEAMTYPE2, m_TeamType2);
DDX_Control(pDX, IDC_FLAG2, m_Flag2);
DDX_Control(pDX, IDC_FLAG1, m_Flag1);
DDX_Control(pDX, IDC_FLAG2, m_conditionType);
DDX_Control(pDX, IDC_FLAG1, m_technoLevel);
DDX_Control(pDX, IDC_DATA, m_Data);
DDX_Control(pDX, IDC_OWNER, m_Owner);
DDX_Control(pDX, IDC_FLOAT3, m_Float3);
@ -100,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_Control(pDX, IDC_CONDITION, m_Condition);
DDX_Control(pDX, IDC_CONDITION, m_operator);
DDX_Text(pDX, IDC_NUMBER, m_Number);
DDV_MinMaxInt(pDX, m_Number, 0, 256);
DDX_Check(pDX, IDC_EASY, m_Easy);
@ -116,12 +116,27 @@ BOOL CAITriggerTypes::OnInitDialog()
{
auto const ret = CDialog::OnInitDialog();
translateUI();
initCondtionTypeComboBox();
initMultisideComboBox();
initConditionOpComboBox();
return ret;
}
void CAITriggerTypes::initCondtionTypeComboBox()
{
// TODO: define values from ini
m_conditionType.InsertString(COND_TYPE_NONE, TranslateStringACP("-1 None"));
m_conditionType.InsertString(COND_TYPE_ENEMY_OWNS, TranslateStringACP("0 Enemy owns (CONDITION) N of type X"));
m_conditionType.InsertString(COND_TYPE_SELF_OWNS, TranslateStringACP("1 House owns (CONDITION) N of type X"));
m_conditionType.InsertString(COND_TYPE_ENEMY_YELLOW_POWR, TranslateStringACP("2 Enemy: Yellow power"));
m_conditionType.InsertString(COND_TYPE_ENEMY_RED_POWR, TranslateStringACP("3 Enemy: Red power"));
m_conditionType.InsertString(COND_TYPE_ENEMY_OWNS_SOME_MONEY, TranslateStringACP("4 Enemy owns (CONDITION) N money"));
m_conditionType.InsertString(COND_TYPE_IRON_CURTAIN_READY, TranslateStringACP("5 Iron curtain near ready"));
m_conditionType.InsertString(COND_TYPE_CHRONO_SPHERE_READY, TranslateStringACP("6 Chronosphere near ready"));
m_conditionType.InsertString(COND_TYPE_NEUTRAL_OWNS, TranslateStringACP("7 Neutral owns (CONDITION) N of type X"));
}
void CAITriggerTypes::initMultisideComboBox()
{
m_MultiSide.InsertString(0, TranslateStringACP("0 None"));
@ -143,12 +158,12 @@ void CAITriggerTypes::initMultisideComboBox()
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"));
m_operator.InsertString(COND_OP_LT, TranslateStringACP("less than"));
m_operator.InsertString(COND_OP_LE, TranslateStringACP("less than or equal to"));
m_operator.InsertString(COND_OP_EQ, TranslateStringACP("equal to"));
m_operator.InsertString(COND_OP_GE, TranslateStringACP("greater than or equal to"));
m_operator.InsertString(COND_OP_GT, TranslateStringACP("greater than"));
m_operator.InsertString(COND_OP_NE, TranslateStringACP("not equal to"));
}
void CAITriggerTypes::translateUI()
@ -307,10 +322,10 @@ void CAITriggerTypes::OnSelchangeAitriggertype()
m_Name = aitt.name;
m_TeamType1.SetWindowText(aitt.teamtype1);
m_Owner.SetWindowText(TranslateHouse(aitt.owner, TRUE));
m_Flag1.SetWindowText(aitt.techlevel);
m_technoLevel.SetWindowText(aitt.techlevel);
//m_Flag2.SetWindowText(aitt.type);
int type = atoi(aitt.type) + 1;
m_Flag2.SetCurSel(type);
m_conditionType.SetCurSel(type);
m_UnitType.SetWindowText(aitt.unittype);
m_Data.SetWindowText(aitt.data);
m_Float1.SetWindowText(aitt.float1);
@ -333,7 +348,7 @@ void CAITriggerTypes::OnSelchangeAitriggertype()
AITrigInfo info;
info = ConvertToAITrigInfoFromHex((char*)(LPCSTR)aitt.data);
m_Condition.SetCurSel(info.Condition);
m_operator.SetCurSel(info.Condition);
m_Number = info.Number;
ListObjects(m_UnitType);
@ -386,7 +401,7 @@ void CAITriggerTypes::OnEditchangeTeamtype2()
void CAITriggerTypes::OnEditchangeFlag1()
{
CString value;
m_Flag1.GetWindowText(value);
m_technoLevel.GetWindowText(value);
SetAITriggerParam(value, 3);
}
@ -394,7 +409,7 @@ void CAITriggerTypes::OnEditchangeFlag1()
void CAITriggerTypes::OnEditchangeFlag2()
{
CString value;
m_Flag2.GetWindowText(value);
m_conditionType.GetWindowText(value);
TruncSpace(value);
@ -714,7 +729,7 @@ void CAITriggerTypes::OnSelchangeCondition()
UpdateData(TRUE);
AITrigInfo info;
info.Condition = ConditionEnum(m_Condition.GetCurSel());
info.Condition = ConditionOpEnum(m_operator.GetCurSel());
info.Number = m_Number;
char buffer[65];
@ -735,7 +750,7 @@ void CAITriggerTypes::OnChangeNumber()
AITrigInfo info;
memset(&info, 0, sizeof(AITrigInfo));
info.Condition = ConditionEnum(m_Condition.GetCurSel());
info.Condition = ConditionOpEnum(m_operator.GetCurSel());
info.Number = m_Number;
char buffer[65];

View file

@ -50,8 +50,8 @@ public:
CMyComboBox m_TeamType1;
CMyComboBox m_UnitType;
CMyComboBox m_TeamType2;
CMyComboBox m_Flag2;
CMyComboBox m_Flag1;
CMyComboBox m_conditionType;
CMyComboBox m_technoLevel;
CMyComboBox m_Data;
CMyComboBox m_Owner;
CFloatEdit m_Float3;
@ -66,7 +66,7 @@ public:
CString m_Flag8;
CString m_Flag9;
BOOL m_Enabled;
CComboBox m_Condition;
CComboBox m_operator;
int m_Number;
BOOL m_Easy;
BOOL m_Medium;
@ -88,6 +88,7 @@ protected:
// implementation
void translateUI();
void initCondtionTypeComboBox();
void initMultisideComboBox();
void initConditionOpComboBox();
void addTrigger(CString&& content);

View file

@ -72,11 +72,30 @@ END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// Behandlungsroutinen für Nachrichten CAiTriggerTypesEnable
BOOL CAiTriggerTypesEnable::OnInitDialog()
{
auto const ret = CDialog::OnInitDialog();
translateUI();
return ret;
}
void CAiTriggerTypesEnable::translateUI()
{
TranslateWindowCaption(*this, "AITriggerEnableCaption");
TranslateDlgItem(*this, IDC_AI_TRG_ENB_DESC, "AITriggerEnableDesc");
TranslateDlgItem(*this, IDC_ENABLEALL, "AITriggerEnableAll");
TranslateDlgItem(*this, IDC_AI_TRG_ENB_TYPE, "AITriggerEnableType");
TranslateDlgItem(*this, IDC_ADD, "AITriggerEnableAdd");
TranslateDlgItem(*this, IDC_DELETE, "AITriggerEnableDelete");
}
void CAiTriggerTypesEnable::UpdateDialog()
{
int sel = m_AITriggerType.GetCurSel();
if (sel < 0) sel = 0;
if (sel < 0) {
sel = 0;
}
while (m_AITriggerType.DeleteString(0) != CB_ERR);
@ -108,8 +127,9 @@ void CAiTriggerTypesEnable::UpdateDialog()
m_AITriggerType.AddString(str);
}
if (m_AITriggerType.SetCurSel(sel) == CB_ERR)
if (m_AITriggerType.SetCurSel(sel) == CB_ERR) {
m_AITriggerType.SetCurSel(0);
}
OnSelchangeAitriggertype();
@ -119,7 +139,6 @@ void CAiTriggerTypesEnable::OnEnableall()
{
// enable all standard ai triggers
CIniFile& ini = Map->GetIniFile();
int i;
for (auto const& [id, def] : ai["AITriggerTypes"]) {
ini.SetBool("AITriggerTypesEnable", id, true);
}
@ -130,7 +149,9 @@ void CAiTriggerTypesEnable::OnEnableall()
void CAiTriggerTypesEnable::OnSelchangeAitriggertype()
{
int sel = m_AITriggerType.GetCurSel();
if (sel < 0) return;
if (sel < 0) {
return;
}
}
@ -154,7 +175,9 @@ void CAiTriggerTypesEnable::OnAdd()
{
//CString newTriggerId=InputBox("Please enter the ID of the AITriggerType (for a list of all AITriggerType-IDs use the All-Section)","Enable AITriggerType");
CAITriggerAddDlg dlg;
if (dlg.DoModal() == IDCANCEL) return;
if (dlg.DoModal() == IDCANCEL) {
return;
}
CString newTriggerId = dlg.m_AITrigger;
TruncSpace(newTriggerId);

View file

@ -52,10 +52,12 @@ public:
//{{AFX_VIRTUAL(CAiTriggerTypesEnable)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung
virtual BOOL OnInitDialog() override;
//}}AFX_VIRTUAL
// Implementierung
protected:
void translateUI();
// Generierte Nachrichtenzuordnungsfunktionen
//{{AFX_MSG(CAiTriggerTypesEnable)
afx_msg void OnEnableall();

View file

@ -26,6 +26,7 @@
#include "All.h"
#include "mapdata.h"
#include "variables.h"
#include "functions.h"
#ifdef _DEBUG
@ -65,6 +66,33 @@ void CAll::DoDataExchange(CDataExchange* pDX)
//}}AFX_DATA_MAP
}
BOOL CAll::OnInitDialog()
{
auto const ret = CDialog::OnInitDialog();
translateUI();
return ret;
}
void CAll::translateUI()
{
TranslateWindowCaption(*this, "IniEditorCaption");
TranslateDlgItem(*this, IDC_INI_EDITOR_DESC, "IniEditorDesc");
TranslateDlgItem(*this, IDC_INI_EDITOR_SECTIONS, "IniEditorSections");
TranslateDlgItem(*this, IDC_INI_EDITOR_CONTENT, "IniEditorSectionContent");
TranslateDlgItem(*this, IDC_INI_EDITOR_KEYS, "IniEditorSectionKeys");
TranslateDlgItem(*this, IDC_INI_EDITOR_VAL, "IniEditorSectionValue");
TranslateDlgItem(*this, IDC_ADDSECTION, "IniEditorAdd");
TranslateDlgItem(*this, IDC_DELETESECTION, "IniEditorDelete");
TranslateDlgItem(*this, IDC_INISECTION, "IniEditorInsert");
TranslateDlgItem(*this, IDC_ADDKEY, "IniEditorAddKey");
TranslateDlgItem(*this, IDC_DELETEKEY, "IniEditorDeleteKey");
}
BEGIN_MESSAGE_MAP(CAll, CDialog)
//{{AFX_MSG_MAP(CAll)
@ -181,17 +209,23 @@ void CAll::OnDeletesection()
{
CIniFile& ini = Map->GetIniFile();
int cusection;
cusection = m_Sections.GetCurSel();
const int cusection = m_Sections.GetCurSel();
if (cusection == -1) {
MessageBox("You cannot delete a section without choosing one.");
auto const msg = TranslateStringACP("IniEditorItemUnselected");
auto const cap = TranslateStringACP("Error");
MessageBox(msg, cap);
return;
}
CString str;
m_Sections.GetLBText(cusection, str);
if (MessageBox(CString((CString)"Are you sure you want to delete " + str + "? You should be really careful, you may not be able to use the map afterwards."), "Delete section", MB_YESNO) == IDNO) {
auto const msgBefore = TranslateStringACP("IniEditorSelectionDeletePrefix");
auto const msgAfter = TranslateStringACP("IniEditorSelectionDeleteSUffix");
auto const cap = TranslateStringACP("IniEditorDeleteSelectionCap");
if (MessageBox(msgBefore + str + msgAfter, cap, MB_YESNO) == IDNO) {
return;
}
@ -243,7 +277,10 @@ void CAll::OnAddkey()
CString sec;
m_Sections.GetLBText(cusection, sec);
CString key = InputBox("Please set the name and value for the current key here: (for example, setting a new key ""Strength"" with the value 200 can be written as ""Strength=200"". You don´t need to specify a value.)", "Create key");
auto const msg = TranslateStringACP("IniEditorAddKeyDesc");
auto const cap = TranslateStringACP("IniEditorAddKeyCap");
auto key = InputBox(msg, cap);
if (key.IsEmpty()) {
return;
}

View file

@ -55,12 +55,13 @@ public:
// Vom Klassen-Assistenten generierte virtuelle Funktionsüberschreibungen
//{{AFX_VIRTUAL(CAll)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung
virtual void DoDataExchange(CDataExchange* pDX) override; // DDX/DDV-Unterstützung
virtual BOOL OnInitDialog() override;
//}}AFX_VIRTUAL
// Implementierung
protected:
void translateUI();
// Generierte Nachrichtenzuordnungsfunktionen
//{{AFX_MSG(CAll)
afx_msg void OnSelchangeSections();

View file

@ -21,6 +21,7 @@
#include "stdafx.h"
#include "finalsun.h"
#include "DynamicGraphDlg.h"
#include "functions.h"
#ifdef _DEBUG
#define new DEBUG_NEW
@ -43,6 +44,19 @@ CDynamicGraphDlg::CDynamicGraphDlg(CWnd* pParent /*=NULL*/)
}
BOOL CDynamicGraphDlg::OnInitDialog()
{
auto const ret = CDialog::OnInitDialog();
TranslateUI();
return ret;
}
void CDynamicGraphDlg::TranslateUI()
{
TranslateWindowCaption(*this, "LoadingDialogCaption");
TranslateDlgItem(*this, IDC_LOADING_GRAPH_TXT, "LoadingDialogDesc");
}
void CDynamicGraphDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);

View file

@ -38,24 +38,23 @@ class CDynamicGraphDlg : public CDialog
public:
CDynamicGraphDlg(CWnd* pParent = NULL); // Standardkonstruktor
// Dialogfelddaten
//{{AFX_DATA(CDynamicGraphDlg)
// Dialogfelddaten
enum { IDD = IDD_DYNAMICLOAD };
CProgressCtrl m_Progress;
//}}AFX_DATA
// Überschreibungen
// Vom Klassen-Assistenten generierte virtuelle Funktionsüberschreibungen
//{{AFX_VIRTUAL(CDynamicGraphDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung
virtual void PostNcDestroy();
virtual BOOL OnInitDialog() override;
virtual void DoDataExchange(CDataExchange* pDX)override; // DDX/DDV-Unterstützung
virtual void PostNcDestroy()override;
//}}AFX_VIRTUAL
// Implementierung
protected:
void TranslateUI();
// Generierte Nachrichtenzuordnungsfunktionen
//{{AFX_MSG(CDynamicGraphDlg)
// HINWEIS: Der Klassen-Assistent fügt hier Member-Funktionen ein

View file

@ -3126,7 +3126,9 @@ void CFinalSunDlg::OnMaptoolsAutolevel()
}
Sound(SOUND_POSITIVE);
MessageBox("This tool will try to automatically raise the terrain using the cliffs.\nIt may take some seconds to execute, as there are masses of data to handle.\nAfter this, you should check your map if everything looks fine. If not, you should use the different height tools, especially flatten ground, to fix any errors. You can use Edit->Undo to undo anything that has been done by using this function.", "Auto Leveler");
auto const txt = TranslateStringACP("AutoLevelerDlgDesc");
MessageBox(EscapeString(txt), TranslateStringACP("Auto Leveler"));
m_view.m_isoview->AutoLevel();
}

View file

@ -178,12 +178,25 @@ BOOL CGlobalsDlg::OnInitDialog()
{
CDialog::OnInitDialog();
translateUI();
UpdateDialog();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zurückgeben
}
void CGlobalsDlg::translateUI()
{
TranslateWindowCaption(*this, "LocalVariableCaption");
TranslateDlgItem(*this, IDC_LOCAL_VAR_CUR_TXT, "LocalVariableCurrent");
TranslateDlgItem(*this, IDC_DESC, "LocalVariableDesc");
TranslateDlgItem(*this, IDC_LOCAL_VAR_INIT_TXT, "LocalVariableInitValue");
m_Value.InsertString(0, TranslateStringACP("0 - Clear"));
m_Value.InsertString(1, TranslateStringACP("1 - Set"));
}
void CGlobalsDlg::OnSelchangeValue()
{

View file

@ -50,19 +50,20 @@ public:
// Vom Klassen-Assistenten generierte virtuelle Funktionsüberschreibungen
//{{AFX_VIRTUAL(CGlobalsDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung
virtual BOOL OnInitDialog() override;
virtual void OnOK() override;
virtual void OnCancel() override;
virtual void DoDataExchange(CDataExchange* pDX) override; // DDX/DDV-Unterstützung
//}}AFX_VIRTUAL
// Implementierung
protected:
void translateUI();
// Generierte Nachrichtenzuordnungsfunktionen
//{{AFX_MSG(CGlobalsDlg)
virtual void OnOK();
virtual void OnCancel();
afx_msg void OnChangeDescription();
afx_msg void OnSelchangeGlobal();
virtual BOOL OnInitDialog();
afx_msg void OnSelchangeValue();
afx_msg void OnEditchangeValue();
//}}AFX_MSG

View file

@ -273,7 +273,9 @@ void CHouses::OnPreparehouses()
// import the rules.ini houses
if (ini[MAPHOUSES].Size() > 0) {
MessageBox("There are already houses in your map. You need to delete these first.");
auto const title = TranslateStringACP("HouseDuplicatedCreatingCaption");
auto const content = TranslateStringACP("HouseDuplicatedCreatingTip");
MessageBox(content, title);
return;
}
@ -414,10 +416,11 @@ void CHouses::OnShowWindow(BOOL bShow, UINT nStatus)
if (bShow) {
if (!ini.TryGetSection(MAPHOUSES) && ini.Size() > 0) {
auto const caption = TranslateStringACP("HouseNoneExistenseCap");
#ifndef RA2_MODE
MessageBox("No houses do exist, if you want to use houses, you should use ""Prepare houses"" before doing anything else. Note that in a multiplayer map independent computer players cannot be created by using the names GDI and Nod for the house. Just use something like GDI_AI.");
#else
MessageBox("No houses do exist, if you want to use houses, you should use ""Prepare houses"" before doing anything else.");
MessageBox(TranslateStringACP("HouseNoneExistense"), caption);
#endif
}

View file

@ -26,6 +26,7 @@
#include "Lighting.h"
#include "mapdata.h"
#include "variables.h"
#include "functions.h"
#ifdef _DEBUG
#define new DEBUG_NEW
@ -102,21 +103,36 @@ void CLighting::UpdateDialog()
//MessageBox(ini.GetString("Lightning", "Ambient"));
}
BOOL CLighting::OnInitDialog()
void CLighting::translateUI()
{
CDialog::OnInitDialog();
TranslateDlgItem(*this, IDC_TASKFORCE_T_TYPE, "TaskforcesType");
TranslateWindowCaption(*this, "Lighting");
TranslateDlgItem(*this, IDD_LIGHTING, "Lighting");
TranslateDlgItem(*this, IDC_DESC, "LightingDesc");
TranslateDlgItem(*this, IDC_LNORMAL, "LightingNormal");
TranslateDlgItem(*this, IDC_LAMBIENT1, "LightingNormalAmbient");
TranslateDlgItem(*this, IDC_LLEVEL1, "LightingNormalLevel");
TranslateDlgItem(*this, IDC_LRED1, "LightingNormalRed");
TranslateDlgItem(*this, IDC_LGREEN1, "LightingNormalGreen");
TranslateDlgItem(*this, IDC_LBLUE1, "LightingNormalBlue");
TranslateDlgItem(*this, IDC_LIONSTORM, "LightingIonStorm");
TranslateDlgItem(*this, IDC_LAMBIENT2, "LightingWeatherStormAmbient");
TranslateDlgItem(*this, IDC_LLEVEL2, "LightingWeatherStormLevel");
TranslateDlgItem(*this, IDC_LRED2, "LightingWeatherStormRed");
TranslateDlgItem(*this, IDC_LGREEN2, "LightingWeatherStormGreen");
TranslateDlgItem(*this, IDC_LBLUE2, "LightingWeatherStormBlue");
#ifdef RA2_MODE
SetDlgItemText(IDC_LIONSTORM, "Weather Storm Settings");
TranslateDlgItem(*this, IDC_LIONSTORM, "LightingWeatherStorm");
#endif
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zurückgeben
}
BOOL CLighting::OnInitDialog()
{
auto const ret = CDialog::OnInitDialog();
translateUI();
return ret;
}
void CLighting::OnChangeAmbient()
{

View file

@ -70,6 +70,7 @@ protected:
// Generierte Nachrichtenzuordnungsfunktionen
//{{AFX_MSG(CLighting)
virtual BOOL OnInitDialog();
void translateUI();
afx_msg void OnChangeAmbient();
afx_msg void OnChangeLevel();
afx_msg void OnKillfocusAmbient();

View file

@ -166,14 +166,14 @@ IDB_SCROLLCURSOR BITMAP "res\\scrollcursor_ra2.bmp"
// Dialog
//
IDD_NEWRA2HOUSE DIALOG 0, 0, 186, 52
IDD_NEWRA2HOUSE DIALOGEX 0, 0, 186, 52
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Create new house"
FONT 8, "MS Sans Serif"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
DEFPUSHBUTTON "OK",IDOK,129,7,50,14
PUSHBUTTON "Cancel",IDCANCEL,129,24,50,14
LTEXT "Choose parent country:",IDC_STATIC,7,7,98,12
LTEXT "Choose parent country:",IDC_NEWHOUSE_PARERNT,7,7,98,12
COMBOBOX IDC_COUNTRY,7,20,112,118,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
END
@ -300,15 +300,15 @@ BEGIN
LTEXT "UNDO IS NOT AVAILABLE!",IDC_STATIC,7,152,198,16
END
IDD_AITRIGGERADD DIALOG 0, 0, 222, 97
IDD_AITRIGGERADD DIALOGEX 0, 0, 223, 292
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Enable AI Trigger"
FONT 8, "MS Sans Serif"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
DEFPUSHBUTTON "OK",IDOK,165,7,50,14
PUSHBUTTON "Cancel",IDCANCEL,165,24,50,14
DEFPUSHBUTTON "OK",IDOK,166,7,50,14
PUSHBUTTON "Cancel",IDCANCEL,166,24,50,14
LTEXT "Select AI Trigger that should be enabled:",IDC_STATIC,7,7,136,21
LISTBOX IDC_AITRIGGERS,7,48,208,42,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
LISTBOX IDC_AITRIGGERS,7,39,209,246,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
END
IDD_MYOPENDIALOG DIALOGEX 0, 0, 222, 30
@ -356,12 +356,12 @@ FONT 8, "Tahoma", 0, 0, 0x0
BEGIN
DEFPUSHBUTTON "OK",IDOK,140,159,50,14
PUSHBUTTON "Cancel",IDCANCEL,85,159,50,14
LTEXT "Red Alert 2 EXE (make sure its in the correct path)",IDC_STATIC,5,5,130,20
LTEXT "Red Alert 2 EXE (make sure its in the correct path)",IDC_DESC,5,5,184,20
EDITTEXT IDC_EDIT1,5,25,130,15,ES_AUTOHSCROLL
PUSHBUTTON "Browse",IDC_CHOOSE,140,25,50,15
LTEXT "Language / Sprache:",IDC_STATIC,7,51,128,11
LTEXT "Language / Sprache:",IDC_OPTIONS_LAN_TXT,7,51,128,11
COMBOBOX IDC_LANGUAGE,7,63,183,94,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP
GROUPBOX "Support settings",IDC_STATIC,7,81,183,71
GROUPBOX "Support settings",IDC_OPTIONS_SUPPORT_TXT,7,81,183,71
CONTROL "Support mission disks and mods (recommended)",IDC_RULESLIKETS,
"Button",BS_AUTORADIOBUTTON | BS_MULTILINE | WS_GROUP,14,92,170,16
CONTROL "Only support original Red Alert 2",IDC_ONLYORIGINAL,
@ -371,20 +371,20 @@ BEGIN
END
#endif
IDD_ALL DIALOG 0, 0, 303, 204
IDD_ALL DIALOGEX 0, 0, 303, 204
STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "INI Editor"
FONT 8, "Tahoma"
FONT 8, "Tahoma", 0, 0, 0x0
BEGIN
LTEXT "We highly recommend not to use this editor except you really know what you are doing.",IDC_STATIC,6,5,290,15
LTEXT "Sections:",IDC_STATIC,5,25,55,10
LTEXT "We highly recommend not to use this editor except you really know what you are doing.",IDC_INI_EDITOR_DESC,6,5,290,15
LTEXT "Sections:",IDC_INI_EDITOR_SECTIONS,5,25,55,10
COMBOBOX IDC_SECTIONS,61,25,235,85,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
LTEXT "Keys:",IDC_STATIC,15,80,40,10
LTEXT "Keys:",IDC_INI_EDITOR_KEYS,15,80,40,10
PUSHBUTTON "Add",IDC_ADDSECTION,60,40,55,15
PUSHBUTTON "Delete",IDC_DELETESECTION,120,40,55,15
GROUPBOX "Section content",IDC_STATIC,6,67,290,130
GROUPBOX "Section content",IDC_INI_EDITOR_CONTENT,6,67,290,130
LISTBOX IDC_KEYS,60,80,225,90,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
LTEXT "Value:",IDC_STATIC,15,175,40,15
LTEXT "Value:",IDC_INI_EDITOR_VAL,15,175,40,15
EDITTEXT IDC_VALUE,60,175,225,12,ES_AUTOHSCROLL
PUSHBUTTON "Add",IDC_ADDKEY,15,95,40,15
PUSHBUTTON "Delete",IDC_DELETEKEY,15,115,40,15
@ -412,15 +412,15 @@ BEGIN
LTEXT "Height:",IDC_MAP_D_HEIGHT,107,56,93,9
END
IDD_INPUTBOX DIALOG 0, 0, 214, 70
IDD_INPUTBOX DIALOGEX 0, 0, 289, 62
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "Tahoma"
FONT 8, "Tahoma", 0, 0, 0x0
BEGIN
DEFPUSHBUTTON "OK",IDOK,160,5,50,14
PUSHBUTTON "Cancel",IDCANCEL,160,25,50,14
LTEXT "Static",IDC_SENTENCE,5,5,150,35
EDITTEXT IDC_VAL,5,50,205,12,ES_AUTOHSCROLL
DEFPUSHBUTTON "OK",IDOK,235,4,50,14
PUSHBUTTON "Cancel",IDCANCEL,235,20,50,14
LTEXT "Static",IDC_SENTENCE,5,5,228,33
EDITTEXT IDC_VAL,2,46,280,12,ES_AUTOHSCROLL
END
IDD_IMPORTINI DIALOG 0, 0, 229, 150
@ -811,23 +811,23 @@ BEGIN
PUSHBUTTON "Clone",IDC_COPYUNIT,17,118,61,15
END
IDD_TAGS DIALOG 0, 0, 303, 204
IDD_TAGS DIALOGEX 0, 0, 303, 204
STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Tags"
FONT 8, "Tahoma"
FONT 8, "Tahoma", 0, 0, 0x0
BEGIN
LTEXT "Tags make Triggers work. Without a tag, a trigger is usually useless, because it won't be executed (except if another triggers fires it directly).",IDC_STATIC,7,7,290,20
LTEXT "Tag:",IDC_STATIC,7,36,54,12
LTEXT "Tags make Triggers work. Without a tag, a trigger is usually useless, because it won't be executed (except if another triggers fires it directly).",IDC_DESC,7,7,290,20
LTEXT "Tag:",IDC_TAGS_CUR_TXT,7,36,54,12
COMBOBOX IDC_TAG,61,37,236,196,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Add",IDC_ADD,169,53,59,14
PUSHBUTTON "Delete",IDC_DELETE,238,53,59,14
LTEXT "Name:",IDC_STATIC,7,90,54,12
LTEXT "Name:",IDC_TAGS_NAME,7,90,54,12
EDITTEXT IDC_NAME,61,89,236,13,ES_AUTOHSCROLL
LTEXT "Repeat:",IDC_STATIC,7,110,54,13
LTEXT "Repeat:",IDC_TAGS_REPEAT,7,110,54,13
COMBOBOX IDC_REPEAT,61,110,236,59,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP
LTEXT "Trigger:",IDC_STATIC,7,131,54,13
LTEXT "Trigger:",IDC_TAGS_TRIGGER,7,131,54,13
COMBOBOX IDC_TRIGGER,61,131,236,135,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
LTEXT "For every trigger you create, you should create a tag to make the trigger work. A trigger consists of some general properties, an event and an action, which can all be defined in the ""trigger"" section.",IDC_STATIC,7,167,290,30
LTEXT "For every trigger you create, you should create a tag to make the trigger work. A trigger consists of some general properties, an event and an action, which can all be defined in the ""trigger"" section.",IDC_TAGS_DESC_2,7,167,290,30
END
IDD_TRIGGERS DIALOG 0, 0, 303, 204
@ -1096,13 +1096,13 @@ BEGIN
PUSHBUTTON "Copy",IDC_COPYACTION,165,201,60,14
END
IDD_AITRIGGERTYPESENABLE DIALOG 0, 0, 303, 204
IDD_AITRIGGERTYPESENABLE DIALOGEX 0, 0, 303, 204
STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "AI Trigger Types Enable"
FONT 8, "Tahoma"
FONT 8, "Tahoma", 0, 0, 0x0
BEGIN
LTEXT "This allows the AI for example to create teams automatically. You simply specify which AITriggerTypes are enabled.",IDC_STATIC,7,7,287,23
LTEXT "AITriggerType:",IDC_STATIC,7,62,60,13
LTEXT "This allows the AI for example to create teams automatically. You simply specify which AITriggerTypes are enabled.",IDC_AI_TRG_ENB_DESC,7,7,287,23
LTEXT "AITriggerType:",IDC_AI_TRG_ENB_TYPE,7,62,60,13
COMBOBOX IDC_AITRIGGERTYPE,71,62,223,281,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Enable all standard AI triggers (recommended)",IDC_ENABLEALL,7,30,160,14
PUSHBUTTON "Delete = Disable AITrigger",IDC_DELETE,192,81,102,15
@ -1136,12 +1136,12 @@ BEGIN
LTEXT "Shutting down, please wait a few seconds",IDC_STATIC,7,14,172,13
END
IDD_DYNAMICLOAD DIALOG 0, 0, 220, 44
IDD_DYNAMICLOAD DIALOGEX 0, 0, 220, 44
STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_CAPTION
CAPTION "Loading"
FONT 8, "MS Sans Serif"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
LTEXT "Loading graphics, please wait a few seconds.",IDC_STATIC,7,7,206,15
LTEXT "Loading graphics, please wait a few seconds.",IDC_LOADING_GRAPH_TXT,7,7,206,15
CONTROL "Progress4",IDC_PROGRESS,"msctls_progress32",PBS_SMOOTH | WS_BORDER,7,22,206,15
END
@ -1197,50 +1197,50 @@ IDD_TRIGGEREVENTS DIALOGEX 0, 0, 365, 204
STYLE DS_SETFONT | WS_CHILD
FONT 8, "Tahoma", 0, 0, 0x0
BEGIN
LTEXT "Current event:",IDC_STATIC,6,6,64,11
LTEXT "Current event:",IDC_EVENT_CUR_TXT,6,6,64,11
COMBOBOX IDC_EVENT,72,6,150,79,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "New event",IDC_NEWEVENT,233,6,61,14
PUSHBUTTON "Delete event",IDC_DELETEEVENT,300,6,61,14
GROUPBOX "Event options",IDC_STATIC,6,19,355,178
LTEXT "Event type:",IDC_STATIC,14,32,57,12
GROUPBOX "Event options",IDC_EVENT_OPT_TXT,6,19,355,178
LTEXT "Event type:",IDC_EVENT_TYPE_TXT,14,32,57,12
COMBOBOX IDC_EVENTTYPE,72,30,282,184,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
EDITTEXT IDC_EVENTDESCRIPTION,14,48,340,26,ES_MULTILINE | ES_READONLY | WS_VSCROLL
LTEXT "Event parameters:",IDC_STATIC,14,79,74,10
LTEXT "Event parameters:",IDC_EVENT_PARAM_TXT,14,79,74,10
LISTBOX IDC_PARAMETER,14,93,159,96,LBS_SORT | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
LTEXT "Parameter value:",IDC_STATIC,185,79,118,10
LTEXT "Parameter value:",IDC_EVENT_VAL_TXT,185,79,118,10
COMBOBOX IDC_PARAMVALUE,185,93,169,125,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | CBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP
LTEXT "Select the event type first, then set all parameters.",IDC_STATIC,185,110,169,25
LTEXT "Select the event type first, then set all parameters.",IDC_EVENT_DESC,185,110,169,25
END
IDD_TRIGGERACTIONS DIALOGEX 0, 0, 365, 202
STYLE DS_SETFONT | WS_CHILD
FONT 8, "Tahoma", 0, 0, 0x0
BEGIN
LTEXT "Current action:",IDC_STATIC,6,6,58,11
LTEXT "Current action:",IDC_ACTION_CUR_TXT,6,6,58,11
COMBOBOX IDC_ACTION,72,6,149,79,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "New action",IDC_NEWACTION,233,6,60,14
PUSHBUTTON "Delete action",IDC_DELETEACTION,301,6,59,14
GROUPBOX "Action options",IDC_STATIC,6,20,354,174
LTEXT "Action type:",IDC_STATIC,14,32,57,12
GROUPBOX "Action options",IDC_ACTION_OPT_TXT,6,20,354,174
LTEXT "Action type:",IDC_ACTION_TYPE_TXT,14,32,57,12
COMBOBOX IDC_ACTIONTYPE,72,30,282,184,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
EDITTEXT IDC_ACTIONDESCRIPTION,14,48,340,26,ES_MULTILINE | ES_READONLY | WS_VSCROLL
LTEXT "Action parameters:",IDC_STATIC,14,79,74,10
LTEXT "Action parameters:",IDC_ACTION_PARAM_TXT,14,79,74,10
LISTBOX IDC_PARAMETER,14,93,160,94,LBS_SORT | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
LTEXT "Parameter value:",IDC_STATIC,186,79,118,10
LTEXT "Parameter value:",IDC_ACTION_VAL_TXT,186,79,118,10
COMBOBOX IDC_PARAMVALUE,186,92,168,125,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_NOINTEGRALHEIGHT | CBS_DISABLENOSCROLL | WS_VSCROLL | WS_TABSTOP
LTEXT "Select the event type first, then set all parameters.",IDC_STATIC,186,110,168,25
LTEXT "Select the event type first, then set all parameters.",IDC_ACTION_DESC,186,110,168,25
END
IDD_GLOBALS DIALOG 0, 0, 186, 79
IDD_GLOBALS DIALOGEX 0, 0, 186, 79
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Local Variables"
FONT 8, "MS Sans Serif"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
LTEXT "Select variable:",IDC_STATIC,7,7,60,12
LTEXT "Select variable:",IDC_LOCAL_VAR_CUR_TXT,7,7,60,12
COMBOBOX IDC_GLOBAL,7,19,172,92,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Description:",IDC_STATIC,7,41,44,12
LTEXT "Description:",IDC_DESC,7,41,44,12
EDITTEXT IDC_DESCRIPTION,56,41,123,13,ES_AUTOHSCROLL
LTEXT "Preset value:",IDC_STATIC,7,60,45,11
LTEXT "Preset value:",IDC_LOCAL_VAR_INIT_TXT,7,60,45,11
COMBOBOX IDC_VALUE,57,59,122,55,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP
END
@ -1599,14 +1599,14 @@ BEGIN
GROUPBOX "Preview",IDC_PREVIEW,7,140,179,86
END
IDD_SEARCHWAYPOINT DIALOG 0, 0, 186, 95
IDD_SEARCHWAYPOINT DIALOGEX 0, 0, 186, 95
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Search Waypoint"
FONT 8, "MS Sans Serif"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
DEFPUSHBUTTON "Search",IDOK,129,7,50,14
PUSHBUTTON "Cancel",IDCANCEL,129,24,50,14
LTEXT "Waypoints:",IDC_STATIC,7,7,96,12
LTEXT "Waypoints:",IDC_SEARCH_WP_WP,7,7,96,12
LISTBOX IDC_WAYPOINTS,7,21,97,67,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
END
@ -1664,18 +1664,18 @@ BEGIN
END
#endif
IDD_USERSCRIPTS DIALOG 0, 0, 301, 193
IDD_USERSCRIPTS DIALOGEX 0, 0, 301, 193
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Map Scripts"
FONT 8, "MS Sans Serif"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
DEFPUSHBUTTON "Run",IDOK,244,40,50,14
PUSHBUTTON "Quit",IDCANCEL,244,57,50,14
LTEXT "Scripts available:",IDC_STATIC,7,24,109,12
LTEXT "Scripts available:",IDC_USR_SCRIPTS_AVA,7,24,109,12
LISTBOX IDC_SCRIPTS,7,39,230,74,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
LTEXT "Report:",IDC_STATIC,7,124,117,15
LTEXT "Report:",IDC_USR_SCRIPTS_REPORT,7,124,117,15
EDITTEXT IDC_REPORT,7,145,287,41,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY | WS_VSCROLL
LTEXT "For safety reasons, you should save your map before running scripts. Undo is not available.",IDC_STATIC,7,7,287,17
LTEXT "For safety reasons, you should save your map before running scripts. Undo is not available.",IDC_USR_SCRIPTS_DESC,7,7,287,17
END
IDD_COMBO_UINPUT DIALOG 0, 0, 238, 63
@ -1749,9 +1749,9 @@ BEGIN
IDD_AITRIGGERADD, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 215
RIGHTMARGIN, 216
TOPMARGIN, 7
BOTTOMMARGIN, 90
BOTTOMMARGIN, 285
END
IDD_MYOPENDIALOG, DIALOG
@ -1782,6 +1782,8 @@ BEGIN
IDD_INPUTBOX, DIALOG
BEGIN
RIGHTMARGIN, 285
BOTTOMMARGIN, 60
END
IDD_IMPORTINI, DIALOG
@ -1905,6 +1907,10 @@ BEGIN
HORZGUIDE, 280
END
IDD_AITRIGGERTYPESENABLE, DIALOG
BEGIN
END
IDD_TERRAINBAR, DIALOG
BEGIN
RIGHTMARGIN, 412
@ -1977,6 +1983,10 @@ BEGIN
HORZGUIDE, 79
END
IDD_GLOBALS, DIALOG
BEGIN
END
"IDD_TSOPTIONS$(TS_MODE)", DIALOG
BEGIN
BOTTOMMARGIN, 165
@ -2550,20 +2560,6 @@ BEGIN
END
#endif
IDD_TAGS DLGINIT
BEGIN
IDC_REPEAT, 0x403, 36, 0
0x2030, 0x202d, 0x614d, 0x656b, 0x7420, 0x6568, 0x7420, 0x6972, 0x6767,
0x7265, 0x7720, 0x726f, 0x206b, 0x6e6f, 0x796c, 0x6f20, 0x636e, 0x0065,
IDC_REPEAT, 0x403, 12, 0
0x2031, 0x202d, 0x6e55, 0x6e6b, 0x776f, 0x006e,
IDC_REPEAT, 0x403, 32, 0
0x2032, 0x202d, 0x614d, 0x656b, 0x7420, 0x6568, 0x7420, 0x6972, 0x6767,
0x7265, 0x7220, 0x7065, 0x6165, 0x6974, 0x676e, 0x0020,
0
END
IDD_TRIGGERS DLGINIT
BEGIN
IDC_TRIGGER2, 0x403, 7, 0
@ -2578,35 +2574,6 @@ IDD_AITRIGGERTYPES$(RA2_MODE) DLGINIT
IDD_AITRIGGERTYPES DLGINIT
#endif
BEGIN
IDC_FLAG2, 0x403, 8, 0
0x312d, 0x4e20, 0x6e6f, 0x0065,
IDC_FLAG2, 0x403, 37, 0
0x2030, 0x6e45, 0x6d65, 0x2079, 0x776f, 0x736e, 0x2820, 0x4f43, 0x444e,
0x5449, 0x4f49, 0x294e, 0x4e20, 0x6f20, 0x2066, 0x7974, 0x6570, 0x5820,
"\000"
IDC_FLAG2, 0x403, 37, 0
0x2031, 0x6f48, 0x7375, 0x2065, 0x776f, 0x736e, 0x2820, 0x4f43, 0x444e,
0x5449, 0x4f49, 0x294e, 0x4e20, 0x6f20, 0x2066, 0x7974, 0x6570, 0x5820,
"\000"
IDC_FLAG2, 0x403, 22, 0
0x2032, 0x6e45, 0x6d65, 0x3a79, 0x5920, 0x6c65, 0x6f6c, 0x2077, 0x6f70,
0x6577, 0x0072,
IDC_FLAG2, 0x403, 19, 0
0x2033, 0x6e45, 0x6d65, 0x3a79, 0x5220, 0x6465, 0x7020, 0x776f, 0x7265,
"\000"
IDC_FLAG2, 0x403, 33, 0
0x2034, 0x6e45, 0x6d65, 0x2079, 0x776f, 0x736e, 0x2820, 0x4f43, 0x444e,
0x5449, 0x4f49, 0x294e, 0x4e20, 0x6d20, 0x6e6f, 0x7965, "\000"
IDC_FLAG2, 0x403, 26, 0
0x2035, 0x7249, 0x6e6f, 0x6320, 0x7275, 0x6174, 0x6e69, 0x6e20, 0x6165,
0x2072, 0x6572, 0x6461, 0x0079,
IDC_FLAG2, 0x403, 26, 0
0x2036, 0x6843, 0x6f72, 0x6f6e, 0x7073, 0x6568, 0x6572, 0x6e20, 0x6165,
0x2072, 0x6572, 0x6461, 0x0079,
IDC_FLAG2, 0x403, 39, 0
0x2037, 0x654e, 0x7475, 0x6172, 0x206c, 0x776f, 0x736e, 0x2820, 0x4f43,
0x444e, 0x5449, 0x4f49, 0x294e, 0x4e20, 0x6f20, 0x2066, 0x7974, 0x6570,
0x5820, "\000"
IDC_DATA, 0x403, 65, 0
0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030,
0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030, 0x3030,
@ -2824,10 +2791,6 @@ END
IDD_TRIGGEROPTIONS DLGINIT
BEGIN
IDC_TRIGGERTYPE, 0x403, 13, 0
0x2030, 0x202d, 0x7453, 0x6e61, 0x6164, 0x6472, "\000"
IDC_TRIGGERTYPE, 0x403, 14, 0
0x2032, 0x202d, 0x6552, 0x6570, 0x7461, 0x6e69, 0x0067,
IDC_HOUSE, 0x403, 13, 0
0x2030, 0x202d, 0x7453, 0x6e61, 0x6164, 0x6472, "\000"
IDC_HOUSE, 0x403, 14, 0
@ -2835,15 +2798,6 @@ BEGIN
0
END
IDD_GLOBALS DLGINIT
BEGIN
IDC_VALUE, 0x403, 10, 0
0x2030, 0x202d, 0x6c43, 0x6165, 0x0072,
IDC_VALUE, 0x403, 8, 0
0x2031, 0x202d, 0x6553, 0x0074,
0
END
#if defined(APSTUDIO_INVOKED) || defined(RA2_MODE)
#if defined(APSTUDIO_INVOKED)
IDD_TEAMTYPES$(RA2_MODE) DLGINIT
@ -3627,6 +3581,56 @@ BEGIN
END
#endif
IDD_DYNAMICLOAD AFX_DIALOG_LAYOUT
BEGIN
0
END
IDD_GLOBALS AFX_DIALOG_LAYOUT
BEGIN
0
END
IDD_TAGS AFX_DIALOG_LAYOUT
BEGIN
0
END
IDD_AITRIGGERTYPESENABLE AFX_DIALOG_LAYOUT
BEGIN
0
END
IDD_AITRIGGERADD AFX_DIALOG_LAYOUT
BEGIN
0
END
IDD_SEARCHWAYPOINT AFX_DIALOG_LAYOUT
BEGIN
0
END
IDD_NEWRA2HOUSE AFX_DIALOG_LAYOUT
BEGIN
0
END
IDD_USERSCRIPTS AFX_DIALOG_LAYOUT
BEGIN
0
END
IDD_ALL AFX_DIALOG_LAYOUT
BEGIN
0
END
IDD_INPUTBOX AFX_DIALOG_LAYOUT
BEGIN
0
END
/////////////////////////////////////////////////////////////////////////////
//

View file

@ -68,6 +68,8 @@ BOOL CNewRA2HouseDlg::OnInitDialog()
{
CDialog::OnInitDialog();
translateUI();
CComboBox* country = (CComboBox*)GetDlgItem(IDC_COUNTRY);
for (auto const& [seq, id] : rules[HOUSES]) {
@ -81,3 +83,12 @@ BOOL CNewRA2HouseDlg::OnInitDialog()
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zurückgeben
}
void CNewRA2HouseDlg::translateUI()
{
TranslateWindowCaption(*this, "NewRA2HouseDlgCaption");
TranslateDlgItem(*this, IDC_NEWHOUSE_PARERNT, "NewRA2HouseDlgChooseParent");
TranslateDlgItem(*this, IDOK, "OK");
TranslateDlgItem(*this, IDCANCEL, "Cancel");
}

View file

@ -47,15 +47,15 @@ public:
// Vom Klassen-Assistenten generierte virtuelle Funktionsüberschreibungen
//{{AFX_VIRTUAL(CNewRA2HouseDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung
virtual void DoDataExchange(CDataExchange* pDX) override; // DDX/DDV-Unterstützung
virtual BOOL OnInitDialog() override;
//}}AFX_VIRTUAL
// Implementierung
protected:
void translateUI();
// Generierte Nachrichtenzuordnungsfunktionen
//{{AFX_MSG(CNewRA2HouseDlg)
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

View file

@ -25,6 +25,7 @@
#include "finalsun.h"
#include "SearchWaypointDlg.h"
#include "variables.h"
#include "functions.h"
#ifdef _DEBUG
#define new DEBUG_NEW
@ -66,6 +67,8 @@ BOOL CSearchWaypointDlg::OnInitDialog()
{
CDialog::OnInitDialog();
translateUI();
CListBox& ctrl = *(CListBox*)GetDlgItem(IDC_WAYPOINTS);
while (ctrl.DeleteString(0) != LB_ERR);
@ -91,10 +94,20 @@ void CSearchWaypointDlg::OnOK()
int sel = ctrl.GetCurSel();
if (sel < 0) m_WaypointIndex = -1;
else {
if (sel < 0) {
m_WaypointIndex = -1;
} else {
m_WaypointIndex = ctrl.GetItemData(sel);
}
CDialog::OnOK();
}
void CSearchWaypointDlg::translateUI()
{
TranslateWindowCaption(*this, "SearchWaypointDlgCaption");
TranslateDlgItem(*this, IDC_SEARCH_WP_WP, "SearchWaypointDlgWaypoints");
TranslateDlgItem(*this, IDOK, "SearchWaypointDlgOk");
TranslateDlgItem(*this, IDCANCEL, "SearchWaypointDlgCancel");
}

View file

@ -48,16 +48,18 @@ public:
// Vom Klassen-Assistenten generierte virtuelle Funktionsüberschreibungen
//{{AFX_VIRTUAL(CSearchWaypointDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung
virtual void DoDataExchange(CDataExchange* pDX) override; // DDX/DDV-Unterstützung
virtual BOOL OnInitDialog() override;
virtual void OnOK() override;
//}}AFX_VIRTUAL
// Implementierung
protected:
void translateUI();
// Generierte Nachrichtenzuordnungsfunktionen
//{{AFX_MSG(CSearchWaypointDlg)
virtual BOOL OnInitDialog();
virtual void OnOK();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

View file

@ -121,8 +121,6 @@ void CSpecialFlags::UpdateDialog()
m_Visceroids.SetWindowText(sec.GetString("Visceroids"));
#ifdef RA2_MODE
SetDlgItemText(IDC_LTIBERIUMGROWS, "Ore grows:");
SetDlgItemText(IDC_LTIBERIUMSPREADS, "Ore spreads:");
GetDlgItem(IDC_LTIBERIUMEXPLOSIVE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_TIBERIUMEXPLOSIVE)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_HARVESTERIMMUNE)->ShowWindow(SW_HIDE);
@ -131,15 +129,46 @@ void CSpecialFlags::UpdateDialog()
GetDlgItem(IDC_LMETEORITES)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_VISCEROIDS)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_LVISCEROIDS)->ShowWindow(SW_HIDE);
SetDlgItemText(IDC_LFOGOFWAR, "Shroud:");
SetDlgItemText(IDC_LIONSTORMS, "Weather Storms:");
#endif
};
/////////////////////////////////////////////////////////////////////////////
// Behandlungsroutinen für Nachrichten CSpecialFlags
BOOL CSpecialFlags::OnInitDialog()
{
auto const ret = CDialog::OnInitDialog();
#if defined(RA2_MODE)
SetDlgItemText(IDC_LTIBERIUMGROWS, "Ore grows:");
SetDlgItemText(IDC_LTIBERIUMSPREADS, "Ore spreads:");
SetDlgItemText(IDC_LFOGOFWAR, "Shroud:");
SetDlgItemText(IDC_LIONSTORMS, "Weather Storms:");
#endif
TranslateUI();
return ret;
}
void CSpecialFlags::TranslateUI()
{
TranslateWindowCaption(*this, "SpecialFlagsCaption");
TranslateDlgItem(*this, IDC_DESC, "SpecialFlagsDesc");
TranslateDlgItem(*this, IDC_LTIBERIUMGROWS, "SpecialFlagsTiberiumGrows");
TranslateDlgItem(*this, IDC_LTIBERIUMSPREADS, "SpecialFlagsTiberiumSpread");
TranslateDlgItem(*this, IDC_LTIBERIUMEXPLOSIVE, "SpecialFlagsTiberiumExplosive");
TranslateDlgItem(*this, IDC_LDESTROYABLEBRIDGES, "SpecialFlagsTiberiumBridgeDestroyable");
TranslateDlgItem(*this, IDC_LMCVDEPLOY, "SpecialFlagsMCVRedeploy");
TranslateDlgItem(*this, IDC_LINITIALVETERAN, "SpecialFlagsInitialVeteran");
TranslateDlgItem(*this, IDC_LFIXEDALLIANCE, "SpecialFlagsFixedAlliance");
TranslateDlgItem(*this, IDC_LHARVESTERIMMUNE, "SpecialFlagsHarvesterImmune");
TranslateDlgItem(*this, IDC_LINERT, "SpecialFlagsInert");
TranslateDlgItem(*this, IDC_LFOGOFWAR, "SpecialFlagsFogOfWar");
TranslateDlgItem(*this, IDC_LIONSTORMS, "SpecialFlagsIonStoms");
TranslateDlgItem(*this, IDC_LMETEORITES, "SpecialFlagsMeteorites");
TranslateDlgItem(*this, IDC_LVISCEROIDS, "SpecialFlagsVisceroids");
}
void CSpecialFlags::OnEditchangeTiberiumgrows()
{
CIniFile& ini = Map->GetIniFile();

View file

@ -37,8 +37,8 @@ public:
void UpdateDialog();
CSpecialFlags(CWnd* pParent = NULL); // Standardkonstruktor
// Dialogfelddaten
//{{AFX_DATA(CSpecialFlags)
// Dialogfelddaten
//{{AFX_DATA(CSpecialFlags)
enum { IDD = IDD_SPECIALFLAGS };
CMyComboBox m_Visceroids;
CMyComboBox m_TiberiumSpreads;
@ -60,11 +60,13 @@ public:
// Vom Klassen-Assistenten generierte virtuelle Funktionsüberschreibungen
//{{AFX_VIRTUAL(CSpecialFlags)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung
virtual BOOL OnInitDialog() override;
virtual void DoDataExchange(CDataExchange* pDX)override; // DDX/DDV-Unterstützung
//}}AFX_VIRTUAL
// Implementierung
protected:
void TranslateUI();
// Generierte Nachrichtenzuordnungsfunktionen
//{{AFX_MSG(CSpecialFlags)

View file

@ -270,17 +270,32 @@ struct SMUDGE_INFO
};
#endif
/*
** Condition enumeration
/**
* Condtion Type enum
*/
enum ConditionEnum {
COND_LT = 0, // less than
COND_LE, // less than or equal to
COND_EQ, // equal to
COND_GE, // greater than or equal to
COND_GT, // greater than
COND_NE, // not equal to
COND_COUNT
enum ConditionType {
COND_TYPE_NONE = 0,
COND_TYPE_ENEMY_OWNS,
COND_TYPE_SELF_OWNS,
COND_TYPE_ENEMY_YELLOW_POWR,
COND_TYPE_ENEMY_RED_POWR,
COND_TYPE_ENEMY_OWNS_SOME_MONEY,
COND_TYPE_IRON_CURTAIN_READY,
COND_TYPE_CHRONO_SPHERE_READY,
COND_TYPE_NEUTRAL_OWNS,
};
/**
* Condition Operator enumeration
*/
enum ConditionOpEnum {
COND_OP_LT = 0, // less than
COND_OP_LE, // less than or equal to
COND_OP_EQ, // equal to
COND_OP_GE, // greater than or equal to
COND_OP_GT, // greater than
COND_OP_NE, // not equal to
COND_OP_COUNT
};
struct AITrigInfo
@ -288,7 +303,7 @@ struct AITrigInfo
union {
struct {
int Number;
ConditionEnum Condition;
ConditionOpEnum Condition;
};
char Padding[32];
};

View file

@ -64,9 +64,8 @@ void CTSOptions::DoDataExchange(CDataExchange* pDX)
BEGIN_MESSAGE_MAP(CTSOptions, CDialog)
//{{AFX_MSG_MAP(CTSOptions)
ON_BN_CLICKED(IDC_CHOOSE, OnChoose)
//}}AFX_MSG_MAP
ON_CBN_SELCHANGE(IDC_LANGUAGE, &CTSOptions::OnCbnSelchangeLanguage)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
@ -77,8 +76,8 @@ void CTSOptions::OnChoose()
const char* pFileName = "game.exe";
const char* pFileSearchPattern = "C&C EXE|game.exe|";
#if defined(RA2_MODE)
pFileName = yuri_mode? "ra2md.exe":"ra2.exe";
pFileSearchPattern = yuri_mode ? "Yuri's Revenge EXE|ra2md.exe|": "Red Alert 2 EXE|ra2.exe|";
pFileName = yuri_mode ? "ra2md.exe" : "ra2.exe";
pFileSearchPattern = yuri_mode ? "Yuri's Revenge EXE|ra2md.exe|" : "Red Alert 2 EXE|ra2.exe|";
#else
pFileName = "Sun.exe";
pFileSearchPattern = "Tiberian Sun EXE|Sun.exe|";
@ -95,9 +94,7 @@ void CTSOptions::OnChoose()
void CTSOptions::OnOK()
{
this->GetDlgItem(IDC_EDIT1)->GetWindowText(m_TSEXE);
int n = m_Language.GetItemData(m_Language.GetCurSel());
m_LanguageName = language["Languages"].Nth(n).second;
m_LanguageName = getLanguageSelected();
CDialog::OnOK();
}
@ -108,22 +105,62 @@ BOOL CTSOptions::OnInitDialog()
m_TSExe.SetWindowText((LPCTSTR)theApp.m_Options.TSExe);
if (theApp.m_Options.bSearchLikeTS) m_LikeTS = 0;
else m_LikeTS = 1;
m_LikeTS = !theApp.m_Options.bSearchLikeTS;
m_PreferLocalTheaterFiles = theApp.m_Options.bPreferLocalTheaterFiles ? TRUE : FALSE;
m_PreferLocalTheaterFiles = theApp.m_Options.bPreferLocalTheaterFiles;
UpdateData(FALSE);
int englishIdx = 0;
int selectedLanIdx = -1;
auto const& languageSec = language["Languages"];
for (auto i = 0; i < languageSec.Size(); i++) {
auto const& def = languageSec.Nth(i).second;
auto const& lang = language.GetString(def + "Header", "Name");
m_Language.SetItemData(m_Language.AddString(lang), i);
if (lang == "English") {
m_Language.SetCurSel(i);
englishIdx = i;
}
if (def == theApp.m_Options.LanguageName) {
selectedLanIdx = i;
}
}
if (selectedLanIdx < 0) {
selectedLanIdx = englishIdx;
}
m_Language.SetCurSel(selectedLanIdx);
updateUI();
UpdateData(FALSE);
return TRUE;
}
void CTSOptions::OnCbnSelchangeLanguage()
{
theApp.m_Options.LanguageName = getLanguageSelected();
updateUI();
}
void CTSOptions::updateUI()
{
TranslateWindowCaption(*this, "OptionsCaption");
TranslateDlgItem(*this, IDC_DESC, "OptionsDesc");
TranslateDlgItem(*this, IDC_CHOOSE, "OptionsBrowse");
TranslateDlgItem(*this, IDC_OPTIONS_LAN_TXT, "OptionsLanguage");
TranslateDlgItem(*this, IDC_OPTIONS_SUPPORT_TXT, "OptionsSupportSettings");
TranslateDlgItem(*this, IDC_RULESLIKETS, "OptionsSupportMissionsAndMods");
TranslateDlgItem(*this, IDC_ONLYORIGINAL, "OptionsSupportOriginalRA2Only");
TranslateDlgItem(*this, IDC_PREFER_LOCAL_THEATER_FILES, "OptionsPreferFA2TheaterSettings");
}
CString CTSOptions::getLanguageSelected()
{
if (!language["Languages"].Size()) {
return "English";
}
int n = m_Language.GetItemData(m_Language.GetCurSel());
return language["Languages"].Nth(n).second;
}

View file

@ -44,7 +44,7 @@ public:
enum { IDD = IDD_TSOPTIONS };
CComboBox m_Language;
CEdit m_TSExe;
int m_LikeTS;
BOOL m_LikeTS;
//}}AFX_DATA
@ -52,20 +52,21 @@ public:
// Vom Klassen-Assistenten generierte virtuelle Funktionsüberschreibungen
//{{AFX_VIRTUAL(CTSOptions)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung
virtual void DoDataExchange(CDataExchange* pDX) override; // DDX/DDV-Unterstützung
virtual void OnOK() override;
virtual BOOL OnInitDialog() override;
//}}AFX_VIRTUAL
// Implementierung
protected:
DECLARE_MESSAGE_MAP()
// Generierte Nachrichtenzuordnungsfunktionen
//{{AFX_MSG(CTSOptions)
afx_msg void OnChoose();
virtual void OnOK();
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:
afx_msg void OnCbnSelchangeLanguage();
void updateUI();
CString getLanguageSelected();
};
//{{AFX_INSERT_LOCATION}}

View file

@ -51,6 +51,13 @@ CTags::~CTags()
{
}
BOOL CTags::OnInitDialog()
{
auto const ret = CDialog::OnInitDialog();
translateUI();
return ret;
}
void CTags::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
@ -117,6 +124,23 @@ void CTags::UpdateDialog()
}
void CTags::translateUI()
{
TranslateWindowCaption(*this, "TagsCaption");
TranslateDlgItem(*this, IDC_DESC, "TagsDesc");
TranslateDlgItem(*this, IDC_TAGS_CUR_TXT, "TagsCurrent");
TranslateDlgItem(*this, IDC_ADD, "TagsAdd");
TranslateDlgItem(*this, IDC_DELETE, "TagsDelete");
TranslateDlgItem(*this, IDC_TAGS_NAME, "TagsName");
TranslateDlgItem(*this, IDC_TAGS_REPEAT, "TagsRepeat");
TranslateDlgItem(*this, IDC_TAGS_TRIGGER, "TagsTrigger");
TranslateDlgItem(*this, IDC_TAGS_DESC_2, "TagsExpaination");
m_Repeat.InsertString(0, TranslateStringACP("0 - Make the trigger work only once"));
m_Repeat.InsertString(1, TranslateStringACP("1 - All entities attached"));
m_Repeat.InsertString(2, TranslateStringACP("2 - Make the trigger repeating"));
}
void CTags::OnSelchangeTag()
{
CIniFile& ini = Map->GetIniFile();

View file

@ -54,11 +54,13 @@ public:
// Der Klassen-Assistent generiert virtuelle Funktionsüberschreibungen
//{{AFX_VIRTUAL(CTags)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung
virtual BOOL OnInitDialog() override;
virtual void DoDataExchange(CDataExchange* pDX) override; // DDX/DDV-Unterstützung
//}}AFX_VIRTUAL
// Implementierung
protected:
void translateUI();
// Generierte Nachrichtenzuordnungsfunktionen
//{{AFX_MSG(CTags)
afx_msg void OnSelchangeTag();

View file

@ -468,7 +468,9 @@ void CTaskForce::OnDeletetaskforce()
}
auto const tf = getCurrrentID();
int res;
res = MessageBox("Are you sure to delete the selected task force? If you delete it, make sure to eliminate ANY references to this task force in team-types.", "Delete task force", MB_YESNO);
auto const title = TranslateStringACP("Delete task force");
auto const content = TranslateStringACP("TaskforceDeleteMsgDesc");
res = MessageBox(content, title, MB_YESNO);
if (res == IDNO) {
return;
}

View file

@ -63,6 +63,27 @@ CTriggerActionsDlg::CTriggerActionsDlg(CWnd* pParent /*=NULL*/)
}
BOOL CTriggerActionsDlg::OnInitDialog()
{
auto const ret = CDialog::OnInitDialog();
TranslateUI();
return ret;
}
void CTriggerActionsDlg::TranslateUI()
{
TranslateDlgItem(*this, IDC_ACTION_CUR_TXT, "TriggerActionCurrent");
TranslateDlgItem(*this, IDC_NEWACTION, "TriggerActionNew");
TranslateDlgItem(*this, IDC_DELETEACTION, "TriggerActionDelete");
TranslateDlgItem(*this, IDC_ACTION_OPT_TXT, "TriggerActionOptions");
TranslateDlgItem(*this, IDC_ACTION_TYPE_TXT, "TriggerActionType");
TranslateDlgItem(*this, IDC_ACTION_PARAM_TXT, "TriggerActionParams");
TranslateDlgItem(*this, IDC_ACTION_VAL_TXT, "TriggerActionValue");
TranslateDlgItem(*this, IDC_ACTION_DESC, "TriggerActionDesc");
}
void CTriggerActionsDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
@ -243,10 +264,11 @@ void CTriggerActionsDlg::OnEditchangeActiontype()
if (atoi(GetParam(eventdata, 7)) == 1) {
if (bNoWP)
if (bNoWP) {
m_Parameter.SetItemData(m_Parameter.AddString(TranslateStringACP("Number")), -1);
else
} else {
m_Parameter.SetItemData(m_Parameter.AddString(TranslateStringACP("Waypoint")), -1);
}
}
m_ParamValue.SetWindowText("");
@ -360,9 +382,13 @@ void CTriggerActionsDlg::OnEditchangeParamvalue()
{
CIniFile& ini = Map->GetIniFile();
if (m_currentTrigger.GetLength() == 0) return;
if (m_currentTrigger.GetLength() == 0) {
return;
}
int selev = m_Action.GetCurSel();
if (selev < 0) return;
if (selev < 0) {
return;
}
int curev = m_Action.GetItemData(selev);
int curselparam = m_Parameter.GetCurSel();
@ -437,14 +463,24 @@ void CTriggerActionsDlg::OnNewaction()
void CTriggerActionsDlg::OnDeleteaction()
{
CIniFile& ini = Map->GetIniFile();
if (m_currentTrigger.GetLength() == 0) return;
if (m_currentTrigger.GetLength() == 0) {
return;
}
int sel2 = m_Action.GetCurSel();
if (sel2 < 0) return;
int curev = m_Action.GetItemData(sel2);
if (MessageBox("Do you really want to delete this action?", "Delete action", MB_YESNO) == IDNO) return;
if (sel2 < 0) {
return;
}
int curev = m_Action.GetItemData(sel2);
auto const title = TranslateStringACP("Delete action");
auto const content = TranslateStringACP("Do you really want to delete this action?");
if (MessageBox(content, title, MB_YESNO) == IDNO) {
return;
}
auto sec = ini.TryGetSection("Actions");
ASSERT(sec != nullptr);

View file

@ -54,11 +54,13 @@ public:
// Vom Klassen-Assistenten generierte virtuelle Funktionsüberschreibungen
//{{AFX_VIRTUAL(CTriggerActionsDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung
virtual BOOL OnInitDialog() override;
virtual void DoDataExchange(CDataExchange* pDX) override; // DDX/DDV-Unterstützung
//}}AFX_VIRTUAL
// Implementierung
protected:
void TranslateUI();
// Generierte Nachrichtenzuordnungsfunktionen
//{{AFX_MSG(CTriggerActionsDlg)

View file

@ -120,7 +120,7 @@ BOOL CTriggerEditorDlg::OnInitDialog()
m_TriggerActions.SetWindowPos(NULL, 10, top, r.right - 20, bottom, SWP_NOZORDER);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zurückgeben
// EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zurückgeben
}
void CTriggerEditorDlg::UpdateDialog()
@ -203,11 +203,17 @@ void CTriggerEditorDlg::OnDeletetrigger()
CIniFile& ini = Map->GetIniFile();
int sel = m_Trigger.GetCurSel();
if (sel < 0) return;
if (sel < 0) {
return;
}
int curtrig = m_Trigger.GetItemData(sel);
int res = MessageBox("If you want to delete all attached tags, too, press 'Yes'.\nIf you don´t want to delete these tags, press 'No'.\nIf you want to cancel deletion of the trigger, press 'Cancel'.\n\nNote: CellTags will never be deleted using this function", "Delete trigger", MB_YESNOCANCEL);
if (res == IDCANCEL) return;
auto const title = TranslateStringACP("Delete trigger");
auto const content = EscapeString(TranslateStringACP("TriggerDeleteTip"));
int res = MessageBox(content, title, MB_YESNOCANCEL);
if (res == IDCANCEL) {
return;
}
auto const& triggerId = ini["Triggers"].Nth(curtrig).first;

View file

@ -47,6 +47,14 @@ CTriggerEventsDlg::CTriggerEventsDlg(CWnd* pParent /*=NULL*/)
//}}AFX_DATA_INIT
}
BOOL CTriggerEventsDlg::OnInitDialog()
{
auto const ret = CDialog::OnInitDialog();
TranslateUI();
return ret;
}
void CTriggerEventsDlg::DoDataExchange(CDataExchange* pDX)
{
@ -72,6 +80,18 @@ BEGIN_MESSAGE_MAP(CTriggerEventsDlg, CDialog)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CTriggerEventsDlg::TranslateUI()
{
TranslateDlgItem(*this, IDC_EVENT_CUR_TXT, "TriggerEventCurrent");
TranslateDlgItem(*this, IDC_NEWEVENT, "TriggerEventNew");
TranslateDlgItem(*this, IDC_DELETEEVENT, "TriggerEventDelete");
TranslateDlgItem(*this, IDC_EVENT_OPT_TXT, "TriggerEventOptions");
TranslateDlgItem(*this, IDC_EVENT_TYPE_TXT, "TriggerEventType");
TranslateDlgItem(*this, IDC_EVENT_PARAM_TXT, "TriggerEventParams");
TranslateDlgItem(*this, IDC_EVENT_VAL_TXT, "TriggerEventParamValue");
TranslateDlgItem(*this, IDC_EVENT_DESC, "TriggerEventDesc");
}
/////////////////////////////////////////////////////////////////////////////
// Behandlungsroutinen für Nachrichten CTriggerEventsDlg
@ -160,7 +180,9 @@ void CTriggerEventsDlg::OnDeleteevent()
return;
}
int curev = m_Event.GetItemData(sel2);
if (MessageBox("Do you really want to delete this event?", "Delete event", MB_YESNO) == IDNO) {
auto const title = TranslateStringACP("Delete event");
auto const content = TranslateStringACP("Do you really want to delete this event?");
if (MessageBox(content, title, MB_YESNO) == IDNO) {
return;
}

View file

@ -56,11 +56,13 @@ public:
// Vom Klassen-Assistenten generierte virtuelle Funktionsüberschreibungen
//{{AFX_VIRTUAL(CTriggerEventsDlg)
protected:
virtual BOOL OnInitDialog() override;
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung
//}}AFX_VIRTUAL
// Implementierung
protected:
void TranslateUI();
// Generierte Nachrichtenzuordnungsfunktionen
//{{AFX_MSG(CTriggerEventsDlg)

View file

@ -278,19 +278,27 @@ BOOL CTriggerOptionsDlg::PreTranslateMessage(MSG* pMsg)
BOOL CTriggerOptionsDlg::OnInitDialog()
{
CDialog::OnInitDialog();
auto const ret = CDialog::OnInitDialog();
{
SetDlgItemText(IDC_TRIGGER_OPTION_TYPE_STR, GetLanguageStringACP("TriggerOptionType"));
SetDlgItemText(IDC_TRIGGER_OPTION_NAME, GetLanguageStringACP("TriggerOptionName"));
SetDlgItemText(IDC_TRIGGER_OPTION_HOUSE, GetLanguageStringACP("TriggerOptionHouse"));
SetDlgItemText(IDC_TRIGGER_OPTION_ATTACHED_TRIGGER, GetLanguageStringACP("TriggerOptionAttachedTrigger"));
SetDlgItemText(IDC_TRIGGER_OPTION_TRIGGER_DIS_TIP, GetLanguageStringACP("TriggerOptionDisableTip"));
TranslateDlgItem(*this, IDC_TRIGGER_OPTION_TYPE_STR, "TriggerOptionType");
TranslateDlgItem(*this, IDC_TRIGGER_OPTION_NAME, "TriggerOptionName");
TranslateDlgItem(*this, IDC_TRIGGER_OPTION_HOUSE, "TriggerOptionHouse");
TranslateDlgItem(*this, IDC_TRIGGER_OPTION_ATTACHED_TRIGGER, "TriggerOptionAttachedTrigger");
TranslateDlgItem(*this, IDC_TRIGGER_OPTION_TRIGGER_DIS_TIP, "TriggerOptionDisableTip");
TranslateDlgItem(*this, IDC_DISABLED, "TriggerOptionDisabled");
TranslateDlgItem(*this, IDC_EASY, "TriggerOptionEasy");
TranslateDlgItem(*this, IDC_MEDIUM, "TriggerOptionMedium");
TranslateDlgItem(*this, IDC_HARD, "TriggerOptionHard");
m_TriggerType.InsertString(0, TranslateStringACP("0 - Standard"));
m_TriggerType.InsertString(1, TranslateStringACP("1 - All Attached"));
m_TriggerType.InsertString(2, TranslateStringACP("2 - Repeating"));
m_tooltip.Create(this);
m_tooltip.Activate(TRUE);
m_tooltip.AddTool(GetDlgItem(IDC_HOUSE), GetLanguageStringACP("TT_TriggerHouse"));
}
return TRUE;
return ret;
}
void CTriggerOptionsDlg::OnDisabled()

View file

@ -1285,7 +1285,9 @@ void CTriggers::OnDeleteevent()
if (sel2 < 0) {
return;
}
if (MessageBox("Do you really want to delete this event?", "Delete event", MB_YESNO) == IDNO) {
auto const title = TranslateStringACP("Delete event");
auto const content = TranslateStringACP("Do you really want to delete this event?");
if (MessageBox(content, title, MB_YESNO) == IDNO) {
return;
}
@ -1361,10 +1363,17 @@ void CTriggers::OnDeleteaction()
CIniFile& ini = Map->GetIniFile();
int sel = m_Trigger.GetCurSel();
if (sel < 0) return;
if (sel < 0) {
return;
}
int sel2 = m_Action.GetCurSel();
if (sel2 < 0) return;
if (MessageBox("Do you really want to delete this action?", "Delete action", MB_YESNO) == IDNO) {
if (sel2 < 0) {
return;
}
auto const title = TranslateStringACP("Delete action");
auto const content = TranslateStringACP("Do you really want to delete this action?");
if (MessageBox(content, title, MB_YESNO) == IDNO) {
return;
}

View file

@ -82,11 +82,12 @@ private:
CString filename;
};
CUserScript::CUserScript()
CUserScript::CUserScript():
error(0),
errortext{ 0 },
functioncount(0),
functiondata(nullptr)
{
functioncount = 0;
functiondata = NULL;
}
CUserScript::~CUserScript()
@ -908,12 +909,16 @@ void CUserScriptsDlg::OnOK()
// check bool
if (paramcount > 1) {
if (params[1].GetLength() > 0) {
if (!IsValSet(params[1])) goto nextline;
if (!IsValSet(params[1])) {
goto nextline;
}
}
}
int res = MessageBox(params[0], "Continue?", MB_YESNO);
if (res == IDNO) break;
int res = MessageBox(TranslateStringACP(params[0]), TranslateStringACP("Continue?"), MB_YESNO);
if (res == IDNO) {
break;
}
} else if (name == ID_MESSAGE) {
if (paramcount < 2) {
ReportScriptError(i);
@ -2689,6 +2694,8 @@ BOOL CUserScriptsDlg::OnInitDialog()
{
CDialog::OnInitDialog();
translateUI();
int k;
CFileFind ff;
@ -2713,6 +2720,19 @@ BOOL CUserScriptsDlg::OnInitDialog()
// EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zurückgeben
}
void CUserScriptsDlg::translateUI()
{
TranslateWindowCaption(*this, "UserScriptsDlgCaption");
TranslateDlgItem(*this, IDC_USR_SCRIPTS_DESC, "UserScriptsDlgDesc");
TranslateDlgItem(*this, IDC_USR_SCRIPTS_AVA, "UserScriptsDlgAvailable");
TranslateDlgItem(*this, IDC_USR_SCRIPTS_REPORT, "UserScriptsDlgReport");
TranslateDlgItem(*this, IDOK, "UserScriptsDlgOK");
TranslateDlgItem(*this, IDCANCEL, "UserScriptsDlgCancel");
}
void CUserScriptsDlg::ReportScriptError(int line)
{
char c[50];

View file

@ -50,6 +50,8 @@ public:
//{{AFX_VIRTUAL(CUserScriptsDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung
virtual void OnOK() override;
virtual BOOL OnInitDialog() override;
//}}AFX_VIRTUAL
// Implementierung
@ -57,8 +59,7 @@ protected:
// Generierte Nachrichtenzuordnungsfunktionen
//{{AFX_MSG(CUserScriptsDlg)
virtual void OnOK();
virtual BOOL OnInitDialog();
void translateUI();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

View file

@ -26,6 +26,7 @@
#include "WaypointID.h"
#include "mapdata.h"
#include "variables.h"
#include "functions.h"
#ifdef _DEBUG
#define new DEBUG_NEW
@ -68,10 +69,9 @@ void CWaypointID::OnFree()
{
CIniFile& ini = Map->GetIniFile();
int i;
CString freen;
for (i = 0; i > -1; i++) {
for (auto i = 0; ; i++) {
char d[50];
itoa(i, d, 10);
if (ini.GetString("Waypoints", d).IsEmpty()) {
@ -100,8 +100,21 @@ BOOL CWaypointID::OnInitDialog()
{
CDialog::OnInitDialog();
translateUI();
OnFree();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zurückgeben
}
void CWaypointID::translateUI()
{
TranslateWindowCaption(*this, "CreateWaypointDlgCaption");
TranslateDlgItem(*this, IDC_DESC, "CreateWaypointDlgDesc");
TranslateDlgItem(*this, IDC_LID, "CreateWaypointDlgID");
TranslateDlgItem(*this, IDC_FREE, "CreateWaypointDlgFree");
TranslateDlgItem(*this, IDOK, "CreateWaypointDlgOk");
TranslateDlgItem(*this, IDCANCEL, "CreateWaypointDlgCancel");
}

View file

@ -49,16 +49,17 @@ public:
//{{AFX_VIRTUAL(CWaypointID)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung
virtual void OnOK() override;
virtual BOOL OnInitDialog() override;
//}}AFX_VIRTUAL
// Implementierung
protected:
// Generierte Nachrichtenzuordnungsfunktionen
//{{AFX_MSG(CWaypointID)
afx_msg void OnFree();
virtual void OnOK();
virtual BOOL OnInitDialog();
void translateUI();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

View file

@ -922,55 +922,57 @@ vertic_cornerleft_0=21
; Name, ListType, [Code]
[ParamTypes]
-1=Unused,0,1;not listed in FA2
0=Unused,0
1=Unknown,0
2=House,1
3=Local variable,20
4=Time,0
5=Credits,0
6=Number,0
7=Teamtype,2
8=Building,6
9=Aircraft,5
10=Infantry,4
11=Unit,3
12=Movie,7
13=Text,8
14=Trigger,9
15=Enabled,10
16=Sound,11
17=Theme,12
18=Speech,13
19=Steps,0
20=Super weapon,14
21=Left,0
22=Top,0
23=Right,0
24=Bottom,0
25=Animation,15
26=Particle,16
27=Duration,0
28=Speed,0
29=Meteor size,29
30=Waypoint,17
31=Crate type,18
32=Speech bubble,19
33=String,21
34=Action,9
35=Global variable,27
36=Special Weapon,14
37=Activated,10
38=Tag,22
39=Techtype,0
40=Quarry,0
41=Weapon,24
42=Light behavior,25
43=Event,9
44=Shower,26
45=Float value,0
46=Techtype,29;,2
47=Building,28
48=Number,0,2
0=未使用,0
1=未知,0
2=所属方,1
3=局部变量,20
4=时间,0
5=积分,0
6=数值,0
7=小队类型,2
8=建筑,6
9=飞行器,5
10=步兵,4
11=单位,3
12=电影,7
13=文本,8
14=触发,9
15=允许,10
16=声音,11
17=乐曲,12
18=语音,13
19=步骤,0
20=超级武器,14
21=左,0
22=上,0
23=宽,0
24=高,0
25=动画,15
26=粒子,16
27=持续时间,0
28=速度,0
29=Voxel碎片ID号,29
30=路径点,17
31=木箱类型,18
32=语音提示框,19
33=字符,21
34=行为,9
35=全局变量,27
36=特定武器,14
37=已激活,10
38=关联标记,22
39=科技类型,0
40=来源,0
41=武器,24
42=发光行为,25
43=事件,9
44=阵雨,26
45=浮点值,0
46=科技类型,29
47=建筑,28
48=数值,0,2
49=像素动画,23
50=影片,7
[ScriptParams]
0=占位,0
@ -1086,73 +1088,72 @@ vertic_cornerleft_0=21
; NOTE: To overwrite TS events with RA2 special ones, add the new event to the [EventsRA2] section.
; NOTE: ID must be the same like #
[EventsRA2]
0=-No Event-,0,0,0,0,This is a null event. There is no need to ever use this in a real trigger.,0,1,0
1=Entered by...,0,2,0,0,Triggers when an infantry or vehicle enters the attached object. Typically this trigger is attached to a building or a cell.,0,1,1
2=Spied upon,0,0,0,0,Detects when a spy has entered the attached building.,0,1,2
3=Thieved by...,0,2,0,0,Triggers when a thief steals money from the specified house.,0,1,3
4=Discovered by player,0,0,0,0,Detects when the attached object has been discovered by the player. Discovered means reavealed from under the shroud.,0,1,4
5=House Discovered...,0,2,0,0,Triggers when the specified house has any of its units or buildings discovered by the player.,0,1,5
6=Attacked by any house,0,0,0,0,Triggers when the attached unit is attacked in some manner. Incidental damage or friendly fire does not count.,0,1,6
7=Destroyed by any house,0,0,0,0,Triggers when the attached object has been destroyed. Destroyed by incidental damage or friendly fire doesn't count.,0,1,7
8=Any Event,0,0,0,0,When used alone%1 it will force the trigger to spring immediately.,0,1,8
9=Destroyed%1 Units%1 All...,0,2,0,0,Triggers when all units of the specified house have been destroyed. Typically used for end of game conditions.,0,1,9
10=Destroyed%1 Buildings%1 All...,0,2,0,0,Triggers when all buildings of the specified side have been destroyed. Typically used for end of game conditions.,0,1,10
11=Destroyed%1 All...,0,2,0,0,Triggers when all objects owned by the specified house have been destroyed. This is the normal (destroy everyone) trigger condition for end of game.,0,1,11
12=Credits exceed...,0,6,0,0,Triggers when the house (for this trigger) credit total exceeds this specified amount.,0,1,12
13=Elapsed Time...,0,6,0,0,Triggers when the elapsed time has expired. This time is initialized when the trigger is created. Timer is reset whenever trigger is sprung when trigger is 'persistant'.,0,1,13
14=Mission Timer Expired,0,0,0,0,Triggers when the global mission timer (as displayed on the screen) has reached zero.,0,1,14
15=Destroyed%1 Buildings%1 #...,0,6,0,0,Triggers when the number of buildings%1 owned by the trigger's specified house%1 have been destroyed.,0,1,15
16=Destroyed%1 Units%1 #...,0,6,0,0,Triggers when the number of units%1 owned by the trigger's specified house%1 have been destroyed.,0,1,16
17=No Factories left,0,0,0,0,Triggers when there are no factories left for the house specified in the trigger.,0,1,17
18=Civilians Evacuated,0,0,0,0,Triggers when civilians have been evacuated (left the map).,0,1,18
19=Build Building Type...,0,8,0,0,When the trigger's house builds the building type specified%1 then this event will spring.,0,1,19
20=Build Unit Type...,0,11,0,0,When the trigger's house builds the unit type specified%1 then this event will spring.,0,1,20
21=Build Infantry Type...,0,10,0,0,When the trigger's house builds the infantry type specified%1 then this event will spring.,0,1,21
22=Build Aircraft Type...,0,9,0,0,When the trigger's house builds the aircraft type specified%1 then this event will spring.,0,1,22
23=Leaves map (team)...,-1,7,0,0,Triggers when the specified team leaves the map. If the team is destroyed%1 it won't trigger. If all but one member is destroyed and that last member leaves the map%1 it WILL spring.,0,1,23
24=Zone Entry by...,0,2,0,0,Triggers when a unit of the dpecified house enters the same zone that this trigger is located in. This trigger must be located in a cell and only a cell.,0,1,24
25=Crosses Horizontal Line...,0,2,0,0,Triggers when a unit of the specified house crosses the horizontal line as indicated by the location of this trigger. This trigger must be placed in a cell.,0,1,25
26=Crosses Vertical Line...,0,2,0,0,Triggers when a unit of the specified house crosses the vertical line as indicated by the location of this trigger. This trigger must be placed in a cell.,0,1,26
27=Global is set...,0,35,0,0,Triggers when the specifed global (named in Globals.INI) is turned on.,0,1,27
28=Global is clear...,0,35,0,0,Triggers when the specified global (named in Globals.INI) is turned off.,0,1,28
29=Destroyed by anything [not infiltrate],0,0,0,0,Triggers when attached object is destroyed%1 but not if it infiltrates a building/unit.,0,1,29
30=Low Power...,0,2,0,0,Triggers when the specified house's power falls below 100% level.,0,1,30
31=Bridge destroyed,0,0,0,0,Triggers when the attached bridge is destroyed. A bridge is considered destroyed when an impassable gap is created in the bridge.,0,1,31
32=Building exists...,0,8,0,0,Triggers when the building (owned by the house of this trigger) specified exists on the map. This works for buildings that are preexisting or constructed by deploying.,0,1,32
33=Selected by player,0,0,0,0,Triggers when the unit is selected by the player. Use in single-player only.,0,1,33
34=Comes near waypoint...,0,30,0,0,Triggers when the object comes near the specified waypoint.,0,1,34
35=Enemy In Spotlight...,0,0,0,0,Triggers when an enemy unit enters the spotlight cast by the attached building.,0,1,35
36=Local is set...,0,3,0,0,Triggers when the specifed local is turned on.,0,1,36
37=Local is clear...,0,3,0,0,Triggers when the specified local is turned off.,0,1,37
38=First damaged (combat only),0,0,0,0,Triggers when first suffering from combat damage from combat damage only.,0,1,38
39=Half health (combat only),0,0,0,0,Triggers when damaged to half health >from combat damage only.,0,1,39
40=Quarter health (combat only),0,0,0,0,Triggers when damaged to quarter health from combat damage only.,0,1,40
41=First damaged (any source),0,0,0,0,Triggers when first suffering from combat damage from any source.,0,1,41
42=Half health (any source),0,0,0,0,Triggers when damaged to half health >from any source.,0,1,42
43=Quarter health (any source),0,0,0,0,Triggers when damaged to quarter health from any source.,0,1,43
44=Attacked by (house)...,0,2,0,0,When attacked by some unit of specified house.,0,1,44
45=Ambient light <= ...,0,6,0,0,Triggers when the ambient light drops below a certain level. Use numbers between 0 and 100.,0,1,45
46=Ambient light >= ...,0,6,0,0,Triggers when the ambient light rises above a certain level. Use numbers between 0 and 100.,0,1,46
47=Elapsed Scenario Time...,0,6,0,0,When time has elapsed since start of scenario.,0,1,47
48=Destroyed by anything,0,0,0,0,Triggers when destroyed by anything what-so-ever.,0,1,48
49=Pickup Crate,0,0,0,0,When crate is picked up object the trigger is attached to.,0,1,49
50=Pickup Crate (any),0,0,0,0,When crate is picked up by any unit.,0,1,50
51=Random delay...,0,6,0,0,Delays a random time between 50 and 150 percent of time specified.,0,1,51
52=Credits below...,0,6,0,0,Triggers when the house (for this trigger) credit total is below this specified amount.,0,1,52
53=Spy entering as House...,0,2,0,0,Triggers if a spy disguised as house specified enters this.,0,1,53
54=Spy entering as Infantry...,0,10,0,0,Triggers if a spy disguised as this type of infantry enters.,0,1,54
55=Destroyed%1 Units%1 Naval...,0,2,0,0,Triggers when all naval units of the specified house have been destroyed. Typically used for end of game conditions.,0,1,55
56=Destroyed%1 Units%1 Land...,0,2,0,0,Triggers when all land units of the specified house have been destroyed. Typically used for end of game conditions.,0,1,56
57=Building does not exist,0,8,0,0,Triggers when the building (owned by the house of this trigger) specified does not exist on the map.,0,1,57
0=-无事件-,0,0,0,0,这是一个空的事件,无意义。请选择需要的事件。,0,1,0
1=进入事件...,0,2,0,0,当步兵或车辆进入关联的对象时,事件被触发。此触发可关联到一所建筑或一个单元(使用“放置于地图上”按钮)。可用于工程师、间谍进入建筑,但空中单位不会触发此条件。,0,1,1
2=侦察开始(无用),0,0,0,0,当间谍进入关联的建筑,开始侦察。,0,0,2
3=偷窃行动(无用),0,2,0,0,当一名小偷从特定的建筑中偷窃金钱时此事件被触发。,0,0,3
4=被游戏者发现,0,0,0,0,当关联的对象被游戏者发现时触发此事件,被发现意味着要显示附近的地图区域。,0,1,4
5=作战方被发现...,0,2,0,0,当特定的某一作战方的任一单位或建筑被游戏者发现时触发此事件。,0,1,5
6=受到任一作战方攻击,0,0,0,0,当单位受到一些方式的攻击时,触发此事件。间接损伤或友军开火不包括在内。,0,1,6
7=被任一作战方摧毁,0,0,0,0,当关联的对象被摧毁时触发些事件。间接或友军开火造成被毁不包括在内。,0,1,7
8=任何事件,0,0,0,0,当单独%1使用时立即强制触发此事件。此动作跟流逝时间 数值1 相似。,0,1,8
9=被摧毁%1 单位%1 全部...,0,2,0,0,当特定作战方的所有单位被摧毁时触发此事件。典型使用在游戏的结束条件中。,0,1,9
10=被摧毁%1 建筑%1 全部...,0,2,0,0,当特定作战方的所有建筑被摧毁时触发此事件。典型使用在游戏的结束条件中。,0,1,10
11=被摧毁%1 全部...,0,2,0,0,当特定作战方的所有对象被摧毁时触发此事件。这是常规的游戏结束触发事件(全部摧毁)。,0,1,11
12=金钱超过...,0,6,0,0,当与事件关联的作战方的金钱超过特定值触发此事件。,0,1,12
13=流逝时间...,0,6,0,0,当流逝的时间达到特定值触发此事件。当触发器建立时该时间初始化,当触发器持续不变或被触发时,计时器复位。,0,1,13
14=任务时间已到,0,0,0,0,当全局的任务时间(显示在屏幕右下角)倒计时为零时触发此事件。,0,1,14
15=被摧毁%1 建筑%1 (数量为#)...,0,6,0,0,当特定数量的%1建筑(由此触发事件特定作战方%1所有)被摧毁。,0,1,15
16=被摧毁%1 单位%1 (数量为#)...,0,6,0,0,当特定数量的%1单位(由此触发事件特定作战方%1所有)被摧毁。,0,1,16
17=不再有工厂,0,0,0,0,当此触发事件特定的的作战方不会再有带有Factory=的工厂(建造场,车间,空指部,兵营等)时触发此事件。一般作为 9卖掉全部建筑 的条件。,0,1,17
18=平民撤离(无用),0,0,0,0,当平民撤离时(离开地图)触发此事件。,0,0,18
19=建造特定类型的建筑...,0,8,0,0,当触发事件的作战方建造特定的%1类型的建筑时触发此事件。,0,1,19
20=生产特定类型的车辆...,0,11,0,0,当触发事件的作战方生产特定的科技类型的车辆时触发此事件。,0,1,20
21=生产特定类型的步兵...,0,10,0,0,当触发事件的作战方生产特定的步兵类单位时触发此事件。,0,1,21
22=生产特定类型的飞机...,0,9,0,0,当触发事件的作战方生产特定的%1飞行类单位时此事件被触发。,0,1,22
23=离开地图(小队)...,-1,7,0,0,当特定的小队离开地图时事件触发。如果小队被摧毁则不会触发事件。如果小队除一个成员名其他已被全部摧毁,而这一成员离开了地图,那么事件将被触发。,0,1,23
24=进入某区域...,0,2,0,0,当特定作战方的一单位进入上述这一触发事件定位区域,事件被触发。此触发事件必须被定位于一个单元中,只能是一个单元。,0,1,24
25=越过水平线...,0,2,0,0,当特定作战方的一单位越过此触发事件特定的区域水平线时,事件触发。此触发事件必须放置于一个单元内。,0,1,25
26=越过垂直线...,0,2,0,0,当特定作战方的一单位越过此触发事件特定的区域垂直线时,事件触发。此触发事件必须放置于一个单元内。,0,1,26
27=全局开启...,0,35,0,0,当特定的全局变量开启[1]时,事件触发。,0,1,27
28=全局关闭...,0,35,0,0,当特定的全局变量关闭[0]时,事件触发。,0,1,28
29=被任何事物摧毁(不包括间谍渗透),0,0,0,0,当关联对象被摧毁%1时事件触发。不包括渗透入建筑或单位。,0,1,29
30=电力不足...,0,2,0,0,当特定作战方停电时,事件触发。,0,1,30
31=桥梁被摧毁,0,0,0,0,当特定的桥梁当出现缺口不能通行时,事件触发。此触发必须被用单元标记放置在目标桥梁的下方(只能放置一个单元标记)。,0,1,31
32=建筑存在...,0,8,0,0,当此触发事件作战方有特定建筑存在于地图上时,事件触发。此建筑可以是以前就有的或由基地建造的。,0,1,32
33=被游戏者选定,0,2,0,0,当单位被游戏者选定时,事件触发。仅使用于单位任务中。,0,1,33
34=到达路径点附近...,48,30,0,0,当对象到达特定的路径点附近时,事件触发。参数表示距离路径点的范围半径,0,1,34
35=敌人进入局部照明区...,0,0,0,0,当一个敌人单位进入关联建筑物投射的局部照明区时,事件触发。,0,1,35
36=局部开启...,0,3,0,0,当特定的局部变量开启(1)时,事件触发。,0,1,36
37=局部关闭...,0,3,0,0,当特定的局部变量关闭(0)时,事件触发。,0,1,37
38=首次受损(仅指战斗),0,0,0,0,仅指作战时初次受到损伤时,事件触发。,0,1,38
39=一半生命值(仅指战斗),0,0,0,0,仅指作战时受到损伤而只有一半生命值时,事件触发。,0,1,39
40=四分之一生命值(仅指战斗),0,0,0,0,仅指作战时受到损伤而只有四分之一生命值时,事件触发。,0,1,40
41=首次受损(任何来源),0,0,0,0,当受到任何来源的攻击而初次受损时,事件触发。,0,1,41
42=一半生命值(任何来源),0,0,0,0,当受到任何来源的攻击而只有一半生命值时,事件触发。,0,1,42
43=四分之一生命值(任何来源),0,0,0,0,当受到任何来源的攻击而只有四分之一生命值时,事件触发。,0,1,43
44=受到攻击(作战方)...,0,2,0,0,当遭到特定作战方的某些单位的攻击时,事件触发。,0,1,44
45=环境照明 <=(小于)...,0,6,0,0,当环境照明亮度低于或等于某一确定值时,事件触发。可用值介于 0 到 100之间。,0,1,45
46=环境照明 >=(大于)...,0,6,0,0,当环境照明亮度超过或等于某一确定值时,事件触发。可用值介于 0 到 100之间。,0,1,46
47=流逝的情节时间...,0,6,0,0,从剧情开始计算游戏的流逝时间。,0,1,47
48=被任何事物摧毁,0,0,0,0,当被任何事物摧毁时,事件触发。此触发不能关联到航母上,否则其子机被摧毁后再摧毁航母,事件不会触发。但先摧毁航母,事件可以触发。,0,1,48
49=关联对象拾得木箱,0,0,0,0,当此事件关联对象拾得木箱时,事件触发。,0,1,49
50=任何单位拾得木箱,0,0,0,0,当任何单位拾得木箱时,事件触发。,0,1,50
51=随机延时...,0,6,0,0,进行随机延时,时间值介于特定值的 50% 到 150%。联机地图使用该条件容易因为各玩家时间不对应造成“重新连线错误”。。,0,1,51
52=金钱低于...,0,6,0,0,当此事件作战方金钱值低于特定值时,事件触发。,0,1,52
53=间谍伪装进入(无用)...,0,2,0,0,当间谍伪装为特定作战方单位进入时,事件触发。,0,0,53
54=间谍伪装步兵进入(无用)...,0,10,0,0,当间谍伪装为特定步兵类单位进入时,事件触发。,0,0,54
55=被摧毁%1 单位%1 海军...,0,2,0,0,当特定作战方的所有海军单位被摧毁时,事件触发。典型应用于游戏结束条件中。,0,1,55
56=被摧毁%1 单位%1 陆军...,0,2,0,0,当特定作战方的所有陆军单位被摧毁时,事件触发。典型应用于游戏结束条件中。,0,1,56
57=建筑不再存在,0,8,0,0,当特定的建筑(归属于此事件作战方)不再存在于地图上时,事件触发。,0,1,57
; YR
58=Power Full...,0,2,0,0,Triggers if the specified house's power is at 100%.,0,1,58,1
59=Entered or Overflown By...,0,2,0,0,Triggers when unit%1 infantry%1 or aircraft move over this cell. <THEM = House of entering unit>,0,1,59,1
58=充足能量供应...,0,2,0,0,当特定参战方的电力充足时,事件触发。,0,1,58,1
59=进入或飞越...,0,2,0,0,当单位%1 步兵%1 或飞行器移动进入或飞越此单元时,事件触发。属于进入事件的拓展版,但不能关联建筑。,0,1,59,1
; 60 and 61 are tricky! They use code + 2 params... param type 46 includes the code 2, which is put in front of the 2 parameters
60=TechType Exists,48,46,0,0,True if there are at least this many of this type%1 belonging to anyone,0,1,60,1
61=TechType does not Exist,48,46,0,0,True if there are none of these on the map at all. Number doesn't mean anything.,0,1,61,1
60=科技类型存在,48,46,0,0,地图上该科技存在的(无论所属方)数量大于等于设定值,则触发。此触发计算“正在建造中的物体”。,0,1,60,1
61=科技类型不存在,48,46,0,0,如果地图上包括进入载具和建筑的此类科技的数量小于设定值则触发数值设为0没有意义。此触发计算“正在建造中的物体”。,0,1,61,1
; action format:
; #=Description, P1 type, P2 type, P3 type, P4 type, P5Type, P6Type, uses waypoint, uses tag, Obsolete, used in TS, used in RA2, ID, [YR only - optional]
@ -1161,156 +1162,154 @@ vertic_cornerleft_0=21
; NOTE: To overwrite TS actions with RA2 special ones, add the new action to the [ActionsRA2] section.
; NOTE: ID must be the same like #
[ActionsRA2]
0=-No Action-,0,0,0,0,0,0,0,0,0,This is a null action. It will do nothing and is equivalent to not having an action at all. Why use it?,0,1,0
1=Winner is...,0,2,0,0,0,0,0,0,0,The winner will be forced to be the house specified. The game will end immediately. Typically%1 the player's house is specified.,0,1,1
2=Loser is...,0,2,0,0,0,0,0,0,0,The loser will be force to be the house specified. The game will end immediately. Typically%1 the player's house is specified.,0,1,2
3=Production Begins...,0,2,0,0,0,0,0,0,0,The computer's house (as specified) will begin production of units and structures.,0,1,3
4=Create Team...,-1,7,0,0,0,0,0,0,0,Creates a team of the type specified (owned by the house of this trigger). The team member are NOT automatically created however.,0,1,4
5=Destroy Team...,-1,7,0,0,0,0,0,0,0,Destroys all instances of the team type specified. The units in those existing teams will remain and be available for recruiting into other teams.,0,1,5
6=All to Hunt...,0,2,0,0,0,0,0,0,0,Forces all units%1 of the house specified%1 into 'hunt' mode. They will seek out and destroy their enemies.,0,1,6
7=Reinforcement (team)...,-1,7,0,0,0,0,0,0,0,Create a reinforcement of the specified team. The members of the team WILL be created magically by this action.,0,1,7
8=Drop Zone Flare (waypoint)...,0,30,0,0,0,0,0,0,0,Display a drop zone flair at the waypoint specified. The map will also be reaveald around that location.,0,1,8
9=Fire Sale...,0,2,0,0,0,0,0,0,0,Cause all buildings of the specified house to be sold (for cash and prizes). Typically this is used in the final assault by the computer.,0,1,9
10=Play Movie...,0,12,0,0,0,0,0,0,0,Displays the specified movie (full screen). The game is paused while this occurs and resumes normally after it completes.,0,1,10
11=Text Trigger...,-4,13,0,0,0,0,0,0,0,Display the text identified by the string file <label>.,0,1,11
12=Destroy Trigger...,-2,14,0,0,0,0,0,0,0,Destroy all current instances of the trigger type specified. This does not prevent future instances of that trigger >from being created.,0,1,12
13=Autocreate Begins...,0,2,0,0,0,0,0,0,0,Initiates autocreate for the house specified. This will cause the computer's house to build autocreate teams as it sees fit.,0,1,13
14=Change House...,0,2,0,0,0,0,0,0,0,Changes owning house to the one specified for attached objects.,0,1,14
15=Allow Win,0,0,0,0,0,0,0,0,0,Removes one 'blockage' from allowing the player to win. The blockage number is equal the number of triggers created that have this action.,0,1,15
16=Reveal all map,0,0,0,0,0,0,0,0,0,Reveals the entire map to the player.,0,1,16
17=Reveal around waypoint...,0,30,0,0,0,0,0,0,0,Reveals a region of the map to the player around the waypoint specified.,0,1,17
18=Reveal zone of waypoint...,0,30,0,0,0,0,0,0,0,Reveals all cells that share the same zone as the waypoing specified. This yields some wierd results. Use with caution.,0,1,18
19=Play sound effect...,-7,16,0,0,0,0,0,0,0,Plays the sound effect specified.,0,1,19
20=Play music theme...,-8,17,0,0,0,0,0,0,0,Plays the music theme specified.,0,1,20
21=Play speech...,-6,18,0,0,0,0,0,0,0,Plays the speech sound specified.,0,1,21
22=Force Trigger...,-2,14,0,0,0,0,0,0,0,Force all triggers of this specified type to spring regardless of what it's event flags may indicate.,0,1,22
23=Timer Start,0,0,0,0,0,0,0,0,0,Start the global mission timer.,0,1,23
24=Timer Stop,0,0,0,0,0,0,0,0,0,Stop the global mission timer.,0,1,24
25=Timer Extend...,0,6,0,0,0,0,0,0,0,Extend the global mission timer by the time specified.,0,1,25
26=Timer Shorten...,0,6,0,0,0,0,0,0,0,Short the global mission timer by the time specified. It can never be reduced below 'zero' time.,0,1,26
27=Timer Set...,0,6,0,0,0,0,0,0,0,Set the global mission timer to the value specified.,0,1,27
28=Global Set...,0,35,0,0,0,0,0,0,0,Set the global flag. Global flags are named in the file Globals.INI. Global flags can be either 'on/set/true' or 'off/clear/false'.,0,1,28
29=Global Clear...,0,35,0,0,0,0,0,0,0,Clear the global flag. Global flags are named in the file Globals.INI. Global flags can either be 'on/set/true' or 'off/clear/false'.,0,1,29
30=Auto Base Building...,0,37,0,0,0,0,0,0,0,Initialize the computer skirmish mode build control to either 'on' or 'off' state. When 'on'%1 the computer takes over as if it were in skirmish mode. (gs make sure he has a con yard),0,1,30
31=Grow shroud one 'step',0,0,0,0,0,0,0,0,0,Increase the shroud darkness by one step (cell).,0,1,31
32=Destroy attached building,0,0,0,0,0,0,0,0,0,Destroy any buildings%1 bridges%1 or units that this trigger is attached to.,0,1,32
33=Add 1-time special weapon...,0,36,0,0,0,0,0,0,0,Add a one-shot special weapon (as indicated) to the trigger's house.,0,1,33
34=Add repeating special weapon...,0,36,0,0,0,0,0,0,0,Add a permanent special weapon (as indicated) to the trigger's house.,0,1,34
35=Preferred target...,0,40,0,0,0,0,0,0,0,Specify what the trigger's house should use as its preferred target when using special weapon attacks.,0,1,35
36=All change house...,0,2,0,0,0,0,0,0,0,All objects of one house change ownership to specified house.,0,1,36
37=Make ally...,0,2,0,0,0,0,0,0,0,Cause this trigger's house to ally with the house specified.,0,1,37
38=Make enemy...,0,2,0,0,0,0,0,0,0,Cause this trigger's house to un-ally (declare war) with the house specified.,0,1,38
39=Change Zoom Level...,0,6,0,0,0,0,0,0,0,Changes the zoom out level of the player's radar map. Use 1 for normal view%1 2 for zoomed out.,0,1,39
40=Resize Player View...,0,0,21,22,23,24,0,0,0,Changes the player's viewing rectangle into the map. Enter as: x%1y%1w%1h where x%1y gives the upper left corner and w%1h give the width and height.,0,1,40
41=Play Anim At...,0,25,0,0,0,0,1,0,0,Plays the specified anim in the specified cell.,0,1,41
42=Do Explosion At...,0,41,0,0,0,0,1,0,0,Creates an explosion in the specified cell%1 using the specified warhead.,0,1,42
43=Meteor Impact At...,0,29,0,0,0,0,1,0,0,Sends a meteor at the specified cell.,0,0,43
44=Ion Storm start...,0,6,0,0,0,0,0,0,0,Starts an ion storm sequence to run for the specified number of game frames.,0,0,44
45=Ion Storm stop...,0,0,0,0,0,0,0,0,0,End an Ion storm in progress.,0,0,45
46=Lock input,0,0,0,0,0,0,0,0,0,Disables user input.,0,1,46
47=Unlock input,0,0,0,0,0,0,0,0,0,Enables user input.,0,1,47
48=Center Camera at Waypoint...,0,28,0,0,0,0,1,0,0,Moves the tactical view to a specified waypoint.,0,1,48
49=Zoom in,0,0,0,0,0,0,0,0,0,Zooms the tactical map in.,0,1,49
50=Zoom out,0,0,0,0,0,0,0,0,0,Zooms the tactical map out.,0,1,50
51=Reshroud Map,0,0,0,0,0,0,0,0,0,Reshrouds the entire map.,0,1,51
52=Change Light Behavior,0,42,0,0,0,0,0,0,0,Changes the way a building spotlight behaves. Attach this trigger to a building that casts a spotlight.,0,1,52
53=Enable Trigger,-2,14,0,0,0,0,0,0,0,Enables the target trigger.,0,1,53
54=Disable Trigger,-2,14,0,0,0,0,0,0,0,Disables the target trigger.,0,1,54
55=Create Radar Event,0,43,0,0,0,0,1,0,0,Creates a radar event at the specified waypoint,0,1,55
56=Local Set...,0,3,0,0,0,0,0,0,0,Set the local flag. Local flags can be either 'on/set/true' or 'off/clear/false'.,0,1,56
57=Local Clear...,0,3,0,0,0,0,0,0,0,Clear the local flag. Local flags can either be 'on/set/true' or 'off/clear/false'.,0,1,57
58=Meteor Shower At...,0,44,0,0,0,0,1,0,0,Creates a meteor shower around the specified waypoint.,0,1,58
59=Reduce Tiberium At...,0,30,0,0,0,0,0,0,0,Reduces Tiberium around the specified waypoint.,0,0,59
60=Sell building,0,0,0,0,0,0,0,0,0,Sells the building attached to this trigger.,0,1,60
61=Turn off building,0,0,0,0,0,0,0,0,0,Turn off building attached to this trigger.,0,1,61
62=Turn on building,0,0,0,0,0,0,0,0,0,Turn on building attached to this trigger.,0,1,62
63=Apply 100 damage at...,0,30,0,0,0,0,0,0,0,Applies 100 points of HE damage at location.,0,1,63
64=Light flash (small) at...,0,30,0,0,0,0,0,0,0,Shows a small light flash at location.,0,1,64
65=Light flash (medium) at...,0,30,0,0,0,0,0,0,0,Shows a medium light flash at location.,0,1,65
66=Light flash (large) at...,0,30,0,0,0,0,0,0,0,Shows a large light flash at location.,0,1,66
67=Announce Win,0,0,0,0,0,0,0,0,0,Announce that player has won.,0,1,67
68=Announce Lose,0,0,0,0,0,0,0,0,0,Announce that player has lost.,0,1,68
69=Force end,0,0,0,0,0,0,0,0,0,Force end of scenario.,0,1,69
70=Destroy Tag...,-3,38,0,0,0,0,0,0,0,Destroy tag and all attached triggers.,0,1,70
71=Set ambient step...,0,45,0,0,0,0,0,0,0,Sets ambient light fade step value.,0,1,71
72=Set ambient rate...,0,45,0,0,0,0,0,0,0,Sets ambient light fade rate.,0,1,72
73=Set ambient light...,0,6,0,0,0,0,0,0,0,Fades ambient light to new lighting level.,0,1,73
74=AI triggers begin...,0,2,0,0,0,0,0,0,0,Start AI triggers for specified house.,0,1,74
75=AI triggers stop...,0,2,0,0,0,0,0,0,0,Stop AI triggers for specified house.,0,1,75
76=Ratio of AI trigger teams...,0,6,0,0,0,0,0,0,0,AI percentage of teams created for AI triggers (100 = all for AI trigger teams%1 0 = all for regular teams),0,1,76
77=Ratio of team aircraft...,0,6,0,0,0,0,0,0,0,AI percentage of aircraft created for teams (100 = all for teams%1 0 = all random),0,1,77
78=Ratio of team infantry...,0,6,0,0,0,0,0,0,0,AI percentage of infantry created for teams (100 = all for teams%1 0 = all random),0,1,78
79=Ratio of team units...,0,6,0,0,0,0,0,0,0,AI percentage of units created for teams (100 = all for teams%1 0 = all random),0,1,79
80=Reinforcement (team) [at waypoint]...,-1,7,0,0,0,0,1,0,0,Create reinforcement team at special waypoint location.,0,1,80
81=Wakeup self,0,0,0,0,0,0,0,0,0,Breaks out of sleep or harmless mode so as to enter guard mode.,0,1,81
82=Wakeup all sleepers,0,0,0,0,0,0,0,0,0,Breaks all units out of sleep mode.,0,1,82
83=Wakeup all harmless,0,0,0,0,0,0,0,0,0,Breaks all out of harmless mode.,0,1,83
84=Wakeup group...,0,6,0,0,0,0,0,0,0,Wakeup all units of specified group.,0,1,84
85=Vein growth...,0,37,0,0,0,0,0,0,0,Control if veins grow or not.,0,1,85
86=Tiberium growth...,0,37,0,0,0,0,0,0,0,Control if Tiberium grows or not.,0,1,86
87=Ice growth...,0,37,0,0,0,0,0,0,0,Control if ice grows or not.,0,1,87
88=Particle Anim at...,0,26,0,0,0,0,1,0,0,Show particle animation at location.,0,1,88
89=Remove Particle Anim at...,0,30,0,0,0,0,0,0,0,Delete particle anims at specified location.,0,1,89
90=Lightning strike at...,0,30,0,0,0,0,0,0,0,A single Ion Storm lightning strike.,0,1,90
91=Go Berzerk,0,0,0,0,0,0,0,0,0,Attached object (cyborg) goes berzerk.,0,1,91
92=Activate Firestorm Defense,0,0,0,0,0,0,0,0,0,Turns on a house's firestorm defense.,0,0,92
93=Deactivate Firestorm Defense,0,0,0,0,0,0,0,0,0,Turns off a house's firestorm defense.,0,0,93
94=Ion-cannon strike...,0,30,0,0,0,0,0,0,0,Fires Ion-Cannon at waypoint specified.,0,0,94
95=Nuke strike...,0,0,0,0,0,0,1,0,0,Fires Nuke at waypoint specified from nearest edge.,0,1,95
96=Chem-missile strike...,0,30,0,0,0,0,0,0,0,Fires Chemical missile at waypoint specified.,0,0,96
97=Toggle Train Cargo,0,0,0,0,0,0,0,0,0,Toggles state of cargo train dropping crate.,0,1,97
98=Play Sound Effect (Random)...,-7,16,0,0,0,0,0,0,0,Plays sound effect at random waypoint.,0,1,98
99=Play Sound Effect At...,-7,16,0,0,0,0,1,0,0,Plays sound effect specified at waypoint specified. ,0,1,99
100=Play Ingame Movie...,0,12,0,0,0,0,0,0,0,Displays the specified movie ingame. Player still has control of interface and units.,0,1,100
101=Reshroud Map At...,0,30,0,0,0,0,0,0,0,Does an anti-map ping at waypoint specified.,0,1,101
102=Lightning Storm strike...,0,0,0,0,0,0,1,0,0,Lightning storm owned by owner of trigger at waypoint.,0,1,102
103=Timer Text...,-4,13,0,0,0,0,0,0,0,What text label to display with timer (i.e. actual text is in game.str).,0,1,103
104=Flash Team...,-5,7,0,0,0,0,0,0,0,Flashes the specified team for the specified number of frames,0,1,104
105=Talk Bubble...,-1,7,0,0,0,0,0,0,0,Displays talk bubble over unit,0,1,105
106=Set Tech Level (Techno)[Level]... ,-9,39,0,0,0,0,1,0,0,Sets the specified Techno to the specified tech level.,0,1,106
107=Reinforcement by Chrono... ,-1,7,0,0,0,0,1,0,0,Teleport reinforcement team to special waypoint location.,0,1,107
108=Create Crate...,0,31,0,0,0,0,1,0,0,Create a Goodie Crate with specific contents at a waypoint. You are responsible for knowing which contents are currently supported by the game.,0,1,108
109=Iron Curtain At...,0,0,0,0,0,0,1,0,0,Iron Curtain Super effect at Waypoint.,0,1,109
110=Pause Game for (seconds)...,0,6,0,0,0,0,0,0,0,This will pause the game for the specified seconds.,0,1,110
111=Evict Occupiers,0,0,0,0,0,0,0,0,0,This Action will Evict Urban Combat occupants >from the attached Building.,0,1,111
112=Center (Jump) Camera at Waypoint...,0,30,0,0,0,0,1,0,0,Moves the tactical view to a specified waypoint instantly.,0,1,112
113=Make side cheer,0,2,0,0,0,0,0,0,0,Will make all infantry who aren't busy do their cheer animation.,0,1,113
114=Set Tab to (0-3)...,0,6,0,0,0,0,0,0,0,Forces the sidebar to the desired tab.,0,1,114
115=Flash Cameo,-9,39,0,0,0,0,1,0,0,Flashes the Cameo for this type for this long in frames.,0,1,115
116=Stop Sounds At,0,30,0,0,0,0,1,0,0,Stops all sounds at waypoint that were started using the Play Sound At trigger,0,1,116
117=Play Ingame Movie (pause game)...,0,12,0,0,0,0,0,0,0,Displays the specified movie ingame. Game pauses while movie playing. Player has no control during movie.,0,1,117
118=Clear all smudges,0,0,0,0,0,0,0,0,0,Will delete all Smudge objects from the map.,0,1,118
119=Destroy all of...,0,2,0,0,0,0,0,0,0,Kills everything of the specified house.,0,1,119
120=Destroy all Buildings of...,0,2,0,0,0,0,0,0,0,Kills all buildings for specified house.,0,1,120
121=Destroy all Land Units of...,0,2,0,0,0,0,0,0,0,Kills all land units for specified house.,0,1,121
122=Destroy all Naval Units of...,0,2,0,0,0,0,0,0,0,Kills all naval units for specified house.,0,1,122
123=Mind Control Base of...,0,2,0,0,0,0,0,0,0,The owner of the trigger will mind control the argument's base.,0,1,123
124=Restore Mind Controlled Base to...,0,2,0,0,0,0,0,0,0,The owner of the trigger will give all buildings that were the argument's back to it.,0,1,124
125=Create Building At...,-10,47,0,0,0,0,1,0,0,Owner of the trigger will gain this type of building at this waypoint. Overlays will be cleared and units bumped.,0,1,125
126=Restore Starting Technos of...,0,2,0,0,0,0,0,0,0,All Buildings and units this house had at the start of the game will be recreated. Will bump units and erase Overlays.,0,1,126
127=Chrono Screen Effect for ...,0,6,0,0,0,0,0,0,0,Will tile the screen with the full screen chrono effect for this many frames.,0,1,127
128=Teleport All to...,0,30,0,0,0,0,1,0,0,All Units of trigger owning House will teleport to Waypoint.,0,1,128
129=Set Superweapon Charge,-11,20,0,0,0,0,1,0,0,The owner of this trigger will have this superweapon charged to this percent%1 if they have the superweapon. Takes an int (0-100).,0,1,129
0=-无行为-,0,0,0,0,0,0,0,0,0,这是一个空的行为。就是什么也不做,相当于没有行为。为什么要用?赶紧换成一个有用的行为啦╮(╯▽╰)╭,0,1,0
1=胜利者是...,0,2,0,0,0,0,0,0,0,胜利者必须是特定的某一方,那么游戏就会立即结束。例如%1 游戏者这一方是特定的。多人任务时,此行为会导致所有玩家失败。,0,1,1
2=失败者是...,0,2,0,0,0,0,0,0,0,失败者必须是特定的某一方,那么游戏就会立即结束。失败者指定的某一方,游戏立即结束。例如%1 游戏者这一方是特定的。如果设为非玩家的国家会造成任务胜利典型例子是改动过国家顺序的MOD。多人任务时此行为会导致所有玩家失败。,0,1,2
3=生产开始...,0,2,0,0,0,0,0,0,0,特定作战方将开始生产单位和建筑,只对电脑方有效。,0,1,3
4=建立小队...,-1,7,6,0,0,0,0,0,0,本触发事件的作战方(归属于作战小队设置的作战方)将会建立一个作战小队实例,但小队成员不会自动生成。小队属性不同效果不同:小队有自动建造则使用工厂建造小队(对人类玩家无效)。小队有补充新兵则召集地图上允许重组的单位,或将有可为小队重组成员的小队拆散再组建(对人类玩家有效)。小队实例的创建遵循小队类型的最大值设置。,0,1,4
5=解散小队...,-1,7,0,0,0,0,0,0,0,将特定小队类型的全部实例销毁。小队的成员将被解散,停止执行脚本,可做为新兵加入其他小队中。,0,1,5
6=全部搜索...,0,2,0,0,0,0,0,0,0,军队全部单位%1(归属于特定的%1作战方)进入搜索模式Hunt。他们将搜索并消灭敌人。设定在rules里的[Hunt]段,默认为不反击。,0,1,6
7=援军(小队)...,-1,7,6,0,0,0,0,0,0,建立一个特定的援军小队。效果为直接刷出来,刷兵路径点为小队设置中的路径点。,0,1,7
8=降落区闪动(路径点)...,0,0,0,0,0,0,1,0,0,TS残留功能在特定的路径点出现一个空降舱降落区域动画该动画为循环播放。此区域附近的地图也将会显示。,0,1,8
9=卖掉全部建筑...,0,2,0,0,0,0,0,0,0,卖掉所有的特定建筑(为兑取现金)。典型应用在游戏中电脑玩家发动的最后攻击中。,0,1,9
10=播放影片...,-10,50,0,0,0,0,0,0,0,显示特定的影片(全屏幕)。游戏在此期间将会暂停,在播放完成后自动恢复正常。,0,1,10
11=文本触发事件...,-4,13,2,6,0,0,0,0,0,显示字符文件的文本标志<标签>。文本在csf文件中需要用csf编辑器编辑。以NOSTR:开头可以直接显示内容,但空格会丢失,且对多语言支持不佳;另外所属方参数仅在多人模式有意义。,0,1,11
12=摧毁触发事件...,-2,14,0,0,0,0,0,0,0,摧毁所有特定触发事件类型的当前实例。不会影响未来的触发实例(包括正在建立中的)。,0,1,12
13=自动创建开始...,0,2,0,0,0,0,0,0,0,特定作战方开始自动创建小队,如当建筑被攻击时自动调用空闲单位去灭掉侵略者。本事件适合电脑方开始自动建造。,0,1,13
14=更改所属...,0,2,0,0,0,0,0,0,0,更改单位或建筑归属到特定作战方。,0,1,14
15=允许胜利,0,0,0,0,0,0,0,0,0,清除一个“障碍”后允许游戏者胜利。障碍的数量等于已建立而拥有此行为的触发数。如果这个行为效果不好,请使用触发链和 行为1 胜利者是...。,0,1,15
16=显示全部地图,0,0,0,0,0,0,0,0,0,为游戏者显示全部地图(清除黑幕)。联机地图使用该行为会造成“重新连线错误”。,0,1,16
17=显示路径点周围区域...,0,30,2,0,0,0,0,0,0,为游戏者显示特定路径定一定范围内的地图区域。,0,1,17
18=显示路径点的单元区域...,0,30,0,0,0,0,0,0,0,显示全部与特定路径点共享相同区域的单元。该行为会产生一些附带效应,使用时要谨慎!,0,1,18
19=播放声音...,-7,16,2,0,0,0,0,0,0,播放特定的音效定义在sound(md).ini。,0,1,19
20=播放音乐...,-8,17,0,0,0,0,0,0,0,播放特定的音乐曲目定义在theme(md).ini中。,0,1,20
21=播放语音...,-6,18,2,0,0,0,0,0,0,播放特定的语音定义在eva(md).ini中。,0,1,21
22=强制触发事件...,-2,14,0,0,0,0,0,0,0,不管特定触发的条件强制执行特定触发的行为。此行为有BUG特定触发会连续触发6次需要在特定触发中使用 行为12 摧毁触发事件 摧毁其本身来阻止其触发多次。,0,1,22
23=计时开始,0,0,0,0,0,0,0,0,0,启动全局任务计时器,存在于游戏界面右下角。要开启一个正常的计时器,需要在一个触发内依次设置 27 计时设置、23 计时开始、103 计时器文本 三个行为。,0,1,23
24=计时停止,0,0,0,0,0,0,0,0,0,停止全局任务计时器,此时文本会消失。,0,1,24
25=计时增加...,0,6,0,0,0,0,0,0,0,按特定的时间增加全局任务计时器。,0,1,25
26=计时缩短...,0,6,0,0,0,0,0,0,0,按特定的时间缩短全局任务计时器。但特定的时间值不能小于零。,0,1,26
27=计时设置...,0,6,0,0,0,0,0,0,0,将全局任务计时器设置为特定的时间值。要开启一个正常的计时器,需要在一个触发内依次设置 27 计时设置、23 计时开始、103 计时器文本 三个行为。,0,1,27
28=全局开启...,0,35,0,0,0,0,0,0,0,开启全局变量。全局变量被命名于 rules 文件的[VariableNames]段。全局变量可以是关闭[0]或开启[1]。,0,1,28
29=全局关闭...,0,35,0,0,0,0,0,0,0,关闭全局变量。全局变量被命名于 rules 文件的[VariableNames]段。全局变量可以是关闭[0]或开启[1]。,0,1,29
30=自动建设基地...,0,37,0,0,0,0,0,0,0,初始化计算机遭遇战模式的建设控制,可以是[ON]或[OFF]状态。当设为[ON]%1时在单人任务中模式/遭遇战模式计算机将接管控制(要确保有建造厂)。,0,1,30
31=逐单元延伸黑幕,0,0,0,0,0,0,0,0,0,一步一步(按单元)增大地图的黑幕(不可见)区域需要相应的延伸黑幕INI设置才能使用。,0,1,31
32=摧毁关联物体,0,0,0,0,0,0,0,0,0,摧毁该触发关联的所有建筑%1 桥梁%1 或单位。如果是桥梁,那么此触发必须被用单元标记放置在目标桥梁的下方(只能放置一个单元标记)。,0,1,32
33=添加一次特定的超级武器...,0,36,0,0,0,0,0,0,0,为拥有此触发的参战方添加一次(只一次)特定的超级武器。,0,1,33
34=永久添加特定的超级武器...,0,36,0,0,0,0,0,0,0,为拥有此触发的参战方添加永久的超级武器。,0,1,34
35=超武首选目标为特定建筑...,0,8,0,0,0,0,0,0,0,指定拥有此触发的参战方超级武器攻击时的首选目标,其参数为[BuildingTypes]里的ID。,0,1,35
36=全部更改归属...,0,2,0,0,0,0,0,0,0,此触发的参战方的所有对象更改归属到特定参战方。,0,1,36
37=结盟...,0,2,0,0,0,0,0,0,0,使此触发的参战方与特定参战方结盟,这个结盟是双向的。,0,1,37
38=成为敌人...,0,2,0,0,0,0,0,0,0,使此触发的参战方与特定参战方不结盟(宣战)这个宣战是双向的。被宣战的参战方若是电脑其会判定为存在敌人进攻用AI触发会被激活。,0,1,38
39=更改视野等级(无用)...,0,6,0,0,0,0,0,0,0,更改游戏者雷达图的视野等级。使用 1 为超常视野%1 2 为缩小视野。,0,0,39
40=调整游戏者视野...,0,0,21,22,23,24,0,0,0,调整游戏者的视野进入地图。进入格式x%1y%1w%1h在这里x%1y 指定左上角, w%1h 指定宽度和高度。,0,1,40
41=播放动画在...,0,25,6,0,0,0,1,0,0,在特定的单元播放特定的动画。这里填的动画ID并不一定是Rules里指定的而是实际加载进游戏内存的顺序。如果有跳号或者不是从0开始的请使用第三方工具获得正确序号或者确保从Rules读取的序号是修正过的。此外这里的数值1表示如果原地存在一个类型相同的动画则跳过创建为2表示删除前一个存在的同类型动画。为6表示重建动画。,0,1,41
42=爆炸在...,0,41,0,0,0,0,1,0,0,使用特定的武器,在特定的单元%1 产生一个爆炸。用数字指定特定的武器在Ares中遵循[WeaponTypes]列表的注册顺序,不在列表内的武器无法直接知道注册顺序。,0,1,42
43=在指定路径点创建一个Voxel碎片,0,29,0,0,0,0,1,0,0,在指定地点创造一个Voxel碎片ID号在rules的[VoxelAnims]下有定义。其中8是陨石。,0,1,43
44=离子风暴开始(无用),0,6,0,0,0,0,0,0,0,TS残留功能启动离子风暴按特定的游戏帧。,0,0,44
45=离子风暴结束(无用),0,0,0,0,0,0,0,0,0,TS残留功能结束离子风暴进程。,0,0,45
46=禁止用户输入,0,0,0,0,0,0,0,0,0,禁止用户输入,失去鼠标无法控制。,0,1,46
47=允许用户输入,0,0,0,0,0,0,0,0,0,允许用户输入取消动作46的效果。,0,1,47
48=移动并居中视野...,0,28,0,0,0,0,1,0,0,将战术视野移动到特定的路径点速度为1-4的一个值太大会造成卡屏无法移动视野。,0,1,48
49=放大视野,0,0,0,0,0,0,0,0,0,放大战术视野,减少分辨率,同时不能输入。,0,1,49
50=缩小视野,0,0,0,0,0,0,0,0,0,取消49放大视野的作用缩小战术视野增加分辨率回复输入。,0,1,50
51=重置全部地图的黑幕(未探测区),0,0,0,0,0,0,0,0,0,遮蔽全部地图,0,1,51
52=更改照明状态(无用),0,42,0,0,0,0,0,0,0,更改某建筑的局部照明方式。此触发与某一可生产局部照明的建筑相关联。,0,0,52
53=允许事件触发,-2,14,0,0,0,0,0,0,0,允许被勾选为禁止或触发-54设为禁止的触发运行。,0,1,53
54=禁止事件触发,-2,14,0,0,0,0,0,0,0,禁止可以正常或被触发-53设为可以运行的触发停止运行。,0,1,54
55=建立雷达事件,0,43,2,0,0,0,1,0,0,在特定的路径点建立雷达事件。0、3、4红圈 1、2黄圈 5篮圈。,0,1,55
56=开启局部变量...,0,3,0,0,0,0,0,0,0,开启局部变量。局部变量可以是 关闭[0] 或 开启[1]。,0,1,56
57=关闭局部变量...,0,3,0,0,0,0,0,0,0,关闭局部变量。局部变量可以是 关闭[0] 或 开启[1]。,0,1,57
58=流星雨在...,0,44,0,0,0,0,1,0,0,在特定的路径点建立显示一个流星雨事件。,0,0,58
59=在特定路径点减少矿石,0,30,0,0,0,0,0,0,0,减少特定路径点周围的矿石。,0,1,59
60=变卖关联建筑,0,0,0,0,0,0,0,0,0,卖掉与此触发关联的建筑。,0,1,60
61=关闭关联的建筑,0,0,0,0,0,0,0,0,0,关闭与此触发关联的建筑的供能,建筑将强制失去电力供应。效果与建筑中耗能=0相同。,0,1,61
62=启动关联的建筑,0,0,0,0,0,0,0,0,0,启动与此触发关联的建筑的供能,取消行为 61关闭关联的建筑 的效果。效果与建筑中耗能=1相同。,0,1,62
63=给予100损伤在...,0,30,0,0,0,0,0,0,0,在特定的位置给予 100 点爆炸伤害,不会播放任何动画。,0,1,63
64=闪光(较小)(无用)...,0,30,0,0,0,0,0,0,0,在特定区域显示一个较小的闪光。,0,0,64
65=闪光(中等)(无用)...,0,30,0,0,0,0,0,0,0,在特定区域显示一个中等的闪光。,0,0,65
66=闪光(较大)(无用)...,0,30,0,0,0,0,0,0,0,在特定区域显示一个较大的闪光。,0,0,66
67=宣告胜利,0,0,0,0,0,0,0,0,0,宣告游戏者胜利,但不会显示“任务完成”的图示。,0,1,67
68=宣告失败,0,0,0,0,0,0,0,0,0,宣告游戏者失败,但不会显示“任务失败”的图示。,0,1,68
69=游戏任务强制胜利,0,0,0,0,0,0,0,0,0,强制结束游戏任务,显示“任务完成”的图示。,0,1,69
70=摧毁关联标记...,-3,38,0,0,0,0,0,0,0,摧毁所有标记实例和所有关联的触发。,0,1,70
71=设置环境步幅...,0,45,0,0,0,0,0,0,0,设置环境亮度淡入步幅值一般使用1020000000。行为71~73连用+行为142~144连用可以做出变更光照效果。,0,1,71
72=设置环境速率...,0,45,0,0,0,0,0,0,0,设置环境亮度淡入速率一般使用1036000000。行为71~73连用+行为142~144连用可以做出变更光照效果。,0,1,72
73=设置环境亮度...,0,6,0,0,0,0,0,0,0,用新的环境亮度等级淡入替代原亮度,使用一个整数(0-100)代表光照设置里的(0.01-1)行为71~73连用+行为142~144连用可以做出变更光照效果。,0,1,73
74=AI 触发开始...,0,2,0,0,0,0,0,0,0,启动特定参战方的 AI 触发。,0,1,74
75=AI 触发停止...,0,2,0,0,0,0,0,0,0,停止特定参战方的 AI 触发。,0,1,75
76=AI 触发小队比例...,0,6,0,0,0,0,0,0,0,AI 进行 AI 触发小队建造的比例数值越大越倾向于使用局部的AI触发(在地图内)越小越倾向于使用全局的AI触发(在ai(md).ini中)。100 = 全部 局部AI触发小队%1 0 = 全部 全局AI触发小队。,0,1,76
77=飞行作战小队比例...,0,6,0,0,0,0,0,0,0,AI 进行飞行小队建造的比例(100 = 全部小队%1 0 = 全部随机)。,0,1,77
78=步兵作战小队比例...,0,6,0,0,0,0,0,0,0,AI 进行步兵小队建造的比例(100 = 全部小队%1 0 = 全部随机)。,0,1,78
79=作战小队单位比例...,0,6,0,0,0,0,0,0,0,AI 进行小队单位建造的比例(100 = 全部小队%1 0 = 全部随机)。,0,1,79
80=援军(小队)[在路径点]...,-1,7,6,0,0,0,1,0,0,在特定的路径点区域建造援军作战小队。效果为直接刷出来,刷兵路径点为行为设置中的路径点。,0,1,80
81=自我唤醒,0,0,0,0,0,0,0,0,0,唤醒所有休息sleep或无指令harmless单位进行防卫模式。,0,1,81
82=唤醒所有休息单位,0,0,0,0,0,0,0,0,0,唤醒所有休息sleep的单位模式。,0,1,82
83=唤醒所有无指令单位,0,0,0,0,0,0,0,0,0,唤醒所有无指令harmless的单位模式。,0,1,83
84=唤醒某小组单位...,0,6,0,0,0,0,0,0,0,唤醒有该小组编号的无指令harmless单位。,0,1,84
85=矿脉生长...,0,37,0,0,0,0,0,0,0,控制矿脉是否生长。,0,1,85
86=矿石生长...,0,37,0,0,0,0,0,0,0,控制矿石是否生长。,0,1,86
87=冰层延伸(无用)...,0,37,0,0,0,0,0,0,0,控制结冰面积是否增长。,0,0,87
88=粒子动画...,0,26,0,0,0,0,1,0,0,在特定区域显示粒子动画。,0,1,88
89=删除粒子动画...,0,0,0,0,0,0,1,0,0,删除特定区域的粒子动画。,0,1,89
90=闪电打击...,0,0,0,0,0,0,1,0,0,单个的离子风暴闪电打击。目前只有在爱伦斯Alliance编辑器上才可以正常使用这个功能。,0,1,90
91=Go Berzerk(无用),0,0,0,0,0,0,0,0,0,Attached object (cyborg) goes berzerk.,0,0,91
92=启动烈火风暴防御系统(无用),0,0,0,0,0,0,0,0,0,启动某一作战方的烈火风暴防御系统。,0,0,92
93=关闭烈火风暴防御系统(无用),0,0,0,0,0,0,0,0,0,关闭某一作战方的烈火风暴防御系统。,0,0,93
94=离子炮打击(无用),0,0,0,0,0,0,1,0,0,在特定的路径点实施离子炮打击。,0,0,94
95=核弹打击...,0,0,0,0,0,0,1,0,0,在特定的路径点边缘实施核弹打击。,0,1,95
96=化学导弹打击(无用),0,0,0,0,0,0,1,0,0,在特定的路径点实施化学导弹打击。,0,0,96
97=Toggle Train Cargo(无用),0,0,0,0,0,0,0,0,0,TS残留功能列车卸货切换状态,0,0,97
98=播入音效(随机)...,-7,16,0,0,0,0,0,0,0,在随机的路径点播放音效。这个动作不需要设置重复触发,启动以后即在随机路径点不停播放这个音效,间隔时间随机。,0,1,98
99=播放音效...,-7,16,0,0,0,0,1,0,0,在特定的路径点播放特定的音效。这个动作不需要设置重复触发,启动以后即在特定路径点不停播放这个音效,间隔时间随机。,0,1,99
100=在雷达窗口播放影片...,-10,50,0,0,0,0,0,0,0,显示特定的开场影片(在小屏幕)。游戏者仍能对步兵和单位进行控制。,0,1,100
101=重置特定路径点的黑幕(未探测区)...,0,30,0,0,0,0,0,0,0,用黑幕覆盖特定的路径点。,0,1,101
102=闪电风暴打击...,0,0,0,0,0,0,1,0,0,此触发的所有者在特定的路径点实施闪电风暴打击。,0,1,102
103=计时器文本...,-4,13,0,0,0,0,0,0,0,计时器显示什么文本标签(如文本是在csf文件中)。要开启一个正常的计时器,需要在一个触发内依次设置 27 计时设置、23 计时开始、103 计时器文本 三个行为。,0,1,103
104=闪亮小队...,-5,7,0,0,0,0,1,0,0,用特定的帧数闪亮特定的小队填600以上效果较好。,0,1,104
105=显示对话注释框...(无用),-1,7,0,0,0,0,0,0,0,TS残留功能在特定小队的上面显示对话注释框。,0,0,105
106=设置科技等级(Techno)[Level]... ,-9,39,0,0,0,0,1,0,0,设置特定的单位或建筑到特定的科技等级。,0,1,106
107=超时空传送援军(小队)[在路径点]... ,-1,7,0,0,0,0,1,0,0,传送援军小队到特定的路径点区域并制造一个超时空穿送的效果而超时空传送显示的动画需要与事件41连用。,0,1,107
108=建立小木箱...,0,31,0,0,0,0,1,0,0,在特定的路径点建立一个特定内容的工具木箱。0金钱大的%1 1获得随机单位%1 2医疗%1 3获得隐形能力%1 4爆炸%1 5爆炸大的%1 6金钱%1 7黑幕重置%1 8清除黑幕%1 9护甲加强%1 10速度加强%1 11攻击加强%1 12获得核弹一枚%1 13空箱子%1 14升级%1 15空箱子%1 16瓦斯气体%1 17一片矿。,0,1,108
109=铁幕装置作用于...,0,0,0,0,0,0,1,0,0,将铁幕装置作用于特定的路径点。,0,1,109
110=游戏暂停(秒)...,0,6,0,0,0,0,0,0,0,使游戏暂停特定的秒数。,0,1,110
111=驱逐占据者,0,0,0,0,0,0,0,0,0,本行为将会从城市关联的建筑中驱逐占据的作战单位。要使用本行为,必须在每一个建筑上关联一个单独的标签,重复的标签无用。默认每一个触发对应一个标签,你可以使用 编辑→标签编辑 来增加这个触发的标签。,0,1,111
112=立即居中当前视野到特定路径点...,0,0,0,0,0,0,1,0,0,立即将战术视野移动到特定的路径点。,0,1,112
113=欢呼,0,2,0,0,0,0,0,0,0,使所有步兵单位进行欢呼动作。,0,1,113
114=设置建造栏到(0-3)...,0,6,0,0,0,0,0,0,0,强制使建造栏跳转到特定的界面。0建筑界面%1 1防御界面%1 2步兵界面%1 3车辆界面。,0,1,114
115=闪动建造栏中的单位,-9,39,0,0,0,0,1,0,0,闪动建造栏中的单位数值为闪烁时间一般为120比较合适。,0,1,115
116=停止特定路径点的音效...,0,30,0,0,0,0,1,0,0,这个触发可以停止在某个路径点播放的音效。,0,1,116
117=播放开场影片(游戏暂停)...,-10,50,0,0,0,0,0,0,0,显示特定的游戏开场影片。影片播放时,游戏暂停。播放影片期间游戏者不可进行操作。,0,1,117
118=清除全部污染,0,0,0,0,0,0,0,0,0,将从地图上删除所有污染对象。,0,1,118
119=将特定作战方全部摧毁...,0,2,6,0,0,0,0,0,0,消灭特定作战方的所有建筑、单位等。数值为1时表示直接移除单位不产生任何破坏效果。,0,1,119
120=将特定方建筑全部摧毁...,0,2,0,0,0,0,0,0,0,摧毁特定作战方的所有建筑。,0,1,120
121=将特定方陆军单位全部摧毁...,0,2,0,0,0,0,0,0,0,消灭特定作战方的所有陆军单位。,0,1,121
122=将特定方海军单位全部摧毁...,0,2,0,0,0,0,0,0,0,消灭特定作战方的所有海军单位。,0,1,122
123=心灵控制基地...,0,2,0,0,0,0,0,0,0,此触发的所有者将会通过心灵控制敌方所有建筑。,0,1,123
124=解除基地的心灵控制...,0,2,0,0,0,0,0,0,0,此触发的所有者将重新取得被敌方心灵控制的所有建筑的作战控制权。,0,1,124
125=将建筑建于...,-10,47,6,0,0,0,1,0,0,此触发的所有者将在本路径点获得该类型的建筑如果目标路径点有建筑则不会建造如果目标路径点有单位则会强行弹开单位。此动作的数值参数用于控制是否禁止建造动画为1则不播放。,0,1,125
126=恢复至游戏初始建筑单位状态...,0,2,0,0,0,0,0,0,0,此作战方游戏初始的所有建筑和单位将会重建。会引起单位冲击和覆盖图被清除。,0,1,126
127=超时空事件效果 ...,0,6,0,0,0,0,0,0,0,将会用多帧画面全屏幕平铺显示超时空穿梭事件效果数值一般为60填太大会游戏卡死。,0,1,127
128=全部超时空传送到...,0,0,0,0,0,0,1,0,0,此触发的作战方所有单位将被传送到特定的路径点。,0,1,128
129=设置超武充能,-11,20,0,0,0,0,1,0,0,此触发的所有者如果有超级武器,那么此超级武器的充能状态会被设置为“完成了”百分之几 。使用一个整数(0-100)。,0,1,129
; YR
130=Restore Starting Buildings of...,0,2,0,0,0,0,0,0,0,All Buildings this house had at the start of the game will be healed or recreated. Will bump units and erase Overlays.,0,1,130,1
;131=Flash Buildings of Type...,-12,8,0,0,0,0,1,0,0,All buildings of this type owned by trigger owner will flash for this long.,0,1,131,1
131=Flash Buildings of Type...,-9,47,0,0,0,0,1,0,0,All buildings of this type owned by trigger owner will flash for this long.,0,1,131,1
132=Superweapon Set Recharge Time,-11,20,0,0,0,0,1,0,0,Changes the time (in frames) this superweapon takes to charge the next time it is reset%1 set%1 or fired.,0,1,132,1
133=Superweapon Reset Recharge Time,-11,20,0,0,0,0,1,0,0,Changes the time (in frames) this superweapon takes to charge back to normal.,0,1,133,1
134=Superweapon Reset,0,36,0,0,0,0,0,0,0,Resets a superweapon like a spy had gotten in.,0,1,134,1
135=Preferred Target Cell Set,0,30,0,0,0,0,0,0,0,The owner of this trigger will aim all future targetable superweapons at this waypoint.,0,1,135,1
136=Preferred Target Cell Clear,0,0,0,0,0,0,0,0,0,The owner of this trigger will go back to targeting its superweapons normally.,0,1,136,1
137=Center Base Cell Set,0,30,0,0,0,0,0,0,0,Owner of this trigger will consider the center of its base to be this waypoint.,0,1,137,1
138=Center Base Cell Clear,0,0,0,0,0,0,0,0,0,Owner of this trigger will go back to computing its center.,0,1,138,1
139=Blackout Radar,0,6,0,0,0,0,0,0,0,Trigger Owner will have radar blackout for this many frames.,0,1,139,1
140=Defensive Target Cell Set,0,30,0,0,0,0,0,0,0,The owner of this trigger will aim all future force shields at this waypoint.,0,1,140,1
141=Defensive Target Cell Clear,0,0,0,0,0,0,0,0,0,The owner of this trigger will go back to targeting its force shields normally.,0,1,141,1
142=Retint Red,0,6,0,0,0,0,0,0,0,Retint the Red portion of the screen,0,1,142,1
143=Retint Green,0,6,0,0,0,0,0,0,0,Retint the Green portion of the screen,0,1,143,1
144=Retint Blue,0,6,0,0,0,0,0,0,0,Retint the Blue portion of the screen,0,1,144,1
145=Jump camera home,0,0,0,0,0,0,0,0,0,Just like hitting the 'H' key.,0,1,145,1
130=恢复初始建筑...,0,2,0,0,0,0,0,0,0,该参战方游戏初始的所有建筑将会被修复或重建。 会引起单位冲击和覆盖图清除。,0,1,130,1
131=闪亮特定类型的建筑...,-9,47,0,0,0,0,1,0,0,该触发所属的所有特定类型的建筑将闪亮特定的时间。,0,1,131,1
132=设置超武充能时间,-11,20,0,0,0,0,1,0,0,设置任何数值,能设置超武至充能完毕的剩余时间,使用画面帧数(1游戏秒=15帧),0,1,132,1
133=设置超级武器CD充能百分比无用,-11,20,0,0,0,0,1,0,0,设置超级武器从0%到100%充能的CD时间。(使用画面帧数)。,0,0,133,1
134=超级武器复位,0,36,0,0,0,0,0,0,0,就与间谍进入超级武器一样,超级武器将会复位(重新开始倒计时)。,0,1,134,1
135=超武首选目标路径点...,0,30,0,0,0,0,1,0,0,该触发的所有者会将超级武器的攻击目标指向此路径点。,0,1,135,1
136=超武首选目标路径点清除,0,0,0,0,0,0,0,0,0,该触发的所有者将返回,正常确定其超级武器的攻击目标。,0,1,136,1
137=基地中心单元设置,0,0,0,0,0,0,1,0,0,此触发的所有者将认为此路径点为其基地的中心单元,脚本里“集合在基地附近”将会集合在这个路径点附近。,0,1,137,1
138=基地中心单元清除,0,0,0,0,0,0,0,0,0,此触发的所有者将返回,并去计算其中心位置。,0,1,138,1
139=雷达信息中断,0,6,0,0,0,0,0,0,0,此触发的所有者的雷达将中断一段时间,填太小会没有效果。,0,1,139,1
140=设置防御目标单元,0,30,0,0,0,0,0,0,0,此触发的所有者将自动对特定的路径点区域进行防御行动。,0,1,140,1
141=清除防御目标单元,0,0,0,0,0,0,0,0,0,此触发的所有者将返回到正常情况下的防御目标区域。,0,1,141,1
142=重绘红色,0,6,0,0,0,0,0,0,0,重绘屏幕的红色部分。采用百分比这里的50代表光照里的0.5。行为71~73连用+行为142~144连用可以做出变更光照效果。,0,1,142,1
143=重绘绿色,0,6,0,0,0,0,0,0,0,重绘屏幕的绿色部分。采用百分比这里的50代表光照里的0.5。行为71~73连用+行为142~144连用可以做出变更光照效果。,0,1,143,1
144=重绘蓝色,0,6,0,0,0,0,0,0,0,重绘屏幕的蓝色部分。采用百分比这里的50代表光照里的0.5。行为71~73连用+行为142~144连用可以做出变更光照效果。,0,1,144,1
145=战术视野跳转至基地,0,0,0,0,0,0,0,0,0,和按下“H”键效果相同。,0,1,145,1
[BridgesTS]

View file

@ -489,10 +489,13 @@ Cancel=Cancel
None=None
Yes=Yes
No=No
Error=Error
; YRM
NeedsYR=This map will need Yuri''s Revenge to be played.
AutoLevelerDlgDesc=This tool will try to automatically raise the terrain using the cliffs.\nIt may take some seconds to execute, as there are masses of data to handle.\nAfter this, you should check your map if everything looks fine. If not, you should use the different height tools, especially flatten ground, to fix any errors. You can use Edit->Undo to undo anything that has been done by using this function.
; name replacements
N_AMRADR=American Air Force Command HQ
N_SENGINEER=Soviet Engineer
@ -546,6 +549,16 @@ TipDialogShowAtStartup=Show tips at program start
TipDialogClose=Close
TipDialogCaption=Tip of the day
; Options
OptionsCaption=Options
OptionsDesc=Red Alert 2 EXE (make sure its in the correct path)
OptionsBrowse=Browse
OptionsLanguage=Language / Sprache:
OptionsSupportSettings=Support settings
OptionsSupportMissionsAndMods=Support mission disks and mods (recommended)
OptionsSupportOriginalRA2Only=Only support original Red Alert 2
OptionsPreferFA2TheaterSettings=Prefer FinalAlert 2 theater INI files
; main dialog strings
MainDialogCaption=%9
MainDialogCaptionRA2=%9
@ -661,6 +674,17 @@ HousesPlayerControl=Player control:
HousesPrepareHouses=Standard houses
HousesAddHouse=New house
HousesDeleteHouse=Delete house
HouseDuplicatedCreatingTip=There are already houses in your map. You need to delete these first.
HouseDuplicatedCreatingCaption=Standard players creation failure
HouseNoneExistense=No houses do exist, if you want to use houses, you should use "Prepare houses" before doing anything else.
HouseNoneExistenseCap=House not found
IniEditorItemUnselected=You cannot delete a section without choosing one.
IniEditorSelectionDeletePrefix=Are you sure you want to delete "
IniEditorSelectionDeleteSUffix="? You should be really careful, you may not be able to use the map afterwards.
IniEditorDeleteSelectionCap=Delete section
IniEditorAddKeyDesc=Please set the name and value for the current key here: (for example, setting a new key "Strength" with the value 200 can be written as "Strength=200". You don´t need to specify a value.)
IniEditorAddKeyCap=Create key
; loading dialog
LoadLoadRules=Loading rules
@ -679,6 +703,9 @@ LoadVersion=Version:
LoadInitDDraw=Initializing Direct Draw 6
LoadInitPics=Loading Graphics
LoadExtractStdMixFiles=Opening std. MIX files (may take some time)
TriggerDeleteTip=If you want to delete all attached tags, too, press 'Yes'.\nIf you don´t want to delete these tags, press 'No'.\nIf you want to cancel deletion of the trigger, press 'Cancel'.\n\nNote: CellTags will never be deleted using this function
TaskforceDeleteMsgDesc=Are you sure to delete the selected task force? If you delete it, make sure to eliminate ANY references to this task force in team-types.
; iso view
IsoCaption=Map view
@ -1062,6 +1089,7 @@ Cancel=取消
None=
Yes=
No=
Error=错误
; YRM
NeedsYR=要用此地图进行游戏,需要尤里的复仇。
@ -1118,6 +1146,16 @@ TipDialogShowAtStartup=启动时显示
TipDialogClose=关闭
TipDialogCaption=您知道吗
; options
OptionsCaption=基本选项
OptionsDesc=游戏路径通常是ra2md.exe所在位置
OptionsBrowse=浏览
OptionsLanguage=语言:
OptionsSupportSettings=功能集
OptionsSupportMissionsAndMods=任务包及MOD扩展 (首选)
OptionsSupportOriginalRA2Only=仅原版游戏
OptionsPreferFA2TheaterSettings=优选地图编辑器地形设定
; menu strings
File=文件
New=新建 Ctrl + N
@ -1264,6 +1302,27 @@ BasicFreeRadar=无偿雷达:
BasicInitTime=初始化时间:
BasicAddOnNeeded=附加数据:
AutoLevelerDlgDesc=该功能会自动抬高被悬崖地块包围的平地。\n地图尺寸如果不小的话耗时会达到几秒。\n操作结束之后请查看地形修改结果是否符合预期如果效果不好可以撤销或者试试其它功能比如平整地块来微调修整。
Auto Leveler=自动抬升地块
IniEditorCaption=Ini编辑器
IniEditorDesc=最好别用这个功能,问题很多。
IniEditorSections=条目:
IniEditorAdd=添加
IniEditorDelete=删除
IniEditorInsert=从外部Ini文件导入
IniEditorSectionContent=条目内容
IniEditorSectionKeys=字段:
IniEditorSectionValue=值:
IniEditorAddKey=添加
IniEditorDeleteKey=删除
IniEditorItemUnselected=您必须选中一个条目才能删除!
IniEditorSelectionDeletePrefix=确定要删除 "
IniEditorSelectionDeleteSUffix="吗? 误删除可能会彻底破坏地图数据!
IniEditorDeleteSelectionCap=删除条目
IniEditorAddKeyDesc=字段的名称和值必须同时提供,例如 Strength=200
IniEditorAddKeyCap=添加字段
; mapinfo dialog
Map Properties=地图属性
MapDesc=通用地图属性:
@ -1276,6 +1335,22 @@ MapWidth=宽度:
MapHeight=高度:
MapChange=应用更改
; lighting settings dialog
LightingDesc=光照设置能调整地形亮度和颜色亮度比例,可以很亮也可以很暗。注意,不合适的参数会导致玩家看不清场景。物体亮度不受这个设置影响
LightingNormal=常规环境
LightingNormalAmbient=基础亮度:
LightingNormalLevel=级数细分:
LightingNormalRed=红色:
LightingNormalGreen=绿色:
LightingNormalBlue=蓝色:
LightingIonStorm=发生离子风暴时
LightingWeatherStorm=发生闪电风暴时
LightingWeatherStormAmbient=基础亮度:
LightingWeatherStormLevel=级数细分:
LightingWeatherStormRed=红色:
LightingWeatherStormGreen=绿色:
LightingWeatherStormBlue=蓝色:
; singleplayer basics dialog
SingleplayerDesc=单人地图的附加设置。
SingleplayerStartingDropships=开始运输船(可能无用):
@ -1314,6 +1389,12 @@ HousesDeleteHouse=删除参战方
HouseAlliesCaption=敌我关系编辑器
HouseAlliesEnemies=敌对方
HouseAlliesAllies=友方
HouseDuplicatedCreatingTip=地图中已经有所属方存在了,需要全部删掉才能再创建标准参战方。
HouseDuplicatedCreatingCaption=创建标准参战方失败    
NewRA2HouseDlgCaption=添加参战方
NewRA2HouseDlgChooseParent=从所选国家派生:
HouseNoneExistense=当前不存在任何参战方,可以点击“标准参战方”快速添加,或自己手动添加每一个参战方
HouseNoneExistenseCap=参战方无效
; loading dialog
LoadLoadRules=正在载入 rules ...
@ -1334,6 +1415,9 @@ LoadInitDDraw=初始化 Direct Draw 6 ...
LoadInitPics=正在载入图像...
LoadExtractStdMixFiles=正在打开 std.mix 文件(可能需要一些时间)
LoadingDialogCaption=正在刷新图像
LoadingDialogDesc=重绘屏幕图像中,马上就好
; trigger editor
TriggerDesc=选择当前触发:
TriggerName=nam
@ -1341,11 +1425,73 @@ TriggerNew=新建
TriggerPlaceOnMap=放置单元标记
TriggerClone=复制
TriggerDelete=删除
TriggerDeleteTip=选择“确定”删除所有相关联的标签\n选择“否”保留所有关联的标签\n选择“取消”放弃删除\n\n注意触发被删除后关联的单元标记不会受到影响仍然残留
TriggerOptionType=类型(会同步至全部关联标记)
TriggerOptionName=名称:
TriggerOptionHouse=所属方:
TriggerOptionAttachedTrigger=关联的触发
TriggerOptionDisableTip=被禁止的触发必须由其它触发激活后才能继续运作
TriggerOptionDisabled=禁止
TriggerOptionEasy=简单
TriggerOptionMedium=中等
TriggerOptionHard=困难
TriggerEventCurrent=当前事件:
TriggerEventNew=新建
TriggerEventDelete=删除
TriggerEventOptions=事件选项
TriggerEventType=事件类型:
TriggerEventParams=事件参数:
TriggerEventParamValue=参数值:
TriggerEventDesc=先选中事件类型,然后设置对应数值
TriggerActionCurrent=当前行为:
TriggerActionNew=新建
TriggerActionDelete=删除
TriggerActionOptions=行为选项
TriggerActionType=行为类型:
TriggerActionParams=行为参数:
TriggerActionValue=参数值:
TriggerActionDesc=先选中行为类型,然后设置对应数值
0 - Standard=0 - 单次
1 - All Attached=1 - 所有关联的
2 - Repeating=2 - 重复
Delete trigger=删除整个触发  
Do you really want to delete this event?=确定删除当前事件吗?
Delete event=删除事件
Do you really want to delete this action?=确定删除当前的行为吗?
Delete action=删除行为
TagsCaption=触发标签
TagsDesc=触发标签和触发事件搭配使用,触发事件直接或者间接和标签进行关联才能生效。
TagsCurrent=当前标签
TagsAdd=添加
TagsDelete=删除
TagsName=名称:
TagsRepeat=重复方式:
TagsTrigger=关联触发:
TagsExpaination=新建触发事件的时候会自动创建一个对应的标签,但你可以将其删除。\n重复方式为“1 - 所有关联实体”时,意味着所有关联这个标记的物体都满足对应触发条件后才算条件满足。
0 - Make the trigger work only once=0 - 一次性
1 - All entities attached=1 - 所有关联实体
2 - Make the trigger repeating=2 - 持续生效
LocalVariableCaption=局部变量
LocalVariableCurrent=当前变量
LocalVariableDesc=名称:
LocalVariableInitValue=初始值:
0 - Clear=0 - 假
1 - Set=1 - 真
CreateWaypointDlgCaption=添加路径点
CreateWaypointDlgDesc=输入一个数字以添加路径点。如果路径点已经存在了,旧的路径点会被移动到当前位置。
CreateWaypointDlgID=ID编号:
CreateWaypointDlgFree=帮我选一个编号
CreateWaypointDlgOk=确定
CreateWaypointDlgCancel=取消
SearchWaypointDlgCaption=查找路径点
SearchWaypointDlgWaypoints=所有路径点:
SearchWaypointDlgOk=确定
SearchWaypointDlgCancel=取消
AITriggerCaption=AI触发编辑
AITriggerAdd=添加
@ -1378,6 +1524,42 @@ equal to=== 等于
greater than or equal to=>= 大于等于
greater than=> 大于
not equal to=!= 不等于
-1 None=-1 无效
0 Enemy owns (CONDITION) N of type X=0 - 敌方拥有N个某物体
1 House owns (CONDITION) N of type X=1 - 己方拥有N个某物体
2 Enemy: Yellow power=2 - 敌方电量为黄色
3 Enemy: Red power=3 - 敌方电量为红色
4 Enemy owns (CONDITION) N money=4 - 敌方金钱数额达到
5 Iron curtain near ready=5 - 铁幕装置即将待命
6 Chronosphere near ready=6 - 超时空传送即将待命
7 Neutral owns (CONDITION) N of type X=7 - 中立方拥有N个某物体
AITriggerEnableCaption=AI触发生效控制
AITriggerEnableDesc=AI触发类型在单人任务地图中是默认不生效的除非你在这里指明它会生效。多人模式或遭遇战则是默认生效的。
AITriggerEnableAll=全部生效(推荐)
AITriggerEnableType=AI触发类型:
AITriggerEnableAdd=添加
AITriggerEnableDelete=删除
AITriggerEnableAddCaption=添加AI触发类型
AITriggerEnableAddDesc=选择要生效的AI触发类型:
AITriggerEnableAddOK=确定
AITriggerEnableAddCancel=取消
; special flags
SpecialFlagsCaption=特殊设定
SpecialFlagsDesc=这些设定在特定条件下才有效果,通常与剧情或其他平台功能配合使用
SpecialFlagsTiberiumGrows=矿脉生长:
SpecialFlagsTiberiumSpread=矿脉蔓延:
SpecialFlagsTiberiumExplosive=矿脉爆炸:
SpecialFlagsTiberiumBridgeDestroyable=桥梁可摧毁:
SpecialFlagsMCVRedeploy=基地车可重新部署:
SpecialFlagsInitialVeteran=初始单位精英级:
SpecialFlagsFixedAlliance=结盟状态不可变:
SpecialFlagsHarvesterImmune=采矿车无敌:
SpecialFlagsFogOfWar=战场生长型迷雾:
SpecialFlagsInert=武器伤害无效化:
SpecialFlagsIonStoms=TS离子风暴效果:
SpecialFlagsMeteorites=陨石效果(无效):
SpecialFlagsVisceroids=TS特殊泰矿生物(无效):
; taskforces
TaskforcesCaption=成员组
@ -1394,6 +1576,8 @@ TaskforcesCopyUnit=复制
TaskforcesDeleteUnit=删除
TaskforcesUnitNumber=单位数量:
TaskforcesUnitType=单位类型:
Delete task force=删除成员组记录   
TaskforceDeleteMsgDesc=确定删除选定的成员组吗?删除之后别忘了清理所有引用这个成员组的小队!
; team scripts
ScriptTypesAddScript=添加
@ -1414,6 +1598,16 @@ ScriptTypesActionDesc=说明:
ScriptTypesSelectedTemplate=模板:
ScriptTypesParamExtDesc=附加参数:
UserScriptsDlgCaption=工具脚本
UserScriptsDlgDesc=工具脚本执行无法撤销,强烈建议每次执行之前都先手动保存地图甚至是备份。
UserScriptsDlgAvailable=可用脚本:
UserScriptsDlgReport=结果报告:
UserScriptsDlgOK=运行
UserScriptsDlgCancel=退出
Continue?=执行确认
; team types
TeamTypesCaption=小队选项
TeamTypesTemplate=模板:

View file

@ -437,7 +437,7 @@ const CString* getLanguageString(const CString& key)
return language.GetSection("English-Strings").TryGetString(key);
}
CString escapeString(const CString& input)
CString EscapeString(const CString& input)
{
auto updated = input;
if (updated.Find("\\n")) {
@ -492,7 +492,7 @@ void TranslateDlgItem(CWnd& cwnd, int controlID, const CString& label)
{
auto const translated = getLanguageString(label);
if (translated) {
cwnd.SetDlgItemText(controlID, escapeString(*translated));
cwnd.SetDlgItemText(controlID, EscapeString(*translated));
}
}
@ -500,7 +500,7 @@ void TranslateWindowCaption(CWnd& cwnd, const CString& label)
{
auto const translated = getLanguageString(label);
if (translated) {
cwnd.SetWindowText(escapeString(*translated));
cwnd.SetWindowText(EscapeString(*translated));
}
}

View file

@ -125,6 +125,7 @@ char* strcpy_safe(char* strDestination, const char* strSource);
/****************************************
language support functions [12/18/1999]
****************************************/
CString EscapeString(const CString& input);
// retrieve the string name in the correct language (name is an ID).
// the returned string is in the active codepage (UTF-8 on Windows 10 1909+)

View file

@ -586,6 +586,40 @@
#define IDC_AITRIGGER_T_CONDITION 1510
#define IDC_AITRIGGER_T_NUM 1511
#define IDC_AITRIGGER_T_UNITTYPE 1512
#define IDC_EVENT_CUR_TXT 1513
#define IDC_EVENT_OPT_TXT 1514
#define IDC_EVENT_TYPE_TXT 1515
#define IDC_EVENT_PARAM_TXT 1516
#define IDC_EVENT_VAL_TXT 1517
#define IDC_EVENT_DESC 1518
#define IDC_ACTION_CUR_TXT 1519
#define IDC_ACTION_OPT_TXT 1520
#define IDC_ACTION_TYPE_TXT 1521
#define IDC_ACTION_PARAM_TXT 1522
#define IDC_ACTION_VAL_TXT 1523
#define IDC_ACTION_DESC 1524
#define IDC_LOADING_GRAPH_TXT 1525
#define IDC_LOCAL_VAR_CUR_TXT 1526
#define IDC_LOCAL_VAR_INIT_TXT 1527
#define IDC_TAGS_CUR_TXT 1528
#define IDC_TAGS_NAME 1529
#define IDC_TAGS_REPEAT 1530
#define IDC_TAGS_TRIGGER 1531
#define IDC_TAGS_DESC_2 1532
#define IDC_OPTIONS_LAN_TXT 1533
#define IDC_OPTIONS_SUPPORT_TXT 1534
#define IDC_AI_TRG_ENB_DESC 1535
#define IDC_AI_TRG_ENB_TYPE 1536
#define IDC_SEARCH_WP_WP 1537
#define IDC_NEWHOUSE_PARERNT 1538
#define IDC_USR_SCRIPTS_DESC 1539
#define IDC_USR_SCRIPTS_REPORT 1540
#define IDC_USR_SCRIPTS_AVA 1541
#define IDC_INI_EDITOR_SECTIONS 1542
#define IDC_INI_EDITOR_DESC 1543
#define IDC_INI_EDITOR_CONTENT 1544
#define IDC_INI_EDITOR_VAL 1545
#define IDC_INI_EDITOR_KEYS 1546
#define ID_FILE_OPENMAP 40001
#define ID_FILE_SAVEAS 40002
#define ID_FILE_QUIT 40003
@ -680,9 +714,9 @@
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 312
#define _APS_NEXT_RESOURCE_VALUE 320
#define _APS_NEXT_COMMAND_VALUE 40144
#define _APS_NEXT_CONTROL_VALUE 1513
#define _APS_NEXT_CONTROL_VALUE 1547
#define _APS_NEXT_SYMED_VALUE 111
#endif
#endif