Remove rent code and cost per day

This commit is contained in:
kinther 2025-12-24 08:38:38 -08:00
parent 0bb44d02b5
commit 9d894e208d
41 changed files with 366 additions and 564 deletions

View file

@ -29,7 +29,7 @@ Features in Dark Sun MUD Alpha release:
* Rooms can be saved with their objects and NPC's to be loaded on the next boot
* Converted action descriptions to main descriptions for items
* Mapping command now supports new terrain types
* Rent system has been removed so players do not need to pay to keep their items
* Players do not pay to keep their items when they log out
* Furniture items now allow items to be placed on top of them (a mug on top of the bar)
* Furniture items can now be stood at, sat on, rested on, and slept on
* Furniture items in rooms can be reviewed with "look tables"
@ -67,4 +67,4 @@ Features to be implemented in the next few releases:
* Python abstraction layer for modern scripting support
* Discord server integration for ticketing and community
* Full documentation for admins and easy to follow improvement guides
* ...something else I haven't thought of
* ...something else I haven't thought of

View file

@ -55,7 +55,7 @@ dts:0:death trap
rip:0:killed
restarts:0:Running
levels:0:advanced
rentgone:0:equipment lost
syslog:0:equipment lost
usage:5000:usage
newplayers:0:new player
errors:5000:SYSERR

View file

@ -20,7 +20,7 @@ LAB runloop
search nonum log/syslog "killed" >> log/rip
search nonum log/syslog "Running" >> log/restarts
search nonum log/syslog "advanced" >> log/levels
search nonum log/syslog "equipment lost" >> log/rentgone
search nonum log/syslog "equipment lost" >> log/syslog
search nonum log/syslog "usage" >> log/usage
search nonum log/syslog "new player" >> log/newplayers
search nonum log/syslog "SYSERR" >> log/errors

View file

@ -43,7 +43,7 @@ Do forever
'fgrep -w "killed" syslog >> log/rip'
'fgrep -w "Running" syslog >> log/restarts'
'fgrep -w "advanced" syslog >> log/levels'
'fgrep -w "equipment lost" syslog >> log/rentgone'
'fgrep -w "equipment lost" syslog >> log/syslog'
'fgrep -w "usage" syslog >> log/usage'
'fgrep -w "olc" syslog >> log/olc'
'fgrep -w "new player" syslog >> log/newplayers'

View file

@ -52,7 +52,6 @@ while (1) {
open (DEATHS, ">>log/deaths");
open (REBOOT, ">>log/reboots");
open (LEVELS, ">>log/levels");
open (NORENT, ">>log/norent");
open (USAGE, ">>log/usage");
open (NEWPLR, ">>log/newplrs");
open (SYSERR, ">>log/errors");
@ -67,7 +66,6 @@ while (1) {
print DEATHS if /killed/;
print REBOOT if /Running/;
print LEVELS if /advanced/;
print NORENT if /equipment lost/;
print USAGE if /usage/;
print NEWPLR if /new player/;
print SYSERR if /SYSERR/;

View file

@ -57,7 +57,7 @@ while ( : ) do
fgrep "killed" syslog >> log/rip
fgrep "Running" syslog >> log/restarts
fgrep "advanced" syslog >> log/levels
fgrep "equipment lost" syslog >> log/rentgone
fgrep "equipment lost" syslog >> log/syslog
fgrep "usage" syslog >> log/usage
fgrep "new player" syslog >> log/newplayers
fgrep "SYSERR" syslog >> log/errors

View file

@ -67,9 +67,9 @@ Table of Contents
connection refused'' when the MUD boots, and then dies. Why?
4.7 When I run tbaMUD under Windows, it tells me ``Winsock error
#10047'' when the MUD boots, and then dies. Why?
4.8 When I run tbaMUD under Windows, players can't rent---their
equipment is just dropped on the ground, syslogs don't work, so what
is the problem?
4.8 When I run tbaMUD under Windows, players can't save their items on
logout - their equipment is just dropped on the ground, syslogs don't
work, so what is the problem?
4.9 When someone logs on to my Windows MUD, the console screen gives:
``gethostbyaddr: No such file or directory''
4.10 My MUD crashed and my connection got closed. What can I do?
@ -631,9 +631,9 @@ select ``Add Protocol'', and under the vendor ``Microsoft'', choose
``TCP/IP''. It may ask you to insert the Windows CDROM in order to copy
the drivers onto your hard drive.
4.8. When I run tbaMUD under Windows, players can't rent---their
equipment is just dropped on the ground, syslogs don't work, so what
is the problem?
4.8. When I run tbaMUD under Windows, players can't save their items on
logout - their equipment is just dropped on the ground, syslogs don't
work, so what is the problem?
The reason that objects aren't saved when your players quit is that certain
unzip programs are buggy and don't completely recreate the MUD's directory

View file

@ -433,7 +433,7 @@ file called “syslog”. During tbaMUDs boot sequence, the system log keeps
record of everything the MUD is doing to initialize itself; this can be useful
to determine what the problem is if the MUD dies while it is booting. Once the
game is up and running, the syslog contains player information, recording when
players connect, disconnect, rent, unrent, quit, die, hit death traps, etc. The
players connect, disconnect, save on logout, quit, die, hit death traps, etc. The
game also records status information about itself, falling generally into two
categories: usage information and errors.
@ -469,20 +469,15 @@ syslogs presence in the collective psyche of your players.
Back to the point. When someone claims that theyve been wronged by the evil
system, always check the logs. The logs give you power to say things like “What
do you mean your items disappeared in rent? It says right here in the logs
Rasmussen has quit the game. You did not rent at all, you just quit!”
do you mean your items disappeared on logout? It says right here in the logs
Rasmussen has quit the game. You did not lose items, you just quit!”
To diffuse disputes such as, “The game dumped my stuff, but I had enough
money!!” or “I logged in and my stuff was gone, there must be a bug!!”, two
types of log entries are written. First, every time a character rents, the log
records the characters per diem rent rate as well as the total amount of money
on hand and in the bank. Second, the log records makes a record of all
characters equipment dumped due to insufficient funds.
types of log entries are written. First, every time a character saves on logout,
the log records a summary along with total money on hand and in the bank.
Second, the log records all characters equipment dumped due to object limits.
Remember, rent is specified as a daily rate but is amortized on a per-second
basis! In other words, if you rent at the rate of 100 coins per day and come
back 36 hours later, youll be charged 150 coins. Or you can be nice and leave
rent disabled.
The autorunscript saves 6 levels of raw system logs. In addition, it greps the
logs for certain pieces of extra-juicy information to save indefinitely.

View file

@ -145,7 +145,7 @@ An areas balance should be an integral part of the design process, not
something to be tacked on as an afterthought. Too often, an area will be
designed with outrageously good weapons and armor which throws off the balance
of the game. Naturally, after such zone is added, players complain bitterly if
it is ever removed or toned down. Also, because the rent system saves hitrolls,
it is ever removed or toned down. Also, because the save system stores hitrolls,
damrolls, and ac-applys, veteran players will be able to hold on to their old,
spectacular equipment unless it is explicitly taken from them, even after the
area has been changed. This does nothing but generate bad feelings on all
@ -944,7 +944,7 @@ StrAdd The mobiles strength addition, which can range from 1 to 99.
<action description>~
<type flag> <extra (affects) bitvector> <wear bitvector>
<value 0> <value 1> <value 2> <value 3>
<weight> <cost> <rent per day>
<weight> <cost> <unused>
{Zero or more Extra Descriptions and/or Affect Fields}
There can be an unlimited number of Extra Descriptions and up to 3 Affect
@ -1026,7 +1026,7 @@ but has no substantive effect otherwise. The flags have the following values:
1) GLOW Item is glowing (cosmetic).
2) HUM Item is humming (cosmetic).
3) NORENT Item cannot be rented.
3) UNUSED Reserved (unused).
4) NODONATE Item cannot be donated.
5) NOINVIS Item cannot be made invisible.
6) INVISIBLE Item is invisible.
@ -1075,7 +1075,7 @@ other containers become full.
Cost The value of the object in gold coins; used by shopkeepers.
Rent Per Day The cost per day to rent the object in the Reception.
Cost Per Day A legacy value that the game ignores.
5.2 Object Value Definitions
The meaning of an objects four values (value 0 through value 3) vary depending
@ -1281,7 +1281,7 @@ A
This object is virtual number 901, is a Type 9 object (armor), cannot be
donated, has a magical aura, and cannot be dropped. It can be picked up and
worn as a shield. It has an AC-apply of 12, weighs 15 pounds, is valued at
5000 coins and costs 1350 coins per day to rent. Its Affect fields indicate
5000 coins and includes a legacy cost-per-day value of 1350 (ignored). Its Affect fields indicate
that this object affects breath weapon saving throws by -4 and increases Wisdom
by 2.

View file

@ -420,7 +420,7 @@ unworthy to connect to the MUD. Invalid name rejection loads a list of substring
that must not appear in any characters name that is being created. The invalid name
list can be found at lib/misc/xnames.
After deleting any expired rent files, the house code loads up any abodes defined.
After deleting any expired legacy save files, the house code loads up any abodes defined.
It must make sure the rooms still exist and the owner is still in the game before
setting up the house, atrium, and guest list. Houses are not loaded in mini-MUD
mode since most of the rooms will likely not exist.

View file

@ -29,7 +29,7 @@ misc/ - Miscellaneous database files such as fight messages, invalid names,
and socials.
plrfiles/ - ASCII files which combined the player, alias, and variable files.
plrobjs/ - The hierarchy containing player object files (i.e. crash files,
rent files, cryo-rent files, etc.) and utility scripts.
legacy save files, cryo files, etc.) and utility scripts.
text/ - Files meant to be directly read by players such as MOTD (message of
the day), help files, and the immortal handbook. You can change
these files while the game is running, and then have the mud reload
@ -121,7 +121,6 @@ help - All help queries that are not found.
levels - Records of all levels gained by all players.
newplayers - Records of the creation of new players.
olc - OLC log messages.
rentgone - Players who have lost their items in rent.
restarts - List of times at which the MUD rebooted.
rip - Player deaths.
trigger - Trigedit log messages.

View file

@ -109,15 +109,15 @@ to new immortals constantly asking you when they will be added
to the immlist!
--"config.c" file allows you to change aspects of the game such
as playerkilling/playerthieving legality, max number of objects
rentable, and nameserver usage --WITHOUT recompiling the
saveable, and nameserver usage --WITHOUT recompiling the
entire MUD!
--All text (help, mortal/immort MOTDs, etc.) is rebootable at
run-time with the "reboot" command
--All players are given a unique serial number --no more messy,
time consuming str_cmp()s when you are trying to identify people!
--Fully integrated and robust rent/crash system --allows normal
renting, cryo-renting, crash protection, and forced rent
(at an increased price) after an hour of idling
--Fully integrated and robust save/crash system --allows normal
saving, cryo-saving, crash protection, and forced saves
after an hour of idling
--All the standard wizard stuff you are used to: level-sensitive
invisibility, settable poofin/poofouts, wizline
--Advanced "set" command which allows you to set dozens of aspects

View file

@ -112,8 +112,8 @@ the text to be displayed and will take in all text until ended by an EOF marker
3 Informational Utilities
3.1 listrent
This utility allows you to view player rent files offline. It displays the type
of rent; Rent, Crash, Cryo, or lost link (TimedOut). It also displays the
This utility allows you to view player save files offline. It displays the type
of save; Legacy, Crash, Cryo, or lost link (TimedOut). It also displays the
object vnum and first keyword.
The command line syntax for listrent is as follows:
@ -123,7 +123,7 @@ listrent <objfile1> [<objfile2> .. <objfilen>]
where <objfile1>
is the first object file to view, <objfile2> the second, and so forth.
This utility must be recompiled if you make any changes to the rent file
This utility must be recompiled if you make any changes to the save file
structure.

View file

@ -131,7 +131,7 @@ wait 1 s
%load% <obj|mob> <vnum> [name [position]]
This command loads a mob or object into the game. No-take objects loaded to
an actor will load to the room. NO_RENT objects can not be loaded.
an actor will load to the room.
load an object to room: %load% obj 1300
load a mob to room : %load% mob 1300
@ -1487,7 +1487,7 @@ configuration values that control the operation of the MUD.
OasisOLC MUD Configuration Editor
G) Game Play Options @RHELP CEDIT-GAME@n
C) Crashsave/Rent Options @RHELP CEDIT-SAVE@n
C) Crashsave Options @RHELP CEDIT-SAVE@n
R) Room Numbers @RHELP CEDIT-ROOM@n
O) Operation Options @RHELP CEDIT-OPERATION@n
A) Autowiz Options @RHELP CEDIT-AUTOWIZ@n
@ -1513,12 +1513,12 @@ G) Maximum Experience Loss : 500000
H) Max Time for NPC Corpse : 5
I) Max Time for PC Corpse : 10
J) Tics before PC sent to void : 1000000
K) Tics before PC is autosaved : 2000000
L) Level Immune To IDLE : 35
M) Death Traps Junk Items : No
N) Objects Load Into Inventory : Yes
O) Track Through Doors : Yes
P) Display Closed Doors : Yes
K) Level Immune To IDLE : 35
L) Death Traps Junk Items : No
M) Objects Load Into Inventory : Yes
N) Track Through Doors : Yes
O) Display Closed Doors : Yes
P) Diagonal Directions : No
R) Mortals Level To Immortal : Yes
1) OK Message Text : Okay.
2) NOPERSON Message Text : No-one by that name here.
@ -1583,13 +1583,9 @@ See also: CEDIT-MENU
#31
CEDIT-SAVES
A) Free Rent : Yes
B) Max Objects Saved : 30
C) Minimum Rent Cost : 100
D) Auto Save : Yes
E) Auto Save Time : 5 minute(s)
F) Crash File Timeout : 10 day(s)
G) Rent File Timeout : 30 day(s)
A) Auto Save : Yes
B) Auto Save Time : 5 minute(s)
C) Crash File Timeout : 10 day(s)
Q) Exit To The Main Menu
See also: CEDIT-MENU
@ -3206,7 +3202,6 @@ xnames ../lib/misc/xnames
levels ../log/levels
rip ../log/rip
players ../log/newplayers
rentgone ../log/rentgone
errors ../log/errors
godcmds ../log/godcmds
syslog ../syslog
@ -3748,7 +3743,7 @@ Usage: hcontrol build <house vnum> <exit dir> <player name>
House control, controls the addition, removal, and payments of houses.
Hcontrol show will show all the houses currently defined in the game along
with their last 'rent' payment date.
with their last upkeep payment date.
See also: HOUSE, HOUSES
#31
@ -3931,7 +3926,7 @@ loaded into your house next time you enter the game.
Guests of your house can be defined using the HOUSE command. See HOUSE for
more information.
Houses are an alternative to renting. You can simply enter your house and
Houses are an alternative to logout storage. You can simply enter your house and
quit; your objects will drop to the ground and be crash-saved for when you
return. There is currently no limit to the number of objects which can be
stored in your house. Of course, players must expect to pay a much higher
@ -4069,9 +4064,9 @@ See also: DETECT-INVISIBILITY
#0
INNS RECEPTIONS
Inns are only required if renting is enabled.
Inns are only required if inn services are enabled.
See also: OFFER, RENT
See also: OFFER
#0
INVENTORY
@ -4841,7 +4836,7 @@ All with a max load of 10. The first time the zone resets. 5 Kobolds will be
loaded in 5 different rooms. The second time another 5 Kobolds will be loaded
into those same rooms. So now you would have 5 rooms with 2 Kobolds in each.
Next zone reset - nothing changes unless some players come along and kills some
Kobolds. An object in a players rent file does not count as in the game.
Kobolds. An object in a players save file does not count as in the game.
See also: DEPENDENT, ZEDIT-MENU, ZEDIT-ADVANCED
#31
@ -5723,18 +5718,18 @@ OBJ-FORMATS OBJECT-FORMATS OBJ-FILES
<action description>~
<type flag> <extra (effects) bitvector> <wear bitvector> <perm affects>
<value 0> <value 1> <value 2> <value 3>
<weight> <cost> <rent per day>
<weight> <cost> <unused>
{Zero or more Extra Descriptions and/or Affect Fields}
See also: OEDIT
#31
OBJ-NOTES OBJECT-NOTES BOOKS PENS NOTES QUILLS NEWSPAPERS POSTITS POST-ITS OBJ-TYPE-NOTE PAPERS TYPE-NOTE
With Object Type NOTE you can then use the A-desc to write what you want
With Object Type NOTE you can then use the M-desc to write what you want
people to see when they read it. Players will then be able to write on the
note by holding a PEN. If you want to create a book I suggest using object type
OTHER. That way players can read/look book but can not overwrite what you put
in the a-desc.
in the m-desc.
To make a long book you have to use the extra descriptions with keywords
like 1 2 3 etc. Since the buffers can only hold so much text. You would need
to include instructions, something like this: to read another page type read #.
@ -5854,15 +5849,12 @@ applies. Suggested object standards are displayed at the end of each apply
See also: STANDARDS
#31
OEDIT-COST OEDIT-COST/DAY OEDIT-TIMER OBJECT-TIMER TIMERS COST-DAY
OEDIT-COST OEDIT-TIMER OBJECT-TIMER TIMERS
9) Cost : @c0@n
How much is the object worth. Maximum 1000.
A) Cost/Day : @c0@n
NOT USED. This is for MUD's that charge rent.
B) Timer : @c0@n
A) Timer : @c0@n
Should not be set, but may be used in conjunction with a timer trigger.
See also: %TIMER%
@ -5905,13 +5897,12 @@ to what may lie ahead or what has happened in the past.
See also: TEXT-EDITOR, EXTRA, SWORDS
#31
OEDIT-EXTRA-FLAGS OEDIT-FLAGS OBJECT-FLAGS OBJECTFLAGS GLOW HUM NODROP NO_DROP NORENT NO_RENT OFLAGS OBJFLAGS OBJ-FLAGS
OEDIT-EXTRA-FLAGS OEDIT-FLAGS OBJECT-FLAGS OBJECTFLAGS GLOW HUM NODROP NO_DROP OFLAGS OBJFLAGS OBJ-FLAGS
6) Extra flags : @cNOBITS@n
1) GLOW Item is glowing (cosmetic).
2) HUM Item is humming (cosmetic).
3) NORENT Item cannot be rented.
4) NODONATE Item cannot be donated.
5) NOINVIS Item cannot be made invisible.
6) INVISIBLE Item is invisible.
@ -5989,8 +5980,7 @@ OEDIT-MENU OBJ-MENU OBJECT-MENU
7) Wear flags : @cTAKE@n @RHELP OEDIT-WEAR-FLAGS@n
8) Weight : @c0@n @RHELP OEDIT-WEIGHT@n
9) Cost : @c0@n @RHELP OEDIT-COST@n
A) Cost/Day : @c0@n @RHELP OEDIT-COST/DAY@n
B) Timer : @c0@n @RHELP OEDIT-TIMER@n
A) Timer : @c0@n @RHELP OEDIT-TIMER@n
C) Values : @c0 0 0 0@n @RHELP OEDIT-VALUES@n
D) Applies menu @RHELP OEDIT-APPLIES@n
E) Extra descriptions menu @RHELP OEDIT-EXTRA@n
@ -6218,7 +6208,7 @@ will not be able to take it. By giving it a large weight this causes the code
to say it is too heavy for you instead of "You can't take that". Good for
statues, and funny when you see players dropping all their stuff and stripping
naked to get the things. Objects without take flags do not require a weight,
cost, cost/day, applies, min level, and perm affects.
cost, applies, min level, and perm affects.
Note that the TAKE bit controls whether or not an item can be picked up
using the get or take command, whereas the HOLD bit controls if the object
can be worn using the hold command. The wear flags determine how you can
@ -6245,21 +6235,6 @@ Everything that has a take flag must have a weight. For weapons a weight of
If you do not want something to be taken you can remove the TAKE flag.
See also: OEDIT-WEAR-FLAGS
#31
OFFER RENTING UNRENTING UN-RENTING
Usage: offer
rent
For use in the receptions of inns.
Offer makes the innkeeper tell you the cost of storing your belongings
for one day. Rent stores your belongings and exits you from the game.
When you re-enter, you will start where you rented.
However, rent is free here, and you can simply quit.
See also: INN, RECEPTION
#0
OFFLINE-EDITOR CIRCEDIT CWC
@ -6560,7 +6535,7 @@ The shop owner simply places his unwanted items into the stock room, and they
instantly become available to buy in the shop. The shopkeeper works like any
other shopkeeper, but only sells the contents of the stock room.
Unsellable or unrentable items cannot be sold, and simply won't appear on the
Unsellable items cannot be sold, and simply won't appear on the
shopkeeper's list.
When an item is sold, a small pile of gold will appear in the stock room. The
@ -7464,7 +7439,7 @@ QUIT LOGOUT
When you get tired of playing, you can leave the game by typing 'quit'.
You can quit anywhere, and you will not lose your EQ when you decide to do so.
See also: INN, OFFER, RENT
See also: INN, OFFER
#0
RADIAX
@ -7610,7 +7585,7 @@ See also: REDIT-MENU, RLIST, DIG, OLC, XCOPY
REDIT-DELETE ROOMDELETE ROOM-DELETE ERASE DELETE-ROOM ODELETE OEDIT-DELETE MDELETE MEDIT-DELETE DELETE-OBJECT
Deletes the current room, mobile, or object. Be careful and make sure you
are deleting the right vnum. Do not delete objects in rent files.
are deleting the right vnum. Do not delete objects in save files.
See also: OLC, AUTOSAVE, PURGE, VDELETE
#31
@ -8686,8 +8661,8 @@ SHOW-SHOPS SHOW-ZONES SHOWZONES SHOWSHOPS ZSTAT SHOW->ZONES SHOW-COLOUR SHOW-COL
Usage: show <mode> [argument]
Show options:
zones player rent stats errors
death godrooms shops houses snoop
zones player stats errors
death godrooms shops houses snoop
The SHOW command displays information. Some modes of show require additional
information, such as a player name.
@ -8699,7 +8674,6 @@ zones Shows all the zones in the game and their current reset status.
death Shows all death traps in the game.
player Shows player summary information, simply provide a player name.
godrooms Shows the rooms in the 'god zone'.
rent Shows the filename and path to a players rent file.
shops Shows all the shops in the game and their buy/sell parameters.
stats Shows game status information including players in game, mobs etc.
houses Shows the houses that are currently defined.
@ -11965,8 +11939,7 @@ Objects When using field - The variable returns:
affects() - Checks if flag exists. @RHELP OEDIT-AFFECT@n @RTSTAT 1205@n
carried_by - The id of the character carrying the object, or an empty return. @RTSTAT 55005@n
contents - Gives the first object in a container. @RTSTAT 32@n
cost() - The cost (not rent cost) of the object. Subfield sets.
cost_per_day - The rent cost of the object
cost() - The cost of the object. Subfield sets.
count - The number of the same object.
has_in - True if the container holds the item.
hasattached() - Checks if the trig is attached. @RHELP HASATTACHED@n.

View file

@ -95,7 +95,7 @@ NEW COMMANDS AND NEW MUD BEHAVIOR:
shouts, emotes, socials, and even people talking in the same room.
*****************************************************************************
IF YOU LEAVE THE GAME FOR MORE THAN AN HOUR, either by renting or plain
IF YOU LEAVE THE GAME FOR MORE THAN AN HOUR, either by logging out or
quitting, your hit points, move points, and mana will be fully restored
when you come back! This doesn't work if you're poisoned.
*****************************************************************************

View file

@ -587,4 +587,59 @@ cover their face.
11 0 0 0 0 al 0 0 0 0 0 0 0
1 1 0 10
1 10 0 0 0
#163
pants worn fraying~
a pair of worn, fraying pants~
Some worn, fraying fabric is lying here in a heap.~
What was once likely a nice pair of pants has been worn down over several
years. The bottom has frayed and is in tatters, while the knees are completely
split open.
~
11 0 0 0 0 ag 0 0 0 0 0 0 0
0 0 0 0
1 5 0 0 0
#164
shirt worn sleeveless~
a worn, sleeveless shirt~
A plain shirt without sleeves lies here.~
This shirt at one point had sleeves, but they have been cut from the body.
A plain undyed color, it looks similar in color to sand.
~
11 0 0 0 0 ae 0 0 0 0 0 0 0
0 0 0 0
1 5 0 0 0
#165
shirt sandcloth~
a sandcloth shirt~
A shirt made of sandcloth lies here.~
This shirt is made from undyed sandcloth. Woven to keep out the harsh gritty
sand that is found nearly everywhere, the fabric is known for being lightweight
and resistant to the elements.
~
11 0 0 0 0 ae 0 0 0 0 0 0 0
0 0 0 0
1 20 0 0 0
#166
trousers sandcloth pair~
a pair of sandcloth trousers~
A pile of undyed sandcloth lies here in a heap.~
These pants have been sewn by a modest tailor and made out of undyed
sandcloth. Known for its ruggedness and being lightweight, they look capable of
keeping the wearer safe from the elements.
~
11 0 0 0 0 ag 0 0 0 0 0 0 0
0 0 0 0
2 30 0 0 0
#167
boots carru hide pair~
a pair of carru-hide boots~
A pair of boots made out of carru hide are here.~
Made from tanned carru hide, these boots look sturdy and well worn. The
stitching is dark and repeats an X pattern, reinforcing them to ensure they
remain reliable for a long time. The sole appears to be made of two layers of
hide, reinforcing the foot from the ground below.
~
11 0 0 0 0 ah 0 0 0 0 0 0 0
0 0 0 0
1 40 0 0 0
$~

View file

@ -1,6 +1,6 @@
#1
None.~
City of Tyr~
Kinther~
City of Caleran~
100 999 30 2
S
$

View file

@ -79,7 +79,6 @@ while (1)
open (DEATHS, ">>:log:deaths");
open (REBOOT, ">>:log:reboots");
open (LEVELS, ">>:log:levels");
open (NORENT, ">>:log:norent");
open (USAGE, ">>:log:usage");
open (NEWPLR, ">>:log:newplrs");
open (SYSERR, ">>:log:errors");
@ -94,7 +93,6 @@ while (1)
print DEATHS if /killed/;
print REBOOT if /Running/;
print LEVELS if /advanced/;
print NORENT if /equipment lost/;
print USAGE if /usage/;
print NEWPLR if /new player/;
print SYSERR if /SYSERR/;

View file

@ -87,7 +87,7 @@ static void perform_put(struct char_data *ch, struct obj_data *obj, struct obj_d
act("$n puts $p in $P.", TRUE, ch, obj, cont, TO_ROOM);
/* Yes, I realize this is strange until we have auto-equip on rent. -gg */
/* Yes, I realize this is strange until we have auto-equip on load. -gg */
if (OBJ_FLAGGED(obj, ITEM_NODROP) && !OBJ_FLAGGED(cont, ITEM_NODROP)) {
SET_BIT_AR(GET_OBJ_EXTRA(cont), ITEM_NODROP);
act("You get a strange feeling as you put $p in $P.", FALSE,

View file

@ -3459,7 +3459,6 @@ ACMD(do_show)
{ "nothing", 0 }, /* 0 */
{ "zones", LVL_IMMORT }, /* 1 */
{ "player", LVL_IMMORT },
{ "rent", LVL_IMMORT },
{ "stats", LVL_IMMORT },
{ "errors", LVL_IMMORT }, /* 5 */
{ "death", LVL_IMMORT },
@ -3577,17 +3576,8 @@ ACMD(do_show)
free_char(vict);
break;
}
/* show rent */
case 3:
if (!*value) {
send_to_char(ch, "A name would help.\r\n");
return;
}
Crash_listrent(ch, value);
break;
/* show stats */
case 4:
case 3:
i = 0;
j = 0;
k = 0;
@ -3626,7 +3616,7 @@ ACMD(do_show)
break;
/* show errors */
case 5:
case 4:
len = strlcpy(buf, "Errant Rooms\r\n------------\r\n", sizeof(buf));
for (i = 0, k = 0; i <= top_of_world; i++)
for (j = 0; j < DIR_COUNT; j++) {
@ -3649,7 +3639,7 @@ ACMD(do_show)
break;
/* show death */
case 6:
case 5:
len = strlcpy(buf, "Death Traps\r\n-----------\r\n", sizeof(buf));
for (i = 0, j = 0; i <= top_of_world; i++)
if (ROOM_FLAGGED(i, ROOM_DEATH)) {
@ -3662,7 +3652,7 @@ ACMD(do_show)
break;
/* show godrooms */
case 7:
case 6:
len = strlcpy(buf, "Godrooms\r\n--------------------------\r\n", sizeof(buf));
for (i = 0, j = 0; i <= top_of_world; i++)
if (ROOM_FLAGGED(i, ROOM_GODROOM)) {
@ -3675,17 +3665,17 @@ ACMD(do_show)
break;
/* show shops */
case 8:
case 7:
show_shops(ch, value);
break;
/* show houses */
case 9:
case 8:
hcontrol_list_houses(ch, value);
break;
/* show snoop */
case 10:
case 9:
i = 0;
send_to_char(ch, "People currently snooping:\r\n--------------------------\r\n");
for (d = descriptor_list; d; d = d->next) {
@ -3703,7 +3693,7 @@ ACMD(do_show)
break;
/* show experience tables */
case 11:
case 10:
len = strlcpy(buf, "LvL - Mu Cl Th Wa BA Ra Br Dr\r\n--------------------------\r\n", sizeof(buf));
for (i = 1; i < LVL_IMMORT; i++) {
@ -3724,7 +3714,7 @@ ACMD(do_show)
page_string(ch->desc, buf, TRUE);
break;
case 12:
case 11:
len = strlcpy(buf, "Colours\r\n--------------------------\r\n", sizeof(buf));
k = 0;
for (r = 0; r < 6; r++)
@ -4726,11 +4716,11 @@ ACMD (do_zcheck)
} /*switch on Item_Type*/
if (!CAN_WEAR(obj, ITEM_WEAR_TAKE)) {
if ((GET_OBJ_COST(obj) || (GET_OBJ_WEIGHT(obj) && GET_OBJ_TYPE(obj) != ITEM_FOUNTAIN) ||
GET_OBJ_RENT(obj)) && (found = 1))
if ((GET_OBJ_COST(obj) || (GET_OBJ_WEIGHT(obj) && GET_OBJ_TYPE(obj) != ITEM_FOUNTAIN)) &&
(found = 1))
len += snprintf(buf + len, sizeof(buf) - len,
"- is NO_TAKE, but has cost (%d) weight (%d) or rent (%d) set.\r\n",
GET_OBJ_COST(obj), GET_OBJ_WEIGHT(obj), GET_OBJ_RENT(obj));
"- is NO_TAKE, but has cost (%d) or weight (%d) set.\r\n",
GET_OBJ_COST(obj), GET_OBJ_WEIGHT(obj));
} else {
if (GET_OBJ_COST(obj) == 0 && (found=1) && GET_OBJ_TYPE(obj) != ITEM_TRASH)
len += snprintf(buf + len, sizeof(buf) - len,
@ -5298,7 +5288,6 @@ ACMD(do_file)
{ "levels", LVL_GOD, LEVELS_LOGFILE, TRUE},
{ "rip", LVL_GOD, RIP_LOGFILE, TRUE},
{ "players", LVL_GOD, NEWPLAYERS_LOGFILE, TRUE},
{ "rentgone", LVL_GOD, RENTGONE_LOGFILE, TRUE},
{ "errors", LVL_GOD, ERRORS_LOGFILE, TRUE},
{ "godcmds", LVL_GOD, GODCMDS_LOGFILE, TRUE},
{ "syslog", LVL_GOD, SYSLOG_LOGFILE, TRUE},

View file

@ -88,7 +88,6 @@ static void cedit_setup(struct descriptor_data *d)
OLC_CONFIG(d)->play.max_npc_corpse_time = CONFIG_MAX_NPC_CORPSE_TIME;
OLC_CONFIG(d)->play.max_pc_corpse_time = CONFIG_MAX_PC_CORPSE_TIME;
OLC_CONFIG(d)->play.idle_void = CONFIG_IDLE_VOID;
OLC_CONFIG(d)->play.idle_rent_time = CONFIG_IDLE_RENT_TIME;
OLC_CONFIG(d)->play.idle_max_level = CONFIG_IDLE_MAX_LEVEL;
OLC_CONFIG(d)->play.dts_are_dumps = CONFIG_DTS_ARE_DUMPS;
OLC_CONFIG(d)->play.load_into_inventory = CONFIG_LOAD_INVENTORY;
@ -102,13 +101,9 @@ static void cedit_setup(struct descriptor_data *d)
OLC_CONFIG(d)->play.script_players = CONFIG_SCRIPT_PLAYERS;
/* Crash Saves */
OLC_CONFIG(d)->csd.free_rent = CONFIG_FREE_RENT;
OLC_CONFIG(d)->csd.max_obj_save = CONFIG_MAX_OBJ_SAVE;
OLC_CONFIG(d)->csd.min_rent_cost = CONFIG_MIN_RENT_COST;
OLC_CONFIG(d)->csd.auto_save = CONFIG_AUTO_SAVE;
OLC_CONFIG(d)->csd.autosave_time = CONFIG_AUTOSAVE_TIME;
OLC_CONFIG(d)->csd.crash_file_timeout = CONFIG_CRASH_TIMEOUT;
OLC_CONFIG(d)->csd.rent_file_timeout = CONFIG_RENT_TIMEOUT;
/* Room Numbers */
OLC_CONFIG(d)->room_nums.mortal_start_room = CONFIG_MORTAL_START;
@ -191,7 +186,6 @@ static void cedit_save_internally(struct descriptor_data *d)
CONFIG_MAX_NPC_CORPSE_TIME = OLC_CONFIG(d)->play.max_npc_corpse_time;
CONFIG_MAX_PC_CORPSE_TIME = OLC_CONFIG(d)->play.max_pc_corpse_time;
CONFIG_IDLE_VOID = OLC_CONFIG(d)->play.idle_void;
CONFIG_IDLE_RENT_TIME = OLC_CONFIG(d)->play.idle_rent_time;
CONFIG_IDLE_MAX_LEVEL = OLC_CONFIG(d)->play.idle_max_level;
CONFIG_DTS_ARE_DUMPS = OLC_CONFIG(d)->play.dts_are_dumps;
CONFIG_LOAD_INVENTORY = OLC_CONFIG(d)->play.load_into_inventory;
@ -205,13 +199,9 @@ static void cedit_save_internally(struct descriptor_data *d)
CONFIG_SCRIPT_PLAYERS = OLC_CONFIG(d)->play.script_players;
/* Crash Saves */
CONFIG_FREE_RENT = OLC_CONFIG(d)->csd.free_rent;
CONFIG_MAX_OBJ_SAVE = OLC_CONFIG(d)->csd.max_obj_save;
CONFIG_MIN_RENT_COST = OLC_CONFIG(d)->csd.min_rent_cost;
CONFIG_AUTO_SAVE = OLC_CONFIG(d)->csd.auto_save;
CONFIG_AUTOSAVE_TIME = OLC_CONFIG(d)->csd.autosave_time;
CONFIG_CRASH_TIMEOUT = OLC_CONFIG(d)->csd.crash_file_timeout;
CONFIG_RENT_TIMEOUT = OLC_CONFIG(d)->csd.rent_file_timeout;
/* Room Numbers */
CONFIG_MORTAL_START = OLC_CONFIG(d)->room_nums.mortal_start_room;
@ -354,8 +344,6 @@ int save_config( IDXTYPE nowhere )
"max_pc_corpse_time = %d\n\n", CONFIG_MAX_PC_CORPSE_TIME);
fprintf(fl, "* Number of tics before a PC is sent to the void.\n"
"idle_void = %d\n\n", CONFIG_IDLE_VOID);
fprintf(fl, "* Number of tics before a PC is autorented.\n"
"idle_rent_time = %d\n\n", CONFIG_IDLE_RENT_TIME);
fprintf(fl, "* Level and above of players whom are immune to idle penalties.\n"
"idle_max_level = %d\n\n", CONFIG_IDLE_MAX_LEVEL);
fprintf(fl, "* Should the items in death traps be junked automatically?\n"
@ -404,15 +392,8 @@ int save_config( IDXTYPE nowhere )
fprintf(fl, "* Text sent to players when an effect fails.\n"
"noeffect = %s\n", buf);
/* RENT / CRASHSAVE OPTIONS */
fprintf(fl, "\n\n\n* [ Rent/Crashsave Options ]\n");
fprintf(fl, "* Should the MUD allow you to 'rent' for free? (i.e. if you just quit,\n"
"* your objects are saved at no cost, as in Merc-type MUDs.)\n"
"free_rent = %d\n\n", CONFIG_FREE_RENT);
fprintf(fl, "* Maximum number of items players are allowed to rent.\n"
"max_obj_save = %d\n\n", CONFIG_MAX_OBJ_SAVE);
/* CRASHSAVE OPTIONS */
fprintf(fl, "\n\n\n* [ Crashsave Options ]\n");
fprintf(fl, "* Should the game automatically save people?\n"
"auto_save = %d\n\n", CONFIG_AUTO_SAVE);
@ -420,11 +401,9 @@ int save_config( IDXTYPE nowhere )
fprintf(fl, "* If auto_save = 1, how often (in minutes) should the game save people's objects?\n"
"autosave_time = %d\n\n", CONFIG_AUTOSAVE_TIME);
fprintf(fl, "* Lifetime of crashfiles and force-rent (idlesave) files in days.\n"
fprintf(fl, "* Lifetime of crashfiles and idle-save files in days.\n"
"crash_file_timeout = %d\n\n", CONFIG_CRASH_TIMEOUT);
fprintf(fl, "* Lifetime of normal rent files in days.\n"
"rent_file_timeout = %d\n\n", CONFIG_RENT_TIMEOUT);
/* ROOM NUMBERS */
fprintf(fl, "\n\n\n* [ Room Numbers ]\n");
@ -584,7 +563,7 @@ static void cedit_disp_menu(struct descriptor_data *d)
write_to_output(d,
"OasisOLC MUD Configuration Editor\r\n"
"%sG%s) Game Play Options\r\n"
"%sC%s) Crashsave/Rent Options\r\n"
"%sC%s) Crashsave Options\r\n"
"%sR%s) Room Numbers\r\n"
"%sO%s) Operation Options\r\n"
"%sA%s) Autowiz Options\r\n"
@ -621,14 +600,13 @@ static void cedit_disp_game_play_options(struct descriptor_data *d)
"%sH%s) Max Time for NPC Corpse : %s%d\r\n"
"%sI%s) Max Time for PC Corpse : %s%d\r\n"
"%sJ%s) Tics before PC sent to void : %s%d\r\n"
"%sK%s) Tics before PC is autosaved : %s%d\r\n"
"%sL%s) Level Immune To IDLE : %s%d\r\n"
"%sM%s) Death Traps Junk Items : %s%s\r\n"
"%sN%s) Objects Load Into Inventory : %s%s\r\n"
"%sO%s) Track Through Doors : %s%s\r\n"
"%sP%s) Display Closed Doors : %s%s\r\n"
"%sR%s) Diagonal Directions : %s%s\r\n"
"%sS%s) Prevent Mortal Level To Immortal : %s%s\r\n"
"%sK%s) Level Immune To IDLE : %s%d\r\n"
"%sL%s) Death Traps Junk Items : %s%s\r\n"
"%sM%s) Objects Load Into Inventory : %s%s\r\n"
"%sN%s) Track Through Doors : %s%s\r\n"
"%sO%s) Display Closed Doors : %s%s\r\n"
"%sP%s) Diagonal Directions : %s%s\r\n"
"%sR%s) Prevent Mortal Level To Immortal : %s%s\r\n"
"%s1%s) OK Message Text : %s%s"
"%s2%s) HUH Message Text : %s%s"
"%s3%s) NOPERSON Message Text : %s%s"
@ -649,7 +627,6 @@ static void cedit_disp_game_play_options(struct descriptor_data *d)
grn, nrm, cyn, OLC_CONFIG(d)->play.max_pc_corpse_time,
grn, nrm, cyn, OLC_CONFIG(d)->play.idle_void,
grn, nrm, cyn, OLC_CONFIG(d)->play.idle_rent_time,
grn, nrm, cyn, OLC_CONFIG(d)->play.idle_max_level,
grn, nrm, cyn, CHECK_VAR(OLC_CONFIG(d)->play.dts_are_dumps),
grn, nrm, cyn, CHECK_VAR(OLC_CONFIG(d)->play.load_into_inventory),
@ -679,22 +656,14 @@ static void cedit_disp_crash_save_options(struct descriptor_data *d)
clear_screen(d);
write_to_output(d, "\r\n\r\n"
"%sA%s) Free Rent : %s%s\r\n"
"%sB%s) Max Objects Saved : %s%d\r\n"
"%sC%s) Minimum Rent Cost : %s%d\r\n"
"%sD%s) Auto Save : %s%s\r\n"
"%sE%s) Auto Save Time : %s%d minute(s)\r\n"
"%sF%s) Crash File Timeout : %s%d day(s)\r\n"
"%sG%s) Rent File Timeout : %s%d day(s)\r\n"
"%sA%s) Auto Save : %s%s\r\n"
"%sB%s) Auto Save Time : %s%d minute(s)\r\n"
"%sC%s) Crash File Timeout : %s%d day(s)\r\n"
"%sQ%s) Exit To The Main Menu\r\n"
"Enter your choice : ",
grn, nrm, cyn, CHECK_VAR(OLC_CONFIG(d)->csd.free_rent),
grn, nrm, cyn, OLC_CONFIG(d)->csd.max_obj_save,
grn, nrm, cyn, OLC_CONFIG(d)->csd.min_rent_cost,
grn, nrm, cyn, CHECK_VAR(OLC_CONFIG(d)->csd.auto_save),
grn, nrm, cyn, OLC_CONFIG(d)->csd.autosave_time,
grn, nrm, cyn, OLC_CONFIG(d)->csd.crash_file_timeout,
grn, nrm, cyn, OLC_CONFIG(d)->csd.rent_file_timeout,
grn, nrm
);
@ -929,43 +898,37 @@ void cedit_parse(struct descriptor_data *d, char *arg)
case 'k':
case 'K':
write_to_output(d, "Enter the number of tics before PC's are automatically rented and forced to quit : ");
OLC_MODE(d) = CEDIT_IDLE_RENT_TIME;
return;
case 'l':
case 'L':
write_to_output(d, "Enter the level a player must be to become immune to IDLE : ");
OLC_MODE(d) = CEDIT_IDLE_MAX_LEVEL;
return;
case 'l':
case 'L':
TOGGLE_VAR(OLC_CONFIG(d)->play.dts_are_dumps);
break;
case 'm':
case 'M':
TOGGLE_VAR(OLC_CONFIG(d)->play.dts_are_dumps);
TOGGLE_VAR(OLC_CONFIG(d)->play.load_into_inventory);
break;
case 'n':
case 'N':
TOGGLE_VAR(OLC_CONFIG(d)->play.load_into_inventory);
TOGGLE_VAR(OLC_CONFIG(d)->play.track_through_doors);
break;
case 'o':
case 'O':
TOGGLE_VAR(OLC_CONFIG(d)->play.track_through_doors);
TOGGLE_VAR(OLC_CONFIG(d)->play.disp_closed_doors);
break;
case 'p':
case 'P':
TOGGLE_VAR(OLC_CONFIG(d)->play.disp_closed_doors);
break;
case 'r':
case 'R':
TOGGLE_VAR(OLC_CONFIG(d)->play.diagonal_dirs);
break;
case 's':
case 'S':
case 'r':
case 'R':
TOGGLE_VAR(OLC_CONFIG(d)->play.no_mort_to_immort);
break;
@ -1027,44 +990,21 @@ void cedit_parse(struct descriptor_data *d, char *arg)
switch (*arg) {
case 'a':
case 'A':
TOGGLE_VAR(OLC_CONFIG(d)->csd.free_rent);
TOGGLE_VAR(OLC_CONFIG(d)->csd.auto_save);
break;
case 'b':
case 'B':
write_to_output(d, "Enter the maximum number of items players can rent : ");
OLC_MODE(d) = CEDIT_MAX_OBJ_SAVE;
return;
case 'c':
case 'C':
write_to_output(d, "Enter the surcharge on top of item costs : ");
OLC_MODE(d) = CEDIT_MIN_RENT_COST;
return;
case 'd':
case 'D':
TOGGLE_VAR(OLC_CONFIG(d)->csd.auto_save);
break;
case 'e':
case 'E':
write_to_output(d, "Enter how often (in minutes) should the MUD save players : ");
OLC_MODE(d) = CEDIT_AUTOSAVE_TIME;
return;
case 'f':
case 'F':
case 'c':
case 'C':
write_to_output(d, "Enter the lifetime of crash and idlesave files (days) : ");
OLC_MODE(d) = CEDIT_CRASH_FILE_TIMEOUT;
return;
case 'g':
case 'G':
write_to_output(d, "Enter the lifetime of normal rent files (days) : ");
OLC_MODE(d) = CEDIT_RENT_FILE_TIMEOUT;
return;
case 'q':
case 'Q':
cedit_disp_menu(d);
@ -1367,16 +1307,6 @@ void cedit_parse(struct descriptor_data *d, char *arg)
}
break;
case CEDIT_IDLE_RENT_TIME:
if (!*arg) {
write_to_output(d,
"That is an invalid choice!\r\n"
"Enter the number of tics before PC's are automatically rented and forced to quit : ");
} else {
OLC_CONFIG(d)->play.idle_rent_time = atoi(arg);
cedit_disp_game_play_options(d);
}
break;
case CEDIT_IDLE_MAX_LEVEL:
if (!*arg) {
@ -1437,27 +1367,6 @@ void cedit_parse(struct descriptor_data *d, char *arg)
cedit_disp_game_play_options(d);
break;
case CEDIT_MAX_OBJ_SAVE:
if (!*arg) {
write_to_output(d,
"That is an invalid choice!\r\n"
"Enter the maximum objects a player can save : ");
} else {
OLC_CONFIG(d)->csd.max_obj_save = atoi(arg);
cedit_disp_crash_save_options(d);
}
break;
case CEDIT_MIN_RENT_COST:
if (!*arg) {
write_to_output(d,
"That is an invalid choice!\r\n"
"Enter the minimum amount it costs to rent : ");
} else {
OLC_CONFIG(d)->csd.min_rent_cost = atoi(arg);
cedit_disp_crash_save_options(d);
}
break;
case CEDIT_AUTOSAVE_TIME:
if (!*arg) {
@ -1481,16 +1390,6 @@ void cedit_parse(struct descriptor_data *d, char *arg)
}
break;
case CEDIT_RENT_FILE_TIMEOUT:
if (!*arg) {
write_to_output(d,
"That is an invalid choice!\r\n"
"Enter the lifetime of rent files (days) : ");
} else {
OLC_CONFIG(d)->csd.rent_file_timeout = atoi(arg);
cedit_disp_crash_save_options(d);
}
break;
case CEDIT_MORTAL_START_ROOM:
if (!*arg) {

View file

@ -272,7 +272,7 @@ int main(int argc, char **argv)
case 'm':
mini_mud = 1;
no_rent_check = 1;
puts("Running in minimized mode & with no rent check.");
puts("Running in minimized mode & with no save-file check.");
break;
case 'c':
scheck = 1;
@ -280,7 +280,7 @@ int main(int argc, char **argv)
break;
case 'q':
no_rent_check = 1;
puts("Quick boot mode -- rent check supressed.");
puts("Quick boot mode -- save-file check suppressed.");
break;
case 'r':
circle_restrict = 1;
@ -300,7 +300,7 @@ int main(int argc, char **argv)
" -m Start in mini-MUD mode.\n"
" -f<file> Use <file> for configuration.\n"
" -o <file> Write log to <file> instead of stderr.\n"
" -q Quick boot (doesn't scan rent for object limits)\n"
" -q Quick boot (doesn't scan save files for object limits)\n"
" -r Restrict MUD -- no new players allowed.\n"
" -s Suppress special procedure assignments.\n"
" Note: These arguments are 'CaSe SeNsItIvE!!!'\n",

View file

@ -64,9 +64,8 @@ int max_exp_loss = 500000; /* max losable per death */
int max_npc_corpse_time = 5;
int max_pc_corpse_time = 10;
/* How many ticks before a player is sent to the void or idle-rented. */
/* How many ticks before a player is sent to the void. */
int idle_void = 8;
int idle_rent_time = 48;
/* This level and up is immune to idling, LVL_IMPL+1 will disable it. */
int idle_max_level = LVL_IMMORT;
@ -101,17 +100,7 @@ int no_mort_to_immort = YES;
* If set to NO, then only the 6 directions n,e,s,w,u,d are allowed */
int diagonal_dirs = NO;
/* RENT/CRASHSAVE OPTIONS */
/* Should the MUD allow you to 'rent' for free? (i.e. if you just quit, your
* objects are saved at no cost). */
int free_rent = YES;
/* Maximum number of items players are allowed to rent. */
int max_obj_save = 30;
/* Receptionist's surcharge on top of item costs. */
int min_rent_cost = 100;
/* CRASHSAVE OPTIONS */
/* Should the game automatically save people? (i.e., save player data every 4
* kills (on average), and Crash-save as defined below. If auto_save is YES,
* then the 'save' command will be disabled to prevent item duplication via
@ -123,11 +112,9 @@ int auto_save = YES;
* save players' houses. */
int autosave_time = 5;
/* Lifetime of crashfiles and forced-rent (idlesave) files in days. */
/* Lifetime of crashfiles and idle-save files in days. */
int crash_file_timeout = 10;
/* Lifetime of normal rent files in days. */
int rent_file_timeout = 30;
/* Do you want to automatically wipe players who've been gone too long? */
int auto_pwipe = NO;

View file

@ -24,7 +24,6 @@ extern int max_exp_loss;
extern int max_npc_corpse_time;
extern int max_pc_corpse_time;
extern int idle_void;
extern int idle_rent_time;
extern int idle_max_level;
extern int dts_are_dumps;
extern int load_into_inventory;
@ -35,13 +34,9 @@ extern const char *NOEFFECT;
extern int track_through_doors;
extern int no_mort_to_immort;
extern int diagonal_dirs;
extern int free_rent;
extern int max_obj_save;
extern int min_rent_cost;
extern int auto_save;
extern int autosave_time;
extern int crash_file_timeout;
extern int rent_file_timeout;
/* Room Numbers */
extern room_vnum mortal_start_room;
extern room_vnum immort_start_room;

View file

@ -466,7 +466,7 @@ const char *wear_bits[] = {
const char *extra_bits[] = {
"GLOW",
"HUM",
"NO_RENT",
"UNUSED",
"NO_DONATE",
"NO_INVIS",
"INVISIBLE",

View file

@ -84,7 +84,7 @@ int top_shop = -1; /* top of shop table */
int no_mail = 0; /* mail disabled? */
int mini_mud = 0; /* mini-mud mode? */
int no_rent_check = 0; /* skip rent check on boot? */
int no_rent_check = 0; /* skip save-file check on boot? */
time_t boot_time = 0; /* time of mud boot */
int circle_restrict = 0; /* level of game restriction */
room_rnum r_mortal_start_room; /* rnum of mortal start room */
@ -772,7 +772,7 @@ void boot_db(void)
load_ibt_file(SCMD_TYPO);
if (!no_rent_check) {
log("Deleting timed-out crash and rent files:");
log("Deleting timed-out crash and idle-save files:");
update_obj_file();
log(" Done.");
}
@ -2207,7 +2207,7 @@ char *parse_object(FILE *obj_f, int nr)
GET_OBJ_WEIGHT(obj_proto + i) = t[0];
GET_OBJ_COST(obj_proto + i) = t[1];
GET_OBJ_RENT(obj_proto + i) = t[2];
GET_OBJ_COST_PER_DAY(obj_proto + i) = 0;
GET_OBJ_LEVEL(obj_proto + i) = t[3];
GET_OBJ_TIMER(obj_proto + i) = t[4];
@ -3993,10 +3993,6 @@ static int check_object(struct obj_data *obj)
log("SYSERR: Object #%d (%s) has negative weight (%d).",
GET_OBJ_VNUM(obj), obj->short_description, GET_OBJ_WEIGHT(obj));
if (GET_OBJ_RENT(obj) < 0 && (error = TRUE))
log("SYSERR: Object #%d (%s) has negative cost/day (%d).",
GET_OBJ_VNUM(obj), obj->short_description, GET_OBJ_RENT(obj));
snprintf(objname, sizeof(objname), "Object #%d (%s)", GET_OBJ_VNUM(obj), obj->short_description);
for(y = 0; y < TW_ARRAY_MAX; y++) {
error |= check_bitvector_names(GET_OBJ_WEAR(obj)[y], wear_bits_count, objname, "object wear");
@ -4139,7 +4135,6 @@ static void load_default_config( void )
CONFIG_MAX_NPC_CORPSE_TIME = max_npc_corpse_time;
CONFIG_MAX_PC_CORPSE_TIME = max_pc_corpse_time;
CONFIG_IDLE_VOID = idle_void;
CONFIG_IDLE_RENT_TIME = idle_rent_time;
CONFIG_IDLE_MAX_LEVEL = idle_max_level;
CONFIG_DTS_ARE_DUMPS = dts_are_dumps;
CONFIG_LOAD_INVENTORY = load_into_inventory;
@ -4159,14 +4154,10 @@ static void load_default_config( void )
CONFIG_SCRIPT_PLAYERS = script_players;
CONFIG_DEBUG_MODE = debug_mode;
/* Rent / crashsave options. */
CONFIG_FREE_RENT = free_rent;
CONFIG_MAX_OBJ_SAVE = max_obj_save;
CONFIG_MIN_RENT_COST = min_rent_cost;
/* Crashsave options. */
CONFIG_AUTO_SAVE = auto_save;
CONFIG_AUTOSAVE_TIME = autosave_time;
CONFIG_CRASH_TIMEOUT = crash_file_timeout;
CONFIG_RENT_TIMEOUT = rent_file_timeout;
/* Room numbers. */
CONFIG_MORTAL_START = mortal_start_room;
@ -4292,9 +4283,7 @@ void load_config( void )
break;
case 'f':
if (!str_cmp(tag, "free_rent"))
CONFIG_FREE_RENT = num;
else if (!str_cmp(tag, "frozen_start_room"))
if (!str_cmp(tag, "frozen_start_room"))
CONFIG_FROZEN_START = num;
break;
@ -4311,8 +4300,6 @@ void load_config( void )
case 'i':
if (!str_cmp(tag, "idle_void"))
CONFIG_IDLE_VOID = num;
else if (!str_cmp(tag, "idle_rent_time"))
CONFIG_IDLE_RENT_TIME = num;
else if (!str_cmp(tag, "idle_max_level"))
CONFIG_IDLE_MAX_LEVEL = num;
else if (!str_cmp(tag, "immort_start_room"))
@ -4347,8 +4334,6 @@ void load_config( void )
CONFIG_MAX_FILESIZE = num;
else if (!str_cmp(tag, "max_npc_corpse_time"))
CONFIG_MAX_NPC_CORPSE_TIME = num;
else if (!str_cmp(tag, "max_obj_save"))
CONFIG_MAX_OBJ_SAVE = num;
else if (!str_cmp(tag, "max_pc_corpse_time"))
CONFIG_MAX_PC_CORPSE_TIME = num;
else if (!str_cmp(tag, "max_playing"))
@ -4359,8 +4344,7 @@ void load_config( void )
strncpy(buf, "Reading menu in load_config()", sizeof(buf));
CONFIG_MENU = fread_string(fl, buf);
parse_at(CONFIG_MENU);
} else if (!str_cmp(tag, "min_rent_cost"))
CONFIG_MIN_RENT_COST = num;
}
else if (!str_cmp(tag, "min_wizlist_lev"))
CONFIG_MIN_WIZLIST_LEV = num;
else if (!str_cmp(tag, "mortal_start_room"))
@ -4411,8 +4395,6 @@ void load_config( void )
break;
case 'r':
if (!str_cmp(tag, "rent_file_timeout"))
CONFIG_RENT_TIMEOUT = num;
break;
case 's':

View file

@ -116,7 +116,6 @@
#define LEVELS_LOGFILE PREFIX_LOGFILE"levels"
#define RIP_LOGFILE PREFIX_LOGFILE"rip"
#define NEWPLAYERS_LOGFILE PREFIX_LOGFILE"newplayers"
#define RENTGONE_LOGFILE PREFIX_LOGFILE"rentgone"
#define ERRORS_LOGFILE PREFIX_LOGFILE"errors"
#define GODCMDS_LOGFILE PREFIX_LOGFILE"godcmds"
#define HELP_LOGFILE PREFIX_LOGFILE"help"
@ -227,7 +226,7 @@ struct help_index_element {
/* The ban defines and structs were moved to ban.h */
/* for the "buffered" rent and house object loading */
/* for the buffered save and house object loading */
struct obj_save_data_t {
struct obj_data *obj;
int locate;
@ -273,7 +272,6 @@ 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);
int Crash_clean_file(char *name);
int Crash_delete_crashfile(struct char_data *ch);
int Crash_delete_file(char *name);

View file

@ -1148,14 +1148,6 @@ void find_replacement(void *go, struct script_data *sc, trig_data *trig,
snprintf(str, slen, "%d", GET_OBJ_COST(o));
}
else if (!str_cmp(field, "cost_per_day")) {
if (subfield && *subfield) {
int addition = atoi(subfield);
GET_OBJ_RENT(o) = MAX(1, addition + GET_OBJ_RENT(o));
}
snprintf(str, slen, "%d", GET_OBJ_RENT(o));
}
else if (!str_cmp(field, "carried_by")) {
if (o->carried_by)
snprintf(str, slen,"%c%ld",UID_CHAR, char_script_id(o->carried_by));

View file

@ -270,7 +270,6 @@ static void make_corpse(struct char_data *ch)
GET_OBJ_VAL(corpse, 0) = 0; /* You can't store stuff in a corpse */
GET_OBJ_VAL(corpse, 3) = 1; /* corpse identifier */
GET_OBJ_WEIGHT(corpse) = GET_WEIGHT(ch) + IS_CARRYING_W(ch);
GET_OBJ_RENT(corpse) = 100000;
if (IS_NPC(ch))
GET_OBJ_TIMER(corpse) = CONFIG_MAX_NPC_CORPSE_TIME;
else

View file

@ -256,7 +256,7 @@ int save_objects(zone_rnum zone_num)
GET_OBJ_VAL(obj, 0), GET_OBJ_VAL(obj, 1),
GET_OBJ_VAL(obj, 2), GET_OBJ_VAL(obj, 3),
GET_OBJ_WEIGHT(obj), GET_OBJ_COST(obj),
GET_OBJ_RENT(obj), GET_OBJ_LEVEL(obj), GET_OBJ_TIMER(obj)
GET_OBJ_COST_PER_DAY(obj), GET_OBJ_LEVEL(obj), GET_OBJ_TIMER(obj)
);
/* Do we have script(s) attached? */

View file

@ -844,7 +844,7 @@ static int export_save_objects(zone_rnum zrnum)
fprintf(obj_file,
"%d %d %d %d\n",
GET_OBJ_WEIGHT(obj), GET_OBJ_COST(obj), GET_OBJ_RENT(obj), GET_OBJ_LEVEL(obj));
GET_OBJ_WEIGHT(obj), GET_OBJ_COST(obj), GET_OBJ_COST_PER_DAY(obj), GET_OBJ_LEVEL(obj));
/* Do we have script(s) attached? */
export_script_save_to_disk(obj_file, obj, OBJ_TRIGGER);

View file

@ -180,8 +180,8 @@ static void House_listrent(struct char_data *ch, room_vnum vnum)
loaded = objsave_parse_objects(fl);
for (current = loaded; current != NULL; current = current->next)
len += snprintf(buf+len, sizeof(buf)-len, " [%5d] (%5dau) %s\r\n",
GET_OBJ_VNUM(current->obj), GET_OBJ_RENT(current->obj), current->obj->short_description);
len += snprintf(buf+len, sizeof(buf)-len, " [%5d] %s\r\n",
GET_OBJ_VNUM(current->obj), current->obj->short_description);
/* now it's safe to free the obj_save_data list - all members of it
* have been put in the correct lists by obj_to_room()
@ -613,7 +613,7 @@ void House_list_guests(struct char_data *ch, int i, int quiet)
/*************************************************************************
* All code below this point and the code above, marked "CONVERSION" *
* can be removed after you have converted your house rent files using *
* can be removed after you have converted your house save files using *
* the command *
* hcontrol asciiconvert *
* *
@ -621,7 +621,7 @@ void House_list_guests(struct char_data *ch, int i, int quiet)
* After you have converted your house files, I suggest a reboot, which *
* will let your house files load on the next bootup. -Welcor *
************************************************************************/
/* Code for conversion to ascii house rent files. */
/* Code for conversion to ascii house save files. */
static void hcontrol_convert_houses(struct char_data *ch)
{
int i;
@ -689,7 +689,7 @@ static int ascii_convert_house(struct char_data *ch, obj_vnum vnum)
return (0);
if (ferror(in)) {
perror("SYSERR: Reading house file in House_load");
send_to_char(ch, "...read error in house rent file.\r\n");
send_to_char(ch, "...read error in house save file.\r\n");
free(outfile);
fclose(in);
fclose(out);
@ -700,7 +700,7 @@ static int ascii_convert_house(struct char_data *ch, obj_vnum vnum)
tmp = Obj_from_store(object, &i);
if (!objsave_save_obj_record(tmp, out, i))
{
send_to_char(ch, "...write error in house rent file.\r\n");
send_to_char(ch, "...write error in house save file.\r\n");
free(outfile);
fclose(in);
fclose(out);
@ -721,7 +721,7 @@ static int ascii_convert_house(struct char_data *ch, obj_vnum vnum)
return 1;
}
/* The circle 3.1 function for reading rent files. No longer used by the rent system. */
/* The circle 3.1 function for reading save files. No longer used by the current system. */
static struct obj_data *Obj_from_store(struct obj_file_elem object, int *location)
{
struct obj_data *obj;

View file

@ -373,7 +373,7 @@ static void check_idling(struct char_data *ch)
Crash_crashsave(ch);
char_from_room(ch);
char_to_room(ch, 1);
} else if (ch->char_specials.timer > CONFIG_IDLE_RENT_TIME) {
} else if (ch->char_specials.timer > (CONFIG_IDLE_VOID * 2)) {
if (IN_ROOM(ch) != NOWHERE)
char_from_room(ch);
char_to_room(ch, 3);
@ -386,11 +386,8 @@ static void check_idling(struct char_data *ch)
ch->desc->character = NULL;
ch->desc = NULL;
}
if (CONFIG_FREE_RENT)
Crash_rentsave(ch, 0);
else
Crash_idlesave(ch);
mudlog(CMP, MAX(LVL_GOD, GET_INVIS_LEV(ch)), TRUE, "%s force-rented and extracted (idle).", GET_NAME(ch));
Crash_idlesave(ch);
mudlog(CMP, MAX(LVL_GOD, GET_INVIS_LEV(ch)), TRUE, "%s idle-saved and extracted (idle).", GET_NAME(ch));
add_llog_entry(ch, LAST_IDLEOUT);
extract_char(ch);
}

View file

@ -350,7 +350,6 @@ static void postmaster_receive_mail(struct char_data *ch, struct char_data *mail
SET_BIT_AR(GET_OBJ_WEAR(obj), ITEM_WEAR_TAKE);
GET_OBJ_WEIGHT(obj) = 1;
GET_OBJ_COST(obj) = 30;
GET_OBJ_RENT(obj) = 10;
obj->main_description = read_delete(GET_IDNUM(ch));
if (obj->main_description == NULL)

View file

@ -53,7 +53,6 @@
#define MAX_OBJ_WEIGHT 1000000
#define MAX_OBJ_COST 2000000
#define MAX_OBJ_RENT 2000000
#define MAX_CONTAINER_SIZE 10000
#define MAX_MOB_GOLD 100000
@ -187,7 +186,6 @@ extern const char *nrm, *grn, *cyn, *yel;
#define OEDIT_WEAR 8
#define OEDIT_WEIGHT 9
#define OEDIT_COST 10
#define OEDIT_COSTPERDAY 11
#define OEDIT_TIMER 12
#define OEDIT_VALUE_1 13
#define OEDIT_VALUE_2 14
@ -368,35 +366,31 @@ extern const char *nrm, *grn, *cyn, *yel;
#define CEDIT_MAX_NPC_CORPSE_TIME 26
#define CEDIT_MAX_PC_CORPSE_TIME 27
#define CEDIT_IDLE_VOID 28
#define CEDIT_IDLE_RENT_TIME 29
#define CEDIT_IDLE_MAX_LEVEL 30
#define CEDIT_DTS_ARE_DUMPS 31
#define CEDIT_LOAD_INTO_INVENTORY 32
#define CEDIT_TRACK_THROUGH_DOORS 33
#define CEDIT_NO_MORT_TO_IMMORT 34
#define CEDIT_MAX_OBJ_SAVE 35
#define CEDIT_MIN_RENT_COST 36
#define CEDIT_AUTOSAVE_TIME 37
#define CEDIT_CRASH_FILE_TIMEOUT 38
#define CEDIT_RENT_FILE_TIMEOUT 39
#define CEDIT_MORTAL_START_ROOM 40
#define CEDIT_IMMORT_START_ROOM 41
#define CEDIT_FROZEN_START_ROOM 42
#define CEDIT_DONATION_ROOM_1 43
#define CEDIT_DONATION_ROOM_2 44
#define CEDIT_DONATION_ROOM_3 45
#define CEDIT_DFLT_PORT 46
#define CEDIT_MAX_PLAYING 47
#define CEDIT_MAX_FILESIZE 48
#define CEDIT_MAX_BAD_PWS 49
#define CEDIT_SITEOK_EVERYONE 50
#define CEDIT_NAMESERVER_IS_SLOW 51
#define CEDIT_USE_AUTOWIZ 52
#define CEDIT_MIN_WIZLIST_LEV 53
#define CEDIT_MAP_OPTION 54
#define CEDIT_MAP_SIZE 55
#define CEDIT_MINIMAP_SIZE 56
#define CEDIT_DEBUG_MODE 57
#define CEDIT_IDLE_MAX_LEVEL 29
#define CEDIT_DTS_ARE_DUMPS 30
#define CEDIT_LOAD_INTO_INVENTORY 31
#define CEDIT_TRACK_THROUGH_DOORS 32
#define CEDIT_NO_MORT_TO_IMMORT 33
#define CEDIT_AUTOSAVE_TIME 34
#define CEDIT_CRASH_FILE_TIMEOUT 35
#define CEDIT_MORTAL_START_ROOM 36
#define CEDIT_IMMORT_START_ROOM 37
#define CEDIT_FROZEN_START_ROOM 38
#define CEDIT_DONATION_ROOM_1 39
#define CEDIT_DONATION_ROOM_2 40
#define CEDIT_DONATION_ROOM_3 41
#define CEDIT_DFLT_PORT 42
#define CEDIT_MAX_PLAYING 43
#define CEDIT_MAX_FILESIZE 44
#define CEDIT_MAX_BAD_PWS 45
#define CEDIT_SITEOK_EVERYONE 46
#define CEDIT_NAMESERVER_IS_SLOW 47
#define CEDIT_USE_AUTOWIZ 48
#define CEDIT_MIN_WIZLIST_LEV 49
#define CEDIT_MAP_OPTION 50
#define CEDIT_MAP_SIZE 51
#define CEDIT_MINIMAP_SIZE 52
#define CEDIT_DEBUG_MODE 53
/* Hedit Submodes of connectedness. */
#define HEDIT_CONFIRM_SAVESTRING 0

View file

@ -1,6 +1,6 @@
/**************************************************************************
* File: objsave.c Part of tbaMUD *
* Usage: loading/saving player objects for rent and crash-save *
* Usage: loading/saving player objects for crash-save and login restore *
* *
* All rights reserved. See license for complete information. *
* *
@ -24,7 +24,6 @@
#include "genolc.h" /* for strip_cr and sprintascii */
/* these factors should be unique integers */
#define RENT_FACTOR 1
#define CRYO_FACTOR 4
#define LOC_INVENTORY 0
@ -36,6 +35,7 @@ static void auto_equip(struct char_data *ch, struct obj_data *obj, int location)
static void Crash_restore_weight(struct obj_data *obj);
static int Crash_load_objs(struct char_data *ch);
static int handle_obj(struct obj_data *obj, struct char_data *ch, int locate, struct obj_data **cont_rows);
static void Crash_write_header(struct char_data *ch, FILE *fp, int savecode);
/* Writes one object record to FILE. Old name: Obj_to_store().
* Updated to save all NUM_OBJ_VAL_POSITIONS values instead of only 4. */
@ -117,8 +117,6 @@ int objsave_save_obj_record(struct obj_data *obj, FILE *fp, int locate)
fprintf(fp, "Wght: %d\n", GET_OBJ_WEIGHT(obj));
if (GET_OBJ_COST(obj) != GET_OBJ_COST(temp))
fprintf(fp, "Cost: %d\n", GET_OBJ_COST(obj));
if (GET_OBJ_RENT(obj) != GET_OBJ_RENT(temp))
fprintf(fp, "Rent: %d\n", GET_OBJ_RENT(obj));
/* Permanent affects (array words) */
if (GET_OBJ_AFFECT(obj)[0] != GET_OBJ_AFFECT(temp)[0] ||
@ -272,7 +270,7 @@ int Crash_delete_crashfile(struct char_data *ch)
char filename[MAX_INPUT_LENGTH];
int numread;
FILE *fl;
int rentcode;
int savecode;
char line[READ_SIZE];
if (!get_filename(filename, sizeof(filename), CRASH_FILE, GET_NAME(ch)))
@ -288,9 +286,9 @@ int Crash_delete_crashfile(struct char_data *ch)
if (numread == FALSE)
return FALSE;
sscanf(line,"%d ",&rentcode);
sscanf(line,"%d ",&savecode);
if (rentcode == RENT_CRASH)
if (savecode == SAVE_CRASH)
Crash_delete_file(GET_NAME(ch));
return TRUE;
@ -301,7 +299,7 @@ int Crash_clean_file(char *name)
char filename[MAX_INPUT_LENGTH], filetype[20];
int numread;
FILE *fl;
int rentcode, timed, netcost, gold, account, nitems;
int savecode, timed, netcost, gold, account, nitems;
char line[READ_SIZE];
if (!get_filename(filename, sizeof(filename), CRASH_FILE, name))
@ -319,23 +317,27 @@ int Crash_clean_file(char *name)
if (numread == FALSE)
return FALSE;
sscanf(line, "%d %d %d %d %d %d",&rentcode,&timed,&netcost,
sscanf(line, "%d %d %d %d %d %d",&savecode,&timed,&netcost,
&gold,&account,&nitems);
if ((rentcode == RENT_CRASH) ||
(rentcode == RENT_FORCED) ||
(rentcode == RENT_TIMEDOUT) ) {
if ((savecode == SAVE_CRASH) ||
(savecode == SAVE_LOGOUT) ||
(savecode == SAVE_FORCED) ||
(savecode == SAVE_TIMEDOUT) ) {
if (timed < time(0) - (CONFIG_CRASH_TIMEOUT * SECS_PER_REAL_DAY)) {
Crash_delete_file(name);
switch (rentcode) {
case RENT_CRASH:
switch (savecode) {
case SAVE_CRASH:
strcpy(filetype, "crash");
break;
case RENT_FORCED:
strcpy(filetype, "forced rent");
case SAVE_LOGOUT:
strcpy(filetype, "legacy save");
break;
case RENT_TIMEDOUT:
strcpy(filetype, "idlesave");
case SAVE_FORCED:
strcpy(filetype, "idle save");
break;
case SAVE_TIMEDOUT:
strcpy(filetype, "idle save");
break;
default:
strcpy(filetype, "UNKNOWN!");
@ -344,13 +346,7 @@ int Crash_clean_file(char *name)
log(" Deleting %s's %s file.", name, filetype);
return TRUE;
}
/* Must retrieve rented items w/in 30 days */
} else if (rentcode == RENT_RENTED)
if (timed < time(0) - (CONFIG_RENT_TIMEOUT * SECS_PER_REAL_DAY)) {
Crash_delete_file(name);
log(" Deleting %s's rent file.", name);
return TRUE;
}
}
return FALSE;
}
@ -363,77 +359,9 @@ void update_obj_file(void)
Crash_clean_file(player_table[i].name);
}
void Crash_listrent(struct char_data *ch, char *name)
{
FILE *fl;
char filename[MAX_INPUT_LENGTH], buf[MAX_STRING_LENGTH], line[READ_SIZE];
obj_save_data *loaded, *current;
int rentcode = RENT_UNDEF, timed, netcost, gold, account, nitems, numread, len;
if (!get_filename(filename, sizeof(filename), CRASH_FILE, name))
return;
if (!(fl = fopen(filename, "r"))) {
send_to_char(ch, "%s has no rent file.\r\n", name);
return;
}
len = snprintf(buf, sizeof(buf),"%s\r\n", filename);
numread = get_line(fl, line);
/* Oops, can't get the data, punt. */
if (numread == FALSE) {
send_to_char(ch, "Error reading rent information.\r\n");
fclose(fl);
return;
}
sscanf(line,"%d %d %d %d %d %d",
&rentcode,&timed,&netcost,&gold,&account,&nitems);
switch (rentcode) {
case RENT_RENTED:
len += snprintf(buf+len, sizeof(buf)-len, "Rent\r\n");
break;
case RENT_CRASH:
len += snprintf(buf+len, sizeof(buf)-len,"Crash\r\n");
break;
case RENT_CRYO:
len += snprintf(buf+len, sizeof(buf)-len, "Cryo\r\n");
break;
case RENT_TIMEDOUT:
case RENT_FORCED:
len += snprintf(buf+len, sizeof(buf)-len, "TimedOut\r\n");
break;
default:
len += snprintf(buf+len, sizeof(buf)-len, "Undef\r\n");
break;
}
loaded = objsave_parse_objects(fl);
for (current = loaded; current != NULL; current=current->next)
len += snprintf(buf+len, sizeof(buf)-len, "[%5d] (%5dau) %-20s\r\n",
GET_OBJ_VNUM(current->obj),
GET_OBJ_RENT(current->obj),
current->obj->short_description);
/* Now it's safe to free the obj_save_data list and the objects on it. */
while (loaded != NULL) {
current = loaded;
loaded = loaded->next;
extract_obj(current->obj);
free(current);
}
page_string(ch->desc,buf,0);
fclose(fl);
}
/* Return values:
* 0 - successful load, keep char in rent room.
* 1 - load failure or load of crash items -- put char in temple.
* 2 - rented equipment lost (no $) */
* 0 - successful load, keep char in load room.
* 1 - load failure or load of crash items -- put char in temple. */
int Crash_load(struct char_data *ch)
{
return (Crash_load_objs(ch));
@ -469,6 +397,17 @@ static void Crash_restore_weight(struct obj_data *obj)
}
}
static void Crash_write_header(struct char_data *ch, FILE *fp, int savecode)
{
int timed = (int)time(0);
int netcost = 0;
int gold = ch ? GET_GOLD(ch) : 0;
int account = ch ? GET_BANK_GOLD(ch) : 0;
int nitems = 0;
fprintf(fp, "%d %d %d %d %d %d\n", savecode, timed, netcost, gold, account, nitems);
}
void Crash_crashsave(struct char_data *ch)
{
char buf[MAX_INPUT_LENGTH];
@ -484,8 +423,7 @@ void Crash_crashsave(struct char_data *ch)
if (!(fp = fopen(buf, "w")))
return;
/* Skip rent header logic — just write directly. */
fprintf(fp, "Crashsave for %s\n", GET_NAME(ch));
Crash_write_header(ch, fp, SAVE_CRASH);
for (j = 0; j < NUM_WEARS; j++)
if (GET_EQ(ch, j)) {
@ -507,22 +445,80 @@ void Crash_crashsave(struct char_data *ch)
REMOVE_BIT_AR(PLR_FLAGS(ch), PLR_CRASH);
}
/* Shortened because we don't handle rent in this game */
/* Shortened because we don't use storage fees in this game */
void Crash_idlesave(struct char_data *ch)
{
if (!ch || IS_NPC(ch))
return;
Crash_crashsave(ch);
char buf[MAX_INPUT_LENGTH];
int j;
FILE *fp;
if (!get_filename(buf, sizeof(buf), CRASH_FILE, GET_NAME(ch)))
return;
if (!(fp = fopen(buf, "w")))
return;
Crash_write_header(ch, fp, SAVE_FORCED);
for (j = 0; j < NUM_WEARS; j++)
if (GET_EQ(ch, j)) {
if (!Crash_save(GET_EQ(ch, j), fp, j + 1)) {
fclose(fp);
return;
}
Crash_restore_weight(GET_EQ(ch, j));
}
if (!Crash_save(ch->carrying, fp, 0)) {
fclose(fp);
return;
}
Crash_restore_weight(ch->carrying);
fprintf(fp, "$~\n");
fclose(fp);
REMOVE_BIT_AR(PLR_FLAGS(ch), PLR_CRASH);
}
/* Shortened because we don't handle rent in this game */
/* Shortened because we don't use storage fees in this game */
void Crash_rentsave(struct char_data *ch, int cost)
{
if (!ch || IS_NPC(ch))
return;
Crash_crashsave(ch);
char buf[MAX_INPUT_LENGTH];
int j;
FILE *fp;
if (!get_filename(buf, sizeof(buf), CRASH_FILE, GET_NAME(ch)))
return;
if (!(fp = fopen(buf, "w")))
return;
Crash_write_header(ch, fp, SAVE_LOGOUT);
for (j = 0; j < NUM_WEARS; j++)
if (GET_EQ(ch, j)) {
if (!Crash_save(GET_EQ(ch, j), fp, j + 1)) {
fclose(fp);
return;
}
Crash_restore_weight(GET_EQ(ch, j));
}
if (!Crash_save(ch->carrying, fp, 0)) {
fclose(fp);
return;
}
Crash_restore_weight(ch->carrying);
fprintf(fp, "$~\n");
fclose(fp);
REMOVE_BIT_AR(PLR_FLAGS(ch), PLR_CRASH);
}
void Crash_save_all(void)
@ -582,7 +578,7 @@ obj_save_data *objsave_parse_objects(FILE *fl)
if (pending_nest <= 0) {
if (loc < 0 || loc > NUM_WEARS) {
mudlog(NRM, LVL_IMMORT, TRUE,
"RENT-LOAD: bad locate %d for vnum %d; defaulting to inventory.",
"SAVE-LOAD: bad locate %d for vnum %d; defaulting to inventory.",
loc, GET_OBJ_VNUM(temp));
loc = 0;
}
@ -641,7 +637,7 @@ obj_save_data *objsave_parse_objects(FILE *fl)
vnum = strtol(line + 1, NULL, 10);
if (vnum <= 0) {
mudlog(NRM, LVL_IMMORT, TRUE, "RENT-LOAD: bad vnum header: '%s'", line);
mudlog(NRM, LVL_IMMORT, TRUE, "SAVE-LOAD: bad vnum header: '%s'", line);
temp = NULL;
pending_locate = 0;
pending_nest = 0;
@ -672,7 +668,7 @@ obj_save_data *objsave_parse_objects(FILE *fl)
if (!*tag) continue;
if (!temp) {
mudlog(NRM, LVL_IMMORT, TRUE, "RENT-LOAD: data before header ignored: '%s'", line);
mudlog(NRM, LVL_IMMORT, TRUE, "SAVE-LOAD: data before header ignored: '%s'", line);
continue;
}
@ -684,7 +680,7 @@ obj_save_data *objsave_parse_objects(FILE *fl)
if (pending_nest < 0) pending_nest = 0;
if (pending_nest > MAX_BAG_ROWS) {
mudlog(NRM, LVL_IMMORT, TRUE,
"RENT-LOAD: nest level %d too deep; clamping to %d.",
"SAVE-LOAD: nest level %d too deep; clamping to %d.",
pending_nest, MAX_BAG_ROWS);
pending_nest = MAX_BAG_ROWS;
}
@ -703,7 +699,7 @@ obj_save_data *objsave_parse_objects(FILE *fl)
GET_OBJ_COST(temp) = (int)strtol(payload, NULL, 10);
}
else if (!strcmp(tag, "Rent")) {
GET_OBJ_RENT(temp) = (int)strtol(payload, NULL, 10);
/* Legacy tag ignored (cost-per-day no longer used). */
}
else if (!strcmp(tag, "Type")) {
GET_OBJ_TYPE(temp) = (int)strtol(payload, NULL, 10);
@ -718,7 +714,7 @@ obj_save_data *objsave_parse_objects(FILE *fl)
if (i < TW_ARRAY_MAX) GET_OBJ_WEAR_AR(temp, i) = (bitvector_t)words[i];
else if (words[i])
mudlog(NRM, LVL_IMMORT, TRUE,
"RENT-LOAD: Wear word %d (%lu) truncated (TW_ARRAY_MAX=%d).",
"SAVE-LOAD: Wear word %d (%lu) truncated (TW_ARRAY_MAX=%d).",
i, words[i], TW_ARRAY_MAX);
}
#elif defined(GET_OBJ_WEAR_AR)
@ -735,7 +731,7 @@ obj_save_data *objsave_parse_objects(FILE *fl)
if (i < EF_ARRAY_MAX) GET_OBJ_EXTRA_AR(temp, i) = (bitvector_t)words[i];
else if (words[i])
mudlog(NRM, LVL_IMMORT, TRUE,
"RENT-LOAD: Extra word %d (%lu) truncated (EF_ARRAY_MAX=%d).",
"SAVE-LOAD: Extra word %d (%lu) truncated (EF_ARRAY_MAX=%d).",
i, words[i], EF_ARRAY_MAX);
}
#elif defined(GET_OBJ_EXTRA_AR)
@ -762,7 +758,7 @@ obj_save_data *objsave_parse_objects(FILE *fl)
commit_current();
}
else {
mudlog(NRM, LVL_IMMORT, TRUE, "RENT-LOAD: unknown tag '%s'", tag);
mudlog(NRM, LVL_IMMORT, TRUE, "SAVE-LOAD: unknown tag '%s'", tag);
}
}
@ -776,11 +772,9 @@ static int Crash_load_objs(struct char_data *ch) {
char filename[PATH_MAX];
char line[READ_SIZE];
char buf[MAX_STRING_LENGTH];
char str[64];
int i, num_of_days, orig_rent_code, num_objs=0;
unsigned long cost;
int i, orig_save_code, num_objs=0;
struct obj_data *cont_row[MAX_BAG_ROWS];
int rentcode = RENT_UNDEF;
int savecode = SAVE_UNDEF;
int timed=0,netcost=0,gold,account,nitems;
obj_save_data *loaded, *current;
@ -803,48 +797,36 @@ static int Crash_load_objs(struct char_data *ch) {
}
if (!get_line(fl, line))
mudlog(NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE, "Failed to read player's rent code: %s.", GET_NAME(ch));
mudlog(NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE, "Failed to read player's save code: %s.", GET_NAME(ch));
else
sscanf(line,"%d %d %d %d %d %d",&rentcode, &timed, &netcost,&gold,&account,&nitems);
sscanf(line,"%d %d %d %d %d %d",&savecode, &timed, &netcost,&gold,&account,&nitems);
if (rentcode == RENT_RENTED || rentcode == RENT_TIMEDOUT) {
sprintf(str, "%d", SECS_PER_REAL_DAY);
num_of_days = (int)((float) (time(0) - timed) / atoi(str));
cost = (unsigned int) (netcost * num_of_days);
if (cost > (unsigned int)GET_GOLD(ch) + (unsigned int)GET_BANK_GOLD(ch)) {
fclose(fl);
mudlog(BRF, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE,
"%s entering game, rented equipment lost (no $).", GET_NAME(ch));
Crash_crashsave(ch);
return 2;
} else {
GET_BANK_GOLD(ch) -= MAX(cost - GET_GOLD(ch), 0);
GET_GOLD(ch) = MAX(GET_GOLD(ch) - cost, 0);
save_char(ch);
}
}
switch (orig_rent_code = rentcode) {
case RENT_RENTED:
if (savecode == SAVE_LOGOUT || savecode == SAVE_TIMEDOUT) {
mudlog(NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE,
"%s un-renting and entering game.", GET_NAME(ch));
"%s entering game with legacy save code; no fees applied.", GET_NAME(ch));
}
switch (orig_save_code = savecode) {
case SAVE_LOGOUT:
mudlog(NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE,
"%s restoring saved items and entering game.", GET_NAME(ch));
break;
case RENT_CRASH:
case SAVE_CRASH:
mudlog(NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE,
"%s retrieving crash-saved items and entering game.", GET_NAME(ch));
break;
case RENT_CRYO:
case SAVE_CRYO:
mudlog(NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE,
"%s un-cryo'ing and entering game.", GET_NAME(ch));
"%s restoring cryo-saved items and entering game.", GET_NAME(ch));
break;
case RENT_FORCED:
case RENT_TIMEDOUT:
case SAVE_FORCED:
case SAVE_TIMEDOUT:
mudlog(NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE,
"%s retrieving force-saved items and entering game.", GET_NAME(ch));
"%s retrieving idle-saved items and entering game.", GET_NAME(ch));
break;
default:
mudlog(NRM, MAX(LVL_IMMORT, GET_INVIS_LEV(ch)), TRUE,
"WARNING: %s entering game with undefined rent code.", GET_NAME(ch));
"WARNING: %s entering game with undefined save code.", GET_NAME(ch));
break;
}
@ -861,12 +843,12 @@ static int Crash_load_objs(struct char_data *ch) {
}
/* Little hoarding check. -gg 3/1/98 */
mudlog(NRM, MAX(LVL_GOD, GET_INVIS_LEV(ch)), TRUE, "%s (level %d) has %d object%s (max %d).",
GET_NAME(ch), GET_LEVEL(ch), num_objs, num_objs != 1 ? "s" : "", CONFIG_MAX_OBJ_SAVE);
mudlog(NRM, MAX(LVL_GOD, GET_INVIS_LEV(ch)), TRUE, "%s (level %d) has %d object%s.",
GET_NAME(ch), GET_LEVEL(ch), num_objs, num_objs != 1 ? "s" : "");
fclose(fl);
if ((orig_rent_code == RENT_RENTED) || (orig_rent_code == RENT_CRYO))
if ((orig_save_code == SAVE_LOGOUT) || (orig_save_code == SAVE_CRYO))
return 0;
else
return 1;
@ -953,7 +935,7 @@ static int handle_obj(struct obj_data *temp, struct char_data *ch, int locate, s
if (locate < 0 && locate >= -MAX_BAG_ROWS) {
/* let obj be part of content list
but put it at the list's end thus having the items
in the same order as before renting */
in the same order as before saving */
obj_from_char(temp);
if ((obj1 = cont_row[-locate-1])) {
while (obj1->next_content)
@ -966,4 +948,3 @@ static int handle_obj(struct obj_data *temp, struct char_data *ch, int locate, s
return TRUE;
}

View file

@ -563,8 +563,7 @@ static void oedit_disp_menu(struct descriptor_data *d)
"%s7%s) Wear flags : %s%s\r\n"
"%s8%s) Weight : %s%d\r\n"
"%s9%s) Cost : %s%d\r\n"
"%sA%s) Cost/Day : %s%d\r\n"
"%sB%s) Timer : %s%d\r\n"
"%sA%s) Timer : %s%d\r\n"
"%sM%s) Min Level : %s%d\r\n"
"%sP%s) Perm Affects: %s%s\r\n"
"%sS%s) Script : %s%s\r\n"
@ -574,7 +573,6 @@ static void oedit_disp_menu(struct descriptor_data *d)
grn, nrm, cyn, buf1,
grn, nrm, cyn, GET_OBJ_WEIGHT(obj),
grn, nrm, cyn, GET_OBJ_COST(obj),
grn, nrm, cyn, GET_OBJ_RENT(obj),
grn, nrm, cyn, GET_OBJ_TIMER(obj),
grn, nrm, cyn, GET_OBJ_LEVEL(obj),
grn, nrm, cyn, buf2,
@ -659,7 +657,7 @@ void oedit_parse(struct descriptor_data *d, char *arg)
case '4':
OLC_MODE(d) = OEDIT_MAINDESC;
send_editor_help(d);
write_to_output(d, "Enter action description:\r\n\r\n");
write_to_output(d, "Enter main description:\r\n\r\n");
if (OLC_OBJ(d)->main_description) {
write_to_output(d, "%s", OLC_OBJ(d)->main_description);
oldtext = strdup(OLC_OBJ(d)->main_description);
@ -689,10 +687,6 @@ void oedit_parse(struct descriptor_data *d, char *arg)
OLC_MODE(d) = OEDIT_COST;
break;
case 'a': case 'A':
write_to_output(d, "Enter cost per day : ");
OLC_MODE(d) = OEDIT_COSTPERDAY;
break;
case 'b': case 'B':
write_to_output(d, "Enter timer : ");
OLC_MODE(d) = OEDIT_TIMER;
break;
@ -875,13 +869,6 @@ void oedit_parse(struct descriptor_data *d, char *arg)
oedit_disp_menu(d);
return;
case OEDIT_COSTPERDAY:
GET_OBJ_RENT(OLC_OBJ(d)) = LIMIT(atoi(arg), 0, MAX_OBJ_RENT);
OLC_DIRTY(d) = 1;
OLC_MODE(d) = OEDIT_MAIN_MENU;
oedit_disp_menu(d);
return;
case OEDIT_TIMER:
GET_OBJ_TIMER(OLC_OBJ(d)) = LIMIT(atoi(arg), 0, MAX_OBJ_TIMER);
OLC_DIRTY(d) = 1;

View file

@ -85,9 +85,9 @@ static struct obj_data *roomsave_read_list_ctx(FILE *fl, int stop_on_E)
break;
}
/* Parse object header: O vnum timer weight cost rent */
int vnum, timer, weight, cost, rent;
if (sscanf(line, "O %d %d %d %d %d", &vnum, &timer, &weight, &cost, &rent) != 5)
/* Parse object header: O vnum timer weight cost unused */
int vnum, timer, weight, cost, unused_cost;
if (sscanf(line, "O %d %d %d %d %d", &vnum, &timer, &weight, &cost, &unused_cost) != 5)
continue;
/* IMPORTANT: read by VNUM (VIRTUAL), not real index */
@ -110,7 +110,7 @@ static struct obj_data *roomsave_read_list_ctx(FILE *fl, int stop_on_E)
GET_OBJ_TIMER(obj) = timer;
GET_OBJ_WEIGHT(obj) = weight;
GET_OBJ_COST(obj) = cost;
GET_OBJ_RENT(obj) = rent;
GET_OBJ_COST_PER_DAY(obj) = 0;
/* Clear array flags so missing slots don't keep proto bits */
#ifdef EF_ARRAY_MAX
@ -198,7 +198,7 @@ static struct obj_data *roomsave_read_list(FILE *fl)
/* ---------- Minimal line format ----------
#R <vnum> <unix_time>
O <vnum> <timer> <extra_flags> <wear_flags> <weight> <cost> <rent>
O <vnum> <timer> <extra_flags> <wear_flags> <weight> <cost> <unused>
V <i> <val[i]> ; repeated for all value slots present on this obj
B ; begin contents of this object (container)
E ; end contents of this object
@ -234,7 +234,7 @@ static void write_one_object(FILE *fl, struct obj_data *obj) {
GET_OBJ_TIMER(obj),
GET_OBJ_WEIGHT(obj),
GET_OBJ_COST(obj),
GET_OBJ_RENT(obj));
GET_OBJ_COST_PER_DAY(obj));
/* Extra flags array */
#if defined(EF_ARRAY_MAX) && defined(GET_OBJ_EXTRA_AR)

View file

@ -319,8 +319,8 @@ ASPELL(spell_identify)
sprintbitarray(GET_OBJ_EXTRA(obj), extra_bits, EF_ARRAY_MAX, bitbuf);
send_to_char(ch, "Item is: %s\r\n", bitbuf);
send_to_char(ch, "Weight: %d, Value: %d, Rent: %d, Min. level: %d\r\n",
GET_OBJ_WEIGHT(obj), GET_OBJ_COST(obj), GET_OBJ_RENT(obj), GET_OBJ_LEVEL(obj));
send_to_char(ch, "Weight: %d, Value: %d, Min. level: %d\r\n",
GET_OBJ_WEIGHT(obj), GET_OBJ_COST(obj), GET_OBJ_LEVEL(obj));
switch (GET_OBJ_TYPE(obj)) {
case ITEM_SCROLL:

View file

@ -17,7 +17,7 @@
#include <time.h>
/** If you want equipment to be automatically equipped to the same place
* it was when players rented, set the define below to 1 because
* it was when players saved, set the define below to 1 because
* TRUE/FALSE aren't defined yet. */
#define USE_AUTOEQ 1
@ -424,7 +424,7 @@
/* Extra object flags: used by obj_data.obj_flags.extra_flags */
#define ITEM_GLOW 0 /**< Item is glowing */
#define ITEM_HUM 1 /**< Item is humming */
#define ITEM_NORENT 2 /**< Item cannot be rented */
#define ITEM_UNUSED2 2 /**< Reserved (unused) */
#define ITEM_NODONATE 3 /**< Item cannot be donated */
#define ITEM_NOINVIS 4 /**< Item cannot be made invis */
#define ITEM_INVISIBLE 5 /**< Item is invisible */
@ -533,13 +533,13 @@
#define SKY_RAINING 2 /**< Weather = Rain */
#define SKY_LIGHTNING 3 /**< Weather = Lightning storm */
/* Rent codes */
#define RENT_UNDEF 0 /**< Character inv save status = undefined */
#define RENT_CRASH 1 /**< Character inv save status = game crash */
#define RENT_RENTED 2 /**< Character inv save status = rented */
#define RENT_CRYO 3 /**< Character inv save status = cryogenics */
#define RENT_FORCED 4 /**< Character inv save status = forced rent */
#define RENT_TIMEDOUT 5 /**< Character inv save status = timed out */
/* Save codes (legacy) */
#define SAVE_UNDEF 0 /**< Character inv save status = undefined */
#define SAVE_CRASH 1 /**< Character inv save status = game crash */
#define SAVE_LOGOUT 2 /**< Character inv save status = legacy save */
#define SAVE_CRYO 3 /**< Character inv save status = cryogenics */
#define SAVE_FORCED 4 /**< Character inv save status = forced save */
#define SAVE_TIMEDOUT 5 /**< Character inv save status = timed out */
/* Settings for Bit Vectors */
#define RF_ARRAY_MAX 4 /**< # Bytes in Bit vector - Room flags */
@ -711,7 +711,7 @@ struct obj_flag_data
int extra_flags[EF_ARRAY_MAX]; /**< If it hums, glows, etc. */
int weight; /**< Weight of the object */
int cost; /**< Value when sold */
int cost_per_day; /**< Rent cost per real day */
int cost_per_day; /**< Legacy per-day value (unused) */
int timer; /**< Timer for object */
int bitvector[AF_ARRAY_MAX]; /**< Affects characters */
};
@ -776,7 +776,7 @@ struct obj_file_elem
struct obj_affected_type affected[MAX_OBJ_AFFECT]; /**< Affects to mobs */
};
/** Header block for rent files.
/** Header block for legacy save files.
* DO NOT CHANGE the structure if you are using binary object files
* and already have a player base and don't want to do a player wipe.
* If you are using binary player files, feel free to turn the spare
@ -784,10 +784,10 @@ struct obj_file_elem
* int datatype.
* NOTE: This is *not* used with the ascii playerfiles.
* NOTE 2: This structure appears to be unused in this codebase? */
struct rent_info
struct save_info
{
int time;
int rentcode; /**< How this character rented */
int savecode; /**< How this character saved */
int net_cost_per_diem; /**< ? Appears to be unused ? */
int gold; /**< ? Appears to be unused ? */
int account; /**< ? Appears to be unused ? */
@ -1375,7 +1375,6 @@ struct game_data
int max_npc_corpse_time; /**< Num tics before NPC corpses decompose*/
int max_pc_corpse_time; /**< Num tics before PC corpse decomposes.*/
int idle_void; /**< Num tics before PC sent to void(idle)*/
int idle_rent_time; /**< Num tics before PC is autorented. */
int idle_max_level; /**< Level of players immune to idle. */
int dts_are_dumps; /**< Should items in dt's be junked? */
int load_into_inventory; /**< Objects load in immortals inventory. */
@ -1394,16 +1393,12 @@ struct game_data
char *NOEFFECT; /**< 'Nothing seems to happen.' */
};
/** The rent and crashsave options. */
/** Crashsave options. */
struct crash_save_data
{
int free_rent; /**< Should the MUD allow rent for free? */
int max_obj_save; /**< Max items players can rent. */
int min_rent_cost; /**< surcharge on top of item costs. */
int auto_save; /**< Does the game automatically save ppl? */
int autosave_time; /**< if auto_save=TRUE, how often? */
int crash_file_timeout; /**< Life of crashfiles and idlesaves. */
int rent_file_timeout; /**< Lifetime of normal rent files in days */
};
/** Important room numbers. This structure stores vnums, not real array
@ -1464,7 +1459,7 @@ struct config_data
char *CONFFILE;
/** In-game specific global settings, such as allowing player killing. */
struct game_data play;
/** How is renting, crash files, and object saving handled? */
/** How are crash files and object saving handled? */
struct crash_save_data csd;
/** Special designated rooms, like start rooms, and donation rooms. */
struct room_numbers room_nums;

View file

@ -781,8 +781,8 @@ do \
#define GET_OBJ_TYPE(obj) ((obj)->obj_flags.type_flag)
/** Cost of obj. */
#define GET_OBJ_COST(obj) ((obj)->obj_flags.cost)
/** Cost per day to rent obj, if rent is turned on. */
#define GET_OBJ_RENT(obj) ((obj)->obj_flags.cost_per_day)
/** Per-day value, kept for legacy object data. */
#define GET_OBJ_COST_PER_DAY(obj) ((obj)->obj_flags.cost_per_day)
/** Affect flags on obj. */
#define GET_OBJ_AFFECT(obj) ((obj)->obj_flags.bitvector)
/** Extra flags bit array on obj. */
@ -1036,8 +1036,6 @@ do \
#define CONFIG_MAX_PC_CORPSE_TIME config_info.play.max_pc_corpse_time
/** How long can a pc be idled before being pulled into the void? */
#define CONFIG_IDLE_VOID config_info.play.idle_void
/** How long until the idle pc is force rented? */
#define CONFIG_IDLE_RENT_TIME config_info.play.idle_rent_time
/** What level and above is immune to idle outs? */
#define CONFIG_IDLE_MAX_LEVEL config_info.play.idle_max_level
/** Are death traps dumps? */
@ -1071,20 +1069,12 @@ do \
#define CONFIG_SCRIPT_PLAYERS config_info.play.script_players
/* Crash Saves */
/** Get free rent setting. */
#define CONFIG_FREE_RENT config_info.csd.free_rent
/** Get max number of objects to save. */
#define CONFIG_MAX_OBJ_SAVE config_info.csd.max_obj_save
/** Get minimum cost to rent. */
#define CONFIG_MIN_RENT_COST config_info.csd.min_rent_cost
/** Get the auto save setting. */
#define CONFIG_AUTO_SAVE config_info.csd.auto_save
/** Get the auto save frequency. */
#define CONFIG_AUTOSAVE_TIME config_info.csd.autosave_time
/** Get the length of time to hold crash files. */
#define CONFIG_CRASH_TIMEOUT config_info.csd.crash_file_timeout
/** Get legnth of time to hold rent files. */
#define CONFIG_RENT_TIMEOUT config_info.csd.rent_file_timeout
/* Room Numbers */
/** Get the mortal start room. */