Compare commits
93 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f6c8c764ca | |||
| 94b9b69eec | |||
| f6cbe30c10 | |||
|
|
1127cb5d3e | ||
| 60c28bbfee | |||
|
|
168bdc20b7 | ||
| 1433fb4145 | |||
| b38e0deaf8 | |||
|
|
cd6d42146b | ||
| 1a6953dc9f | |||
| 9b9bb8eab5 | |||
|
|
6fb926bd21 | ||
|
|
237948350d | ||
|
|
7ab0918c9c | ||
| b1844be82d | |||
| 8fd4d5b234 | |||
| 5ac7427a6f | |||
| 37ba5ea608 | |||
|
|
1678f66809 | ||
| e0083e3767 | |||
| 8125d736c9 | |||
| c8e9cd8dc6 | |||
| 44a7ac0308 | |||
|
|
4e1680db1a | ||
|
|
f6339b495e | ||
|
|
3e0c1ccc18 | ||
|
|
b9d84fc325 | ||
|
|
bdaca46e79 | ||
|
|
f1794521cf | ||
|
|
89eb009c4f | ||
|
|
9a0a096f85 | ||
|
|
ba7dc7bf6f | ||
|
|
558e71eed8 | ||
|
|
a4af23538f | ||
|
|
b471ff195e | ||
|
|
392f3d90b8 | ||
|
|
be8de64cf8 | ||
|
|
5024dd8e66 | ||
|
|
69888a5d89 | ||
|
|
1ccb6adaee | ||
|
|
d3227f1300 | ||
|
|
88b3027ec6 | ||
|
|
7036a15782 | ||
|
|
e59420363a | ||
|
|
c838a513dd | ||
|
|
ed9e5e1c5a | ||
|
|
762cb77c60 | ||
|
|
317286d051 | ||
|
|
ac711ffff8 | ||
|
|
cde4b84be1 | ||
|
|
5da67ddc6a | ||
|
|
b2d38522e0 | ||
|
|
498b652546 | ||
|
|
213e52d255 | ||
|
|
79e2f91894 | ||
|
|
7f495670f2 | ||
|
|
e9c9808a24 | ||
|
|
c9ebc7174c | ||
|
|
bde600051d | ||
|
|
a745935421 | ||
|
|
0ee3aac10d | ||
|
|
15074b1d93 | ||
|
|
8f67dd880c | ||
|
|
34aca229df | ||
|
|
041765438a | ||
|
|
59398b2fdc | ||
|
|
97bd28ffd3 | ||
|
|
7039f9c402 | ||
|
|
3635026433 | ||
|
|
16a46903e4 | ||
|
|
2d8c05b4ed | ||
|
|
95d4da4972 | ||
|
|
9c801f9ab6 | ||
|
|
5305783e1b | ||
|
|
68dd901943 | ||
|
|
547c7ddccf | ||
|
|
dceb563a9b | ||
|
|
c0fb6f8a71 | ||
|
|
1f520546b2 | ||
|
|
6fede208d2 | ||
|
|
fc223452e8 | ||
|
|
a60f0eefb8 | ||
|
|
53870eba5d | ||
|
|
d5a11618f1 | ||
|
|
140cdc5d22 | ||
|
|
eb650c2811 | ||
|
|
4f875db90e | ||
|
|
7f0acefcb4 | ||
|
|
28ca86645b | ||
|
|
1ab51a0545 | ||
|
|
bf31d98414 | ||
|
|
934d83b829 | ||
|
|
462807d9e8 |
8
.clang-tidy
Normal file
8
.clang-tidy
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
Checks: >
|
||||||
|
-*,
|
||||||
|
clang-analyzer-*,
|
||||||
|
bugprone-*,
|
||||||
|
performance-*,
|
||||||
|
portability-*
|
||||||
|
#WarningsAsErrors: '*'
|
||||||
|
HeaderFilterRegex: 'src/.*'
|
||||||
19
.github/workflows/build.yml
vendored
Normal file
19
.github/workflows/build.yml
vendored
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
name: C/C++ CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ "master" ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ "master" ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: configure
|
||||||
|
run: ./configure
|
||||||
|
- name: build
|
||||||
|
run: cd src && touch .accepted && make
|
||||||
87
.gitignore
vendored
87
.gitignore
vendored
@@ -10,3 +10,90 @@ src/util/Makefile
|
|||||||
src/.accepted
|
src/.accepted
|
||||||
src/depend
|
src/depend
|
||||||
src/util/depend
|
src/util/depend
|
||||||
|
build/*
|
||||||
|
|
||||||
|
# Do not commit files from players
|
||||||
|
lib/plrfiles/A-E/*
|
||||||
|
lib/plrfiles/F-J/*
|
||||||
|
lib/plrfiles/K-O/*
|
||||||
|
lib/plrfiles/P-T/*
|
||||||
|
lib/plrfiles/U-Z/*
|
||||||
|
lib/plrfiles/ZZZ/*
|
||||||
|
lib/plrfiles/index
|
||||||
|
|
||||||
|
# but do commit the placeholders
|
||||||
|
!lib/plrfiles/A-E/00
|
||||||
|
!lib/plrfiles/F-J/00
|
||||||
|
!lib/plrfiles/K-O/00
|
||||||
|
!lib/plrfiles/P-T/00
|
||||||
|
!lib/plrfiles/U-Z/00
|
||||||
|
!lib/plrfiles/ZZZ/00
|
||||||
|
|
||||||
|
# or vars
|
||||||
|
lib/plrvars/A-E/*
|
||||||
|
lib/plrvars/F-J/*
|
||||||
|
lib/plrvars/K-O/*
|
||||||
|
lib/plrvars/P-T/*
|
||||||
|
lib/plrvars/U-Z/*
|
||||||
|
lib/plrvars/ZZZ/*
|
||||||
|
lib/plrvars/index
|
||||||
|
|
||||||
|
# except the placeholders
|
||||||
|
!lib/plrvars/A-E/00
|
||||||
|
!lib/plrvars/F-J/00
|
||||||
|
!lib/plrvars/K-O/00
|
||||||
|
!lib/plrvars/P-T/00
|
||||||
|
!lib/plrvars/U-Z/00
|
||||||
|
!lib/plrvars/ZZZ/00
|
||||||
|
|
||||||
|
# or objects
|
||||||
|
lib/plrobjs/A-E/*
|
||||||
|
lib/plrobjs/F-J/*
|
||||||
|
lib/plrobjs/K-O/*
|
||||||
|
lib/plrobjs/P-T/*
|
||||||
|
lib/plrobjs/U-Z/*
|
||||||
|
lib/plrobjs/ZZZ/*
|
||||||
|
lib/plrobjs/index
|
||||||
|
|
||||||
|
# except the placeholders
|
||||||
|
!lib/plrobjs/A-E/00
|
||||||
|
!lib/plrobjs/F-J/00
|
||||||
|
!lib/plrobjs/K-O/00
|
||||||
|
!lib/plrobjs/P-T/00
|
||||||
|
!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
|
||||||
|
src/test/*.o
|
||||||
|
src/test/testfile
|
||||||
|
|
||||||
|
|
||||||
|
# ide etc.
|
||||||
|
.vscode
|
||||||
|
.project
|
||||||
|
.settings
|
||||||
|
.idea
|
||||||
|
.cproject
|
||||||
|
|
||||||
|
# macOS generated files
|
||||||
|
.DS_Store
|
||||||
|
.DS_Store?
|
||||||
|
._*
|
||||||
|
.Spotlight-V100
|
||||||
|
.Trashes
|
||||||
|
ehthumbs.db
|
||||||
|
Thumbs.db
|
||||||
|
|||||||
407
CMakeLists.txt
Normal file
407
CMakeLists.txt
Normal 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()
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
Files for tbaMUD.
|
|
||||||
|
|
||||||
|
Files for Grenzland-MUD
|
||||||
|
|
||||||
|
Files for grenzland-mud, forked from tbamud
|
||||||
|
|
||||||
|
|||||||
71
configure
vendored
71
configure
vendored
@@ -1227,18 +1227,28 @@ if eval "test \"`echo '$ac_cv_func_'crypt`\" = yes"; then
|
|||||||
cat >> confdefs.h <<\EOF
|
cat >> confdefs.h <<\EOF
|
||||||
#define CIRCLE_CRYPT 1
|
#define CIRCLE_CRYPT 1
|
||||||
EOF
|
EOF
|
||||||
|
CRYPTLIB="-lcrypt"
|
||||||
|
echo "CRYPTLIB set to: $CRYPTLIB" 1>&6
|
||||||
|
|
||||||
else
|
else
|
||||||
echo "$ac_t""no" 1>&6
|
echo "$ac_t""no" 1>&6
|
||||||
echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6
|
echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6
|
||||||
echo "configure:1235: checking for crypt in -lcrypt" >&5
|
echo "configure:1235: checking for crypt in -lcrypt" >&5
|
||||||
ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'`
|
|
||||||
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
OS_NAME=$(uname)
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
if [ "$OS_NAME" = "Darwin" ]; then
|
||||||
else
|
# macOS: No need for -lcrypt
|
||||||
ac_save_LIBS="$LIBS"
|
CRYPTLIB=""
|
||||||
LIBS="-lcrypt $LIBS"
|
echo "CRYPTLIB not needed on macOS" 1>&6
|
||||||
cat > conftest.$ac_ext <<EOF
|
else
|
||||||
|
# Other systems (Linux): Use -lcrypt
|
||||||
|
ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'`
|
||||||
|
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
|
||||||
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
else
|
||||||
|
ac_save_LIBS="$LIBS"
|
||||||
|
LIBS="-lcrypt $LIBS"
|
||||||
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1243 "configure"
|
#line 1243 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
/* Override any gcc2 internal prototype to avoid an error. */
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
@@ -1250,30 +1260,29 @@ int main() {
|
|||||||
crypt()
|
crypt()
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1254: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
if { (eval echo configure:1254: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_lib_$ac_lib_var=yes"
|
eval "ac_cv_lib_$ac_lib_var=yes"
|
||||||
else
|
else
|
||||||
echo "configure: failed program was:" >&5
|
echo "configure: failed program was:" >&5
|
||||||
cat conftest.$ac_ext >&5
|
cat conftest.$ac_ext >&5
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
eval "ac_cv_lib_$ac_lib_var=no"
|
eval "ac_cv_lib_$ac_lib_var=no"
|
||||||
fi
|
fi
|
||||||
rm -f conftest*
|
rm -f conftest*
|
||||||
LIBS="$ac_save_LIBS"
|
LIBS="$ac_save_LIBS"
|
||||||
|
fi
|
||||||
fi
|
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
|
||||||
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
|
echo "$ac_t""yes" 1>&6
|
||||||
echo "$ac_t""yes" 1>&6
|
cat >> confdefs.h <<\EOF
|
||||||
cat >> confdefs.h <<\EOF
|
|
||||||
#define CIRCLE_CRYPT 1
|
#define CIRCLE_CRYPT 1
|
||||||
EOF
|
EOF
|
||||||
CRYPTLIB="-lcrypt"
|
CRYPTLIB="-lcrypt"
|
||||||
else
|
echo "CRYPTLIB set to: $CRYPTLIB on Linux" 1>&6
|
||||||
echo "$ac_t""no" 1>&6
|
else
|
||||||
fi
|
echo "$ac_t""no" 1>&6
|
||||||
|
fi
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -257,6 +257,9 @@ http://tbamud.com
|
|||||||
All donated areas have been added to the latest version of tbaMUD. If you
|
All donated areas have been added to the latest version of tbaMUD. If you
|
||||||
wish to donate some of your own work stop by the Builder Academy.
|
wish to donate some of your own work stop by the Builder Academy.
|
||||||
|
|
||||||
|
https://github.com/rds1983 has generated maps of all the existing areas,
|
||||||
|
and they can be found here: https://mudmapbuilder.github.io/
|
||||||
|
|
||||||
2.3. I have questions about tbaMUD. Where should I go?
|
2.3. I have questions about tbaMUD. Where should I go?
|
||||||
|
|
||||||
Stop by The Builder Academy at tbamud.com 9091 or the website at:
|
Stop by The Builder Academy at tbamud.com 9091 or the website at:
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Updated: Apr 2007
|
Updated: Apr 2007
|
||||||
tbaMUD README
|
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:
|
Information about CircleMUD can be found at the CircleMUD Home Page and FTP:
|
||||||
http://www.circlemud.org
|
http://www.circlemud.org
|
||||||
|
|||||||
93
doc/README.CMAKE.md
Normal file
93
doc/README.CMAKE.md
Normal 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.
|
||||||
21
doc/README.MSVC2022
Normal file
21
doc/README.MSVC2022
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
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.
|
||||||
30
doc/act.txt
30
doc/act.txt
@@ -24,7 +24,7 @@ Contents
|
|||||||
1.1 Overview
|
1.1 Overview
|
||||||
The act() function is used to process and send strings of text to characters
|
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
|
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
|
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
|
character is. Once the text string passed to the function has been parsed, it
|
||||||
is capitalized and a newline is added to its tail.
|
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:
|
These pieces are used as follows:
|
||||||
|
|
||||||
str: This is the basic string, a null terminated character array, including
|
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.
|
characters designated by the targets.
|
||||||
|
|
||||||
hide_invisible: A TRUE or FALSE value indicating whether or not to hide the
|
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
|
is associated with. The character is used to determine the room for the output
|
||||||
of the action in question.
|
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
|
vict_obj: This can be either a character involved in the action, another
|
||||||
object, or even a predefined string of text.
|
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 *).
|
null terminated character array (char *).
|
||||||
|
|
||||||
Do note, however, that obj and vict_obj are both ignored if there is no control
|
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
|
is set to TO_ROOM or TO_CHAR. In these cases, NULL should be supplied as the
|
||||||
input to the function.
|
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
|
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
|
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.
|
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
|
characters. However, instead of using the % symbol, act() uses the $ character
|
||||||
to indicate control characters.
|
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.
|
ch is a PC, a NPC, or an invisible PC/NPC.
|
||||||
$N Like $n, except insert the text for vict_obj.*
|
$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.*
|
$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.*
|
$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.*
|
$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.*
|
$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.*
|
$P Like $p for vict_obj.*
|
||||||
$a “an” or“a”, depending on the first character of obj’s name.
|
$a “an” or“a”, depending on the first character of obj’s name.
|
||||||
$A Like $a, for vict_obj.*
|
$A Like $a, for vict_obj.*
|
||||||
$T Prints the string pointed to by 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
|
$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
|
$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
|
(the word immediately after to the control code). If there is no following
|
||||||
word, no action is taken.
|
word, no action is taken.
|
||||||
$$ Print the character ‘$’.
|
$$ Print the character ‘$’.
|
||||||
|
|
||||||
NOTE*: vict_obj must be a pointer of type struct char_data *.
|
NOTE*: vict_obj must be a pointer of type struct char_data *.
|
||||||
|
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ to players in color in the tbaMUD game engine. Its intended audience is for
|
|||||||
Coders of tbaMUD.
|
Coders of tbaMUD.
|
||||||
|
|
||||||
tbaMUD allows you to create colorful messages by using ANSI control sequences.
|
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
|
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
|
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
|
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
|
programmer must decide which messages will be colored for each of the color
|
||||||
levels.
|
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.
|
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
|
cyan and white. They are accessible by sending control sequences as part of
|
||||||
another string, for example:
|
another string, for example:
|
||||||
|
|
||||||
sprintf(buf, "If you’re %shappy%s and you know it clap "
|
sprintf(buf, "If you’re %shappy%s and you know it clap "
|
||||||
"%d of your hands.\n\r", x, y, num_of_hands);
|
"%d of your hands.\n\r", x, y, num_of_hands);
|
||||||
send_to_char(ch, buf);
|
send_to_char(ch, buf);
|
||||||
|
|
||||||
In this example, x and y are the “on” and “off” sequences for the color you
|
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 (don’t
|
want. There are 2 main series of color macros available for you to use (don’t
|
||||||
actually use “x” and “y,” of course!): the K series and the CC series. The CC
|
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.
|
(Conditional Color) series is recommended for most general use.
|
||||||
|
|
||||||
The name of the actual sequence starts with the name of its series, plus a
|
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
|
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
|
code. Therefore, if you use a K-series color code, the color will ALWAYS be
|
||||||
sent, even if the person you’re sending it to has color off. This can very bad.
|
sent, even if the person you’re sending it to has color off. This can very bad.
|
||||||
Some people who do not have ANSI-compatible terminals will see garbage
|
Some people who do not have ANSI-compatible terminals will see garbage
|
||||||
characters instead of colors. If the terminal correctly ignores ANSI color
|
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
|
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 player’s color level will later be
|
used to print colors to a string if the player’s color level will later be
|
||||||
tested manually (for an example, see do_gen_com in act.comm.c).
|
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
|
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
|
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
|
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
|
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
|
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:
|
To illustrate the above, an example is in order:
|
||||||
|
|
||||||
@@ -76,29 +76,29 @@ ACMD(do_showcolor)
|
|||||||
{
|
{
|
||||||
char buf[300];
|
char buf[300];
|
||||||
|
|
||||||
sprintf(buf, "Don’t you just love %scolor%s, %scolor%s, " "%sCOLOR%s!\n\r",
|
sprintf(buf, "Don’t 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),
|
CCBLU(ch, C_CMP), CCNRM(ch, C_CMP), CCYEL(ch, C_NRM), CCNRM(ch, C_NRM),
|
||||||
CCRED(ch, C_SPR), CCNRM(ch, C_SPR));
|
CCRED(ch, C_SPR), CCNRM(ch, C_SPR));
|
||||||
send_to_char(ch, buf);
|
send_to_char(ch, buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
What does this do? For people with color set to Complete, it prints:
|
What does this do? For people with color set to Complete, it prints:
|
||||||
Don’t you just love color, color, COLOR! (blue) (yellow) (red)
|
Don’t you just love color, color, COLOR! (blue) (yellow) (red)
|
||||||
|
|
||||||
People who have color set to Normal will see:
|
People who have color set to Normal will see:
|
||||||
Don’t you just love color, color, COLOR! (yellow) (red)
|
Don’t you just love color, color, COLOR! (yellow) (red)
|
||||||
|
|
||||||
People who have color set to Sparse will see:
|
People who have color set to Sparse will see:
|
||||||
Don’t you just love color, color, COLOR! (red)
|
Don’t you just love color, color, COLOR! (red)
|
||||||
|
|
||||||
People who have color set to Off will see:
|
People who have color set to Off will see:
|
||||||
Don’t you just love color, color, COLOR! (no color, as you’d expect)
|
Don’t you just love color, color, COLOR! (no color, as you’d expect)
|
||||||
|
|
||||||
There are several common pitfalls with using the CC series of color macros:
|
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
|
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
|
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:
|
“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));
|
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
|
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
|
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 don’t have to.
|
unnecessarily get the CCNRM code. Never send a color code if you don’t have to.
|
||||||
The codes are several bytes long, and cause a noticeable pause at 2400 baud.
|
The codes are several bytes long, and cause a noticeable pause at 2400 baud.
|
||||||
|
|
||||||
This should go without saying, but don’t ever send color at the C_OFF level.
|
This should go without saying, but don’t ever send color at the C_OFF level.
|
||||||
|
|
||||||
Special precautions must be taken when sending a colored string to a large
|
Special precautions must be taken when sending a colored string to a large
|
||||||
group of people. You can’t use the color level of “ch” (the person sending the
|
group of people. You can’t use the color level of “ch” (the person sending the
|
||||||
string) – each person receiving the string must get a string appropriately
|
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
|
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 player’s color level
|
strings (one colored and one not), and test each player’s color level
|
||||||
individually (see do_gen_comin act.comm.c for an example).
|
individually (see do_gen_comin act.comm.c for an example).
|
||||||
|
|||||||
@@ -4,14 +4,14 @@ Builder Academy at telnet://tbamud.com:9091 or email rumble@tbamud.com -- Rumble
|
|||||||
The Art of Debugging
|
The Art of Debugging
|
||||||
Originally by Michael Chastain and Sammy
|
Originally by Michael Chastain and Sammy
|
||||||
|
|
||||||
The following documentation is excerpted from Merc 2.0’s hacker.txt file. It
|
The following documentation is excerpted from Merc 2.0’s hacker.txt file. It
|
||||||
was written by Furey of MERC Industries and is included here with his
|
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,
|
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
|
such as specific filenames) because it offers good advice and insight into the
|
||||||
art and science of software engineering. More information about tbaMUD,
|
art and science of software engineering. More information about tbaMUD,
|
||||||
can be found at the tbaMUD home page http://tbamud.com.
|
can be found at the tbaMUD home page http://tbamud.com.
|
||||||
|
|
||||||
1 “I’m running a Mud so I can learn C programming!”
|
1 “I’m running a Mud so I can learn C programming!”
|
||||||
|
|
||||||
Yeah, right. The purpose of this document is to record some of our knowledge,
|
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
|
experience and philosophy. No matter what your level, we hope that this
|
||||||
@@ -31,11 +31,11 @@ Play with it some more.
|
|||||||
Read documentation again.
|
Read documentation again.
|
||||||
Get the idea?
|
Get the idea?
|
||||||
|
|
||||||
The idea is that your mind can accept only so much “new data” in a single
|
The idea is that your mind can accept only so much “new data” in a single
|
||||||
session. Playing with something doesn’t introduce very much new data, but it
|
session. Playing with something doesn’t introduce very much new data, but it
|
||||||
does transform data in your head from the “new” category to the “familiar”
|
does transform data in your head from the “new” category to the “familiar”
|
||||||
category. Reading documentation doesn’t make anything “familiar,” but it
|
category. Reading documentation doesn’t make anything “familiar,” but it
|
||||||
refills your “new” hopper.
|
refills your “new” hopper.
|
||||||
|
|
||||||
Most people, if they even read documentation in the first place, never return
|
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
|
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.
|
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.
|
files.
|
||||||
|
|
||||||
vi, emacs, jove use whatever editor floats your boat, but learn the hell out
|
vi, emacs, jove use whatever editor floats your boat, but learn the hell out
|
||||||
of it; you should know every command in your editor.
|
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.
|
in any source file.
|
||||||
|
|
||||||
>, >>, <, | input and output redirection at the command line; get someone to
|
>, >>, <, | 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
|
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
|
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.
|
behavior, and confirm or refute the hypothesis.
|
||||||
|
|
||||||
A good hypothesis is one which makes surprising predictions which then come
|
A good hypothesis is one which makes surprising predictions which then come
|
||||||
true; predictions that other hypotheses don’t make.
|
true; predictions that other hypotheses don’t make.
|
||||||
|
|
||||||
The first step in debugging is not to write bugs in the first place. This
|
The first step in debugging is not to write bugs in the first place. This
|
||||||
sounds obvious, but sadly, is all too often ignored.
|
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
|
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
|
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
|
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.
|
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
|
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
|
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 people’s code, that
|
in your group whose only job it is to desk-check other people’s code, that
|
||||||
person will find and fix more bugs than everyone else combined.
|
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
|
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.
|
broken programs trying to find one bug at a time.
|
||||||
|
|
||||||
The next technique beyond desk-checking is the time-honored technique of
|
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
|
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
|
interesting values at interesting times. Where and when to dump these values
|
||||||
is an art, which you will learn only with practice.
|
is an art, which you will learn only with practice.
|
||||||
|
|
||||||
If you don’t already know how to redirect output in your operating system, now
|
If you don’t 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
|
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
|
about the “>” operator. You should also learn the difference between “standard
|
||||||
output” (for example, output from “printf”) and “standard error” (for example,
|
output” (for example, output from “printf”) and “standard error” (for example,
|
||||||
output from “fprintf(stderr, ...)”).
|
output from “fprintf(stderr, ...)”).
|
||||||
|
|
||||||
Ultimately, you cannot fix a program unless you understand how it is operating
|
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
|
in the first place. Powerful debugging tools will help you collect data, but
|
||||||
they can’t interpret it, and they can’t fix the underlying problems. Only you
|
they can’t interpret it, and they can’t fix the underlying problems. Only you
|
||||||
can do that.
|
can do that.
|
||||||
|
|
||||||
When you find a bug... your first impulse will be to change the code, kill the
|
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
|
bug, all the way down. You should grok the bug and cherish it in fullness
|
||||||
before causing its discorporation.
|
before causing its discorporation.
|
||||||
|
|
||||||
Also, when finding a bug, ask yourself two questions: “What design and
|
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:
|
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?”
|
“What habits would systematically prevent the introduction of bugs like this?”
|
||||||
|
|
||||||
5 Debugging: Tools
|
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
|
executes an illegal instruction, or (even more rarely) something else goes
|
||||||
wrong, the Unix operating system takes control. The process is incapable of
|
wrong, the Unix operating system takes control. The process is incapable of
|
||||||
further execution and must be killed. Before killing the process, however, the
|
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.
|
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.
|
Thus, “dumping core” is not a cause of problems, or even an effect of problems.
|
||||||
It’s something the operating system does to help you find fatal problems which
|
It’s something the operating system does to help you find fatal problems which
|
||||||
have rendered your process unable to continue.
|
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
|
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
|
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
|
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
|
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
|
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.
|
were calling it. The debugger will also list the arguments to these functions.
|
||||||
Interpreting these arguments, and using more advanced debugger features,
|
Interpreting these arguments, and using more advanced debugger features,
|
||||||
@@ -343,12 +343,12 @@ new tools.
|
|||||||
|
|
||||||
7 Profiling
|
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.
|
spending most of its time. This can help you to make a program more efficient.
|
||||||
|
|
||||||
Here is how to profile a program:
|
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
|
make clean
|
||||||
|
|
||||||
2. Edit your Makefile, and change the PROFILE=line:
|
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
|
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
|
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 won’t
|
conditions. If you crash the game, or kill the process externally, you won’t
|
||||||
get profiling information.
|
get profiling information.
|
||||||
|
|
||||||
5. Run the profcommand:
|
5. Run the profcommand:
|
||||||
prof bin/circle > prof.out
|
prof bin/circle > prof.out
|
||||||
|
|
||||||
6. Read prof.out. Run “man prof” to understand the format of the output. For
|
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”
|
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
|
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
|
exactly how many times any function calls any other function. This information
|
||||||
is valuable for debugging as well as performance analysis.
|
is valuable for debugging as well as performance analysis.
|
||||||
|
|
||||||
Availability of “prof” and “gprof” varies from system to system. Almost every
|
Availability of “prof” and “gprof” varies from system to system. Almost every
|
||||||
Unix system has “prof”. Only some systems have “gprof”.
|
Unix system has “prof”. Only some systems have “gprof”.
|
||||||
|
|
||||||
7 Books for Serious Programmers
|
7 Books for Serious Programmers
|
||||||
|
|
||||||
Out of all the thousands of books out there, three stand out:
|
Out of all the thousands of books out there, three stand out:
|
||||||
|
|
||||||
Kernighan and Plaugher, “The Elements of Programming Style”
|
Kernighan and Plaugher, “The Elements of Programming Style”
|
||||||
Kernighan and Ritchie, “The C Programming Language”
|
Kernighan and Ritchie, “The C Programming Language”
|
||||||
Brooks, “The Mythical Man Month”
|
Brooks, “The Mythical Man Month”
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ Builder Academy at telnet://tbamud.com:9091 or email rumble@tbamud.com -- Rumble
|
|||||||
|
|
||||||
tbaMUD File Manifest
|
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 &).
|
autorun - Shell script to run the MUD (./autorun &).
|
||||||
FAQ - Frequently Aske Questions with answers.
|
FAQ - Frequently Aske Questions with answers.
|
||||||
@@ -16,7 +16,7 @@ lib/ - MUD data.
|
|||||||
log/ - System logs.
|
log/ - System logs.
|
||||||
src/ - Source code.
|
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.
|
utilities, which are described in utils.txt.
|
||||||
|
|
||||||
The doc/ directory has its own README file, describing the contents of each
|
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:
|
The lib/misc/ directory contains the following files:
|
||||||
|
|
||||||
bugs - Bugs reported by players with the ’bug’ command.
|
bugs - Bugs reported by players with the ’bug’ command.
|
||||||
ideas - Ideas from players from ’idea’ command.
|
ideas - Ideas from players from ’idea’ command.
|
||||||
messages - Spell and skill damage messages.
|
messages - Spell and skill damage messages.
|
||||||
socials - Text file with text of the socials.
|
socials - Text file with text of the socials.
|
||||||
socials.new - New format of socials you can edit via AEDIT.
|
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.
|
xnames - Text file of invalid names.
|
||||||
|
|
||||||
The lib/plrobjs/ contains the following files and directories:
|
The lib/plrobjs/ contains the following files and directories:
|
||||||
@@ -80,18 +80,18 @@ zzz/
|
|||||||
The lib/text/ directory contains the following files:
|
The lib/text/ directory contains the following files:
|
||||||
|
|
||||||
background - Background story (for option 3 from main menu).
|
background - Background story (for option 3 from main menu).
|
||||||
credits - Text for ’credits’ command.
|
credits - Text for ’credits’ command.
|
||||||
greetings - Greeting message.
|
greetings - Greeting message.
|
||||||
handbook - Text for Immortal Handbook (’handbook’ command).
|
handbook - Text for Immortal Handbook (’handbook’ command).
|
||||||
immlist - Text for ’immlist’ command.
|
immlist - Text for ’immlist’ command.
|
||||||
imotd - Immortal MOTD --seen by immortals on login.
|
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.
|
motd - MOTD --seen by mortals on login.
|
||||||
news - Text for ’news’ command.
|
news - Text for ’news’ command.
|
||||||
policies - Text for ’policy’ command.
|
policies - Text for ’policy’ command.
|
||||||
wizlist - Text for ’wizlist’ command.
|
wizlist - Text for ’wizlist’ command.
|
||||||
/help/screen - Text for ’help’ command as a mortal with no arguments.
|
/help/screen - Text for ’help’ command as a mortal with no arguments.
|
||||||
/help/iscreen - Text for ’help’ command an an immortal with no arguments.
|
/help/iscreen - Text for ’help’ command an an immortal with no arguments.
|
||||||
|
|
||||||
The lib/world/directory contains the following subdirectories:
|
The lib/world/directory contains the following subdirectories:
|
||||||
|
|
||||||
@@ -103,8 +103,8 @@ wld - Contains *.wld files (world files)
|
|||||||
zon - Contains *.zon files (zone files)
|
zon - Contains *.zon files (zone files)
|
||||||
|
|
||||||
Each of the 6 subdirectories in the lib/world/ directory also contains two
|
Each of the 6 subdirectories in the lib/world/ directory also contains two
|
||||||
additional files – one called ‘index’, which specifies which files in that
|
additional files – one called ‘index’, which specifies which files in that
|
||||||
directory should be loaded when the MUD boots, and ‘index.mini’, which
|
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
|
specifies which files should be loaded if the MUD is booted with the -m
|
||||||
(mini-mud) option.
|
(mini-mud) option.
|
||||||
|
|
||||||
@@ -128,6 +128,6 @@ trigger - Trigedit log messages.
|
|||||||
usage - Mud system usage (player load & memory usage info).
|
usage - Mud system usage (player load & memory usage info).
|
||||||
|
|
||||||
The src/ directory contains all of the C and header files for the MUD, along
|
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 tbaMUD’s utility
|
with a Makefile. The src/util/ directory contains source for tbaMUD’s utility
|
||||||
programs. See admin.txt for more information on how to compile the MUD. See
|
programs. See admin.txt for more information on how to compile the MUD. See
|
||||||
utils.txt for more information on how to use tbaMUD’s utilities.
|
utils.txt for more information on how to use tbaMUD’s utilities.
|
||||||
|
|||||||
@@ -9,16 +9,16 @@ every platform that exists. This document is for experienced programmers
|
|||||||
trying to make tbaMUD work on their platform.
|
trying to make tbaMUD work on their platform.
|
||||||
|
|
||||||
tbaMUD should work on most UNIX platforms without any modifications; simply run
|
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
|
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
|
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
|
from a template called conf.h.in. A Makefile is also created from the template
|
||||||
Makefile.in.
|
Makefile.in.
|
||||||
|
|
||||||
Non-UNIX platforms are a problem. Some can’t run tbaMUD at all. However, any
|
Non-UNIX platforms are a problem. Some can’t run tbaMUD at all. However, any
|
||||||
multitasking OS that has an ANSI C compiler, and supports non-blocking I/O and
|
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
|
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 tbaMUD’s
|
example, OS/2, AmigaOS, Mac OS (Classic versions; Mac OS X supports tbaMUD’s
|
||||||
configure script from the command line), and all versions of Windows.
|
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
|
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
|
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
|
number of tips for porting can be found after the porting steps. Note that we
|
||||||
have already ported tba to Windows, so if you’re confused as to how to perform
|
have already ported tba to Windows, so if you’re confused as to how to perform
|
||||||
some of these steps, you can look at what we have done as an example (see the
|
some of these steps, you can look at what we have done as an example (see the
|
||||||
files README.CYGWIN).
|
files README.CYGWIN).
|
||||||
|
|
||||||
@@ -36,11 +36,11 @@ trying to port the code.
|
|||||||
|
|
||||||
Porting the Code
|
Porting the Code
|
||||||
|
|
||||||
Step 1. Create a “conf.h” file for your system. Copy the template “conf.h.in”
|
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
|
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,
|
and based on the characteristics of your system. To write the conf.h file,
|
||||||
you’ll need to know which header files are included with your system, the
|
you’ll need to know which header files are included with your system, the
|
||||||
return type of signals, whether or not your compiler supports the ‘const’
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
make sure that your changes are stable. Make sure that automatic events such as
|
||||||
zone resets, point regeneration, and corpse decomposition are being timed
|
zone resets, point regeneration, and corpse decomposition are being timed
|
||||||
correctly (a tick should be about 75 seconds). Try resetting all the zones
|
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.
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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:
|
you can create a patch file like this:
|
||||||
|
|
||||||
diff -u --new-file --recursive stock-tba/src my-tba/src > patch
|
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
|
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
|
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
|
sure that tbaMUD is correctly changed to incorporate your patches. This step is
|
||||||
very important: if you don’t create these patches correctly, your work will be
|
very important: if you don’t create these patches correctly, your work will be
|
||||||
useless because no one will be able to figure out what you did! Make sure to
|
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 don’t understand how to use
|
read the documentation to ‘diff’ and ‘patch’ if you don’t understand how to use
|
||||||
them. If your patches work, CELEBRATE!!
|
them. If your patches work, CELEBRATE!!
|
||||||
|
|
||||||
Step 6. Write a README file for your operating system that describes everything
|
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
|
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
|
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
|
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
|
3.2 ANSI C and GCC
|
||||||
As long as your system has an ANSI C compiler, all of the code (except for
|
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
|
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
|
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
|
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
|
something even if other players are trying to enter commands. If your system
|
||||||
does not implement non-blocking I/O correctly, try using the
|
does not implement non-blocking I/O correctly, try using the
|
||||||
POSIX_NONBLOCK_BROKEN constant in sysdep.h.
|
POSIX_NONBLOCK_BROKEN constant in sysdep.h.
|
||||||
|
|
||||||
3.4 Timing
|
3.4 Timing
|
||||||
tbaMUD needs a fairly precise (on the order of 5 or 10 ms) timer in order to
|
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
|
corpse decomposition, and other automatic tasks. If your system supports the
|
||||||
select() system call with sufficient precision, the default timing code should
|
select() system call with sufficient precision, the default timing code should
|
||||||
work correctly. If not, you’ll have to find out which system calls your system
|
work correctly. If not, you’ll have to find out which system calls your system
|
||||||
supports for determining how much time has passed and replace the select()
|
supports for determining how much time has passed and replace the select()
|
||||||
timing method.
|
timing method.
|
||||||
|
|
||||||
3.5 Signals and Signal Handlers
|
3.5 Signals and Signal Handlers
|
||||||
A note about signals: Most systems don’t support the concept of signals in the
|
A note about signals: Most systems don’t support the concept of signals in the
|
||||||
same way that UNIX does. Since signals are not a critical part of how tbaMUD
|
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
|
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
|
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
|
4 Final Note
|
||||||
IMPORTANT: Remember to keep any changes you make surrounded by #ifdef
|
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
|
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
|
(once you get them to work) will be suitable for incorporation into the
|
||||||
tbaMUD distribution, meaning that tbaMUD will officially support your platform.
|
tbaMUD distribution, meaning that tbaMUD will officially support your platform.
|
||||||
|
|||||||
@@ -10,6 +10,9 @@ to rec.games.mud.diku which originally announced CircleMUD as a publicly
|
|||||||
available MUD source code.
|
available MUD source code.
|
||||||
|
|
||||||
tbaMUD Release history:
|
tbaMUD Release history:
|
||||||
|
Version 2025 release: January, 2025
|
||||||
|
Version 2023 release: January, 2023
|
||||||
|
Version 2021 release: March, 2021
|
||||||
Version 2020 release: January, 2020
|
Version 2020 release: January, 2020
|
||||||
Version 2019 release: January, 2019
|
Version 2019 release: January, 2019
|
||||||
Version 2018 release: January, 2018
|
Version 2018 release: January, 2018
|
||||||
@@ -140,7 +143,7 @@ communication channels
|
|||||||
totally ignores all commands from that player until they are thawed.
|
totally ignores all commands from that player until they are thawed.
|
||||||
--Even handier DELETE flag allows you to delete players on the fly.
|
--Even handier DELETE flag allows you to delete players on the fly.
|
||||||
--"set" command (mentioned above) allows you to freeze/unfreeze/
|
--"set" command (mentioned above) allows you to freeze/unfreeze/
|
||||||
delete/siteok/un-siteok players --even if they aren’t logged in!
|
delete/siteok/un-siteok players --even if they aren’t logged in!
|
||||||
--Bad password attempts are written to the system log and saved;
|
--Bad password attempts are written to the system log and saved;
|
||||||
if someone tries to hack your account, you see "4 LOGIN FAILURES
|
if someone tries to hack your account, you see "4 LOGIN FAILURES
|
||||||
SINCE LAST SUCCESSFUL LOGIN" next time you log on.
|
SINCE LAST SUCCESSFUL LOGIN" next time you log on.
|
||||||
|
|||||||
@@ -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
|
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 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
|
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 character’s name
|
character performing the social, although in such cases the character’s name
|
||||||
will, of course, be replaced with “someone”. The min positions should be set to
|
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
|
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
|
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
|
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.
|
does this automatically.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|||||||
@@ -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.
|
are used to convert currently existing files into different formats.
|
||||||
|
|
||||||
Overall, these utilities have been created in an attempt to make the tbaMUD
|
Overall, these utilities have been created in an attempt to make the tbaMUD
|
||||||
administrator’s life a bit easier, and to give the administrator some ideas of
|
administrator’s life a bit easier, and to give the administrator some ideas of
|
||||||
further and more grandiose utilities to create. Some are no longer applicable
|
further and more grandiose utilities to create. Some are no longer applicable
|
||||||
but are retained as examples.
|
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
|
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
|
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
|
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
|
world file at the appropriate points, where filename is the name of the file
|
||||||
for the following section.
|
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]
|
autowiz <wizlev> <wizlistfile> <immlev> <immlistfile> [pid to signal]
|
||||||
|
|
||||||
where <wizlev> is equal to whatever LVL_GOD is set to in your tbaMUD server,
|
where <wizlev> is equal to whatever LVL_GOD is set to in your tbaMUD server,
|
||||||
<wizlistfile> is the filename for the file containing the game’s Wizlist.
|
<wizlistfile> is the filename for the file containing the game’s Wizlist.
|
||||||
<immlev> should be set to your game’s LVL_IMMORT, while <immlistfile>
|
<immlev> should be set to your game’s LVL_IMMORT, while <immlistfile>
|
||||||
is the name of the Immlist file.
|
is the name of the Immlist file.
|
||||||
|
|
||||||
This utility must be recompiled if you make any changes to the player file structure.
|
This utility must be recompiled if you make any changes to the player file structure.
|
||||||
|
|||||||
BIN
lib/etc/board.grenzland
Normal file
BIN
lib/etc/board.grenzland
Normal file
Binary file not shown.
@@ -2893,7 +2893,7 @@ $n looks at your $t and seems to think it could use a little trimming off the to
|
|||||||
You look at $p and think it could use a little trimming off the top.
|
You look at $p and think it could use a little trimming off the top.
|
||||||
$n looks at $p and seems to think it could use a little trimming off the top.
|
$n looks at $p and seems to think it could use a little trimming off the top.
|
||||||
|
|
||||||
~halo halo 0 8 8 31
|
~halo halo 0 8 8 1
|
||||||
You whip out the ol' halo. That should prove your innocence.
|
You whip out the ol' halo. That should prove your innocence.
|
||||||
$n loads a halo and dons it.
|
$n loads a halo and dons it.
|
||||||
$N could use a good disguise.
|
$N could use a good disguise.
|
||||||
@@ -6109,7 +6109,7 @@ $n looks around for a victim to strangle.
|
|||||||
You throw yourself against $N's throat, trying to squeeze the life out.
|
You throw yourself against $N's throat, trying to squeeze the life out.
|
||||||
$n throws $mself after $N's throat.
|
$n throws $mself after $N's throat.
|
||||||
$n throws $mself after your throat, you try to defend yourself.
|
$n throws $mself after your throat, you try to defend yourself.
|
||||||
AARGH! They must have left... #&%£@!
|
AARGH! They must have left...
|
||||||
You put your hands around your throat and stop breathing.
|
You put your hands around your throat and stop breathing.
|
||||||
$n tries to strangle $mself, making a very strange noise and getting blue in the face.
|
$n tries to strangle $mself, making a very strange noise and getting blue in the face.
|
||||||
You strangle $M $t.
|
You strangle $M $t.
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
(lib/text/background)
|
(lib/text/background)
|
||||||
|
|
||||||
There once was a guy who played MUDs
|
The mists part and you find yourself in a
|
||||||
But the MUDs that he played were all duds
|
world unlike the one you have just left.
|
||||||
"I'll write one," said he.
|
Reality twisted and turned, and the land
|
||||||
And he brushed off his C.
|
has found itself in a new configuration.
|
||||||
And soon played his game with his buds.
|
Enter the borderland of reality and find
|
||||||
|
your own way.
|
||||||
|
In the Grenzland.
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,13 @@
|
|||||||
T B A M U D
|
|
||||||
2 0 2 0
|
|
||||||
|
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,
|
Based on CircleMUD by Jeremy Elson and DikuMUD by Hans-Henrik Staerfeldt,
|
||||||
Katja Nyboe, Tom Madsen, Michael Seifert, and Sebastian Hammer
|
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?
|
||||||
|
|||||||
@@ -865,7 +865,7 @@ AUTOQUESTS QUESTS QUESTMASTERS QUEST-MOBS QUESTMOBS
|
|||||||
|
|
||||||
An autoquest is a quest that can be automatically started and completed
|
An autoquest is a quest that can be automatically started and completed
|
||||||
without the intervention of an immortal. Simply visit a questmaster and join
|
without the intervention of an immortal. Simply visit a questmaster and join
|
||||||
an available quest, and get rewarded on it’s 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.
|
autoquests scattered throughout the World.
|
||||||
|
|
||||||
See Also: QUEST-FLAG, QUESTPOINTS
|
See Also: QUEST-FLAG, QUESTPOINTS
|
||||||
@@ -1584,7 +1584,6 @@ qedit (quest editor)
|
|||||||
questpoints
|
questpoints
|
||||||
buildwalk
|
buildwalk
|
||||||
dig
|
dig
|
||||||
tell m-w (an in game dictionary lookup)
|
|
||||||
gemote
|
gemote
|
||||||
history
|
history
|
||||||
file
|
file
|
||||||
@@ -2444,25 +2443,6 @@ Example:
|
|||||||
> diagnose doctor
|
> diagnose doctor
|
||||||
|
|
||||||
See also: CONSIDER, HIT, KILL
|
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
|
#31
|
||||||
DIG UNDIG RDIG RELINK RLINKS
|
DIG UNDIG RDIG RELINK RLINKS
|
||||||
|
|
||||||
@@ -3173,7 +3153,7 @@ game.
|
|||||||
Invest in a thesaurus. Makes a world of difference, and if that doesn't
|
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
|
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
|
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?
|
4. Where can I learn Trigedit?
|
||||||
Here! Welcor is now the developer of trigedit. We have extensive help files,
|
Here! Welcor is now the developer of trigedit. We have extensive help files,
|
||||||
@@ -3312,7 +3292,7 @@ the earthquake spell.
|
|||||||
|
|
||||||
See also: WATERWALK, EARTHQUAKE
|
See also: WATERWALK, EARTHQUAKE
|
||||||
#0
|
#0
|
||||||
FOLLOWERS
|
FOLLOWERS UNFOLLOW
|
||||||
|
|
||||||
Usage: follow <leader>
|
Usage: follow <leader>
|
||||||
|
|
||||||
@@ -3350,7 +3330,7 @@ The 3rd number is liquid type from the following:
|
|||||||
value 1: Initial drink units. Must be 1 or greater.
|
value 1: Initial drink units. Must be 1 or greater.
|
||||||
value 2: see below
|
value 2: see below
|
||||||
value 3: 0 for not poisoned. Otherwise, the number of hours until the poison
|
value 3: 0 for not poisoned. Otherwise, the number of hours until the poison
|
||||||
burns off?
|
burns off.
|
||||||
|
|
||||||
value 2: The type of liquid in the drink-container, one of:
|
value 2: The type of liquid in the drink-container, one of:
|
||||||
|
|
||||||
@@ -3564,8 +3544,8 @@ GRAMMAR GRAMMER TIPS
|
|||||||
words can be particularly tricky and elude electronic spell checkers. A good
|
words can be particularly tricky and elude electronic spell checkers. A good
|
||||||
dictionary, however, will help you spell archaic words. Whenever I am building
|
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
|
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
|
proper spelling. We hope to add a thesaurus soon! Goto @Chttp://m-w.com/@n
|
||||||
soon! Goto @Chttp://m-w.com/@n until then.
|
until then.
|
||||||
I have found that a good principle to make is to avoid the use of all
|
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
|
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
|
it out. This will help differentiate between "its" (which means 'belonging to
|
||||||
@@ -7093,31 +7073,28 @@ See also: FLAGS, PLR
|
|||||||
#31
|
#31
|
||||||
PROMOTE PROMOTIONS ADVANCEMENTS RAISES LVLS LEVELS GAINS 31 32 33 34 RANKS RANKING HIRING JOBS STAFFING
|
PROMOTE PROMOTIONS ADVANCEMENTS RAISES LVLS LEVELS GAINS 31 32 33 34 RANKS RANKING HIRING JOBS STAFFING
|
||||||
|
|
||||||
Here at The Builder Academy the level of an immortal generally denotes
|
Here at The Builder Academy, the level of an immortal generally reflects that
|
||||||
their skill at building. This makes it easier for people to know who is in
|
immortal's building skill and willingness to help others. If you have
|
||||||
charge, who they can ask for help, and who they should be wary of taking tips
|
questions, you may want to ask someone whose level is at least 32. Of course,
|
||||||
from. I encourage everyone to help each other. Just realize that if the person
|
everyone is encouraged to help everyone else, but know that those who are not
|
||||||
is not at least a Great God they may have relatively little experience.
|
at least level 32 may have relatively little experience.
|
||||||
|
|
||||||
Level 31 (Immortal) Anyone who is new to TBA and is working on their trial
|
Level 31 (Immortal) Anyone who is new to TBA and is working on their trial
|
||||||
vnum or zone.
|
vnum or zone.
|
||||||
Level 32 (God) An experienced builder that has proven their knowledge and is
|
Level 32 (God) An experienced builder with proven knowledge that is
|
||||||
willing to teach others. Level 2 and above is considered staff.
|
willing to teach others. Immortals of level 32 and above
|
||||||
Level 33 (Greater God) An experienced builder that has contributed
|
are considered staff.
|
||||||
significantly to TBA.
|
Level 33 (Greater God) An experienced builder that has contributed significantly
|
||||||
|
to TBA.
|
||||||
Level 34 (Implementor) Current developers: Welcor, Wyld, and Opie.
|
Level 34 (Implementor) Current developers: Welcor, Wyld, and Opie.
|
||||||
|
|
||||||
Do not bother asking to be advanced, and if that is why you are here, you
|
Please do not bother asking to be advanced. If your goal is merely to rise in
|
||||||
are wasting your time. Note, this does not mean you are not a quality builder,
|
the ranks, you are wasting your time. The Gods here are dedicated to helping
|
||||||
but TBA is not your typical MUD. On the contrary, we are here as dedicated
|
others learn to build. Thus, those who advance in level are those who become
|
||||||
people to help you learn to build. Because of this the only chance of
|
proficient builders that offer their time to teach others. If you are willing
|
||||||
advancement is if you are willing to learn to build and then help teach others.
|
to give back to the tbaMUD community and have the requisite skills, you will be
|
||||||
If you are willing to give back to the tbaMUD community, and have the
|
advanced and given further tools to teach others via your level. Generally, if
|
||||||
necessary skills to do so, you will be advanced and given further privileges
|
you ask for a promotion, you will be less likely to receive it.
|
||||||
to help teach others. Generally, if you have to ask for a promotion you will be
|
|
||||||
less likely to receive it. Performance is everything here.
|
|
||||||
|
|
||||||
q
|
|
||||||
#0
|
#0
|
||||||
PROPOSALS GUIDELINES ZONE-PROPOSALS PROPOSITIONS PROPOSE REQUESTS CRITERIA
|
PROPOSALS GUIDELINES ZONE-PROPOSALS PROPOSITIONS PROPOSE REQUESTS CRITERIA
|
||||||
|
|
||||||
@@ -7195,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
|
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
|
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,
|
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
|
When you qedit <vnum> to create a new quest (or edit an existing one), you will
|
||||||
see the menu in @RHELP QEDIT-MENU@n
|
see the menu in @RHELP QEDIT-MENU@n
|
||||||
@@ -7206,12 +7183,12 @@ QEDIT-ACCEPT
|
|||||||
|
|
||||||
This is the text that is sent to the player when they start the quest. It
|
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
|
should describe in detail exactly what is required to complete the quest. The
|
||||||
text is simply output on the player’s 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:
|
of an accept message text could be something like:
|
||||||
|
|
||||||
The questmaster rummages in a large pile of papers.
|
The questmaster rummages in a large pile of papers.
|
||||||
The questmaster says ‘Ah, here it is’
|
The questmaster says "Ah, here it is"
|
||||||
The questmaster says ‘Bob, the local butcher has offered this quest’
|
The questmaster says "Bob, the local butcher has offered this quest"
|
||||||
The questmaster shows you a hastily scrawled note, that reads:
|
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
|
I am willing to offer any plucky adventurer 10 quest points if they bring me a
|
||||||
@@ -7221,7 +7198,7 @@ order to fill. I need these within 24 hours
|
|||||||
|
|
||||||
Thanks, Bob the Butcher, Midgaard
|
Thanks, Bob the Butcher, Midgaard
|
||||||
The questmaster sighs.
|
The questmaster sighs.
|
||||||
The questmaster says ‘A tricky quest, but it’ll cost you 5qp to back out now’
|
The questmaster says "A tricky quest, but it'll cost you 5qp to back out now"
|
||||||
#31
|
#31
|
||||||
QEDIT-COMPLETED QEDIT-ABANDONED
|
QEDIT-COMPLETED QEDIT-ABANDONED
|
||||||
|
|
||||||
@@ -7235,7 +7212,7 @@ all timed quests.
|
|||||||
QEDIT-COMPLETION
|
QEDIT-COMPLETION
|
||||||
|
|
||||||
Just like the accept message, this is simply text that is output on the
|
Just like the accept message, this is simply text that is output on the
|
||||||
player’s 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
|
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
|
announced after this text is shown, so this text does not need to have that
|
||||||
information in it.
|
information in it.
|
||||||
@@ -7261,7 +7238,7 @@ Quest flags: @cNOBITS@n
|
|||||||
Enter quest flags, 0 to quit :
|
Enter quest flags, 0 to quit :
|
||||||
|
|
||||||
Currently, only one flag is available, the REPEATABLE flag. When you have
|
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
|
#31
|
||||||
QEDIT-LEVELS
|
QEDIT-LEVELS
|
||||||
|
|
||||||
@@ -7315,12 +7292,12 @@ QEDIT-NEXT
|
|||||||
|
|
||||||
This is the quest vnum of next quest in a chain. When a player completes
|
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
|
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
|
#31
|
||||||
QEDIT-PREREQUISITE
|
QEDIT-PREREQUISITE
|
||||||
|
|
||||||
This is the object vnum for a prerequisite object. The prerequisite object
|
This is the object vnum for a prerequisite object. The prerequisite object
|
||||||
should be in the player’s 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.
|
quest. It is not taken from the player when the quest starts.
|
||||||
#31
|
#31
|
||||||
QEDIT-PREVIOUS
|
QEDIT-PREVIOUS
|
||||||
@@ -7331,15 +7308,15 @@ completed by the player in order to join this quest.
|
|||||||
QEDIT-QUANTITY
|
QEDIT-QUANTITY
|
||||||
|
|
||||||
This is the number of times the player needs to repeat the quest. For
|
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’
|
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
|
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
|
should be used with caution, however. In an object quest picking up the same
|
||||||
object 20 times will also complete the quest.
|
object 20 times will also complete the quest.
|
||||||
#31
|
#31
|
||||||
QEDIT-QUIT QEDIT-MESSAGE
|
QEDIT-QUIT QEDIT-MESSAGE
|
||||||
|
|
||||||
The quit message is sent to the player when they type quest leave. Players
|
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
|
page), so if they lose quest points, this text really should inform them of
|
||||||
that.
|
that.
|
||||||
#31
|
#31
|
||||||
@@ -7368,14 +7345,14 @@ Room, Clear Room - Room VNUM
|
|||||||
#31
|
#31
|
||||||
QEDIT-TIME
|
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
|
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
|
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.
|
attempt), and then giving at least one extra 'tick' for players to complete it.
|
||||||
#31
|
#31
|
||||||
QEDIT-TYPE
|
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:
|
main menu, you will be shown a list to choose from:
|
||||||
|
|
||||||
0) Object - Player needs to find a particular object.
|
0) Object - Player needs to find a particular object.
|
||||||
@@ -7450,7 +7427,7 @@ Usage: quest [list | join <#> | progress | leave | history]
|
|||||||
|
|
||||||
quest - Show usage information for the quest command.
|
quest - Show usage information for the quest command.
|
||||||
quest list - Used at the questmaster to see which quests are available.
|
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 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 leave - Allows the player to abandon the current quest, taking the quest point penalty.
|
||||||
quest history - Shows all previously completed non-repeatable quests.
|
quest history - Shows all previously completed non-repeatable quests.
|
||||||
@@ -9355,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
|
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
|
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
|
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,
|
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
|
builders exist to ensure that the goals of play are supported by game
|
||||||
descriptions.
|
descriptions.
|
||||||
@@ -9367,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
|
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
|
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
|
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
|
does deeply affect a character's development. No matter what kind of zone you
|
||||||
are building, keep it interesting throughout!
|
are building, keep it interesting throughout!
|
||||||
|
|
||||||
@@ -9390,7 +9367,7 @@ road.
|
|||||||
shouldn't be the sole builder of your zone. Instead, seek the assistance of
|
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
|
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
|
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
|
what you intended to have there all along. Novels have editors, and so
|
||||||
should any zone.
|
should any zone.
|
||||||
|
|
||||||
@@ -9662,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
|
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
|
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.
|
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
|
Sometimes building can seem like a thankless job and sometimes building can be
|
||||||
building can be a reward in itself. Building a few areas, even a few good
|
a reward in itself. Building a few areas, even a few good ones, does not make
|
||||||
ones, does not make you an Immortal or an Imp. It takes more than building to
|
you an Immortal or an Imp. It takes more than building to be one of those and
|
||||||
be one of those and it entails even more work. Respect others and they will
|
it entails even more work. Respect others and they will respect you. The more
|
||||||
respect you. The more detailed an area the better it is. Always choose Quality
|
detailed an area the better it is. Always choose Quality over Quantity. Put
|
||||||
over Quantity. Put some pride in your areas, develop a style of your own. Try
|
some pride in your areas, develop a style of your own. Try new things keep it
|
||||||
new things keep it interesting, if you become bored with building an area take
|
interesting, if you become bored with building an area take a break and play a
|
||||||
a break and play a mortal or do something else, don't take advantage of builder
|
mortal or do something else, don't take advantage of builder privileges.
|
||||||
privileges. Treat others as you wish to be treated. One more warning I would
|
Treat others as you wish to be treated. One more warning I would give to
|
||||||
give to builders before they take things personally or get insulted. Everyone
|
builders before they take things personally or get insulted. Everyone has their
|
||||||
has their own ideas on how to run a MUD, what it comes down to is whoever owns
|
own ideas on how to run a MUD, what it comes down to is whoever owns the MUD
|
||||||
the MUD makes the final decision, so it does not matter how good you think your
|
makes the final decision, so it does not matter how good you think your idea
|
||||||
idea is, it may never be used if the owner does not like it. Plain and simple.
|
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
|
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.
|
force them onto anyone. Be constructive, not critical about peoples ideas.
|
||||||
Everyone is allowed their opinions.
|
Everyone is allowed their opinions.
|
||||||
@@ -9882,6 +9859,7 @@ tbalim test 61165
|
|||||||
return
|
return
|
||||||
toggle nohassle on
|
toggle nohassle on
|
||||||
|
|
||||||
|
To list empty zones "show zone none"
|
||||||
To setup test with zone 348
|
To setup test with zone 348
|
||||||
return
|
return
|
||||||
saveall
|
saveall
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
(lib/text/policies)
|
(lib/text/policies)
|
||||||
|
|
||||||
This file should list, in no uncertain terms, the policies you must abide
|
Right now we are all adults and should be able to interact with
|
||||||
by on this MUD.
|
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
|
No harassing, no doxxing, no sexism, racism, or other unacceptable
|
||||||
a political disaster ensue...
|
isms towards your fellow players.
|
||||||
|
|
||||||
|
We definitely should add something more worked out in here.
|
||||||
|
|
||||||
|
|||||||
@@ -10,4 +10,5 @@
|
|||||||
|
|
||||||
Gods
|
Gods
|
||||||
~~~~
|
~~~~
|
||||||
|
|
||||||
|
kyonshi
|
||||||
|
|||||||
@@ -990,7 +990,6 @@ He is covered in a film of dirt and grime. He smells even worse than you.
|
|||||||
30 900
|
30 900
|
||||||
8 8 1
|
8 8 1
|
||||||
E
|
E
|
||||||
T 206
|
|
||||||
#169
|
#169
|
||||||
citizen~
|
citizen~
|
||||||
a citizen~
|
a citizen~
|
||||||
|
|||||||
25
lib/world/mob/491.mob
Normal file
25
lib/world/mob/491.mob
Normal 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
66
lib/world/mob/492.mob
Normal 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
|
||||||
|
$
|
||||||
@@ -182,6 +182,8 @@
|
|||||||
343.mob
|
343.mob
|
||||||
345.mob
|
345.mob
|
||||||
346.mob
|
346.mob
|
||||||
|
491.mob
|
||||||
|
492.mob
|
||||||
555.mob
|
555.mob
|
||||||
556.mob
|
556.mob
|
||||||
653.mob
|
653.mob
|
||||||
|
|||||||
@@ -7,28 +7,6 @@ A granite fountain is gurgling here.~
|
|||||||
-1 2 15 0
|
-1 2 15 0
|
||||||
0 0 0 0 0
|
0 0 0 0 0
|
||||||
E
|
E
|
||||||
fountain basin~
|
|
||||||
The fountain is made of black granite and the water
|
|
||||||
in it looks and inviting to drink. In the center is a
|
|
||||||
'SPADE' shaped centerstone that seems to have writing
|
|
||||||
all over it.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
spade~
|
|
||||||
The spade seems to be the headstone of the center of the
|
|
||||||
fountain here. It is made of black stone and is an obelisk
|
|
||||||
in shape. It has 'Directory' on the side of it and it also
|
|
||||||
has a 'MAP' on the side of it as well.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
Map~
|
|
||||||
Nth: God Hall - Nth, Inn, Post Office, Coffee Alcove
|
|
||||||
Sth: God Hall - Sth, Bus. Ctr, Bldr Brd Rm, God Hall, Ext
|
|
||||||
Est: God Hall - Est, Imm/Mrtl Brd Rm, Upr Imm Hall, Grd Lvl, God Hl - Ext
|
|
||||||
Wst: God Hall - Wst, H.O.Jst/Chpl, Mtn Rm, Upr Imm Hall, Grd Lvl, God Hl - Ext
|
|
||||||
Dwn: Midguaard
|
|
||||||
~
|
|
||||||
E
|
|
||||||
Directory~
|
Directory~
|
||||||
---------------------------------------------------------
|
---------------------------------------------------------
|
||||||
Immortal Name: ===== Room # ====== Location: =======
|
Immortal Name: ===== Room # ====== Location: =======
|
||||||
@@ -57,6 +35,26 @@ Niamh ----------- 34351 ----------- God Hall, Southeast
|
|||||||
Fade ----------- 34337 ------------ God Hall, West
|
Fade ----------- 34337 ------------ God Hall, West
|
||||||
Angela -------- 34636 --------God Hall, South Extension
|
Angela -------- 34636 --------God Hall, South Extension
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
Map~
|
||||||
|
Nth: God Hall - Nth, Inn, Post Office, Coffee Alcove
|
||||||
|
Sth: God Hall - Sth, Bus. Ctr, Bldr Brd Rm, God Hall, Ext
|
||||||
|
Est: God Hall - Est, Imm/Mrtl Brd Rm, Upr Imm Hall, Grd Lvl, God Hl - Ext
|
||||||
|
Wst: God Hall - Wst, H.O.Jst/Chpl, Mtn Rm, Upr Imm Hall, Grd Lvl, God Hl - Ext
|
||||||
|
Dwn: Midguaard
|
||||||
|
~
|
||||||
|
E
|
||||||
|
spade~
|
||||||
|
The spade seems to be the headstone of the center of the fountain here. It
|
||||||
|
is made of black stone and is an obelisk in shape. It has 'Directory' on the
|
||||||
|
side of it and it also has a 'MAP' on the side of it as well.
|
||||||
|
~
|
||||||
|
E
|
||||||
|
fountain basin~
|
||||||
|
The fountain is made of black granite and the water in it looks and inviting
|
||||||
|
to drink. In the center is a 'SPADE' shaped centerstone that seems to have
|
||||||
|
writing all over it.
|
||||||
|
~
|
||||||
#34301
|
#34301
|
||||||
fouton~
|
fouton~
|
||||||
a Fouton(tm) ~
|
a Fouton(tm) ~
|
||||||
@@ -287,8 +285,8 @@ A plush couch is here in front of a coffee table.~
|
|||||||
0 0 0 0 0
|
0 0 0 0 0
|
||||||
E
|
E
|
||||||
couch~
|
couch~
|
||||||
The couch is long, has a frame of oak wood and a long
|
The couch is long, has a frame of oak wood and a long blue cushion. It
|
||||||
blue cushion. It happens to be a Futon (tm).
|
happens to be a Futon (tm).
|
||||||
~
|
~
|
||||||
#34319
|
#34319
|
||||||
LazyBoy recliner~
|
LazyBoy recliner~
|
||||||
@@ -684,15 +682,15 @@ A toilet is here made of porclein.~
|
|||||||
1 0 0 0
|
1 0 0 0
|
||||||
0 0 0 0 0
|
0 0 0 0 0
|
||||||
E
|
E
|
||||||
sign~
|
|
||||||
Be sure to Flush!
|
|
||||||
~
|
|
||||||
E
|
|
||||||
toilet toidy throne~
|
toilet toidy throne~
|
||||||
The toilet is made of white porcelien and it stands with a tank near the
|
The toilet is made of white porcelien and it stands with a tank near the
|
||||||
wall. It has a wooden seat that is made of carved walnut and it has gold
|
wall. It has a wooden seat that is made of carved walnut and it has gold
|
||||||
fixtures all around, which include the handles.
|
fixtures all around, which include the handles.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
sign~
|
||||||
|
Be sure to Flush!
|
||||||
|
~
|
||||||
#34344
|
#34344
|
||||||
sink~
|
sink~
|
||||||
a sink and granite counter~
|
a sink and granite counter~
|
||||||
@@ -702,15 +700,15 @@ A sink and long granite counter is here.~
|
|||||||
0 0 0 0
|
0 0 0 0
|
||||||
0 0 0 0 0
|
0 0 0 0 0
|
||||||
E
|
E
|
||||||
counter~
|
|
||||||
The counters are made of granite and are immaculately carved with such
|
|
||||||
precision into a smooth flowing shape and designs all over them.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
sink~
|
sink~
|
||||||
The sink is clean and white, with a shiny chrome faucet system and drain in
|
The sink is clean and white, with a shiny chrome faucet system and drain in
|
||||||
the bottom.
|
the bottom.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
counter~
|
||||||
|
The counters are made of granite and are immaculately carved with such
|
||||||
|
precision into a smooth flowing shape and designs all over them.
|
||||||
|
~
|
||||||
#34345
|
#34345
|
||||||
tub clawtub~
|
tub clawtub~
|
||||||
an old fashioned claw tub and shower~
|
an old fashioned claw tub and shower~
|
||||||
@@ -720,16 +718,16 @@ An old fashioned claw tub and shower is here.~
|
|||||||
3 0 0 0
|
3 0 0 0
|
||||||
0 0 0 0 0
|
0 0 0 0 0
|
||||||
E
|
E
|
||||||
|
tub~
|
||||||
|
The tub is made of iron and porcelin and it has claw feet in which it sits.
|
||||||
|
It is quite large and deep holding several meters of water.
|
||||||
|
~
|
||||||
|
E
|
||||||
shower~
|
shower~
|
||||||
The shower is a gold tube and a nozzle that is located on one side of the tub
|
The shower is a gold tube and a nozzle that is located on one side of the tub
|
||||||
and the water pours down over the person or persons. The valve is located just
|
and the water pours down over the person or persons. The valve is located just
|
||||||
above the fixture on the bottom of the tub that fills it.
|
above the fixture on the bottom of the tub that fills it.
|
||||||
~
|
~
|
||||||
E
|
|
||||||
tub~
|
|
||||||
The tub is made of iron and porcelin and it has claw feet in which it sits.
|
|
||||||
It is quite large and deep holding several meters of water.
|
|
||||||
~
|
|
||||||
#34346
|
#34346
|
||||||
bench~
|
bench~
|
||||||
a short teak bench~
|
a short teak bench~
|
||||||
@@ -752,16 +750,16 @@ A gurgling spring is here splashing into a golden basin.~
|
|||||||
-1 2 15 0
|
-1 2 15 0
|
||||||
0 0 0 0 0
|
0 0 0 0 0
|
||||||
E
|
E
|
||||||
|
spring~
|
||||||
|
The spring is just a free flowing stream of water that flows from the ground
|
||||||
|
with a murmuring, gurgling sound.
|
||||||
|
~
|
||||||
|
E
|
||||||
basin~
|
basin~
|
||||||
The basin is made of gold and it holds the water as it splashes out from the
|
The basin is made of gold and it holds the water as it splashes out from the
|
||||||
spring from the ground. When full it runs into what appears to be a channel
|
spring from the ground. When full it runs into what appears to be a channel
|
||||||
leading to the lagoon.
|
leading to the lagoon.
|
||||||
~
|
~
|
||||||
E
|
|
||||||
spring~
|
|
||||||
The spring is just a free flowing stream of water that flows from the ground
|
|
||||||
with a murmuring, gurgling sound.
|
|
||||||
~
|
|
||||||
#34348
|
#34348
|
||||||
statue~
|
statue~
|
||||||
a guardian statue of Rumble~
|
a guardian statue of Rumble~
|
||||||
@@ -771,6 +769,12 @@ A guardian statue of Rumble is here next to a pedistal.~
|
|||||||
0 0 0 0
|
0 0 0 0
|
||||||
0 0 0 31 0
|
0 0 0 31 0
|
||||||
E
|
E
|
||||||
|
pedistal~
|
||||||
|
The pedistal is made of rounded carved marble and it has unique designs,
|
||||||
|
portraying extreme power. The top of the pedistal is empty, but it seems that
|
||||||
|
something should go there.
|
||||||
|
~
|
||||||
|
E
|
||||||
statue Rumble rumble guardian~
|
statue Rumble rumble guardian~
|
||||||
The statue is a guardian to this shrine, it depicts one of the immortals of
|
The statue is a guardian to this shrine, it depicts one of the immortals of
|
||||||
TBA and his power and influence over all who worship here. He stands clad as a
|
TBA and his power and influence over all who worship here. He stands clad as a
|
||||||
@@ -778,12 +782,6 @@ Battle Mage, in flowing robes and carries a staff. His hair is long and flowing
|
|||||||
as he seems to be raising the staff in battle. You seem to feel at ease by this
|
as he seems to be raising the staff in battle. You seem to feel at ease by this
|
||||||
statue.
|
statue.
|
||||||
~
|
~
|
||||||
E
|
|
||||||
pedistal~
|
|
||||||
The pedistal is made of rounded carved marble and it has unique designs,
|
|
||||||
portraying extreme power. The top of the pedistal is empty, but it seems that
|
|
||||||
something should go there.
|
|
||||||
~
|
|
||||||
#34349
|
#34349
|
||||||
Opie~
|
Opie~
|
||||||
a guardian statue of Opie~
|
a guardian statue of Opie~
|
||||||
@@ -793,6 +791,11 @@ A guardian statue of Opie is here.~
|
|||||||
0 0 0 0
|
0 0 0 0
|
||||||
0 0 0 31 0
|
0 0 0 31 0
|
||||||
E
|
E
|
||||||
|
nametag~
|
||||||
|
The nametag reads Opie the Cunning and that is carved at the base of the
|
||||||
|
statue near the foot of his statue.
|
||||||
|
~
|
||||||
|
E
|
||||||
Opie Guardian~
|
Opie Guardian~
|
||||||
The statue is a guardian to this shine, it depicts one of the immortals of
|
The statue is a guardian to this shine, it depicts one of the immortals of
|
||||||
TBA and the influence of steath and cunning to all who worhip here. He stands
|
TBA and the influence of steath and cunning to all who worhip here. He stands
|
||||||
@@ -800,11 +803,6 @@ clad in carved battle armor of leather, a loose flowing shirt and a sash about
|
|||||||
his waist. In his hand he carries a dagger that is thrust outward in a backstab
|
his waist. In his hand he carries a dagger that is thrust outward in a backstab
|
||||||
motion. You feel a strange surge of adventure looking at this statue.
|
motion. You feel a strange surge of adventure looking at this statue.
|
||||||
~
|
~
|
||||||
E
|
|
||||||
nametag~
|
|
||||||
The nametag reads Opie the Cunning and that is carved at the base of the
|
|
||||||
statue near the foot of his statue.
|
|
||||||
~
|
|
||||||
#34350
|
#34350
|
||||||
Welcor~
|
Welcor~
|
||||||
a guardian statue of Welcor~
|
a guardian statue of Welcor~
|
||||||
@@ -814,6 +812,11 @@ A guardian statue of Welcor is here.~
|
|||||||
0 0 0 0
|
0 0 0 0
|
||||||
0 0 0 31 0
|
0 0 0 31 0
|
||||||
E
|
E
|
||||||
|
nametag~
|
||||||
|
The nametag reads Welcor the Bishop and that is carved at the base of the
|
||||||
|
statue near the foot of it.
|
||||||
|
~
|
||||||
|
E
|
||||||
Welcor guardian~
|
Welcor guardian~
|
||||||
The statue is a guardian to this shine, it depicts one of the immortals of
|
The statue is a guardian to this shine, it depicts one of the immortals of
|
||||||
TBA and the influence of Justice to all who worship here. He/She stands clad in
|
TBA and the influence of Justice to all who worship here. He/She stands clad in
|
||||||
@@ -821,9 +824,4 @@ a long flowing set of robes and he/she carries a warhammer in their hand. The
|
|||||||
feeling of peace overwhelms the senses when you look at the statue that seems to
|
feeling of peace overwhelms the senses when you look at the statue that seems to
|
||||||
be floating and glowing brightly.
|
be floating and glowing brightly.
|
||||||
~
|
~
|
||||||
E
|
|
||||||
nametag~
|
|
||||||
The nametag reads Welcor the Bishop and that is carved at the base of the
|
|
||||||
statue near the foot of it.
|
|
||||||
~
|
|
||||||
$~
|
$~
|
||||||
|
|||||||
@@ -231,7 +231,7 @@ A dagger is lying here, its jewels sparkling merrily.~
|
|||||||
5 2 3 14
|
5 2 3 14
|
||||||
4 120 12 0 0
|
4 120 12 0 0
|
||||||
#3928
|
#3928
|
||||||
14~
|
curving dagger~
|
||||||
a wickedly curving dagger~
|
a wickedly curving dagger~
|
||||||
A dagger lies here on the ground, its curve looking particularly wicked.~
|
A dagger lies here on the ground, its curve looking particularly wicked.~
|
||||||
~
|
~
|
||||||
|
|||||||
73
lib/world/obj/49.obj
Normal file
73
lib/world/obj/49.obj
Normal 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
22
lib/world/obj/491.obj
Normal 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
|
||||||
|
$
|
||||||
@@ -38,6 +38,7 @@
|
|||||||
44.obj
|
44.obj
|
||||||
45.obj
|
45.obj
|
||||||
46.obj
|
46.obj
|
||||||
|
49.obj
|
||||||
50.obj
|
50.obj
|
||||||
51.obj
|
51.obj
|
||||||
52.obj
|
52.obj
|
||||||
@@ -181,6 +182,7 @@
|
|||||||
343.obj
|
343.obj
|
||||||
345.obj
|
345.obj
|
||||||
346.obj
|
346.obj
|
||||||
|
491.obj
|
||||||
555.obj
|
555.obj
|
||||||
556.obj
|
556.obj
|
||||||
653.obj
|
653.obj
|
||||||
|
|||||||
51
lib/world/shp/491.shp
Normal file
51
lib/world/shp/491.shp
Normal 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
|
||||||
|
$~
|
||||||
@@ -163,6 +163,7 @@
|
|||||||
343.shp
|
343.shp
|
||||||
345.shp
|
345.shp
|
||||||
346.shp
|
346.shp
|
||||||
|
491.shp
|
||||||
555.shp
|
555.shp
|
||||||
556.shp
|
556.shp
|
||||||
653.shp
|
653.shp
|
||||||
|
|||||||
@@ -127,6 +127,7 @@ Smelly Bum - M168~
|
|||||||
* By Rumble of The Builder Academy tbamud.com 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* A trig to let people smell the bum from 1 room away.
|
* A trig to let people smell the bum from 1 room away.
|
||||||
* For the first move there is no from_room so set it.
|
* For the first move there is no from_room so set it.
|
||||||
|
* Not working - something broke
|
||||||
if !%from_room%
|
if !%from_room%
|
||||||
eval from_room %self.room.vnum%
|
eval from_room %self.room.vnum%
|
||||||
global from_room
|
global from_room
|
||||||
@@ -157,7 +158,6 @@ end
|
|||||||
*
|
*
|
||||||
eval from_room %self.room.vnum%
|
eval from_room %self.room.vnum%
|
||||||
global from_room
|
global from_room
|
||||||
%echo% FROM:%from_room% TO:%inroom%
|
|
||||||
~
|
~
|
||||||
#207
|
#207
|
||||||
Mob Blocks opening of chest~
|
Mob Blocks opening of chest~
|
||||||
|
|||||||
12
lib/world/trg/491.trg
Normal file
12
lib/world/trg/491.trg
Normal 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
|
||||||
|
~
|
||||||
|
$~
|
||||||
@@ -182,8 +182,10 @@
|
|||||||
343.trg
|
343.trg
|
||||||
345.trg
|
345.trg
|
||||||
346.trg
|
346.trg
|
||||||
|
491.trg
|
||||||
555.trg
|
555.trg
|
||||||
556.trg
|
556.trg
|
||||||
653.trg
|
653.trg
|
||||||
654.trg
|
654.trg
|
||||||
|
|
||||||
$
|
$
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ D1
|
|||||||
~
|
~
|
||||||
0 0 4
|
0 0 4
|
||||||
S
|
S
|
||||||
|
T 56
|
||||||
#4
|
#4
|
||||||
The Beginning~
|
The Beginning~
|
||||||
By simply following the different halls new builders will be taught the
|
By simply following the different halls new builders will be taught the
|
||||||
@@ -135,7 +136,7 @@ HELP BREATHE@n
|
|||||||
D0
|
D0
|
||||||
~
|
~
|
||||||
~
|
~
|
||||||
0 0 24
|
0 0 -1
|
||||||
D1
|
D1
|
||||||
~
|
~
|
||||||
~
|
~
|
||||||
@@ -143,7 +144,7 @@ D1
|
|||||||
D2
|
D2
|
||||||
~
|
~
|
||||||
~
|
~
|
||||||
0 0 25
|
0 0 -1
|
||||||
D3
|
D3
|
||||||
~
|
~
|
||||||
~
|
~
|
||||||
@@ -151,7 +152,7 @@ D3
|
|||||||
D4
|
D4
|
||||||
~
|
~
|
||||||
~
|
~
|
||||||
0 0 26
|
0 0 -1
|
||||||
S
|
S
|
||||||
#7
|
#7
|
||||||
Writing Good Descriptions~
|
Writing Good Descriptions~
|
||||||
@@ -215,7 +216,7 @@ D3
|
|||||||
D4
|
D4
|
||||||
~
|
~
|
||||||
~
|
~
|
||||||
0 0 27
|
0 0 -1
|
||||||
S
|
S
|
||||||
#9
|
#9
|
||||||
How to Use Oedit~
|
How to Use Oedit~
|
||||||
@@ -570,6 +571,7 @@ John Stuart Mill
|
|||||||
~
|
~
|
||||||
0 8 0 0 0 0
|
0 8 0 0 0 0
|
||||||
S
|
S
|
||||||
|
T 308
|
||||||
#34
|
#34
|
||||||
Pool of Images~
|
Pool of Images~
|
||||||
A broad mosaic walkway wraps around the natural hotsprings in this cavernous
|
A broad mosaic walkway wraps around the natural hotsprings in this cavernous
|
||||||
@@ -775,14 +777,14 @@ D2
|
|||||||
~
|
~
|
||||||
0 0 98
|
0 0 98
|
||||||
E
|
E
|
||||||
|
sky winds~
|
||||||
|
Cold winds plunge ceaselessly at you from the dark, cloudless sky.
|
||||||
|
~
|
||||||
|
E
|
||||||
floor~
|
floor~
|
||||||
The stone floor is the same shade of gray as the sky and is completely plain
|
The stone floor is the same shade of gray as the sky and is completely plain
|
||||||
and unscratched. It is probably too hard for anything to leave as much as a
|
and unscratched. It is probably too hard for anything to leave as much as a
|
||||||
scratch on it.
|
scratch on it.
|
||||||
~
|
~
|
||||||
E
|
|
||||||
sky winds~
|
|
||||||
Cold winds plunge ceaselessly at you from the dark, cloudless sky.
|
|
||||||
~
|
|
||||||
S
|
S
|
||||||
$~
|
$~
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ Zone 1 is linked to the following zones:
|
|||||||
2 Sanctus II at 199 (south) ---> 206
|
2 Sanctus II at 199 (south) ---> 206
|
||||||
~
|
~
|
||||||
S
|
S
|
||||||
T 56
|
T 24
|
||||||
#101
|
#101
|
||||||
The Temple of the Gods~
|
The Temple of the Gods~
|
||||||
This seems to be the highest point in the kingdom of Sanctus. It is from
|
This seems to be the highest point in the kingdom of Sanctus. It is from
|
||||||
@@ -92,19 +92,19 @@ D5
|
|||||||
~
|
~
|
||||||
0 0 100
|
0 0 100
|
||||||
E
|
E
|
||||||
altar~
|
|
||||||
The altar is made from black granite and has been carved into a small basin
|
|
||||||
with a high back. Almost as if it was meant to be some sort of seat.
|
|
||||||
Inscriptions in some foreign tongue are written on every square inch of the
|
|
||||||
altar. You wonder what they must say and who could have written it.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
statue~
|
statue~
|
||||||
As you examine the statues more closely you realize they must resemble the
|
As you examine the statues more closely you realize they must resemble the
|
||||||
two gods responsible for the creation and ongoing protection of Sanctus, Ferret
|
two gods responsible for the creation and ongoing protection of Sanctus, Ferret
|
||||||
and Rumble. They both radiate a strength and power that resembles the solid
|
and Rumble. They both radiate a strength and power that resembles the solid
|
||||||
white marble they were crafted from.
|
white marble they were crafted from.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
altar~
|
||||||
|
The altar is made from black granite and has been carved into a small basin
|
||||||
|
with a high back. Almost as if it was meant to be some sort of seat.
|
||||||
|
Inscriptions in some foreign tongue are written on every square inch of the
|
||||||
|
altar. You wonder what they must say and who could have written it.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
T 158
|
T 158
|
||||||
T 163
|
T 163
|
||||||
@@ -240,17 +240,17 @@ D5
|
|||||||
~
|
~
|
||||||
0 0 142
|
0 0 142
|
||||||
E
|
E
|
||||||
table~
|
|
||||||
The table is made out of cherry. It is worn from years of use. The glass
|
|
||||||
top allows for an excellent view of the map protected within.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
map~
|
map~
|
||||||
The map is a geographic representation of Sanctus. Not even really a map,
|
The map is a geographic representation of Sanctus. Not even really a map,
|
||||||
more of a scaled model. The walls and buildings of the city are raised higher
|
more of a scaled model. The walls and buildings of the city are raised higher
|
||||||
than the rest of the map to give it a third dimension. Small soldiers are
|
than the rest of the map to give it a third dimension. Small soldiers are
|
||||||
scattered around the top of the table to help the War Master place his men.
|
scattered around the top of the table to help the War Master place his men.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
table~
|
||||||
|
The table is made out of cherry. It is worn from years of use. The glass
|
||||||
|
top allows for an excellent view of the map protected within.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#109
|
#109
|
||||||
Thieves Retreat~
|
Thieves Retreat~
|
||||||
@@ -383,18 +383,18 @@ D1
|
|||||||
~
|
~
|
||||||
0 0 100
|
0 0 100
|
||||||
E
|
E
|
||||||
hole~
|
|
||||||
You can look out over the inner wall to the western side of Sanctus. The
|
|
||||||
smell of charred human remains and smoldering plaster makes your eyes water so
|
|
||||||
it is difficult to see much else through the tiny hole.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
man silhouette~
|
man silhouette~
|
||||||
The distinct outline of a human body that must have taken the brunt of the
|
The distinct outline of a human body that must have taken the brunt of the
|
||||||
blast when the portal imploded. You wonder what or who it might have been.
|
blast when the portal imploded. You wonder what or who it might have been.
|
||||||
You can still see pieces of cloth and bone buried deeply into the wall inside
|
You can still see pieces of cloth and bone buried deeply into the wall inside
|
||||||
the shadow of the unlucky man.
|
the shadow of the unlucky man.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
hole~
|
||||||
|
You can look out over the inner wall to the western side of Sanctus. The
|
||||||
|
smell of charred human remains and smoldering plaster makes your eyes water so
|
||||||
|
it is difficult to see much else through the tiny hole.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#117
|
#117
|
||||||
Travelling Room~
|
Travelling Room~
|
||||||
@@ -530,19 +530,19 @@ D2
|
|||||||
~
|
~
|
||||||
0 0 129
|
0 0 129
|
||||||
E
|
E
|
||||||
shrine~
|
|
||||||
A beutiful shrine. It has two white marble figures facing each other with a
|
|
||||||
painting of the city below them. The two figures seem to be looking down at
|
|
||||||
the city with looks of worry and hopelessness. An unlit candle and mirror lay
|
|
||||||
on the floor beside the small shrine.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
table desk chair~
|
table desk chair~
|
||||||
The table, desk, and chair are made from solid oak of the highest quality.
|
The table, desk, and chair are made from solid oak of the highest quality.
|
||||||
A thin goose down mattress and pillow are the only comfortable looking items in
|
A thin goose down mattress and pillow are the only comfortable looking items in
|
||||||
the room. The desk is bare and all the drawers are empty. It is as if no one
|
the room. The desk is bare and all the drawers are empty. It is as if no one
|
||||||
even lives here.
|
even lives here.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
shrine~
|
||||||
|
A beutiful shrine. It has two white marble figures facing each other with a
|
||||||
|
painting of the city below them. The two figures seem to be looking down at
|
||||||
|
the city with looks of worry and hopelessness. An unlit candle and mirror lay
|
||||||
|
on the floor beside the small shrine.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#125
|
#125
|
||||||
Plane of the Magi~
|
Plane of the Magi~
|
||||||
@@ -816,10 +816,14 @@ D0
|
|||||||
~
|
~
|
||||||
0 0 128
|
0 0 128
|
||||||
E
|
E
|
||||||
bed~
|
window~
|
||||||
The bed is made of a sturdy pine. A thin mattress covered in a white sheet
|
Overlooking the western gate you can see the shimmering protective dome.
|
||||||
with a down pillow overlaying it. The mattress is too thin to hold anything of
|
You hope it lasts, peace and tranquility is a good thing.
|
||||||
value.
|
~
|
||||||
|
E
|
||||||
|
chair~
|
||||||
|
It's just your standard wooden chair. Uncomfortable and only real
|
||||||
|
usefulness would be as firewood.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
desk~
|
desk~
|
||||||
@@ -829,14 +833,10 @@ centered on the top of the desk. The desk has three drawers. All of them are
|
|||||||
empty.
|
empty.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
chair~
|
bed~
|
||||||
It's just your standard wooden chair. Uncomfortable and only real
|
The bed is made of a sturdy pine. A thin mattress covered in a white sheet
|
||||||
usefulness would be as firewood.
|
with a down pillow overlaying it. The mattress is too thin to hold anything of
|
||||||
~
|
value.
|
||||||
E
|
|
||||||
window~
|
|
||||||
Overlooking the western gate you can see the shimmering protective dome.
|
|
||||||
You hope it lasts, peace and tranquility is a good thing.
|
|
||||||
~
|
~
|
||||||
S
|
S
|
||||||
#136
|
#136
|
||||||
|
|||||||
@@ -1372,15 +1372,21 @@ D5
|
|||||||
door~
|
door~
|
||||||
2 0 225
|
2 0 225
|
||||||
E
|
E
|
||||||
|
sky winds~
|
||||||
|
Cold winds plunge ceaselessly at you from the dark, cloudless sky.
|
||||||
|
~
|
||||||
|
E
|
||||||
floor~
|
floor~
|
||||||
The stone floor is the same shade of gray as the sky and is completely plain
|
The stone floor is the same shade of gray as the sky and is completely plain
|
||||||
and unscratched. It is probably too hard for anything to leave as much as a
|
and unscratched. It is probably too hard for anything to leave as much as a
|
||||||
scratch on it.
|
scratch on it.
|
||||||
~
|
~
|
||||||
E
|
S
|
||||||
sky winds~
|
#391
|
||||||
Cold winds plunge ceaselessly at you from the dark, cloudless sky.
|
Bomber's Trial Vnum~
|
||||||
|
You are in an unfinished room.
|
||||||
~
|
~
|
||||||
|
3 0 0 0 0 0
|
||||||
S
|
S
|
||||||
#399
|
#399
|
||||||
Welcome to the Builder Academy~
|
Welcome to the Builder Academy~
|
||||||
|
|||||||
@@ -637,10 +637,17 @@ You see Poor Alley.
|
|||||||
S
|
S
|
||||||
#3026
|
#3026
|
||||||
The Dark Alley~
|
The Dark Alley~
|
||||||
The dark alley, to the west is the common square and to the south is the
|
The dark alley, to the west is the common square and to the south
|
||||||
Guild of Thieves. The alley continues east.
|
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
|
30 0 0 0 0 1
|
||||||
|
D0
|
||||||
|
This building wasn't here last time, right?
|
||||||
|
~
|
||||||
|
~
|
||||||
|
0 -1 49101
|
||||||
D1
|
D1
|
||||||
The alley continues east.
|
The alley continues east.
|
||||||
~
|
~
|
||||||
|
|||||||
@@ -12,6 +12,11 @@ Campus Crescent continues to the east.
|
|||||||
~
|
~
|
||||||
0 -1 30101
|
0 -1 30101
|
||||||
E
|
E
|
||||||
|
sign~
|
||||||
|
Campus by Matrix and The Wandering Bard
|
||||||
|
Copyright 1994 by Curious Areas Workshop
|
||||||
|
~
|
||||||
|
E
|
||||||
info credits~
|
info credits~
|
||||||
Campus by Matrix and The Wandering Bard
|
Campus by Matrix and The Wandering Bard
|
||||||
Copyright 1994 by Curious Areas Workshop
|
Copyright 1994 by Curious Areas Workshop
|
||||||
@@ -55,11 +60,6 @@ Zone 301 is linked to the following zones:
|
|||||||
301, 302 and 303. Please ensure that any entrances into the area are flagged
|
301, 302 and 303. Please ensure that any entrances into the area are flagged
|
||||||
nomob to keep them in. - Parna for TBAMud.)
|
nomob to keep them in. - Parna for TBAMud.)
|
||||||
~
|
~
|
||||||
E
|
|
||||||
sign~
|
|
||||||
Campus by Matrix and The Wandering Bard
|
|
||||||
Copyright 1994 by Curious Areas Workshop
|
|
||||||
~
|
|
||||||
S
|
S
|
||||||
#30101
|
#30101
|
||||||
Campus Crescent~
|
Campus Crescent~
|
||||||
@@ -112,13 +112,13 @@ Campus Crescent continues to the west.
|
|||||||
~
|
~
|
||||||
0 -1 30101
|
0 -1 30101
|
||||||
E
|
E
|
||||||
dorm dormitory dormitories~
|
|
||||||
Well, they're dormitories. What else can be said?
|
|
||||||
~
|
|
||||||
E
|
|
||||||
cobblestone stone cobble~
|
cobblestone stone cobble~
|
||||||
The cobblestones are clean.
|
The cobblestones are clean.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
dorm dormitory dormitories~
|
||||||
|
Well, they're dormitories. What else can be said?
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30103
|
#30103
|
||||||
Campus Crescent~
|
Campus Crescent~
|
||||||
@@ -144,13 +144,13 @@ Campus Crescent continues to the west.
|
|||||||
~
|
~
|
||||||
0 -1 30102
|
0 -1 30102
|
||||||
E
|
E
|
||||||
cobblestone stone cobble~
|
|
||||||
The cobblestones are clean.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
caf cafeteria~
|
caf cafeteria~
|
||||||
You barely see, through the thick putrid fumes, the Mary Rotte Cafeteria.
|
You barely see, through the thick putrid fumes, the Mary Rotte Cafeteria.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
cobblestone stone cobble~
|
||||||
|
The cobblestones are clean.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30104
|
#30104
|
||||||
The Crossroads~
|
The Crossroads~
|
||||||
@@ -214,13 +214,13 @@ The Crossroads lie to the west.
|
|||||||
~
|
~
|
||||||
0 -1 30104
|
0 -1 30104
|
||||||
E
|
E
|
||||||
cobblestone stone cobble~
|
|
||||||
The cobblestones are clean.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
building~
|
building~
|
||||||
The buildings seem warm and inviting. You almost feel like hugging one.
|
The buildings seem warm and inviting. You almost feel like hugging one.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
cobblestone stone cobble~
|
||||||
|
The cobblestones are clean.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30106
|
#30106
|
||||||
Campus Crescent~
|
Campus Crescent~
|
||||||
@@ -251,8 +251,8 @@ Campus Crescent continues to the west.
|
|||||||
~
|
~
|
||||||
0 -1 30105
|
0 -1 30105
|
||||||
E
|
E
|
||||||
cobblestone stone cobble~
|
round building~
|
||||||
The cobblestones are still clean.
|
Yes... It's a round building. Go figure.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
bookstore~
|
bookstore~
|
||||||
@@ -260,8 +260,8 @@ bookstore~
|
|||||||
floor.
|
floor.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
round building~
|
cobblestone stone cobble~
|
||||||
Yes... It's a round building. Go figure.
|
The cobblestones are still clean.
|
||||||
~
|
~
|
||||||
S
|
S
|
||||||
#30107
|
#30107
|
||||||
@@ -286,13 +286,13 @@ Campus Crescent and its cobblestones are to the west.
|
|||||||
~
|
~
|
||||||
0 -1 30106
|
0 -1 30106
|
||||||
E
|
E
|
||||||
cobblestone stone cobble~
|
|
||||||
It's asphalt, you idiot! If you want to look at cobblestones, go west.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
asphalt pavement~
|
asphalt pavement~
|
||||||
It's asphalt.
|
It's asphalt.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
cobblestone stone cobble~
|
||||||
|
It's asphalt, you idiot! If you want to look at cobblestones, go west.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30108
|
#30108
|
||||||
University Avenue~
|
University Avenue~
|
||||||
@@ -316,8 +316,8 @@ The cafeteria lies to the west.
|
|||||||
~
|
~
|
||||||
0 -1 30128
|
0 -1 30128
|
||||||
E
|
E
|
||||||
cobblestone stone cobble~
|
cafeteria fog~
|
||||||
It's a dirt road. There are NO cobblestones here, although to the north...
|
The fog seems to be coming from the Mary Rotte Cafeteria.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
dirt~
|
dirt~
|
||||||
@@ -325,8 +325,8 @@ dirt~
|
|||||||
World Dictionary)
|
World Dictionary)
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
cafeteria fog~
|
cobblestone stone cobble~
|
||||||
The fog seems to be coming from the Mary Rotte Cafeteria.
|
It's a dirt road. There are NO cobblestones here, although to the north...
|
||||||
~
|
~
|
||||||
S
|
S
|
||||||
#30109
|
#30109
|
||||||
@@ -346,14 +346,14 @@ Morris House lies to the west.
|
|||||||
~
|
~
|
||||||
0 -1 30129
|
0 -1 30129
|
||||||
E
|
E
|
||||||
|
dormitory dorm~
|
||||||
|
They are student living establishments.
|
||||||
|
~
|
||||||
|
E
|
||||||
dirt~
|
dirt~
|
||||||
It's unclean matter, such as mud, trash, earth, or soil. (Webster's New
|
It's unclean matter, such as mud, trash, earth, or soil. (Webster's New
|
||||||
World Dictionary)
|
World Dictionary)
|
||||||
~
|
~
|
||||||
E
|
|
||||||
dormitory dorm~
|
|
||||||
They are student living establishments.
|
|
||||||
~
|
|
||||||
S
|
S
|
||||||
#30110
|
#30110
|
||||||
University Avenue~
|
University Avenue~
|
||||||
@@ -382,8 +382,8 @@ The Engineering building, Ellis Hall, lies to the west.
|
|||||||
~
|
~
|
||||||
0 -1 30132
|
0 -1 30132
|
||||||
E
|
E
|
||||||
cobblestone stone cobble~
|
building buildings~
|
||||||
It's a dirt road. There are NO cobblestones here, although to the south...
|
There are two buildings here. Which one?
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
dirt~
|
dirt~
|
||||||
@@ -391,8 +391,8 @@ dirt~
|
|||||||
World Dictionary)
|
World Dictionary)
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
building buildings~
|
cobblestone stone cobble~
|
||||||
There are two buildings here. Which one?
|
It's a dirt road. There are NO cobblestones here, although to the south...
|
||||||
~
|
~
|
||||||
S
|
S
|
||||||
#30111
|
#30111
|
||||||
@@ -422,14 +422,14 @@ The Commerce building, Dunning Hall, lies to the west.
|
|||||||
~
|
~
|
||||||
0 -1 30135
|
0 -1 30135
|
||||||
E
|
E
|
||||||
|
building buildings~
|
||||||
|
There are two buildings here. Which one?
|
||||||
|
~
|
||||||
|
E
|
||||||
dirt~
|
dirt~
|
||||||
It's unclean matter, such as mud, trash, earth, or soil. (Webster's New
|
It's unclean matter, such as mud, trash, earth, or soil. (Webster's New
|
||||||
World Dictionary)
|
World Dictionary)
|
||||||
~
|
~
|
||||||
E
|
|
||||||
building buildings~
|
|
||||||
There are two buildings here. Which one?
|
|
||||||
~
|
|
||||||
S
|
S
|
||||||
#30112
|
#30112
|
||||||
University Avenue~
|
University Avenue~
|
||||||
@@ -481,23 +481,23 @@ University Avenue continues to the south.
|
|||||||
~
|
~
|
||||||
0 -1 30112
|
0 -1 30112
|
||||||
E
|
E
|
||||||
dirt~
|
building~
|
||||||
It's unclean matter, such as mud, trash, earth, or soil. (Webster's New
|
The student center lies to the east.
|
||||||
World Dictionary)
|
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
sign warning~
|
sign warning~
|
||||||
The sign says:
|
The sign says:
|
||||||
Welcome to the Student Ghetto!
|
Welcome to the Student Ghetto!
|
||||||
@n
|
n
|
||||||
Fine $103.50 for carrying open alcohol in the streets.
|
Fine $103.50 for carrying open alcohol in the streets.
|
||||||
Fine $ 53.75 for excessively loud noises.
|
Fine $ 53.75 for excessively loud noises.
|
||||||
@n
|
n
|
||||||
ENTER AT YOUR OWN RISK!
|
ENTER AT YOUR OWN RISK!
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
building~
|
dirt~
|
||||||
The student center lies to the east.
|
It's unclean matter, such as mud, trash, earth, or soil. (Webster's New
|
||||||
|
World Dictionary)
|
||||||
~
|
~
|
||||||
S
|
S
|
||||||
#30114
|
#30114
|
||||||
@@ -522,13 +522,13 @@ University Avenue lies to the west.
|
|||||||
~
|
~
|
||||||
0 -1 30112
|
0 -1 30112
|
||||||
E
|
E
|
||||||
non-descript non descript~
|
|
||||||
(No description)
|
|
||||||
~
|
|
||||||
E
|
|
||||||
building~
|
building~
|
||||||
The student center lies to the north.
|
The student center lies to the north.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
non-descript non descript~
|
||||||
|
(No description)
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30115
|
#30115
|
||||||
Union Street~
|
Union Street~
|
||||||
@@ -557,13 +557,13 @@ Union Street continues to the west.
|
|||||||
~
|
~
|
||||||
0 -1 30114
|
0 -1 30114
|
||||||
E
|
E
|
||||||
non-descript non descript~
|
|
||||||
(No description)
|
|
||||||
~
|
|
||||||
E
|
|
||||||
building buildings~
|
building buildings~
|
||||||
There are two buildings here. Which one?
|
There are two buildings here. Which one?
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
non-descript non descript~
|
||||||
|
(No description)
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30116
|
#30116
|
||||||
Division Road~
|
Division Road~
|
||||||
@@ -588,13 +588,13 @@ Union Street is to the west.
|
|||||||
~
|
~
|
||||||
0 -1 30115
|
0 -1 30115
|
||||||
E
|
E
|
||||||
building gym arena~
|
|
||||||
The Jock Hardy Arena lies to the north.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
asphalt pavement~
|
asphalt pavement~
|
||||||
It's asphalt.
|
It's asphalt.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
building gym arena~
|
||||||
|
The Jock Hardy Arena lies to the north.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30117
|
#30117
|
||||||
Division Road~
|
Division Road~
|
||||||
@@ -613,13 +613,13 @@ Division Road continues south.
|
|||||||
~
|
~
|
||||||
0 -1 30118
|
0 -1 30118
|
||||||
E
|
E
|
||||||
asphalt pavement~
|
|
||||||
It's asphalt.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
zork~
|
zork~
|
||||||
What would possess you to look at that? What is a zork anyways?
|
What would possess you to look at that? What is a zork anyways?
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
asphalt pavement~
|
||||||
|
It's asphalt.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30118
|
#30118
|
||||||
Division Road~
|
Division Road~
|
||||||
@@ -643,14 +643,14 @@ The Campus bookstore lies to the west.
|
|||||||
~
|
~
|
||||||
0 -1 30141
|
0 -1 30141
|
||||||
E
|
E
|
||||||
|
asphalt pavement~
|
||||||
|
It's asphalt.
|
||||||
|
~
|
||||||
|
E
|
||||||
bookstore building~
|
bookstore building~
|
||||||
The bookstore is a 2-story cubical building, loud noises emanate from the top
|
The bookstore is a 2-story cubical building, loud noises emanate from the top
|
||||||
floor.
|
floor.
|
||||||
~
|
~
|
||||||
E
|
|
||||||
asphalt pavement~
|
|
||||||
It's asphalt.
|
|
||||||
~
|
|
||||||
S
|
S
|
||||||
#30119
|
#30119
|
||||||
Division Road~
|
Division Road~
|
||||||
@@ -669,13 +669,13 @@ Division Road continues south.
|
|||||||
~
|
~
|
||||||
0 -1 30120
|
0 -1 30120
|
||||||
E
|
E
|
||||||
asphalt pavement~
|
|
||||||
It's asphalt.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
zork~
|
zork~
|
||||||
What would possess you to look at that? What is a zork anyways?
|
What would possess you to look at that? What is a zork anyways?
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
asphalt pavement~
|
||||||
|
It's asphalt.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30120
|
#30120
|
||||||
Division Road~
|
Division Road~
|
||||||
@@ -694,14 +694,14 @@ Division Road continues south.
|
|||||||
~
|
~
|
||||||
0 -1 30121
|
0 -1 30121
|
||||||
E
|
E
|
||||||
asphalt pavement~
|
|
||||||
It's asphalt.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
tree~
|
tree~
|
||||||
It has been placed here just to relieve the monotony. It serves no other
|
It has been placed here just to relieve the monotony. It serves no other
|
||||||
purpose whatsoever.
|
purpose whatsoever.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
asphalt pavement~
|
||||||
|
It's asphalt.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30121
|
#30121
|
||||||
Division Road~
|
Division Road~
|
||||||
@@ -721,16 +721,16 @@ Wally World sits to the east.
|
|||||||
~
|
~
|
||||||
0 -1 30142
|
0 -1 30142
|
||||||
E
|
E
|
||||||
asphalt pavement~
|
|
||||||
It's asphalt.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
dorm dormitory~
|
dorm dormitory~
|
||||||
This is a rather tall dormitory. You'd guess that in real life, it's
|
This is a rather tall dormitory. You'd guess that in real life, it's
|
||||||
probably 11-stories high, but since that would take an absurd amount of time to
|
probably 11-stories high, but since that would take an absurd amount of time to
|
||||||
program, you don't think that there are that many floors in this replica of the
|
program, you don't think that there are that many floors in this replica of the
|
||||||
building.
|
building.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
asphalt pavement~
|
||||||
|
It's asphalt.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30122
|
#30122
|
||||||
The Northern Campus Entrance~
|
The Northern Campus Entrance~
|
||||||
@@ -747,6 +747,12 @@ The Student GHETTO... Beware!
|
|||||||
~
|
~
|
||||||
0 -1 30123
|
0 -1 30123
|
||||||
E
|
E
|
||||||
|
gate gateway pillar~
|
||||||
|
The gateway is made of limestone and covered in ivy. As you already knew
|
||||||
|
that you feel rather silly wasting your time looking at it. There is a sign on
|
||||||
|
the left pillar.
|
||||||
|
~
|
||||||
|
E
|
||||||
sign plaque~
|
sign plaque~
|
||||||
The nicely polished brass plaque reads:
|
The nicely polished brass plaque reads:
|
||||||
|
|
||||||
@@ -754,12 +760,6 @@ sign plaque~
|
|||||||
|
|
||||||
ENTER AT YOUR OWN RISK
|
ENTER AT YOUR OWN RISK
|
||||||
~
|
~
|
||||||
E
|
|
||||||
gate gateway pillar~
|
|
||||||
The gateway is made of limestone and covered in ivy. As you already knew
|
|
||||||
that you feel rather silly wasting your time looking at it. There is a sign on
|
|
||||||
the left pillar.
|
|
||||||
~
|
|
||||||
S
|
S
|
||||||
#30123
|
#30123
|
||||||
The Ghetto~
|
The Ghetto~
|
||||||
@@ -834,14 +834,14 @@ There is a locked door leading to a stairwell.
|
|||||||
door~
|
door~
|
||||||
1 30105 30295
|
1 30105 30295
|
||||||
E
|
E
|
||||||
mailbox mailboxes~
|
|
||||||
All of the mailboxes are all empty ... Just like normal you think.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
tiles floor~
|
tiles floor~
|
||||||
The floor is covered with tiles that are so ugly, you have a difficult time
|
The floor is covered with tiles that are so ugly, you have a difficult time
|
||||||
keeping your lunch down
|
keeping your lunch down
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
mailbox mailboxes~
|
||||||
|
All of the mailboxes are all empty ... Just like normal you think.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30127
|
#30127
|
||||||
Mary Rotte Cafeteria Entrance~
|
Mary Rotte Cafeteria Entrance~
|
||||||
@@ -868,14 +868,14 @@ There is a doorway leading to the kitchen.
|
|||||||
door doorway~
|
door doorway~
|
||||||
1 -1 30143
|
1 -1 30143
|
||||||
E
|
E
|
||||||
cafeteria caf~
|
|
||||||
Yes, this is the cafeteria.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
door doorway~
|
door doorway~
|
||||||
You believe that the doorway leads to the kitchen. Let's give our
|
You believe that the doorway leads to the kitchen. Let's give our
|
||||||
compliments to the chef... *grin*
|
compliments to the chef... *grin*
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
cafeteria caf~
|
||||||
|
Yes, this is the cafeteria.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30128
|
#30128
|
||||||
Mary Rotte Cafeteria Entrance~
|
Mary Rotte Cafeteria Entrance~
|
||||||
@@ -902,14 +902,14 @@ The dining hall lies to the west... Beware!
|
|||||||
~
|
~
|
||||||
0 -1 30148
|
0 -1 30148
|
||||||
E
|
E
|
||||||
cafeteria caf~
|
|
||||||
Yes, this is the cafeteria.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
door doorway~
|
door doorway~
|
||||||
You believe that the doorway leads to the kitchen. Let's give our
|
You believe that the doorway leads to the kitchen. Let's give our
|
||||||
compliments to the chef... *grin*
|
compliments to the chef... *grin*
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
cafeteria caf~
|
||||||
|
Yes, this is the cafeteria.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30129
|
#30129
|
||||||
Morris House~
|
Morris House~
|
||||||
@@ -959,16 +959,16 @@ The hallway continues west.
|
|||||||
~
|
~
|
||||||
0 -1 30324
|
0 -1 30324
|
||||||
E
|
E
|
||||||
round circle circular~
|
|
||||||
Yes, it's round.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
footnote~
|
footnote~
|
||||||
Yes, believe it or not, this is a reasonably accurate representation of the
|
Yes, believe it or not, this is a reasonably accurate representation of the
|
||||||
Physics building, Stirling Hall at our university. The lecture halls are
|
Physics building, Stirling Hall at our university. The lecture halls are
|
||||||
numbered in the same manner as represented and it is in fact round, so that you
|
numbered in the same manner as represented and it is in fact round, so that you
|
||||||
can walk in one direction all the way around the building.
|
can walk in one direction all the way around the building.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
round circle circular~
|
||||||
|
Yes, it's round.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30131
|
#30131
|
||||||
The Student Health Services Entrance~
|
The Student Health Services Entrance~
|
||||||
@@ -1038,13 +1038,13 @@ University Avenue lies to the west.
|
|||||||
~
|
~
|
||||||
0 -1 30110
|
0 -1 30110
|
||||||
E
|
E
|
||||||
halls hallways hall hallway~
|
|
||||||
They are twisting alright.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
minds mind great greatest~
|
minds mind great greatest~
|
||||||
All of whom were probably smarter than you.
|
All of whom were probably smarter than you.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
halls hallways hall hallway~
|
||||||
|
They are twisting alright.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30134
|
#30134
|
||||||
Corry-Mack Hall~
|
Corry-Mack Hall~
|
||||||
@@ -1065,13 +1065,13 @@ Campus Crescent lies to the south.
|
|||||||
~
|
~
|
||||||
0 -1 30105
|
0 -1 30105
|
||||||
E
|
E
|
||||||
halls hallways hall hallway~
|
|
||||||
They are twisting alright.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
minds mind great greatest~
|
minds mind great greatest~
|
||||||
All of whom were probably smarter than you.
|
All of whom were probably smarter than you.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
halls hallways hall hallway~
|
||||||
|
They are twisting alright.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30135
|
#30135
|
||||||
Dunning Hall Lobby~
|
Dunning Hall Lobby~
|
||||||
@@ -1163,7 +1163,7 @@ You can distinctly see a post office here, it might have a message in it, but
|
|||||||
you are not quite sure.
|
you are not quite sure.
|
||||||
~
|
~
|
||||||
~
|
~
|
||||||
0 -1 30170
|
0 -1 -1
|
||||||
D1
|
D1
|
||||||
There are electronic sounds coming from the east.
|
There are electronic sounds coming from the east.
|
||||||
~
|
~
|
||||||
@@ -1208,18 +1208,18 @@ A long hallway lies to the west.
|
|||||||
~
|
~
|
||||||
0 -1 30153
|
0 -1 30153
|
||||||
E
|
E
|
||||||
plaque plaques~
|
|
||||||
They are rather boring. A bunch of people you don't know.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
sign~
|
sign~
|
||||||
The sign says:
|
The sign says:
|
||||||
@n
|
n
|
||||||
Gym -> North
|
Gym -> North
|
||||||
Arena -> East
|
Arena -> East
|
||||||
Locker Rooms -> West
|
Locker Rooms -> West
|
||||||
Exit -> South
|
Exit -> South
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
plaque plaques~
|
||||||
|
They are rather boring. A bunch of people you don't know.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30140
|
#30140
|
||||||
The Grant Hall Building~
|
The Grant Hall Building~
|
||||||
@@ -1308,13 +1308,13 @@ The kitchen continues south.
|
|||||||
~
|
~
|
||||||
0 -1 30144
|
0 -1 30144
|
||||||
E
|
E
|
||||||
door doorway~
|
|
||||||
You stare intently at the door. Its wooden frame enthrals you.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
food~
|
food~
|
||||||
Believe me, you don't want to look at that!
|
Believe me, you don't want to look at that!
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
door doorway~
|
||||||
|
You stare intently at the door. Its wooden frame enthrals you.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30144
|
#30144
|
||||||
The Kitchen~
|
The Kitchen~
|
||||||
@@ -1357,13 +1357,13 @@ The dining hall continues south.
|
|||||||
~
|
~
|
||||||
0 -1 30147
|
0 -1 30147
|
||||||
E
|
E
|
||||||
food~
|
|
||||||
Believe me, you don't want to look at that!
|
|
||||||
~
|
|
||||||
E
|
|
||||||
students poor~
|
students poor~
|
||||||
You feel sorry for them.
|
You feel sorry for them.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
food~
|
||||||
|
Believe me, you don't want to look at that!
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30146
|
#30146
|
||||||
Dining Hall~
|
Dining Hall~
|
||||||
@@ -1384,13 +1384,13 @@ The dining hall continues west.
|
|||||||
~
|
~
|
||||||
0 -1 30145
|
0 -1 30145
|
||||||
E
|
E
|
||||||
food~
|
|
||||||
Believe me, you don't want to look at that!
|
|
||||||
~
|
|
||||||
E
|
|
||||||
students poor~
|
students poor~
|
||||||
You feel sorry for them.
|
You feel sorry for them.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
food~
|
||||||
|
Believe me, you don't want to look at that!
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30147
|
#30147
|
||||||
Dining Hall~
|
Dining Hall~
|
||||||
@@ -1411,13 +1411,13 @@ The dining hall continues east.
|
|||||||
~
|
~
|
||||||
0 -1 30148
|
0 -1 30148
|
||||||
E
|
E
|
||||||
food~
|
|
||||||
Believe me, you don't want to look at that!
|
|
||||||
~
|
|
||||||
E
|
|
||||||
students poor~
|
students poor~
|
||||||
You feel sorry for them.
|
You feel sorry for them.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
food~
|
||||||
|
Believe me, you don't want to look at that!
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30148
|
#30148
|
||||||
Dining Hall~
|
Dining Hall~
|
||||||
@@ -1443,13 +1443,13 @@ The dining hall continues west.
|
|||||||
~
|
~
|
||||||
0 -1 30147
|
0 -1 30147
|
||||||
E
|
E
|
||||||
food~
|
|
||||||
Believe me, you don't want to look at that!
|
|
||||||
~
|
|
||||||
E
|
|
||||||
students poor~
|
students poor~
|
||||||
You feel sorry for them.
|
You feel sorry for them.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
food~
|
||||||
|
Believe me, you don't want to look at that!
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30149
|
#30149
|
||||||
Kitchen~
|
Kitchen~
|
||||||
@@ -1470,13 +1470,13 @@ There is a storeroom beyond the door to the south.
|
|||||||
door doorway~
|
door doorway~
|
||||||
1 -1 30150
|
1 -1 30150
|
||||||
E
|
E
|
||||||
food~
|
|
||||||
Believe me, you don't want to look at that!
|
|
||||||
~
|
|
||||||
E
|
|
||||||
door doorway~
|
door doorway~
|
||||||
It's a door. It has a nice steel frame surrounding a metallic door.
|
It's a door. It has a nice steel frame surrounding a metallic door.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
food~
|
||||||
|
Believe me, you don't want to look at that!
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30150
|
#30150
|
||||||
A Storeroom~
|
A Storeroom~
|
||||||
@@ -1491,16 +1491,16 @@ These stairs lead back to the door to the kitchen.
|
|||||||
door doorway~
|
door doorway~
|
||||||
1 -1 30149
|
1 -1 30149
|
||||||
E
|
E
|
||||||
food~
|
door doorway~
|
||||||
Well, it's food.
|
It's a door. It has a nice steel frame surrounding a metallic door.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
spam pre-made packages ingredients uninteresting stuff~
|
spam pre-made packages ingredients uninteresting stuff~
|
||||||
It's rather uninteresting.
|
It's rather uninteresting.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
door doorway~
|
food~
|
||||||
It's a door. It has a nice steel frame surrounding a metallic door.
|
Well, it's food.
|
||||||
~
|
~
|
||||||
S
|
S
|
||||||
#30151
|
#30151
|
||||||
@@ -1522,13 +1522,13 @@ The kitchen continues west.
|
|||||||
~
|
~
|
||||||
0 -1 30149
|
0 -1 30149
|
||||||
E
|
E
|
||||||
door doorway~
|
|
||||||
You stare intently at the door. Its wooden frame enthrals you.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
food~
|
food~
|
||||||
Believe me, you don't want to look at that!
|
Believe me, you don't want to look at that!
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
door doorway~
|
||||||
|
You stare intently at the door. Its wooden frame enthrals you.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30152
|
#30152
|
||||||
Stairway~
|
Stairway~
|
||||||
@@ -1829,13 +1829,13 @@ The only way out is down.
|
|||||||
~
|
~
|
||||||
0 -1 30165
|
0 -1 30165
|
||||||
E
|
E
|
||||||
zorpa~
|
|
||||||
You see nothing special. Now what is a zorpa anyways?
|
|
||||||
~
|
|
||||||
E
|
|
||||||
moshing mosh~
|
moshing mosh~
|
||||||
All you can see is a mass of bodies moving up and down, up and down...
|
All you can see is a mass of bodies moving up and down, up and down...
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
zorpa~
|
||||||
|
You see nothing special. Now what is a zorpa anyways?
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30167
|
#30167
|
||||||
The Infobank~
|
The Infobank~
|
||||||
@@ -1856,17 +1856,17 @@ D5
|
|||||||
plank~
|
plank~
|
||||||
1 -1 30171
|
1 -1 30171
|
||||||
E
|
E
|
||||||
map~
|
|
||||||
This map shows absolutely nothing, further proving the value of student
|
|
||||||
governments to you.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
list~
|
list~
|
||||||
The list reads:
|
The list reads:
|
||||||
<name scratched out> President
|
<name scratched out> President
|
||||||
<name scratched out> Vice-President
|
<name scratched out> Vice-President
|
||||||
Seems as though everyone is claiming ignorance today.
|
Seems as though everyone is claiming ignorance today.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
map~
|
||||||
|
This map shows absolutely nothing, further proving the value of student
|
||||||
|
governments to you.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30168
|
#30168
|
||||||
The Games Room~
|
The Games Room~
|
||||||
@@ -1899,34 +1899,6 @@ You can see the central annex to the east.
|
|||||||
~
|
~
|
||||||
0 -1 30137
|
0 -1 30137
|
||||||
S
|
S
|
||||||
#30170
|
|
||||||
The Post Office~
|
|
||||||
This seems to be the standard post office given to any university by the
|
|
||||||
wonderful XXX government. You can tell that it is a university post office
|
|
||||||
because of the surplus amount of obscene graffiti upon the walls. The back
|
|
||||||
hall is south of here.
|
|
||||||
~
|
|
||||||
301 8 0 0 0 0
|
|
||||||
D2
|
|
||||||
You can see the back hall from here complete with humming bank machines.
|
|
||||||
~
|
|
||||||
~
|
|
||||||
0 -1 30138
|
|
||||||
E
|
|
||||||
graffiti~
|
|
||||||
You really don't want to read this! (if you want to continue reading type
|
|
||||||
"look wirt")
|
|
||||||
~
|
|
||||||
E
|
|
||||||
wirt~
|
|
||||||
You really are a sucker for punishment now aren't you? If you still want to
|
|
||||||
read it type "look prawn"
|
|
||||||
~
|
|
||||||
E
|
|
||||||
prawn~
|
|
||||||
You see nothing special. The Prawn is in excellent condition.
|
|
||||||
~
|
|
||||||
S
|
|
||||||
#30171
|
#30171
|
||||||
The Special Hidden Room~
|
The Special Hidden Room~
|
||||||
This room is completely empty except for the things you can see in it. The
|
This room is completely empty except for the things you can see in it. The
|
||||||
@@ -1957,6 +1929,34 @@ pamphlet leaflet photograph photo~
|
|||||||
even your stomach... Blech!
|
even your stomach... Blech!
|
||||||
~
|
~
|
||||||
S
|
S
|
||||||
|
#30170
|
||||||
|
The Post Office~
|
||||||
|
This seems to be the standard post office given to any university by the
|
||||||
|
wonderful XXX government. You can tell that it is a university post office
|
||||||
|
because of the surplus amount of obscene graffiti upon the walls. The back
|
||||||
|
hall is south of here.
|
||||||
|
~
|
||||||
|
301 8 0 0 0 0
|
||||||
|
D2
|
||||||
|
You can see the back hall from here complete with humming bank machines.
|
||||||
|
~
|
||||||
|
~
|
||||||
|
0 -1 30138
|
||||||
|
E
|
||||||
|
graffiti~
|
||||||
|
You really don't want to read this! (if you want to continue reading type
|
||||||
|
"look wirt")
|
||||||
|
~
|
||||||
|
E
|
||||||
|
wirt~
|
||||||
|
You really are a sucker for punishment now aren't you? If you still want to
|
||||||
|
read it type "look prawn"
|
||||||
|
~
|
||||||
|
E
|
||||||
|
prawn~
|
||||||
|
You see nothing special. The Prawn is in excellent condition.
|
||||||
|
~
|
||||||
|
S
|
||||||
#30173
|
#30173
|
||||||
De-Tox Unit~
|
De-Tox Unit~
|
||||||
This room seems to be the place where people get "detoxified". Although it
|
This room seems to be the place where people get "detoxified". Although it
|
||||||
@@ -2002,15 +2002,15 @@ be interesting.
|
|||||||
~
|
~
|
||||||
0 -1 30180
|
0 -1 30180
|
||||||
E
|
E
|
||||||
neat engineering devices~
|
|
||||||
You see lots of neat engineering devices which were used in the real world at
|
|
||||||
some point or another. At least you think they were.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
award awards~
|
award awards~
|
||||||
These are awards for various Engineering competitions which the university
|
These are awards for various Engineering competitions which the university
|
||||||
entered at one time or another.
|
entered at one time or another.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
neat engineering devices~
|
||||||
|
You see lots of neat engineering devices which were used in the real world at
|
||||||
|
some point or another. At least you think they were.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30175
|
#30175
|
||||||
Hallway~
|
Hallway~
|
||||||
@@ -2047,9 +2047,12 @@ The hallway you probably entered from is handily located to the west.
|
|||||||
~
|
~
|
||||||
0 -1 30175
|
0 -1 30175
|
||||||
E
|
E
|
||||||
stage~
|
goalie~
|
||||||
The stage is located at the west end of the room. In one corner of the
|
How did you know it was a goalie stick? Have you been reading the keywords?
|
||||||
stage, there is a hockey stick lying on the ground.
|
~
|
||||||
|
E
|
||||||
|
crest~
|
||||||
|
The crest seems to be the crest belonging to the class of `97.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
hockey stick~
|
hockey stick~
|
||||||
@@ -2057,12 +2060,9 @@ hockey stick~
|
|||||||
crest prominently displayed.
|
crest prominently displayed.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
crest~
|
stage~
|
||||||
The crest seems to be the crest belonging to the class of `97.
|
The stage is located at the west end of the room. In one corner of the
|
||||||
~
|
stage, there is a hockey stick lying on the ground.
|
||||||
E
|
|
||||||
goalie~
|
|
||||||
How did you know it was a goalie stick? Have you been reading the keywords?
|
|
||||||
~
|
~
|
||||||
S
|
S
|
||||||
#30177
|
#30177
|
||||||
@@ -2270,13 +2270,13 @@ This leads into the building.
|
|||||||
door~
|
door~
|
||||||
2 30101 30178
|
2 30101 30178
|
||||||
E
|
E
|
||||||
pathway~
|
|
||||||
The path is well worn, but there are no discernible footsteps upon it.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
building~
|
building~
|
||||||
This is the back side of Ellis Hall, the Engineering building.
|
This is the back side of Ellis Hall, the Engineering building.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
pathway~
|
||||||
|
The path is well worn, but there are no discernible footsteps upon it.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30188
|
#30188
|
||||||
A Pathway~
|
A Pathway~
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#30200
|
#30200
|
||||||
The Top Of The Greasepole~
|
The Top of the Greasepole~
|
||||||
You've made it to the top! All you have to do now is get down...
|
You've made it to the top! All you have to do now is get down.
|
||||||
~
|
~
|
||||||
302 4 0 0 0 5
|
302 4 0 0 0 5
|
||||||
D5
|
D5
|
||||||
@@ -9,6 +9,11 @@ It's a long slide down.
|
|||||||
~
|
~
|
||||||
0 -1 30192
|
0 -1 30192
|
||||||
E
|
E
|
||||||
|
pole greasepole~
|
||||||
|
The pole still looks pretty bad, but it doesn't look quite as bad as before.
|
||||||
|
|
||||||
|
~
|
||||||
|
E
|
||||||
info credits~
|
info credits~
|
||||||
See zone description room for Campus.
|
See zone description room for Campus.
|
||||||
Zone 302 is linked to the following zones:
|
Zone 302 is linked to the following zones:
|
||||||
@@ -48,11 +53,6 @@ Links: 64e to catacombs
|
|||||||
(Mobs Stay_Zone flags have all been disabled to allow free access between
|
(Mobs Stay_Zone flags have all been disabled to allow free access between
|
||||||
301, 302 and 303. Please ensure that any entrances into the area are flagged
|
301, 302 and 303. Please ensure that any entrances into the area are flagged
|
||||||
nomob to keep them in. - Parna for TBAMud.)
|
nomob to keep them in. - Parna for TBAMud.)
|
||||||
~
|
|
||||||
E
|
|
||||||
pole greasepole~
|
|
||||||
The pole still looks pretty bad, but it doesn't look quite as bad as before.
|
|
||||||
|
|
||||||
~
|
~
|
||||||
S
|
S
|
||||||
#30201
|
#30201
|
||||||
@@ -71,13 +71,13 @@ D2
|
|||||||
~
|
~
|
||||||
0 -1 30142
|
0 -1 30142
|
||||||
E
|
E
|
||||||
mail~
|
|
||||||
Why are you trying to look at the mail, it's private!
|
|
||||||
~
|
|
||||||
E
|
|
||||||
hooks hook key keys~
|
hooks hook key keys~
|
||||||
Unfortunately you don't see any keys hanging off of any of the hooks.
|
Unfortunately you don't see any keys hanging off of any of the hooks.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
mail~
|
||||||
|
Why are you trying to look at the mail, it's private!
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30202
|
#30202
|
||||||
Main Office~
|
Main Office~
|
||||||
@@ -92,9 +92,10 @@ This way leads back to the reception desk.
|
|||||||
door~
|
door~
|
||||||
1 30103 30201
|
1 30103 30201
|
||||||
E
|
E
|
||||||
chair~
|
filing cabinet files~
|
||||||
The chair is not unusual in any way whatsoever. The chair is in excellent
|
Looking through the files you see that Wally World was originally slated to
|
||||||
condition.
|
have at least eleven levels but the designers got sick and tired of it and gave
|
||||||
|
up after just a few levels.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
desk~
|
desk~
|
||||||
@@ -102,10 +103,9 @@ desk~
|
|||||||
excellent condition.
|
excellent condition.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
filing cabinet files~
|
chair~
|
||||||
Looking through the files you see that Wally World was originally slated to
|
The chair is not unusual in any way whatsoever. The chair is in excellent
|
||||||
have at least eleven levels but the designers got sick and tired of it and gave
|
condition.
|
||||||
up after just a few levels.
|
|
||||||
~
|
~
|
||||||
S
|
S
|
||||||
#30203
|
#30203
|
||||||
@@ -230,14 +230,14 @@ You can't tell where this leads.
|
|||||||
door~
|
door~
|
||||||
1 -1 30210
|
1 -1 30210
|
||||||
E
|
E
|
||||||
door~
|
|
||||||
The door on the west has the number 206 and the door on the east, 205.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
floor carpet~
|
floor carpet~
|
||||||
This is a nice, groovy, red patterned carpet which extends all the way down
|
This is a nice, groovy, red patterned carpet which extends all the way down
|
||||||
the hall.
|
the hall.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
door~
|
||||||
|
The door on the west has the number 206 and the door on the east, 205.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30209
|
#30209
|
||||||
Private Room 205~
|
Private Room 205~
|
||||||
@@ -300,15 +300,15 @@ You can't tell where this leads.
|
|||||||
door~
|
door~
|
||||||
1 -1 30213
|
1 -1 30213
|
||||||
E
|
E
|
||||||
door~
|
|
||||||
The door on the west has the number 204 and the door on the east, 203 while
|
|
||||||
the door to the north has the number 201.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
floor carpet~
|
floor carpet~
|
||||||
This is a nice, groovy, red patterned carpet which extends all the way down
|
This is a nice, groovy, red patterned carpet which extends all the way down
|
||||||
the hall.
|
the hall.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
door~
|
||||||
|
The door on the west has the number 204 and the door on the east, 203 while
|
||||||
|
the door to the north has the number 201.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30212
|
#30212
|
||||||
Private Room 203~
|
Private Room 203~
|
||||||
@@ -388,14 +388,14 @@ You can't tell where this leads.
|
|||||||
door~
|
door~
|
||||||
1 -1 30217
|
1 -1 30217
|
||||||
E
|
E
|
||||||
door~
|
|
||||||
The door on the west has the number 208 and the door on the east, 207.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
floor carpet~
|
floor carpet~
|
||||||
This is a nice, groovy, red patterned carpet which extends all the way down
|
This is a nice, groovy, red patterned carpet which extends all the way down
|
||||||
the hall.
|
the hall.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
door~
|
||||||
|
The door on the west has the number 208 and the door on the east, 207.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30216
|
#30216
|
||||||
Private Room 207~
|
Private Room 207~
|
||||||
@@ -458,15 +458,15 @@ You can't tell where this leads.
|
|||||||
door~
|
door~
|
||||||
1 -1 30220
|
1 -1 30220
|
||||||
E
|
E
|
||||||
door~
|
|
||||||
The door on the west has the number 210 and the door on the east, 209 and the
|
|
||||||
door to the south has the number 202.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
floor carpet~
|
floor carpet~
|
||||||
This is a nice, groovy, red patterned carpet which extends all the way down
|
This is a nice, groovy, red patterned carpet which extends all the way down
|
||||||
the hall.
|
the hall.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
door~
|
||||||
|
The door on the west has the number 210 and the door on the east, 209 and the
|
||||||
|
door to the south has the number 202.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30219
|
#30219
|
||||||
Private Room 209~
|
Private Room 209~
|
||||||
@@ -654,14 +654,14 @@ The trapdoor leads up... beyond that, you aren't sure where it goes.
|
|||||||
trapdoor door~
|
trapdoor door~
|
||||||
1 -1 30233
|
1 -1 30233
|
||||||
E
|
E
|
||||||
|
trapdoor~
|
||||||
|
The trapdoor is neatly fastened with a small hook.
|
||||||
|
~
|
||||||
|
E
|
||||||
desk chair plush~
|
desk chair plush~
|
||||||
The desk and chairs are neatly arranged as if in preparation for an upcoming
|
The desk and chairs are neatly arranged as if in preparation for an upcoming
|
||||||
meeting or something of the sort.
|
meeting or something of the sort.
|
||||||
~
|
~
|
||||||
E
|
|
||||||
trapdoor~
|
|
||||||
The trapdoor is neatly fastened with a small hook.
|
|
||||||
~
|
|
||||||
S
|
S
|
||||||
#30229
|
#30229
|
||||||
Hallway~
|
Hallway~
|
||||||
@@ -770,13 +770,13 @@ A chute leads down from this room.
|
|||||||
~
|
~
|
||||||
0 -1 30235
|
0 -1 30235
|
||||||
E
|
E
|
||||||
chute~
|
|
||||||
The chute is rather smooth and looks to be a fun ride.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
grate~
|
grate~
|
||||||
Beyond the grate you can see the attic.
|
Beyond the grate you can see the attic.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
chute~
|
||||||
|
The chute is rather smooth and looks to be a fun ride.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30235
|
#30235
|
||||||
The Chute~
|
The Chute~
|
||||||
@@ -871,13 +871,13 @@ An exit from this hellhole.
|
|||||||
~
|
~
|
||||||
0 -1 30240
|
0 -1 30240
|
||||||
E
|
E
|
||||||
mess~
|
|
||||||
Need you ask?
|
|
||||||
~
|
|
||||||
E
|
|
||||||
hell hole hellhole~
|
hell hole hellhole~
|
||||||
Never seen one before?
|
Never seen one before?
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
mess~
|
||||||
|
Need you ask?
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30240
|
#30240
|
||||||
The Ghetto~
|
The Ghetto~
|
||||||
@@ -897,13 +897,13 @@ A run-down house lies to the west.
|
|||||||
~
|
~
|
||||||
0 -1 30239
|
0 -1 30239
|
||||||
E
|
E
|
||||||
house run-down~
|
|
||||||
It's in bad shape.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
overturned police policemobile mobile~
|
overturned police policemobile mobile~
|
||||||
It is blocking the road quite nicely. Maybe it is meant to impede passage.
|
It is blocking the road quite nicely. Maybe it is meant to impede passage.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
house run-down~
|
||||||
|
It's in bad shape.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30241
|
#30241
|
||||||
The Ghetto Intersection~
|
The Ghetto Intersection~
|
||||||
@@ -1344,16 +1344,16 @@ The auditorium is to the north.
|
|||||||
~
|
~
|
||||||
0 -1 30259
|
0 -1 30259
|
||||||
E
|
E
|
||||||
drab brown curtains curtain~
|
sturdy wooden plank planks~
|
||||||
They are just your average, everyday, drab brown curtains.
|
They are sturdy. They are wooden. They are planks.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
cords cord pulley pulleys~
|
cords cord pulley pulleys~
|
||||||
Hey! It can make you look like you are flying!
|
Hey! It can make you look like you are flying!
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
sturdy wooden plank planks~
|
drab brown curtains curtain~
|
||||||
They are sturdy. They are wooden. They are planks.
|
They are just your average, everyday, drab brown curtains.
|
||||||
~
|
~
|
||||||
S
|
S
|
||||||
#30262
|
#30262
|
||||||
@@ -1403,13 +1403,13 @@ It's the same stairwell.
|
|||||||
~
|
~
|
||||||
0 -1 30257
|
0 -1 30257
|
||||||
E
|
E
|
||||||
cobweb cobwebs web webs~
|
|
||||||
Don't disturb them now!
|
|
||||||
~
|
|
||||||
E
|
|
||||||
huge stone door~
|
huge stone door~
|
||||||
The huge stone door looks very inviting.
|
The huge stone door looks very inviting.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
cobweb cobwebs web webs~
|
||||||
|
Don't disturb them now!
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30265
|
#30265
|
||||||
The Grant Hall Clock~
|
The Grant Hall Clock~
|
||||||
@@ -1785,10 +1785,6 @@ It is too dark to tell.
|
|||||||
~
|
~
|
||||||
0 -1 30276
|
0 -1 30276
|
||||||
E
|
E
|
||||||
door~
|
|
||||||
This door is covered with all types of non-magical sigils.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
sigils~
|
sigils~
|
||||||
The sigils seem to form some strange shapes:
|
The sigils seem to form some strange shapes:
|
||||||
SSSSS
|
SSSSS
|
||||||
@@ -1805,6 +1801,10 @@ sigils~
|
|||||||
SSSSS
|
SSSSS
|
||||||
I wonder what it could be?
|
I wonder what it could be?
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
door~
|
||||||
|
This door is covered with all types of non-magical sigils.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30281
|
#30281
|
||||||
A Classroom~
|
A Classroom~
|
||||||
@@ -1851,13 +1851,13 @@ You are repulsed by this exit since the exit to the east is well lit.
|
|||||||
~
|
~
|
||||||
0 -1 30274
|
0 -1 30274
|
||||||
E
|
E
|
||||||
light~
|
|
||||||
It's nice, warm, and inviting.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
dark~
|
dark~
|
||||||
Are you mad?
|
Are you mad?
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
light~
|
||||||
|
It's nice, warm, and inviting.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30283
|
#30283
|
||||||
The Exit~
|
The Exit~
|
||||||
@@ -1875,13 +1875,13 @@ Back into darkness, I don't think so!
|
|||||||
~
|
~
|
||||||
0 -1 30282
|
0 -1 30282
|
||||||
E
|
E
|
||||||
light~
|
|
||||||
It's nice, warm, and inviting.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
dark~
|
dark~
|
||||||
Are you mad?
|
Are you mad?
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
light~
|
||||||
|
It's nice, warm, and inviting.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30284
|
#30284
|
||||||
Mob Chute A~
|
Mob Chute A~
|
||||||
@@ -1916,10 +1916,6 @@ This is just an exit.
|
|||||||
~
|
~
|
||||||
0 -1 30106
|
0 -1 30106
|
||||||
E
|
E
|
||||||
door~
|
|
||||||
This door is covered with all types of non-magical sigils.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
sigils~
|
sigils~
|
||||||
The sigils seem to form some strange shapes:
|
The sigils seem to form some strange shapes:
|
||||||
MMM MMM OOO OOO !!
|
MMM MMM OOO OOO !!
|
||||||
@@ -1929,6 +1925,10 @@ sigils~
|
|||||||
MM M MM OO OO OO OO
|
MM M MM OO OO OO OO
|
||||||
MM MM OOO OOO !!
|
MM MM OOO OOO !!
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
door~
|
||||||
|
This door is covered with all types of non-magical sigils.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#30285
|
#30285
|
||||||
Mob Chute B~
|
Mob Chute B~
|
||||||
|
|||||||
@@ -105,10 +105,10 @@ S
|
|||||||
#34306
|
#34306
|
||||||
The Social Gathering Room~
|
The Social Gathering Room~
|
||||||
This is the Main Social Gathering Room of the Immortals. It is circular in
|
This is the Main Social Gathering Room of the Immortals. It is circular in
|
||||||
design and it connects four foyers in all directions to the north, south, east,
|
design, and it connects four foyers in all directions to the north, south, east,
|
||||||
and west. The room is quite plush with many fountains, couches, and carpeted
|
and west. The room is quite plush with many fountains, couches, and carpeted
|
||||||
areas, also with a few planters filled with thick green bushes and trees. The
|
areas, also with a few planters filled with thick green bushes and trees. The
|
||||||
fountain seems to be glowing best to look at it.
|
fountain seems to be glowing.
|
||||||
~
|
~
|
||||||
343 28 0 0 0 0
|
343 28 0 0 0 0
|
||||||
D0
|
D0
|
||||||
@@ -159,10 +159,10 @@ D3
|
|||||||
S
|
S
|
||||||
#34308
|
#34308
|
||||||
Eastern Foyer~
|
Eastern Foyer~
|
||||||
This is the Eastern End of the Gathering Hall. This foyer continues to the
|
You are in the Eastern End of the Gathering Hall. Several pillars line this
|
||||||
east into what appears to be a hallway and west into a circular central room.
|
room. The foyer continues east into what looks like a hallway and west into a
|
||||||
Several pillars line the room here, Archways north and south lead into the
|
circular central room. Archways north and south lead into the Immortal Board
|
||||||
Immortal Board Room and the Mortal Board Room.
|
Room and the Mortal Board Room.
|
||||||
~
|
~
|
||||||
343 24 0 0 0 0
|
343 24 0 0 0 0
|
||||||
D0
|
D0
|
||||||
|
|||||||
10
lib/world/wld/49.wld
Normal file
10
lib/world/wld/49.wld
Normal 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
162
lib/world/wld/491.wld
Normal 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
286
lib/world/wld/492.wld
Normal 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
|
||||||
|
$
|
||||||
@@ -38,6 +38,7 @@
|
|||||||
44.wld
|
44.wld
|
||||||
45.wld
|
45.wld
|
||||||
46.wld
|
46.wld
|
||||||
|
49.wld
|
||||||
50.wld
|
50.wld
|
||||||
51.wld
|
51.wld
|
||||||
52.wld
|
52.wld
|
||||||
@@ -183,6 +184,8 @@
|
|||||||
343.wld
|
343.wld
|
||||||
345.wld
|
345.wld
|
||||||
346.wld
|
346.wld
|
||||||
|
491.wld
|
||||||
|
492.wld
|
||||||
555.wld
|
555.wld
|
||||||
556.wld
|
556.wld
|
||||||
653.wld
|
653.wld
|
||||||
|
|||||||
@@ -103,8 +103,6 @@ E 1 30135 4 16 (a T-square of Death)
|
|||||||
O 0 30100 1 30176 (a red key)
|
O 0 30100 1 30176 (a red key)
|
||||||
O 0 30101 1 30186 (a brass key)
|
O 0 30101 1 30186 (a brass key)
|
||||||
O 0 30102 5 30150 (an Oreo(tm) cookie)
|
O 0 30102 5 30150 (an Oreo(tm) cookie)
|
||||||
O 0 30111 99 30172 (a condom)
|
|
||||||
O 0 30122 8 30171 (Magebane)
|
|
||||||
O 0 30129 1 30110 (the extension cord)
|
O 0 30129 1 30110 (the extension cord)
|
||||||
O 0 30129 1 30111 (the extension cord)
|
O 0 30129 1 30111 (the extension cord)
|
||||||
O 0 30129 1 30112 (the extension cord)
|
O 0 30129 1 30112 (the extension cord)
|
||||||
@@ -129,7 +127,6 @@ D 0 30155 1 1 (Locker Room)
|
|||||||
D 0 30165 0 1 (Campus Pub Stairwell)
|
D 0 30165 0 1 (Campus Pub Stairwell)
|
||||||
D 0 30141 2 1 (Campus Bookstore)
|
D 0 30141 2 1 (Campus Bookstore)
|
||||||
D 0 30167 5 1 (The Infobank)
|
D 0 30167 5 1 (The Infobank)
|
||||||
D 0 30171 4 1 (The Special Hidden Room)
|
|
||||||
D 0 30177 0 1 (Hallway)
|
D 0 30177 0 1 (Hallway)
|
||||||
D 0 30179 2 1 (Library)
|
D 0 30179 2 1 (Library)
|
||||||
D 0 30178 3 2 (The Back Exit)
|
D 0 30178 3 2 (The Back Exit)
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
Matrix of C.A.W.~
|
Matrix of C.A.W.~
|
||||||
Campus II~
|
Campus II~
|
||||||
30200 30299 30 2
|
30200 30299 30 2
|
||||||
|
R 0 30200 30112 -1 (a tam)
|
||||||
|
O 1 30112 99 30200 (a tam)
|
||||||
M 0 30105 4 30284 (Security)
|
M 0 30105 4 30284 (Security)
|
||||||
E 1 30115 99 16 (a flashlight)
|
E 1 30115 99 16 (a flashlight)
|
||||||
M 0 30105 4 30284 (Security)
|
M 0 30105 4 30284 (Security)
|
||||||
@@ -32,8 +34,6 @@ M 0 30132 1 30284 (Chris)
|
|||||||
M 0 30137 1 30284 (Alex)
|
M 0 30137 1 30284 (Alex)
|
||||||
M 0 30138 1 30284 (Steve)
|
M 0 30138 1 30284 (Steve)
|
||||||
M 0 30145 10 30284 (a copy of Golden World)
|
M 0 30145 10 30284 (a copy of Golden World)
|
||||||
R 0 30200 30112 -1 (a tam)
|
|
||||||
O 1 30112 99 30200 (a tam)
|
|
||||||
M 0 30139 1 30245 (Bob the storekeeper)
|
M 0 30139 1 30245 (Bob the storekeeper)
|
||||||
G 1 30136 99 -1 (a pale apple)
|
G 1 30136 99 -1 (a pale apple)
|
||||||
G 1 30140 99 -1 (a can of PopCoke)
|
G 1 30140 99 -1 (a can of PopCoke)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#4
|
#4
|
||||||
Unknown~
|
trunks shaoden~
|
||||||
Jade Forest~
|
Rename~
|
||||||
400 499 30 2 d 0 0 0 10 25
|
400 499 30 2 d 0 0 0 10 25
|
||||||
M 0 481 1 481 (Zachary)
|
M 0 481 1 481 (Zachary)
|
||||||
G 1 403 99 -1 (rawhide whip)
|
G 1 403 99 -1 (rawhide whip)
|
||||||
|
|||||||
7
lib/world/zon/49.zon
Normal file
7
lib/world/zon/49.zon
Normal 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
21
lib/world/zon/491.zon
Normal 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
|
||||||
|
$
|
||||||
21
lib/world/zon/491.zon.save
Normal file
21
lib/world/zon/491.zon.save
Normal 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
35
lib/world/zon/492.zon
Normal 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
|
||||||
|
$
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
#6
|
#6
|
||||||
Unknown~
|
q~
|
||||||
Sea of Souls~
|
Sea of Souls~
|
||||||
600 699 30 2 d 0 0 0 10 25
|
600 699 30 2 d 0 0 0 10 25
|
||||||
M 0 600 1 600 (a snail)
|
M 0 600 1 600 (a snail)
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
44.zon
|
44.zon
|
||||||
45.zon
|
45.zon
|
||||||
46.zon
|
46.zon
|
||||||
|
49.zon
|
||||||
50.zon
|
50.zon
|
||||||
51.zon
|
51.zon
|
||||||
52.zon
|
52.zon
|
||||||
@@ -183,6 +184,8 @@
|
|||||||
343.zon
|
343.zon
|
||||||
345.zon
|
345.zon
|
||||||
346.zon
|
346.zon
|
||||||
|
491.zon
|
||||||
|
492.zon
|
||||||
555.zon
|
555.zon
|
||||||
556.zon
|
556.zon
|
||||||
653.zon
|
653.zon
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
This directory is for log files.
|
|
||||||
0
log/badpws
Normal file
0
log/badpws
Normal file
0
log/delete
Normal file
0
log/delete
Normal file
13
log/errors
Normal file
13
log/errors
Normal 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
0
log/godcmds
Normal file
0
log/levels
Normal file
0
log/levels
Normal file
1
log/newplayers
Normal file
1
log/newplayers
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Jan 26 21:36:53 2026 :: Karrn [localhost] new player.
|
||||||
0
log/rentgone
Normal file
0
log/rentgone
Normal file
5
log/restarts
Normal file
5
log/restarts
Normal 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.
|
||||||
265
log/syslog.1
Normal file
265
log/syslog.1
Normal 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
16
log/syslog.2
Normal 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
269
log/syslog.4
Normal 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
2
log/trigger
Normal 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.
|
||||||
81
power_curve.ipynb
Normal file
81
power_curve.ipynb
Normal file
File diff suppressed because one or more lines are too long
26
src/CMakeLists.txt
Normal file
26
src/CMakeLists.txt
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.27)
|
||||||
|
|
||||||
|
# Set the project name
|
||||||
|
project(circle)
|
||||||
|
|
||||||
|
# Global definitions
|
||||||
|
if(MSVC)
|
||||||
|
# using Visual Studio C++
|
||||||
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# circle itself
|
||||||
|
file(GLOB CIRCLE_SOURCES
|
||||||
|
"*.h"
|
||||||
|
"*.c"
|
||||||
|
)
|
||||||
|
|
||||||
|
add_executable(circle ${CIRCLE_SOURCES})
|
||||||
|
|
||||||
|
if(MSVC)
|
||||||
|
target_link_libraries(circle wsock32.lib)
|
||||||
|
|
||||||
|
set_target_properties(circle PROPERTIES
|
||||||
|
VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/.."
|
||||||
|
)
|
||||||
|
endif()
|
||||||
@@ -20,8 +20,8 @@ CFLAGS = @CFLAGS@ $(MYFLAGS) $(PROFILE)
|
|||||||
|
|
||||||
LIBS = @LIBS@ @CRYPTLIB@ @NETLIB@
|
LIBS = @LIBS@ @CRYPTLIB@ @NETLIB@
|
||||||
|
|
||||||
SRCFILES := act.comm.c act.informative.c act.item.c act.movement.c act.offensive.c act.other.c act.social.c act.wizard.c aedit.c asciimap.c ban.c boards.c bsd-snprintf.c castle.c cedit.c class.c comm.c config.c constants.c db.c dg_comm.c dg_db_scripts.c dg_event.c dg_handler.c dg_misc.c dg_mobcmd.c dg_objcmd.c dg_olc.c dg_scripts.c dg_triggers.c dg_variables.c dg_wldcmd.c fight.c genmob.c genobj.c genolc.c genqst.c genshp.c genwld.c genzon.c graph.c handler.c hedit.c house.c ibt.c improved-edit.c interpreter.c limits.c lists.c magic.c mail.c medit.c mobact.c modify.c msgedit.c mud_event.c oasis.c oasis_copy.c oasis_delete.c oasis_list.c objsave.c oedit.c players.c prefedit.c protocol.c qedit.c quest.c random.c redit.c sedit.c shop.c spec_assign.c spec_procs.c spell_parser.c spells.c tedit.c utils.c weather.c zedit.c zmalloc.c
|
SRCFILES := $(shell ls *.c | sort)
|
||||||
OBJFILES := act.comm.o act.informative.o act.item.o act.movement.o act.offensive.o act.other.o act.social.o act.wizard.o aedit.o asciimap.o ban.o boards.o bsd-snprintf.o castle.o cedit.o class.o comm.o config.o constants.o db.o dg_comm.o dg_db_scripts.o dg_event.o dg_handler.o dg_misc.o dg_mobcmd.o dg_objcmd.o dg_olc.o dg_scripts.o dg_triggers.o dg_variables.o dg_wldcmd.o fight.o genmob.o genobj.o genolc.o genqst.o genshp.o genwld.o genzon.o graph.o handler.o hedit.o house.o ibt.o improved-edit.o interpreter.o limits.o lists.o magic.o mail.o medit.o mobact.o modify.o msgedit.o mud_event.o oasis.o oasis_copy.o oasis_delete.o oasis_list.o objsave.o oedit.o players.o prefedit.o protocol.o qedit.o quest.o random.o redit.o sedit.o shop.o spec_assign.o spec_procs.o spell_parser.o spells.o tedit.o utils.o weather.o zedit.o zmalloc.o
|
OBJFILES := $(patsubst %.c,%.o,$(SRCFILES))
|
||||||
|
|
||||||
default: all
|
default: all
|
||||||
|
|
||||||
|
|||||||
56
src/Makefile.macOS
Normal file
56
src/Makefile.macOS
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
# tbaMUD Makefile.in - Makefile template used by 'configure'
|
||||||
|
# Clean-up provided by seqwith.
|
||||||
|
|
||||||
|
# C compiler to use
|
||||||
|
CC = gcc
|
||||||
|
|
||||||
|
# Any special flags you want to pass to the compiler
|
||||||
|
MYFLAGS = -Wall -Wno-char-subscripts -Wno-invalid-source-encoding -DMEMORY_DEBUG
|
||||||
|
|
||||||
|
#flags for profiling (see hacker.doc for more information)
|
||||||
|
PROFILE =
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# Do Not Modify Anything Below This Line (unless you know what you're doing) #
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
BINDIR = ../bin
|
||||||
|
|
||||||
|
CFLAGS = -g -O0 $(MYFLAGS) $(PROFILE)
|
||||||
|
|
||||||
|
LIBS =
|
||||||
|
|
||||||
|
SRCFILES := $(shell ls *.c | sort)
|
||||||
|
OBJFILES := $(patsubst %.c,%.o,$(SRCFILES))
|
||||||
|
|
||||||
|
default: all
|
||||||
|
|
||||||
|
all: .accepted
|
||||||
|
$(MAKE) $(BINDIR)/circle
|
||||||
|
$(MAKE) utils
|
||||||
|
|
||||||
|
.accepted:
|
||||||
|
@./licheck less
|
||||||
|
|
||||||
|
utils: .accepted
|
||||||
|
(cd util; $(MAKE) all)
|
||||||
|
|
||||||
|
circle:
|
||||||
|
$(MAKE) $(BINDIR)/circle
|
||||||
|
|
||||||
|
$(BINDIR)/circle : $(OBJFILES)
|
||||||
|
$(CC) -o $(BINDIR)/circle $(PROFILE) $(OBJFILES) $(LIBS)
|
||||||
|
|
||||||
|
$%.o: %.c
|
||||||
|
$(CC) $< $(CFLAGS) -c -o $@
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o depend
|
||||||
|
|
||||||
|
# Dependencies for the object files (automagically generated with
|
||||||
|
# gcc -MM)
|
||||||
|
|
||||||
|
depend:
|
||||||
|
$(CC) -MM *.c > depend
|
||||||
|
|
||||||
|
-include depend
|
||||||
@@ -150,39 +150,7 @@ ACMD(do_tell)
|
|||||||
|
|
||||||
if (!*buf || !*buf2)
|
if (!*buf || !*buf2)
|
||||||
send_to_char(ch, "Who do you wish to tell what??\r\n");
|
send_to_char(ch, "Who do you wish to tell what??\r\n");
|
||||||
else if (!strcmp(buf, "m-w")) {
|
else if (GET_LEVEL(ch) < LVL_IMMORT && !(vict = get_player_vis(ch, buf, NULL, FIND_CHAR_WORLD)))
|
||||||
#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)))
|
|
||||||
send_to_char(ch, "%s", CONFIG_NOPERSON);
|
send_to_char(ch, "%s", CONFIG_NOPERSON);
|
||||||
else if (GET_LEVEL(ch) >= LVL_IMMORT && !(vict = get_char_vis(ch, buf, NULL, FIND_CHAR_WORLD)))
|
else if (GET_LEVEL(ch) >= LVL_IMMORT && !(vict = get_char_vis(ch, buf, NULL, FIND_CHAR_WORLD)))
|
||||||
send_to_char(ch, "%s", CONFIG_NOPERSON);
|
send_to_char(ch, "%s", CONFIG_NOPERSON);
|
||||||
|
|||||||
@@ -46,12 +46,12 @@ 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_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);
|
static void show_obj_modifiers(struct obj_data *obj, struct char_data *ch);
|
||||||
/* do_where utility functions */
|
/* 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 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 */
|
/* Subcommands */
|
||||||
/* For show_obj_to_char 'mode'. /-- arbitrary */
|
/* For show_obj_to_char 'mode'. /-- arbitrary */
|
||||||
#define SHOW_OBJ_LONG 0
|
#define SHOW_OBJ_LONG 0
|
||||||
#define SHOW_OBJ_SHORT 1
|
#define SHOW_OBJ_SHORT 1
|
||||||
#define SHOW_OBJ_ACTION 2
|
#define SHOW_OBJ_ACTION 2
|
||||||
@@ -125,7 +125,7 @@ static void show_obj_to_char(struct obj_data *obj, struct char_data *ch, int mod
|
|||||||
snprintf(notebuf, sizeof(notebuf), "There is something written on it:\r\n\r\n%s", obj->action_description);
|
snprintf(notebuf, sizeof(notebuf), "There is something written on it:\r\n\r\n%s", obj->action_description);
|
||||||
page_string(ch->desc, notebuf, TRUE);
|
page_string(ch->desc, notebuf, TRUE);
|
||||||
} else
|
} else
|
||||||
send_to_char(ch, "It's blank.\r\n");
|
send_to_char(ch, "It's blank.\r\n");
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case ITEM_DRINKCON:
|
case ITEM_DRINKCON:
|
||||||
@@ -225,14 +225,14 @@ static void diag_char_to_char(struct char_data *i, struct char_data *ch)
|
|||||||
byte percent;
|
byte percent;
|
||||||
const char *text;
|
const char *text;
|
||||||
} diagnosis[] = {
|
} diagnosis[] = {
|
||||||
{ 100, "is in excellent condition." },
|
{ 100, "is in excellent condition." },
|
||||||
{ 90, "has a few scratches." },
|
{ 90, "has a few scratches." },
|
||||||
{ 75, "has some small wounds and bruises." },
|
{ 75, "has some small wounds and bruises." },
|
||||||
{ 50, "has quite a few wounds." },
|
{ 50, "has quite a few wounds." },
|
||||||
{ 30, "has some big nasty wounds and scratches." },
|
{ 30, "has some big nasty wounds and scratches." },
|
||||||
{ 15, "looks pretty hurt." },
|
{ 15, "looks pretty hurt." },
|
||||||
{ 0, "is in awful condition." },
|
{ 0, "is in awful condition." },
|
||||||
{ -1, "is bleeding awfully from big wounds." },
|
{ -1, "is bleeding awfully from big wounds." },
|
||||||
};
|
};
|
||||||
int percent, ar_index;
|
int percent, ar_index;
|
||||||
const char *pers = PERS(i, ch);
|
const char *pers = PERS(i, ch);
|
||||||
@@ -240,7 +240,7 @@ static void diag_char_to_char(struct char_data *i, struct char_data *ch)
|
|||||||
if (GET_MAX_HIT(i) > 0)
|
if (GET_MAX_HIT(i) > 0)
|
||||||
percent = (100 * GET_HIT(i)) / GET_MAX_HIT(i);
|
percent = (100 * GET_HIT(i)) / GET_MAX_HIT(i);
|
||||||
else
|
else
|
||||||
percent = -1; /* How could MAX_HIT be < 1?? */
|
percent = -1; /* How could MAX_HIT be < 1?? */
|
||||||
|
|
||||||
for (ar_index = 0; diagnosis[ar_index].percent >= 0; ar_index++)
|
for (ar_index = 0; diagnosis[ar_index].percent >= 0; ar_index++)
|
||||||
if (percent >= diagnosis[ar_index].percent)
|
if (percent >= diagnosis[ar_index].percent)
|
||||||
@@ -269,12 +269,12 @@ static void look_at_char(struct char_data *i, struct char_data *ch)
|
|||||||
found = TRUE;
|
found = TRUE;
|
||||||
|
|
||||||
if (found) {
|
if (found) {
|
||||||
send_to_char(ch, "\r\n"); /* act() does capitalization. */
|
send_to_char(ch, "\r\n"); /* act() does capitalization. */
|
||||||
act("$n is using:", FALSE, i, 0, ch, TO_VICT);
|
act("$n is using:", FALSE, i, 0, ch, TO_VICT);
|
||||||
for (j = 0; j < NUM_WEARS; j++)
|
for (j = 0; j < NUM_WEARS; j++)
|
||||||
if (GET_EQ(i, j) && CAN_SEE_OBJ(ch, GET_EQ(i, j))) {
|
if (GET_EQ(i, j) && CAN_SEE_OBJ(ch, GET_EQ(i, j))) {
|
||||||
send_to_char(ch, "%s", wear_where[j]);
|
send_to_char(ch, "%s", wear_where[j]);
|
||||||
show_obj_to_char(GET_EQ(i, j), ch, SHOW_OBJ_SHORT);
|
show_obj_to_char(GET_EQ(i, j), ch, SHOW_OBJ_SHORT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ch != i && (IS_THIEF(ch) || GET_LEVEL(ch) >= LVL_IMMORT)) {
|
if (ch != i && (IS_THIEF(ch) || GET_LEVEL(ch) >= LVL_IMMORT)) {
|
||||||
@@ -300,7 +300,7 @@ static void list_one_char(struct char_data *i, struct char_data *ch)
|
|||||||
|
|
||||||
if (!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_SHOWVNUMS)) {
|
if (!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_SHOWVNUMS)) {
|
||||||
if (IS_NPC(i))
|
if (IS_NPC(i))
|
||||||
send_to_char(ch, "[%d] ", GET_MOB_VNUM(i));
|
send_to_char(ch, "[%d] ", GET_MOB_VNUM(i));
|
||||||
if (SCRIPT(i) && TRIGGERS(SCRIPT(i))) {
|
if (SCRIPT(i) && TRIGGERS(SCRIPT(i))) {
|
||||||
if (!TRIGGERS(SCRIPT(i))->next)
|
if (!TRIGGERS(SCRIPT(i))->next)
|
||||||
send_to_char(ch, "[T%d] ", GET_TRIG_VNUM(TRIGGERS(SCRIPT(i))));
|
send_to_char(ch, "[T%d] ", GET_TRIG_VNUM(TRIGGERS(SCRIPT(i))));
|
||||||
@@ -312,12 +312,12 @@ static void list_one_char(struct char_data *i, struct char_data *ch)
|
|||||||
if (GROUP(i)) {
|
if (GROUP(i)) {
|
||||||
if (GROUP(i) == GROUP(ch))
|
if (GROUP(i) == GROUP(ch))
|
||||||
send_to_char(ch, "(%s%s%s) ", CBGRN(ch, C_NRM),
|
send_to_char(ch, "(%s%s%s) ", CBGRN(ch, C_NRM),
|
||||||
GROUP_LEADER(GROUP(i)) == i ? "leader" : "group",
|
GROUP_LEADER(GROUP(i)) == i ? "leader" : "group",
|
||||||
CCNRM(ch, C_NRM));
|
CCNRM(ch, C_NRM));
|
||||||
else
|
else
|
||||||
send_to_char(ch, "(%s%s%s) ", CBRED(ch, C_NRM),
|
send_to_char(ch, "(%s%s%s) ", CBRED(ch, C_NRM),
|
||||||
GROUP_LEADER(GROUP(i)) == i ? "leader" : "group",
|
GROUP_LEADER(GROUP(i)) == i ? "leader" : "group",
|
||||||
CCNRM(ch, C_NRM));
|
CCNRM(ch, C_NRM));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_NPC(i) && i->player.long_descr && GET_POS(i) == GET_DEFAULT_POS(i)) {
|
if (IS_NPC(i) && i->player.long_descr && GET_POS(i) == GET_DEFAULT_POS(i)) {
|
||||||
@@ -326,9 +326,9 @@ static void list_one_char(struct char_data *i, struct char_data *ch)
|
|||||||
|
|
||||||
if (AFF_FLAGGED(ch, AFF_DETECT_ALIGN)) {
|
if (AFF_FLAGGED(ch, AFF_DETECT_ALIGN)) {
|
||||||
if (IS_EVIL(i))
|
if (IS_EVIL(i))
|
||||||
send_to_char(ch, "(Red Aura) ");
|
send_to_char(ch, "(Red Aura) ");
|
||||||
else if (IS_GOOD(i))
|
else if (IS_GOOD(i))
|
||||||
send_to_char(ch, "(Blue Aura) ");
|
send_to_char(ch, "(Blue Aura) ");
|
||||||
}
|
}
|
||||||
send_to_char(ch, "%s", i->player.long_descr);
|
send_to_char(ch, "%s", i->player.long_descr);
|
||||||
|
|
||||||
@@ -361,24 +361,24 @@ static void list_one_char(struct char_data *i, struct char_data *ch)
|
|||||||
if (GET_POS(i) != POS_FIGHTING) {
|
if (GET_POS(i) != POS_FIGHTING) {
|
||||||
if (!SITTING(i))
|
if (!SITTING(i))
|
||||||
send_to_char(ch, "%s", positions[(int) GET_POS(i)]);
|
send_to_char(ch, "%s", positions[(int) GET_POS(i)]);
|
||||||
else {
|
else {
|
||||||
furniture = SITTING(i);
|
furniture = SITTING(i);
|
||||||
send_to_char(ch, " is %s upon %s.", (GET_POS(i) == POS_SLEEPING ?
|
send_to_char(ch, " is %s upon %s.", (GET_POS(i) == POS_SLEEPING ?
|
||||||
"sleeping" : (GET_POS(i) == POS_RESTING ? "resting" : "sitting")),
|
"sleeping" : (GET_POS(i) == POS_RESTING ? "resting" : "sitting")),
|
||||||
OBJS(furniture, ch));
|
OBJS(furniture, ch));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (FIGHTING(i)) {
|
if (FIGHTING(i)) {
|
||||||
send_to_char(ch, " is here, fighting ");
|
send_to_char(ch, " is here, fighting ");
|
||||||
if (FIGHTING(i) == ch)
|
if (FIGHTING(i) == ch)
|
||||||
send_to_char(ch, "YOU!");
|
send_to_char(ch, "YOU!");
|
||||||
else {
|
else {
|
||||||
if (IN_ROOM(i) == IN_ROOM(FIGHTING(i)))
|
if (IN_ROOM(i) == IN_ROOM(FIGHTING(i)))
|
||||||
send_to_char(ch, "%s!", PERS(FIGHTING(i), ch));
|
send_to_char(ch, "%s!", PERS(FIGHTING(i), ch));
|
||||||
else
|
else
|
||||||
send_to_char(ch, "someone who has already left!");
|
send_to_char(ch, "someone who has already left!");
|
||||||
}
|
}
|
||||||
} else /* NIL fighting pointer */
|
} else /* NIL fighting pointer */
|
||||||
send_to_char(ch, " is here struggling with thin air.");
|
send_to_char(ch, " is here struggling with thin air.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -402,13 +402,13 @@ static void list_char_to_char(struct char_data *list, struct char_data *ch)
|
|||||||
if (ch != i) {
|
if (ch != i) {
|
||||||
/* hide npcs whose description starts with a '.' from non-holylighted people - Idea from Elaseth of TBA */
|
/* hide npcs whose description starts with a '.' from non-holylighted people - Idea from Elaseth of TBA */
|
||||||
if (!IS_NPC(ch) && !PRF_FLAGGED(ch, PRF_HOLYLIGHT) &&
|
if (!IS_NPC(ch) && !PRF_FLAGGED(ch, PRF_HOLYLIGHT) &&
|
||||||
IS_NPC(i) && i->player.long_descr && *i->player.long_descr == '.')
|
IS_NPC(i) && i->player.long_descr && *i->player.long_descr == '.')
|
||||||
continue;
|
continue;
|
||||||
send_to_char(ch, "%s", CCYEL(ch, C_NRM));
|
send_to_char(ch, "%s", CCYEL(ch, C_NRM));
|
||||||
if (CAN_SEE(ch, i))
|
if (CAN_SEE(ch, i))
|
||||||
list_one_char(i, ch);
|
list_one_char(i, ch);
|
||||||
else if (IS_DARK(IN_ROOM(ch)) && !CAN_SEE_IN_DARK(ch) &&
|
else if (IS_DARK(IN_ROOM(ch)) && !CAN_SEE_IN_DARK(ch) &&
|
||||||
AFF_FLAGGED(i, AFF_INFRAVISION))
|
AFF_FLAGGED(i, AFF_INFRAVISION))
|
||||||
send_to_char(ch, "You see a pair of glowing red eyes looking your way.\r\n");
|
send_to_char(ch, "You see a pair of glowing red eyes looking your way.\r\n");
|
||||||
send_to_char(ch, "%s", CCNRM(ch, C_NRM));
|
send_to_char(ch, "%s", CCNRM(ch, C_NRM));
|
||||||
}
|
}
|
||||||
@@ -425,12 +425,12 @@ static void do_auto_exits(struct char_data *ch)
|
|||||||
continue;
|
continue;
|
||||||
if (EXIT_FLAGGED(EXIT(ch, door), EX_CLOSED) && !CONFIG_DISP_CLOSED_DOORS)
|
if (EXIT_FLAGGED(EXIT(ch, door), EX_CLOSED) && !CONFIG_DISP_CLOSED_DOORS)
|
||||||
continue;
|
continue;
|
||||||
if (EXIT_FLAGGED(EXIT(ch, door), EX_HIDDEN) && !PRF_FLAGGED(ch, PRF_HOLYLIGHT))
|
if (EXIT_FLAGGED(EXIT(ch, door), EX_HIDDEN) && !PRF_FLAGGED(ch, PRF_HOLYLIGHT))
|
||||||
continue;
|
continue;
|
||||||
if (EXIT_FLAGGED(EXIT(ch, door), EX_CLOSED))
|
if (EXIT_FLAGGED(EXIT(ch, door), EX_CLOSED))
|
||||||
send_to_char(ch, "%s(%s)%s ", EXIT_FLAGGED(EXIT(ch, door), EX_HIDDEN) ? CCWHT(ch, C_NRM) : CCRED(ch, C_NRM), autoexits[door], CCCYN(ch, C_NRM));
|
send_to_char(ch, "%s(%s)%s ", EXIT_FLAGGED(EXIT(ch, door), EX_HIDDEN) ? CCWHT(ch, C_NRM) : CCRED(ch, C_NRM), autoexits[door], CCCYN(ch, C_NRM));
|
||||||
else if (EXIT_FLAGGED(EXIT(ch, door), EX_HIDDEN))
|
else if (EXIT_FLAGGED(EXIT(ch, door), EX_HIDDEN))
|
||||||
send_to_char(ch, "%s%s%s ", CCWHT(ch, C_NRM), autoexits[door], CCCYN(ch, C_NRM));
|
send_to_char(ch, "%s%s%s ", CCWHT(ch, C_NRM), autoexits[door], CCCYN(ch, C_NRM));
|
||||||
else
|
else
|
||||||
send_to_char(ch, "\t(%s\t) ", autoexits[door]);
|
send_to_char(ch, "\t(%s\t) ", autoexits[door]);
|
||||||
slen++;
|
slen++;
|
||||||
@@ -443,44 +443,50 @@ ACMD(do_exits)
|
|||||||
{
|
{
|
||||||
int door, len = 0;
|
int door, len = 0;
|
||||||
|
|
||||||
if (AFF_FLAGGED(ch, AFF_BLIND) && GET_LEVEL(ch) < LVL_IMMORT) {
|
if (AFF_FLAGGED(ch, AFF_BLIND) && GET_LEVEL(ch) < LVL_IMMORT)
|
||||||
|
{
|
||||||
send_to_char(ch, "You can't see a damned thing, you're blind!\r\n");
|
send_to_char(ch, "You can't see a damned thing, you're blind!\r\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
send_to_char(ch, "Obvious exits:\r\n");
|
send_to_char(ch, "Obvious exits:\r\n");
|
||||||
|
|
||||||
for (door = 0; door < DIR_COUNT; door++) {
|
for (door = 0; door < DIR_COUNT; door++)
|
||||||
|
{
|
||||||
if (!EXIT(ch, door) || EXIT(ch, door)->to_room == NOWHERE)
|
if (!EXIT(ch, door) || EXIT(ch, door)->to_room == NOWHERE)
|
||||||
continue;
|
continue;
|
||||||
if (EXIT_FLAGGED(EXIT(ch, door), EX_CLOSED) && !CONFIG_DISP_CLOSED_DOORS)
|
if (EXIT_FLAGGED(EXIT(ch, door), EX_CLOSED) && !CONFIG_DISP_CLOSED_DOORS)
|
||||||
continue;
|
continue;
|
||||||
if (EXIT_FLAGGED(EXIT(ch, door), EX_HIDDEN) && !PRF_FLAGGED(ch, PRF_HOLYLIGHT))
|
if (EXIT_FLAGGED(EXIT(ch, door), EX_HIDDEN) && !PRF_FLAGGED(ch, PRF_HOLYLIGHT))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
len++;
|
len++;
|
||||||
|
|
||||||
if (!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_SHOWVNUMS) && !EXIT_FLAGGED(EXIT(ch, door), EX_CLOSED))
|
if (!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_SHOWVNUMS) && !EXIT_FLAGGED(EXIT(ch, door), EX_CLOSED))
|
||||||
send_to_char(ch, "%-5s - [%5d]%s %s\r\n", dirs[door], GET_ROOM_VNUM(EXIT(ch, door)->to_room),
|
{
|
||||||
EXIT_FLAGGED(EXIT(ch, door), EX_HIDDEN) ? " [HIDDEN]" : "", world[EXIT(ch, door)->to_room].name);
|
send_to_char(ch, "%-5s -[%5d]%s %s\r\n", dirs[door], GET_ROOM_VNUM(EXIT(ch, door)->to_room),
|
||||||
else if (CONFIG_DISP_CLOSED_DOORS && EXIT_FLAGGED(EXIT(ch, door), EX_CLOSED)) {
|
EXIT_FLAGGED(EXIT(ch, door), EX_HIDDEN) ? "[HIDDEN]" : "", world[EXIT(ch, door)->to_room].name);
|
||||||
/* But we tell them the door is closed */
|
}
|
||||||
|
else if (CONFIG_DISP_CLOSED_DOORS && EXIT_FLAGGED(EXIT(ch, door), EX_CLOSED))
|
||||||
|
{
|
||||||
|
/*But we tell them the door is closed */
|
||||||
send_to_char(ch, "%-5s - The %s is closed%s\r\n", dirs[door],
|
send_to_char(ch, "%-5s - The %s is closed%s\r\n", dirs[door],
|
||||||
(EXIT(ch, door)->keyword)? fname(EXIT(ch, door)->keyword) : "opening",
|
(EXIT(ch, door)->keyword) ? fname(EXIT(ch, door)->keyword) : "opening",
|
||||||
EXIT_FLAGGED(EXIT(ch, door), EX_HIDDEN) ? " and hidden." : ".");
|
EXIT_FLAGGED(EXIT(ch, door), EX_HIDDEN) ? " and hidden." : ".");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
send_to_char(ch, "%-5s - %s\r\n", dirs[door], IS_DARK(EXIT(ch, door)->to_room) &&
|
send_to_char(ch, "%-5s - %s\r\n", dirs[door], IS_DARK(EXIT(ch, door)->to_room) &&
|
||||||
!CAN_SEE_IN_DARK(ch) ? "Too dark to tell." : world[EXIT(ch, door)->to_room].name);
|
!CAN_SEE_IN_DARK(ch) ? "Too dark to tell." : world[EXIT(ch, door)->to_room].name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (!len)
|
||||||
if (!len)
|
send_to_char(ch, " None.\r\n");
|
||||||
send_to_char(ch, " None.\r\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void look_at_room(struct char_data *ch, int ignore_brief)
|
void look_at_room(struct char_data *ch, int ignore_brief)
|
||||||
{
|
{
|
||||||
trig_data *t;
|
trig_data * t;
|
||||||
struct room_data *rm = &world[IN_ROOM(ch)];
|
struct room_data *rm = &world[IN_ROOM(ch)];
|
||||||
room_vnum target_room;
|
room_vnum target_room;
|
||||||
|
|
||||||
@@ -489,20 +495,22 @@ void look_at_room(struct char_data *ch, int ignore_brief)
|
|||||||
if (!ch->desc)
|
if (!ch->desc)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (IS_DARK(IN_ROOM(ch)) && !CAN_SEE_IN_DARK(ch)) {
|
if (IS_DARK(IN_ROOM(ch)) && !CAN_SEE_IN_DARK(ch)){
|
||||||
send_to_char(ch, "It is pitch black...\r\n");
|
send_to_char(ch, "It is pitch black...\r\n");
|
||||||
return;
|
return;
|
||||||
} else if (AFF_FLAGGED(ch, AFF_BLIND) && GET_LEVEL(ch) < LVL_IMMORT) {
|
}
|
||||||
|
else if (AFF_FLAGGED(ch, AFF_BLIND) && GET_LEVEL(ch) < LVL_IMMORT) {
|
||||||
send_to_char(ch, "You see nothing but infinite darkness...\r\n");
|
send_to_char(ch, "You see nothing but infinite darkness...\r\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
send_to_char(ch, "%s", CCCYN(ch, C_NRM));
|
|
||||||
|
send_to_char(ch, "%s", CCYEL(ch, C_NRM));
|
||||||
if (!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_SHOWVNUMS)) {
|
if (!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_SHOWVNUMS)) {
|
||||||
char buf[MAX_STRING_LENGTH];
|
char buf[MAX_STRING_LENGTH];
|
||||||
|
|
||||||
sprintbitarray(ROOM_FLAGS(IN_ROOM(ch)), room_bits, RF_ARRAY_MAX, buf);
|
sprintbitarray(ROOM_FLAGS(IN_ROOM(ch)), room_bits, RF_ARRAY_MAX, buf);
|
||||||
send_to_char(ch, "[%5d] ", GET_ROOM_VNUM(IN_ROOM(ch)));
|
send_to_char(ch, "[%5d] ", GET_ROOM_VNUM(IN_ROOM(ch)));
|
||||||
send_to_char(ch, "%s [ %s] [ %s ]", world[IN_ROOM(ch)].name, buf, sector_types[world[IN_ROOM(ch)].sector_type]);
|
send_to_char(ch, "%s[ %s][ %s ]", world[IN_ROOM(ch)].name, buf, sector_types[world[IN_ROOM(ch)].sector_type]);
|
||||||
|
|
||||||
if (SCRIPT(rm)) {
|
if (SCRIPT(rm)) {
|
||||||
send_to_char(ch, "[T");
|
send_to_char(ch, "[T");
|
||||||
@@ -513,21 +521,23 @@ void look_at_room(struct char_data *ch, int ignore_brief)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
send_to_char(ch, "%s", world[IN_ROOM(ch)].name);
|
send_to_char(ch, "%s", world[IN_ROOM(ch)].name);
|
||||||
|
|
||||||
send_to_char(ch, "%s\r\n", CCNRM(ch, C_NRM));
|
send_to_char(ch, "%s\r\n", CCNRM(ch, C_NRM));
|
||||||
|
|
||||||
if ((!IS_NPC(ch) && !PRF_FLAGGED(ch, PRF_BRIEF)) || ignore_brief ||
|
if ((!IS_NPC(ch) && !PRF_FLAGGED(ch, PRF_BRIEF)) || ignore_brief ||
|
||||||
ROOM_FLAGGED(IN_ROOM(ch), ROOM_DEATH)) {
|
ROOM_FLAGGED(IN_ROOM(ch), ROOM_DEATH)) {
|
||||||
if(!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_AUTOMAP) && can_see_map(ch))
|
if (!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_AUTOMAP) && can_see_map(ch))
|
||||||
str_and_map(world[target_room].description, ch, target_room);
|
str_and_map(world[target_room].description, ch, target_room);
|
||||||
else
|
else
|
||||||
send_to_char(ch, "%s", world[IN_ROOM(ch)].description);
|
send_to_char(ch, "%s", world[IN_ROOM(ch)].description);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* autoexits */
|
|
||||||
|
/*autoexits */
|
||||||
if (!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_AUTOEXIT))
|
if (!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_AUTOEXIT))
|
||||||
do_auto_exits(ch);
|
do_auto_exits(ch);
|
||||||
|
|
||||||
/* now list characters & objects */
|
/*now list characters &objects */
|
||||||
list_obj_to_char(world[IN_ROOM(ch)].contents, ch, SHOW_OBJ_LONG, FALSE);
|
list_obj_to_char(world[IN_ROOM(ch)].contents, ch, SHOW_OBJ_LONG, FALSE);
|
||||||
list_char_to_char(world[IN_ROOM(ch)].people, ch);
|
list_char_to_char(world[IN_ROOM(ch)].people, ch);
|
||||||
}
|
}
|
||||||
@@ -557,35 +567,35 @@ static void look_in_obj(struct char_data *ch, char *arg)
|
|||||||
if (!*arg)
|
if (!*arg)
|
||||||
send_to_char(ch, "Look in what?\r\n");
|
send_to_char(ch, "Look in what?\r\n");
|
||||||
else if (!(bits = generic_find(arg, FIND_OBJ_INV | FIND_OBJ_ROOM |
|
else if (!(bits = generic_find(arg, FIND_OBJ_INV | FIND_OBJ_ROOM |
|
||||||
FIND_OBJ_EQUIP, ch, &dummy, &obj))) {
|
FIND_OBJ_EQUIP, ch, &dummy, &obj))) {
|
||||||
send_to_char(ch, "There doesn't seem to be %s %s here.\r\n", AN(arg), arg);
|
send_to_char(ch, "There doesn't seem to be %s %s here.\r\n", AN(arg), arg);
|
||||||
} else if ((GET_OBJ_TYPE(obj) != ITEM_DRINKCON) &&
|
} else if ((GET_OBJ_TYPE(obj) != ITEM_DRINKCON) &&
|
||||||
(GET_OBJ_TYPE(obj) != ITEM_FOUNTAIN) &&
|
(GET_OBJ_TYPE(obj) != ITEM_FOUNTAIN) &&
|
||||||
(GET_OBJ_TYPE(obj) != ITEM_CONTAINER))
|
(GET_OBJ_TYPE(obj) != ITEM_CONTAINER))
|
||||||
send_to_char(ch, "There's nothing inside that!\r\n");
|
send_to_char(ch, "There's nothing inside that!\r\n");
|
||||||
else {
|
else {
|
||||||
if (GET_OBJ_TYPE(obj) == ITEM_CONTAINER) {
|
if (GET_OBJ_TYPE(obj) == ITEM_CONTAINER) {
|
||||||
if (OBJVAL_FLAGGED(obj, CONT_CLOSED) && (GET_LEVEL(ch) < LVL_IMMORT || !PRF_FLAGGED(ch, PRF_NOHASSLE)))
|
if (OBJVAL_FLAGGED(obj, CONT_CLOSED) && (GET_LEVEL(ch) < LVL_IMMORT || !PRF_FLAGGED(ch, PRF_NOHASSLE)))
|
||||||
send_to_char(ch, "It is closed.\r\n");
|
send_to_char(ch, "It is closed.\r\n");
|
||||||
else {
|
else {
|
||||||
send_to_char(ch, "%s", fname(obj->name));
|
send_to_char(ch, "%s", fname(obj->name));
|
||||||
switch (bits) {
|
switch (bits) {
|
||||||
case FIND_OBJ_INV:
|
case FIND_OBJ_INV:
|
||||||
send_to_char(ch, " (carried): \r\n");
|
send_to_char(ch, " (carried): \r\n");
|
||||||
break;
|
break;
|
||||||
case FIND_OBJ_ROOM:
|
case FIND_OBJ_ROOM:
|
||||||
send_to_char(ch, " (here): \r\n");
|
send_to_char(ch, " (here): \r\n");
|
||||||
break;
|
break;
|
||||||
case FIND_OBJ_EQUIP:
|
case FIND_OBJ_EQUIP:
|
||||||
send_to_char(ch, " (used): \r\n");
|
send_to_char(ch, " (used): \r\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
list_obj_to_char(obj->contains, ch, SHOW_OBJ_SHORT, TRUE);
|
list_obj_to_char(obj->contains, ch, SHOW_OBJ_SHORT, TRUE);
|
||||||
}
|
}
|
||||||
} else { /* item must be a fountain or drink container */
|
} else { /* item must be a fountain or drink container */
|
||||||
if ((GET_OBJ_VAL(obj, 1) == 0) && (GET_OBJ_VAL(obj, 0) != -1))
|
if ((GET_OBJ_VAL(obj, 1) == 0) && (GET_OBJ_VAL(obj, 0) != -1))
|
||||||
send_to_char(ch, "It is empty.\r\n");
|
send_to_char(ch, "It is empty.\r\n");
|
||||||
else {
|
else {
|
||||||
if (GET_OBJ_VAL(obj, 0) < 0)
|
if (GET_OBJ_VAL(obj, 0) < 0)
|
||||||
{
|
{
|
||||||
@@ -593,14 +603,15 @@ static void look_in_obj(struct char_data *ch, char *arg)
|
|||||||
sprinttype(GET_OBJ_VAL(obj, 2), color_liquid, buf2, sizeof(buf2));
|
sprinttype(GET_OBJ_VAL(obj, 2), color_liquid, buf2, sizeof(buf2));
|
||||||
send_to_char(ch, "It's full of a %s liquid.\r\n", buf2);
|
send_to_char(ch, "It's full of a %s liquid.\r\n", buf2);
|
||||||
}
|
}
|
||||||
else if (GET_OBJ_VAL(obj,1)>GET_OBJ_VAL(obj,0))
|
else if (GET_OBJ_VAL(obj,1)>GET_OBJ_VAL(obj,0))
|
||||||
send_to_char(ch, "Its contents seem somewhat murky.\r\n"); /* BUG */
|
send_to_char(ch, "Its contents seem somewhat murky.\r\n"); /* BUG */
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
char buf2[MAX_STRING_LENGTH];
|
char buf2[MAX_STRING_LENGTH];
|
||||||
amt = (GET_OBJ_VAL(obj, 1) * 3) / GET_OBJ_VAL(obj, 0);
|
amt = (GET_OBJ_VAL(obj, 1) * 3) / GET_OBJ_VAL(obj, 0);
|
||||||
sprinttype(GET_OBJ_VAL(obj, 2), color_liquid, buf2, sizeof(buf2));
|
sprinttype(GET_OBJ_VAL(obj, 2), color_liquid, buf2, sizeof(buf2));
|
||||||
send_to_char(ch, "It's %sfull of a %s liquid.\r\n", fullness[amt], buf2);
|
send_to_char(ch, "It's %sfull of a %s liquid.\r\n", fullness[amt], buf2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -637,14 +648,14 @@ static void look_at_target(struct char_data *ch, char *arg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bits = generic_find(arg, FIND_OBJ_INV | FIND_OBJ_ROOM | FIND_OBJ_EQUIP |
|
bits = generic_find(arg, FIND_OBJ_INV | FIND_OBJ_ROOM | FIND_OBJ_EQUIP |
|
||||||
FIND_CHAR_ROOM, ch, &found_char, &found_obj);
|
FIND_CHAR_ROOM, ch, &found_char, &found_obj);
|
||||||
|
|
||||||
/* Is the target a character? */
|
/* Is the target a character? */
|
||||||
if (found_char != NULL) {
|
if (found_char != NULL) {
|
||||||
look_at_char(found_char, ch);
|
look_at_char(found_char, ch);
|
||||||
if (ch != found_char) {
|
if (ch != found_char) {
|
||||||
if (CAN_SEE(found_char, ch))
|
if (CAN_SEE(found_char, ch))
|
||||||
act("$n looks at you.", TRUE, ch, 0, found_char, TO_VICT);
|
act("$n looks at you.", TRUE, ch, 0, found_char, TO_VICT);
|
||||||
act("$n looks at $N.", TRUE, ch, 0, found_char, TO_NOTVICT);
|
act("$n looks at $N.", TRUE, ch, 0, found_char, TO_NOTVICT);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@@ -666,16 +677,16 @@ static void look_at_target(struct char_data *ch, char *arg)
|
|||||||
for (j = 0; j < NUM_WEARS && !found; j++)
|
for (j = 0; j < NUM_WEARS && !found; j++)
|
||||||
if (GET_EQ(ch, j) && CAN_SEE_OBJ(ch, GET_EQ(ch, j)))
|
if (GET_EQ(ch, j) && CAN_SEE_OBJ(ch, GET_EQ(ch, j)))
|
||||||
if ((desc = find_exdesc(arg, GET_EQ(ch, j)->ex_description)) != NULL && ++i == fnum) {
|
if ((desc = find_exdesc(arg, GET_EQ(ch, j)->ex_description)) != NULL && ++i == fnum) {
|
||||||
send_to_char(ch, "%s", desc);
|
send_to_char(ch, "%s", desc);
|
||||||
found = TRUE;
|
found = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Does the argument match an extra desc in the char's inventory? */
|
/* Does the argument match an extra desc in the char's inventory? */
|
||||||
for (obj = ch->carrying; obj && !found; obj = obj->next_content) {
|
for (obj = ch->carrying; obj && !found; obj = obj->next_content) {
|
||||||
if (CAN_SEE_OBJ(ch, obj))
|
if (CAN_SEE_OBJ(ch, obj))
|
||||||
if ((desc = find_exdesc(arg, obj->ex_description)) != NULL && ++i == fnum) {
|
if ((desc = find_exdesc(arg, obj->ex_description)) != NULL && ++i == fnum) {
|
||||||
send_to_char(ch, "%s", desc);
|
send_to_char(ch, "%s", desc);
|
||||||
found = TRUE;
|
found = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -683,8 +694,8 @@ static void look_at_target(struct char_data *ch, char *arg)
|
|||||||
for (obj = world[IN_ROOM(ch)].contents; obj && !found; obj = obj->next_content)
|
for (obj = world[IN_ROOM(ch)].contents; obj && !found; obj = obj->next_content)
|
||||||
if (CAN_SEE_OBJ(ch, obj))
|
if (CAN_SEE_OBJ(ch, obj))
|
||||||
if ((desc = find_exdesc(arg, obj->ex_description)) != NULL && ++i == fnum) {
|
if ((desc = find_exdesc(arg, obj->ex_description)) != NULL && ++i == fnum) {
|
||||||
send_to_char(ch, "%s", desc);
|
send_to_char(ch, "%s", desc);
|
||||||
found = TRUE;
|
found = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If an object was found back in generic_find */
|
/* If an object was found back in generic_find */
|
||||||
@@ -714,7 +725,7 @@ ACMD(do_look)
|
|||||||
send_to_char(ch, "You can't see a damned thing, you're blind!\r\n");
|
send_to_char(ch, "You can't see a damned thing, you're blind!\r\n");
|
||||||
else if (IS_DARK(IN_ROOM(ch)) && !CAN_SEE_IN_DARK(ch)) {
|
else if (IS_DARK(IN_ROOM(ch)) && !CAN_SEE_IN_DARK(ch)) {
|
||||||
send_to_char(ch, "It is pitch black...\r\n");
|
send_to_char(ch, "It is pitch black...\r\n");
|
||||||
list_char_to_char(world[IN_ROOM(ch)].people, ch); /* glowing red eyes */
|
list_char_to_char(world[IN_ROOM(ch)].people, ch); /* glowing red eyes */
|
||||||
} else {
|
} else {
|
||||||
char arg[MAX_INPUT_LENGTH], arg2[MAX_INPUT_LENGTH];
|
char arg[MAX_INPUT_LENGTH], arg2[MAX_INPUT_LENGTH];
|
||||||
|
|
||||||
@@ -722,12 +733,12 @@ ACMD(do_look)
|
|||||||
|
|
||||||
if (subcmd == SCMD_READ) {
|
if (subcmd == SCMD_READ) {
|
||||||
if (!*arg)
|
if (!*arg)
|
||||||
send_to_char(ch, "Read what?\r\n");
|
send_to_char(ch, "Read what?\r\n");
|
||||||
else
|
else
|
||||||
look_at_target(ch, strcpy(tempsave, arg));
|
look_at_target(ch, strcpy(tempsave, arg));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!*arg) /* "look" alone, without an argument at all */
|
if (!*arg) /* "look" alone, without an argument at all */
|
||||||
look_at_room(ch, 1);
|
look_at_room(ch, 1);
|
||||||
else if (is_abbrev(arg, "in"))
|
else if (is_abbrev(arg, "in"))
|
||||||
look_in_obj(ch, arg2);
|
look_in_obj(ch, arg2);
|
||||||
@@ -767,15 +778,15 @@ ACMD(do_examine)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* look_at_target() eats the number. */
|
/* look_at_target() eats the number. */
|
||||||
look_at_target(ch, strcpy(tempsave, arg)); /* strcpy: OK */
|
look_at_target(ch, strcpy(tempsave, arg)); /* strcpy: OK */
|
||||||
|
|
||||||
generic_find(arg, FIND_OBJ_INV | FIND_OBJ_ROOM | FIND_CHAR_ROOM |
|
generic_find(arg, FIND_OBJ_INV | FIND_OBJ_ROOM | FIND_CHAR_ROOM |
|
||||||
FIND_OBJ_EQUIP, ch, &tmp_char, &tmp_object);
|
FIND_OBJ_EQUIP, ch, &tmp_char, &tmp_object);
|
||||||
|
|
||||||
if (tmp_object) {
|
if (tmp_object) {
|
||||||
if ((GET_OBJ_TYPE(tmp_object) == ITEM_DRINKCON) ||
|
if ((GET_OBJ_TYPE(tmp_object) == ITEM_DRINKCON) ||
|
||||||
(GET_OBJ_TYPE(tmp_object) == ITEM_FOUNTAIN) ||
|
(GET_OBJ_TYPE(tmp_object) == ITEM_FOUNTAIN) ||
|
||||||
(GET_OBJ_TYPE(tmp_object) == ITEM_CONTAINER)) {
|
(GET_OBJ_TYPE(tmp_object) == ITEM_CONTAINER)) {
|
||||||
send_to_char(ch, "When you look inside, you see:\r\n");
|
send_to_char(ch, "When you look inside, you see:\r\n");
|
||||||
look_in_obj(ch, arg);
|
look_in_obj(ch, arg);
|
||||||
}
|
}
|
||||||
@@ -807,18 +818,18 @@ ACMD(do_score)
|
|||||||
send_to_char(ch, "\r\n");
|
send_to_char(ch, "\r\n");
|
||||||
|
|
||||||
send_to_char(ch, "You have %d(%d) hit, %d(%d) mana and %d(%d) movement points.\r\n",
|
send_to_char(ch, "You have %d(%d) hit, %d(%d) mana and %d(%d) movement points.\r\n",
|
||||||
GET_HIT(ch), GET_MAX_HIT(ch), GET_MANA(ch), GET_MAX_MANA(ch),
|
GET_HIT(ch), GET_MAX_HIT(ch), GET_MANA(ch), GET_MAX_MANA(ch),
|
||||||
GET_MOVE(ch), GET_MAX_MOVE(ch));
|
GET_MOVE(ch), GET_MAX_MOVE(ch));
|
||||||
|
|
||||||
send_to_char(ch, "Your armor class is %d/10, and your alignment is %d.\r\n",
|
send_to_char(ch, "Your armor class is %d/10, and your alignment is %d.\r\n",
|
||||||
compute_armor_class(ch), GET_ALIGNMENT(ch));
|
compute_armor_class(ch), GET_ALIGNMENT(ch));
|
||||||
|
|
||||||
send_to_char(ch, "You have %d exp, %d gold coins, and %d questpoints.\r\n",
|
send_to_char(ch, "You have %d exp, %d gold coins, and %d questpoints.\r\n",
|
||||||
GET_EXP(ch), GET_GOLD(ch), GET_QUESTPOINTS(ch));
|
GET_EXP(ch), GET_GOLD(ch), GET_QUESTPOINTS(ch));
|
||||||
|
|
||||||
if (GET_LEVEL(ch) < LVL_IMMORT)
|
if (GET_LEVEL(ch) < LVL_IMMORT)
|
||||||
send_to_char(ch, "You need %d exp to reach your next level.\r\n",
|
send_to_char(ch, "You need %d exp to reach your next level.\r\n",
|
||||||
level_exp(GET_CLASS(ch), GET_LEVEL(ch) + 1) - GET_EXP(ch));
|
level_exp(GET_CLASS(ch), GET_LEVEL(ch) + 1) - GET_EXP(ch));
|
||||||
|
|
||||||
send_to_char(ch, "You have earned %d quest points.\r\n", GET_QUESTPOINTS(ch));
|
send_to_char(ch, "You have earned %d quest points.\r\n", GET_QUESTPOINTS(ch));
|
||||||
send_to_char(ch, "You have completed %d quest%s, ",
|
send_to_char(ch, "You have completed %d quest%s, ",
|
||||||
@@ -837,13 +848,13 @@ ACMD(do_score)
|
|||||||
}
|
}
|
||||||
|
|
||||||
playing_time = *real_time_passed((time(0) - ch->player.time.logon) +
|
playing_time = *real_time_passed((time(0) - ch->player.time.logon) +
|
||||||
ch->player.time.played, 0);
|
ch->player.time.played, 0);
|
||||||
send_to_char(ch, "You have been playing for %d day%s and %d hour%s.\r\n",
|
send_to_char(ch, "You have been playing for %d day%s and %d hour%s.\r\n",
|
||||||
playing_time.day, playing_time.day == 1 ? "" : "s",
|
playing_time.day, playing_time.day == 1 ? "" : "s",
|
||||||
playing_time.hours, playing_time.hours == 1 ? "" : "s");
|
playing_time.hours, playing_time.hours == 1 ? "" : "s");
|
||||||
|
|
||||||
send_to_char(ch, "This ranks you as %s %s (level %d).\r\n",
|
send_to_char(ch, "This ranks you as %s %s (level %d).\r\n",
|
||||||
GET_NAME(ch), GET_TITLE(ch), GET_LEVEL(ch));
|
GET_NAME(ch), GET_TITLE(ch), GET_LEVEL(ch));
|
||||||
|
|
||||||
switch (GET_POS(ch)) {
|
switch (GET_POS(ch)) {
|
||||||
case POS_DEAD:
|
case POS_DEAD:
|
||||||
@@ -974,8 +985,8 @@ ACMD(do_time)
|
|||||||
weekday = ((35 * time_info.month) + day) % 7;
|
weekday = ((35 * time_info.month) + day) % 7;
|
||||||
|
|
||||||
send_to_char(ch, "It is %d o'clock %s, on %s.\r\n",
|
send_to_char(ch, "It is %d o'clock %s, on %s.\r\n",
|
||||||
(time_info.hours % 12 == 0) ? 12 : (time_info.hours % 12),
|
(time_info.hours % 12 == 0) ? 12 : (time_info.hours % 12),
|
||||||
time_info.hours >= 12 ? "pm" : "am", weekdays[weekday]);
|
time_info.hours >= 12 ? "pm" : "am", weekdays[weekday]);
|
||||||
|
|
||||||
/* Peter Ajamian supplied the following as a fix for a bug introduced in the
|
/* Peter Ajamian supplied the following as a fix for a bug introduced in the
|
||||||
* ordinal display that caused 11, 12, and 13 to be incorrectly displayed as
|
* ordinal display that caused 11, 12, and 13 to be incorrectly displayed as
|
||||||
@@ -997,7 +1008,7 @@ ACMD(do_time)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
send_to_char(ch, "The %d%s Day of the %s, Year %d.\r\n",
|
send_to_char(ch, "The %d%s Day of the %s, Year %d.\r\n",
|
||||||
day, suf, month_name[time_info.month], time_info.year);
|
day, suf, month_name[time_info.month], time_info.year);
|
||||||
}
|
}
|
||||||
|
|
||||||
ACMD(do_weather)
|
ACMD(do_weather)
|
||||||
@@ -1012,8 +1023,8 @@ ACMD(do_weather)
|
|||||||
if (OUTSIDE(ch))
|
if (OUTSIDE(ch))
|
||||||
{
|
{
|
||||||
send_to_char(ch, "The sky is %s and %s.\r\n", sky_look[weather_info.sky],
|
send_to_char(ch, "The sky is %s and %s.\r\n", sky_look[weather_info.sky],
|
||||||
weather_info.change >= 0 ? "you feel a warm wind from south" :
|
weather_info.change >= 0 ? "you feel a warm wind from south" :
|
||||||
"your foot tells you bad weather is due");
|
"your foot tells you bad weather is due");
|
||||||
if (GET_LEVEL(ch) >= LVL_GOD)
|
if (GET_LEVEL(ch) >= LVL_GOD)
|
||||||
send_to_char(ch, "Pressure: %d (change: %d), Sky: %d (%s)\r\n",
|
send_to_char(ch, "Pressure: %d (change: %d), Sky: %d (%s)\r\n",
|
||||||
weather_info.pressure,
|
weather_info.pressure,
|
||||||
@@ -1051,7 +1062,7 @@ int search_help(const char *argument, int level)
|
|||||||
mid++;
|
mid++;
|
||||||
if (strn_cmp(argument, help_table[mid].keywords, minlen) || level < help_table[mid].min_level)
|
if (strn_cmp(argument, help_table[mid].keywords, minlen) || level < help_table[mid].min_level)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
return (mid);
|
return (mid);
|
||||||
}
|
}
|
||||||
else if (chk > 0)
|
else if (chk > 0)
|
||||||
@@ -1278,7 +1289,7 @@ ACMD(do_who)
|
|||||||
GET_LEVEL(tch), CLASS_ABBR(tch),
|
GET_LEVEL(tch), CLASS_ABBR(tch),
|
||||||
GET_NAME(tch), (*GET_TITLE(tch) ? " " : ""), GET_TITLE(tch),
|
GET_NAME(tch), (*GET_TITLE(tch) ? " " : ""), GET_TITLE(tch),
|
||||||
CCNRM(ch, C_SPR));
|
CCNRM(ch, C_SPR));
|
||||||
|
|
||||||
if (GET_INVIS_LEV(tch))
|
if (GET_INVIS_LEV(tch))
|
||||||
send_to_char(ch, " (i%d)", GET_INVIS_LEV(tch));
|
send_to_char(ch, " (i%d)", GET_INVIS_LEV(tch));
|
||||||
else if (AFF_FLAGGED(tch, AFF_INVISIBLE))
|
else if (AFF_FLAGGED(tch, AFF_INVISIBLE))
|
||||||
@@ -1371,7 +1382,7 @@ ACMD(do_users)
|
|||||||
|
|
||||||
host_search[0] = name_search[0] = '\0';
|
host_search[0] = name_search[0] = '\0';
|
||||||
|
|
||||||
strcpy(buf, argument); /* strcpy: OK (sizeof: argument == buf) */
|
strcpy(buf, argument); /* strcpy: OK (sizeof: argument == buf) */
|
||||||
while (*buf) {
|
while (*buf) {
|
||||||
char buf1[MAX_INPUT_LENGTH];
|
char buf1[MAX_INPUT_LENGTH];
|
||||||
|
|
||||||
@@ -1381,49 +1392,49 @@ ACMD(do_users)
|
|||||||
switch (mode) {
|
switch (mode) {
|
||||||
case 'o':
|
case 'o':
|
||||||
case 'k':
|
case 'k':
|
||||||
outlaws = 1;
|
outlaws = 1;
|
||||||
playing = 1;
|
playing = 1;
|
||||||
strcpy(buf, buf1); /* strcpy: OK (sizeof: buf1 == buf) */
|
strcpy(buf, buf1); /* strcpy: OK (sizeof: buf1 == buf) */
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
playing = 1;
|
playing = 1;
|
||||||
strcpy(buf, buf1); /* strcpy: OK (sizeof: buf1 == buf) */
|
strcpy(buf, buf1); /* strcpy: OK (sizeof: buf1 == buf) */
|
||||||
break;
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
deadweight = 1;
|
deadweight = 1;
|
||||||
strcpy(buf, buf1); /* strcpy: OK (sizeof: buf1 == buf) */
|
strcpy(buf, buf1); /* strcpy: OK (sizeof: buf1 == buf) */
|
||||||
break;
|
break;
|
||||||
case 'l':
|
case 'l':
|
||||||
playing = 1;
|
playing = 1;
|
||||||
half_chop(buf1, arg, buf);
|
half_chop(buf1, arg, buf);
|
||||||
sscanf(arg, "%d-%d", &low, &high);
|
sscanf(arg, "%d-%d", &low, &high);
|
||||||
break;
|
break;
|
||||||
case 'n':
|
case 'n':
|
||||||
playing = 1;
|
playing = 1;
|
||||||
half_chop(buf1, name_search, buf);
|
half_chop(buf1, name_search, buf);
|
||||||
break;
|
break;
|
||||||
case 'h':
|
case 'h':
|
||||||
playing = 1;
|
playing = 1;
|
||||||
half_chop(buf1, host_search, buf);
|
half_chop(buf1, host_search, buf);
|
||||||
break;
|
break;
|
||||||
case 'c':
|
case 'c':
|
||||||
playing = 1;
|
playing = 1;
|
||||||
half_chop(buf1, arg, buf);
|
half_chop(buf1, arg, buf);
|
||||||
showclass = find_class_bitvector(arg);
|
showclass = find_class_bitvector(arg);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
send_to_char(ch, "%s", USERS_FORMAT);
|
send_to_char(ch, "%s", USERS_FORMAT);
|
||||||
return;
|
return;
|
||||||
} /* end of switch */
|
} /* end of switch */
|
||||||
|
|
||||||
} else { /* endif */
|
} else { /* endif */
|
||||||
send_to_char(ch, "%s", USERS_FORMAT);
|
send_to_char(ch, "%s", USERS_FORMAT);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} /* end while (parser) */
|
} /* end while (parser) */
|
||||||
send_to_char(ch,
|
send_to_char(ch,
|
||||||
"Num Class Name State Idl Login\t* Site\r\n"
|
"Num Class Name State Idl Login\t* Site\r\n"
|
||||||
"--- ------- ------------ -------------- ----- -------- ------------------------\r\n");
|
"--- ------- ------------ -------------- ----- -------- ------------------------\r\n");
|
||||||
|
|
||||||
one_argument(argument, arg);
|
one_argument(argument, arg);
|
||||||
|
|
||||||
@@ -1445,7 +1456,7 @@ ACMD(do_users)
|
|||||||
if (!CAN_SEE(ch, tch) || GET_LEVEL(tch) < low || GET_LEVEL(tch) > high)
|
if (!CAN_SEE(ch, tch) || GET_LEVEL(tch) < low || GET_LEVEL(tch) > high)
|
||||||
continue;
|
continue;
|
||||||
if (outlaws && !PLR_FLAGGED(tch, PLR_KILLER) &&
|
if (outlaws && !PLR_FLAGGED(tch, PLR_KILLER) &&
|
||||||
!PLR_FLAGGED(tch, PLR_THIEF))
|
!PLR_FLAGGED(tch, PLR_THIEF))
|
||||||
continue;
|
continue;
|
||||||
if (showclass && !(showclass & (1 << GET_CLASS(tch))))
|
if (showclass && !(showclass & (1 << GET_CLASS(tch))))
|
||||||
continue;
|
continue;
|
||||||
@@ -1453,11 +1464,11 @@ ACMD(do_users)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (d->original)
|
if (d->original)
|
||||||
sprintf(classname, "[%2d %s]", GET_LEVEL(d->original),
|
sprintf(classname, "[%2d %s]", GET_LEVEL(d->original),
|
||||||
CLASS_ABBR(d->original));
|
CLASS_ABBR(d->original));
|
||||||
else
|
else
|
||||||
sprintf(classname, "[%2d %s]", GET_LEVEL(d->character),
|
sprintf(classname, "[%2d %s]", GET_LEVEL(d->character),
|
||||||
CLASS_ABBR(d->character));
|
CLASS_ABBR(d->character));
|
||||||
} else
|
} else
|
||||||
strcpy(classname, " - ");
|
strcpy(classname, " - ");
|
||||||
|
|
||||||
@@ -1470,15 +1481,15 @@ ACMD(do_users)
|
|||||||
|
|
||||||
if (d->character && STATE(d) == CON_PLAYING)
|
if (d->character && STATE(d) == CON_PLAYING)
|
||||||
sprintf(idletime, "%5d", d->character->char_specials.timer *
|
sprintf(idletime, "%5d", d->character->char_specials.timer *
|
||||||
SECS_PER_MUD_HOUR / SECS_PER_REAL_MIN);
|
SECS_PER_MUD_HOUR / SECS_PER_REAL_MIN);
|
||||||
else
|
else
|
||||||
strcpy(idletime, " ");
|
strcpy(idletime, " ");
|
||||||
|
|
||||||
sprintf(line, "%3d %-7s %-12s %-14s %-3s %-8s ", d->desc_num, classname,
|
sprintf(line, "%3d %-7s %-12s %-14s %-3s %-8s ", d->desc_num, classname,
|
||||||
d->original && d->original->player.name ? d->original->player.name :
|
d->original && d->original->player.name ? d->original->player.name :
|
||||||
d->character && d->character->player.name ? d->character->player.name :
|
d->character && d->character->player.name ? d->character->player.name :
|
||||||
"UNDEFINED",
|
"UNDEFINED",
|
||||||
state, idletime, timestr);
|
state, idletime, timestr);
|
||||||
|
|
||||||
if (*d->host)
|
if (*d->host)
|
||||||
sprintf(line + strlen(line), "[%s]\r\n", d->host);
|
sprintf(line + strlen(line), "[%s]\r\n", d->host);
|
||||||
@@ -1568,23 +1579,23 @@ static void perform_mortal_where(struct char_data *ch, char *arg)
|
|||||||
send_to_char(ch, "Players in %s\tn.\r\n--------------------\r\n", zone_table[j].name);
|
send_to_char(ch, "Players in %s\tn.\r\n--------------------\r\n", zone_table[j].name);
|
||||||
for (d = descriptor_list; d; d = d->next) {
|
for (d = descriptor_list; d; d = d->next) {
|
||||||
if (STATE(d) != CON_PLAYING || d->character == ch)
|
if (STATE(d) != CON_PLAYING || d->character == ch)
|
||||||
continue;
|
continue;
|
||||||
if ((i = (d->original ? d->original : d->character)) == NULL)
|
if ((i = (d->original ? d->original : d->character)) == NULL)
|
||||||
continue;
|
continue;
|
||||||
if (IN_ROOM(i) == NOWHERE || !CAN_SEE(ch, i))
|
if (IN_ROOM(i) == NOWHERE || !CAN_SEE(ch, i))
|
||||||
continue;
|
continue;
|
||||||
if (world[IN_ROOM(ch)].zone != world[IN_ROOM(i)].zone)
|
if (world[IN_ROOM(ch)].zone != world[IN_ROOM(i)].zone)
|
||||||
continue;
|
continue;
|
||||||
send_to_char(ch, "%-20s%s - %s%s\r\n", GET_NAME(i), QNRM, world[IN_ROOM(i)].name, QNRM);
|
send_to_char(ch, "%-20s%s - %s%s\r\n", GET_NAME(i), QNRM, world[IN_ROOM(i)].name, QNRM);
|
||||||
}
|
}
|
||||||
} else { /* print only FIRST char, not all. */
|
} else { /* print only FIRST char, not all. */
|
||||||
for (i = character_list; i; i = i->next) {
|
for (i = character_list; i; i = i->next) {
|
||||||
if (IN_ROOM(i) == NOWHERE || i == ch)
|
if (IN_ROOM(i) == NOWHERE || i == ch)
|
||||||
continue;
|
continue;
|
||||||
if (!CAN_SEE(ch, i) || world[IN_ROOM(i)].zone != world[IN_ROOM(ch)].zone)
|
if (!CAN_SEE(ch, i) || world[IN_ROOM(i)].zone != world[IN_ROOM(ch)].zone)
|
||||||
continue;
|
continue;
|
||||||
if (!isname(arg, i->player.name))
|
if (!isname(arg, i->player.name))
|
||||||
continue;
|
continue;
|
||||||
send_to_char(ch, "%-25s%s - %s%s\r\n", GET_NAME(i), QNRM, world[IN_ROOM(i)].name, QNRM);
|
send_to_char(ch, "%-25s%s - %s%s\r\n", GET_NAME(i), QNRM, world[IN_ROOM(i)].name, QNRM);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1592,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,
|
static size_t print_object_location(const int num, const obj_data *obj, const char_data *ch, // NOLINT(*-no-recursion)
|
||||||
int recur)
|
char *buf, size_t len, const size_t buf_size, const int recur)
|
||||||
{
|
{
|
||||||
|
size_t nlen = 0;
|
||||||
|
|
||||||
if (num > 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
|
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 (SCRIPT(obj)) {
|
||||||
if (!TRIGGERS(SCRIPT(obj))->next)
|
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
|
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)
|
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);
|
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)
|
else if (obj->carried_by) {
|
||||||
send_to_char(ch, "carried by %s%s\r\n", PERS(obj->carried_by, ch), QNRM);
|
if (PRF_FLAGGED(ch, PRF_SHOWVNUMS))
|
||||||
else if (obj->worn_by)
|
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);
|
||||||
send_to_char(ch, "worn by %s%s\r\n", PERS(obj->worn_by, ch), QNRM);
|
else
|
||||||
else if (obj->in_obj) {
|
nlen = snprintf(buf + len, buf_size - len, "carried by %s%s\r\n", PERS(obj->carried_by, ch), QNRM);
|
||||||
send_to_char(ch, "inside %s%s%s\r\n", obj->in_obj->short_description, QNRM, (recur ? ", which is" : " "));
|
if (PRF_FLAGGED(ch, PRF_VERBOSE) && IN_ROOM(obj->carried_by) != NOWHERE && len + nlen < buf_size)
|
||||||
if (recur)
|
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);
|
||||||
print_object_location(0, obj->in_obj, ch, recur);
|
} 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
|
} 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;
|
char_data *i;
|
||||||
struct obj_data *k;
|
obj_data *k;
|
||||||
struct descriptor_data *d;
|
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) {
|
if (!*arg) {
|
||||||
send_to_char(ch, "Players Room Location Zone\r\n");
|
send_to_char(ch, "Players Room Location Zone\r\n");
|
||||||
@@ -1647,26 +1688,64 @@ static void perform_immort_where(struct char_data *ch, char *arg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} 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)
|
for (i = character_list; i; i = i->next)
|
||||||
if (CAN_SEE(ch, i) && IN_ROOM(i) != NOWHERE && isname(arg, i->player.name)) {
|
if (CAN_SEE(ch, i) && IN_ROOM(i) != NOWHERE && isname(arg, i->player.name)) {
|
||||||
found = 1;
|
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);
|
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 (SCRIPT(i) && TRIGGERS(SCRIPT(i))) {
|
||||||
if (!TRIGGERS(SCRIPT(i))->next)
|
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
|
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)) {
|
if (PRF_FLAGGED(ch, PRF_VERBOSE) && len < buf_size) {
|
||||||
found = 1;
|
nlen = snprintf(buf + len, buf_size - len, " ### Object name Location\r\n");
|
||||||
print_object_location(++num, k, ch, TRUE);
|
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)
|
if (!found)
|
||||||
send_to_char(ch, "Couldn't find any such thing.\r\n");
|
send_to_char(ch, "Couldn't find any such thing.\r\n");
|
||||||
|
else
|
||||||
|
page_string(ch->desc, buf, TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1727,7 +1806,7 @@ ACMD(do_levels)
|
|||||||
|
|
||||||
for (i = min_lev; i < max_lev; i++) {
|
for (i = min_lev; i < max_lev; i++) {
|
||||||
nlen = snprintf(buf + len, sizeof(buf) - len, "[%2d] %8d-%-8d : ", (int)i,
|
nlen = snprintf(buf + len, sizeof(buf) - len, "[%2d] %8d-%-8d : ", (int)i,
|
||||||
level_exp(GET_CLASS(ch), i), level_exp(GET_CLASS(ch), i + 1) - 1);
|
level_exp(GET_CLASS(ch), i), level_exp(GET_CLASS(ch), i + 1) - 1);
|
||||||
if (len + nlen >= sizeof(buf))
|
if (len + nlen >= sizeof(buf))
|
||||||
break;
|
break;
|
||||||
len += nlen;
|
len += nlen;
|
||||||
@@ -1751,7 +1830,7 @@ ACMD(do_levels)
|
|||||||
|
|
||||||
if (len < sizeof(buf) && max_lev == LVL_IMMORT)
|
if (len < sizeof(buf) && max_lev == LVL_IMMORT)
|
||||||
snprintf(buf + len, sizeof(buf) - len, "[%2d] %8d : Immortality\r\n",
|
snprintf(buf + len, sizeof(buf) - len, "[%2d] %8d : Immortality\r\n",
|
||||||
LVL_IMMORT, level_exp(GET_CLASS(ch), LVL_IMMORT));
|
LVL_IMMORT, level_exp(GET_CLASS(ch), LVL_IMMORT));
|
||||||
page_string(ch->desc, buf, TRUE);
|
page_string(ch->desc, buf, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1926,6 +2005,9 @@ ACMD(do_toggle)
|
|||||||
{"pagelength", 0, 0, "\n", "\n"},
|
{"pagelength", 0, 0, "\n", "\n"},
|
||||||
{"screenwidth", 0, 0, "\n", "\n"},
|
{"screenwidth", 0, 0, "\n", "\n"},
|
||||||
{"color", 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 */
|
{"\n", 0, -1, "\n", "\n"} /* must be last */
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1939,16 +2021,17 @@ ACMD(do_toggle)
|
|||||||
if (!GET_WIMP_LEV(ch))
|
if (!GET_WIMP_LEV(ch))
|
||||||
strcpy(buf2, "OFF"); /* strcpy: OK */
|
strcpy(buf2, "OFF"); /* strcpy: OK */
|
||||||
else
|
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) {
|
if (GET_LEVEL(ch) == LVL_IMPL) {
|
||||||
send_to_char(ch,
|
send_to_char(ch,
|
||||||
" SlowNameserver: %-3s "
|
" SlowNameserver: %-3s "
|
||||||
" "
|
" "
|
||||||
" Trackthru Doors: %-3s\r\n",
|
" Trackthru Doors: %-3s\r\n",
|
||||||
|
|
||||||
ONOFF(CONFIG_NS_IS_SLOW),
|
ONOFF(CONFIG_NS_IS_SLOW),
|
||||||
ONOFF(CONFIG_TRACK_T_DOORS));
|
ONOFF(CONFIG_TRACK_T_DOORS));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GET_LEVEL(ch) >= LVL_IMMORT) {
|
if (GET_LEVEL(ch) >= LVL_IMMORT) {
|
||||||
@@ -1959,7 +2042,8 @@ ACMD(do_toggle)
|
|||||||
" NoHassle: %-3s "
|
" NoHassle: %-3s "
|
||||||
" Holylight: %-3s "
|
" Holylight: %-3s "
|
||||||
" ShowVnums: %-3s\r\n"
|
" ShowVnums: %-3s\r\n"
|
||||||
" Syslog: %-3s%s ",
|
" Syslog: %-3s "
|
||||||
|
" Verbose: %-3s%s ",
|
||||||
|
|
||||||
ONOFF(PRF_FLAGGED(ch, PRF_BUILDWALK)),
|
ONOFF(PRF_FLAGGED(ch, PRF_BUILDWALK)),
|
||||||
ONOFF(PRF_FLAGGED(ch, PRF_NOWIZ)),
|
ONOFF(PRF_FLAGGED(ch, PRF_NOWIZ)),
|
||||||
@@ -1968,6 +2052,7 @@ ACMD(do_toggle)
|
|||||||
ONOFF(PRF_FLAGGED(ch, PRF_HOLYLIGHT)),
|
ONOFF(PRF_FLAGGED(ch, PRF_HOLYLIGHT)),
|
||||||
ONOFF(PRF_FLAGGED(ch, PRF_SHOWVNUMS)),
|
ONOFF(PRF_FLAGGED(ch, PRF_SHOWVNUMS)),
|
||||||
types[(PRF_FLAGGED(ch, PRF_LOG1) ? 1 : 0) + (PRF_FLAGGED(ch, PRF_LOG2) ? 2 : 0)],
|
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");
|
GET_LEVEL(ch) == LVL_IMPL ? "" : "\r\n");
|
||||||
}
|
}
|
||||||
if (GET_LEVEL(ch) >= LVL_IMPL) {
|
if (GET_LEVEL(ch) >= LVL_IMPL) {
|
||||||
@@ -2112,7 +2197,7 @@ ACMD(do_toggle)
|
|||||||
for (i=0; *arg2 && *(sector_types[i]) != '\n'; i++)
|
for (i=0; *arg2 && *(sector_types[i]) != '\n'; i++)
|
||||||
if (is_abbrev(arg2, sector_types[i]))
|
if (is_abbrev(arg2, sector_types[i]))
|
||||||
break;
|
break;
|
||||||
if (*(sector_types[i]) == '\n')
|
if (*(sector_types[i]) == '\n')
|
||||||
i=0;
|
i=0;
|
||||||
GET_BUILDWALK_SECTOR(ch) = i;
|
GET_BUILDWALK_SECTOR(ch) = i;
|
||||||
send_to_char(ch, "Default sector type is %s\r\n", sector_types[i]);
|
send_to_char(ch, "Default sector type is %s\r\n", sector_types[i]);
|
||||||
@@ -2365,9 +2450,9 @@ ACMD(do_whois)
|
|||||||
{
|
{
|
||||||
CREATE(victim, struct char_data, 1);
|
CREATE(victim, struct char_data, 1);
|
||||||
clear_char(victim);
|
clear_char(victim);
|
||||||
|
|
||||||
new_mobile_data(victim);
|
new_mobile_data(victim);
|
||||||
|
|
||||||
CREATE(victim->player_specials, struct player_special_data, 1);
|
CREATE(victim->player_specials, struct player_special_data, 1);
|
||||||
|
|
||||||
if (load_char(buf, victim) > -1)
|
if (load_char(buf, victim) > -1)
|
||||||
|
|||||||
@@ -52,11 +52,12 @@ static void wear_message(struct char_data *ch, struct obj_data *obj, int where);
|
|||||||
|
|
||||||
static void perform_put(struct char_data *ch, struct obj_data *obj, struct obj_data *cont)
|
static void perform_put(struct char_data *ch, struct obj_data *obj, struct obj_data *cont)
|
||||||
{
|
{
|
||||||
|
long object_id = obj_script_id(obj);
|
||||||
|
|
||||||
if (!drop_otrigger(obj, ch))
|
if (!drop_otrigger(obj, ch))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!obj) /* object might be extracted by drop_otrigger */
|
if (!has_obj_by_uid_in_lookup_table(object_id)) /* object might be extracted by drop_otrigger */
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ((GET_OBJ_VAL(cont, 0) > 0) &&
|
if ((GET_OBJ_VAL(cont, 0) > 0) &&
|
||||||
@@ -409,24 +410,27 @@ static void perform_drop_gold(struct char_data *ch, int amount, byte mode, room_
|
|||||||
WAIT_STATE(ch, PULSE_VIOLENCE); /* to prevent coin-bombing */
|
WAIT_STATE(ch, PULSE_VIOLENCE); /* to prevent coin-bombing */
|
||||||
obj = create_money(amount);
|
obj = create_money(amount);
|
||||||
if (mode == SCMD_DONATE) {
|
if (mode == SCMD_DONATE) {
|
||||||
send_to_char(ch, "You throw some gold into the air where it disappears in a puff of smoke!\r\n");
|
send_to_char(ch, "You throw some gold into the air where it disappears in a puff of smoke!\r\n");
|
||||||
act("$n throws some gold into the air where it disappears in a puff of smoke!",
|
act("$n throws some gold into the air where it disappears in a puff of smoke!",
|
||||||
FALSE, ch, 0, 0, TO_ROOM);
|
FALSE, ch, 0, 0, TO_ROOM);
|
||||||
obj_to_room(obj, RDR);
|
obj_to_room(obj, RDR);
|
||||||
act("$p suddenly appears in a puff of orange smoke!", 0, 0, obj, 0, TO_ROOM);
|
act("$p suddenly appears in a puff of orange smoke!", 0, 0, obj, 0, TO_ROOM);
|
||||||
} else {
|
} else {
|
||||||
char buf[MAX_STRING_LENGTH];
|
char buf[MAX_STRING_LENGTH];
|
||||||
|
long object_id = obj_script_id(obj);
|
||||||
|
|
||||||
if (!drop_wtrigger(obj, ch)) {
|
if (!drop_wtrigger(obj, ch)) {
|
||||||
extract_obj(obj);
|
if (has_obj_by_uid_in_lookup_table(object_id))
|
||||||
|
extract_obj(obj);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf), "$n drops %s.", money_desc(amount));
|
snprintf(buf, sizeof(buf), "$n drops %s.", money_desc(amount));
|
||||||
act(buf, TRUE, ch, 0, 0, TO_ROOM);
|
act(buf, TRUE, ch, 0, 0, TO_ROOM);
|
||||||
|
|
||||||
send_to_char(ch, "You drop some gold.\r\n");
|
send_to_char(ch, "You drop some gold.\r\n");
|
||||||
obj_to_room(obj, IN_ROOM(ch));
|
obj_to_room(obj, IN_ROOM(ch));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
char buf[MAX_STRING_LENGTH];
|
char buf[MAX_STRING_LENGTH];
|
||||||
@@ -447,13 +451,20 @@ static int perform_drop(struct char_data *ch, struct obj_data *obj,
|
|||||||
{
|
{
|
||||||
char buf[MAX_STRING_LENGTH];
|
char buf[MAX_STRING_LENGTH];
|
||||||
int value;
|
int value;
|
||||||
|
long object_id = obj_script_id(obj);
|
||||||
|
|
||||||
if (!drop_otrigger(obj, ch))
|
if (!drop_otrigger(obj, ch))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (!has_obj_by_uid_in_lookup_table(object_id))
|
||||||
|
return 0; // item was extracted by script
|
||||||
|
|
||||||
if ((mode == SCMD_DROP) && !drop_wtrigger(obj, ch))
|
if ((mode == SCMD_DROP) && !drop_wtrigger(obj, ch))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (!has_obj_by_uid_in_lookup_table(object_id))
|
||||||
|
return 0; // item was extracted by script
|
||||||
|
|
||||||
if (OBJ_FLAGGED(obj, ITEM_NODROP) && !PRF_FLAGGED(ch, PRF_NOHASSLE)) {
|
if (OBJ_FLAGGED(obj, ITEM_NODROP) && !PRF_FLAGGED(ch, PRF_NOHASSLE)) {
|
||||||
snprintf(buf, sizeof(buf), "You can't %s $p, it must be CURSED!", sname);
|
snprintf(buf, sizeof(buf), "You can't %s $p, it must be CURSED!", sname);
|
||||||
act(buf, FALSE, ch, obj, 0, TO_CHAR);
|
act(buf, FALSE, ch, obj, 0, TO_CHAR);
|
||||||
@@ -768,45 +779,22 @@ void weight_change_object(struct obj_data *obj, int weight)
|
|||||||
|
|
||||||
void name_from_drinkcon(struct obj_data *obj)
|
void name_from_drinkcon(struct obj_data *obj)
|
||||||
{
|
{
|
||||||
char *new_name, *cur_name, *next;
|
|
||||||
const char *liqname;
|
const char *liqname;
|
||||||
int liqlen, cpylen;
|
char *new_name;
|
||||||
|
|
||||||
if (!obj || (GET_OBJ_TYPE(obj) != ITEM_DRINKCON && GET_OBJ_TYPE(obj) != ITEM_FOUNTAIN))
|
if (!obj || (GET_OBJ_TYPE(obj) != ITEM_DRINKCON && GET_OBJ_TYPE(obj) != ITEM_FOUNTAIN))
|
||||||
return;
|
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)];
|
liqname = drinknames[GET_OBJ_VAL(obj, 2)];
|
||||||
if (!isname(liqname, obj->name)) {
|
|
||||||
log("SYSERR: Can't remove liquid '%s' from '%s' (%d) item.", liqname, obj->name, obj->item_number);
|
remove_from_string(obj->name, liqname);
|
||||||
/* SYSERR_DESC: From name_from_drinkcon(), this error comes about if the
|
new_name = right_trim_whitespace(obj->name);
|
||||||
* object noted (by keywords and item vnum) does not contain the liquid
|
free(obj->name);
|
||||||
* string being searched for. */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
liqlen = strlen(liqname);
|
|
||||||
CREATE(new_name, char, strlen(obj->name) - strlen(liqname)); /* +1 for NUL, -1 for space */
|
|
||||||
|
|
||||||
for (cur_name = obj->name; cur_name; cur_name = next) {
|
|
||||||
if (*cur_name == ' ')
|
|
||||||
cur_name++;
|
|
||||||
|
|
||||||
if ((next = strchr(cur_name, ' ')))
|
|
||||||
cpylen = next - cur_name;
|
|
||||||
else
|
|
||||||
cpylen = strlen(cur_name);
|
|
||||||
|
|
||||||
if (!strn_cmp(cur_name, liqname, liqlen))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (*new_name)
|
|
||||||
strcat(new_name, " "); /* strcat: OK (size precalculated) */
|
|
||||||
strncat(new_name, cur_name, cpylen); /* strncat: OK (size precalculated) */
|
|
||||||
}
|
|
||||||
|
|
||||||
if (GET_OBJ_RNUM(obj) == NOTHING || obj->name != obj_proto[GET_OBJ_RNUM(obj)].name)
|
|
||||||
free(obj->name);
|
|
||||||
obj->name = new_name;
|
obj->name = new_name;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void name_to_drinkcon(struct obj_data *obj, int type)
|
void name_to_drinkcon(struct obj_data *obj, int type)
|
||||||
|
|||||||
@@ -461,6 +461,9 @@ int has_key(struct char_data *ch, obj_vnum key)
|
|||||||
{
|
{
|
||||||
struct obj_data *o;
|
struct obj_data *o;
|
||||||
|
|
||||||
|
if (key == NOTHING)
|
||||||
|
return (0);
|
||||||
|
|
||||||
for (o = ch->carrying; o; o = o->next_content)
|
for (o = ch->carrying; o; o = o->next_content)
|
||||||
if (GET_OBJ_VNUM(o) == key)
|
if (GET_OBJ_VNUM(o) == key)
|
||||||
return (1);
|
return (1);
|
||||||
|
|||||||
@@ -546,7 +546,6 @@ ACMD(do_split)
|
|||||||
if (rest) {
|
if (rest) {
|
||||||
send_to_char(ch, "%d coin%s %s not splitable, so you keep the money.\r\n",
|
send_to_char(ch, "%d coin%s %s not splitable, so you keep the money.\r\n",
|
||||||
rest, (rest == 1) ? "" : "s", (rest == 1) ? "was" : "were");
|
rest, (rest == 1) ? "" : "s", (rest == 1) ? "was" : "were");
|
||||||
increase_gold(ch, rest);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
send_to_char(ch, "How many coins do you wish to split with your group?\r\n");
|
send_to_char(ch, "How many coins do you wish to split with your group?\r\n");
|
||||||
|
|||||||
@@ -922,7 +922,7 @@ static void do_stat_character(struct char_data *ch, struct char_data *k)
|
|||||||
if (aff->bitvector[0] || aff->bitvector[1] || aff->bitvector[2] || aff->bitvector[3]) {
|
if (aff->bitvector[0] || aff->bitvector[1] || aff->bitvector[2] || aff->bitvector[3]) {
|
||||||
if (aff->modifier)
|
if (aff->modifier)
|
||||||
send_to_char(ch, ", ");
|
send_to_char(ch, ", ");
|
||||||
for (i=0; i<NUM_AFF_FLAGS; i++) {
|
for (i=1; i<NUM_AFF_FLAGS; i++) {
|
||||||
if (IS_SET_AR(aff->bitvector, i)) {
|
if (IS_SET_AR(aff->bitvector, i)) {
|
||||||
send_to_char(ch, "sets %s, ", affected_bits[i]);
|
send_to_char(ch, "sets %s, ", affected_bits[i]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -557,7 +557,7 @@ void aedit_parse(struct descriptor_data * d, char *arg) {
|
|||||||
}
|
}
|
||||||
if (OLC_ACTION(d)->command)
|
if (OLC_ACTION(d)->command)
|
||||||
free(OLC_ACTION(d)->command);
|
free(OLC_ACTION(d)->command);
|
||||||
OLC_ACTION(d)->command = strdup(arg);
|
OLC_ACTION(d)->command = strdup(arg);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -566,10 +566,10 @@ void aedit_parse(struct descriptor_data * d, char *arg) {
|
|||||||
aedit_disp_menu(d);
|
aedit_disp_menu(d);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (OLC_ACTION(d)->sort_as) {
|
if (OLC_ACTION(d)->sort_as)
|
||||||
free(OLC_ACTION(d)->sort_as);
|
free(OLC_ACTION(d)->sort_as);
|
||||||
OLC_ACTION(d)->sort_as = strdup(arg);
|
OLC_ACTION(d)->sort_as = strdup(arg);
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AEDIT_MIN_CHAR_POS:
|
case AEDIT_MIN_CHAR_POS:
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ struct board_info_type board_info[NUM_OF_BOARDS] = {
|
|||||||
{1226, 0, 0, LVL_IMPL, LIB_ETC "board.builder", 0},
|
{1226, 0, 0, LVL_IMPL, LIB_ETC "board.builder", 0},
|
||||||
{1227, 0, 0, LVL_IMPL, LIB_ETC "board.staff", 0},
|
{1227, 0, 0, LVL_IMPL, LIB_ETC "board.staff", 0},
|
||||||
{1228, 0, 0, LVL_IMPL, LIB_ETC "board.advertising", 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 */
|
/* local (file scope) global variables */
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
#ifndef _BOARDS_H_
|
#ifndef _BOARDS_H_
|
||||||
#define _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_BOARD_MESSAGES 60 /* arbitrary -- change if needed */
|
||||||
#define MAX_MESSAGE_LENGTH 4096 /* arbitrary -- change if needed */
|
#define MAX_MESSAGE_LENGTH 4096 /* arbitrary -- change if needed */
|
||||||
|
|
||||||
|
|||||||
74
src/comm.c
74
src/comm.c
@@ -104,8 +104,7 @@ unsigned long pulse = 0; /* number of pulses since game start */
|
|||||||
ush_int port;
|
ush_int port;
|
||||||
socket_t mother_desc;
|
socket_t mother_desc;
|
||||||
int next_tick = SECS_PER_MUD_HOUR; /* Tick countdown */
|
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 local global variable declarations (current file scope only) */
|
||||||
static struct txt_block *bufpool = 0; /* pool of large output buffers */
|
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 int tics_passed = 0; /* for extern checkpointing */
|
||||||
static struct timeval null_time; /* zero-valued time structure */
|
static struct timeval null_time; /* zero-valued time structure */
|
||||||
static byte reread_wizlist; /* signal: SIGUSR1 */
|
static byte reread_wizlist; /* signal: SIGUSR1 */
|
||||||
/* normally signal SIGUSR2, currently orphaned in favor of Webster dictionary
|
static byte emergency_unban; /* signal: SIGUSR2 */
|
||||||
* lookup
|
|
||||||
static byte emergency_unban;
|
|
||||||
*/
|
|
||||||
static int dg_act_check; /* toggle for act_trigger */
|
static int dg_act_check; /* toggle for act_trigger */
|
||||||
static bool fCopyOver; /* Are we booting in copyover mode? */
|
static bool fCopyOver; /* Are we booting in copyover mode? */
|
||||||
static char *last_act_message = NULL;
|
static char *last_act_message = NULL;
|
||||||
static byte webster_file_ready = FALSE;/* signal: SIGUSR2 */
|
|
||||||
|
|
||||||
/* static local function prototypes (current file scope only) */
|
/* static local function prototypes (current file scope only) */
|
||||||
static RETSIGTYPE reread_wizlists(int sig);
|
static RETSIGTYPE reread_wizlists(int sig);
|
||||||
@@ -160,9 +156,6 @@ static int open_logfile(const char *filename, FILE *stderr_fp);
|
|||||||
#if defined(POSIX)
|
#if defined(POSIX)
|
||||||
static sigfunc *my_signal(int signo, sigfunc *func);
|
static sigfunc *my_signal(int signo, sigfunc *func);
|
||||||
#endif
|
#endif
|
||||||
/* Webster Dictionary Lookup functions */
|
|
||||||
static RETSIGTYPE websterlink(int sig);
|
|
||||||
static void handle_webster_file(void);
|
|
||||||
|
|
||||||
static void msdp_update(void); /* KaVir plugin*/
|
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.");
|
mudlog(CMP, LVL_IMMORT, TRUE, "Signal received - rereading wizlists.");
|
||||||
reboot_wizlists();
|
reboot_wizlists();
|
||||||
}
|
}
|
||||||
/* Orphaned right now as signal trapping is used for Webster lookup
|
|
||||||
if (emergency_unban) {
|
if (emergency_unban) {
|
||||||
emergency_unban = FALSE;
|
emergency_unban = FALSE;
|
||||||
mudlog(BRF, LVL_IMMORT, TRUE, "Received SIGUSR2 - completely unrestricting game (emergent)");
|
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;
|
circle_restrict = 0;
|
||||||
num_invalid = 0;
|
num_invalid = 0;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
if (webster_file_ready) {
|
|
||||||
webster_file_ready = FALSE;
|
|
||||||
handle_webster_file();
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CIRCLE_UNIX
|
#ifdef CIRCLE_UNIX
|
||||||
/* Update tics_passed for deadlock protection (UNIX only) */
|
/* Update tics_passed for deadlock protection (UNIX only) */
|
||||||
@@ -1596,7 +1585,7 @@ static int process_output(struct descriptor_data *t)
|
|||||||
result = write_to_descriptor(t->descriptor, osb);
|
result = write_to_descriptor(t->descriptor, osb);
|
||||||
|
|
||||||
if (result < 0) { /* Oops, fatal error. Bye! */
|
if (result < 0) { /* Oops, fatal error. Bye! */
|
||||||
close_socket(t);
|
// close_socket(t); // close_socket is called after return of negative result
|
||||||
return (-1);
|
return (-1);
|
||||||
} else if (result == 0) /* Socket buffer full. Try later. */
|
} else if (result == 0) /* Socket buffer full. Try later. */
|
||||||
return (0);
|
return (0);
|
||||||
@@ -2232,18 +2221,10 @@ static RETSIGTYPE reread_wizlists(int sig)
|
|||||||
reread_wizlist = TRUE;
|
reread_wizlist = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Orphaned right now in place of Webster ...
|
|
||||||
static RETSIGTYPE unrestrict_game(int sig)
|
static RETSIGTYPE unrestrict_game(int sig)
|
||||||
{
|
{
|
||||||
emergency_unban = TRUE;
|
emergency_unban = TRUE;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
static RETSIGTYPE websterlink(int sig)
|
|
||||||
{
|
|
||||||
webster_file_ready = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef CIRCLE_UNIX
|
#ifdef CIRCLE_UNIX
|
||||||
|
|
||||||
@@ -2318,7 +2299,7 @@ static void signal_setup(void)
|
|||||||
|
|
||||||
/* user signal 2: unrestrict game. Used for emergencies if you lock
|
/* user signal 2: unrestrict game. Used for emergencies if you lock
|
||||||
* yourself out of the MUD somehow. */
|
* 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
|
/* set up the deadlock-protection so that the MUD aborts itself if it gets
|
||||||
* caught in an infinite loop for more than 3 minutes. */
|
* caught in an infinite loop for more than 3 minutes. */
|
||||||
@@ -2495,7 +2476,7 @@ void perform_act(const char *orig, struct char_data *ch, struct obj_data *obj,
|
|||||||
const char *i = NULL;
|
const char *i = NULL;
|
||||||
char lbuf[MAX_STRING_LENGTH], *buf, *j;
|
char lbuf[MAX_STRING_LENGTH], *buf, *j;
|
||||||
bool uppercasenext = FALSE;
|
bool uppercasenext = FALSE;
|
||||||
struct char_data *dg_victim = NULL;
|
struct char_data *dg_victim = (to == vict_obj) ? vict_obj : NULL;
|
||||||
struct obj_data *dg_target = NULL;
|
struct obj_data *dg_target = NULL;
|
||||||
char *dg_arg = NULL;
|
char *dg_arg = NULL;
|
||||||
|
|
||||||
@@ -2780,45 +2761,6 @@ static void circle_sleep(struct timeval *timeout)
|
|||||||
|
|
||||||
#endif /* CIRCLE_WINDOWS */
|
#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*/
|
/* KaVir's plugin*/
|
||||||
static void msdp_update( void )
|
static void msdp_update( void )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -60,9 +60,6 @@ void game_loop(socket_t mother_desc);
|
|||||||
void heartbeat(int heart_pulse);
|
void heartbeat(int heart_pulse);
|
||||||
void copyover_recover(void);
|
void copyover_recover(void);
|
||||||
|
|
||||||
/** webster dictionary lookup */
|
|
||||||
extern long last_webster_teller;
|
|
||||||
|
|
||||||
extern struct descriptor_data *descriptor_list;
|
extern struct descriptor_data *descriptor_list;
|
||||||
extern int buf_largecount;
|
extern int buf_largecount;
|
||||||
extern int buf_overflows;
|
extern int buf_overflows;
|
||||||
|
|||||||
337
src/conf.h.cmake.in
Normal file
337
src/conf.h.cmake.in
Normal 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_ */
|
||||||
367
src/conf.h.macOS
Normal file
367
src/conf.h.macOS
Normal file
@@ -0,0 +1,367 @@
|
|||||||
|
#ifndef _CONF_H_
|
||||||
|
#define _CONF_H_
|
||||||
|
|
||||||
|
/* Define to empty if the keyword does not work. */
|
||||||
|
/* #undef const */
|
||||||
|
|
||||||
|
/* Define if you don't have vprintf but do have _doprnt. */
|
||||||
|
/* #undef HAVE_DOPRNT */
|
||||||
|
|
||||||
|
/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */
|
||||||
|
#define HAVE_SYS_WAIT_H 1
|
||||||
|
|
||||||
|
/* Define if you have the vprintf function. */
|
||||||
|
#define HAVE_VPRINTF 1
|
||||||
|
|
||||||
|
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||||
|
/* #undef pid_t */
|
||||||
|
|
||||||
|
/* Define as the return type of signal handlers (int or void). */
|
||||||
|
#define RETSIGTYPE void
|
||||||
|
|
||||||
|
/* Define to `unsigned' if <sys/types.h> doesn't define. */
|
||||||
|
/* #undef size_t */
|
||||||
|
|
||||||
|
/* Define if you have the ANSI C header files. */
|
||||||
|
/* #undef STDC_HEADERS */
|
||||||
|
|
||||||
|
/* Define if you can safely include both <sys/time.h> and <time.h>. */
|
||||||
|
#define TIME_WITH_SYS_TIME 1
|
||||||
|
|
||||||
|
/* Define if we're compiling CircleMUD under any type of UNIX system. */
|
||||||
|
#define CIRCLE_UNIX 1
|
||||||
|
|
||||||
|
/* Machine-specific dependencies for running on modern macOS systems 10.13+ (High Sierra)
|
||||||
|
* Updated by Victor Augusto Borges Dias de Almeida (aka Stoneheart), 26 June 2024.
|
||||||
|
*
|
||||||
|
* Tested on:
|
||||||
|
* - macOS 10.13: High Sierra - September 25, 2017 (Latest: 10.13.6)
|
||||||
|
* - macOS 10.14: Mojave - September 24, 2018 (Latest: 10.14.6)
|
||||||
|
* - macOS 10.15: Catalina - October 7, 2019 (Latest: 10.15.7)
|
||||||
|
* - macOS 11: Big Sur - November 12, 2020 (Latest: 11.7.10)
|
||||||
|
* - macOS 12: Monterey - October 25, 2021 (Latest: 12.7)
|
||||||
|
* - macOS 13: Ventura - November 7, 2022 (Latest: 13.7)
|
||||||
|
* - macOS 14: Sonoma - November 7, 2023 (Latest: 14.3)
|
||||||
|
*
|
||||||
|
* This file works on Apple Silicon Chips (M1, M2, M3) without futher configurations. */
|
||||||
|
#if defined(__APPLE__) && defined(__MACH__)
|
||||||
|
#define CIRCLE_MAC_OS 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define if the system is capable of using crypt() to encrypt. */
|
||||||
|
#define CIRCLE_CRYPT 1
|
||||||
|
|
||||||
|
/* Define if we don't have proper support for the system's crypt(). */
|
||||||
|
/* #undef HAVE_UNSAFE_CRYPT */
|
||||||
|
|
||||||
|
/* Define is the system has struct in_addr. */
|
||||||
|
#define HAVE_STRUCT_IN_ADDR 1
|
||||||
|
|
||||||
|
/* Define to `int' if <sys/socket.h> doesn't define. */
|
||||||
|
/* #undef socklen_t */
|
||||||
|
|
||||||
|
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||||
|
/* #undef ssize_t */
|
||||||
|
|
||||||
|
/* Define if you have the gettimeofday function. */
|
||||||
|
#define HAVE_GETTIMEOFDAY 1
|
||||||
|
|
||||||
|
/* Define if you have the inet_addr function. */
|
||||||
|
#define HAVE_INET_ADDR 1
|
||||||
|
|
||||||
|
/* Define if you have the inet_aton function. */
|
||||||
|
#define HAVE_INET_ATON 1
|
||||||
|
|
||||||
|
/* Define if you have the select function. */
|
||||||
|
#define HAVE_SELECT 1
|
||||||
|
|
||||||
|
/* Define if you have the snprintf function. */
|
||||||
|
#define HAVE_SNPRINTF 1
|
||||||
|
|
||||||
|
/* Define if you have the strcasecmp function. */
|
||||||
|
#define HAVE_STRCASECMP 1
|
||||||
|
|
||||||
|
/* Define if you have the strdup function. */
|
||||||
|
#define HAVE_STRDUP 1
|
||||||
|
|
||||||
|
/* Define if you have the strerror function. */
|
||||||
|
#define HAVE_STRERROR 1
|
||||||
|
|
||||||
|
/* Define if you have the stricmp function. */
|
||||||
|
/* #undef HAVE_STRICMP */
|
||||||
|
|
||||||
|
/* Define if you have the strlcpy function. */
|
||||||
|
#ifndef CIRCLE_MAC_OS
|
||||||
|
#define HAVE_STRLCPY 1
|
||||||
|
#else
|
||||||
|
#define HAVE_STRLCPY 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define if you have the strncasecmp function. */
|
||||||
|
#define HAVE_STRNCASECMP 1
|
||||||
|
|
||||||
|
/* Define if you have the strnicmp function. */
|
||||||
|
/* #undef HAVE_STRNICMP */
|
||||||
|
|
||||||
|
/* Define if you have the strstr function. */
|
||||||
|
#define HAVE_STRSTR 1
|
||||||
|
|
||||||
|
/* Define if you have the vsnprintf function. */
|
||||||
|
#define HAVE_VSNPRINTF 1
|
||||||
|
|
||||||
|
/* Define if you have the <arpa/inet.h> header file. */
|
||||||
|
#define HAVE_ARPA_INET_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <arpa/telnet.h> header file. */
|
||||||
|
#define HAVE_ARPA_TELNET_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <assert.h> header file. */
|
||||||
|
#define HAVE_ASSERT_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <crypt.h> header file. */
|
||||||
|
/* #undef HAVE_CRYPT_H */
|
||||||
|
#ifdef CIRCLE_MAC_OS
|
||||||
|
#define HAVE_CRYPT_H 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define if you have the <errno.h> header file. */
|
||||||
|
#define HAVE_ERRNO_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <fcntl.h> header file. */
|
||||||
|
#define HAVE_FCNTL_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <limits.h> header file. */
|
||||||
|
#define HAVE_LIMITS_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <mcheck.h> header file. */
|
||||||
|
/* #undef HAVE_MCHECK_H */
|
||||||
|
#ifdef CIRCLE_MAC_OS
|
||||||
|
#define HAVE_MCHECK_H 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define if you have the <memory.h> header file. */
|
||||||
|
#define HAVE_MEMORY_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <net/errno.h> header file. */
|
||||||
|
/* #undef HAVE_NET_ERRNO_H */
|
||||||
|
|
||||||
|
/* Define if you have the <netdb.h> header file. */
|
||||||
|
#define HAVE_NETDB_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <netinet/in.h> header file. */
|
||||||
|
#define HAVE_NETINET_IN_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <signal.h> header file. */
|
||||||
|
#define HAVE_SIGNAL_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <string.h> header file. */
|
||||||
|
#define HAVE_STRING_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <strings.h> header file. */
|
||||||
|
#define HAVE_STRINGS_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <sys/fcntl.h> header file. */
|
||||||
|
#define HAVE_SYS_FCNTL_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <sys/resource.h> header file. */
|
||||||
|
#define HAVE_SYS_RESOURCE_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <sys/select.h> header file. */
|
||||||
|
#define HAVE_SYS_SELECT_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <sys/socket.h> header file. */
|
||||||
|
#define HAVE_SYS_SOCKET_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <sys/stat.h> header file. */
|
||||||
|
#define HAVE_SYS_STAT_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <sys/time.h> header file. */
|
||||||
|
#define HAVE_SYS_TIME_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <sys/types.h> header file. */
|
||||||
|
#define HAVE_SYS_TYPES_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <sys/uio.h> header file. */
|
||||||
|
#define HAVE_SYS_UIO_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <unistd.h> header file. */
|
||||||
|
#define HAVE_UNISTD_H 1
|
||||||
|
|
||||||
|
/* Define if you have the malloc library (-lmalloc). */
|
||||||
|
/* #undef HAVE_LIBMALLOC */
|
||||||
|
|
||||||
|
/* Check for a prototype to accept. */
|
||||||
|
/* #undef NEED_ACCEPT_PROTO */
|
||||||
|
|
||||||
|
#ifndef CIRCLE_MAC_OS
|
||||||
|
/* Check for a prototype to atoi. */
|
||||||
|
#define NEED_ATOI_PROTO
|
||||||
|
/* Check for a prototype to atol. */
|
||||||
|
#define NEED_ATOL_PROTO
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Check for a prototype to bind. */
|
||||||
|
/* #undef NEED_BIND_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to bzero. */
|
||||||
|
/* #undef NEED_BZERO_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to chdir. */
|
||||||
|
/* #undef NEED_CHDIR_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to close. */
|
||||||
|
/* #undef NEED_CLOSE_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to crypt. */
|
||||||
|
/* #undef NEED_CRYPT_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to fclose. */
|
||||||
|
/* #undef NEED_FCLOSE_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to fcntl. */
|
||||||
|
/* #undef NEED_FCNTL_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to fflush. */
|
||||||
|
/* #undef NEED_FFLUSH_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to fprintf. */
|
||||||
|
/* #undef NEED_FPRINTF_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to fputc. */
|
||||||
|
/* #undef NEED_FPUTC_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to fputs. */
|
||||||
|
/* #undef NEED_FPUTS_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to fread. */
|
||||||
|
/* #undef NEED_FREAD_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to fscanf. */
|
||||||
|
/* #undef NEED_FSCANF_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to fseek. */
|
||||||
|
/* #undef NEED_FSEEK_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to fwrite. */
|
||||||
|
/* #undef NEED_FWRITE_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to getpeername. */
|
||||||
|
/* #undef NEED_GETPEERNAME_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to getpid. */
|
||||||
|
/* #undef NEED_GETPID_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to getrlimit. */
|
||||||
|
/* #undef NEED_GETRLIMIT_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to getsockname. */
|
||||||
|
/* #undef NEED_GETSOCKNAME_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to gettimeofday. */
|
||||||
|
/* #undef NEED_GETTIMEOFDAY_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to htonl. */
|
||||||
|
/* #undef NEED_HTONL_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to htons. */
|
||||||
|
/* #undef NEED_HTONS_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to inet_addr. */
|
||||||
|
/* #undef NEED_INET_ADDR_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to inet_aton. */
|
||||||
|
/* #undef NEED_INET_ATON_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to inet_ntoa. */
|
||||||
|
/* #undef NEED_INET_NTOA_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to listen. */
|
||||||
|
/* #undef NEED_LISTEN_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to ntohl. */
|
||||||
|
/* #undef NEED_NTOHL_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to perror. */
|
||||||
|
/* #undef NEED_PERROR_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to printf. */
|
||||||
|
/* #undef NEED_PRINTF_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to qsort. */
|
||||||
|
#ifndef CIRCLE_MAC_OS
|
||||||
|
#define NEED_QSORT_PROTO
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Check for a prototype to read. */
|
||||||
|
/* #undef NEED_READ_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to remove. */
|
||||||
|
/* #undef NEED_REMOVE_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to rewind. */
|
||||||
|
/* #undef NEED_REWIND_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to select. */
|
||||||
|
/* #undef NEED_SELECT_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to setitimer. */
|
||||||
|
/* #undef NEED_SETITIMER_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to setrlimit. */
|
||||||
|
/* #undef NEED_SETRLIMIT_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to setsockopt. */
|
||||||
|
/* #undef NEED_SETSOCKOPT_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to snprintf. */
|
||||||
|
/* #undef NEED_SNPRINTF_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to socket. */
|
||||||
|
/* #undef NEED_SOCKET_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to sprintf. */
|
||||||
|
/* #undef NEED_SPRINTF_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to sscanf. */
|
||||||
|
/* #undef NEED_SSCANF_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to strcasecmp. */
|
||||||
|
/* #undef NEED_STRCASECMP_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to strdup. */
|
||||||
|
/* #undef NEED_STRDUP_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to strerror. */
|
||||||
|
/* #undef NEED_STRERROR_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to stricmp. */
|
||||||
|
#define NEED_STRICMP_PROTO
|
||||||
|
|
||||||
|
/* Check for a prototype to strlcpy. */
|
||||||
|
/* #undef NEED_STRLCPY_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to strncasecmp. */
|
||||||
|
/* #undef NEED_STRNCASECMP_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to strnicmp. */
|
||||||
|
#define NEED_STRNICMP_PROTO
|
||||||
|
|
||||||
|
/* Check for a prototype to system. */
|
||||||
|
#ifndef CIRCLE_MAC_OS
|
||||||
|
#define NEED_SYSTEM_PROTO
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Check for a prototype to time. */
|
||||||
|
/* #undef NEED_TIME_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to unlink. */
|
||||||
|
/* #undef NEED_UNLINK_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to vsnprintf. */
|
||||||
|
/* #undef NEED_VSNPRINTF_PROTO */
|
||||||
|
|
||||||
|
/* Check for a prototype to write. */
|
||||||
|
/* #undef NEED_WRITE_PROTO */
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* _CONF_H_ */
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
* @todo cpp_extern isn't needed here (or anywhere) as the extern reserved word
|
* @todo cpp_extern isn't needed here (or anywhere) as the extern reserved word
|
||||||
* works correctly with C compilers (at least in my Experience)
|
* works correctly with C compilers (at least in my Experience)
|
||||||
* Jeremy Osborne 1/28/2008 */
|
* Jeremy Osborne 1/28/2008 */
|
||||||
cpp_extern const char *tbamud_version = "tbaMUD 2020";
|
cpp_extern const char *tbamud_version = "tbaMUD 2025";
|
||||||
|
|
||||||
/* strings corresponding to ordinals/bitvectors in structs.h */
|
/* strings corresponding to ordinals/bitvectors in structs.h */
|
||||||
/* (Note: strings for class definitions in class.c instead of here) */
|
/* (Note: strings for class definitions in class.c instead of here) */
|
||||||
@@ -877,6 +877,7 @@ const char *trig_types[] = {
|
|||||||
"Door",
|
"Door",
|
||||||
"UNUSED",
|
"UNUSED",
|
||||||
"Time",
|
"Time",
|
||||||
|
"Damage",
|
||||||
"\n"
|
"\n"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
54
src/db.c
54
src/db.c
@@ -501,15 +501,22 @@ static void free_extra_descriptions(struct extra_descr_data *edesc)
|
|||||||
void destroy_db(void)
|
void destroy_db(void)
|
||||||
{
|
{
|
||||||
ssize_t cnt, itr;
|
ssize_t cnt, itr;
|
||||||
struct char_data *chtmp;
|
struct char_data *chtmp, *i = character_list;
|
||||||
struct obj_data *objtmp;
|
struct obj_data *objtmp;
|
||||||
|
|
||||||
/* Active Mobiles & Players */
|
/* Active Mobiles & Players */
|
||||||
|
while (i) {
|
||||||
|
chtmp = i;
|
||||||
|
i = i->next;
|
||||||
|
|
||||||
|
if (chtmp->master)
|
||||||
|
stop_follower(chtmp);
|
||||||
|
}
|
||||||
|
|
||||||
while (character_list) {
|
while (character_list) {
|
||||||
chtmp = character_list;
|
chtmp = character_list;
|
||||||
character_list = character_list->next;
|
character_list = character_list->next;
|
||||||
if (chtmp->master)
|
|
||||||
stop_follower(chtmp);
|
|
||||||
free_char(chtmp);
|
free_char(chtmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1232,6 +1239,24 @@ static bitvector_t asciiflag_conv_aff(char *flag)
|
|||||||
return (flags);
|
return (flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Fix for crashes in the editor when formatting. E-descs are assumed to
|
||||||
|
* end with a \r\n. -Welcor */
|
||||||
|
void ensure_newline_terminated(struct extra_descr_data* new_descr) {
|
||||||
|
char *with_term, *end;
|
||||||
|
|
||||||
|
if (new_descr->description == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
end = strchr(new_descr->description, '\0');
|
||||||
|
if (end > new_descr->description && *(end - 1) != '\n') {
|
||||||
|
CREATE(with_term, char, strlen(new_descr->description) + 3);
|
||||||
|
sprintf(with_term, "%s\r\n", new_descr->description); /* snprintf ok : size checked above*/
|
||||||
|
free(new_descr->description);
|
||||||
|
new_descr->description = with_term;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* load the rooms */
|
/* load the rooms */
|
||||||
void parse_room(FILE *fl, int virtual_nr)
|
void parse_room(FILE *fl, int virtual_nr)
|
||||||
{
|
{
|
||||||
@@ -1301,7 +1326,7 @@ void parse_room(FILE *fl, int virtual_nr)
|
|||||||
world[room_nr].room_flags[2] = asciiflag_conv(flags3);
|
world[room_nr].room_flags[2] = asciiflag_conv(flags3);
|
||||||
world[room_nr].room_flags[3] = asciiflag_conv(flags4);
|
world[room_nr].room_flags[3] = asciiflag_conv(flags4);
|
||||||
|
|
||||||
sprintf(flags, "object #%d", virtual_nr); /* sprintf: OK (until 399-bit integers) */
|
sprintf(flags, "room #%d", virtual_nr); /* sprintf: OK (until 399-bit integers) */
|
||||||
for(taeller=0; taeller < AF_ARRAY_MAX; taeller++)
|
for(taeller=0; taeller < AF_ARRAY_MAX; taeller++)
|
||||||
check_bitvector_names(world[room_nr].room_flags[taeller], room_bits_count, flags, "room");
|
check_bitvector_names(world[room_nr].room_flags[taeller], room_bits_count, flags, "room");
|
||||||
|
|
||||||
@@ -1339,17 +1364,8 @@ void parse_room(FILE *fl, int virtual_nr)
|
|||||||
CREATE(new_descr, struct extra_descr_data, 1);
|
CREATE(new_descr, struct extra_descr_data, 1);
|
||||||
new_descr->keyword = fread_string(fl, buf2);
|
new_descr->keyword = fread_string(fl, buf2);
|
||||||
new_descr->description = fread_string(fl, buf2);
|
new_descr->description = fread_string(fl, buf2);
|
||||||
/* Fix for crashes in the editor when formatting. E-descs are assumed to
|
ensure_newline_terminated(new_descr);
|
||||||
* end with a \r\n. -Welcor */
|
|
||||||
{
|
|
||||||
char *end = strchr(new_descr->description, '\0');
|
|
||||||
if (end > new_descr->description && *(end-1) != '\n') {
|
|
||||||
CREATE(end, char, strlen(new_descr->description)+3);
|
|
||||||
sprintf(end, "%s\r\n", new_descr->description); /* snprintf ok : size checked above*/
|
|
||||||
free(new_descr->description);
|
|
||||||
new_descr->description = end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
new_descr->next = world[room_nr].ex_description;
|
new_descr->next = world[room_nr].ex_description;
|
||||||
world[room_nr].ex_description = new_descr;
|
world[room_nr].ex_description = new_descr;
|
||||||
break;
|
break;
|
||||||
@@ -2857,12 +2873,16 @@ char *fread_string(FILE *fl, const char *error)
|
|||||||
/* If there is a '~', end the string; else put an "\r\n" over the '\n'. */
|
/* If there is a '~', end the string; else put an "\r\n" over the '\n'. */
|
||||||
/* now only removes trailing ~'s -- Welcor */
|
/* now only removes trailing ~'s -- Welcor */
|
||||||
point = strchr(tmp, '\0');
|
point = strchr(tmp, '\0');
|
||||||
for (point-- ; (*point=='\r' || *point=='\n'); point--);
|
for (point-- ; (*point=='\r' || *point=='\n') && point > tmp; point--);
|
||||||
if (*point=='~') {
|
if (*point=='~') {
|
||||||
*point='\0';
|
*point='\0';
|
||||||
done = 1;
|
done = 1;
|
||||||
} else {
|
} else {
|
||||||
*(++point) = '\r';
|
if (*point == '\n' || *point == '\r')
|
||||||
|
*point = '\r';
|
||||||
|
else
|
||||||
|
*(++point) = '\r';
|
||||||
|
|
||||||
*(++point) = '\n';
|
*(++point) = '\n';
|
||||||
*(++point) = '\0';
|
*(++point) = '\0';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -151,7 +151,8 @@ long event_time(struct event *event)
|
|||||||
/** Frees all events from event_q. */
|
/** Frees all events from event_q. */
|
||||||
void event_free_all(void)
|
void event_free_all(void)
|
||||||
{
|
{
|
||||||
queue_free(event_q);
|
if (event_q != NULL)
|
||||||
|
queue_free(event_q);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Boolean function to tell whether an event is queued or not. Does this by
|
/** Boolean function to tell whether an event is queued or not. Does this by
|
||||||
|
|||||||
79
src/dg_olc.c
79
src/dg_olc.c
@@ -1091,70 +1091,85 @@ int format_script(struct descriptor_data *d)
|
|||||||
char nsc[MAX_CMD_LENGTH], *t, line[READ_SIZE];
|
char nsc[MAX_CMD_LENGTH], *t, line[READ_SIZE];
|
||||||
char *sc;
|
char *sc;
|
||||||
size_t len = 0, nlen = 0, llen = 0;
|
size_t len = 0, nlen = 0, llen = 0;
|
||||||
int indent = 0, indent_next = FALSE, found_case = FALSE, i, line_num = 0, ret;
|
int indent = 0, indent_next = FALSE, line_num = 0, ret, i; // Declare i here
|
||||||
|
int block_stack[READ_SIZE]; // Stack to track block types
|
||||||
|
int stack_top = -1; // Initialize stack as empty
|
||||||
|
int switch_indent[READ_SIZE]; // Array to track switch indent levels
|
||||||
|
int switch_top = -1; // Index for switch_indent array
|
||||||
|
int case_indent = 0; // Track indent for case blocks
|
||||||
|
int in_switch = 0; // Flag to indicate if we're inside a switch block
|
||||||
|
|
||||||
if (!d->str || !*d->str)
|
if (!d->str || !*d->str)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
sc = strdup(*d->str); /* we work on a copy, because of strtok() */
|
sc = strdup(*d->str); // Work on a copy
|
||||||
t = strtok(sc, "\n\r");
|
t = strtok(sc, "\n\r");
|
||||||
*nsc = '\0';
|
*nsc = '\0';
|
||||||
|
|
||||||
while (t) {
|
while (t) {
|
||||||
line_num++;
|
line_num++;
|
||||||
skip_spaces(&t);
|
skip_spaces(&t);
|
||||||
if (!strn_cmp(t, "if ", 3) ||
|
|
||||||
!strn_cmp(t, "switch ", 7)) {
|
if (!strn_cmp(t, "switch ", 7)) {
|
||||||
indent_next = TRUE;
|
indent_next = TRUE;
|
||||||
} else if (!strn_cmp(t, "while ", 6)) {
|
stack_top++;
|
||||||
found_case = TRUE; /* so you can 'break' a loop without complains */
|
block_stack[stack_top] = 's'; // 's' for switch
|
||||||
|
switch_top++;
|
||||||
|
switch_indent[switch_top] = indent; // Save current indent level for switch
|
||||||
|
in_switch++; // We're entering a switch block
|
||||||
|
} else if (!strn_cmp(t, "case", 4) || !strn_cmp(t, "default", 7)) {
|
||||||
|
if (in_switch > 0) { // If we're inside a switch
|
||||||
|
indent = switch_indent[switch_top] + 1; // Indent cases one level under switch
|
||||||
|
indent_next = TRUE; // Indent the next line after case
|
||||||
|
case_indent = indent; // Save indent for case block
|
||||||
|
}
|
||||||
|
} else if (!strn_cmp(t, "if ", 3) || !strn_cmp(t, "while ", 6)) {
|
||||||
indent_next = TRUE;
|
indent_next = TRUE;
|
||||||
} else if (!strn_cmp(t, "end", 3) ||
|
stack_top++;
|
||||||
!strn_cmp(t, "done", 4)) {
|
block_stack[stack_top] = 'l'; // 'l' for loop or conditional
|
||||||
if (!indent) {
|
} else if (!strn_cmp(t, "end", 3) || !strn_cmp(t, "done", 4)) {
|
||||||
|
if (stack_top < 0) {
|
||||||
write_to_output(d, "Unmatched 'end' or 'done' (line %d)!\r\n", line_num);
|
write_to_output(d, "Unmatched 'end' or 'done' (line %d)!\r\n", line_num);
|
||||||
free(sc);
|
free(sc);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
indent--;
|
if (block_stack[stack_top] == 's') {
|
||||||
indent_next = FALSE;
|
indent = switch_indent[switch_top]; // Reset to the exact indent level where switch was declared
|
||||||
|
switch_top--; // Decrease switch stack if ending a switch
|
||||||
|
case_indent = 0; // Reset case indent since we're leaving the switch
|
||||||
|
in_switch--; // We're leaving a switch block
|
||||||
|
} else {
|
||||||
|
indent--; // For other blocks like while
|
||||||
|
}
|
||||||
|
stack_top--;
|
||||||
|
indent_next = FALSE; // Reset for next line
|
||||||
} else if (!strn_cmp(t, "else", 4)) {
|
} else if (!strn_cmp(t, "else", 4)) {
|
||||||
if (!indent) {
|
if (stack_top < 0 || block_stack[stack_top] != 'l') {
|
||||||
write_to_output(d, "Unmatched 'else' (line %d)!\r\n", line_num);
|
write_to_output(d, "Unmatched 'else' (line %d)!\r\n", line_num);
|
||||||
free(sc);
|
free(sc);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
indent--;
|
indent--; // Reduce indent for else, then increment for next statement
|
||||||
indent_next = TRUE;
|
indent_next = TRUE;
|
||||||
} else if (!strn_cmp(t, "case", 4) ||
|
|
||||||
!strn_cmp(t, "default", 7)) {
|
|
||||||
if (!indent) {
|
|
||||||
write_to_output(d, "Case/default outside switch (line %d)!\r\n", line_num);
|
|
||||||
free(sc);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
if (!found_case) /* so we don't indent multiple case statements without a break */
|
|
||||||
indent_next = TRUE;
|
|
||||||
found_case = TRUE;
|
|
||||||
} else if (!strn_cmp(t, "break", 5)) {
|
} else if (!strn_cmp(t, "break", 5)) {
|
||||||
if (!found_case || !indent ) {
|
if (stack_top < 0 || (block_stack[stack_top] != 's' && block_stack[stack_top] != 'l')) {
|
||||||
write_to_output(d, "Break not in case (line %d)!\r\n", line_num);
|
write_to_output(d, "Break not in case or loop (line %d)!\r\n", line_num);
|
||||||
free(sc);
|
free(sc);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
found_case = FALSE;
|
indent = case_indent + 1; // Indent break one level deeper than case
|
||||||
indent--;
|
indent_next = FALSE; // Ensure no automatic increase for next line after break
|
||||||
}
|
}
|
||||||
|
|
||||||
*line = '\0';
|
*line = '\0';
|
||||||
for (nlen = 0, i = 0;i<indent;i++) {
|
for (nlen = 0, i = 0; i < indent; i++) {
|
||||||
strncat(line, " ", sizeof(line)-1);
|
strncat(line, " ", sizeof(line) - strlen(line) - 1);
|
||||||
nlen += 2;
|
nlen += 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = snprintf(line + nlen, sizeof(line) - nlen, "%s\r\n", t);
|
ret = snprintf(line + nlen, sizeof(line) - nlen, "%s\r\n", t);
|
||||||
llen = (size_t)ret;
|
llen = (size_t)ret;
|
||||||
if (ret < 0 || llen + nlen + len > d->max_str - 1 ) {
|
if (ret < 0 || llen + nlen + len > d->max_str - 1) {
|
||||||
write_to_output(d, "String too long, formatting aborted\r\n");
|
write_to_output(d, "String too long, formatting aborted\r\n");
|
||||||
free(sc);
|
free(sc);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -1169,8 +1184,8 @@ int format_script(struct descriptor_data *d)
|
|||||||
t = strtok(NULL, "\n\r");
|
t = strtok(NULL, "\n\r");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (indent)
|
if (stack_top >= 0)
|
||||||
write_to_output(d, "Unmatched if, while or switch ignored.\r\n");
|
write_to_output(d, "Unmatched block statements ignored.\r\n");
|
||||||
|
|
||||||
free(*d->str);
|
free(*d->str);
|
||||||
*d->str = strdup(nsc);
|
*d->str = strdup(nsc);
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
#include "dg_scripts.h"
|
#include "dg_scripts.h"
|
||||||
|
|
||||||
#define NUM_TRIG_TYPE_FLAGS 20
|
#define NUM_TRIG_TYPE_FLAGS 21
|
||||||
|
|
||||||
/* Submodes of TRIGEDIT connectedness. */
|
/* Submodes of TRIGEDIT connectedness. */
|
||||||
#define TRIGEDIT_MAIN_MENU 0
|
#define TRIGEDIT_MAIN_MENU 0
|
||||||
|
|||||||
@@ -2486,7 +2486,6 @@ int script_driver(void *go_adress, trig_data *trig, int type, int mode)
|
|||||||
char cmd[MAX_INPUT_LENGTH], *p;
|
char cmd[MAX_INPUT_LENGTH], *p;
|
||||||
struct script_data *sc = 0;
|
struct script_data *sc = 0;
|
||||||
struct cmdlist_element *temp;
|
struct cmdlist_element *temp;
|
||||||
unsigned long loops = 0;
|
|
||||||
void *go = NULL;
|
void *go = NULL;
|
||||||
|
|
||||||
void obj_command_interpreter(obj_data *obj, char *argument);
|
void obj_command_interpreter(obj_data *obj, char *argument);
|
||||||
@@ -2578,8 +2577,8 @@ int script_driver(void *go_adress, trig_data *trig, int type, int mode)
|
|||||||
if (process_if(p + 6, go, sc, trig, type)) {
|
if (process_if(p + 6, go, sc, trig, type)) {
|
||||||
temp->original = cl;
|
temp->original = cl;
|
||||||
} else {
|
} else {
|
||||||
|
cl->loops = 0;
|
||||||
cl = temp;
|
cl = temp;
|
||||||
loops = 0;
|
|
||||||
}
|
}
|
||||||
} else if (!strn_cmp("switch ", p, 7)) {
|
} else if (!strn_cmp("switch ", p, 7)) {
|
||||||
cl = find_case(trig, cl, go, sc, type, p + 7);
|
cl = find_case(trig, cl, go, sc, type, p + 7);
|
||||||
@@ -2599,9 +2598,10 @@ int script_driver(void *go_adress, trig_data *trig, int type, int mode)
|
|||||||
if (cl->original && process_if(orig_cmd + 6, go, sc, trig,
|
if (cl->original && process_if(orig_cmd + 6, go, sc, trig,
|
||||||
type)) {
|
type)) {
|
||||||
cl = cl->original;
|
cl = cl->original;
|
||||||
loops++;
|
cl->loops++;
|
||||||
GET_TRIG_LOOPS(trig)++;
|
GET_TRIG_LOOPS(trig)++;
|
||||||
if (loops == 30) {
|
if (cl->loops == 30) {
|
||||||
|
cl->loops = 0;
|
||||||
process_wait(go, trig, type, "wait 1", cl);
|
process_wait(go, trig, type, "wait 1", cl);
|
||||||
depth--;
|
depth--;
|
||||||
return ret_val;
|
return ret_val;
|
||||||
@@ -2994,12 +2994,23 @@ void init_lookup_table(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct char_data *find_char_by_uid_in_lookup_table(long uid)
|
static inline struct lookup_table_t *get_bucket_head(long uid)
|
||||||
{
|
{
|
||||||
int bucket = (int) (uid & (BUCKET_COUNT - 1));
|
int bucket = (int) (uid & (BUCKET_COUNT - 1));
|
||||||
struct lookup_table_t *lt = &lookup_table[bucket];
|
return &lookup_table[bucket];
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline struct lookup_table_t *find_element_by_uid_in_lookup_table(long uid)
|
||||||
|
{
|
||||||
|
struct lookup_table_t *lt = get_bucket_head(uid);
|
||||||
|
|
||||||
for (;lt && lt->uid != uid ; lt = lt->next) ;
|
for (;lt && lt->uid != uid ; lt = lt->next) ;
|
||||||
|
return lt;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct char_data *find_char_by_uid_in_lookup_table(long uid)
|
||||||
|
{
|
||||||
|
struct lookup_table_t *lt = find_element_by_uid_in_lookup_table(uid);
|
||||||
|
|
||||||
if (lt)
|
if (lt)
|
||||||
return (struct char_data *)(lt->c);
|
return (struct char_data *)(lt->c);
|
||||||
@@ -3010,10 +3021,7 @@ static struct char_data *find_char_by_uid_in_lookup_table(long uid)
|
|||||||
|
|
||||||
static struct obj_data *find_obj_by_uid_in_lookup_table(long uid)
|
static struct obj_data *find_obj_by_uid_in_lookup_table(long uid)
|
||||||
{
|
{
|
||||||
int bucket = (int) (uid & (BUCKET_COUNT - 1));
|
struct lookup_table_t *lt = find_element_by_uid_in_lookup_table(uid);
|
||||||
struct lookup_table_t *lt = &lookup_table[bucket];
|
|
||||||
|
|
||||||
for (;lt && lt->uid != uid ; lt = lt->next) ;
|
|
||||||
|
|
||||||
if (lt)
|
if (lt)
|
||||||
return (struct obj_data *)(lt->c);
|
return (struct obj_data *)(lt->c);
|
||||||
@@ -3022,10 +3030,16 @@ static struct obj_data *find_obj_by_uid_in_lookup_table(long uid)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int has_obj_by_uid_in_lookup_table(long uid)
|
||||||
|
{
|
||||||
|
struct lookup_table_t *lt = find_element_by_uid_in_lookup_table(uid);
|
||||||
|
|
||||||
|
return lt != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void add_to_lookup_table(long uid, void *c)
|
void add_to_lookup_table(long uid, void *c)
|
||||||
{
|
{
|
||||||
int bucket = (int) (uid & (BUCKET_COUNT - 1));
|
struct lookup_table_t *lt = get_bucket_head(uid);
|
||||||
struct lookup_table_t *lt = &lookup_table[bucket];
|
|
||||||
|
|
||||||
if (lt && lt->uid == uid) {
|
if (lt && lt->uid == uid) {
|
||||||
log("add_to_lookup updating existing value for uid=%ld (%p -> %p)", uid, lt->c, c);
|
log("add_to_lookup updating existing value for uid=%ld (%p -> %p)", uid, lt->c, c);
|
||||||
@@ -3036,6 +3050,7 @@ void add_to_lookup_table(long uid, void *c)
|
|||||||
for (;lt && lt->next; lt = lt->next)
|
for (;lt && lt->next; lt = lt->next)
|
||||||
if (lt->next->uid == uid) {
|
if (lt->next->uid == uid) {
|
||||||
log("add_to_lookup updating existing value for uid=%ld (%p -> %p)", uid, lt->next->c, c);
|
log("add_to_lookup updating existing value for uid=%ld (%p -> %p)", uid, lt->next->c, c);
|
||||||
|
lt->next->c = c;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3054,9 +3069,7 @@ void remove_from_lookup_table(long uid)
|
|||||||
if (uid == 0)
|
if (uid == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (;lt;lt = lt->next)
|
flt = find_element_by_uid_in_lookup_table(uid);
|
||||||
if (lt->uid == uid)
|
|
||||||
flt = lt;
|
|
||||||
|
|
||||||
if (flt) {
|
if (flt) {
|
||||||
for (lt = &lookup_table[bucket];lt->next != flt;lt = lt->next)
|
for (lt = &lookup_table[bucket];lt->next != flt;lt = lt->next)
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user