8 Commits

Author SHA1 Message Date
Thomas Arp
744286a1f7 Merge branch 'master' into kaizen/reformatting-and-linting 2025-07-02 22:46:56 +02:00
Thomas Arp
df3aefe9b8 Merge branch 'master' into kaizen/reformatting-and-linting
# Conflicts:
#	src/act.comm.c
#	src/act.informative.c
#	src/aedit.c
#	src/comm.c
#	src/comm.h
#	src/dg_olc.h
2025-07-02 22:31:44 +02:00
welcor
0e110b93d5 Actually ue typedefs for obj_data, char_data and descriptor_data.
Some linting in a couple of files. Massive commit...
2025-04-20 02:22:15 +02:00
welcor
b489a72c58 Switch to using atoidx whenever we are handling an IDXTYPE. cleanup and linting of asciimap.c 2024-12-31 00:18:53 +01:00
welcor
9c5787129b Merge branch 'master' into kaizen/reformatting-and-linting
# Conflicts:
#	src/sysdep.h
2024-12-30 13:07:05 +01:00
welcor
fdb6ff3771 act-files formatted 2024-10-01 00:09:30 +02:00
welcor
5c44f0575e clang-format file added, quest.c and .h formatted 2024-09-30 22:36:30 +02:00
welcor
e6085172d5 KAIZEN formatting and linting, header files 2024-09-17 01:04:36 +02:00
164 changed files with 10788 additions and 12667 deletions

55
.clang-format Normal file
View File

@@ -0,0 +1,55 @@
---
Language: Cpp
BasedOnStyle: LLVM
AccessModifierOffset: -4
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignOperands: Align
AlignTrailingComments: true
AlwaysBreakTemplateDeclarations: Yes
BraceWrapping:
AfterCaseLabel: true
AfterClass: true
AfterControlStatement: false
AfterEnum: true
AfterFunction: true
AfterNamespace: true
AfterStruct: true
AfterUnion: true
AfterExternBlock: false
BeforeCatch: true
BeforeElse: false
BeforeLambdaBody: true
BeforeWhile: true
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBraces: Custom
BreakBeforeBinaryOperators: All
BreakConstructorInitializers: AfterColon
BreakConstructorInitializersBeforeComma: false
ColumnLimit: 120
ConstructorInitializerAllOnOneLineOrOnePerLine: false
IncludeCategories:
- Regex: '^<.*'
Priority: 1
- Regex: '^".*'
Priority: 2
- Regex: '.*'
Priority: 3
IncludeIsMainRegex: '([-_](test|unittest))?$'
IndentCaseBlocks: true
IndentWidth: 2
InsertNewlineAtEOF: true
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 2
NamespaceIndentation: All
SpaceInEmptyParentheses: false
SpacesInAngles: false
SpacesInConditionalStatement: false
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
TabWidth: 2
...

4
.gitignore vendored
View File

@@ -63,10 +63,6 @@ lib/plrobjs/index
!lib/plrobjs/U-Z/00
!lib/plrobjs/ZZZ/00
#don't commit logs
!log/*
!syslog.CRASH
# also not autogenerated config file
/lib/etc/config
# or the list of last logins

View File

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

View File

@@ -0,0 +1 @@
select foo.com 1745106858 Welcor

Binary file not shown.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

1
log/README Normal file
View File

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

View File

View File

View File

View File

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

View File

View File

View File

View File

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

View File

View File

View File

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

View File

View File

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

View File

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

View File

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

View File

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

View File

View File

@@ -22,15 +22,15 @@
#include "act.h"
#include "modify.h"
static bool legal_communication(char * arg);
static bool legal_communication(char *arg);
static bool legal_communication(char * arg)
static bool legal_communication(char *arg)
{
while (*arg) {
if (*arg == '@') {
arg++;
if (*arg == '(' || *arg == ')' || *arg == '<' || *arg == '>')
return FALSE;
return FALSE;
}
arg++;
}
@@ -45,8 +45,8 @@ ACMD(do_say)
send_to_char(ch, "Yes, but WHAT do you want to say?\r\n");
else {
char buf[MAX_INPUT_LENGTH + 14], *msg;
struct char_data *vict;
char_data *vict;
if (CONFIG_SPECIAL_IN_COMM && legal_communication(argument))
parse_at(argument);
@@ -74,7 +74,7 @@ ACMD(do_say)
ACMD(do_gsay)
{
skip_spaces(&argument);
if (!GROUP(ch)) {
send_to_char(ch, "But you are not a member of a group!\r\n");
return;
@@ -82,20 +82,21 @@ ACMD(do_gsay)
if (!*argument)
send_to_char(ch, "Yes, but WHAT do you want to group-say?\r\n");
else {
if (CONFIG_SPECIAL_IN_COMM && legal_communication(argument))
parse_at(argument);
send_to_group(ch, ch->group, "%s%s%s says, '%s'%s\r\n", CCGRN(ch, C_NRM), CCGRN(ch, C_NRM), GET_NAME(ch), argument, CCNRM(ch, C_NRM));
parse_at(argument);
send_to_group(ch, ch->group, "%s%s%s says, '%s'%s\r\n", CCGRN(ch, C_NRM), CCGRN(ch, C_NRM), GET_NAME(ch),
argument, CCNRM(ch, C_NRM));
if (!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_NOREPEAT))
send_to_char(ch, "%s", CONFIG_OK);
else
send_to_char(ch, "%sYou group-say, '%s'%s\r\n", CCGRN(ch, C_NRM), argument, CCNRM(ch, C_NRM));
}
}
}
static void perform_tell(struct char_data *ch, struct char_data *vict, char *arg)
static void perform_tell(char_data *ch, char_data *vict, char *arg)
{
char buf[MAX_STRING_LENGTH], *msg;
@@ -107,7 +108,7 @@ static void perform_tell(struct char_data *ch, struct char_data *vict, char *arg
send_to_char(ch, "%s", CONFIG_OK);
else {
snprintf(buf, sizeof(buf), "%sYou tell $N, '%s'%s", CCRED(ch, C_NRM), arg, CCNRM(ch, C_NRM));
msg = act(buf, FALSE, ch, 0, vict, TO_CHAR | TO_SLEEP);
msg = act(buf, FALSE, ch, 0, vict, TO_CHAR | TO_SLEEP);
add_history(ch, msg, HIST_TELL);
}
@@ -115,7 +116,7 @@ static void perform_tell(struct char_data *ch, struct char_data *vict, char *arg
GET_LAST_TELL(vict) = GET_IDNUM(ch);
}
static int is_tell_ok(struct char_data *ch, struct char_data *vict)
static int is_tell_ok(char_data *ch, char_data *vict)
{
if (!ch)
log("SYSERR: is_tell_ok called with no characters");
@@ -127,11 +128,12 @@ static int is_tell_ok(struct char_data *ch, struct char_data *vict)
send_to_char(ch, "You can't tell other people while you have notell on.\r\n");
else if (ROOM_FLAGGED(IN_ROOM(ch), ROOM_SOUNDPROOF) && (GET_LEVEL(ch) < LVL_GOD))
send_to_char(ch, "The walls seem to absorb your words.\r\n");
else if (!IS_NPC(vict) && !vict->desc) /* linkless */
else if (!IS_NPC(vict) && !vict->desc) /* linkless */
act("$E's linkless at the moment.", FALSE, ch, 0, vict, TO_CHAR | TO_SLEEP);
else if (PLR_FLAGGED(vict, PLR_WRITING))
act("$E's writing a message right now; try again later.", FALSE, ch, 0, vict, TO_CHAR | TO_SLEEP);
else if ((!IS_NPC(vict) && PRF_FLAGGED(vict, PRF_NOTELL)) || (ROOM_FLAGGED(IN_ROOM(vict), ROOM_SOUNDPROOF) && (GET_LEVEL(ch) < LVL_GOD)))
else if ((!IS_NPC(vict) && PRF_FLAGGED(vict, PRF_NOTELL)) || (
ROOM_FLAGGED(IN_ROOM(vict), ROOM_SOUNDPROOF) && (GET_LEVEL(ch) < LVL_GOD)))
act("$E can't hear you.", FALSE, ch, 0, vict, TO_CHAR | TO_SLEEP);
else
return (TRUE);
@@ -143,8 +145,8 @@ static int is_tell_ok(struct char_data *ch, struct char_data *vict)
* called frequently, and should IMHO be kept as tight as possible. */
ACMD(do_tell)
{
struct char_data *vict = NULL;
char buf[MAX_INPUT_LENGTH + 25], buf2[MAX_INPUT_LENGTH]; // +25 to make room for constants
char_data *vict = NULL;
char buf[MAX_INPUT_LENGTH + 25], buf2[MAX_INPUT_LENGTH]; // +25 to make room for constants
half_chop(argument, buf, buf2);
@@ -158,12 +160,12 @@ ACMD(do_tell)
if (CONFIG_SPECIAL_IN_COMM && legal_communication(argument))
parse_at(buf2);
perform_tell(ch, vict, buf2);
}
}
}
ACMD(do_reply)
{
struct char_data *tch = character_list;
char_data *tch = character_list;
if (IS_NPC(ch))
return;
@@ -178,8 +180,8 @@ ACMD(do_reply)
/* Make sure the person you're replying to is still playing by searching
* for them. Note, now last tell is stored as player IDnum instead of
* a pointer, which is much better because it's safer, plus will still
* work if someone logs out and back in again. A descriptor list based
* search would be faster although we could not find link dead people.
* work if someone logs out and back in again. A descriptor list based
* search would be faster although we could not find link dead people.
* Not that they can hear tells anyway. :) -gg 2/24/98 */
while (tch && (IS_NPC(tch) || GET_IDNUM(tch) != GET_LAST_TELL(ch)))
tch = tch->next;
@@ -190,14 +192,14 @@ ACMD(do_reply)
if (CONFIG_SPECIAL_IN_COMM && legal_communication(argument))
parse_at(argument);
perform_tell(ch, tch, argument);
}
}
}
}
ACMD(do_spec_comm)
{
char buf[MAX_INPUT_LENGTH], buf2[MAX_INPUT_LENGTH];
struct char_data *vict;
char_data *vict;
const char *action_sing, *action_plur, *action_others;
switch (subcmd) {
@@ -237,7 +239,7 @@ ACMD(do_spec_comm)
snprintf(buf1, sizeof(buf1), "$n %s you, '%s'", action_plur, buf2);
act(buf1, FALSE, ch, 0, vict, TO_VICT);
if ((!IS_NPC(ch)) && (PRF_FLAGGED(ch, PRF_NOREPEAT)))
if ((!IS_NPC(ch)) && (PRF_FLAGGED(ch, PRF_NOREPEAT)))
send_to_char(ch, "%s", CONFIG_OK);
else
send_to_char(ch, "You %s %s, '%s'\r\n", action_sing, GET_NAME(vict), buf2);
@@ -247,7 +249,7 @@ ACMD(do_spec_comm)
ACMD(do_write)
{
struct obj_data *paper, *pen = NULL;
obj_data *paper, *pen = NULL;
char *papername, *penname;
char buf1[MAX_STRING_LENGTH], buf2[MAX_STRING_LENGTH];
@@ -326,8 +328,8 @@ ACMD(do_write)
ACMD(do_page)
{
struct descriptor_data *d;
struct char_data *vict;
descriptor_data *d;
char_data *vict;
char buf2[MAX_INPUT_LENGTH], arg[MAX_INPUT_LENGTH];
half_chop(argument, arg, buf2);
@@ -342,19 +344,19 @@ ACMD(do_page)
snprintf(buf, sizeof(buf), "\007\007*$n* %s", buf2);
if (!str_cmp(arg, "all")) {
if (GET_LEVEL(ch) > LVL_GOD) {
for (d = descriptor_list; d; d = d->next)
if (STATE(d) == CON_PLAYING && d->character)
act(buf, FALSE, ch, 0, d->character, TO_VICT);
for (d = descriptor_list; d; d = d->next)
if (STATE(d) == CON_PLAYING && d->character)
act(buf, FALSE, ch, 0, d->character, TO_VICT);
} else
send_to_char(ch, "You will never be godly enough to do that!\r\n");
send_to_char(ch, "You will never be godly enough to do that!\r\n");
return;
}
if ((vict = get_char_vis(ch, arg, NULL, FIND_CHAR_WORLD))) {
act(buf, FALSE, ch, 0, vict, TO_VICT);
if (!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_NOREPEAT))
send_to_char(ch, "%s", CONFIG_OK);
send_to_char(ch, "%s", CONFIG_OK);
else
act(buf, FALSE, ch, 0, vict, TO_CHAR);
act(buf, FALSE, ch, 0, vict, TO_CHAR);
} else
send_to_char(ch, "There is no such person in the game!\r\n");
}
@@ -363,28 +365,28 @@ ACMD(do_page)
/* Generalized communication function by Fred C. Merkel (Torg). */
ACMD(do_gen_comm)
{
struct descriptor_data *i;
descriptor_data *i;
char color_on[24];
char buf1[MAX_INPUT_LENGTH], buf2[MAX_INPUT_LENGTH + 50], *msg; // + 50 to make room for color codes
char buf1[MAX_INPUT_LENGTH], buf2[MAX_INPUT_LENGTH + 50], *msg; // + 50 to make room for color codes
bool emoting = FALSE;
/* Array of flags which must _not_ be set in order for comm to be heard. */
int channels[] = {
0,
PRF_NOSHOUT,
PRF_NOGOSS,
PRF_NOAUCT,
PRF_NOGRATZ,
PRF_NOGOSS,
0
0,
PRF_NOSHOUT,
PRF_NOGOSS,
PRF_NOAUCT,
PRF_NOGRATZ,
PRF_NOGOSS,
0
};
int hist_type[] = {
HIST_HOLLER,
HIST_SHOUT,
HIST_GOSSIP,
HIST_AUCTION,
HIST_GRATS,
HIST_HOLLER,
HIST_SHOUT,
HIST_GOSSIP,
HIST_AUCTION,
HIST_GRATS,
};
/* com_msgs: [0] Message if you can't perform the action because of noshout
@@ -392,35 +394,42 @@ ACMD(do_gen_comm)
* [2] message if you're not on the channel
* [3] a color string. */
const char *com_msgs[][4] = {
{"You cannot holler!!\r\n",
"holler",
"",
KYEL},
{"You cannot shout!!\r\n",
"shout",
"Turn off your noshout flag first!\r\n",
KYEL},
{"You cannot gossip!!\r\n",
"gossip",
"You aren't even on the channel!\r\n",
KYEL},
{"You cannot auction!!\r\n",
"auction",
"You aren't even on the channel!\r\n",
KMAG},
{"You cannot congratulate!\r\n",
"congrat",
"You aren't even on the channel!\r\n",
KGRN},
{"You cannot gossip your emotions!\r\n",
"gossip",
"You aren't even on the channel!\r\n",
KYEL}
{
"You cannot holler!!\r\n",
"holler",
"",
KYEL
},
{
"You cannot shout!!\r\n",
"shout",
"Turn off your noshout flag first!\r\n",
KYEL
},
{
"You cannot gossip!!\r\n",
"gossip",
"You aren't even on the channel!\r\n",
KYEL
},
{
"You cannot auction!!\r\n",
"auction",
"You aren't even on the channel!\r\n",
KMAG
},
{
"You cannot congratulate!\r\n",
"congrat",
"You aren't even on the channel!\r\n",
KGRN
},
{
"You cannot gossip your emotions!\r\n",
"gossip",
"You aren't even on the channel!\r\n",
KYEL
}
};
if (PLR_FLAGGED(ch, PLR_NOSHOUT)) {
@@ -443,7 +452,8 @@ ACMD(do_gen_comm)
/* Level_can_shout defined in config.c. */
if (GET_LEVEL(ch) < CONFIG_LEVEL_CAN_SHOUT) {
send_to_char(ch, "You must be at least level %d before you can %s.\r\n", CONFIG_LEVEL_CAN_SHOUT, com_msgs[subcmd][1]);
send_to_char(ch, "You must be at least level %d before you can %s.\r\n", CONFIG_LEVEL_CAN_SHOUT,
com_msgs[subcmd][1]);
return;
}
/* Make sure the char is on the channel. */
@@ -474,12 +484,12 @@ ACMD(do_gen_comm)
if (!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_NOREPEAT))
send_to_char(ch, "%s", CONFIG_OK);
else {
if (CONFIG_SPECIAL_IN_COMM && legal_communication(argument))
if (CONFIG_SPECIAL_IN_COMM && legal_communication(argument))
parse_at(argument);
snprintf(buf1, sizeof(buf1), "%sYou %s, '%s%s'%s", COLOR_LEV(ch) >= C_CMP ? color_on : "",
com_msgs[subcmd][1], argument, COLOR_LEV(ch) >= C_CMP ? color_on : "", CCNRM(ch, C_CMP));
com_msgs[subcmd][1], argument, COLOR_LEV(ch) >= C_CMP ? color_on : "", CCNRM(ch, C_CMP));
msg = act(buf1, FALSE, ch, 0, 0, TO_CHAR | TO_SLEEP);
add_history(ch, msg, hist_type[subcmd]);
}
@@ -488,7 +498,7 @@ ACMD(do_gen_comm)
/* Now send all the strings out. */
for (i = descriptor_list; i; i = i->next) {
if (STATE(i) != CON_PLAYING || i == ch->desc || !i->character )
if (STATE(i) != CON_PLAYING || i == ch->desc || !i->character)
continue;
if (!IS_NPC(ch) && (PRF_FLAGGED(i->character, channels[subcmd]) || PLR_FLAGGED(i->character, PLR_WRITING)))
continue;
@@ -497,10 +507,10 @@ ACMD(do_gen_comm)
continue;
if (subcmd == SCMD_SHOUT && ((world[IN_ROOM(ch)].zone != world[IN_ROOM(i->character)].zone) ||
!AWAKE(i->character)))
!AWAKE(i->character)))
continue;
snprintf(buf2, sizeof(buf2), "%s%s%s", (COLOR_LEV(i->character) >= C_NRM) ? color_on : "", buf1, KNRM);
snprintf(buf2, sizeof(buf2), "%s%s%s", (COLOR_LEV(i->character) >= C_NRM) ? color_on : "", buf1, KNRM);
msg = act(buf2, FALSE, ch, 0, i->character, TO_VICT | TO_SLEEP);
add_history(i->character, msg, hist_type[subcmd]);
}
@@ -518,8 +528,8 @@ ACMD(do_qcomm)
send_to_char(ch, "%c%s? Yes, fine, %s we must, but WHAT??\r\n", UPPER(*CMD_NAME), CMD_NAME + 1, CMD_NAME);
else {
char buf[MAX_STRING_LENGTH];
struct descriptor_data *i;
descriptor_data *i;
if (CONFIG_SPECIAL_IN_COMM && legal_communication(argument))
parse_at(argument);

View File

@@ -57,7 +57,7 @@ char *find_exdesc(char *word, struct extra_descr_data *list);
void space_to_minus(char *str);
/** @todo Move to a help module? */
int search_help(const char *argument, int level);
void free_history(struct char_data *ch, int type);
void free_history(char_data *ch, int type);
void free_recent_players(void);
/* functions with subcommands */
/* do_commands */
@@ -109,10 +109,10 @@ ACMD(do_whois);
****************************************************************************/
/* Utility Functions */
/** @todo Compare with needs of find_eq_pos_script. */
int find_eq_pos(struct char_data *ch, struct obj_data *obj, char *arg);
void name_from_drinkcon(struct obj_data *obj);
void name_to_drinkcon(struct obj_data *obj, int type);
void weight_change_object(struct obj_data *obj, int weight);
int find_eq_pos(char_data *ch, obj_data *obj, char *arg);
void name_from_drinkcon(obj_data *obj);
void name_to_drinkcon(obj_data *obj, int type);
void weight_change_object(obj_data *obj, int weight);
/* functions with subcommands */
/* do_drop */
ACMD(do_drop);
@@ -268,7 +268,6 @@ ACMD(do_action);
ACMD(do_gmote);
/*****************************************************************************
* Begin Functions and defines for act.wizard.c
****************************************************************************/
@@ -276,11 +275,11 @@ ACMD(do_gmote);
/** @todo should probably be moved to a more general file handler module */
void clean_llog_entries(void);
/** @todo This should be moved to a more general utility file */
int script_command_interpreter(struct char_data *ch, char *arg);
room_rnum find_target_room(struct char_data *ch, char *rawroomstr);
void perform_immort_vis(struct char_data *ch);
void snoop_check(struct char_data *ch);
bool change_player_name(struct char_data *ch, struct char_data *vict, char *new_name);
int script_command_interpreter(char_data *ch, char *arg);
room_rnum find_target_room(char_data *ch, char *rawroomstr);
void perform_immort_vis(char_data *ch);
void snoop_check(char_data *ch);
bool change_player_name(char_data *ch, char_data *vict, char *new_name);
bool AddRecentPlayer(char *chname, char *chhost, bool newplr, bool cpyplr);
/* Functions with subcommands */
/* do_date */
@@ -327,7 +326,7 @@ ACMD(do_plist);
ACMD(do_purge);
ACMD(do_recent);
ACMD(do_restore);
void return_to_char(struct char_data * ch);
void return_to_char(char_data *ch);
ACMD(do_return);
ACMD(do_saveall);
ACMD(do_send);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -27,18 +27,18 @@
/* local only functions */
/* do_simple_move utility functions */
static int has_boat(struct char_data *ch);
static int has_boat(char_data *ch);
/* do_gen_door utility functions */
static int find_door(struct char_data *ch, const char *type, char *dir, const char *cmdname);
static int has_key(struct char_data *ch, obj_vnum key);
static void do_doorcmd(struct char_data *ch, struct obj_data *obj, int door, int scmd);
static int ok_pick(struct char_data *ch, obj_vnum keynum, int pickproof, int scmd);
static int find_door(char_data *ch, const char *type, char *dir, const char *cmdname);
static int has_key(char_data *ch, obj_vnum key);
static void do_doorcmd(char_data *ch, obj_data *obj, int door, int scmd);
static int ok_pick(char_data *ch, obj_vnum keynum, int pickproof, int scmd);
/* simple function to determine if char can walk on water */
static int has_boat(struct char_data *ch)
static int has_boat(char_data *ch)
{
struct obj_data *obj;
obj_data *obj;
int i;
if (GET_LEVEL(ch) > LVL_IMMORT)
@@ -61,9 +61,9 @@ static int has_boat(struct char_data *ch)
}
/* Simple function to determine if char can fly. */
static int has_flight(struct char_data *ch)
static int has_flight(char_data *ch)
{
struct obj_data *obj;
obj_data *obj;
int i;
if (GET_LEVEL(ch) > LVL_IMMORT)
@@ -86,9 +86,9 @@ static int has_flight(struct char_data *ch)
}
/* Simple function to determine if char can scuba. */
static int has_scuba(struct char_data *ch)
static int has_scuba(char_data *ch)
{
struct obj_data *obj;
obj_data *obj;
int i;
if (GET_LEVEL(ch) > LVL_IMMORT)
@@ -126,7 +126,7 @@ static int has_scuba(struct char_data *ch)
* @param need_specials_check If TRUE will cause
* @retval int 1 for a successful move (ch is now in a new location)
* or 0 for a failed move (ch is still in the original location). */
int do_simple_move(struct char_data *ch, int dir, int need_specials_check)
int do_simple_move(char_data *ch, int dir, int need_specials_check)
{
/* Begin Local variable definitions */
/*---------------------------------------------------------------------*/
@@ -166,8 +166,7 @@ int do_simple_move(struct char_data *ch, int dir, int need_specials_check)
return 0;
/* Charm effect: Does it override the movement? */
if (AFF_FLAGGED(ch, AFF_CHARM) && ch->master && was_in == IN_ROOM(ch->master))
{
if (AFF_FLAGGED(ch, AFF_CHARM) && ch->master && was_in == IN_ROOM(ch->master)) {
send_to_char(ch, "The thought of leaving your master makes you weep.\r\n");
act("$n bursts into tears.", FALSE, ch, 0, 0, TO_ROOM);
return (0);
@@ -175,28 +174,23 @@ int do_simple_move(struct char_data *ch, int dir, int need_specials_check)
/* Water, No Swimming Rooms: Does the deep water prevent movement? */
if ((SECT(was_in) == SECT_WATER_NOSWIM) ||
(SECT(going_to) == SECT_WATER_NOSWIM))
{
if (!has_boat(ch))
{
(SECT(going_to) == SECT_WATER_NOSWIM)) {
if (!has_boat(ch)) {
send_to_char(ch, "You need a boat to go there.\r\n");
return (0);
}
}
/* Flying Required: Does lack of flying prevent movement? */
if ((SECT(was_in) == SECT_FLYING) || (SECT(going_to) == SECT_FLYING))
{
if (!has_flight(ch))
{
if ((SECT(was_in) == SECT_FLYING) || (SECT(going_to) == SECT_FLYING)) {
if (!has_flight(ch)) {
send_to_char(ch, "You need to be flying to go there!\r\n");
return (0);
}
}
/* Underwater Room: Does lack of underwater breathing prevent movement? */
if ((SECT(was_in) == SECT_UNDERWATER) || (SECT(going_to) == SECT_UNDERWATER))
{
if ((SECT(was_in) == SECT_UNDERWATER) || (SECT(going_to) == SECT_UNDERWATER)) {
if (!has_scuba(ch) && !IS_NPC(ch) && !PRF_FLAGGED(ch, PRF_NOHASSLE)) {
send_to_char(ch, "You need to be able to breathe water to go there!\r\n");
return (0);
@@ -204,10 +198,8 @@ int do_simple_move(struct char_data *ch, int dir, int need_specials_check)
}
/* Houses: Can the player walk into the house? */
if (ROOM_FLAGGED(was_in, ROOM_ATRIUM))
{
if (!House_can_enter(ch, GET_ROOM_VNUM(going_to)))
{
if (ROOM_FLAGGED(was_in, ROOM_ATRIUM)) {
if (!House_can_enter(ch, GET_ROOM_VNUM(going_to))) {
send_to_char(ch, "That's private property -- no trespassing!\r\n");
return (0);
}
@@ -223,15 +215,15 @@ int do_simple_move(struct char_data *ch, int dir, int need_specials_check)
send_to_char(ch, "A mysterious barrier forces you back! That area is off-limits.\r\n");
return (0);
}
if (ZONE_FLAGGED(GET_ROOM_ZONE(going_to), ZONE_NOIMMORT) && (GET_LEVEL(ch) >= LVL_IMMORT) && (GET_LEVEL(ch) < LVL_GRGOD)) {
if (ZONE_FLAGGED(GET_ROOM_ZONE(going_to), ZONE_NOIMMORT) && (GET_LEVEL(ch) >= LVL_IMMORT) && (
GET_LEVEL(ch) < LVL_GRGOD)) {
send_to_char(ch, "A mysterious barrier forces you back! That area is off-limits.\r\n");
return (0);
}
/* Room Size Capacity: Is the room full of people already? */
if (ROOM_FLAGGED(going_to, ROOM_TUNNEL) &&
num_pc_in_room(&(world[going_to])) >= CONFIG_TUNNEL_SIZE)
{
num_pc_in_room(&(world[going_to])) >= CONFIG_TUNNEL_SIZE) {
if (CONFIG_TUNNEL_SIZE > 1)
send_to_char(ch, "There isn't enough room for you to go there!\r\n");
else
@@ -240,8 +232,7 @@ int do_simple_move(struct char_data *ch, int dir, int need_specials_check)
}
/* Room Level Requirements: Is ch privileged enough to enter the room? */
if (ROOM_FLAGGED(going_to, ROOM_GODROOM) && GET_LEVEL(ch) < LVL_GOD)
{
if (ROOM_FLAGGED(going_to, ROOM_GODROOM) && GET_LEVEL(ch) < LVL_GOD) {
send_to_char(ch, "You aren't godly enough to use that room!\r\n");
return (0);
}
@@ -250,11 +241,10 @@ int do_simple_move(struct char_data *ch, int dir, int need_specials_check)
* move points. */
/* move points needed is avg. move loss for src and destination sect type */
need_movement = (movement_loss[SECT(was_in)] +
movement_loss[SECT(going_to)]) / 2;
movement_loss[SECT(going_to)]) / 2;
/* Move Point Requirement Check */
if (GET_MOVE(ch) < need_movement && !IS_NPC(ch))
{
if (GET_MOVE(ch) < need_movement && !IS_NPC(ch)) {
if (need_specials_check && ch->master)
send_to_char(ch, "You are too exhausted to follow.\r\n");
else
@@ -274,8 +264,7 @@ int do_simple_move(struct char_data *ch, int dir, int need_specials_check)
GET_MOVE(ch) -= need_movement;
/* Generate the leave message and display to others in the was_in room. */
if (!AFF_FLAGGED(ch, AFF_SNEAK))
{
if (!AFF_FLAGGED(ch, AFF_SNEAK)) {
snprintf(leave_message, sizeof(leave_message), "$n leaves %s.", dirs[dir]);
act(leave_message, TRUE, ch, 0, 0, TO_ROOM);
}
@@ -307,9 +296,9 @@ int do_simple_move(struct char_data *ch, int dir, int need_specials_check)
look_at_room(ch, 0);
/* ... and Kill the player if the room is a death trap. */
if (ROOM_FLAGGED(going_to, ROOM_DEATH) && GET_LEVEL(ch) < LVL_IMMORT)
{
mudlog(BRF, LVL_IMMORT, TRUE, "%s hit death trap #%d (%s)", GET_NAME(ch), GET_ROOM_VNUM(going_to), world[going_to].name);
if (ROOM_FLAGGED(going_to, ROOM_DEATH) && GET_LEVEL(ch) < LVL_IMMORT) {
mudlog(BRF, LVL_IMMORT, TRUE, "%s hit death trap #%d (%s)", GET_NAME(ch), GET_ROOM_VNUM(going_to),
world[going_to].name);
death_cry(ch);
extract_char(ch);
return (0);
@@ -319,15 +308,13 @@ int do_simple_move(struct char_data *ch, int dir, int need_specials_check)
/* Fire memory and greet triggers, check and see if the greet trigger
* prevents movement, and if so, move the player back to the previous room. */
entry_memory_mtrigger(ch);
if (!greet_mtrigger(ch, dir))
{
if (!greet_mtrigger(ch, dir)) {
char_from_room(ch);
char_to_room(ch, was_in);
look_at_room(ch, 0);
/* Failed move, return a failure */
return (0);
}
else
} else
greet_memory_mtrigger(ch);
/*---------------------------------------------------------------------*/
/* End: Post-move operations. */
@@ -337,7 +324,7 @@ int do_simple_move(struct char_data *ch, int dir, int need_specials_check)
return (1);
}
int perform_move(struct char_data *ch, int dir, int need_specials_check)
int perform_move(char_data *ch, int dir, int need_specials_check)
{
room_rnum was_in;
struct follow_type *k, *next;
@@ -348,7 +335,8 @@ int perform_move(struct char_data *ch, int dir, int need_specials_check)
send_to_char(ch, "Alas, you cannot go that way...\r\n");
else if ((!EXIT(ch, dir) && !buildwalk(ch, dir)) || EXIT(ch, dir)->to_room == NOWHERE)
send_to_char(ch, "Alas, you cannot go that way...\r\n");
else if (EXIT_FLAGGED(EXIT(ch, dir), EX_CLOSED) && (GET_LEVEL(ch) < LVL_IMMORT || (!IS_NPC(ch) && !PRF_FLAGGED(ch, PRF_NOHASSLE)))) {
else if (EXIT_FLAGGED(EXIT(ch, dir), EX_CLOSED) && (GET_LEVEL(ch) < LVL_IMMORT || (
!IS_NPC(ch) && !PRF_FLAGGED(ch, PRF_NOHASSLE)))) {
if (EXIT(ch, dir)->keyword)
send_to_char(ch, "The %s seems to be closed.\r\n", fname(EXIT(ch, dir)->keyword));
else
@@ -364,9 +352,9 @@ int perform_move(struct char_data *ch, int dir, int need_specials_check)
for (k = ch->followers; k; k = next) {
next = k->next;
if ((IN_ROOM(k->follower) == was_in) &&
(GET_POS(k->follower) >= POS_STANDING)) {
act("You follow $N.\r\n", FALSE, k->follower, 0, ch, TO_CHAR);
perform_move(k->follower, dir, 1);
(GET_POS(k->follower) >= POS_STANDING)) {
act("You follow $N.\r\n", FALSE, k->follower, 0, ch, TO_CHAR);
perform_move(k->follower, dir, 1);
}
}
return (1);
@@ -380,18 +368,18 @@ ACMD(do_move)
perform_move(ch, subcmd, 0);
}
static int find_door(struct char_data *ch, const char *type, char *dir, const char *cmdname)
static int find_door(char_data *ch, const char *type, char *dir, const char *cmdname)
{
int door;
if (*dir) { /* a direction was specified */
if ((door = search_block(dir, dirs, FALSE)) == -1) { /* Partial Match */
if (*dir) { /* a direction was specified */
if ((door = search_block(dir, dirs, FALSE)) == -1) { /* Partial Match */
if ((door = search_block(dir, autoexits, FALSE)) == -1) { /* Check 'short' dirs too */
send_to_char(ch, "That's not a direction.\r\n");
return (-1);
}
}
if (EXIT(ch, door)) { /* Braces added according to indent. -gg */
if (EXIT(ch, door)) { /* Braces added according to indent. -gg */
if (EXIT(ch, door)->keyword) {
if (is_name(type, EXIT(ch, door)->keyword))
return (door);
@@ -400,40 +388,34 @@ static int find_door(struct char_data *ch, const char *type, char *dir, const ch
return (-1);
}
} else
return (door);
return (door);
} else {
send_to_char(ch, "I really don't see how you can %s anything there.\r\n", cmdname);
return (-1);
}
} else { /* try to locate the keyword */
} else { /* try to locate the keyword */
if (!*type) {
send_to_char(ch, "What is it you want to %s?\r\n", cmdname);
return (-1);
}
for (door = 0; door < DIR_COUNT; door++)
{
if (EXIT(ch, door))
{
if (EXIT(ch, door)->keyword)
{
if (isname(type, EXIT(ch, door)->keyword))
{
for (door = 0; door < DIR_COUNT; door++) {
if (EXIT(ch, door)) {
if (EXIT(ch, door)->keyword) {
if (isname(type, EXIT(ch, door)->keyword)) {
if ((!IS_NPC(ch)) && (!PRF_FLAGGED(ch, PRF_AUTODOOR)))
return door;
else if (is_abbrev(cmdname, "open"))
{
else if (is_abbrev(cmdname, "open")) {
if (IS_SET(EXIT(ch, door)->exit_info, EX_CLOSED))
return door;
else if (IS_SET(EXIT(ch, door)->exit_info, EX_LOCKED))
return door;
}
else if ((is_abbrev(cmdname, "close")) && (!(IS_SET(EXIT(ch, door)->exit_info, EX_CLOSED))) )
} else if ((is_abbrev(cmdname, "close")) && (!(IS_SET(EXIT(ch, door)->exit_info, EX_CLOSED))))
return door;
else if ((is_abbrev(cmdname, "lock")) && (!(IS_SET(EXIT(ch, door)->exit_info, EX_LOCKED))) )
else if ((is_abbrev(cmdname, "lock")) && (!(IS_SET(EXIT(ch, door)->exit_info, EX_LOCKED))))
return door;
else if ((is_abbrev(cmdname, "unlock")) && (IS_SET(EXIT(ch, door)->exit_info, EX_LOCKED)) )
else if ((is_abbrev(cmdname, "unlock")) && (IS_SET(EXIT(ch, door)->exit_info, EX_LOCKED)))
return door;
else if ((is_abbrev(cmdname, "pick")) && (IS_SET(EXIT(ch, door)->exit_info, EX_LOCKED)) )
else if ((is_abbrev(cmdname, "pick")) && (IS_SET(EXIT(ch, door)->exit_info, EX_LOCKED)))
return door;
}
}
@@ -457,9 +439,9 @@ static int find_door(struct char_data *ch, const char *type, char *dir, const ch
}
}
int has_key(struct char_data *ch, obj_vnum key)
int has_key(char_data *ch, obj_vnum key)
{
struct obj_data *o;
obj_data *o;
if (key == NOTHING)
return (0);
@@ -483,20 +465,20 @@ int has_key(struct char_data *ch, obj_vnum key)
/* cmd_door is required external from act.movement.c */
const char *cmd_door[] =
{
"open",
"close",
"unlock",
"lock",
"pick"
"open",
"close",
"unlock",
"lock",
"pick"
};
static const int flags_door[] =
{
NEED_CLOSED | NEED_UNLOCKED,
NEED_OPEN,
NEED_CLOSED | NEED_LOCKED,
NEED_CLOSED | NEED_UNLOCKED,
NEED_CLOSED | NEED_LOCKED
NEED_CLOSED | NEED_UNLOCKED,
NEED_OPEN,
NEED_CLOSED | NEED_LOCKED,
NEED_CLOSED | NEED_UNLOCKED,
NEED_CLOSED | NEED_LOCKED
};
#define EXITN(room, door) (world[room].dir_option[door])
@@ -516,7 +498,7 @@ static const int flags_door[] =
(TOGGLE_BIT(GET_OBJ_VAL(obj, 1), CONT_LOCKED)) :\
(TOGGLE_BIT(EXITN(room, door)->exit_info, EX_LOCKED)))
static void do_doorcmd(struct char_data *ch, struct obj_data *obj, int door, int scmd)
static void do_doorcmd(char_data *ch, obj_data *obj, int door, int scmd)
{
char buf[MAX_STRING_LENGTH];
size_t len;
@@ -576,18 +558,18 @@ static void do_doorcmd(struct char_data *ch, struct obj_data *obj, int door, int
/* Notify the room. */
if (len < sizeof(buf))
snprintf(buf + len, sizeof(buf) - len, "%s%s.",
obj ? "" : "the ", obj ? "$p" : EXIT(ch, door)->keyword ? "$F" : "door");
obj ? "" : "the ", obj ? "$p" : EXIT(ch, door)->keyword ? "$F" : "door");
if (!obj || IN_ROOM(obj) != NOWHERE)
act(buf, FALSE, ch, obj, obj ? 0 : EXIT(ch, door)->keyword, TO_ROOM);
/* Notify the other room */
if (back && (scmd == SCMD_OPEN || scmd == SCMD_CLOSE))
send_to_room(EXIT(ch, door)->to_room, "The %s is %s%s from the other side.\r\n",
back->keyword ? fname(back->keyword) : "door", cmd_door[scmd],
scmd == SCMD_CLOSE ? "d" : "ed");
send_to_room(EXIT(ch, door)->to_room, "The %s is %s%s from the other side.\r\n",
back->keyword ? fname(back->keyword) : "door", cmd_door[scmd],
scmd == SCMD_CLOSE ? "d" : "ed");
}
static int ok_pick(struct char_data *ch, obj_vnum keynum, int pickproof, int scmd)
static int ok_pick(char_data *ch, obj_vnum keynum, int pickproof, int scmd)
{
int percent, skill_lvl;
@@ -628,8 +610,8 @@ ACMD(do_gen_door)
int door = -1;
obj_vnum keynum;
char type[MAX_INPUT_LENGTH], dir[MAX_INPUT_LENGTH];
struct obj_data *obj = NULL;
struct char_data *victim = NULL;
obj_data *obj = NULL;
char_data *victim = NULL;
skip_spaces(&argument);
if (!*argument) {
@@ -655,18 +637,16 @@ ACMD(do_gen_door)
send_to_char(ch, "But it's currently open!\r\n");
else if (!(DOOR_IS_LOCKED(ch, obj, door)) && IS_SET(flags_door[subcmd], NEED_LOCKED))
send_to_char(ch, "Oh.. it wasn't locked, after all..\r\n");
else if (!(DOOR_IS_UNLOCKED(ch, obj, door)) && IS_SET(flags_door[subcmd], NEED_UNLOCKED) && ((!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_AUTOKEY))) && (has_key(ch, keynum)) )
{
else if (!(DOOR_IS_UNLOCKED(ch, obj, door)) && IS_SET(flags_door[subcmd], NEED_UNLOCKED) && ((
!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_AUTOKEY))) && (has_key(ch, keynum))) {
send_to_char(ch, "It is locked, but you have the key.\r\n");
do_doorcmd(ch, obj, door, SCMD_UNLOCK);
do_doorcmd(ch, obj, door, subcmd);
}
else if (!(DOOR_IS_UNLOCKED(ch, obj, door)) && IS_SET(flags_door[subcmd], NEED_UNLOCKED) && ((!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_AUTOKEY))) && (!has_key(ch, keynum)) )
{
} else if (!(DOOR_IS_UNLOCKED(ch, obj, door)) && IS_SET(flags_door[subcmd], NEED_UNLOCKED) && ((
!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_AUTOKEY))) && (!has_key(ch, keynum))) {
send_to_char(ch, "It is locked, and you do not have the key!\r\n");
}
else if (!(DOOR_IS_UNLOCKED(ch, obj, door)) && IS_SET(flags_door[subcmd], NEED_UNLOCKED) &&
(GET_LEVEL(ch) < LVL_IMMORT || (!IS_NPC(ch) && !PRF_FLAGGED(ch, PRF_NOHASSLE))))
} else if (!(DOOR_IS_UNLOCKED(ch, obj, door)) && IS_SET(flags_door[subcmd], NEED_UNLOCKED) &&
(GET_LEVEL(ch) < LVL_IMMORT || (!IS_NPC(ch) && !PRF_FLAGGED(ch, PRF_NOHASSLE))))
send_to_char(ch, "It seems to be locked.\r\n");
else if (!has_key(ch, keynum) && (GET_LEVEL(ch) < LVL_GOD) && ((subcmd == SCMD_LOCK) || (subcmd == SCMD_UNLOCK)))
send_to_char(ch, "You don't seem to have the proper key.\r\n");
@@ -683,7 +663,7 @@ ACMD(do_enter)
one_argument(argument, buf);
if (*buf) { /* an argument was supplied, search for door
if (*buf) { /* an argument was supplied, search for door
* keyword */
for (door = 0; door < DIR_COUNT; door++)
if (EXIT(ch, door))
@@ -699,12 +679,12 @@ ACMD(do_enter)
/* try to locate an entrance */
for (door = 0; door < DIR_COUNT; door++)
if (EXIT(ch, door))
if (EXIT(ch, door)->to_room != NOWHERE)
if (!EXIT_FLAGGED(EXIT(ch, door), EX_CLOSED) &&
ROOM_FLAGGED(EXIT(ch, door)->to_room, ROOM_INDOORS)) {
perform_move(ch, door, 1);
return;
}
if (EXIT(ch, door)->to_room != NOWHERE)
if (!EXIT_FLAGGED(EXIT(ch, door), EX_CLOSED) &&
ROOM_FLAGGED(EXIT(ch, door)->to_room, ROOM_INDOORS)) {
perform_move(ch, door, 1);
return;
}
send_to_char(ch, "You can't seem to find anything to enter.\r\n");
}
}
@@ -718,12 +698,12 @@ ACMD(do_leave)
else {
for (door = 0; door < DIR_COUNT; door++)
if (EXIT(ch, door))
if (EXIT(ch, door)->to_room != NOWHERE)
if (!EXIT_FLAGGED(EXIT(ch, door), EX_CLOSED) &&
!ROOM_FLAGGED(EXIT(ch, door)->to_room, ROOM_INDOORS)) {
perform_move(ch, door, 1);
return;
}
if (EXIT(ch, door)->to_room != NOWHERE)
if (!EXIT_FLAGGED(EXIT(ch, door), EX_CLOSED) &&
!ROOM_FLAGGED(EXIT(ch, door)->to_room, ROOM_INDOORS)) {
perform_move(ch, door, 1);
return;
}
send_to_char(ch, "I see no obvious exits to the outside.\r\n");
}
}
@@ -737,16 +717,16 @@ ACMD(do_stand)
case POS_SITTING:
send_to_char(ch, "You stand up.\r\n");
act("$n clambers to $s feet.", TRUE, ch, 0, 0, TO_ROOM);
/* Were they sitting in something? */
/* Were they sitting in something? */
char_from_furniture(ch);
/* Will be sitting after a successful bash and may still be fighting. */
/* Will be sitting after a successful bash and may still be fighting. */
GET_POS(ch) = FIGHTING(ch) ? POS_FIGHTING : POS_STANDING;
break;
case POS_RESTING:
send_to_char(ch, "You stop resting, and stand up.\r\n");
act("$n stops resting, and clambers on $s feet.", TRUE, ch, 0, 0, TO_ROOM);
GET_POS(ch) = POS_STANDING;
/* Were they sitting in something. */
/* Were they sitting in something. */
char_from_furniture(ch);
break;
case POS_SLEEPING:
@@ -758,7 +738,7 @@ ACMD(do_stand)
default:
send_to_char(ch, "You stop floating around, and put your feet on the ground.\r\n");
act("$n stops floating around, and puts $s feet on the ground.",
TRUE, ch, 0, 0, TO_ROOM);
TRUE, ch, 0, 0, TO_ROOM);
GET_POS(ch) = POS_STANDING;
break;
}
@@ -767,8 +747,8 @@ ACMD(do_stand)
ACMD(do_sit)
{
char arg[MAX_STRING_LENGTH];
struct obj_data *furniture;
struct char_data *tempch;
obj_data *furniture;
char_data *tempch;
int found;
one_argument(argument, arg);
@@ -799,7 +779,7 @@ ACMD(do_sit)
} else {
if (OBJ_SAT_IN_BY(furniture) == NULL)
OBJ_SAT_IN_BY(furniture) = ch;
for (tempch = OBJ_SAT_IN_BY(furniture); tempch != ch ; tempch = NEXT_SITTING(tempch)) {
for (tempch = OBJ_SAT_IN_BY(furniture); tempch != ch; tempch = NEXT_SITTING(tempch)) {
if (NEXT_SITTING(tempch))
continue;
NEXT_SITTING(tempch) = ch;
@@ -884,7 +864,7 @@ ACMD(do_sleep)
default:
send_to_char(ch, "You stop floating around, and lie down to sleep.\r\n");
act("$n stops floating around, and lie down to sleep.",
TRUE, ch, 0, 0, TO_ROOM);
TRUE, ch, 0, 0, TO_ROOM);
GET_POS(ch) = POS_SLEEPING;
break;
}
@@ -893,7 +873,7 @@ ACMD(do_sleep)
ACMD(do_wake)
{
char arg[MAX_INPUT_LENGTH];
struct char_data *vict;
char_data *vict;
int self = 0;
one_argument(argument, arg);
@@ -932,7 +912,7 @@ ACMD(do_wake)
ACMD(do_follow)
{
char buf[MAX_INPUT_LENGTH];
struct char_data *leader;
char_data *leader;
one_argument(argument, buf);
@@ -942,9 +922,9 @@ ACMD(do_follow)
return;
}
} else {
if (ch->master != (char_data*) NULL) {
send_to_char(ch, "You are following %s.\r\n",
GET_NAME(ch->master));
if (ch->master != (char_data *)NULL) {
send_to_char(ch, "You are following %s.\r\n",
GET_NAME(ch->master));
} else {
send_to_char(ch, "Whom do you wish to follow?\r\n");
}
@@ -957,7 +937,7 @@ ACMD(do_follow)
}
if (AFF_FLAGGED(ch, AFF_CHARM) && (ch->master)) {
act("But you only feel like following $N!", FALSE, ch, 0, ch->master, TO_CHAR);
} else { /* Not Charmed follow person */
} else { /* Not Charmed follow person */
if (leader == ch) {
if (!ch->master) {
send_to_char(ch, "You are already following yourself.\r\n");
@@ -980,9 +960,9 @@ ACMD(do_follow)
ACMD(do_unfollow)
{
if (ch->master) {
if (AFF_FLAGGED(ch, AFF_CHARM)) {
send_to_char(ch, "You feel compelled to follow %s.\r\n",
GET_NAME(ch->master));
if (AFF_FLAGGED(ch, AFF_CHARM)) {
send_to_char(ch, "You feel compelled to follow %s.\r\n",
GET_NAME(ch->master));
} else {
stop_follower(ch);
}

View File

@@ -24,7 +24,7 @@
ACMD(do_assist)
{
char arg[MAX_INPUT_LENGTH];
struct char_data *helpee, *opponent;
char_data *helpee, *opponent;
if (FIGHTING(ch)) {
send_to_char(ch, "You're already fighting! How can you assist someone else?\r\n");
@@ -46,14 +46,14 @@ ACMD(do_assist)
opponent = FIGHTING(helpee);
else
for (opponent = world[IN_ROOM(ch)].people;
opponent && (FIGHTING(opponent) != helpee);
opponent = opponent->next_in_room);
opponent && (FIGHTING(opponent) != helpee);
opponent = opponent->next_in_room);
if (!opponent)
act("But nobody is fighting $M!", FALSE, ch, 0, helpee, TO_CHAR);
else if (!CAN_SEE(ch, opponent))
act("You can't see who is fighting $M!", FALSE, ch, 0, helpee, TO_CHAR);
/* prevent accidental pkill */
/* prevent accidental pkill */
else if (!CONFIG_PK_ALLOWED && !IS_NPC(opponent))
send_to_char(ch, "You cannot kill other players.\r\n");
else {
@@ -68,9 +68,9 @@ ACMD(do_assist)
ACMD(do_hit)
{
char arg[MAX_INPUT_LENGTH];
struct char_data *vict;
char_data *vict;
one_argument(argument, arg);
one_argument(argument, arg);
if (!*arg)
send_to_char(ch, "Hit who?\r\n");
@@ -82,23 +82,24 @@ ACMD(do_hit)
} else if (AFF_FLAGGED(ch, AFF_CHARM) && (ch->master == vict))
act("$N is just such a good friend, you simply can't hit $M.", FALSE, ch, 0, vict, TO_CHAR);
else {
if (!CONFIG_PK_ALLOWED && !IS_NPC(vict) && !IS_NPC(ch))
if (!CONFIG_PK_ALLOWED && !IS_NPC(vict) && !IS_NPC(ch))
check_killer(ch, vict);
if ((GET_POS(ch) == POS_STANDING) && (vict != FIGHTING(ch))) {
if (GET_DEX(ch) > GET_DEX(vict) || (GET_DEX(ch) == GET_DEX(vict) && rand_number(1, 2) == 1)) /* if faster */
hit(ch, vict, TYPE_UNDEFINED); /* first */
else hit(vict, ch, TYPE_UNDEFINED); /* or the victim is first */
WAIT_STATE(ch, PULSE_VIOLENCE + 2);
} else
send_to_char(ch, "You're fighting the best you can!\r\n");
}
if ((GET_POS(ch) == POS_STANDING) && (vict != FIGHTING(ch))) {
if (GET_DEX(ch) > GET_DEX(vict) || (GET_DEX(ch) == GET_DEX(vict) && rand_number(1, 2) == 1)) /* if faster */
hit(ch, vict, TYPE_UNDEFINED); /* first */
else
hit(vict, ch, TYPE_UNDEFINED); /* or the victim is first */
WAIT_STATE(ch, PULSE_VIOLENCE + 2);
} else
send_to_char(ch, "You're fighting the best you can!\r\n");
}
}
ACMD(do_kill)
{
char arg[MAX_INPUT_LENGTH];
struct char_data *vict;
char_data *vict;
if (GET_LEVEL(ch) < LVL_GRGOD || IS_NPC(ch) || !PRF_FLAGGED(ch, PRF_NOHASSLE)) {
do_hit(ch, argument, cmd, subcmd);
@@ -125,7 +126,7 @@ ACMD(do_kill)
ACMD(do_backstab)
{
char buf[MAX_INPUT_LENGTH];
struct char_data *vict;
char_data *vict;
int percent, prob;
if (IS_NPC(ch) || !GET_SKILL(ch, SKILL_BACKSTAB)) {
@@ -164,7 +165,7 @@ ACMD(do_backstab)
return;
}
percent = rand_number(1, 101); /* 101% is a complete failure */
percent = rand_number(1, 101); /* 101% is a complete failure */
prob = GET_SKILL(ch, SKILL_BACKSTAB);
if (AWAKE(vict) && (percent > prob))
@@ -179,7 +180,7 @@ ACMD(do_order)
{
char name[MAX_INPUT_LENGTH], message[MAX_INPUT_LENGTH];
bool found = FALSE;
struct char_data *vict;
char_data *vict;
struct follow_type *k;
half_chop(argument, name, message);
@@ -208,7 +209,7 @@ ACMD(do_order)
send_to_char(ch, "%s", CONFIG_OK);
command_interpreter(vict, message);
}
} else { /* This is order "followers" */
} else { /* This is order "followers" */
char buf[MAX_STRING_LENGTH];
snprintf(buf, sizeof(buf), "$n issues the order '%s'.", message);
@@ -232,7 +233,7 @@ ACMD(do_order)
ACMD(do_flee)
{
int i, attempt, loss;
struct char_data *was_fighting;
char_data *was_fighting;
if (GET_POS(ch) < POS_FIGHTING) {
send_to_char(ch, "You are in pretty bad shape, unable to flee!\r\n");
@@ -242,22 +243,22 @@ ACMD(do_flee)
for (i = 0; i < 6; i++) {
attempt = rand_number(0, DIR_COUNT - 1); /* Select a random direction */
if (CAN_GO(ch, attempt) &&
!ROOM_FLAGGED(EXIT(ch, attempt)->to_room, ROOM_DEATH)) {
!ROOM_FLAGGED(EXIT(ch, attempt)->to_room, ROOM_DEATH)) {
act("$n panics, and attempts to flee!", TRUE, ch, 0, 0, TO_ROOM);
was_fighting = FIGHTING(ch);
if (do_simple_move(ch, attempt, TRUE)) {
send_to_char(ch, "You flee head over heels.\r\n");
send_to_char(ch, "You flee head over heels.\r\n");
if (was_fighting && !IS_NPC(ch)) {
loss = GET_MAX_HIT(was_fighting) - GET_HIT(was_fighting);
loss *= GET_LEVEL(was_fighting);
gain_exp(ch, -loss);
loss = GET_MAX_HIT(was_fighting) - GET_HIT(was_fighting);
loss *= GET_LEVEL(was_fighting);
gain_exp(ch, -loss);
}
if (FIGHTING(ch))
stop_fighting(ch);
if (was_fighting && ch == FIGHTING(was_fighting))
stop_fighting(was_fighting);
if (FIGHTING(ch))
stop_fighting(ch);
if (was_fighting && ch == FIGHTING(was_fighting))
stop_fighting(was_fighting);
} else {
act("$n tries to flee, but can't!", TRUE, ch, 0, 0, TO_ROOM);
act("$n tries to flee, but can't!", TRUE, ch, 0, 0, TO_ROOM);
}
return;
}
@@ -268,7 +269,7 @@ ACMD(do_flee)
ACMD(do_bash)
{
char arg[MAX_INPUT_LENGTH];
struct char_data *vict;
char_data *vict;
int percent, prob;
one_argument(argument, arg);
@@ -302,7 +303,7 @@ ACMD(do_bash)
return;
}
percent = rand_number(1, 101); /* 101% is a complete failure */
percent = rand_number(1, 101); /* 101% is a complete failure */
prob = GET_SKILL(ch, SKILL_BASH);
if (MOB_FLAGGED(vict, MOB_NOBASH))
@@ -318,7 +319,7 @@ ACMD(do_bash)
* first to make sure they don't flee, then we can't bash them! So now
* we only set them sitting if they didn't flee. -gg 9/21/98
*/
if (damage(ch, vict, 1, SKILL_BASH) > 0) { /* -1 = dead, 0 = miss */
if (damage(ch, vict, 1, SKILL_BASH) > 0) { /* -1 = dead, 0 = miss */
WAIT_STATE(vict, PULSE_VIOLENCE);
if (IN_ROOM(ch) == IN_ROOM(vict))
GET_POS(vict) = POS_SITTING;
@@ -330,7 +331,7 @@ ACMD(do_bash)
ACMD(do_rescue)
{
char arg[MAX_INPUT_LENGTH];
struct char_data *vict, *tmp_ch;
char_data *vict, *tmp_ch;
int percent, prob;
if (IS_NPC(ch) || !GET_SKILL(ch, SKILL_RESCUE)) {
@@ -353,21 +354,21 @@ ACMD(do_rescue)
return;
}
for (tmp_ch = world[IN_ROOM(ch)].people; tmp_ch &&
(FIGHTING(tmp_ch) != vict); tmp_ch = tmp_ch->next_in_room);
(FIGHTING(tmp_ch) != vict); tmp_ch = tmp_ch->next_in_room);
if ((FIGHTING(vict) != NULL) && (FIGHTING(ch) == FIGHTING(vict)) && (tmp_ch == NULL)) {
tmp_ch = FIGHTING(vict);
if (FIGHTING(tmp_ch) == ch) {
send_to_char(ch, "You have already rescued %s from %s.\r\n", GET_NAME(vict), GET_NAME(FIGHTING(ch)));
return;
}
tmp_ch = FIGHTING(vict);
if (FIGHTING(tmp_ch) == ch) {
send_to_char(ch, "You have already rescued %s from %s.\r\n", GET_NAME(vict), GET_NAME(FIGHTING(ch)));
return;
}
}
if (!tmp_ch) {
act("But nobody is fighting $M!", FALSE, ch, 0, vict, TO_CHAR);
return;
}
percent = rand_number(1, 101); /* 101% is a complete failure */
percent = rand_number(1, 101); /* 101% is a complete failure */
prob = GET_SKILL(ch, SKILL_RESCUE);
if (percent > prob) {
@@ -393,51 +394,51 @@ ACMD(do_rescue)
EVENTFUNC(event_whirlwind)
{
struct char_data *ch, *tch;
char_data *ch, *tch;
struct mud_event_data *pMudEvent;
struct list_data *room_list;
int count;
/* This is just a dummy check, but we'll do it anyway */
if (event_obj == NULL)
return 0;
/* For the sake of simplicity, we will place the event data in easily
* referenced pointers */
pMudEvent = (struct mud_event_data *) event_obj;
ch = (struct char_data *) pMudEvent->pStruct;
* referenced pointers */
pMudEvent = (struct mud_event_data *)event_obj;
ch = (char_data *)pMudEvent->pStruct;
/* When using a list, we have to make sure to allocate the list as it
* uses dynamic memory */
room_list = create_list();
/* We search through the "next_in_room", and grab all NPCs and add them
* to our list */
for (tch = world[IN_ROOM(ch)].people; tch; tch = tch->next_in_room)
for (tch = world[IN_ROOM(ch)].people; tch; tch = tch->next_in_room)
if (IS_NPC(tch))
add_to_list(tch, room_list);
/* If our list is empty or has "0" entries, we free it from memory and
* close off our event */
* close off our event */
if (room_list->iSize == 0) {
free_list(room_list);
send_to_char(ch, "There is no one in the room to whirlwind!\r\n");
return 0;
}
/* We spit out some ugly colour, making use of the new colour options,
* to let the player know they are performing their whirlwind strike */
send_to_char(ch, "\t[f313]You deliver a vicious \t[f014]\t[b451]WHIRLWIND!!!\tn\r\n");
/* Lets grab some a random NPC from the list, and hit() them up */
for (count = dice(1, 4); count > 0; count--) {
tch = random_from_list(room_list);
hit(ch, tch, TYPE_UNDEFINED);
}
/* Now that our attack is done, let's free out list */
free_list(room_list);
/* The "return" of the event function is the time until the event is called
* again. If we return 0, then the event is freed and removed from the list, but
* any other numerical response will be the delay until the next call */
@@ -452,12 +453,12 @@ EVENTFUNC(event_whirlwind)
* mud event and list systems. */
ACMD(do_whirlwind)
{
if (IS_NPC(ch) || !GET_SKILL(ch, SKILL_WHIRLWIND)) {
send_to_char(ch, "You have no idea how.\r\n");
return;
}
if ROOM_FLAGGED(IN_ROOM(ch), ROOM_PEACEFUL) {
send_to_char(ch, "This room just has such a peaceful, easy feeling...\r\n");
return;
@@ -465,22 +466,22 @@ ACMD(do_whirlwind)
if (GET_POS(ch) < POS_FIGHTING) {
send_to_char(ch, "You must be on your feet to perform a whirlwind.\r\n");
return;
return;
}
/* First thing we do is check to make sure the character is not in the middle
* of a whirl wind attack.
*
*
* "char_had_mud_event() will sift through the character's event list to see if
* an event of type "eWHIRLWIND" currently exists. */
if (char_has_mud_event(ch, eWHIRLWIND)) {
send_to_char(ch, "You are already attempting that!\r\n");
return;
return;
}
send_to_char(ch, "You begin to spin rapidly in circles.\r\n");
act("$n begins to rapidly spin in a circle!", FALSE, ch, 0, 0, TO_ROOM);
/* NEW_EVENT() will add a new mud event to the event list of the character.
* This function below adds a new event of "eWHIRLWIND", to "ch", and passes "NULL" as
* additional data. The event will be called in "3 * PASSES_PER_SEC" or 3 seconds */
@@ -491,7 +492,7 @@ ACMD(do_whirlwind)
ACMD(do_kick)
{
char arg[MAX_INPUT_LENGTH];
struct char_data *vict;
char_data *vict;
int percent, prob;
if (IS_NPC(ch) || !GET_SKILL(ch, SKILL_KICK)) {
@@ -509,6 +510,8 @@ ACMD(do_kick)
return;
}
}
log("ch class = %d vict class = %d", GET_CLASS(ch), GET_CLASS(vict));
if (vict == ch) {
send_to_char(ch, "Aren't we funny today...\r\n");
return;
@@ -528,11 +531,10 @@ ACMD(do_kick)
ACMD(do_bandage)
{
char arg[MAX_INPUT_LENGTH];
struct char_data * vict;
char_data *vict;
int percent, prob;
if (!GET_SKILL(ch, SKILL_BANDAGE))
{
if (!GET_SKILL(ch, SKILL_BANDAGE)) {
send_to_char(ch, "You are unskilled in the art of bandaging.\r\n");
return;
}
@@ -556,21 +558,21 @@ ACMD(do_bandage)
WAIT_STATE(ch, PULSE_VIOLENCE * 2);
percent = rand_number(1, 101); /* 101% is a complete failure */
percent = rand_number(1, 101); /* 101% is a complete failure */
prob = GET_SKILL(ch, SKILL_BANDAGE);
if (percent <= prob) {
act("Your attempt to bandage fails.", FALSE, ch, 0, 0, TO_CHAR);
act("$n tries to bandage $N, but fails miserably.", TRUE, ch,
0, vict, TO_NOTVICT);
act("$n tries to bandage $N, but fails miserably.", TRUE, ch,
0, vict, TO_NOTVICT);
damage(vict, vict, 2, TYPE_SUFFERING);
return;
}
act("You successfully bandage $N.", FALSE, ch, 0, vict, TO_CHAR);
act("$n bandages $N, who looks a bit better now.", TRUE, ch, 0,
vict, TO_NOTVICT);
act("$n bandages $N, who looks a bit better now.", TRUE, ch, 0,
vict, TO_NOTVICT);
act("Someone bandages you, and you feel a bit better now.",
FALSE, ch, 0, vict, TO_VICT);
FALSE, ch, 0, vict, TO_VICT);
GET_HIT(vict) = 0;
}

View File

@@ -32,8 +32,8 @@
/* Local defined utility functions */
/* do_group utility functions */
static void print_group(struct char_data *ch);
static void display_group_list(struct char_data * ch);
static void print_group(char_data *ch);
static void display_group_list(char_data *ch);
ACMD(do_quit)
{
@@ -72,7 +72,7 @@ ACMD(do_quit)
ch->desc->snoop_by = NULL;
}
extract_char(ch); /* Char is saved before extracting. */
extract_char(ch); /* Char is saved before extracting. */
}
}
@@ -109,7 +109,7 @@ ACMD(do_sneak)
if (AFF_FLAGGED(ch, AFF_SNEAK))
affect_from_char(ch, SKILL_SNEAK);
percent = rand_number(1, 101); /* 101% is a complete failure */
percent = rand_number(1, 101); /* 101% is a complete failure */
if (percent > GET_SKILL(ch, SKILL_SNEAK) + dex_app_skill[GET_DEX(ch)].sneak)
return;
@@ -135,7 +135,7 @@ ACMD(do_hide)
if (AFF_FLAGGED(ch, AFF_HIDE))
REMOVE_BIT_AR(AFF_FLAGS(ch), AFF_HIDE);
percent = rand_number(1, 101); /* 101% is a complete failure */
percent = rand_number(1, 101); /* 101% is a complete failure */
if (percent > GET_SKILL(ch, SKILL_HIDE) + dex_app_skill[GET_DEX(ch)].hide)
return;
@@ -145,8 +145,8 @@ ACMD(do_hide)
ACMD(do_steal)
{
struct char_data *vict;
struct obj_data *obj;
char_data *vict;
obj_data *obj;
char vict_name[MAX_INPUT_LENGTH], obj_name[MAX_INPUT_LENGTH];
int percent, gold, eq_pos, pcsteal = 0, ohoh = 0;
@@ -173,73 +173,73 @@ ACMD(do_steal)
percent = rand_number(1, 101) - dex_app_skill[GET_DEX(ch)].p_pocket;
if (GET_POS(vict) < POS_SLEEPING)
percent = -1; /* ALWAYS SUCCESS, unless heavy object. */
percent = -1; /* ALWAYS SUCCESS, unless heavy object. */
if (!CONFIG_PT_ALLOWED && !IS_NPC(vict))
pcsteal = 1;
if (!AWAKE(vict)) /* Easier to steal from sleeping people. */
if (!AWAKE(vict)) /* Easier to steal from sleeping people. */
percent -= 50;
/* No stealing if not allowed. If it is no stealing from Imm's or Shopkeepers. */
if (GET_LEVEL(vict) >= LVL_IMMORT || pcsteal || GET_MOB_SPEC(vict) == shop_keeper)
percent = 101; /* Failure */
percent = 101; /* Failure */
if (str_cmp(obj_name, "coins") && str_cmp(obj_name, "gold")) {
if (!(obj = get_obj_in_list_vis(ch, obj_name, NULL, vict->carrying))) {
for (eq_pos = 0; eq_pos < NUM_WEARS; eq_pos++)
if (GET_EQ(vict, eq_pos) &&
(isname(obj_name, GET_EQ(vict, eq_pos)->name)) &&
CAN_SEE_OBJ(ch, GET_EQ(vict, eq_pos))) {
obj = GET_EQ(vict, eq_pos);
break;
}
if (GET_EQ(vict, eq_pos) &&
(isname(obj_name, GET_EQ(vict, eq_pos)->name)) &&
CAN_SEE_OBJ(ch, GET_EQ(vict, eq_pos))) {
obj = GET_EQ(vict, eq_pos);
break;
}
if (!obj) {
act("$E hasn't got that item.", FALSE, ch, 0, vict, TO_CHAR);
return;
} else { /* It is equipment */
if ((GET_POS(vict) > POS_STUNNED)) {
send_to_char(ch, "Steal the equipment now? Impossible!\r\n");
return;
} else {
act("$E hasn't got that item.", FALSE, ch, 0, vict, TO_CHAR);
return;
} else { /* It is equipment */
if ((GET_POS(vict) > POS_STUNNED)) {
send_to_char(ch, "Steal the equipment now? Impossible!\r\n");
return;
} else {
if (!give_otrigger(obj, vict, ch) ||
!receive_mtrigger(ch, vict, obj) ) {
!receive_mtrigger(ch, vict, obj)) {
send_to_char(ch, "Impossible!\r\n");
return;
}
act("You unequip $p and steal it.", FALSE, ch, obj, 0, TO_CHAR);
act("$n steals $p from $N.", FALSE, ch, obj, vict, TO_NOTVICT);
obj_to_char(unequip_char(vict, eq_pos), ch);
}
act("You unequip $p and steal it.", FALSE, ch, obj, 0, TO_CHAR);
act("$n steals $p from $N.", FALSE, ch, obj, vict, TO_NOTVICT);
obj_to_char(unequip_char(vict, eq_pos), ch);
}
}
} else { /* obj found in inventory */
} else { /* obj found in inventory */
percent += GET_OBJ_WEIGHT(obj); /* Make heavy harder */
percent += GET_OBJ_WEIGHT(obj); /* Make heavy harder */
if (percent > GET_SKILL(ch, SKILL_STEAL)) {
ohoh = TRUE;
send_to_char(ch, "Oops..\r\n");
act("$n tried to steal something from you!", FALSE, ch, 0, vict, TO_VICT);
act("$n tries to steal something from $N.", TRUE, ch, 0, vict, TO_NOTVICT);
} else { /* Steal the item */
if (IS_CARRYING_N(ch) + 1 < CAN_CARRY_N(ch)) {
ohoh = TRUE;
send_to_char(ch, "Oops..\r\n");
act("$n tried to steal something from you!", FALSE, ch, 0, vict, TO_VICT);
act("$n tries to steal something from $N.", TRUE, ch, 0, vict, TO_NOTVICT);
} else { /* Steal the item */
if (IS_CARRYING_N(ch) + 1 < CAN_CARRY_N(ch)) {
if (!give_otrigger(obj, vict, ch) ||
!receive_mtrigger(ch, vict, obj) ) {
!receive_mtrigger(ch, vict, obj)) {
send_to_char(ch, "Impossible!\r\n");
return;
}
if (IS_CARRYING_W(ch) + GET_OBJ_WEIGHT(obj) < CAN_CARRY_W(ch)) {
obj_from_char(obj);
obj_to_char(obj, ch);
send_to_char(ch, "Got it!\r\n");
}
} else
send_to_char(ch, "You cannot carry that much.\r\n");
if (IS_CARRYING_W(ch) + GET_OBJ_WEIGHT(obj) < CAN_CARRY_W(ch)) {
obj_from_char(obj);
obj_to_char(obj, ch);
send_to_char(ch, "Got it!\r\n");
}
} else
send_to_char(ch, "You cannot carry that much.\r\n");
}
}
} else { /* Steal some coins */
} else { /* Steal some coins */
if (AWAKE(vict) && (percent > GET_SKILL(ch, SKILL_STEAL))) {
ohoh = TRUE;
send_to_char(ch, "Oops..\r\n");
@@ -250,14 +250,14 @@ ACMD(do_steal)
gold = (GET_GOLD(vict) * rand_number(1, 10)) / 100;
gold = MIN(1782, gold);
if (gold > 0) {
increase_gold(ch, gold);
decrease_gold(vict, gold);
increase_gold(ch, gold);
decrease_gold(vict, gold);
if (gold > 1)
send_to_char(ch, "Bingo! You got %d gold coins.\r\n", gold);
else
send_to_char(ch, "You manage to swipe a solitary gold coin.\r\n");
send_to_char(ch, "Bingo! You got %d gold coins.\r\n", gold);
else
send_to_char(ch, "You manage to swipe a solitary gold coin.\r\n");
} else {
send_to_char(ch, "You couldn't get any gold...\r\n");
send_to_char(ch, "You couldn't get any gold...\r\n");
}
}
}
@@ -315,61 +315,62 @@ ACMD(do_title)
}
}
static void print_group(struct char_data *ch)
static void print_group(char_data *ch)
{
struct char_data * k;
char_data *k;
send_to_char(ch, "Your group consists of:\r\n");
while ((k = (struct char_data *) simple_list(ch->group->members)) != NULL)
while ((k = (char_data *)simple_list(ch->group->members)) != NULL)
send_to_char(ch, "%-*s: %s[%4d/%-4d]H [%4d/%-4d]M [%4d/%-4d]V%s\r\n",
count_color_chars(GET_NAME(k))+22, GET_NAME(k),
GROUP_LEADER(GROUP(ch)) == k ? CBGRN(ch, C_NRM) : CCGRN(ch, C_NRM),
GET_HIT(k), GET_MAX_HIT(k),
GET_MANA(k), GET_MAX_MANA(k),
GET_MOVE(k), GET_MAX_MOVE(k),
CCNRM(ch, C_NRM));
count_color_chars(GET_NAME(k)) + 22, GET_NAME(k),
GROUP_LEADER(GROUP(ch)) == k ? CBGRN(ch, C_NRM) : CCGRN(ch, C_NRM),
GET_HIT(k), GET_MAX_HIT(k),
GET_MANA(k), GET_MAX_MANA(k),
GET_MOVE(k), GET_MAX_MOVE(k),
CCNRM(ch, C_NRM));
}
static void display_group_list(struct char_data * ch)
static void display_group_list(char_data *ch)
{
struct group_data * group;
struct group_data *group;
int count = 0;
if (group_list->iSize) {
send_to_char(ch, "# Group Leader # of Members In Zone\r\n"
"---------------------------------------------------\r\n");
while ((group = (struct group_data *) simple_list(group_list)) != NULL) {
if (IS_SET(GROUP_FLAGS(group), GROUP_NPC))
continue;
"---------------------------------------------------\r\n");
while ((group = (struct group_data *)simple_list(group_list)) != NULL) {
if (IS_SET(GROUP_FLAGS(group), GROUP_NPC))
continue;
if (GROUP_LEADER(group) && !IS_SET(GROUP_FLAGS(group), GROUP_ANON))
send_to_char(ch, "%-2d) %s%-12s %-2d %s%s\r\n",
++count,
IS_SET(GROUP_FLAGS(group), GROUP_OPEN) ? CCGRN(ch, C_NRM) : CCRED(ch, C_NRM),
GET_NAME(GROUP_LEADER(group)), group->members->iSize, zone_table[world[IN_ROOM(GROUP_LEADER(group))].zone].name,
CCNRM(ch, C_NRM));
send_to_char(ch, "%-2d) %s%-12s %-2d %s%s\r\n",
++count,
IS_SET(GROUP_FLAGS(group), GROUP_OPEN) ? CCGRN(ch, C_NRM) : CCRED(ch, C_NRM),
GET_NAME(GROUP_LEADER(group)), group->members->iSize,
zone_table[world[IN_ROOM(GROUP_LEADER(group))].zone].name,
CCNRM(ch, C_NRM));
else
send_to_char(ch, "%-2d) Hidden\r\n", ++count);
}
}
}
if (count)
send_to_char(ch, "\r\n"
"%sSeeking Members%s\r\n"
"%sClosed%s\r\n",
CCGRN(ch, C_NRM), CCNRM(ch, C_NRM),
CCRED(ch, C_NRM), CCNRM(ch, C_NRM));
"%sSeeking Members%s\r\n"
"%sClosed%s\r\n",
CCGRN(ch, C_NRM), CCNRM(ch, C_NRM),
CCRED(ch, C_NRM), CCNRM(ch, C_NRM));
else
send_to_char(ch, "\r\n"
"Currently no groups formed.\r\n");
"Currently no groups formed.\r\n");
}
/* Vatiken's Group System: Version 1.1 */
ACMD(do_group)
{
char buf[MAX_STRING_LENGTH];
struct char_data *vict;
char_data *vict;
argument = one_argument(argument, buf);
@@ -380,7 +381,7 @@ ACMD(do_group)
send_to_char(ch, "You must specify a group option, or type HELP GROUP for more info.\r\n");
return;
}
if (is_abbrev(buf, "new")) {
if (GROUP(ch))
send_to_char(ch, "You are already in a group.\r\n");
@@ -405,8 +406,8 @@ ACMD(do_group)
} else if (!IS_SET(GROUP_FLAGS(GROUP(vict)), GROUP_OPEN)) {
send_to_char(ch, "That group isn't accepting members.\r\n");
return;
}
join_group(ch, GROUP(vict));
}
join_group(ch, GROUP(vict));
} else if (is_abbrev(buf, "kick")) {
skip_spaces(&argument);
if (!(vict = get_char_vis(ch, argument, NULL, FIND_CHAR_ROOM))) {
@@ -415,18 +416,18 @@ ACMD(do_group)
} else if (vict == ch) {
send_to_char(ch, "There are easier ways to leave the group.\r\n");
return;
} else if (!GROUP(ch) ) {
} else if (!GROUP(ch)) {
send_to_char(ch, "But you are not part of a group.\r\n");
return;
} else if (GROUP_LEADER(GROUP(ch)) != ch ) {
} else if (GROUP_LEADER(GROUP(ch)) != ch) {
send_to_char(ch, "Only the group's leader can kick members out.\r\n");
return;
} else if (GROUP(vict) != GROUP(ch)) {
act("$E$u is not a member of your group!", FALSE, ch, 0, vict, TO_CHAR);
return;
}
}
send_to_char(ch, "You have kicked %s out of the group.\r\n", GET_NAME(vict));
send_to_char(vict, "You have been kicked out of the group.\r\n");
send_to_char(vict, "You have been kicked out of the group.\r\n");
leave_group(vict);
} else if (is_abbrev(buf, "regroup")) {
if (!GROUP(ch)) {
@@ -441,12 +442,12 @@ ACMD(do_group)
join_group(ch, GROUP(vict));
}
} else if (is_abbrev(buf, "leave")) {
if (!GROUP(ch)) {
send_to_char(ch, "But you aren't part of a group!\r\n");
return;
}
leave_group(ch);
} else if (is_abbrev(buf, "option")) {
skip_spaces(&argument);
@@ -459,14 +460,16 @@ ACMD(do_group)
}
if (is_abbrev(argument, "open")) {
TOGGLE_BIT(GROUP_FLAGS(GROUP(ch)), GROUP_OPEN);
send_to_char(ch, "The group is now %s to new members.\r\n", IS_SET(GROUP_FLAGS(GROUP(ch)), GROUP_OPEN) ? "open" : "closed");
send_to_char(ch, "The group is now %s to new members.\r\n",
IS_SET(GROUP_FLAGS(GROUP(ch)), GROUP_OPEN) ? "open" : "closed");
} else if (is_abbrev(argument, "anonymous")) {
TOGGLE_BIT(GROUP_FLAGS(GROUP(ch)), GROUP_ANON);
send_to_char(ch, "The group location is now %s to other players.\r\n", IS_SET(GROUP_FLAGS(GROUP(ch)), GROUP_ANON) ? "invisible" : "visible");
} else
send_to_char(ch, "The group location is now %s to other players.\r\n",
IS_SET(GROUP_FLAGS(GROUP(ch)), GROUP_ANON) ? "invisible" : "visible");
} else
send_to_char(ch, "The flag options are: Open, Anonymous\r\n");
} else {
send_to_char(ch, "You must specify a group option, or type HELP GROUP for more info.\r\n");
send_to_char(ch, "You must specify a group option, or type HELP GROUP for more info.\r\n");
}
}
@@ -481,10 +484,10 @@ ACMD(do_report)
}
send_to_group(NULL, group, "%s reports: %d/%dH, %d/%dM, %d/%dV\r\n",
GET_NAME(ch),
GET_HIT(ch), GET_MAX_HIT(ch),
GET_MANA(ch), GET_MAX_MANA(ch),
GET_MOVE(ch), GET_MAX_MOVE(ch));
GET_NAME(ch),
GET_HIT(ch), GET_MAX_HIT(ch),
GET_MANA(ch), GET_MAX_MANA(ch),
GET_MOVE(ch), GET_MAX_MOVE(ch));
}
ACMD(do_split)
@@ -492,8 +495,8 @@ ACMD(do_split)
char buf[MAX_INPUT_LENGTH];
int amount, num = 0, share, rest;
size_t len;
struct char_data *k;
char_data *k;
if (IS_NPC(ch))
return;
@@ -509,9 +512,9 @@ ACMD(do_split)
send_to_char(ch, "You don't seem to have that much gold to split.\r\n");
return;
}
if (GROUP(ch))
while ((k = (struct char_data *) simple_list(GROUP(ch)->members)) != NULL)
while ((k = (char_data *)simple_list(GROUP(ch)->members)) != NULL)
if (IN_ROOM(ch) == IN_ROOM(k) && !IS_NPC(k))
num++;
@@ -527,25 +530,25 @@ ACMD(do_split)
/* Abusing signed/unsigned to make sizeof work. */
len = snprintf(buf, sizeof(buf), "%s splits %d coins; you receive %d.\r\n",
GET_NAME(ch), amount, share);
GET_NAME(ch), amount, share);
if (rest && len < sizeof(buf)) {
snprintf(buf + len, sizeof(buf) - len,
"%d coin%s %s not splitable, so %s keeps the money.\r\n", rest,
(rest == 1) ? "" : "s", (rest == 1) ? "was" : "were", GET_NAME(ch));
"%d coin%s %s not splitable, so %s keeps the money.\r\n", rest,
(rest == 1) ? "" : "s", (rest == 1) ? "was" : "were", GET_NAME(ch));
}
while ((k = (struct char_data *) simple_list(GROUP(ch)->members)) != NULL)
while ((k = (char_data *)simple_list(GROUP(ch)->members)) != NULL)
if (k != ch && IN_ROOM(ch) == IN_ROOM(k) && !IS_NPC(k)) {
increase_gold(k, share);
send_to_char(k, "%s", buf);
}
increase_gold(k, share);
send_to_char(k, "%s", buf);
}
send_to_char(ch, "You split %d coins among %d members -- %d coins each.\r\n",
amount, num, share);
amount, num, share);
if (rest) {
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");
}
} else {
send_to_char(ch, "How many coins do you wish to split with your group?\r\n");
@@ -556,7 +559,7 @@ ACMD(do_split)
ACMD(do_use)
{
char buf[MAX_INPUT_LENGTH], arg[MAX_INPUT_LENGTH];
struct obj_data *mag_item;
obj_data *mag_item;
half_chop(argument, arg, buf);
if (!*arg) {
@@ -570,8 +573,8 @@ ACMD(do_use)
case SCMD_RECITE:
case SCMD_QUAFF:
if (!(mag_item = get_obj_in_list_vis(ch, arg, NULL, ch->carrying))) {
send_to_char(ch, "You don't seem to have %s %s.\r\n", AN(arg), arg);
return;
send_to_char(ch, "You don't seem to have %s %s.\r\n", AN(arg), arg);
return;
}
break;
case SCMD_USE:
@@ -579,8 +582,8 @@ ACMD(do_use)
return;
default:
log("SYSERR: Unknown subcmd %d passed to do_use.", subcmd);
/* SYSERR_DESC: This is the same as the unhandled case in do_gen_ps(),
* but in the function which handles 'quaff', 'recite', and 'use'. */
/* SYSERR_DESC: This is the same as the unhandled case in do_gen_ps(),
* but in the function which handles 'quaff', 'recite', and 'use'. */
return;
}
}
@@ -599,7 +602,7 @@ ACMD(do_use)
break;
case SCMD_USE:
if ((GET_OBJ_TYPE(mag_item) != ITEM_WAND) &&
(GET_OBJ_TYPE(mag_item) != ITEM_STAFF)) {
(GET_OBJ_TYPE(mag_item) != ITEM_STAFF)) {
send_to_char(ch, "You can't seem to figure out how to use it.\r\n");
return;
}
@@ -647,16 +650,16 @@ ACMD(do_display)
switch (LOWER(argument[i])) {
case 'h':
SET_BIT_AR(PRF_FLAGS(ch), PRF_DISPHP);
break;
break;
case 'm':
SET_BIT_AR(PRF_FLAGS(ch), PRF_DISPMANA);
break;
break;
case 'v':
SET_BIT_AR(PRF_FLAGS(ch), PRF_DISPMOVE);
break;
break;
default:
send_to_char(ch, "Usage: prompt { { H | M | V } | all | auto | none }\r\n");
return;
send_to_char(ch, "Usage: prompt { { H | M | V } | all | auto | none }\r\n");
return;
}
}
}
@@ -673,64 +676,64 @@ ACMD(do_gen_tog)
char arg[MAX_INPUT_LENGTH];
const char *tog_messages[][2] = {
{"You are now safe from summoning by other players.\r\n",
"You may now be summoned by other players.\r\n"},
{"Nohassle disabled.\r\n",
"Nohassle enabled.\r\n"},
{"Brief mode off.\r\n",
"Brief mode on.\r\n"},
{"Compact mode off.\r\n",
"Compact mode on.\r\n"},
{"You can now hear tells.\r\n",
"You are now deaf to tells.\r\n"},
{"You can now hear auctions.\r\n",
"You are now deaf to auctions.\r\n"},
{"You can now hear shouts.\r\n",
"You are now deaf to shouts.\r\n"},
{"You can now hear gossip.\r\n",
"You are now deaf to gossip.\r\n"},
{"You can now hear the congratulation messages.\r\n",
"You are now deaf to the congratulation messages.\r\n"},
{"You can now hear the Wiz-channel.\r\n",
"You are now deaf to the Wiz-channel.\r\n"},
{"You are no longer part of the Quest.\r\n",
"Okay, you are part of the Quest!\r\n"},
{"You will no longer see the room flags.\r\n",
"You will now see the room flags.\r\n"},
{"You will now have your communication repeated.\r\n",
"You will no longer have your communication repeated.\r\n"},
{"HolyLight mode off.\r\n",
"HolyLight mode on.\r\n"},
{"Nameserver_is_slow changed to NO; IP addresses will now be resolved.\r\n",
"Nameserver_is_slow changed to YES; sitenames will no longer be resolved.\r\n"},
{"Autoexits disabled.\r\n",
"Autoexits enabled.\r\n"},
{"Will no longer track through doors.\r\n",
"Will now track through doors.\r\n"},
{"Will no longer clear screen in OLC.\r\n",
"Will now clear screen in OLC.\r\n"},
{"Buildwalk Off.\r\n",
"Buildwalk On.\r\n"},
{"AFK flag is now off.\r\n",
"AFK flag is now on.\r\n"},
{"Autoloot disabled.\r\n",
"Autoloot enabled.\r\n"},
{"Autogold disabled.\r\n",
"Autogold enabled.\r\n"},
{"Autosplit disabled.\r\n",
"Autosplit enabled.\r\n"},
{"Autosacrifice disabled.\r\n",
"Autosacrifice enabled.\r\n"},
{"Autoassist disabled.\r\n",
"Autoassist enabled.\r\n"},
{"Automap disabled.\r\n",
"Automap enabled.\r\n"},
{"Autokey disabled.\r\n",
"Autokey enabled.\r\n"},
{"Autodoor disabled.\r\n",
"Autodoor enabled.\r\n"},
{"ZoneResets disabled.\r\n",
"ZoneResets enabled.\r\n"}
{"You are now safe from summoning by other players.\r\n",
"You may now be summoned by other players.\r\n"},
{"Nohassle disabled.\r\n",
"Nohassle enabled.\r\n"},
{"Brief mode off.\r\n",
"Brief mode on.\r\n"},
{"Compact mode off.\r\n",
"Compact mode on.\r\n"},
{"You can now hear tells.\r\n",
"You are now deaf to tells.\r\n"},
{"You can now hear auctions.\r\n",
"You are now deaf to auctions.\r\n"},
{"You can now hear shouts.\r\n",
"You are now deaf to shouts.\r\n"},
{"You can now hear gossip.\r\n",
"You are now deaf to gossip.\r\n"},
{"You can now hear the congratulation messages.\r\n",
"You are now deaf to the congratulation messages.\r\n"},
{"You can now hear the Wiz-channel.\r\n",
"You are now deaf to the Wiz-channel.\r\n"},
{"You are no longer part of the Quest.\r\n",
"Okay, you are part of the Quest!\r\n"},
{"You will no longer see the room flags.\r\n",
"You will now see the room flags.\r\n"},
{"You will now have your communication repeated.\r\n",
"You will no longer have your communication repeated.\r\n"},
{"HolyLight mode off.\r\n",
"HolyLight mode on.\r\n"},
{"Nameserver_is_slow changed to NO; IP addresses will now be resolved.\r\n",
"Nameserver_is_slow changed to YES; sitenames will no longer be resolved.\r\n"},
{"Autoexits disabled.\r\n",
"Autoexits enabled.\r\n"},
{"Will no longer track through doors.\r\n",
"Will now track through doors.\r\n"},
{"Will no longer clear screen in OLC.\r\n",
"Will now clear screen in OLC.\r\n"},
{"Buildwalk Off.\r\n",
"Buildwalk On.\r\n"},
{"AFK flag is now off.\r\n",
"AFK flag is now on.\r\n"},
{"Autoloot disabled.\r\n",
"Autoloot enabled.\r\n"},
{"Autogold disabled.\r\n",
"Autogold enabled.\r\n"},
{"Autosplit disabled.\r\n",
"Autosplit enabled.\r\n"},
{"Autosacrifice disabled.\r\n",
"Autosacrifice enabled.\r\n"},
{"Autoassist disabled.\r\n",
"Autoassist enabled.\r\n"},
{"Automap disabled.\r\n",
"Automap enabled.\r\n"},
{"Autokey disabled.\r\n",
"Autokey enabled.\r\n"},
{"Autodoor disabled.\r\n",
"Autodoor enabled.\r\n"},
{"ZoneResets disabled.\r\n",
"ZoneResets enabled.\r\n"}
};
if (IS_NPC(ch))
@@ -784,7 +787,7 @@ ACMD(do_gen_tog)
break;
case SCMD_CLS:
result = PRF_TOG_CHK(ch, PRF_CLS);
break;
break;
case SCMD_BUILDWALK:
if (GET_LEVEL(ch) < LVL_BUILDER) {
send_to_char(ch, "Builders only, sorry.\r\n");
@@ -793,14 +796,14 @@ ACMD(do_gen_tog)
result = PRF_TOG_CHK(ch, PRF_BUILDWALK);
if (PRF_FLAGGED(ch, PRF_BUILDWALK)) {
one_argument(argument, arg);
for (i=0; *arg && *(sector_types[i]) != '\n'; i++)
for (i = 0; *arg && *(sector_types[i]) != '\n'; i++)
if (is_abbrev(arg, sector_types[i]))
break;
if (*(sector_types[i]) == '\n')
i=0;
if (*(sector_types[i]) == '\n')
i = 0;
GET_BUILDWALK_SECTOR(ch) = i;
send_to_char(ch, "Default sector type is %s\r\n", sector_types[i]);
mudlog(CMP, GET_LEVEL(ch), TRUE,
"OLC: %s turned buildwalk on. Allowed zone %d", GET_NAME(ch), GET_OLC_ZONE(ch));
} else
@@ -857,35 +860,32 @@ ACMD(do_gen_tog)
return;
}
static void show_happyhour(struct char_data *ch)
static void show_happyhour(char_data *ch)
{
char happyexp[80], happygold[80], happyqp[80];
int secs_left;
if ((IS_HAPPYHOUR) || (GET_LEVEL(ch) >= LVL_GRGOD))
{
if (HAPPY_TIME)
secs_left = ((HAPPY_TIME - 1) * SECS_PER_MUD_HOUR) + next_tick;
else
secs_left = 0;
if ((IS_HAPPYHOUR) || (GET_LEVEL(ch) >= LVL_GRGOD)) {
if (HAPPY_TIME)
secs_left = ((HAPPY_TIME - 1) * SECS_PER_MUD_HOUR) + next_tick;
else
secs_left = 0;
sprintf(happyqp, "%s+%d%%%s to Questpoints per quest\r\n", CCYEL(ch, C_NRM), HAPPY_QP, CCNRM(ch, C_NRM));
sprintf(happygold, "%s+%d%%%s to Gold gained per kill\r\n", CCYEL(ch, C_NRM), HAPPY_GOLD, CCNRM(ch, C_NRM));
sprintf(happyexp, "%s+%d%%%s to Experience per kill\r\n", CCYEL(ch, C_NRM), HAPPY_EXP, CCNRM(ch, C_NRM));
sprintf(happyqp, "%s+%d%%%s to Questpoints per quest\r\n", CCYEL(ch, C_NRM), HAPPY_QP, CCNRM(ch, C_NRM));
sprintf(happygold, "%s+%d%%%s to Gold gained per kill\r\n", CCYEL(ch, C_NRM), HAPPY_GOLD, CCNRM(ch, C_NRM));
sprintf(happyexp, "%s+%d%%%s to Experience per kill\r\n", CCYEL(ch, C_NRM), HAPPY_EXP, CCNRM(ch, C_NRM));
send_to_char(ch, "tbaMUD Happy Hour!\r\n"
"------------------\r\n"
"%s%s%sTime Remaining: %s%d%s hours %s%d%s mins %s%d%s secs\r\n",
(IS_HAPPYEXP || (GET_LEVEL(ch) >= LVL_GOD)) ? happyexp : "",
(IS_HAPPYGOLD || (GET_LEVEL(ch) >= LVL_GOD)) ? happygold : "",
(IS_HAPPYQP || (GET_LEVEL(ch) >= LVL_GOD)) ? happyqp : "",
CCYEL(ch, C_NRM), (secs_left / 3600), CCNRM(ch, C_NRM),
CCYEL(ch, C_NRM), (secs_left % 3600) / 60, CCNRM(ch, C_NRM),
CCYEL(ch, C_NRM), (secs_left % 60), CCNRM(ch, C_NRM) );
}
else
{
send_to_char(ch, "Sorry, there is currently no happy hour!\r\n");
send_to_char(ch, "tbaMUD Happy Hour!\r\n"
"------------------\r\n"
"%s%s%sTime Remaining: %s%d%s hours %s%d%s mins %s%d%s secs\r\n",
(IS_HAPPYEXP || (GET_LEVEL(ch) >= LVL_GOD)) ? happyexp : "",
(IS_HAPPYGOLD || (GET_LEVEL(ch) >= LVL_GOD)) ? happygold : "",
(IS_HAPPYQP || (GET_LEVEL(ch) >= LVL_GOD)) ? happyqp : "",
CCYEL(ch, C_NRM), (secs_left / 3600), CCNRM(ch, C_NRM),
CCYEL(ch, C_NRM), (secs_left % 3600) / 60, CCNRM(ch, C_NRM),
CCYEL(ch, C_NRM), (secs_left % 60), CCNRM(ch, C_NRM));
} else {
send_to_char(ch, "Sorry, there is currently no happy hour!\r\n");
}
}
@@ -894,8 +894,7 @@ ACMD(do_happyhour)
char arg[MAX_INPUT_LENGTH], val[MAX_INPUT_LENGTH];
int num;
if (GET_LEVEL(ch) < LVL_GOD)
{
if (GET_LEVEL(ch) < LVL_GOD) {
show_happyhour(ch);
return;
}
@@ -903,20 +902,15 @@ ACMD(do_happyhour)
/* Only Imms get here, so check args */
two_arguments(argument, arg, val);
if (is_abbrev(arg, "experience"))
{
if (is_abbrev(arg, "experience")) {
num = MIN(MAX((atoi(val)), 0), 1000);
HAPPY_EXP = num;
send_to_char(ch, "Happy Hour Exp rate set to +%d%%\r\n", HAPPY_EXP);
}
else if ((is_abbrev(arg, "gold")) || (is_abbrev(arg, "coins")))
{
} else if ((is_abbrev(arg, "gold")) || (is_abbrev(arg, "coins"))) {
num = MIN(MAX((atoi(val)), 0), 1000);
HAPPY_GOLD = num;
send_to_char(ch, "Happy Hour Gold rate set to +%d%%\r\n", HAPPY_GOLD);
}
else if ((is_abbrev(arg, "time")) || (is_abbrev(arg, "ticks")))
{
} else if ((is_abbrev(arg, "time")) || (is_abbrev(arg, "ticks"))) {
num = MIN(MAX((atoi(val)), 0), 1000);
if (HAPPY_TIME && !num)
game_info("Happyhour has been stopped!");
@@ -925,47 +919,39 @@ ACMD(do_happyhour)
HAPPY_TIME = num;
send_to_char(ch, "Happy Hour Time set to %d ticks (%d hours %d mins and %d secs)\r\n",
HAPPY_TIME,
(HAPPY_TIME*SECS_PER_MUD_HOUR)/3600,
((HAPPY_TIME*SECS_PER_MUD_HOUR)%3600) / 60,
(HAPPY_TIME*SECS_PER_MUD_HOUR)%60 );
}
else if ((is_abbrev(arg, "qp")) || (is_abbrev(arg, "questpoints")))
{
HAPPY_TIME,
(HAPPY_TIME * SECS_PER_MUD_HOUR) / 3600,
((HAPPY_TIME * SECS_PER_MUD_HOUR) % 3600) / 60,
(HAPPY_TIME * SECS_PER_MUD_HOUR) % 60);
} else if ((is_abbrev(arg, "qp")) || (is_abbrev(arg, "questpoints"))) {
num = MIN(MAX((atoi(val)), 0), 1000);
HAPPY_QP = num;
send_to_char(ch, "Happy Hour Questpoints rate set to +%d%%\r\n", HAPPY_QP);
}
else if (is_abbrev(arg, "show"))
{
} else if (is_abbrev(arg, "show")) {
show_happyhour(ch);
}
else if (is_abbrev(arg, "default"))
{
} else if (is_abbrev(arg, "default")) {
HAPPY_EXP = 100;
HAPPY_GOLD = 50;
HAPPY_QP = 50;
HAPPY_QP = 50;
HAPPY_TIME = 48;
game_info("A Happyhour has started!");
}
else
{
} else {
send_to_char(ch, "Usage: %shappyhour %s- show usage (this info)\r\n"
" %shappyhour show %s- display current settings (what mortals see)\r\n"
" %shappyhour time <ticks> %s- set happyhour time and start timer\r\n"
" %shappyhour qp <num> %s- set qp percentage gain\r\n"
" %shappyhour exp <num> %s- set exp percentage gain\r\n"
" %shappyhour gold <num> %s- set gold percentage gain\r\n"
" \tyhappyhour default \tw- sets a default setting for happyhour\r\n\r\n"
"Configure the happyhour settings and start a happyhour.\r\n"
"Currently 1 hour IRL = %d ticks\r\n"
"If no number is specified, 0 (off) is assumed.\r\nThe command \tyhappyhour time\tn will therefore stop the happyhour timer.\r\n",
CCYEL(ch, C_NRM), CCNRM(ch, C_NRM),
CCYEL(ch, C_NRM), CCNRM(ch, C_NRM),
CCYEL(ch, C_NRM), CCNRM(ch, C_NRM),
CCYEL(ch, C_NRM), CCNRM(ch, C_NRM),
CCYEL(ch, C_NRM), CCNRM(ch, C_NRM),
CCYEL(ch, C_NRM), CCNRM(ch, C_NRM),
(3600 / SECS_PER_MUD_HOUR) );
" %shappyhour show %s- display current settings (what mortals see)\r\n"
" %shappyhour time <ticks> %s- set happyhour time and start timer\r\n"
" %shappyhour qp <num> %s- set qp percentage gain\r\n"
" %shappyhour exp <num> %s- set exp percentage gain\r\n"
" %shappyhour gold <num> %s- set gold percentage gain\r\n"
" \tyhappyhour default \tw- sets a default setting for happyhour\r\n\r\n"
"Configure the happyhour settings and start a happyhour.\r\n"
"Currently 1 hour IRL = %d ticks\r\n"
"If no number is specified, 0 (off) is assumed.\r\nThe command \tyhappyhour time\tn will therefore stop the happyhour timer.\r\n",
CCYEL(ch, C_NRM), CCNRM(ch, C_NRM),
CCYEL(ch, C_NRM), CCNRM(ch, C_NRM),
CCYEL(ch, C_NRM), CCNRM(ch, C_NRM),
CCYEL(ch, C_NRM), CCNRM(ch, C_NRM),
CCYEL(ch, C_NRM), CCNRM(ch, C_NRM),
CCYEL(ch, C_NRM), CCNRM(ch, C_NRM),
(3600 / SECS_PER_MUD_HOUR));
}
}

View File

@@ -30,8 +30,8 @@ ACMD(do_action)
char arg[MAX_INPUT_LENGTH], part[MAX_INPUT_LENGTH];
int act_nr;
struct social_messg *action;
struct char_data *vict;
struct obj_data *targ;
char_data *vict;
obj_data *targ;
if ((act_nr = find_action(cmd)) < 0) {
send_to_char(ch, "That action is not supported.\r\n");
@@ -65,7 +65,8 @@ ACMD(do_action)
if (!vict) {
if (action->char_obj_found) {
targ = get_obj_in_list_vis(ch, arg, NULL, ch->carrying);
if (!targ) targ = get_obj_in_list_vis(ch, arg, NULL, world[IN_ROOM(ch)].contents);
if (!targ)
targ = get_obj_in_list_vis(ch, arg, NULL, world[IN_ROOM(ch)].contents);
if (targ) {
act(action->char_obj_found, action->hide, ch, targ, 0, TO_CHAR);
act(action->others_obj_found, action->hide, ch, targ, 0, TO_ROOM);
@@ -92,9 +93,9 @@ ACMD(do_action)
act("$N is not in a proper position for that.", FALSE, ch, 0, vict, TO_CHAR | TO_SLEEP);
else {
if (*part) {
act(action->char_body_found, 0, ch, (struct obj_data *)part, vict, TO_CHAR | TO_SLEEP);
act(action->others_body_found, action->hide, ch, (struct obj_data *)part, vict, TO_NOTVICT);
act(action->vict_body_found, action->hide, ch, (struct obj_data *)part, vict, TO_VICT);
act(action->char_body_found, 0, ch, (obj_data *)part, vict, TO_CHAR | TO_SLEEP);
act(action->others_body_found, action->hide, ch, (obj_data *)part, vict, TO_NOTVICT);
act(action->vict_body_found, action->hide, ch, (obj_data *)part, vict, TO_VICT);
} else {
act(action->char_found, 0, ch, 0, vict, TO_CHAR | TO_SLEEP);
act(action->others_found, action->hide, ch, 0, vict, TO_NOTVICT);
@@ -128,7 +129,8 @@ void create_command_list(void)
/* count the commands in the command list */
i = 0;
while(*cmd_info[i].command != '\n') i++;
while (*cmd_info[i].command != '\n')
i++;
i++;
CREATE(complete_cmd_info, struct command_info, top_of_socialt + i + 2);
@@ -137,21 +139,21 @@ void create_command_list(void)
i = 0;
j = 0;
k = 0;
while ((*cmd_info[i].command != '\n') || (j <= top_of_socialt)) {
while ((*cmd_info[i].command != '\n') || (j <= top_of_socialt)) {
if ((i < RESERVE_CMDS) || (j > top_of_socialt) ||
(str_cmp(cmd_info[i].sort_as, soc_mess_list[j].sort_as) < 1))
(str_cmp(cmd_info[i].sort_as, soc_mess_list[j].sort_as) < 1))
complete_cmd_info[k++] = cmd_info[i++];
else {
soc_mess_list[j].act_nr = k;
complete_cmd_info[k].command = soc_mess_list[j].command;
complete_cmd_info[k].sort_as = soc_mess_list[j].sort_as;
complete_cmd_info[k].minimum_position = soc_mess_list[j].min_char_position;
complete_cmd_info[k].command_pointer = do_action;
complete_cmd_info[k].minimum_level = soc_mess_list[j++].min_level_char;
complete_cmd_info[k++].subcmd = 0;
soc_mess_list[j].act_nr = k;
complete_cmd_info[k].command = soc_mess_list[j].command;
complete_cmd_info[k].sort_as = soc_mess_list[j].sort_as;
complete_cmd_info[k].minimum_position = soc_mess_list[j].min_char_position;
complete_cmd_info[k].command_pointer = do_action;
complete_cmd_info[k].minimum_level = soc_mess_list[j++].min_level_char;
complete_cmd_info[k++].subcmd = 0;
}
}
complete_cmd_info[k] = cmd_info[i];
complete_cmd_info[k] = cmd_info[i];
log("Command info rebuilt, %d total commands.", k);
}
@@ -166,29 +168,45 @@ void free_social_messages(void)
struct social_messg *mess;
int i;
for (i = 0;i <= top_of_socialt;i++) {
for (i = 0; i <= top_of_socialt; i++) {
mess = &soc_mess_list[i];
free_action(mess);
}
free(soc_mess_list);
}
void free_action(struct social_messg *mess) {
if (mess->command) free(mess->command);
if (mess->sort_as) free(mess->sort_as);
if (mess->char_no_arg) free(mess->char_no_arg);
if (mess->others_no_arg) free(mess->others_no_arg);
if (mess->char_found) free(mess->char_found);
if (mess->others_found) free(mess->others_found);
if (mess->vict_found) free(mess->vict_found);
if (mess->char_body_found) free(mess->char_body_found);
if (mess->others_body_found) free(mess->others_body_found);
if (mess->vict_body_found) free(mess->vict_body_found);
if (mess->not_found) free(mess->not_found);
if (mess->char_auto) free(mess->char_auto);
if (mess->others_auto) free(mess->others_auto);
if (mess->char_obj_found) free(mess->char_obj_found);
if (mess->others_obj_found) free(mess->others_obj_found);
void free_action(struct social_messg *mess)
{
if (mess->command)
free(mess->command);
if (mess->sort_as)
free(mess->sort_as);
if (mess->char_no_arg)
free(mess->char_no_arg);
if (mess->others_no_arg)
free(mess->others_no_arg);
if (mess->char_found)
free(mess->char_found);
if (mess->others_found)
free(mess->others_found);
if (mess->vict_found)
free(mess->vict_found);
if (mess->char_body_found)
free(mess->char_body_found);
if (mess->others_body_found)
free(mess->others_body_found);
if (mess->vict_body_found)
free(mess->vict_body_found);
if (mess->not_found)
free(mess->not_found);
if (mess->char_auto)
free(mess->char_auto);
if (mess->others_auto)
free(mess->others_auto);
if (mess->char_obj_found)
free(mess->char_obj_found);
if (mess->others_obj_found)
free(mess->others_obj_found);
memset(mess, 0, sizeof(struct social_messg));
}
@@ -222,11 +240,11 @@ ACMD(do_gmote)
int act_nr, length;
char arg[MAX_INPUT_LENGTH], buf[MAX_INPUT_LENGTH];
struct social_messg *action;
struct char_data *vict = NULL;
char_data *vict = NULL;
half_chop(argument, buf, arg);
if(subcmd)
if (subcmd)
for (length = strlen(buf), cmd = 0; *complete_cmd_info[cmd].command != '\n'; cmd++)
if (!strncmp(complete_cmd_info[cmd].command, buf, length))
break;
@@ -242,13 +260,13 @@ ACMD(do_gmote)
return;
}
action = &soc_mess_list[act_nr];
action = &soc_mess_list[act_nr];
if (!action->char_found)
*arg = '\0';
if (!*arg) {
if(!action->others_no_arg || !*action->others_no_arg) {
if (!action->others_no_arg || !*action->others_no_arg) {
send_to_char(ch, "Who are you going to do that to?\r\n");
return;
}
@@ -257,7 +275,7 @@ action = &soc_mess_list[act_nr];
send_to_char(ch, "%s\r\n", action->not_found);
return;
} else if (vict == ch) {
if(!action->others_auto || !*action->others_auto) {
if (!action->others_auto || !*action->others_auto) {
send_to_char(ch, "%s\r\n", action->char_auto);
return;
}
@@ -265,7 +283,7 @@ action = &soc_mess_list[act_nr];
} else {
if (GET_POS(vict) < action->min_victim_position) {
act("$N is not in a proper position for that.",
FALSE, ch, 0, vict, TO_CHAR | TO_SLEEP);
FALSE, ch, 0, vict, TO_CHAR | TO_SLEEP);
return;
}
snprintf(buf, sizeof(buf), "Gemote: %s", action->others_found);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -15,12 +15,8 @@
#include "utils.h"
#include "comm.h"
#include "interpreter.h"
#include "handler.h"
#include "db.h"
#include "spells.h"
#include "house.h"
#include "constants.h"
#include "dg_scripts.h"
#include "asciimap.h"
/******************************************************************************
@@ -33,29 +29,28 @@
#define DEFAULT_MAP_SIZE CONFIG_MAP_SIZE
#define MAX_MAP_SIZE (CANVAS_WIDTH - 1)/4
#define MAX_MAP_SIZE ((CANVAS_WIDTH - 1)/4)
#define MAX_MAP CANVAS_WIDTH
#define MAX_MAP_DIR 10
#define MAX_MAP_FOLLOW 10
#define MAX_MAP_DIR 10
#define SECT_EMPTY 30 /* anything greater than num sect types */
#define SECT_STRANGE (SECT_EMPTY + 1)
#define SECT_HERE (SECT_STRANGE + 1)
#define SECT_EMPTY 30 /* anything greater than num sect types */
#define SECT_STRANGE (SECT_EMPTY + 1)
#define SECT_HERE (SECT_STRANGE + 1)
#define DOOR_NS -1
#define DOOR_EW -2
#define DOOR_UP -3
#define DOOR_DOWN -4
#define DOOR_DIAGNE -5
#define DOOR_DIAGNW -6
#define VDOOR_NS -7
#define VDOOR_EW -8
#define VDOOR_DIAGNE -9
#define VDOOR_DIAGNW -10
#define DOOR_UP_AND_NE -11
#define DOOR_DOWN_AND_SE -12
#define DOOR_NONE -13
#define DOOR_NS (-1)
#define DOOR_EW (-2)
#define DOOR_UP (-3)
#define DOOR_DOWN (-4)
#define DOOR_DIAGNE (-5)
#define DOOR_DIAGNW (-6)
#define VDOOR_NS (-7)
#define VDOOR_EW (-8)
#define VDOOR_DIAGNE (-9)
#define VDOOR_DIAGNW (-10)
#define DOOR_UP_AND_NE (-11)
#define DOOR_DOWN_AND_SE (-12)
#define DOOR_NONE (-13)
#define NUM_DOOR_TYPES 13
#define MAP_CIRCLE 0
@@ -64,46 +59,44 @@
#define MAP_NORMAL 0
#define MAP_COMPACT 1
static bool show_worldmap(struct char_data *ch);
struct map_info_type
{
int sector_type;
int sector_type;
char disp[20];
};
static struct map_info_type door_info[] =
{
{ DOOR_NONE, " " },
{ DOOR_DOWN_AND_SE, "\tr-\tn\\ " },
{ DOOR_UP_AND_NE, "\tr+\tn/ " },
{ VDOOR_DIAGNW, " \tm+\tn " },
{ VDOOR_DIAGNE, " \tm+\tn "},
{ VDOOR_EW, " \tm+\tn " },
{ VDOOR_NS, " \tm+\tn "},
{ DOOR_DIAGNW, " \\ " },
{ DOOR_DIAGNE, " / " },
{ DOOR_DOWN, "\tr-\tn " },
{ DOOR_UP, "\tr+\tn " },
{ DOOR_EW, " - " },
{ DOOR_NS, " | " }
{DOOR_NONE, " "},
{DOOR_DOWN_AND_SE, "\tr-\tn\\ "},
{DOOR_UP_AND_NE, "\tr+\tn/ "},
{VDOOR_DIAGNW, " \tm+\tn "},
{VDOOR_DIAGNE, " \tm+\tn "},
{VDOOR_EW, " \tm+\tn "},
{VDOOR_NS, " \tm+\tn "},
{DOOR_DIAGNW, " \\ "},
{DOOR_DIAGNE, " / "},
{DOOR_DOWN, "\tr-\tn "},
{DOOR_UP, "\tr+\tn "},
{DOOR_EW, " - "},
{DOOR_NS, " | "}
};
static struct map_info_type compact_door_info[] =
{
{ DOOR_NONE, " " },
{ DOOR_DOWN_AND_SE, "\tR\\\tn" },
{ DOOR_UP_AND_NE, "\tR/\tn" },
{ VDOOR_DIAGNW, "\tm+\tn" },
{ VDOOR_DIAGNE, "\tm+\tn"},
{ VDOOR_EW, " \tm+\tn " },
{ VDOOR_NS, " \tm+\tn "},
{ DOOR_DIAGNW,"\\" },
{ DOOR_DIAGNE,"/" },
{ DOOR_DOWN, "\tr-\tn" },
{ DOOR_UP, "\tr+\tn" },
{ DOOR_EW, "-" },
{ DOOR_NS, " | " }
{DOOR_NONE, " "},
{DOOR_DOWN_AND_SE, "\tR\\\tn"},
{DOOR_UP_AND_NE, "\tR/\tn"},
{VDOOR_DIAGNW, "\tm+\tn"},
{VDOOR_DIAGNE, "\tm+\tn"},
{VDOOR_EW, " \tm+\tn "},
{VDOOR_NS, " \tm+\tn "},
{DOOR_DIAGNW, "\\"},
{DOOR_DIAGNE, "/"},
{DOOR_DOWN, "\tr-\tn"},
{DOOR_UP, "\tr+\tn"},
{DOOR_EW, "-"},
{DOOR_NS, " | "}
};
/* Add new sector types below for both map_info and world_map_info */
@@ -111,76 +104,76 @@ static struct map_info_type compact_door_info[] =
/* New sectors also need to be added to the perform_map function below */
static struct map_info_type map_info[] =
{
{ SECT_INSIDE, "\tc[\tn.\tc]\tn" }, /* 0 */
{ SECT_CITY, "\tc[\twC\tc]\tn" },
{ SECT_FIELD, "\tc[\tg,\tc]\tn" },
{ SECT_FOREST, "\tc[\tgY\tc]\tn" },
{ SECT_HILLS, "\tc[\tMm\tc]\tn" },
{ SECT_MOUNTAIN, "\tc[\trM\tc]\tn" }, /* 5 */
{ SECT_WATER_SWIM, "\tc[\tc~\tc]\tn" },
{ SECT_WATER_NOSWIM, "\tc[\tb=\tc]\tn" },
{ SECT_FLYING, "\tc[\tC^\tc]\tn" },
{ SECT_UNDERWATER, "\tc[\tbU\tc]\tn" },
{ -1, "" }, /* 10 */
{ -1, "" },
{ -1, "" },
{ -1, "" },
{ -1, "" },
{ -1, "" }, /* 15 */
{ -1, "" },
{ -1, "" },
{ -1, "" },
{ -1, "" },
{ -1, "" }, /* 20 */
{ -1, "" },
{ -1, "" },
{ -1, "" },
{ -1, "" },
{ -1, "" }, /* 25 */
{ -1, "" },
{ -1, "" },
{ -1, "" },
{ -1, "" },
{ SECT_EMPTY, " " }, /* 30 */
{ SECT_STRANGE, "\tc[\tR?\tc]\tn" },
{ SECT_HERE, "\tc[\tB!\tc]\tn" },
{SECT_INSIDE, "\tc[\tn.\tc]\tn"}, /* 0 */
{SECT_CITY, "\tc[\twC\tc]\tn"},
{SECT_FIELD, "\tc[\tg,\tc]\tn"},
{SECT_FOREST, "\tc[\tgY\tc]\tn"},
{SECT_HILLS, "\tc[\tMm\tc]\tn"},
{SECT_MOUNTAIN, "\tc[\trM\tc]\tn"}, /* 5 */
{SECT_WATER_SWIM, "\tc[\tc~\tc]\tn"},
{SECT_WATER_NOSWIM, "\tc[\tb=\tc]\tn"},
{SECT_FLYING, "\tc[\tC^\tc]\tn"},
{SECT_UNDERWATER, "\tc[\tbU\tc]\tn"},
{-1, ""}, /* 10 */
{-1, ""},
{-1, ""},
{-1, ""},
{-1, ""},
{-1, ""}, /* 15 */
{-1, ""},
{-1, ""},
{-1, ""},
{-1, ""},
{-1, ""}, /* 20 */
{-1, ""},
{-1, ""},
{-1, ""},
{-1, ""},
{-1, ""}, /* 25 */
{-1, ""},
{-1, ""},
{-1, ""},
{-1, ""},
{SECT_EMPTY, " "}, /* 30 */
{SECT_STRANGE, "\tc[\tR?\tc]\tn"},
{SECT_HERE, "\tc[\tB!\tc]\tn"},
};
static struct map_info_type world_map_info[] =
{
{ SECT_INSIDE, "\tn." }, /* 0 */
{ SECT_CITY, "\twC" },
{ SECT_FIELD, "\tg," },
{ SECT_FOREST, "\tgY" },
{ SECT_HILLS, "\tMm" },
{ SECT_MOUNTAIN, "\trM" }, /* 5 */
{ SECT_WATER_SWIM, "\tc~" },
{ SECT_WATER_NOSWIM, "\tb=" },
{ SECT_FLYING, "\tC^" },
{ SECT_UNDERWATER, "\tbU" },
{ -1, "" }, /* 10 */
{ -1, "" },
{ -1, "" },
{ -1, "" },
{ -1, "" },
{ -1, "" }, /* 15 */
{ -1, "" },
{ -1, "" },
{ -1, "" },
{ -1, "" },
{ -1, "" }, /* 20 */
{ -1, "" },
{ -1, "" },
{ -1, "" },
{ -1, "" },
{ -1, "" }, /* 25 */
{ -1, "" },
{ -1, "" },
{ -1, "" },
{ -1, "" },
{ SECT_EMPTY, " " }, /* 30 */
{ SECT_STRANGE, "\tR?" },
{ SECT_HERE, "\tB!" },
{SECT_INSIDE, "\tn."}, /* 0 */
{SECT_CITY, "\twC"},
{SECT_FIELD, "\tg,"},
{SECT_FOREST, "\tgY"},
{SECT_HILLS, "\tMm"},
{SECT_MOUNTAIN, "\trM"}, /* 5 */
{SECT_WATER_SWIM, "\tc~"},
{SECT_WATER_NOSWIM, "\tb="},
{SECT_FLYING, "\tC^"},
{SECT_UNDERWATER, "\tbU"},
{-1, ""}, /* 10 */
{-1, ""},
{-1, ""},
{-1, ""},
{-1, ""},
{-1, ""}, /* 15 */
{-1, ""},
{-1, ""},
{-1, ""},
{-1, ""},
{-1, ""}, /* 20 */
{-1, ""},
{-1, ""},
{-1, ""},
{-1, ""},
{-1, ""}, /* 25 */
{-1, ""},
{-1, ""},
{-1, ""},
{-1, ""},
{SECT_EMPTY, " "}, /* 30 */
{SECT_STRANGE, "\tR?"},
{SECT_HERE, "\tB!"},
};
@@ -191,11 +184,14 @@ static int offsets_worldmap[4][2] ={ {-1, 0},{ 0, 1},{ 1, 0},{ 0, -1} };
static int door_offsets[6][2] ={ {-1, 0},{ 0, 1},{ 1, 0},{ 0, -1},{ -1, 1},{ 1, 1} };
static int door_marks[6] = { DOOR_NS, DOOR_EW, DOOR_NS, DOOR_EW, DOOR_UP, DOOR_DOWN };
*/
static int offsets[10][2] ={ {-2, 0},{ 0, 2},{ 2, 0},{ 0, -2},{0, 0},{ 0, 0},{ -2, -2},{ -2, 2},{2, 2},{ 2, -2} };
static int offsets_worldmap[10][2] ={ {-1, 0},{ 0, 1},{ 1, 0},{ 0, -1},{0, 0},{ 0, 0},{ -1, -1},{ -1, 1},{1, 1},{ 1, -1} };
static int door_offsets[10][2] ={ {-1, 0},{ 0, 1},{ 1, 0},{ 0, -1},{ -1, 1},{ 1, 1},{ -1, -1},{ -1, 1},{ 1, 1},{ 1, -1} };
static int door_marks[10] = { DOOR_NS, DOOR_EW, DOOR_NS, DOOR_EW, DOOR_UP, DOOR_DOWN, DOOR_DIAGNW, DOOR_DIAGNE, DOOR_DIAGNW, DOOR_DIAGNE};
static int vdoor_marks[4] = { VDOOR_NS, VDOOR_EW, VDOOR_NS, VDOOR_EW };
static int offsets[10][2] = {{-2, 0}, {0, 2}, {2, 0}, {0, -2}, {0, 0}, {0, 0}, {-2, -2}, {-2, 2}, {2, 2}, {2, -2}};
static int offsets_worldmap[10][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}, {0, 0}, {0, 0}, {-1, -1}, {-1, 1}, {1, 1},
{1, -1}};
static int door_offsets[10][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}, {-1, 1}, {1, 1}, {-1, -1}, {-1, 1}, {1, 1},
{1, -1}};
static int door_marks[10] = {DOOR_NS, DOOR_EW, DOOR_NS, DOOR_EW, DOOR_UP, DOOR_DOWN, DOOR_DIAGNW, DOOR_DIAGNE,
DOOR_DIAGNW, DOOR_DIAGNE};
static int vdoor_marks[4] = {VDOOR_NS, VDOOR_EW, VDOOR_NS, VDOOR_EW};
/******************************************************************************
* End Local (File Scope) Defines and Global Variables
*****************************************************************************/
@@ -203,118 +199,139 @@ static int vdoor_marks[4] = { VDOOR_NS, VDOOR_EW, VDOOR_NS, VDOOR_EW };
/******************************************************************************
* Begin Local (File Scope) Function Prototypes
*****************************************************************************/
static void MapArea(room_rnum room, struct char_data *ch, int x, int y, int min, int max, sh_int xpos, sh_int ypos, bool worldmap);
static void MapArea(room_rnum room, const char_data *ch, int x, int y, int min, int max, int xpos, int ypos,
bool worldmap);
static char *StringMap(int centre, int size);
static char *WorldMap(int centre, int size, int mapshape, int maptype );
static char *WorldMap(int centre, int size, int mapshape, int maptype);
static char *CompactStringMap(int centre, int size);
static void perform_map( struct char_data *ch, char *argument, bool worldmap );
static void perform_map(char_data *ch, char *argument, bool worldmap);
static bool show_worldmap(const char_data *ch);
/******************************************************************************
* End Local (File Scope) Function Prototypes
*****************************************************************************/
bool can_see_map(struct char_data *ch) {
bool can_see_map(const char_data *ch)
{
/* Is the map funcionality disabled? */
if (CONFIG_MAP == MAP_OFF)
return FALSE;
else if ((CONFIG_MAP == MAP_IMM_ONLY) && (GET_LEVEL(ch) < LVL_IMMORT))
if (CONFIG_MAP == MAP_OFF || (CONFIG_MAP == MAP_IMM_ONLY && GET_LEVEL(ch) < LVL_IMMORT))
return FALSE;
return TRUE;
}
/* MapArea function - create the actual map */
static void MapArea(room_rnum room, struct char_data *ch, int x, int y, int min, int max, sh_int xpos, sh_int ypos, bool worldmap)
static void MapArea(const room_rnum room, const char_data *ch, const int x, const int y, // NOLINT(*-no-recursion)
const int min, const int max, const int xpos, const int ypos, const bool worldmap)
{
room_rnum prospect_room;
struct room_direction_data *pexit;
int door, ew_size=0, ns_size=0, x_exit_pos=0, y_exit_pos=0;
sh_int prospect_xpos, prospect_ypos;
int door;
const int ew_size = 0, ns_size = 0, x_exit_pos = 0, y_exit_pos = 0;
int prospect_xpos, prospect_ypos;
if (map[x][y] < 0)
return; /* this is a door */
/* marks the room as visited */
if(room == IN_ROOM(ch))
if (room == IN_ROOM(ch))
map[x][y] = SECT_HERE;
else
map[x][y] = SECT(room);
if ( (x < min) || ( y < min) || ( x > max ) || ( y > max) ) return;
if (x < min || y < min || x > max || y > max)
return;
/* Check for exits */
for ( door = 0; door < MAX_MAP_DIR; door++ ) {
for (door = 0; door < MAX_MAP_DIR; door++) {
if( door < MAX_MAP_FOLLOW &&
xpos+door_offsets[door][0] >= 0 &&
xpos+door_offsets[door][0] <= ns_size &&
ypos+door_offsets[door][1] >= 0 &&
ypos+door_offsets[door][1] <= ew_size)
{ /* Virtual exit */
if (xpos + door_offsets[door][0] >= 0 &&
xpos + door_offsets[door][0] <= ns_size &&
ypos + door_offsets[door][1] >= 0 &&
ypos + door_offsets[door][1] <= ew_size) { /* Virtual exit */
// linting tells me vdoor_marks will have an index out of bounds here, since doors can have more values than
// vdoor_marks contains. Either we're not actually getting here for those values, or we're not getting here at all.
// Adding a guard for now. --welcor 20241230
if (door < sizeof(vdoor_marks))
map[x + door_offsets[door][0]][y + door_offsets[door][1]] = vdoor_marks[door];
map[x+door_offsets[door][0]][y+door_offsets[door][1]] = vdoor_marks[door] ;
if (map[x+offsets[door][0]][y+offsets[door][1]] == SECT_EMPTY )
MapArea(room,ch,x + offsets[door][0], y + offsets[door][1], min, max, xpos+door_offsets[door][0], ypos+door_offsets[door][1], worldmap);
if (map[x + offsets[door][0]][y + offsets[door][1]] == SECT_EMPTY)
MapArea(room, ch, x + offsets[door][0], y + offsets[door][1], min, max, xpos + door_offsets[door][0],
ypos + door_offsets[door][1], worldmap);
continue;
}
if ( (pexit = world[room].dir_option[door]) != NULL &&
(pexit->to_room > 0 ) && (pexit->to_room != NOWHERE) &&
(!IS_SET(pexit->exit_info, EX_CLOSED)) &&
(!IS_SET(pexit->exit_info, EX_HIDDEN) || PRF_FLAGGED(ch, PRF_HOLYLIGHT)) )
{ /* A real exit */
if ((pexit = world[room].dir_option[door]) != NULL &&
pexit->to_room > 0 && pexit->to_room != NOWHERE &&
!IS_SET(pexit->exit_info, EX_CLOSED) &&
(!IS_SET(pexit->exit_info, EX_HIDDEN) || PRF_FLAGGED(ch, PRF_HOLYLIGHT))) { /* A real exit */
/* But is the door here... */
switch (door) {
case NORTH:
if(xpos > 0 || ypos!=y_exit_pos) continue;
if (xpos > 0 || ypos != y_exit_pos)
continue;
break;
case SOUTH:
if(xpos < ns_size || ypos!=y_exit_pos) continue;
if (xpos < ns_size || ypos != y_exit_pos)
continue;
break;
case EAST:
if(ypos < ew_size || xpos!=x_exit_pos) continue;
if (ypos < ew_size || xpos != x_exit_pos)
continue;
break;
case WEST:
if(ypos > 0 || xpos!=x_exit_pos) continue;
if (ypos > 0 || xpos != x_exit_pos)
continue;
break;
case NORTHWEST:
if(xpos > 0 || ypos!=y_exit_pos || ypos > 0 || xpos!=x_exit_pos) continue;
if (xpos > 0 || ypos != y_exit_pos || ypos > 0 || xpos != x_exit_pos)
continue;
break;
case NORTHEAST:
if(xpos > 0 || ypos!=y_exit_pos || ypos < ew_size || xpos!=x_exit_pos) continue;
if (xpos > 0 || ypos != y_exit_pos || ypos < ew_size || xpos != x_exit_pos)
continue;
break;
case SOUTHEAST:
if(xpos < ns_size || ypos!=y_exit_pos || ypos < ew_size || xpos!=x_exit_pos) continue;
if (xpos < ns_size || ypos != y_exit_pos || ypos < ew_size || xpos != x_exit_pos)
continue;
break;
case SOUTHWEST:
if(xpos < ns_size || ypos!=y_exit_pos || ypos > 0 || xpos!=x_exit_pos) continue;
if (xpos < ns_size || ypos != y_exit_pos || ypos > 0 || xpos != x_exit_pos)
continue;
break;
case UP:
case DOWN:
/* no check for up/down here */
break;
default:
log("Default case reached in switch in door check in asciimap. "
"Are any directions unaccounted for? door = %d", door);
}
/* if ( (x < min) || ( y < min) || ( x > max ) || ( y > max) ) return;*/
/* if ( (x < min) || ( y < min) || ( x > max ) || ( y > max) ) return;*/
prospect_room = pexit->to_room;
/* one way into area OR maze */
if ( world[prospect_room].dir_option[rev_dir[door]] &&
world[prospect_room].dir_option[rev_dir[door]]->to_room != room) {
map[x][y] = SECT_STRANGE;
/* one way into area OR maze */
if (world[prospect_room].dir_option[rev_dir[door]] &&
world[prospect_room].dir_option[rev_dir[door]]->to_room != room) {
map[x][y] = SECT_STRANGE;
return;
}
}
if(!worldmap) {
if ((map[x+door_offsets[door][0]][y+door_offsets[door][1]] == DOOR_NONE) ||
(map[x+door_offsets[door][0]][y+door_offsets[door][1]] == SECT_EMPTY) ) {
map[x+door_offsets[door][0]][y+door_offsets[door][1]] = door_marks[door];
if (!worldmap) {
if (map[x + door_offsets[door][0]][y + door_offsets[door][1]] == DOOR_NONE ||
map[x + door_offsets[door][0]][y + door_offsets[door][1]] == SECT_EMPTY) {
map[x + door_offsets[door][0]][y + door_offsets[door][1]] = door_marks[door];
} else {
if ( ((door == NORTHEAST) && (map[x+door_offsets[door][0]][y+door_offsets[door][1]] == DOOR_UP)) ||
((door == UP) && (map[x+door_offsets[door][0]][y+door_offsets[door][1]] == DOOR_DIAGNE)) ) {
map[x+door_offsets[door][0]][y+door_offsets[door][1]] = DOOR_UP_AND_NE;
}
else if ( ((door == SOUTHEAST) && (map[x+door_offsets[door][0]][y+door_offsets[door][1]] == DOOR_DOWN)) ||
((door == DOWN) && (map[x+door_offsets[door][0]][y+door_offsets[door][1]] == DOOR_DIAGNW)) ) {
map[x+door_offsets[door][0]][y+door_offsets[door][1]] = DOOR_DOWN_AND_SE;
if ((door == NORTHEAST && map[x + door_offsets[door][0]][y + door_offsets[door][1]] == DOOR_UP) ||
(door == UP && map[x + door_offsets[door][0]][y + door_offsets[door][1]] == DOOR_DIAGNE)) {
map[x + door_offsets[door][0]][y + door_offsets[door][1]] = DOOR_UP_AND_NE;
} else if ((door == SOUTHEAST && map[x + door_offsets[door][0]][y + door_offsets[door][1]] == DOOR_DOWN)
||
(door == DOWN && map[x + door_offsets[door][0]][y + door_offsets[door][1]] == DOOR_DIAGNW)) {
map[x + door_offsets[door][0]][y + door_offsets[door][1]] = DOOR_DOWN_AND_SE;
}
}
}
@@ -324,81 +341,86 @@ static void MapArea(room_rnum room, struct char_data *ch, int x, int y, int min,
case NORTH:
prospect_xpos = ns_size;
case SOUTH:
prospect_ypos = world[prospect_room].dir_option[rev_dir[door]] ? y_exit_pos : ew_size/2;
break;
prospect_ypos = world[prospect_room].dir_option[rev_dir[door]] ? y_exit_pos : ew_size / 2;
break;
case WEST:
prospect_ypos = ew_size;
case EAST:
prospect_xpos = world[prospect_room].dir_option[rev_dir[door]] ? x_exit_pos : ns_size/2;
prospect_xpos = world[prospect_room].dir_option[rev_dir[door]] ? x_exit_pos : ns_size / 2;
break;
case NORTHEAST:
case NORTHWEST:
case SOUTHEAST:
case SOUTHWEST:
prospect_xpos = world[prospect_room].dir_option[rev_dir[door]] ? x_exit_pos : ns_size/2;
prospect_ypos = world[prospect_room].dir_option[rev_dir[door]] ? y_exit_pos : ew_size/2;
prospect_xpos = world[prospect_room].dir_option[rev_dir[door]] ? x_exit_pos : ns_size / 2;
prospect_ypos = world[prospect_room].dir_option[rev_dir[door]] ? y_exit_pos : ew_size / 2;
break;
case UP:
case DOWN:
/* no check for up/down here */
break;
default:
log("Default case reached in prospect switch in asciimap. Are any directions unaccounted for? door = %d", door);
}
if(worldmap) {
if ( door < MAX_MAP_FOLLOW && map[x+offsets_worldmap[door][0]][y+offsets_worldmap[door][1]] == SECT_EMPTY )
MapArea(pexit->to_room,ch,x + offsets_worldmap[door][0], y + offsets_worldmap[door][1], min, max, prospect_xpos, prospect_ypos, worldmap);
if (worldmap) {
if (map[x + offsets_worldmap[door][0]][y + offsets_worldmap[door][1]] == SECT_EMPTY)
MapArea(pexit->to_room, ch, x + offsets_worldmap[door][0], y + offsets_worldmap[door][1], min, max,
prospect_xpos, prospect_ypos, worldmap);
} else {
if ( door < MAX_MAP_FOLLOW && map[x+offsets[door][0]][y+offsets[door][1]] == SECT_EMPTY )
MapArea(pexit->to_room,ch,x + offsets[door][0], y + offsets[door][1], min, max, prospect_xpos, prospect_ypos, worldmap);
if (map[x + offsets[door][0]][y + offsets[door][1]] == SECT_EMPTY)
MapArea(pexit->to_room, ch, x + offsets[door][0], y + offsets[door][1], min, max, prospect_xpos,
prospect_ypos, worldmap);
}
} /* end if exit there */
}
return;
}
/* Returns a string representation of the map */
// ReSharper disable once CppDFAConstantParameter
static char *StringMap(int centre, int size)
{
static char strmap[MAX_MAP*MAX_MAP*11 + MAX_MAP*2 + 1];
static char strmap[MAX_MAP * MAX_MAP * 11 + MAX_MAP * 2 + 1];
char *mp = strmap;
char *tmp;
int x, y;
/* every row */
for (x = centre - CANVAS_HEIGHT/2; x <= centre + CANVAS_HEIGHT/2; x++) {
for (x = centre - CANVAS_HEIGHT / 2; x <= centre + CANVAS_HEIGHT / 2; x++) {
/* every column */
for (y = centre - CANVAS_WIDTH/6; y <= centre + CANVAS_WIDTH/6; y++) {
if (abs(centre - x)<=size && abs(centre-y)<=size)
tmp = (map[x][y]<0) ? \
door_info[NUM_DOOR_TYPES + map[x][y]].disp : \
map_info[map[x][y]].disp ;
for (y = centre - CANVAS_WIDTH / 6; y <= centre + CANVAS_WIDTH / 6; y++) {
if (abs(centre - x) <= size && abs(centre - y) <= size)
tmp = map[x][y] < 0 ? door_info[NUM_DOOR_TYPES + map[x][y]].disp : map_info[map[x][y]].disp;
else
tmp = map_info[SECT_EMPTY].disp;
tmp = map_info[SECT_EMPTY].disp;
strcpy(mp, tmp);
mp += strlen(tmp);
}
strcpy(mp, "\r\n");
mp+=2;
mp += 2;
}
*mp='\0';
*mp = '\0';
return strmap;
}
static char *WorldMap(int centre, int size, int mapshape, int maptype )
// ReSharper disable once CppDFAConstantParameter
static char *WorldMap(int centre, int size, int mapshape, int maptype)
{
static char strmap[MAX_MAP*MAX_MAP*4 + MAX_MAP*2 + 1];
static char strmap[MAX_MAP * MAX_MAP * 4 + MAX_MAP * 2 + 1];
char *mp = strmap;
int x, y;
int xmin, xmax, ymin, ymax;
switch(maptype) {
case MAP_COMPACT:
xmin = centre - size;
xmax = centre + size;
ymin = centre - 2*size;
ymax = centre + 2*size;
break;
default:
xmin = centre - CANVAS_HEIGHT/2;
xmax = centre + CANVAS_HEIGHT/2;
ymin = centre - CANVAS_WIDTH/2;
ymax = centre + CANVAS_WIDTH/2;
if (maptype == MAP_COMPACT) {
xmin = centre - size;
xmax = centre + size;
ymin = centre - 2 * size;
ymax = centre + 2 * size;
} else {
xmin = centre - CANVAS_HEIGHT / 2;
xmax = centre + CANVAS_HEIGHT / 2;
ymin = centre - CANVAS_WIDTH / 2;
ymax = centre + CANVAS_WIDTH / 2;
}
@@ -407,26 +429,28 @@ static char *WorldMap(int centre, int size, int mapshape, int maptype )
for (x = xmin; x <= xmax; x++) {
/* every column */
/* for (y = centre - (2*size) ; y <= centre + (2*size) ; y++) { */
for (y = ymin ; y <= ymax ; y++) {
for (y = ymin; y <= ymax; y++) {
if((mapshape == MAP_RECTANGLE && abs(centre - y) <= size*2 && abs(centre - x) <= size ) ||
((mapshape == MAP_CIRCLE) && (centre-x)*(centre-x) + (centre-y)*(centre-y)/4 <= (size * size + 1))) {
if ((mapshape == MAP_RECTANGLE && abs(centre - y) <= size * 2 && abs(centre - x) <= size) ||
(mapshape == MAP_CIRCLE && (centre - x) * (centre - x) + (centre - y) * (centre - y) / 4 <= size * size +
1)) {
strcpy(mp, world_map_info[map[x][y]].disp);
mp += strlen(world_map_info[map[x][y]].disp);
} else {
strcpy(mp++, " ");
strcpy(mp++, " ");
}
}
strcpy(mp, "\tn\r\n");
mp+=4;
mp += 4;
}
*mp='\0';
*mp = '\0';
return strmap;
}
// ReSharper disable once CppDFAConstantParameter
static char *CompactStringMap(int centre, int size)
{
static char strmap[MAX_MAP*MAX_MAP*12 + MAX_MAP*2 + 1];
static char strmap[MAX_MAP * MAX_MAP * 12 + MAX_MAP * 2 + 1];
char *mp = strmap;
int x, y;
@@ -434,56 +458,53 @@ static char *CompactStringMap(int centre, int size)
for (x = centre - size; x <= centre + size; x++) {
/* every column */
for (y = centre - size; y <= centre + size; y++) {
strcpy(mp, (map[x][y]<0) ? \
compact_door_info[NUM_DOOR_TYPES + map[x][y]].disp : \
map_info[map[x][y]].disp);
mp += strlen((map[x][y]<0) ? \
compact_door_info[NUM_DOOR_TYPES + map[x][y]].disp : \
map_info[map[x][y]].disp);
strcpy(mp, map[x][y] < 0 ? compact_door_info[NUM_DOOR_TYPES + map[x][y]].disp : map_info[map[x][y]].disp);
mp += strlen(map[x][y] < 0 ? compact_door_info[NUM_DOOR_TYPES + map[x][y]].disp : map_info[map[x][y]].disp);
}
strcpy(mp, "\r\n");
mp+=2;
mp += 2;
}
*mp='\0';
*mp = '\0';
return strmap;
}
/* Display a nicely formatted map with a legend */
static void perform_map( struct char_data *ch, char *argument, bool worldmap )
static void perform_map(char_data *ch, char *argument, bool worldmap)
{
int size = DEFAULT_MAP_SIZE;
int centre, x, y, min, max;
char arg1[MAX_INPUT_LENGTH], arg2[MAX_INPUT_LENGTH], buf[MAX_STRING_LENGTH], buf1[MAX_STRING_LENGTH], buf2[MAX_STRING_LENGTH];
char arg1[MAX_INPUT_LENGTH], arg2[MAX_INPUT_LENGTH], buf[MAX_STRING_LENGTH], buf1[MAX_STRING_LENGTH], buf2[
MAX_STRING_LENGTH];
int count = 0;
int ew_size=0, ns_size=0;
const int ew_size = 0, ns_size = 0;
int mapshape = MAP_CIRCLE;
two_arguments( argument, arg1 , arg2 );
if(*arg1)
{
size = atoi(arg1);
two_arguments(argument, arg1, arg2);
if (*arg1) {
size = parse_int(arg1);
}
if (*arg2)
{
if (is_abbrev(arg2, "normal")) worldmap=FALSE;
else if (is_abbrev(arg2, "world")) worldmap=TRUE;
if (*arg2) {
if (is_abbrev(arg2, "normal"))
worldmap = FALSE;
else if (is_abbrev(arg2, "world"))
worldmap = TRUE;
else {
send_to_char(ch, "Usage: \tymap <distance> [ normal | world ]\tn");
return;
}
}
if(size<0) {
if (size < 0) {
size = -size;
mapshape = MAP_RECTANGLE;
}
size = URANGE(1,size,MAX_MAP_SIZE);
size = URANGE(1, size, MAX_MAP_SIZE);
centre = MAX_MAP/2;
centre = MAX_MAP / 2;
if(worldmap) {
min = centre - 2*size;
max = centre + 2*size;
if (worldmap) {
min = centre - 2 * size;
max = centre + 2 * size;
} else {
min = centre - size;
max = centre + size;
@@ -491,19 +512,19 @@ static void perform_map( struct char_data *ch, char *argument, bool worldmap )
/* Blank the map */
for (x = 0; x < MAX_MAP; ++x)
for (y = 0; y < MAX_MAP; ++y)
map[x][y]= (!(y%2) && !worldmap) ? DOOR_NONE : SECT_EMPTY;
for (y = 0; y < MAX_MAP; ++y)
map[x][y] = !(y % 2) && !worldmap ? DOOR_NONE : SECT_EMPTY;
/* starts the mapping with the centre room */
MapArea(IN_ROOM(ch), ch, centre, centre, min, max, ns_size/2, ew_size/2, worldmap);
MapArea(IN_ROOM(ch), ch, centre, centre, min, max, ns_size / 2, ew_size / 2, worldmap);
/* marks the center, where ch is */
map[centre][centre] = SECT_HERE;
/* Feel free to put your own MUD name or header in here */
send_to_char(ch, " \tY-\tytbaMUD Map System\tY-\tn\r\n"
"\tD .-.__--.,--.__.-.\tn\r\n" );
"\tD .-.__--.,--.__.-.\tn\r\n");
// TODO switch to snprintf
count += sprintf(buf + count, "\tn\tn\tn%s Up\\\\", door_info[NUM_DOOR_TYPES + DOOR_UP].disp);
count += sprintf(buf + count, "\tn\tn\tn%s Down\\\\", door_info[NUM_DOOR_TYPES + DOOR_DOWN].disp);
count += sprintf(buf + count, "\tn%s You\\\\", map_info[SECT_HERE].disp);
@@ -521,18 +542,18 @@ static void perform_map( struct char_data *ch, char *argument, bool worldmap )
strcpy(buf, strfrmt(buf, LEGEND_WIDTH, CANVAS_HEIGHT + 2, FALSE, TRUE, TRUE));
/* Start with an empty column */
strcpy(buf1, strfrmt("",0, CANVAS_HEIGHT + 2, FALSE, FALSE, TRUE));
strcpy(buf1, strfrmt("", 0, CANVAS_HEIGHT + 2, FALSE, FALSE, TRUE));
/* Paste the legend */
strcpy(buf2, strpaste(buf1, buf, "\tD | \tn"));
/* Set up the map */
memset(buf, ' ', CANVAS_WIDTH);
count = (CANVAS_WIDTH);
if(worldmap)
count += sprintf(buf + count , "\r\n%s", WorldMap(centre, size, mapshape, MAP_NORMAL));
count = CANVAS_WIDTH;
if (worldmap)
count += sprintf(buf + count, "\r\n%s", WorldMap(centre, size, mapshape, MAP_NORMAL));
else
count += sprintf(buf + count , "\r\n%s", StringMap(centre, size));
count += sprintf(buf + count, "\r\n%s", StringMap(centre, size));
memset(buf + count, ' ', CANVAS_WIDTH);
strcpy(buf + count + CANVAS_WIDTH, "\r\n");
/* Paste it on */
@@ -543,13 +564,13 @@ static void perform_map( struct char_data *ch, char *argument, bool worldmap )
send_to_char(ch, "%s", buf2);
send_to_char(ch, "\tD `.-.__--.,-.__.-.-'\tn\r\n");
return;
}
/* Display a string with the map beside it */
void str_and_map(char *str, struct char_data *ch, room_vnum target_room ) {
void str_and_map(char *str, char_data *ch, room_vnum target_room)
{
int size, centre, x, y, min, max, char_size;
int ew_size=0, ns_size=0;
int ew_size = 0, ns_size = 0;
bool worldmap;
/* Check MUDs map config options - if disabled, just show room decsription */
@@ -560,48 +581,54 @@ void str_and_map(char *str, struct char_data *ch, room_vnum target_room ) {
worldmap = show_worldmap(ch);
if(!PRF_FLAGGED(ch, PRF_AUTOMAP)) {
if (!PRF_FLAGGED(ch, PRF_AUTOMAP)) {
send_to_char(ch, "%s", strfrmt(str, GET_SCREEN_WIDTH(ch), 1, FALSE, FALSE, FALSE));
return;
}
size = CONFIG_MINIMAP_SIZE;
centre = MAX_MAP/2;
min = centre - 2*size;
max = centre + 2*size;
centre = MAX_MAP / 2;
min = centre - 2 * size;
max = centre + 2 * size;
for (x = 0; x < MAX_MAP; ++x)
for (y = 0; y < MAX_MAP; ++y)
map[x][y]= (!(y%2) && !worldmap) ? DOOR_NONE : SECT_EMPTY;
map[x][y] = !(y % 2) && !worldmap ? DOOR_NONE : SECT_EMPTY;
/* starts the mapping with the center room */
MapArea(target_room, ch, centre, centre, min, max, ns_size/2, ew_size/2, worldmap );
MapArea(target_room, ch, centre, centre, min, max, ns_size / 2, ew_size / 2, worldmap);
map[centre][centre] = SECT_HERE;
/* char_size = rooms + doors + padding */
if(worldmap)
if (worldmap)
char_size = size * 4 + 5;
else
char_size = 3*(size+1) + (size) + 4;
char_size = 3 * (size + 1) + size + 4;
if(worldmap)
send_to_char(ch, "%s", strpaste(strfrmt(str, GET_SCREEN_WIDTH(ch) - char_size, size*2 + 1, FALSE, TRUE, TRUE), WorldMap(centre, size, MAP_CIRCLE, MAP_COMPACT), " \tn"));
if (worldmap)
send_to_char(ch, "%s", strpaste(strfrmt(str, GET_SCREEN_WIDTH(ch) - char_size, size * 2 + 1, FALSE, TRUE, TRUE),
WorldMap(centre, size, MAP_CIRCLE, MAP_COMPACT), " \tn"));
else
send_to_char(ch, "%s", strpaste(strfrmt(str, GET_SCREEN_WIDTH(ch) - char_size, size*2 + 1, FALSE, TRUE, TRUE), CompactStringMap(centre, size), " \tn"));
send_to_char(ch, "%s", strpaste(strfrmt(str, GET_SCREEN_WIDTH(ch) - char_size, size * 2 + 1, FALSE, TRUE, TRUE),
CompactStringMap(centre, size), " \tn"));
}
static bool show_worldmap(struct char_data *ch) {
static bool show_worldmap(const char_data *ch)
{
room_rnum rm = IN_ROOM(ch);
zone_rnum zn = GET_ROOM_ZONE(rm);
if (ROOM_FLAGGED(rm, ROOM_WORLDMAP)) return TRUE;
if (ZONE_FLAGGED(zn, ZONE_WORLDMAP)) return TRUE;
if (ROOM_FLAGGED(rm, ROOM_WORLDMAP))
return TRUE;
if (ZONE_FLAGGED(zn, ZONE_WORLDMAP))
return TRUE;
return FALSE;
}
ACMD(do_map) {
ACMD(do_map)
{
if (!can_see_map(ch)) {
send_to_char(ch, "Sorry, the map is disabled!\r\n");
return;

View File

@@ -16,8 +16,8 @@
#define MAP_IMM_ONLY 2
/* Exported function prototypes */
bool can_see_map(struct char_data *ch);
void str_and_map(char *str, struct char_data *ch, room_vnum target_room );
bool can_see_map(const char_data *ch);
void str_and_map(char *str, char_data *ch, room_vnum target_room);
ACMD(do_map);
#endif /* ASCIIMAP_H_*/

View File

@@ -14,7 +14,6 @@
#include "utils.h"
#include "comm.h"
#include "interpreter.h"
#include "handler.h"
#include "db.h"
#include "ban.h"
@@ -28,44 +27,44 @@ static char *invalid_list[MAX_INVALID_NAMES];
/* local utility functions */
static void write_ban_list(void);
static void _write_one_node(FILE *fp, struct ban_list_element *node);
static void write_one_node(FILE *fp, struct ban_list_element *node);
static const char *ban_types[] = {
"no",
"new",
"select",
"all",
"ERROR"
"no",
"new",
"select",
"all",
"ERROR"
};
void load_banned(void)
{
FILE *fl;
int i, date;
int i;
char site_name[BANNED_SITE_LENGTH + 1], ban_type[100];
char name[MAX_NAME_LENGTH + 1];
char name[MAX_NAME_LENGTH + 1], date_str[30];
struct ban_list_element *next_node;
ban_list = 0;
if (!(fl = fopen(BAN_FILE, "r"))) {
if ((fl = fopen(BAN_FILE, "r")) != NULL) {
if (errno != ENOENT) {
log("SYSERR: Unable to open banfile '%s': %s", BAN_FILE, strerror(errno));
} else
log(" Ban file '%s' doesn't exist.", BAN_FILE);
return;
}
while (fscanf(fl, " %s %s %d %s ", ban_type, site_name, &date, name) == 4) {
while (fscanf(fl, " %s %s %s %s ", ban_type, site_name, date_str, name) == 4) {
CREATE(next_node, struct ban_list_element, 1);
strncpy(next_node->site, site_name, BANNED_SITE_LENGTH); /* strncpy: OK (n_n->site:BANNED_SITE_LENGTH+1) */
strncpy(next_node->site, site_name, BANNED_SITE_LENGTH); /* strncpy: OK (n_n->site:BANNED_SITE_LENGTH+1) */
next_node->site[BANNED_SITE_LENGTH] = '\0';
strncpy(next_node->name, name, MAX_NAME_LENGTH); /* strncpy: OK (n_n->name:MAX_NAME_LENGTH+1) */
strncpy(next_node->name, name, MAX_NAME_LENGTH); /* strncpy: OK (n_n->name:MAX_NAME_LENGTH+1) */
next_node->name[MAX_NAME_LENGTH] = '\0';
next_node->date = date;
next_node->date = parse_int(date_str);
for (i = BAN_NOT; i <= BAN_ALL; i++)
if (!strcmp(ban_type, ban_types[i]))
next_node->type = i;
next_node->type = i;
next_node->next = ban_list;
ban_list = next_node;
@@ -81,25 +80,25 @@ int isbanned(char *hostname)
char *nextchar;
if (!hostname || !*hostname)
return (0);
return 0;
i = 0;
for (nextchar = hostname; *nextchar; nextchar++)
*nextchar = LOWER(*nextchar);
for (banned_node = ban_list; banned_node; banned_node = banned_node->next)
if (strstr(hostname, banned_node->site)) /* if hostname is a substring */
if (strstr(hostname, banned_node->site)) /* if hostname is a substring */
i = MAX(i, banned_node->type);
return (i);
return i;
}
static void _write_one_node(FILE *fp, struct ban_list_element *node)
static void write_one_node(FILE *fp, struct ban_list_element *node) // NOLINT(*-no-recursion)
{
if (node) {
_write_one_node(fp, node->next);
write_one_node(fp, node->next);
fprintf(fp, "%s %s %ld %s\n", ban_types[node->type],
node->site, (long) node->date, node->name);
node->site, node->date, node->name);
}
}
@@ -107,13 +106,12 @@ static void write_ban_list(void)
{
FILE *fl;
if (!(fl = fopen(BAN_FILE, "w"))) {
if ((fl = fopen(BAN_FILE, "w")) == NULL) {
perror("SYSERR: Unable to open '" BAN_FILE "' for writing");
return;
}
_write_one_node(fl, ban_list);/* recursively write from end to start */
write_one_node(fl, ban_list); /* recursively write from end to start */
fclose(fl);
return;
}
#define BAN_LIST_FORMAT "%-25.25s %-8.8s %-15.15s %-16.16s\r\n"
@@ -130,21 +128,21 @@ ACMD(do_ban)
return;
}
send_to_char(ch, BAN_LIST_FORMAT,
"Banned Site Name",
"Ban Type",
"Banned On",
"Banned By");
"Banned Site Name",
"Ban Type",
"Banned On",
"Banned By");
send_to_char(ch, BAN_LIST_FORMAT,
"---------------------------------",
"---------------------------------",
"---------------------------------",
"---------------------------------");
"---------------------------------",
"---------------------------------",
"---------------------------------",
"---------------------------------");
for (ban_node = ban_list; ban_node; ban_node = ban_node->next) {
if (ban_node->date) {
strftime(timestr, sizeof(timestr), "%a %b %d %Y", localtime(&(ban_node->date)));
} else
strcpy(timestr, "Unknown"); /* strcpy: OK (strlen("Unknown") < 16) */
strcpy(timestr, "Unknown"); /* strcpy: OK (strlen("Unknown") < 16) */
send_to_char(ch, BAN_LIST_FORMAT, ban_node->site, ban_types[ban_node->type], timestr, ban_node->name);
}
@@ -168,11 +166,11 @@ ACMD(do_ban)
}
CREATE(ban_node, struct ban_list_element, 1);
strncpy(ban_node->site, site, BANNED_SITE_LENGTH); /* strncpy: OK (b_n->site:BANNED_SITE_LENGTH+1) */
strncpy(ban_node->site, site, BANNED_SITE_LENGTH); /* strncpy: OK (b_n->site:BANNED_SITE_LENGTH+1) */
ban_node->site[BANNED_SITE_LENGTH] = '\0';
for (nextchar = ban_node->site; *nextchar; nextchar++)
*nextchar = LOWER(*nextchar);
strncpy(ban_node->name, GET_NAME(ch), MAX_NAME_LENGTH); /* strncpy: OK (b_n->size:MAX_NAME_LENGTH+1) */
strncpy(ban_node->name, GET_NAME(ch), MAX_NAME_LENGTH); /* strncpy: OK (b_n->size:MAX_NAME_LENGTH+1) */
ban_node->name[MAX_NAME_LENGTH] = '\0';
ban_node->date = time(0);
@@ -184,7 +182,7 @@ ACMD(do_ban)
ban_list = ban_node;
mudlog(NRM, MAX(LVL_GOD, GET_INVIS_LEV(ch)), TRUE, "%s has banned %s for %s players.",
GET_NAME(ch), site, ban_types[ban_node->type]);
GET_NAME(ch), site, ban_types[ban_node->type]);
send_to_char(ch, "Site banned.\r\n");
write_ban_list();
}
@@ -216,19 +214,19 @@ ACMD(do_unban)
REMOVE_FROM_LIST(ban_node, ban_list, next);
send_to_char(ch, "Site unbanned.\r\n");
mudlog(NRM, MAX(LVL_GOD, GET_INVIS_LEV(ch)), TRUE, "%s removed the %s-player ban on %s.",
GET_NAME(ch), ban_types[ban_node->type], ban_node->site);
// ReSharper disable once CppDFANullDereference
GET_NAME(ch), ban_types[ban_node->type], ban_node->site);
free(ban_node);
write_ban_list();
}
/* Check for invalid names (i.e., profanity, etc.) Written by Sharon P Garza. */
int valid_name(char *newname)
int valid_name(const char *newname)
{
int i, vowels = 0;
struct descriptor_data *dt;
descriptor_data *dt;
char tempname[MAX_INPUT_LENGTH];
/* Make sure someone isn't trying to create this same name. We want to do a
@@ -290,7 +288,7 @@ void read_invalid_list(void)
FILE *fp;
char temp[256];
if (!(fp = fopen(XNAME_FILE, "r"))) {
if ((fp = fopen(XNAME_FILE, "r")) != NULL) {
perror("SYSERR: Unable to open '" XNAME_FILE "' for reading");
return;
}

View File

@@ -1,18 +1,18 @@
/**
* @file boards.h
* Header file for the bulletin board system (boards.c).
*
*
* Part of the core tbaMUD source code distribution, which is a derivative
* of, and continuation of, CircleMUD.
*
* All rights reserved. See license for complete information.
* Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University
*
* All rights reserved. See license for complete information.
* Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University
* CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991.
*
*
* @todo Utility functions that could easily be moved elsewhere have been
* marked. Suggest a review of all utility functions (aka. non ACMDs) and
* determine if the utility functions should be placed into a lower level
* shared module.
* shared module.
*
*/
#ifndef _BAN_H_
@@ -26,18 +26,18 @@
#define BANNED_SITE_LENGTH 50
struct ban_list_element {
char site[BANNED_SITE_LENGTH+1];
int type;
time_t date;
char name[MAX_NAME_LENGTH+1];
struct ban_list_element *next;
char site[BANNED_SITE_LENGTH+1];
int type;
time_t date;
char name[MAX_NAME_LENGTH+1];
struct ban_list_element *next;
};
/* Global functions */
/* Utility Functions */
void load_banned(void);
int isbanned(char *hostname);
int valid_name(char *newname);
int valid_name(const char *newname);
void read_invalid_list(void);
void free_invalid_list(void);
/* Command functions without subcommands */

View File

@@ -46,14 +46,13 @@
/* Format: vnum, read lvl, write lvl, remove lvl, filename, 0 at end. Be sure
* to also change NUM_OF_BOARDS in board.h*/
struct board_info_type board_info[NUM_OF_BOARDS] = {
{3099, 0, 0, LVL_GOD, LIB_ETC "board.mortal", 0},
{3098, LVL_IMMORT, LVL_IMMORT, LVL_GRGOD, LIB_ETC "board.immortal", 0},
{3097, LVL_IMMORT, LVL_GRGOD, LVL_IMPL, LIB_ETC "board.freeze", 0},
{3096, 0, 0, LVL_IMMORT, LIB_ETC "board.social", 0},
{1226, 0, 0, LVL_IMPL, LIB_ETC "board.builder", 0},
{1227, 0, 0, LVL_IMPL, LIB_ETC "board.staff", 0},
{1228, 0, 0, LVL_IMPL, LIB_ETC "board.advertising", 0},
{4900, 0, 0, LVL_IMMORT, LIB_ETC "board.grenzland", 0},
{3099, 0, 0, LVL_GOD, LIB_ETC "board.mortal", 0},
{3098, LVL_IMMORT, LVL_IMMORT, LVL_GRGOD, LIB_ETC "board.immortal", 0},
{3097, LVL_IMMORT, LVL_GRGOD, LVL_IMPL, LIB_ETC "board.freeze", 0},
{3096, 0, 0, LVL_IMMORT, LIB_ETC "board.social", 0},
{1226, 0, 0, LVL_IMPL, LIB_ETC "board.builder", 0},
{1227, 0, 0, LVL_IMPL, LIB_ETC "board.staff", 0},
{1228, 0, 0, LVL_IMPL, LIB_ETC "board.advertising", 0},
};
/* local (file scope) global variables */
@@ -64,7 +63,7 @@ static struct board_msginfo msg_index[NUM_OF_BOARDS][MAX_BOARD_MESSAGES];
/* local static utility functions */
static int find_slot(void);
static int find_board(struct char_data *ch);
static int find_board(const char_data *ch);
static void init_boards(void);
static void board_reset_board(int board_type);
static void board_clear_board(int board_type);
@@ -76,29 +75,29 @@ static int find_slot(void)
for (i = 0; i < INDEX_SIZE; i++)
if (!msg_storage_taken[i]) {
msg_storage_taken[i] = 1;
return (i);
return i;
}
return (-1);
return -1;
}
/* search the room ch is standing in to find which board he's looking at */
static int find_board(struct char_data *ch)
static int find_board(const char_data *ch)
{
struct obj_data *obj;
obj_data *obj;
int i;
for (obj = world[IN_ROOM(ch)].contents; obj; obj = obj->next_content)
for (i = 0; i < NUM_OF_BOARDS; i++)
if (BOARD_RNUM(i) == GET_OBJ_RNUM(obj))
return (i);
return i;
if (GET_LEVEL(ch) >= LVL_IMMORT)
for (obj = ch->carrying; obj; obj = obj->next_content)
for (i = 0; i < NUM_OF_BOARDS; i++)
if (BOARD_RNUM(i) == GET_OBJ_RNUM(obj))
return (i);
return i;
return (-1);
return -1;
}
static void init_boards(void)
@@ -113,12 +112,12 @@ static void init_boards(void)
for (i = 0; i < NUM_OF_BOARDS; i++) {
if ((BOARD_RNUM(i) = real_object(BOARD_VNUM(i))) == NOTHING) {
log("SYSERR: Fatal board error: board vnum %d does not exist!",
BOARD_VNUM(i));
BOARD_VNUM(i));
fatal_error = 1;
}
num_of_msgs[i] = 0;
for (j = 0; j < MAX_BOARD_MESSAGES; j++) {
memset((char *) &(msg_index[i][j]), 0, sizeof(struct board_msginfo));
memset((char *)&msg_index[i][j], 0, sizeof(struct board_msginfo));
msg_index[i][j].slot_num = -1;
}
board_load_board(i);
@@ -132,17 +131,17 @@ SPECIAL(gen_board)
{
int board_type;
static int loaded = 0;
struct obj_data *board = (struct obj_data *)me;
obj_data *board = (obj_data *)me;
/* These were originally globals for some unknown reason. */
int ACMD_READ, ACMD_LOOK, ACMD_EXAMINE, ACMD_WRITE, ACMD_REMOVE;
if (!loaded) {
init_boards();
loaded = 1;
}
if (!ch->desc)
return (0);
return 0;
ACMD_READ = find_command("read");
ACMD_WRITE = find_command("write");
@@ -152,41 +151,42 @@ SPECIAL(gen_board)
if (cmd != ACMD_WRITE && cmd != ACMD_LOOK && cmd != ACMD_EXAMINE &&
cmd != ACMD_READ && cmd != ACMD_REMOVE)
return (0);
return 0;
if ((board_type = find_board(ch)) == -1) {
log("SYSERR: degenerate board! (what the hell...)");
return (0);
return 0;
}
if (cmd == ACMD_WRITE)
return (board_write_message(board_type, ch, argument, board));
else if (cmd == ACMD_LOOK || cmd == ACMD_EXAMINE)
return (board_show_board(board_type, ch, argument, board));
else if (cmd == ACMD_READ)
return (board_display_msg(board_type, ch, argument, board));
else if (cmd == ACMD_REMOVE)
return (board_remove_msg(board_type, ch, argument, board));
else
return (0);
return board_write_message(board_type, ch, argument, board);
if (cmd == ACMD_LOOK || cmd == ACMD_EXAMINE)
return board_show_board(board_type, ch, argument, board);
if (cmd == ACMD_READ)
return board_display_msg(board_type, ch, argument, board);
if (cmd == ACMD_REMOVE)
return board_remove_msg(board_type, ch, argument, board);
return 0;
}
int board_write_message(int board_type, struct char_data *ch, char *arg, struct obj_data *board)
// ReSharper disable once CppDFAConstantFunctionResult
int board_write_message(int board_type, char_data *ch, char *arg, obj_data *board)
{
time_t ct;
char buf[MAX_INPUT_LENGTH], buf2[MAX_NAME_LENGTH + 3], tmstr[100];
if (GET_LEVEL(ch) < WRITE_LVL(board_type)) {
send_to_char(ch, "You are not holy enough to write on this board.\r\n");
return (1);
return 1;
}
if (num_of_msgs[board_type] >= MAX_BOARD_MESSAGES) {
send_to_char(ch, "The board is full.\r\n");
return (1);
return 1;
}
if ((NEW_MSG_INDEX(board_type).slot_num = find_slot()) == -1) {
send_to_char(ch, "The board is malfunctioning - sorry.\r\n");
log("SYSERR: Board: failed to find empty slot on write.");
return (1);
return 1;
}
/* skip blanks */
skip_spaces(&arg);
@@ -197,7 +197,7 @@ int board_write_message(int board_type, struct char_data *ch, char *arg, struct
if (!*arg) {
send_to_char(ch, "We must have a headline!\r\n");
return (1);
return 1;
}
ct = time(0);
strftime(tmstr, sizeof(tmstr), "%a %b %d %Y", localtime(&ct));
@@ -205,49 +205,50 @@ int board_write_message(int board_type, struct char_data *ch, char *arg, struct
snprintf(buf2, sizeof(buf2), "(%s)", GET_NAME(ch));
snprintf(buf, sizeof(buf), "%s %-12s :: %s", tmstr, buf2, arg);
NEW_MSG_INDEX(board_type).heading = strdup(buf);
NEW_MSG_INDEX(board_type).level = GET_LEVEL(ch);
NEW_MSG_INDEX(board_type).level = (int)GET_LEVEL(ch);
send_to_char(ch, "Write your message.\r\n");
send_editor_help(ch->desc);
act("$n starts to write a message.", TRUE, ch, 0, 0, TO_ROOM);
string_write(ch->desc, &(msg_storage[NEW_MSG_INDEX(board_type).slot_num]),
MAX_MESSAGE_LENGTH, board_type + BOARD_MAGIC, NULL);
string_write(ch->desc, &msg_storage[NEW_MSG_INDEX(board_type).slot_num],
MAX_MESSAGE_LENGTH, board_type + BOARD_MAGIC, NULL);
num_of_msgs[board_type]++;
return (1);
return 1;
}
int board_show_board(int board_type, struct char_data *ch, char *arg, struct obj_data *board)
int board_show_board(int board_type, char_data *ch, char *arg, obj_data *board)
{
int i;
char tmp[MAX_STRING_LENGTH], buf[MAX_STRING_LENGTH];
if (!ch->desc)
return (0);
return 0;
one_argument(arg, tmp);
if (!*tmp || !isname(tmp, board->name))
return (0);
return 0;
if (GET_LEVEL(ch) < READ_LVL(board_type)) {
send_to_char(ch, "You try but fail to understand the holy words.\r\n");
return (1);
return 1;
}
act("$n studies the board.", TRUE, ch, 0, 0, TO_ROOM);
if (!num_of_msgs[board_type])
send_to_char(ch, "This is a bulletin board. Usage: READ/REMOVE <messg #>, WRITE <header>.\r\nThe board is empty.\r\n");
send_to_char(
ch, "This is a bulletin board. Usage: READ/REMOVE <messg #>, WRITE <header>.\r\nThe board is empty.\r\n");
else {
size_t len = 0;
int nlen;
len = snprintf(buf, sizeof(buf),
"This is a bulletin board. Usage: READ/REMOVE <messg #>, WRITE <header>.\r\n"
"You will need to look at the board to save your message.\r\n"
"There are %d messages on the board.\r\n",
num_of_msgs[board_type]);
"This is a bulletin board. Usage: READ/REMOVE <messg #>, WRITE <header>.\r\n"
"You will need to look at the board to save your message.\r\n"
"There are %d messages on the board.\r\n",
num_of_msgs[board_type]);
#if NEWEST_AT_TOP
for (i = num_of_msgs[board_type] - 1; i >= 0; i--) {
if (!MSG_HEADING(board_type, i))
@@ -271,40 +272,40 @@ int board_show_board(int board_type, struct char_data *ch, char *arg, struct obj
#endif
page_string(ch->desc, buf, TRUE);
}
return (1);
return 1;
fubar:
log("SYSERR: Board %d is fubar'd.", board_type);
send_to_char(ch, "Sorry, the board isn't working.\r\n");
return (1);
return 1;
}
int board_display_msg(int board_type, struct char_data *ch, char *arg, struct obj_data *board)
int board_display_msg(int board_type, char_data *ch, char *arg, obj_data *board)
{
char number[MAX_INPUT_LENGTH], buffer[MAX_STRING_LENGTH];
int msg, ind;
one_argument(arg, number);
if (!*number)
return (0);
if (isname(number, board->name)) /* so "read board" works */
return (board_show_board(board_type, ch, arg, board));
if (!is_number(number)) /* read 2.mail, look 2.sword */
return (0);
if (!(msg = atoi(number)))
return (0);
return 0;
if (isname(number, board->name)) /* so "read board" works */
return board_show_board(board_type, ch, arg, board);
if (!is_number(number)) /* read 2.mail, look 2.sword */
return 0;
if ((msg = parse_int(number)) == 0)
return 0;
if (GET_LEVEL(ch) < READ_LVL(board_type)) {
send_to_char(ch, "You try but fail to understand the holy words.\r\n");
return (1);
return 1;
}
if (!num_of_msgs[board_type]) {
send_to_char(ch, "The board is empty!\r\n");
return (1);
return 1;
}
if (msg < 1 || msg > num_of_msgs[board_type]) {
send_to_char(ch, "That message exists only in your imagination.\r\n");
return (1);
return 1;
}
#if NEWEST_AT_TOP
ind = num_of_msgs[board_type] - msg;
@@ -315,45 +316,45 @@ int board_display_msg(int board_type, struct char_data *ch, char *arg, struct ob
MSG_SLOTNUM(board_type, ind) >= INDEX_SIZE) {
send_to_char(ch, "Sorry, the board is not working.\r\n");
log("SYSERR: Board is screwed up. (Room #%d)", GET_ROOM_VNUM(IN_ROOM(ch)));
return (1);
return 1;
}
if (!(MSG_HEADING(board_type, ind))) {
if (!MSG_HEADING(board_type, ind)) {
send_to_char(ch, "That message appears to be screwed up.\r\n");
return (1);
return 1;
}
if (!(msg_storage[MSG_SLOTNUM(board_type, ind)])) {
if (!msg_storage[MSG_SLOTNUM(board_type, ind)]) {
send_to_char(ch, "That message seems to be empty.\r\n");
return (1);
return 1;
}
snprintf(buffer, sizeof(buffer), "Message %d : %s\r\n\r\n%s\r\n", msg,
MSG_HEADING(board_type, ind),
msg_storage[MSG_SLOTNUM(board_type, ind)]);
MSG_HEADING(board_type, ind),
msg_storage[MSG_SLOTNUM(board_type, ind)]);
page_string(ch->desc, buffer, TRUE);
return (1);
return 1;
}
int board_remove_msg(int board_type, struct char_data *ch, char *arg, struct obj_data *board)
int board_remove_msg(int board_type, char_data *ch, char *arg, obj_data *board)
{
int ind, msg, slot_num;
char number[MAX_INPUT_LENGTH], buf[MAX_INPUT_LENGTH];
struct descriptor_data *d;
descriptor_data *d;
one_argument(arg, number);
if (!*number || !is_number(number))
return (0);
if (!(msg = atoi(number)))
return (0);
return 0;
if ((msg = parse_int(number)) == 0)
return 0;
if (!num_of_msgs[board_type]) {
send_to_char(ch, "The board is empty!\r\n");
return (1);
return 1;
}
if (msg < 1 || msg > num_of_msgs[board_type]) {
send_to_char(ch, "That message exists only in your imagination.\r\n");
return (1);
return 1;
}
#if NEWEST_AT_TOP
ind = num_of_msgs[board_type] - msg;
@@ -362,28 +363,28 @@ int board_remove_msg(int board_type, struct char_data *ch, char *arg, struct obj
#endif
if (!MSG_HEADING(board_type, ind)) {
send_to_char(ch, "That message appears to be screwed up.\r\n");
return (1);
return 1;
}
snprintf(buf, sizeof(buf), "(%s)", GET_NAME(ch));
if (GET_LEVEL(ch) < REMOVE_LVL(board_type) &&
!(strstr(MSG_HEADING(board_type, ind), buf))) {
!strstr(MSG_HEADING(board_type, ind), buf)) {
send_to_char(ch, "You are not holy enough to remove other people's messages.\r\n");
return (1);
return 1;
}
if (GET_LEVEL(ch) < MSG_LEVEL(board_type, ind)) {
send_to_char(ch, "You can't remove a message holier than yourself.\r\n");
return (1);
return 1;
}
slot_num = MSG_SLOTNUM(board_type, ind);
if (slot_num < 0 || slot_num >= INDEX_SIZE) {
send_to_char(ch, "That message is majorly screwed up.\r\n");
log("SYSERR: The board is seriously screwed up. (Room #%d)", GET_ROOM_VNUM(IN_ROOM(ch)));
return (1);
return 1;
}
for (d = descriptor_list; d; d = d->next)
if (STATE(d) == CON_PLAYING && d->str == &(msg_storage[slot_num])) {
if (STATE(d) == CON_PLAYING && d->str == &msg_storage[slot_num]) {
send_to_char(ch, "At least wait until the author is finished before removing it!\r\n");
return (1);
return 1;
}
if (msg_storage[slot_num])
free(msg_storage[slot_num]);
@@ -404,7 +405,7 @@ int board_remove_msg(int board_type, struct char_data *ch, char *arg, struct obj
act(buf, FALSE, ch, 0, 0, TO_ROOM);
board_save_board(board_type);
return (1);
return 1;
}
void board_save_board(int board_type)
@@ -417,26 +418,26 @@ void board_save_board(int board_type)
remove(FILENAME(board_type));
return;
}
if (!(fl = fopen(FILENAME(board_type), "wb"))) {
if ((fl = fopen(FILENAME(board_type), "wb")) == NULL) {
perror("SYSERR: Error writing board");
return;
}
fwrite(&(num_of_msgs[board_type]), sizeof(int), 1, fl);
fwrite(&num_of_msgs[board_type], sizeof(int), 1, fl);
for (i = 0; i < num_of_msgs[board_type]; i++) {
if ((tmp1 = MSG_HEADING(board_type, i)) != NULL)
msg_index[board_type][i].heading_len = strlen(tmp1) + 1;
msg_index[board_type][i].heading_len = (int)strlen(tmp1) + 1;
else
msg_index[board_type][i].heading_len = 0;
if (MSG_SLOTNUM(board_type, i) < 0 ||
MSG_SLOTNUM(board_type, i) >= INDEX_SIZE ||
(!(tmp2 = msg_storage[MSG_SLOTNUM(board_type, i)])))
MSG_SLOTNUM(board_type, i) >= INDEX_SIZE ||
(tmp2 = msg_storage[MSG_SLOTNUM(board_type, i)]) == NULL)
msg_index[board_type][i].message_len = 0;
else
msg_index[board_type][i].message_len = strlen(tmp2) + 1;
msg_index[board_type][i].message_len = (int)strlen(tmp2) + 1;
fwrite(&(msg_index[board_type][i]), sizeof(struct board_msginfo), 1, fl);
fwrite(&msg_index[board_type][i], sizeof(struct board_msginfo), 1, fl);
if (tmp1)
fwrite(tmp1, sizeof(char), msg_index[board_type][i].heading_len, fl);
if (tmp2)
@@ -452,12 +453,12 @@ void board_load_board(int board_type)
int i, len1, len2;
char *tmp1, *tmp2;
if (!(fl = fopen(FILENAME(board_type), "rb"))) {
if ((fl = fopen(FILENAME(board_type), "rb")) == NULL) {
if (errno != ENOENT)
perror("SYSERR: Error reading board");
return;
}
if (fread(&(num_of_msgs[board_type]), sizeof(int), 1, fl) != 1)
if (fread(&num_of_msgs[board_type], sizeof(int), 1, fl) != 1)
return;
if (num_of_msgs[board_type] < 1 || num_of_msgs[board_type] > MAX_BOARD_MESSAGES) {
log("SYSERR: Board file %d corrupt. Resetting.", board_type);
@@ -465,7 +466,7 @@ void board_load_board(int board_type)
return;
}
for (i = 0; i < num_of_msgs[board_type]; i++) {
if (fread(&(msg_index[board_type][i]), sizeof(struct board_msginfo), 1, fl) != 1) {
if (fread(&msg_index[board_type][i], sizeof(struct board_msginfo), 1, fl) != 1) {
if (feof(fl))
log("SYSERR: Unexpected EOF encountered in board file %d! Resetting.", board_type);
else if (ferror(fl))
@@ -541,7 +542,7 @@ void board_clear_board(int board_type)
if (msg_storage[MSG_SLOTNUM(board_type, i)])
free(msg_storage[MSG_SLOTNUM(board_type, i)]);
msg_storage_taken[MSG_SLOTNUM(board_type, i)] = 0;
memset((char *)&(msg_index[board_type][i]),0,sizeof(struct board_msginfo));
memset((char *)&msg_index[board_type][i], 0, sizeof(struct board_msginfo));
msg_index[board_type][i].slot_num = -1;
}
num_of_msgs[board_type] = 0;

View File

@@ -1,41 +1,41 @@
/**
* @file boards.h
* Header file for the bulletin board system (boards.c).
*
*
* Part of the core tbaMUD source code distribution, which is a derivative
* of, and continuation of, CircleMUD.
*
* All rights reserved. See license for complete information.
* Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University
* CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991.
*
* All rights reserved. See license for complete information.
* Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University
* CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991.
*
*/
#ifndef _BOARDS_H_
#define _BOARDS_H_
#define NUM_OF_BOARDS 8 /* change if needed! */
#define MAX_BOARD_MESSAGES 60 /* arbitrary -- change if needed */
#define MAX_MESSAGE_LENGTH 4096 /* arbitrary -- change if needed */
#define NUM_OF_BOARDS 7 /* change if needed! */
#define MAX_BOARD_MESSAGES 60 /* arbitrary -- change if needed */
#define MAX_MESSAGE_LENGTH 4096 /* arbitrary -- change if needed */
#define INDEX_SIZE ((NUM_OF_BOARDS*MAX_BOARD_MESSAGES) + 5)
#define INDEX_SIZE ((NUM_OF_BOARDS*MAX_BOARD_MESSAGES) + 5)
#define BOARD_MAGIC 1048575 /* arbitrary number - see modify.c */
#define BOARD_MAGIC 1048575 /* arbitrary number - see modify.c */
struct board_msginfo {
int slot_num; /* pos of message in "master index" */
char *heading; /* pointer to message's heading */
int level; /* level of poster */
int heading_len; /* size of header (for file write) */
int message_len; /* size of message text (for file write) */
int slot_num; /* pos of message in "master index" */
char *heading; /* pointer to message's heading */
int level; /* level of poster */
int heading_len; /* size of header (for file write) */
int message_len; /* size of message text (for file write) */
};
struct board_info_type {
obj_vnum vnum; /* vnum of this board */
int read_lvl; /* min level to read messages on this board */
int write_lvl; /* min level to write messages on this board */
int remove_lvl; /* min level to remove messages from this board */
char filename[50]; /* file to save this board to */
obj_rnum rnum; /* rnum of this board */
obj_vnum vnum; /* vnum of this board */
int read_lvl; /* min level to read messages on this board */
int write_lvl; /* min level to write messages on this board */
int remove_lvl; /* min level to remove messages from this board */
char filename[50]; /* file to save this board to */
obj_rnum rnum; /* rnum of this board */
};
#define BOARD_VNUM(i) (board_info[i].vnum)
@@ -51,10 +51,10 @@ struct board_info_type {
#define MSG_LEVEL(i, j) (msg_index[i][j].level)
SPECIAL(gen_board);
int board_display_msg(int board_type, struct char_data *ch, char *arg, struct obj_data *board);
int board_show_board(int board_type, struct char_data *ch, char *arg, struct obj_data *board);
int board_remove_msg(int board_type, struct char_data *ch, char *arg, struct obj_data *board);
int board_write_message(int board_type, struct char_data *ch, char *arg, struct obj_data *board);
int board_display_msg(int board_type, char_data *ch, char *arg, obj_data *board);
int board_show_board(int board_type, char_data *ch, char *arg, obj_data *board);
int board_remove_msg(int board_type, char_data *ch, char *arg, obj_data *board);
int board_write_message(int board_type, char_data *ch, char *arg, obj_data *board);
void board_save_board(int board_type);
void board_load_board(int board_type);
void board_clear_all(void);

View File

@@ -1,9 +1,9 @@
/**
* @file bsd-snprintf.h
* Used if your OS does not provide snprintf() or vsnprintf().
*
*
* Part of the core tbaMUD source code distribution, which is a derivative
* of, and continuation of, CircleMUD.
* of, and continuation of, CircleMUD.
*/
/* This file taken from openbsd-compat of OpenSSH 3.1:

View File

@@ -13,7 +13,6 @@
#include "structs.h"
#include "utils.h"
#include "comm.h"
#include "interpreter.h"
#include "handler.h"
#include "db.h"
#include "spells.h"
@@ -30,18 +29,18 @@
/* local, file scope restricted functions */
static mob_vnum castle_virtual(mob_vnum offset);
static room_rnum castle_real_room(room_vnum roomoffset);
static struct char_data *find_npc_by_name(struct char_data *chAtChar, const char *pszName, int iLen);
static int block_way(struct char_data *ch, int cmd, char *arg, room_vnum iIn_room, int iProhibited_direction);
static int member_of_staff(struct char_data *chChar);
static int member_of_royal_guard(struct char_data *chChar);
static struct char_data *find_guard(struct char_data *chAtChar);
static struct char_data *get_victim(struct char_data *chAtChar);
static int banzaii(struct char_data *ch);
static int do_npc_rescue(struct char_data *ch_hero, struct char_data *ch_victim);
static int is_trash(struct obj_data *i);
static void fry_victim(struct char_data *ch);
static int castle_cleaner(struct char_data *ch, int cmd, int gripe);
static int castle_twin_proc(struct char_data *ch, int cmd, char *arg, int ctlnum, const char *twinname);
static char_data *find_npc_by_name(const char_data *chAtChar, const char *pszName, int iLen);
static int block_way(char_data *ch, int cmd, char *arg, room_vnum iIn_room, int iProhibited_direction);
static int member_of_staff(const char_data *chChar);
static int member_of_royal_guard(const char_data *chChar);
static char_data *find_guard(const char_data *chAtChar);
static char_data *get_victim(const char_data *chAtChar);
static int banzaii(char_data *ch);
static int do_npc_rescue(char_data *ch_hero, char_data *ch_victim);
static int is_trash(const obj_data *i);
static void fry_victim(char_data *ch);
static int castle_cleaner(char_data *ch, int cmd, int gripe);
static int castle_twin_proc(char_data *ch, int cmd, char *arg, int ctlnum, const char *twinname);
static void castle_mob_spec(mob_vnum mobnum, SPECIAL(*specproc));
/* Special procedures for Kings Castle by Pjotr. Coded by Sapowox. */
SPECIAL(CastleGuard);
@@ -129,86 +128,86 @@ void assign_kings_castle(void)
/* Routine: member_of_staff. Used to see if a character is a member of the
* castle staff. Used mainly by BANZAI:ng NPC:s. */
static int member_of_staff(struct char_data *chChar)
static int member_of_staff(const char_data *chChar)
{
int ch_num;
if (!IS_NPC(chChar))
return (FALSE);
return FALSE;
ch_num = GET_MOB_VNUM(chChar);
if (ch_num == castle_virtual(1))
return (TRUE);
return TRUE;
if (ch_num > castle_virtual(2) && ch_num < castle_virtual(15))
return (TRUE);
return TRUE;
if (ch_num > castle_virtual(15) && ch_num < castle_virtual(18))
return (TRUE);
return TRUE;
if (ch_num > castle_virtual(18) && ch_num < castle_virtual(30))
return (TRUE);
return TRUE;
return (FALSE);
return FALSE;
}
/* Function: member_of_royal_guard. Returns TRUE if the character is a guard on
* duty, otherwise FALSE. Used by Peter the captain of the royal guard. */
static int member_of_royal_guard(struct char_data *chChar)
static int member_of_royal_guard(const char_data *chChar)
{
int ch_num;
if (!chChar || !IS_NPC(chChar))
return (FALSE);
return FALSE;
ch_num = GET_MOB_VNUM(chChar);
if (ch_num == castle_virtual(3) || ch_num == castle_virtual(6))
return (TRUE);
return TRUE;
if (ch_num > castle_virtual(7) && ch_num < castle_virtual(12))
return (TRUE);
return TRUE;
if (ch_num > castle_virtual(23) && ch_num < castle_virtual(26))
return (TRUE);
return TRUE;
return (FALSE);
return FALSE;
}
/* Function: find_npc_by_name. Returns a pointer to an npc by the given name.
* Used by Tim and Tom. */
static struct char_data *find_npc_by_name(struct char_data *chAtChar,
static char_data *find_npc_by_name(const char_data *chAtChar,
const char *pszName, int iLen)
{
struct char_data *ch;
char_data *ch;
for (ch = world[IN_ROOM(chAtChar)].people; ch; ch = ch->next_in_room)
if (IS_NPC(ch) && !strncmp(pszName, ch->player.short_descr, iLen))
return (ch);
return ch;
return (NULL);
return NULL;
}
/* Function: find_guard. Returns the pointer to a guard on duty. Used by Peter
/* Function: find_guard. Returns the pointer to a guard on duty. Used by Peter
* the Captain of the Royal Guard */
static struct char_data *find_guard(struct char_data *chAtChar)
static char_data *find_guard(const char_data *chAtChar)
{
struct char_data *ch;
char_data *ch;
for (ch = world[IN_ROOM(chAtChar)].people; ch; ch = ch->next_in_room)
if (!FIGHTING(ch) && member_of_royal_guard(ch))
return (ch);
return ch;
return (NULL);
return NULL;
}
/* Function: get_victim. Returns a pointer to a randomly chosen character in
* the same room, fighting someone in the castle staff. Used by BANZAII-ing
/* Function: get_victim. Returns a pointer to a randomly chosen character in
* the same room, fighting someone in the castle staff. Used by BANZAII-ing
* characters and King Welmar... */
static struct char_data *get_victim(struct char_data *chAtChar)
static char_data *get_victim(const char_data *chAtChar)
{
struct char_data *ch;
char_data *ch;
int iNum_bad_guys = 0, iVictim;
for (ch = world[IN_ROOM(chAtChar)].people; ch; ch = ch->next_in_room)
@@ -216,11 +215,11 @@ static struct char_data *get_victim(struct char_data *chAtChar)
iNum_bad_guys++;
if (!iNum_bad_guys)
return (NULL);
return NULL;
iVictim = rand_number(0, iNum_bad_guys); /* How nice, we give them a chance */
if (!iVictim)
return (NULL);
return NULL;
iNum_bad_guys = 0;
@@ -234,39 +233,40 @@ static struct char_data *get_victim(struct char_data *chAtChar)
if (++iNum_bad_guys != iVictim)
continue;
return (ch);
return ch;
}
return (NULL);
return NULL;
}
/* Banzaii. Makes a character banzaii on attackers of the castle staff. Used
/* Banzaii. Makes a character banzaii on attackers of the castle staff. Used
* by Guards, Tim, Tom, Dick, David, Peter, Master, and the King. */
static int banzaii(struct char_data *ch)
static int banzaii(char_data *ch)
{
struct char_data *chOpponent;
char_data *chOpponent;
if (!AWAKE(ch) || GET_POS(ch) == POS_FIGHTING || !(chOpponent = get_victim(ch)))
return (FALSE);
if (!AWAKE(ch) || GET_POS(ch) == POS_FIGHTING || (chOpponent = get_victim(ch)) == NULL)
return FALSE;
act("$n roars: 'Protect the Kingdom of Great King Welmar! BANZAIIII!!!'",
FALSE, ch, 0, 0, TO_ROOM);
hit(ch, chOpponent, TYPE_UNDEFINED);
return (TRUE);
return TRUE;
}
/* Do_npc_rescue. Makes ch_hero rescue ch_victim. Used by Tim and Tom. */
static int do_npc_rescue(struct char_data *ch_hero, struct char_data *ch_victim)
static int do_npc_rescue(char_data *ch_hero, char_data *ch_victim)
{
struct char_data *ch_bad_guy;
char_data *ch_bad_guy;
for (ch_bad_guy = world[IN_ROOM(ch_hero)].people;
ch_bad_guy && (FIGHTING(ch_bad_guy) != ch_victim);
ch_bad_guy = ch_bad_guy->next_in_room);
ch_bad_guy && FIGHTING(ch_bad_guy) != ch_victim;
ch_bad_guy = ch_bad_guy->next_in_room)
;
/* NO WAY I'll rescue the one I'm fighting! */
if (!ch_bad_guy || ch_bad_guy == ch_hero)
return (FALSE);
return FALSE;
act("You bravely rescue $N.\r\n", FALSE, ch_hero, 0, ch_victim, TO_CHAR);
act("You are rescued by $N, your loyal friend!\r\n",
@@ -280,54 +280,54 @@ static int do_npc_rescue(struct char_data *ch_hero, struct char_data *ch_victim)
set_fighting(ch_hero, ch_bad_guy);
set_fighting(ch_bad_guy, ch_hero);
return (TRUE);
return TRUE;
}
/* Procedure to block a person trying to enter a room. Used by Tim/Tom at Kings
/* Procedure to block a person trying to enter a room. Used by Tim/Tom at Kings
* bedroom and Dick/David at treasury. */
static int block_way(struct char_data *ch, int cmd, char *arg, room_vnum iIn_room,
static int block_way(char_data *ch, int cmd, char *arg, room_vnum iIn_room,
int iProhibited_direction)
{
if (cmd != ++iProhibited_direction)
return (FALSE);
return FALSE;
if (ch->player.short_descr && !strncmp(ch->player.short_descr, "King Welmar", 11))
return (FALSE);
return FALSE;
if (IN_ROOM(ch) != real_room(iIn_room))
return (FALSE);
return FALSE;
if (!member_of_staff(ch))
act("The guard roars at $n and pushes $m back.", FALSE, ch, 0, 0, TO_ROOM);
send_to_char(ch, "The guard roars: 'Entrance is Prohibited!', and pushes you back.\r\n");
return (TRUE);
return TRUE;
}
/* Routine to check if an object is trash. Used by James the Butler and the
/* Routine to check if an object is trash. Used by James the Butler and the
* Cleaning Lady. */
static int is_trash(struct obj_data *i)
static int is_trash(const obj_data *i)
{
if (!OBJWEAR_FLAGGED(i, ITEM_WEAR_TAKE))
return (FALSE);
return FALSE;
if (GET_OBJ_TYPE(i) == ITEM_DRINKCON || GET_OBJ_COST(i) <= 10)
return (TRUE);
return TRUE;
return (FALSE);
return FALSE;
}
/* Fry_victim. Finds a suitabe victim, and cast some _NASTY_ spell on him. Used
/* Fry_victim. Finds a suitabe victim, and cast some _NASTY_ spell on him. Used
* by King Welmar. */
static void fry_victim(struct char_data *ch)
static void fry_victim(char_data *ch)
{
struct char_data *tch;
char_data *tch;
if (ch->points.mana < 10)
return;
/* Find someone suitable to fry ! */
if (!(tch = get_victim(ch)))
if ((tch = get_victim(ch)) == NULL)
return;
switch (rand_number(0, 8)) {
@@ -358,8 +358,6 @@ static void fry_victim(struct char_data *ch)
}
ch->points.mana -= 10;
return;
}
/* King_welmar. Control the actions and movements of the King. */
@@ -397,18 +395,19 @@ SPECIAL(king_welmar)
path_index = 0;
}
}
if (cmd || (GET_POS(ch) < POS_SLEEPING) ||
if (cmd || GET_POS(ch) < POS_SLEEPING ||
(GET_POS(ch) == POS_SLEEPING && !move))
return (FALSE);
return FALSE;
if (GET_POS(ch) == POS_FIGHTING) {
fry_victim(ch);
return (FALSE);
} else if (banzaii(ch))
return (FALSE);
return FALSE;
}
if (banzaii(ch))
return FALSE;
if (!move)
return (FALSE);
return FALSE;
switch (path[path_index]) {
case '0':
@@ -471,36 +470,40 @@ SPECIAL(king_welmar)
case '.':
move = FALSE;
break;
default:
log("default case hit in king_welmar spec proc. path_index=%d path[path_index] = %c",
path_index, path[path_index]);
break;
}
path_index++;
return (FALSE);
return FALSE;
}
/* Training_master. Acts actions to the training room, if his students are
* present. Also allowes warrior-class to practice. Used by the Training
/* Training_master. Acts actions to the training room, if his students are
* present. Also allowes warrior-class to practice. Used by the Training
* Master. */
SPECIAL(training_master)
{
struct char_data *pupil1, *pupil2 = NULL, *tch;
char_data *pupil1, *pupil2 = NULL, *tch;
if (!AWAKE(ch) || (GET_POS(ch) == POS_FIGHTING))
return (FALSE);
if (!AWAKE(ch) || GET_POS(ch) == POS_FIGHTING)
return FALSE;
if (cmd)
return (FALSE);
return FALSE;
if (banzaii(ch) || rand_number(0, 2))
return (FALSE);
return FALSE;
if (!(pupil1 = find_npc_by_name(ch, "Brian", 5)))
return (FALSE);
if ((pupil1 = find_npc_by_name(ch, "Brian", 5)) == NULL)
return FALSE;
if (!(pupil2 = find_npc_by_name(ch, "Mick", 4)))
return (FALSE);
if ((pupil2 = find_npc_by_name(ch, "Mick", 4)) == NULL)
return FALSE;
if (FIGHTING(pupil1) || FIGHTING(pupil2))
return (FALSE);
return FALSE;
if (rand_number(0, 1)) {
tch = pupil1;
@@ -562,7 +565,7 @@ SPECIAL(training_master)
break;
}
return (FALSE);
return FALSE;
}
SPECIAL(tom)
@@ -576,12 +579,12 @@ SPECIAL(tim)
}
/* Common routine for the Castle Twins. */
static int castle_twin_proc(struct char_data *ch, int cmd, char *arg, int ctlnum, const char *twinname)
static int castle_twin_proc(char_data *ch, int cmd, char *arg, int ctlnum, const char *twinname)
{
struct char_data *king, *twin;
char_data *king, *twin;
if (!AWAKE(ch))
return (FALSE);
return FALSE;
if (cmd)
return block_way(ch, cmd, arg, castle_virtual(ctlnum), 1);
@@ -595,18 +598,18 @@ static int castle_twin_proc(struct char_data *ch, int cmd, char *arg, int ctlnum
do_npc_rescue(ch, king);
}
if ((twin = find_npc_by_name(ch, twinname, strlen(twinname))) != NULL)
if ((twin = find_npc_by_name(ch, twinname, (int)strlen(twinname))) != NULL)
if (FIGHTING(twin) && 2 * GET_HIT(twin) < GET_HIT(ch))
do_npc_rescue(ch, twin);
if (GET_POS(ch) != POS_FIGHTING)
banzaii(ch);
return (FALSE);
return FALSE;
}
/* Routine for James the Butler. Complains if he finds any trash. This doesn't
/* Routine for James the Butler. Complains if he finds any trash. This doesn't
* make sure he _can_ carry it. */
SPECIAL(James)
{
@@ -614,12 +617,12 @@ SPECIAL(James)
}
/* Common code for James and the Cleaning Woman. */
static int castle_cleaner(struct char_data *ch, int cmd, int gripe)
static int castle_cleaner(char_data *ch, int cmd, int gripe)
{
struct obj_data *i;
obj_data *i;
if (cmd || !AWAKE(ch) || GET_POS(ch) == POS_FIGHTING)
return (FALSE);
return FALSE;
for (i = world[IN_ROOM(ch)].contents; i; i = i->next_content) {
if (!is_trash(i))
@@ -632,10 +635,10 @@ static int castle_cleaner(struct char_data *ch, int cmd, int gripe)
}
obj_from_room(i);
obj_to_char(i, ch);
return (TRUE);
return TRUE;
}
return (FALSE);
return FALSE;
}
/* Routine for the Cleaning Woman. Picks up any trash she finds. */
@@ -647,36 +650,36 @@ SPECIAL(cleaning)
/* CastleGuard. Standard routine for ordinary castle guards. */
SPECIAL(CastleGuard)
{
if (cmd || !AWAKE(ch) || (GET_POS(ch) == POS_FIGHTING))
return (FALSE);
if (cmd || !AWAKE(ch) || GET_POS(ch) == POS_FIGHTING)
return FALSE;
return (banzaii(ch));
return banzaii(ch);
}
/* DicknDave. Routine for the guards Dick and David. */
SPECIAL(DicknDavid)
{
if (!AWAKE(ch))
return (FALSE);
return FALSE;
if (!cmd && GET_POS(ch) != POS_FIGHTING)
banzaii(ch);
return (block_way(ch, cmd, argument, castle_virtual(36), 1));
return block_way(ch, cmd, argument, castle_virtual(36), 1);
}
/*Peter. Routine for Captain of the Guards. */
SPECIAL(peter)
{
struct char_data *ch_guard = NULL;
char_data *ch_guard = NULL;
if (cmd || !AWAKE(ch) || GET_POS(ch) == POS_FIGHTING)
return (FALSE);
return FALSE;
if (banzaii(ch))
return (FALSE);
return FALSE;
if (!(rand_number(0, 3)) && (ch_guard = find_guard(ch)))
if (!rand_number(0, 3) && (ch_guard = find_guard(ch)) != NULL)
switch (rand_number(0, 5)) {
case 0:
act("$N comes sharply into attention as $n inspects $M.",
@@ -725,32 +728,32 @@ SPECIAL(peter)
break;
}
return (FALSE);
return FALSE;
}
/* Procedure for Jerry and Michael in x08 of King's Castle. Code by Sapowox
/* Procedure for Jerry and Michael in x08 of King's Castle. Code by Sapowox
* modified by Pjotr.(Original code from Master) */
SPECIAL(jerry)
{
struct char_data *gambler1, *gambler2 = NULL, *tch;
char_data *gambler1, *gambler2 = NULL, *tch;
if (!AWAKE(ch) || (GET_POS(ch) == POS_FIGHTING))
return (FALSE);
if (!AWAKE(ch) || GET_POS(ch) == POS_FIGHTING)
return FALSE;
if (cmd)
return (FALSE);
return FALSE;
if (banzaii(ch) || rand_number(0, 2))
return (FALSE);
return FALSE;
if (!(gambler1 = ch))
return (FALSE);
if ((gambler1 = ch) == NULL)
return FALSE;
if (!(gambler2 = find_npc_by_name(ch, "Michael", 7)))
return (FALSE);
if ((gambler2 = find_npc_by_name(ch, "Michael", 7)) == NULL)
return FALSE;
if (FIGHTING(gambler1) || FIGHTING(gambler2))
return (FALSE);
return FALSE;
if (rand_number(0, 1)) {
tch = gambler1;
@@ -808,5 +811,5 @@ SPECIAL(jerry)
FALSE, gambler1, 0, gambler2, TO_VICT);
break;
}
return (FALSE);
return FALSE;
}

View File

@@ -19,20 +19,20 @@
#include "modify.h"
/* local scope functions, not used externally */
static void cedit_disp_menu(struct descriptor_data *d);
static void cedit_save_internally(struct descriptor_data *d);
static void cedit_disp_game_play_options(struct descriptor_data *d);
static void cedit_disp_crash_save_options(struct descriptor_data *d);
static void cedit_disp_room_numbers(struct descriptor_data *d);
static void cedit_disp_operation_options(struct descriptor_data *d);
static void cedit_disp_autowiz_options(struct descriptor_data *d);
static void cedit_disp_menu(descriptor_data *d);
static void cedit_save_internally(descriptor_data *d);
static void cedit_disp_game_play_options(descriptor_data *d);
static void cedit_disp_crash_save_options(descriptor_data *d);
static void cedit_disp_room_numbers(descriptor_data *d);
static void cedit_disp_operation_options(descriptor_data *d);
static void cedit_disp_autowiz_options(descriptor_data *d);
static void reassign_rooms(void);
static void cedit_setup(struct descriptor_data *d);
static void cedit_setup(descriptor_data *d);
ACMD(do_oasis_cedit)
{
struct descriptor_data *d;
descriptor_data *d;
char buf1[MAX_STRING_LENGTH];
/* No building as a mob or while being forced. */
@@ -72,7 +72,7 @@ ACMD(do_oasis_cedit)
cedit_save_to_disk();
}
static void cedit_setup(struct descriptor_data *d)
static void cedit_setup(descriptor_data *d)
{
/* Create the config_data struct. */
CREATE(OLC_CONFIG(d), struct config_data, 1);
@@ -178,7 +178,7 @@ static void cedit_setup(struct descriptor_data *d)
cedit_disp_menu(d);
}
static void cedit_save_internally(struct descriptor_data *d)
static void cedit_save_internally(descriptor_data *d)
{
/* see if we need to reassign spec procs on rooms */
int reassign = (CONFIG_DTS_ARE_DUMPS != OLC_CONFIG(d)->play.dts_are_dumps);
@@ -578,7 +578,7 @@ int save_config( IDXTYPE nowhere )
}
/* Menu functions - The main menu. */
static void cedit_disp_menu(struct descriptor_data *d)
static void cedit_disp_menu(descriptor_data *d)
{
get_char_colors(d->character);
@@ -606,7 +606,7 @@ static void cedit_disp_menu(struct descriptor_data *d)
OLC_MODE(d) = CEDIT_MAIN_MENU;
}
static void cedit_disp_game_play_options(struct descriptor_data *d)
static void cedit_disp_game_play_options(descriptor_data *d)
{
int m_opt;
m_opt = OLC_CONFIG(d)->play.map_option;
@@ -679,7 +679,7 @@ static void cedit_disp_game_play_options(struct descriptor_data *d)
OLC_MODE(d) = CEDIT_GAME_OPTIONS_MENU;
}
static void cedit_disp_crash_save_options(struct descriptor_data *d)
static void cedit_disp_crash_save_options(descriptor_data *d)
{
get_char_colors(d->character);
clear_screen(d);
@@ -707,7 +707,7 @@ static void cedit_disp_crash_save_options(struct descriptor_data *d)
OLC_MODE(d) = CEDIT_CRASHSAVE_OPTIONS_MENU;
}
static void cedit_disp_room_numbers(struct descriptor_data *d)
static void cedit_disp_room_numbers(descriptor_data *d)
{
get_char_colors(d->character);
clear_screen(d);
@@ -733,7 +733,7 @@ static void cedit_disp_room_numbers(struct descriptor_data *d)
OLC_MODE(d) = CEDIT_ROOM_NUMBERS_MENU;
}
static void cedit_disp_operation_options(struct descriptor_data *d)
static void cedit_disp_operation_options(descriptor_data *d)
{
get_char_colors(d->character);
clear_screen(d);
@@ -785,7 +785,7 @@ static void cedit_disp_operation_options(struct descriptor_data *d)
OLC_MODE(d) = CEDIT_OPERATION_OPTIONS_MENU;
}
static void cedit_disp_autowiz_options(struct descriptor_data *d)
static void cedit_disp_autowiz_options(descriptor_data *d)
{
get_char_colors(d->character);
clear_screen(d);
@@ -804,7 +804,7 @@ static void cedit_disp_autowiz_options(struct descriptor_data *d)
}
/* The event handler. */
void cedit_parse(struct descriptor_data *d, char *arg)
void cedit_parse(descriptor_data *d, char *arg)
{
char *oldtext = NULL;
@@ -1520,12 +1520,12 @@ void cedit_parse(struct descriptor_data *d, char *arg)
write_to_output(d,
"That is an invalid choice!\r\n"
"Enter the room's vnum where mortals should load into : ");
} else if (real_room(atoi(arg)) == NOWHERE) {
} else if (real_room(atoidx(arg)) == NOWHERE) {
write_to_output(d,
"That room doesn't exist!\r\n"
"Enter the room's vnum where mortals should load into : ");
} else {
OLC_CONFIG(d)->room_nums.mortal_start_room = atoi(arg);
OLC_CONFIG(d)->room_nums.mortal_start_room = atoidx(arg);
cedit_disp_room_numbers(d);
}
break;
@@ -1535,12 +1535,12 @@ void cedit_parse(struct descriptor_data *d, char *arg)
write_to_output(d,
"That is an invalid choice!\r\n"
"Enter the room's vnum where immortals should load into : ");
} else if (real_room(atoi(arg)) == NOWHERE) {
} else if (real_room(atoidx(arg)) == NOWHERE) {
write_to_output(d,
"That room doesn't exist!\r\n"
"Enter the room's vnum where immortals should load into : ");
} else {
OLC_CONFIG(d)->room_nums.immort_start_room = atoi(arg);
OLC_CONFIG(d)->room_nums.immort_start_room = atoidx(arg);
cedit_disp_room_numbers(d);
}
break;
@@ -1550,12 +1550,12 @@ void cedit_parse(struct descriptor_data *d, char *arg)
write_to_output(d,
"That is an invalid choice!\r\n"
"Enter the room's vnum where frozen people should load into : ");
} else if (real_room(atoi(arg)) == NOWHERE) {
} else if (real_room(atoidx(arg)) == NOWHERE) {
write_to_output(d,
"That room doesn't exist!\r\n"
"Enter the room's vnum where frozen people should load into : ");
} else {
OLC_CONFIG(d)->room_nums.frozen_start_room = atoi(arg);
OLC_CONFIG(d)->room_nums.frozen_start_room = atoidx(arg);
cedit_disp_room_numbers(d);
}
break;
@@ -1565,12 +1565,12 @@ void cedit_parse(struct descriptor_data *d, char *arg)
write_to_output(d,
"That is an invalid choice!\r\n"
"Enter the vnum for donation room #1 : ");
} else if (real_room(atoi(arg)) == NOWHERE) {
} else if (real_room(atoidx(arg)) == NOWHERE) {
write_to_output(d,
"That room doesn't exist!\r\n"
"Enter the vnum for donation room #1 : ");
} else {
OLC_CONFIG(d)->room_nums.donation_room_1 = atoi(arg);
OLC_CONFIG(d)->room_nums.donation_room_1 = atoidx(arg);
cedit_disp_room_numbers(d);
}
break;
@@ -1580,12 +1580,12 @@ void cedit_parse(struct descriptor_data *d, char *arg)
write_to_output(d,
"That is an invalid choice!\r\n"
"Enter the vnum for donation room #2 : ");
} else if (real_room(atoi(arg)) == NOWHERE) {
} else if (real_room(atoidx(arg)) == NOWHERE) {
write_to_output(d,
"That room doesn't exist!\r\n"
"Enter the vnum for donation room #2 : ");
} else {
OLC_CONFIG(d)->room_nums.donation_room_2 = atoi(arg);
OLC_CONFIG(d)->room_nums.donation_room_2 = atoidx(arg);
cedit_disp_room_numbers(d);
}
break;
@@ -1595,12 +1595,12 @@ void cedit_parse(struct descriptor_data *d, char *arg)
write_to_output(d,
"That is an invalid choice!\r\n"
"Enter the vnum for donation room #3 : ");
} else if (real_room(atoi(arg)) == NOWHERE) {
} else if (real_room(atoidx(arg)) == NOWHERE) {
write_to_output(d,
"That room doesn't exist!\r\n"
"Enter the vnum for donation room #3 : ");
} else {
OLC_CONFIG(d)->room_nums.donation_room_3 = atoi(arg);
OLC_CONFIG(d)->room_nums.donation_room_3 = atoidx(arg);
cedit_disp_room_numbers(d);
}
break;
@@ -1729,7 +1729,7 @@ static void reassign_rooms(void)
assign_rooms();
}
void cedit_string_cleanup(struct descriptor_data *d, int terminator)
void cedit_string_cleanup(descriptor_data *d, int terminator)
{
switch (OLC_MODE(d)) {
case CEDIT_MENU:

View File

@@ -1343,7 +1343,7 @@ int thaco(int class_num, int level)
/* Roll the 6 stats for a character... each stat is made of the sum of the best
* 3 out of 4 rolls of a 6-sided die. Each class then decides which priority
* will be given for the best to worst stats. */
void roll_real_abils(struct char_data *ch)
void roll_real_abils(char_data *ch)
{
int i, j, k, temp;
ubyte table[6];
@@ -1410,7 +1410,7 @@ void roll_real_abils(struct char_data *ch)
}
/* Some initializations for characters, including initial skills */
void do_start(struct char_data *ch)
void do_start(char_data *ch)
{
GET_LEVEL(ch) = 1;
GET_EXP(ch) = 1;
@@ -1459,7 +1459,7 @@ void do_start(struct char_data *ch)
/* This function controls the change to maxmove, maxmana, and maxhp for each
* class every time they gain a level. */
void advance_level(struct char_data *ch)
void advance_level(char_data *ch)
{
int add_hp, add_mana = 0, add_move = 0, i;
@@ -1537,7 +1537,7 @@ int backstab_mult(int level)
/* invalid_class is used by handler.c to determine if a piece of equipment is
* usable by a particular class, based on the ITEM_ANTI_{class} bitvectors. */
int invalid_class(struct char_data *ch, struct obj_data *obj)
int invalid_class(char_data *ch, obj_data *obj)
{
if (OBJ_FLAGGED(obj, ITEM_ANTI_MAGIC_USER) && IS_MAGIC_USER(ch))
return TRUE;

View File

@@ -1,13 +1,13 @@
/**
* @file class.h
* Header file for class specific functions and variables.
*
*
* Part of the core tbaMUD source code distribution, which is a derivative
* of, and continuation of, CircleMUD.
*
* All rights reserved. See license for complete information.
* Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University
* CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991.
*
* All rights reserved. See license for complete information.
* Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University
* CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991.
*
*/
#ifndef _CLASS_H_
@@ -15,12 +15,12 @@
/* Functions available through class.c */
int backstab_mult(int level);
void do_start(struct char_data *ch);
void do_start(char_data *ch);
bitvector_t find_class_bitvector(const char *arg);
int invalid_class(struct char_data *ch, struct obj_data *obj);
int invalid_class(char_data *ch, obj_data *obj);
int level_exp(int chclass, int level);
int parse_class(char arg);
void roll_real_abils(struct char_data *ch);
void roll_real_abils(char_data *ch);
byte saving_throws(int class_num, int type, int level);
int thaco(int class_num, int level);
const char *title_female(int chclass, int level);

File diff suppressed because it is too large Load Diff

View File

@@ -13,24 +13,18 @@
#ifndef _COMM_H_
#define _COMM_H_
#define NUM_RESERVED_DESCS 8
#define NUM_RESERVED_DESCS 8
#define COPYOVER_FILE "copyover.dat"
/* comm.c */
void close_socket(struct descriptor_data *d);
void close_socket(descriptor_data *d);
void game_info(const char *messg, ...) __attribute__ ((format (printf, 1, 2)));
size_t send_to_char(struct char_data *ch, const char *messg, ...) __attribute__
((format (printf, 2, 3)));
void send_to_all(const char *messg, ...) __attribute__ ((format (printf, 1,
2)));
void send_to_room(room_rnum room, const char *messg, ...) __attribute__ ((format
(printf, 2, 3)));
void send_to_outdoor(const char *messg, ...) __attribute__ ((format (printf, 1,
2)));
void send_to_group(struct char_data *ch, struct group_data *group, const char * msg, ...) __attribute__ ((format
(printf, 3, 4)));
void send_to_range(room_vnum start, room_vnum finish, const char *messg, ...)
__attribute__ ((format (printf, 3, 4)));
size_t send_to_char(const char_data *ch, const char *messg, ...) __attribute__((format (printf, 2, 3)));
void send_to_all(const char *messg, ...) __attribute__ ((format (printf, 1, 2)));
void send_to_room(room_rnum room, const char *messg, ...) __attribute__ ((format (printf, 2, 3)));
void send_to_outdoor(const char *messg, ...) __attribute__ ((format (printf, 1, 2)));
void send_to_group(const char_data *ch, const struct group_data *group, const char * msg, ...) __attribute__ ((format(printf, 3, 4)));
void send_to_range(room_vnum start, room_vnum finish, const char *messg, ...) __attribute__ ((format (printf, 3, 4)));
/* Act type settings and flags */
#define TO_ROOM 1 /**< act() type: to everyone in room, except ch. */
@@ -38,29 +32,29 @@ void send_to_range(room_vnum start, room_vnum finish, const char *messg, ...)
#define TO_NOTVICT 3 /**< act() type: to everyone in room, not ch or vict_obj. */
#define TO_CHAR 4 /**< act() type: to ch. */
#define TO_GMOTE 5 /**< act() type: to gemote channel (global emote) */
#define TO_SLEEP 128 /**< act() flag: to char, even if sleeping */
#define TO_SLEEP 128 /**< act() flag: to char, even if sleeping */
#define DG_NO_TRIG 256 /**< act() flag: don't check act trigger */
/* act functions */
void perform_act(const char *orig, struct char_data *ch, struct obj_data *obj, void *vict_obj, struct char_data *to);
char * act(const char *str, int hide_invisible, struct char_data *ch, struct obj_data *obj, void *vict_obj, int type);
void perform_act(const char *orig, char_data *ch, obj_data *obj, void *vict_obj, char_data *to);
char * act(const char *str, int hide_invisible, char_data *ch, obj_data *obj, void *vict_obj, int type);
/* I/O functions */
void write_to_q(const char *txt, struct txt_q *queue, int aliased);
int write_to_descriptor(socket_t desc, const char *txt);
size_t write_to_output(struct descriptor_data *d, const char *txt, ...) __attribute__ ((format (printf, 2, 3)));
size_t vwrite_to_output(struct descriptor_data *d, const char *format, va_list args);
void write_to_q(const char *txt, struct txt_q *queue, int aliased);
ssize_t write_to_descriptor(socket_t desc, const char *txt);
size_t write_to_output(descriptor_data *d, const char *txt, ...) __attribute__ ((format (printf, 2, 3)));
size_t vwrite_to_output(descriptor_data *d, const char *format, va_list args);
typedef RETSIGTYPE sigfunc(int);
void echo_off(struct descriptor_data *d);
void echo_on(struct descriptor_data *d);
void echo_off(descriptor_data *d);
void echo_on(descriptor_data *d);
void game_loop(socket_t mother_desc);
void heartbeat(int heart_pulse);
void heartbeat(unsigned long heart_pulse);
void copyover_recover(void);
extern struct descriptor_data *descriptor_list;
extern descriptor_data *descriptor_list;
extern int buf_largecount;
extern int buf_overflows;
extern int buf_switches;

104
src/db.c
View File

@@ -46,14 +46,14 @@ struct config_data config_info; /* Game configuration list. */
struct room_data *world = NULL; /* array of rooms */
room_rnum top_of_world = 0; /* ref to top element of world */
struct char_data *character_list = NULL; /* global linked list of chars */
char_data *character_list = NULL; /* global linked list of chars */
struct index_data *mob_index; /* index table for mobile file */
struct char_data *mob_proto; /* prototypes for mobs */
char_data *mob_proto; /* prototypes for mobs */
mob_rnum top_of_mobt = 0; /* top of mobile index table */
struct obj_data *object_list = NULL; /* global linked list of objs */
obj_data *object_list = NULL; /* global linked list of objs */
struct index_data *obj_index; /* index table for object file */
struct obj_data *obj_proto; /* prototypes for objs */
obj_data *obj_proto; /* prototypes for objs */
obj_rnum top_of_objt = 0; /* top of object index table */
struct zone_data *zone_table; /* zone table */
@@ -128,9 +128,9 @@ static int converting = FALSE;
/* Local (file scope) utility functions */
static int check_bitvector_names(bitvector_t bits, size_t namecount, const char *whatami, const char *whatbits);
static int check_object_spell_number(struct obj_data *obj, int val);
static int check_object_level(struct obj_data *obj, int val);
static int check_object(struct obj_data *);
static int check_object_spell_number(obj_data *obj, int val);
static int check_object_level(obj_data *obj, int val);
static int check_object(obj_data *);
static void load_zones(FILE *fl, char *zonename);
static int file_to_string(const char *name, char *buf);
static int file_to_string_alloc(const char *name, char **buf);
@@ -501,8 +501,8 @@ static void free_extra_descriptions(struct extra_descr_data *edesc)
void destroy_db(void)
{
ssize_t cnt, itr;
struct char_data *chtmp, *i = character_list;
struct obj_data *objtmp;
char_data *chtmp, *i = character_list;
obj_data *objtmp;
/* Active Mobiles & Players */
while (i) {
@@ -1040,17 +1040,17 @@ void index_boot(int mode)
log(" %d rooms, %d bytes.", rec_count, size[0]);
break;
case DB_BOOT_MOB:
CREATE(mob_proto, struct char_data, rec_count);
CREATE(mob_proto, char_data, rec_count);
CREATE(mob_index, struct index_data, rec_count);
size[0] = sizeof(struct index_data) * rec_count;
size[1] = sizeof(struct char_data) * rec_count;
size[1] = sizeof(char_data) * rec_count;
log(" %d mobs, %d bytes in index, %d bytes in prototypes.", rec_count, size[0], size[1]);
break;
case DB_BOOT_OBJ:
CREATE(obj_proto, struct obj_data, rec_count);
CREATE(obj_proto, obj_data, rec_count);
CREATE(obj_index, struct index_data, rec_count);
size[0] = sizeof(struct index_data) * rec_count;
size[1] = sizeof(struct obj_data) * rec_count;
size[1] = sizeof(obj_data) * rec_count;
log(" %d objs, %d bytes in index, %d bytes in prototypes.", rec_count, size[0], size[1]);
break;
case DB_BOOT_ZON:
@@ -2349,7 +2349,7 @@ static int hsort(const void *a, const void *b)
return (str_cmp(a1->keywords, b1->keywords));
}
int vnum_mobile(char *searchname, struct char_data *ch)
int vnum_mobile(char *searchname, char_data *ch)
{
int nr, found = 0;
@@ -2362,7 +2362,7 @@ int vnum_mobile(char *searchname, struct char_data *ch)
return (found);
}
int vnum_object(char *searchname, struct char_data *ch)
int vnum_object(char *searchname, char_data *ch)
{
int nr, found = 0;
@@ -2375,7 +2375,7 @@ int vnum_object(char *searchname, struct char_data *ch)
return (found);
}
int vnum_room(char *searchname, struct char_data *ch)
int vnum_room(char *searchname, char_data *ch)
{
int nr, found = 0;
@@ -2387,7 +2387,7 @@ int vnum_room(char *searchname, struct char_data *ch)
return (found);
}
int vnum_trig(char *searchname, struct char_data *ch)
int vnum_trig(char *searchname, char_data *ch)
{
int nr, found = 0;
for (nr = 0; nr < top_of_trigt; nr++)
@@ -2398,11 +2398,11 @@ int vnum_trig(char *searchname, struct char_data *ch)
}
/* create a character, and add it to the char list */
struct char_data *create_char(void)
char_data *create_char(void)
{
struct char_data *ch;
char_data *ch;
CREATE(ch, struct char_data, 1);
CREATE(ch, char_data, 1);
clear_char(ch);
new_mobile_data(ch);
@@ -2415,7 +2415,7 @@ struct char_data *create_char(void)
return (ch);
}
void new_mobile_data(struct char_data *ch)
void new_mobile_data(char_data *ch)
{
ch->events = NULL;
ch->group = NULL;
@@ -2423,10 +2423,10 @@ void new_mobile_data(struct char_data *ch)
/* create a new mobile from a prototype */
struct char_data *read_mobile(mob_vnum nr, int type) /* and mob_rnum */
char_data *read_mobile(mob_vnum nr, int type) /* and mob_rnum */
{
mob_rnum i;
struct char_data *mob;
char_data *mob;
if (type == VIRTUAL) {
if ((i = real_mobile(nr)) == NOBODY) {
@@ -2436,7 +2436,7 @@ struct char_data *read_mobile(mob_vnum nr, int type) /* and mob_rnum */
} else
i = nr;
CREATE(mob, struct char_data, 1);
CREATE(mob, char_data, 1);
clear_char(mob);
*mob = mob_proto[i];
@@ -2470,11 +2470,11 @@ struct char_data *read_mobile(mob_vnum nr, int type) /* and mob_rnum */
}
/* create an object, and add it to the object list */
struct obj_data *create_obj(void)
obj_data *create_obj(void)
{
struct obj_data *obj;
obj_data *obj;
CREATE(obj, struct obj_data, 1);
CREATE(obj, obj_data, 1);
clear_object(obj);
obj->next = object_list;
object_list = obj;
@@ -2487,9 +2487,9 @@ struct obj_data *create_obj(void)
}
/* create a new object from a prototype */
struct obj_data *read_object(obj_vnum nr, int type) /* and obj_rnum */
obj_data *read_object(obj_vnum nr, int type) /* and obj_rnum */
{
struct obj_data *obj;
obj_data *obj;
obj_rnum i = type == VIRTUAL ? real_object(nr) : nr;
if (i == NOTHING || i > top_of_objt) {
@@ -2497,7 +2497,7 @@ struct obj_data *read_object(obj_vnum nr, int type) /* and obj_rnum */
return (NULL);
}
CREATE(obj, struct obj_data, 1);
CREATE(obj, obj_data, 1);
clear_object(obj);
*obj = obj_proto[i];
obj->next = object_list;
@@ -2565,7 +2565,7 @@ void zone_update(void)
reset_zone(update_u->zone_to_reset);
mudlog(CMP, LVL_IMPL+1, FALSE, "Auto zone reset: %s (Zone %d)",
zone_table[update_u->zone_to_reset].name, zone_table[update_u->zone_to_reset].number);
struct descriptor_data *pt;
descriptor_data *pt;
for (pt = descriptor_list; pt; pt = pt->next)
if (IS_PLAYING(pt) && pt->character && PRF_FLAGGED(pt->character, PRF_ZONERESETS))
send_to_char(pt->character, "%s[Auto zone reset: %s (Zone %d)]%s",
@@ -2603,12 +2603,12 @@ static void log_zone_error(zone_rnum zone, int cmd_no, const char *message)
void reset_zone(zone_rnum zone)
{
int cmd_no, last_cmd = 0;
struct char_data *mob = NULL;
struct obj_data *obj, *obj_to;
char_data *mob = NULL;
obj_data *obj, *obj_to;
room_vnum rvnum;
room_rnum rrnum;
struct char_data *tmob=NULL; /* for trigger assignment */
struct obj_data *tobj=NULL; /* for trigger assignment */
char_data *tmob=NULL; /* for trigger assignment */
obj_data *tobj=NULL; /* for trigger assignment */
for (cmd_no = 0; ZCMD.command != 'S'; cmd_no++) {
@@ -2835,7 +2835,7 @@ void reset_zone(zone_rnum zone)
/* for use in reset_zone; return TRUE if zone 'nr' is free of PC's */
int is_empty(zone_rnum zone_nr)
{
struct descriptor_data *i;
descriptor_data *i;
for (i = descriptor_list; i; i = i->next) {
if (STATE(i) != CON_PLAYING)
@@ -3226,7 +3226,7 @@ static void free_followers(struct follow_type *k)
}
/* release memory allocated for a char struct */
void free_char(struct char_data *ch)
void free_char(char_data *ch)
{
int i;
struct alias_data *a;
@@ -3320,7 +3320,7 @@ void free_char(struct char_data *ch)
}
/* release memory allocated for an obj struct */
void free_obj(struct obj_data *obj)
void free_obj(obj_data *obj)
{
if (GET_OBJ_RNUM(obj) == NOWHERE) {
free_object_strings(obj);
@@ -3357,7 +3357,7 @@ static int file_to_string_alloc(const char *name, char **buf)
{
int temppage;
char temp[MAX_STRING_LENGTH];
struct descriptor_data *in_use;
descriptor_data *in_use;
for (in_use = descriptor_list; in_use; in_use = in_use->next)
if (in_use->showstr_vector && *in_use->showstr_vector == *buf)
@@ -3435,7 +3435,7 @@ static int file_to_string(const char *name, char *buf)
}
/* clear some of the the working variables of a char */
void reset_char(struct char_data *ch)
void reset_char(char_data *ch)
{
int i;
@@ -3467,9 +3467,9 @@ void reset_char(struct char_data *ch)
}
/* clear ALL the working variables of a char; do NOT free any space alloc'ed */
void clear_char(struct char_data *ch)
void clear_char(char_data *ch)
{
memset((char *) ch, 0, sizeof(struct char_data));
memset((char *) ch, 0, sizeof(char_data));
IN_ROOM(ch) = NOWHERE;
GET_PFILEPOS(ch) = -1;
@@ -3484,9 +3484,9 @@ void clear_char(struct char_data *ch)
ch->points.max_mana = 100;
}
void clear_object(struct obj_data *obj)
void clear_object(obj_data *obj)
{
memset((char *) obj, 0, sizeof(struct obj_data));
memset((char *) obj, 0, sizeof(obj_data));
obj->item_number = NOTHING;
IN_ROOM(obj) = NOWHERE;
@@ -3495,7 +3495,7 @@ void clear_object(struct obj_data *obj)
/* Called during character creation after picking character class (and then
* never again for that character). */
void init_char(struct char_data *ch)
void init_char(char_data *ch)
{
int i;
@@ -3597,7 +3597,7 @@ room_rnum real_room(room_vnum vnum)
bot = 0;
top = top_of_world;
if (world[bot].number > vnum || world[top].number < vnum)
if (vnum == NOWHERE || world[bot].number > vnum || world[top].number < vnum)
return (NOWHERE);
/* perform binary search on world-table */
@@ -3623,7 +3623,7 @@ mob_rnum real_mobile(mob_vnum vnum)
top = top_of_mobt;
/* quickly reject out-of-range vnums */
if (mob_index[bot].vnum > vnum || mob_index[top].vnum < vnum)
if (vnum == NOBODY || mob_index[bot].vnum > vnum || mob_index[top].vnum < vnum)
return (NOBODY);
/* perform binary search on mob-table */
@@ -3649,7 +3649,7 @@ obj_rnum real_object(obj_vnum vnum)
top = top_of_objt;
/* quickly reject out-of-range vnums */
if (obj_index[bot].vnum > vnum || obj_index[top].vnum < vnum)
if (vnum == NOTHING || obj_index[bot].vnum > vnum || obj_index[top].vnum < vnum)
return (NOTHING);
/* perform binary search on obj-table */
@@ -3674,7 +3674,7 @@ zone_rnum real_zone(zone_vnum vnum)
bot = 0;
top = top_of_zone_table;
if (zone_table[bot].number > vnum || zone_table[top].number < vnum)
if (vnum == NOWHERE || zone_table[bot].number > vnum || zone_table[top].number < vnum)
return (NOWHERE);
/* perform binary search on zone-table */
@@ -3692,7 +3692,7 @@ zone_rnum real_zone(zone_vnum vnum)
}
/* Extend later to include more checks and add checks for unknown bitvectors. */
static int check_object(struct obj_data *obj)
static int check_object(obj_data *obj)
{
char objname[MAX_INPUT_LENGTH + 32];
int error = FALSE, y;
@@ -3770,7 +3770,7 @@ static int check_object(struct obj_data *obj)
return (error);
}
static int check_object_spell_number(struct obj_data *obj, int val)
static int check_object_spell_number(obj_data *obj, int val)
{
int error = FALSE;
const char *spellname;
@@ -3804,7 +3804,7 @@ static int check_object_spell_number(struct obj_data *obj, int val)
return (error);
}
static int check_object_level(struct obj_data *obj, int val)
static int check_object_level(obj_data *obj, int val)
{
int error = FALSE;

331
src/db.h
View File

@@ -15,98 +15,98 @@
/* arbitrary constants used by index_boot() (must be unique) */
#define DB_BOOT_WLD 0
#define DB_BOOT_MOB 1
#define DB_BOOT_OBJ 2
#define DB_BOOT_ZON 3
#define DB_BOOT_SHP 4
#define DB_BOOT_HLP 5
#define DB_BOOT_TRG 6
#define DB_BOOT_WLD 0
#define DB_BOOT_MOB 1
#define DB_BOOT_OBJ 2
#define DB_BOOT_ZON 3
#define DB_BOOT_SHP 4
#define DB_BOOT_HLP 5
#define DB_BOOT_TRG 6
#define DB_BOOT_QST 7
#if defined(CIRCLE_MACINTOSH)
#define LIB_WORLD ":world:"
#define LIB_TEXT ":text:"
#define LIB_TEXT_HELP ":text:help:"
#define LIB_MISC ":misc:"
#define LIB_ETC ":etc:"
#define LIB_PLRTEXT ":plrtext:"
#define LIB_PLROBJS ":plrobjs:"
#define LIB_PLRVARS ":plrvars:"
#define LIB_PLRFILES ":plrfiles:"
#define LIB_HOUSE ":house:"
#define SLASH ":"
#define LIB_WORLD ":world:"
#define LIB_TEXT ":text:"
#define LIB_TEXT_HELP ":text:help:"
#define LIB_MISC ":misc:"
#define LIB_ETC ":etc:"
#define LIB_PLRTEXT ":plrtext:"
#define LIB_PLROBJS ":plrobjs:"
#define LIB_PLRVARS ":plrvars:"
#define LIB_PLRFILES ":plrfiles:"
#define LIB_HOUSE ":house:"
#define SLASH ":"
#elif defined(CIRCLE_AMIGA) || defined(CIRCLE_UNIX) || defined(CIRCLE_WINDOWS) || defined(CIRCLE_ACORN) || defined(CIRCLE_VMS)
#define LIB_WORLD "world/"
#define LIB_TEXT "text/"
#define LIB_TEXT_HELP "text/help/"
#define LIB_MISC "misc/"
#define LIB_ETC "etc/"
#define LIB_PLRTEXT "plrtext/"
#define LIB_PLROBJS "plrobjs/"
#define LIB_PLRVARS "plrvars/"
#define LIB_HOUSE "house/"
#define LIB_PLRFILES "plrfiles/"
#define SLASH "/"
#define LIB_WORLD "world/"
#define LIB_TEXT "text/"
#define LIB_TEXT_HELP "text/help/"
#define LIB_MISC "misc/"
#define LIB_ETC "etc/"
#define LIB_PLRTEXT "plrtext/"
#define LIB_PLROBJS "plrobjs/"
#define LIB_PLRVARS "plrvars/"
#define LIB_HOUSE "house/"
#define LIB_PLRFILES "plrfiles/"
#define SLASH "/"
#else
#error "Unknown path components."
#endif
#define SUF_OBJS "objs"
#define SUF_TEXT "text"
#define SUF_MEM "mem"
#define SUF_PLR "plr"
#define SUF_OBJS "objs"
#define SUF_TEXT "text"
#define SUF_MEM "mem"
#define SUF_PLR "plr"
#if defined(CIRCLE_AMIGA)
#define EXE_FILE "/bin/circle" /* maybe use argv[0] but it's not reliable */
#define KILLSCRIPT_FILE "/.killscript" /* autorun: shut mud down */
#define PAUSE_FILE "/pause" /* autorun: don't restart mud */
#define EXE_FILE "/bin/circle" /* maybe use argv[0] but it's not reliable */
#define KILLSCRIPT_FILE "/.killscript" /* autorun: shut mud down */
#define PAUSE_FILE "/pause" /* autorun: don't restart mud */
#elif defined(CIRCLE_MACINTOSH)
#define EXE_FILE "::bin:circle" /* maybe use argv[0] but it's not reliable */
#define FASTBOOT_FILE "::.fastboot" /* autorun: boot without sleep */
#define KILLSCRIPT_FILE "::.killscript" /* autorun: shut mud down */
#define PAUSE_FILE "::pause" /* autorun: don't restart mud */
#define EXE_FILE "::bin:circle" /* maybe use argv[0] but it's not reliable */
#define FASTBOOT_FILE "::.fastboot" /* autorun: boot without sleep */
#define KILLSCRIPT_FILE "::.killscript" /* autorun: shut mud down */
#define PAUSE_FILE "::pause" /* autorun: don't restart mud */
#else
#define EXE_FILE "bin/circle" /* maybe use argv[0] but it's not reliable */
#define FASTBOOT_FILE "../.fastboot" /* autorun: boot without sleep */
#define KILLSCRIPT_FILE "../.killscript"/* autorun: shut mud down */
#define PAUSE_FILE "../pause" /* autorun: don't restart mud */
#define EXE_FILE "bin/circle" /* maybe use argv[0] but it's not reliable */
#define FASTBOOT_FILE "../.fastboot" /* autorun: boot without sleep */
#define KILLSCRIPT_FILE "../.killscript"/* autorun: shut mud down */
#define PAUSE_FILE "../pause" /* autorun: don't restart mud */
#endif
/* names of various files and directories */
#define INDEX_FILE "index" /* index of world files */
#define MINDEX_FILE "index.mini" /* ... and for mini-mud-mode */
#define WLD_PREFIX LIB_WORLD"wld"SLASH /* room definitions */
#define MOB_PREFIX LIB_WORLD"mob"SLASH /* monster prototypes */
#define OBJ_PREFIX LIB_WORLD"obj"SLASH /* object prototypes */
#define ZON_PREFIX LIB_WORLD"zon"SLASH /* zon defs & command tables */
#define SHP_PREFIX LIB_WORLD"shp"SLASH /* shop definitions */
#define TRG_PREFIX LIB_WORLD"trg"SLASH /* trigger files */
#define HLP_PREFIX LIB_TEXT"help"SLASH /* Help files */
#define QST_PREFIX LIB_WORLD"qst"SLASH /* quest files */
#define INDEX_FILE "index" /* index of world files */
#define MINDEX_FILE "index.mini" /* ... and for mini-mud-mode */
#define WLD_PREFIX LIB_WORLD"wld"SLASH /* room definitions */
#define MOB_PREFIX LIB_WORLD"mob"SLASH /* monster prototypes */
#define OBJ_PREFIX LIB_WORLD"obj"SLASH /* object prototypes */
#define ZON_PREFIX LIB_WORLD"zon"SLASH /* zon defs & command tables */
#define SHP_PREFIX LIB_WORLD"shp"SLASH /* shop definitions */
#define TRG_PREFIX LIB_WORLD"trg"SLASH /* trigger files */
#define HLP_PREFIX LIB_TEXT"help"SLASH /* Help files */
#define QST_PREFIX LIB_WORLD"qst"SLASH /* quest files */
#define CREDITS_FILE LIB_TEXT"credits" /* for the 'credits' command */
#define NEWS_FILE LIB_TEXT"news" /* for the 'news' command */
#define MOTD_FILE LIB_TEXT"motd" /* messages of the day / mortal */
#define IMOTD_FILE LIB_TEXT"imotd" /* messages of the day / immort */
#define GREETINGS_FILE LIB_TEXT"greetings" /* The opening screen. */
#define HELP_PAGE_FILE LIB_TEXT_HELP"help" /* for HELP <CR> */
#define IHELP_PAGE_FILE LIB_TEXT_HELP"ihelp" /* for HELP <CR> imms */
#define INFO_FILE LIB_TEXT"info" /* for INFO */
#define WIZLIST_FILE LIB_TEXT"wizlist" /* for WIZLIST */
#define IMMLIST_FILE LIB_TEXT"immlist" /* for IMMLIST */
#define BACKGROUND_FILE LIB_TEXT"background"/* for the background story */
#define POLICIES_FILE LIB_TEXT"policies" /* player policies/rules */
#define HANDBOOK_FILE LIB_TEXT"handbook" /* handbook for new immorts */
#define CREDITS_FILE LIB_TEXT"credits" /* for the 'credits' command */
#define NEWS_FILE LIB_TEXT"news" /* for the 'news' command */
#define MOTD_FILE LIB_TEXT"motd" /* messages of the day / mortal */
#define IMOTD_FILE LIB_TEXT"imotd" /* messages of the day / immort */
#define GREETINGS_FILE LIB_TEXT"greetings" /* The opening screen. */
#define HELP_PAGE_FILE LIB_TEXT_HELP"help" /* for HELP <CR> */
#define IHELP_PAGE_FILE LIB_TEXT_HELP"ihelp" /* for HELP <CR> imms */
#define INFO_FILE LIB_TEXT"info" /* for INFO */
#define WIZLIST_FILE LIB_TEXT"wizlist" /* for WIZLIST */
#define IMMLIST_FILE LIB_TEXT"immlist" /* for IMMLIST */
#define BACKGROUND_FILE LIB_TEXT"background" /* for the background story */
#define POLICIES_FILE LIB_TEXT"policies" /* player policies/rules */
#define HANDBOOK_FILE LIB_TEXT"handbook" /* handbook for new immorts */
#define HELP_FILE "help.hlp"
#define IDEAS_FILE LIB_MISC"ideas" /* for the 'idea'-command */
#define TYPOS_FILE LIB_MISC"typos" /* 'typo' */
#define BUGS_FILE LIB_MISC"bugs" /* 'bug' */
#define MESS_FILE LIB_MISC"messages" /* damage messages */
#define SOCMESS_FILE LIB_MISC"socials" /* messages for social acts */
#define SOCMESS_FILE_NEW LIB_MISC"socials.new" /* messages for social acts with aedit patch*/
#define XNAME_FILE LIB_MISC"xnames" /* invalid name substrings */
#define IDEAS_FILE LIB_MISC"ideas" /* for the 'idea'-command */
#define TYPOS_FILE LIB_MISC"typos" /* 'typo' */
#define BUGS_FILE LIB_MISC"bugs" /* 'bug' */
#define MESS_FILE LIB_MISC"messages" /* damage messages */
#define SOCMESS_FILE LIB_MISC"socials" /* messages for social acts */
#define SOCMESS_FILE_NEW LIB_MISC"socials.new" /* messages for social acts with aedit patch*/
#define XNAME_FILE LIB_MISC"xnames" /* invalid name substrings */
/* BEGIN: Assumed default locations for logfiles, mainly used in do_file. */
/**/
@@ -129,109 +129,108 @@
/**/
/* END: Assumed default locations for logfiles, mainly used in do_file. */
#define CONFIG_FILE LIB_ETC"config" /* OasisOLC * GAME CONFIG FL */
#define PLAYER_FILE LIB_ETC"players" /* the player database */
#define MAIL_FILE LIB_ETC"plrmail" /* for the mudmail system */
#define MAIL_FILE_TMP LIB_ETC"plrmail_tmp" /* for the mudmail system */
#define BAN_FILE LIB_ETC"badsites" /* for the siteban system */
#define HCONTROL_FILE LIB_ETC"hcontrol" /* for the house system */
#define TIME_FILE LIB_ETC"time" /* for calendar system */
#define CHANGE_LOG_FILE "../changelog" /* for the changelog */
#define CONFIG_FILE LIB_ETC"config" /* OasisOLC * GAME CONFIG FL */
#define PLAYER_FILE LIB_ETC"players" /* the player database */
#define MAIL_FILE LIB_ETC"plrmail" /* for the mudmail system */
#define MAIL_FILE_TMP LIB_ETC"plrmail_tmp" /* for the mudmail system */
#define BAN_FILE LIB_ETC"badsites" /* for the siteban system */
#define HCONTROL_FILE LIB_ETC"hcontrol" /* for the house system */
#define TIME_FILE LIB_ETC"time" /* for calendar system */
#define CHANGE_LOG_FILE "../changelog" /* for the changelog */
/* new bitvector data for use in player_index_element */
#define PINDEX_DELETED (1 << 0) /* deleted player */
#define PINDEX_NODELETE (1 << 1) /* protected player */
#define PINDEX_SELFDELETE (1 << 2) /* player is selfdeleting*/
#define PINDEX_NOWIZLIST (1 << 3) /* Player shouldn't be on wizlist*/
#define PINDEX_DELETED (1 << 0) /* deleted player */
#define PINDEX_NODELETE (1 << 1) /* protected player */
#define PINDEX_SELFDELETE (1 << 2) /* player is selfdeleting */
#define PINDEX_NOWIZLIST (1 << 3) /* Player shouldn't be on wizlist */
#define REAL 0
#define VIRTUAL 1
/* structure for the reset commands */
struct reset_com {
char command; /* current command */
char command; /* current command */
bool if_flag; /* if TRUE: exe only if preceding exe'd */
int arg1; /* */
int arg2; /* Arguments to the command */
int arg3; /* */
int line; /* line number this command appears on */
char *sarg1; /* string argument */
char *sarg2; /* string argument */
bool if_flag; /* if TRUE: exe only if preceding exe'd */
int arg1; /* */
int arg2; /* Arguments to the command */
int arg3; /* */
int line; /* line number this command appears on */
char *sarg1; /* string argument */
char *sarg2; /* string argument */
/* Commands:
* 'M': Read a mobile
* 'O': Read an object
* 'G': Give obj to mob
* 'P': Put obj in obj
* 'G': Obj to char
* 'E': Obj to char equip
* 'D': Set state of door
* 'T': Trigger command
* 'V': Assign a variable */
/* Commands:
* 'M': Read a mobile
* 'O': Read an object
* 'G': Give obj to mob
* 'P': Put obj in obj
* 'G': Obj to char
* 'E': Obj to char equip
* 'D': Set state of door
* 'T': Trigger command
* 'V': Assign a variable */
};
/* zone definition structure. for the 'zone-table' */
struct zone_data {
char *name; /* name of this zone */
char *builders; /* namelist of builders allowed to */
/* modify this zone. */
int lifespan; /* how long between resets (minutes) */
int age; /* current age of this zone (minutes) */
room_vnum bot; /* starting room number for this zone */
room_vnum top; /* upper limit for rooms in this zone */
char *name; /* name of this zone */
char *builders; /* namelist of builders allowed to modify this zone. */
int lifespan; /* how long between resets (minutes) */
int age; /* current age of this zone (minutes) */
room_vnum bot; /* starting room number for this zone */
room_vnum top; /* upper limit for rooms in this zone */
int zone_flags[ZN_ARRAY_MAX]; /* Zone Flags bitvector */
int min_level; /* Minimum level a player must be to enter this zone */
int max_level; /* Maximum level a player must be to enter this zone */
int zone_flags[ZN_ARRAY_MAX]; /* Zone Flags bitvector */
int min_level; /* Minimum level a player must be to enter this zone */
int max_level; /* Maximum level a player must be to enter this zone */
int reset_mode; /* conditions for reset (see below) */
zone_vnum number; /* virtual number of this zone */
struct reset_com *cmd; /* command table for reset */
int reset_mode; /* conditions for reset (see below) */
zone_vnum number; /* virtual number of this zone */
struct reset_com *cmd; /* command table for reset */
/* Reset mode:
* 0: Don't reset, and don't update age.
* 1: Reset if no PC's are located in zone.
* 2: Just reset. */
/* Reset mode:
* 0: Don't reset, and don't update age.
* 1: Reset if no PC's are located in zone.
* 2: Just reset. */
};
/* for queueing zones for update */
struct reset_q_element {
zone_rnum zone_to_reset; /* ref to zone_data */
struct reset_q_element *next;
zone_rnum zone_to_reset; /* ref to zone_data */
struct reset_q_element *next;
};
/* structure for the update queue */
struct reset_q_type {
struct reset_q_element *head;
struct reset_q_element *tail;
struct reset_q_element *head;
struct reset_q_element *tail;
};
/* Added level, flags, and last, primarily for pfile autocleaning. You can also
* use them to keep online statistics, and add race, class, etc if you like. */
struct player_index_element {
char *name;
long id;
int level;
int flags;
time_t last;
char *name;
long id;
int level;
int flags;
time_t last;
};
struct help_index_element {
char *index; /*Future Use */
char *keywords; /*Keyword Place holder and sorter */
char *entry; /*Entries for help files with Keywords at very top*/
int duplicate; /*Duplicate entries for multple keywords*/
int min_level; /*Min Level to read help entry*/
char *index; /* Future Use */
char *keywords; /* Keyword Place holder and sorter */
char *entry; /* Entries for help files with Keywords at very top */
int duplicate; /* Duplicate entries for multple keywords */
int min_level; /* Min Level to read help entry */
};
/* The ban defines and structs were moved to ban.h */
/* for the "buffered" rent and house object loading */
struct obj_save_data_t {
struct obj_data *obj;
int locate;
struct obj_save_data_t *next;
obj_data *obj;
int locate;
struct obj_save_data_t *next;
};
typedef struct obj_save_data_t obj_save_data;
@@ -256,7 +255,7 @@ void free_text_files(void);
void free_help_table(void);
void free_player_index(void);
void load_help(FILE *fl, char *name);
void new_mobile_data(struct char_data *ch);
void new_mobile_data(char_data *ch);
zone_rnum real_zone(zone_vnum vnum);
room_rnum real_room(room_vnum vnum);
@@ -265,45 +264,45 @@ obj_rnum real_object(obj_vnum vnum);
/* Public Procedures from objsave.c */
void Crash_save_all(void);
void Crash_idlesave(struct char_data *ch);
void Crash_crashsave(struct char_data *ch);
int Crash_load(struct char_data *ch);
void Crash_listrent(struct char_data *ch, char *name);
void Crash_idlesave(char_data *ch);
void Crash_crashsave(char_data *ch);
int Crash_load(char_data *ch);
void Crash_listrent(char_data *ch, char *name);
int Crash_clean_file(char *name);
int Crash_delete_crashfile(struct char_data *ch);
int Crash_delete_crashfile(char_data *ch);
int Crash_delete_file(char *name);
void update_obj_file(void);
void Crash_rentsave(struct char_data *ch, int cost);
void Crash_rentsave(char_data *ch, int cost);
obj_save_data *objsave_parse_objects(FILE *fl);
int objsave_save_obj_record(struct obj_data *obj, FILE *fl, int location);
int objsave_save_obj_record(obj_data *obj, FILE *fl, int location);
/* Special functions */
SPECIAL(receptionist);
SPECIAL(cryogenicist);
/* Functions from players.c */
void tag_argument(char *argument, char *tag);
int load_char(const char *name, struct char_data *ch);
void save_char(struct char_data *ch);
void init_char(struct char_data *ch);
struct char_data* create_char(void);
struct char_data *read_mobile(mob_vnum nr, int type);
int vnum_mobile(char *searchname, struct char_data *ch);
void clear_char(struct char_data *ch);
void reset_char(struct char_data *ch);
void free_char(struct char_data *ch);
int load_char(const char *name, char_data *ch);
void save_char(char_data *ch);
void init_char(char_data *ch);
char_data* create_char(void);
char_data *read_mobile(mob_vnum nr, int type);
int vnum_mobile(char *searchname, char_data *ch);
void clear_char(char_data *ch);
void reset_char(char_data *ch);
void free_char(char_data *ch);
void save_player_index(void);
long get_ptable_by_name(const char *name);
void remove_player(int pfilepos);
void clean_pfiles(void);
void build_player_index(void);
struct obj_data *create_obj(void);
void clear_object(struct obj_data *obj);
void free_obj(struct obj_data *obj);
struct obj_data *read_object(obj_vnum nr, int type);
int vnum_object(char *searchname, struct char_data *ch);
int vnum_room(char *, struct char_data *);
int vnum_trig(char *, struct char_data *);
obj_data *create_obj(void);
void clear_object(obj_data *obj);
void free_obj(obj_data *obj);
obj_data *read_object(obj_vnum nr, int type);
int vnum_object(char *searchname, char_data *ch);
int vnum_room(char *, char_data *);
int vnum_trig(char *, char_data *);
void setup_dir(FILE *fl, int room, int dir);
void index_boot(int mode);
@@ -366,15 +365,15 @@ extern room_rnum top_of_world;
extern struct zone_data *zone_table;
extern zone_rnum top_of_zone_table;
extern struct char_data *character_list;
extern char_data *character_list;
extern struct index_data *mob_index;
extern struct char_data *mob_proto;
extern char_data *mob_proto;
extern mob_rnum top_of_mobt;
extern struct index_data *obj_index;
extern struct obj_data *object_list;
extern struct obj_data *obj_proto;
extern obj_data *object_list;
extern obj_data *obj_proto;
extern obj_rnum top_of_objt;
extern struct social_messg *soc_mess_list;

View File

@@ -188,7 +188,7 @@ void sub_write(char *arg, char_data *ch, byte find_invis, int targets)
void send_to_zone(char *messg, zone_rnum zone)
{
struct descriptor_data *i;
descriptor_data *i;
if (!messg || !*messg)
return;

View File

@@ -214,7 +214,7 @@ void dg_read_trigger(FILE *fp, void *proto, int type)
}
}
void dg_obj_trigger(char *line, struct obj_data *obj)
void dg_obj_trigger(char *line, obj_data *obj)
{
char junk[8];
int vnum, rnum, count;
@@ -251,8 +251,8 @@ void dg_obj_trigger(char *line, struct obj_data *obj)
void assign_triggers(void *i, int type)
{
struct char_data *mob = NULL;
struct obj_data *obj = NULL;
char_data *mob = NULL;
obj_data *obj = NULL;
struct room_data *room = NULL;
int rnum;
struct trig_proto_list *trg_proto;

View File

@@ -1,18 +1,18 @@
/**
* @file dg_event.h
* This file contains defines for the simplified event system to allow trigedit
* This file contains defines for the simplified event system to allow trigedit
* to use the "wait" command, causing a delay in the middle of a script.
* This system could easily be expanded by coders who wish to implement
* an event driven mud.
*
*
* Part of the core tbaMUD source code distribution, which is a derivative
* of, and continuation of, CircleMUD.
*
*
* This source code, which was not part of the CircleMUD legacy code,
* is attributed to:
* $Author: Mark A. Heilpern/egreen/Welcor $
* $Date: 2004/10/11 12:07:00$
* $Revision: 1.0.14 $
* is attributed to:
* $Author: Mark A. Heilpern/egreen/Welcor $
* $Date: 2004/10/11 12:07:00$
* $Revision: 1.0.14 $
*/
#ifndef _DG_EVENT_H_
#define _DG_EVENT_H_
@@ -30,10 +30,10 @@
/** The event structure. Events get attached to the queue and are executed
* when their turn comes up in the queue. */
struct event {
EVENTFUNC(*func); /**< The function called when this event comes up. */
void *event_obj; /**< event_obj is passed to func when func is called */
struct q_element *q_el; /**< Where this event is located in the queue */
bool isMudEvent; /**< used by the memory routines */
EVENTFUNC(*func); /**< The function called when this event comes up. */
void *event_obj; /**< event_obj is passed to func when func is called */
struct q_element *q_el; /**< Where this event is located in the queue */
bool isMudEvent; /**< used by the memory routines */
};
/**************************************************************************
* End event structures and defines.
@@ -47,15 +47,15 @@ struct event {
/** The priority queue. */
struct dg_queue {
struct q_element *head[NUM_EVENT_QUEUES]; /**< Front of each queue bucket. */
struct q_element *tail[NUM_EVENT_QUEUES]; /**< Rear of each queue bucket. */
struct q_element *head[NUM_EVENT_QUEUES]; /**< Front of each queue bucket. */
struct q_element *tail[NUM_EVENT_QUEUES]; /**< Rear of each queue bucket. */
};
/** Queued elements. */
struct q_element {
void *data; /**< The event to be handled. */
long key; /**< When the event should be handled. */
struct q_element *prev, *next; /**< Points to other q_elements in line. */
void *data; /**< The event to be handled. */
long key; /**< When the event should be handled. */
struct q_element *prev, *next; /**< Points to other q_elements in line. */
};
/**************************************************************************
* End priority queue structures and defines.

View File

@@ -119,12 +119,12 @@ void extract_script(void *thing, int type)
switch (type) {
case MOB_TRIGGER:
mob = (struct char_data *)thing;
mob = (char_data *)thing;
sc = SCRIPT(mob);
SCRIPT(mob) = NULL;
break;
case OBJ_TRIGGER:
obj = (struct obj_data *)thing;
obj = (obj_data *)thing;
sc = SCRIPT(obj);
SCRIPT(obj) = NULL;
break;
@@ -137,8 +137,8 @@ void extract_script(void *thing, int type)
#if 1 /* debugging */
{
struct char_data *i = character_list;
struct obj_data *j = object_list;
char_data *i = character_list;
obj_data *j = object_list;
room_rnum k;
if (sc) {
for ( ; i ; i = i->next)
@@ -185,12 +185,12 @@ void free_proto_script(void *thing, int type)
switch (type) {
case MOB_TRIGGER:
mob = (struct char_data *)thing;
mob = (char_data *)thing;
proto = mob->proto_script;
mob->proto_script = NULL;
break;
case OBJ_TRIGGER:
obj = (struct obj_data *)thing;
obj = (obj_data *)thing;
proto = obj->proto_script;
obj->proto_script = NULL;
break;
@@ -202,8 +202,8 @@ void free_proto_script(void *thing, int type)
}
#if 1 /* debugging */
{
struct char_data *i = character_list;
struct obj_data *j = object_list;
char_data *i = character_list;
obj_data *j = object_list;
room_rnum k;
if (proto) {
for ( ; i ; i = i->next)

View File

@@ -35,9 +35,9 @@
* the spell is set to TAR_IGNORE. Also, group spells are not permitted. */
void do_dg_cast(void *go, struct script_data *sc, trig_data *trig, int type, char *cmd)
{
struct char_data *caster = NULL;
struct char_data *tch = NULL;
struct obj_data *tobj = NULL;
char_data *caster = NULL;
char_data *tch = NULL;
obj_data *tobj = NULL;
struct room_data *caster_room = NULL;
char *s, *t;
int spellnum, target = 0;
@@ -46,13 +46,13 @@ void do_dg_cast(void *go, struct script_data *sc, trig_data *trig, int type, cha
/* need to get the caster or the room of the temporary caster */
switch (type) {
case MOB_TRIGGER:
caster = (struct char_data *)go;
caster = (char_data *)go;
break;
case WLD_TRIGGER:
caster_room = (struct room_data *)go;
break;
case OBJ_TRIGGER:
caster_room = dg_room_of_obj((struct obj_data *)go);
caster_room = dg_room_of_obj((obj_data *)go);
if (!caster_room) {
script_log("dg_do_cast: unknown room for object-caster!");
return;
@@ -131,7 +131,7 @@ void do_dg_cast(void *go, struct script_data *sc, trig_data *trig, int type, cha
/* set the caster's name to that of the object, or the gods.... */
if (type==OBJ_TRIGGER)
caster->player.short_descr =
strdup(((struct obj_data *)go)->short_description);
strdup(((obj_data *)go)->short_description);
else if (type==WLD_TRIGGER)
caster->player.short_descr = strdup("The gods");
caster->next_in_room = caster_room->people;
@@ -152,7 +152,7 @@ void do_dg_cast(void *go, struct script_data *sc, trig_data *trig, int type, cha
void do_dg_affect(void *go, struct script_data *sc, trig_data *trig,
int script_type, char *cmd)
{
struct char_data *ch = NULL;
char_data *ch = NULL;
int value=0, duration=0;
char junk[MAX_INPUT_LENGTH]; /* will be set to "dg_affect" */
char charname[MAX_INPUT_LENGTH], property[MAX_INPUT_LENGTH];
@@ -238,7 +238,7 @@ void do_dg_affect(void *go, struct script_data *sc, trig_data *trig,
affect_to_char(ch, &af);
}
void send_char_pos(struct char_data *ch, int dam)
void send_char_pos(char_data *ch, int dam)
{
switch (GET_POS(ch)) {
case POS_MORTALLYW:
@@ -269,7 +269,7 @@ void send_char_pos(struct char_data *ch, int dam)
/* Used throughout the xxxcmds.c files for checking if a char can be targetted
* - allow_gods is false when called by %force%, for instance, while true for
* %teleport%. - Welcor */
int valid_dg_target(struct char_data *ch, int bitvector)
int valid_dg_target(char_data *ch, int bitvector)
{
if (IS_NPC(ch))
return TRUE; /* all npcs are allowed as targets */
@@ -286,7 +286,7 @@ int valid_dg_target(struct char_data *ch, int bitvector)
return FALSE; /* The rest are gods with nohassle on... */
}
void script_damage(struct char_data *vict, int dam)
void script_damage(char_data *vict, int dam)
{
if (GET_LEVEL(vict)>=LVL_IMMORT && (dam > 0)) {
send_to_char(vict, "Being the cool immortal you are, you sidestep a trap, "

View File

@@ -320,7 +320,7 @@ ACMD(do_mzoneecho)
if (!*room_number || !*msg)
mob_log(ch, "mzoneecho called with too few args");
else if ((zone = real_zone_by_thing(atoi(room_number))) == NOWHERE)
else if ((zone = real_zone_by_thing(atoidx(room_number))) == NOWHERE)
mob_log(ch, "mzoneecho called for nonexistant zone");
else {
@@ -355,7 +355,7 @@ ACMD(do_mload)
target = two_arguments(argument, arg1, arg2);
if (!*arg1 || !*arg2 || !is_number(arg2) || ((number = atoi(arg2)) < 0)) {
if (!*arg1 || !*arg2 || !is_number(arg2) || ((number = atoidx(arg2)) == NOBODY)) {
mob_log(ch, "mload: bad syntax");
return;
}
@@ -366,7 +366,7 @@ ACMD(do_mload)
if (!target || !*target) {
rnum = IN_ROOM(ch);
} else {
if (!isdigit(*target) || (rnum = real_room(atoi(target))) == NOWHERE) {
if (!isdigit(*target) || (rnum = real_room(atoidx(target))) == NOWHERE) {
mob_log(ch, "mload: room target vnum doesn't exist "
"(loading mob vnum %d to room %s)", number, target);
return;
@@ -699,7 +699,7 @@ ACMD(do_mforce)
}
if (!str_cmp(arg, "all")) {
struct descriptor_data *i;
descriptor_data *i;
char_data *vch;
for (i = descriptor_list; i ; i = i->next) {
@@ -914,10 +914,10 @@ ACMD(do_mtransform)
mob_log(ch, "mtransform: bad argument");
else {
if (isdigit(*arg))
m = read_mobile(atoi(arg), VIRTUAL);
m = read_mobile(atoidx(arg), VIRTUAL);
else {
keep_hp = 0;
m = read_mobile(atoi(arg+1), VIRTUAL);
m = read_mobile(atoidx(arg+1), VIRTUAL);
}
if (m==NULL) {
mob_log(ch, "mtransform: bad mobile vnum");
@@ -1070,7 +1070,7 @@ ACMD(do_mdoor)
newexit->exit_info = (sh_int)asciiflag_conv(value);
break;
case 3: /* key */
newexit->key = atoi(value);
newexit->key = atoidx(value);
break;
case 4: /* name */
if (newexit->keyword)
@@ -1079,7 +1079,7 @@ ACMD(do_mdoor)
strcpy(newexit->keyword, value);
break;
case 5: /* room */
if ((to_room = real_room(atoi(value))) != NOWHERE)
if ((to_room = real_room(atoidx(value))) != NOWHERE)
newexit->to_room = to_room;
else
mob_log(ch, "mdoor: invalid door target");
@@ -1091,7 +1091,7 @@ ACMD(do_mdoor)
ACMD(do_mfollow)
{
char buf[MAX_INPUT_LENGTH];
struct char_data *leader;
char_data *leader;
struct follow_type *j, *k;
if (!MOB_OR_IMPL(ch)) {
@@ -1176,5 +1176,5 @@ ACMD(do_mrecho)
if (!*msg || !*start || !*finish || !is_number(start) || !is_number(finish))
mob_log(ch, "mrecho called with too few args");
else
send_to_range(atoi(start), atoi(finish), "%s\r\n", msg);
send_to_range(atoidx(start), atoidx(finish), "%s\r\n", msg);
}

View File

@@ -88,7 +88,7 @@ room_rnum obj_room(obj_data *obj)
/* returns the real room number, or NOWHERE if not found or invalid */
static room_rnum find_obj_target_room(obj_data *obj, char *rawroomstr)
{
int tmp;
room_vnum tmp;
room_rnum location;
char_data *target_mob;
obj_data *target_obj;
@@ -101,7 +101,7 @@ static room_rnum find_obj_target_room(obj_data *obj, char *rawroomstr)
if (isdigit(*roomstr) && !strchr(roomstr, '.'))
{
tmp = atoi(roomstr);
tmp = atoidx(roomstr);
if ((location = real_room(tmp)) == NOWHERE)
return NOWHERE;
}
@@ -220,7 +220,7 @@ static OCMD(do_ozoneecho)
if (!*room_number || !*msg)
obj_log(obj, "ozoneecho called with too few args");
else if ((zone = real_zone_by_thing(atoi(room_number))) == NOWHERE)
else if ((zone = real_zone_by_thing(atoidx(room_number))) == NOWHERE)
obj_log(obj, "ozoneecho called for nonexistant zone");
else {
@@ -275,7 +275,7 @@ static OCMD(do_orecho)
if (!*msg || !*start || !*finish || !is_number(start) || !is_number(finish))
obj_log(obj, "orecho: too few args");
else
send_to_range(atoi(start), atoi(finish), "%s\r\n", msg);
send_to_range(atoidx(start), atoidx(finish), "%s\r\n", msg);
}
@@ -300,7 +300,7 @@ static OCMD(do_otransform)
{
char arg[MAX_INPUT_LENGTH];
obj_data *o, tmpobj;
struct char_data *wearer=NULL;
char_data *wearer=NULL;
int pos = 0;
one_argument(argument, arg);
@@ -310,7 +310,7 @@ static OCMD(do_otransform)
else if (!isdigit(*arg))
obj_log(obj, "otransform: bad argument");
else {
o = read_object(atoi(arg), VIRTUAL);
o = read_object(atoidx(arg), VIRTUAL);
if (o==NULL) {
obj_log(obj, "otransform: bad object vnum");
return;
@@ -459,7 +459,7 @@ static OCMD(do_dgoload)
target = two_arguments(argument, arg1, arg2);
if (!*arg1 || !*arg2 || !is_number(arg2) || ((number = atoi(arg2)) < 0))
if (!*arg1 || !*arg2 || !is_number(arg2) || ((number = atoidx(arg2)) == NOTHING))
{
obj_log(obj, "oload: bad syntax");
return;
@@ -477,7 +477,7 @@ static OCMD(do_dgoload)
if (!target || !*target) {
rnum = room;
} else {
if (!isdigit(*target) || (rnum = real_room(atoi(target))) == NOWHERE) {
if (!isdigit(*target) || (rnum = real_room(atoidx(target))) == NOWHERE) {
obj_log(obj, "oload: room target vnum doesn't exist "
"(loading mob vnum %d to room %s)", number, target);
return;
@@ -671,7 +671,7 @@ static OCMD(do_odoor)
newexit->exit_info = (sh_int)asciiflag_conv(value);
break;
case 3: /* key */
newexit->key = atoi(value);
newexit->key = atoidx(value);
break;
case 4: /* name */
if (newexit->keyword)
@@ -680,7 +680,7 @@ static OCMD(do_odoor)
strcpy(newexit->keyword, value);
break;
case 5: /* room */
if ((to_room = real_room(atoi(value))) != NOWHERE)
if ((to_room = real_room(atoidx(value))) != NOWHERE)
newexit->to_room = to_room;
else
obj_log(obj, "odoor: invalid door target");
@@ -693,7 +693,7 @@ static OCMD(do_osetval)
{
char arg1[MAX_INPUT_LENGTH], arg2[MAX_INPUT_LENGTH];
int position, new_value, worn_on;
struct char_data *worn_by = NULL;
char_data *worn_by = NULL;
two_arguments(argument, arg1, arg2);
if (!*arg1 || !*arg2 || !is_number(arg1) || !is_number(arg2)) {
@@ -725,8 +725,8 @@ static OCMD(do_osetval)
static OCMD(do_oat)
{
room_rnum loc = NOWHERE;
struct char_data *ch;
struct obj_data *object;
char_data *ch;
obj_data *object;
char arg[MAX_INPUT_LENGTH], *command;
command = any_one_arg(argument, arg);
@@ -743,7 +743,7 @@ static OCMD(do_oat)
return;
}
if (isdigit(*arg)) loc = real_room(atoi(arg));
if (isdigit(*arg)) loc = real_room(atoidx(arg));
else if ((ch = get_char_by_obj(obj, arg))) loc = IN_ROOM(ch);
if (loc == NOWHERE) {

View File

@@ -24,17 +24,17 @@
/* local functions */
static void trigedit_disp_menu(struct descriptor_data *d);
static void trigedit_disp_types(struct descriptor_data *d);
static void trigedit_disp_menu(descriptor_data *d);
static void trigedit_disp_types(descriptor_data *d);
static void trigedit_create_index(int znum, char *type);
static void trigedit_setup_new(struct descriptor_data *d);
static void trigedit_setup_new(descriptor_data *d);
/* Trigedit */
ACMD(do_oasis_trigedit)
{
int number, real_num;
struct descriptor_data *d;
descriptor_data *d;
/* No building as a mob or while being forced. */
if (IS_NPC(ch) || !ch->desc || STATE(ch->desc) != CON_PLAYING)
@@ -115,9 +115,9 @@ void script_save_to_disk(FILE *fp, void *item, int type)
struct trig_proto_list *t;
if (type==MOB_TRIGGER)
t = ((struct char_data *)item)->proto_script;
t = ((char_data *)item)->proto_script;
else if (type==OBJ_TRIGGER)
t = ((struct obj_data *)item)->proto_script;
t = ((obj_data *)item)->proto_script;
else if (type==WLD_TRIGGER)
t = ((struct room_data *)item)->proto_script;
else {
@@ -132,7 +132,7 @@ void script_save_to_disk(FILE *fp, void *item, int type)
}
}
static void trigedit_setup_new(struct descriptor_data *d)
static void trigedit_setup_new(descriptor_data *d)
{
struct trig_data *trig;
@@ -155,7 +155,7 @@ static void trigedit_setup_new(struct descriptor_data *d)
OLC_VAL(d) = 0; /* Has changed flag. (It hasn't so far, we just made it.) */
}
void trigedit_setup_existing(struct descriptor_data *d, int rtrg_num)
void trigedit_setup_existing(descriptor_data *d, int rtrg_num)
{
struct trig_data *trig;
struct cmdlist_element *c;
@@ -182,7 +182,7 @@ void trigedit_setup_existing(struct descriptor_data *d, int rtrg_num)
OLC_VAL(d) = 0; /* Has changed flag. (It hasn't so far, we just made it.) */
}
static void trigedit_disp_menu(struct descriptor_data *d)
static void trigedit_disp_menu(descriptor_data *d)
{
struct trig_data *trig = OLC_TRIG(d);
char *attach_type;
@@ -227,7 +227,7 @@ static void trigedit_disp_menu(struct descriptor_data *d)
OLC_MODE(d) = TRIGEDIT_MAIN_MENU;
}
static void trigedit_disp_types(struct descriptor_data *d)
static void trigedit_disp_types(descriptor_data *d)
{
int i, columns = 0;
const char **types;
@@ -420,7 +420,7 @@ static const char *command_color_replacement[COMMAND_TERMS][2] =
};
static void script_syntax_highlighting(struct descriptor_data *d, char *string)
static void script_syntax_highlighting(descriptor_data *d, char *string)
{
ACMD(do_action);
char buffer[MAX_STRING_LENGTH] = "";
@@ -484,7 +484,7 @@ static void script_syntax_highlighting(struct descriptor_data *d, char *string)
}
/****************************************************************************************/
void trigedit_parse(struct descriptor_data *d, char *arg)
void trigedit_parse(descriptor_data *d, char *arg)
{
int i = 0;
@@ -602,7 +602,7 @@ void trigedit_parse(struct descriptor_data *d, char *arg)
return;
case TRIGEDIT_COPY:
if ((i = real_trigger(atoi(arg))) != NOWHERE) {
if ((i = real_trigger(atoidx(arg))) != NOWHERE) {
trigedit_setup_existing(d, i);
} else
write_to_output(d, "That trigger does not exist.\r\n");
@@ -618,7 +618,7 @@ void trigedit_parse(struct descriptor_data *d, char *arg)
}
/* save the zone's triggers to internal memory and to disk */
void trigedit_save(struct descriptor_data *d)
void trigedit_save(descriptor_data *d)
{
int i;
trig_rnum rnum;
@@ -629,7 +629,7 @@ void trigedit_save(struct descriptor_data *d)
trig_data *live_trig;
struct cmdlist_element *cmd, *next_cmd;
struct index_data **new_index;
struct descriptor_data *dsc;
descriptor_data *dsc;
FILE *trig_file;
int zone, top;
char buf[MAX_CMD_LENGTH];
@@ -911,7 +911,7 @@ static void trigedit_create_index(int znum, char *type)
rename(new_name, old_name);
}
void dg_olc_script_copy(struct descriptor_data *d)
void dg_olc_script_copy(descriptor_data *d)
{
struct trig_proto_list *origscript, *editscript;
@@ -936,7 +936,7 @@ void dg_olc_script_copy(struct descriptor_data *d)
OLC_SCRIPT(d) = NULL;
}
void dg_script_menu(struct descriptor_data *d)
void dg_script_menu(descriptor_data *d)
{
struct trig_proto_list *editscript;
int i = 0;
@@ -972,7 +972,7 @@ void dg_script_menu(struct descriptor_data *d)
grn, nrm, grn, nrm, grn, nrm);
}
int dg_script_edit_parse(struct descriptor_data *d, char *arg)
int dg_script_edit_parse(descriptor_data *d, char *arg)
{
struct trig_proto_list *trig, *currtrig;
int count, pos, vnum;
@@ -1077,7 +1077,7 @@ int dg_script_edit_parse(struct descriptor_data *d, char *arg)
return 1;
}
void trigedit_string_cleanup(struct descriptor_data *d, int terminator)
void trigedit_string_cleanup(descriptor_data *d, int terminator)
{
switch (OLC_MODE(d)) {
case TRIGEDIT_COMMANDS:
@@ -1086,7 +1086,7 @@ void trigedit_string_cleanup(struct descriptor_data *d, int terminator)
}
}
int format_script(struct descriptor_data *d)
int format_script(descriptor_data *d)
{
char nsc[MAX_CMD_LENGTH], *t, line[READ_SIZE];
char *sc;

View File

@@ -1,49 +1,49 @@
/**
* @file dg_olc.h
* This source file is used in extending Oasis OLC for trigedit.
*
*
* Part of the core tbaMUD source code distribution, which is a derivative
* of, and continuation of, CircleMUD.
*
*
* This source code, which was not part of the CircleMUD legacy code,
* was created by the following people:
* $Author: Mark A. Heilpern/egreen/Welcor $
* $Date: 2004/10/11 12:07:00$
* $Revision: 1.0.14 $
* was created by the following people:
* $Author: Mark A. Heilpern/egreen/Welcor $
* $Date: 2004/10/11 12:07:00$
* $Revision: 1.0.14 $
*/
#ifndef _DG_OLC_H_
#define _DG_OLC_H_
#include "dg_scripts.h"
#define NUM_TRIG_TYPE_FLAGS 21
#define NUM_TRIG_TYPE_FLAGS 21
/* Submodes of TRIGEDIT connectedness. */
#define TRIGEDIT_MAIN_MENU 0
#define TRIGEDIT_TRIGTYPE 1
#define TRIGEDIT_CONFIRM_SAVESTRING 2
#define TRIGEDIT_NAME 3
#define TRIGEDIT_INTENDED 4
#define TRIGEDIT_TYPES 5
#define TRIGEDIT_COMMANDS 6
#define TRIGEDIT_NARG 7
#define TRIGEDIT_ARGUMENT 8
#define TRIGEDIT_COPY 9
#define TRIGEDIT_MAIN_MENU 0
#define TRIGEDIT_TRIGTYPE 1
#define TRIGEDIT_CONFIRM_SAVESTRING 2
#define TRIGEDIT_NAME 3
#define TRIGEDIT_INTENDED 4
#define TRIGEDIT_TYPES 5
#define TRIGEDIT_COMMANDS 6
#define TRIGEDIT_NARG 7
#define TRIGEDIT_ARGUMENT 8
#define TRIGEDIT_COPY 9
#define OLC_SCRIPT_EDIT 82766 /* arbitrary > highest possible room number */
#define SCRIPT_MAIN_MENU 0
#define SCRIPT_NEW_TRIGGER 1
#define SCRIPT_DEL_TRIGGER 2
#define OLC_SCRIPT_EDIT 82766 /* arbitrary > highest possible room number */
#define SCRIPT_MAIN_MENU 0
#define SCRIPT_NEW_TRIGGER 1
#define SCRIPT_DEL_TRIGGER 2
#define OLC_SCRIPT_EDIT_MODE(d) (OLC(d)->script_mode) /* parse input mode */
#define OLC_SCRIPT(d) (OLC(d)->script) /* script editing */
#define OLC_ITEM_TYPE(d) (OLC(d)->item_type) /* mob/obj/room */
#define OLC_SCRIPT_EDIT_MODE(d) (OLC(d)->script_mode) /* parse input mode */
#define OLC_SCRIPT(d) (OLC(d)->script) /* script editing */
#define OLC_ITEM_TYPE(d) (OLC(d)->item_type) /* mob/obj/room */
/* prototype exported functions from dg_olc.c */
void script_save_to_disk(FILE *fp, void *item, int type);
void dg_olc_script_copy(struct descriptor_data *d);
void dg_script_menu(struct descriptor_data *d);
int dg_script_edit_parse(struct descriptor_data *d, char *arg);
void dg_olc_script_copy(descriptor_data *d);
void dg_script_menu(descriptor_data *d);
int dg_script_edit_parse(descriptor_data *d, char *arg);
#endif /* _DG_OLC_H_ */

View File

@@ -35,7 +35,7 @@
/* Local functions not used elsewhere */
static obj_data *find_obj(long n);
static room_data *find_room(long n);
static void do_stat_trigger(struct char_data *ch, trig_data *trig);
static void do_stat_trigger(char_data *ch, trig_data *trig);
static void script_stat(char_data *ch, struct script_data *sc);
static int remove_trigger(struct script_data *sc, char *name);
static int is_num(char *arg);
@@ -71,8 +71,8 @@ static void dg_letter_value(struct script_data *sc, trig_data *trig, char *cmd);
static struct cmdlist_element * find_case(struct trig_data *trig, struct cmdlist_element *cl,
void *go, struct script_data *sc, int type, char *cond);
static struct cmdlist_element *find_done(struct cmdlist_element *cl);
static struct char_data *find_char_by_uid_in_lookup_table(long uid);
static struct obj_data *find_obj_by_uid_in_lookup_table(long uid);
static char_data *find_char_by_uid_in_lookup_table(long uid);
static obj_data *find_obj_by_uid_in_lookup_table(long uid);
static EVENTFUNC(trig_wait_event);
@@ -186,7 +186,7 @@ obj_data *get_object_in_equip(char_data * ch, char *name)
if (id == obj->script_id)
return (obj);
} else if (is_number(name)) {
obj_vnum ovnum = atoi(name);
obj_vnum ovnum = atoidx(name);
for (j = 0; j < NUM_WEARS; j++)
if ((obj = GET_EQ(ch, j)))
if (GET_OBJ_VNUM(obj) == ovnum)
@@ -258,7 +258,7 @@ int find_eq_pos_script(char *arg)
* @param pos The defined wear location to check.
* @retval int TRUE if obj can be worn on pos, FALSE if not.
*/
int can_wear_on_pos(struct obj_data *obj, int pos)
int can_wear_on_pos(obj_data *obj, int pos)
{
switch (pos) {
case WEAR_HOLD:
@@ -288,7 +288,7 @@ int can_wear_on_pos(struct obj_data *obj, int pos)
* @retval char_data * Pointer to the character structure if it exists, or NULL
* if it cannot be found.
*/
struct char_data *find_char(long n)
char_data *find_char(long n)
{
if (n>=ROOM_ID_BASE) /* See note in dg_scripts.h */
return NULL;
@@ -486,7 +486,7 @@ room_data *get_room(char *name)
if (*name == UID_CHAR)
return find_room(atoi(name + 1));
else if ((nr = real_room(atoi(name))) == NOWHERE)
else if ((nr = real_room(atoidx(name))) == NOWHERE)
return NULL;
else
return &world[nr];
@@ -722,14 +722,14 @@ static EVENTFUNC(trig_wait_event)
{
int found = FALSE;
if (type == MOB_TRIGGER) {
struct char_data *tch;
char_data *tch;
for (tch = character_list;tch && !found;tch = tch->next)
if (tch == (struct char_data *)go)
if (tch == (char_data *)go)
found = TRUE;
} else if (type == OBJ_TRIGGER) {
struct obj_data *obj;
obj_data *obj;
for (obj = object_list;obj && !found;obj = obj->next)
if (obj == (struct obj_data *)go)
if (obj == (obj_data *)go)
found = TRUE;
} else {
room_rnum i;
@@ -753,7 +753,7 @@ static EVENTFUNC(trig_wait_event)
return 0;
}
static void do_stat_trigger(struct char_data *ch, trig_data *trig)
static void do_stat_trigger(char_data *ch, trig_data *trig)
{
struct cmdlist_element *cmd_list;
char sb[MAX_STRING_LENGTH], buf[MAX_STRING_LENGTH];
@@ -878,7 +878,7 @@ static void script_stat (char_data *ch, struct script_data *sc)
}
}
void do_sstat_room(struct char_data * ch, struct room_data *rm)
void do_sstat_room(char_data * ch, struct room_data *rm)
{
send_to_char(ch, "Triggers:\r\n");
if (!SCRIPT(rm)) {
@@ -944,8 +944,11 @@ ACMD(do_attach)
trig_data *trig;
char targ_name[MAX_INPUT_LENGTH], trig_name[MAX_INPUT_LENGTH];
char loc_name[MAX_INPUT_LENGTH], arg[MAX_INPUT_LENGTH];
int loc, tn, rn, num_arg;
int loc;
trig_rnum rn;
room_rnum rnum;
IDXTYPE num_arg;
trig_vnum tn;
argument = two_arguments(argument, arg, trig_name);
two_arguments(argument, targ_name, loc_name);
@@ -955,8 +958,8 @@ ACMD(do_attach)
return;
}
num_arg = atoi(targ_name);
tn = atoi(trig_name);
num_arg = atoidx(targ_name);
tn = atoidx(trig_name);
loc = (*loc_name) ? atoi(loc_name) : -1;
if (is_abbrev(arg, "mobile") || is_abbrev(arg, "mtr")) {
@@ -1147,13 +1150,15 @@ ACMD(do_detach)
struct room_data *room;
char arg1[MAX_INPUT_LENGTH], arg2[MAX_INPUT_LENGTH], arg3[MAX_INPUT_LENGTH], *snum;
char *trigger = 0;
int num_arg, tn, rn;
IDXTYPE num_arg;
trig_vnum tn;
trig_rnum rn;
room_rnum rnum;
trig_data *trig;
argument = two_arguments(argument, arg1, arg2);
one_argument(argument, arg3);
tn = atoi(arg3);
tn = atoidx(arg3);
rn = real_trigger(tn);
trig = read_trigger(rn);
@@ -1164,7 +1169,7 @@ ACMD(do_detach)
}
/* vnum of mob/obj, if given */
num_arg = atoi(arg2);
num_arg = atoidx(arg2);
if (!str_cmp(arg1, "room") || !str_cmp(arg1, "wtr")) {
if (!*arg3 || (strchr(arg2, '.')))
@@ -1321,7 +1326,7 @@ ACMD(do_detach)
void script_vlog(const char *format, va_list args)
{
char output[MAX_STRING_LENGTH];
struct descriptor_data *i;
descriptor_data *i;
/* parse the args, making the error message */
vsnprintf(output, sizeof(output) - 2, format, args);
@@ -1793,7 +1798,8 @@ static void process_attach(void *go, struct script_data *sc, trig_data *trig,
char_data *c=NULL;
obj_data *o=NULL;
room_data *r=NULL;
long trignum, id;
long id;
trig_rnum trignum;
id_p = two_arguments(cmd, arg, trignum_s);
skip_spaces(&id_p);
@@ -1831,7 +1837,7 @@ static void process_attach(void *go, struct script_data *sc, trig_data *trig,
}
/* locate and load the trigger specified */
trignum = real_trigger(atoi(trignum_s));
trignum = real_trigger(atoidx(trignum_s));
if (trignum == NOTHING || !(newtrig=read_trigger(trignum))) {
script_log("Trigger: %s, VNum %d. attach invalid trigger: '%s'",
GET_TRIG_NAME(trig), GET_TRIG_VNUM(trig), trignum_s);
@@ -1953,7 +1959,7 @@ static void process_detach(void *go, struct script_data *sc, trig_data *trig,
}
struct room_data *dg_room_of_obj(struct obj_data *obj)
struct room_data *dg_room_of_obj(obj_data *obj)
{
if (IN_ROOM(obj) != NOWHERE) return &world[IN_ROOM(obj)];
if (obj->carried_by) return &world[IN_ROOM(obj->carried_by)];
@@ -2002,34 +2008,34 @@ static void makeuid_var(void *go, struct script_data *sc, trig_data *trig,
}
if (is_abbrev(arg, "mob")) {
struct char_data *c = NULL;
char_data *c = NULL;
switch (type) {
case WLD_TRIGGER:
c = get_char_in_room((struct room_data *)go, name);
break;
case OBJ_TRIGGER:
c = get_char_near_obj((struct obj_data *)go, name);
c = get_char_near_obj((obj_data *)go, name);
break;
case MOB_TRIGGER:
c = get_char_room_vis((struct char_data *)go, name, NULL);
c = get_char_room_vis((char_data *)go, name, NULL);
break;
}
if (c)
snprintf(uid, sizeof(uid), "%c%ld", UID_CHAR, char_script_id(c));
} else if (is_abbrev(arg, "obj")) {
struct obj_data *o = NULL;
obj_data *o = NULL;
switch (type) {
case WLD_TRIGGER:
o = get_obj_in_room((struct room_data *)go, name);
break;
case OBJ_TRIGGER:
o = get_obj_near_obj((struct obj_data *)go, name);
o = get_obj_near_obj((obj_data *)go, name);
break;
case MOB_TRIGGER:
if ((o = get_obj_in_list_vis((struct char_data *)go, name, NULL,
((struct char_data *)go)->carrying)) == NULL)
o = get_obj_in_list_vis((struct char_data *)go, name, NULL,
world[IN_ROOM((struct char_data *)go)].contents);
if ((o = get_obj_in_list_vis((char_data *)go, name, NULL,
((char_data *)go)->carrying)) == NULL)
o = get_obj_in_list_vis((char_data *)go, name, NULL,
world[IN_ROOM((char_data *)go)].contents);
break;
}
if (o)
@@ -2041,10 +2047,10 @@ static void makeuid_var(void *go, struct script_data *sc, trig_data *trig,
r = real_room(((struct room_data *) go)->number);
break;
case OBJ_TRIGGER:
r = obj_room((struct obj_data *)go);
r = obj_room((obj_data *)go);
break;
case MOB_TRIGGER:
r = IN_ROOM((struct char_data *)go);
r = IN_ROOM((char_data *)go);
break;
}
if (r != NOWHERE)
@@ -2261,7 +2267,7 @@ ACMD(do_vdelete)
/* Called from do_set - return 0 for failure, 1 for success. ch and vict are
* verified. */
int perform_set_dg_var(struct char_data *ch, struct char_data *vict, char *val_arg)
int perform_set_dg_var(char_data *ch, char_data *vict, char *val_arg)
{
char var_name[MAX_INPUT_LENGTH], *var_value;
@@ -2725,7 +2731,7 @@ trig_rnum real_trigger(trig_vnum vnum)
bot = 0;
top = top_of_trigt - 1;
if (!top_of_trigt || trig_index[bot]->vnum > vnum || trig_index[top]->vnum < vnum)
if (vnum == NOTHING || !top_of_trigt || trig_index[bot]->vnum > vnum || trig_index[top]->vnum < vnum)
return (NOTHING);
/* perform binary search on trigger-table */
@@ -2749,7 +2755,7 @@ ACMD(do_tstat)
half_chop(argument, str, argument);
if (*str) {
rnum = real_trigger(atoi(str));
rnum = real_trigger(atoidx(str));
if (rnum == NOTHING) {
send_to_char(ch, "That vnum does not exist.\r\n");
return;
@@ -2821,7 +2827,7 @@ static struct cmdlist_element *find_done(struct cmdlist_element *cl)
/* load in a character's saved variables */
void read_saved_vars(struct char_data *ch)
void read_saved_vars(char_data *ch)
{
FILE *file;
long context;
@@ -2868,7 +2874,7 @@ void read_saved_vars(struct char_data *ch)
}
/* save a characters variables out to disk */
void save_char_vars(struct char_data *ch)
void save_char_vars(char_data *ch)
{
FILE *file;
char fn[127];
@@ -2907,7 +2913,7 @@ void save_char_vars(struct char_data *ch)
}
/* load in a character's saved variables from an ASCII pfile*/
void read_saved_vars_ascii(FILE *file, struct char_data *ch, int count)
void read_saved_vars_ascii(FILE *file, char_data *ch, int count)
{
long context;
char input_line[1024], *temp, *p;
@@ -2942,7 +2948,7 @@ void read_saved_vars_ascii(FILE *file, struct char_data *ch, int count)
}
/* save a characters variables out to an ASCII pfile */
void save_char_vars_ascii(FILE *file, struct char_data *ch)
void save_char_vars_ascii(FILE *file, char_data *ch)
{
struct trig_var_data *vars;
int count = 0;
@@ -3008,23 +3014,23 @@ static inline struct lookup_table_t *find_element_by_uid_in_lookup_table(long ui
return lt;
}
static struct char_data *find_char_by_uid_in_lookup_table(long uid)
static char_data *find_char_by_uid_in_lookup_table(long uid)
{
struct lookup_table_t *lt = find_element_by_uid_in_lookup_table(uid);
if (lt)
return (struct char_data *)(lt->c);
return (char_data *)(lt->c);
log("find_char_by_uid_in_lookup_table : No entity with number %ld in lookup table", uid);
return NULL;
}
static struct obj_data *find_obj_by_uid_in_lookup_table(long uid)
static obj_data *find_obj_by_uid_in_lookup_table(long uid)
{
struct lookup_table_t *lt = find_element_by_uid_in_lookup_table(uid);
if (lt)
return (struct obj_data *)(lt->c);
return (obj_data *)(lt->c);
log("find_obj_by_uid_in_lookup_table : No entity with number %ld in lookup table", uid);
return NULL;
@@ -3096,7 +3102,7 @@ bool check_flags_by_name_ar(int *array, int numflags, char *search, const char *
return FALSE;
}
int trig_is_attached(struct script_data *sc, int trig_num)
int trig_is_attached(struct script_data *sc, trig_vnum trig_num)
{
trig_data *t;

View File

@@ -16,6 +16,7 @@
#define _DG_SCRIPTS_H_
#include "utils.h" /* To make sure ACMD is defined */
#include "structs.h" /* To make sure we have access to typedefs */
#define MOB_TRIGGER 0
#define OBJ_TRIGGER 1
@@ -53,8 +54,8 @@
/* mob trigger types */
#define MTRIG_GLOBAL (1 << 0) /* check even if zone empty */
#define MTRIG_RANDOM (1 << 1) /* checked randomly */
#define MTRIG_COMMAND (1 << 2) /* character types a command */
#define MTRIG_SPEECH (1 << 3) /* a char says a word/phrase */
#define MTRIG_COMMAND (1 << 2) /* character types a command */
#define MTRIG_SPEECH (1 << 3) /* a char says a word/phrase */
#define MTRIG_ACT (1 << 4) /* word or phrase sent to act */
#define MTRIG_DEATH (1 << 5) /* character dies */
#define MTRIG_GREET (1 << 6) /* something enters room seen */
@@ -63,7 +64,7 @@
#define MTRIG_RECEIVE (1 << 9) /* character is given obj */
#define MTRIG_FIGHT (1 << 10) /* each pulse while fighting */
#define MTRIG_HITPRCNT (1 << 11) /* fighting and below some hp */
#define MTRIG_BRIBE (1 << 12) /* coins are given to mob */
#define MTRIG_BRIBE (1 << 12) /* coins are given to mob */
#define MTRIG_LOAD (1 << 13) /* the mob is loaded */
#define MTRIG_MEMORY (1 << 14) /* mob see's someone remembered */
#define MTRIG_CAST (1 << 15) /* mob targetted by spell */
@@ -74,8 +75,8 @@
#define MTRIG_DAMAGE (1 << 20) /* trigger whenever mob is damaged */
/* obj trigger types */
#define OTRIG_GLOBAL (1 << 0) /* unused */
#define OTRIG_RANDOM (1 << 1) /* checked randomly */
#define OTRIG_GLOBAL (1 << 0) /* unused */
#define OTRIG_RANDOM (1 << 1) /* checked randomly */
#define OTRIG_COMMAND (1 << 2) /* character types a command */
#define OTRIG_TIMER (1 << 5) /* item's timer expires */
@@ -95,12 +96,12 @@
/* wld trigger types */
#define WTRIG_GLOBAL (1 << 0) /* check even if zone empty */
#define WTRIG_RANDOM (1 << 1) /* checked randomly */
#define WTRIG_COMMAND (1 << 2) /* character types a command */
#define WTRIG_RANDOM (1 << 1) /* checked randomly */
#define WTRIG_COMMAND (1 << 2) /* character types a command */
#define WTRIG_SPEECH (1 << 3) /* a char says word/phrase */
#define WTRIG_RESET (1 << 5) /* zone has been reset */
#define WTRIG_ENTER (1 << 6) /* character enters room */
#define WTRIG_ENTER (1 << 6) /* character enters room */
#define WTRIG_DROP (1 << 7) /* something dropped in room */
#define WTRIG_CAST (1 << 15) /* spell cast in room */
@@ -110,41 +111,40 @@
#define WTRIG_TIME (1 << 19) /* trigger based on game hour */
/* obj command trigger types */
#define OCMD_EQUIP (1 << 0) /* obj must be in char's equip */
#define OCMD_INVEN (1 << 1) /* obj must be in char's inven */
#define OCMD_ROOM (1 << 2) /* obj must be in char's room */
#define OCMD_EQUIP (1 << 0) /* obj must be in char's equip */
#define OCMD_INVEN (1 << 1) /* obj must be in char's inven */
#define OCMD_ROOM (1 << 2) /* obj must be in char's room */
/* obj consume trigger commands */
#define OCMD_EAT 1
#define OCMD_DRINK 2
#define OCMD_QUAFF 3
#define TRIG_NEW 0 /* trigger starts from top */
#define TRIG_RESTART 1 /* trigger restarting */
#define TRIG_NEW 0 /* trigger starts from top */
#define TRIG_RESTART 1 /* trigger restarting */
/* These are slightly off of PULSE_MOBILE so everything isnt happening at the
* same time. */
#define PULSE_DG_SCRIPT (13 RL_SEC)
#define MAX_SCRIPT_DEPTH 10 /* maximum depth triggers can
recurse into each other */
#define MAX_SCRIPT_DEPTH 10 /* maximum depth triggers can recurse into each other */
#define SCRIPT_ERROR_CODE -9999999 /* this shouldn't happen too often */
/* one line of the trigger */
struct cmdlist_element {
char *cmd; /* one line of a trigger */
struct cmdlist_element *original;
struct cmdlist_element *next;
int loops; /* for counting number of runs in a while loop */
char *cmd; /* one line of a trigger */
struct cmdlist_element *original;
struct cmdlist_element *next;
int loops; /* for counting number of runs in a while loop */
};
struct trig_var_data {
char *name; /* name of variable */
char *value; /* value of variable */
long context; /* 0: global context */
char *name; /* name of variable */
char *value; /* value of variable */
long context; /* 0: global context */
struct trig_var_data *next;
struct trig_var_data *next;
};
/** structure for triggers */
@@ -155,14 +155,14 @@ struct trig_data {
char *name; /**< name of trigger */
long trigger_type; /**< type of trigger (for bitvector) */
struct cmdlist_element *cmdlist; /**< top of command list */
struct cmdlist_element *curr_state; /**< ptr to current line of trigger */
struct cmdlist_element *curr_state; /**< ptr to current line of trigger */
int narg; /**< numerical argument */
char *arglist; /**< argument list */
int depth; /**< depth into nest ifs/whiles/etc */
int loops; /**< loop iteration counter */
struct event *wait_event; /**< event to pause the trigger */
ubyte purged; /**< trigger is set to be purged */
struct trig_var_data *var_list; /**< list of local vars for trigger */
struct trig_var_data *var_list; /**< list of local vars for trigger */
struct trig_data *next;
struct trig_data *next_in_world; /**< next in the global trigger list */
@@ -170,44 +170,36 @@ struct trig_data {
/** a complete script (composed of several triggers) */
struct script_data {
long types; /**< bitvector of trigger types */
struct trig_data *trig_list; /**< list of triggers */
struct trig_var_data *global_vars; /**< list of global variables */
ubyte purged; /**< script is set to be purged */
long context; /**< current context for statics */
long types; /**< bitvector of trigger types */
struct trig_data *trig_list; /**< list of triggers */
struct trig_var_data *global_vars; /**< list of global variables */
ubyte purged; /**< script is set to be purged */
long context; /**< current context for statics */
struct script_data *next; /**< used for purged_scripts */
struct script_data *next; /**< used for purged_scripts */
};
/* The event data for the wait command */
struct wait_event_data {
struct trig_data *trigger;
void *go;
int type;
struct trig_data *trigger;
void *go;
int type;
};
/* used for actor memory triggers */
struct script_memory {
long id; /* id of who to remember */
char *cmd; /* command, or NULL for generic */
struct script_memory *next;
long id; /* id of who to remember */
char *cmd; /* command, or NULL for generic */
struct script_memory *next;
};
/* typedefs that the dg functions rely on */
typedef struct index_data index_data;
typedef struct room_data room_data;
typedef struct obj_data obj_data;
typedef struct trig_data trig_data;
typedef struct char_data char_data;
/* function prototypes from dg_triggers.c */
char *one_phrase(char *arg, char *first_arg);
int is_substring(char *sub, char *string);
int word_check(char *str, char *wordlist);
void act_mtrigger(const char_data *ch, char *str,
char_data *actor, char_data *victim, obj_data *object, obj_data *target, char *arg);
void act_mtrigger(const char_data *ch, char *str, char_data *actor, char_data *victim, obj_data *object,
obj_data *target, char *arg);
void speech_mtrigger(char_data *actor, char *str);
void speech_wtrigger(char_data *actor, char *str);
void greet_memory_mtrigger(char_data *ch);
@@ -219,17 +211,13 @@ int drop_otrigger(obj_data *obj, char_data *actor);
void timer_otrigger(obj_data *obj);
int get_otrigger(obj_data *obj, char_data *actor);
int drop_wtrigger(obj_data *obj, char_data *actor);
int give_otrigger(obj_data *obj, char_data *actor,
char_data *victim);
int receive_mtrigger(char_data *ch, char_data *actor,
obj_data *obj);
void bribe_mtrigger(char_data *ch, char_data *actor,
int amount);
int give_otrigger(obj_data *obj, char_data *actor, char_data *victim);
int receive_mtrigger(char_data *ch, char_data *actor, obj_data *obj);
void bribe_mtrigger(char_data *ch, char_data *actor, int amount);
int wear_otrigger(obj_data *obj, char_data *actor, int where);
int remove_otrigger(obj_data *obj, char_data *actor);
int cmd_otrig(obj_data *obj, char_data *actor, char *cmd,
char *argument, int type);
int cmd_otrig(obj_data *obj, char_data *actor, char *cmd, char *argument, int type);
int command_mtrigger(char_data *actor, char *cmd, char *argument);
int command_otrigger(char_data *actor, char *cmd, char *argument);
int command_wtrigger(char_data *actor, char *cmd, char *argument);
@@ -273,8 +261,8 @@ ACMD(do_vdelete);
ACMD(do_tstat);
char *str_str(char *cs, char *ct);
int find_eq_pos_script(char *arg);
int can_wear_on_pos(struct obj_data *obj, int pos);
struct char_data *find_char(long n);
int can_wear_on_pos(obj_data *obj, int pos);
char_data *find_char(long n);
char_data *get_char(char *name);
char_data *get_char_near_obj(obj_data *obj, char *name);
char_data *get_char_in_room(room_data *room, char *name);
@@ -292,28 +280,27 @@ obj_data *get_object_in_equip(char_data * ch, char *name);
void script_trigger_check(void);
void check_time_triggers(void);
void find_uid_name(char *uid, char *name, size_t nlen);
void do_sstat_room(struct char_data * ch, room_data *r);
void do_sstat_room(char_data * ch, room_data *r);
void do_sstat_object(char_data *ch, obj_data *j);
void do_sstat_character(char_data *ch, char_data *k);
void add_trigger(struct script_data *sc, trig_data *t, int loc);
void script_vlog(const char *format, va_list args);
void script_log(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
char *matching_quote(char *p);
struct room_data *dg_room_of_obj(struct obj_data *obj);
struct room_data *dg_room_of_obj(obj_data *obj);
bool check_flags_by_name_ar(int *array, int numflags, char *search, const char *namelist[]);
void read_saved_vars_ascii(FILE *file, struct char_data *ch, int count);
void save_char_vars_ascii(FILE *file, struct char_data *ch);
int perform_set_dg_var(struct char_data *ch, struct char_data *vict, char *val_arg);
int trig_is_attached(struct script_data *sc, int trig_num);
void read_saved_vars_ascii(FILE *file, char_data *ch, int count);
void save_char_vars_ascii(FILE *file, char_data *ch);
int perform_set_dg_var(char_data *ch, char_data *vict, char *val_arg);
int trig_is_attached(struct script_data *sc, trig_vnum trig_num);
/* To maintain strict-aliasing we'll have to do this trick with a union */
/* Thanks to Chris Gilbert for reminding me that there are other options. */
int script_driver(void *go_adress, trig_data *trig, int type, int mode);
trig_rnum real_trigger(trig_vnum vnum);
void process_eval(void *go, struct script_data *sc, trig_data *trig,
int type, char *cmd);
void read_saved_vars(struct char_data *ch);
void save_char_vars(struct char_data *ch);
void process_eval(void *go, struct script_data *sc, trig_data *trig, int type, char *cmd);
void read_saved_vars(char_data *ch);
void save_char_vars(char_data *ch);
void init_lookup_table(void);
void add_to_lookup_table(long uid, void *c);
void remove_from_lookup_table(long uid);
@@ -323,20 +310,18 @@ void parse_trigger(FILE *trig_f, int nr);
trig_data *read_trigger(int nr);
void trig_data_copy(trig_data *this_data, const trig_data *trg);
void dg_read_trigger(FILE *fp, void *proto, int type);
void dg_obj_trigger(char *line, struct obj_data *obj);
void dg_obj_trigger(char *line, obj_data *obj);
void assign_triggers(void *i, int type);
/* From dg_variables.c */
void add_var(struct trig_var_data **var_list, const char *name, const char *value, long id);
int item_in_list(char *item, obj_data *list);
char *skill_percent(struct char_data *ch, char *skill);
int char_has_item(char *item, struct char_data *ch);
void var_subst(void *go, struct script_data *sc, trig_data *trig,
int type, char *line, char *buf);
int text_processed(char *field, char *subfield, struct trig_var_data *vd,
char *str, size_t slen);
void find_replacement(void *go, struct script_data *sc, trig_data *trig,
int type, char *var, char *field, char *subfield, char *str, size_t slen);
char *skill_percent(char_data *ch, char *skill);
int char_has_item(char *item, char_data *ch);
void var_subst(void *go, struct script_data *sc, trig_data *trig, int type, char *line, char *buf);
int text_processed(char *field, char *subfield, struct trig_var_data *vd, char *str, size_t slen);
void find_replacement(void *go, struct script_data *sc, trig_data *trig, int type, char *var, char *field,
char *subfield, char *str, size_t slen);
/* From dg_handler.c */
void free_var_el(struct trig_var_data *var);
@@ -357,11 +342,9 @@ void sub_write(char *arg, char_data *ch, byte find_invis, int targets);
void send_to_zone(char *messg, zone_rnum zone);
/* from dg_misc.c */
void do_dg_cast(void *go, struct script_data *sc, trig_data *trig,
int type, char *cmd);
void do_dg_affect(void *go, struct script_data *sc, trig_data *trig,
int type, char *cmd);
void send_char_pos(struct char_data *ch, int dam);
void do_dg_cast(void *go, struct script_data *sc, trig_data *trig, int type, char *cmd);
void do_dg_affect(void *go, struct script_data *sc, trig_data *trig, int type, char *cmd);
void send_char_pos(char_data *ch, int dam);
int valid_dg_target(char_data *ch, int bitvector);
void script_damage(char_data *vict, int dam);
@@ -390,10 +373,10 @@ ACMD(do_mzoneecho);
ACMD(do_mlog);
/* from dg_olc.c... thinking these should be moved to oasis.h */
void trigedit_save(struct descriptor_data *d);
void trigedit_string_cleanup(struct descriptor_data *d, int terminator);
int format_script(struct descriptor_data *d);
void trigedit_setup_existing(struct descriptor_data *d, int rtrg_num);
void trigedit_save(descriptor_data *d);
void trigedit_string_cleanup(descriptor_data *d, int terminator);
int format_script(descriptor_data *d);
void trigedit_setup_existing(descriptor_data *d, int rtrg_num);
/* from dg_objcmd.c */
room_rnum obj_room(obj_data *obj);
@@ -409,13 +392,13 @@ void wld_command_interpreter(room_data *room, char *argument);
#define UID_CHAR '}'
#define GET_TRIG_NAME(t) ((t)->name)
#define GET_TRIG_RNUM(t) ((t)->nr)
#define GET_TRIG_VNUM(t) (trig_index[(t)->nr]->vnum)
#define GET_TRIG_VNUM(t) (trig_index[(t)->nr]->vnum)
#define GET_TRIG_TYPE(t) ((t)->trigger_type)
#define GET_TRIG_DATA_TYPE(t) ((t)->data_type)
#define GET_TRIG_DATA_TYPE(t) ((t)->data_type)
#define GET_TRIG_NARG(t) ((t)->narg)
#define GET_TRIG_ARG(t) ((t)->arglist)
#define GET_TRIG_VARS(t) ((t)->var_list)
#define GET_TRIG_WAIT(t) ((t)->wait_event)
#define GET_TRIG_VARS(t) ((t)->var_list)
#define GET_TRIG_WAIT(t) ((t)->wait_event)
#define GET_TRIG_DEPTH(t) ((t)->depth)
#define GET_TRIG_LOOPS(t) ((t)->loops)
@@ -423,22 +406,20 @@ void wld_command_interpreter(room_data *room, char *argument);
* mob id's: MOB_ID_BASE to ROOM_ID_BASE - 1
* room id's: ROOM_ID_BASE to OBJ_ID_BASE - 1
* object id's: OBJ_ID_BASE and higher */
#define MOB_ID_BASE 10000000 /* 10000000 player IDNUMS should suffice */
#define ROOM_ID_BASE (10000000 + MOB_ID_BASE) /* 10000000 Mobs */
#define OBJ_ID_BASE (10000000 + ROOM_ID_BASE) /* 10000000 Rooms */
#define MOB_ID_BASE 10000000 /* 10000000 player IDNUMS should suffice */
#define ROOM_ID_BASE (10000000 + MOB_ID_BASE) /* 10000000 Mobs */
#define OBJ_ID_BASE (10000000 + ROOM_ID_BASE) /* 10000000 Rooms */
#define SCRIPT(o) ((o)->script)
#define SCRIPT_MEM(c) ((c)->memory)
#define SCRIPT(o) ((o)->script)
#define SCRIPT_MEM(c) ((c)->memory)
#define SCRIPT_TYPES(s) ((s)->types)
#define TRIGGERS(s) ((s)->trig_list)
#define SCRIPT_TYPES(s) ((s)->types)
#define TRIGGERS(s) ((s)->trig_list)
#define GET_SHORT(ch) ((ch)->player.short_descr)
#define GET_SHORT(ch) ((ch)->player.short_descr)
#define SCRIPT_CHECK(go, type) (SCRIPT(go) && \
IS_SET(SCRIPT_TYPES(SCRIPT(go)), type))
#define TRIGGER_CHECK(t, type) (IS_SET(GET_TRIG_TYPE(t), type) && \
!GET_TRIG_DEPTH(t))
#define SCRIPT_CHECK(go, type) (SCRIPT(go) && IS_SET(SCRIPT_TYPES(SCRIPT(go)), type))
#define TRIGGER_CHECK(t, type) (IS_SET(GET_TRIG_TYPE(t), type) && !GET_TRIG_DEPTH(t))
/* This formerly used 'go' instead of 'id' and referenced 'go->id' but this is
@@ -446,8 +427,8 @@ void wld_command_interpreter(room_data *room, char *argument);
* and obj_script_id().
*/
#define ADD_UID_VAR(buf, trig, id, name, context) do { \
sprintf(buf, "%c%ld", UID_CHAR, id); \
add_var(&GET_TRIG_VARS(trig), name, buf, context); } while (0)
sprintf(buf, "%c%ld", UID_CHAR, id); \
add_var(&GET_TRIG_VARS(trig), name, buf, context); } while (0)
// id helpers
extern long char_script_id(char_data *ch);

View File

@@ -412,7 +412,7 @@ void act_mtrigger(const char_data *ch, char *str, char_data *actor,
void fight_mtrigger(char_data *ch)
{
struct char_data *actor;
char_data *actor;
trig_data *t;
char buf[MAX_INPUT_LENGTH];
@@ -437,7 +437,7 @@ void fight_mtrigger(char_data *ch)
void hitprcnt_mtrigger(char_data *ch)
{
struct char_data *actor;
char_data *actor;
trig_data *t;
char buf[MAX_INPUT_LENGTH];
@@ -676,7 +676,7 @@ void random_otrigger(obj_data *obj)
}
}
void timer_otrigger(struct obj_data *obj)
void timer_otrigger(obj_data *obj)
{
trig_data *t;

View File

@@ -65,7 +65,7 @@ void add_var(struct trig_var_data **var_list, const char *name, const char *valu
}
/* perhaps not the best place for this, but I didn't want a new file */
char *skill_percent(struct char_data *ch, char *skill)
char *skill_percent(char_data *ch, char *skill)
{
static char retval[16];
int skillnum;
@@ -98,7 +98,7 @@ int item_in_list(char *item, obj_data *list)
count += item_in_list(item, i->contains);
}
} else if (is_number(item)) { /* check for vnum */
obj_vnum ovnum = atoi(item);
obj_vnum ovnum = atoidx(item);
for (i = list; i; i = i->next_content) {
if (GET_OBJ_VNUM(i) == ovnum)
@@ -120,7 +120,7 @@ int item_in_list(char *item, obj_data *list)
/* BOOLEAN return, just check if a player or mob has an item of any sort,
* searched for by name or id. Searching equipment as well as inventory, and
* containers. Jamie Nelson */
int char_has_item(char *item, struct char_data *ch)
int char_has_item(char *item, char_data *ch)
{
/* If this works, no more searching needed */
@@ -133,7 +133,7 @@ int char_has_item(char *item, struct char_data *ch)
return 1;
}
static int handle_oset(struct obj_data * obj, char * argument)
static int handle_oset(obj_data * obj, char * argument)
{
int i = 0;
bool found = FALSE;
@@ -141,7 +141,7 @@ static int handle_oset(struct obj_data * obj, char * argument)
struct oset_handler {
const char * type;
bool (* name)(struct obj_data *, char *);
bool (* name)(obj_data *, char *);
} handler[] = {
{ "alias", oset_alias },
{ "apply", oset_apply },
@@ -256,6 +256,7 @@ void find_replacement(void *go, struct script_data *sc, trig_data *trig,
struct room_data *room, *r = NULL;
char *name;
int num, count, i, j, doors;
IDXTYPE idx;
char *log_cmd[] = {"mlog ", "olog ", "wlog " };
char *send_cmd[] = {"msend ", "osend ", "wsend " };
@@ -429,7 +430,7 @@ void find_replacement(void *go, struct script_data *sc, trig_data *trig,
return;
}
else if (!str_cmp(var, "people")) {
snprintf(str, slen, "%d",((num = atoi(field)) > 0) ? trgvar_in_room(num) : 0);
snprintf(str, slen, "%d",((num = atoidx(field)) > 0) ? trgvar_in_room(num) : 0);
return;
}
else if (!str_cmp(var, "happyhour")) {
@@ -469,8 +470,8 @@ void find_replacement(void *go, struct script_data *sc, trig_data *trig,
script_log("findmob.vnum(mvnum) - illegal syntax");
strcpy(str, "0");
} else {
room_rnum rrnum = real_room(atoi(field));
mob_vnum mvnum = atoi(subfield);
room_rnum rrnum = real_room(atoidx(field));
mob_vnum mvnum = atoidx(subfield);
if (rrnum == NOWHERE) {
script_log("findmob.vnum(ovnum): No room with vnum %d", atoi(field));
@@ -490,7 +491,7 @@ void find_replacement(void *go, struct script_data *sc, trig_data *trig,
script_log("findobj.vnum(ovnum) - illegal syntax");
strcpy(str, "0");
} else {
room_rnum rrnum = real_room(atoi(field));
room_rnum rrnum = real_room(atoidx(field));
if (rrnum == NOWHERE) {
script_log("findobj.vnum(ovnum): No room with vnum %d", atoi(field));
@@ -552,10 +553,10 @@ void find_replacement(void *go, struct script_data *sc, trig_data *trig,
in_room = real_room(((struct room_data *) go)->number);
break;
case OBJ_TRIGGER:
in_room = obj_room((struct obj_data *) go);
in_room = obj_room((obj_data *) go);
break;
case MOB_TRIGGER:
in_room = IN_ROOM((struct char_data *)go);
in_room = IN_ROOM((char_data *)go);
break;
}
if (in_room == NOWHERE) {
@@ -978,7 +979,7 @@ void find_replacement(void *go, struct script_data *sc, trig_data *trig,
else if (!str_cmp(field, "questdone"))
{
if (!IS_NPC(c) && subfield && *subfield) {
int q_num = atoi(subfield);
qst_vnum q_num = atoidx(subfield);
if (is_complete(c, q_num))
strcpy(str, "1");
else
@@ -1111,7 +1112,7 @@ void find_replacement(void *go, struct script_data *sc, trig_data *trig,
* something like if %actor.vnum(500)%. It should return false for PC's instead
* -- Fizban 02/18
*/
snprintf(str, slen, "%d", IS_NPC(c) ? (int)(GET_MOB_VNUM(c) == atoi(subfield)) : 0 );
snprintf(str, slen, "%d", IS_NPC(c) ? GET_MOB_VNUM(c) == atoidx(subfield) : 0 );
} else {
if (IS_NPC(c))
snprintf(str, slen, "%d", GET_MOB_VNUM(c));
@@ -1249,8 +1250,8 @@ void find_replacement(void *go, struct script_data *sc, trig_data *trig,
if (!(subfield && *subfield))
*str = '\0';
else {
i = atoi(subfield);
snprintf(str, slen, "%d", trig_is_attached(SCRIPT(o), i));
idx = atoidx(subfield);
snprintf(str, slen, "%d", trig_is_attached(SCRIPT(o), idx));
}
}
break;
@@ -1311,7 +1312,7 @@ void find_replacement(void *go, struct script_data *sc, trig_data *trig,
case 'v':
if (!str_cmp(field, "vnum"))
if (subfield && *subfield) {
snprintf(str, slen, "%d", (int)(GET_OBJ_VNUM(o) == atoi(subfield)));
snprintf(str, slen, "%d", GET_OBJ_VNUM(o) == atoidx(subfield));
} else {
snprintf(str, slen, "%d", GET_OBJ_VNUM(o));
}
@@ -1403,14 +1404,14 @@ void find_replacement(void *go, struct script_data *sc, trig_data *trig,
else if (!str_cmp(field, "vnum")) {
if (subfield && *subfield) {
snprintf(str, slen, "%d", (int)(r->number == atoi(subfield)));
snprintf(str, slen, "%d", r->number == atoidx(subfield));
} else {
snprintf(str, slen,"%d",r->number);
}
} else if (!str_cmp(field, "contents")) {
if (subfield && *subfield) {
for (obj = r->contents; obj; obj = obj->next_content) {
if (GET_OBJ_VNUM(obj) == atoi(subfield)) {
if (GET_OBJ_VNUM(obj) == atoidx(subfield)) {
/* arg given, found */
snprintf(str, slen, "%c%ld", UID_CHAR, obj_script_id(obj));
return;
@@ -1457,8 +1458,8 @@ void find_replacement(void *go, struct script_data *sc, trig_data *trig,
if (!(subfield && *subfield))
*str = '\0';
else {
i = atoi(subfield);
snprintf(str, slen, "%d", trig_is_attached(SCRIPT(r), i));
idx = atoidx(subfield);
snprintf(str, slen, "%d", trig_is_attached(SCRIPT(r), idx));
}
}
else if (!str_cmp(field, "zonenumber"))

View File

@@ -169,7 +169,7 @@ WCMD(do_wzoneecho)
if (!*room_num || !*msg)
wld_log(room, "wzoneecho called with too few args");
else if ((zone = real_zone_by_thing(atoi(room_num))) == NOWHERE)
else if ((zone = real_zone_by_thing(atoidx(room_num))) == NOWHERE)
wld_log(room, "wzoneecho called for nonexistant zone");
else {
@@ -191,7 +191,7 @@ WCMD(do_wrecho)
if (!*msg || !*start || !*finish || !is_number(start) || !is_number(finish))
wld_log(room, "wrecho: too few args");
else
send_to_range(atoi(start), atoi(finish), "%s\r\n", msg);
send_to_range(atoidx(start), atoidx(finish), "%s\r\n", msg);
}
@@ -270,7 +270,7 @@ WCMD(do_wdoor)
newexit->exit_info = (sh_int)asciiflag_conv(value);
break;
case 3: /* key */
newexit->key = atoi(value);
newexit->key = atoidx(value);
break;
case 4: /* name */
if (newexit->keyword)
@@ -279,7 +279,7 @@ WCMD(do_wdoor)
strcpy(newexit->keyword, value);
break;
case 5: /* room */
if ((to_room = real_room(atoi(value))) != NOWHERE)
if ((to_room = real_room(atoidx(value))) != NOWHERE)
newexit->to_room = to_room;
else
wld_log(room, "wdoor: invalid door target");
@@ -291,7 +291,8 @@ WCMD(do_wdoor)
WCMD(do_wteleport)
{
char_data *ch, *next_ch;
room_rnum target, nr;
room_rnum target;
room_vnum nr;
char arg1[MAX_INPUT_LENGTH], arg2[MAX_INPUT_LENGTH];
two_arguments(argument, arg1, arg2);
@@ -301,7 +302,7 @@ WCMD(do_wteleport)
return;
}
nr = atoi(arg2);
nr = atoidx(arg2);
target = real_room(nr);
if (target == NOWHERE)
@@ -435,7 +436,7 @@ WCMD(do_wpurge)
WCMD(do_wload)
{
char arg1[MAX_INPUT_LENGTH], arg2[MAX_INPUT_LENGTH];
int number = 0;
IDXTYPE number = NOTHING;
char_data *mob;
obj_data *object;
char *target;
@@ -445,7 +446,7 @@ WCMD(do_wload)
target = two_arguments(argument, arg1, arg2);
if (!*arg1 || !*arg2 || !is_number(arg2) || ((number = atoi(arg2)) < 0)) {
if (!*arg1 || !*arg2 || !is_number(arg2) || (number = atoidx(arg2)) == NOTHING) {
wld_log(room, "wload: bad syntax");
return;
}
@@ -456,7 +457,7 @@ WCMD(do_wload)
if (!target || !*target) {
rnum = real_room(room->number);
} else {
if (!isdigit(*target) || (rnum = real_room(atoi(target))) == NOWHERE) {
if (!isdigit(*target) || (rnum = real_room(atoidx(target))) == NOWHERE) {
wld_log(room, "wload: room target vnum doesn't exist (loading mob vnum %d to room %s)", number, target);
return;
}
@@ -547,7 +548,7 @@ WCMD(do_wdamage) {
WCMD(do_wat)
{
room_rnum loc = NOWHERE;
struct char_data *ch;
char_data *ch;
char arg[MAX_INPUT_LENGTH], *command;
command = any_one_arg(argument, arg);
@@ -564,7 +565,7 @@ WCMD(do_wat)
return;
}
if (isdigit(*arg)) loc = real_room(atoi(arg));
if (isdigit(*arg)) loc = real_room(atoidx(arg));
else if ((ch = get_char_by_room(room, arg))) loc = IN_ROOM(ch);
if (loc == NOWHERE) {
@@ -577,7 +578,8 @@ WCMD(do_wat)
WCMD(do_wmove)
{
obj_data *obj, *next_obj;
room_rnum target, nr;
room_rnum target;
room_vnum nr;
char arg1[MAX_INPUT_LENGTH], arg2[MAX_INPUT_LENGTH];
two_arguments(argument, arg1, arg2);
@@ -587,7 +589,7 @@ WCMD(do_wmove)
return;
}
nr = atoi(arg2);
nr = atoidx(arg2);
target = real_room(nr);
if (target == NOWHERE) {

View File

@@ -1054,7 +1054,7 @@ INCLUDE_FILE_PATTERNS =
# undefined via #undef or recursively expanded use the := operator
# instead of the = operator.
PREDEFINED = "ACMD(name)=void name (struct char_data *ch, char *argument, int cmd, int subcmd)" "WCMD(name)=void name (room_data *room, char *argument, int cmd, int subcmd)" "OCMD(name)=void name(obj_data *obj, char *argument, int cmd, int subcmd)" "SPECIAL(name)=int name(struct char_data *ch, void *me, int cmd, char *argument)"
PREDEFINED = "ACMD(name)=void name (char_data *ch, char *argument, int cmd, int subcmd)" "WCMD(name)=void name (room_data *room, char *argument, int cmd, int subcmd)" "OCMD(name)=void name(obj_data *obj, char *argument, int cmd, int subcmd)" "SPECIAL(name)=int name(char_data *ch, void *me, int cmd, char *argument)"
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
# this tag can be used to specify a list of macro names that should be expanded.

View File

@@ -1054,7 +1054,7 @@ INCLUDE_FILE_PATTERNS =
# undefined via #undef or recursively expanded use the := operator
# instead of the = operator.
PREDEFINED = "ACMD(name)=void name (struct char_data *ch, char *argument, int cmd, int subcmd)" "WCMD(name)=void name (room_data *room, char *argument, int cmd, int subcmd)" "OCMD(name)=void name(obj_data *obj, char *argument, int cmd, int subcmd)" "SPECIAL(name)=int name(struct char_data *ch, void *me, int cmd, char *argument)"
PREDEFINED = "ACMD(name)=void name (char_data *ch, char *argument, int cmd, int subcmd)" "WCMD(name)=void name (room_data *room, char *argument, int cmd, int subcmd)" "OCMD(name)=void name(obj_data *obj, char *argument, int cmd, int subcmd)" "SPECIAL(name)=int name(char_data *ch, void *me, int cmd, char *argument)"
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
# this tag can be used to specify a list of macro names that should be expanded.

View File

@@ -29,7 +29,7 @@
/* locally defined global variables, used externally */
/* head of l-list of fighting chars */
struct char_data *combat_list = NULL;
char_data *combat_list = NULL;
/* Weapon attack texts */
struct attack_hit_type attack_hit_text[] =
{
@@ -51,23 +51,23 @@ struct attack_hit_type attack_hit_text[] =
};
/* local (file scope only) variables */
static struct char_data *next_combat_list = NULL;
static char_data *next_combat_list = NULL;
/* local file scope utility functions */
static void perform_group_gain(struct char_data *ch, int base, struct char_data *victim);
static void dam_message(int dam, struct char_data *ch, struct char_data *victim, int w_type);
static void make_corpse(struct char_data *ch);
static void change_alignment(struct char_data *ch, struct char_data *victim);
static void group_gain(struct char_data *ch, struct char_data *victim);
static void solo_gain(struct char_data *ch, struct char_data *victim);
static void perform_group_gain(char_data *ch, int base, char_data *victim);
static void dam_message(int dam, char_data *ch, char_data *victim, int w_type);
static void make_corpse(char_data *ch);
static void change_alignment(char_data *ch, char_data *victim);
static void group_gain(char_data *ch, char_data *victim);
static void solo_gain(char_data *ch, char_data *victim);
/** @todo refactor this function name */
static char *replace_string(const char *str, const char *weapon_singular, const char *weapon_plural);
static int compute_thaco(struct char_data *ch, struct char_data *vict);
static int compute_thaco(char_data *ch, char_data *vict);
#define IS_WEAPON(type) (((type) >= TYPE_HIT) && ((type) < TYPE_SUFFERING))
/* The Fight related routines */
void appear(struct char_data *ch)
void appear(char_data *ch)
{
if (affected_by_spell(ch, SPELL_INVISIBLE))
affect_from_char(ch, SPELL_INVISIBLE);
@@ -82,7 +82,7 @@ void appear(struct char_data *ch)
FALSE, ch, 0, 0, TO_ROOM);
}
int compute_armor_class(struct char_data *ch)
int compute_armor_class(char_data *ch)
{
int armorclass = GET_AC(ch);
@@ -92,7 +92,7 @@ int compute_armor_class(struct char_data *ch)
return (MAX(-100, armorclass)); /* -100 is lowest */
}
void update_pos(struct char_data *victim)
void update_pos(char_data *victim)
{
if ((GET_HIT(victim) > 0) && (GET_POS(victim) > POS_STUNNED))
return;
@@ -108,7 +108,7 @@ void update_pos(struct char_data *victim)
GET_POS(victim) = POS_STUNNED;
}
void check_killer(struct char_data *ch, struct char_data *vict)
void check_killer(char_data *ch, char_data *vict)
{
if (PLR_FLAGGED(vict, PLR_KILLER) || PLR_FLAGGED(vict, PLR_THIEF))
return;
@@ -123,7 +123,7 @@ void check_killer(struct char_data *ch, struct char_data *vict)
}
/* start one char fighting another (yes, it is horrible, I know... ) */
void set_fighting(struct char_data *ch, struct char_data *vict)
void set_fighting(char_data *ch, char_data *vict)
{
if (ch == vict)
return;
@@ -147,9 +147,9 @@ void set_fighting(struct char_data *ch, struct char_data *vict)
}
/* remove a char from the list of fighting chars */
void stop_fighting(struct char_data *ch)
void stop_fighting(char_data *ch)
{
struct char_data *temp;
char_data *temp;
if (ch == next_combat_list)
next_combat_list = ch->next_fighting;
@@ -161,11 +161,11 @@ void stop_fighting(struct char_data *ch)
update_pos(ch);
}
static void make_corpse(struct char_data *ch)
static void make_corpse(char_data *ch)
{
char buf2[MAX_NAME_LENGTH + 64];
struct obj_data *corpse, *o;
struct obj_data *money;
obj_data *corpse, *o;
obj_data *money;
int i, x, y;
corpse = create_obj();
@@ -232,14 +232,14 @@ static void make_corpse(struct char_data *ch)
}
/* When ch kills victim */
static void change_alignment(struct char_data *ch, struct char_data *victim)
static void change_alignment(char_data *ch, char_data *victim)
{
/* new alignment change algorithm: if you kill a monster with alignment A,
* you move 1/16th of the way to having alignment -A. Simple and fast. */
GET_ALIGNMENT(ch) += (-GET_ALIGNMENT(victim) - GET_ALIGNMENT(ch)) / 16;
}
void death_cry(struct char_data *ch)
void death_cry(char_data *ch)
{
int door;
@@ -250,9 +250,9 @@ void death_cry(struct char_data *ch)
send_to_room(world[IN_ROOM(ch)].dir_option[door]->to_room, "Your blood freezes as you hear someone's death cry.\r\n");
}
void raw_kill(struct char_data * ch, struct char_data * killer)
void raw_kill(char_data * ch, char_data * killer)
{
struct char_data *i;
char_data *i;
if (FIGHTING(ch))
stop_fighting(ch);
@@ -271,7 +271,7 @@ struct char_data *i;
if (killer) {
if (killer->group) {
while ((i = (struct char_data *) simple_list(killer->group->members)) != NULL)
while ((i = (char_data *) simple_list(killer->group->members)) != NULL)
if(IN_ROOM(i) == IN_ROOM(ch) || (world[IN_ROOM(i)].zone == world[IN_ROOM(ch)].zone))
autoquest_trigger_check(i, ch, NULL, AQ_MOB_KILL);
} else
@@ -293,7 +293,7 @@ struct char_data *i;
}
}
void die(struct char_data * ch, struct char_data * killer)
void die(char_data * ch, char_data * killer)
{
gain_exp(ch, -(GET_EXP(ch) / 2));
if (!IS_NPC(ch)) {
@@ -303,8 +303,8 @@ void die(struct char_data * ch, struct char_data * killer)
raw_kill(ch, killer);
}
static void perform_group_gain(struct char_data *ch, int base,
struct char_data *victim)
static void perform_group_gain(char_data *ch, int base,
char_data *victim)
{
int share, hap_share;
@@ -325,12 +325,12 @@ static void perform_group_gain(struct char_data *ch, int base,
change_alignment(ch, victim);
}
static void group_gain(struct char_data *ch, struct char_data *victim)
static void group_gain(char_data *ch, char_data *victim)
{
int tot_members = 0, base, tot_gain;
struct char_data *k;
char_data *k;
while ((k = (struct char_data *) simple_list(GROUP(ch)->members)) != NULL)
while ((k = (char_data *) simple_list(GROUP(ch)->members)) != NULL)
if (IN_ROOM(ch) == IN_ROOM(k))
tot_members++;
@@ -346,12 +346,12 @@ static void group_gain(struct char_data *ch, struct char_data *victim)
else
base = 0;
while ((k = (struct char_data *) simple_list(GROUP(ch)->members)) != NULL)
while ((k = (char_data *) simple_list(GROUP(ch)->members)) != NULL)
if (IN_ROOM(k) == IN_ROOM(ch))
perform_group_gain(k, base, victim);
}
static void solo_gain(struct char_data *ch, struct char_data *victim)
static void solo_gain(char_data *ch, char_data *victim)
{
int exp, happy_exp;
@@ -407,7 +407,7 @@ static char *replace_string(const char *str, const char *weapon_singular, const
}
/* message for doing damage with a weapon */
static void dam_message(int dam, struct char_data *ch, struct char_data *victim,
static void dam_message(int dam, char_data *ch, char_data *victim,
int w_type)
{
char *buf;
@@ -512,13 +512,13 @@ static void dam_message(int dam, struct char_data *ch, struct char_data *victim,
/* message for doing damage with a spell or skill. Also used for weapon
* damage on miss and death blows. */
int skill_message(int dam, struct char_data *ch, struct char_data *vict,
int skill_message(int dam, char_data *ch, char_data *vict,
int attacktype)
{
int i, j, nr;
struct message_type *msg;
struct obj_data *weap = GET_EQ(ch, WEAR_WIELD);
obj_data *weap = GET_EQ(ch, WEAR_WIELD);
/* @todo restructure the messages library to a pointer based system as
* opposed to the current cyclic location system. */
@@ -585,12 +585,12 @@ int skill_message(int dam, struct char_data *ch, struct char_data *vict,
* < 0 Victim died.
* = 0 No damage.
* > 0 How much damage done. */
int damage(struct char_data *ch, struct char_data *victim, int dam, int attacktype)
int damage(char_data *ch, char_data *victim, int dam, int attacktype)
{
long local_gold = 0, happy_gold = 0;
char local_buf[256];
struct char_data *tmp_char;
struct obj_data *corpse_obj;
char_data *tmp_char;
obj_data *corpse_obj;
if (GET_POS(victim) <= POS_DEAD) {
/* This is "normal"-ish now with delayed extraction. -gg 3/15/2001 */
@@ -791,7 +791,7 @@ int damage(struct char_data *ch, struct char_data *victim, int dam, int attackty
/* Calculate the THAC0 of the attacker. 'victim' currently isn't used but you
* could use it for special cases like weapons that hit evil creatures easier
* or a weapon that always misses attacking an animal. */
static int compute_thaco(struct char_data *ch, struct char_data *victim)
static int compute_thaco(char_data *ch, char_data *victim)
{
int calc_thaco;
@@ -807,9 +807,9 @@ static int compute_thaco(struct char_data *ch, struct char_data *victim)
return calc_thaco;
}
void hit(struct char_data *ch, struct char_data *victim, int type)
void hit(char_data *ch, char_data *victim, int type)
{
struct obj_data *wielded = GET_EQ(ch, WEAR_WIELD);
obj_data *wielded = GET_EQ(ch, WEAR_WIELD);
int w_type, victim_ac, calc_thaco, dam, diceroll;
/* Check that the attacker and victim exist */
@@ -910,7 +910,7 @@ void hit(struct char_data *ch, struct char_data *victim, int type)
/* control the fights going on. Called every 2 seconds from comm.c. */
void perform_violence(void)
{
struct char_data *ch, *tch;
char_data *ch, *tch;
for (ch = combat_list; ch; ch = next_combat_list) {
next_combat_list = ch->next_fighting;
@@ -940,7 +940,7 @@ void perform_violence(void)
if (GROUP(ch) && GROUP(ch)->members && GROUP(ch)->members->iSize) {
struct iterator_data Iterator;
tch = (struct char_data *) merge_iterator(&Iterator, GROUP(ch)->members);
tch = (char_data *) merge_iterator(&Iterator, GROUP(ch)->members);
for (; tch ; tch = next_in_list(&Iterator)) {
if (tch == ch)
continue;

View File

@@ -1,12 +1,12 @@
/**
* @file fight.h
* Fighting and violence functions and variables.
*
*
* Part of the core tbaMUD source code distribution, which is a derivative
* of, and continuation of, CircleMUD.
*
* All rights reserved. See license for complete information.
* Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University
*
* All rights reserved. See license for complete information.
* Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University
* CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991.
*
*/
@@ -16,28 +16,27 @@
/* Structures and defines */
/* Attacktypes with grammar */
struct attack_hit_type {
const char *singular;
const char *plural;
const char *singular;
const char *plural;
};
/* Functions available in fight.c */
void appear(struct char_data *ch);
void check_killer(struct char_data *ch, struct char_data *vict);
int compute_armor_class(struct char_data *ch);
int damage(struct char_data *ch, struct char_data *victim, int dam, int attacktype);
void death_cry(struct char_data *ch);
void die(struct char_data * ch, struct char_data * killer);
void hit(struct char_data *ch, struct char_data *victim, int type);
void appear(char_data *ch);
void check_killer(char_data *ch, char_data *vict);
int compute_armor_class(char_data *ch);
int damage(char_data *ch, char_data *victim, int dam, int attacktype);
void death_cry(char_data *ch);
void die(char_data * ch, char_data * killer);
void hit(char_data *ch, char_data *victim, int type);
void perform_violence(void);
void raw_kill(struct char_data * ch, struct char_data * killer);
void set_fighting(struct char_data *ch, struct char_data *victim);
int skill_message(int dam, struct char_data *ch, struct char_data *vict,
int attacktype);
void stop_fighting(struct char_data *ch);
void raw_kill(char_data * ch, char_data * killer);
void set_fighting(char_data *ch, char_data *victim);
int skill_message(int dam, char_data *ch, char_data *vict, int attacktype);
void stop_fighting(char_data *ch);
/* Global variables */
extern struct attack_hit_type attack_hit_text[];
extern struct char_data *combat_list;
extern char_data *combat_list;
#endif /* _FIGHT_H_*/

View File

@@ -21,11 +21,11 @@
/* local functions */
static void extract_mobile_all(mob_vnum vnum);
int add_mobile(struct char_data *mob, mob_vnum vnum)
int add_mobile(char_data *mob, mob_vnum vnum)
{
int rnum, i, found = FALSE, shop, cmd_no;
zone_rnum zone;
struct char_data *live_mob;
char_data *live_mob;
if ((rnum = real_mobile(vnum)) != NOBODY) {
/* Copy over the mobile and free() the old strings. */
@@ -41,7 +41,7 @@ int add_mobile(struct char_data *mob, mob_vnum vnum)
return rnum;
}
RECREATE(mob_proto, struct char_data, top_of_mobt + 2);
RECREATE(mob_proto, char_data, top_of_mobt + 2);
RECREATE(mob_index, struct index_data, top_of_mobt + 2);
top_of_mobt++;
@@ -90,7 +90,7 @@ int add_mobile(struct char_data *mob, mob_vnum vnum)
return found;
}
int copy_mobile(struct char_data *to, struct char_data *from)
int copy_mobile(char_data *to, char_data *from)
{
free_mobile_strings(to);
*to = *from;
@@ -101,7 +101,7 @@ int copy_mobile(struct char_data *to, struct char_data *from)
static void extract_mobile_all(mob_vnum vnum)
{
struct char_data *next, *ch;
char_data *next, *ch;
int i;
for (ch = character_list; ch; ch = next) {
@@ -140,8 +140,8 @@ static void extract_mobile_all(mob_vnum vnum)
int delete_mobile(mob_rnum refpt)
{
struct char_data *live_mob;
struct char_data *proto;
char_data *live_mob;
char_data *proto;
int counter, cmd_no;
mob_vnum vnum;
zone_rnum zone;
@@ -169,7 +169,7 @@ int delete_mobile(mob_rnum refpt)
top_of_mobt--;
RECREATE(mob_index, struct index_data, top_of_mobt + 1);
RECREATE(mob_proto, struct char_data, top_of_mobt + 1);
RECREATE(mob_proto, char_data, top_of_mobt + 1);
/* Update live mobile rnums. */
for (live_mob = character_list; live_mob; live_mob = live_mob->next)
@@ -195,7 +195,7 @@ int delete_mobile(mob_rnum refpt)
return refpt;
}
int copy_mobile_strings(struct char_data *t, struct char_data *f)
int copy_mobile_strings(char_data *t, char_data *f)
{
if (f->player.name)
t->player.name = strdup(f->player.name);
@@ -210,7 +210,7 @@ int copy_mobile_strings(struct char_data *t, struct char_data *f)
return TRUE;
}
int update_mobile_strings(struct char_data *t, struct char_data *f)
int update_mobile_strings(char_data *t, char_data *f)
{
if (f->player.name)
t->player.name = f->player.name;
@@ -225,7 +225,7 @@ int update_mobile_strings(struct char_data *t, struct char_data *f)
return TRUE;
}
int free_mobile_strings(struct char_data *mob)
int free_mobile_strings(char_data *mob)
{
if (mob->player.name)
free(mob->player.name);
@@ -242,7 +242,7 @@ int free_mobile_strings(struct char_data *mob)
/* Free a mobile structure that has been edited. Take care of existing mobiles
* and their mob_proto! */
int free_mobile(struct char_data *mob)
int free_mobile(char_data *mob)
{
mob_rnum i;
@@ -325,7 +325,7 @@ int save_mobiles(zone_rnum rznum)
return written;
}
int write_mobile_espec(mob_vnum mvnum, struct char_data *mob, FILE *fd)
int write_mobile_espec(mob_vnum mvnum, char_data *mob, FILE *fd)
{
if (GET_ATTACK(mob) != 0)
fprintf(fd, "BareHandAttack: %d\n", GET_ATTACK(mob));
@@ -357,7 +357,7 @@ int write_mobile_espec(mob_vnum mvnum, struct char_data *mob, FILE *fd)
return TRUE;
}
int write_mobile_record(mob_vnum mvnum, struct char_data *mob, FILE *fd)
int write_mobile_record(mob_vnum mvnum, char_data *mob, FILE *fd)
{
char ldesc[MAX_STRING_LENGTH];
char ddesc[MAX_STRING_LENGTH];
@@ -419,7 +419,7 @@ int write_mobile_record(mob_vnum mvnum, struct char_data *mob, FILE *fd)
return TRUE;
}
void check_mobile_strings(struct char_data *mob)
void check_mobile_strings(char_data *mob)
{
mob_vnum mvnum = mob_index[mob->nr].vnum;
check_mobile_string(mvnum, &GET_LDESC(mob), "long description");

View File

@@ -1,42 +1,42 @@
/**
* @file genmob.h
* Generic OLC Library - Mobiles.
*
*
* Part of the core tbaMUD source code distribution, which is a derivative
* of, and continuation of, CircleMUD.
*
*
* This source code, which was not part of the CircleMUD legacy code,
* is attributed to:
* Copyright 1996 by Harvey Gilpin, 1997-2001 by George Greer.
* Copyright 1996 by Harvey Gilpin, 1997-2001 by George Greer.
*/
#ifndef _GENMOB_H_
#define _GENMOB_H_
int delete_mobile(mob_rnum);
int copy_mobile(struct char_data *to, struct char_data *from);
int add_mobile(struct char_data *, mob_vnum);
int copy_mob_strings(struct char_data *to, struct char_data *from);
int free_mob_strings(struct char_data *);
int free_mobile(struct char_data *mob);
int copy_mobile(char_data *to, char_data *from);
int add_mobile(char_data *, mob_vnum);
int copy_mob_strings(char_data *to, char_data *from);
int free_mob_strings(char_data *);
int free_mobile(char_data *mob);
int save_mobiles(zone_rnum rznum);
int update_mobile_strings(struct char_data *t, struct char_data *f);
void check_mobile_strings(struct char_data *mob);
int update_mobile_strings(char_data *t, char_data *f);
void check_mobile_strings(char_data *mob);
void check_mobile_string(mob_vnum i, char **string, const char *desc);
int write_mobile_record(mob_vnum mvnum, struct char_data *mob, FILE *fd);
int write_mobile_espec(mob_vnum mvnum, struct char_data *mob, FILE *fd);
int free_mobile_strings(struct char_data *mob);
int copy_mobile_strings(struct char_data *t, struct char_data *f);
int write_mobile_record(mob_vnum mvnum, char_data *mob, FILE *fd);
int write_mobile_espec(mob_vnum mvnum, char_data *mob, FILE *fd);
int free_mobile_strings(char_data *mob);
int copy_mobile_strings(char_data *t, char_data *f);
#if CONFIG_GENOLC_MOBPROG
int write_mobile_mobprog(mob_vnum mvnum, struct char_data *mob, FILE *fd);
int write_mobile_mobprog(mob_vnum mvnum, char_data *mob, FILE *fd);
#endif
/* Handy macros. */
#define GET_NDD(mob) ((mob)->mob_specials.damnodice)
#define GET_SDD(mob) ((mob)->mob_specials.damsizedice)
#define GET_ALIAS(mob) ((mob)->player.name)
#define GET_SDESC(mob) ((mob)->player.short_descr)
#define GET_LDESC(mob) ((mob)->player.long_descr)
#define GET_DDESC(mob) ((mob)->player.description)
#define GET_ATTACK(mob) ((mob)->mob_specials.attack_type)
#define GET_NDD(mob) ((mob)->mob_specials.damnodice)
#define GET_SDD(mob) ((mob)->mob_specials.damsizedice)
#define GET_ALIAS(mob) ((mob)->player.name)
#define GET_SDESC(mob) ((mob)->player.short_descr)
#define GET_LDESC(mob) ((mob)->player.long_descr)
#define GET_DDESC(mob) ((mob)->player.description)
#define GET_ATTACK(mob) ((mob)->mob_specials.attack_type)
#endif /* _GENMOB_H_ */

View File

@@ -22,10 +22,10 @@
/* local functions */
static int update_all_objects(struct obj_data *obj);
static void copy_object_strings(struct obj_data *to, struct obj_data *from);
static int update_all_objects(obj_data *obj);
static void copy_object_strings(obj_data *to, obj_data *from);
obj_rnum add_object(struct obj_data *newobj, obj_vnum ovnum)
obj_rnum add_object(obj_data *newobj, obj_vnum ovnum)
{
int found = NOTHING;
zone_rnum rznum = real_zone_by_thing(ovnum);
@@ -48,9 +48,9 @@ obj_rnum add_object(struct obj_data *newobj, obj_vnum ovnum)
* and every object currently in the game to see which ones are pointing to
* this prototype. If object is pointing to this prototype, then we need to
* replace it with the new one. */
static int update_all_objects(struct obj_data *refobj)
static int update_all_objects(obj_data *refobj)
{
struct obj_data *obj, swap;
obj_data *obj, swap;
int count = 0;
for (obj = object_list; obj; obj = obj->next) {
@@ -85,7 +85,7 @@ static int update_all_objects(struct obj_data *refobj)
obj_rnum adjust_objects(obj_rnum refpt)
{
int shop, i, zone, cmd_no;
struct obj_data *obj;
obj_data *obj;
#if CIRCLE_UNSIGNED_INDEX
if (refpt == NOTHING || refpt > top_of_objt)
@@ -132,13 +132,13 @@ obj_rnum adjust_objects(obj_rnum refpt)
/* Function handle the insertion of an object within the prototype framework.
* Note that this does not adjust internal values of other objects, use
* add_object() for that. */
obj_rnum insert_object(struct obj_data *obj, obj_vnum ovnum)
obj_rnum insert_object(obj_data *obj, obj_vnum ovnum)
{
obj_rnum i;
top_of_objt++;
RECREATE(obj_index, struct index_data, top_of_objt + 1);
RECREATE(obj_proto, struct obj_data, top_of_objt + 1);
RECREATE(obj_proto, obj_data, top_of_objt + 1);
/* Start counting through both tables. */
for (i = top_of_objt; i > 0; i--) {
@@ -156,7 +156,7 @@ obj_rnum insert_object(struct obj_data *obj, obj_vnum ovnum)
return index_object(obj, ovnum, 0);
}
obj_rnum index_object(struct obj_data *obj, obj_vnum ovnum, obj_rnum ornum)
obj_rnum index_object(obj_data *obj, obj_vnum ovnum, obj_rnum ornum)
{
#if CIRCLE_UNSIGNED_INDEX
if (obj == NULL || ornum == NOTHING || ornum > top_of_objt)
@@ -184,7 +184,7 @@ int save_objects(zone_rnum zone_num)
char pbuf1[MAX_STRING_LENGTH], pbuf2[MAX_STRING_LENGTH], pbuf3[MAX_STRING_LENGTH], pbuf4[MAX_STRING_LENGTH];
int counter, counter2, realcounter;
FILE *fp;
struct obj_data *obj;
obj_data *obj;
struct extra_descr_data *ex_desc;
#if CIRCLE_UNSIGNED_INDEX
@@ -299,7 +299,7 @@ int save_objects(zone_rnum zone_num)
}
/* Free all, unconditionally. */
void free_object_strings(struct obj_data *obj)
void free_object_strings(obj_data *obj)
{
if (obj->name)
free(obj->name);
@@ -314,7 +314,7 @@ void free_object_strings(struct obj_data *obj)
}
/* For object instances that are not the prototype. */
void free_object_strings_proto(struct obj_data *obj)
void free_object_strings_proto(obj_data *obj)
{
int robj_num = GET_OBJ_RNUM(obj);
@@ -349,7 +349,7 @@ void free_object_strings_proto(struct obj_data *obj)
}
}
static void copy_object_strings(struct obj_data *to, struct obj_data *from)
static void copy_object_strings(obj_data *to, obj_data *from)
{
to->name = from->name ? strdup(from->name) : NULL;
to->description = from->description ? strdup(from->description) : NULL;
@@ -362,18 +362,18 @@ static void copy_object_strings(struct obj_data *to, struct obj_data *from)
to->ex_description = NULL;
}
int copy_object(struct obj_data *to, struct obj_data *from)
int copy_object(obj_data *to, obj_data *from)
{
free_object_strings(to);
return copy_object_main(to, from, TRUE);
}
int copy_object_preserve(struct obj_data *to, struct obj_data *from)
int copy_object_preserve(obj_data *to, obj_data *from)
{
return copy_object_main(to, from, FALSE);
}
int copy_object_main(struct obj_data *to, struct obj_data *from, int free_object)
int copy_object_main(obj_data *to, obj_data *from, int free_object)
{
*to = *from;
copy_object_strings(to, from);
@@ -384,7 +384,7 @@ int delete_object(obj_rnum rnum)
{
obj_rnum i;
zone_rnum zrnum;
struct obj_data *obj, *tmp, *next_obj;
obj_data *obj, *tmp, *next_obj;
int shop, j, zone, cmd_no;
if (rnum == NOTHING || rnum > top_of_objt)
@@ -404,7 +404,7 @@ int delete_object(obj_rnum rnum)
/* extract_obj() will just axe contents. */
if (tmp->contains) {
struct obj_data *this_content, *next_content;
obj_data *this_content, *next_content;
for (this_content = tmp->contains; this_content; this_content = next_content) {
next_content = this_content->next_content;
if (IN_ROOM(tmp)) {
@@ -442,7 +442,7 @@ int delete_object(obj_rnum rnum)
top_of_objt--;
RECREATE(obj_index, struct index_data, top_of_objt + 1);
RECREATE(obj_proto, struct obj_data, top_of_objt + 1);
RECREATE(obj_proto, obj_data, top_of_objt + 1);
/* Renumber notice boards. */
for (j = 0; j < NUM_OF_BOARDS; j++)
@@ -487,7 +487,7 @@ int delete_object(obj_rnum rnum)
}
/* oset handling, this location should be temporary */
bool oset_alias(struct obj_data *obj, char * argument)
bool oset_alias(obj_data *obj, char * argument)
{
static size_t max_len = 64;
int i = GET_OBJ_RNUM(obj);
@@ -505,7 +505,7 @@ bool oset_alias(struct obj_data *obj, char * argument)
return TRUE;
}
bool oset_apply(struct obj_data *obj, char * argument)
bool oset_apply(obj_data *obj, char * argument)
{
int i = 0, apply = -1, location = -1, mod = 0, empty = -1, value;
char arg[MAX_INPUT_LENGTH];
@@ -558,7 +558,7 @@ bool oset_apply(struct obj_data *obj, char * argument)
return TRUE;
}
bool oset_short_description(struct obj_data *obj, char * argument)
bool oset_short_description(obj_data *obj, char * argument)
{
static size_t max_len = 64;
int i = GET_OBJ_RNUM(obj);
@@ -576,7 +576,7 @@ bool oset_short_description(struct obj_data *obj, char * argument)
return TRUE;
}
bool oset_long_description(struct obj_data *obj, char * argument)
bool oset_long_description(obj_data *obj, char * argument)
{
static size_t max_len = 128;
int i = GET_OBJ_RNUM(obj);

View File

@@ -1,31 +1,31 @@
/**
* @file genobj.h
* Generic OLC Library - Objects.
*
*
* Part of the core tbaMUD source code distribution, which is a derivative
* of, and continuation of, CircleMUD.
*
*
* This source code, which was not part of the CircleMUD legacy code,
* is attributed to:
* Copyright 1996 by Harvey Gilpin, 1997-2001 by George Greer.
* Copyright 1996 by Harvey Gilpin, 1997-2001 by George Greer.
*/
#ifndef _GENOBJ_H_
#define _GENOBJ_H_
void free_object_strings_proto(struct obj_data *obj);
void free_object_strings(struct obj_data *obj);
int copy_object(struct obj_data *to, struct obj_data *from);
int copy_object_preserve(struct obj_data *to, struct obj_data *from);
void free_object_strings_proto(obj_data *obj);
void free_object_strings(obj_data *obj);
int copy_object(obj_data *to, obj_data *from);
int copy_object_preserve(obj_data *to, obj_data *from);
int save_objects(zone_rnum vznum);
obj_rnum insert_object(struct obj_data *obj, obj_vnum ovnum);
obj_rnum insert_object(obj_data *obj, obj_vnum ovnum);
obj_rnum adjust_objects(obj_rnum refpt);
obj_rnum index_object(struct obj_data *obj, obj_vnum ovnum, obj_rnum ornum);
obj_rnum add_object(struct obj_data *, obj_vnum ovnum);
int copy_object_main(struct obj_data *to, struct obj_data *from, int free_object);
obj_rnum index_object(obj_data *obj, obj_vnum ovnum, obj_rnum ornum);
obj_rnum add_object(obj_data *, obj_vnum ovnum);
int copy_object_main(obj_data *to, obj_data *from, int free_object);
int delete_object(obj_rnum);
bool oset_alias(struct obj_data *obj, char * argument);
bool oset_apply(struct obj_data *obj, char * argument);
bool oset_short_description(struct obj_data *obj, char * argument);
bool oset_long_description(struct obj_data *obj, char * argument);
bool oset_alias(obj_data *obj, char * argument);
bool oset_apply(obj_data *obj, char * argument);
bool oset_short_description(obj_data *obj, char * argument);
bool oset_long_description(obj_data *obj, char * argument);
#endif /* _GENOBJ_H_ */

View File

@@ -60,11 +60,11 @@ static int export_save_zone(zone_rnum zrnum);
static int export_save_objects(zone_rnum zrnum);
static int export_save_rooms(zone_rnum zrnum);
static int export_save_triggers(zone_rnum zrnum);
static int export_mobile_record(mob_vnum mvnum, struct char_data *mob, FILE *fd);
static int export_mobile_record(mob_vnum mvnum, char_data *mob, FILE *fd);
static void export_script_save_to_disk(FILE *fp, void *item, int type);
static int export_info_file(zone_rnum zrnum);
int genolc_checkstring(struct descriptor_data *d, char *arg)
int genolc_checkstring(descriptor_data *d, char *arg)
{
smash_tilde(arg);
parse_at(arg);
@@ -330,7 +330,7 @@ ACMD(do_export_zone)
return;
}
zvnum = atoi(argument);
zvnum = atoidx(argument);
zrnum = real_zone(zvnum);
if (zrnum == NOWHERE) {
@@ -589,7 +589,7 @@ static int export_save_mobiles(zone_rnum rznum)
return TRUE;
}
static int export_mobile_record(mob_vnum mvnum, struct char_data *mob, FILE *fd)
static int export_mobile_record(mob_vnum mvnum, char_data *mob, FILE *fd)
{
char ldesc[MAX_STRING_LENGTH];
@@ -774,7 +774,7 @@ static int export_save_objects(zone_rnum zrnum)
obj_vnum ovnum;
int i;
FILE *obj_file;
struct obj_data *obj;
obj_data *obj;
struct extra_descr_data *ex_desc;
if (!(obj_file = fopen("world/export/qq.obj", "w"))) {
@@ -996,9 +996,9 @@ static void export_script_save_to_disk(FILE *fp, void *item, int type)
struct trig_proto_list *t;
if (type==MOB_TRIGGER)
t = ((struct char_data *)item)->proto_script;
t = ((char_data *)item)->proto_script;
else if (type==OBJ_TRIGGER)
t = ((struct obj_data *)item)->proto_script;
t = ((obj_data *)item)->proto_script;
else if (type==WLD_TRIGGER)
t = ((struct room_data *)item)->proto_script;
else {

View File

@@ -1,21 +1,21 @@
/**
* @file genolc.h
* Generic OLC Library - General.
*
*
* Part of the core tbaMUD source code distribution, which is a derivative
* of, and continuation of, CircleMUD.
*
*
* This source code, which was not part of the CircleMUD legacy code,
* is attributed to:
* Copyright 1996 by Harvey Gilpin, 1997-2001 by George Greer.
* Copyright 1996 by Harvey Gilpin, 1997-2001 by George Greer.
*/
#ifndef _GENOLC_H_
#define _GENOLC_H_
#define STRING_TERMINATOR '~'
#define CONFIG_GENOLC_MOBPROG 0
#define CONFIG_GENOLC_MOBPROG 0
int genolc_checkstring(struct descriptor_data *d, char *arg);
int genolc_checkstring(descriptor_data *d, char *arg);
int remove_from_save_list(zone_vnum, int type);
int add_to_save_list(zone_vnum, int type);
int in_save_list(zone_vnum, int type);
@@ -30,28 +30,28 @@ ACMD(do_export_zone);
ACMD(do_show_save_list);
struct save_list_data {
int zone;
int type;
struct save_list_data *next;
int zone;
int type;
struct save_list_data *next;
};
extern struct save_list_data *save_list;
/* save_list_data.type */
#define SL_MOB 0
#define SL_OBJ 1
#define SL_SHP 2
#define SL_WLD 3
#define SL_ZON 4
#define SL_CFG 5
#define SL_MOB 0
#define SL_OBJ 1
#define SL_SHP 2
#define SL_WLD 3
#define SL_ZON 4
#define SL_CFG 5
#define SL_QST 6
#define SL_MAX 6
#define SL_ACT SL_MAX + 1 /* must be above MAX */
#define SL_MAX 6
#define SL_ACT SL_MAX + 1 /* must be above MAX */
#define SL_HLP SL_MAX + 2
#define ZCMD(zon, cmds) zone_table[(zon)].cmd[(cmds)]
#define ZCMD(zon, cmds) zone_table[(zon)].cmd[(cmds)]
#define LIMIT(var, low, high) MIN(high, MAX(var, low))
#define LIMIT(var, low, high) MIN(high, MAX(var, low))
room_vnum genolc_zone_bottom(zone_rnum rznum);
room_vnum genolc_zonep_bottom(struct zone_data *zone);

View File

@@ -1,13 +1,13 @@
/**
* @file genshp.h
* Generic OLC Library - Shops.
*
*
* Part of the core tbaMUD source code distribution, which is a derivative
* of, and continuation of, CircleMUD.
*
*
* This source code, which was not part of the CircleMUD legacy code,
* is attributed to:
* Copyright 1996 by Harvey Gilpin, 1997-2001 by George Greer.
* Copyright 1996 by Harvey Gilpin, 1997-2001 by George Greer.
*/
#ifndef _GENSHP_H_
#define _GENSHP_H_
@@ -25,35 +25,35 @@ int save_shops(zone_rnum zone_num);
shop_rnum real_shop(shop_vnum vnum);
/* Handy macros. */
#define S_NUM(i) ((i)->vnum)
#define S_KEEPER(i) ((i)->keeper)
#define S_OPEN1(i) ((i)->open1)
#define S_CLOSE1(i) ((i)->close1)
#define S_OPEN2(i) ((i)->open2)
#define S_CLOSE2(i) ((i)->close2)
#define S_BANK(i) ((i)->bankAccount)
#define S_BROKE_TEMPER(i) ((i)->temper1)
#define S_BITVECTOR(i) ((i)->bitvector)
#define S_NOTRADE(i) ((i)->with_who)
#define S_SORT(i) ((i)->lastsort)
#define S_BUYPROFIT(i) ((i)->profit_buy)
#define S_SELLPROFIT(i) ((i)->profit_sell)
#define S_FUNC(i) ((i)->func)
#define S_NUM(i) ((i)->vnum)
#define S_KEEPER(i) ((i)->keeper)
#define S_OPEN1(i) ((i)->open1)
#define S_CLOSE1(i) ((i)->close1)
#define S_OPEN2(i) ((i)->open2)
#define S_CLOSE2(i) ((i)->close2)
#define S_BANK(i) ((i)->bankAccount)
#define S_BROKE_TEMPER(i) ((i)->temper1)
#define S_BITVECTOR(i) ((i)->bitvector)
#define S_NOTRADE(i) ((i)->with_who)
#define S_SORT(i) ((i)->lastsort)
#define S_BUYPROFIT(i) ((i)->profit_buy)
#define S_SELLPROFIT(i) ((i)->profit_sell)
#define S_FUNC(i) ((i)->func)
#define S_ROOMS(i) ((i)->in_room)
#define S_PRODUCTS(i) ((i)->producing)
#define S_NAMELISTS(i) ((i)->type)
#define S_ROOM(i, num) ((i)->in_room[(num)])
#define S_PRODUCT(i, num) ((i)->producing[(num)])
#define S_BUYTYPE(i, num) (BUY_TYPE((i)->type[(num)]))
#define S_BUYWORD(i, num) (BUY_WORD((i)->type[(num)]))
#define S_ROOMS(i) ((i)->in_room)
#define S_PRODUCTS(i) ((i)->producing)
#define S_NAMELISTS(i) ((i)->type)
#define S_ROOM(i, num) ((i)->in_room[(num)])
#define S_PRODUCT(i, num) ((i)->producing[(num)])
#define S_BUYTYPE(i, num) (BUY_TYPE((i)->type[(num)]))
#define S_BUYWORD(i, num) (BUY_WORD((i)->type[(num)]))
#define S_NOITEM1(i) ((i)->no_such_item1)
#define S_NOITEM2(i) ((i)->no_such_item2)
#define S_NOCASH1(i) ((i)->missing_cash1)
#define S_NOCASH2(i) ((i)->missing_cash2)
#define S_NOBUY(i) ((i)->do_not_buy)
#define S_BUY(i) ((i)->message_buy)
#define S_SELL(i) ((i)->message_sell)
#define S_NOITEM1(i) ((i)->no_such_item1)
#define S_NOITEM2(i) ((i)->no_such_item2)
#define S_NOCASH1(i) ((i)->missing_cash1)
#define S_NOCASH2(i) ((i)->missing_cash2)
#define S_NOBUY(i) ((i)->do_not_buy)
#define S_BUY(i) ((i)->message_buy)
#define S_SELL(i) ((i)->message_sell)
#endif /* _GENSHP_H_ */

View File

@@ -24,8 +24,8 @@
* the description, title, and such. */
room_rnum add_room(struct room_data *room)
{
struct char_data *tch;
struct obj_data *tobj;
char_data *tch;
obj_data *tobj;
int j, found = FALSE;
room_rnum i;
@@ -123,8 +123,8 @@ int delete_room(room_rnum rnum)
{
room_rnum i;
int j;
struct char_data *ppl, *next_ppl;
struct obj_data *obj, *next_obj;
char_data *ppl, *next_ppl;
obj_data *obj, *next_obj;
struct room_data *room;
if (rnum <= 0 || rnum > top_of_world) /* Can't delete void yet. */

View File

@@ -1,13 +1,13 @@
/**
* @file genwld.h
* Generic OLC Library - Rooms.
*
*
* Part of the core tbaMUD source code distribution, which is a derivative
* of, and continuation of, CircleMUD.
*
*
* This source code, which was not part of the CircleMUD legacy code,
* is attributed to:
* By Levork. Copyright 1996 by Harvey Gilpin, 1997-2001 by George Greer.
* By Levork. Copyright 1996 by Harvey Gilpin, 1997-2001 by George Greer.
*/
#ifndef _GENWLD_H_
#define _GENWLD_H_

View File

@@ -1,13 +1,13 @@
/**
* @file genzon.h
* Generic OLC Library - Zones.
*
*
* Part of the core tbaMUD source code distribution, which is a derivative
* of, and continuation of, CircleMUD.
*
*
* This source code, which was not part of the CircleMUD legacy code,
* is attributed to:
* Copyright 1996 by Harvey Gilpin, 1997-2001 by George Greer.
* Copyright 1996 by Harvey Gilpin, 1997-2001 by George Greer.
*/
#ifndef _GENZON_H_
#define _GENZON_H_

Some files were not shown because too many files have changed in this diff Show More