/****************************************************************************
* [S]imulated [M]edieval [A]dventure multi[U]ser [G]ame | *
* -----------------------------------------------------------| \\._.// *
* SmaugWiz (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. *
* ------------------------------------------------------------------------ *
* Smaug System Menu Implementation file *
****************************************************************************/
#include "stdafx.h"
#define SYSMENU_CPP
#include "smaug.h"
#include "SysData.h"
#include "mobiles.h"
#include "affect.h"
#include "objects.h"
#include "rooms.h"
#include "sysmenu.h"
#include "descriptor.h"
#include "character.h"
#include "SmaugWizDoc.h"
CMenuData *SystemMenuData [];
void CSystemMenu::Display (CCharacter& Ch, int page)
{
m_HelpMenu = DIM (SystemMenus) - 1;
m_PageNr = page;
if (m_PageNr < 0 || m_PageNr > m_HelpMenu) then m_PageNr = m_HelpMenu;
m_CurrPageLines = GetLineCount (SystemMenus [m_PageNr]);
m_pPageData = SystemMenuData [m_PageNr];
m_nDataItems = m_pPageData ? GetItemCount (m_pPageData) : 0;
// clear page & home cursor
Ch.SendText ("\x1b[2J");
// print the menu page
Ch.GetDesc ()->WriteToBuffer (SystemMenus [m_PageNr]);
// fill in fields
DisplayData (Ch);
}
void CSystemMenu::DisplayData (CCharacter& Ch)
{
m_Base [0] = (char*) this;
m_Base [1] = NULL;
CSmaugMenu::DisplayData (Ch);
}
BOOL CSystemMenu::Edit (CCharacter& Ch, char* argument, const char* command)
{
if (command [0] == '-') {
Display (Ch, (char) argument [0]);
return TRUE;
}
if (argument [0] == '-') return FALSE;
m_Base [0] = (char*) this;
m_Base [1] = NULL;
return CSmaugMenu::Edit (Ch, argument, command);
}
void CSystemMenu::Save (CCharacter& Ch)
{
CSystemData &Sys = *m_pSys;
// Save a-page items
Sys.m_Authorization = ma_Auth;
Sys.m_AuthDelay = ma_AuthDelay;
Sys.bNameResolving = ma_bResolve;
Sys.SetAutoReboot (ma_bAutoBoot);
Sys.SetRebootDelay (ma_BootDelay);
Sys.SetRebootHour (ma_BootHour);
Sys.SetRebootInterval (ma_BootDays);
// Save b-page items
Sys.ReadMailFreeLev = mb_ReadFree;
Sys.WriteMailFreeLev = mb_WriteFree;
Sys.ReadAllMailLev = mb_ReadAll;
Sys.TakeOthersMailLev = mb_TakeMail;
Sys.MuseLevel = mb_MuseLev;
Sys.ThinkLevel = mb_ThinkLev;
Sys.LogLevel = mb_LogLev;
Sys.BuildLevel = mb_BuildLev;
// Save c-page items
Sys.SetLogResetsToFile (mc_FResets);
Sys.SetLogBootToFile (mc_FBoot);
Sys.SetLogBuildToFile (mc_FBuild);
Sys.SetLogBugsToFile (mc_FBugs);
Sys.SetLogPlayersToFile (mc_FPlayer);
Sys.SetLogCommToFile (mc_FComm);
Sys.SetLogBuildToChannel (mc_CBuild);
Sys.SetLogBugsToChannel (mc_CBugs);
Sys.SetLogPlayersToChannel (mc_CPlayer);
Sys.SetLogCommToChannel (mc_CComm);
Sys.SetCloseStdErr (mc_Close);
Sys.SetMaxStdErrSize (mc_Size);
Sys.Save ();
// Adjust logging parameters for any changes
if (gpDoc->m_pLog) {
gpDoc->m_pLog->SetFromSysData ();
gpDoc->m_pLog->SetType (LOG_NORMAL); // always log normal messages
}
}
CSystemMenu::CSystemMenu (CSystemData& Sys)
{
m_pSys = &Sys;
m_Vnum = 0; // not used for sysmenu
m_bProto = FALSE; // not used for sysmenu
// load local a-page items
ma_Auth = Sys.m_Authorization;
ma_AuthDelay = Sys.m_AuthDelay;
ma_bResolve = Sys.bNameResolving;
ma_bAutoBoot = Sys.IsAutoReboot ();
ma_BootDelay = Sys.GetRebootDelay ();
ma_BootHour = Sys.GetRebootHour ();
ma_BootDays = Sys.GetRebootInterval ();
// load local b-page items
mb_ReadFree = Sys.ReadMailFreeLev;
mb_WriteFree = Sys.WriteMailFreeLev;
mb_ReadAll = Sys.ReadAllMailLev;
mb_TakeMail = Sys.TakeOthersMailLev;
mb_MuseLev = Sys.MuseLevel;
mb_ThinkLev = Sys.ThinkLevel;
mb_LogLev = Sys.LogLevel;
mb_BuildLev = Sys.BuildLevel;
// load local c-page items
mc_FResets = Sys.IsLogResetsToFile ();
mc_FBoot = Sys.IsLogBootToFile ();
mc_FBuild = Sys.IsLogBuildToFile ();
mc_FBugs = Sys.IsLogBugsToFile ();
mc_FPlayer = Sys.IsLogPlayersToFile ();
mc_FComm = Sys.IsLogCommToFile ();
mc_CBuild = Sys.IsLogBuildToChannel ();
mc_CBugs = Sys.IsLogBugsToChannel ();
mc_CPlayer = Sys.IsLogPlayersToChannel ();
mc_CComm = Sys.IsLogCommToChannel ();
mc_Close = Sys.IsCloseStdErr ();
mc_Size = Sys.GetMaxStdErrSize ();
}
#define OFFSET(aa) offsetof(CSystemMenu,aa)
CMenuData SysPage_A [] = {
{ '1', 'a', 4, 30, 1, OFFSET(ma_Auth), MT_GROUP, 0, NULL, 0,4 },
{ '1', 'b', 5, 30, 1, OFFSET(ma_Auth), MT_GROUP, 0, NULL, 1,4 },
{ '1', 'c', 6, 30, 1, OFFSET(ma_Auth), MT_GROUP, 0, NULL, 2,4 },
{ '1', 'd', 7, 30, 1, OFFSET(ma_Auth), MT_GROUP, 0, NULL, 3,4 },
{ '1', 'e', 8, 30, 3, OFFSET(ma_AuthDelay), MT_INT, 0, NULL },
{ '1', 'f', 3, 60, 1, OFFSET(ma_bResolve), MT_BOOL, 0, NULL },
{ '1', 'g', 4, 60, 1, OFFSET(ma_bAutoBoot), MT_BOOL, 0, NULL },
{ '1', 'h', 5, 57, 4, OFFSET(ma_BootDelay), MT_INT, 0, NULL },
{ '1', 'i', 6, 59, 2, OFFSET(ma_BootHour), MT_INT, 0, NULL },
{ '1', 'j', 7, 59, 2, OFFSET(ma_BootDays), MT_INT, 0, NULL },
{ 0, 0, 0, 0, 0, 0, MT_END }
};
CMenuData SysPage_B [] = {
{ '1', 'a', 4, 18, 3, OFFSET(mb_ReadFree), MT_INT, 0, NULL },
{ '1', 'b', 5, 18, 3, OFFSET(mb_WriteFree), MT_INT, 0, NULL },
{ '1', 'c', 6, 18, 3, OFFSET(mb_ReadAll), MT_INT, 0, NULL },
{ '1', 'd', 7, 18, 3, OFFSET(mb_TakeMail), MT_INT, 0, NULL },
{ '2', 'a', 4, 35, 3, OFFSET(mb_MuseLev), MT_INT, 0, NULL },
{ '2', 'b', 5, 35, 3, OFFSET(mb_ThinkLev), MT_INT, 0, NULL },
{ '2', 'c', 6, 35, 3, OFFSET(mb_LogLev), MT_INT, 0, NULL },
{ '2', 'd', 7, 35, 3, OFFSET(mb_BuildLev), MT_INT, 0, NULL },
{ 0, 0, 0, 0, 0, 0, MT_END }
};
CMenuData SysPage_C [] = {
{ '1', 'a', 4, 22, 1, OFFSET(mc_FResets), MT_BOOL, 0, NULL },
{ '1', 'b', 5, 22, 1, OFFSET(mc_FBoot), MT_BOOL, 0, NULL },
{ '1', 'c', 6, 22, 1, OFFSET(mc_FBuild), MT_BOOL, 0, NULL },
{ '1', 'd', 7, 22, 1, OFFSET(mc_FBugs), MT_BOOL, 0, NULL },
{ '1', 'e', 8, 22, 1, OFFSET(mc_FPlayer), MT_BOOL, 0, NULL },
{ '1', 'f', 9, 22, 1, OFFSET(mc_FComm), MT_BOOL, 0, NULL },
{ '2', 'a', 4, 46, 1, OFFSET(mc_CBuild), MT_BOOL, 0, NULL },
{ '2', 'b', 5, 46, 1, OFFSET(mc_CBugs), MT_BOOL, 0, NULL },
{ '2', 'c', 6, 46, 1, OFFSET(mc_CPlayer), MT_BOOL, 0, NULL },
{ '2', 'd', 7, 46, 1, OFFSET(mc_CComm), MT_BOOL, 0, NULL },
{ '3', 'a', 4, 73, 1, OFFSET(mc_Close), MT_BOOL, 0, NULL },
{ '3', 'b', 5, 71, 3, OFFSET(mc_Size), MT_INT, 0, NULL },
{ 0, 0, 0, 0, 0, 0, MT_END }
};
CMenuData *SystemMenuData [] = { SysPage_A, SysPage_B, SysPage_C, NULL };