SmaugWizard/Backup/
SmaugWizard/Backup/L/
SmaugWizard/Boards/
SmaugWizard/Building/
SmaugWizard/Corpses/
SmaugWizard/Councils/
SmaugWizard/Deity/
SmaugWizard/Gods/
SmaugWizard/MudProgs/
SmaugWizard/Player/L/
SmaugWizard/Src/
SmaugWizard/Src/res/
/****************************************************************************
 * [S]imulated [M]edieval [A]dventure multi[U]ser [G]ame      |				*
 * -----------------------------------------------------------|   \\._.//	*
 * SmaugWizard (C) 1998 by Russ Pillsbury (Windows NT version)|   (0...0)	*
 * -----------------------------------------------------------|    ).:.(	*
 * SMAUG (C) 1994, 1995, 1996 by Derek Snider                 |    {o o}	*
 * -----------------------------------------------------------|   / ' ' \	*
 * SMAUG code team: Thoric, Altrag, Blodkai, Narn, Haus,      |~'~.VxvxV.~'~*
 * Scryn, Swordbearer, Rennard, Tricops, and Gorog.           |				*
 * ------------------------------------------------------------------------ *
 * Merc 2.1 Diku Mud improvments copyright (C) 1992, 1993 by Michael        *
 * Chastain, Michael Quan, and Mitchell Tse.                                *
 * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,          *
 * Michael Seifert, Hans Henrik Staerfeldt, Tom Madsen, and Katja Nyboe.    *
 ****************************************************************************/
// MainFrm.cpp : implementation of the CMainFrame class

#include	"stdafx.h"
#include	"SmaugWiz.h"

#include	"MainFrm.h"
#include	"smaug.h"
#include	"SysData.h"
#include	"descriptor.h"
#include	"SmaugWizDoc.h"
#include	"SmaugFiles.h"
#include	"FilesDlg.h"
#include	"SysDlg.h"
#include	"StatDlg.h"
#include	"SaveDlg.h"
#include	"LevelDlg.h"
#include	"HitAndThrowDlg.h"
#include	"TitlesDlg.h"
#include	"roomcfg.h"
#include	"LogDlg.h"
#include	"OptionDlg.h"
#include	"obj_vnum.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_COMMAND(ID_APP_EXIT, OnAppExit)
	ON_WM_CLOSE()
	ON_COMMAND(ID_FILE_START, OnFileStart)
	ON_UPDATE_COMMAND_UI(ID_FILE_START, OnUpdateFileStart)
	ON_COMMAND(ID_FILE_DOWN, OnFileDown)
	ON_UPDATE_COMMAND_UI(ID_FILE_DOWN, OnUpdateFileDown)
	ON_COMMAND(ID_CFG_FILES, OnCfgFiles)
	ON_COMMAND(ID_CFG_SYSDATA, OnCfgSysdata)
	ON_COMMAND(ID_STATMENU, OnStatmenu)
	ON_COMMAND(ID_TITLES, OnTitles)
	ON_COMMAND(ID_MUD_START, OnMudStart)
	ON_UPDATE_COMMAND_UI(ID_MUD_START, OnUpdateMudStart)
	ON_COMMAND(ID_STOP_MUD, OnStopMud)
	ON_UPDATE_COMMAND_UI(ID_STOP_MUD, OnUpdateStopMud)
	//}}AFX_MSG_MAP
	// Global help commands
	ON_COMMAND(ID_HELP_FINDER, CFrameWnd::OnHelpFinder)
	ON_COMMAND(ID_HELP, CFrameWnd::OnHelp)
	ON_COMMAND(ID_CONTEXT_HELP, CFrameWnd::OnContextHelp)
	ON_COMMAND(ID_DEFAULT_HELP, CFrameWnd::OnHelpFinder)
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_CAPS,
	ID_INDICATOR_NUM,
	ID_INDICATOR_SCRL,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	// TODO: add member initialization code here
	
}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	if (!m_wndToolBar.Create(this) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}

	if (!m_wndStatusBar.Create(this) ||
		!m_wndStatusBar.SetIndicators(indicators,
		  sizeof(indicators)/sizeof(UINT)))
	{
		TRACE0("Failed to create status bar\n");
		return -1;      // fail to create
	}

	// TODO: Remove this if you don't want tool tips or a resizeable toolbar
	m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
		CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

	// TODO: Delete these three lines if you don't want the toolbar to
	//  be dockable
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndToolBar);

	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CFrameWnd::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers

void CMainFrame::OnAppExit() 
{
	OnClose ();
}

void CMainFrame::OnClose() 
{
	if (gpDoc->m_bShuttingDown && ! bSmaugDown) then
		return;								// still shutting down

	if (! bSmaugDown) then
		do_shutdown (supermob, "mud now");
//		gpDoc->ShutSmaugDown ();
	else CFrameWnd::OnClose ();
}


void CMainFrame::OnFileStart () 
{
	if (gpDoc->BootAndStart ()) {
		GetActiveView ()->SetTimer (1, 1000 / PULSE_PER_SECOND, NULL);
		bSmaugDown = FALSE;
	}
#ifdef n_DEBUG
	oldMemState.Checkpoint();
#endif
}


void CMainFrame::OnUpdateFileStart (CCmdUI* pCmdUI) 
{
	pCmdUI->Enable (bSmaugDown);
}


void CMainFrame::OnFileDown () 
{
	do_shutdown (supermob, "mud now");
//	gpDoc->ShutSmaugDown ();
}


void CMainFrame::OnUpdateFileDown (CCmdUI* pCmdUI) 
{
	pCmdUI->Enable (! bSmaugDown);
}


void CMainFrame::OnCfgFiles() 
{
	// Make sure BrBrowse.ocx is registered
	static	bool bRegistered = FALSE;
	CString	s;

	if (! bRegistered) {
		HINSTANCE hLib = LoadLibrary ("BrBrowse.ocx");

		if (hLib < (HINSTANCE)HINSTANCE_ERROR) {
			s.Format ("Unable to load BrBrowse.ocx,\n"
				"Make sure control is installed in the system32 directory.");
			MessageBox (s, "Serv", MB_ICONHAND | MB_OK);
			return;                   //unable to load DLL
		}

		// Find the entry point.
		FARPROC lpDllEntryPoint = GetProcAddress (hLib, "DllRegisterServer");
		if (lpDllEntryPoint)
			(*lpDllEntryPoint) ();
		else {
			s.Format ("Unable to Register BrBrowse.ocx,\n"
				"Make sure control is installed in the system32 directory.\n"
				"(Config/Files will not work until control is registered)");
			MessageBox (s, "Serv", MB_ICONHAND | MB_OK);
			return;
		}
		bRegistered = TRUE;
	}

	CFilesDlg dlg;
	// Initialize dialog data
	dlg.m_FileRoot = FileTable.m_FileRoot;

	if (dlg.DoModal () == IDOK) {
		// retrieve the dialog data
		if (FileTable.m_FileRoot != dlg.m_FileRoot) {
			FileTable.m_FileRoot = dlg.m_FileRoot;
			gpDoc->SetRegisteredSmaugWizPath ("SmaugWiz",
				FileTable.m_FileRoot);
			SysData.ReLoad ();
		}
	}
}


void CMainFrame::OnCfgSysdata() 
{
	// If the system data is not yet loaded, load it now.
	if (! SysData.IsLoaded ())
		SysData.Load ();

	CPropertySheet	dlg;
	dlg.SetTitle ("Smaug Wizard Configuration");

	CSysDlg			SysDlg;
	CSaveDlg		SaveDlg;
	CLevelDlg		LevDlg;
	CHitAndThrowDlg	HitDlg;
	CRoomCfg		RoomDlg;
	CLogDlg			LogDlg;
    CObj_Vnum		ObjDlg;
	COptionDlg		OptionDlg;

	dlg.AddPage (&SysDlg);
	dlg.AddPage (&SaveDlg);
	dlg.AddPage (&LevDlg);
	dlg.AddPage (&HitDlg);
	dlg.AddPage (&RoomDlg);
	dlg.AddPage (&LogDlg);
	dlg.AddPage (&ObjDlg);
	dlg.AddPage (&OptionDlg);

	SysDlg.m_AuthGroup = SysData.m_Authorization;
	SysDlg.m_AuthDelay = SysData.m_AuthDelay;
	SysDlg.m_Port = SysData.GetPort ();
	SysDlg.m_bAutoReboot = SysData.IsAutoReboot ();
	SysDlg.m_RebootDelay = SysData.GetRebootDelay ();
	SysDlg.m_RebootHour = SysData.GetRebootHour ();
	SysDlg.m_RebootDays = SysData.GetRebootInterval ();
	SysDlg.m_bAutoStart = SysData.IsAutoStart ();
	SysDlg.m_StartDelay = SysData.GetStartDelay ();
	SysDlg.m_bResolveHostNames = SysData.bNameResolving;

	SaveDlg.m_bBackup = SysData.IsBackup ();
	SaveDlg.m_bAutoSave = SysData.IsAutoSave ();
	SaveDlg.m_AutoSaveFreq = SysData.SaveFrequency;
	SaveDlg.m_PwdChange = SysData.IsSavePasswordOnChange ();
	SaveDlg.m_bSaveOnGet = SysData.IsSaveOnGet ();
	SaveDlg.m_bSavePut = SysData.IsSaveOnPut ();
	SaveDlg.m_bSaveOnDrop = SysData.IsSaveOnDrop ();
	SaveDlg.m_bSaveOnGive = SysData.IsSaveOnGive ();
	SaveDlg.m_bSaveOnReceive = SysData.IsSaveOnReceive ();
	SaveDlg.m_bSaveOnAuction = SysData.IsSaveOnAuction ();
	SaveDlg.m_bSaveOnKill = SysData.IsSaveOnKill ();
	SaveDlg.m_bSaveOnDeath = SysData.IsSaveOnDeath ();
	SaveDlg.m_bSaveOnZapDrop = SysData.IsSaveOnZapDrop ();
	SaveDlg.m_bSaveOnIdle = SysData.IsSaveOnIdle ();

	LevDlg.m_AllMailLevel = SysData.ReadAllMailLev;
	LevDlg.m_FreeMailLevel = SysData.ReadMailFreeLev;
	LevDlg.m_WriteMailFreeLevel = SysData.WriteMailFreeLev;
	LevDlg.m_TakeOthersMailLevel = SysData.TakeOthersMailLev;
	LevDlg.m_MuseChannelLevel = SysData.MuseLevel;
	LevDlg.m_ThinkChannelLevel = SysData.ThinkLevel;
	LevDlg.m_BuildChannelLevel = SysData.BuildLevel;
	LevDlg.m_LogChannelLevel = SysData.LogLevel;
	LevDlg.m_ModifyProtoLevel = SysData.ModifyProtoLevel;
	LevDlg.m_PrivateOverrideLevel = SysData.OverridePrivateLev;
	LevDlg.m_MsetPlayerLevel = SysData.MsetPlayerLevel;
	LevDlg.m_GetNoTakeLevel = SysData.GetObjNoTakeLevel;
	LevDlg.m_UseForceLevel = SysData.ForcePcLevel;

	HitDlg.m_StunPvP = SysData.StunPlayerLev;
	HitDlg.m_StunMvP = SysData.StunRegularLev;
	HitDlg.m_DamagePvP = SysData.PlrPlrDamage;
	HitDlg.m_DamagePvM = SysData.PlrMobDamage;
	HitDlg.m_DamageMvP = SysData.MobPlrDamage;
	HitDlg.m_DamageMvM = SysData.MobMobDamage;

	RoomDlg.m_raStart = SysData.m_RoomAuthStart;
	RoomDlg.m_rvSchool = SysData.m_RoomSchool;
	RoomDlg.m_rvHell = SysData.m_RoomHell;
	RoomDlg.m_rvTemple = SysData.m_RoomTemple;
	RoomDlg.m_rvAltar = SysData.m_RoomAltar;
	RoomDlg.m_rvFallen = SysData.m_RoomHallOfFallen;
	RoomDlg.m_rvVoid = SysData.m_RoomVoid;
	RoomDlg.m_rvChat = SysData.m_RoomChat;
	RoomDlg.m_rvLimbo = SysData.m_RoomLimbo;
	RoomDlg.m_rvPoly = SysData.m_RoomPoly;

	LogDlg.m_EBoot = SysData.IsLogBootToFile ();
	LogDlg.m_EResets = SysData.IsLogResetsToFile ();
	LogDlg.m_EBuild = SysData.IsLogBuildToFile ();
	LogDlg.m_EBugs = SysData.IsLogBugsToFile ();
	LogDlg.m_EPlayers = SysData.IsLogPlayersToFile ();
	LogDlg.m_EComm = SysData.IsLogCommToFile ();
	LogDlg.m_SBoot = SysData.IsLogBootToScreen ();
	LogDlg.m_SResets = SysData.IsLogResetsToScreen ();
	LogDlg.m_SBuild = SysData.IsLogBuildToScreen ();
	LogDlg.m_SBugs = SysData.IsLogBugsToScreen ();
	LogDlg.m_SPlayers = SysData.IsLogPlayersToScreen ();
	LogDlg.m_SComm = SysData.IsLogCommToScreen ();
	LogDlg.m_CBuild = SysData.IsLogBuildToChannel ();
	LogDlg.m_CBugs = SysData.IsLogBugsToChannel ();
	LogDlg.m_CPlayers = SysData.IsLogPlayersToChannel ();
	LogDlg.m_CComm = SysData.IsLogCommToChannel ();
	LogDlg.m_CloseStdErr = SysData.IsCloseStdErr ();
	LogDlg.m_MaxSize = SysData.GetMaxStdErrSize ();

	ObjDlg.m_rvMace = SysData.m_ObjMace;
    ObjDlg.m_rvDagger = SysData.m_ObjDagger;
    ObjDlg.m_rvSword = SysData.m_ObjSword;
    ObjDlg.m_rvVest = SysData.m_ObjVest;
    ObjDlg.m_rvShield = SysData.m_ObjShield;
    ObjDlg.m_rvBanner = SysData.m_ObjBanner;
    ObjDlg.m_rvGuide = SysData.m_ObjGuide;

	OptionDlg.m_bShowLevel = SysData.IsShowLevel ();
	OptionDlg.m_bRestore = SysData.IsLevelMsg ();

	if (dlg.DoModal () == IDOK) {
		// retrieve the dialog data
		SysData.m_Authorization = SysDlg.m_AuthGroup;
		SysData.m_AuthDelay = SysDlg.m_AuthDelay;
		SysData.SetPort (SysDlg.m_Port);

		SysData.SetAutoReboot (SysDlg.m_bAutoReboot);
		SysData.SetRebootDelay (SysDlg.m_RebootDelay);
		SysData.SetRebootHour (SysDlg.m_RebootHour);
		SysData.SetRebootInterval (SysDlg.m_RebootDays);
		SysData.SetAutoStart (SysDlg.m_bAutoStart);
		SysData.SetStartDelay (SysDlg.m_StartDelay);
		SysData.bNameResolving = SysDlg.m_bResolveHostNames;

		SysData.SetBackup (SaveDlg.m_bBackup);
		SysData.SetAutoSave (SaveDlg.m_bAutoSave);
		SysData.SaveFrequency = SaveDlg.m_AutoSaveFreq;
		SysData.SetSavePasswordOnChange (SaveDlg.m_PwdChange);
		SysData.SetSaveOnGet (SaveDlg.m_bSaveOnGet);
		SysData.SetSaveOnPut (SaveDlg.m_bSavePut);
		SysData.SetSaveOnDrop (SaveDlg.m_bSaveOnDrop);
		SysData.SetSaveOnGive (SaveDlg.m_bSaveOnGive);
		SysData.SetSaveOnReceive (SaveDlg.m_bSaveOnReceive);
		SysData.SetSaveOnAuction (SaveDlg.m_bSaveOnAuction);
		SysData.SetSaveOnKill (SaveDlg.m_bSaveOnKill);
		SysData.SetSaveOnDeath (SaveDlg.m_bSaveOnDeath);
		SysData.SetSaveOnZapDrop (SaveDlg.m_bSaveOnZapDrop);
		SysData.SetSaveOnIdle (SaveDlg.m_bSaveOnIdle);

		SysData.ReadAllMailLev = LevDlg.m_AllMailLevel;
		SysData.ReadMailFreeLev = LevDlg.m_FreeMailLevel;
		SysData.WriteMailFreeLev = LevDlg.m_WriteMailFreeLevel;
		SysData.TakeOthersMailLev = LevDlg.m_TakeOthersMailLevel;
		SysData.MuseLevel = LevDlg.m_MuseChannelLevel;
		SysData.ThinkLevel = LevDlg.m_ThinkChannelLevel;
		SysData.BuildLevel = LevDlg.m_BuildChannelLevel;
		SysData.LogLevel = LevDlg.m_LogChannelLevel;
		SysData.ModifyProtoLevel = LevDlg.m_ModifyProtoLevel;
		SysData.OverridePrivateLev = LevDlg.m_PrivateOverrideLevel;
		SysData.MsetPlayerLevel = LevDlg.m_MsetPlayerLevel;
		SysData.GetObjNoTakeLevel = LevDlg.m_GetNoTakeLevel;
		SysData.ForcePcLevel = LevDlg.m_UseForceLevel;

		SysData.StunPlayerLev = HitDlg.m_StunPvP;
		SysData.StunRegularLev = HitDlg.m_StunMvP;
		SysData.PlrPlrDamage = HitDlg.m_DamagePvP;
		SysData.PlrMobDamage = HitDlg.m_DamagePvM;
		SysData.MobPlrDamage = HitDlg.m_DamageMvP;
		SysData.MobMobDamage = HitDlg.m_DamageMvM;

		SysData.m_RoomAuthStart = RoomDlg.m_raStart;
		SysData.m_RoomSchool = RoomDlg.m_rvSchool;
		SysData.m_RoomHell = RoomDlg.m_rvHell;
		SysData.m_RoomTemple = RoomDlg.m_rvTemple;
		SysData.m_RoomAltar = RoomDlg.m_rvAltar;
		SysData.m_RoomHallOfFallen = RoomDlg.m_rvFallen;
		SysData.m_RoomVoid = RoomDlg.m_rvVoid;
		SysData.m_RoomChat = RoomDlg.m_rvChat;
		SysData.m_RoomLimbo = RoomDlg.m_rvLimbo;
		SysData.m_RoomPoly = RoomDlg.m_rvPoly;

		SysData.SetLogBootToFile (LogDlg.m_EBoot);
		SysData.SetLogResetsToFile (LogDlg.m_EResets);
		SysData.SetLogBuildToFile (LogDlg.m_EBuild);
		SysData.SetLogBugsToFile (LogDlg.m_EBugs);
		SysData.SetLogPlayersToFile (LogDlg.m_EPlayers);
		SysData.SetLogCommToFile (LogDlg.m_EComm);
		SysData.SetLogBootToScreen (LogDlg.m_SBoot);
		SysData.SetLogResetsToScreen (LogDlg.m_SResets);
		SysData.SetLogBuildToScreen (LogDlg.m_SBuild);
		SysData.SetLogBugsToScreen (LogDlg.m_SBugs);
		SysData.SetLogPlayersToScreen (LogDlg.m_SPlayers);
		SysData.SetLogCommToScreen (LogDlg.m_SComm);
		SysData.SetLogBuildToChannel (LogDlg.m_CBuild);
		SysData.SetLogBugsToChannel (LogDlg.m_CBugs);
		SysData.SetLogPlayersToChannel (LogDlg.m_CPlayers);
		SysData.SetLogCommToChannel (LogDlg.m_CComm);
		SysData.SetCloseStdErr (LogDlg.m_CloseStdErr);
		SysData.SetMaxStdErrSize (LogDlg.m_MaxSize);

        SysData.m_ObjMace = ObjDlg.m_rvMace;
		SysData.m_ObjDagger = ObjDlg.m_rvDagger;
		SysData.m_ObjSword = ObjDlg.m_rvSword;
		SysData.m_ObjVest = ObjDlg.m_rvVest;
		SysData.m_ObjShield = ObjDlg.m_rvShield;
		SysData.m_ObjBanner = ObjDlg.m_rvBanner;
		SysData.m_ObjGuide = ObjDlg.m_rvGuide;

		SysData.SetShowLevel (OptionDlg.m_bShowLevel);
		SysData.SetLevelMsg (OptionDlg.m_bRestore);

		SysData.Save ();
		if (gpDoc->m_pLog) {
			gpDoc->m_pLog->SetFromSysData ();
			gpDoc->m_pLog->SetType (LOG_NORMAL); // always log normal messages
		}
	}
}


void CMainFrame::OnStatmenu () 
{
	// If the system data is not yet loaded, load it now.
	if (! SysData.IsLoaded ())
		SysData.Load ();

	CStatDlg dlg;
	// Initialize dialog data
	dlg.m_StartTime = gpDoc->m_StartTime.GetString ();
	dlg.m_BootTime = gpDoc->m_BootTime.GetString ();
	dlg.m_NextBoot = gpDoc->m_RebootTime.GetString ();
	dlg.m_nPlayers = DList.GetCount ();
	dlg.m_nMaxPlayers = SysData.MaxPlayers;
	dlg.m_nAlltimeMax = SysData.AlltimeMax;
	dlg.m_AlltimeMaxTime = SysData.pTimeOfMax;

	if (dlg.DoModal () == IDOK) {
	}
}


void CMainFrame::OnTitles ()
{
	// If the system data is not yet loaded, load it now.
	if (! SysData.IsLoaded ())
		SysData.Load ();

	CTitlesDlg dlg;
	// Initialize dialog data
	dlg.m_LongTitle = SysData.GetLongTitle ();
	dlg.m_ShortTitle = SysData.GetShortTitle ();
	dlg.m_Supreme = SysData.GetSupremeEntity ();

	if (dlg.DoModal () == IDOK) {
		SysData.SetLongTitle (dlg.m_LongTitle);
		SysData.SetShortTitle (dlg.m_ShortTitle);
		SysData.SetSupremeEntity (dlg.m_Supreme);

		SysData.Save ();
	}
}

void CMainFrame::OnMudStart() 
{
	OnFileStart ();
}

void CMainFrame::OnUpdateMudStart(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable (bSmaugDown);
}

void CMainFrame::OnStopMud() 
{
	OnFileDown ();
}

void CMainFrame::OnUpdateStopMud(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable (! bSmaugDown);
}