forked from kyonshi/grenzland-mud
Compare commits
3 Commits
6fb926bd21
...
feature/14
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a40e8d3f97 | ||
|
|
56312d7fe6 | ||
|
|
670e2331fc |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -11,6 +11,8 @@ src/.accepted
|
|||||||
src/depend
|
src/depend
|
||||||
src/util/depend
|
src/util/depend
|
||||||
build/*
|
build/*
|
||||||
|
# generated by CLion
|
||||||
|
cmake-build-*
|
||||||
|
|
||||||
# Do not commit files from players
|
# Do not commit files from players
|
||||||
lib/plrfiles/A-E/*
|
lib/plrfiles/A-E/*
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
(lib/text/background)
|
(lib/text/background)
|
||||||
|
|
||||||
The mists part and you find yourself in a
|
There once was a guy who played MUDs
|
||||||
world unlike the one you have just left.
|
But the MUDs that he played were all duds
|
||||||
Reality twisted and turned, and the land
|
"I'll write one," said he.
|
||||||
has found itself in a new configuration.
|
And he brushed off his C.
|
||||||
Enter the borderland of reality and find
|
And soon played his game with his buds.
|
||||||
your own way.
|
|
||||||
In the Grenzland.
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,7 @@
|
|||||||
|
T B A M U D
|
||||||
|
2 0 2 5
|
||||||
G R E N Z L A N D M U D
|
|
||||||
2 0 2 6
|
|
||||||
|
|
||||||
|
|
||||||
Based on tbaMUD, by The Builder Academy
|
|
||||||
|
|
||||||
Based on CircleMUD by Jeremy Elson and DikuMUD by Hans-Henrik Staerfeldt,
|
Based on CircleMUD by Jeremy Elson and DikuMUD by Hans-Henrik Staerfeldt,
|
||||||
Katja Nyboe, Tom Madsen, Michael Seifert, and Sebastian Hammer
|
Katja Nyboe, Tom Madsen, Michael Seifert, and Sebastian Hammer
|
||||||
|
|
||||||
|
By what name do you wish to be known?
|
||||||
Oh hero, by what name shall you wish to be known?
|
|
||||||
|
|||||||
@@ -1,12 +1,8 @@
|
|||||||
(lib/text/policies)
|
(lib/text/policies)
|
||||||
|
|
||||||
Right now we are all adults and should be able to interact with
|
This file should list, in no uncertain terms, the policies you must abide
|
||||||
each other without any larger issues.
|
by on this MUD.
|
||||||
But the Grenzland maxim still is in force:
|
|
||||||
We are here to play, don't piss into anyone else's beer.
|
|
||||||
|
|
||||||
No harassing, no doxxing, no sexism, racism, or other unacceptable
|
Bug the higher-ups to make some policies and write them in this file, lest
|
||||||
isms towards your fellow players.
|
a political disaster ensue...
|
||||||
|
|
||||||
We definitely should add something more worked out in here.
|
|
||||||
|
|
||||||
|
|||||||
@@ -11,4 +11,3 @@
|
|||||||
Gods
|
Gods
|
||||||
~~~~
|
~~~~
|
||||||
|
|
||||||
kyonshi
|
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
#4900
|
|
||||||
waiter~
|
|
||||||
the waiter~
|
|
||||||
A friendly waiter who knows all his customers is standing behind the bar.
|
|
||||||
~
|
|
||||||
He looks very nice and friendly. 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
|
|
||||||
#4901
|
|
||||||
shopkeeper~
|
|
||||||
the shopkeeper~
|
|
||||||
A friendly man reading a zine is sitting behind the counter.
|
|
||||||
~
|
|
||||||
He looks very nice and friendly. 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
|
|
||||||
$
|
|
||||||
@@ -38,7 +38,6 @@
|
|||||||
44.mob
|
44.mob
|
||||||
45.mob
|
45.mob
|
||||||
46.mob
|
46.mob
|
||||||
49.mob
|
|
||||||
50.mob
|
50.mob
|
||||||
51.mob
|
51.mob
|
||||||
52.mob
|
52.mob
|
||||||
|
|||||||
@@ -1,63 +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!
|
|
||||||
~
|
|
||||||
$
|
|
||||||
@@ -38,7 +38,6 @@
|
|||||||
44.obj
|
44.obj
|
||||||
45.obj
|
45.obj
|
||||||
46.obj
|
46.obj
|
||||||
49.obj
|
|
||||||
50.obj
|
50.obj
|
||||||
51.obj
|
51.obj
|
||||||
52.obj
|
52.obj
|
||||||
|
|||||||
@@ -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
|
|
||||||
4900
|
|
||||||
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
|
|
||||||
4901
|
|
||||||
0
|
|
||||||
49102
|
|
||||||
-1
|
|
||||||
0
|
|
||||||
28
|
|
||||||
0
|
|
||||||
0
|
|
||||||
$~
|
|
||||||
@@ -163,7 +163,6 @@
|
|||||||
343.shp
|
343.shp
|
||||||
345.shp
|
345.shp
|
||||||
346.shp
|
346.shp
|
||||||
491.shp
|
|
||||||
555.shp
|
555.shp
|
||||||
556.shp
|
556.shp
|
||||||
653.shp
|
653.shp
|
||||||
|
|||||||
@@ -637,17 +637,10 @@ You see Poor Alley.
|
|||||||
S
|
S
|
||||||
#3026
|
#3026
|
||||||
The Dark Alley~
|
The Dark Alley~
|
||||||
The dark alley, to the west is the common square and to the south
|
The dark alley, to the west is the common square and to the south is the
|
||||||
is the Guild of Thieves. The alley continues east. You see a curious
|
Guild of Thieves. The alley continues east.
|
||||||
building to the north you swear wasn't here the last time you have
|
|
||||||
been to this dark alley.
|
|
||||||
~
|
~
|
||||||
30 0 0 0 0 1
|
30 0 0 0 0 1
|
||||||
D0
|
|
||||||
This building wasn't here last time, right?
|
|
||||||
~
|
|
||||||
~
|
|
||||||
0 -1 49101
|
|
||||||
D1
|
D1
|
||||||
The alley continues east.
|
The alley continues east.
|
||||||
~
|
~
|
||||||
|
|||||||
@@ -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,116 +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 nice looking
|
|
||||||
bar. To the South is the Entry Hall.
|
|
||||||
~
|
|
||||||
491 de 0 0 0 0
|
|
||||||
D2
|
|
||||||
You see the Entry Hall to the Grenzland Building.
|
|
||||||
~
|
|
||||||
~
|
|
||||||
1 -1 49101
|
|
||||||
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 East you see the Grenzland
|
|
||||||
Shop. To the South you see the Entry Hall. To the South is a Dark
|
|
||||||
Alley in Midgaard. To the West is a door with a small note pinned to
|
|
||||||
it. 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, and minis. The exit is to the East, but do you want to leave?
|
|
||||||
~
|
|
||||||
491 de 0 0 0 0
|
|
||||||
D3
|
|
||||||
You see the Entry Hall.
|
|
||||||
~
|
|
||||||
~
|
|
||||||
1 -1 49101
|
|
||||||
S
|
|
||||||
#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 -1 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 -1 49110
|
|
||||||
S
|
|
||||||
#49112
|
|
||||||
The Library~
|
|
||||||
Not much to see here (for now).
|
|
||||||
~
|
|
||||||
491 de 0 0 0 0
|
|
||||||
D2
|
|
||||||
You see the Balcony above the Entry.
|
|
||||||
~
|
|
||||||
~
|
|
||||||
1 -1 49110
|
|
||||||
S
|
|
||||||
$
|
|
||||||
@@ -38,7 +38,6 @@
|
|||||||
44.wld
|
44.wld
|
||||||
45.wld
|
45.wld
|
||||||
46.wld
|
46.wld
|
||||||
49.wld
|
|
||||||
50.wld
|
50.wld
|
||||||
51.wld
|
51.wld
|
||||||
52.wld
|
52.wld
|
||||||
@@ -184,7 +183,6 @@
|
|||||||
343.wld
|
343.wld
|
||||||
345.wld
|
345.wld
|
||||||
346.wld
|
346.wld
|
||||||
491.wld
|
|
||||||
555.wld
|
555.wld
|
||||||
556.wld
|
556.wld
|
||||||
653.wld
|
653.wld
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
#49
|
|
||||||
GrenzlandMUD~
|
|
||||||
Grenzland~
|
|
||||||
4900 4999 15 2 d 0 0 0 1 33
|
|
||||||
S
|
|
||||||
$
|
|
||||||
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
#491
|
|
||||||
GrenzlandMUD~
|
|
||||||
Grenzland Building~
|
|
||||||
49100 49199 15 2 d 0 0 0 1 33
|
|
||||||
M 0 4900 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)
|
|
||||||
D 0 49110 1 1
|
|
||||||
D 0 49111 3 1
|
|
||||||
S
|
|
||||||
$
|
|
||||||
@@ -38,7 +38,6 @@
|
|||||||
44.zon
|
44.zon
|
||||||
45.zon
|
45.zon
|
||||||
46.zon
|
46.zon
|
||||||
49.zon
|
|
||||||
50.zon
|
50.zon
|
||||||
51.zon
|
51.zon
|
||||||
52.zon
|
52.zon
|
||||||
@@ -184,7 +183,6 @@
|
|||||||
343.zon
|
343.zon
|
||||||
345.zon
|
345.zon
|
||||||
346.zon
|
346.zon
|
||||||
491.zon
|
|
||||||
555.zon
|
555.zon
|
||||||
556.zon
|
556.zon
|
||||||
653.zon
|
653.zon
|
||||||
|
|||||||
@@ -53,7 +53,6 @@ struct board_info_type board_info[NUM_OF_BOARDS] = {
|
|||||||
{1226, 0, 0, LVL_IMPL, LIB_ETC "board.builder", 0},
|
{1226, 0, 0, LVL_IMPL, LIB_ETC "board.builder", 0},
|
||||||
{1227, 0, 0, LVL_IMPL, LIB_ETC "board.staff", 0},
|
{1227, 0, 0, LVL_IMPL, LIB_ETC "board.staff", 0},
|
||||||
{1228, 0, 0, LVL_IMPL, LIB_ETC "board.advertising", 0},
|
{1228, 0, 0, LVL_IMPL, LIB_ETC "board.advertising", 0},
|
||||||
{4900, 0, 0, LVL_IMMORT, LIB_ETC "board.grenzland", 0},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* local (file scope) global variables */
|
/* local (file scope) global variables */
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
#ifndef _BOARDS_H_
|
#ifndef _BOARDS_H_
|
||||||
#define _BOARDS_H_
|
#define _BOARDS_H_
|
||||||
|
|
||||||
#define NUM_OF_BOARDS 8 /* change if needed! */
|
#define NUM_OF_BOARDS 7 /* change if needed! */
|
||||||
#define MAX_BOARD_MESSAGES 60 /* arbitrary -- change if needed */
|
#define MAX_BOARD_MESSAGES 60 /* arbitrary -- change if needed */
|
||||||
#define MAX_MESSAGE_LENGTH 4096 /* arbitrary -- change if needed */
|
#define MAX_MESSAGE_LENGTH 4096 /* arbitrary -- change if needed */
|
||||||
|
|
||||||
|
|||||||
83
src/fight.c
83
src/fight.c
@@ -56,7 +56,7 @@ static struct char_data *next_combat_list = NULL;
|
|||||||
/* local file scope utility functions */
|
/* local file scope utility functions */
|
||||||
static void perform_group_gain(struct char_data *ch, int base, struct char_data *victim);
|
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 dam_message(int dam, struct char_data *ch, struct char_data *victim, int w_type);
|
||||||
static void make_corpse(struct char_data *ch);
|
static obj_data *make_corpse(struct char_data *ch);
|
||||||
static void change_alignment(struct char_data *ch, struct char_data *victim);
|
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 group_gain(struct char_data *ch, struct char_data *victim);
|
||||||
static void solo_gain(struct char_data *ch, struct char_data *victim);
|
static void solo_gain(struct char_data *ch, struct char_data *victim);
|
||||||
@@ -161,7 +161,7 @@ void stop_fighting(struct char_data *ch)
|
|||||||
update_pos(ch);
|
update_pos(ch);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void make_corpse(struct char_data *ch)
|
static obj_data *make_corpse(struct char_data *ch)
|
||||||
{
|
{
|
||||||
char buf2[MAX_NAME_LENGTH + 64];
|
char buf2[MAX_NAME_LENGTH + 64];
|
||||||
struct obj_data *corpse, *o;
|
struct obj_data *corpse, *o;
|
||||||
@@ -229,6 +229,7 @@ static void make_corpse(struct char_data *ch)
|
|||||||
IS_CARRYING_W(ch) = 0;
|
IS_CARRYING_W(ch) = 0;
|
||||||
|
|
||||||
obj_to_room(corpse, IN_ROOM(ch));
|
obj_to_room(corpse, IN_ROOM(ch));
|
||||||
|
return corpse;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* When ch kills victim */
|
/* When ch kills victim */
|
||||||
@@ -250,9 +251,10 @@ 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");
|
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)
|
struct obj_data *raw_kill(struct char_data *ch, struct char_data *killer)
|
||||||
{
|
{
|
||||||
struct char_data *i;
|
struct char_data *i;
|
||||||
|
obj_data *corpse;
|
||||||
|
|
||||||
if (FIGHTING(ch))
|
if (FIGHTING(ch))
|
||||||
stop_fighting(ch);
|
stop_fighting(ch);
|
||||||
@@ -284,23 +286,24 @@ struct char_data *i;
|
|||||||
|
|
||||||
update_pos(ch);
|
update_pos(ch);
|
||||||
|
|
||||||
make_corpse(ch);
|
corpse = make_corpse(ch);
|
||||||
extract_char(ch);
|
extract_char(ch);
|
||||||
|
|
||||||
if (killer) {
|
if (killer) {
|
||||||
autoquest_trigger_check(killer, NULL, NULL, AQ_MOB_SAVE);
|
autoquest_trigger_check(killer, NULL, NULL, AQ_MOB_SAVE);
|
||||||
autoquest_trigger_check(killer, NULL, NULL, AQ_ROOM_CLEAR);
|
autoquest_trigger_check(killer, NULL, NULL, AQ_ROOM_CLEAR);
|
||||||
}
|
}
|
||||||
|
return corpse;
|
||||||
}
|
}
|
||||||
|
|
||||||
void die(struct char_data * ch, struct char_data * killer)
|
struct obj_data *die(struct char_data *ch, struct char_data *killer)
|
||||||
{
|
{
|
||||||
gain_exp(ch, -(GET_EXP(ch) / 2));
|
gain_exp(ch, -(GET_EXP(ch) / 2));
|
||||||
if (!IS_NPC(ch)) {
|
if (!IS_NPC(ch)) {
|
||||||
REMOVE_BIT_AR(PLR_FLAGS(ch), PLR_KILLER);
|
REMOVE_BIT_AR(PLR_FLAGS(ch), PLR_KILLER);
|
||||||
REMOVE_BIT_AR(PLR_FLAGS(ch), PLR_THIEF);
|
REMOVE_BIT_AR(PLR_FLAGS(ch), PLR_THIEF);
|
||||||
}
|
}
|
||||||
raw_kill(ch, killer);
|
return raw_kill(ch, killer);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void perform_group_gain(struct char_data *ch, int base,
|
static void perform_group_gain(struct char_data *ch, int base,
|
||||||
@@ -581,16 +584,54 @@ int skill_message(int dam, struct char_data *ch, struct char_data *vict,
|
|||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void perform_autohandling(char_data *ch, const char_data *victim, int local_gold, const obj_data *corpse_obj) {
|
||||||
|
char local_buf[256];
|
||||||
|
obj_data *i;
|
||||||
|
int count = 0, found = FALSE;
|
||||||
|
|
||||||
|
if (IN_ROOM(ch) == NOWHERE || ch == victim) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// find the last corpse in the room
|
||||||
|
for (i = world[IN_ROOM(ch)].contents; i ; i = i->next_content) {
|
||||||
|
if (is_name("corpse", i->name) && CAN_SEE_OBJ(ch, i)) {
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
if (i == corpse_obj) {
|
||||||
|
found = TRUE;
|
||||||
|
break; // stop looking
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (count == 0 || !found) {
|
||||||
|
return; // no corpse here - it may have been removed by some other method.
|
||||||
|
}
|
||||||
|
if (GROUP(ch) && local_gold > 0 && PRF_FLAGGED(ch, PRF_AUTOSPLIT) ) {
|
||||||
|
sprintf(local_buf,"all.coin %d.corpse", count);
|
||||||
|
do_get(ch, local_buf, 0, 0);
|
||||||
|
sprintf(local_buf,"%d", local_gold);
|
||||||
|
do_split(ch, local_buf, 0, 0);
|
||||||
|
} else if (!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_AUTOGOLD)) {
|
||||||
|
sprintf(local_buf,"all.coin %d.corpse", count);
|
||||||
|
do_get(ch, local_buf, 0, 0);
|
||||||
|
}
|
||||||
|
if (!IS_NPC(ch) && (ch != victim) && PRF_FLAGGED(ch, PRF_AUTOLOOT)) {
|
||||||
|
sprintf(local_buf,"all %d.corpse", count);
|
||||||
|
do_get(ch, local_buf, 0, 0);
|
||||||
|
}
|
||||||
|
if (IS_NPC(victim) && !IS_NPC(ch) && PRF_FLAGGED(ch, PRF_AUTOSAC)) {
|
||||||
|
sprintf(local_buf,"%d.corpse", count);
|
||||||
|
do_sac(ch, local_buf,0,0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* This function returns the following codes:
|
/* This function returns the following codes:
|
||||||
* < 0 Victim died.
|
* < 0 Victim died.
|
||||||
* = 0 No damage.
|
* = 0 No damage.
|
||||||
* > 0 How much damage done. */
|
* > 0 How much damage done. */
|
||||||
int damage(struct char_data *ch, struct char_data *victim, int dam, int attacktype)
|
int damage(struct char_data *ch, struct char_data *victim, int dam, int attacktype)
|
||||||
{
|
{
|
||||||
long local_gold = 0, happy_gold = 0;
|
int local_gold = 0, happy_gold = 0;
|
||||||
char local_buf[256];
|
obj_data *corpse_obj;
|
||||||
struct char_data *tmp_char;
|
|
||||||
struct obj_data *corpse_obj;
|
|
||||||
|
|
||||||
if (GET_POS(victim) <= POS_DEAD) {
|
if (GET_POS(victim) <= POS_DEAD) {
|
||||||
/* This is "normal"-ish now with delayed extraction. -gg 3/15/2001 */
|
/* This is "normal"-ish now with delayed extraction. -gg 3/15/2001 */
|
||||||
@@ -758,31 +799,15 @@ int damage(struct char_data *ch, struct char_data *victim, int dam, int attackty
|
|||||||
if (IS_NPC(victim)) {
|
if (IS_NPC(victim)) {
|
||||||
if ((IS_HAPPYHOUR) && (IS_HAPPYGOLD))
|
if ((IS_HAPPYHOUR) && (IS_HAPPYGOLD))
|
||||||
{
|
{
|
||||||
happy_gold = (long)(GET_GOLD(victim) * (((float)(HAPPY_GOLD))/(float)100));
|
happy_gold = (int)(GET_GOLD(victim) * (((float)(HAPPY_GOLD))/(float)100));
|
||||||
happy_gold = MAX(0, happy_gold);
|
happy_gold = MAX(0, happy_gold);
|
||||||
increase_gold(victim, happy_gold);
|
increase_gold(victim, happy_gold);
|
||||||
}
|
}
|
||||||
local_gold = GET_GOLD(victim);
|
local_gold = GET_GOLD(victim);
|
||||||
sprintf(local_buf,"%ld", (long)local_gold);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
die(victim, ch);
|
corpse_obj = die(victim, ch);
|
||||||
if (GROUP(ch) && (local_gold > 0) && PRF_FLAGGED(ch, PRF_AUTOSPLIT) ) {
|
perform_autohandling(ch, victim, local_gold, corpse_obj);
|
||||||
generic_find("corpse", FIND_OBJ_ROOM, ch, &tmp_char, &corpse_obj);
|
|
||||||
if (corpse_obj) {
|
|
||||||
do_get(ch, "all.coin corpse", 0, 0);
|
|
||||||
do_split(ch, local_buf, 0, 0);
|
|
||||||
}
|
|
||||||
/* need to remove the gold from the corpse */
|
|
||||||
} else if (!IS_NPC(ch) && (ch != victim) && PRF_FLAGGED(ch, PRF_AUTOGOLD)) {
|
|
||||||
do_get(ch, "all.coin corpse", 0, 0);
|
|
||||||
}
|
|
||||||
if (!IS_NPC(ch) && (ch != victim) && PRF_FLAGGED(ch, PRF_AUTOLOOT)) {
|
|
||||||
do_get(ch, "all corpse", 0, 0);
|
|
||||||
}
|
|
||||||
if (IS_NPC(victim) && !IS_NPC(ch) && PRF_FLAGGED(ch, PRF_AUTOSAC)) {
|
|
||||||
do_sac(ch,"corpse",0,0);
|
|
||||||
}
|
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
return (dam);
|
return (dam);
|
||||||
|
|||||||
@@ -26,10 +26,12 @@ void check_killer(struct char_data *ch, struct char_data *vict);
|
|||||||
int compute_armor_class(struct char_data *ch);
|
int compute_armor_class(struct char_data *ch);
|
||||||
int damage(struct char_data *ch, struct char_data *victim, int dam, int attacktype);
|
int damage(struct char_data *ch, struct char_data *victim, int dam, int attacktype);
|
||||||
void death_cry(struct char_data *ch);
|
void death_cry(struct char_data *ch);
|
||||||
void die(struct char_data * ch, struct char_data * killer);
|
|
||||||
|
struct obj_data *die(struct char_data *ch, struct char_data *killer);
|
||||||
void hit(struct char_data *ch, struct char_data *victim, int type);
|
void hit(struct char_data *ch, struct char_data *victim, int type);
|
||||||
void perform_violence(void);
|
void perform_violence(void);
|
||||||
void raw_kill(struct char_data * ch, struct char_data * killer);
|
|
||||||
|
struct obj_data *raw_kill(struct char_data *ch, struct char_data *killer);
|
||||||
void set_fighting(struct char_data *ch, struct char_data *victim);
|
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 skill_message(int dam, struct char_data *ch, struct char_data *vict,
|
||||||
int attacktype);
|
int attacktype);
|
||||||
|
|||||||
@@ -136,7 +136,6 @@ void assign_objects(void)
|
|||||||
ASSIGNOBJ(3097, gen_board); /* freeze board */
|
ASSIGNOBJ(3097, gen_board); /* freeze board */
|
||||||
ASSIGNOBJ(3098, gen_board); /* immortal board */
|
ASSIGNOBJ(3098, gen_board); /* immortal board */
|
||||||
ASSIGNOBJ(3099, gen_board); /* mortal board */
|
ASSIGNOBJ(3099, gen_board); /* mortal board */
|
||||||
ASSIGNOBJ(4900, gen_board); /* mortal board */
|
|
||||||
|
|
||||||
ASSIGNOBJ(115, bank);
|
ASSIGNOBJ(115, bank);
|
||||||
ASSIGNOBJ(334, bank); /* atm */
|
ASSIGNOBJ(334, bank); /* atm */
|
||||||
|
|||||||
Reference in New Issue
Block a user