Complete disaster-recovery snapshot: engine/game source, game data assets, VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive. Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false, no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
581 lines
17 KiB
C++
581 lines
17 KiB
C++
// NFORuleDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "NFO File Editor.h"
|
|
#include "NFO File EditorDlg.h"
|
|
#include "NFOPropertiesDlg.h"
|
|
#include "NFORuleDlg.h"
|
|
#include "NFOErrorDlg.h"
|
|
|
|
#if 0 // def _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CNFORuleDlg dialog
|
|
|
|
|
|
CNFORuleDlg::CNFORuleDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CNFORuleDlg::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CNFORuleDlg)
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
|
|
void CNFORuleDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CNFORuleDlg)
|
|
DDX_Control(pDX, IDC_SCRIPT, m_Script);
|
|
DDX_Control(pDX, IDC_MIN_TON, m_MinTon);
|
|
DDX_Control(pDX, IDC_MAX_TON, m_MaxTon);
|
|
DDX_Control(pDX, IDC_GAME_LENGTH, m_GameLength);
|
|
DDX_Control(pDX, IDC_MAP_NAME, m_MapName);
|
|
DDX_Control(pDX, IDC_WEATHER, m_Weather);
|
|
DDX_Control(pDX, IDC_TEAM_COUNT, m_TeamCount);
|
|
DDX_Control(pDX, IDC_STOCK_MECH, m_StockMech);
|
|
DDX_Control(pDX, IDC_SCENARIO_TEXT, m_ScenarioText);
|
|
DDX_Control(pDX, IDC_RULE_SET, m_RuleSet);
|
|
DDX_Control(pDX, IDC_RULE_NAME, m_RuleName);
|
|
DDX_Control(pDX, IDC_RESPAWN_LIMIT, m_RespawnLimit);
|
|
DDX_Control(pDX, IDC_RADAR_MODE, m_RadarMode);
|
|
DDX_Control(pDX, IDC_NIGHT, m_Night);
|
|
DDX_Control(pDX, IDC_KILL_LIMIT, m_KillLimit);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CNFORuleDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CNFORuleDlg)
|
|
ON_CBN_SELCHANGE(IDC_RULE_SET, OnSelChangeRuleSet)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CNFORuleDlg message handlers
|
|
|
|
BOOL CNFORuleDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
CNFOPropertiesDlg* pParent = (CNFOPropertiesDlg*) GetOwner();
|
|
CNFOFileEditorDlg* pPParent = (CNFOFileEditorDlg*) pParent->GetOwner();
|
|
|
|
// set all the options
|
|
char intbuf[256];
|
|
for (int i = 0; i < GameTypeCount; i++)
|
|
{
|
|
if (pParent->m_bTypeAvailable[i] == TRUE)
|
|
m_RuleSet.AddString(pPParent->m_szScenarioName[i]);
|
|
}
|
|
m_Night.AddString(pPParent->m_szTOD[0]);
|
|
m_Night.AddString(pPParent->m_szTOD[1]);
|
|
m_Night.AddString(pPParent->m_szDefault);
|
|
m_Weather.AddString(pPParent->m_szYesNo[0]);
|
|
m_Weather.AddString(pPParent->m_szYesNo[1]);
|
|
m_Weather.AddString(pPParent->m_szDefault);
|
|
m_RadarMode.AddString(pPParent->m_szRadar[0]);
|
|
m_RadarMode.AddString(pPParent->m_szRadar[1]);
|
|
m_RadarMode.AddString(pPParent->m_szRadar[2]);
|
|
m_RadarMode.AddString(pPParent->m_szDefault);
|
|
m_StockMech.AddString(pPParent->m_szYesNo[0]);
|
|
m_StockMech.AddString(pPParent->m_szYesNo[1]);
|
|
m_StockMech.AddString(pPParent->m_szDefault);
|
|
for (i = 25; i <= 100; i += 5)
|
|
{
|
|
m_MaxTon.AddString(_itoa(i, intbuf, 10));
|
|
m_MinTon.AddString(_itoa(i, intbuf, 10));
|
|
}
|
|
m_MaxTon.AddString(pPParent->m_szDefault);
|
|
m_MinTon.AddString(pPParent->m_szDefault);
|
|
m_GameLength.AddString("1");
|
|
m_GameLength.AddString("2");
|
|
m_GameLength.AddString("5");
|
|
m_GameLength.AddString("10");
|
|
m_GameLength.AddString("15");
|
|
m_GameLength.AddString("30");
|
|
m_GameLength.AddString("60");
|
|
m_GameLength.AddString("90");
|
|
m_GameLength.AddString("120");
|
|
m_GameLength.AddString(pPParent->m_szDefault);
|
|
|
|
// kill limit and respawn limit max is 99
|
|
m_KillLimit.SetLimitText(2);
|
|
m_RespawnLimit.SetLimitText(2);
|
|
|
|
// Text limit is 256
|
|
m_MapName.SetLimitText(256);
|
|
m_RuleName.SetLimitText(256);
|
|
|
|
// either grab the info or set to default
|
|
if (pParent->m_bEditRule)
|
|
{
|
|
// grab the info from the property list
|
|
int curSel = pParent->m_PropertyList.GetSelectionMark();
|
|
char scenario_name[256];
|
|
char rule_set_name[256];
|
|
char scenario_read_name[256];
|
|
char team_count[256];
|
|
char scenario_text[256];
|
|
char kill_count[256];
|
|
char respawn_count[256];
|
|
char night[256];
|
|
char weather[256];
|
|
char radar_mode[256];
|
|
char stock_mech[256];
|
|
char max_ton[256];
|
|
char min_ton[256];
|
|
char game_len[256];
|
|
char script[256];
|
|
|
|
int found;
|
|
|
|
pParent->m_PropertyList.GetItemText(curSel, 0, scenario_name, 256);
|
|
pParent->m_PropertyList.GetItemText(curSel, 1, rule_set_name, 256);
|
|
pParent->m_PropertyList.GetItemText(curSel, 2, scenario_read_name, 256);
|
|
pParent->m_PropertyList.GetItemText(curSel, 4, team_count, 256);
|
|
pParent->m_PropertyList.GetItemText(curSel, 5, scenario_text, 256);
|
|
pParent->m_PropertyList.GetItemText(curSel, 7, kill_count, 256);
|
|
pParent->m_PropertyList.GetItemText(curSel, 9, respawn_count, 256);
|
|
pParent->m_PropertyList.GetItemText(curSel, 10, night, 256);
|
|
pParent->m_PropertyList.GetItemText(curSel, 11, weather, 256);
|
|
pParent->m_PropertyList.GetItemText(curSel, 12, radar_mode, 256);
|
|
pParent->m_PropertyList.GetItemText(curSel, 13, stock_mech, 256);
|
|
pParent->m_PropertyList.GetItemText(curSel, 14, max_ton, 256);
|
|
pParent->m_PropertyList.GetItemText(curSel, 15, min_ton, 256);
|
|
pParent->m_PropertyList.GetItemText(curSel, 16, game_len, 256);
|
|
pParent->m_PropertyList.GetItemText(curSel, 17, script, 256);
|
|
|
|
m_RuleSet.SetCurSel(m_RuleSet.FindStringExact(0, rule_set_name));
|
|
for (int i = 0; i < GameTypeCount; i++)
|
|
{
|
|
if (_stricmp(pPParent->m_szScenarioName[i], rule_set_name) == 0)
|
|
{
|
|
// do team
|
|
for (int j = 1; j <= pParent->m_iMaxTeam[i]; j++)
|
|
m_TeamCount.AddString(_itoa(j, intbuf, 10));
|
|
|
|
// do script
|
|
SCRIPT_INFO *pInfo = pParent->m_pScriptInfo[i];
|
|
while (pInfo != NULL)
|
|
{
|
|
m_Script.AddString(pInfo->script);
|
|
pInfo = pInfo->pNext;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (m_TeamCount.GetCount() == 0)
|
|
m_TeamCount.AddString("0");
|
|
if (m_Script.GetCount() == 0)
|
|
{
|
|
m_Script.AddString("\0");
|
|
m_Script.EnableWindow(FALSE);
|
|
}
|
|
else
|
|
m_Script.EnableWindow(TRUE);
|
|
|
|
found = m_TeamCount.FindStringExact(0, team_count);
|
|
if (found != CB_ERR)
|
|
m_TeamCount.SetCurSel(found);
|
|
else
|
|
m_TeamCount.SetCurSel(m_TeamCount.GetCount() - 1);
|
|
|
|
found = m_Night.FindStringExact(0, night);
|
|
if (found != CB_ERR)
|
|
m_Night.SetCurSel(found);
|
|
else
|
|
m_Night.SetCurSel(m_Night.GetCount() - 1);
|
|
found = m_Weather.FindStringExact(0, weather);
|
|
if (found != CB_ERR)
|
|
m_Weather.SetCurSel(found);
|
|
else
|
|
m_Weather.SetCurSel(m_Weather.GetCount() - 1);
|
|
found = m_RadarMode.FindStringExact(0, radar_mode);
|
|
if (found != CB_ERR)
|
|
m_RadarMode.SetCurSel(found);
|
|
else
|
|
m_RadarMode.SetCurSel(m_RadarMode.GetCount() - 1);
|
|
found = m_StockMech.FindStringExact(0, stock_mech);
|
|
if (found != CB_ERR)
|
|
m_StockMech.SetCurSel(found);
|
|
else
|
|
m_StockMech.SetCurSel(m_StockMech.GetCount() - 1);
|
|
found = m_MaxTon.FindStringExact(0, max_ton);
|
|
if (found != CB_ERR)
|
|
m_MaxTon.SetCurSel(found);
|
|
else
|
|
m_MaxTon.SetCurSel(m_MaxTon.GetCount() - 1);
|
|
found = m_MinTon.FindStringExact(0, min_ton);
|
|
if (found != CB_ERR)
|
|
m_MinTon.SetCurSel(found);
|
|
else
|
|
m_MinTon.SetCurSel(m_MinTon.GetCount() - 1);
|
|
found = m_GameLength.FindStringExact(0, game_len);
|
|
if (found != CB_ERR)
|
|
m_GameLength.SetCurSel(found);
|
|
else
|
|
m_GameLength.SetCurSel(m_GameLength.GetCount() - 1);
|
|
found = m_Script.FindStringExact(0, script);
|
|
if (found != CB_ERR)
|
|
m_Script.SetCurSel(found);
|
|
else
|
|
m_Script.SetCurSel(m_Script.GetCount() - 1);
|
|
|
|
m_RuleName.ReplaceSel(scenario_name);
|
|
m_MapName.ReplaceSel(scenario_read_name);
|
|
m_ScenarioText.ReplaceSel(scenario_text);
|
|
m_KillLimit.ReplaceSel(kill_count);
|
|
m_RespawnLimit.ReplaceSel(respawn_count);
|
|
|
|
// Do not allow rule name edit
|
|
m_RuleName.SetReadOnly();
|
|
m_ScenarioText.SetReadOnly();
|
|
}
|
|
else
|
|
{
|
|
// since we are adding, just set everything to default
|
|
m_RuleSet.SetCurSel(0);
|
|
|
|
char rule_set_name[256];
|
|
m_RuleSet.GetLBText(0, rule_set_name);
|
|
for (int i = 0; i < GameTypeCount; i++)
|
|
{
|
|
if (_stricmp(pPParent->m_szScenarioName[i], rule_set_name) == 0)
|
|
{
|
|
// do team
|
|
for (int j = 1; j <= pParent->m_iMaxTeam[i]; j++)
|
|
m_TeamCount.AddString(_itoa(j, intbuf, 10));
|
|
|
|
// do script
|
|
SCRIPT_INFO *pInfo = pParent->m_pScriptInfo[i];
|
|
while (pInfo != NULL)
|
|
{
|
|
m_Script.AddString(pInfo->script);
|
|
pInfo = pInfo->pNext;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (m_TeamCount.GetCount() == 0)
|
|
m_TeamCount.AddString("0");
|
|
if (m_Script.GetCount() == 0)
|
|
{
|
|
m_Script.AddString("\0");
|
|
m_Script.EnableWindow(FALSE);
|
|
}
|
|
else
|
|
m_Script.EnableWindow(TRUE);
|
|
|
|
m_TeamCount.SetCurSel(m_TeamCount.GetCount() - 1);
|
|
m_ScenarioText.ReplaceSel(pPParent->m_szScenarioText[0]);
|
|
m_Night.SetCurSel(m_Night.GetCount() - 1);
|
|
m_Weather.SetCurSel(m_Weather.GetCount() - 1);
|
|
m_RadarMode.SetCurSel(m_RadarMode.GetCount() - 1);
|
|
m_StockMech.SetCurSel(m_StockMech.GetCount() - 1);
|
|
m_MaxTon.SetCurSel(m_MaxTon.GetCount() - 1);
|
|
m_MinTon.SetCurSel(m_MinTon.GetCount() - 1);
|
|
m_GameLength.SetCurSel(m_GameLength.GetCount() - 1);
|
|
m_Script.SetCurSel(0);
|
|
|
|
m_RuleName.Clear();
|
|
m_MapName.Clear();
|
|
m_ScenarioText.Clear();
|
|
m_KillLimit.Clear();
|
|
m_RespawnLimit.Clear();
|
|
|
|
m_RuleSet.EnableWindow(TRUE);
|
|
m_ScenarioText.EnableWindow(TRUE);
|
|
}
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CNFORuleDlg::OnOK()
|
|
{
|
|
// first validate the min and max ton
|
|
if ((m_MinTon.GetCurSel() != m_MinTon.GetCount() - 1) &&
|
|
(m_MaxTon.GetCurSel() != m_MaxTon.GetCount() - 1))
|
|
{
|
|
if (m_MinTon.GetCurSel() > m_MaxTon.GetCurSel())
|
|
{
|
|
CNFOErrorDlg dlg;
|
|
dlg.m_Error = "The minimum tonnage cannot be larger than the maximum tonnage.";
|
|
dlg.DoModal();
|
|
return;
|
|
}
|
|
}
|
|
|
|
CNFOPropertiesDlg* pParent = (CNFOPropertiesDlg*) GetOwner();
|
|
CNFOFileEditorDlg* pPParent = (CNFOFileEditorDlg*) pParent->GetOwner();
|
|
|
|
char scenario_name[256];
|
|
char rule_set_name[256];
|
|
char scenario_read_name[256];
|
|
char team_count[256];
|
|
char scenario_text[256];
|
|
char kill_count[256];
|
|
char respawn_count[256];
|
|
char night[256];
|
|
char weather[256];
|
|
char radar_mode[256];
|
|
char stock_mech[256];
|
|
char max_ton[256];
|
|
char min_ton[256];
|
|
char game_len[256];
|
|
char script[256];
|
|
|
|
int curSel;
|
|
|
|
int rule_len = m_RuleName.GetLine(0, scenario_name, 256);
|
|
int map_len = m_MapName.GetLine(0, scenario_read_name, 256);
|
|
int text_len = m_ScenarioText.GetLine(0, scenario_text, 256);
|
|
scenario_name[rule_len] = '\0';
|
|
scenario_read_name[map_len] = '\0';
|
|
scenario_text[text_len] = '\0';
|
|
|
|
// then check for empty texts
|
|
if (rule_len == 0)
|
|
{
|
|
CNFOErrorDlg dlg;
|
|
dlg.m_Error = "Empty Rule Name is not allowed.";
|
|
dlg.DoModal();
|
|
return;
|
|
}
|
|
if (map_len == 0)
|
|
{
|
|
CNFOErrorDlg dlg;
|
|
dlg.m_Error = "Empty Map Name is not allowed.";
|
|
dlg.DoModal();
|
|
return;
|
|
}
|
|
|
|
// finally check for duplicate names if we are adding a new rule
|
|
if (pParent->m_bEditRule == FALSE)
|
|
{
|
|
for (int i = 0; i < pParent->m_PropertyList.GetItemCount(); i++)
|
|
{
|
|
char existing_name[256];
|
|
pParent->m_PropertyList.GetItemText(i, 0, existing_name, 256);
|
|
if (_stricmp(scenario_name, existing_name) == 0)
|
|
{
|
|
CNFOErrorDlg dlg;
|
|
dlg.m_Error = "The current Rule Name exists. Duplicated Rule Names are not allowed.";
|
|
dlg.DoModal();
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Check to see if the scenario text file exist
|
|
if ((text_len != 0) && ((GetFileAttributes(scenario_text) == -1) || ((GetFileAttributes(scenario_text) & FILE_ATTRIBUTE_DIRECTORY) != 0)))
|
|
{
|
|
CNFOErrorDlg dlg;
|
|
dlg.m_Error = "Can't find the scenario text file. Please either specify a valid text file or leave the scenario text file field blank.";
|
|
dlg.DoModal();
|
|
return;
|
|
}
|
|
}
|
|
|
|
// We are cool, so go ahead and grab all the info from the dialog
|
|
int kill_len = m_KillLimit.GetLine(0, kill_count, 256);
|
|
int respawn_len = m_RespawnLimit.GetLine(0, respawn_count, 256);
|
|
kill_count[kill_len] = '\0';
|
|
respawn_count[respawn_len] = '\0';
|
|
curSel = m_RuleSet.GetCurSel();
|
|
m_RuleSet.GetLBText(curSel, rule_set_name);
|
|
curSel = m_TeamCount.GetCurSel();
|
|
m_TeamCount.GetLBText(curSel, team_count);
|
|
curSel = m_Night.GetCurSel();
|
|
if (curSel != m_Night.GetCount() - 1)
|
|
m_Night.GetLBText(curSel, night);
|
|
else
|
|
night[0] = '\0';
|
|
curSel = m_Weather.GetCurSel();
|
|
if (curSel != m_Weather.GetCount() - 1)
|
|
m_Weather.GetLBText(curSel, weather);
|
|
else
|
|
weather[0] = '\0';
|
|
curSel = m_RadarMode.GetCurSel();
|
|
if (curSel != m_RadarMode.GetCount() - 1)
|
|
m_RadarMode.GetLBText(curSel, radar_mode);
|
|
else
|
|
radar_mode[0] = '\0';
|
|
curSel = m_StockMech.GetCurSel();
|
|
if (curSel != m_StockMech.GetCount() - 1)
|
|
m_StockMech.GetLBText(curSel, stock_mech);
|
|
else
|
|
stock_mech[0] = '\0';
|
|
curSel = m_MaxTon.GetCurSel();
|
|
if (curSel != m_MaxTon.GetCount() - 1)
|
|
m_MaxTon.GetLBText(curSel, max_ton);
|
|
else
|
|
max_ton[0] = '\0';
|
|
curSel = m_MinTon.GetCurSel();
|
|
if (curSel != m_MinTon.GetCount() - 1)
|
|
m_MinTon.GetLBText(curSel, min_ton);
|
|
else
|
|
min_ton[0] = '\0';
|
|
curSel = m_GameLength.GetCurSel();
|
|
if (curSel != m_GameLength.GetCount() - 1)
|
|
m_GameLength.GetLBText(curSel, game_len);
|
|
else
|
|
game_len[0] = '\0';
|
|
curSel = m_Script.GetCurSel();
|
|
m_Script.GetLBText(curSel, script);
|
|
|
|
// finally if it is a team scenario, make sure that team count is not zero
|
|
if (m_TeamCount.IsWindowEnabled() == TRUE)
|
|
{
|
|
if (m_TeamCount.GetCurSel() == 0)
|
|
{
|
|
CNFOErrorDlg dlg;
|
|
dlg.m_Error = "Zero Team Count is not allowed.";
|
|
dlg.DoModal();
|
|
return;
|
|
}
|
|
}
|
|
|
|
// once we are done grabbing, we either edit the existing one or add a new rule
|
|
if (pParent->m_bEditRule)
|
|
{
|
|
curSel = pParent->m_PropertyList.GetSelectionMark();
|
|
pParent->m_PropertyList.SetItemText(curSel, 0, scenario_name);
|
|
}
|
|
else
|
|
{
|
|
curSel = pParent->m_PropertyList.GetItemCount();
|
|
pParent->m_PropertyList.InsertItem(curSel, scenario_name, 0);
|
|
}
|
|
|
|
// let's go ahead and set the info for the current rule
|
|
pParent->m_PropertyList.SetItemText(curSel, 1, rule_set_name);
|
|
pParent->m_PropertyList.SetItemText(curSel, 2, scenario_read_name);
|
|
if (atoi(team_count) == 0)
|
|
pParent->m_PropertyList.SetItemText(curSel, 3, pPParent->m_szYesNo[0]);
|
|
else
|
|
pParent->m_PropertyList.SetItemText(curSel, 3, pPParent->m_szYesNo[1]);
|
|
pParent->m_PropertyList.SetItemText(curSel, 4, team_count);
|
|
pParent->m_PropertyList.SetItemText(curSel, 5, scenario_text);
|
|
if (kill_len)
|
|
{
|
|
if (atoi(kill_count) == 0)
|
|
pParent->m_PropertyList.SetItemText(curSel, 6, pPParent->m_szYesNo[0]);
|
|
else
|
|
pParent->m_PropertyList.SetItemText(curSel, 6, pPParent->m_szYesNo[1]);
|
|
pParent->m_PropertyList.SetItemText(curSel, 7, kill_count);
|
|
}
|
|
else
|
|
{
|
|
pParent->m_PropertyList.SetItemText(curSel, 6, "");
|
|
pParent->m_PropertyList.SetItemText(curSel, 7, "");
|
|
}
|
|
if (respawn_len)
|
|
{
|
|
if (atoi(respawn_count) == 0)
|
|
pParent->m_PropertyList.SetItemText(curSel, 8, pPParent->m_szYesNo[0]);
|
|
else
|
|
pParent->m_PropertyList.SetItemText(curSel, 8, pPParent->m_szYesNo[1]);
|
|
pParent->m_PropertyList.SetItemText(curSel, 9, respawn_count);
|
|
}
|
|
else
|
|
{
|
|
pParent->m_PropertyList.SetItemText(curSel, 8, "");
|
|
pParent->m_PropertyList.SetItemText(curSel, 9, "");
|
|
}
|
|
pParent->m_PropertyList.SetItemText(curSel, 10, night);
|
|
pParent->m_PropertyList.SetItemText(curSel, 11, weather);
|
|
pParent->m_PropertyList.SetItemText(curSel, 12, radar_mode);
|
|
pParent->m_PropertyList.SetItemText(curSel, 13, stock_mech);
|
|
pParent->m_PropertyList.SetItemText(curSel, 14, max_ton);
|
|
pParent->m_PropertyList.SetItemText(curSel, 15, min_ton);
|
|
pParent->m_PropertyList.SetItemText(curSel, 16, game_len);
|
|
pParent->m_PropertyList.SetItemText(curSel, 17, script);
|
|
|
|
// just set the team info for the current rule to have no team count
|
|
if (pParent->m_bEditRule == FALSE)
|
|
{
|
|
TEAM_INFO* pTeamInfo = new TEAM_INFO;
|
|
pTeamInfo->team_count = 0;
|
|
pParent->AppendTeamInfo(pTeamInfo);
|
|
|
|
BOT_INFO* pBotInfo = new BOT_INFO;
|
|
pBotInfo->rule_count = 0;
|
|
pParent->AppendBotInfo(pBotInfo);
|
|
}
|
|
|
|
// Done!
|
|
CDialog::OnOK();
|
|
}
|
|
|
|
void CNFORuleDlg::OnSelChangeRuleSet()
|
|
{
|
|
int curSel = m_RuleSet.GetCurSel();
|
|
ASSERT(curSel != -1);
|
|
|
|
char rule_set_name[256];
|
|
m_RuleSet.GetLBText(curSel, rule_set_name);
|
|
|
|
CNFOPropertiesDlg* pParent = (CNFOPropertiesDlg*) GetOwner();
|
|
CNFOFileEditorDlg* pPParent = (CNFOFileEditorDlg*) pParent->GetOwner();
|
|
|
|
// find the rule set
|
|
int rule_set = -1;
|
|
for (int i = 0; i < GameTypeCount; i++)
|
|
{
|
|
if (_stricmp(rule_set_name, pPParent->m_szScenarioName[i]) == 0)
|
|
{
|
|
rule_set = i;
|
|
char intbuf[256];
|
|
|
|
// do team
|
|
m_TeamCount.ResetContent();
|
|
for (int j = 1; j <= pParent->m_iMaxTeam[i]; j++)
|
|
m_TeamCount.AddString(_itoa(j, intbuf, 10));
|
|
|
|
// do script
|
|
m_Script.ResetContent();
|
|
SCRIPT_INFO *pInfo = pParent->m_pScriptInfo[i];
|
|
while (pInfo != NULL)
|
|
{
|
|
m_Script.AddString(pInfo->script);
|
|
pInfo = pInfo->pNext;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
ASSERT(rule_set != -1);
|
|
|
|
if (m_TeamCount.GetCount() == 0)
|
|
m_TeamCount.AddString("0");
|
|
if (m_Script.GetCount() == 0)
|
|
{
|
|
m_Script.AddString("\0");
|
|
m_Script.EnableWindow(FALSE);
|
|
}
|
|
else
|
|
{
|
|
m_Script.SetCurSel(0);
|
|
m_Script.EnableWindow(TRUE);
|
|
}
|
|
|
|
m_TeamCount.SetCurSel(m_TeamCount.GetCount() - 1);
|
|
|
|
if (pPParent->m_iTeam[rule_set])
|
|
{
|
|
// if it is a team scenario, enable team dropdown
|
|
m_TeamCount.EnableWindow(TRUE);
|
|
}
|
|
else
|
|
{
|
|
m_TeamCount.EnableWindow(FALSE);
|
|
}
|
|
|
|
m_ScenarioText.SetSel(0, m_ScenarioText.LineLength());
|
|
m_ScenarioText.ReplaceSel(pPParent->m_szScenarioText[rule_set]);
|
|
}
|