/**************************************************************************** * [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 };