MajorMUD Wiki

Setting up Worldgroup

Note: These instructions were made using a 64-bit windows 7 sp1 PC with UAC turned off. YMMV on different OS's.

Install

Install Worldgroup 3.30 using setup.exe. - wg330.zip

NOTE: After you run setup you will see a progress bar and then it may/will go away and appear that nothing is happening. Just be patient, it could take a minute or two, but eventually another screen will come up.

NOTE 2: Some people have had issues installing it from extended paths. Try extracting it to the root of the C drive to something like c:\wginstall and installing it from there.

NOTE 3: Another possible fix if the setup fails to progress: Open task manager -> details tab -> right click setup.exe -> choose "analyze wait chain" -> end any processes that it's waiting on.

  1. You should give your computer a static IP (or reserve the one in your DHCP settings so it always gets the same one) and then enter that IP on the screen that asks for IP address
  2. Open w32mkset.exe from the C:\WGSERV folder and set open files set current to 100, and set handles to 100 (this prevents various BTRIEVE errors.
  3. Add files=250 to c:\windows\system32\config.nt
  4. Reboot.

Disable Modules

After reboot/install, from the start menu, go into Worldgroup Server -> Offline Utilities -> and then select and run disable or re-enable selected modules.

The only required modules are listed below. Disable all the rest.
disable_modules.png


General Setup

  1. Now launch "General Setup" from the utilities folder.
  2. Go through every item looking for ways to disable shit you don't need. I didn't write everything down that I did (I will next time I do it), but for example, under Core -> CLISRC: Support Client/Server users -> turn that off. Client server is a GUI interface WG made that has no use to us. Another example, under Sign-up and account display/edit -> disable all the sign-up questions you don't care about, like "company name."
  3. Don't be lazy. Go through them all and set it up properly.
  4. Now launch Security & Accounting and do the same. Go through everything. Stuff you don't want people to do, assign it the SYSOP key.
  5. Don't be lazy. Go through them all and set it up properly.
  6. Launch Hardware Setup -- Under Core -> GROUP1 Change the number of channels to 254 (leave one open)
  7. Launch C:\WGSERV\wgsrunmt.EXE -- the menu editor. You're going to get two popups about things being disabled that are in the menu.
  8. First press F3 to change to c/s mode. Since we don't use this delete everything. you can easily do this by going to the bottom of the list and then repeatedly pressing F6 -> Y (for yes) -> enter. Once finished press F3 again.
  9. Now delete everything except Account, Electronic Mail, Forums, Remote Sysop Menu, and Exit. If you're choosing to leave other stuff enabled then leave it there.

wgsrunmt.png

NOTE: Just because you remove the menu item doesn't mean people can't get to it. You need to disable the module for that.

  1. Press F10 to exit the menu editor.
  2. Launch WG C:\WGSERV\wgsappgo.exe, log in and make sure the menu works and you can log out.
  3. Shut it down.

Suspend default "test" user

  1. Log in as SYSOP
  2. Type: /go sysop
  3. Type: suspend test

Optional: Enable old-style console window

NOTE: Having this enabled seemed to cause weird issues (at least on windows 7 64-bit). Sometimes no input would be allowed (for anyone on the board!) until i pressed something on the console. Other times the system would be laggy for remote users.

Installing MajorMUD

  1. Extract the zip for MajorMUD v1.11p to a separate folder - WCCNT8PJ.zip
  2. Open a command prompt window, navigate to that folder, and run icomp WCCMMUD.Z c:\WGSERV\ -d -i -o to extract mud to your WG folder
  3. Now change directory to your WGSERV folder and run copy wcc\*.vir wcc\*.dat
  4. Now launch the offline utilities again (Start -> programs -> Worldgroup Server -> Offline Utilities) and you will see it go through a setup. Either press CONTROL+C at the prompt or just press enter a couple times and go through some errors about unzipping files because of 16-bit executables.
  5. Close the offline utilities.
  6. The files it tries to extract are: WCCHSE.ZIP, WCCEMB.ZIP, WCCBAN.ZIP, WCCSTA.ZIP and WCCSTO.ZIP. Go into your WGSERV (C:\WGSERVER) folder and right-click on each of those zip files and extract their contents into C:\WGSERV (right-click and "extract here" with most programs, like 7zip).
  7. Unzip the GangHouse pack MajorMUD_HSE_FILES_ODSBBS.zip (download) to C:\WGSERV
  8. Also create two text files. They are displayed when reading signs in newhaven and silvermere town square: NEWHAVEN.TXT and SILVRMRE.TXT. You can create blank files from DOS if you want by typing echo.>NEWHAVEN.TXT
  9. If you are cracking the mud DLL for edits, do as described here
  10. Now go into WG's Security & Accounting.
    - MajorMUD Plus: Enter activation code, change the credits for changing desc to 0, credits to buy a life: 0 (set to -1 to disable buying lives), copper to buy a life: 0 (change if you want).
    - WCCMMUD: Enter activation code, credits per minutes consumed while in game: 0
  11. Now launch WG's General Setup
    • MajorMUD Plus: Require approval and new descriptions: no
    • WCCMMUD:
      • Number of buffers to save/set: 10
      • Character to start yelling: "
      • Name of user defined currency: runic coin
      • Number of hit point to die: -100
      • Fourth global to disallow: =set
      • Fifth global to disallow: ;set
      • Extra levels before training: 10
      • Max topten users/gangs: 100
      • Percentage of evil points to keep: 0
      • Rate to perform initialization: 1000
      • Maximum level difference for pvp: Pick something (5/10/-1)
      • Allow sysop lightning on all players: no
      • Delete majormud user with bbs user: yes
  12. Launch the menu editor C:\WGSERV\wgsrunmt.EXE
    • With "TOP" highlighted press F2 for edit
    • Arrow down and find a spot to put the MajorMUD menu item, type an M (or whatever you want)
    • Short desc: MajorMUD
    • Destination page: MAJORMUD
    • Save it and then arrow down to return to menu tree and press enter
    • Arrow down and highlight MAJORMUD if not already and press F2
    • Choose module page
    • Module name: MajorMUD
    • Return to menu tree
    • F10 to Exit

NOTE: With the v1.11p dats that I installed, whenever the board started up and ran through the update file, I'd end up with a "corrupt" (per-say) textblock database. It would add the misc characters to the end of each block. You can strip these with nightmare but some textblocks are close to full and will become broken by this. If you fire up nightmare and build a new update file (full or blank) before launching the board for the first time you will not run into this issue.

  1. Fire up the board, login, go to the Majormud menu but don't enter the game
  2. Type SYSOP
  3. A for Addon module activation codes
  4. Enter 1 for Mod 1, and enter the activation code.
  5. Repeat for 2 through 9
  6. That should do it.

Btrieve Modifications

Optional, but highly recommended: Optimize the btrieve settings (pretty sure this is not necessary if you plan to upgrade to the new pervasive engine, though I suppose it doesn't hurt).

Registry Key Downloads:
btrieve-settings-32bit.reg or btrieve-settings-64bit.reg

btrieve_mod.gif

Note: on a 64bit system you will find this under HKEY_LOCAL_MACHINE\Software\WOW6432Node instead of the ones listed below.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Btrieve Technologies]

[HKEY_LOCAL_MACHINE\SOFTWARE\Btrieve Technologies\Microkernel Engine]

[HKEY_LOCAL_MACHINE\SOFTWARE\Btrieve Technologies\Microkernel Engine\Version  6.15]

[HKEY_LOCAL_MACHINE\SOFTWARE\Btrieve Technologies\Microkernel Engine\Version  6.15\Microkernel Interface]

[HKEY_LOCAL_MACHINE\SOFTWARE\Btrieve Technologies\Microkernel Engine\Version  6.15\Microkernel Interface\Settings]
"Target Engine"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Btrieve Technologies\Microkernel Workstation Engine]

[HKEY_LOCAL_MACHINE\SOFTWARE\Btrieve Technologies\Microkernel Workstation Engine\Version  6.15]

[HKEY_LOCAL_MACHINE\SOFTWARE\Btrieve Technologies\Microkernel Workstation Engine\Version  6.15\Microkernel Interface]

[HKEY_LOCAL_MACHINE\SOFTWARE\Btrieve Technologies\Microkernel Workstation Engine\Version  6.15\Microkernel Interface\Settings]
"Load Retries"=dword:00000005
"Local"=dword:00000001
"Requester"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Btrieve Technologies\Microkernel Workstation Engine\Version  6.15\Settings]
"Max Locks"=dword:00000014
"Logging Fmt"="6"
"Compression Buffer Size"=dword:00000400
"Extended Buffer Size"=dword:00004000
"Merge Sort Buffer Size"=dword:00000000
"Max Transactions"=dword:0000001e
"Transaction Durability"="0"
"Disk Wait Limit"=dword:000003e8
"Page Group Size"=dword:0000001e
"Max Clients"=dword:0000001e
"Worker Threads"=dword:00000001
"Background Threads"=dword:0000000c
"Preallocate"="0"
"Minimal States"="1"
"Home Directory"=dword:00000000
"Work Space"=""
"Syserr Notify"="0"
"File Sharing On Local Drives"="1"
"File Sharing On Remote Drives"="1"
"File Sharing Enable Bias"="1"
"File Sharing Max SysTrans Count"=dword:00000001
"Startup Logo"="0"
"Hide Icon"="1"
"Delete Tmp Files"="1"
"Trace File"="C:\WGSERV\MKDEWE.TRA"
"Trace Databuf Len"=dword:00000020
"Trace Keybuf Len"=dword:00000020
"Trace Ops"=hex:
"Max Files"=dword:000001f4
"Max Handles"=dword:000001f4
"Balanced Trees"="0"
"Create 5x Files"="0"
"Logging On"="0"
"Cache Size"=dword:00100000
"Max Communication Buffer Size"=dword:00010123
"Systrans Bundle Limit"=dword:00000064
"Systrans Time Limit"=dword:000003e8
"Trace"="0"

Updating btrieve database engine (optional)

  1. Launch installer ( PSQL-Server-9.50.077.002-Win32 for me ), enter key, complete install
  2. Machine I was installing on did not have java installed (fresh windows) so I got a prompt about installing it. I said yes. May or may not get this prompt if you already do. Also, sometimes there are compatibility issues with JRE versions.
  3. Run the transactional tests
  4. Run the relational tests
  5. Install any hotfixes for PSQL ( PSQLHotFixSetup952.exe for me )
  6. Verify that you are licensed -- Start -> Pervasive -> Other Utilities -> License Administrator. Verify you have permanent licenses. First time I did this they only went in as trial licenses and then expired in 30 days and my board wouldn't load (btrieve error 161 - license error)
  7. In C:\WGSERV, rename wbtrv32.dll to wbtrv32.dll.old
  8. copy the file C:\PVSW\bin\wbtrv32.dll into C:\WGSERV
  9. **NOTE: For Nightmare to work you will also need to copy wbtrv32.dll into your NMR installation directory C:\Program Files (x86)\Nightmare Redux
  10. In windows explorer, while browsed to C:\WGSERV, do a search for \*.dat. Highlight them all and copy them into a backup folder.
  11. Launch C:\PVSW\\bin\rbldgui.exe
  12. Click "add"
  13. Browse to C:\WGSERV
  14. Type *.dat into the filename field and press enter. screen will refresh with all the .dat's showing.
  15. Click the first one, hold shift, click the last one (highlight them all). click open.
  16. Click next
  17. On the config screen don't change anything. I chose to uncheck "continue on errors" though.
  18. Click next and then finish (hopefully no errors).
  19. Repeat for \*.VIR files
  20. Repeat for \*.VIR files under C:\WGSERV\GCVIRDAT
  21. Launch WG
  22. You can verify it's using the new engine by launching Start -> Programs -> Pervasive -> Pervasive.SQL -> Other Utilities -> Monitor
    • Options -> Connect
    • specify either your machine name or "localhost" in the server field. leave user name and password blank and hit ok.
    • MicroKernal -> Active Files will show you all of the open databases (should see all of the opened WG and MUD databases)
    • MicroKernal -> Resource Usage will give you stats of open files, handles, number of clients, etc

Install FU Globals

  1. Extract the zip to a folder - fu-globals-w3.xx.zip
  2. Copy ICOMP.exe from your MajorMUD installation files (or from somewhere else) into the FU Globals folder
  3. Open a command prompt to that folder and run icomp DATA.Z c:\WGSERV\ -d -i -o
  4. If you updated your btrieve to the new PSQL versions, use the rebuild tool to update the DIAL*.DAT and DIAL*.VIR files (see above)
  5. Run the Menu Editor
  6. Press F2 on TOP to edit
  7. Put a G somewhere:
    • Short Description: FU Globals
    • Key Required: SYSOP
    • No Key: hide
    • Destination page: FUGLOBALS
  8. Return to tree, press F2 on FUGLOBALS
  9. Module page, Key required: SYSOP, Module Name: FU Globals
  10. F10 to exit
  11. Start Worldgroup
  12. Get to the menu and press G to enter FU Globals
  13. At the prompt to register say yes and enter your code
  14. At the main FU Globals menu, press C
  15. Now make the following changes. First Type E for edit, and then type cmd <COMMAND> to edit it
    • cmd ;repeat => change the ;repeat to =r (no one likes typing "=repeat" and we change ;repeat to leave =repeat for anyone that has that macro'd)
    • cmd ;#=> change ;# to just #
    • cmd =fu => disable this command to disable the sending of FU grams
    • cmd =tl => change ;tl to shar and =tl to sha -- parts 1/3 and 2/3 to disable the share command in mud and avoids an exploit
    • "cmd ;ask => change ;ask to share -- part 3/3 to disable the share command to prevent an exploit.
    • Do the same for forg, "forgi, forgiv, and forgive to prevent another exploit. Assign them to other vars like "rt" (read FU Grams to you), rf (from you), td (time of day)
    • Additional commands to disable: set, mail, rpedit, macros1, macros2
  16. Press X to go back to the main FU G menu and then press M for modules and then G for Go modules
  17. Enter MajorMUD on one of the lines to disable the alternate GO commands in MUD
  18. Back at the main FUG menu, press O for online CNF, and press 1 for config screen 1
  19. Change #3) Key needed to be forced invisible at logon to something like INVISIBLEKEY
  20. On config screen #6 change Default # of minutes of NO ACTIVITY before AUTO-AFK to 0

Install Dialsoft Control v5.62

NOTE: Dialsoft Control v2.01 DOES NOT WORK... at least I couldn't get it to work. With v2.01 anyone that did not have a master key basically has no keyring. I could not find any way to fix this. Works fine in v5.62.
 

  1. Extract the zip to a folder
  2. Copy ICOMP.exe from your majormud installation files (or from somewhere else) into the FU Globals folder
  3. Open a command prompt to that folder and run icomp DATA.Z c:\WGSERV\ -d -i -o
  4. If you updated your btrieve to the new PSQL versions, use the rebuild tool to update the DIALCTRL.DAT and DIALCTRL.VIR files (see above)
  5. Run the menu editor
  6. Press F2 on TOP to edit
  7. Put a C somewhere, short description: Dialsoft Control, key required: SYSOP, no key: hide, destination page: CONTROL
  8. Return to tree, press F2 on CONTROL
  9. Module page, Key required: SYSOP, Module Name: Dialsoft Control
  10. F10 to exit
  11. Start Worldgroup
  12. Get to the menu and press C to enter Control
  13. Press C to create configuration file (not sure if this is necessary or not)
  14. Type config
    • Enter registration code
    • Key required for sysop access to CONTROL: SYSOP
    • Store IP address of user in which account field: Country. ** DO NOT CHOOSE "PhoneNumber" ** -- I chose this and then whenever a new user was created it wouldn't save their choice for their sex, nor it would save their screen columns and rows.
  15. Type "N" for new user contol
    • Clear the name next to New user mail notification accounts/forums #1
    • Punish users who enter first name only? - NO
    • Punish users who enter letters in their phone #? - NO
    • Send new user email even if user is punished? - NO
    • Disable all of the "Punish─new─users─who─use─kill─words" ...
    • Punish new users who use kill-numbers in their phone#? - NO
  16. Press G for global and set SYSOP for key required for everything there.
  17. Press MM for Miscellaneous
    • Maximum simultaneous connections from an IP: Set if you want to limit this. And you can exclude IPs below that.
  18. If you would like to add everyone's IP address to a FU globals online list (a SYSOP one would be safer):
    • From the WG utilities folder in the start menu, launch the Text Block Editor
    • Scroll down to DIALGLO -> FUL5H (sysop user list #1 header) and click WGSDRAW
    • Change Real Name to IP ADDRESS
    • Press ALT+X and then choose save
    • Now CLICK ON BUT DONT EDIT FUL5L (sysop user list #1 user online and visible) -- whenever I would edit this with WGSDRAW it would insert a "clear screen" escape sequence and there was no way I could figure out to get rid of it (supposed to be able to press ALT+W in wgsdraw but it wouldn't work). And manually editing it out would screw up the whole file.
    1. Just change the text FUO\_REALNAME to DIA\_IPADDRESS right in the window there.
    2. Click save on the toolbar and then close the text block editor (file does not compile unil you close it)
    3. Reload the system

Worldgroup Administration


Files

Filename Command Line Description
C:\WGSERV\wgsappgo.EXE Start Worldgroup
C:\WGSERV\WGSCNF.exe Worldgroup Configurator
-L1 Launch Hardware Setup
-L3 Launch Security & Auditing
-L4 Launch General Setup
-L6 Launch Text Block Editor
C:\WGSERV\WGSUMENU.exe Offline Utilities
C:\WGSERV\wgsrunmt.EXE Menu Editor
C:\WGSERV\WGSCLEAN.BAT This batch file runs during BBS Cleanup (contents below)
C:\WGSERV\non-sga-check.bat This batch file runs during BBS Cleanup (contents below)
C:\WGSERV\non-sga-check.py Python script run by non-sga-check.bat (contents below)
C:\WGSERV\non-sga-check.log Results of non-sga-check.py runs

Non-SGA Blocking Script

This Python script processes the wgsaudit.adt audit file to detect unauthorized clients by scanning for IP addresses associated with "NON-SGA CLIENT" entries, then adds any new, unblocked IPs to blocklist.txt. It first loads the blocklist into a set for efficient lookup, then parses the audit file using a regular expression to identify IP addresses. If a new IP is found, it is appended to the blocklist, and the event is logged. The script logs all actions to both a log file and the console, and terminates if the necessary files are missing.

non-sga-check.bat
(make sure your path to python.exe is correct)

@echo off
SET "BATDIR=%~dp0"
"%LocalAppData%\Programs\Python\Python311\python.exe" "%BATDIR%non-sga-check.py""

non-sga-check.py

import os
import re
import sys
from datetime import datetime

# Constants for file paths (use absolute paths for Windows)
AUDIT_FILE_PATH = r"C:\WGSERV\wgsaudit.adt"
BLOCKLIST_FILE_PATH = r"C:\WGSERV\blocklist.txt"
LOG_FILE_PATH = os.path.join(os.path.dirname(__file__), "non-sga-check.log")

# Function to log messages to the log file
def log_message(message):
    with open(LOG_FILE_PATH, "a") as log_file:
        log_file.write(f"{datetime.now()}: {message}\n")
    print(message)  # Also print to console

# Function to read IPs from blocklist and store in a set for fast lookup
def load_blocked_ips(blocklist_path):
    if not os.path.exists(blocklist_path):
        log_message(f"Error: blocklist file '{blocklist_path}' not found.")
        sys.exit(1)

    with open(blocklist_path, "r") as block_file:
        blocked_ips = {line.strip() for line in block_file if line.strip()}
    log_message(f"Loaded {len(blocked_ips)} blocked IPs.")
    return blocked_ips

# Function to append a new IP to the blocklist
def add_ip_to_blocklist(ip, blocklist_path):
    with open(blocklist_path, "a") as block_file:
        block_file.write(f"{ip}\n")
    log_message(f"{ip} added to block list.")

# Function to find IPs in the audit file and add any new ones to the blocklist
def process_audit_file(audit_file_path, blocked_ips, blocklist_path):
    if not os.path.exists(audit_file_path):
        log_message(f"Error: audit file '{audit_file_path}' not found.")
        sys.exit(1)

    ip_pattern = re.compile(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")
    new_ip_count = 0

    with open(audit_file_path, "r") as audit_file:
        for line in audit_file:
            if "NON-SGA CLIENT" in line:
                match = ip_pattern.search(line)
                if match:
                    ip = match.group()
                    if ip not in blocked_ips:
                        add_ip_to_blocklist(ip, blocklist_path)
                        blocked_ips.add(ip)
                        new_ip_count += 1

    log_message(f"Processed audit file. Added {new_ip_count} new IPs to blocklist.")

# Main execution
def main():
    # Load the blocked IPs from the blocklist
    blocked_ips = load_blocked_ips(BLOCKLIST_FILE_PATH)

    # Process the audit file and update blocklist
    process_audit_file(AUDIT_FILE_PATH, blocked_ips, BLOCKLIST_FILE_PATH)

    log_message("Script execution completed.")

if __name__ == "__main__":
    main()

Cleanup / Backup Script

This assumes access to rar, curl, restic, and the non-sga-check.bat/python script(s) above.

This script performs the following actions:

  1. Sends a notification to Discord at the start of the cleanup process.
  2. Moves the WCCMMUD.log and non-sga-check.log files to C:\BACKUPS.
  3. Compresses the entire C:\WGSERV folder into a RAR file and saves it in C:\BACKUPS.
  4. Moves the WCCMMUD.log and non-sga-check.log files back to the C:\WGSERV folder.
  5. Cleans up local backup files from C:\BACKUPS.
  6. Backs up the contents of C:\BACKUPS to a Restic repository in Backblaze B2.
  7. Cleans up the Restic repository.
  8. Sends a notification to Discord when the cleanup is complete.
  9. Starts up the BBS.

WGSCLEAN.BAT

@echo off

:: set dicord webhook
SET WEBHOOK_URL=https://discordapp.com/api/webhooks/xxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxx

:: set folders
SET BACKUP_FOLDER=c:\backup
SET WGSERV_FOLDER=c:\WGSERV

:: set files to exclude from backup
SET EXCLUDE_FILES=wccmmud.log,non-sga-check.log

:: set backup retention
SET LOCAL_KEEP_DAYS=7
SET RESTIC_KEEP_DAYS=7
SET RESTIC_KEEP_WEEKS=8
SET RESTIC_KEEP_MONTH=12

:: define program locations
SET RESTIC_EXE=c:\util\restic_0.12.1_windows_amd64.exe
SET RAR_EXE=C:\PROGRA~1\WinRAR\rar.exe
SET CURL_EXE=%systemroot%\system32\curl.exe

:: set restic repository settings
SET B2_ACCOUNT_ID=xxxxxxxxxxxxxxxxxxx
SET B2_ACCOUNT_KEY=xxxxxxxxxxxxxxxxxxx
SET RESTIC_REPOSITORY=b2:some-bucket:/
SET RESTIC_PASSWORD=xxxxxxxxxxxxxxxxxxx

:: send discord notification
%CURL_EXE% -H "Content-Type: application/json" -d "{\"username\": \"Orfeo\", \"content\":\"BBS shut down. Starting backup.\"}" %WEBHOOK_URL%

:: get todays date in MM-DD-YYYY format
for /f "usebackq skip=1 tokens=1-3" %%g in (`wmic Path Win32_LocalTime Get Day^,Month^,Year ^| findstr /r /v "^$"`) do (
  set _day=00%%g
  set _month=00%%h
  set _year=%%i
  )
set _month=%_month:~-2%
set _day=%_day:~-2%
set PRETTY_DATE=%_month%-%_day%-%_year%

:: run non-sga ip block script
call %WGSERV_FOLDER%\non-sga-check.bat

:: move the files to exclude out of the WGSERV folder
for %%X in (%EXCLUDE_FILES%) do move %WGSERV_FOLDER%\%%X %BACKUP_FOLDER%

:: compress the WGSERV folder
"%RAR_EXE%" a -rr -ag-MM-DD-YYYY %BACKUP_FOLDER%\wgserv.rar %WGSERV_FOLDER%

:: move excluded files back into WGSERV folder
for %%X in (%EXCLUDE_FILES%) do move %BACKUP_FOLDER%\%%X %WGSERV_FOLDER%

:: cleanup old local files
forfiles -p %BACKUP_FOLDER% -m *.* -d -%LOCAL_KEEP_DAYS% -c "cmd  /c del /q @path"

:: upload backup to b2
"%RESTIC_EXE%" unlock
"%RESTIC_EXE%" backup %BACKUP_FOLDER%\wgserv-%PRETTY_DATE%.rar
"%RESTIC_EXE%" forget --keep-daily %RESTIC_KEEP_DAYS% --keep-weekly %RESTIC_KEEP_WEEKS% --keep-monthly %RESTIC_KEEP_MONTH%
"%RESTIC_EXE%" prune

:: send discord notification
%CURL_EXE% -H "Content-Type: application/json" -d "{\"username\": \"Orfeo\", \"content\":\"BBS backup complete. Starting BBS.\"}" %WEBHOOK_URL%

MajorMUD Administration


Hex Edits

If you wish to do editing of your MUD it is highly recommended that you apply the following patches. Use Hex Workshop or equivalent in order to make the following changes.

Offset Change From Change To Notes
000019F3 CO 5D F4 BF Increased Monster Records? #1
0001475B E8 C67A 0500 90 9090 9090 Increased Class Records
00014777 E8 907A 0500 90 9090 9090 Increased Map Records
00014814 66C7 8473 3A07 0000 0000 9090 9090 9090 9090 9090 Increased Abilities/Spells #1
000148BE 66C7 8473 3A07 0000 0000 9090 9090 9090 9090 9090 Increased Abilities/Spells #2
000149B0 66C7 8473 3A07 0000 0000 9090 9090 9090 9090 9090 Increased Abilities/Spells #3
0001561E E800 EDFF FF 9090 9090 90 Fix for Increased Records
00015794 74 EB Increased Race Records
00018290 0F85 FC02 E9FD 0200 MajorMUD Addon Crack #1
0002F57E C800 FF7F Increased Shop Records #1
000392D8 41 4F "(Two handed)" changes to "(Weapon Hand)"
0004E789 53 50 MajorMUD 256-User Crack #1
0004E79C 0400 0001 MajorMUD 256-User Crack #2
0004E9B4 75 EB MajorMUD Addon Crack #2
0004E9BA FF75 08 9090 50 MajorMUD Addon Crack #3
0005AE3D E8 0300 EC FF09 Increased Shop Records #2
0005AEBD E8 0300 EC FF09 Increased Shop Records #3
0005AED5 E8 0300 EC FF09 Increased Shop Records #4
0005B01D D0 07 FF 7F Increased Shop Records #5 (Restocking)
0005F879 D0 07 FF 0F Increased Monster Records #2
000649EA E856 FAFC FF 9090 9090 90 SYS LIST NEWLIMITED call
0006D639 66 C784 433A 0700 0000 00 90 9090 9090 9090 9090 90 Smash, PerStealth, and Meditate Fixes #1
0006D6E3 66 C784 433A 0700 0000 00 90 9090 9090 9090 9090 90 Smash, PerStealth, and Meditate Fixes #2
0006D7D5 66 C784 433A 0700 0000 00 90 9090 9090 9090 9090 90 Smash, PerStealth, and Meditate Fixes #3
0007C02F 64 6973 636F 6E6E 6563 7465 6421 2121 0D 68 756E 6720 7570 2121 210D 0000 0000 00 "just disconnected!!!" changes to "just hung up!!!"
0008FD9F 45 4449 5445 44 53 5953 4F50 00 Changes EDITED to SYSOP
0008BCC5 6C 616E 6365 77 6172 657A Changes SYS LANCE to SYS WAREZ}}

Bugs

Various MajorMUD bugs and possible fixes.

Orfeo Store Bug

Elf bards, with their charm maxed, blessing with beauty, can buy/sell song of battle at Orfeo for a profit. They buy low, sell high because Orfeo's is a 0% markup shop. If an elf bard player makes a macro s/he can buy/sell the song of battle fast enough to make about 8 runic per hour, perhaps more."

Lyrist's Companion (Bard Cloak) Bug

(Not fixed in 1.11p or 1.00x) "lyrist's companion; casts spell 1055/ "BCNS" (bard cloak no spell)
cast message "3499" (blank) - re-insert the cast message, like the rest of the cloaks have. (2520)
desc message "3498" (blank) - re-insert the desc message, like the rest of the cloaks have. (2531 works nicely.) At this point both are currently left blank. MajorMUD doesn't like being told to execute a command with no commands in it; that's what causes the "The room casts XX!" issue with room spells. Many of the game's room spells are left open ended and are written is a sloppy manner. The messages are inserted backwards and the game is looking for "Textblock 0" when it should be looking for "Textblock XX"; the appropriate text block is set up as a duration, level cap or some other protocol for the spell. poor coding."

This bug will crash your board if left unfixed. Follow the instructions listed, using NMR, and it will actually function like it should. Most Sysops just used FU Globals to block the command "u lyr", this will actually fix it so the cloak can be used. Your bards will love you for it.


Encumberance Bug

This fixed with hexedits above

The only way I know to fix this is by using FU Globals, as described above in the FU Globals setup You block the share command to fix it. Here's a little more information on how it's done, and what exactly it let's you do:

"For the most part, it is more hassle than it is worth to carry around so much coin all the time and even more of a hassle to have to reload it, not to mention, running a stash long enough to pile up that much money in one room. I wouldn't have been able to accumulate a stash that big if I hadn't been scripting on the galleon where others had scripted before me, for over a year, and where several rooms had more than 7 million silver in them. For an elf bard, the number of coins needed to roll enc twice was somewhere between 8 million and 9 million...for the general smasher, it would take even about 1 million coins per 1000 enc to roll enc once. This would be a lower amount for most casters but still would take a lot of time to collect/make and load. Since this is strictly a sharing feature, it ties up a lot of time on 2 characters."

Dual Lever Disconnect

"The green house rubbish room, Khaz disposal chamber bug is a bit trickier but can have nasty consequences. If a player in the green house rubbish room pulls the lever at the same time another player pulls the lever in the Khaz disposal chamber it cause random disconnects of players in the realm. This can play havoc if it occurs during a boss kill, if players are disconnected while in big regen rooms, etc."

I tried looking at the levers in NMR, and everything looks good. I guess this must be some coding error somewhere. The fair way to neuter this would be to block access to the Khaz Disposal chamber, via the map function in NMR. I haven't actually played MMUD in many years, so I'm not sure if the Khaz chamber is the only place to dispose of certain objects? You could block the green house rubbish room, but that makes the green gang house less functional. I don't know if this is still a bug in 1.11p - its pretty hard to time, even if you have two people who know about it.

Codec of Twinks

The codec of twinks is a hidden Sysop option in the WCCMMUD.INI configuration file. With this option enabled you will have access to an additional array of Sysop commands.

To enable this option edit or create the file WCCMMUD.INI in your main BBS folder (C:\WGSERV). Add the line for the codec of twinks as follows then save and restart your BBS.

CODEC_OF_TWINKS=78

Additional Commands
This is the complete list of additional commands that are added by the codec of twinks.

Summon monsters, items or spells to your current location.
SYS SUMMON <monster number>
SYS SUMMON <item>
SYS SUMMON <spell>
Teleport to any map and room in the game.
SYS E <room#> <map#>
List a users Quest Flags (ie. what they have completed).
SYS GOD <character> ABILITIES
Tweak the statistics of everyone simultaneously, or reset all edits to this.
SYS TWEAK and SYS EDIT CLEAR

There are also commands that require you to be located in a certain room in order for them to work, these include the invasions and the alignment and high level spell stuff.


Room #238 Map #1

From this room you can use the following commands. They do not need to be proceeded by SYS, just issue the commands.

EXPME : gives experience points
GOODRING : gives you the good alignment quest ring
NEUTRING : gives you the neutral alignment quest ring
EVILRING : gives you the evil alignment quest ring
GOOD[1-5] / NEUT[1-5] / EVIL[1-5] : gives you complete flags for alignment quests at the level you assign
LEARN SPELL : gives you the spells: Eye of Magnus, Bigheal, Combat Fury, Death Gaze, Glove of Invulnerability, Judgement of Doom, Negate Magic, Sphere of Isolation (must be a caster class in order to get these)


Support Chamber

From the support chamber you can now start monster invasions, which can be summoned at max once per day. Again there is no need to proceed the command with SYS as long as you are in the Support Chamber.

ORC INVASION
RED INVASION
CULT INVASION
GREEN INVASION
DUERGAR INVASION
SARACEN INVASION


WCCMMUD.INI Example

# GENERAL
BLANK_LASTNAME_ALLOWED=1
CODEC_OF_TWINKS=78
EXP_IN_TOPGANG=1
MAXIMUM_BANK_BALANCE=0
UPDATE_SPEED=0
# LOGGING
LOGFILE=WCCMMUD.LOG
LOG_SYSOP_COMMANDS=1
TRACK_LIMITED=1
SYS_LOG_DEATHS=1
# SYSOP COMMANDS
SYS_DISABLE_GANGS=MMUDNOGANG
SYS_ADDLIFE_KEY=MMUDGOD
SYS_ALIGNMENT_KEY=MMUDGOD
SYS_DISBAND_KEY=MMUDGOD
SYS_EDITEVIL_KEY=MMUDGOD
SYS_RESET_ROOMS=MMUDGOD
SYS_RETRAIN_KEY=MMUDGOD
SYS_SPEAK_KEY=MMUDGOD
SYS_TOPTEN_KEY=MMUDGOD
SYS_BUFFERS_KEY=MMUDOP
SYS_CHANGE_KEY=MMUDOP
SYS_CLEARSUICIDE_KEY=MMUDOP
SYS_JAIL_KEY=MMUDOP
SYS_LIGHTNING_KEY=MMUDOP
SYS_LISTLIMIT_KEY=MMUDELITE
SYS_LISTUSER_KEY=MMUDELITE
SYS_REPORT_KEY=MMUDELITE
SYS_STATUS_KEY=MMUDELITE
SYS_USERINFO_KEY=MMUDOP
SYS_GOTO_KEY=MMUD
SYS_MAP_KEY=MMUD

Resetting MajorMUD

If you do not understand the difference between these two options and you just know that you want a complete 'MajorMUD reset' then take a full backup of your system and do Option #2 (Full Reset).

Option #1 (Partial Reset)

If you wish to reset all of the users on your board while maintaining the current map environment, you must follow these steps.

Copy WCCUSERS.VIR to WCCUSERS.DAT
Copy WCCGANGS.VIR to WCCGANGS.DAT
Copy WCCBANKS.VIR to WCCBANKS.DAT
Refer to appendix A.1 in this document and follow those instructions now if applicable to you (i.e. if you own MajorMUD Plus).
Run the BBS and IMMEDIATELY choose C for Clear all saved evil points on the sysop menu.


Option #2 (Full Reset)

If you wish to completely reset and start from scratch, follow these steps:

Note: If you are running any other WCC Products (currently only WCC Line Control is available) please contact Metropolis for information on which files to NOT delete.

Note: If you received a new WCCDMA.SYS file (for running on a DMA server) after the latest version was released, make sure you save this file to restore it after re-installing.

Note: This must be done prior to anyone creating new characters.

Note: This must also be done prior to anyone creating new characters.


Resetting MajorMUD Plus - Entertainment Edition

If you own MajorMUD Plus - Entertainment Edition and you are resetting your MajorMUD game then you most likely want to reset the MajorMUD plus registries and descriptions.

Do this with the clear plus data option in the MajorMUD offline utilities (refer to the MajorMUD Plus release notes - WCCMMPLS.REL - for more information)


Multiple MUDs

This method converts your currently installed MUD to new call letters (i.e. WCC to WBB) and then allows you to install a second MUD using the standard SETUP.EXE.

If you don't have a currently installed MUD, install it normally and test it out and then come back to this.

Note: Backup your whole C:\WGSERV directory somewhere just in case something goes wrong.


Hex Editing

This process needs to be done for the entire list of files to the right one at a time.

  1. Open the file in the hex editor
  2. Initiate a "replace" operation (usually Edit --> Replace)
  3. Make sure that you have "Match Case" enabled/selected.
  4. Also make sure you're searching for "Text" or "Strings"
  5. Search for WCC and replace with WBB (replace All when it asks)
  6. Search for wcc and replace with wbb (replace All when it asks)
  7. Save and Close

1193-522-max.png

Finalizing

  1. Change the module name.
    • Edit the file WBBMMUD.DMD with Notepad.
    • Change Module Name: MajorMUD to something different.
    • Example: Module Name: CrazyMUD
    • Do the same for the other line below:
    • Add-On Utility: WBBMMUTL -- MajorMUD Utilities => Add-On Utility: WBBMMUTL -- CrazyMUD Utilities
    • Do the same for WBBMMPLS.DMD
    • Note: If you still have MajorMUD as an enabled module you would need to edit the .MDF files as opposed to .DMD.

  1. Re-Enable the modules from the Offline Util., they should now show up with your new module name
  2. Fix/Add the page in the Menu Editor (WGSRUNMT.EXE), since it will have the wrong module name now.
  3. You may want to go into the Security and Accouting for MajorMUD and MajorMUD Plus and check the key names. Hex editing most likely changed the keys for things like gameop and sysop from WCCGAMEOP to WBBGAMEOP. Though, you probably want it this way, and then just add the new keys to whichever classes.
  4. Use NMR to change all the references in the rooms database for WCC files to WBB files. this is under tools --> rooms --> change dat call letters (NMR v1.4 required)
  5. Run an Offline Recovery
  6. Test out the Realm (best to test with your lines closed for the first time).
  7. Gain some EXP with a character and Exit and Re-Enter the Realm.

You can install another instance of MajorMUD by using the setup like it was a fresh install on a BBS without MajorMUD.


Other Options

You may also want to change the name that appears next to things in the Audit Trail.

  1. Open up wbbmmud.dll and wbbmmpls.dll in a Hex Editor
  2. Replace all instances of MajorMUD with CustmMUD or w/e you want.
  3. The only tricky part here is you can't change the length of the text MajorMUD.
  4. Therefore you must replace the letters letter for letter (aka your custom name must be no longer and no shorter then 8 characters).1

General Editing Help


Backup, Backup, Backup! - Always make backups

download and install winrar to get rar.exe - copy it to your WG folder...

Go to your WG folder and create the following:

Create a basic backup script WGSCLEAN.bat:

You can use the more complete script above.

@echo off
rar a -rr -ag-MMM-DD-YY mudbackup\wccbackup.rar wcc*.*

This creates a file that looks like "wccbackup-Feb-22-03.rar"
just remember to delete them every once in a while...

if you had a second realm going, then just add another line:

rar a -rr -ag-MMM-DD-YY mudbackup\wbbbackup.rar wbb*.*

About the Update File

wccupda2.dat - important file

Note: The databases that are compiled into the wccupda2.dat file are: races, classes, monsters, items, spells, rooms, shops, actions, textblocks, and messages.

Editing Environments

There are three general scenarios you can use to go about with your editing. These are listed in order of recommendation.

  1. Copy your w*.dat files to a seperate directory and set nightmare up to edit those. When you are done making edits, compile an update file and copy it to your bbs directory. you'll need to make sure your bbs has finished it's update process (see above) before you can overwrite that file. if you want your dat files to be updated you can either; a) wait for the next shutdown and startup for it to automatically run through, b) go to the sysop menu and "apply an update", or c) restart the BBS manually.

  2. Do your edits offline with nightmare setup to edit that dats in your WG folder. This way you don't have to worry about the update file not doing it's job or deal with waiting for edits to be applied. Be sure to compile an update before you load your BBS though. If you don't, all of the edits you did will be overwritten as the update file runs though.

  3. Edit the dats in your WG folder while the BBS is running. I have only heard of one user to have success with this and I personally think it can cause a lot of corruption. if mud and you go to write to a record at the same time, OR if mud went to write a value and then you wrote over it before it went to read it again, OR if mud went to read one of the quickreferences it creates for monsters/items/spells/etc and then all of a sudden it isn't there anymore or different than how it initially read it, OR any number of other things I could sit here and write about could cause corruption and/or crashes. use this method cautiously and you'll need to wait until the update file has finished it's course before doing any edits.

Editing Users

DO NOT edit a user while the user is in the game. if you are using method #1 and wish to edit a user, just point NMR to your WG directory temporarily and do whatever edits you want and switch it back.

Any time you manually take the board down to do some edits or whatever you should always run an offline recovery wccmmutl.exe before starting the BBS back up.

BTRIEVE ERROR CODES

Status 1 - Invalid Operation
Status 2 - Disk I/O Error
Status 3 - File Not Open
Status 4 - Key Value Not Found, on an UPDATE, this means the file is damaged
Status 5 - Duplicate Key Value
Status 6 - Invalid Key Number
Status 7 - Different Key Number
Status 8 - Invalid Positioning
Status 9 - End-Of-File
Status 10 - Modifiable Index Value Error
Status 11 - Invalid Location
Status 12 - File Not Found
Status 13 - Extended File Error
Status 14 - Pre-Image Open Error
Status 15 - Pre-Image I/O Error
Status 17 - Close Error
Status 18 - Disk Full
Status 19 - Unrecoverable Error
Status 20 - Record Manager Inactive
Status 21 - Index Buffer Too Short
Status 22 - Data Buffer Length
Status 23 - Position Block Length
Status 24 - Page Size Error
Status 25 - Create I/O Error
Status 26 - Number of Keys
Status 27 - Invalid Key Position
Status 28 - Invalid Record Length
Status 29 - Invalid Key Length
Status 30 - Not A Btrieve File
Status 35 - Directory Error
Status 36 - Transaction Error
Status 37 - Transaction Is Active
Status 38 - Transaction Control File I/O Error
Status 39 - End/Abort Transaction Error
Status 40 - Transaction Max Files
Status 41 - Operation Not Allowed
Status 43 - Invalid Record Access
Status 44 - Null Index Path
Status 46 - Access To File Denied
Status 51 - Invalid Owner
Status 52 - Error Writing Cache
Status 54 - Variable Page Error During a Step Direct operation
Status 55 - Autoincrement Error
Status 58 - Compression Buffer Too Short
Status 66 - Maximum Number of Open Databases Exceeded
Status 67 - Rl Could Not Open SQL Data Dictionaries
Status 68 - Rl Cascades Too Deeply
Status 69 - Rl Cascade Error
Status 71 - Rl Definitions Violation
Status 72 - Rl Referenced File Could Not Be Opnend
Status 73 - Rl Definition Out Of Sync
Status 76 - Rl Referenced File Conflict
Status 77 - Wait Error
Status 78 - Deadlock Detected
Status 79 - Programming Error
Status 80 - Conflict
Status 81 - Lock Error
Status 82 - Lost Position
Status 83 - Read Outside Transaction
Status 84 - Record In Use
Status 85 - File In Use
Status 86 - File Table Full
Status 87 - Handle Table Full
Status 88 - Incompatible Mode Error
Status 90 - Redirected Device Table Full
Status 91 - Server Error
Status 92 - Transaction Table Full
Status 93 - Incompatible Lock Type
Status 94 - Permission Error
Status 95 - Session No Longer Valid
Status 96 - Communications Environment Error
Status 97 - Data Message Too Small
Status 98 - Internal Transaction Error
Status 100 - No Cache Buffers Available
Status 101 - No OS Memory Availabl
Status 102 - Not Enough Stack space
Status 1001 - Lock Option Out Of Range
Status 1002 - Memory Allocation Error
Status 1003 - Memory Option Too Small
Status 1004 - Page Size Option Out Of Range
Status 1005 - Invalid Pre-Image Drive Option
Status 1007 - Files Option Out of Range
Status 1008 - Invalid Initialization Option
Status 1009 - Invalid Transaction File Open
Status 1011 - Compression Buffer Out Of Range
Status 1013 - Task Table Full
Status 1014 - Stop Warning
Status 1015 - Invalid Pointer
Status 1016 - Already Initialized
Status 2001 - Insufficient Memory
Status 2003 - No Local Access Allowed
Status 2006 - No Available SPX Connection
Status 2007 - Invalid Parameter

Credits

Syntax53 - https://mudinfo.net
Kyau - https://kyau.net/wiki/Category:MajorMUD