mirror of
https://github.com/tbamud/tbamud.git
synced 2026-03-22 12:16:34 +01:00
Alignment update 1
This commit is contained in:
parent
b186c7e87c
commit
59a38beb3d
26 changed files with 252 additions and 466 deletions
|
|
@ -60,13 +60,18 @@ Changes in v1.1.0-alpha:
|
|||
* "audit ac" command for immortals (formerly "acaudit"), allowing for further audit commands in the future
|
||||
* Minor score output change to only show quest status while on a quest, PC/NPC name, sdesc, and current ldesc
|
||||
* Added ability to reroll initial stats if they are not to player's liking, and undo reroll if needed
|
||||
* Removed alignment from game - no more GOOD/EVIL flags and restrictions on items/shops
|
||||
|
||||
Features to be implemented in the next few releases:
|
||||
|
||||
* Updated door code so that it can be closed/locked/saved with rsave code
|
||||
* SECTOR/ROOM type changes to make terrain movement easier or more difficult
|
||||
* Subclass selection to personalize character further
|
||||
* Combat is slowed down so it isn't over in < 15 seconds (unless you're far outmatched)
|
||||
* Mounts added to help with long trips
|
||||
* Wagons added to help with caravans
|
||||
* BUILDING object type created to allow enter/leave
|
||||
* Updated BUILDING object type so that it can be damaged and no longer enterable (but someone can leave at cost to health)
|
||||
* Plantlife introduced
|
||||
* Updated lockpicking skill
|
||||
* Trap as a skill - one focused on city and one focused on desert
|
||||
|
|
@ -81,7 +86,7 @@ Features to be implemented in the next few releases:
|
|||
* Haggling and bartering system
|
||||
* New calendar and moon cycles
|
||||
* Heat based on time of day increases/decreases, changing hunger/thirst levels
|
||||
* Sandstorms limiting visibility
|
||||
* Weather updates and sandstorms limiting visibility
|
||||
* Shaded rooms providing bonuses to regeneration
|
||||
* Criminal system for cities and jails
|
||||
* Basic Psionics
|
||||
|
|
|
|||
|
|
@ -632,7 +632,7 @@ The format of a mobile is:
|
|||
~
|
||||
<detailed description>
|
||||
~
|
||||
<mob flags> <affect flags> <alignment> <type flag>
|
||||
<mob flags> <affect flags> <reserved> <type flag>
|
||||
{type-specific information; see below for details}
|
||||
|
||||
Virtual Number This number is critical; it is the identity of the mobile within
|
||||
|
|
@ -687,9 +687,9 @@ L) NPC Flags : ISNPC
|
|||
its hit points. If the WIMPY bit is set in conjunction with
|
||||
any of the forms of the AGGRESSIVE bit, the mob will only
|
||||
attack mobs that are unconscious (sleeping or incapacitated).
|
||||
9) AGGR_EVIL Mob will attack players that are evil-aligned.
|
||||
10) AGGR_GOOD Mob will attack players that are good-aligned.
|
||||
11) AGGR_NEU Mob will attack players that are neutrally aligned.
|
||||
9) RESERVED Not used.
|
||||
10) RESERVED Not used.
|
||||
11) RESERVED Not used.
|
||||
12) MEMORY Mob will remember players that initiate attacks on it, and will
|
||||
attack that player if it ever runs into him again.
|
||||
13) HELPER The mob will attack any player it sees in the room that is
|
||||
|
|
@ -710,7 +710,7 @@ following values:
|
|||
M) AFF Flags : NOBITS
|
||||
1) BLIND Mob is blind.
|
||||
2) INVIS Mob is invisible.
|
||||
3) DET-ALIGN NOT USED.
|
||||
3) RESERVED NOT USED.
|
||||
4) DET-INVIS Mob can see invisible characters and objects.
|
||||
5) DET-MAGIC Mob is sensitive to magical presence.
|
||||
6) SENSE-LIFE Mob can sense hidden life.
|
||||
|
|
@ -721,23 +721,17 @@ M) AFF Flags : NOBITS
|
|||
10) CURSE Mob is cursed.
|
||||
11) INFRA Mob can see in dark.
|
||||
12) POISON Reserved for internal use. Do not set.
|
||||
13) PROT-EVIL Mob is protected from evil characters.
|
||||
14) PROT-GOOD Mob is protected from good characters.
|
||||
13) RESERVED NOT USED.
|
||||
14) RESERVED NOT USED.
|
||||
15) SLEEP Reserved for internal use. Do not set.
|
||||
16) NO_TRACK Mob cannot be tracked.
|
||||
17) UNUSED Unused (room for future expansion).
|
||||
18) UNUSED Unused (room for future expansion).
|
||||
17) FLY Mob is flying.
|
||||
18) SCUBA Mob can breathe underwater.
|
||||
19) SNEAK Mob can move quietly without room being informed.
|
||||
20) HIDE Mob is hidden; can only be seen with sense life.
|
||||
21) UNUSED Unused (room for future expansion).
|
||||
21) SCAN Actively scanning for hidden threats.
|
||||
22) CHARM Reserved for internal use. Do not set.
|
||||
|
||||
Alignment A number from -1000 to 1000 representing the mob’s initial alignment.
|
||||
|
||||
-1000.....-350 Evil
|
||||
-349......349 Neutral
|
||||
350.....1000 Good
|
||||
|
||||
Type Flag This flag is a single letter which indicates what type of mobile is
|
||||
currently being defined, and controls what information tbaMUD expects to find
|
||||
next (i.e., in the file from the current point to the end of the current
|
||||
|
|
@ -748,7 +742,7 @@ Standard tbaMUD supports two types of mobiles: S (for Simple), and E (for Enhanc
|
|||
4.2 Type S Mobiles
|
||||
For type S mobs, the type-specific information should be in the following format:
|
||||
|
||||
<mob flags> <affect flags> <alignment> S
|
||||
<mob flags> <affect flags> <reserved> S
|
||||
<level> <thaco> <armor class> <hitpoints> <damage>
|
||||
<coins> <experience points>
|
||||
<load position> <default position> <sex>
|
||||
|
|
@ -840,13 +834,13 @@ A beastly fido is mucking through the garbage looking for food here.
|
|||
The fido is a small dog that has a foul smell and pieces of rotted meat
|
||||
hanging around his teeth.
|
||||
~
|
||||
65738 0 0 0 65536 0 0 0 -200 S
|
||||
65738 0 0 0 65536 0 0 0 0 S
|
||||
1 20 9 0d0+10 1d2+0
|
||||
10 100
|
||||
8 8 1
|
||||
|
||||
This is mobile vnum 3062. The Fido has mob and affect flags set and has an
|
||||
initial alignment of -200. After the S flag we see that the Fido is level 1,
|
||||
This is mobile vnum 3062. The Fido has mob and affect flags set and has a
|
||||
reserved value of 0. After the S flag we see that the Fido is level 1,
|
||||
has a THAC0 of 20, an Armor Class of 9, 0d0+10 hit points (10 hitpoints), and
|
||||
will do 1d2 hit points of bare hand damage per round. The Fido has 10 coins
|
||||
and 100 experience points, has a load position and default position of
|
||||
|
|
@ -865,7 +859,7 @@ literal letter Emust then come after all E-specs to signal the end of the mob.
|
|||
|
||||
The format of an E mobile is as follows:
|
||||
|
||||
<mob flags> <affect flags> <alignment> E
|
||||
<mob flags> <affect flags> <reserved> E
|
||||
<level> <hitroll> <armor class> <hitpoints> <damage>
|
||||
<coins> <experience points>
|
||||
<load position> <default position> <sex>
|
||||
|
|
@ -886,7 +880,7 @@ A beastly fido is mucking through the garbage looking for food here.
|
|||
The fido is a small dog that has a foul smell and pieces of rotted meat
|
||||
hanging around his teeth.
|
||||
~
|
||||
65738 0 0 0 65536 0 0 0 -200 E
|
||||
65738 0 0 0 65536 0 0 0 0 E
|
||||
1 20 9 0d0+10 1d2+0
|
||||
10 100
|
||||
8 8 1
|
||||
|
|
@ -1026,16 +1020,16 @@ 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) UNUSED Reserved (unused).
|
||||
3) RESERVED Reserved (unused).
|
||||
4) NODONATE Item cannot be donated.
|
||||
5) NOINVIS Item cannot be made invisible.
|
||||
6) INVISIBLE Item is invisible.
|
||||
7) MAGIC Item has a magical aura and cannot be enchanted.
|
||||
8) NODROP Item is cursed and cannot be removed or dropped.
|
||||
9) BLESS Item is blessed (cosmetic).
|
||||
10) ANTI_GOOD Item cannot be used by good-aligned characters.
|
||||
11) ANTI_EVIL Item cannot be used by evil-aligned characters.
|
||||
12) ANTI_NEUTRAL Item cannot be used by neutral align characters.
|
||||
10) RESERVED Not used.
|
||||
11) RESERVED Not used.
|
||||
12) RESERVED Not used.
|
||||
13) ANTI_MAGIC_USER Item cannot be used by the Mage class.
|
||||
14) ANTI_CLERIC Item cannot be used by the Cleric class.
|
||||
15) ANTI_THIEF Item cannot be used by the Thief class.
|
||||
|
|
@ -1611,16 +1605,16 @@ monty-haul campaigns.
|
|||
Shop Keeper Mobile Number Virtual number of the shopkeeper mobile.
|
||||
|
||||
With Who Bitvector A bitvector (see section 2.4 on ‘Using Bitvectors’) used to
|
||||
designate certain alignments or classes that the shop will not trade with, with
|
||||
designate certain classes that the shop will not trade with, with
|
||||
the following values:
|
||||
|
||||
E) No Trade With : NOBITS
|
||||
Designates certain alignments or classes that the shop will not trade with:
|
||||
Designates certain classes that the shop will not trade with:
|
||||
|
||||
1) Good 2) Evil
|
||||
3) Neutral 4) Magic User
|
||||
5) Cleric 6) Thief
|
||||
7) Warrior
|
||||
1) Sorceror 2) Cleric
|
||||
3) Rogue 4) Fighter
|
||||
5) Barbarian 6) Ranger
|
||||
7) Bard 8) Druid
|
||||
|
||||
Shop Room 1...Shop Room n The virtual numbers the mobile must be in for the
|
||||
shop to be effective. (So transferred shopkeepers can’t sell in the desert).
|
||||
|
|
@ -1737,15 +1731,16 @@ Shop Keeper Mobile Number Virtual number of the shopkeeper mobile.
|
|||
|
||||
With Who Bitvector
|
||||
A bitvector (see section ‘Using Bitvectors’) used to designate certain
|
||||
alignments or classes that the shop will not trade with, with the following
|
||||
classes that the shop will not trade with, with the following
|
||||
values:
|
||||
1 a NOGOOD Keeper won’t trade with positively-aligned players.
|
||||
2 b NOEVIL Keeper won’t trade with evilly-aligned players.
|
||||
4 c NONEUTRAL Keeper won’t trade with neutrally-aligned players.
|
||||
8 d NOMAGIC_USER Keeper won’t trade with the Mage class.
|
||||
8 d NOSORCEROR Keeper won’t trade with the Sorceror class.
|
||||
16 e NOCLERIC Keeper won’t trade with the Cleric class.
|
||||
32 f NOTHIEF Keeper won’t trade with the Thief class.
|
||||
64 g NOWARRIOR Keeper won’t trade with the Warrior class.
|
||||
32 f NOROGUE Keeper won’t trade with the Rogue class.
|
||||
64 g NOFIGHTER Keeper won’t trade with the Fighter class.
|
||||
128 h NOBARBARIAN Keeper won’t trade with the Barbarian class.
|
||||
256 i NORANGER Keeper won’t trade with the Ranger class.
|
||||
512 j NOBARD Keeper won’t trade with the Bard class.
|
||||
1024 k NODRUID Keeper won’t trade with the Druid class.
|
||||
|
||||
Shop Room Number
|
||||
The virtual number the mobile must be in for the shop to be effective. (So
|
||||
|
|
@ -1848,18 +1843,18 @@ particular MUD. Check with your implementor for details.
|
|||
7) charm person 8) chill touch 9) clone
|
||||
10) color spray 11) control weather 12) create food
|
||||
13) create water 14) cure blind 15) cure critic
|
||||
16) cure light 17) curse 18) detect alignment
|
||||
16) cure light 17) curse 18) reserved
|
||||
19) detect invisibility 20) detect magic 21) detect poison
|
||||
22) dispel evil 23) earthquake 24) enchant weapon
|
||||
22) reserved 23) earthquake 24) enchant weapon
|
||||
25) energy drain 26) fireball 27) harm
|
||||
28) heal 29) invisibility 30) lightning bolt
|
||||
31) locate object 32) magic missile 33) poison
|
||||
34) protection from evil 35) remove curse 36) sanctuary
|
||||
34) reserved 35) remove curse 36) sanctuary
|
||||
37) shocking grasp 38) sleep 39) strength
|
||||
40) summon 41) !UNUSED! 42) word of recall
|
||||
40) summon 41) !RESERVED! 42) word of recall
|
||||
43) remove poison 44) sense life 45) animate dead
|
||||
46) dispel good 47) group armor 48) group heal
|
||||
49) !UNUSED! 50) infravision 51) waterwalk
|
||||
46) reserved 47) group armor 48) group heal
|
||||
49) !RESERVED! 50) infravision 51) waterwalk
|
||||
|
||||
B Item Values for Drink Containers
|
||||
|
||||
|
|
|
|||
|
|
@ -813,7 +813,7 @@ equips it to the character for the specified location. unequip_char() does the
|
|||
opposite; it removes the object from the character’s equipment list and returns it
|
||||
as a free-floating object. The object being unequipped must be placed elsewhere or
|
||||
destroyed. Note that some objects may not be equipped by characters of certain
|
||||
classes and/or alignments.
|
||||
classes.
|
||||
|
||||
void obj_to_char (struct obj_data *object, struct char_data *ch)
|
||||
|
||||
|
|
@ -1427,9 +1427,9 @@ search it for "ITEM_x (extra bits)". Add a string giving a short name for the ne
|
|||
ITEM_ANTI_xxx flag, in the appropriate order, before the "\n" entry near the
|
||||
bottom.
|
||||
|
||||
The shops have a similar "don’t trade" setup, so search shop.hfor "TRADE_NOGOOD"
|
||||
The shops have a similar "don’t trade" setup, so search shop.h for "TRADE_NOSORCEROR"
|
||||
to add a new TRADE_NOxxx item to the list for the class to be added. Below that
|
||||
(near "NOTRADE_GOOD"), a line will need to be added for each new class so the ’no
|
||||
(near "NOTRADE_SORCEROR"), a line will need to be added for each new class so the ’no
|
||||
trade’ status of a shop can be tested for the class.
|
||||
|
||||
With the definitions in shop.h, the shop code in shop.c can then be modified to
|
||||
|
|
|
|||
|
|
@ -16,11 +16,11 @@ Message List:
|
|||
0 ) [5 ] 1, burning hands 30) [314] 2, Unknown
|
||||
1 ) [6 ] 1, call lightning 31) [399] 2, Unknown
|
||||
2 ) [8 ] 1, chill touch 32) [33 ] 1, poison
|
||||
3 ) [10 ] 1, color spray 33) [202] 1, !UNUSED!
|
||||
4 ) [22 ] 1, dispel evil 34) [203] 1, !UNUSED!
|
||||
5 ) [23 ] 1, earthquake 35) [204] 1, !UNUSED!
|
||||
6 ) [25 ] 1, energy drain 36) [205] 1, !UNUSED!
|
||||
7 ) [26 ] 1, fireball 37) [206] 1, !UNUSED!
|
||||
3 ) [10 ] 1, color spray 33) [202] 1, !RESERVED!
|
||||
4 ) [22 ] 1, dispel 34) [203] 1, !RESERVED!
|
||||
5 ) [23 ] 1, earthquake 35) [204] 1, !RESERVED!
|
||||
6 ) [25 ] 1, energy drain 36) [205] 1, !RESERVED!
|
||||
7 ) [26 ] 1, fireball 37) [206] 1, !RESERVED!
|
||||
|
||||
=========================================
|
||||
|
||||
|
|
|
|||
|
|
@ -9,17 +9,16 @@ rumble@tbamud.com -- Rumble
|
|||
|
||||
1. Errant Rooms (show error command)
|
||||
2. SYSERR: Object # (oedit-s-desc) doesn't have drink type as last alias.
|
||||
3. SYSERR: Mob # both Aggressive and Aggressive_to_Alignment.
|
||||
4. SYSERR: Object # (oedit-s-desc) has out of range level #.
|
||||
5. SYSERR: Object # (oedit-s-desc) has negative weight (-2147483644).
|
||||
3. SYSERR: Object # (oedit-s-desc) has out of range level #.
|
||||
4. SYSERR: Object # (oedit-s-desc) has negative weight (-2147483644).
|
||||
SYSERR: Object # (oedit-s-desc) has out of range level #2147483647.
|
||||
6. SYSERR: Object # (oedit-s-desc) uses 'UNDEFINED' spell #.
|
||||
7. SYSERR: Object # (oedit-s-desc) contains (5) more than maximum (3).
|
||||
8. Char is already equipped: (medit-s-desc), (oedit-s-desc)
|
||||
9. SYSERR: Attempt to assign spec to non-existant mob #
|
||||
10. No associated object exists when attempting to create a board [vnum #].
|
||||
11. SYSERR: Mob using >'((ch)-)player_specials....
|
||||
12: SYSERR: Object # (keyword) is type NOTE and has extra description with
|
||||
5. SYSERR: Object # (oedit-s-desc) uses 'UNDEFINED' spell #.
|
||||
6. SYSERR: Object # (oedit-s-desc) contains (5) more than maximum (3).
|
||||
7. Char is already equipped: (medit-s-desc), (oedit-s-desc)
|
||||
8. SYSERR: Attempt to assign spec to non-existant mob #
|
||||
9. No associated object exists when attempting to create a board [vnum #].
|
||||
10. SYSERR: Mob using >'((ch)-)player_specials....
|
||||
11. SYSERR: Object # (keyword) is type NOTE and has extra description with
|
||||
same name (keyword)
|
||||
|
||||
1: Errant Rooms
|
||||
|
|
@ -44,30 +43,23 @@ the drink aliases).
|
|||
i.e. a shot of whisky should have the namelist: whisky shot whisky
|
||||
a cup of slime mold juice namelist should be: juice cup slime juice
|
||||
|
||||
3: SYSERR: Mob # both Aggressive and Aggressive_to_Alignment.
|
||||
|
||||
Another harmless error. If your mob is aggressive there is no need to also
|
||||
make it aggressive to certain alignments since AGGR means it will attack any
|
||||
player it can see. Choose to make it aggressive to an alignment or aggressive
|
||||
to all.
|
||||
|
||||
4: SYSERR: Object # (oedit-s-desc) has out of range level #.
|
||||
3: SYSERR: Object # (oedit-s-desc) has out of range level #.
|
||||
|
||||
A simple one. Limit spell levels to the levels available, on tbaMUD that
|
||||
would be 1-34.
|
||||
|
||||
5: SYSERR: Object # (oedit-s-desc) has negative weight (-2147483644).
|
||||
4: SYSERR: Object # (oedit-s-desc) has negative weight (-2147483644).
|
||||
SYSERR: Object # (oedit-s-desc) has out of range level #2147483647.
|
||||
|
||||
These are really annoying. This happens on older versions of CircleMUD when
|
||||
you use numbers larger than necessary. This will actually crash many older
|
||||
versions of CircleMUD. Just do not do it. Use realistic numbers.
|
||||
|
||||
6: SYSERR: Object # (oedit-s-desc) uses 'UNDEFINED' spell #.
|
||||
5: SYSERR: Object # (oedit-s-desc) uses 'UNDEFINED' spell #.
|
||||
|
||||
There is no spell zero. Either select a spell or put -1 for none.
|
||||
|
||||
7: SYSERR: Object # (oedit-s-desc) contains (#) more than maximum (#).
|
||||
6: SYSERR: Object # (oedit-s-desc) contains (#) more than maximum (#).
|
||||
|
||||
When making a drink container you will set how much it initially contains
|
||||
on creation and the max it can hold if a player were to fill it. Common sense
|
||||
|
|
@ -75,24 +67,24 @@ tells us that you can not create a container that initially holds more than
|
|||
the max you set. To simplify the max must always be greater than or equal to
|
||||
the initial amount.
|
||||
|
||||
8: Char is already equipped: (medit-s-desc), (oedit-s-desc)
|
||||
7: Char is already equipped: (medit-s-desc), (oedit-s-desc)
|
||||
|
||||
This happens when someone tries to equip a mob with one or more object in
|
||||
a single location. HELP ZEDIT-EQUIP for all the possible object equipping
|
||||
locations. All you have to do to fix this is pick a different equip location
|
||||
that is not used.
|
||||
|
||||
9: SYSERR: Attempt to assign spec to non-existant mob #
|
||||
8: SYSERR: Attempt to assign spec to non-existant mob #
|
||||
|
||||
To get rid of this "grep # spec_assign.c" and remove this assignment.
|
||||
|
||||
10: No associated object exists when attempting to create a board [vnum #].
|
||||
9: No associated object exists when attempting to create a board [vnum #].
|
||||
|
||||
You need to delete this board from lib/etc/boards/ and modify boards.c and
|
||||
boards.h. Again "grep #" *.[ch] to search for this vnum in all of your .c and
|
||||
.h files to remove the reference.
|
||||
|
||||
11: SYSERR: Mob using >'((ch)-)player_specials....
|
||||
10: SYSERR: Mob using >'((ch)-)player_specials....
|
||||
|
||||
Players and mobs (NPC's) share many of the same data fields, but not all.
|
||||
So when a mob tries to access player data it gives a SYSERR like this:
|
||||
|
|
@ -110,7 +102,7 @@ know this is confusing, but just copy the example below.
|
|||
The changed line now will not just check for a flag, instead it will check if
|
||||
it is a player (not an NPC) and it is flagged then continue.
|
||||
|
||||
12: SYSERR: Object # (keyword) is type NOTE and has extra description with
|
||||
11: SYSERR: Object # (keyword) is type NOTE and has extra description with
|
||||
same name (keyword)
|
||||
|
||||
Object type NOTE is meant to be written on using the action-description. So if
|
||||
|
|
|
|||
|
|
@ -474,7 +474,7 @@ set one of these:
|
|||
P) Perm Affects: @cNOBITS@n
|
||||
1) BLIND DO NOT USE.
|
||||
2) INVIS The wearer becomes invisible.
|
||||
3) DET-ALIGN The wearer detects alignments.
|
||||
3) RESERVED DO NOT USE.
|
||||
4) DET-INVIS The wearer sees invisible objects and players.
|
||||
5) DET-MAGIC The wearer sees a magic flag on magical objects.
|
||||
6) SENSE-LIFE The wearer sees hidden mobs/players.
|
||||
|
|
@ -484,15 +484,15 @@ P) Perm Affects: @cNOBITS@n
|
|||
10) CURSE DO NOT USE.
|
||||
11) INFRA The wearer sees in the dark.
|
||||
12) POISON The wearer is poisoned.
|
||||
13) PROT-EVIL The wearer is protected from evil.
|
||||
14) PROT-GOOD The wearer is protected from good.
|
||||
13) RESERVED DO NOT USE.
|
||||
14) RESERVED DO NOT USE.
|
||||
15) SLEEP DO NOT USE.
|
||||
16) NO_TRACK DO NOT USE.
|
||||
17) FLYING The wearer can travel through room sector type IN FLIGHT.
|
||||
18) SCUBA The wearer can travel through room sector type UNDERWATER.
|
||||
19) SNEAK DO NOT USE.
|
||||
20) HIDE DO NOT USE.
|
||||
21) UNUSED DO NOT USE.
|
||||
21) SCAN Actively scanning for hidden threats.
|
||||
22) CHARM DO NOT USE.
|
||||
|
||||
#2
|
||||
|
|
@ -572,45 +572,6 @@ I would type "all 13" to list everything in zone 13. I use this to check what
|
|||
people have done with their zone.
|
||||
|
||||
See also: ^, RUMBLE-ALIASES
|
||||
#0
|
||||
ALIGNMENT GOOD NEUTRAL EVIL %ACTOR.ALIGN% %ALIGN% %ALIGNMENT%
|
||||
|
||||
Different characters and mobs have different alignments depending upon their
|
||||
way of life. Because of this, they may be aggressive or friendly depending on
|
||||
the mix. Some objects cannot be used by certain alignments. For mobs alignment
|
||||
ranges from:
|
||||
|
||||
-1000 to -350 Evil
|
||||
-350 to 350 Neutral
|
||||
350 to 1000 Good
|
||||
|
||||
See also: ALIGNMENTS
|
||||
#2
|
||||
ALIGNMENTS
|
||||
|
||||
Many good areas stick to a defined level range, such as 10-20 or 25-30. Do
|
||||
not try and make your new area cover the entire range of levels. Every area
|
||||
should have its moment in the sun. Conversely, it would be nice if there were
|
||||
something really unique and challenging to do at every stage in a characters
|
||||
history. Your area might be the most successful if you can gear it for a range
|
||||
of levels that people believe is otherwise boring or neglected.
|
||||
You should always try to match your mobiles to the area and the players you
|
||||
want to play there. For example, you should make the mobs in the area a
|
||||
similar level to the players you want to play there since a level X warrior
|
||||
should be able to kill a level X mobile if the warrior is at full health. Also,
|
||||
the quality of objects or mobiles should be matched with their level.
|
||||
Will your area be mostly good, neutral, or evil. If it is mostly good or
|
||||
mostly evil, is it strongly good or evil or just weakly aligned? In any case
|
||||
try not to make your area completely homogenous (equal). In neutral
|
||||
communities there is going to be some evil and good elements, and likewise with
|
||||
other communities. To some extent this goes along with the question about zone
|
||||
level, consider what seem to be "gaps" among the zones in the world as far as
|
||||
good or evil aligned areas for a particular level range, and try to fill those
|
||||
needs. Everyone's first tendency is to make extremists--The ultimate evil hell
|
||||
area, or the blindingly good paladin fortress. Keep in mind that there are
|
||||
many layers in between, and these are often more interesting.
|
||||
|
||||
See also: ALIGN
|
||||
#2
|
||||
ANIMATE-DEAD
|
||||
|
||||
|
|
@ -1650,7 +1611,6 @@ Excluding the subfield () returns the value. Adding a subfield adjusts it.
|
|||
cha/con/dex/int - Checks the stat. @RHELP TRIG-STAT@n. Subfield adjusts.
|
||||
str/wis() () is a subfield and allows a change to the variable.
|
||||
alias - The list of aliases of the mob or the player name.
|
||||
align() - The actor's alignment @RHELP ALIGN@n. Subfield adjusts.
|
||||
affect() - Checks the actor for the affect. @RHELP AFFECT@n
|
||||
armor - Checks the actor's armor class.
|
||||
canbeseen - Checks if the the mob can see the actor. @RHELP CANBESEEN@n
|
||||
|
|
@ -2366,18 +2326,6 @@ detach obj sword 1300 - You guessed it - same as above.
|
|||
detach sword all - detach all triggers from the sword.
|
||||
|
||||
See also: ATTACH, TRIG-DETACH, TRIG-ATTACH, OLC, TRIGEDIT, TSTAT, STAT, ROOMFLAGS
|
||||
#2
|
||||
DETECT-ALIGNMENT
|
||||
|
||||
Usage : cast 'detect alignment'
|
||||
Accumulative: Yes (Duration)
|
||||
Duration : 12 hours + level
|
||||
Level : Cleric level 4.
|
||||
|
||||
Allows the caster to detect the alignment of those around them.
|
||||
Evil will show as a red aura, good in a blue aura.
|
||||
|
||||
See also: "DETECT INVISIBILITY"
|
||||
#0
|
||||
DETECT-INVISIBILITY
|
||||
|
||||
|
|
@ -2530,38 +2478,6 @@ when done type /fi to format with indent.
|
|||
|
||||
See also: TEXT-EDITOR
|
||||
|
||||
#2
|
||||
DISPEL-EVIL
|
||||
|
||||
Usage : cast 'dispel evil' <victim>
|
||||
Accumulative: -
|
||||
Duration : Instantaneous
|
||||
Level : Cleric level 14.
|
||||
Save : Special
|
||||
|
||||
This spell will only affect evil creatures. An evil person of level
|
||||
equal or less than caster will suffer 100 damage points.
|
||||
|
||||
If the victim is higher level than caster, the spell will inflict
|
||||
(caster_level)d4 damage points, saving throw versus half damage.
|
||||
|
||||
See also: DISPEL-GOOD
|
||||
#0
|
||||
DISPEL-GOOD
|
||||
|
||||
Usage : cast 'dispel good' <victim>
|
||||
Accumulative: -
|
||||
Duration : Instantaneous
|
||||
Level : Cleric level 14.
|
||||
Save : Special
|
||||
|
||||
This spell will only affect good creatures. A good person of level
|
||||
equal or less than caster will suffer 100 damage points.
|
||||
|
||||
If the victim is higher level than caster, the spell will inflict
|
||||
(caster_level)d4 damage points, saving throw versus half damage.
|
||||
|
||||
See also: DISPEL-EVIL
|
||||
#0
|
||||
DISPLAYS PROMPTS HIT-PNT-DISPLAY
|
||||
|
||||
|
|
@ -2825,30 +2741,23 @@ of CircleMUD expect it first).
|
|||
i.e. a shot of whisky should have the keyword: whisky shot whisky
|
||||
a cup of slime mold juice keyword should be: juice cup slime juice
|
||||
|
||||
3: SYSERR: Mob #5 both Aggressive and Aggressive_to_Alignment.
|
||||
|
||||
Another harmless error. If your mob is aggressive there is no need to also
|
||||
make it aggressive to certain alignments since AGGR means it will attack any
|
||||
player it can see. Choose to make it aggressive to an alignment or aggressive
|
||||
to all.
|
||||
|
||||
4: SYSERR: Object # (oedit-s-desc) has out of range level #.
|
||||
3: SYSERR: Object # (oedit-s-desc) has out of range level #.
|
||||
|
||||
A simple one. Limit spell levels to the levels available, on TBA that would
|
||||
be 1-30.
|
||||
|
||||
5: SYSERR: Object # (oedit-s-desc) has negative weight (-2147483644).
|
||||
4: SYSERR: Object # (oedit-s-desc) has negative weight (-2147483644).
|
||||
SYSERR: Object # (oedit-s-desc) has out of range level #2147483647.
|
||||
|
||||
These are really annoying. This happens when you use numbers larger than
|
||||
necessary. This will actually crash many older versions of CircleMUD. Just do
|
||||
not do it. Use realistic numbers.
|
||||
|
||||
6: SYSERR: Object # (oedit-s-desc) uses 'UNDEFINED' spell #.
|
||||
5: SYSERR: Object # (oedit-s-desc) uses 'UNDEFINED' spell #.
|
||||
|
||||
There is no spell zero. Either select a spell or put -1 for none.
|
||||
|
||||
7: SYSERR: Object # (oedit-s-desc) contains (5) more than maximum (3).
|
||||
6: SYSERR: Object # (oedit-s-desc) contains (5) more than maximum (3).
|
||||
|
||||
When making a drink container you will set how much it initially contains
|
||||
on creation and the max it can hold if a player were to fill it. Common sense
|
||||
|
|
@ -2930,7 +2839,7 @@ Objects : 42
|
|||
Triggers : 129
|
||||
Theme : Its purpose, hack & slash, quest, rescue princess, kill ogre...
|
||||
Completion : When do you expect to finish it, how is the progress going?
|
||||
Notes : Such things as zone alignment, economy, quests, special mobs and
|
||||
Notes : Such things as zone economy, quests, special mobs and
|
||||
objs, and anything else I should know about your zone. What
|
||||
makes it unique?
|
||||
|
||||
|
|
@ -2985,8 +2894,8 @@ right. Parenthesis can be used to create priority.
|
|||
| | | (if actor age is not equal to 1)
|
||||
| < | less than | if %actor.dex% < 16
|
||||
| | | (if actor dexterity is less than 16)
|
||||
| > | greater than | if %actor.align% > 349
|
||||
| | | (if actor alignment is greater than 349)
|
||||
| > | greater than | if %actor.level% > 30
|
||||
| | | (if actor level is greater than 30)
|
||||
| <= | less than or equal | if %actor.exp% <= 2
|
||||
| | | (if actor experience is less than or equal to 1)
|
||||
| >= | greater than or equal | if %actor.mana% >= 1
|
||||
|
|
@ -4852,7 +4761,7 @@ MEDIT-AFF-FLAGS AFFECTIONS AFFECTS
|
|||
M) AFF Flags : @cNOBITS@n
|
||||
1) BLIND Mob is blind.
|
||||
2) INVIS Mob is invisible.
|
||||
3) DET-ALIGN NOT USED.
|
||||
3) RESERVED NOT USED.
|
||||
4) DET-INVIS Mob can see invisible characters and objects.
|
||||
5) DET-MAGIC Mob is sensitive to magical presence.
|
||||
6) SENSE-LIFE Mob can sense hidden life.
|
||||
|
|
@ -4863,15 +4772,15 @@ M) AFF Flags : @cNOBITS@n
|
|||
10) CURSE Mob is cursed.
|
||||
11) INFRA Mob can see in dark.
|
||||
12) POISON Reserved for internal use. Do not set.
|
||||
13) PROT-EVIL Mob is protected from evil characters.
|
||||
14) PROT-GOOD Mob is protected from good characters.
|
||||
13) RESERVED NOT USED.
|
||||
14) RESERVED NOT USED.
|
||||
15) SLEEP Reserved for internal use. Do not set.
|
||||
16) NO_TRACK Mob cannot be tracked.
|
||||
17) FLY Mob is flying.
|
||||
18) SCUBA Mob can breathe underwater.
|
||||
19) SNEAK Mob can move quietly without room being informed.
|
||||
20) HIDE Mob is hidden; can only be seen with sense life.
|
||||
21) UNUSED Unused (room for future expansion).
|
||||
21) SCAN Actively scanning for hidden threats.
|
||||
22) CHARM Reserved for internal use. Do not set.
|
||||
|
||||
See also: INVIS, MEDIT-NPC-FLAGS, DG_AFFECT, TRIG-AFFECT
|
||||
|
|
@ -4903,20 +4812,9 @@ should be one of the following numbers:
|
|||
5) bludgeon
|
||||
|
||||
#2
|
||||
MEDIT-EXPERIENCE MEDIT-XP MEDIT-ALIGNMENT
|
||||
MEDIT-EXPERIENCE MEDIT-XP
|
||||
|
||||
(B) Exp Points: [ 115600] (E) Alignment: [ 1000]
|
||||
|
||||
Alignment
|
||||
A number from -1000 to 1000 representing the mobs initial alignment.
|
||||
|
||||
Evil -1000 to -350
|
||||
Neutral -349 to 349
|
||||
Good 350 to 1000
|
||||
|
||||
The alignment of a mobile is determined entirely by you, depending on
|
||||
the type of area you are creating. The alignment can be from -1000
|
||||
(extremely evil) to +1000 (divinely good).
|
||||
(B) Exp Points: [ 115600]
|
||||
|
||||
Experience is simply the number of experience points the mobile is born
|
||||
with. This is not the exact number of experience points the player will get
|
||||
|
|
@ -5019,7 +4917,7 @@ X) Delete Mob @RHELP MEDIT-DELETE@n
|
|||
Q) Quit
|
||||
Enter choice :
|
||||
#2
|
||||
MEDIT-NPC-FLAGS MEDIT-FLAGS SPEC STAYZONE AGGRESSIVE AGGR_GOOD AGGR_NEU AGGR_EVIL STAY-ZONE STAY_ZONE SCAVENGER NPCFLAGS NPC-FLAGS MOBFLAGS MOB-FLAGS SENTINEL AWARE NOCHARM MOB-NPC NPC_FLAGS HELPER
|
||||
MEDIT-NPC-FLAGS MEDIT-FLAGS SPEC STAYZONE AGGRESSIVE STAY-ZONE STAY_ZONE SCAVENGER NPCFLAGS NPC-FLAGS MOBFLAGS MOB-FLAGS SENTINEL AWARE NOCHARM MOB-NPC NPC_FLAGS HELPER
|
||||
|
||||
NPC stands for non-player-character (mob)
|
||||
|
||||
|
|
@ -5042,9 +4940,9 @@ L) NPC Flags : @cISNPC@n
|
|||
its hit points. If the WIMPY bit is set in conjunction with
|
||||
any of the forms of the AGGRESSIVE bit, the mob will only
|
||||
attack mobs that are unconscious (sleeping or incapacitated).
|
||||
8) AGGR_EVIL Mob will attack players that are evil-aligned.
|
||||
9) AGGR_GOOD Mob will attack players that are good-aligned.
|
||||
10) AGGR_NEU Mob will attack players that are neutrally aligned.
|
||||
8) RESERVED Not used.
|
||||
9) RESERVED Not used.
|
||||
10) RESERVED Not used.
|
||||
11) MEMORY Mob will remember players that initiate attacks on it, and will
|
||||
attack that player if it ever runs into him again.
|
||||
12) HELPER The mob will attack any player it sees in the room that is
|
||||
|
|
@ -5332,7 +5230,7 @@ MOBILE-FORMATS MOB-FORMATS MOB-FILES
|
|||
~
|
||||
<detailed description>
|
||||
~
|
||||
<mob flags> <affect flags> <alignment> <type flag>
|
||||
<mob flags> <affect flags> <reserved> <type flag>
|
||||
<level> <thaco> <armor class> <hitpoints> <damage>
|
||||
<coins> <experience points>
|
||||
<load position> <default position> <sex>
|
||||
|
|
@ -5382,11 +5280,11 @@ Message List:
|
|||
0 ) [5 ] 1, burning hands 30) [314] 2, Unknown
|
||||
1 ) [6 ] 1, call lightning 31) [399] 2, Unknown
|
||||
2 ) [8 ] 1, chill touch 32) [33 ] 1, poison
|
||||
3 ) [10 ] 1, color spray 33) [202] 1, !UNUSED!
|
||||
4 ) [22 ] 1, dispel evil 34) [203] 1, !UNUSED!
|
||||
5 ) [23 ] 1, earthquake 35) [204] 1, !UNUSED!
|
||||
6 ) [25 ] 1, energy drain 36) [205] 1, !UNUSED!
|
||||
7 ) [26 ] 1, fireball 37) [206] 1, !UNUSED!
|
||||
3 ) [10 ] 1, color spray 33) [202] 1, !RESERVED!
|
||||
4 ) [22 ] 1, dispel 34) [203] 1, !RESERVED!
|
||||
5 ) [23 ] 1, earthquake 35) [204] 1, !RESERVED!
|
||||
6 ) [25 ] 1, energy drain 36) [205] 1, !RESERVED!
|
||||
7 ) [26 ] 1, fireball 37) [206] 1, !RESERVED!
|
||||
=========================================
|
||||
MSG #, SKILL NUMBER, NUMBER OF ENTRIES, NAME (if applicable)
|
||||
0 ) [5 ] 1, burning hands
|
||||
|
|
@ -5901,9 +5799,9 @@ OEDIT-EXTRA-FLAGS OEDIT-FLAGS OBJECT-FLAGS OBJECTFLAGS GLOW HUM NODROP NO_DROP O
|
|||
7) MAGIC Item has a magical aura and cannot be enchanted.
|
||||
8) NODROP Item is cursed and cannot be removed or dropped.
|
||||
9) BLESS Item is blessed (cosmetic).
|
||||
10) ANTI_GOOD Item cannot be used by good-aligned characters.
|
||||
11) ANTI_EVIL Item cannot be used by evil-aligned characters.
|
||||
12) ANTI_NEUTRAL Item cannot be used by neutral align characters.
|
||||
10) RESERVED Not used.
|
||||
11) RESERVED Not used.
|
||||
12) RESERVED Not used.
|
||||
13) ANTI_MAGIC_USER Item cannot be used by the Mage class.
|
||||
14) ANTI_CLERIC Item cannot be used by the Cleric class.
|
||||
15) ANTI_THIEF Item cannot be used by the Thief class.
|
||||
|
|
@ -6516,7 +6414,7 @@ this method is that if you accidentally wipe out your work on the MUD you will
|
|||
have a ready backup. Be careful cutting and pasting to the MUD; if you send too
|
||||
much text at once you will be disconnected.
|
||||
|
||||
See also: WORK, CARTOGRAPHY, LOCATION, THEME, PLOT, SIZE, ALIGN, BIAS
|
||||
See also: WORK, CARTOGRAPHY, LOCATION, THEME, PLOT, SIZE, BIAS
|
||||
#2
|
||||
PLAYER-SHOPS PLAYER-OWNED-SHOPS
|
||||
|
||||
|
|
@ -7079,7 +6977,7 @@ what it takes to properly plan out your first zone. It is extremely important
|
|||
that you put some forethought into what you will be creating. Remember, zones
|
||||
are built for others to play. Be sure to make it something a player will enjoy.
|
||||
A zone proposal consists of an informal MUDmail to your Head Builder. It should
|
||||
contain: the location, level, alignment, theme, plot, size, and any other
|
||||
contain: the location, level, theme, plot, size, and any other
|
||||
important notes about the zone. Detailed descriptions and help files are
|
||||
available in the hallways starting from room 14 and 15.
|
||||
|
||||
|
|
@ -7089,15 +6987,6 @@ deadlines, so take the time to give your zone character.
|
|||
Required Reading: @RHELP PLANNING, HELP STYLISTICS@n
|
||||
|
||||
See also: EXAMPLE-PROPOSAL
|
||||
#2
|
||||
PROTECTION-FROM-EVIL PROT-EVIL
|
||||
|
||||
Usage : cast 'protection from evil' [self]
|
||||
Accumulative: Yes (Duration)
|
||||
Duration : 24 hours
|
||||
Level : Cleric level 8.
|
||||
|
||||
The meaning of this spell is not yet fully defined.
|
||||
#0
|
||||
PURGE DESTROY UNLOAD DELETE-MOBILE DISINTEGRATE DECOMPOSE CLEANUP
|
||||
|
||||
|
|
@ -8396,12 +8285,12 @@ Enter choice :
|
|||
SEDIT-TRADE
|
||||
|
||||
E) No Trade With : @cNOBITS@n
|
||||
Designates certain alignments or classes that the shop will not trade with:
|
||||
Designates certain classes that the shop will not trade with:
|
||||
|
||||
1) Good 2) Evil
|
||||
3) Neutral 4) Magic User
|
||||
5) Cleric 6) Thief
|
||||
7) Warrior
|
||||
1) Sorceror 2) Cleric
|
||||
3) Rogue 4) Fighter
|
||||
5) Barbarian 6) Ranger
|
||||
7) Bard 8) Druid
|
||||
|
||||
Currently will not trade with: @cNOBITS@n
|
||||
Enter choice (-1 for none):
|
||||
|
|
@ -8700,11 +8589,11 @@ The following room flags can be selected:
|
|||
16) * - DO NOT USE. Breadth-first search mark used by track and hunt.
|
||||
17) WORLDMAP - DO NOT USE. World Map style maps.
|
||||
|
||||
Never set UNUSED or DO NOT USE bits, if you find them anywhere. If you
|
||||
Never set RESERVED or DO NOT USE bits, if you find them anywhere. If you
|
||||
do not know what a flag does, DO NOT SET IT!
|
||||
|
||||
This requires repeating since it is so often ignored:
|
||||
@YIf a flag says UNUSED; DO NOT SET IT. If you do not know what it does; DO NOT SET IT!@n
|
||||
@YIf a flag says RESERVED; DO NOT SET IT. If you do not know what it does; DO NOT SET IT!@n
|
||||
|
||||
See Also: TOGGLE
|
||||
#2
|
||||
|
|
@ -8973,18 +8862,18 @@ SPELLS
|
|||
7) charm person 8) chill touch 9) clone
|
||||
10) color spray 11) control weather 12) create food
|
||||
13) create water 14) cure blind 15) cure critic
|
||||
16) cure light 17) curse 18) detect alignment
|
||||
16) cure light 17) curse 18) reserved
|
||||
19) detect invisibility 20) detect magic 21) detect poison
|
||||
22) dispel evil 23) earthquake 24) enchant weapon
|
||||
22) reserved 23) earthquake 24) enchant weapon
|
||||
25) energy drain 26) fireball 27) harm
|
||||
28) heal 29) invisibility 30) lightning bolt
|
||||
31) locate object 32) magic missile 33) poison
|
||||
34) protection from evil 35) remove curse 36) sanctuary
|
||||
34) reserved 35) remove curse 36) sanctuary
|
||||
37) shocking grasp 38) sleep 39) strength
|
||||
40) summon 41) !UNUSED! 42) word of recall
|
||||
40) summon 41) !RESERVED! 42) word of recall
|
||||
43) remove poison 44) sense life 45) animate dead
|
||||
46) dispel good 47) group armor 48) group heal
|
||||
49) !UNUSED! 50) infravision 51) waterwalk
|
||||
46) reserved 47) group armor 48) group heal
|
||||
49) !RESERVED! 50) infravision 51) waterwalk
|
||||
52) identify
|
||||
|
||||
#2
|
||||
|
|
@ -8997,13 +8886,13 @@ SPELLS MAGICS SPELLBOOKS TOMBS SPELL-LEVELS SPELLS-STOCK SPELLLIST
|
|||
| Detect Magic 2 | Create Food 2 |
|
||||
| Chill Touch 3 | Create Water 2 |
|
||||
| Infravision 3 | Detect Poison 3 |
|
||||
| Invisibility 4 | Detect Alignment 4 |
|
||||
| Invisibility 4 | Reserved 4 |
|
||||
| Armor 4 | Cure Blind 4 |
|
||||
| Burning Hands 5 | Bless 5 |
|
||||
| Locate Object 6 | Detect Invisibility 6 |
|
||||
| Strength 6 | Blindness 6 |
|
||||
| Shocking Grasp 7 | Infravision 7 |
|
||||
| Sleep 8 | Protection from Evil 8 |
|
||||
| Sleep 8 | Reserved 8 |
|
||||
| Lightning Bolt 9 | Poison 8 |
|
||||
| Blindness 9 | Group Armor 9 |
|
||||
| Detect Poison 10 | Cure Crit 9 |
|
||||
|
|
@ -9013,8 +8902,8 @@ SPELLS MAGICS SPELLBOOKS TOMBS SPELL-LEVELS SPELLS-STOCK SPELLLIST
|
|||
| Poison 14 | Word of Recall 12 |
|
||||
| Fireball 15 | Earthquake 12 |
|
||||
| Charm 16 | Darkness 13 |
|
||||
| Identify 20 | Dispel Evil 14 |
|
||||
| Enchant Weapon 26 | Dispel Good 14 |
|
||||
| Identify 20 | Reserved 14 |
|
||||
| Enchant Weapon 26 | Reserved 14 |
|
||||
| Clone 30 | Sanctuary 15 |
|
||||
| | Call Lightning 15 |
|
||||
| | Heal 16 |
|
||||
|
|
|
|||
|
|
@ -574,13 +574,6 @@ static void list_one_char(struct char_data *i, struct char_data *ch)
|
|||
if (AFF_FLAGGED(i, AFF_INVISIBLE))
|
||||
send_to_char(ch, "*");
|
||||
|
||||
if (AFF_FLAGGED(ch, AFF_DETECT_ALIGN)) {
|
||||
if (IS_EVIL(i))
|
||||
send_to_char(ch, "(Red Aura) ");
|
||||
else if (IS_GOOD(i))
|
||||
send_to_char(ch, "(Blue Aura) ");
|
||||
}
|
||||
|
||||
send_to_char(ch, "%s", i->player.long_descr);
|
||||
|
||||
if (AFF_FLAGGED(i, AFF_SANCTUARY))
|
||||
|
|
@ -596,13 +589,6 @@ static void list_one_char(struct char_data *i, struct char_data *ch)
|
|||
if (AFF_FLAGGED(i, AFF_INVISIBLE))
|
||||
send_to_char(ch, "*");
|
||||
|
||||
if (AFF_FLAGGED(ch, AFF_DETECT_ALIGN)) {
|
||||
if (IS_EVIL(i))
|
||||
send_to_char(ch, "(Red Aura) ");
|
||||
else if (IS_GOOD(i))
|
||||
send_to_char(ch, "(Blue Aura) ");
|
||||
}
|
||||
|
||||
send_to_char(ch, "%s", i->player.long_descr);
|
||||
|
||||
if (AFF_FLAGGED(i, AFF_SANCTUARY))
|
||||
|
|
@ -661,13 +647,6 @@ static void list_one_char(struct char_data *i, struct char_data *ch)
|
|||
send_to_char(ch, " is here struggling with thin air.");
|
||||
}
|
||||
|
||||
if (AFF_FLAGGED(ch, AFF_DETECT_ALIGN)) {
|
||||
if (IS_EVIL(i))
|
||||
send_to_char(ch, " (Red Aura)");
|
||||
else if (IS_GOOD(i))
|
||||
send_to_char(ch, " (Blue Aura)");
|
||||
}
|
||||
|
||||
send_to_char(ch, "\r\n");
|
||||
|
||||
if (AFF_FLAGGED(i, AFF_SANCTUARY))
|
||||
|
|
|
|||
128
src/act.wizard.c
128
src/act.wizard.c
|
|
@ -3564,9 +3564,8 @@ ACMD(do_show)
|
|||
|
||||
send_to_char(ch, "Player: %-12s (%s) [%2d %s]\r\n", GET_NAME(vict),
|
||||
genders[(int) GET_SEX(vict)], GET_LEVEL(vict), CLASS_ABBR(vict));
|
||||
send_to_char(ch, "Coins: %-8d Bal: %-8d Exp: %-8d Align: %-5d\r\n",
|
||||
GET_COINS(vict), GET_BANK_COINS(vict), GET_EXP(vict),
|
||||
GET_ALIGNMENT(vict));
|
||||
send_to_char(ch, "Coins: %-8d Bal: %-8d Exp: %-8d\r\n",
|
||||
GET_COINS(vict), GET_BANK_COINS(vict), GET_EXP(vict));
|
||||
send_to_char(ch, "Started: %-25.25s Last: %-25.25s\r\n", buf1, buf2);
|
||||
send_to_char(ch, "Played: %dh %dm\r\n",
|
||||
(int) (vict->player.time.played / 3600),
|
||||
|
|
@ -3761,9 +3760,8 @@ static struct set_struct {
|
|||
{ "ac", LVL_BUILDER, BOTH, NUMBER }, /* 0 */
|
||||
{ "afk", LVL_BUILDER, PC, BINARY }, /* 1 */
|
||||
{ "age", LVL_GOD, BOTH, NUMBER },
|
||||
{ "align", LVL_BUILDER, BOTH, NUMBER },
|
||||
{ "bank", LVL_BUILDER, PC, NUMBER },
|
||||
{ "brief", LVL_GOD, PC, BINARY }, /* 5 */
|
||||
{ "brief", LVL_GOD, PC, BINARY }, /* 4 */
|
||||
{ "cha", LVL_BUILDER, BOTH, NUMBER },
|
||||
{ "class", LVL_BUILDER, BOTH, MISC },
|
||||
{ "color", LVL_GOD, PC, BINARY },
|
||||
|
|
@ -3772,20 +3770,20 @@ static struct set_struct {
|
|||
{ "dex", LVL_BUILDER, BOTH, NUMBER },
|
||||
{ "drunk", LVL_BUILDER, BOTH, MISC },
|
||||
{ "exp", LVL_GOD, BOTH, NUMBER },
|
||||
{ "frozen", LVL_GRGOD, PC, BINARY }, /* 14 */
|
||||
{ "frozen", LVL_GRGOD, PC, BINARY }, /* 13 */
|
||||
{ "coins", LVL_BUILDER, BOTH, NUMBER },
|
||||
{ "height", LVL_BUILDER, BOTH, NUMBER },
|
||||
{ "hitpoints", LVL_BUILDER, BOTH, NUMBER },
|
||||
{ "hunger", LVL_BUILDER, BOTH, MISC }, /* 18 */
|
||||
{ "hunger", LVL_BUILDER, BOTH, MISC }, /* 17 */
|
||||
{ "int", LVL_BUILDER, BOTH, NUMBER },
|
||||
{ "invis", LVL_GOD, PC, NUMBER },
|
||||
{ "invstart", LVL_BUILDER, PC, BINARY },
|
||||
{ "level", LVL_GRGOD, BOTH, NUMBER }, /* 22 */
|
||||
{ "level", LVL_GRGOD, BOTH, NUMBER }, /* 21 */
|
||||
{ "loadroom", LVL_BUILDER, PC, MISC },
|
||||
{ "mana", LVL_BUILDER, BOTH, NUMBER },
|
||||
{ "maxhit", LVL_BUILDER, BOTH, NUMBER },
|
||||
{ "maxmana", LVL_BUILDER, BOTH, NUMBER },
|
||||
{ "maxstam", LVL_BUILDER, BOTH, NUMBER }, /* 27 */
|
||||
{ "maxstam", LVL_BUILDER, BOTH, NUMBER }, /* 26 */
|
||||
{ "name", LVL_IMMORT, PC, MISC },
|
||||
{ "nodelete", LVL_GOD, PC, BINARY },
|
||||
{ "nohassle", LVL_GOD, PC, BINARY },
|
||||
|
|
@ -3797,18 +3795,18 @@ static struct set_struct {
|
|||
{ "poofout", LVL_IMMORT, PC, MISC },
|
||||
{ "quest", LVL_GOD, PC, BINARY },
|
||||
{ "room", LVL_BUILDER, BOTH, NUMBER },
|
||||
{ "screenwidth", LVL_GOD, PC, NUMBER }, /* 39 */
|
||||
{ "screenwidth", LVL_GOD, PC, NUMBER }, /* 38 */
|
||||
{ "sex", LVL_GOD, BOTH, MISC },
|
||||
{ "showvnums", LVL_BUILDER, PC, BINARY },
|
||||
{ "siteok", LVL_GOD, PC, BINARY },
|
||||
{ "skill", LVL_GOD, BOTH, NUMBER },
|
||||
{ "stam", LVL_BUILDER, BOTH, NUMBER }, /* 44 */
|
||||
{ "stam", LVL_BUILDER, BOTH, NUMBER }, /* 43 */
|
||||
{ "str", LVL_BUILDER, BOTH, NUMBER },
|
||||
{ "thirst", LVL_BUILDER, BOTH, MISC },
|
||||
{ "variable", LVL_GRGOD, PC, MISC },
|
||||
{ "weight", LVL_BUILDER, BOTH, NUMBER },
|
||||
{ "wis", LVL_BUILDER, BOTH, NUMBER },
|
||||
{ "questpoints", LVL_GOD, PC, NUMBER }, /* 50 */
|
||||
{ "questpoints", LVL_GOD, PC, NUMBER }, /* 49 */
|
||||
{ "questhistory", LVL_GOD, PC, NUMBER },
|
||||
{ "species", LVL_BUILDER, BOTH, MISC },
|
||||
{ "\n", 0, BOTH, MISC }
|
||||
|
|
@ -3870,17 +3868,13 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
|
|||
GET_ROLEPLAY_AGE(vict) = LIMIT(value, MIN_CHAR_AGE, MAX_CHAR_AGE);
|
||||
GET_ROLEPLAY_AGE_YEAR(vict) = time_info.year;
|
||||
break;
|
||||
case 3: /* align */
|
||||
GET_ALIGNMENT(vict) = RANGE(-1000, 1000);
|
||||
affect_total(vict);
|
||||
break;
|
||||
case 4: /* bank */
|
||||
case 3: /* bank */
|
||||
GET_BANK_COINS(vict) = RANGE(0, 100000000);
|
||||
break;
|
||||
case 5: /* brief */
|
||||
case 4: /* brief */
|
||||
SET_OR_REMOVE(PRF_FLAGS(vict), PRF_BRIEF);
|
||||
break;
|
||||
case 6: /* cha */
|
||||
case 5: /* cha */
|
||||
if (IS_NPC(vict) || GET_LEVEL(vict) >= LVL_GRGOD)
|
||||
RANGE(3, 25);
|
||||
else
|
||||
|
|
@ -3888,18 +3882,18 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
|
|||
vict->real_abils.cha = value;
|
||||
affect_total(vict);
|
||||
break;
|
||||
case 7: /* class */
|
||||
case 6: /* class */
|
||||
if ((i = parse_class(*val_arg)) == CLASS_UNDEFINED) {
|
||||
send_to_char(ch, "That is not a class.\r\n");
|
||||
return (0);
|
||||
}
|
||||
GET_CLASS(vict) = i;
|
||||
break;
|
||||
case 8: /* color */
|
||||
case 7: /* color */
|
||||
SET_OR_REMOVE(PRF_FLAGS(vict), (PRF_COLOR_1));
|
||||
SET_OR_REMOVE(PRF_FLAGS(vict), (PRF_COLOR_2));
|
||||
break;
|
||||
case 9: /* con */
|
||||
case 8: /* con */
|
||||
if (IS_NPC(vict) || GET_LEVEL(vict) >= LVL_GRGOD)
|
||||
RANGE(3, 25);
|
||||
else
|
||||
|
|
@ -3907,10 +3901,10 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
|
|||
vict->real_abils.con = value;
|
||||
affect_total(vict);
|
||||
break;
|
||||
case 10: /* delete */
|
||||
case 9: /* delete */
|
||||
SET_OR_REMOVE(PLR_FLAGS(vict), PLR_DELETED);
|
||||
break;
|
||||
case 11: /* dex */
|
||||
case 10: /* dex */
|
||||
if (IS_NPC(vict) || GET_LEVEL(vict) >= LVL_GRGOD)
|
||||
RANGE(3, 25);
|
||||
else
|
||||
|
|
@ -3918,7 +3912,7 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
|
|||
vict->real_abils.dex = value;
|
||||
affect_total(vict);
|
||||
break;
|
||||
case 12: /* drunk */
|
||||
case 11: /* drunk */
|
||||
if (!str_cmp(val_arg, "off")) {
|
||||
GET_COND(vict, DRUNK) = -1;
|
||||
send_to_char(ch, "%s's drunkenness is now off.\r\n", GET_NAME(vict));
|
||||
|
|
@ -3932,17 +3926,17 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
|
|||
return (0);
|
||||
}
|
||||
break;
|
||||
case 13: /* exp */
|
||||
case 12: /* exp */
|
||||
vict->points.exp = RANGE(0, 50000000);
|
||||
break;
|
||||
case 14: /* frozen */
|
||||
case 13: /* frozen */
|
||||
if (ch == vict && on) {
|
||||
send_to_char(ch, "Better not -- could be a long winter!\r\n");
|
||||
return (0);
|
||||
}
|
||||
SET_OR_REMOVE(PLR_FLAGS(vict), PLR_FROZEN);
|
||||
break;
|
||||
case 15: { /* coins */
|
||||
case 14: { /* coins */
|
||||
struct obj_data *coin_obj;
|
||||
int i;
|
||||
|
||||
|
|
@ -3978,15 +3972,15 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
|
|||
send_to_char(ch, "Ok.\r\n");
|
||||
return (1);
|
||||
}
|
||||
case 16: /* height */
|
||||
case 15: /* height */
|
||||
GET_HEIGHT(vict) = value;
|
||||
affect_total(vict);
|
||||
break;
|
||||
case 17: /* hit */
|
||||
case 16: /* hit */
|
||||
vict->points.hit = RANGE(-9, vict->points.max_hit);
|
||||
affect_total(vict);
|
||||
break;
|
||||
case 18: /* hunger */
|
||||
case 17: /* hunger */
|
||||
if (!str_cmp(val_arg, "off")) {
|
||||
GET_COND(vict, HUNGER) = -1;
|
||||
send_to_char(ch, "%s's hunger is now off.\r\n", GET_NAME(vict));
|
||||
|
|
@ -4000,7 +3994,7 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
|
|||
return (0);
|
||||
}
|
||||
break;
|
||||
case 19: /* int */
|
||||
case 18: /* int */
|
||||
if (IS_NPC(vict) || GET_LEVEL(vict) >= LVL_GRGOD)
|
||||
RANGE(3, 25);
|
||||
else
|
||||
|
|
@ -4008,17 +4002,17 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
|
|||
vict->real_abils.intel = value;
|
||||
affect_total(vict);
|
||||
break;
|
||||
case 20: /* invis */
|
||||
case 19: /* invis */
|
||||
if (GET_LEVEL(ch) < LVL_IMPL && ch != vict) {
|
||||
send_to_char(ch, "You aren't godly enough for that!\r\n");
|
||||
return (0);
|
||||
}
|
||||
GET_INVIS_LEV(vict) = RANGE(0, GET_LEVEL(vict));
|
||||
break;
|
||||
case 21: /* invistart */
|
||||
case 20: /* invistart */
|
||||
SET_OR_REMOVE(PLR_FLAGS(vict), PLR_INVSTART);
|
||||
break;
|
||||
case 22: /* level */
|
||||
case 21: /* level */
|
||||
if ((!IS_NPC(vict) && value > GET_LEVEL(ch)) || value > LVL_IMPL) {
|
||||
send_to_char(ch, "You can't do that.\r\n");
|
||||
return (0);
|
||||
|
|
@ -4026,7 +4020,7 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
|
|||
RANGE(1, LVL_IMPL);
|
||||
vict->player.level = value;
|
||||
break;
|
||||
case 23: /* loadroom */
|
||||
case 22: /* loadroom */
|
||||
if (!str_cmp(val_arg, "off")) {
|
||||
REMOVE_BIT_AR(PLR_FLAGS(vict), PLR_LOADROOM);
|
||||
} else if (is_number(val_arg)) {
|
||||
|
|
@ -4044,23 +4038,23 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
|
|||
return (0);
|
||||
}
|
||||
break;
|
||||
case 24: /* mana */
|
||||
case 23: /* mana */
|
||||
vict->points.mana = RANGE(0, vict->points.max_mana);
|
||||
affect_total(vict);
|
||||
break;
|
||||
case 25: /* maxhit */
|
||||
case 24: /* maxhit */
|
||||
vict->points.max_hit = RANGE(1, 5000);
|
||||
affect_total(vict);
|
||||
break;
|
||||
case 26: /* maxmana */
|
||||
case 25: /* maxmana */
|
||||
vict->points.max_mana = RANGE(1, 5000);
|
||||
affect_total(vict);
|
||||
break;
|
||||
case 27: /* maxstam */
|
||||
case 26: /* maxstam */
|
||||
vict->points.max_stamina = RANGE(1, 5000);
|
||||
affect_total(vict);
|
||||
break;
|
||||
case 28: /* name */
|
||||
case 27: /* name */
|
||||
if (ch != vict && GET_LEVEL(ch) < LVL_IMPL) {
|
||||
send_to_char(ch, "Only Imps can change the name of other players.\r\n");
|
||||
return (0);
|
||||
|
|
@ -4070,24 +4064,24 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
|
|||
return (0);
|
||||
}
|
||||
break;
|
||||
case 29: /* nodelete */
|
||||
case 28: /* nodelete */
|
||||
SET_OR_REMOVE(PLR_FLAGS(vict), PLR_NODELETE);
|
||||
break;
|
||||
case 30: /* nohassle */
|
||||
case 29: /* nohassle */
|
||||
if (GET_LEVEL(ch) < LVL_GOD && ch != vict) {
|
||||
send_to_char(ch, "You aren't godly enough for that!\r\n");
|
||||
return (0);
|
||||
}
|
||||
SET_OR_REMOVE(PRF_FLAGS(vict), PRF_NOHASSLE);
|
||||
break;
|
||||
case 31: /* nosummon */
|
||||
case 30: /* nosummon */
|
||||
SET_OR_REMOVE(PRF_FLAGS(vict), PRF_SUMMONABLE);
|
||||
send_to_char(ch, "Nosummon %s for %s.\r\n", ONOFF(!on), GET_NAME(vict));
|
||||
break;
|
||||
case 32: /* nowiz */
|
||||
case 31: /* nowiz */
|
||||
SET_OR_REMOVE(PLR_FLAGS(vict), PLR_NOWIZLIST);
|
||||
break;
|
||||
case 33: /* olc */
|
||||
case 32: /* olc */
|
||||
if (is_abbrev(val_arg, "socials") || is_abbrev(val_arg, "actions") || is_abbrev(val_arg, "aedit"))
|
||||
GET_OLC_ZONE(vict) = AEDIT_PERMISSION;
|
||||
else if (is_abbrev(val_arg, "hedit") || is_abbrev(val_arg, "help"))
|
||||
|
|
@ -4102,7 +4096,7 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
|
|||
} else
|
||||
GET_OLC_ZONE(vict) = atoi(val_arg);
|
||||
break;
|
||||
case 34: /* password */
|
||||
case 33: /* password */
|
||||
if (GET_LEVEL(vict) >= LVL_GRGOD) {
|
||||
send_to_char(ch, "You cannot change that.\r\n");
|
||||
return (0);
|
||||
|
|
@ -4111,7 +4105,7 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
|
|||
*(GET_PASSWD(vict) + MAX_PWD_LENGTH) = '\0';
|
||||
send_to_char(ch, "Password changed to '%s'.\r\n", val_arg);
|
||||
break;
|
||||
case 35: /* poofin */
|
||||
case 34: /* poofin */
|
||||
if ((vict == ch) || (GET_LEVEL(ch) == LVL_IMPL)) {
|
||||
skip_spaces(&val_arg);
|
||||
parse_at(val_arg);
|
||||
|
|
@ -4125,7 +4119,7 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
|
|||
POOFIN(vict) = strdup(val_arg);
|
||||
}
|
||||
break;
|
||||
case 36: /* poofout */
|
||||
case 35: /* poofout */
|
||||
if ((vict == ch) || (GET_LEVEL(ch) == LVL_IMPL)) {
|
||||
skip_spaces(&val_arg);
|
||||
parse_at(val_arg);
|
||||
|
|
@ -4139,10 +4133,10 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
|
|||
POOFOUT(vict) = strdup(val_arg);
|
||||
}
|
||||
break;
|
||||
case 37: /* quest */
|
||||
case 36: /* quest */
|
||||
SET_OR_REMOVE(PRF_FLAGS(vict), PRF_QUEST);
|
||||
break;
|
||||
case 38: /* room */
|
||||
case 37: /* room */
|
||||
if ((rnum = real_room(value)) == NOWHERE) {
|
||||
send_to_char(ch, "No room exists with that number.\r\n");
|
||||
return (0);
|
||||
|
|
@ -4151,23 +4145,23 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
|
|||
char_from_room(vict);
|
||||
char_to_room(vict, rnum);
|
||||
break;
|
||||
case 39: /* screenwidth */
|
||||
case 38: /* screenwidth */
|
||||
GET_SCREEN_WIDTH(vict) = RANGE(40, 200);
|
||||
break;
|
||||
case 40: /* sex */
|
||||
case 39: /* sex */
|
||||
if ((i = search_block(val_arg, genders, FALSE)) < 0) {
|
||||
send_to_char(ch, "Must be 'male', 'female', or 'neutral'.\r\n");
|
||||
return (0);
|
||||
}
|
||||
GET_SEX(vict) = i;
|
||||
break;
|
||||
case 41: /* showvnums */
|
||||
case 40: /* showvnums */
|
||||
SET_OR_REMOVE(PRF_FLAGS(vict), PRF_SHOWVNUMS);
|
||||
break;
|
||||
case 42: /* siteok */
|
||||
case 41: /* siteok */
|
||||
SET_OR_REMOVE(PLR_FLAGS(vict), PLR_SITEOK);
|
||||
break;
|
||||
case 43: /* skills/spells */
|
||||
case 42: /* skills/spells */
|
||||
{
|
||||
char local_buf[MAX_INPUT_LENGTH], *value_arg, *name_end;
|
||||
char skill_name[MAX_INPUT_LENGTH];
|
||||
|
|
@ -4252,12 +4246,12 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
|
|||
}
|
||||
break;
|
||||
|
||||
case 44: /* stam */
|
||||
case 43: /* stam */
|
||||
vict->points.stamina = RANGE(0, vict->points.max_stamina);
|
||||
affect_total(vict);
|
||||
break;
|
||||
|
||||
case 45: /* str */
|
||||
case 44: /* str */
|
||||
if (IS_NPC(vict) || GET_LEVEL(vict) >= LVL_GRGOD)
|
||||
RANGE(3, 25);
|
||||
else
|
||||
|
|
@ -4265,7 +4259,7 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
|
|||
vict->real_abils.str = value;
|
||||
affect_total(vict);
|
||||
break;
|
||||
case 46: /* thirst */
|
||||
case 45: /* thirst */
|
||||
if (!str_cmp(val_arg, "off")) {
|
||||
GET_COND(vict, THIRST) = -1;
|
||||
send_to_char(ch, "%s's thirst is now off.\r\n", GET_NAME(vict));
|
||||
|
|
@ -4279,13 +4273,13 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
|
|||
return (0);
|
||||
}
|
||||
break;
|
||||
case 47: /* variable */
|
||||
case 46: /* variable */
|
||||
return perform_set_dg_var(ch, vict, val_arg);
|
||||
case 48: /* weight */
|
||||
case 47: /* weight */
|
||||
GET_WEIGHT(vict) = value;
|
||||
affect_total(vict);
|
||||
break;
|
||||
case 49: /* wis */
|
||||
case 48: /* wis */
|
||||
if (IS_NPC(vict) || GET_LEVEL(vict) >= LVL_GRGOD)
|
||||
RANGE(3, 25);
|
||||
else
|
||||
|
|
@ -4293,10 +4287,10 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
|
|||
vict->real_abils.wis = value;
|
||||
affect_total(vict);
|
||||
break;
|
||||
case 50: /* questpoints */
|
||||
case 49: /* questpoints */
|
||||
GET_QUESTPOINTS(vict) = RANGE(0, 100000000);
|
||||
break;
|
||||
case 51: /* questhistory */
|
||||
case 50: /* questhistory */
|
||||
qvnum = atoi(val_arg);
|
||||
if (real_quest(qvnum) == NOTHING) {
|
||||
send_to_char(ch, "That quest doesn't exist.\r\n");
|
||||
|
|
@ -4313,7 +4307,7 @@ static int perform_set(struct char_data *ch, struct char_data *vict, int mode, c
|
|||
}
|
||||
break;
|
||||
}
|
||||
case 52: /* species */
|
||||
case 51: /* species */
|
||||
if ((i = parse_species(val_arg)) == SPECIES_UNDEFINED) {
|
||||
send_to_char(ch, "That is not a species.\r\n");
|
||||
return (0);
|
||||
|
|
@ -4718,10 +4712,6 @@ ACMD (do_zcheck)
|
|||
"- No unarmed combat proficiency set (add skill or weapon)\r\n");
|
||||
}
|
||||
|
||||
if (MOB_FLAGGED(mob, MOB_AGGRESSIVE) && (MOB_FLAGGED(mob, MOB_AGGR_GOOD) || MOB_FLAGGED(mob, MOB_AGGR_EVIL) || MOB_FLAGGED(mob, MOB_AGGR_NEUTRAL)) && (found=1))
|
||||
len += snprintf(buf + len, sizeof(buf) - len,
|
||||
"- Both aggresive and agressive to align.\r\n");
|
||||
|
||||
if (GET_EXP(mob)>MAX_EXP_ALLOWED && (found=1))
|
||||
len += snprintf(buf + len, sizeof(buf) - len,
|
||||
"- Has %d experience (limit: %d)\r\n",
|
||||
|
|
|
|||
|
|
@ -228,9 +228,9 @@ const char *action_bits[] = {
|
|||
"AGGR",
|
||||
"STAY-ZONE",
|
||||
"WIMPY",
|
||||
"AGGR_EVIL",
|
||||
"AGGR_GOOD",
|
||||
"AGGR_NEUTRAL",
|
||||
"RESERVED",
|
||||
"RESERVED",
|
||||
"RESERVED",
|
||||
"MEMORY",
|
||||
"HELPER",
|
||||
"NO_CHARM",
|
||||
|
|
@ -299,8 +299,8 @@ const char *affected_bits[] =
|
|||
"CURSE",
|
||||
"INFRA",
|
||||
"POISON",
|
||||
"PROT-EVIL",
|
||||
"PROT-GOOD",
|
||||
"RESERVED",
|
||||
"RESERVED",
|
||||
"SLEEP",
|
||||
"NO_TRACK",
|
||||
"FLY",
|
||||
|
|
@ -485,9 +485,9 @@ const char *extra_bits[] = {
|
|||
"MAGIC",
|
||||
"NO_DROP",
|
||||
"BLESS",
|
||||
"ANTI_GOOD",
|
||||
"ANTI_EVIL",
|
||||
"ANTI_NEUTRAL",
|
||||
"RESERVED",
|
||||
"RESERVED",
|
||||
"RESERVED",
|
||||
"ANTI_SORCEROR",
|
||||
"ANTI_CLERIC",
|
||||
"ANTI_ROGUE",
|
||||
|
|
|
|||
7
src/db.c
7
src/db.c
|
|
@ -1902,13 +1902,6 @@ void parse_mobile(FILE *mob_f, int nr)
|
|||
REMOVE_BIT_AR(AFF_FLAGS(mob_proto + i), AFF_CHARM);
|
||||
REMOVE_BIT_AR(AFF_FLAGS(mob_proto + i), AFF_POISON);
|
||||
REMOVE_BIT_AR(AFF_FLAGS(mob_proto + i), AFF_SLEEP);
|
||||
if (MOB_FLAGGED(mob_proto + i, MOB_AGGRESSIVE) && MOB_FLAGGED(mob_proto + i, MOB_AGGR_GOOD))
|
||||
REMOVE_BIT_AR(MOB_FLAGS(mob_proto + i), MOB_AGGR_GOOD);
|
||||
if (MOB_FLAGGED(mob_proto + i, MOB_AGGRESSIVE) && MOB_FLAGGED(mob_proto + i, MOB_AGGR_NEUTRAL))
|
||||
REMOVE_BIT_AR(MOB_FLAGS(mob_proto + i), MOB_AGGR_NEUTRAL);
|
||||
if (MOB_FLAGGED(mob_proto + i, MOB_AGGRESSIVE) && MOB_FLAGGED(mob_proto + i, MOB_AGGR_EVIL))
|
||||
REMOVE_BIT_AR(MOB_FLAGS(mob_proto + i), MOB_AGGR_EVIL);
|
||||
|
||||
check_bitvector_names(AFF_FLAGS(mob_proto + i)[0], affected_bits_count, buf2, "mobile affect");
|
||||
|
||||
/* This is necessary, since if we have conventional world files, &letter is
|
||||
|
|
|
|||
19
src/fight.c
19
src/fight.c
|
|
@ -57,7 +57,6 @@ static struct char_data *next_combat_list = NULL;
|
|||
static void perform_group_gain(struct char_data *ch, int base, struct char_data *victim);
|
||||
static void dam_message(int dam, struct char_data *ch, struct char_data *victim, int w_type);
|
||||
static void make_corpse(struct char_data *ch);
|
||||
static void change_alignment(struct char_data *ch, struct char_data *victim);
|
||||
static void group_gain(struct char_data *ch, struct char_data *victim);
|
||||
static void solo_gain(struct char_data *ch, struct char_data *victim);
|
||||
/** @todo refactor this function name */
|
||||
|
|
@ -281,14 +280,6 @@ static void make_corpse(struct char_data *ch)
|
|||
obj_to_room(corpse, IN_ROOM(ch));
|
||||
}
|
||||
|
||||
/* When ch kills victim */
|
||||
static void change_alignment(struct char_data *ch, struct char_data *victim)
|
||||
{
|
||||
/* new alignment change algorithm: if you kill a monster with alignment A,
|
||||
* you move 1/16th of the way to having alignment -A. Simple and fast. */
|
||||
GET_ALIGNMENT(ch) += (-GET_ALIGNMENT(victim) - GET_ALIGNMENT(ch)) / 16;
|
||||
}
|
||||
|
||||
void death_cry(struct char_data *ch)
|
||||
{
|
||||
int door;
|
||||
|
|
@ -354,11 +345,9 @@ void die(struct char_data * ch, struct char_data * killer)
|
|||
static void perform_group_gain(struct char_data *ch, int base,
|
||||
struct char_data *victim)
|
||||
{
|
||||
int share;
|
||||
|
||||
share = MIN(CONFIG_MAX_EXP_GAIN, MAX(1, base));
|
||||
|
||||
change_alignment(ch, victim);
|
||||
(void)ch;
|
||||
(void)base;
|
||||
(void)victim;
|
||||
}
|
||||
|
||||
static void group_gain(struct char_data *ch, struct char_data *victim)
|
||||
|
|
@ -400,8 +389,6 @@ static void solo_gain(struct char_data *ch, struct char_data *victim)
|
|||
exp += MAX(0, (exp * MIN(8, (GET_LEVEL(victim) - GET_LEVEL(ch)))) / 8);
|
||||
|
||||
exp = MAX(exp, 1);
|
||||
|
||||
change_alignment(ch, victim);
|
||||
}
|
||||
|
||||
static char *replace_string(const char *str, const char *weapon_singular, const char *weapon_plural)
|
||||
|
|
|
|||
|
|
@ -525,17 +525,6 @@ static int apply_ac(struct char_data *ch, int eq_pos)
|
|||
return (factor * GET_OBJ_VAL(GET_EQ(ch, eq_pos), 0));
|
||||
}
|
||||
|
||||
int invalid_align(struct char_data *ch, struct obj_data *obj)
|
||||
{
|
||||
if (OBJ_FLAGGED(obj, ITEM_ANTI_EVIL) && IS_EVIL(ch))
|
||||
return TRUE;
|
||||
if (OBJ_FLAGGED(obj, ITEM_ANTI_GOOD) && IS_GOOD(ch))
|
||||
return TRUE;
|
||||
if (OBJ_FLAGGED(obj, ITEM_ANTI_NEUTRAL) && IS_NEUTRAL(ch))
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void equip_char(struct char_data *ch, struct obj_data *obj, int pos)
|
||||
{
|
||||
int j;
|
||||
|
|
@ -558,7 +547,7 @@ void equip_char(struct char_data *ch, struct obj_data *obj, int pos)
|
|||
log("SYSERR: EQUIP: Obj is in_room when equip.");
|
||||
return;
|
||||
}
|
||||
if (invalid_align(ch, obj) || invalid_class(ch, obj)) {
|
||||
if (invalid_class(ch, obj)) {
|
||||
act("You are zapped by $p and instantly let go of it.", FALSE, ch, obj, 0, TO_CHAR);
|
||||
act("$n is zapped by $p and instantly lets go of it.", FALSE, ch, obj, 0, TO_ROOM);
|
||||
/* Changed to drop in inventory instead of the ground. */
|
||||
|
|
|
|||
|
|
@ -40,7 +40,6 @@ void obj_from_char(struct obj_data *object);
|
|||
|
||||
void equip_char(struct char_data *ch, struct obj_data *obj, int pos);
|
||||
struct obj_data *unequip_char(struct char_data *ch, int pos);
|
||||
int invalid_align(struct char_data *ch, struct obj_data *obj);
|
||||
|
||||
void obj_to_room(struct obj_data *object, room_rnum room);
|
||||
void obj_from_room(struct obj_data *object);
|
||||
|
|
|
|||
21
src/magic.c
21
src/magic.c
|
|
@ -237,23 +237,9 @@ int mag_damage(int level, struct char_data *ch, struct char_data *victim,
|
|||
/* Mostly clerics */
|
||||
case SPELL_DISPEL_EVIL:
|
||||
dam = dice(6, 8) + 6;
|
||||
if (IS_EVIL(ch)) {
|
||||
victim = ch;
|
||||
dam = GET_HIT(ch) - 1;
|
||||
} else if (IS_GOOD(victim)) {
|
||||
act("The gods protect $N.", FALSE, ch, 0, victim, TO_CHAR);
|
||||
return (0);
|
||||
}
|
||||
break;
|
||||
case SPELL_DISPEL_GOOD:
|
||||
dam = dice(6, 8) + 6;
|
||||
if (IS_GOOD(ch)) {
|
||||
victim = ch;
|
||||
dam = GET_HIT(ch) - 1;
|
||||
} else if (IS_EVIL(victim)) {
|
||||
act("The gods protect $N.", FALSE, ch, 0, victim, TO_CHAR);
|
||||
return (0);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
|
|
@ -461,13 +447,6 @@ void mag_affects(int level, struct char_data *ch, struct char_data *victim,
|
|||
to_room = "$n gets violently ill!";
|
||||
break;
|
||||
|
||||
case SPELL_PROT_FROM_EVIL:
|
||||
af[0].duration = 24;
|
||||
SET_BIT_AR(af[0].bitvector, AFF_PROTECT_EVIL);
|
||||
accum_duration = TRUE;
|
||||
to_vict = "You feel invulnerable!";
|
||||
break;
|
||||
|
||||
case SPELL_SANCTUARY:
|
||||
af[0].duration = 4;
|
||||
SET_BIT_AR(af[0].bitvector, AFF_SANCTUARY);
|
||||
|
|
|
|||
|
|
@ -99,10 +99,7 @@ void mobile_activity(void)
|
|||
if (MOB_FLAGGED(ch, MOB_WIMPY) && AWAKE(vict))
|
||||
continue;
|
||||
|
||||
if (MOB_FLAGGED(ch, MOB_AGGRESSIVE ) ||
|
||||
(MOB_FLAGGED(ch, MOB_AGGR_EVIL ) && IS_EVIL(vict)) ||
|
||||
(MOB_FLAGGED(ch, MOB_AGGR_NEUTRAL) && IS_NEUTRAL(vict)) ||
|
||||
(MOB_FLAGGED(ch, MOB_AGGR_GOOD ) && IS_GOOD(vict))) {
|
||||
if (MOB_FLAGGED(ch, MOB_AGGRESSIVE)) {
|
||||
|
||||
/* Can a master successfully control the charmed monster? */
|
||||
if (aggressive_mob_on_a_leash(ch, ch->master, vict))
|
||||
|
|
@ -267,4 +264,3 @@ static bool aggressive_mob_on_a_leash(struct char_data *slave, struct char_data
|
|||
/* So sorry, now you're a player killer... Tsk tsk. */
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -226,9 +226,7 @@ static void auto_equip(struct char_data *ch, struct obj_data *obj, int location)
|
|||
|
||||
if (location > 0) { /* Wearable. */
|
||||
if (!GET_EQ(ch,j)) {
|
||||
/* Check the characters's alignment to prevent them from being zapped
|
||||
* through the auto-equipping. */
|
||||
if (invalid_align(ch, obj) || invalid_class(ch, obj))
|
||||
if (invalid_class(ch, obj))
|
||||
location = LOC_INVENTORY;
|
||||
else
|
||||
equip_char(ch, obj, j);
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@
|
|||
#define PFDEF_LEVEL 0
|
||||
#define PFDEF_HEIGHT 0
|
||||
#define PFDEF_WEIGHT 0
|
||||
#define PFDEF_ALIGNMENT 0
|
||||
#define PFDEF_PLRFLAGS 0
|
||||
#define PFDEF_AFFFLAGS 0
|
||||
#define PFDEF_SAVETHROW 0
|
||||
|
|
|
|||
|
|
@ -276,7 +276,6 @@ int load_char(const char *name, struct char_data *ch)
|
|||
GET_WEIGHT(ch) = PFDEF_WEIGHT;
|
||||
GET_ROLEPLAY_AGE(ch) = 0;
|
||||
GET_ROLEPLAY_AGE_YEAR(ch) = 0;
|
||||
GET_ALIGNMENT(ch) = PFDEF_ALIGNMENT;
|
||||
for (i = 0; i < NUM_OF_SAVING_THROWS; i++)
|
||||
GET_SAVE(ch, i) = PFDEF_SAVETHROW;
|
||||
GET_LOADROOM(ch) = PFDEF_LOADROOM;
|
||||
|
|
@ -361,7 +360,6 @@ int load_char(const char *name, struct char_data *ch)
|
|||
AFF_FLAGS(ch)[0] = asciiflag_conv(line);
|
||||
}
|
||||
if (!strcmp(tag, "Affs")) load_affects(fl, ch);
|
||||
else if (!strcmp(tag, "Alin")) GET_ALIGNMENT(ch) = atoi(line);
|
||||
else if (!strcmp(tag, "Alis")) read_aliases_ascii(fl, ch, atoi(line));
|
||||
break;
|
||||
|
||||
|
|
@ -696,7 +694,6 @@ void save_char(struct char_data * ch)
|
|||
if (GET_HOST(ch)) fprintf(fl, "Host: %s\n", GET_HOST(ch));
|
||||
if (GET_HEIGHT(ch) != PFDEF_HEIGHT) fprintf(fl, "Hite: %d\n", GET_HEIGHT(ch));
|
||||
if (GET_WEIGHT(ch) != PFDEF_WEIGHT) fprintf(fl, "Wate: %d\n", GET_WEIGHT(ch));
|
||||
if (GET_ALIGNMENT(ch) != PFDEF_ALIGNMENT) fprintf(fl, "Alin: %d\n", GET_ALIGNMENT(ch));
|
||||
|
||||
|
||||
sprintascii(bits, PLR_FLAGS(ch)[0]);
|
||||
|
|
|
|||
42
src/sedit.c
42
src/sedit.c
|
|
@ -31,6 +31,7 @@ static void sedit_shop_flags_menu(struct descriptor_data *d);
|
|||
static void sedit_no_trade_menu(struct descriptor_data *d);
|
||||
static void sedit_types_menu(struct descriptor_data *d);
|
||||
static void sedit_disp_menu(struct descriptor_data *d);
|
||||
static void format_notrade_classes(bitvector_t flags, char *out, size_t outsz);
|
||||
|
||||
|
||||
void sedit_save_internally(struct descriptor_data *d)
|
||||
|
|
@ -44,6 +45,34 @@ static void sedit_save_to_disk(int num)
|
|||
save_shops(num);
|
||||
}
|
||||
|
||||
static void format_notrade_classes(bitvector_t flags, char *out, size_t outsz)
|
||||
{
|
||||
size_t len = 0;
|
||||
int i, found = 0;
|
||||
|
||||
if (!out || outsz == 0)
|
||||
return;
|
||||
|
||||
out[0] = '\0';
|
||||
|
||||
for (i = TRADE_CLASS_START; i < NUM_TRADERS; i++) {
|
||||
if (IS_SET(flags, 1 << i)) {
|
||||
int n = snprintf(out + len, outsz - len, "%s%s", found ? " " : "", trade_letters[i]);
|
||||
|
||||
if (n < 0 || (size_t)n >= outsz - len) {
|
||||
out[outsz - 1] = '\0';
|
||||
return;
|
||||
}
|
||||
|
||||
len += (size_t)n;
|
||||
found = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found)
|
||||
strlcpy(out, "NOBITS", outsz);
|
||||
}
|
||||
|
||||
/* utility functions */
|
||||
ACMD(do_oasis_sedit)
|
||||
{
|
||||
|
|
@ -346,11 +375,12 @@ static void sedit_no_trade_menu(struct descriptor_data *d)
|
|||
|
||||
get_char_colors(d->character);
|
||||
clear_screen(d);
|
||||
for (i = 0; i < NUM_TRADERS; i++) {
|
||||
write_to_output(d, "%s%2d%s) %-20.20s %s", grn, i + 1, nrm, trade_letters[i],
|
||||
for (i = 0; i < NUM_TRADE_CLASSES; i++) {
|
||||
write_to_output(d, "%s%2d%s) %-20.20s %s", grn, i + 1, nrm,
|
||||
trade_letters[TRADE_CLASS_START + i],
|
||||
!(++count % 2) ? "\r\n" : "");
|
||||
}
|
||||
sprintbit(S_NOTRADE(OLC_SHOP(d)), trade_letters, bits, sizeof(bits));
|
||||
format_notrade_classes(S_NOTRADE(OLC_SHOP(d)), bits, sizeof(bits));
|
||||
write_to_output(d, "\r\nCurrently won't trade with: %s%s%s\r\n"
|
||||
"Enter choice : ", cyn, bits, nrm);
|
||||
OLC_MODE(d) = SEDIT_NOTRADE;
|
||||
|
|
@ -382,7 +412,7 @@ static void sedit_disp_menu(struct descriptor_data *d)
|
|||
get_char_colors(d->character);
|
||||
|
||||
clear_screen(d);
|
||||
sprintbit(S_NOTRADE(shop), trade_letters, buf1, sizeof(buf1));
|
||||
format_notrade_classes(S_NOTRADE(shop), buf1, sizeof(buf1));
|
||||
sprintbit(S_BITVECTOR(shop), shop_bits, buf2, sizeof(buf2));
|
||||
write_to_output(d,
|
||||
"-- Shop Number : [%s%d%s]\r\n"
|
||||
|
|
@ -756,8 +786,8 @@ void sedit_parse(struct descriptor_data *d, char *arg)
|
|||
}
|
||||
break;
|
||||
case SEDIT_NOTRADE:
|
||||
if ((i = LIMIT(atoi(arg), 0, NUM_TRADERS)) > 0) {
|
||||
TOGGLE_BIT(S_NOTRADE(OLC_SHOP(d)), 1 << (i - 1));
|
||||
if ((i = LIMIT(atoi(arg), 0, NUM_TRADE_CLASSES)) > 0) {
|
||||
TOGGLE_BIT(S_NOTRADE(OLC_SHOP(d)), 1 << (TRADE_CLASS_START + i - 1));
|
||||
sedit_no_trade_menu(d);
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
19
src/shop.c
19
src/shop.c
|
|
@ -29,9 +29,9 @@
|
|||
/* Global variables definitions used externally */
|
||||
/* Constant list for printing out who we sell to */
|
||||
const char *trade_letters[] = {
|
||||
"Good", /* First, the alignment based ones */
|
||||
"Evil",
|
||||
"Neutral",
|
||||
"RESERVED1",
|
||||
"RESERVED2",
|
||||
"RESERVED3",
|
||||
"Sorceror", /* Then the class based ones */
|
||||
"Cleric",
|
||||
"Rogue",
|
||||
|
|
@ -119,13 +119,6 @@ static int is_ok_char(struct char_data *keeper, struct char_data *ch, int shop_n
|
|||
if (IS_GOD(ch))
|
||||
return (TRUE);
|
||||
|
||||
if ((IS_GOOD(ch) && NOTRADE_GOOD(shop_nr)) ||
|
||||
(IS_EVIL(ch) && NOTRADE_EVIL(shop_nr)) ||
|
||||
(IS_NEUTRAL(ch) && NOTRADE_NEUTRAL(shop_nr))) {
|
||||
snprintf(buf, sizeof(buf), "%s %s", GET_NAME(ch), MSG_NO_SELL_ALIGN);
|
||||
do_tell(keeper, buf, cmd_tell, 0);
|
||||
return (FALSE);
|
||||
}
|
||||
if (IS_NPC(ch))
|
||||
return (TRUE);
|
||||
|
||||
|
|
@ -1361,7 +1354,7 @@ void assign_the_shopkeepers(void)
|
|||
|
||||
static char *customer_string(int shop_nr, int detailed)
|
||||
{
|
||||
int sindex = 0, flag = 1, nlen;
|
||||
int sindex = TRADE_CLASS_START, flag = (1 << TRADE_CLASS_START), nlen;
|
||||
size_t len = 0;
|
||||
static char buf[256];
|
||||
|
||||
|
|
@ -1433,7 +1426,7 @@ static void list_all_shops(struct char_data *ch)
|
|||
static void list_detailed_shop(struct char_data *ch, int shop_nr)
|
||||
{
|
||||
struct char_data *k;
|
||||
int sindex, column, flag = 1, found = 0;
|
||||
int sindex, column, flag = (1 << TRADE_CLASS_START), found = 0;
|
||||
/* char *ptrsave; */
|
||||
|
||||
send_to_char(ch, "Vnum: [%5d], Rnum: [%5d]\r\n", SHOP_NUM(shop_nr), shop_nr + 1);
|
||||
|
|
@ -1484,7 +1477,7 @@ static void list_detailed_shop(struct char_data *ch, int shop_nr)
|
|||
/* send_to_char(ch, "Customers: %s\r\n", (ptrsave = customer_string(shop_nr, TRUE)) ? ptrsave : "None"); */
|
||||
send_to_char(ch, "Customers: ");
|
||||
column = 12; /* ^^^ strlen ^^^ */
|
||||
for (sindex = 0; *trade_letters[sindex] != '\n'; sindex++) {
|
||||
for (sindex = TRADE_CLASS_START; *trade_letters[sindex] != '\n'; sindex++) {
|
||||
char buf1[128];
|
||||
int linelen;
|
||||
|
||||
|
|
|
|||
13
src/shop.h
13
src/shop.h
|
|
@ -74,9 +74,9 @@ struct shop_data {
|
|||
#define LIST_ROOM 2
|
||||
|
||||
/* Whom will we not trade with (bitvector for SHOP_TRADE_WITH()) */
|
||||
#define TRADE_NOGOOD (1 << 0)
|
||||
#define TRADE_NOEVIL (1 << 1)
|
||||
#define TRADE_NONEUTRAL (1 << 2)
|
||||
#define TRADE_RESERVED1 (1 << 0)
|
||||
#define TRADE_RESERVED2 (1 << 1)
|
||||
#define TRADE_RESERVED3 (1 << 2)
|
||||
#define TRADE_NOSORCEROR (1 << 3)
|
||||
#define TRADE_NOCLERIC (1 << 4)
|
||||
#define TRADE_NOROGUE (1 << 5)
|
||||
|
|
@ -87,6 +87,9 @@ struct shop_data {
|
|||
#define TRADE_NODRUID (1 << 10)
|
||||
/** Total number of trade types */
|
||||
#define NUM_TRADERS 11
|
||||
#define TRADE_RESERVED_COUNT 3
|
||||
#define TRADE_CLASS_START TRADE_RESERVED_COUNT
|
||||
#define NUM_TRADE_CLASSES (NUM_TRADERS - TRADE_RESERVED_COUNT)
|
||||
|
||||
struct stack_data {
|
||||
int data[100];
|
||||
|
|
@ -123,9 +126,6 @@ struct stack_data {
|
|||
#define SHOP_SELLPROFIT(i) (shop_index[(i)].profit_sell)
|
||||
#define SHOP_FUNC(i) (shop_index[(i)].func)
|
||||
|
||||
#define NOTRADE_GOOD(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOGOOD))
|
||||
#define NOTRADE_EVIL(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOEVIL))
|
||||
#define NOTRADE_NEUTRAL(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NONEUTRAL))
|
||||
#define NOTRADE_SORCEROR(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOSORCEROR))
|
||||
#define NOTRADE_CLERIC(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOCLERIC))
|
||||
#define NOTRADE_ROGUE(i) (IS_SET(SHOP_TRADE_WITH((i)), TRADE_NOROGUE))
|
||||
|
|
@ -153,7 +153,6 @@ struct stack_data {
|
|||
#define MSG_CLOSED_FOR_DAY "Sorry, come back tomorrow."
|
||||
#define MSG_NO_STEAL_HERE "$n is a bloody thief!"
|
||||
#define MSG_NO_SEE_CHAR "I don't trade with someone I can't see!"
|
||||
#define MSG_NO_SELL_ALIGN "Get out of here before I call the guards!"
|
||||
#define MSG_NO_SELL_CLASS "We don't serve your kind here!"
|
||||
#define MSG_NO_USED_WANDSTAFF "I don't buy used up wands or staves!"
|
||||
#define MSG_CANT_KILL_KEEPER "Get out of here before I call the guards!"
|
||||
|
|
|
|||
|
|
@ -319,13 +319,6 @@ SPECIAL(sorceror)
|
|||
if (GET_LEVEL(ch) > 7 && rand_number(0, 8) == 0)
|
||||
cast_spell(ch, vict, NULL, SPELL_BLINDNESS);
|
||||
|
||||
if (GET_LEVEL(ch) > 12 && rand_number(0, 12) == 0) {
|
||||
if (IS_EVIL(ch))
|
||||
cast_spell(ch, vict, NULL, SPELL_ENERGY_DRAIN);
|
||||
else if (IS_GOOD(ch))
|
||||
cast_spell(ch, vict, NULL, SPELL_DISPEL_EVIL);
|
||||
}
|
||||
|
||||
if (rand_number(0, 4))
|
||||
return (TRUE);
|
||||
|
||||
|
|
|
|||
|
|
@ -388,14 +388,7 @@ ASPELL(spell_enchant_weapon)
|
|||
obj->affected[1].location = APPLY_PROFICIENCY;
|
||||
obj->affected[1].modifier = 1 + (level >= 20);
|
||||
|
||||
if (IS_GOOD(ch)) {
|
||||
SET_BIT_AR(GET_OBJ_EXTRA(obj), ITEM_ANTI_EVIL);
|
||||
act("$p glows blue.", FALSE, ch, obj, 0, TO_CHAR);
|
||||
} else if (IS_EVIL(ch)) {
|
||||
SET_BIT_AR(GET_OBJ_EXTRA(obj), ITEM_ANTI_GOOD);
|
||||
act("$p glows red.", FALSE, ch, obj, 0, TO_CHAR);
|
||||
} else
|
||||
act("$p glows yellow.", FALSE, ch, obj, 0, TO_CHAR);
|
||||
act("$p glows yellow.", FALSE, ch, obj, 0, TO_CHAR);
|
||||
}
|
||||
|
||||
ASPELL(spell_detect_poison)
|
||||
|
|
|
|||
|
|
@ -255,9 +255,9 @@
|
|||
#define MOB_AGGRESSIVE 5 /**< Mob auto-attacks everybody nearby */
|
||||
#define MOB_STAY_ZONE 6 /**< Mob shouldn't wander out of zone */
|
||||
#define MOB_WIMPY 7 /**< Mob flees if severely injured */
|
||||
#define MOB_AGGR_EVIL 8 /**< Auto-attack any evil PC's */
|
||||
#define MOB_AGGR_GOOD 9 /**< Auto-attack any good PC's */
|
||||
#define MOB_AGGR_NEUTRAL 10 /**< Auto-attack any neutral PC's */
|
||||
#define MOB_AGGR_RESERVED1 8 /**< Reserved (unused) */
|
||||
#define MOB_AGGR_RESERVED2 9 /**< Reserved (unused) */
|
||||
#define MOB_AGGR_RESERVED3 10 /**< Reserved (unused) */
|
||||
#define MOB_MEMORY 11 /**< remember attackers if attacked */
|
||||
#define MOB_HELPER 12 /**< attack PCs fighting other NPCs */
|
||||
#define MOB_NOCHARM 13 /**< Mob can't be charmed */
|
||||
|
|
@ -321,8 +321,8 @@
|
|||
#define AFF_CURSE 10 /**< Char is cursed */
|
||||
#define AFF_INFRAVISION 11 /**< Char can see in dark */
|
||||
#define AFF_POISON 12 /**< (R) Char is poisoned */
|
||||
#define AFF_PROTECT_EVIL 13 /**< Char protected from evil */
|
||||
#define AFF_PROTECT_GOOD 14 /**< Char protected from good */
|
||||
#define AFF_RESERVED13 13 /**< Reserved (unused) */
|
||||
#define AFF_RESERVED14 14 /**< Reserved (unused) */
|
||||
#define AFF_SLEEP 15 /**< (R) Char magically asleep */
|
||||
#define AFF_NOTRACK 16 /**< Char can't be tracked */
|
||||
#define AFF_FLYING 17 /**< Char is flying */
|
||||
|
|
@ -474,9 +474,9 @@
|
|||
#define ITEM_MAGIC 6 /**< Item is magical */
|
||||
#define ITEM_NODROP 7 /**< Item is cursed: can't drop */
|
||||
#define ITEM_BLESS 8 /**< Item is blessed */
|
||||
#define ITEM_ANTI_GOOD 9 /**< Not usable by good people */
|
||||
#define ITEM_ANTI_EVIL 10 /**< Not usable by evil people */
|
||||
#define ITEM_ANTI_NEUTRAL 11 /**< Not usable by neutral people */
|
||||
#define ITEM_RESERVED9 9 /**< Reserved (unused) */
|
||||
#define ITEM_RESERVED10 10 /**< Reserved (unused) */
|
||||
#define ITEM_RESERVED11 11 /**< Reserved (unused) */
|
||||
#define ITEM_ANTI_SORCEROR 12 /**< Not usable by sorcerors */
|
||||
#define ITEM_ANTI_CLERIC 13 /**< Not usable by clerics */
|
||||
#define ITEM_ANTI_ROGUE 14 /**< Not usable by rogues */
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ struct char_point_data_plrtoascii {
|
|||
* in player_special_data.
|
||||
*/
|
||||
struct char_special_data_saved_plrtoascii {
|
||||
int alignment; /* +-1000 for alignments */
|
||||
int alignment;
|
||||
long idnum; /* player's idnum; -1 for mobiles */
|
||||
long /*bitvector_t*/ act; /* act flag for NPC's; player flag for PC's */
|
||||
|
||||
|
|
@ -212,8 +212,6 @@ void convert(char *filename)
|
|||
|
||||
/* char_special_data_saved */
|
||||
csds = &(player.char_specials_saved);
|
||||
if (csds->alignment != PFDEF_ALIGNMENT)
|
||||
fprintf(outfile, "Alin: %d\n", csds->alignment);
|
||||
fprintf(outfile, "Id : %d\n", (int)csds->idnum);
|
||||
if (csds->act != PFDEF_PLRFLAGS)
|
||||
fprintf(outfile, "Act : %d\n", (int)csds->act);
|
||||
|
|
|
|||
|
|
@ -749,13 +749,6 @@ do \
|
|||
#define CAN_SEE_IN_DARK(ch) \
|
||||
(AFF_FLAGGED(ch, AFF_INFRAVISION) || (!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_HOLYLIGHT)))
|
||||
|
||||
/** Defines if ch is good. */
|
||||
#define IS_GOOD(ch) (GET_ALIGNMENT(ch) >= 350)
|
||||
/** Defines if ch is evil. */
|
||||
#define IS_EVIL(ch) (GET_ALIGNMENT(ch) <= -350)
|
||||
/** Defines if ch is neither good nor evil. */
|
||||
#define IS_NEUTRAL(ch) (!IS_GOOD(ch) && !IS_EVIL(ch))
|
||||
|
||||
/** Old wait state function.
|
||||
* @deprecated Use GET_WAIT_STATE */
|
||||
#define WAIT_STATE(ch, cycle) do { GET_WAIT_STATE(ch) = (cycle); } while(0)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue