37 Commits

Author SHA1 Message Date
f6c8c764ca patch for Grenzland zone
Some checks failed
C/C++ CI / build (push) Has been cancelled
2026-01-27 23:26:30 +01:00
94b9b69eec commit after restart 2026-01-26 23:35:20 +01:00
f6cbe30c10 Merge pull request 'grenzland-region' (#3) from agroschim/grenzland-mud:grenzland-region into master
Some checks failed
C/C++ CI / build (push) Has been cancelled
Reviewed-on: #3
2026-01-26 20:58:06 +01:00
agroschim
1127cb5d3e Bugfix in trigger #49100
Some checks failed
C/C++ CI / build (pull_request) Has been cancelled
2026-01-22 21:24:17 +01:00
60c28bbfee merge upstream
Some checks failed
C/C++ CI / build (pull_request) Has been cancelled
2026-01-22 21:03:28 +01:00
agroschim
168bdc20b7 First level of the library dungeon 2026-01-22 21:01:22 +01:00
1433fb4145 not needed
Some checks failed
C/C++ CI / build (push) Has been cancelled
2026-01-22 17:32:38 +01:00
b38e0deaf8 test
Some checks failed
C/C++ CI / build (push) Has been cancelled
2026-01-22 17:31:23 +01:00
agroschim
cd6d42146b Added more rooms to the Grenzland Building 2026-01-22 17:24:20 +01:00
1a6953dc9f Merge branch 'master' of https://gitea.wilderland.ovh/kyonshi/grenzland-mud
Some checks failed
C/C++ CI / build (push) Has been cancelled
2026-01-22 12:25:26 +01:00
9b9bb8eab5 moving stuff around 2026-01-22 12:23:29 +01:00
agroschim
6fb926bd21 Made the shops work
Some checks failed
C/C++ CI / build (pull_request) Has been cancelled
2026-01-20 21:32:00 +01:00
agroschim
237948350d Restructured the zone and fleshed out the Grenzland Building. 2026-01-20 20:13:49 +01:00
agroschim
7ab0918c9c Add the first rooms of the Grenzland Building in Midgaard 2026-01-20 18:41:24 +01:00
b1844be82d Update README.md
Some checks failed
C/C++ CI / build (push) Has been cancelled
2026-01-20 16:14:59 +01:00
8fd4d5b234 Merge branch 'master' of https://gitea.wilderland.ovh/kyonshi/grenzland-mud
Some checks failed
C/C++ CI / build (push) Has been cancelled
2026-01-20 16:13:41 +01:00
5ac7427a6f Merge branch 'grenzland' 2026-01-20 16:11:17 +01:00
37ba5ea608 yep
Some checks failed
C/C++ CI / build (pull_request) Has been cancelled
2026-01-20 01:03:20 +01:00
agroschim
1678f66809 Initial commit 2026-01-19 21:29:53 +01:00
e0083e3767 Update README.md
Some checks failed
C/C++ CI / build (push) Has been cancelled
2026-01-16 17:40:31 +01:00
8125d736c9 new branch Grenzland 2026-01-16 13:31:28 +01:00
c8e9cd8dc6 Update README.md
Some checks failed
C/C++ CI / build (push) Has been cancelled
2026-01-16 13:27:16 +01:00
44a7ac0308 changes to text files
Some checks failed
C/C++ CI / build (push) Has been cancelled
2026-01-16 13:24:46 +01:00
Thomas Arp
4e1680db1a KAIZEN remove webster from CMakeLists.txt (#158) 2025-11-07 23:53:23 +01:00
Thomas Arp
f6339b495e Feature/clang tidy (#154)
* First cmake list file, simple docs.

TODO: utils folder.

* Support for building utils

* All fields except HAVE_DOPRNT in place

* Now builds and runs :)

* Added support for clang-tidy, if available.
2025-07-02 22:34:57 +02:00
Thomas Arp
3e0c1ccc18 Support cmake (#153)
* First cmake list file, simple docs.

TODO: utils folder.

* Support for building utils

* All fields except HAVE_DOPRNT in place

* Now builds and runs :)
2025-07-02 22:23:10 +02:00
Thomas Arp
b9d84fc325 Make sure %target% also works in act triggers and code cleanup (#152)
* Make sure %target% works in act triggers

* code cleanup. Remove inline block, make variable names more understandable.

Ref https://www.tbamud.com/forum/4-development/4525-confused-over-piece-of-code-in-parse-room
2025-07-02 22:22:36 +02:00
Thomas Arp
bdaca46e79 Added a new trigger type for mobs, called "Damage", that triggers every (#151)
time the mob is harmed, through any means.

Valid return values: 
-1: prevents damage from occurring. Will also prevent a fight from
starting.
0: forces a miss.
>0 : the damage the mob will endure.

Available variables:
%actor%: the one doing the damage
%victim%: typically the same as %self% - the one being attacked
%damage%: the damage inflicted. Always a non-negative number.
%attacktype%: The attack type. Will be UNDEFINED when hitting with a
weapon.
2025-07-02 22:22:17 +02:00
Thomas Arp
f1794521cf Feature/issue 141 immort where (#142)
* perform_immort_where and print_object_location rewritten to handle paging.

Fixes #141

* A little more info in immort where now we have more space for output.

Fixes #141

* Added PRF_VERBOSE for toggling long output in where command.

Fixes #141

* Also toggle headers in `where x` depending on verbose-pref.

Fixes #141
2025-07-02 22:21:14 +02:00
Thomas Arp
89eb009c4f Remove webster lookup since it no longer works (#99)
* removed useless util/webster.c and fixed a couple of potential buffer overruns in the util functions

* removed stray utf-8 error chars. I guess someone has used an editor with fancy 's

* removed last webster integrations
2025-07-02 22:18:40 +02:00
Thomas Arp
9a0a096f85 Merge remote-tracking branch 'refs/remotes/origin/master' 2025-07-02 21:27:07 +02:00
Thomas Arp
ba7dc7bf6f convert docs files to utf-8 2025-07-02 21:26:19 +02:00
Thomas Arp
558e71eed8 ignore .idea from clion IDE 2025-07-02 21:25:34 +02:00
Marthammor
a4af23538f Add MTTS support (#150)
MTTS support - thanks to marthammer for the patch
2025-06-28 23:58:14 +02:00
Thomas Arp
b471ff195e avoid freeing obj_proto[].name. (#149)
fixes #148
2025-05-06 23:15:06 +02:00
Rumble
392f3d90b8 Staying ahead of the power curve 2025-04-16 12:24:37 -07:00
Thomas Arp
be8de64cf8 fix buffer overrun act.informative.c (#146)
Ref https://www.tbamud.com/kunena/4-development/5636-bug-in-do-toggle-in-act-informative-c#10540

Thanks to Ironfist for the fix
2025-02-19 21:18:39 +01:00
85 changed files with 3399 additions and 556 deletions

8
.clang-tidy Normal file
View File

@@ -0,0 +1,8 @@
Checks: >
-*,
clang-analyzer-*,
bugprone-*,
performance-*,
portability-*
#WarningsAsErrors: '*'
HeaderFilterRegex: 'src/.*'

10
.gitignore vendored
View File

@@ -11,8 +11,6 @@ src/.accepted
src/depend
src/util/depend
build/*
!build/create_solution.bat
!build/README.md
# Do not commit files from players
lib/plrfiles/A-E/*
@@ -65,12 +63,18 @@ lib/plrobjs/index
!lib/plrobjs/U-Z/00
!lib/plrobjs/ZZZ/00
#don't commit logs
!log/*
!syslog.CRASH
# also not autogenerated config file
/lib/etc/config
# or the list of last logins
/lib/etc/last
# or mail
lib/etc/plrmail
#or time
lib/etc/time
# test object files, etc
src/test/depend
@@ -82,7 +86,7 @@ src/test/testfile
.vscode
.project
.settings
.idea
.cproject
# macOS generated files

407
CMakeLists.txt Normal file
View File

@@ -0,0 +1,407 @@
cmake_minimum_required(VERSION 3.12)
project(TbaMUD C)
set(CMAKE_C_STANDARD 99)
# Include checker modules
include(CheckFunctionExists)
include(CheckIncludeFile)
include(CheckTypeSize)
include(CheckStructHasMember)
include(CheckSymbolExists)
include(CheckCSourceCompiles)
# Output paths
set(BIN_OUTPUT_DIR ${CMAKE_SOURCE_DIR}/bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIR})
# Include source and build paths
include_directories(src ${CMAKE_BINARY_DIR})
# ========== Compiler flags ==========
if (CMAKE_COMPILER_IS_GNUCC)
include(CheckCCompilerFlag)
check_c_compiler_flag(-Wall SUPPORTS_WALL)
check_c_compiler_flag(-Wno-char-subscripts SUPPORTS_WNO_CHAR_SUBSCRIPTS)
if (SUPPORTS_WALL)
set(MYFLAGS "-Wall")
if (SUPPORTS_WNO_CHAR_SUBSCRIPTS)
set(MYFLAGS "${MYFLAGS} -Wno-char-subscripts")
endif()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MYFLAGS}")
endif()
endif()
# clang-tidy if available
find_program(CLANG_TIDY_EXE NAMES clang-tidy)
if(CLANG_TIDY_EXE AND STATIC_ANALYSIS)
message(STATUS "clang-tidy enabled: ${CLANG_TIDY_EXE}")
set(CMAKE_C_CLANG_TIDY "${CLANG_TIDY_EXE}")
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
else()
message(WARNING "clang-tidy not found. Static analysis disabled.")
endif()
# ========== Header checks ==========
check_include_file("fcntl.h" HAVE_FCNTL_H)
check_include_file("errno.h" HAVE_ERRNO_H)
check_include_file("string.h" HAVE_STRING_H)
check_include_file("strings.h" HAVE_STRINGS_H)
check_include_file("limits.h" HAVE_LIMITS_H)
check_include_file("sys/select.h" HAVE_SYS_SELECT_H)
check_include_file("sys/wait.h" HAVE_SYS_WAIT_H)
check_include_file("sys/types.h" HAVE_SYS_TYPES_H)
check_include_file("unistd.h" HAVE_UNISTD_H)
check_include_file("memory.h" HAVE_MEMORY_H)
check_include_file("assert.h" HAVE_ASSERT_H)
check_include_file("arpa/telnet.h" HAVE_ARPA_TELNET_H)
check_include_file("arpa/inet.h" HAVE_ARPA_INET_H)
check_include_file("sys/stat.h" HAVE_SYS_STAT_H)
check_include_file("sys/socket.h" HAVE_SYS_SOCKET_H)
check_include_file("sys/resource.h" HAVE_SYS_RESOURCE_H)
check_include_file("netinet/in.h" HAVE_NETINET_IN_H)
check_include_file("netdb.h" HAVE_NETDB_H)
check_include_file("signal.h" HAVE_SIGNAL_H)
check_include_file("sys/uio.h" HAVE_SYS_UIO_H)
check_include_file("mcheck.h" HAVE_MCHECK_H)
check_include_file("stdlib.h" HAVE_STDLIB_H)
check_include_file("stdarg.h" HAVE_STDARG_H)
check_include_file("float.h" HAVE_FLOAT_H)
if (HAVE_STDLIB_H AND HAVE_STDARG_H AND HAVE_STRING_H AND HAVE_FLOAT_H)
set(STDC_HEADERS 1)
endif()
# macros
macro(check_run_return_value CODE EXPECTED_RESULT VAR_NAME)
set(_file "${CMAKE_BINARY_DIR}/check_run_${VAR_NAME}.c")
file(WRITE "${_file}" "${CODE}")
try_run(_run_result _compile_result
${CMAKE_BINARY_DIR} ${_file}
)
if (_compile_result EQUAL 0 AND _run_result EQUAL ${EXPECTED_RESULT})
set(${VAR_NAME} TRUE)
else()
set(${VAR_NAME} FALSE)
endif()
endmacro()
# ========== Function checks ==========
foreach(FUNC gettimeofday select snprintf strcasecmp strdup strerror
stricmp strlcpy strncasecmp strnicmp strstr vsnprintf vprintf
inet_addr inet_aton)
string(TOUPPER "${FUNC}" _upper_name)
check_function_exists(${FUNC} HAVE_${_upper_name})
endforeach()
if (NOT HAVE_VPRINTF)
check_function_exists(_doprnt HAVE_DOPRNT)
endif()
# ========== Type checks ==========
check_type_size("pid_t" HAVE_PID_T)
check_type_size("size_t" HAVE_SIZE_T)
check_type_size("ssize_t" HAVE_SSIZE_T)
set(CMAKE_EXTRA_INCLUDE_FILES "sys/socket.h")
check_type_size("socklen_t" HAVE_SOCKLEN_T)
unset(CMAKE_EXTRA_INCLUDE_FILES)
if (NOT HAVE_PID_T)
set(pid_t int)
endif()
if (NOT HAVE_SIZE_T)
set(size_t "unsigned")
endif()
if (NOT HAVE_SSIZE_T)
set(ssize_t int)
endif()
if (NOT HAVE_SOCKLEN_T)
set(socklen_t int)
endif()
# ========== const ==========
check_c_source_compiles("
int main() {
/* Ultrix mips cc rejects this. */
typedef int charset[2]; const charset x;
/* SunOS 4.1.1 cc rejects this. */
char const *const *ccp;
char **p;
/* NEC SVR4.0.2 mips cc rejects this. */
struct point {int x, y;};
static struct point const zero = {0,0};
/* AIX XL C 1.02.0.0 rejects this.
It does not let you subtract one const X* pointer from another in an arm
of an if-expression whose if-part is not a constant expression */
const char *g = \"string\";
ccp = &g + (g ? g-g : 0);
/* HPUX 7.0 cc rejects these. */
++ccp;
p = (char**) ccp;
ccp = (char const *const *) p;
{ /* SCO 3.2v4 cc rejects this. */
char *t;
char const *s = 0 ? (char *) 0 : (char const *) 0;
*t++ = 0;
}
{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
int x[] = {25, 17};
const int *foo = &x[0];
++foo;
}
{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
typedef const int *iptr;
iptr p = 0;
++p;
}
{ /* AIX XL C 1.02.0.0 rejects this saying
\"k.c\", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
struct s { int j; const int *ap[3]; };
struct s *b; b->j = 5;
}
{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
const int foo = 10;
}
; return 0; }
" HAVE_CONST)
if (HAVE_CONST)
set(CONST_KEYWORD const)
else()
set(CONST_KEYWORD "")
endif()
# ========== Struct checks ==========
if (HAVE_NETINET_IN_H)
check_struct_has_member("struct in_addr" s_addr netinet/in.h HAVE_STRUCT_IN_ADDR)
endif()
# ========== crypt()/libcrypt ==========
find_library(CRYPT_LIBRARY crypt)
if (CRYPT_LIBRARY)
message(STATUS "Found libcrypt: ${CRYPT_LIBRARY}")
list(APPEND EXTRA_LIBS ${CRYPT_LIBRARY})
set(_saved_lib_list ${CMAKE_REQUIRED_LIBRARIES})
set(CMAKE_REQUIRED_LIBRARIES ${CRYPT_LIBRARY})
check_include_file("crypt.h" HAVE_CRYPT_H)
check_function_exists(crypt CIRCLE_CRYPT)
check_run_return_value("
#include <string.h>
#include <unistd.h>
${HAVE_CRYPT_H} ? \"#include <crypt.h>\" : \"\"
int main(void)
{
char pwd[11], pwd2[11];
strncpy(pwd, (char *)crypt(\"FooBar\", \"BazQux\"), 10);
pwd[10] = '\\\\0';
strncpy(pwd2, (char *)crypt(\"xyzzy\", \"BazQux\"), 10);
pwd2[10] = '\\\\0';
if (strcmp(pwd, pwd2) == 0)
exit(0);
exit(1);
}
" 0 HAVE_UNSAFE_CRYPT)
set(CMAKE_REQUIRED_LIBRARIES ${_saved_lib_list})
endif()
# ========== network libs ==========
check_function_exists(gethostbyaddr HAVE_GETHOSTBYADDR)
if (NOT HAVE_GETHOSTBYADDR)
message(STATUS "gethostbyaddr() not available, trying nsllib")
find_library(NSL_LIBRARY nsl)
if (NSL_LIBRARY)
message(STATUS "...nsllib found.")
list(APPEND EXTRA_LIBS ${NSL_LIBRARY})
endif()
endif()
check_function_exists(socket HAVE_SOCKET)
if (NOT HAVE_SOCKET)
message(STATUS "socket() not available, trying socketlib")
find_library(SOCKET_LIBRARY socket)
if (SOCKET_LIBRARY)
message(STATUS "...socketlib found")
list(APPEND EXTRA_LIBS ${SOCKET_LIBRARY})
endif()
endif()
# ========== time.h needs special treatment ==========
check_include_file("sys/time.h" HAVE_SYS_TIME_H)
check_include_file("sys/time.h" HAVE_TIME_H)
if (HAVE_SYS_TIME_H AND HAVE_TIME_H)
check_c_source_compiles("
#include <sys/types.h>
#include <sys/time.h>
#include <time.h>
int main() {
struct tm *tp;
; return 0; }
" TIME_WITH_SYS_TIME)
endif()
# ========== Determine return value of signal() ==========
check_c_source_compiles("
#include <signal.h>
int handler(int sig) { return 0; }
int main() {
signal(SIGINT, handler);
return 1;
}
" SIGNAL_RETURNS_INT FAIL_REGEX ".*incompatible pointer type.*")
check_c_source_compiles("
#include <signal.h>
void handler(int sig) { }
int main() {
signal(SIGINT, handler);
return 1;
}
" SIGNAL_RETURNS_VOID FAIL_REGEX ".*incompatible pointer type.*")
if (SIGNAL_RETURNS_INT)
message(STATUS "signal() returns int.")
set(RETSIGTYPE int)
elseif (SIGNAL_RETURNS_VOID)
message(STATUS "signal() returns void.")
set(RETSIGTYPE void)
else()
message(FATAL_ERROR "Could not determine return value from signal handler.")
endif()
# ========== Define general UNIX-system ==========
if (UNIX)
set(CIRCLE_UNIX 1)
endif()
set(PROTO_FUNCTIONS
accept
bind
gettimeofday
atoi
atol
bzero
chdir
close
fclose
fcntl
fflush
fprintf
fputc
fread
fscanf
fseek
fwrite
getpeername
getpid
getrlimit
getsockname
htonl
htons
inet_addr
inet_aton
inet_ntoa
listen
ntohl
perror
printf
qsort
read
remove
rewind
select
setitimer
setrlimit
setsockopt
snprintf
sprintf
sscanf
strcasecmp
strdup
strerror
stricmp
strlcpy
strncasecmp
strnicmp
system
time
unlink
vsnprintf
write
socket
)
configure_file(
${CMAKE_SOURCE_DIR}/src/conf.h.cmake.in
${CMAKE_BINARY_DIR}/tmp_conf.h
)
macro(check_function_prototype FUNCTION)
set(_code "
#define NO_LIBRARY_PROTOTYPES
#define __COMM_C__
#define __ACT_OTHER_C__
#include \"${CMAKE_BINARY_DIR}/tmp_conf.h\"
#include \"${CMAKE_SOURCE_DIR}/src/sysdep.h\"
#ifdef ${FUNCTION}
error - already defined!
#endif
void ${FUNCTION}(int a, char b, int c, char d, int e, char f, int g, char h);
int main() {
; return 0; }
")
string(TOUPPER "${FUNCTION}" _upper_name)
check_c_source_compiles("${_code}" NEED_${_upper_name}_PROTO FAIL_REGEX ".*incompatible pointer type.*")
if (NEED_${_upper_name}_PROTO)
message(STATUS "${FUNCTION}() has no prototype, NEED_${_upper_name}_PROTO set!")
else()
message(STATUS "${FUNCTION}() has a prototype, not setting NEED_${_upper_name}_PROTO")
endif()
endmacro()
foreach (FUNC ${PROTO_FUNCTIONS})
check_function_prototype(${FUNC})
endforeach()
# ========== Generate conf.h ==========
configure_file(
${CMAKE_SOURCE_DIR}/src/conf.h.cmake.in
${CMAKE_BINARY_DIR}/conf.h
)
# ========== Source-filer ==========
file(GLOB SRC_FILES src/*.c)
# ========== Bygg kjørbar ==========
add_executable(circle ${SRC_FILES})
target_link_libraries(circle ${EXTRA_LIBS})
add_subdirectory(src/util)
if (MEMORY_DEBUG)
message(STATUS "MEMORY_DEBUG is activated, setting up zmalloc")
target_compile_definitions(circle PRIVATE MEMORY_DEBUG)
endif()

View File

@@ -1,3 +1,5 @@
Files for tbaMUD.
Files for Grenzland-MUD
Files for grenzland-mud, forked from tbamud

View File

@@ -1 +0,0 @@
cmake -B . -S ..\src -G "Visual Studio 17 2022"

View File

@@ -1,7 +1,7 @@
Updated: Apr 2007
tbaMUD README
-------------
All requests for help or bugs should be reported to: builderacademy.net 9091.
All requests for help or bugs should be reported to: tbamud.com 9091.
Information about CircleMUD can be found at the CircleMUD Home Page and FTP:
http://www.circlemud.org

93
doc/README.CMAKE.md Normal file
View File

@@ -0,0 +1,93 @@
Updated 2025-04
## Building TbaMUD with the cmake tool
# Building with CMake
This document describes how to configure, build and install tbamud
from source code using the CMake build tool. To build with CMake, you of
course first have to install CMake. The minimum required version of CMake is
specified in the file `CMakeLists.txt` found in the top of the tbamud source
tree. Once the correct version of CMake is installed you can follow the
instructions below for the platform you are building on.
CMake builds can be configured either from the command line, or from one of
CMake's GUIs.
NOTE: The current CMakeLists.txt only supports linux.
# Configuring
A CMake configuration of tbamud is similar to the autotools build of curl.
It consists of the following steps after you have unpacked the source.
We recommend building with CMake on Windows.
## Using `cmake`
You can configure for in source tree builds or for a build tree
that is apart from the source tree.
- Build in a separate directory (parallel to the source tree in this
example). The build directory is created for you. This is recommended over
building in the source tree to separate source and build artifacts.
```shell
$ cmake -B build -S .
```
- Build in the source tree. Not recommended.
```shell
$ cmake -B .
```
The examples below will assume you have created a build folder.
The above commands will generate the build files. If you need to regenerate
the files, you can delete the cmake cache file, and rerun the above command:
```shell
$ rm build/CMakeCache.txt
```
Once the build files are generated, the build is run with cmake
```shell
$ cmake --build build
```
This will generate the object files in a subdirectory under the specified
build folder and link the executable. The resulting binaries will be in the
bin/ folder.
### Utilities
It is possible to build only single tools, none or all of them,
by specifying the target in the build command:
```shell
# only build the mud
$ cmake --build build --target circle
# only build tools
$ cmake --build build --target utils
# only build one tool
$ cmake --build build --target wld2html
```
### Debugging memory
In case you want to run the mud with memory debugging turned on, you
can set the MEMORY_DEBUG flag during configuration by specifying the
flag:
```shell
$ cmake -B build -S . -DMEMORY_DEBUG:int=1
$ cmake --build build
```
When the mud is shut down, the zmalloc code will identify any leaks in your code.
Note that memory debugging may consume quite a lot of memory and take some time
to be handled on shutdown.

View File

@@ -1,15 +1,21 @@
### Overview
This guide describes how to build TbaMUD in the Visual Studio through the new experimental CMake environment.
### Prerequisites
* [Visual Studio 2022+](https://visualstudio.microsoft.com/ru/vs/)
* [CMake 3.27+](https://cmake.org/)
### Build Steps
1. Goto the folder `src` and copy `conf.h.win` to `conf.h`.
2. Goto the folder `build` and execute `create_solution.bat`.
3. Open `build/circle.sln` in Visual Studio.
Updated: Apr 2025
Compiling CircleMUD under Microsoft Windows XP
using Microsoft Visual C++ 2022 (8.0)
### Overview
This guide describes how to build TbaMUD in the Visual Studio through the new experimental CMake environment.
### Prerequisites
* [Visual Studio 2022+](https://visualstudio.microsoft.com/ru/vs/)
* [CMake 3.27+](https://cmake.org/)
### Build Steps
1. Goto the folder `src` and copy `conf.h.win` to `conf.h`.
2. Run this command in the root folder:
cmake -B build -S . -G "Visual Studio 17 2022"
3. Open `build/circle.sln` in Visual Studio.
4. Compile and run.

View File

@@ -24,7 +24,7 @@ Contents
1.1 Overview
The act() function is used to process and send strings of text to characters
in a room. It can be used to send the same basic string to a number of
characters filling in certain segments designated by control characters
characters filling in certain segments designated by control characters
in different ways, dependant on what each character can see and who each
character is. Once the text string passed to the function has been parsed, it
is capitalized and a newline is added to its tail.
@@ -38,17 +38,17 @@ struct obj_data *obj, const void *vict_obj, int type)
These pieces are used as follows:
str: This is the basic string, a null terminated character array, including
control characters (see section 1.4 on Control Characters), to be sent to
control characters (see section 1.4 on Control Characters), to be sent to
characters designated by the targets.
hide_invisible: A TRUE or FALSE value indicating whether or not to hide the
entire output from any characters that cannot see the “performing character”.
entire output from any characters that cannot see the “performing character”.
ch: The “performing character”. This is the character that the output string
ch: The “performing character”. This is the character that the output string
is associated with. The character is used to determine the room for the output
of the action in question.
obj: An object (an actual item obj_data) used in the course of the action.
obj: An object (an actual item obj_data) used in the course of the action.
vict_obj: This can be either a character involved in the action, another
object, or even a predefined string of text.
@@ -73,7 +73,7 @@ The next parameter vict_objcan be a number of things ranging from a game object
null terminated character array (char *).
Do note, however, that obj and vict_obj are both ignored if there is no control
character reference (see section 1.4 Control Characters) to them and the type
character reference (see section 1.4 Control Characters) to them and the type
is set to TO_ROOM or TO_CHAR. In these cases, NULL should be supplied as the
input to the function.
@@ -96,7 +96,7 @@ TO_CHAR: Finally, this option sends the output to the ch.
TO_SLEEP: This is a special option that must be combined with one of the above
options. It tells act() that the output is to be sent even to characters that
are sleeping. It is combined with a bitwise or. i.e. TO_VICT | TO_SLEEP.
are sleeping. It is combined with a bitwise or. i.e. TO_VICT | TO_SLEEP.
When the string has been parsed, it is capitalized and a newline is added.
@@ -105,20 +105,20 @@ In a manner similar to the printf() family of functions, act() uses control
characters. However, instead of using the % symbol, act() uses the $ character
to indicate control characters.
$n Write name, short description, or “someone”, for ch, depending on whether
$n Write name, short description, or “someone”, for ch, depending on whether
ch is a PC, a NPC, or an invisible PC/NPC.
$N Like $n, except insert the text for vict_obj.*
$m “him,” “her,” or “it,” depending on the gender of ch.
$m “him,” “her,” or “it,” depending on the gender of ch.
$M Like $m, for vict_obj.*
$s “his,” “her,”or “it,” depending on the gender of ch.
$s “his,” “her,”or “it,” depending on the gender of ch.
$S Like $s, for vict_obj.*
$e “he,” “she,” “it,” depending on the gender of ch.
$e “he,” “she,” “it,” depending on the gender of ch.
$E Like $e, for vict_obj.*
$o Name or “something” for obj, depending on visibility.
$o Name or “something” for obj, depending on visibility.
$O Like $o, for vict_obj.*
$p Short description or “something” for obj.
$p Short description or “something” for obj.
$P Like $p for vict_obj.*
$a “an” or“a”, depending on the first character of objs name.
$a “an” or“a”, depending on the first character of objs name.
$A Like $a, for vict_obj.*
$T Prints the string pointed to by vict_obj.*
$F Processes the string pointed to by vict_obj with the fname() function prior
@@ -129,7 +129,7 @@ no action is taken.
$U Processes the buffer and uppercases the first letter of the following word
(the word immediately after to the control code). If there is no following
word, no action is taken.
$$ Print the character $.
$$ Print the character $.
NOTE*: vict_obj must be a pointer of type struct char_data *.

View File

@@ -9,8 +9,8 @@ to players in color in the tbaMUD game engine. Its intended audience is for
Coders of tbaMUD.
tbaMUD allows you to create colorful messages by using ANSI control sequences.
Each player may select what “level” of color he/she desires from the four
levels “off,” “brief,” “normal,” and “complete.” Each player can select his/her
Each player may select what “level” of color he/she desires from the four
levels “off,” “brief,” “normal,” and “complete.” Each player can select his/her
color level by using the TOGGLE COLOR command from within the MUD; you as the
programmer must decide which messages will be colored for each of the color
levels.
@@ -21,17 +21,17 @@ All files in which you wish to use color must have the line:
This should be put in after all other includes in the beginning of the file.
There are 8 colors available “normal,” red, green, yellow, blue, magenta,
There are 8 colors available “normal,” red, green, yellow, blue, magenta,
cyan and white. They are accessible by sending control sequences as part of
another string, for example:
sprintf(buf, "If youre %shappy%s and you know it clap "
sprintf(buf, "If youre %shappy%s and you know it clap "
"%d of your hands.\n\r", x, y, num_of_hands);
send_to_char(ch, buf);
In this example, x and y are the “on” and “off” sequences for the color you
want. There are 2 main series of color macros available for you to use (dont
actually use “x” and “y,” of course!): the K series and the CC series. The CC
In this example, x and y are the “on” and “off” sequences for the color you
want. There are 2 main series of color macros available for you to use (dont
actually use “x” and “y,” of course!): the K series and the CC series. The CC
(Conditional Color) series is recommended for most general use.
The name of the actual sequence starts with the name of its series, plus a
@@ -51,21 +51,21 @@ CCBLU() (arguments defined below).
The K series requires no arguments, and is simply a macro to the ANSI color
code. Therefore, if you use a K-series color code, the color will ALWAYS be
sent, even if the person youre sending it to has color off. This can very bad.
sent, even if the person youre sending it to has color off. This can very bad.
Some people who do not have ANSI-compatible terminals will see garbage
characters instead of colors. If the terminal correctly ignores ANSI color
codes, then nothing will show up on their screen at all. The K series is mainly
used to print colors to a string if the players color level will later be
used to print colors to a string if the players color level will later be
tested manually (for an example, see do_gen_com in act.comm.c).
The recommended series is the CC series (i.e. CCNRM(), CCRED(), etc.) The CC
series macros require two arguments a pointer to the character to whom the
series macros require two arguments a pointer to the character to whom the
string is being sent, and the minimum color level the player must be set to in
order to see the color. Color sent as 'brief' (formerly known as sparse it was
changed for consistency with the syslog command) (C_SPR) will be seen by people
with color set to sparse, normal, or complete; color sent as normal (C_NRM)
with color set to sparse, normal, or complete; color sent as normal (C_NRM)
will be seen only by people with color set to normal or complete; color sent as
complete (C_CMP) will be seen only by people with color set to complete.
complete (C_CMP) will be seen only by people with color set to complete.
To illustrate the above, an example is in order:
@@ -76,29 +76,29 @@ ACMD(do_showcolor)
{
char buf[300];
sprintf(buf, "Dont you just love %scolor%s, %scolor%s, " "%sCOLOR%s!\n\r",
sprintf(buf, "Dont you just love %scolor%s, %scolor%s, " "%sCOLOR%s!\n\r",
CCBLU(ch, C_CMP), CCNRM(ch, C_CMP), CCYEL(ch, C_NRM), CCNRM(ch, C_NRM),
CCRED(ch, C_SPR), CCNRM(ch, C_SPR));
send_to_char(ch, buf);
}
What does this do? For people with color set to Complete, it prints:
Dont you just love color, color, COLOR! (blue) (yellow) (red)
Dont you just love color, color, COLOR! (blue) (yellow) (red)
People who have color set to Normal will see:
Dont you just love color, color, COLOR! (yellow) (red)
Dont you just love color, color, COLOR! (yellow) (red)
People who have color set to Sparse will see:
Dont you just love color, color, COLOR! (red)
Dont you just love color, color, COLOR! (red)
People who have color set to Off will see:
Dont you just love color, color, COLOR! (no color, as youd expect)
Dont you just love color, color, COLOR! (no color, as youd expect)
There are several common pitfalls with using the CC series of color macros:
Do not confuse CCNRM with C_NRM. CCNRM() is a macro to turn the color back to
normal; C_NRMis a color level of “normal.” Always make sure that every pair of
“on” and “off” codes are at the same color level. For example:
normal; C_NRMis a color level of “normal.” Always make sure that every pair of
“on” and “off” codes are at the same color level. For example:
WRONG: sprintf(buf, "%sCOLOR%s\n\r", CCBLU(ch, C_NRM), CCNRM(ch, C_CMP));
@@ -110,14 +110,14 @@ WRONG: sprintf(buf, "%sCOLOR%s\n\r", CCBLU(ch, C_CMP), CCNRM(ch, C_NRM));
The above statement is also wrong, although not as bad. In this case, someone
with color set to Normal will (correctly) not get the CCBLU code, but will then
unnecessarily get the CCNRM code. Never send a color code if you dont have to.
unnecessarily get the CCNRM code. Never send a color code if you dont have to.
The codes are several bytes long, and cause a noticeable pause at 2400 baud.
This should go without saying, but dont ever send color at the C_OFF level.
This should go without saying, but dont ever send color at the C_OFF level.
Special precautions must be taken when sending a colored string to a large
group of people. You cant use the color level of “ch” (the person sending the
string) each person receiving the string must get a string appropriately
group of people. You cant use the color level of “ch” (the person sending the
string) each person receiving the string must get a string appropriately
colored for his/her level. In such cases, it is usually best to set up two
strings (one colored and one not), and test each players color level
strings (one colored and one not), and test each players color level
individually (see do_gen_comin act.comm.c for an example).

View File

@@ -4,14 +4,14 @@ Builder Academy at telnet://tbamud.com:9091 or email rumble@tbamud.com -- Rumble
The Art of Debugging
Originally by Michael Chastain and Sammy
The following documentation is excerpted from Merc 2.0s hacker.txt file. It
The following documentation is excerpted from Merc 2.0s hacker.txt file. It
was written by Furey of MERC Industries and is included here with his
permission. We have packaged it with tbaMUD (changed in a couple of places,
such as specific filenames) because it offers good advice and insight into the
art and science of software engineering. More information about tbaMUD,
can be found at the tbaMUD home page http://tbamud.com.
1 “Im running a Mud so I can learn C programming!”
1 “Im running a Mud so I can learn C programming!”
Yeah, right. The purpose of this document is to record some of our knowledge,
experience and philosophy. No matter what your level, we hope that this
@@ -31,11 +31,11 @@ Play with it some more.
Read documentation again.
Get the idea?
The idea is that your mind can accept only so much “new data” in a single
session. Playing with something doesnt introduce very much new data, but it
does transform data in your head from the “new” category to the “familiar”
category. Reading documentation doesnt make anything “familiar,” but it
refills your “new” hopper.
The idea is that your mind can accept only so much “new data” in a single
session. Playing with something doesnt introduce very much new data, but it
does transform data in your head from the “new” category to the “familiar”
category. Reading documentation doesnt make anything “familiar,” but it
refills your “new” hopper.
Most people, if they even read documentation in the first place, never return
to it. They come to a certain minimum level of proficiency and then never
@@ -47,17 +47,17 @@ through the two-step learning cycle many times to master it.
man gives you online manual pages.
grep stands for “global regular expression print;” searches for strings in text
grep stands for “global regular expression print;” searches for strings in text
files.
vi, emacs, jove use whatever editor floats your boat, but learn the hell out
of it; you should know every command in your editor.
ctags mags “tags” for your editor which allows you to go to functions by name
ctags mags “tags” for your editor which allows you to go to functions by name
in any source file.
>, >>, <, | input and output redirection at the command line; get someone to
show you, or dig it out of “man csh”
show you, or dig it out of “man csh”
These are the basic day-in day-out development tools. Developing without
knowing how to use all of these well is like driving a car without knowing
@@ -70,21 +70,21 @@ the hypothesis, run the program and provide it experimental input, observe its
behavior, and confirm or refute the hypothesis.
A good hypothesis is one which makes surprising predictions which then come
true; predictions that other hypotheses dont make.
true; predictions that other hypotheses dont make.
The first step in debugging is not to write bugs in the first place. This
sounds obvious, but sadly, is all too often ignored.
If you build a program, and you get any errors or any warnings, you should fix
them before continuing. C was designed so that many buggy ways of writing code
are legal, but will draw warnings from a suitably smart compiler (such as “gcc”
are legal, but will draw warnings from a suitably smart compiler (such as “gcc”
with the -Wall flag enabled). It takes only minutes to check your warnings and
to fix the code that generates them, but it takes hours to find bugs otherwise.
“Desk checking” (proof reading) is almost a lost art these days. Too bad. You
“Desk checking” (proof reading) is almost a lost art these days. Too bad. You
should desk check your code before even compiling it, and desk-check it again
periodically to keep it fresh in mind and find new errors. If you have someone
in your group whose only job it is to desk-check other peoples code, that
in your group whose only job it is to desk-check other peoples code, that
person will find and fix more bugs than everyone else combined.
One can desk-check several hundred lines of code per hour. A top-flight
@@ -95,20 +95,20 @@ fixing technique. Compare that to all the hours you spend screwing around with
broken programs trying to find one bug at a time.
The next technique beyond desk-checking is the time-honored technique of
inserting “print” statements into the code, and then watching the logged
inserting “print” statements into the code, and then watching the logged
values. Within tbaMUD code, you can call printf(), fprintf(), or log()to dump
interesting values at interesting times. Where and when to dump these values
is an art, which you will learn only with practice.
If you dont already know how to redirect output in your operating system, now
is the time to learn. On Unix, type the command “man csh”, and read the part
about the “>” operator. You should also learn the difference between “standard
output” (for example, output from “printf”) and “standard error” (for example,
output from “fprintf(stderr, ...)”).
If you dont already know how to redirect output in your operating system, now
is the time to learn. On Unix, type the command “man csh”, and read the part
about the “>” operator. You should also learn the difference between “standard
output” (for example, output from “printf”) and “standard error” (for example,
output from “fprintf(stderr, ...)”).
Ultimately, you cannot fix a program unless you understand how it is operating
in the first place. Powerful debugging tools will help you collect data, but
they cant interpret it, and they cant fix the underlying problems. Only you
they cant interpret it, and they cant fix the underlying problems. Only you
can do that.
When you find a bug... your first impulse will be to change the code, kill the
@@ -117,9 +117,9 @@ observe is often just the symptom of a deeper bug. You should keep pursuing the
bug, all the way down. You should grok the bug and cherish it in fullness
before causing its discorporation.
Also, when finding a bug, ask yourself two questions: “What design and
programming habits led to the introduction of the bug in the first place?” And:
“What habits would systematically prevent the introduction of bugs like this?”
Also, when finding a bug, ask yourself two questions: “What design and
programming habits led to the introduction of the bug in the first place?” And:
“What habits would systematically prevent the introduction of bugs like this?”
5 Debugging: Tools
@@ -127,20 +127,20 @@ When a Unix process accesses an invalid memory location, or (more rarely)
executes an illegal instruction, or (even more rarely) something else goes
wrong, the Unix operating system takes control. The process is incapable of
further execution and must be killed. Before killing the process, however, the
operating system does something for you: it opens a file named “core” and
operating system does something for you: it opens a file named “core” and
writes the entire data space of the process into it.
Thus, “dumping core” is not a cause of problems, or even an effect of problems.
Its something the operating system does to help you find fatal problems which
Thus, “dumping core” is not a cause of problems, or even an effect of problems.
Its something the operating system does to help you find fatal problems which
have rendered your process unable to continue.
One reads a “core” file with a debugger. The two most popular debuggers on Unix
One reads a “core” file with a debugger. The two most popular debuggers on Unix
are adb and gdb, although occasionally one finds dbx. Typically one starts a
debugger like this: “gdb bin/circle” or “gdb bin/circle lib/core”.
debugger like this: “gdb bin/circle” or “gdb bin/circle lib/core”.
The first thing, and often the only thing, you need to do inside the debugger
is take a stack trace. In adb, the command for this is “$c”. In gdb, the
command is “backtrace”. In dbx, the command is “where”. The stack trace will
is take a stack trace. In adb, the command for this is “$c”. In gdb, the
command is “backtrace”. In dbx, the command is “where”. The stack trace will
tell you what function your program was in when it crashed, and what functions
were calling it. The debugger will also list the arguments to these functions.
Interpreting these arguments, and using more advanced debugger features,
@@ -343,12 +343,12 @@ new tools.
7 Profiling
Another useful technique is “profiling,” to find out where your program is
Another useful technique is “profiling,” to find out where your program is
spending most of its time. This can help you to make a program more efficient.
Here is how to profile a program:
1. Remove all the .o files and the “circle” executable:
1. Remove all the .o files and the “circle” executable:
make clean
2. Edit your Makefile, and change the PROFILE=line:
@@ -359,25 +359,25 @@ make
4. Run circle as usual. Shutdown the game with the shutdown command when you
have run long enough to get a good profiling base under normal usage
conditions. If you crash the game, or kill the process externally, you wont
conditions. If you crash the game, or kill the process externally, you wont
get profiling information.
5. Run the profcommand:
prof bin/circle > prof.out
6. Read prof.out. Run “man prof” to understand the format of the output. For
advanced profiling, you can use “PROFILE = -pg” in step 2, and use the “gprof”
command in step 5. The “gprof” form of profiling gives you a report which lists
6. Read prof.out. Run “man prof” to understand the format of the output. For
advanced profiling, you can use “PROFILE = -pg” in step 2, and use the “gprof”
command in step 5. The “gprof” form of profiling gives you a report which lists
exactly how many times any function calls any other function. This information
is valuable for debugging as well as performance analysis.
Availability of “prof” and “gprof” varies from system to system. Almost every
Unix system has “prof”. Only some systems have “gprof”.
Availability of “prof” and “gprof” varies from system to system. Almost every
Unix system has “prof”. Only some systems have “gprof”.
7 Books for Serious Programmers
Out of all the thousands of books out there, three stand out:
Kernighan and Plaugher, “The Elements of Programming Style”
Kernighan and Ritchie, “The C Programming Language”
Brooks, “The Mythical Man Month”
Kernighan and Plaugher, “The Elements of Programming Style”
Kernighan and Ritchie, “The C Programming Language”
Brooks, “The Mythical Man Month”

View File

@@ -3,7 +3,7 @@ Builder Academy at telnet://tbamud.com:9091 or email rumble@tbamud.com -- Rumble
tbaMUD File Manifest
The main tbaMUD/ directory has the following subdirectories and files:
The main tbaMUD/ directory has the following subdirectories and files:
autorun - Shell script to run the MUD (./autorun &).
FAQ - Frequently Aske Questions with answers.
@@ -16,7 +16,7 @@ lib/ - MUD data.
log/ - System logs.
src/ - Source code.
The bin/directory contains only binaries: circle (the main MUD) and its
The bin/directory contains only binaries: circle (the main MUD) and its
utilities, which are described in utils.txt.
The doc/ directory has its own README file, describing the contents of each
@@ -51,12 +51,12 @@ time - Where the MUD time is saved.
The lib/misc/ directory contains the following files:
bugs - Bugs reported by players with the bug command.
ideas - Ideas from players from idea command.
bugs - Bugs reported by players with the bug command.
ideas - Ideas from players from idea command.
messages - Spell and skill damage messages.
socials - Text file with text of the socials.
socials.new - New format of socials you can edit via AEDIT.
typos - Typos reported by players with the typo command.
typos - Typos reported by players with the typo command.
xnames - Text file of invalid names.
The lib/plrobjs/ contains the following files and directories:
@@ -80,18 +80,18 @@ zzz/
The lib/text/ directory contains the following files:
background - Background story (for option 3 from main menu).
credits - Text for credits command.
credits - Text for credits command.
greetings - Greeting message.
handbook - Text for Immortal Handbook (handbook command).
immlist - Text for immlist command.
handbook - Text for Immortal Handbook (handbook command).
immlist - Text for immlist command.
imotd - Immortal MOTD --seen by immortals on login.
info - Text for info command.
info - Text for info command.
motd - MOTD --seen by mortals on login.
news - Text for news command.
policies - Text for policy command.
wizlist - Text for wizlist command.
/help/screen - Text for help command as a mortal with no arguments.
/help/iscreen - Text for help command an an immortal with no arguments.
news - Text for news command.
policies - Text for policy command.
wizlist - Text for wizlist command.
/help/screen - Text for help command as a mortal with no arguments.
/help/iscreen - Text for help command an an immortal with no arguments.
The lib/world/directory contains the following subdirectories:
@@ -103,8 +103,8 @@ wld - Contains *.wld files (world files)
zon - Contains *.zon files (zone files)
Each of the 6 subdirectories in the lib/world/ directory also contains two
additional files one called index, which specifies which files in that
directory should be loaded when the MUD boots, and index.mini, which
additional files one called index, which specifies which files in that
directory should be loaded when the MUD boots, and index.mini, which
specifies which files should be loaded if the MUD is booted with the -m
(mini-mud) option.
@@ -128,6 +128,6 @@ trigger - Trigedit log messages.
usage - Mud system usage (player load & memory usage info).
The src/ directory contains all of the C and header files for the MUD, along
with a Makefile. The src/util/ directory contains source for tbaMUDs utility
with a Makefile. The src/util/ directory contains source for tbaMUDs utility
programs. See admin.txt for more information on how to compile the MUD. See
utils.txt for more information on how to use tbaMUDs utilities.
utils.txt for more information on how to use tbaMUDs utilities.

View File

@@ -9,16 +9,16 @@ every platform that exists. This document is for experienced programmers
trying to make tbaMUD work on their platform.
tbaMUD should work on most UNIX platforms without any modifications; simply run
the “configure” script and it should automatically detect what type of system
the “configure” script and it should automatically detect what type of system
you have and anything that may be strange about it. These findings are all
stored in a header file called conf.h which is created in the src directory
from a template called conf.h.in. A Makefile is also created from the template
Makefile.in.
Non-UNIX platforms are a problem. Some cant run tbaMUD at all. However, any
Non-UNIX platforms are a problem. Some cant run tbaMUD at all. However, any
multitasking OS that has an ANSI C compiler, and supports non-blocking I/O and
socket-based TCP/IP networking, should theoretically be able to run tbaMUD; for
example, OS/2, AmigaOS, Mac OS (Classic versions; Mac OS X supports tbaMUDs
example, OS/2, AmigaOS, Mac OS (Classic versions; Mac OS X supports tbaMUDs
configure script from the command line), and all versions of Windows.
The port can be very easy or very difficult, depending mainly on whether or nor
@@ -26,7 +26,7 @@ your OS supports the Berkeley socket API.
The general steps for porting tbaMUD to a non-UNIX platform are listed below. A
number of tips for porting can be found after the porting steps. Note that we
have already ported tba to Windows, so if youre confused as to how to perform
have already ported tba to Windows, so if youre confused as to how to perform
some of these steps, you can look at what we have done as an example (see the
files README.CYGWIN).
@@ -36,11 +36,11 @@ trying to port the code.
Porting the Code
Step 1. Create a “conf.h” file for your system. Copy the template “conf.h.in”
to “conf.h”, and then define or undefine each item as directed by the comments
Step 1. Create a “conf.h” file for your system. Copy the template “conf.h.in”
to “conf.h”, and then define or undefine each item as directed by the comments
and based on the characteristics of your system. To write the conf.h file,
youll need to know which header files are included with your system, the
return type of signals, whether or not your compiler supports the const
youll need to know which header files are included with your system, the
return type of signals, whether or not your compiler supports the const
keyword, and whether or not you have various functions such as crypt()and
random(). Also, you can ignore the HAVE_LIBxxx and HAVE_xxx_PROTO constants at
the end of conf.h.in; they are not used in the code (they are part of UNIX
@@ -58,12 +58,12 @@ be in the source file comm.c.
Step 4. Test your changes! Make sure that multiple people can log in
simultaneously and that they can all type commands at the same time. No player
should ever have a “frozen” screen just because another is waiting at a prompt.
should ever have a “frozen” screen just because another is waiting at a prompt.
Leave the MUD up for at least 24 hours, preferably with people playing it, to
make sure that your changes are stable. Make sure that automatic events such as
zone resets, point regeneration, and corpse decomposition are being timed
correctly (a tick should be about 75 seconds). Try resetting all the zones
repeatedly by typing “zr *” many times. Play the MUD and make sure that the
repeatedly by typing “zr *” many times. Play the MUD and make sure that the
basic commands (killing mobs as a mortal, casting spells, etc.) work correctly.
Step 5. If you are satisfied that your changes work correctly, you are
@@ -71,20 +71,20 @@ encouraged to submit them to be included as part of the tbaMUD distribution so
that future releases of tbaMUD will support your platform. This prevents you
from re-porting the code every time a new version is released and allows other
people who use your platform to enjoy tbaMUD as well. To submit your changes
you must make a patch file using the GNU diff program. diff will create a
patch file which can be later used with the patch utility to incorporate
you must make a patch file using the GNU diff program. diff will create a
patch file which can be later used with the patch utility to incorporate
your changes into the stock tbaMUD distribution. For example, if you have a
copy of tbaMUD in the “stock-tba” directory, and your changes are in “my-tba”,
copy of tbaMUD in the “stock-tba” directory, and your changes are in “my-tba”,
you can create a patch file like this:
diff -u --new-file --recursive stock-tba/src my-tba/src > patch
This will create a file called patch with your patches. You should then try
to use the patch program (the inverse of diff) on a copy of tbaMUD to make
This will create a file called patch with your patches. You should then try
to use the patch program (the inverse of diff) on a copy of tbaMUD to make
sure that tbaMUD is correctly changed to incorporate your patches. This step is
very important: if you dont create these patches correctly, your work will be
very important: if you dont create these patches correctly, your work will be
useless because no one will be able to figure out what you did! Make sure to
read the documentation to diff and patch if you dont understand how to use
read the documentation to diff and patch if you dont understand how to use
them. If your patches work, CELEBRATE!!
Step 6. Write a README file for your operating system that describes everything
@@ -107,7 +107,7 @@ Each system to which tba is already ported has a CIRCLE_xx constant associated
with it: CIRCLE_UNIX for plain vanilla UNIX tbaMUD, CIRCLE_WINDOWS for MS
Windows, CIRCLE_OS2 for IBM OS/2, and CIRCLE_AMIGA for the Amiga. You must use
a similar constant for your system. At the top of your conf.h, make sure to
comment out “#define CIRCLE_UNIX” and add “#define CIRCLE_YOUR_SYSTEM”.
comment out “#define CIRCLE_UNIX” and add “#define CIRCLE_YOUR_SYSTEM”.
3.2 ANSI C and GCC
As long as your system has an ANSI C compiler, all of the code (except for
@@ -122,22 +122,22 @@ you use gcc.
Make absolutely sure to use non-blocking I/O; i.e. make sure to enable the
option so that the read() system call will immediately return with an error if
there is no data available. If you do not use non-blocking I/O, read() will
“block,” meaning it will wait infinitely for one particular player to type
“block,” meaning it will wait infinitely for one particular player to type
something even if other players are trying to enter commands. If your system
does not implement non-blocking I/O correctly, try using the
POSIX_NONBLOCK_BROKEN constant in sysdep.h.
3.4 Timing
tbaMUD needs a fairly precise (on the order of 5 or 10 ms) timer in order to
correctly schedule events such as zone resets, point regeneration (“ticks”),
correctly schedule events such as zone resets, point regeneration (“ticks”),
corpse decomposition, and other automatic tasks. If your system supports the
select() system call with sufficient precision, the default timing code should
work correctly. If not, youll have to find out which system calls your system
work correctly. If not, youll have to find out which system calls your system
supports for determining how much time has passed and replace the select()
timing method.
3.5 Signals and Signal Handlers
A note about signals: Most systems dont support the concept of signals in the
A note about signals: Most systems dont support the concept of signals in the
same way that UNIX does. Since signals are not a critical part of how tbaMUD
works anyway (they are only used for updating the wizlist and some other
trivial things), all signal handling is turned off by default when compiling
@@ -147,7 +147,7 @@ conf.h file and all signal code will be ignored automatically.
4 Final Note
IMPORTANT: Remember to keep any changes you make surrounded by #ifdef
statements (i.e. “#ifdef CIRCLE_WINDOWS ... #endif”). If you make absolutely
statements (i.e. “#ifdef CIRCLE_WINDOWS ... #endif”). If you make absolutely
sure to mark all of your changes with #ifdef statements, then your patches
(once you get them to work) will be suitable for incorporation into the
tbaMUD distribution, meaning that tbaMUD will officially support your platform.

View File

@@ -143,7 +143,7 @@ communication channels
totally ignores all commands from that player until they are thawed.
--Even handier DELETE flag allows you to delete players on the fly.
--"set" command (mentioned above) allows you to freeze/unfreeze/
delete/siteok/un-siteok players --even if they arent logged in!
delete/siteok/un-siteok players --even if they arent logged in!
--Bad password attempts are written to the system log and saved;
if someone tries to hack your account, you see "4 LOGIN FAILURES
SINCE LAST SUCCESSFUL LOGIN" next time you log on.

View File

@@ -110,12 +110,12 @@ is being specified. The command sort name is the shortest part of the command a
player must type for it to match. The hide-flag can be either 0 or 1; if 1, the
social is hidden from OTHERS if they cannot see the character performing the
social. The action is not hidden from the VICTIM, even if s/he cannot see the
character performing the social, although in such cases the characters name
will, of course, be replaced with “someone”. The min positions should be set to
character performing the social, although in such cases the characters name
will, of course, be replaced with “someone”. The min positions should be set to
dictate the minimum position a player must be in to target the victim and
perform the social. Min level allows you to further customize who can use what
socials.Where it makes sense to do so, text fields may be left empty. If
editing manually you should by put a # in the first column on the line. Aedit
editing manually you should by put a # in the first column on the line. Aedit
does this automatically.
Examples:

View File

@@ -34,7 +34,7 @@ older CircleMUD data files to the versions used in CircleMUD v3, while others
are used to convert currently existing files into different formats.
Overall, these utilities have been created in an attempt to make the tbaMUD
administrators life a bit easier, and to give the administrator some ideas of
administrators life a bit easier, and to give the administrator some ideas of
further and more grandiose utilities to create. Some are no longer applicable
but are retained as examples.
@@ -61,7 +61,7 @@ the second, and so forth.
The split utility is designed to split large world files into smaller, zone
sized files that are easier to manage and maintain. The utility reads its input
from the standard input and writes the output to files with names specified
within the larger world file. This is done by inserting =filename into the
within the larger world file. This is done by inserting =filename into the
world file at the appropriate points, where filename is the name of the file
for the following section.
@@ -141,8 +141,8 @@ The command line syntax for autowiz is as follows:
autowiz <wizlev> <wizlistfile> <immlev> <immlistfile> [pid to signal]
where <wizlev> is equal to whatever LVL_GOD is set to in your tbaMUD server,
<wizlistfile> is the filename for the file containing the games Wizlist.
<immlev> should be set to your games LVL_IMMORT, while <immlistfile>
<wizlistfile> is the filename for the file containing the games Wizlist.
<immlev> should be set to your games LVL_IMMORT, while <immlistfile>
is the name of the Immlist file.
This utility must be recompiled if you make any changes to the player file structure.

BIN
lib/etc/board.grenzland Normal file

Binary file not shown.

View File

@@ -1,8 +1,10 @@
(lib/text/background)
There once was a guy who played MUDs
But the MUDs that he played were all duds
"I'll write one," said he.
And he brushed off his C.
And soon played his game with his buds.
The mists part and you find yourself in a
world unlike the one you have just left.
Reality twisted and turned, and the land
has found itself in a new configuration.
Enter the borderland of reality and find
your own way.
In the Grenzland.

View File

@@ -1,7 +1,13 @@
T B A M U D
2 0 2 5
G R E N Z L A N D M U D
2 0 2 6
Based on tbaMUD, by The Builder Academy
Based on CircleMUD by Jeremy Elson and DikuMUD by Hans-Henrik Staerfeldt,
Katja Nyboe, Tom Madsen, Michael Seifert, and Sebastian Hammer
By what name do you wish to be known?
Oh hero, by what name shall you wish to be known?

View File

@@ -865,7 +865,7 @@ AUTOQUESTS QUESTS QUESTMASTERS QUEST-MOBS QUESTMOBS
An autoquest is a quest that can be automatically started and completed
without the intervention of an immortal. Simply visit a questmaster and join
an available quest, and get rewarded on its completion. Keep an eye out for
an available quest, and get rewarded on it's completion. Keep an eye out for
autoquests scattered throughout the World.
See Also: QUEST-FLAG, QUESTPOINTS
@@ -1584,7 +1584,6 @@ qedit (quest editor)
questpoints
buildwalk
dig
tell m-w (an in game dictionary lookup)
gemote
history
file
@@ -2444,25 +2443,6 @@ Example:
> diagnose doctor
See also: CONSIDER, HIT, KILL
#0
DICTIONARY DICTIONARIES THESAURUS M-W.COM DEFINITION MERRIAM-WEBSTER M-W-DEFINITION WEBSTER MW TELL-M-W BREATHER SPELLING WORDS
Usage: tell m-w <word>
We have a direct link to Merriam Webster. To use the dictionary just
tell m-w <word>
>tell m-w breather
You get this feedback from Merriam-Webster:
That means:
1 : one that breathes
2 : a break in activity for rest or relief
3 : a small vent in an otherwise airtight enclosure
A few obscure definitions are not available through m-w since they are in the
unabridged version that requires membership. They also offer a thesaurus at:
@Chttp://m-w.com/@n
#31
DIG UNDIG RDIG RELINK RLINKS
@@ -3173,7 +3153,7 @@ game.
Invest in a thesaurus. Makes a world of difference, and if that doesn't
help, just make up your own words for things you create (just be sure to
describe them very well. Use @Chttp://m-w.com/@n for an online thesaurus
and dictionary. You can @Rtell m-w <word>@n to lookup a definition.
and dictionary.
4. Where can I learn Trigedit?
Here! Welcor is now the developer of trigedit. We have extensive help files,
@@ -3564,8 +3544,8 @@ GRAMMAR GRAMMER TIPS
words can be particularly tricky and elude electronic spell checkers. A good
dictionary, however, will help you spell archaic words. Whenever I am building
I use our Merriam Webster dictionary link on TBA to check any tough words for
proper spelling. Test it out @RTELL M-W DEFINITION@n. We hope to add a thesaurus
soon! Goto @Chttp://m-w.com/@n until then.
proper spelling. We hope to add a thesaurus soon! Goto @Chttp://m-w.com/@n
until then.
I have found that a good principle to make is to avoid the use of all
contractions. For example, if you mean to say "it is", do not use "it's", spell
it out. This will help differentiate between "its" (which means 'belonging to
@@ -7192,7 +7172,7 @@ prefer to add the quest in the zone where quest completion takes place.
Quests use vnums in exactly the same way as mobiles, object and rooms. Each
zone will normally have 100 vnums available (#00 to #99, where # is the zone
number). Usually, when creating the first quest in a zone, #00 is used,
then #01, etc
then #01, etc.
When you qedit <vnum> to create a new quest (or edit an existing one), you will
see the menu in @RHELP QEDIT-MENU@n
@@ -7203,12 +7183,12 @@ QEDIT-ACCEPT
This is the text that is sent to the player when they start the quest. It
should describe in detail exactly what is required to complete the quest. The
text is simply output on the players screen, so be creative here. An example
text is simply output on the player's screen, so be creative here. An example
of an accept message text could be something like:
The questmaster rummages in a large pile of papers.
The questmaster says Ah, here it is
The questmaster says Bob, the local butcher has offered this quest
The questmaster says "Ah, here it is"
The questmaster says "Bob, the local butcher has offered this quest"
The questmaster shows you a hastily scrawled note, that reads:
I am willing to offer any plucky adventurer 10 quest points if they bring me a
@@ -7218,7 +7198,7 @@ order to fill. I need these within 24 hours
Thanks, Bob the Butcher, Midgaard
The questmaster sighs.
The questmaster says A tricky quest, but itll cost you 5qp to back out now
The questmaster says "A tricky quest, but it'll cost you 5qp to back out now"
#31
QEDIT-COMPLETED QEDIT-ABANDONED
@@ -7232,7 +7212,7 @@ all timed quests.
QEDIT-COMPLETION
Just like the accept message, this is simply text that is output on the
players screen when they successfully complete the quest. Prizes (quest
player's screen when they successfully complete the quest. Prizes (quest
points, gold coins, experience points or an object) are automatically
announced after this text is shown, so this text does not need to have that
information in it.
@@ -7258,7 +7238,7 @@ Quest flags: @cNOBITS@n
Enter quest flags, 0 to quit :
Currently, only one flag is available, the REPEATABLE flag. When you have
finished turning this on or off, select 0 (zero) to return to the main menu.
finished turning this on or off, select "0" (zero) to return to the main menu.
#31
QEDIT-LEVELS
@@ -7312,12 +7292,12 @@ QEDIT-NEXT
This is the quest vnum of next quest in a chain. When a player completes
the current quest, the next quest will automatically be joined. This allows
for long quests with a number of steps.
for long quests with a number of "steps".
#31
QEDIT-PREREQUISITE
This is the object vnum for a prerequisite object. The prerequisite object
should be in the players inventory in order for them to be able to join the
should be in the player's inventory in order for them to be able to join the
quest. It is not taken from the player when the quest starts.
#31
QEDIT-PREVIOUS
@@ -7328,15 +7308,15 @@ completed by the player in order to join this quest.
QEDIT-QUANTITY
This is the number of times the player needs to repeat the quest. For
example, it could be the number of items the player needs to find in a object
quest of the number of mobs the player should kill in a kill mob quest. This
should be used with caution, however. In an object quest picking up the same
example, it could be the number of items the player needs to find in a "object"
quest of the number of mobs the player should kill in a "kill mob" quest. This
should be used with caution, however. In an object quest picking up the same
object 20 times will also complete the quest.
#31
QEDIT-QUIT QEDIT-MESSAGE
The quit message is sent to the player when they type quest leave. Players
can lose quest points for abandoning a quest (see Abandoned on the next
can lose quest points for abandoning a quest (see "Abandoned" on the next
page), so if they lose quest points, this text really should inform them of
that.
#31
@@ -7365,14 +7345,14 @@ Room, Clear Room - Room VNUM
#31
QEDIT-TIME
This is the number of ticks or game hours that the player has to complete
This is the number of 'ticks' or game hours that the player has to complete
the quest. If this is set, then the builder should really try to do the quest
themselves, and time how long it takes (typing time before and after the
attempt), and then giving at least one extra tick for players to complete it.
themselves, and time how long it takes (typing 'time' before and after the
attempt), and then giving at least one extra 'tick' for players to complete it.
#31
QEDIT-TYPE
There are a few different quest types. When you select option 7 from the
There are a few different quest types. When you select option '7' from the
main menu, you will be shown a list to choose from:
0) Object - Player needs to find a particular object.
@@ -7447,7 +7427,7 @@ Usage: quest [list | join <#> | progress | leave | history]
quest - Show usage information for the quest command.
quest list - Used at the questmaster to see which quests are available.
quest join # - Used to the questmaster to join the quest listed as number nn on quest list.
quest join # - Used to the questmaster to join the quest listed as number 'nn' on quest list.
quest progress - Shows the player which quest they are doing, and their quest progress.
quest leave - Allows the player to abandon the current quest, taking the quest point penalty.
quest history - Shows all previously completed non-repeatable quests.
@@ -9352,7 +9332,7 @@ and simply bearing artistic merit. Second, by ensuring that they are absolutely
necessary to achieve the goals of the game! If your game is made for experience
and equipment gathering, and failure to read descriptions directly impedes this
goal, then players will learn to read everything. If your game is made for
exploring or role-play, most of your players probably already read them Â-
exploring or role-play, most of your players probably already read them -
because knowing their environment is a basic requirement of play. In any case,
builders exist to ensure that the goals of play are supported by game
descriptions.
@@ -9364,7 +9344,7 @@ meaning behind descriptions, areas to find, special items, unique nooks and
crannies to spend time socializing, and hints that point to these things
elsewhere outside of your own zone is an excellent idea. In fact, if you
don't wish to be building descriptions no one will read, you should employ
special secrets Â- most especially on games where knowing one's environment
special secrets - most especially on games where knowing one's environment
does deeply affect a character's development. No matter what kind of zone you
are building, keep it interesting throughout!
@@ -9387,7 +9367,7 @@ road.
shouldn't be the sole builder of your zone. Instead, seek the assistance of
someone who adds creative merit to your descriptions. You can do practically
everything from plot to secrets to minutiae, even write the zone in full and
just ask someone you know who writes well to Â'say it better' and rewrite
just ask someone you know who writes well to 'say it better' and rewrite
what you intended to have there all along. Novels have editors, and so
should any zone.
@@ -9659,19 +9639,19 @@ have a point and here it is: *drum roll please*
Building is hard work! It is a form of expression and creativity. What kind
of areas you build generally reflects on what kind of person you are. You
do not have to be a good speller but you do need a good dictionary/thesaurus.
@RHELP M-W@n. Sometimes building can seem like a thankless job and sometimes
building can be a reward in itself. Building a few areas, even a few good
ones, does not make you an Immortal or an Imp. It takes more than building to
be one of those and it entails even more work. Respect others and they will
respect you. The more detailed an area the better it is. Always choose Quality
over Quantity. Put some pride in your areas, develop a style of your own. Try
new things keep it interesting, if you become bored with building an area take
a break and play a mortal or do something else, don't take advantage of builder
privileges. Treat others as you wish to be treated. One more warning I would
give to builders before they take things personally or get insulted. Everyone
has their own ideas on how to run a MUD, what it comes down to is whoever owns
the MUD makes the final decision, so it does not matter how good you think your
idea is, it may never be used if the owner does not like it. Plain and simple.
Sometimes building can seem like a thankless job and sometimes building can be
a reward in itself. Building a few areas, even a few good ones, does not make
you an Immortal or an Imp. It takes more than building to be one of those and
it entails even more work. Respect others and they will respect you. The more
detailed an area the better it is. Always choose Quality over Quantity. Put
some pride in your areas, develop a style of your own. Try new things keep it
interesting, if you become bored with building an area take a break and play a
mortal or do something else, don't take advantage of builder privileges.
Treat others as you wish to be treated. One more warning I would give to
builders before they take things personally or get insulted. Everyone has their
own ideas on how to run a MUD, what it comes down to is whoever owns the MUD
makes the final decision, so it does not matter how good you think your idea
is, it may never be used if the owner does not like it. Plain and simple.
You see this on every MUD. So please keep the ideas coming, but do not try to
force them onto anyone. Be constructive, not critical about peoples ideas.
Everyone is allowed their opinions.

View File

@@ -1,8 +1,12 @@
(lib/text/policies)
This file should list, in no uncertain terms, the policies you must abide
by on this MUD.
Right now we are all adults and should be able to interact with
each other without any larger issues.
But the Grenzland maxim still is in force:
We are here to play, don't piss into anyone else's beer.
Bug the higher-ups to make some policies and write them in this file, lest
a political disaster ensue...
No harassing, no doxxing, no sexism, racism, or other unacceptable
isms towards your fellow players.
We definitely should add something more worked out in here.

View File

@@ -10,4 +10,5 @@
Gods
~~~~
kyonshi

25
lib/world/mob/491.mob Normal file
View File

@@ -0,0 +1,25 @@
#49100
waiter~
the waiter~
A waiter who knows all his customers is serving drinks here.
~
He looks very nice. But I bet he packs a punch.
~
24586 0 0 0 0 0 0 0 600 E
23 13 -3 4d4+230 3d3+3
230 52900
8 8 1
E
#49101
shopkeeper~
the shopkeeper~
A friendly man reading a zine is sitting behind the counter.
~
He looks very nice. But I bet he packs a punch.
~
24586 0 0 0 0 0 0 0 600 E
23 13 -3 4d4+230 3d3+3
230 52900
8 8 1
E
$

66
lib/world/mob/492.mob Normal file
View File

@@ -0,0 +1,66 @@
#49200
book worm~
the book worm~
A creepy little book work is crawling through the books.
~
Yuck! I bet they eat books!
~
72 0 0 0 0 0 0 0 -250 E
1 20 9 0d0+10 1d2+0
10 100
8 8 0
E
#49201
apprentice~
Master Ultan's apprentice~
One of Master Ultan's apprentices stands here looking confused.
~
He is clinging to a book he has never read. He looks harmless, but
you never can tell.
~
76 0 0 0 0 0 0 0 0 E
2 20 8 0d0+20 1d2+0
20 400
8 8 1
E
#49202
journeyman guard~
Master Ultan's journeyman~
One of Master Ultan's journeymen stands guard here.
~
The Journeyman is responsible for protecting the books from being read.
What a strange guild they are!
~
10 0 0 0 0 0 0 0 0 E
3 19 8 0d0+30 1d2+0
30 900
8 8 1
E
#49203
book thief~
the book thief~
An imp-like thing is sneaking thorugh the shelves, stealing books.
~
A tiny, vaguely humanoid shaped creature. Before you ever get a
good look at it, it darts back into the shelves.
~
236 0 0 0 0 0 0 0 -800 E
3 19 8 0d0+30 1d2+0
30 900
8 8 1
E
#49204
master ultan~
Master Ultan~
Master Ultan stands here, touching books with his creepy finger.
~
He is the head of the Librarians Guild, which hoards books. He is
an old man, haggard and nearly blind. He looks like a harmless old
man, but he has survived thus far.
~
10 0 0 0 0 0 0 0 0 E
5 19 7 1d1+50 1d2+0
50 2500
8 8 1
E
$

View File

@@ -182,6 +182,8 @@
343.mob
345.mob
346.mob
491.mob
492.mob
555.mob
556.mob
653.mob

73
lib/world/obj/49.obj Normal file
View File

@@ -0,0 +1,73 @@
#4900
boards bulletin gen_boards~
a bulletin board~
A small bulletin board is mounted on a wall here.~
~
13 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0
0 0 0 0 0
E
bulletin~
Use 'look board' to read the board.
~
E
board~
If you can read this, the board is not working.
~
#4901
bottle beer~
a bottle~
A beer bottle has been left here.~
~
17 0 0 0 0 a 0 0 0 0 0 0 0
8 8 1 0
10 20 8 0 0
#4902
bottle dark ale~
a bottle~
A dark bottle of ale has been left here.~
~
17 0 0 0 0 a 0 0 0 0 0 0 0
8 8 3 0
10 10 3 0 0
#4903
bottle firebreather~
a bottle~
A bottle of firebreather has been left here.~
~
17 0 0 0 0 a 0 0 0 0 0 0 0
8 8 7 0
10 50 17 0 0
#4904
bottle local~
a bottle~
A dark bottle has been left here.~
~
17 0 0 0 0 a 0 0 0 0 0 0 0
8 8 8 0
10 20 7 0 0
#4905
zine~
the grenzland zine~
A tiny zine labelled "Grenzland No. 7" was left here.~
~
12 0 0 0 0 a 0 0 0 0 0 0 0
0 0 0 0
1 4 0 0 0
E
zine~
It looks like the 7th issue of the Grenzland Zine. This issue
focuses on High Level Adventures, and - look! - there is a report from
the ongoing Arden Vul campaign in there too!
~
#4906
dagger~
a dagger~
A dagger is lying here.~
~
5 ag 0 0 0 ano 0 0 0 0 0 0 0
0 1 4 11
1 1 0 0
A
19 1
$

22
lib/world/obj/491.obj Normal file
View File

@@ -0,0 +1,22 @@
#49103
sink water~
a sink~
A sink with a tap.~
~
23 cde 0 0 0 0 0 0 0 0 0 0 0
500 500 0 0
505 0 0 0 0
E
sink tap~
It is an ordinary sink with a tap. You might fill your canteen
here.
~
#49104
key~
a small key~
A smalk brass key.~
~
18 c 0 0 0 a 0 0 0 0 0 0 0
1 0 0 0
1 1 0 0
$

View File

@@ -38,6 +38,7 @@
44.obj
45.obj
46.obj
49.obj
50.obj
51.obj
52.obj
@@ -181,6 +182,7 @@
343.obj
345.obj
346.obj
491.obj
555.obj
556.obj
653.obj

51
lib/world/shp/491.shp Normal file
View File

@@ -0,0 +1,51 @@
CircleMUD v3.0 Shop File~
#49100~
4901
4902
4903
4904
-1
1.50
0.75
-1
%s Sorry, I don't stock that item.~
%s You don't seem to have that.~
%s I don't trade in such items.~
%s I can't afford that!~
%s You are too poor!~
%s That'll be %d coins, thanks.~
%s I'll give you %d coins for that.~
0
2
49100
0
49100
-1
0
28
0
0
#49102~
4905
-1
1.50
0.75
-1
%s Sorry, I don't stock that item.~
%s You don't seem to have that.~
%s I don't trade in such items.~
%s I can't afford that!~
%s You are too poor!~
%s That'll be %d coins, thanks.~
%s I'll give you %d coins for that.~
0
2
49101
0
49102
-1
0
28
0
0
$~

View File

@@ -163,6 +163,7 @@
343.shp
345.shp
346.shp
491.shp
555.shp
556.shp
653.shp

12
lib/world/trg/491.trg Normal file
View File

@@ -0,0 +1,12 @@
0;190;19M0;190;19m#49100
Editorial Room Key - 49104~
2 c 0
l~
if %cmd.mudcommand% == look && !%actor.has_item(49104)%
%echo% Wait? Is that a key lying there!? Better pick that up!
%load% obj 49104 %actor% inv
else
return 0
end
~
$~

View File

@@ -182,8 +182,10 @@
343.trg
345.trg
346.trg
491.trg
555.trg
556.trg
653.trg
654.trg
$

View File

@@ -637,10 +637,17 @@ You see Poor Alley.
S
#3026
The Dark Alley~
The dark alley, to the west is the common square and to the south is the
Guild of Thieves. The alley continues east.
The dark alley, to the west is the common square and to the south
is the Guild of Thieves. The alley continues east. You see a curious
building to the north you swear wasn't here the last time you have
been to this dark alley.
~
30 0 0 0 0 1
D0
This building wasn't here last time, right?
~
~
0 -1 49101
D1
The alley continues east.
~

10
lib/world/wld/49.wld Normal file
View File

@@ -0,0 +1,10 @@
#4900
In a Time and Place before Creation~
You are standing in the Void. Earth and Sky have not yet been
separated. Nothing has form here, except the Celestial Mound rising
above the shapeless waters of Nu. Could this be a time and place
before Creation?
~
49 ce 0 0 0 0
S
$

162
lib/world/wld/491.wld Normal file
View File

@@ -0,0 +1,162 @@
#49100
The Grenzland Club~
You are in the woodpaneled club room of the Grenzland Building.
People are talking quietly or reading in silence. There is a fire
crackling in the hearth to the North. To the West is a restroom. To
the South is the Entry Hall. To the East is a nice looking bar.
~
491 de 0 0 0 0
D2
You see the Entry Hall to the Grenzland Building.
~
~
1 -1 49101
D3
You see the restroom.
~
~
1 -1 49103
S
#49101
The Entry Hall to the Grenzland Building~
You are in the Entry Hall to the Grenzland Building. To the North
you see the Grenzland Club room. To the West is a door with a small
note pinned to it. To the South you see the Entry Hall. To the South
is a Dark Alley in Midgaard. To the East you see the Grenzland Shop.
A double staircase leads up to the Balcony.
~
491 de 0 0 0 0
D0
You see the Grenzland Club room.
~
~
1 -1 49100
D1
You see the Grenzland Shop.
~
~
1 -1 49102
D2
You see a Dark Alley.
~
~
1 -1 3026
D4
You see the Balcony from below.
~
~
1 -1 49110
E
note~
The note reads:
This door will lead to a teleporter room in the future.
- a.
~
S
#49102
The Grenzland Shop~
You are in the Grenzland Shop. The room is full of books, zines,
dice, minis, and game boxes! The exit is to the West, but do you
really want to leave?
~
491 de 0 0 0 0
D1
You see the Entry Hall.
~
~
1 -1 49101
S
#49103
The Restroom~
You are in the restroom of the Grenzland Club. The exit is to the
East. To the south are some bathroom stalls.
~
491 de 0 0 0 0
D1
You see the Grenzland Club room.
~
~
1 -1 49100
D2
You see bathroom stalls.
~
~
1 -1 49104
S
#49104
Bathroom Stalls~
Well, these are bathroom stalls. Quite clean.
~
491 de 0 0 0 0
D0
You see the sink and the exit.
~
~
1 -1 49103
E
stall stalls toilet toilets room~
Surprisingly clean.
~
S
T 49100
#49110
The Balcony above the Entry Hall~
This is the Balcony above the Entry Hall To the North is the
Library. From the door to the East you hear busy typing. The door to
has a brass plaque on it. A double staircase leads down to the Entry
Hall.
~
491 de 0 0 0 0
D0
You see a double-winged door leading into the Library.
~
~
1 -1 49112
D1
You see a door with a brass plaque on it.
~
~
1 49104 49111
D5
You see the Entry Hall from above.
~
~
1 -1 49101
E
note plaque door~
The plaque reads: "Grenzland Zine Editorial Room"
~
S
#49111
The Grenzland Zine Editorial Room~
This is supposed to be the editorial room of the Grenzland Zine.
Dozens of monkeys chained to typwriters type frantically. This is a
joke, right?
~
491 de 0 0 0 0
D3
You see the Balcony above the Entry Hall.
~
~
1 49104 49110
S
#49112
The Library~
The walls are bookshelves and the room is filled with plenty of
winged chairs, reading desks and map tables. One book shelves to the
North seems to be a door of some sort?
~
491 de 0 0 0 0
D0
A curious door. Where might it lead?
~
~
1 -1 49200
D2
You see the Balcony above the Entry.
~
~
1 -1 49110
S
$

286
lib/world/wld/492.wld Normal file
View File

@@ -0,0 +1,286 @@
#49200
The Entrance to the Library Maze~
This seems to be some secret section of the library. There is
shelves full of books everywhere! Let's hope you don't get lost here.
~
492 d 0 0 0 0
D0
The shelves continue North.
~
~
0 -1 49202
D3
The shelves continue West.
~
~
0 -1 49201
D2
Through the door you see the Library of the Grenzland Build.
~
~
1 -1 49112
S
#49201
A dead end in the Library Maze~
This is a dead end. There is shelves full of books everywhere!
Let's hope you don't get lost here.
~
492 d 0 0 0 0
D1
The shelves continue East.
~
~
0 -1 49200
S
#49202
A corridor in the Library Maze~
This is a corridor. It continues North and South. There is
shelves full of books everywhere! Let's hope you don't get lost here.
~
492 d 0 0 0 0
D0
The shelves continue North.
~
~
0 -1 49203
D2
The shelves continue South.
~
~
0 -1 49200
S
#49203
A junktion in the Library Maze~
This is a junktion. Corridors continue East, South, and West. A
door leads North. There is shelves full of books everywhere! Let's
hope you don't get lost here.
~
492 d 0 0 0 0
D0
A door leads north
~
~
1 -1 49210
D1
The shelves continue East.
~
~
0 -1 49207
D2
The shelves continue South.
~
~
0 -1 49202
D3
The shelves continue West.
~
~
0 -1 49204
S
#49204
A corridor in the Library Maze~
This is a corridor. It continues East and West. There is shelves
full of books everywhere! Let's hope you don't get lost here.
~
492 d 0 0 0 0
D1
The shelves continue East.
~
~
0 -1 49203
D3
The shelves continue West.
~
~
0 -1 49205
S
#49205
A corridor in the Library Maze~
This is a corridor. It continues East. A door leads south. There
is shelves full of books everywhere! Let's hope you don't get lost
here.
~
492 d 0 0 0 0
D1
The shelves continue East.
~
~
0 -1 49204
D2
A door leads South.
~
~
1 -1 49206
S
#49206
A Reading Room~
This seems to be a reading room. There are a few desks here. The
room has only one exit North.
~
492 d 0 0 0 0
D0
A door leads North.
~
~
1 -1 49205
S
#49207
A corridor in the Library Maze~
This is a corridor. It continues East and West. There is shelves
full of books everywhere! Let's hope you don't get lost here.
~
492 d 0 0 0 0
D1
The shelves continue East.
~
~
0 -1 49208
D3
The shelves continue West.
~
~
0 -1 49203
S
#49208
A junktion in the Library Maze~
This is a junktion. Corridors continue South and West. A door
leads North. There is shelves full of books everywhere! Let's hope
you don't get lost here.
~
492 d 0 0 0 0
D0
A door leads north
~
~
1 -1 49211
D2
The shelves continue South.
~
~
0 -1 49209
D3
The shelves continue West.
~
~
0 -1 49207
S
#49209
A dead end in the Library Maze~
This is a dead end. There is shelves full of books everywhere!
Let's hope you don't get lost here.
~
492 d 0 0 0 0
D0
The shelves continue North.
~
~
0 -1 49208
S
#49210
A dark corridor in the Library Maze~
This is a corridor. There are no light sources! The corridor
continues North. A door leads South. There is shelves full of books
everywhere! Let's hope you don't get lost here.
~
492 ad 0 0 0 0
D0
The shelves continue North.
~
~
0 -1 49214
D2
A door leads South.
~
~
1 -1 49203
S
#49211
A dark corridor in the Library Maze~
This is a corridor. There are no light sources! The corridor
continues North. A door leads South. There is shelves full of books
everywhere! Let's hope you don't get lost here.
~
492 ad 0 0 0 0
D0
The shelves continue North.
~
~
0 -1 49212
D2
A door leads South.
~
~
1 -1 49208
S
#49212
A dark corridor in the Library Maze~
This is a corridor. There are no light sources! The corridor
continues South and West. There is shelves full of books everywhere!
Let's hope you don't get lost here.
~
492 ad 0 0 0 0
D2
The shelves continue South.
~
~
0 -1 49211
D3
The shelves continue West.
~
~
1 -1 49213
S
#49213
A dark junktion in the Library Maze~
This is a junktion. There are no light sources! Corridors
continue East and West. A door leads North. There is shelves full
of books everywhere! Let's hope you don't get lost here.
~
492 ad 0 0 0 0
D0
A door leads north
~
~
1 -1 49215
D1
The shelves continue East.
~
~
0 -1 49212
D3
The shelves continue West.
~
~
0 -1 49214
S
#49214
A dark corridor in the Library Maze~
This is a corridor. There are no light sources! The corridor
continues East and South. There is shelves full of books everywhere!
Let's hope you don't get lost here.
~
492 ad 0 0 0 0
D1
The shelves continue East.
~
~
1 -1 49213
D2
The shelves continue South.
~
~
0 -1 49210
S
#49215
Master Ultan's Hideout~
This seems to be a reading room. There are no light sources here!
There are a few desks here. The room has only one exit South.
~
492 d 0 0 0 0
D2
A door leads South.
~
~
1 -1 49213
S
$

View File

@@ -38,6 +38,7 @@
44.wld
45.wld
46.wld
49.wld
50.wld
51.wld
52.wld
@@ -183,6 +184,8 @@
343.wld
345.wld
346.wld
491.wld
492.wld
555.wld
556.wld
653.wld

7
lib/world/zon/49.zon Normal file
View File

@@ -0,0 +1,7 @@
#49
GrenzlandMUD~
Grenzland~
4900 4999 15 2 d 0 0 0 1 33
S
$

21
lib/world/zon/491.zon Normal file
View File

@@ -0,0 +1,21 @@
#491
GrenzlandMUD~
Grenzland Building~
49100 49199 15 2 d 0 0 0 1 33
M 0 49100 1 49100 (the waiter)
G 1 4901 100 -1 (a bottle)
G 1 4902 100 -1 (a bottle)
G 1 4903 100 -1 (a bottle)
G 1 4904 100 -1 (a bottle)
M 0 49102 1 49101 (the shopkeeper)
G 1 4905 50 -1 (a zine)
R 0 49101 4900 -1 (a bulletin board)
O 0 4900 99 49101 (a bulletin board)
R 0 49103 49103 -1 (a sink)
O 0 49103 99 49103 (a sink)
R 0 49104 49104 -1 (a key)
D 0 49110 1 2
D 0 49111 3 2
D 0 49112 0 1
S
$

View File

@@ -0,0 +1,21 @@
#491
GrenzlandMUD~
Grenzland Building~
49100 49199 15 2 d 0 0 0 1 33
M 0 49100 1 49100 (the waiter)
G 1 4901 100 -1 (a bottle)
G 1 4902 100 -1 (a bottle)
G 1 4903 100 -1 (a bottle)
G 1 4904 100 -1 (a bottle)
M 0 4901 1 49102 (the waiter)
G 1 4905 100 -1 (a zine)
R 0 49101 4900 -1 (a bulletin board)
O 0 4900 99 49101 (a bulletin board)
R 0 49103 49103 -1 (a sink)
O 0 49103 99 49103 (a sink)
R 0 49104 49104 -1 (a key)
D 0 49110 1 2
D 0 49111 3 2
D 0 49112 0 1
S
$

35
lib/world/zon/492.zon Normal file
View File

@@ -0,0 +1,35 @@
#492
GrenzlandMUD~
The Library Maze~
49200 49299 15 2 d 0 0 0 1 7
M 0 49200 8 49200 (a book worm)
M 0 49200 8 49201 (a book worm)
M 0 49200 8 49201 (a book worm)
M 0 49200 8 49202 (a book worm)
M 0 49201 5 49202 (an apprentice)
M 0 49201 5 49203 (an apprentice)
M 0 49200 8 49205 (a book worm)
M 0 49202 2 49206 (a journeyman)
E 1 4906 99 16 (a dagger)
M 0 49200 8 49207 (a book worm)
M 0 49200 8 49208 (a book worm)
M 0 49201 5 49209 (an apprentice)
E 1 4906 99 16 (a dagger)
M 0 49203 3 49210 (a book thief)
M 0 49203 3 49212 (a book thief)
M 0 49202 2 49213 (a journeyman)
E 1 4906 99 16 (a dagger)
M 0 49204 1 49215 (master ultan)
E 1 4906 99 16 (a dagger)
G 1 4905 99 -1 (the grenzland zine)
D 0 49200 2 1
D 0 49203 0 1
D 0 49205 2 1
D 0 49206 0 1
D 0 49208 0 1
D 0 49210 2 1
D 0 49211 2 1
D 0 49213 0 1
D 0 49215 2 1
S
$

View File

@@ -38,6 +38,7 @@
44.zon
45.zon
46.zon
49.zon
50.zon
51.zon
52.zon
@@ -183,6 +184,8 @@
343.zon
345.zon
346.zon
491.zon
492.zon
555.zon
556.zon
653.zon

View File

@@ -1 +0,0 @@
This directory is for log files.

0
log/badpws Normal file
View File

0
log/delete Normal file
View File

0
log/dts Normal file
View File

13
log/errors Normal file
View File

@@ -0,0 +1,13 @@
SYSERR: bind: Address already in use
SYSERR: bind: Address already in use
SYSERR: bind: Address already in use
Jan 26 21:34:14 2026 :: SYSERR: zone file: Invalid vnum 4900, cmd disabled
Jan 26 21:34:14 2026 :: SYSERR: ...offending cmd: 'M' cmd in zone #491, line 5
Jan 26 21:34:14 2026 :: SYSERR: zone file: Invalid vnum 4901, cmd disabled
Jan 26 21:34:14 2026 :: SYSERR: ...offending cmd: 'M' cmd in zone #491, line 10
Jan 26 21:34:42 2026 :: SYSERR: Received SIGHUP, SIGINT, or SIGTERM. Shutting down...
Jan 26 21:34:49 2026 :: SYSERR: zone file: Invalid vnum 4900, cmd disabled
Jan 26 21:34:49 2026 :: SYSERR: ...offending cmd: 'M' cmd in zone #491, line 5
Jan 26 21:34:49 2026 :: SYSERR: zone file: Invalid vnum 4901, cmd disabled
Jan 26 21:34:49 2026 :: SYSERR: ...offending cmd: 'M' cmd in zone #491, line 10
Jan 26 21:38:19 2026 :: SYSERR: Received SIGHUP, SIGINT, or SIGTERM. Shutting down...

0
log/godcmds Normal file
View File

0
log/help Normal file
View File

0
log/levels Normal file
View File

1
log/newplayers Normal file
View File

@@ -0,0 +1 @@
Jan 26 21:36:53 2026 :: Karrn [localhost] new player.

0
log/olc Normal file
View File

0
log/rentgone Normal file
View File

5
log/restarts Normal file
View File

@@ -0,0 +1,5 @@
Jan 26 21:00:54 2026 :: Running game on port 4000.
Jan 26 21:17:40 2026 :: Running game on port 4000.
Jan 26 21:25:55 2026 :: Running game on port 4000.
Jan 26 21:34:13 2026 :: Running game on port 4000.
Jan 26 21:34:49 2026 :: Running game on port 4000.

0
log/rip Normal file
View File

265
log/syslog.1 Normal file
View File

@@ -0,0 +1,265 @@
autorun starting game Mo 26. Jan 21:34:13 CET 2026
running bin/circle -q 4000
nohup: Eingabe wird ignoriert
No etc/config file, using defaults: No such file or directory
Jan 26 21:34:13 2026 :: Loading configuration.
Jan 26 21:34:13 2026 :: tbaMUD 2025
Jan 26 21:34:13 2026 :: Using lib as data directory.
Jan 26 21:34:13 2026 :: Running game on port 4000.
Jan 26 21:34:13 2026 :: Finding player limit.
Jan 26 21:34:13 2026 :: Setting player limit to 300 using rlimit.
Jan 26 21:34:13 2026 :: Opening mother connection.
Jan 26 21:34:13 2026 :: Binding to all IP interfaces on this host.
Jan 26 21:34:13 2026 :: Boot db -- BEGIN.
Jan 26 21:34:13 2026 :: Resetting the game time:
Jan 26 21:34:13 2026 :: No time file 'etc/time' starting from the beginning.
Jan 26 21:34:13 2026 :: Current Gametime: 23H 29D 15M 1044Y.
Jan 26 21:34:13 2026 :: Initialize Global Lists
Jan 26 21:34:13 2026 :: Initializing Events
Jan 26 21:34:13 2026 :: Reading news, credits, help, ihelp, bground, info & motds.
Jan 26 21:34:13 2026 :: Loading spell definitions.
Jan 26 21:34:13 2026 :: Loading zone table.
Jan 26 21:34:13 2026 :: 192 zones, 13824 bytes.
Jan 26 21:34:13 2026 :: Loading triggers and generating index.
Jan 26 21:34:13 2026 :: Loading rooms.
Jan 26 21:34:14 2026 :: 12758 rooms, 2347472 bytes.
Jan 26 21:34:14 2026 :: Renumbering rooms.
Jan 26 21:34:14 2026 :: Checking start rooms.
Jan 26 21:34:14 2026 :: Loading mobs and generating index.
Jan 26 21:34:14 2026 :: 3712 mobs, 118784 bytes in index, 2138112 bytes in prototypes.
Jan 26 21:34:14 2026 :: Loading objs and generating index.
Jan 26 21:34:14 2026 :: 4774 objs, 152768 bytes in index, 1145760 bytes in prototypes.
Jan 26 21:34:14 2026 :: Renumbering zone table.
Jan 26 21:34:14 2026 :: SYSERR: zone file: Invalid vnum 4900, cmd disabled
Jan 26 21:34:14 2026 :: SYSERR: ...offending cmd: 'M' cmd in zone #491, line 5
Jan 26 21:34:14 2026 :: SYSERR: zone file: Invalid vnum 4901, cmd disabled
Jan 26 21:34:14 2026 :: SYSERR: ...offending cmd: 'M' cmd in zone #491, line 10
Jan 26 21:34:14 2026 :: Loading shops.
Jan 26 21:34:14 2026 :: Loading quests.
Jan 26 21:34:14 2026 :: 1 entries, 128 bytes.
Jan 26 21:34:14 2026 :: Loading help entries.
Jan 26 21:34:14 2026 :: 2640 entries, 84480 bytes.
Jan 26 21:34:14 2026 :: Generating player index.
Jan 26 21:34:14 2026 :: Loading fight messages.
Jan 26 21:34:14 2026 :: Loaded 37 Combat Messages...
Jan 26 21:34:14 2026 :: Loading social messages.
Jan 26 21:34:14 2026 :: Social table contains 490 socials.
Jan 26 21:34:14 2026 :: Building command list.
Jan 26 21:34:14 2026 :: Command info rebuilt, 766 total commands.
Jan 26 21:34:14 2026 :: Assigning function pointers:
Jan 26 21:34:14 2026 :: Mobiles.
Jan 26 21:34:14 2026 :: Shopkeepers.
Jan 26 21:34:14 2026 :: Objects.
Jan 26 21:34:14 2026 :: Rooms.
Jan 26 21:34:14 2026 :: Questmasters.
Jan 26 21:34:14 2026 :: Assigning spell and skill levels.
Jan 26 21:34:14 2026 :: Sorting command list and spells.
Jan 26 21:34:14 2026 :: Booting mail system.
Jan 26 21:34:14 2026 :: Mail file read -- 0 messages.
Jan 26 21:34:14 2026 :: Reading banned site and invalid-name list.
Jan 26 21:34:14 2026 :: Loading Ideas.
Jan 26 21:34:14 2026 :: Loading Bugs.
Jan 26 21:34:14 2026 :: Loading Typos.
Jan 26 21:34:14 2026 :: Booting houses.
Jan 26 21:34:14 2026 :: No houses to load. File 'etc/hcontrol' does not exist.
Jan 26 21:34:14 2026 :: Cleaning up last log.
Jan 26 21:34:14 2026 :: Resetting #0: The Builder Academy Zone (rooms 0-99).
Jan 26 21:34:14 2026 :: Resetting #1: Sanctus (rooms 100-199).
Jan 26 21:34:14 2026 :: Resetting #2: Sanctus II (rooms 200-299).
Jan 26 21:34:14 2026 :: Resetting #3: Sanctus III (rooms 300-399).
Jan 26 21:34:14 2026 :: Resetting #4: Rename (rooms 400-499).
Jan 26 21:34:14 2026 :: Resetting #5: Newbie Farm (rooms 500-599).
Jan 26 21:34:14 2026 :: Resetting #6: Sea of Souls (rooms 600-699).
Jan 26 21:34:14 2026 :: Resetting #7: Camelot (rooms 700-799).
Jan 26 21:34:14 2026 :: Resetting #9: River Island of Minos (rooms 900-999).
Jan 26 21:34:14 2026 :: Resetting #11: Frozen Castle (rooms 1100-1199).
Jan 26 21:34:14 2026 :: Resetting #12: God Complex Merged with 343 (rooms 1200-1299).
Jan 26 21:34:14 2026 :: Resetting #13: TBA Examples (rooms 1300-1399).
Jan 26 21:34:14 2026 :: Resetting #14: TBA Examples II (rooms 1400-1499).
Jan 26 21:34:14 2026 :: Resetting #15: Straight Path (rooms 1500-1599).
Jan 26 21:34:14 2026 :: Resetting #16: Camelot II (rooms 1600-1699).
Jan 26 21:34:14 2026 :: Resetting #17: Camelot III (rooms 1700-1799).
Jan 26 21:34:14 2026 :: Resetting #18: Nuclear Wasteland (rooms 1800-1899).
Jan 26 21:34:14 2026 :: Resetting #19: Spider Swamp (rooms 1900-1999).
Jan 26 21:34:14 2026 :: Resetting #20: Arena (rooms 2000-2099).
Jan 26 21:34:14 2026 :: Resetting #22: Tower of the Undead (rooms 2200-2299).
Jan 26 21:34:14 2026 :: Resetting #25: High Tower of Magic (rooms 2500-2599).
Jan 26 21:34:14 2026 :: Resetting #26: High Tower of Magic II (rooms 2600-2699).
Jan 26 21:34:14 2026 :: Resetting #27: Memlin Caverns (rooms 2700-2799).
Jan 26 21:34:14 2026 :: Resetting #28: Mudschool (rooms 2800-2899).
Jan 26 21:34:14 2026 :: Resetting #30: Northern Midgaard (rooms 3000-3099).
Jan 26 21:34:14 2026 :: Resetting #31: Southern Midgaard (rooms 3100-3199).
Jan 26 21:34:14 2026 :: Resetting #32: Midgaard (rooms 3200-3299).
Jan 26 21:34:14 2026 :: Resetting #33: Three of Swords (rooms 3300-3399).
Jan 26 21:34:14 2026 :: Resetting #35: Miden'Nir (rooms 3500-3599).
Jan 26 21:34:14 2026 :: Resetting #36: Chessboard of Midgaard (rooms 3600-3699).
Jan 26 21:34:14 2026 :: Resetting #37: Capital Sewer System (rooms 3700-3799).
Jan 26 21:34:14 2026 :: Resetting #38: Capital Sewer System II (rooms 3800-3899).
Jan 26 21:34:14 2026 :: Resetting #39: Haven (rooms 3900-3999).
Jan 26 21:34:14 2026 :: Resetting #40: Mines of Moria (rooms 4000-4099).
Jan 26 21:34:14 2026 :: Resetting #41: Mines of Moria (rooms 4100-4199).
Jan 26 21:34:14 2026 :: Resetting #42: Dragon Chasm (rooms 4200-4299).
Jan 26 21:34:14 2026 :: Resetting #43: Arctic Zone (rooms 4300-4399).
Jan 26 21:34:14 2026 :: Resetting #44: Orc Camp (rooms 4400-4499).
Jan 26 21:34:14 2026 :: Resetting #45: Woodland Monastery (rooms 4500-4599).
Jan 26 21:34:14 2026 :: Resetting #46: Ant Hill (rooms 4600-4699).
Jan 26 21:34:14 2026 :: Resetting #49: Grenzland (rooms 4900-4999).
Jan 26 21:34:14 2026 :: Resetting #50: Great Eastern Desert (rooms 5000-5099).
Jan 26 21:34:14 2026 :: Resetting #51: Drow City (rooms 5100-5199).
Jan 26 21:34:14 2026 :: Resetting #52: City of Thalos (rooms 5200-5299).
Jan 26 21:34:14 2026 :: Resetting #53: Great Pyramid (rooms 5300-5399).
Jan 26 21:34:14 2026 :: Resetting #54: New Thalos (rooms 5400-5499).
Jan 26 21:34:14 2026 :: Resetting #55: New Thalos II (rooms 5500-5599).
Jan 26 21:34:14 2026 :: Resetting #56: New Thalos Wilderness (rooms 5600-5699).
Jan 26 21:34:14 2026 :: Resetting #57: Zodiac (rooms 5700-5799).
Jan 26 21:34:14 2026 :: Resetting #60: Haon-Dor, Light Forest (rooms 6000-6099).
Jan 26 21:34:14 2026 :: Resetting #61: Haon-Dor, Light Forest II (rooms 6100-6199).
Jan 26 21:34:14 2026 :: Resetting #62: Orc Enclave (rooms 6200-6299).
Jan 26 21:34:14 2026 :: Resetting #63: Arachnos (rooms 6300-6399).
Jan 26 21:34:14 2026 :: Resetting #64: Rand's Tower (rooms 6400-6499).
Jan 26 21:34:14 2026 :: Resetting #65: Dwarven Kingdom (rooms 6500-6599).
Jan 26 21:34:14 2026 :: Resetting #70: Sewer, First Level (rooms 7000-7099).
Jan 26 21:34:14 2026 :: Resetting #71: Second Sewer (rooms 7100-7199).
Jan 26 21:34:14 2026 :: Resetting #72: Sewer Maze (rooms 7200-7299).
Jan 26 21:34:14 2026 :: Resetting #73: Tunnels in the Sewer (rooms 7300-7399).
Jan 26 21:34:14 2026 :: Resetting #74: Newbie Graveyard (rooms 7400-7499).
Jan 26 21:34:14 2026 :: Resetting #75: Zamba (rooms 7500-7599).
Jan 26 21:34:14 2026 :: Resetting #78: Gideon (rooms 7800-7899).
Jan 26 21:34:14 2026 :: Resetting #79: Redferne's Residence (rooms 7900-7999).
Jan 26 21:34:14 2026 :: Resetting #83: Glumgold's Sea (rooms 8300-8399).
Jan 26 21:34:14 2026 :: Resetting #86: Duke Kalithorn's Keep (rooms 8600-8699).
Jan 26 21:34:14 2026 :: Resetting #90: Oasis (rooms 9000-9099).
Jan 26 21:34:14 2026 :: Resetting #96: Domiae (rooms 9600-9699).
Jan 26 21:34:14 2026 :: Resetting #100: Northern Highway (rooms 10000-10099).
Jan 26 21:34:14 2026 :: Resetting #101: South Road (rooms 10100-10199).
Jan 26 21:34:14 2026 :: Resetting #103: DBZ World (rooms 10300-10399).
Jan 26 21:34:14 2026 :: Resetting #104: Land of Orchan (rooms 10400-10499).
Jan 26 21:34:14 2026 :: Resetting #106: Elcardo (rooms 10600-10699).
Jan 26 21:34:14 2026 :: Resetting #107: Realms of Iuel (rooms 10700-10799).
Jan 26 21:34:14 2026 :: Resetting #115: Monestary Omega (rooms 11500-11599).
Jan 26 21:34:14 2026 :: Resetting #117: Los Torres (rooms 11700-11799).
Jan 26 21:34:14 2026 :: Resetting #118: The Dollhouse (rooms 11800-11899).
Jan 26 21:34:14 2026 :: Resetting #120: Rome (rooms 12000-12099).
Jan 26 21:34:14 2026 :: Resetting #125: Hannah (rooms 12500-12599).
Jan 26 21:34:14 2026 :: Resetting #130: Mist Maze (rooms 13000-13099).
Jan 26 21:34:14 2026 :: Resetting #140: Wyvern City (rooms 14000-14099).
Jan 26 21:34:14 2026 :: Resetting #150: King Welmar's Castle (rooms 15000-15099).
Jan 26 21:34:14 2026 :: Resetting #169: Gibberling Caves (rooms 16900-16999).
Jan 26 21:34:14 2026 :: Resetting #175: Cardinal Wizards (rooms 17500-17599).
Jan 26 21:34:14 2026 :: Resetting #186: Newbie Zone (rooms 18600-18699).
Jan 26 21:34:14 2026 :: Resetting #187: Circus (rooms 18700-18799).
Jan 26 21:34:14 2026 :: Resetting #200: Western Highway (rooms 20000-20099).
Jan 26 21:34:14 2026 :: Resetting #201: Sapphire Islands (rooms 20100-20199).
Jan 26 21:34:14 2026 :: Resetting #211: Tarot (rooms 21100-21199).
Jan 26 21:34:14 2026 :: Resetting #220: The Enchanted Kitchen (rooms 22000-22099).
Jan 26 21:34:14 2026 :: Resetting #232: Terringham (rooms 23200-23299).
Jan 26 21:34:14 2026 :: Resetting #233: Dragon Plains (rooms 23300-23399).
Jan 26 21:34:14 2026 :: Resetting #234: Newbie School (rooms 23400-23499).
Jan 26 21:34:14 2026 :: Resetting #235: Dwarven Mines (rooms 23500-23599).
Jan 26 21:34:14 2026 :: Resetting #236: Aldin (rooms 23600-23699).
Jan 26 21:34:14 2026 :: Resetting #237: Dwarven Trade Route (rooms 23700-23799).
Jan 26 21:34:14 2026 :: Resetting #238: Crystal Castle (rooms 23800-23899).
Jan 26 21:34:14 2026 :: Resetting #239: South Pass (rooms 23900-23999).
Jan 26 21:34:14 2026 :: Resetting #240: Dun Maura (rooms 24000-24099).
Jan 26 21:34:14 2026 :: Resetting #241: Starship Enterprise (rooms 24100-24199).
Jan 26 21:34:14 2026 :: Resetting #242: New Southern Midgaard (rooms 24200-24299).
Jan 26 21:34:14 2026 :: Resetting #243: Snowy Valley (rooms 24300-24399).
Jan 26 21:34:14 2026 :: Resetting #244: Cooland Prison (rooms 24400-24499).
Jan 26 21:34:14 2026 :: Resetting #245: The Nether (rooms 24500-24599).
Jan 26 21:34:14 2026 :: Resetting #246: The Nether II (rooms 24600-24699).
Jan 26 21:34:14 2026 :: Resetting #247: Graveyard (rooms 24700-24799).
Jan 26 21:34:14 2026 :: Resetting #248: Elven Woods (rooms 24800-24899).
Jan 26 21:34:14 2026 :: Resetting #249: Jedi Clan House (rooms 24900-24999).
Jan 26 21:34:14 2026 :: Resetting #250: DragonSpyre (rooms 25000-25099).
Jan 26 21:34:14 2026 :: Resetting #251: Ape Village (rooms 25100-25199).
Jan 26 21:34:14 2026 :: Resetting #252: Castle of the Vampyre (rooms 25200-25299).
Jan 26 21:34:14 2026 :: Resetting #253: Windmill (rooms 25300-25399).
Jan 26 21:34:14 2026 :: Resetting #254: Mordecai's Village (rooms 25400-25499).
Jan 26 21:34:14 2026 :: Resetting #255: Shipwreck (rooms 25500-25599).
Jan 26 21:34:14 2026 :: Resetting #256: Lord's Keep (rooms 25600-25699).
Jan 26 21:34:14 2026 :: Resetting #257: Jareth Main City (rooms 25700-25799).
Jan 26 21:34:14 2026 :: Resetting #258: Light Forest (rooms 25800-25899).
Jan 26 21:34:14 2026 :: Resetting #259: Haunted Mansion (rooms 25900-25999).
Jan 26 21:34:14 2026 :: Resetting #260: Grasslands (rooms 26000-26099).
Jan 26 21:34:14 2026 :: Resetting #261: Inna & Igor's Castle (rooms 26100-26199).
Jan 26 21:34:14 2026 :: Resetting #262: Forest Trails (rooms 26200-26299).
Jan 26 21:34:14 2026 :: Resetting #263: Farmlands (rooms 26300-26399).
Jan 26 21:34:14 2026 :: Resetting #264: Banshide (rooms 26400-26499).
Jan 26 21:34:14 2026 :: Resetting #265: Beach & Lighthouse (rooms 26500-26599).
Jan 26 21:34:14 2026 :: Resetting #266: Realm of Lord Ankou (rooms 26600-26699).
Jan 26 21:34:14 2026 :: Resetting #267: Vice Island (rooms 26700-26799).
Jan 26 21:34:14 2026 :: Resetting #268: Vice Island II (rooms 26800-26899).
Jan 26 21:34:14 2026 :: Resetting #269: Southern Desert (rooms 26900-26999).
Jan 26 21:34:14 2026 :: Resetting #270: Wasteland (rooms 27000-27099).
Jan 26 21:34:14 2026 :: Resetting #271: Sundhaven (rooms 27100-27199).
Jan 26 21:34:14 2026 :: Resetting #272: Sundhaven II (rooms 27200-27299).
Jan 26 21:34:14 2026 :: Resetting #273: Space Station Alpha (rooms 27300-27399).
Jan 26 21:34:14 2026 :: Resetting #274: Adria: Saint Brigid (rooms 27400-27499).
Jan 26 21:34:14 2026 :: Resetting #275: New Sparta (rooms 27500-27599).
Jan 26 21:34:14 2026 :: Resetting #276: New Sparta II (rooms 27600-27699).
Jan 26 21:34:14 2026 :: Resetting #277: Shire (rooms 27700-27799).
Jan 26 21:34:14 2026 :: Resetting #278: Oceania (rooms 27800-27899).
Jan 26 21:34:14 2026 :: Resetting #279: Notre Dame (rooms 27900-27999).
Jan 26 21:34:14 2026 :: Resetting #280: Living Motherboard (rooms 28000-28099).
Jan 26 21:34:14 2026 :: Resetting #281: Forest of Khanjar (rooms 28100-28199).
Jan 26 21:34:14 2026 :: Resetting #282: Infernal Pit of Kerjim (rooms 28200-28299).
Jan 26 21:34:14 2026 :: Resetting #283: Haunted House (rooms 28300-28399).
Jan 26 21:34:14 2026 :: Resetting #284: Ghenna (rooms 28400-28499).
Jan 26 21:34:14 2026 :: Resetting #285: Descent to Hell II (rooms 28500-28599).
Jan 26 21:34:14 2026 :: Resetting #286: Descent to Hell (rooms 28600-28699).
Jan 26 21:34:14 2026 :: Resetting #287: Ofingia and the Goblin Town (rooms 28700-28799).
Jan 26 21:34:14 2026 :: Resetting #288: Galaxy (rooms 28800-28899).
Jan 26 21:34:14 2026 :: Resetting #289: Werith's Wayhouse (rooms 28900-28999).
Jan 26 21:34:14 2026 :: Resetting #290: Lizard Lair Safari (rooms 29000-29099).
Jan 26 21:34:14 2026 :: Resetting #291: Black Forest (rooms 29100-29199).
Jan 26 21:34:14 2026 :: Resetting #292: Kerofk (rooms 29200-29299).
Jan 26 21:34:14 2026 :: Resetting #293: Kerofk II (rooms 29300-29399).
Jan 26 21:34:14 2026 :: Resetting #294: Trade Road (rooms 29400-29499).
Jan 26 21:34:14 2026 :: Resetting #295: Jungle (rooms 29500-29599).
Jan 26 21:34:14 2026 :: Resetting #296: Froboz Fun Factory (rooms 29600-29699).
Jan 26 21:34:14 2026 :: Resetting #298: Castle of Desire (rooms 29800-29899).
Jan 26 21:34:14 2026 :: Resetting #299: Abandoned Cathedral (rooms 29900-29999).
Jan 26 21:34:14 2026 :: Resetting #300: Ancalador (rooms 30000-30099).
Jan 26 21:34:14 2026 :: Resetting #301: Campus (rooms 30100-30199).
Jan 26 21:34:14 2026 :: Resetting #302: Campus II (rooms 30200-30299).
Jan 26 21:34:14 2026 :: Resetting #303: Campus III (rooms 30300-30399).
Jan 26 21:34:14 2026 :: Resetting #304: Temple of the Bull (rooms 30400-30499).
Jan 26 21:34:14 2026 :: Resetting #305: Chessboard (rooms 30500-30599).
Jan 26 21:34:14 2026 :: Resetting #306: Newbie Tree (rooms 30600-30699).
Jan 26 21:34:14 2026 :: Resetting #307: Castle (rooms 30700-30799).
Jan 26 21:34:14 2026 :: Resetting #308: Baron Cailveh (rooms 30800-30899).
Jan 26 21:34:14 2026 :: Resetting #309: Keep of Baron Westlawn (rooms 30900-30999).
Jan 26 21:34:14 2026 :: Resetting #310: Graye Area (rooms 31000-31099).
Jan 26 21:34:14 2026 :: Resetting #311: The Dragon's Teeth (rooms 31100-31199).
Jan 26 21:34:14 2026 :: Resetting #312: Leper Island (rooms 31200-31299).
Jan 26 21:34:14 2026 :: Resetting #313: Farmlands of Ofingia (rooms 31300-31399).
Jan 26 21:34:14 2026 :: Resetting #314: X'Raantra's Altar of Sacrifice (rooms 31400-31499).
Jan 26 21:34:14 2026 :: Resetting #315: McGintey Business District (rooms 31500-31599).
Jan 26 21:34:14 2026 :: Resetting #316: McGintey Guild Area (rooms 31600-31699).
Jan 26 21:34:14 2026 :: Resetting #317: Wharf (rooms 31700-31799).
Jan 26 21:34:14 2026 :: Resetting #318: Dock Area (rooms 31800-31899).
Jan 26 21:34:14 2026 :: Resetting #319: Yllythad Sea (rooms 31900-31999).
Jan 26 21:34:14 2026 :: Resetting #320: Yllythad Sea II (rooms 32000-32099).
Jan 26 21:34:14 2026 :: Resetting #321: Yllythad Sea III (rooms 32100-32199).
Jan 26 21:34:14 2026 :: Resetting #322: McGintey Bay (rooms 32200-32299).
Jan 26 21:34:14 2026 :: Resetting #323: Caverns of the Pale Man (rooms 32300-32399).
Jan 26 21:34:14 2026 :: Resetting #324: Army Encampment (rooms 32400-32499).
Jan 26 21:34:14 2026 :: Resetting #325: Revelry (rooms 32500-32599).
Jan 26 21:34:14 2026 :: Resetting #326: Army Perimeter (rooms 32600-32699).
Jan 26 21:34:14 2026 :: Resetting #343: God Complex (rooms 34300-34399).
Jan 26 21:34:14 2026 :: Resetting #345: Asylum for the Insane (rooms 34500-34599).
Jan 26 21:34:14 2026 :: Resetting #346: God Hall Ext 346 for God Hall Cmplx (rooms 34600-34699).
Jan 26 21:34:14 2026 :: Resetting #491: Grenzland Building (rooms 49100-49199).
Jan 26 21:34:14 2026 :: Resetting #492: The Library Maze (rooms 49200-49299).
Jan 26 21:34:14 2026 :: Resetting #555: Ultima (rooms 55500-55599).
Jan 26 21:34:14 2026 :: Resetting #556: Ultima II (rooms 55600-55699).
Jan 26 21:34:14 2026 :: Resetting #653: Apartment (rooms 65300-65399).
Jan 26 21:34:14 2026 :: Resetting #654: Subdivision (rooms 65400-65499).
Jan 26 21:34:14 2026 :: Boot db -- DONE.
Jan 26 21:34:14 2026 :: Signal trapping.
Jan 26 21:34:14 2026 :: Entering game loop.
Jan 26 21:34:14 2026 :: No connections. Going to sleep.
Jan 26 21:34:42 2026 :: SYSERR: Received SIGHUP, SIGINT, or SIGTERM. Shutting down...
Quick boot mode -- rent check supressed.
Using file descriptor for logging.
Improper shutdown of autorun detected, rotating syslogs before startup.

16
log/syslog.2 Normal file
View File

@@ -0,0 +1,16 @@
autorun starting game Mo 26. Jan 21:25:55 CET 2026
running bin/circle -q 4000
nohup: Eingabe wird ignoriert
No etc/config file, using defaults: No such file or directory
Jan 26 21:25:55 2026 :: Loading configuration.
Jan 26 21:25:55 2026 :: tbaMUD 2025
Jan 26 21:25:55 2026 :: Using lib as data directory.
Jan 26 21:25:55 2026 :: Running game on port 4000.
Jan 26 21:25:55 2026 :: Finding player limit.
Jan 26 21:25:55 2026 :: Setting player limit to 300 using rlimit.
Jan 26 21:25:55 2026 :: Opening mother connection.
Jan 26 21:25:55 2026 :: Binding to all IP interfaces on this host.
SYSERR: bind: Address already in use
Quick boot mode -- rent check supressed.
Using file descriptor for logging.
autoscript terminated Mo 26. Jan 21:25:55 CET 2026

269
log/syslog.4 Normal file
View File

@@ -0,0 +1,269 @@
autorun starting game Mo 26. Jan 21:34:49 CET 2026
running bin/circle -q 4000
nohup: Eingabe wird ignoriert
No etc/config file, using defaults: No such file or directory
Jan 26 21:34:49 2026 :: Loading configuration.
Jan 26 21:34:49 2026 :: tbaMUD 2025
Jan 26 21:34:49 2026 :: Using lib as data directory.
Jan 26 21:34:49 2026 :: Running game on port 4000.
Jan 26 21:34:49 2026 :: Finding player limit.
Jan 26 21:34:49 2026 :: Setting player limit to 300 using rlimit.
Jan 26 21:34:49 2026 :: Opening mother connection.
Jan 26 21:34:49 2026 :: Binding to all IP interfaces on this host.
Jan 26 21:34:49 2026 :: Boot db -- BEGIN.
Jan 26 21:34:49 2026 :: Resetting the game time:
Jan 26 21:34:49 2026 :: No time file 'etc/time' starting from the beginning.
Jan 26 21:34:49 2026 :: Current Gametime: 23H 29D 15M 1044Y.
Jan 26 21:34:49 2026 :: Initialize Global Lists
Jan 26 21:34:49 2026 :: Initializing Events
Jan 26 21:34:49 2026 :: Reading news, credits, help, ihelp, bground, info & motds.
Jan 26 21:34:49 2026 :: Loading spell definitions.
Jan 26 21:34:49 2026 :: Loading zone table.
Jan 26 21:34:49 2026 :: 192 zones, 13824 bytes.
Jan 26 21:34:49 2026 :: Loading triggers and generating index.
Jan 26 21:34:49 2026 :: Loading rooms.
Jan 26 21:34:49 2026 :: 12758 rooms, 2347472 bytes.
Jan 26 21:34:49 2026 :: Renumbering rooms.
Jan 26 21:34:49 2026 :: Checking start rooms.
Jan 26 21:34:49 2026 :: Loading mobs and generating index.
Jan 26 21:34:49 2026 :: 3712 mobs, 118784 bytes in index, 2138112 bytes in prototypes.
Jan 26 21:34:49 2026 :: Loading objs and generating index.
Jan 26 21:34:49 2026 :: 4774 objs, 152768 bytes in index, 1145760 bytes in prototypes.
Jan 26 21:34:49 2026 :: Renumbering zone table.
Jan 26 21:34:49 2026 :: SYSERR: zone file: Invalid vnum 4900, cmd disabled
Jan 26 21:34:49 2026 :: SYSERR: ...offending cmd: 'M' cmd in zone #491, line 5
Jan 26 21:34:49 2026 :: SYSERR: zone file: Invalid vnum 4901, cmd disabled
Jan 26 21:34:49 2026 :: SYSERR: ...offending cmd: 'M' cmd in zone #491, line 10
Jan 26 21:34:49 2026 :: Loading shops.
Jan 26 21:34:49 2026 :: Loading quests.
Jan 26 21:34:49 2026 :: 1 entries, 128 bytes.
Jan 26 21:34:49 2026 :: Loading help entries.
Jan 26 21:34:49 2026 :: 2640 entries, 84480 bytes.
Jan 26 21:34:49 2026 :: Generating player index.
Jan 26 21:34:49 2026 :: Loading fight messages.
Jan 26 21:34:49 2026 :: Loaded 37 Combat Messages...
Jan 26 21:34:49 2026 :: Loading social messages.
Jan 26 21:34:49 2026 :: Social table contains 490 socials.
Jan 26 21:34:49 2026 :: Building command list.
Jan 26 21:34:49 2026 :: Command info rebuilt, 766 total commands.
Jan 26 21:34:49 2026 :: Assigning function pointers:
Jan 26 21:34:49 2026 :: Mobiles.
Jan 26 21:34:49 2026 :: Shopkeepers.
Jan 26 21:34:49 2026 :: Objects.
Jan 26 21:34:49 2026 :: Rooms.
Jan 26 21:34:49 2026 :: Questmasters.
Jan 26 21:34:49 2026 :: Assigning spell and skill levels.
Jan 26 21:34:49 2026 :: Sorting command list and spells.
Jan 26 21:34:49 2026 :: Booting mail system.
Jan 26 21:34:49 2026 :: Mail file read -- 0 messages.
Jan 26 21:34:49 2026 :: Reading banned site and invalid-name list.
Jan 26 21:34:49 2026 :: Loading Ideas.
Jan 26 21:34:49 2026 :: Loading Bugs.
Jan 26 21:34:49 2026 :: Loading Typos.
Jan 26 21:34:49 2026 :: Booting houses.
Jan 26 21:34:49 2026 :: No houses to load. File 'etc/hcontrol' does not exist.
Jan 26 21:34:49 2026 :: Cleaning up last log.
Jan 26 21:34:49 2026 :: Resetting #0: The Builder Academy Zone (rooms 0-99).
Jan 26 21:34:49 2026 :: Resetting #1: Sanctus (rooms 100-199).
Jan 26 21:34:49 2026 :: Resetting #2: Sanctus II (rooms 200-299).
Jan 26 21:34:49 2026 :: Resetting #3: Sanctus III (rooms 300-399).
Jan 26 21:34:49 2026 :: Resetting #4: Rename (rooms 400-499).
Jan 26 21:34:49 2026 :: Resetting #5: Newbie Farm (rooms 500-599).
Jan 26 21:34:49 2026 :: Resetting #6: Sea of Souls (rooms 600-699).
Jan 26 21:34:49 2026 :: Resetting #7: Camelot (rooms 700-799).
Jan 26 21:34:49 2026 :: Resetting #9: River Island of Minos (rooms 900-999).
Jan 26 21:34:49 2026 :: Resetting #11: Frozen Castle (rooms 1100-1199).
Jan 26 21:34:49 2026 :: Resetting #12: God Complex Merged with 343 (rooms 1200-1299).
Jan 26 21:34:49 2026 :: Resetting #13: TBA Examples (rooms 1300-1399).
Jan 26 21:34:49 2026 :: Resetting #14: TBA Examples II (rooms 1400-1499).
Jan 26 21:34:49 2026 :: Resetting #15: Straight Path (rooms 1500-1599).
Jan 26 21:34:49 2026 :: Resetting #16: Camelot II (rooms 1600-1699).
Jan 26 21:34:49 2026 :: Resetting #17: Camelot III (rooms 1700-1799).
Jan 26 21:34:49 2026 :: Resetting #18: Nuclear Wasteland (rooms 1800-1899).
Jan 26 21:34:49 2026 :: Resetting #19: Spider Swamp (rooms 1900-1999).
Jan 26 21:34:49 2026 :: Resetting #20: Arena (rooms 2000-2099).
Jan 26 21:34:49 2026 :: Resetting #22: Tower of the Undead (rooms 2200-2299).
Jan 26 21:34:49 2026 :: Resetting #25: High Tower of Magic (rooms 2500-2599).
Jan 26 21:34:49 2026 :: Resetting #26: High Tower of Magic II (rooms 2600-2699).
Jan 26 21:34:49 2026 :: Resetting #27: Memlin Caverns (rooms 2700-2799).
Jan 26 21:34:49 2026 :: Resetting #28: Mudschool (rooms 2800-2899).
Jan 26 21:34:49 2026 :: Resetting #30: Northern Midgaard (rooms 3000-3099).
Jan 26 21:34:49 2026 :: Resetting #31: Southern Midgaard (rooms 3100-3199).
Jan 26 21:34:49 2026 :: Resetting #32: Midgaard (rooms 3200-3299).
Jan 26 21:34:49 2026 :: Resetting #33: Three of Swords (rooms 3300-3399).
Jan 26 21:34:49 2026 :: Resetting #35: Miden'Nir (rooms 3500-3599).
Jan 26 21:34:49 2026 :: Resetting #36: Chessboard of Midgaard (rooms 3600-3699).
Jan 26 21:34:49 2026 :: Resetting #37: Capital Sewer System (rooms 3700-3799).
Jan 26 21:34:49 2026 :: Resetting #38: Capital Sewer System II (rooms 3800-3899).
Jan 26 21:34:49 2026 :: Resetting #39: Haven (rooms 3900-3999).
Jan 26 21:34:49 2026 :: Resetting #40: Mines of Moria (rooms 4000-4099).
Jan 26 21:34:49 2026 :: Resetting #41: Mines of Moria (rooms 4100-4199).
Jan 26 21:34:49 2026 :: Resetting #42: Dragon Chasm (rooms 4200-4299).
Jan 26 21:34:49 2026 :: Resetting #43: Arctic Zone (rooms 4300-4399).
Jan 26 21:34:49 2026 :: Resetting #44: Orc Camp (rooms 4400-4499).
Jan 26 21:34:49 2026 :: Resetting #45: Woodland Monastery (rooms 4500-4599).
Jan 26 21:34:49 2026 :: Resetting #46: Ant Hill (rooms 4600-4699).
Jan 26 21:34:49 2026 :: Resetting #49: Grenzland (rooms 4900-4999).
Jan 26 21:34:49 2026 :: Resetting #50: Great Eastern Desert (rooms 5000-5099).
Jan 26 21:34:49 2026 :: Resetting #51: Drow City (rooms 5100-5199).
Jan 26 21:34:49 2026 :: Resetting #52: City of Thalos (rooms 5200-5299).
Jan 26 21:34:49 2026 :: Resetting #53: Great Pyramid (rooms 5300-5399).
Jan 26 21:34:49 2026 :: Resetting #54: New Thalos (rooms 5400-5499).
Jan 26 21:34:49 2026 :: Resetting #55: New Thalos II (rooms 5500-5599).
Jan 26 21:34:49 2026 :: Resetting #56: New Thalos Wilderness (rooms 5600-5699).
Jan 26 21:34:49 2026 :: Resetting #57: Zodiac (rooms 5700-5799).
Jan 26 21:34:49 2026 :: Resetting #60: Haon-Dor, Light Forest (rooms 6000-6099).
Jan 26 21:34:49 2026 :: Resetting #61: Haon-Dor, Light Forest II (rooms 6100-6199).
Jan 26 21:34:49 2026 :: Resetting #62: Orc Enclave (rooms 6200-6299).
Jan 26 21:34:49 2026 :: Resetting #63: Arachnos (rooms 6300-6399).
Jan 26 21:34:49 2026 :: Resetting #64: Rand's Tower (rooms 6400-6499).
Jan 26 21:34:49 2026 :: Resetting #65: Dwarven Kingdom (rooms 6500-6599).
Jan 26 21:34:49 2026 :: Resetting #70: Sewer, First Level (rooms 7000-7099).
Jan 26 21:34:49 2026 :: Resetting #71: Second Sewer (rooms 7100-7199).
Jan 26 21:34:49 2026 :: Resetting #72: Sewer Maze (rooms 7200-7299).
Jan 26 21:34:49 2026 :: Resetting #73: Tunnels in the Sewer (rooms 7300-7399).
Jan 26 21:34:49 2026 :: Resetting #74: Newbie Graveyard (rooms 7400-7499).
Jan 26 21:34:49 2026 :: Resetting #75: Zamba (rooms 7500-7599).
Jan 26 21:34:49 2026 :: Resetting #78: Gideon (rooms 7800-7899).
Jan 26 21:34:49 2026 :: Resetting #79: Redferne's Residence (rooms 7900-7999).
Jan 26 21:34:49 2026 :: Resetting #83: Glumgold's Sea (rooms 8300-8399).
Jan 26 21:34:49 2026 :: Resetting #86: Duke Kalithorn's Keep (rooms 8600-8699).
Jan 26 21:34:49 2026 :: Resetting #90: Oasis (rooms 9000-9099).
Jan 26 21:34:49 2026 :: Resetting #96: Domiae (rooms 9600-9699).
Jan 26 21:34:49 2026 :: Resetting #100: Northern Highway (rooms 10000-10099).
Jan 26 21:34:49 2026 :: Resetting #101: South Road (rooms 10100-10199).
Jan 26 21:34:49 2026 :: Resetting #103: DBZ World (rooms 10300-10399).
Jan 26 21:34:49 2026 :: Resetting #104: Land of Orchan (rooms 10400-10499).
Jan 26 21:34:49 2026 :: Resetting #106: Elcardo (rooms 10600-10699).
Jan 26 21:34:49 2026 :: Resetting #107: Realms of Iuel (rooms 10700-10799).
Jan 26 21:34:49 2026 :: Resetting #115: Monestary Omega (rooms 11500-11599).
Jan 26 21:34:49 2026 :: Resetting #117: Los Torres (rooms 11700-11799).
Jan 26 21:34:49 2026 :: Resetting #118: The Dollhouse (rooms 11800-11899).
Jan 26 21:34:49 2026 :: Resetting #120: Rome (rooms 12000-12099).
Jan 26 21:34:49 2026 :: Resetting #125: Hannah (rooms 12500-12599).
Jan 26 21:34:49 2026 :: Resetting #130: Mist Maze (rooms 13000-13099).
Jan 26 21:34:49 2026 :: Resetting #140: Wyvern City (rooms 14000-14099).
Jan 26 21:34:49 2026 :: Resetting #150: King Welmar's Castle (rooms 15000-15099).
Jan 26 21:34:49 2026 :: Resetting #169: Gibberling Caves (rooms 16900-16999).
Jan 26 21:34:49 2026 :: Resetting #175: Cardinal Wizards (rooms 17500-17599).
Jan 26 21:34:49 2026 :: Resetting #186: Newbie Zone (rooms 18600-18699).
Jan 26 21:34:49 2026 :: Resetting #187: Circus (rooms 18700-18799).
Jan 26 21:34:49 2026 :: Resetting #200: Western Highway (rooms 20000-20099).
Jan 26 21:34:49 2026 :: Resetting #201: Sapphire Islands (rooms 20100-20199).
Jan 26 21:34:49 2026 :: Resetting #211: Tarot (rooms 21100-21199).
Jan 26 21:34:49 2026 :: Resetting #220: The Enchanted Kitchen (rooms 22000-22099).
Jan 26 21:34:49 2026 :: Resetting #232: Terringham (rooms 23200-23299).
Jan 26 21:34:49 2026 :: Resetting #233: Dragon Plains (rooms 23300-23399).
Jan 26 21:34:49 2026 :: Resetting #234: Newbie School (rooms 23400-23499).
Jan 26 21:34:49 2026 :: Resetting #235: Dwarven Mines (rooms 23500-23599).
Jan 26 21:34:49 2026 :: Resetting #236: Aldin (rooms 23600-23699).
Jan 26 21:34:49 2026 :: Resetting #237: Dwarven Trade Route (rooms 23700-23799).
Jan 26 21:34:49 2026 :: Resetting #238: Crystal Castle (rooms 23800-23899).
Jan 26 21:34:49 2026 :: Resetting #239: South Pass (rooms 23900-23999).
Jan 26 21:34:49 2026 :: Resetting #240: Dun Maura (rooms 24000-24099).
Jan 26 21:34:49 2026 :: Resetting #241: Starship Enterprise (rooms 24100-24199).
Jan 26 21:34:49 2026 :: Resetting #242: New Southern Midgaard (rooms 24200-24299).
Jan 26 21:34:49 2026 :: Resetting #243: Snowy Valley (rooms 24300-24399).
Jan 26 21:34:49 2026 :: Resetting #244: Cooland Prison (rooms 24400-24499).
Jan 26 21:34:49 2026 :: Resetting #245: The Nether (rooms 24500-24599).
Jan 26 21:34:49 2026 :: Resetting #246: The Nether II (rooms 24600-24699).
Jan 26 21:34:49 2026 :: Resetting #247: Graveyard (rooms 24700-24799).
Jan 26 21:34:49 2026 :: Resetting #248: Elven Woods (rooms 24800-24899).
Jan 26 21:34:49 2026 :: Resetting #249: Jedi Clan House (rooms 24900-24999).
Jan 26 21:34:49 2026 :: Resetting #250: DragonSpyre (rooms 25000-25099).
Jan 26 21:34:49 2026 :: Resetting #251: Ape Village (rooms 25100-25199).
Jan 26 21:34:49 2026 :: Resetting #252: Castle of the Vampyre (rooms 25200-25299).
Jan 26 21:34:49 2026 :: Resetting #253: Windmill (rooms 25300-25399).
Jan 26 21:34:49 2026 :: Resetting #254: Mordecai's Village (rooms 25400-25499).
Jan 26 21:34:49 2026 :: Resetting #255: Shipwreck (rooms 25500-25599).
Jan 26 21:34:49 2026 :: Resetting #256: Lord's Keep (rooms 25600-25699).
Jan 26 21:34:49 2026 :: Resetting #257: Jareth Main City (rooms 25700-25799).
Jan 26 21:34:49 2026 :: Resetting #258: Light Forest (rooms 25800-25899).
Jan 26 21:34:49 2026 :: Resetting #259: Haunted Mansion (rooms 25900-25999).
Jan 26 21:34:49 2026 :: Resetting #260: Grasslands (rooms 26000-26099).
Jan 26 21:34:49 2026 :: Resetting #261: Inna & Igor's Castle (rooms 26100-26199).
Jan 26 21:34:49 2026 :: Resetting #262: Forest Trails (rooms 26200-26299).
Jan 26 21:34:49 2026 :: Resetting #263: Farmlands (rooms 26300-26399).
Jan 26 21:34:49 2026 :: Resetting #264: Banshide (rooms 26400-26499).
Jan 26 21:34:49 2026 :: Resetting #265: Beach & Lighthouse (rooms 26500-26599).
Jan 26 21:34:49 2026 :: Resetting #266: Realm of Lord Ankou (rooms 26600-26699).
Jan 26 21:34:49 2026 :: Resetting #267: Vice Island (rooms 26700-26799).
Jan 26 21:34:49 2026 :: Resetting #268: Vice Island II (rooms 26800-26899).
Jan 26 21:34:49 2026 :: Resetting #269: Southern Desert (rooms 26900-26999).
Jan 26 21:34:49 2026 :: Resetting #270: Wasteland (rooms 27000-27099).
Jan 26 21:34:49 2026 :: Resetting #271: Sundhaven (rooms 27100-27199).
Jan 26 21:34:49 2026 :: Resetting #272: Sundhaven II (rooms 27200-27299).
Jan 26 21:34:49 2026 :: Resetting #273: Space Station Alpha (rooms 27300-27399).
Jan 26 21:34:49 2026 :: Resetting #274: Adria: Saint Brigid (rooms 27400-27499).
Jan 26 21:34:49 2026 :: Resetting #275: New Sparta (rooms 27500-27599).
Jan 26 21:34:49 2026 :: Resetting #276: New Sparta II (rooms 27600-27699).
Jan 26 21:34:49 2026 :: Resetting #277: Shire (rooms 27700-27799).
Jan 26 21:34:49 2026 :: Resetting #278: Oceania (rooms 27800-27899).
Jan 26 21:34:49 2026 :: Resetting #279: Notre Dame (rooms 27900-27999).
Jan 26 21:34:49 2026 :: Resetting #280: Living Motherboard (rooms 28000-28099).
Jan 26 21:34:49 2026 :: Resetting #281: Forest of Khanjar (rooms 28100-28199).
Jan 26 21:34:49 2026 :: Resetting #282: Infernal Pit of Kerjim (rooms 28200-28299).
Jan 26 21:34:49 2026 :: Resetting #283: Haunted House (rooms 28300-28399).
Jan 26 21:34:49 2026 :: Resetting #284: Ghenna (rooms 28400-28499).
Jan 26 21:34:49 2026 :: Resetting #285: Descent to Hell II (rooms 28500-28599).
Jan 26 21:34:49 2026 :: Resetting #286: Descent to Hell (rooms 28600-28699).
Jan 26 21:34:49 2026 :: Resetting #287: Ofingia and the Goblin Town (rooms 28700-28799).
Jan 26 21:34:49 2026 :: Resetting #288: Galaxy (rooms 28800-28899).
Jan 26 21:34:49 2026 :: Resetting #289: Werith's Wayhouse (rooms 28900-28999).
Jan 26 21:34:49 2026 :: Resetting #290: Lizard Lair Safari (rooms 29000-29099).
Jan 26 21:34:49 2026 :: Resetting #291: Black Forest (rooms 29100-29199).
Jan 26 21:34:49 2026 :: Resetting #292: Kerofk (rooms 29200-29299).
Jan 26 21:34:49 2026 :: Resetting #293: Kerofk II (rooms 29300-29399).
Jan 26 21:34:49 2026 :: Resetting #294: Trade Road (rooms 29400-29499).
Jan 26 21:34:49 2026 :: Resetting #295: Jungle (rooms 29500-29599).
Jan 26 21:34:49 2026 :: Resetting #296: Froboz Fun Factory (rooms 29600-29699).
Jan 26 21:34:49 2026 :: Resetting #298: Castle of Desire (rooms 29800-29899).
Jan 26 21:34:49 2026 :: Resetting #299: Abandoned Cathedral (rooms 29900-29999).
Jan 26 21:34:49 2026 :: Resetting #300: Ancalador (rooms 30000-30099).
Jan 26 21:34:49 2026 :: Resetting #301: Campus (rooms 30100-30199).
Jan 26 21:34:49 2026 :: Resetting #302: Campus II (rooms 30200-30299).
Jan 26 21:34:49 2026 :: Resetting #303: Campus III (rooms 30300-30399).
Jan 26 21:34:49 2026 :: Resetting #304: Temple of the Bull (rooms 30400-30499).
Jan 26 21:34:49 2026 :: Resetting #305: Chessboard (rooms 30500-30599).
Jan 26 21:34:49 2026 :: Resetting #306: Newbie Tree (rooms 30600-30699).
Jan 26 21:34:49 2026 :: Resetting #307: Castle (rooms 30700-30799).
Jan 26 21:34:49 2026 :: Resetting #308: Baron Cailveh (rooms 30800-30899).
Jan 26 21:34:49 2026 :: Resetting #309: Keep of Baron Westlawn (rooms 30900-30999).
Jan 26 21:34:49 2026 :: Resetting #310: Graye Area (rooms 31000-31099).
Jan 26 21:34:49 2026 :: Resetting #311: The Dragon's Teeth (rooms 31100-31199).
Jan 26 21:34:49 2026 :: Resetting #312: Leper Island (rooms 31200-31299).
Jan 26 21:34:49 2026 :: Resetting #313: Farmlands of Ofingia (rooms 31300-31399).
Jan 26 21:34:49 2026 :: Resetting #314: X'Raantra's Altar of Sacrifice (rooms 31400-31499).
Jan 26 21:34:49 2026 :: Resetting #315: McGintey Business District (rooms 31500-31599).
Jan 26 21:34:49 2026 :: Resetting #316: McGintey Guild Area (rooms 31600-31699).
Jan 26 21:34:49 2026 :: Resetting #317: Wharf (rooms 31700-31799).
Jan 26 21:34:49 2026 :: Resetting #318: Dock Area (rooms 31800-31899).
Jan 26 21:34:49 2026 :: Resetting #319: Yllythad Sea (rooms 31900-31999).
Jan 26 21:34:49 2026 :: Resetting #320: Yllythad Sea II (rooms 32000-32099).
Jan 26 21:34:49 2026 :: Resetting #321: Yllythad Sea III (rooms 32100-32199).
Jan 26 21:34:49 2026 :: Resetting #322: McGintey Bay (rooms 32200-32299).
Jan 26 21:34:49 2026 :: Resetting #323: Caverns of the Pale Man (rooms 32300-32399).
Jan 26 21:34:49 2026 :: Resetting #324: Army Encampment (rooms 32400-32499).
Jan 26 21:34:49 2026 :: Resetting #325: Revelry (rooms 32500-32599).
Jan 26 21:34:49 2026 :: Resetting #326: Army Perimeter (rooms 32600-32699).
Jan 26 21:34:49 2026 :: Resetting #343: God Complex (rooms 34300-34399).
Jan 26 21:34:49 2026 :: Resetting #345: Asylum for the Insane (rooms 34500-34599).
Jan 26 21:34:49 2026 :: Resetting #346: God Hall Ext 346 for God Hall Cmplx (rooms 34600-34699).
Jan 26 21:34:49 2026 :: Resetting #491: Grenzland Building (rooms 49100-49199).
Jan 26 21:34:49 2026 :: Resetting #492: The Library Maze (rooms 49200-49299).
Jan 26 21:34:49 2026 :: Resetting #555: Ultima (rooms 55500-55599).
Jan 26 21:34:49 2026 :: Resetting #556: Ultima II (rooms 55600-55699).
Jan 26 21:34:49 2026 :: Resetting #653: Apartment (rooms 65300-65399).
Jan 26 21:34:49 2026 :: Resetting #654: Subdivision (rooms 65400-65499).
Jan 26 21:34:49 2026 :: Boot db -- DONE.
Jan 26 21:34:49 2026 :: Signal trapping.
Jan 26 21:34:49 2026 :: Entering game loop.
Jan 26 21:34:49 2026 :: No connections. Going to sleep.
Jan 26 21:36:26 2026 :: New connection. Waking up.
Jan 26 21:36:53 2026 :: Karrn [localhost] new player.
Jan 26 21:37:11 2026 :: Karrn had no variable file
Jan 26 21:37:11 2026 :: Karrn entering game with no equipment.
Jan 26 21:38:19 2026 :: SYSERR: Received SIGHUP, SIGINT, or SIGTERM. Shutting down...
Quick boot mode -- rent check supressed.
Using file descriptor for logging.
Improper shutdown of autorun detected, rotating syslogs before startup.

2
log/trigger Normal file
View File

@@ -0,0 +1,2 @@
Jan 26 21:34:13 2026 :: Loading triggers and generating index.
Jan 26 21:34:49 2026 :: Loading triggers and generating index.

0
log/usage Normal file
View File

81
power_curve.ipynb Normal file

File diff suppressed because one or more lines are too long

View File

@@ -150,39 +150,7 @@ ACMD(do_tell)
if (!*buf || !*buf2)
send_to_char(ch, "Who do you wish to tell what??\r\n");
else if (!strcmp(buf, "m-w")) {
#ifdef CIRCLE_WINDOWS
/* getpid() is not portable */
send_to_char(ch, "Sorry, that is not available in the windows port.\r\n");
#else /* all other configurations */
char word[MAX_INPUT_LENGTH], *p, *q;
if (last_webster_teller != -1L) {
if (GET_IDNUM(ch) == last_webster_teller) {
send_to_char(ch, "You are still waiting for a response.\r\n");
return;
} else {
send_to_char(ch, "Hold on, m-w is busy. Try again in a couple of seconds.\r\n");
return;
}
}
/* Only a-z and +/- allowed. */
for (p = buf2, q = word; *p ; p++)
if ((LOWER(*p) <= 'z' && LOWER(*p) >= 'a') || (*p == '+') || (*p == '-'))
*q++ = *p;
*q = '\0';
if (!*word) {
send_to_char(ch, "Sorry, only letters and +/- are allowed characters.\r\n");
return;
}
snprintf(buf, sizeof(buf), "../bin/webster %s %d &", word, (int) getpid());
last_webster_teller = GET_IDNUM(ch);
send_to_char(ch, "You look up '%s' in Merriam-Webster.\r\n", word);
#endif /* platform specific part */
} else if (GET_LEVEL(ch) < LVL_IMMORT && !(vict = get_player_vis(ch, buf, NULL, FIND_CHAR_WORLD)))
else if (GET_LEVEL(ch) < LVL_IMMORT && !(vict = get_player_vis(ch, buf, NULL, FIND_CHAR_WORLD)))
send_to_char(ch, "%s", CONFIG_NOPERSON);
else if (GET_LEVEL(ch) >= LVL_IMMORT && !(vict = get_char_vis(ch, buf, NULL, FIND_CHAR_WORLD)))
send_to_char(ch, "%s", CONFIG_NOPERSON);

View File

@@ -46,10 +46,10 @@ static void list_obj_to_char(struct obj_data *list, struct char_data *ch, int mo
static void show_obj_to_char(struct obj_data *obj, struct char_data *ch, int mode);
static void show_obj_modifiers(struct obj_data *obj, struct char_data *ch);
/* do_where utility functions */
static void perform_immort_where(struct char_data *ch, char *arg);
static void perform_immort_where(char_data *ch, const char *arg);
static void perform_mortal_where(struct char_data *ch, char *arg);
static void print_object_location(int num, struct obj_data *obj, struct char_data *ch, int recur);
static size_t print_object_location(int num, const obj_data *obj, const char_data *ch,
char *buf, size_t len, size_t buf_size, int recur);
/* Subcommands */
/* For show_obj_to_char 'mode'. /-- arbitrary */
#define SHOW_OBJ_LONG 0
@@ -1603,41 +1603,71 @@ static void perform_mortal_where(struct char_data *ch, char *arg)
}
}
static void print_object_location(int num, struct obj_data *obj, struct char_data *ch,
int recur)
static size_t print_object_location(const int num, const obj_data *obj, const char_data *ch, // NOLINT(*-no-recursion)
char *buf, size_t len, const size_t buf_size, const int recur)
{
size_t nlen = 0;
if (num > 0)
send_to_char(ch, "O%3d. %-25s%s - ", num, obj->short_description, QNRM);
nlen = snprintf(buf + len, buf_size - len, "O%4d. %-25s%s - ", num, obj->short_description, QNRM);
else
send_to_char(ch, "%33s", " - ");
nlen = snprintf(buf + len, buf_size - len, "%37s", " - ");
len += nlen;
nlen = 0;
if (len > buf_size)
return len; // let the caller know we overflowed
if (SCRIPT(obj)) {
if (!TRIGGERS(SCRIPT(obj))->next)
send_to_char(ch, "[T%d] ", GET_TRIG_VNUM(TRIGGERS(SCRIPT(obj))));
nlen = snprintf(buf + len, buf_size - len, "[T%d] ", GET_TRIG_VNUM(TRIGGERS(SCRIPT(obj))));
else
send_to_char(ch, "[TRIGS] ");
nlen = snprintf(buf + len, buf_size - len, "[TRIGS] ");
}
len += nlen;
if (len > buf_size)
return len; // let the caller know we overflowed
if (IN_ROOM(obj) != NOWHERE)
send_to_char(ch, "[%5d] %s%s\r\n", GET_ROOM_VNUM(IN_ROOM(obj)), world[IN_ROOM(obj)].name, QNRM);
else if (obj->carried_by)
send_to_char(ch, "carried by %s%s\r\n", PERS(obj->carried_by, ch), QNRM);
else if (obj->worn_by)
send_to_char(ch, "worn by %s%s\r\n", PERS(obj->worn_by, ch), QNRM);
else if (obj->in_obj) {
send_to_char(ch, "inside %s%s%s\r\n", obj->in_obj->short_description, QNRM, (recur ? ", which is" : " "));
if (recur)
print_object_location(0, obj->in_obj, ch, recur);
nlen = snprintf(buf + len, buf_size - len, "[%5d] %s%s\r\n", GET_ROOM_VNUM(IN_ROOM(obj)), world[IN_ROOM(obj)].name, QNRM);
else if (obj->carried_by) {
if (PRF_FLAGGED(ch, PRF_SHOWVNUMS))
nlen = snprintf(buf + len, buf_size - len, "carried by [%5d] %s%s\r\n", GET_MOB_VNUM(obj->carried_by), PERS(obj->carried_by, ch), QNRM);
else
nlen = snprintf(buf + len, buf_size - len, "carried by %s%s\r\n", PERS(obj->carried_by, ch), QNRM);
if (PRF_FLAGGED(ch, PRF_VERBOSE) && IN_ROOM(obj->carried_by) != NOWHERE && len + nlen < buf_size)
nlen += snprintf(buf + len + nlen, buf_size - len - nlen, "%37sin [%5d] %s%s\r\n", " - ", GET_ROOM_VNUM(IN_ROOM(obj->carried_by)), world[IN_ROOM(obj->carried_by)].name, QNRM);
} else if (obj->worn_by) {
if (PRF_FLAGGED(ch, PRF_SHOWVNUMS))
nlen = snprintf(buf + len, buf_size - len, "worn by [%5d] %s%s\r\n", GET_MOB_VNUM(obj->worn_by), PERS(obj->worn_by, ch), QNRM);
else
nlen = snprintf(buf + len, buf_size - len, "worn by %s%s\r\n", PERS(obj->worn_by, ch), QNRM);
if (PRF_FLAGGED(ch, PRF_VERBOSE) && IN_ROOM(obj->worn_by) != NOWHERE && len + nlen < buf_size)
nlen += snprintf(buf + len + nlen, buf_size - len - nlen, "%37sin [%5d] %s%s\r\n", " - ", GET_ROOM_VNUM(IN_ROOM(obj->worn_by)), world[IN_ROOM(obj->worn_by)].name, QNRM);
} else if (obj->in_obj) {
nlen = snprintf(buf + len, buf_size - len, "inside %s%s%s\r\n", obj->in_obj->short_description, QNRM, (recur ? ", which is" : " "));
if (recur && nlen + len < buf_size) {
len += nlen;
nlen = 0;
len = print_object_location(0, obj->in_obj, ch, buf, len, buf_size, recur);
}
} else
send_to_char(ch, "in an unknown location\r\n");
nlen = snprintf(buf + len, buf_size - len, "in an unknown location\r\n");
len += nlen;
return len;
}
static void perform_immort_where(struct char_data *ch, char *arg)
static void perform_immort_where(char_data *ch, const char *arg)
{
struct char_data *i;
struct obj_data *k;
char_data *i;
obj_data *k;
struct descriptor_data *d;
int num = 0, found = 0;
int num = 0, found = FALSE; // "num" here needs to match the lookup in do_stat, so "stat 4.sword" finds the right one
const char *error_message = "\r\n***OVERFLOW***\r\n";
char buf[MAX_STRING_LENGTH];
size_t len = 0, nlen = 0;
const size_t buf_size = sizeof(buf) - strlen(error_message) - 1;
if (!*arg) {
send_to_char(ch, "Players Room Location Zone\r\n");
@@ -1658,26 +1688,64 @@ static void perform_immort_where(struct char_data *ch, char *arg)
}
}
} else {
if (PRF_FLAGGED(ch, PRF_VERBOSE))
len = snprintf(buf, buf_size, " ### Mob name - Room # Room name\r\n");
for (i = character_list; i; i = i->next)
if (CAN_SEE(ch, i) && IN_ROOM(i) != NOWHERE && isname(arg, i->player.name)) {
found = 1;
send_to_char(ch, "M%3d. %-25s%s - [%5d] %-25s%s", ++num, GET_NAME(i), QNRM,
nlen = snprintf(buf + len, buf_size - len, "M%4d. %-25s%s - [%5d] %-25s%s", ++num, GET_NAME(i), QNRM,
GET_ROOM_VNUM(IN_ROOM(i)), world[IN_ROOM(i)].name, QNRM);
if (len + nlen >= buf_size) {
len += snprintf(buf + len, buf_size - len, "%s", error_message);
break;
}
len += nlen;
if (SCRIPT(i) && TRIGGERS(SCRIPT(i))) {
if (!TRIGGERS(SCRIPT(i))->next)
send_to_char(ch, "[T%d] ", GET_TRIG_VNUM(TRIGGERS(SCRIPT(i))));
nlen = snprintf(buf + len, buf_size - len, "[T%d]", GET_TRIG_VNUM(TRIGGERS(SCRIPT(i))));
else
send_to_char(ch, "[TRIGS] ");
nlen = snprintf(buf + len, buf_size - len, "[TRIGS]");
if (len + nlen >= buf_size) {
snprintf(buf + len, buf_size - len, "%s", error_message);
break;
}
len += nlen;
}
send_to_char(ch, "%s\r\n", QNRM);
nlen = snprintf(buf + len, buf_size - len, "%s\r\n", QNRM);
if (len + nlen >= buf_size) {
snprintf(buf + len, buf_size - len, "%s", error_message);
break;
}
len += nlen;
}
for (num = 0, k = object_list; k; k = k->next)
if (CAN_SEE_OBJ(ch, k) && isname(arg, k->name)) {
found = 1;
print_object_location(++num, k, ch, TRUE);
if (PRF_FLAGGED(ch, PRF_VERBOSE) && len < buf_size) {
nlen = snprintf(buf + len, buf_size - len, " ### Object name Location\r\n");
if (len + nlen >= buf_size) {
snprintf(buf + len, buf_size - len, "%s", error_message);
}
len += nlen;
}
if (len < buf_size) {
for (k = object_list; k; k = k->next) {
if (CAN_SEE_OBJ(ch, k) && isname(arg, k->name)) {
found = 1;
len = print_object_location(++num, k, ch, buf, len, buf_size, TRUE);
if (len >= buf_size) {
snprintf(buf + buf_size, sizeof(buf) - buf_size, "%s", error_message);
break;
}
}
}
}
if (!found)
send_to_char(ch, "Couldn't find any such thing.\r\n");
else
page_string(ch->desc, buf, TRUE);
}
}
@@ -1937,6 +2005,9 @@ ACMD(do_toggle)
{"pagelength", 0, 0, "\n", "\n"},
{"screenwidth", 0, 0, "\n", "\n"},
{"color", 0, 0, "\n", "\n"},
{"verbose", PRF_VERBOSE, LVL_IMMORT,
"You will no longer see verbose output in listings.\n",
"You will now see verbose listings.\n"},
{"\n", 0, -1, "\n", "\n"} /* must be last */
};
@@ -1950,7 +2021,8 @@ ACMD(do_toggle)
if (!GET_WIMP_LEV(ch))
strcpy(buf2, "OFF"); /* strcpy: OK */
else
sprintf(buf2, "%-3.3d", GET_WIMP_LEV(ch)); /* sprintf: OK */
snprintf(buf2, sizeof(buf2), "%-3.3d", GET_WIMP_LEV(ch)); /* thanks to Ironfist for the fix for the buffer overrun here */
if (GET_LEVEL(ch) == LVL_IMPL) {
send_to_char(ch,
@@ -1970,7 +2042,8 @@ ACMD(do_toggle)
" NoHassle: %-3s "
" Holylight: %-3s "
" ShowVnums: %-3s\r\n"
" Syslog: %-3s%s ",
" Syslog: %-3s "
" Verbose: %-3s%s ",
ONOFF(PRF_FLAGGED(ch, PRF_BUILDWALK)),
ONOFF(PRF_FLAGGED(ch, PRF_NOWIZ)),
@@ -1979,6 +2052,7 @@ ACMD(do_toggle)
ONOFF(PRF_FLAGGED(ch, PRF_HOLYLIGHT)),
ONOFF(PRF_FLAGGED(ch, PRF_SHOWVNUMS)),
types[(PRF_FLAGGED(ch, PRF_LOG1) ? 1 : 0) + (PRF_FLAGGED(ch, PRF_LOG2) ? 2 : 0)],
ONOFF(PRF_FLAGGED(ch, PRF_VERBOSE)),
GET_LEVEL(ch) == LVL_IMPL ? "" : "\r\n");
}
if (GET_LEVEL(ch) >= LVL_IMPL) {

View File

@@ -785,6 +785,9 @@ void name_from_drinkcon(struct obj_data *obj)
if (!obj || (GET_OBJ_TYPE(obj) != ITEM_DRINKCON && GET_OBJ_TYPE(obj) != ITEM_FOUNTAIN))
return;
if (obj->name == obj_proto[GET_OBJ_RNUM(obj)].name)
obj->name = strdup(obj_proto[GET_OBJ_RNUM(obj)].name);
liqname = drinknames[GET_OBJ_VAL(obj, 2)];
remove_from_string(obj->name, liqname);

View File

@@ -53,6 +53,7 @@ struct board_info_type board_info[NUM_OF_BOARDS] = {
{1226, 0, 0, LVL_IMPL, LIB_ETC "board.builder", 0},
{1227, 0, 0, LVL_IMPL, LIB_ETC "board.staff", 0},
{1228, 0, 0, LVL_IMPL, LIB_ETC "board.advertising", 0},
{4900, 0, 0, LVL_IMMORT, LIB_ETC "board.grenzland", 0},
};
/* local (file scope) global variables */

View File

@@ -13,7 +13,7 @@
#ifndef _BOARDS_H_
#define _BOARDS_H_
#define NUM_OF_BOARDS 7 /* change if needed! */
#define NUM_OF_BOARDS 8 /* change if needed! */
#define MAX_BOARD_MESSAGES 60 /* arbitrary -- change if needed */
#define MAX_MESSAGE_LENGTH 4096 /* arbitrary -- change if needed */

View File

@@ -104,8 +104,7 @@ unsigned long pulse = 0; /* number of pulses since game start */
ush_int port;
socket_t mother_desc;
int next_tick = SECS_PER_MUD_HOUR; /* Tick countdown */
/* used with do_tell and handle_webster_file utility */
long last_webster_teller = -1L;
/* static local global variable declarations (current file scope only) */
static struct txt_block *bufpool = 0; /* pool of large output buffers */
@@ -113,14 +112,11 @@ static int max_players = 0; /* max descriptors available */
static int tics_passed = 0; /* for extern checkpointing */
static struct timeval null_time; /* zero-valued time structure */
static byte reread_wizlist; /* signal: SIGUSR1 */
/* normally signal SIGUSR2, currently orphaned in favor of Webster dictionary
* lookup
static byte emergency_unban;
*/
static byte emergency_unban; /* signal: SIGUSR2 */
static int dg_act_check; /* toggle for act_trigger */
static bool fCopyOver; /* Are we booting in copyover mode? */
static char *last_act_message = NULL;
static byte webster_file_ready = FALSE;/* signal: SIGUSR2 */
/* static local function prototypes (current file scope only) */
static RETSIGTYPE reread_wizlists(int sig);
@@ -160,9 +156,6 @@ static int open_logfile(const char *filename, FILE *stderr_fp);
#if defined(POSIX)
static sigfunc *my_signal(int signo, sigfunc *func);
#endif
/* Webster Dictionary Lookup functions */
static RETSIGTYPE websterlink(int sig);
static void handle_webster_file(void);
static void msdp_update(void); /* KaVir plugin*/
@@ -958,7 +951,7 @@ void game_loop(socket_t local_mother_desc)
mudlog(CMP, LVL_IMMORT, TRUE, "Signal received - rereading wizlists.");
reboot_wizlists();
}
/* Orphaned right now as signal trapping is used for Webster lookup
if (emergency_unban) {
emergency_unban = FALSE;
mudlog(BRF, LVL_IMMORT, TRUE, "Received SIGUSR2 - completely unrestricting game (emergent)");
@@ -966,11 +959,7 @@ void game_loop(socket_t local_mother_desc)
circle_restrict = 0;
num_invalid = 0;
}
*/
if (webster_file_ready) {
webster_file_ready = FALSE;
handle_webster_file();
}
#ifdef CIRCLE_UNIX
/* Update tics_passed for deadlock protection (UNIX only) */
@@ -2232,18 +2221,10 @@ static RETSIGTYPE reread_wizlists(int sig)
reread_wizlist = TRUE;
}
/* Orphaned right now in place of Webster ...
static RETSIGTYPE unrestrict_game(int sig)
{
emergency_unban = TRUE;
}
*/
static RETSIGTYPE websterlink(int sig)
{
webster_file_ready = TRUE;
}
#ifdef CIRCLE_UNIX
@@ -2318,7 +2299,7 @@ static void signal_setup(void)
/* user signal 2: unrestrict game. Used for emergencies if you lock
* yourself out of the MUD somehow. */
my_signal(SIGUSR2, websterlink);
my_signal(SIGUSR2, unrestrict_game);
/* set up the deadlock-protection so that the MUD aborts itself if it gets
* caught in an infinite loop for more than 3 minutes. */
@@ -2780,45 +2761,6 @@ static void circle_sleep(struct timeval *timeout)
#endif /* CIRCLE_WINDOWS */
static void handle_webster_file(void) {
FILE *fl;
struct char_data *ch = find_char(last_webster_teller);
char retval[MAX_STRING_LENGTH], line[READ_SIZE];
size_t len = 0, nlen = 0;
last_webster_teller = -1L;
if (!ch) /* they quit ? */
return;
fl = fopen("websterinfo", "r");
if (!fl) {
send_to_char(ch, "It seems the dictionary is offline..\r\n");
return;
}
unlink("websterinfo");
get_line(fl, line);
while (!feof(fl)) {
nlen = snprintf(retval + len, sizeof(retval) - len, "%s\r\n", line);
if (len + nlen >= sizeof(retval))
break;
len += nlen;
get_line(fl, line);
}
if (len >= sizeof(retval)) {
const char *overflow = "\r\n**OVERFLOW**\r\n";
strcpy(retval + sizeof(retval) - strlen(overflow) - 1, overflow); /* strcpy: OK */
}
fclose(fl);
send_to_char(ch, "You get this feedback from Merriam-Webster:\r\n");
page_string(ch->desc, retval, 1);
}
/* KaVir's plugin*/
static void msdp_update( void )
{

View File

@@ -60,9 +60,6 @@ void game_loop(socket_t mother_desc);
void heartbeat(int heart_pulse);
void copyover_recover(void);
/** webster dictionary lookup */
extern long last_webster_teller;
extern struct descriptor_data *descriptor_list;
extern int buf_largecount;
extern int buf_overflows;

337
src/conf.h.cmake.in Normal file
View File

@@ -0,0 +1,337 @@
/* src/conf.h.cmake.in. Used as basis for conf.h when building with cmake */
#ifndef _CONF_H_
#define _CONF_H_
/* Define to empty if the keyword does not work. */
#define const @CONST_KEYWORD@
/* Define if you don't have vprintf but do have _doprnt. */
#cmakedefine HAVE_DOPRNT
/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */
#cmakedefine HAVE_SYS_WAIT_H
/* Define if you have the vprintf function. */
#cmakedefine HAVE_VPRINTF
/* Define to `int' if <sys/types.h> doesn't define. */
#cmakedefine pid_t @pid_t@
/* Define as the return type of signal handlers (int or void). */
#define RETSIGTYPE @RETSIGTYPE@
/* Define to `unsigned' if <sys/types.h> doesn't define. */
#cmakedefine size_t @size_t@
/* Define if you have the ANSI C header files. */
#cmakedefine STDC_HEADERS
/* Define if you can safely include both <sys/time.h> and <time.h>. */
#cmakedefine TIME_WITH_SYS_TIME
/* Define if we're compiling CircleMUD under any type of UNIX system. */
#cmakedefine CIRCLE_UNIX
/* Define if the system is capable of using crypt() to encrypt. */
#cmakedefine CIRCLE_CRYPT
/* Define if we don't have proper support for the system's crypt(). */
#cmakedefine HAVE_UNSAFE_CRYPT
/* Define is the system has struct in_addr. */
#cmakedefine HAVE_STRUCT_IN_ADDR
/* Define to `int' if <sys/socket.h> doesn't define. */
#cmakedefine socklen_t @socklen_t@
/* Define to `int' if <sys/types.h> doesn't define. */
#cmakedefine ssize_t @ssize_t@
/* Define if you have the gettimeofday function. */
#cmakedefine HAVE_GETTIMEOFDAY
/* Define if you have the inet_addr function. */
#cmakedefine HAVE_INET_ADDR
/* Define if you have the inet_aton function. */
#cmakedefine HAVE_INET_ATON
/* Define if you have the select function. */
#cmakedefine HAVE_SELECT
/* Define if you have the snprintf function. */
#cmakedefine HAVE_SNPRINTF
/* Define if you have the strcasecmp function. */
#cmakedefine HAVE_STRCASECMP
/* Define if you have the strdup function. */
#cmakedefine HAVE_STRDUP
/* Define if you have the strerror function. */
#cmakedefine HAVE_STRERROR
/* Define if you have the stricmp function. */
#cmakedefine HAVE_STRICMP
/* Define if you have the strlcpy function. */
#cmakedefine HAVE_STRLCPY
/* Define if you have the strncasecmp function. */
#cmakedefine HAVE_STRNCASECMP
/* Define if you have the strnicmp function. */
#cmakedefine HAVE_STRNICMP
/* Define if you have the strstr function. */
#cmakedefine HAVE_STRSTR
/* Define if you have the vsnprintf function. */
#cmakedefine HAVE_VSNPRINTF
/* Define if you have the <arpa/inet.h> header file. */
#cmakedefine HAVE_ARPA_INET_H
/* Define if you have the <arpa/telnet.h> header file. */
#cmakedefine HAVE_ARPA_TELNET_H
/* Define if you have the <assert.h> header file. */
#cmakedefine HAVE_ASSERT_H
/* Define if you have the <crypt.h> header file. */
#cmakedefine HAVE_CRYPT_H
/* Define if you have the <errno.h> header file. */
#cmakedefine HAVE_ERRNO_H
/* Define if you have the <fcntl.h> header file. */
#cmakedefine HAVE_FCNTL_H
/* Define if you have the <limits.h> header file. */
#cmakedefine HAVE_LIMITS_H
/* Define if you have the <mcheck.h> header file. */
#cmakedefine HAVE_MCHECK_H
/* Define if you have the <memory.h> header file. */
#cmakedefine HAVE_MEMORY_H
/* Define if you have the <net/errno.h> header file. */
#cmakedefine HAVE_NET_ERRNO_H
/* Define if you have the <netdb.h> header file. */
#cmakedefine HAVE_NETDB_H
/* Define if you have the <netinet/in.h> header file. */
#cmakedefine HAVE_NETINET_IN_H
/* Define if you have the <signal.h> header file. */
#cmakedefine HAVE_SIGNAL_H
/* Define if you have the <string.h> header file. */
#cmakedefine HAVE_STRING_H
/* Define if you have the <strings.h> header file. */
#cmakedefine HAVE_STRINGS_H
/* Define if you have the <sys/fcntl.h> header file. */
#cmakedefine HAVE_SYS_FCNTL_H
/* Define if you have the <sys/resource.h> header file. */
#cmakedefine HAVE_SYS_RESOURCE_H
/* Define if you have the <sys/select.h> header file. */
#cmakedefine HAVE_SYS_SELECT_H
/* Define if you have the <sys/socket.h> header file. */
#cmakedefine HAVE_SYS_SOCKET_H
/* Define if you have the <sys/stat.h> header file. */
#cmakedefine HAVE_SYS_STAT_H
/* Define if you have the <sys/time.h> header file. */
#cmakedefine HAVE_SYS_TIME_H
/* Define if you have the <sys/types.h> header file. */
#cmakedefine HAVE_SYS_TYPES_H
/* Define if you have the <sys/uio.h> header file. */
#cmakedefine HAVE_SYS_UIO_H
/* Define if you have the <unistd.h> header file. */
#cmakedefine HAVE_UNISTD_H
/* Define if you have the malloc library (-lmalloc). */
#cmakedefine HAVE_LIBMALLOC
/* Check for a prototype to accept. */
#cmakedefine NEED_ACCEPT_PROTO
/* Check for a prototype to atoi. */
#cmakedefine NEED_ATOI_PROTO
/* Check for a prototype to atol. */
#cmakedefine NEED_ATOL_PROTO
/* Check for a prototype to bind. */
#cmakedefine NEED_BIND_PROTO
/* Check for a prototype to bzero. */
#cmakedefine NEED_BZERO_PROTO
/* Check for a prototype to chdir. */
#cmakedefine NEED_CHDIR_PROTO
/* Check for a prototype to close. */
#cmakedefine NEED_CLOSE_PROTO
/* Check for a prototype to crypt. */
#cmakedefine NEED_CRYPT_PROTO
/* Check for a prototype to fclose. */
#cmakedefine NEED_FCLOSE_PROTO
/* Check for a prototype to fcntl. */
#cmakedefine NEED_FCNTL_PROTO
/* Check for a prototype to fflush. */
#cmakedefine NEED_FFLUSH_PROTO
/* Check for a prototype to fprintf. */
#cmakedefine NEED_FPRINTF_PROTO
/* Check for a prototype to fputc. */
#cmakedefine NEED_FPUTC_PROTO
/* Check for a prototype to fputs. */
#cmakedefine NEED_FPUTS_PROTO
/* Check for a prototype to fread. */
#cmakedefine NEED_FREAD_PROTO
/* Check for a prototype to fscanf. */
#cmakedefine NEED_FSCANF_PROTO
/* Check for a prototype to fseek. */
#cmakedefine NEED_FSEEK_PROTO
/* Check for a prototype to fwrite. */
#cmakedefine NEED_FWRITE_PROTO
/* Check for a prototype to getpeername. */
#cmakedefine NEED_GETPEERNAME_PROTO
/* Check for a prototype to getpid. */
#cmakedefine NEED_GETPID_PROTO
/* Check for a prototype to getrlimit. */
#cmakedefine NEED_GETRLIMIT_PROTO
/* Check for a prototype to getsockname. */
#cmakedefine NEED_GETSOCKNAME_PROTO
/* Check for a prototype to gettimeofday. */
#cmakedefine NEED_GETTIMEOFDAY_PROTO
/* Check for a prototype to htonl. */
#cmakedefine NEED_HTONL_PROTO
/* Check for a prototype to htons. */
#cmakedefine NEED_HTONS_PROTO
/* Check for a prototype to inet_addr. */
#cmakedefine NEED_INET_ADDR_PROTO
/* Check for a prototype to inet_aton. */
#cmakedefine NEED_INET_ATON_PROTO
/* Check for a prototype to inet_ntoa. */
#cmakedefine NEED_INET_NTOA_PROTO
/* Check for a prototype to listen. */
#cmakedefine NEED_LISTEN_PROTO
/* Check for a prototype to ntohl. */
#cmakedefine NEED_NTOHL_PROTO
/* Check for a prototype to perror. */
#cmakedefine NEED_PERROR_PROTO
/* Check for a prototype to printf. */
#cmakedefine NEED_PRINTF_PROTO
/* Check for a prototype to qsort. */
#cmakedefine NEED_QSORT_PROTO
/* Check for a prototype to read. */
#cmakedefine NEED_READ_PROTO
/* Check for a prototype to remove. */
#cmakedefine NEED_REMOVE_PROTO
/* Check for a prototype to rewind. */
#cmakedefine NEED_REWIND_PROTO
/* Check for a prototype to select. */
#cmakedefine NEED_SELECT_PROTO
/* Check for a prototype to setitimer. */
#cmakedefine NEED_SETITIMER_PROTO
/* Check for a prototype to setrlimit. */
#cmakedefine NEED_SETRLIMIT_PROTO
/* Check for a prototype to setsockopt. */
#cmakedefine NEED_SETSOCKOPT_PROTO
/* Check for a prototype to snprintf. */
#cmakedefine NEED_SNPRINTF_PROTO
/* Check for a prototype to socket. */
#cmakedefine NEED_SOCKET_PROTO
/* Check for a prototype to sprintf. */
#cmakedefine NEED_SPRINTF_PROTO
/* Check for a prototype to sscanf. */
#cmakedefine NEED_SSCANF_PROTO
/* Check for a prototype to strcasecmp. */
#cmakedefine NEED_STRCASECMP_PROTO
/* Check for a prototype to strdup. */
#cmakedefine NEED_STRDUP_PROTO
/* Check for a prototype to strerror. */
#cmakedefine NEED_STRERROR_PROTO
/* Check for a prototype to stricmp. */
#cmakedefine NEED_STRICMP_PROTO
/* Check for a prototype to strlcpy. */
#cmakedefine NEED_STRLCPY_PROTO
/* Check for a prototype to strncasecmp. */
#cmakedefine NEED_STRNCASECMP_PROTO
/* Check for a prototype to strnicmp. */
#cmakedefine NEED_STRNICMP_PROTO
/* Check for a prototype to system. */
#cmakedefine NEED_SYSTEM_PROTO
/* Check for a prototype to time. */
#cmakedefine NEED_TIME_PROTO
/* Check for a prototype to unlink. */
#cmakedefine NEED_UNLINK_PROTO
/* Check for a prototype to vsnprintf. */
#cmakedefine NEED_VSNPRINTF_PROTO
/* Check for a prototype to write. */
#cmakedefine NEED_WRITE_PROTO
#endif /* _CONF_H_ */

View File

@@ -877,6 +877,7 @@ const char *trig_types[] = {
"Door",
"UNUSED",
"Time",
"Damage",
"\n"
};

View File

@@ -16,7 +16,7 @@
#include "dg_scripts.h"
#define NUM_TRIG_TYPE_FLAGS 20
#define NUM_TRIG_TYPE_FLAGS 21
/* Submodes of TRIGEDIT connectedness. */
#define TRIGEDIT_MAIN_MENU 0

View File

@@ -71,6 +71,7 @@
#define MTRIG_DOOR (1 << 17) /* door manipulated in room */
#define MTRIG_TIME (1 << 19) /* trigger based on game hour */
#define MTRIG_DAMAGE (1 << 20) /* trigger whenever mob is damaged */
/* obj trigger types */
#define OTRIG_GLOBAL (1 << 0) /* unused */
@@ -264,6 +265,7 @@ void time_wtrigger(room_data *room);
int login_wtrigger(struct room_data *room, char_data *actor);
int damage_mtrigger(char_data *ch, char_data *victim, int dam, int attacktype);
/* function prototypes from dg_scripts.c */
ACMD(do_attach) ;
ACMD(do_detach);

View File

@@ -554,6 +554,33 @@ int cast_mtrigger(char_data *actor, char_data *ch, int spellnum)
return 1;
}
int damage_mtrigger(char_data *actor, char_data *victim, int dam, int attacktype)
{
trig_data *t;
char buf[MAX_INPUT_LENGTH];
if (victim == NULL)
return dam;
if (!SCRIPT_CHECK(victim, MTRIG_DAMAGE) || AFF_FLAGGED(victim, AFF_CHARM))
return dam;
for (t = TRIGGERS(SCRIPT(victim)); t; t = t->next) {
if (TRIGGER_CHECK(t, MTRIG_DAMAGE) &&
(rand_number(1, 100) <= GET_TRIG_NARG(t))) {
ADD_UID_VAR(buf, t, char_script_id(actor), "actor", 0);
ADD_UID_VAR(buf, t, char_script_id(victim), "victim", 0);
sprintf(buf, "%d", dam);
add_var(&GET_TRIG_VARS(t), "damage", buf, 0);
add_var(&GET_TRIG_VARS(t), "attacktype", skill_name(attacktype), 0);
return script_driver(&victim, t, MOB_TRIGGER, TRIG_NEW);
}
}
return dam;
}
int leave_mtrigger(char_data *actor, int dir)
{
trig_data *t;

View File

@@ -620,6 +620,11 @@ int damage(struct char_data *ch, struct char_data *victim, int dam, int attackty
if (!IS_NPC(victim) && ((GET_LEVEL(victim) >= LVL_IMMORT) && PRF_FLAGGED(victim, PRF_NOHASSLE)))
dam = 0;
dam = damage_mtrigger(ch, victim, dam, attacktype);
if (dam == -1) {
return (0);
}
if (victim != ch) {
/* Start the attacker fighting the victim */
if (GET_POS(ch) > POS_STUNNED && (FIGHTING(ch) == NULL))

View File

@@ -146,7 +146,8 @@ static void prefedit_disp_main_menu(struct descriptor_data *d)
"%sImmortal Preferences\r\n"
"%s1%s) Syslog Level %s[%s%8s%s] %s4%s) ClsOLC %s[%s%3s%s]\r\n"
"%s2%s) Show Flags %s[%s%3s%s] %s5%s) No WizNet %s[%s%3s%s]\r\n"
"%s3%s) No Hassle %s[%s%3s%s] %s6%s) Holylight %s[%s%3s%s]\r\n",
"%s3%s) No Hassle %s[%s%3s%s] %s6%s) Holylight %s[%s%3s%s]\r\n"
"%s7%s) Verbose %s[%s%3s%s] ",
CBWHT(d->character, C_NRM),
/* Line 1 - syslog and clsolc */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM),
@@ -159,12 +160,17 @@ static void prefedit_disp_main_menu(struct descriptor_data *d)
/* Line 3 - nohassle and holylight */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM),
ONOFF(PREFEDIT_FLAGGED(PRF_NOHASSLE)), CCCYN(d->character, C_NRM), CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM),
CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM), ONOFF(PREFEDIT_FLAGGED(PRF_HOLYLIGHT)), CCCYN(d->character, C_NRM)
CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM), ONOFF(PREFEDIT_FLAGGED(PRF_HOLYLIGHT)), CCCYN(d->character, C_NRM),
/* Line 4 - Verbose */
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM),
ONOFF(PREFEDIT_FLAGGED(PRF_VERBOSE)), CCCYN(d->character, C_NRM)
);
if (GET_LEVEL(PREFEDIT_GET_CHAR) == LVL_IMPL)
send_to_char(d->character, "%s7%s) Zone Resets %s[%s%3s%s]\r\n",
send_to_char(d->character, "%s8%s) Zone Resets %s[%s%3s%s]\r\n",
CBYEL(d->character, C_NRM), CCNRM(d->character, C_NRM), CCCYN(d->character, C_NRM), CCYEL(d->character, C_NRM),
ONOFF(PREFEDIT_FLAGGED(PRF_ZONERESETS)), CCCYN(d->character, C_NRM));
else
send_to_char(d->character, "\r\n");
}
/* Finishing Off */
@@ -505,7 +511,19 @@ void prefedit_parse(struct descriptor_data * d, char *arg)
}
break;
case '7':
case '7':
if (GET_LEVEL(PREFEDIT_GET_CHAR) < LVL_IMMORT)
{
send_to_char(d->character, "%sInvalid choice!%s\r\n", CBRED(d->character, C_NRM), CCNRM(d->character, C_NRM));
prefedit_disp_main_menu(d);
}
else
{
TOGGLE_BIT_AR(PREFEDIT_GET_FLAGS, PRF_VERBOSE);
}
break;
case '8':
if (GET_LEVEL(PREFEDIT_GET_CHAR) < LVL_IMPL)
{
send_to_char(d->character, "%sInvalid choice!%s\r\n", CBRED(d->character, C_NRM), CCNRM(d->character, C_NRM));
@@ -901,6 +919,10 @@ void prefedit_Restore_Defaults(struct descriptor_data *d)
if (PREFEDIT_FLAGGED(PRF_AUTODOOR))
SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_AUTODOOR);
/* PRF_VERBOSE - On */
if (PREFEDIT_FLAGGED(PRF_VERBOSE))
SET_BIT_AR(PREFEDIT_GET_FLAGS, PRF_VERBOSE);
/* Other (non-toggle) options */
PREFEDIT_GET_WIMP_LEV = 0; /* Wimpy off by default */
PREFEDIT_GET_PAGELENGTH = 22; /* Default telnet screen is 22 lines */

View File

@@ -1768,7 +1768,26 @@ static void PerformSubnegotiation( descriptor_t *apDescriptor, char aCmd, char *
Write(apDescriptor, RequestTTYPE);
}
if ( PrefixString("Mudlet", pClientName) )
if ( PrefixString("MTTS ", pClientName) )
{
pProtocol->pVariables[eMSDP_CLIENT_VERSION]->ValueInt = atoi(pClientName+5);
if (pProtocol->pVariables[eMSDP_CLIENT_VERSION]->ValueInt & 1)
{
pProtocol->pVariables[eMSDP_ANSI_COLORS]->ValueInt = 1;
}
if (pProtocol->pVariables[eMSDP_CLIENT_VERSION]->ValueInt & 4)
{
pProtocol->pVariables[eMSDP_UTF_8]->ValueInt = 1;
}
if (pProtocol->pVariables[eMSDP_CLIENT_VERSION]->ValueInt & 8)
{
pProtocol->pVariables[eMSDP_XTERM_256_COLORS]->ValueInt = 1;
pProtocol->b256Support = eYES;
}
}
else if ( PrefixString("Mudlet", pClientName) )
{
/* Mudlet beta 15 and later supports 256 colours, but we can't
* identify it from the mud - everything prior to 1.1 claims

View File

@@ -136,6 +136,7 @@ void assign_objects(void)
ASSIGNOBJ(3097, gen_board); /* freeze board */
ASSIGNOBJ(3098, gen_board); /* immortal board */
ASSIGNOBJ(3099, gen_board); /* mortal board */
ASSIGNOBJ(4900, gen_board); /* mortal board */
ASSIGNOBJ(115, bank);
ASSIGNOBJ(334, bank); /* atm */

View File

@@ -262,9 +262,10 @@
#define PRF_AUTOMAP 31 /**< Show map at the side of room descs */
#define PRF_AUTOKEY 32 /**< Automatically unlock locked doors when opening */
#define PRF_AUTODOOR 33 /**< Use the next available door */
#define PRF_ZONERESETS 34
#define PRF_ZONERESETS 34 /**< Show when zones reset */
#define PRF_VERBOSE 35 /**< Listings like where are more verbose */
/** Total number of available PRF flags */
#define NUM_PRF_FLAGS 35
#define NUM_PRF_FLAGS 36
/* Affect bits: used in char_data.char_specials.saved.affected_by */
/* WARNING: In the world files, NEVER set the bits marked "R" ("Reserved") */

45
src/util/CMakeLists.txt Normal file
View File

@@ -0,0 +1,45 @@
set(TOOLS
asciipasswd
autowiz
plrtoascii
rebuildIndex
rebuildMailIndex
shopconv
sign
split
wld2html
)
# common includes and flags
include_directories(${CMAKE_SOURCE_DIR}/src)
add_definitions(-DCIRCLE_UTIL)
find_library(CRYPT_LIBRARY crypt)
find_library(NETLIB_LIBRARY nsl socket) # for sign.c, hvis nødvendig
foreach(tool ${TOOLS})
if(${tool} STREQUAL "rebuildIndex")
add_executable(rebuildIndex rebuildAsciiIndex.c)
else()
add_executable(${tool} ${tool}.c)
endif()
# Set output location
set_target_properties(${tool} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin
)
# Link to libcrypt for asciipasswd
if(${tool} STREQUAL "asciipasswd" AND CRYPT_LIBRARY)
target_link_libraries(${tool} ${CRYPT_LIBRARY})
endif()
# Link to netlib for sign
if(${tool} STREQUAL "sign" AND NETLIB_LIBRARY)
target_link_libraries(${tool} ${NETLIB_LIBRARY})
endif()
endforeach()
add_custom_target(utils DEPENDS ${TOOLS})

View File

@@ -23,7 +23,7 @@ CFLAGS = @CFLAGS@ $(MYFLAGS) $(PROFILE) -I$(INCDIR)
default: all
all: $(BINDIR)/asciipasswd $(BINDIR)/autowiz $(BINDIR)/plrtoascii $(BINDIR)/rebuildIndex $(BINDIR)/rebuildMailIndex $(BINDIR)/shopconv $(BINDIR)/sign $(BINDIR)/split $(BINDIR)/wld2html $(BINDIR)/webster
all: $(BINDIR)/asciipasswd $(BINDIR)/autowiz $(BINDIR)/plrtoascii $(BINDIR)/rebuildIndex $(BINDIR)/rebuildMailIndex $(BINDIR)/shopconv $(BINDIR)/sign $(BINDIR)/split $(BINDIR)/wld2html
asciipasswd: $(BINDIR)/asciipasswd
@@ -43,8 +43,6 @@ split: $(BINDIR)/split
wld2html: $(BINDIR)/wld2html
webster: $(BINDIR)/webster
$(BINDIR)/asciipasswd: asciipasswd.c
$(CC) $(CFLAGS) -o $(BINDIR)/asciipasswd asciipasswd.c @CRYPTLIB@
@@ -72,9 +70,6 @@ $(BINDIR)/split: split.c
$(BINDIR)/wld2html: wld2html.c
$(CC) $(CFLAGS) -o $(BINDIR)/wld2html wld2html.c
$(BINDIR)/webster: webster.c
$(CC) $(CFLAGS) -o $(BINDIR)/webster webster.c
# Dependencies for the object files (automagically generated with
# gcc -MM)

View File

@@ -85,7 +85,7 @@ void read_file(void)
while (get_line(fl, line))
if (*line != '~')
recs++;
rewind(fl);
rewind(fl);
for (i = 0; i < recs; i++) {
get_line(fl, line);

View File

@@ -155,7 +155,7 @@ static int boot_the_shops_conv(FILE * shop_f, FILE * newshop_f, char *filename)
int main(int argc, char *argv[])
{
FILE *sfp, *nsfp;
char fn[256], part[256];
char fn[120], part[256];
int result, index, i;
if (argc < 2) {
@@ -173,20 +173,20 @@ int main(int argc, char *argv[])
perror(fn);
} else {
if ((nsfp = fopen(fn, "w")) == NULL) {
printf("Error writing to %s.\n", fn);
continue;
printf("Error writing to %s.\n", fn);
continue;
}
printf("%s:\n", fn);
result = boot_the_shops_conv(sfp, nsfp, fn);
fclose(nsfp);
fclose(sfp);
if (result) {
sprintf(part, "mv %s.tmp %s", fn, fn);
i = system(part);
sprintf(part, "mv %s.tmp %s", fn, fn);
i = system(part);
} else {
sprintf(part, "mv %s.tmp %s.bak", fn, fn);
i = system(part);
printf("Done!\n");
sprintf(part, "mv %s.tmp %s.bak", fn, fn);
i = system(part);
printf("Done!\n");
}
}
}

View File

@@ -1,175 +0,0 @@
/* ************************************************************************
* File: webster.c Part of tbaMUD *
* Usage: Use an online dictionary via tell m-w <word>. *
* *
* Based on the Circle 3.0 syntax checker and wld2html programs. *
************************************************************************ */
#define log(msg) fprintf(stderr, "%s\n", msg)
#include "conf.h"
#include "sysdep.h"
#define MEM_USE 10000
char buf[MEM_USE];
int get_line(FILE * fl, char *buf);
void skip_spaces(char **string);
void parse_webster_html(char *arg);
int main(int argc, char **argv)
{
int pid = 0;
if (argc != 3) {
return 0; /* no word/pid given */
}
pid = atoi(argv[2]);
snprintf(buf, sizeof(buf),
"lynx -accept_all_cookies -source http://www.thefreedictionary.com/%s"
" >webster.html", argv[1]);
system(buf);
parse_webster_html(argv[1]);
if (pid)
kill(pid, SIGUSR2);
return (0);
}
void parse_webster_html(char *arg) {
FILE *infile, *outfile;
char scanbuf[MEM_USE], outline[MEM_USE], *p, *q;
outfile = fopen("websterinfo", "w");
if (!outfile)
exit(1);
infile = fopen("webster.html", "r");
if (!infile) {
fprintf(outfile, "A bug has occured in webster. (no webster.html) Please notify Welcor.");
fclose(outfile);
return;
}
unlink("webster.html"); /* We can still read */
for ( ; get_line(infile, buf)!=0; ) {
if (strncmp(buf, "<script>write_ads(AdsNum, 0, 1)</script>", 40) != 0)
continue; // read until we hit the line with results in it.
p = buf+40;
if (strncmp(p, "<br>", 4) == 0)
{
fprintf(outfile, "That word could not be found.\n");
goto end;
}
else if (strncmp(p, "<div ", 5) == 0) // definition is here, all in one line.
{
while (strncmp(p, "ds-list", 7)) //seek to the definition
p++;
strncpy(scanbuf, p, sizeof(scanbuf)); // strtok on a copy.
p = strtok(scanbuf, ">"); // chop the line at the end of tags: <br><b>word</b> becomes "<br" "<b" "word</b"
p = strtok(NULL, ">"); // skip the rest of this tag.
fprintf(outfile, "Info on: %s\n\n", arg);
while (1)
{
q = outline;
while (*p != '<')
{
assert(p < scanbuf+sizeof(scanbuf));
*q++ = *p++;
}
if (!strncmp(p, "<br", 3) || !strncmp(p, "<p", 2) || !strncmp(p, "<div class=\"ds-list\"", 23) || !strncmp(p, "<div class=\"sds-list\"", 24))
*q++ = '\n';
// if it's not a <br> tag or a <div class="sds-list"> or <div class="ds-list"> tag, ignore it.
*q++='\0';
fprintf(outfile, "%s", outline);
if (!strncmp(p, "</table", 7))
goto end;
p = strtok(NULL, ">");
}
}
else if (strncmp(p, "<div>", 5) == 0) // not found, but suggestions are ample:
{
strncpy(scanbuf, p, sizeof(scanbuf)); // strtok on a copy.
p = strtok(scanbuf, ">"); // chop the line at the end of tags: <br><b>word</b> becomes "<br>" "<b>" "word</b>"
p = strtok(NULL, ">"); // skip the rest of this tag.
while (1)
{
q = outline;
while (*p != '<')
*q++ = *p++;
if (!strncmp(p, "<td ", 4))
*q++ = '\n';
// if it's not a <td> tag, ignore it.
*q++='\0';
fprintf(outfile, "%s", outline);
if (!strncmp(p, "</table", 7))
goto end;
p = strtok(NULL, ">");
}
}
else
{
// weird.. one of the above should be correct.
fprintf(outfile, "It would appear that the free online dictionary has changed their format.\n"
"Sorry, but you might need a webrowser instead.\n\n"
"See http://www.thefreedictionary.com/%s", arg);
goto end;
}
}
end:
fclose(infile);
fprintf(outfile, "~");
fclose(outfile);
}
/* get_line reads the next non-blank line off of the input stream.
* The newline character is removed from the input.
*/
int get_line(FILE * fl, char *buf)
{
char temp[MEM_USE];
do {
fgets(temp, MEM_USE, fl);
if (*temp)
temp[strlen(temp) - 1] = '\0';
} while (!feof(fl) && !*temp);
if (feof(fl))
return (0);
else {
strcpy(buf, temp);
return (1);
}
}
/*
* Function to skip over the leading spaces of a string.
*/
void skip_spaces(char **string)
{
for (; **string && isspace(**string); (*string)++);
}

574
syslog Normal file
View File

@@ -0,0 +1,574 @@
autorun starting game Mo 26. Jan 21:38:52 CET 2026
running bin/circle -q 4000
nohup: Eingabe wird ignoriert
No etc/config file, using defaults: No such file or directory
Jan 26 21:38:52 2026 :: Loading configuration.
Jan 26 21:38:52 2026 :: tbaMUD 2025
Jan 26 21:38:52 2026 :: Using lib as data directory.
Jan 26 21:38:52 2026 :: Running game on port 4000.
Jan 26 21:38:52 2026 :: Finding player limit.
Jan 26 21:38:52 2026 :: Setting player limit to 300 using rlimit.
Jan 26 21:38:52 2026 :: Opening mother connection.
Jan 26 21:38:52 2026 :: Binding to all IP interfaces on this host.
Jan 26 21:38:52 2026 :: Boot db -- BEGIN.
Jan 26 21:38:52 2026 :: Resetting the game time:
Jan 26 21:38:52 2026 :: No time file 'etc/time' starting from the beginning.
Jan 26 21:38:52 2026 :: Current Gametime: 2H 30D 15M 1044Y.
Jan 26 21:38:52 2026 :: Initialize Global Lists
Jan 26 21:38:52 2026 :: Initializing Events
Jan 26 21:38:52 2026 :: Reading news, credits, help, ihelp, bground, info & motds.
Jan 26 21:38:52 2026 :: Loading spell definitions.
Jan 26 21:38:52 2026 :: Loading zone table.
Jan 26 21:38:52 2026 :: 192 zones, 13824 bytes.
Jan 26 21:38:52 2026 :: Loading triggers and generating index.
Jan 26 21:38:52 2026 :: Loading rooms.
Jan 26 21:38:52 2026 :: 12758 rooms, 2347472 bytes.
Jan 26 21:38:52 2026 :: Renumbering rooms.
Jan 26 21:38:52 2026 :: Checking start rooms.
Jan 26 21:38:52 2026 :: Loading mobs and generating index.
Jan 26 21:38:52 2026 :: 3712 mobs, 118784 bytes in index, 2138112 bytes in prototypes.
Jan 26 21:38:52 2026 :: Loading objs and generating index.
Jan 26 21:38:52 2026 :: 4774 objs, 152768 bytes in index, 1145760 bytes in prototypes.
Jan 26 21:38:52 2026 :: Renumbering zone table.
Jan 26 21:38:52 2026 :: SYSERR: zone file: Invalid vnum 4900, cmd disabled
Jan 26 21:38:52 2026 :: SYSERR: ...offending cmd: 'M' cmd in zone #491, line 5
Jan 26 21:38:52 2026 :: SYSERR: zone file: Invalid vnum 4901, cmd disabled
Jan 26 21:38:52 2026 :: SYSERR: ...offending cmd: 'M' cmd in zone #491, line 10
Jan 26 21:38:52 2026 :: Loading shops.
Jan 26 21:38:52 2026 :: Loading quests.
Jan 26 21:38:52 2026 :: 1 entries, 128 bytes.
Jan 26 21:38:52 2026 :: Loading help entries.
Jan 26 21:38:52 2026 :: 2640 entries, 84480 bytes.
Jan 26 21:38:52 2026 :: Generating player index.
Jan 26 21:38:52 2026 :: Loading fight messages.
Jan 26 21:38:52 2026 :: Loaded 37 Combat Messages...
Jan 26 21:38:52 2026 :: Loading social messages.
Jan 26 21:38:52 2026 :: Social table contains 490 socials.
Jan 26 21:38:52 2026 :: Building command list.
Jan 26 21:38:52 2026 :: Command info rebuilt, 766 total commands.
Jan 26 21:38:52 2026 :: Assigning function pointers:
Jan 26 21:38:52 2026 :: Mobiles.
Jan 26 21:38:52 2026 :: Shopkeepers.
Jan 26 21:38:52 2026 :: Objects.
Jan 26 21:38:52 2026 :: Rooms.
Jan 26 21:38:52 2026 :: Questmasters.
Jan 26 21:38:52 2026 :: Assigning spell and skill levels.
Jan 26 21:38:52 2026 :: Sorting command list and spells.
Jan 26 21:38:52 2026 :: Booting mail system.
Jan 26 21:38:52 2026 :: Mail file read -- 0 messages.
Jan 26 21:38:52 2026 :: Reading banned site and invalid-name list.
Jan 26 21:38:52 2026 :: Loading Ideas.
Jan 26 21:38:52 2026 :: Loading Bugs.
Jan 26 21:38:52 2026 :: Loading Typos.
Jan 26 21:38:52 2026 :: Booting houses.
Jan 26 21:38:52 2026 :: No houses to load. File 'etc/hcontrol' does not exist.
Jan 26 21:38:52 2026 :: Cleaning up last log.
Jan 26 21:38:52 2026 :: Resetting #0: The Builder Academy Zone (rooms 0-99).
Jan 26 21:38:52 2026 :: Resetting #1: Sanctus (rooms 100-199).
Jan 26 21:38:52 2026 :: Resetting #2: Sanctus II (rooms 200-299).
Jan 26 21:38:52 2026 :: Resetting #3: Sanctus III (rooms 300-399).
Jan 26 21:38:52 2026 :: Resetting #4: Rename (rooms 400-499).
Jan 26 21:38:52 2026 :: Resetting #5: Newbie Farm (rooms 500-599).
Jan 26 21:38:52 2026 :: Resetting #6: Sea of Souls (rooms 600-699).
Jan 26 21:38:52 2026 :: Resetting #7: Camelot (rooms 700-799).
Jan 26 21:38:52 2026 :: Resetting #9: River Island of Minos (rooms 900-999).
Jan 26 21:38:52 2026 :: Resetting #11: Frozen Castle (rooms 1100-1199).
Jan 26 21:38:52 2026 :: Resetting #12: God Complex Merged with 343 (rooms 1200-1299).
Jan 26 21:38:52 2026 :: Resetting #13: TBA Examples (rooms 1300-1399).
Jan 26 21:38:52 2026 :: Resetting #14: TBA Examples II (rooms 1400-1499).
Jan 26 21:38:52 2026 :: Resetting #15: Straight Path (rooms 1500-1599).
Jan 26 21:38:52 2026 :: Resetting #16: Camelot II (rooms 1600-1699).
Jan 26 21:38:52 2026 :: Resetting #17: Camelot III (rooms 1700-1799).
Jan 26 21:38:52 2026 :: Resetting #18: Nuclear Wasteland (rooms 1800-1899).
Jan 26 21:38:52 2026 :: Resetting #19: Spider Swamp (rooms 1900-1999).
Jan 26 21:38:52 2026 :: Resetting #20: Arena (rooms 2000-2099).
Jan 26 21:38:52 2026 :: Resetting #22: Tower of the Undead (rooms 2200-2299).
Jan 26 21:38:52 2026 :: Resetting #25: High Tower of Magic (rooms 2500-2599).
Jan 26 21:38:52 2026 :: Resetting #26: High Tower of Magic II (rooms 2600-2699).
Jan 26 21:38:52 2026 :: Resetting #27: Memlin Caverns (rooms 2700-2799).
Jan 26 21:38:52 2026 :: Resetting #28: Mudschool (rooms 2800-2899).
Jan 26 21:38:52 2026 :: Resetting #30: Northern Midgaard (rooms 3000-3099).
Jan 26 21:38:52 2026 :: Resetting #31: Southern Midgaard (rooms 3100-3199).
Jan 26 21:38:52 2026 :: Resetting #32: Midgaard (rooms 3200-3299).
Jan 26 21:38:52 2026 :: Resetting #33: Three of Swords (rooms 3300-3399).
Jan 26 21:38:52 2026 :: Resetting #35: Miden'Nir (rooms 3500-3599).
Jan 26 21:38:52 2026 :: Resetting #36: Chessboard of Midgaard (rooms 3600-3699).
Jan 26 21:38:52 2026 :: Resetting #37: Capital Sewer System (rooms 3700-3799).
Jan 26 21:38:52 2026 :: Resetting #38: Capital Sewer System II (rooms 3800-3899).
Jan 26 21:38:52 2026 :: Resetting #39: Haven (rooms 3900-3999).
Jan 26 21:38:52 2026 :: Resetting #40: Mines of Moria (rooms 4000-4099).
Jan 26 21:38:52 2026 :: Resetting #41: Mines of Moria (rooms 4100-4199).
Jan 26 21:38:52 2026 :: Resetting #42: Dragon Chasm (rooms 4200-4299).
Jan 26 21:38:52 2026 :: Resetting #43: Arctic Zone (rooms 4300-4399).
Jan 26 21:38:52 2026 :: Resetting #44: Orc Camp (rooms 4400-4499).
Jan 26 21:38:52 2026 :: Resetting #45: Woodland Monastery (rooms 4500-4599).
Jan 26 21:38:52 2026 :: Resetting #46: Ant Hill (rooms 4600-4699).
Jan 26 21:38:52 2026 :: Resetting #49: Grenzland (rooms 4900-4999).
Jan 26 21:38:52 2026 :: Resetting #50: Great Eastern Desert (rooms 5000-5099).
Jan 26 21:38:52 2026 :: Resetting #51: Drow City (rooms 5100-5199).
Jan 26 21:38:52 2026 :: Resetting #52: City of Thalos (rooms 5200-5299).
Jan 26 21:38:52 2026 :: Resetting #53: Great Pyramid (rooms 5300-5399).
Jan 26 21:38:52 2026 :: Resetting #54: New Thalos (rooms 5400-5499).
Jan 26 21:38:52 2026 :: Resetting #55: New Thalos II (rooms 5500-5599).
Jan 26 21:38:52 2026 :: Resetting #56: New Thalos Wilderness (rooms 5600-5699).
Jan 26 21:38:52 2026 :: Resetting #57: Zodiac (rooms 5700-5799).
Jan 26 21:38:52 2026 :: Resetting #60: Haon-Dor, Light Forest (rooms 6000-6099).
Jan 26 21:38:52 2026 :: Resetting #61: Haon-Dor, Light Forest II (rooms 6100-6199).
Jan 26 21:38:52 2026 :: Resetting #62: Orc Enclave (rooms 6200-6299).
Jan 26 21:38:52 2026 :: Resetting #63: Arachnos (rooms 6300-6399).
Jan 26 21:38:52 2026 :: Resetting #64: Rand's Tower (rooms 6400-6499).
Jan 26 21:38:52 2026 :: Resetting #65: Dwarven Kingdom (rooms 6500-6599).
Jan 26 21:38:52 2026 :: Resetting #70: Sewer, First Level (rooms 7000-7099).
Jan 26 21:38:52 2026 :: Resetting #71: Second Sewer (rooms 7100-7199).
Jan 26 21:38:52 2026 :: Resetting #72: Sewer Maze (rooms 7200-7299).
Jan 26 21:38:52 2026 :: Resetting #73: Tunnels in the Sewer (rooms 7300-7399).
Jan 26 21:38:52 2026 :: Resetting #74: Newbie Graveyard (rooms 7400-7499).
Jan 26 21:38:52 2026 :: Resetting #75: Zamba (rooms 7500-7599).
Jan 26 21:38:52 2026 :: Resetting #78: Gideon (rooms 7800-7899).
Jan 26 21:38:52 2026 :: Resetting #79: Redferne's Residence (rooms 7900-7999).
Jan 26 21:38:52 2026 :: Resetting #83: Glumgold's Sea (rooms 8300-8399).
Jan 26 21:38:52 2026 :: Resetting #86: Duke Kalithorn's Keep (rooms 8600-8699).
Jan 26 21:38:52 2026 :: Resetting #90: Oasis (rooms 9000-9099).
Jan 26 21:38:52 2026 :: Resetting #96: Domiae (rooms 9600-9699).
Jan 26 21:38:52 2026 :: Resetting #100: Northern Highway (rooms 10000-10099).
Jan 26 21:38:52 2026 :: Resetting #101: South Road (rooms 10100-10199).
Jan 26 21:38:52 2026 :: Resetting #103: DBZ World (rooms 10300-10399).
Jan 26 21:38:52 2026 :: Resetting #104: Land of Orchan (rooms 10400-10499).
Jan 26 21:38:52 2026 :: Resetting #106: Elcardo (rooms 10600-10699).
Jan 26 21:38:52 2026 :: Resetting #107: Realms of Iuel (rooms 10700-10799).
Jan 26 21:38:52 2026 :: Resetting #115: Monestary Omega (rooms 11500-11599).
Jan 26 21:38:52 2026 :: Resetting #117: Los Torres (rooms 11700-11799).
Jan 26 21:38:52 2026 :: Resetting #118: The Dollhouse (rooms 11800-11899).
Jan 26 21:38:52 2026 :: Resetting #120: Rome (rooms 12000-12099).
Jan 26 21:38:52 2026 :: Resetting #125: Hannah (rooms 12500-12599).
Jan 26 21:38:52 2026 :: Resetting #130: Mist Maze (rooms 13000-13099).
Jan 26 21:38:52 2026 :: Resetting #140: Wyvern City (rooms 14000-14099).
Jan 26 21:38:52 2026 :: Resetting #150: King Welmar's Castle (rooms 15000-15099).
Jan 26 21:38:52 2026 :: Resetting #169: Gibberling Caves (rooms 16900-16999).
Jan 26 21:38:52 2026 :: Resetting #175: Cardinal Wizards (rooms 17500-17599).
Jan 26 21:38:52 2026 :: Resetting #186: Newbie Zone (rooms 18600-18699).
Jan 26 21:38:52 2026 :: Resetting #187: Circus (rooms 18700-18799).
Jan 26 21:38:52 2026 :: Resetting #200: Western Highway (rooms 20000-20099).
Jan 26 21:38:52 2026 :: Resetting #201: Sapphire Islands (rooms 20100-20199).
Jan 26 21:38:52 2026 :: Resetting #211: Tarot (rooms 21100-21199).
Jan 26 21:38:52 2026 :: Resetting #220: The Enchanted Kitchen (rooms 22000-22099).
Jan 26 21:38:52 2026 :: Resetting #232: Terringham (rooms 23200-23299).
Jan 26 21:38:52 2026 :: Resetting #233: Dragon Plains (rooms 23300-23399).
Jan 26 21:38:52 2026 :: Resetting #234: Newbie School (rooms 23400-23499).
Jan 26 21:38:52 2026 :: Resetting #235: Dwarven Mines (rooms 23500-23599).
Jan 26 21:38:52 2026 :: Resetting #236: Aldin (rooms 23600-23699).
Jan 26 21:38:52 2026 :: Resetting #237: Dwarven Trade Route (rooms 23700-23799).
Jan 26 21:38:52 2026 :: Resetting #238: Crystal Castle (rooms 23800-23899).
Jan 26 21:38:52 2026 :: Resetting #239: South Pass (rooms 23900-23999).
Jan 26 21:38:52 2026 :: Resetting #240: Dun Maura (rooms 24000-24099).
Jan 26 21:38:52 2026 :: Resetting #241: Starship Enterprise (rooms 24100-24199).
Jan 26 21:38:52 2026 :: Resetting #242: New Southern Midgaard (rooms 24200-24299).
Jan 26 21:38:52 2026 :: Resetting #243: Snowy Valley (rooms 24300-24399).
Jan 26 21:38:52 2026 :: Resetting #244: Cooland Prison (rooms 24400-24499).
Jan 26 21:38:52 2026 :: Resetting #245: The Nether (rooms 24500-24599).
Jan 26 21:38:52 2026 :: Resetting #246: The Nether II (rooms 24600-24699).
Jan 26 21:38:52 2026 :: Resetting #247: Graveyard (rooms 24700-24799).
Jan 26 21:38:52 2026 :: Resetting #248: Elven Woods (rooms 24800-24899).
Jan 26 21:38:52 2026 :: Resetting #249: Jedi Clan House (rooms 24900-24999).
Jan 26 21:38:52 2026 :: Resetting #250: DragonSpyre (rooms 25000-25099).
Jan 26 21:38:52 2026 :: Resetting #251: Ape Village (rooms 25100-25199).
Jan 26 21:38:52 2026 :: Resetting #252: Castle of the Vampyre (rooms 25200-25299).
Jan 26 21:38:52 2026 :: Resetting #253: Windmill (rooms 25300-25399).
Jan 26 21:38:52 2026 :: Resetting #254: Mordecai's Village (rooms 25400-25499).
Jan 26 21:38:52 2026 :: Resetting #255: Shipwreck (rooms 25500-25599).
Jan 26 21:38:52 2026 :: Resetting #256: Lord's Keep (rooms 25600-25699).
Jan 26 21:38:52 2026 :: Resetting #257: Jareth Main City (rooms 25700-25799).
Jan 26 21:38:52 2026 :: Resetting #258: Light Forest (rooms 25800-25899).
Jan 26 21:38:52 2026 :: Resetting #259: Haunted Mansion (rooms 25900-25999).
Jan 26 21:38:52 2026 :: Resetting #260: Grasslands (rooms 26000-26099).
Jan 26 21:38:52 2026 :: Resetting #261: Inna & Igor's Castle (rooms 26100-26199).
Jan 26 21:38:52 2026 :: Resetting #262: Forest Trails (rooms 26200-26299).
Jan 26 21:38:52 2026 :: Resetting #263: Farmlands (rooms 26300-26399).
Jan 26 21:38:52 2026 :: Resetting #264: Banshide (rooms 26400-26499).
Jan 26 21:38:52 2026 :: Resetting #265: Beach & Lighthouse (rooms 26500-26599).
Jan 26 21:38:52 2026 :: Resetting #266: Realm of Lord Ankou (rooms 26600-26699).
Jan 26 21:38:52 2026 :: Resetting #267: Vice Island (rooms 26700-26799).
Jan 26 21:38:52 2026 :: Resetting #268: Vice Island II (rooms 26800-26899).
Jan 26 21:38:52 2026 :: Resetting #269: Southern Desert (rooms 26900-26999).
Jan 26 21:38:52 2026 :: Resetting #270: Wasteland (rooms 27000-27099).
Jan 26 21:38:52 2026 :: Resetting #271: Sundhaven (rooms 27100-27199).
Jan 26 21:38:52 2026 :: Resetting #272: Sundhaven II (rooms 27200-27299).
Jan 26 21:38:52 2026 :: Resetting #273: Space Station Alpha (rooms 27300-27399).
Jan 26 21:38:52 2026 :: Resetting #274: Adria: Saint Brigid (rooms 27400-27499).
Jan 26 21:38:52 2026 :: Resetting #275: New Sparta (rooms 27500-27599).
Jan 26 21:38:52 2026 :: Resetting #276: New Sparta II (rooms 27600-27699).
Jan 26 21:38:52 2026 :: Resetting #277: Shire (rooms 27700-27799).
Jan 26 21:38:52 2026 :: Resetting #278: Oceania (rooms 27800-27899).
Jan 26 21:38:52 2026 :: Resetting #279: Notre Dame (rooms 27900-27999).
Jan 26 21:38:52 2026 :: Resetting #280: Living Motherboard (rooms 28000-28099).
Jan 26 21:38:52 2026 :: Resetting #281: Forest of Khanjar (rooms 28100-28199).
Jan 26 21:38:52 2026 :: Resetting #282: Infernal Pit of Kerjim (rooms 28200-28299).
Jan 26 21:38:52 2026 :: Resetting #283: Haunted House (rooms 28300-28399).
Jan 26 21:38:52 2026 :: Resetting #284: Ghenna (rooms 28400-28499).
Jan 26 21:38:52 2026 :: Resetting #285: Descent to Hell II (rooms 28500-28599).
Jan 26 21:38:52 2026 :: Resetting #286: Descent to Hell (rooms 28600-28699).
Jan 26 21:38:52 2026 :: Resetting #287: Ofingia and the Goblin Town (rooms 28700-28799).
Jan 26 21:38:52 2026 :: Resetting #288: Galaxy (rooms 28800-28899).
Jan 26 21:38:52 2026 :: Resetting #289: Werith's Wayhouse (rooms 28900-28999).
Jan 26 21:38:52 2026 :: Resetting #290: Lizard Lair Safari (rooms 29000-29099).
Jan 26 21:38:52 2026 :: Resetting #291: Black Forest (rooms 29100-29199).
Jan 26 21:38:52 2026 :: Resetting #292: Kerofk (rooms 29200-29299).
Jan 26 21:38:52 2026 :: Resetting #293: Kerofk II (rooms 29300-29399).
Jan 26 21:38:52 2026 :: Resetting #294: Trade Road (rooms 29400-29499).
Jan 26 21:38:52 2026 :: Resetting #295: Jungle (rooms 29500-29599).
Jan 26 21:38:52 2026 :: Resetting #296: Froboz Fun Factory (rooms 29600-29699).
Jan 26 21:38:52 2026 :: Resetting #298: Castle of Desire (rooms 29800-29899).
Jan 26 21:38:52 2026 :: Resetting #299: Abandoned Cathedral (rooms 29900-29999).
Jan 26 21:38:52 2026 :: Resetting #300: Ancalador (rooms 30000-30099).
Jan 26 21:38:52 2026 :: Resetting #301: Campus (rooms 30100-30199).
Jan 26 21:38:52 2026 :: Resetting #302: Campus II (rooms 30200-30299).
Jan 26 21:38:52 2026 :: Resetting #303: Campus III (rooms 30300-30399).
Jan 26 21:38:52 2026 :: Resetting #304: Temple of the Bull (rooms 30400-30499).
Jan 26 21:38:52 2026 :: Resetting #305: Chessboard (rooms 30500-30599).
Jan 26 21:38:52 2026 :: Resetting #306: Newbie Tree (rooms 30600-30699).
Jan 26 21:38:52 2026 :: Resetting #307: Castle (rooms 30700-30799).
Jan 26 21:38:52 2026 :: Resetting #308: Baron Cailveh (rooms 30800-30899).
Jan 26 21:38:52 2026 :: Resetting #309: Keep of Baron Westlawn (rooms 30900-30999).
Jan 26 21:38:52 2026 :: Resetting #310: Graye Area (rooms 31000-31099).
Jan 26 21:38:52 2026 :: Resetting #311: The Dragon's Teeth (rooms 31100-31199).
Jan 26 21:38:52 2026 :: Resetting #312: Leper Island (rooms 31200-31299).
Jan 26 21:38:52 2026 :: Resetting #313: Farmlands of Ofingia (rooms 31300-31399).
Jan 26 21:38:52 2026 :: Resetting #314: X'Raantra's Altar of Sacrifice (rooms 31400-31499).
Jan 26 21:38:52 2026 :: Resetting #315: McGintey Business District (rooms 31500-31599).
Jan 26 21:38:52 2026 :: Resetting #316: McGintey Guild Area (rooms 31600-31699).
Jan 26 21:38:52 2026 :: Resetting #317: Wharf (rooms 31700-31799).
Jan 26 21:38:52 2026 :: Resetting #318: Dock Area (rooms 31800-31899).
Jan 26 21:38:52 2026 :: Resetting #319: Yllythad Sea (rooms 31900-31999).
Jan 26 21:38:52 2026 :: Resetting #320: Yllythad Sea II (rooms 32000-32099).
Jan 26 21:38:52 2026 :: Resetting #321: Yllythad Sea III (rooms 32100-32199).
Jan 26 21:38:52 2026 :: Resetting #322: McGintey Bay (rooms 32200-32299).
Jan 26 21:38:52 2026 :: Resetting #323: Caverns of the Pale Man (rooms 32300-32399).
Jan 26 21:38:52 2026 :: Resetting #324: Army Encampment (rooms 32400-32499).
Jan 26 21:38:52 2026 :: Resetting #325: Revelry (rooms 32500-32599).
Jan 26 21:38:52 2026 :: Resetting #326: Army Perimeter (rooms 32600-32699).
Jan 26 21:38:52 2026 :: Resetting #343: God Complex (rooms 34300-34399).
Jan 26 21:38:52 2026 :: Resetting #345: Asylum for the Insane (rooms 34500-34599).
Jan 26 21:38:52 2026 :: Resetting #346: God Hall Ext 346 for God Hall Cmplx (rooms 34600-34699).
Jan 26 21:38:52 2026 :: Resetting #491: Grenzland Building (rooms 49100-49199).
Jan 26 21:38:52 2026 :: Resetting #492: The Library Maze (rooms 49200-49299).
Jan 26 21:38:52 2026 :: Resetting #555: Ultima (rooms 55500-55599).
Jan 26 21:38:52 2026 :: Resetting #556: Ultima II (rooms 55600-55699).
Jan 26 21:38:52 2026 :: Resetting #653: Apartment (rooms 65300-65399).
Jan 26 21:38:52 2026 :: Resetting #654: Subdivision (rooms 65400-65499).
Jan 26 21:38:52 2026 :: Boot db -- DONE.
Jan 26 21:38:52 2026 :: Signal trapping.
Jan 26 21:38:52 2026 :: Entering game loop.
Jan 26 21:38:52 2026 :: No connections. Going to sleep.
Jan 26 21:39:50 2026 :: New connection. Waking up.
Jan 26 21:39:57 2026 :: Karrn has connected.
Jan 26 21:40:02 2026 :: Karrn had no variable file
Jan 26 21:40:02 2026 :: Karrn retrieving crash-saved items and entering game.
Jan 26 21:40:02 2026 :: Karrn (level 1) has 0 objects (max 30).
Jan 26 21:41:03 2026 :: Karrn has quit the game.
Jan 26 21:41:11 2026 :: PCLEAN: karrn Lev: 1 Last: Mon Jan 26 21:39:55 2026
Jan 26 21:41:11 2026 :: Karrn (lev 1) has self-deleted.
Jan 26 21:41:11 2026 :: Losing player: Karrn.
Jan 26 21:41:11 2026 :: No connections. Going to sleep.
Jan 26 21:41:14 2026 :: New connection. Waking up.
Jan 26 21:41:31 2026 :: Boggins [localhost] new player.
Jan 26 21:41:35 2026 :: Boggins had no variable file
Jan 26 21:41:35 2026 :: Boggins entering game with no equipment.
Jan 26 21:44:35 2026 :: Boggins has quit the game.
Jan 26 21:44:40 2026 :: Losing player: Boggins.
Jan 26 21:44:40 2026 :: No connections. Going to sleep.
Jan 26 21:44:42 2026 :: New connection. Waking up.
Jan 26 21:44:55 2026 :: nusage: 1 sockets connected, 0 sockets playing
Jan 26 21:45:01 2026 :: Losing player: Butterbart.
Jan 26 21:45:01 2026 :: No connections. Going to sleep.
Jan 26 21:45:02 2026 :: New connection. Waking up.
Jan 26 21:45:11 2026 :: Losing player: Alex.
Jan 26 21:45:11 2026 :: No connections. Going to sleep.
Jan 26 21:45:12 2026 :: New connection. Waking up.
Jan 26 21:45:29 2026 :: Karrn [localhost] new player.
Jan 26 21:45:34 2026 :: Losing player: Karrn.
Jan 26 21:45:34 2026 :: No connections. Going to sleep.
Jan 26 22:56:13 2026 :: New connection. Waking up.
Jan 26 22:56:20 2026 :: Losing player: <null>.
Jan 26 22:56:20 2026 :: No connections. Going to sleep.
Jan 26 22:58:37 2026 :: New connection. Waking up.
Jan 26 22:58:46 2026 :: Alex has connected.
Jan 26 22:58:58 2026 :: Alex had no variable file
Jan 26 22:58:58 2026 :: Alex un-renting and entering game.
Jan 26 22:58:58 2026 :: Alex (level 5) has 26 objects (max 30).
Jan 26 23:02:53 2026 :: nusage: 1 sockets connected, 1 sockets playing
Jan 26 23:07:53 2026 :: nusage: 1 sockets connected, 1 sockets playing
Jan 26 23:12:53 2026 :: nusage: 1 sockets connected, 1 sockets playing
Jan 26 23:16:09 2026 :: Alex advanced 1 level to level 6.
Jan 26 23:17:53 2026 :: nusage: 1 sockets connected, 1 sockets playing
Jan 26 23:22:53 2026 :: nusage: 1 sockets connected, 1 sockets playing
Jan 26 23:27:53 2026 :: nusage: 1 sockets connected, 1 sockets playing
Jan 26 23:32:53 2026 :: nusage: 1 sockets connected, 1 sockets playing
Jan 26 23:37:53 2026 :: nusage: 1 sockets connected, 1 sockets playing
Jan 26 23:40:31 2026 :: Alex has quit the game.
Jan 26 23:40:37 2026 :: Losing player: Alex.
Jan 26 23:40:37 2026 :: No connections. Going to sleep.
Jan 27 10:57:27 2026 :: New connection. Waking up.
Jan 27 10:57:32 2026 :: Butterbart has connected.
Jan 27 10:57:35 2026 :: Butterbart had no variable file
Jan 27 10:57:35 2026 :: Butterbart un-renting and entering game.
Jan 27 10:57:35 2026 :: Butterbart (level 7) has 31 objects (max 30).
Jan 27 10:59:42 2026 :: nusage: 1 sockets connected, 1 sockets playing
Jan 27 11:02:57 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 11:02:57 2026 :: Closing link to: Butterbart.
Jan 27 11:02:57 2026 :: No connections. Going to sleep.
Jan 27 11:27:45 2026 :: New connection. Waking up.
Jan 27 11:27:52 2026 :: Butterbart [aftr-62-216-209-15.dynamic.mnet-online.d] has reconnected.
Jan 27 11:28:23 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 11:28:23 2026 :: Closing link to: Butterbart.
Jan 27 11:28:23 2026 :: No connections. Going to sleep.
Jan 27 12:50:13 2026 :: New connection. Waking up.
Jan 27 12:50:25 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 12:50:25 2026 :: Losing descriptor without char.
Jan 27 12:50:25 2026 :: No connections. Going to sleep.
Jan 27 13:34:42 2026 :: New connection. Waking up.
Jan 27 13:34:59 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 13:34:59 2026 :: Losing descriptor without char.
Jan 27 13:34:59 2026 :: No connections. Going to sleep.
Jan 27 15:14:36 2026 :: New connection. Waking up.
Jan 27 15:14:50 2026 :: Butterbart [aftr-62-216-209-15.dynamic.mnet-online.d] has reconnected.
Jan 27 15:15:14 2026 :: nusage: 1 sockets connected, 1 sockets playing
Jan 27 15:17:59 2026 :: Butterbart has quit the game.
Jan 27 15:18:00 2026 :: Losing player: Butterbart.
Jan 27 15:18:00 2026 :: No connections. Going to sleep.
Jan 27 20:03:26 2026 :: New connection. Waking up.
SYSERR: gethostbyaddr: Success
Jan 27 20:03:28 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 20:03:28 2026 :: Losing player: <null>.
Jan 27 20:03:28 2026 :: No connections. Going to sleep.
Jan 27 20:03:28 2026 :: New connection. Waking up.
SYSERR: gethostbyaddr: Success
Jan 27 20:03:30 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 20:03:30 2026 :: Losing player: <null>.
Jan 27 20:03:30 2026 :: No connections. Going to sleep.
Jan 27 20:08:09 2026 :: New connection. Waking up.
Jan 27 20:08:10 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 20:08:10 2026 :: Losing descriptor without char.
Jan 27 20:08:10 2026 :: WARNING: Attempting to get content from iterator with NULL list.
Jan 27 20:08:10 2026 :: WARNING: Attempting to remove iterator from NULL list.
Jan 27 20:08:10 2026 :: No connections. Going to sleep.
Jan 27 21:19:25 2026 :: New connection. Waking up.
Jan 27 21:19:31 2026 :: Butterbart has connected.
Jan 27 21:19:32 2026 :: Butterbart had no variable file
Jan 27 21:19:32 2026 :: Butterbart un-renting and entering game.
Jan 27 21:19:32 2026 :: Butterbart (level 7) has 30 objects (max 30).
Jan 27 21:20:42 2026 :: Butterbart has quit the game.
Jan 27 21:20:44 2026 :: Losing player: Butterbart.
Jan 27 21:20:44 2026 :: No connections. Going to sleep.
Jan 27 21:43:57 2026 :: New connection. Waking up.
SYSERR: gethostbyaddr: Success
Jan 27 21:43:57 2026 :: Losing descriptor without char.
Jan 27 21:43:57 2026 :: WARNING: Attempting to get content from iterator with NULL list.
Jan 27 21:43:57 2026 :: WARNING: Attempting to remove iterator from NULL list.
Jan 27 21:43:57 2026 :: No connections. Going to sleep.
Jan 27 22:33:16 2026 :: New connection. Waking up.
Jan 27 22:33:19 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:33:19 2026 :: Losing descriptor without char.
Jan 27 22:33:19 2026 :: No connections. Going to sleep.
Jan 27 22:33:19 2026 :: New connection. Waking up.
Jan 27 22:33:22 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:33:22 2026 :: Losing descriptor without char.
Jan 27 22:33:22 2026 :: No connections. Going to sleep.
Jan 27 22:33:23 2026 :: New connection. Waking up.
Jan 27 22:33:26 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:33:26 2026 :: Losing descriptor without char.
Jan 27 22:33:26 2026 :: No connections. Going to sleep.
Jan 27 22:33:26 2026 :: New connection. Waking up.
Jan 27 22:33:29 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:33:29 2026 :: Losing descriptor without char.
Jan 27 22:33:29 2026 :: No connections. Going to sleep.
Jan 27 22:33:29 2026 :: New connection. Waking up.
Jan 27 22:33:33 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:33:33 2026 :: Losing descriptor without char.
Jan 27 22:33:33 2026 :: No connections. Going to sleep.
Jan 27 22:33:33 2026 :: New connection. Waking up.
Jan 27 22:33:36 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:33:36 2026 :: Losing descriptor without char.
Jan 27 22:33:36 2026 :: No connections. Going to sleep.
Jan 27 22:33:36 2026 :: New connection. Waking up.
Jan 27 22:33:39 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:33:39 2026 :: Losing descriptor without char.
Jan 27 22:33:39 2026 :: No connections. Going to sleep.
Jan 27 22:33:40 2026 :: New connection. Waking up.
Jan 27 22:33:43 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:33:43 2026 :: Losing descriptor without char.
Jan 27 22:33:43 2026 :: No connections. Going to sleep.
Jan 27 22:33:43 2026 :: New connection. Waking up.
Jan 27 22:33:46 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:33:46 2026 :: Losing descriptor without char.
Jan 27 22:33:46 2026 :: No connections. Going to sleep.
Jan 27 22:33:46 2026 :: New connection. Waking up.
Jan 27 22:33:50 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:33:50 2026 :: Losing descriptor without char.
Jan 27 22:33:50 2026 :: No connections. Going to sleep.
Jan 27 22:33:50 2026 :: New connection. Waking up.
Jan 27 22:33:53 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:33:53 2026 :: Losing descriptor without char.
Jan 27 22:33:53 2026 :: No connections. Going to sleep.
Jan 27 22:33:53 2026 :: New connection. Waking up.
Jan 27 22:33:56 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:33:56 2026 :: Losing descriptor without char.
Jan 27 22:33:56 2026 :: No connections. Going to sleep.
Jan 27 22:33:57 2026 :: New connection. Waking up.
Jan 27 22:34:00 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:34:00 2026 :: Losing descriptor without char.
Jan 27 22:34:02 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:34:02 2026 :: Losing descriptor without char.
Jan 27 22:34:03 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:34:03 2026 :: Losing descriptor without char.
Jan 27 22:34:06 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:34:06 2026 :: Losing descriptor without char.
Jan 27 22:34:06 2026 :: No connections. Going to sleep.
Jan 27 22:34:06 2026 :: New connection. Waking up.
Jan 27 22:34:08 2026 :: nusage: 1 sockets connected, 0 sockets playing
Jan 27 22:34:09 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:34:09 2026 :: Losing descriptor without char.
Jan 27 22:34:09 2026 :: No connections. Going to sleep.
Jan 27 22:34:09 2026 :: New connection. Waking up.
Jan 27 22:34:13 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:34:13 2026 :: Losing descriptor without char.
Jan 27 22:34:13 2026 :: No connections. Going to sleep.
Jan 27 22:34:13 2026 :: New connection. Waking up.
Jan 27 22:34:16 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:34:16 2026 :: Losing descriptor without char.
Jan 27 22:34:16 2026 :: No connections. Going to sleep.
Jan 27 22:34:16 2026 :: New connection. Waking up.
Jan 27 22:34:20 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:34:20 2026 :: Losing descriptor without char.
Jan 27 22:34:20 2026 :: No connections. Going to sleep.
Jan 27 22:34:20 2026 :: New connection. Waking up.
Jan 27 22:34:23 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:34:23 2026 :: Losing descriptor without char.
Jan 27 22:34:23 2026 :: No connections. Going to sleep.
Jan 27 22:34:23 2026 :: New connection. Waking up.
Jan 27 22:34:26 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:34:26 2026 :: Losing descriptor without char.
Jan 27 22:34:26 2026 :: No connections. Going to sleep.
Jan 27 22:34:27 2026 :: New connection. Waking up.
Jan 27 22:34:30 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:34:30 2026 :: Losing descriptor without char.
Jan 27 22:34:30 2026 :: No connections. Going to sleep.
Jan 27 22:34:30 2026 :: New connection. Waking up.
Jan 27 22:34:33 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:34:33 2026 :: Losing descriptor without char.
Jan 27 22:34:33 2026 :: No connections. Going to sleep.
Jan 27 22:34:33 2026 :: New connection. Waking up.
Jan 27 22:34:37 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:34:37 2026 :: Losing descriptor without char.
Jan 27 22:34:37 2026 :: No connections. Going to sleep.
Jan 27 22:34:37 2026 :: New connection. Waking up.
Jan 27 22:34:40 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:34:40 2026 :: Losing descriptor without char.
Jan 27 22:34:40 2026 :: No connections. Going to sleep.
Jan 27 22:34:40 2026 :: New connection. Waking up.
Jan 27 22:34:44 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:34:44 2026 :: Losing descriptor without char.
Jan 27 22:34:44 2026 :: No connections. Going to sleep.
Jan 27 22:34:44 2026 :: New connection. Waking up.
Jan 27 22:34:47 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:34:47 2026 :: Losing descriptor without char.
Jan 27 22:34:47 2026 :: No connections. Going to sleep.
Jan 27 22:34:47 2026 :: New connection. Waking up.
Jan 27 22:34:50 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:34:50 2026 :: Losing descriptor without char.
Jan 27 22:34:50 2026 :: No connections. Going to sleep.
Jan 27 22:34:51 2026 :: New connection. Waking up.
Jan 27 22:34:54 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:34:54 2026 :: Losing descriptor without char.
Jan 27 22:34:54 2026 :: No connections. Going to sleep.
Jan 27 22:34:54 2026 :: New connection. Waking up.
Jan 27 22:34:57 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:34:57 2026 :: Losing descriptor without char.
Jan 27 22:34:57 2026 :: No connections. Going to sleep.
Jan 27 22:34:57 2026 :: New connection. Waking up.
Jan 27 22:35:01 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:35:01 2026 :: Losing descriptor without char.
Jan 27 22:35:01 2026 :: No connections. Going to sleep.
Jan 27 22:35:01 2026 :: New connection. Waking up.
Jan 27 22:35:04 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:35:04 2026 :: Losing descriptor without char.
Jan 27 22:35:04 2026 :: No connections. Going to sleep.
Jan 27 22:35:04 2026 :: New connection. Waking up.
Jan 27 22:35:08 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:35:08 2026 :: Losing descriptor without char.
Jan 27 22:35:08 2026 :: No connections. Going to sleep.
Jan 27 22:35:08 2026 :: New connection. Waking up.
Jan 27 22:35:11 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:35:11 2026 :: Losing descriptor without char.
Jan 27 22:35:11 2026 :: No connections. Going to sleep.
Jan 27 22:35:11 2026 :: New connection. Waking up.
Jan 27 22:35:15 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:35:15 2026 :: Losing descriptor without char.
Jan 27 22:35:15 2026 :: No connections. Going to sleep.
Jan 27 22:35:15 2026 :: New connection. Waking up.
Jan 27 22:35:19 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:35:19 2026 :: Losing descriptor without char.
Jan 27 22:35:19 2026 :: No connections. Going to sleep.
Jan 27 22:35:19 2026 :: New connection. Waking up.
Jan 27 22:35:22 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:35:22 2026 :: Losing descriptor without char.
Jan 27 22:35:22 2026 :: No connections. Going to sleep.
Jan 27 22:35:23 2026 :: New connection. Waking up.
Jan 27 22:35:26 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:35:26 2026 :: Losing descriptor without char.
Jan 27 22:35:26 2026 :: No connections. Going to sleep.
Jan 27 22:35:26 2026 :: New connection. Waking up.
Jan 27 22:35:30 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:35:30 2026 :: Losing descriptor without char.
Jan 27 22:35:30 2026 :: No connections. Going to sleep.
Jan 27 22:35:30 2026 :: New connection. Waking up.
Jan 27 22:35:33 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:35:33 2026 :: Losing descriptor without char.
Jan 27 22:35:33 2026 :: No connections. Going to sleep.
Jan 27 22:35:34 2026 :: New connection. Waking up.
Jan 27 22:35:37 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:35:37 2026 :: Losing descriptor without char.
Jan 27 22:35:37 2026 :: No connections. Going to sleep.
Jan 27 22:35:37 2026 :: New connection. Waking up.
Jan 27 22:35:40 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:35:40 2026 :: Losing descriptor without char.
Jan 27 22:35:40 2026 :: No connections. Going to sleep.
Jan 27 22:35:40 2026 :: New connection. Waking up.
Jan 27 22:35:44 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:35:44 2026 :: Losing descriptor without char.
Jan 27 22:35:44 2026 :: No connections. Going to sleep.
Jan 27 22:35:44 2026 :: New connection. Waking up.
Jan 27 22:35:47 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:35:47 2026 :: Losing descriptor without char.
Jan 27 22:35:47 2026 :: No connections. Going to sleep.
Jan 27 22:35:47 2026 :: New connection. Waking up.
Jan 27 22:35:51 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:35:51 2026 :: Losing descriptor without char.
Jan 27 22:35:51 2026 :: No connections. Going to sleep.
Jan 27 22:35:51 2026 :: New connection. Waking up.
Jan 27 22:35:54 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:35:54 2026 :: Losing descriptor without char.
Jan 27 22:35:54 2026 :: No connections. Going to sleep.
Jan 27 22:35:54 2026 :: New connection. Waking up.
Jan 27 22:35:57 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:35:57 2026 :: Losing descriptor without char.
Jan 27 22:35:57 2026 :: No connections. Going to sleep.
Jan 27 22:35:58 2026 :: New connection. Waking up.
Jan 27 22:36:01 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:36:01 2026 :: Losing descriptor without char.
Jan 27 22:36:01 2026 :: No connections. Going to sleep.
Jan 27 22:36:01 2026 :: New connection. Waking up.
Jan 27 22:36:04 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:36:04 2026 :: Losing descriptor without char.
Jan 27 22:36:04 2026 :: No connections. Going to sleep.
Jan 27 22:36:04 2026 :: New connection. Waking up.
Jan 27 22:36:08 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:36:08 2026 :: Losing descriptor without char.
Jan 27 22:36:08 2026 :: No connections. Going to sleep.
Jan 27 22:36:08 2026 :: New connection. Waking up.
Jan 27 22:36:11 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:36:11 2026 :: Losing descriptor without char.
Jan 27 22:36:11 2026 :: No connections. Going to sleep.
Jan 27 22:36:11 2026 :: New connection. Waking up.
Jan 27 22:36:15 2026 :: WARNING: EOF on socket read (connection broken by peer)
Jan 27 22:36:15 2026 :: Losing descriptor without char.
Jan 27 22:36:15 2026 :: No connections. Going to sleep.

30
syslog.CRASH Normal file
View File

@@ -0,0 +1,30 @@
Jan 26 21:34:49 2026 :: Resetting #318: Dock Area (rooms 31800-31899).
Jan 26 21:34:49 2026 :: Resetting #319: Yllythad Sea (rooms 31900-31999).
Jan 26 21:34:49 2026 :: Resetting #320: Yllythad Sea II (rooms 32000-32099).
Jan 26 21:34:49 2026 :: Resetting #321: Yllythad Sea III (rooms 32100-32199).
Jan 26 21:34:49 2026 :: Resetting #322: McGintey Bay (rooms 32200-32299).
Jan 26 21:34:49 2026 :: Resetting #323: Caverns of the Pale Man (rooms 32300-32399).
Jan 26 21:34:49 2026 :: Resetting #324: Army Encampment (rooms 32400-32499).
Jan 26 21:34:49 2026 :: Resetting #325: Revelry (rooms 32500-32599).
Jan 26 21:34:49 2026 :: Resetting #326: Army Perimeter (rooms 32600-32699).
Jan 26 21:34:49 2026 :: Resetting #343: God Complex (rooms 34300-34399).
Jan 26 21:34:49 2026 :: Resetting #345: Asylum for the Insane (rooms 34500-34599).
Jan 26 21:34:49 2026 :: Resetting #346: God Hall Ext 346 for God Hall Cmplx (rooms 34600-34699).
Jan 26 21:34:49 2026 :: Resetting #491: Grenzland Building (rooms 49100-49199).
Jan 26 21:34:49 2026 :: Resetting #492: The Library Maze (rooms 49200-49299).
Jan 26 21:34:49 2026 :: Resetting #555: Ultima (rooms 55500-55599).
Jan 26 21:34:49 2026 :: Resetting #556: Ultima II (rooms 55600-55699).
Jan 26 21:34:49 2026 :: Resetting #653: Apartment (rooms 65300-65399).
Jan 26 21:34:49 2026 :: Resetting #654: Subdivision (rooms 65400-65499).
Jan 26 21:34:49 2026 :: Boot db -- DONE.
Jan 26 21:34:49 2026 :: Signal trapping.
Jan 26 21:34:49 2026 :: Entering game loop.
Jan 26 21:34:49 2026 :: No connections. Going to sleep.
Jan 26 21:36:26 2026 :: New connection. Waking up.
Jan 26 21:36:53 2026 :: Karrn [localhost] new player.
Jan 26 21:37:11 2026 :: Karrn had no variable file
Jan 26 21:37:11 2026 :: Karrn entering game with no equipment.
Jan 26 21:38:19 2026 :: SYSERR: Received SIGHUP, SIGINT, or SIGTERM. Shutting down...
Quick boot mode -- rent check supressed.
Using file descriptor for logging.
Improper shutdown of autorun detected, rotating syslogs before startup.