Compare commits
8 Commits
master
...
kaizen/ref
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
744286a1f7 | ||
|
|
df3aefe9b8 | ||
|
|
0e110b93d5 | ||
|
|
b489a72c58 | ||
|
|
9c5787129b | ||
|
|
fdb6ff3771 | ||
|
|
5c44f0575e | ||
|
|
e6085172d5 |
55
.clang-format
Normal file
55
.clang-format
Normal 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
4
.gitignore
vendored
@@ -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
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
Files for tbaMUD.
|
||||
|
||||
Files for Grenzland-MUD
|
||||
|
||||
Files for grenzland-mud, forked from tbamud
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
select foo.com 1745106858 Welcor
|
||||
|
||||
Binary file not shown.
@@ -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.
|
||||
|
||||
|
||||
@@ -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?
|
||||
|
||||
@@ -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...
|
||||
|
||||
|
||||
@@ -10,5 +10,4 @@
|
||||
|
||||
Gods
|
||||
~~~~
|
||||
|
||||
kyonshi
|
||||
|
||||
|
||||
@@ -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
|
||||
$
|
||||
@@ -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
|
||||
$
|
||||
@@ -182,8 +182,6 @@
|
||||
343.mob
|
||||
345.mob
|
||||
346.mob
|
||||
491.mob
|
||||
492.mob
|
||||
555.mob
|
||||
556.mob
|
||||
653.mob
|
||||
|
||||
@@ -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
|
||||
$
|
||||
@@ -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
|
||||
$
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
$~
|
||||
@@ -163,7 +163,6 @@
|
||||
343.shp
|
||||
345.shp
|
||||
346.shp
|
||||
491.shp
|
||||
555.shp
|
||||
556.shp
|
||||
653.shp
|
||||
|
||||
@@ -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
|
||||
~
|
||||
$~
|
||||
@@ -182,10 +182,8 @@
|
||||
343.trg
|
||||
345.trg
|
||||
346.trg
|
||||
491.trg
|
||||
555.trg
|
||||
556.trg
|
||||
653.trg
|
||||
654.trg
|
||||
|
||||
$
|
||||
|
||||
@@ -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.
|
||||
~
|
||||
|
||||
@@ -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
|
||||
$
|
||||
@@ -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
|
||||
$
|
||||
@@ -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
|
||||
$
|
||||
@@ -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
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
#49
|
||||
GrenzlandMUD~
|
||||
Grenzland~
|
||||
4900 4999 15 2 d 0 0 0 1 33
|
||||
S
|
||||
$
|
||||
|
||||
@@ -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
|
||||
$
|
||||
@@ -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
|
||||
$
|
||||
@@ -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
|
||||
$
|
||||
@@ -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
1
log/README
Normal file
@@ -0,0 +1 @@
|
||||
This directory is for log files.
|
||||
13
log/errors
13
log/errors
@@ -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...
|
||||
@@ -1 +0,0 @@
|
||||
Jan 26 21:36:53 2026 :: Karrn [localhost] new player.
|
||||
@@ -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.
|
||||
265
log/syslog.1
265
log/syslog.1
@@ -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.
|
||||
16
log/syslog.2
16
log/syslog.2
@@ -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
|
||||
269
log/syslog.4
269
log/syslog.4
@@ -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.
|
||||
@@ -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.
|
||||
186
src/act.comm.c
186
src/act.comm.c
@@ -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);
|
||||
|
||||
|
||||
23
src/act.h
23
src/act.h
@@ -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
763
src/act.item.c
763
src/act.item.c
File diff suppressed because it is too large
Load Diff
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
488
src/act.other.c
488
src/act.other.c
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
3533
src/act.wizard.c
3533
src/act.wizard.c
File diff suppressed because it is too large
Load Diff
1335
src/aedit.c
1335
src/aedit.c
File diff suppressed because it is too large
Load Diff
567
src/asciimap.c
567
src/asciimap.c
@@ -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;
|
||||
|
||||
@@ -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_*/
|
||||
|
||||
80
src/ban.c
80
src/ban.c
@@ -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;
|
||||
}
|
||||
|
||||
24
src/ban.h
24
src/ban.h
@@ -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 */
|
||||
|
||||
195
src/boards.c
195
src/boards.c
@@ -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;
|
||||
|
||||
50
src/boards.h
50
src/boards.h
@@ -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);
|
||||
|
||||
@@ -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:
|
||||
|
||||
253
src/castle.c
253
src/castle.c
@@ -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;
|
||||
}
|
||||
|
||||
62
src/cedit.c
62
src/cedit.c
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
16
src/class.h
16
src/class.h
@@ -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);
|
||||
|
||||
550
src/comm.c
550
src/comm.c
File diff suppressed because it is too large
Load Diff
44
src/comm.h
44
src/comm.h
@@ -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
104
src/db.c
@@ -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
331
src/db.h
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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, "
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
40
src/dg_olc.c
40
src/dg_olc.c
@@ -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;
|
||||
|
||||
54
src/dg_olc.h
54
src/dg_olc.h
@@ -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_ */
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
187
src/dg_scripts.h
187
src/dg_scripts.h
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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"))
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
86
src/fight.c
86
src/fight.c
@@ -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;
|
||||
|
||||
37
src/fight.h
37
src/fight.h
@@ -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_*/
|
||||
|
||||
30
src/genmob.c
30
src/genmob.c
@@ -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");
|
||||
|
||||
44
src/genmob.h
44
src/genmob.h
@@ -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_ */
|
||||
|
||||
46
src/genobj.c
46
src/genobj.c
@@ -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);
|
||||
|
||||
30
src/genobj.h
30
src/genobj.h
@@ -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_ */
|
||||
|
||||
14
src/genolc.c
14
src/genolc.c
@@ -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 {
|
||||
|
||||
36
src/genolc.h
36
src/genolc.h
@@ -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);
|
||||
|
||||
62
src/genshp.h
62
src/genshp.h
@@ -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_ */
|
||||
|
||||
@@ -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. */
|
||||
|
||||
@@ -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_
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user