Clean up legacy practice code

This commit is contained in:
kinther 2025-12-27 15:28:42 -08:00
parent e5515f4ca5
commit 8eb30084b0
16 changed files with 59 additions and 745 deletions

View file

@ -226,7 +226,7 @@ sell objects to players.
A single zone typically contains up to than 100 rooms, 100 monster definitions
and 100 object definitions, but a large region can be subdivided into several
zones at the authors discretion. For example, the City of Midgaard is divided
zones at the authors discretion. For example, a large city can be divided
into two zones, one for the main city and one for the southern residential area.
In addition to this, with the new zone system describing top and bottom rooms
of a zone, zones can contain very few rooms and indeed can overlap with other
@ -242,7 +242,7 @@ independent, so there can be both a room number 3001 and an object number
refers to each entity by its Vnum and never by name. Vnums are normally not
seen by players. Each zone itself also has a Vnum. A common convention is to
number the zone with the Vnums of its component rooms, divided by 100. For
example, Midgaard is zone 30, consisting of rooms 3000 to 3099. Mobile and
example, the main city is zone 30, consisting of rooms 3000 to 3099. Mobile and
object numbering follows the same convention.
The author of the zone can define aspects of each room such as the terrain type,
@ -1311,7 +1311,7 @@ terminated by the literal letter S.
Virtual Number An arbitrary number used to identify the zone. Zone numbers are
traditionally the room numbers of the zone divided by 100; for example,
Midgaard, which consists of rooms 3000 through 3099, is zone 30.
The main city, which consists of rooms 3000 through 3099, is zone 30.
Zone Name A label given to the zone so that it can be identified in system
logs.
@ -1444,7 +1444,7 @@ Zone File Example
A sample zone file annotated with comments follows.
#30 * This is zone number 30
Northern Midgaard Main City~ * The name of the zone
Northern Main City~ * The name of the zone
3099 15 2 * Top of zone is room #3099; it resets every 15 minutes.
* * Resets regardless of people.
*
@ -1823,7 +1823,7 @@ interactions you want it to perform. See the help files in game for details.
8.2 Trigger File Example
#100
Obj Command 100 - portal to Midgaard~
Obj Command 100 - portal to the capital~
1 c 7
en~
if %cmd.mudcommand% == enter && %arg% /= portal

View file

@ -1559,7 +1559,7 @@ foreground colors.
Basic special procedures have largely been replaced by trigedit. Thus shifting the
workload from the coder to the builder to add life and creativity into their zones.
While it is easier, and less time consuming, to make triggers than special
procedures they are still used for such functions as banks and guildmasters.
procedures they are still used for such functions as banks.
Using special procedures, your virtual world is not just a bunch of monsters,
objects and rooms, reduced to a number of statistics. Just like good descriptions
@ -1570,7 +1570,7 @@ Several special procedures are provided with stock tbaMUD which you can use to
create your own and get used to the mechanics of special procedures. These special
procedures can be found in castle.c and spec_procs.c. They range from very simple
procedures, like puff (pulsed special procedure) or bank (command-driven special
procedure), to very complex procedures like the guild master.
procedure), to very complex procedures.
In this chapter, FALSE refers to the value 0 and TRUE to any non-zero value.

View file

@ -308,7 +308,7 @@ You receive a punch in your kidneys which ends your worldly misery -- R.I.P.!
$n punches $N in the kidneys causing immediate death!
You wildly punch at the air, missing $N.
$n misses a wild punch at you.
$n practices shadow-boxing while $N takes a break.
$n shadow-boxes while $N takes a break.
#
#
#
@ -861,4 +861,3 @@ $N is hit by $n's lightning breath.
$N is immortal and immune to lightning breath.
$n tries to breath lightning upon you.
$n tries to breath lightning upon $N.

View file

@ -930,9 +930,8 @@ Backstab is a way to sneak up on a person and attempt to place your dagger
in his back, at exactly the point where it does most damage. A successful
backstab gives a damage multiplier, depending on your level:
The chance of successfully backstabbing a person depends on how well you
have practiced backstab at your guild. You can always backstab sleeping
people.
The chance of successfully backstabbing a person depends on your backstab
skill. You can always backstab sleeping people.
#0
BALANCE BALANCING
@ -1007,7 +1006,7 @@ BASH
Fighters only.
The success of a bash depends upon how many times you have practiced. To bash
The success of a bash depends on your bash skill. To bash
someone is to attempt to 'knock' that person over. If you succeed, you will
inflict minor damage, and cause the victim to fall on its rear. The victim
will be unable to issue any commands for 2 rounds of violence. If you miss
@ -1684,7 +1683,6 @@ next_in_room - The next mob/player in the room as a variable (id) nice to
use for loops, or an empty return @RTSTAT 23@n
pos() - %actor.pos% returns position. Subfield modifies. Sleeping,
resting, sitting, fighting, standing. @RTSTAT 1399, 20997@n
prac() - The actor's number of practices. Subfield adjusts.
pref() - Checks if actor has PRF flag enabled. @RTSTAT 1210@n
quest - Returns the current quest (or 0 if there's no current quest).
questdone(#) - Returns TRUE (1) if the quest vnum (#) has been completed.
@ -1697,8 +1695,6 @@ saving_breath() - The actors saving throw for breath weapons. Subfield adjusts.
saving_spell() - The actors saving throw for spells. Subfield adjusts.
sex - The actor's sex, as a string: MALE, FEMALE, or NEUTRAL.
skill() - The percentage of learnedness in the skill subfield.
skillset("" #) - Set the actors practiced level any skill or spell (1-100).
%actor.skillset("magic missile" 95)%.
thirst() - The actor's thirst. Subfield sets, -1 is off.
title() - The actor's title. Subfield sets. Not used for mobs.
varexists() - Returns 1 if global variable in subfield exists, 0 if not.
@ -1749,7 +1745,7 @@ Checking load info for the beastly fido...
[ 3012] Main Street (15 Max.)
> checkload t 100
Checking load info for the object trigger 'Portal to Midgaard - 100':
Checking load info for the object trigger 'Portal to the Capital - 100':
(obj) [ 100] the portal
See also: LINKS, RLIST, OLIST, MLIST, SLIST
@ -1845,11 +1841,11 @@ Clerics have an ancient belief in not carrying sharp weapons. Hence, they can
only wield bludgeoning weapons. This class gives you the wisdom of peace,
blessing and healing, though it is possible to learn more violent spells.
You can improve your spells by using the practice command.
You can improve your spells by using them.
See @RHELP SPELLS@n for a list of spells available.
See also: PRACTICE, SPELLS
See also: SPELLS
#0
CLSOLC
@ -4033,7 +4029,7 @@ INFORMATION
The following commands deal with information - for more info, @RHELP KEYWORD@n
RULES POLICY - The rules of the game.
SCORE AFFECTS COINS TOGGLE PRACTICE - Info about yourself and your settings.
SCORE AFFECTS COINS TOGGLE - Info about yourself and your settings.
HELP INFO NEWS MOTD IMOTD - Info about the game, recent changes.
WHO WHERE CONSIDER FLAGS TITLE - Info on other players.
TIME DATE - Info on time.
@ -4773,11 +4769,11 @@ MAGIC-USER WIZARD MAGE
This is the class of powerful and violent magic, but the magic user do not
control the nature, and can therefore not bless and such.
You can improve your spells by using the practice command.
You can improve your spells by using them.
See @RHELP SPELLS@n for a list of spells available.
See also: PRACTICE, SPELLS
See also: SPELLS
#0
MAKEUID UID UNIQUE
@ -5451,7 +5447,7 @@ Usage: murder [target]
Kill command to hit another player. To avoid accidental flagging (i.e.
trying to type kiss Nia but accidentally typing kill Nia).
See also: FLAGS
See also: SKILLS
#0
MUTE SQUELCH
@ -5461,7 +5457,7 @@ Usage: mute <player>
MUTE is used to prevent a player from using global communication channels.
It is a toggle that can be turned on and off by the same command.
See also: FLAGS
See also: SKILLS
#2
MV MOVEPOINTS MOVE-POINTS MOVEMENTPOINTS MOVEMENT-POINTS
@ -6728,22 +6724,6 @@ game and will have to be redone. This is typical of people who are power
hungry and are building for themselves and not for others. That is not a
sign of a good builder (see @RHELP BUILDER@n).
#2
PRACTICE PRACTISE TRAINING GUILDS GUILDMASTERS PRACTICING EXPERIENCES
Usage: practice [skill or spell name]
Practice is the way you improve your spells and skills. You can only do
so in a guild, where a guildmaster can help you train. You learn new skills
as you gain levels. A guildmaster can be found throughout the realms and will
charge you for your training.
If you type practice anywhere other than with a guildmaster, you will get a
list of all of the spells and skills you know and your level of proficiency at
each.
See also: SPELLS, SKILLS, LEVELS
#0
PRAISE REVIEWS RATINGS
Review Submitted By: Detta
@ -7186,7 +7166,7 @@ large dragon steak. These are normally acquired from the large green dragons
up on Wyrm Mountain. My normal source got eaten last week, and I have a large
order to fill. I need these within 24 hours
Thanks, Bob the Butcher, Midgaard
Thanks, Bob the Butcher, the capital
The questmaster sighs.
The questmaster says "A tricky quest, but it'll cost you 5qp to back out now"
#2
@ -7929,7 +7909,7 @@ ever seen. I have never seen anyone put so much work into a zone. Kudos to Justo
I am saving this because I would like everyone to use Justo's work as an
outstanding example of how a builder should develop and plan a full zone.
* * * * Midgaard Mail System * * * *
* * * * City Mail System * * * *
Date: Sun Oct 13 10:33:59 2002
To: rumble
From: justo
@ -8531,7 +8511,6 @@ olc GrGod PC MISC
password GrGod PC MISC
poofin Imm PC MISC
poofout Imm PC MISC
practices God PC NUMBER
quest God PC BINARY
questhistory God PC NUMBER
questpoints God PC NUMBER
@ -8952,7 +8931,7 @@ SPECIALS SPEC-PROC SPECIAL-PROCEDURES SPECPROC SPEC_PROC
mobs, and objects. They are written by coders and are normally not created
by builders. If you have something you wish to assign a special procedure to
talk it over with a coder. The most common special procedures include:
Postmasters, banks, guildmasters, pet shops, and boards. If your zone requires
Postmasters, banks, pet shops, and boards. If your zone requires
any of the above mudmail your coder after your zone is complete.
Most of the things possible through special procedures can now be done
through trigedit.
@ -8961,12 +8940,6 @@ To create a postmaster make a mob, set one of the keywords as "postmaster," set
the NPC flag SPEC, and load it to the room via zedit. Then have your coder add
to spec_assign.c:110: ASSIGNMOB(#, postmaster); NOTE: # = the mob/obj vnum.
To create a guildmaster make a mob, set one of the keywords as "guildmaster,"
set the NPC flag SPEC, and load it to the room via zedit. Then have your coder
add to spec_assign.c:69: ASSIGNMOB(#, guild); A player can practice at any
guildmaster, it is the guildguards that usually limit who can access what
guildmaster. @RTSTAT 133@n
To create a bank make an object, set it to type OTHER, add keyword "bank" and
load it to the room via zedit. Then have your coder add to spec_assign.c:
138: ASSIGNOBJ(#, bank);
@ -8981,7 +8954,7 @@ In all cases special procedures need to be added in by a coder. Once your zone
is complete mudmail your coder for the additions you want including type and
mob or object vnum.
See also: POSTMASTER, PETSHOPS, BANKS, GUILDMASTER, BOARDS
See also: POSTMASTER, PETSHOPS, BANKS, BOARDS
#2
SPELLS
@ -9224,9 +9197,8 @@ Thief Only.
Usage: steal <item> [target]
Use steal to steal coins or items from people. The chance of not getting
caught depends on how well you have practiced steal, and if the person
is asleep.
Use steal to steal coins or items from people. The chance of not getting
caught depends on your steal skill and whether the person is asleep.
Examples:
@ -9281,11 +9253,11 @@ This is a listing of stock areas.
186 Newbie Zone -- Maynard of StrangeMUD
25 The High Tower of Magic -- Skylar of SillyMUD*
26 The High Tower Of Magic -- Skylar of SillyMUD*
30 Northern Midgaard Main City -- DikuMUD
31 Southern Part of Midgaard -- DikuMUD
30 Northern Main City -- DikuMUD
31 Southern Main City -- DikuMUD
33 The Three Of Swords -- C.A.W.
35 Miden'Nir -- Copper II, modified by VampLestat of MercMUD*
36 The Chessboard of Midgaard -- Exxon of SillyMUD
36 The Chessboard of the City -- Exxon of SillyMUD
40 Mines of Moria -- Redferne of DikuMUD*
41 Mines of Moria -- Redferne of DikuMUD*
50 The Great Eastern Desert -- Rorschach
@ -10059,7 +10031,7 @@ The teleporter is used to transfer players between zones. Accessible zones
are listed under HELP ZONES by being CAPITALIZED. For example to teleport to:
74 Newbie GRAVEyard -- Jojen 3- 5
type: teleport grave
The teleporter may also be used to recall back to Midgaard at any time.
The teleporter may also be used to recall back to the capital at any time.
Uncapitalized zones are linked through a capitalized zone.
@ -10254,13 +10226,13 @@ Thieves are known to have very special qualities, that no other class offers.
Their specialty tends to be in the darker, sneakier art. Many of these
qualities can come in handy in many situations, such as picking locks.
You can improve you skills by using the practice command.
You can improve your skills by using them.
Skills available to thieves: sneak, hide, steal, backstab, pick lock, track
See the help on each skill for more information.
See also: PRACTICE, FLAGS
See also: FLAGS
#0
TILDES ~
@ -12444,11 +12416,11 @@ them better at hand-to-hand-combat, as they possess skills of violence and
fighting unequaled by the members of any other class. However, they lack the
ability to use magic of any sort.
You can improve your skills by using the practice command.
You can improve your skills by using them.
Skills available to warriors: kick, rescue, track, bash
See also: PRACTICE
See also: FLAGS
#0
WATERWALK WATWALK
@ -13314,12 +13286,12 @@ rumble@*tbamud.com
26 High Tower Of Magic II -- Skylar 1-30
27 MEMLIN Caves -- Detta 17-25
28 MUDSCHOOL -- Welcor 1- 3
30 Northern MIDGAARD -- DikuMUD 1-33
31 Southern MIDGAARD -- DikuMUD 1-33
32 MIDGAARD -- DikuMUD 1-33
30 Northern MAIN CITY -- DikuMUD 1-33
31 Southern MAIN CITY -- DikuMUD 1-33
32 MAIN CITY -- DikuMUD 1-33
33 Three Of Swords -- C.A.W. 5-30
35 Miden'Nir -- Copper II 4-10
36 Chessboard of Midgaard -- Exxon 6-30
36 Chessboard of the City -- Exxon 6-30
37 CAPITAL Sewer System -- Welcor 3- 7
38 CAPITAL Sewer System II -- Welcor 7-14
39 HAVEN -- Nivan 3-14
@ -13388,7 +13360,7 @@ rumble@*tbamud.com
239 South PASS -- Crysanthia 16-21
240 Dun MAURA -- Rumble 7-10
241 Starship ENTERPRISE -- Crazyman 26-30
242 NEW Midgaard -- Crazyman 3- 7
242 NEW Main City -- Crazyman 3- 7
243 Snowy VALLEY -- Crazyman 7-10
244 Cooland PRISON -- Crazyman 30
245 The NETHER -- Kaan 20

View file

@ -3,7 +3,7 @@
[Note: Further information can be gained on the capitalized words by using the
HELP-command]
Classes, skills, and guilds:
Classes and skills:
When you enter the game the first time, you are asked to select a class; either
THIEF, WARRIOR, CLERIC, or MAGIC user. Characters belonging to each of these
@ -16,10 +16,7 @@ keys, creating food supplies out of nothing, and destroying an enemy in
several different ways. It is not advisable for a new player to offend the
members of such a group!
In order to learn the tricks of your specific trade, you need to find your
GUILD, which may take a little exploring. However, you can usually find a
guild in any reasonably populated city. Once you've found it, you need to
look up your guildmaster and PRACTICE.
You improve your skills by using them in play.
Equipment:

View file

@ -1,596 +0,0 @@
#3000
Mage Guildguard - 3024~
0 q 100
~
* Check the direction the player must go to enter the guild.
if %direction% == south
* Stop them if they are not the appropriate class.
if %actor.class% != Magic User
return 0
%send% %actor% The guard humiliates you, and blocks your way.
%echoaround% %actor% The guard humiliates %actor.name%, and blocks %actor.hisher% way.
end
end
~
#3001
Cleric Guildguard - 3025~
0 q 100
~
* Check the direction the player must go to enter the guild.
if %direction% == north
* Stop them if they are not the appropriate class.
if %actor.class% != Cleric
return 0
%send% %actor% The guard humiliates you, and blocks your way.
%echoaround% %actor% The guard humiliates %actor.name%, and blocks %actor.hisher% way.
end
end
~
#3002
Thief Guildguard - 3026~
0 q 100
~
* Check the direction the player must go to enter the guild.
if %direction% == east
* Stop them if they are not the appropriate class.
if %actor.class% != Thief
return 0
%send% %actor% The guard humiliates you, and blocks your way.
%echoaround% %actor% The guard humiliates %actor.name%, and blocks %actor.hisher% way.
end
end
~
#3003
Warrior Guildguard - 3027~
0 q 100
~
* Check the direction the player must go to enter the guild.
if %direction% == east
* Stop them if they are not the appropriate class.
if %actor.class% != Warrior
return 0
%send% %actor% The guard humiliates you, and blocks your way.
%echoaround% %actor% The guard humiliates %actor.name%, and blocks %actor.hisher% way.
end
end
~
#3004
Dump - 3030~
2 h 100
~
%send% %actor% You are awarded for outstanding performance.
%echoaround% %actor% %actor.name% has been awarded for being a good citizen.
eval value %object.cost% / 10
if %value% > 50
set value 50
elseif %value% < 1
set value 1
end
if %actor.level% < 3
nop %actor.exp(%value%)%
else
nop %actor.coins(%value%)%
end
%purge% %object%
~
#3005
Stock Thief~
0 b 10
~
set actor %random.char%
if %actor%
if %actor.is_pc% && %actor.coins%
%send% %actor% You discover that %self.name% has %self.hisher% hands in your wallet.
%echoaround% %actor% %self.name% tries to steal coins from %actor.name%.
eval coins %actor.coins% * %random.10% / 100
nop %actor.coins(-%coins%)%
nop %self.coins(%coins%)%
end
end
~
#3006
Stock Snake~
0 k 10
~
%send% %actor% %self.name% bites you!
%echoaround% %actor% %self.name% bites %actor.name%.
dg_cast 'poison' %actor%
~
#3007
Stock Magic User~
0 k 10
~
switch %actor.level%
case 1
case 2
case 3
break
case 4
dg_cast 'magic missile' %actor%
break
case 5
dg_cast 'chill touch' %actor%
break
case 6
dg_cast 'burning hands' %actor%
break
case 7
case 8
dg_cast 'shocking grasp' %actor%
break
case 9
case 10
case 11
dg_cast 'lightning bolt' %actor%
break
case 12
dg_cast 'color spray' %actor%
break
case 13
dg_cast 'energy drain' %actor%
break
case 14
dg_cast 'curse' %actor%
break
case 15
dg_cast 'poison' %actor%
break
case 16
if %actor.align% > 0
dg_cast 'dispel good' %actor%
else
dg_cast 'dispel evil' %actor%
end
break
case 17
case 18
dg_cast 'call lightning' %actor%
break
case 19
case 20
case 21
case 22
dg_cast 'harm' %actor%
break
default
dg_cast 'fireball' %actor%
break
done
~
#3008
Near Death Trap~
2 g 100
~
* By Rumble of The Builder Academy tbamud.com 9091
* Near Death Trap stuns actor
set stunned %actor.hitp%
%damage% %actor% %stunned%
%send% %actor% You are on the brink of life and death.
%send% %actor% The Gods must favor you this day.
~
#3009
Stock Cityguard - 3059, 60, 67~
0 b 50
~
if !%self.fighting%
set actor %random.char%
if %actor%
if %actor.is_killer%
emote screams 'HEY!!! You're one of those PLAYER KILLERS!!!!!!'
kill %actor.name%
elseif %actor.is_thief%
emote screams 'HEY!!! You're one of those PLAYER THIEVES!!!!!!'
kill %actor.name%
elseif %actor.cha% < 6
%send% %actor% %self.name% spits in your face.
%echoaround% %actor% %self.name% spits in %actor.name%'s face.
end
if %actor.fighting%
eval victim %actor.fighting%
if %actor.align% < %victim.align% && %victim.align% >= 0
emote screams 'PROTECT THE INNOCENT! BANZAI! CHARGE! ARARARAGGGHH!'
kill %actor.name%
end
end
end
end
~
#3010
Stock Fido - 3062, 3066~
0 b 100
~
set inroom %self.room%
set item %inroom.contents%
while %item%
* Target the next item in room. In case it is devoured.
set next_item %item.next_in_list%
* Check for a corpse. Corpse on TBA is vnum 65535. Stock is -1.
if %item.vnum(65535)%
emote savagely devours a corpse.
%purge% %item%
halt
end
set item %next_item%
* Loop back
done
~
#3011
Stock Janitor - 3061, 3068~
0 b 100
~
eval inroom %self.room%
eval item %inroom.contents%
while %item%
* Target the next item in room. In case it is picked up.
set next_item %item.next_in_list%
* TODO: if %item.wearflag(take)%
* Check for fountains and expensive items.
if %item.type% != FOUNTAIN && %item.cost% <= 15
take %item.name%
end
set item %next_item%
* Loop back
done
~
#3012
Newbie Tour Guide~
0 e 0
has entered the game.~
%echo% This trigger commandlist is not complete!
~
#3013
Newbie Tour Guide Loader~
0 e 0
has entered the game.~
* By Rumble of The Builder Academy tbamud.com 9091
* Num Arg 0 means the argument has to match exactly. So trig will only fire off:
* "has entered game." and not "has" or "entered" etc. (that would be num arg 1).
* Figure out what vnum the mob is in so we can use zoneecho.
eval inroom %self.room%
%zoneecho% %inroom.vnum% %self.name% shouts, 'Welcome, %actor.name%!'
~
#3014
Teleporter~
1 c 3
teleport~
* By Rumble and Jamie Nelson of The Builder Academy tbamud.com 9091
%send% %actor% You attempt to manipulate space and time.
%echoaround% %actor% %actor.name% attempts to manipulate space and time.
wait 1 sec
set sanctus 100
set jade 400
set newbie 500
set sea 600
set camelot 775
set nuclear 1800
set spider 1999
set arena 2000
set tower 2200
set memlin 2798
set mudschool 2800
set midgaard 3001
set capital 3702
set haven 3998
set chasm 4200
set arctic 4396
set Orc 4401
set monastery 4512
set ant 4600
set zodiac 5701
set grave 7401
set zamba 7500
set gidean 7801
set glumcoins 8301
set duke 8660
set oasis 9000
set domiae 9603
set northern 10004
set south 10101
set dbz 10301
set orchan 10401
set elcardo 10604
set iuel 10701
set omega 11501
set torres 11701
set dollhouse 11899
set hannah 12500
set maze 13001
set wyvern 14000
set caves 16999
set cardinal 17501
set circus 18700
set western 20001
set sapphire 20101
set kitchen 22001
set terringham 23200
set dragon 23300
set school 23400
set mines 23500
set aldin 23601
set crystal 23875
set pass 23901
set maura 24000
set enterprise 24100
set new 24200
set valley 24300
set prison 24457
set nether 24500
set yard 24700
set elven 24801
set jedi 24901
set dragonspyre 25000
set ape 25100
set vampyre 25200
set windmill 25300
set village 25400
set shipwreck 25516
set keep 25645
set jareth 25705
set light 25800
set mansion 25907
set grasslands 26000
set igor's 26100
set forest 26201
set farmlands 26300
set banshide 26400
set beach 26500
set ankou 26600
set vice 26728
set desert 26900
set wasteland 27001
set sundhaven 27119
set station 27300
set smurfville 27400
set sparta 27501
set shire 27700
set oceania 27800
set notre 27900
set motherboard 28000
set khanjar 28100
set kerjim 28200
set haunted 28300
set ghenna 28400
set hell 28601
set goblin 28700
set galaxy 28801
set werith's 28900
set lizard 29000
set black 29100
set kerofk 29202
set trade 29400
set jungle 29500
set froboz 29600
set desire 29801
set cathedral 29900
set ancalador 30000
set campus 30100
set bull 30401
set chessboard 30537
set tree 30600
set castle 30700
set baron 30800
set westlawn 30900
set graye 31003
set teeth 31100
set leper 31200
set altar 31400
set mcgintey 31500
set wharf 31700
set dock 31801
set yllnthad 31900
set bay 32200
set pale 32300
set army 32400
set revelry 32500
set perimeter 32600
set asylum 34501
set ultima 55685
set tarot 21101
if !%arg%
*they didnt type a location
set fail 1
else
*take the first word they type after the teleport command
*compare it to a variable above
eval loc %%%arg.car%%%
if !%loc%
*they typed an invalid location
set fail 1
end
end
if %fail%
%send% %actor% You fail.
%echoaround% %actor% %actor.name% fails.
halt
end
%echoaround% %actor% %actor.name% seems successful as %actor.heshe% steps into another realm.
%teleport% %actor% %loc%
%force% %actor% look
%echoaround% %actor% %actor.name% steps out of space and time.
~
#3015
Teleporter Recall and Return~
1 c 7
re~
* By Rumble of The Builder Academy tbamud.com 9091
if %cmd% == recall
eval teleporter_return_room %actor.room.vnum%
remote teleporter_return_room %actor.id%
%send% %actor% You recall to safety.
%echoaround% %actor% %actor.name% recalls.
%teleport% %actor% 3001
%force% %actor% look
%echoaround% %actor% %actor.name% appears in the room.
elseif %cmd% == return
%send% %actor% You return to your previous location.
%echoaround% %actor% %actor.name% teleports out of the room.
%teleport% %actor% %actor.teleporter_return_room%
%force% %actor% look
%echoaround% %actor% %actor.name% appears in the room.
else
return 0
end
~
#3016
Kind Soul Gives Newbie Equipment~
0 g 100
~
* By Rumble of The Builder Academy tbamud.com 9091
* If a player is < level 5 and naked it fully equips them. If < 5 and missing
* some equipment it will equip one spot.
if %actor.is_pc% && %actor.level% < 5
wait 2 sec
if !%actor.eq(*)%
say get some clothes on! Here, I will help.
%load% obj 3037 %actor% light
%load% obj 3083 %actor% rfinger
%load% obj 3083 %actor% lfinger
%load% obj 3082 %actor% neck1
%load% obj 3082 %actor% neck2
%load% obj 3040 %actor% body
%load% obj 3076 %actor% head
%load% obj 3080 %actor% legs
%load% obj 3084 %actor% feet
%load% obj 3071 %actor% hands
%load% obj 3086 %actor% arms
%load% obj 3042 %actor% shield
%load% obj 3087 %actor% about
%load% obj 3088 %actor% waist
%load% obj 3089 %actor% rwrist
%load% obj 3089 %actor% lwrist
%load% obj 3021 %actor% wield
%load% obj 3055 %actor% hold
halt
end
if !%actor.eq(light)%
say you really shouldn't be wandering these parts without a light source %actor.name%.
shake
%load% obj 3037
give candle %actor.name%
halt
end
if !%actor.eq(rfinger)% || !%actor.eq(lfinger)%
say did you lose one of your rings?
sigh
%load% obj 3083
give ring %actor.name%
halt
end
if !%actor.eq(neck1)% || !%actor.eq(neck2)%
say you lose everything don't you?
roll
%load% obj 3082
give neck %actor.name%
halt
end
if !%actor.eq(body)%
say you won't get far without some body armor %actor.name%.
%load% obj 3040
give plate %actor.name%
halt
end
if !%actor.eq(head)%
say protect that noggin of yours, %actor.name%.
%load% obj 3076
give cap %actor.name%
halt
end
if !%actor.eq(legs)%
say why do you always lose your pants %actor.name%?
%load% obj 3080
give leggings %actor.name%
halt
end
if !%actor.eq(feet)%
say you can't go around barefoot %actor.name%.
%load% obj 3084
give boots %actor.name%
halt
end
if !%actor.eq(hands)%
say need some gloves %actor.name%?
%load% obj 3071
give gloves %actor.name%
halt
end
if !%actor.eq(arms)%
say you must be freezing %actor.name%.
%load% obj 3086
give sleeve %actor.name%
halt
end
if !%actor.eq(shield)%
say you need one of these to protect yourself %actor.name%.
%load% obj 3042
give shield %actor.name%
halt
end
if !%actor.eq(about)%
say you are going to catch a cold %actor.name%.
%load% obj 3087
give cape %actor.name%
halt
end
if !%actor.eq(waist)%
say better use this to hold your pants up %actor.name%.
%load% obj 3088
give belt %actor.name%
halt
end
if !%actor.eq(rwrist)% || !%actor.eq(lwrist)%
say misplace something?
smile
%load% obj 3089
give wristguard %actor.name%
halt
end
if !%actor.eq(wield)%
say without a weapon you will be Fido food %actor.name%.
%load% obj 3021
give sword %actor.name%
halt
end
end
~
#3017
Mortal Greet~
2 s 100
~
* By Rumble of The Builder Academy tbamud.com 9091
* TBA mortal greet and equip. New players start at level 0.
wait 1 sec
if %actor.level% == 0
if !%actor.eq(*)%
%load% obj 3037 %actor% light
%load% obj 3083 %actor% rfinger
%load% obj 3083 %actor% lfinger
%load% obj 3082 %actor% neck1
%load% obj 3082 %actor% neck2
%load% obj 3040 %actor% body
%load% obj 3076 %actor% head
%load% obj 3080 %actor% legs
%load% obj 3084 %actor% feet
%load% obj 3071 %actor% hands
%load% obj 3086 %actor% arms
%load% obj 3042 %actor% shield
%load% obj 3087 %actor% about
%load% obj 3088 %actor% waist
%load% obj 3089 %actor% rwrist
%load% obj 3089 %actor% lwrist
%load% obj 3021 %actor% wield
%load% obj 3055 %actor% hold
end
if !%actor.has_item(3006)%
%load% obj 3006 %actor% inv
end
end
wait 3 sec
%zoneecho% 3001 A booming voice announces, 'Welcome %actor.name% to the realm!'
~
#3099
Test~
2 b 1
~
%zoneecho% 3001 You hear a loud --=BOOM=--,
~
$~

View file

@ -1,5 +1,4 @@
0.trg
1.trg
2.trg
30.trg
$

View file

@ -1,2 +1 @@
30.trg
$

View file

@ -95,52 +95,18 @@ bitvector_t find_class_bitvector(const char *arg)
return (ret);
}
/* These are definitions which control the guildmasters for each class.
* The first field (top line) controls the highest percentage skill level a
* character of the class is allowed to attain in any skill. (After this
* level, attempts to practice will say "You are already learned in this area."
*
* The second line controls the maximum percent gain in learnedness a character
* is allowed per practice -- in other words, if the random die throw comes out
* higher than this number, the gain will only be this number instead.
*
* The third line controls the minimu percent gain in learnedness a character
* is allowed per practice -- in other words, if the random die throw comes
* out below this number, the gain will be set up to this number.
*
* The fourth line simply sets whether the character knows 'spells' or 'skills'.
* This does not affect anything except the message given to the character when
* trying to practice (i.e. "You know of the following spells" vs. "You know of
* the following skills" */
#define SPELL 0
#define SKILL 1
/* #define LEARNED_LEVEL 0 % known which is considered "learned" */
/* #define MAX_PER_PRAC 1 max percent gain in skill per practice */
/* #define MIN_PER_PRAC 2 min percent gain in skill per practice */
/* #define PRAC_TYPE 3 should it say 'spell' or 'skill'? */
int prac_params[4][NUM_CLASSES] = {
/* SOR CLE THE FIG BAR RAN BARD DRU */
{ 95, 95, 85, 80, 75, 85, 85, 95 }, /* learned level */
{ 100, 100, 12, 12, 11, 12, 13, 90 }, /* max per practice */
{ 25, 25, 0, 0, 0, 0, 25, 25 }, /* min per practice */
{ SPELL, SPELL, SKILL, SKILL, SKILL, SKILL, SKILL, SKILL }, /* prac name */
};
/* The appropriate rooms for each guildmaster/guildguard; controls which types
* of people the various guildguards let through. i.e., the first line shows
/* The appropriate rooms for each class gatekeeper; controls which types
* of people the various guards let through. i.e., the first line shows
* that from room 3017, only SORCERORS are allowed to go south. Don't forget
* to visit spec_assign.c if you create any new mobiles that should be a guild
* to visit spec_assign.c if you create any new mobiles that should be a
* master or guard so they can act appropriately. If you "recycle" the
* existing mobs that are used in other guilds for your new guild, then you
* don't have to change that file, only here. Guildguards are now implemented
* existing mobs that are used in other areas for your new one, then you
* don't have to change that file, only here. Guards are now implemented
* via triggers. This code remains as an example. */
/* TO-DO: Is this necessary anymore now that there are no official guild rooms? */
struct guild_info_type guild_info[] = {
/* Midgaard */
/* Main City */
{ CLASS_SORCEROR, 3017, SOUTH },
{ CLASS_CLERIC, 3004, NORTH },
{ CLASS_ROGUE, 3027, EAST },

View file

@ -29,7 +29,6 @@ void grant_class_skills(struct char_data *ch, bool reset);
extern const char *class_abbrevs[];
extern const char *pc_class_types[];
extern const char *class_menu;
extern int prac_params[][NUM_CLASSES];
extern struct guild_info_type guild_info[];
#endif /* _CLASS_H_*/

View file

@ -29,7 +29,6 @@
#define PFDEF_CONDITION 0
#define PFDEF_BADPWS 0
#define PFDEF_PREFFLAGS 0
#define PFDEF_PRACTICES 0
#define PFDEF_COINS 0
#define PFDEF_BANK_COINS 0
#define PFDEF_EXP 0

View file

@ -142,11 +142,10 @@ static variable_name_t VariableNameTable[eMSDP_MAX+1] =
{ eMSDP_LEVEL, "LEVEL", NUMBER_READ_ONLY },
{ eMSDP_RACE, "RACE", STRING_READ_ONLY },
{ eMSDP_CLASS, "CLASS", STRING_READ_ONLY },
{ eMSDP_MANA, "MANA", NUMBER_READ_ONLY },
{ eMSDP_MANA_MAX, "MANA_MAX", NUMBER_READ_ONLY },
{ eMSDP_WIMPY, "WIMPY", NUMBER_READ_ONLY },
{ eMSDP_PRACTICE, "PRACTICE", NUMBER_READ_ONLY },
{ eMSDP_MONEY, "MONEY", NUMBER_READ_ONLY },
{ eMSDP_MANA, "MANA", NUMBER_READ_ONLY },
{ eMSDP_MANA_MAX, "MANA_MAX", NUMBER_READ_ONLY },
{ eMSDP_WIMPY, "WIMPY", NUMBER_READ_ONLY },
{ eMSDP_MONEY, "MONEY", NUMBER_READ_ONLY },
{ eMSDP_MOVEMENT, "MOVEMENT", NUMBER_READ_ONLY },
{ eMSDP_MOVEMENT_MAX, "MOVEMENT_MAX", NUMBER_READ_ONLY },
{ eMSDP_AC, "AC", NUMBER_READ_ONLY },

View file

@ -106,11 +106,10 @@ typedef enum
eMSDP_LEVEL,
eMSDP_RACE,
eMSDP_CLASS,
eMSDP_MANA,
eMSDP_MANA_MAX,
eMSDP_WIMPY,
eMSDP_PRACTICE,
eMSDP_MONEY,
eMSDP_MANA,
eMSDP_MANA_MAX,
eMSDP_WIMPY,
eMSDP_MONEY,
eMSDP_MOVEMENT,
eMSDP_MOVEMENT_MAX,
eMSDP_AC,

View file

@ -81,22 +81,6 @@ static const char *how_good(int percent)
return " (superb)";
}
static const char *prac_types[] = {
"spell",
"skill"
};
/* TO-DO: Dig deeper and figure out if the min/max practice defines can be removed */
#define LEARNED_LEVEL 0 /* % known which is considered "learned" */
#define MAX_PER_PRAC 1 /* max percent gain in skill per practice */
#define MIN_PER_PRAC 2 /* min percent gain in skill per practice */
#define PRAC_TYPE 3 /* should it say 'spell' or 'skill'? */
#define LEARNED(ch) (prac_params[LEARNED_LEVEL][(int)GET_CLASS(ch)])
#define MINGAIN(ch) (prac_params[MIN_PER_PRAC][(int)GET_CLASS(ch)])
#define MAXGAIN(ch) (prac_params[MAX_PER_PRAC][(int)GET_CLASS(ch)])
#define SPLSKL(ch) (prac_types[prac_params[PRAC_TYPE][(int)GET_CLASS(ch)]])
void list_skills(struct char_data *ch)
{
const char *overflow = "\r\n**OVERFLOW**\r\n";
@ -104,7 +88,7 @@ void list_skills(struct char_data *ch)
size_t len = 0;
char buf2[MAX_STRING_LENGTH];
len = snprintf(buf2, sizeof(buf2), "You know of the following %ss:\r\n", SPLSKL(ch));
len = snprintf(buf2, sizeof(buf2), "You know of the following skills:\r\n");
if (IS_NPC(ch)) {
/* NPCs: show only the skills actually assigned to them */
@ -229,7 +213,7 @@ SPECIAL(mayor)
break;
case 'E':
act("$n says 'I hereby declare Midgaard closed!'", FALSE, ch, 0, 0, TO_ROOM);
act("$n says 'I hereby declare the city closed!'", FALSE, ch, 0, 0, TO_ROOM);
break;
case 'O':

View file

@ -136,7 +136,7 @@
/* New skills may be added here up to MAX_SKILLS (200) */
/* NON-PLAYER AND OBJECT SPELLS AND SKILLS: The practice levels for the spells
/* NON-PLAYER AND OBJECT SPELLS AND SKILLS: The skill levels for the spells
* and skills below are _not_ recorded in the players file; therefore, the
* intended use is for spells and skills associated with objects (such as
* SPELL_IDENTIFY used with scrolls of identify) or non-players (such as NPC

View file

@ -70,7 +70,7 @@ struct char_special_data_saved_plrtoascii {
struct player_special_data_saved_plrtoascii {
byte skills[MAX_SKILLS+1]; /* array of skills plus skill 0 */
byte PADDING0; /* used to be spells_to_learn */
byte legacy0; /* legacy unused byte */
bool talks[MAX_TONGUE]; /* PC s Tongues 0 for NPC */
int wimp_level; /* Below this # of hit points, flee! */
byte freeze_level; /* Level of god who froze char, if any */
@ -89,7 +89,7 @@ struct player_special_data_saved_plrtoascii {
ubyte spare3;
ubyte spare4;
ubyte page_length;
int spells_to_learn; /* How many can you learn yet this level*/
int spare5;
int olc_zone;
int spare8;
int spare9;
@ -263,8 +263,6 @@ void convert(char *filename)
if (psds->conditions[2] && player.level < LVL_IMMORT &&
psds->conditions[DRUNK] != PFDEF_DRUNK)
fprintf(outfile, "Drnk: %d\n", (int)psds->conditions[2]);
if (psds->spells_to_learn != PFDEF_PRACTICES)
fprintf(outfile, "Lern: %d\n", (int)psds->spells_to_learn);
/* char_ability_data */
cad = &(player.abilities);