Compare commits
37 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 |
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
|
||||||
83
.gitignore
vendored
83
.gitignore
vendored
@@ -10,3 +10,86 @@ src/util/Makefile
|
|||||||
src/.accepted
|
src/.accepted
|
||||||
src/depend
|
src/depend
|
||||||
src/util/depend
|
src/util/depend
|
||||||
|
build/*
|
||||||
|
!build/create_solution.bat
|
||||||
|
!build/README.md
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# also not autogenerated config file
|
||||||
|
/lib/etc/config
|
||||||
|
# or the list of last logins
|
||||||
|
/lib/etc/last
|
||||||
|
# or mail
|
||||||
|
lib/etc/plrmail
|
||||||
|
|
||||||
|
# test object files, etc
|
||||||
|
src/test/depend
|
||||||
|
src/test/*.o
|
||||||
|
src/test/testfile
|
||||||
|
|
||||||
|
|
||||||
|
# ide etc.
|
||||||
|
.vscode
|
||||||
|
.project
|
||||||
|
.settings
|
||||||
|
|
||||||
|
.cproject
|
||||||
|
|
||||||
|
# macOS generated files
|
||||||
|
.DS_Store
|
||||||
|
.DS_Store?
|
||||||
|
._*
|
||||||
|
.Spotlight-V100
|
||||||
|
.Trashes
|
||||||
|
ehthumbs.db
|
||||||
|
Thumbs.db
|
||||||
|
|||||||
15
build/README.md
Normal file
15
build/README.md
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
### Overview
|
||||||
|
This guide describes how to build TbaMUD in the Visual Studio through the new experimental CMake environment.
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
* [Visual Studio 2022+](https://visualstudio.microsoft.com/ru/vs/)
|
||||||
|
* [CMake 3.27+](https://cmake.org/)
|
||||||
|
|
||||||
|
### Build Steps
|
||||||
|
1. Goto the folder `src` and copy `conf.h.win` to `conf.h`.
|
||||||
|
|
||||||
|
2. Goto the folder `build` and execute `create_solution.bat`.
|
||||||
|
|
||||||
|
3. Open `build/circle.sln` in Visual Studio.
|
||||||
|
|
||||||
|
4. Compile and run.
|
||||||
1
build/create_solution.bat
Normal file
1
build/create_solution.bat
Normal file
@@ -0,0 +1 @@
|
|||||||
|
cmake -B . -S ..\src -G "Visual Studio 17 2022"
|
||||||
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:
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ 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 2021 release: March, 2021
|
||||||
Version 2020 release: January, 2020
|
Version 2020 release: January, 2020
|
||||||
Version 2019 release: January, 2019
|
Version 2019 release: January, 2019
|
||||||
|
|||||||
@@ -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,5 +1,5 @@
|
|||||||
T B A M U D
|
T B A M U D
|
||||||
2 0 2 1
|
2 0 2 5
|
||||||
|
|
||||||
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
|
||||||
|
|||||||
@@ -3312,7 +3312,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 +3350,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:
|
||||||
|
|
||||||
@@ -9879,6 +9879,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
|
||||||
|
|||||||
@@ -128,6 +128,18 @@ Samuel himself is here, pouring the drinks and getting rich.
|
|||||||
300 90000
|
300 90000
|
||||||
8 8 1
|
8 8 1
|
||||||
E
|
E
|
||||||
|
#31510
|
||||||
|
postal worker postmasters~
|
||||||
|
the postal worker~
|
||||||
|
A postal worker is here, ready to send or get your mail.
|
||||||
|
~
|
||||||
|
Be careful. No sudden moves. You know how these guys get....
|
||||||
|
~
|
||||||
|
10 0 0 0 0 0 0 0 0 E
|
||||||
|
30 10 -8 6d6+300 5d5+5
|
||||||
|
300 90000
|
||||||
|
8 8 1
|
||||||
|
E
|
||||||
#31511
|
#31511
|
||||||
Juan pusher potion~
|
Juan pusher potion~
|
||||||
Juan the potion pusher~
|
Juan the potion pusher~
|
||||||
|
|||||||
@@ -222,8 +222,16 @@ An awl pike is here, taking up much space.~
|
|||||||
5 0 0 0 0 an 0 0 0 0 0 0 0
|
5 0 0 0 0 an 0 0 0 0 0 0 0
|
||||||
4 3 5 3
|
4 3 5 3
|
||||||
15 750 75 0 0
|
15 750 75 0 0
|
||||||
|
#3927
|
||||||
|
jeweled dagger~
|
||||||
|
a jeweled dagger~
|
||||||
|
A dagger is lying here, its jewels sparkling merrily.~
|
||||||
|
~
|
||||||
|
5 0 0 0 0 an 0 0 0 0 0 0 0
|
||||||
|
5 2 3 14
|
||||||
|
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.~
|
||||||
~
|
~
|
||||||
|
|||||||
@@ -1929,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
|
||||||
|
|||||||
@@ -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~
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
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
|
||||||
@@ -51,7 +51,7 @@ 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 void print_object_location(int num, struct obj_data *obj, struct char_data *ch, 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;
|
||||||
}
|
}
|
||||||
@@ -1593,7 +1604,7 @@ 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 void print_object_location(int num, struct obj_data *obj, struct char_data *ch,
|
||||||
int recur)
|
int recur)
|
||||||
{
|
{
|
||||||
if (num > 0)
|
if (num > 0)
|
||||||
send_to_char(ch, "O%3d. %-25s%s - ", num, obj->short_description, QNRM);
|
send_to_char(ch, "O%3d. %-25s%s - ", num, obj->short_description, QNRM);
|
||||||
@@ -1658,7 +1669,7 @@ static void perform_immort_where(struct char_data *ch, char *arg)
|
|||||||
else
|
else
|
||||||
send_to_char(ch, "[TRIGS] ");
|
send_to_char(ch, "[TRIGS] ");
|
||||||
}
|
}
|
||||||
send_to_char(ch, "%s\r\n", QNRM);
|
send_to_char(ch, "%s\r\n", QNRM);
|
||||||
}
|
}
|
||||||
for (num = 0, k = object_list; k; k = k->next)
|
for (num = 0, k = object_list; k; k = k->next)
|
||||||
if (CAN_SEE_OBJ(ch, k) && isname(arg, k->name)) {
|
if (CAN_SEE_OBJ(ch, k) && isname(arg, k->name)) {
|
||||||
@@ -1727,7 +1738,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 +1762,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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1941,14 +1952,14 @@ ACMD(do_toggle)
|
|||||||
else
|
else
|
||||||
sprintf(buf2, "%-3.3d", GET_WIMP_LEV(ch)); /* sprintf: OK */
|
sprintf(buf2, "%-3.3d", GET_WIMP_LEV(ch)); /* sprintf: OK */
|
||||||
|
|
||||||
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) {
|
||||||
@@ -2112,7 +2123,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 +2376,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)
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -1596,7 +1596,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);
|
||||||
|
|||||||
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 2021";
|
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) */
|
||||||
|
|||||||
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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -135,6 +135,7 @@ struct cmdlist_element {
|
|||||||
char *cmd; /* one line of a trigger */
|
char *cmd; /* one line of a trigger */
|
||||||
struct cmdlist_element *original;
|
struct cmdlist_element *original;
|
||||||
struct cmdlist_element *next;
|
struct cmdlist_element *next;
|
||||||
|
int loops; /* for counting number of runs in a while loop */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct trig_var_data {
|
struct trig_var_data {
|
||||||
|
|||||||
@@ -268,7 +268,7 @@ void create_world_index(int znum, const char *type)
|
|||||||
while (get_line(oldfile, buf)) {
|
while (get_line(oldfile, buf)) {
|
||||||
if (*buf == '$') {
|
if (*buf == '$') {
|
||||||
/* The following used to add a blank line, thanks to Brian Taylor for the fix. */
|
/* The following used to add a blank line, thanks to Brian Taylor for the fix. */
|
||||||
fprintf(newfile, "%s", (!found ? strncat(buf1, "\n$\n", sizeof(buf1)-1) : "$\n"));
|
fprintf(newfile, "%s", (!found ? strncat(buf1, "\n$\n", sizeof(buf1) - strlen(buf1) - 1) : "$\n"));
|
||||||
break;
|
break;
|
||||||
} else if (!found) {
|
} else if (!found) {
|
||||||
sscanf(buf, "%d", &num);
|
sscanf(buf, "%d", &num);
|
||||||
|
|||||||
@@ -671,12 +671,20 @@ struct char_data *get_char_num(mob_rnum nr)
|
|||||||
/* put an object in a room */
|
/* put an object in a room */
|
||||||
void obj_to_room(struct obj_data *object, room_rnum room)
|
void obj_to_room(struct obj_data *object, room_rnum room)
|
||||||
{
|
{
|
||||||
if (!object || room == NOWHERE || room > top_of_world)
|
if (!object || room == NOWHERE || room > top_of_world){
|
||||||
log("SYSERR: Illegal value(s) passed to obj_to_room. (Room #%d/%d, obj %p)",
|
log("SYSERR: Illegal value(s) passed to obj_to_room. (Room #%d/%d, obj %p)",
|
||||||
room, top_of_world, (void *)object);
|
room, top_of_world, (void *)object);
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
object->next_content = world[room].contents;
|
if (world[room].contents == NULL){ // if list is empty
|
||||||
world[room].contents = object;
|
world[room].contents = object; // add object to list
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
struct obj_data *i = world[room].contents; // define a temporary pointer
|
||||||
|
while (i->next_content != NULL) i = i->next_content; // find the first without a next_content
|
||||||
|
i->next_content = object; // add object at the end
|
||||||
|
}
|
||||||
|
object->next_content = NULL; // mostly for sanity. should do nothing.
|
||||||
IN_ROOM(object) = room;
|
IN_ROOM(object) = room;
|
||||||
object->carried_by = NULL;
|
object->carried_by = NULL;
|
||||||
if (ROOM_FLAGGED(room, ROOM_HOUSE))
|
if (ROOM_FLAGGED(room, ROOM_HOUSE))
|
||||||
|
|||||||
@@ -177,6 +177,13 @@ static IBT_DATA *read_ibt( char *filename, FILE *fp )
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'F':
|
||||||
|
if (!str_cmp(word, "Flags")) {
|
||||||
|
fMatch = TRUE;
|
||||||
|
fread_flags(fp, ibtData->flags, 4);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case 'I':
|
case 'I':
|
||||||
TXT_KEY("IdNum", id_num, fread_line(fp));
|
TXT_KEY("IdNum", id_num, fread_line(fp));
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -13,6 +13,11 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include "protocol.h"
|
#include "protocol.h"
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#include "telnet.h"
|
||||||
|
#define alloca _alloca
|
||||||
|
#endif
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
The following section is for Diku/Merc derivatives. Replace as needed.
|
The following section is for Diku/Merc derivatives. Replace as needed.
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|||||||
@@ -1276,7 +1276,7 @@ struct happyhour {
|
|||||||
struct recent_player
|
struct recent_player
|
||||||
{
|
{
|
||||||
int vnum; /* The ID number for this instance */
|
int vnum; /* The ID number for this instance */
|
||||||
char name[MAX_NAME_LENGTH]; /* The char name of the player */
|
char name[MAX_NAME_LENGTH+1];/* The char name of the player */
|
||||||
bool new_player; /* Is this a new player? */
|
bool new_player; /* Is this a new player? */
|
||||||
bool copyover_player; /* Is this a player that was on during the last copyover? */
|
bool copyover_player; /* Is this a player that was on during the last copyover? */
|
||||||
time_t time; /* login time */
|
time_t time; /* login time */
|
||||||
|
|||||||
29
src/sysdep.h
29
src/sysdep.h
@@ -63,6 +63,24 @@
|
|||||||
|
|
||||||
/* Do not change anything below this line. */
|
/* Do not change anything below this line. */
|
||||||
|
|
||||||
|
#if defined(__APPLE__) && defined(__MACH__)
|
||||||
|
/* 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 (Lobo) - September 25, 2017 (Latest: 10.13.6)
|
||||||
|
* - macOS 10.14: Mojave (Liberty) - September 24, 2018 (Latest: 10.14.6)
|
||||||
|
* - macOS 10.15: Catalina (Jazz) - October 7, 2019 (Latest: 10.15.7)
|
||||||
|
* - macOS 11: Big Sur (GoldenGate) - November 12, 2020 (Latest: 11.7.10)
|
||||||
|
* - macOS 12: Monterey (Star) - October 25, 2021 (Latest: 12.7)
|
||||||
|
* - macOS 13: Ventura (Rome) - November 7, 2022 (Latest: 13.7)
|
||||||
|
* - macOS 14: Sonoma (Sunburst) - November 7, 2023 (Latest: 14.3)
|
||||||
|
*
|
||||||
|
* This file works on Apple Silicon Chips (M1, M2, M3) without futher configurations.
|
||||||
|
*/
|
||||||
|
#define CIRCLE_MAC_OS 1
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Set up various machine-specific things based on the values determined from
|
/* Set up various machine-specific things based on the values determined from
|
||||||
* configure and conf.h. */
|
* configure and conf.h. */
|
||||||
|
|
||||||
@@ -78,7 +96,7 @@
|
|||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (defined (STDC_HEADERS) || defined (__GNU_LIBRARY__))
|
#if (defined (STDC_HEADERS) || defined (__GNU_LIBRARY__) || defined(CIRCLE_MAC_OS))
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#else /* No standard headers. */
|
#else /* No standard headers. */
|
||||||
@@ -88,9 +106,8 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern char *malloc(), *calloc(), *realloc();
|
extern char *malloc(), *calloc(), *realloc();
|
||||||
extern void free ();
|
extern void free();
|
||||||
|
extern void abort(), exit();
|
||||||
extern void abort (), exit ();
|
|
||||||
|
|
||||||
#endif /* Standard headers. */
|
#endif /* Standard headers. */
|
||||||
|
|
||||||
@@ -150,9 +167,11 @@ extern void abort (), exit ();
|
|||||||
#include <sys/errno.h>
|
#include <sys/errno.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef CIRCLE_MAC_OS
|
||||||
#ifdef HAVE_CRYPT_H
|
#ifdef HAVE_CRYPT_H
|
||||||
#include <crypt.h>
|
#include <crypt.h>
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef TIME_WITH_SYS_TIME
|
#ifdef TIME_WITH_SYS_TIME
|
||||||
# include <sys/time.h>
|
# include <sys/time.h>
|
||||||
@@ -434,9 +453,11 @@ struct in_addr {
|
|||||||
char *strerror(int errnum);
|
char *strerror(int errnum);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef CIRCLE_MAC_OS
|
||||||
#ifdef NEED_STRLCPY_PROTO
|
#ifdef NEED_STRLCPY_PROTO
|
||||||
size_t strlcpy(char *dest, const char *src, size_t copylen);
|
size_t strlcpy(char *dest, const char *src, size_t copylen);
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef NEED_SYSTEM_PROTO
|
#ifdef NEED_SYSTEM_PROTO
|
||||||
int system(const char *string);
|
int system(const char *string);
|
||||||
|
|||||||
@@ -12,7 +12,6 @@
|
|||||||
#include "conf.h"
|
#include "conf.h"
|
||||||
#include "sysdep.h"
|
#include "sysdep.h"
|
||||||
|
|
||||||
|
|
||||||
#define NOWHERE -1 /* nil reference for room-database */
|
#define NOWHERE -1 /* nil reference for room-database */
|
||||||
|
|
||||||
/* The cardinal directions: used as index to room_data.dir_option[] */
|
/* The cardinal directions: used as index to room_data.dir_option[] */
|
||||||
@@ -22,14 +21,17 @@
|
|||||||
#define WEST 3
|
#define WEST 3
|
||||||
#define UP 4
|
#define UP 4
|
||||||
#define DOWN 5
|
#define DOWN 5
|
||||||
|
#define NORTHWEST 6
|
||||||
|
#define NORTHEAST 7
|
||||||
|
#define SOUTHEAST 8
|
||||||
|
#define SOUTHWEST 9
|
||||||
|
|
||||||
#define NUM_OF_DIRS 6
|
#define NUM_OF_DIRS 10
|
||||||
|
|
||||||
#define CREATE(result, type, number) do {\
|
#define CREATE(result, type, number) do {\
|
||||||
if (!((result) = (type *) calloc ((number), sizeof(type))))\
|
if (!((result) = (type *) calloc ((number), sizeof(type))))\
|
||||||
{ perror("malloc failure"); abort(); } } while(0)
|
{ perror("malloc failure"); abort(); } } while(0)
|
||||||
|
|
||||||
|
|
||||||
/* Exit info: used in room_data.dir_option.exit_info */
|
/* Exit info: used in room_data.dir_option.exit_info */
|
||||||
#define EX_ISDOOR (1 << 0) /* Exit is a door */
|
#define EX_ISDOOR (1 << 0) /* Exit is a door */
|
||||||
#define EX_CLOSED (1 << 1) /* The door is closed */
|
#define EX_CLOSED (1 << 1) /* The door is closed */
|
||||||
@@ -45,7 +47,7 @@ typedef unsigned short int ush_int;
|
|||||||
typedef char bool;
|
typedef char bool;
|
||||||
typedef char byte;
|
typedef char byte;
|
||||||
|
|
||||||
typedef sh_int room_num;
|
typedef int room_num;
|
||||||
typedef sh_int obj_num;
|
typedef sh_int obj_num;
|
||||||
|
|
||||||
|
|
||||||
@@ -133,13 +135,14 @@ struct room_data {
|
|||||||
|
|
||||||
struct room_data *world = NULL; /* array of rooms */
|
struct room_data *world = NULL; /* array of rooms */
|
||||||
int top_of_world = 0; /* ref to top element of world */
|
int top_of_world = 0; /* ref to top element of world */
|
||||||
|
int rec_count = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* local functions */
|
/* local functions */
|
||||||
char *fread_string(FILE * fl, char *error);
|
char *fread_string(FILE * fl, char *error);
|
||||||
void setup_dir(FILE * fl, int room, int dir);
|
void setup_dir(FILE * fl, int room, int dir);
|
||||||
void index_boot(char *name);
|
void index_boot(int cnt, char **name);
|
||||||
void discrete_load(FILE * fl);
|
void discrete_load(FILE * fl);
|
||||||
void parse_room(FILE * fl, int virtual_nr);
|
void parse_room(FILE * fl, int virtual_nr);
|
||||||
void parse_mobile(FILE * mob_f, int nr);
|
void parse_mobile(FILE * mob_f, int nr);
|
||||||
@@ -150,7 +153,7 @@ void write_output(void);
|
|||||||
|
|
||||||
|
|
||||||
char *dir_names[] =
|
char *dir_names[] =
|
||||||
{"North", "East", "South", "West", "Up", "Down"};
|
{"North", "East", "South", "West", "Up", "Down","North West","North East","South East","South West"};
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
@@ -160,14 +163,12 @@ char *dir_names[] =
|
|||||||
/* body of the booting system */
|
/* body of the booting system */
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
if (argc != 2) {
|
if (argc < 2) {
|
||||||
fprintf(stderr, "Usage: %s <world-file-name>\n", argv[0]);
|
fprintf(stderr, "Usage: %s <world-file-name(s)>\n", argv[0]);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
index_boot(argv[1]);
|
|
||||||
|
|
||||||
log("Renumbering rooms.");
|
index_boot(argc,argv);
|
||||||
renum_world();
|
|
||||||
|
|
||||||
log("Writing output.");
|
log("Writing output.");
|
||||||
write_output();
|
write_output();
|
||||||
@@ -176,6 +177,21 @@ int main(int argc, char **argv)
|
|||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Since the world is loaded into memory by index
|
||||||
|
* and not room number, we need to search through
|
||||||
|
* all rooms and return the correct one. This is
|
||||||
|
* used to generate door information (ie: the name)
|
||||||
|
*/
|
||||||
|
struct room_data* findRoom(int nr)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i=0;i<rec_count;i++)
|
||||||
|
if (world[i].number==nr)
|
||||||
|
return &world[i];
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void write_output(void)
|
void write_output(void)
|
||||||
{
|
{
|
||||||
@@ -184,11 +200,22 @@ void write_output(void)
|
|||||||
char buf[128];
|
char buf[128];
|
||||||
register int door, found;
|
register int door, found;
|
||||||
|
|
||||||
for (i = 0; i <= top_of_world; i++) {
|
for (i=0;i<rec_count;i++) {
|
||||||
|
//print the record number, but no linefeed.
|
||||||
|
fprintf(stderr, "Record: %d ",i);
|
||||||
|
if (world[i].name == NULL) {
|
||||||
|
//linefeed the prior record since we're skipping this one.
|
||||||
|
log("");
|
||||||
|
//the name is blank, which means, most likely, the record is bad as well.
|
||||||
|
continue;
|
||||||
|
}
|
||||||
sprintf(buf, "Writing %d.html", world[i].number);
|
sprintf(buf, "Writing %d.html", world[i].number);
|
||||||
log(buf);
|
log(buf);
|
||||||
sprintf(buf, "%d.html", world[i].number);
|
//for some reason, if you use %d with sprintf it rolls over like its 16bit,
|
||||||
|
//but only if you use the buffer with fopen.
|
||||||
|
//using %ld and casting to long solves this in case someone really wants
|
||||||
|
//to use negative room numbers.
|
||||||
|
sprintf(buf, "%ld.html",(long)world[i].number);
|
||||||
if (!(fl = fopen(buf, "w"))) {
|
if (!(fl = fopen(buf, "w"))) {
|
||||||
perror("opening output file");
|
perror("opening output file");
|
||||||
exit(1);
|
exit(1);
|
||||||
@@ -203,18 +230,22 @@ void write_output(void)
|
|||||||
found = 0;
|
found = 0;
|
||||||
for (door = 0; door < NUM_OF_DIRS; door++)
|
for (door = 0; door < NUM_OF_DIRS; door++)
|
||||||
if (world[i].dir_option[door] &&
|
if (world[i].dir_option[door] &&
|
||||||
world[i].dir_option[door]->to_room != NOWHERE) {
|
world[i].dir_option[door]->to_room != NOWHERE) {
|
||||||
found = 1;
|
found = 1;
|
||||||
fprintf(fl, "<a href = \"%d.html\"> %s to %s</a> <p>\n",
|
//this call gets a pointer to the room referenced by the to_room for the door.
|
||||||
world[world[i].dir_option[door]->to_room].number,
|
//This fixes a lot of issues introduced with the whole 'renumbering rooms' call
|
||||||
dir_names[door],
|
//and the binary search that didn't work well.
|
||||||
world[world[i].dir_option[door]->to_room].name);
|
struct room_data* to_room = findRoom(world[i].dir_option[door]->to_room);
|
||||||
|
fprintf(fl, "<a href = \"%d.html\"> %s to %s</a> <p>\n",
|
||||||
|
to_room->number,
|
||||||
|
dir_names[door],
|
||||||
|
to_room->name);
|
||||||
}
|
}
|
||||||
if (!found)
|
if (!found)
|
||||||
fprintf(fl, "None!");
|
fprintf(fl, "None!");
|
||||||
fclose(fl);
|
fclose(fl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* function to count how many hash-mark delimited records exist in a file */
|
/* function to count how many hash-mark delimited records exist in a file */
|
||||||
int count_hash_records(FILE * fl)
|
int count_hash_records(FILE * fl)
|
||||||
@@ -231,19 +262,35 @@ int count_hash_records(FILE * fl)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void index_boot(char *name)
|
void index_boot(int cnt, char **names)
|
||||||
{
|
{
|
||||||
FILE *db_file;
|
FILE *db_file;
|
||||||
int rec_count = 0;
|
|
||||||
|
|
||||||
if (!(db_file = fopen(name, "r"))) {
|
//throw first entry away as that is the executable.
|
||||||
perror("error opening world file");
|
for (int i=1;i<cnt;i++) {
|
||||||
exit(1);
|
if (!(db_file = fopen(names[i], "r"))) {
|
||||||
|
perror("error opening world file");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
//have to loop through files twice.
|
||||||
|
//once to get total record count
|
||||||
|
//second time to load them
|
||||||
|
rec_count += count_hash_records(db_file);
|
||||||
|
fclose(db_file);
|
||||||
}
|
}
|
||||||
rec_count = count_hash_records(db_file);
|
sprintf(buf,"Total records: %d\n",rec_count);
|
||||||
|
log(buf);
|
||||||
|
//now that we know how many records in total
|
||||||
|
//we can create the memory structure
|
||||||
CREATE(world, struct room_data, rec_count);
|
CREATE(world, struct room_data, rec_count);
|
||||||
rewind(db_file);
|
//now loop through files and load them
|
||||||
discrete_load(db_file);
|
for (int i=1;i<cnt;i++) {
|
||||||
|
if (!(db_file = fopen(names[i], "r"))) {
|
||||||
|
perror("error opening world file");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
discrete_load(db_file);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -257,6 +304,9 @@ void discrete_load(FILE * fl)
|
|||||||
fprintf(stderr, "Format error after room #%d\n", nr);
|
fprintf(stderr, "Format error after room #%d\n", nr);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
if (*line == 'T') //Toss triggers. THey currently break this util.
|
||||||
|
continue;
|
||||||
|
|
||||||
if (*line == '$')
|
if (*line == '$')
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -394,22 +444,6 @@ void setup_dir(FILE * fl, int room, int dir)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* resolve all vnums into rnums in the world */
|
|
||||||
void renum_world(void)
|
|
||||||
{
|
|
||||||
register int room, door;
|
|
||||||
|
|
||||||
for (room = 0; room <= top_of_world; room++)
|
|
||||||
for (door = 0; door < NUM_OF_DIRS; door++)
|
|
||||||
if (world[room].dir_option[door])
|
|
||||||
if (world[room].dir_option[door]->to_room != NOWHERE)
|
|
||||||
world[room].dir_option[door]->to_room =
|
|
||||||
real_room(world[room].dir_option[door]->to_room,
|
|
||||||
world[room].number);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* procedures for resetting, both play-time and boot-time *
|
* procedures for resetting, both play-time and boot-time *
|
||||||
*********************************************************************** */
|
*********************************************************************** */
|
||||||
@@ -464,32 +498,6 @@ char *fread_string(FILE * fl, char *error)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* returns the real number of the room with given virtual number */
|
|
||||||
int real_room(int virtual, int reference)
|
|
||||||
{
|
|
||||||
int bot, top, mid;
|
|
||||||
|
|
||||||
bot = 0;
|
|
||||||
top = top_of_world;
|
|
||||||
|
|
||||||
/* perform binary search on world-table */
|
|
||||||
for (;;) {
|
|
||||||
mid = (bot + top) / 2;
|
|
||||||
|
|
||||||
if ((world + mid)->number == virtual)
|
|
||||||
return (mid);
|
|
||||||
if (bot >= top) {
|
|
||||||
fprintf(stderr, "Room %d does not exist in database (referenced in room %d)\n", virtual, reference);
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
if ((world + mid)->number > virtual)
|
|
||||||
top = mid - 1;
|
|
||||||
else
|
|
||||||
bot = mid + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* get_line reads the next non-blank line off of the input stream.
|
/* get_line reads the next non-blank line off of the input stream.
|
||||||
* The newline character is removed from the input. Lines which begin
|
* The newline character is removed from the input. Lines which begin
|
||||||
* with '*' are considered to be comments.
|
* with '*' are considered to be comments.
|
||||||
|
|||||||
Reference in New Issue
Block a user