RPG room #104

Parent #3Owner #36Flags read, fertileSource RPG Core/rpgcore-patched.db

Aliases: RPG room

59 verbs · 55 properties · 2 children

Verbs

VerbSpecFlagsDefinerLines
@add-fakeany none nonerd#1046
@rm-fakeany none nonerd#1046
@fakesnone none nonerd#10412
order buyany any anyrd#10410
l*ookany any anyrxd#10453
is_unlocked_forthis none thisrxd#1045
replace_detailthis none thisrxd#10414
@det*ail @new-d*etail @newd*etailthis is anyrd#10415
@detail-a*lias @detaila*liasany is anyrd#10411
remove_detailthis none thisrxd#1049
@rmdet*ailany out of/from inside/from thisrd#1047
@edit-d*etailany on top of/on/onto/upon thisrd#10414
@rmdetail-a*lias @rmdetaila*liasany out of/from inside/from thisrd#10413
find_detailthis none thisrxd#1047
@newseat @new-seat @newpool @new-poolthis is anyrd#10410
@rmseat @rm-seat @rmpool @rm-poolthis none nonerd#10418
@descseat @desc-seat @descpool @desc-poolthis as anyrd#10410
@maxseat @max-seat @maxpool @max-poolthis is anyrd#10419
@seatalias @seat-alias @poolalias @pool-aliasthis is anyrd#10417
@rmseatalias @rmpoolaliasany out of/from inside/from thisrd#10410
sit rest wait sleep relax idleany any anyrd#10424
standany any anyrxd#10411
swim dive batheany any anyrd#10420
dryany any anyrxd#10411
push putany any anyrd#10449
match_fakethis none thisrxd#10421
who_do_whatthis none thisrxd#10450
huh_drythis none thisrxd#1045
exitfuncthis none thisrxd#1047
attack_bypassthis none thisrxd#10420
enterfuncthis none thisrxd#10421
valid_attackthis none thisrxd#10412
do_attackthis none thisrxd#10479
stat_boostthis none thisrxd#10429
big_newsthis none thisrxd#10411
attack hit fight kill destroy punch kick stun disable shootany any anyrxd#10479
mooicidethis none thisrxd#10416
queue_attackthis none thisrxd#10469
battle_checkthis none thisrxd#1048
clear_queuethis none thisrxd#1048
advance_queuethis none thisrxd#10418
tell_exitsthis none thisrxd#10433
titlethis none thisrxd#1049
look_selfthis none thisrxd#10429
huhthis none thisrxd#10435
@outdoor*sany any anyrd#10420
help_msgthis none thisrxd#1049
matchthis none thisrxd#1043
disfuncthis none thisrxd#1049
tell_contentsthis none thisrxd#10445
light_onthis none thisrxd#10416
_holethis none thisrxd#1044
sneakany any anyrxd#1048
contentsthis none thisrxd#1045
loot rob pilfer roll search stripany any anyrd#10461
com*mand per*suadeany at/to anyrd#10439
digany any anyrd#10421
who_location_msgthis none thisrxd#1041
fill_holethis none thisrxd#1045

Properties

PropertyDefinerFlagsOwnerValue
bot_locked#104rc#360
fakes#104r#36{}
retail#104rc#360
seat#104r#36""
pool#104r#36""
seat_desc#104r#36"You notice nothing special."
pool_desc#104r#36"You see nothing special."
sit_phrase#104rc#36""
stand_phrase#104rc#36""
swim_phrase#104rc#36""
dry_phrase#104rc#36""
push_phrase#104rc#36""
seat_aliai#104r#36{}
pool_aliai#104r#36{}
seat_contents#104r#36{}
pool_contents#104r#36{}
seat_max#104r#361
pool_max#104r#361
details#104rc#36{}
temp_detail_index#104rc#360
temp_detail_desc#104rc#36{}
outdoors#104r#361
attack_queue#104r#2{}
battle_on#104r#20
stop_msg#104rc#36"A hefty guard arrives out of nowhere and tackles %n. An identically huge guard quickly joins in the struggle and beats %o unconscious."
remove_msg#104rc#36"The attack on %n is short and brutal. The guards drag %p limp body as they leave the area."
dump_msg#104rc#36"Two large, muscular guards burst in to dump the body of %n, who has been severely beaten. They depart just as quickly."
dump_loc#104rc#36#62
sanctuary#104rc#360
ansi_title#104r#36{}
dark_desc#104rc#36""
title_style#104rc#360
build_help#104rc#36
list of 63{"===============================", " Owners", "======= SEATS AND POOLS =======", "\"@newseat @new-seat @newpool @new-pool\" room is string => Gives a name to the seat or pool.", "", "\"@rmseat @rm-seat @rmpool @rm-pool\" room => Clears all associated properties.", "", "\"@descseat @desc-seat @descpool @desc-pool\" room as string => Describe the seat/pool.", "", "\"@maxseat @max-seat @maxpool @max-pool\" room is integer => Set maximum occupancy.", "", "\"@seatalias @seat-alias @poolalias @pool-alias\" room is string => Add an alias to seat/pool.", "", "\"@rmseatalias @rmpoolalias\" string from room => Remove an alias from seat/pool.", "", "======= DETAILS =======", " If a detail (a part of the room that does not exist as an actually object but is mentioned in the room description) exists in multiple, you should add the plural form of the detail. The singular form of the word will be matched, as long as the singular word is just a truncated version of the plural word (eg. \"fox\" will be matched if \"foxes\" is a detail.", "\"@outdoor*s on/off\" => Turns outside messages on and off, if it is inside a weather wrapper.", "", "\"@det*ail @new-d*etail @newd*etail\" here is name => Add a detail. Player will be prompted for a description.", "", "@rmdet*ail name from here => removes the detail from the room's database.", "", "\"@detail-a*lias @detaila*lias\" name is alias => adds an alias to the detail \"name\". You must be inside the room to execute this one.", "", "\"@edit-d*etail\" name on here => finds the name or alias string and reads the associated description into the note editor. When the player re-enters the room, the edited text is copied back into the detail.", "", "\"@rmdetail-a*lias @rmdetaila*lias\" name from here => finds the name or alias string and removes it from the details list.", "", "@add-fake STRING => Add a non-descript detail to the room", "", "@rm-fake STRING => Remove a non-descript detail from the room", "", "@fakes => Lists details and fake objects.", "", "======= PROPERTIES =======", "@set here.sit_phrase, here.stand_phrase, here.swim_phrase, here.dry_phrase, here.push_phrase, and here.award_msg.", "", "All of these messages are pronoun and verb parsed.", "", "EXAMPLE: @set here.push_phrase to \"%N %<runs> up and %<pushes> %d into the pool!\", where %N is the player and %d is the victim.", "", "here.sanctuary 0, 1 or 2 => 1 prevents combat, 2 allows mailing.", "", "here.stop_msg \"A hefty guard arrives out of nowhere and tackles %n. An identically huge guard quickly joins in the struggle and beats %o unconscious.\"", "", "here.remove_msg \"The attack on %n is short and brutal. The guards drag %p limp body as they leave the area.\"", "", "here.dump_msg \"Two large, muscular guards burst in to dump the body of %n, who has been severely beaten. They depart just as quickly.\"", "", "here.dump_loc #room => Place to dump the quelled assailant.", "", "Diggable Room => @set the \".dig_level\" property!", "dig_levels: 0 => no digging allowed", " 1 => requires a pick or axe", " 2 => requires a shovel or better", " 3 => requires claws or better", " 4 => can be dug with hands", "", "=====================", " Visitors", "======= VERBS =======", "sit, rest, wait, sleep, relax, idle, stand, swim, dive, dry, stop/quit swimming, look, get, take, move, push, put, go, sneak, search, dig.....are all handled."}
battle_task#104r#20
dig_level#104rc#360
holes#104r#2{}
help_msg#104rc#36{"sit, rest, wait, sleep, relax, idle, stand, swim, dive, dry, stop/quit swimming, look, get, take, move, push, put, go, sneak, search, dig"}
who_location_msg#3rc#36<clear>
free_home#3rc#36<clear>
victim_ejection_msg#3rc#36<clear>
ejection_msg#3rc#36<clear>
oejection_msg#3rc#36<clear>
residents#3rc#36<clear>
free_entry#3rc#36<clear>
entrances#3c#36<clear>
blessed_object#3rc#36<clear>
blessed_task#3rc#36<clear>
exits#3c#36<clear>
dark#3rc#36<clear>
ctype#3rc#36<clear>
key#1c#360
aliases#1rc#36{"RPG room"}
description#1rc#36<clear>
object_size#1r#36{64497, -1090650497}
html#1rc#36<clear>

Ancestry

Ancestors (nearest first): #3 generic room#1 Root Class

Children: #118 virtual exit room, #119 generic maze and terrain room

Call graph

calls n104_0 #104:@add-fake n6_18 #6:tell n104_0->n6_18 n104_1 #104:@rm-fake n104_1->n6_18 n104_2 #104:@fakes n104_2->n6_18 n52_0 #52:has_property n104_2->n52_0 n55_16 #55:slice n104_2->n55_16 n55_10 #55:append n104_2->n55_10 n20_6 #20:english_list n104_2->n20_6 n104_3 #104:order n104_3->n6_18 n104_47 #104:match n104_3->n104_47 n52_3 #52:has_callable_verb n104_3->n52_3 n51_0 #51:match n104_47->n51_0 n104_4 #104:l*ook n104_4->n6_18 n104_43 #104:look_self n104_4->n104_43 n6_33 #6:look_self n104_4->n6_33 n1_7 #1:match_object n104_4->n1_7 n6_7 #6:my_match_object n104_4->n6_7 n104_4->n51_0 n104_25 #104:match_fake n104_4->n104_25 n6_79 #6:tell_lines n104_4->n6_79 n104_26 #104:who_do_what n104_4->n104_26 n56_0 #56:object_match_failed n104_4->n56_0 n104_43->n6_18 n104_43->n52_3 n104_43->n6_79 n104_43->n104_26 n104_13 #104:find_detail n104_25->n104_13 n20_63 #20:match_stringlist n104_25->n20_63 n104_26->n6_18 n104_26->n20_6 n104_5 #104:is_unlocked_for n52_5 #52:isa n104_5->n52_5 n53_6 #53:eval_key n104_5->n53_6 n104_6 #104:replace_detail n104_6->n6_18 n104_6->n104_13 n56_4 #56:yes_or_no n104_6->n56_4 n104_13->n20_63 n104_7 #104:@det*ail n104_7->n6_18 n104_7->n104_6 n56_3 #56:read_lines n104_7->n56_3 n104_8 #104:@detail-a*lias n104_8->n6_18 n104_8->n104_13 n104_9 #104:remove_detail n104_9->n6_18 n104_9->n104_13 n104_10 #104:@rmdet*ail n104_10->n6_18 n104_10->n104_9 n104_11 #104:@edit-d*etail n104_11->n6_18 n104_11->n104_13 n50_37 #50:invoke n104_11->n50_37 n104_12 #104:@rmdetail-a*lias n104_12->n6_18 n104_12->n104_13 n104_14 #104:@newseat n104_14->n6_18 n104_15 #104:@rmseat n104_15->n6_18 n104_16 #104:@descseat n104_16->n6_18 n104_17 #104:@maxseat n104_17->n6_18 n104_18 #104:@seatalias n104_18->n6_18 n104_18->n20_6 n104_18->n104_25 n104_19 #104:@rmseatalias n104_19->n6_18 n104_20 #104:sit n104_20->n6_18 n104_20->n52_3 n104_23 #104:dry n104_20->n104_23 n35_1 #35:say_action n104_20->n35_1 n41_5 #41:_verb_singular n104_20->n41_5 n104_23->n6_18 n104_23->n35_1 n104_21 #104:stand n104_21->n6_18 n104_21->n35_1 n104_21->n41_5 n104_22 #104:swim n104_22->n6_18 n104_22->n35_1 n104_22->n41_5 n104_22->n104_21

Showing 48 of 119 verbs; 71 not shown.

Source

@add-fake

Spec any none noneFlags rdOwner #36Definer #104

Referenced by

none

Source

1if ((player == this.owner) || player.wizard)
2this.fakes = dobjstr ? setadd(this.fakes, dobjstr) | this.fakes;
3player:tell("Detail noted.");
4else
5player:tell(E_PERM);
6endif

@rm-fake

Spec any none noneFlags rdOwner #36Definer #104

Referenced by

none

Source

1if ((player == this.owner) || player.wizard)
2this.fakes = dobjstr ? setremove(this.fakes, dobjstr) | this.fakes;
3player:tell("Detail removed.");
4else
5player:tell(E_PERM);
6endif

@fakes

Spec none none noneFlags rdOwner #36Definer #104

Referenced by

none

Source

1if (!$object_utils:has_property(player, "build_options"))
2return;
3endif
4details = {"none"};
5fakes = {"none"};
6if ($object_utils:has_property(this, "details") && (this.details != {}))
7details = $list_utils:slice(this.details);
8details = $list_utils:append(@details);
9player:tell("Details: ", $string_utils:english_list(details));
10endif
11fakes = (this.fakes != {}) ? this.fakes | fakes;
12player:tell("Fakes: ", $string_utils:english_list(fakes));

order buy

Spec any any anyFlags rdOwner #36Definer #104

Referenced by

none

Source

1if (iobjstr && (!valid(iobj)))
2iobj = this:match(iobjstr);
3endif
4if ($object_utils:has_callable_verb(iobj, verb))
5return iobj:(verb)(@args);
6elseif (!this.retail)
7return player:tell("You can't ", verb, " anything here.");
8endif
9player:tell("Try \"buy <item> from <salesperson>\".");
10player:tell("If you aren't sure what's available and what it will cost, ask <salesperson> for prices.");

l*ook

Spec any any anyFlags rxdOwner #36Definer #104

Referenced by

Source

1if ((dobjstr == "") && (!prepstr))
2this:look_self(@args);
3elseif (dobjstr == "me")
4player:look_self();
5elseif ((prepstr != "in") && (prepstr != "on"))
6if ((!dobjstr) && (prepstr == "at"))
7dobjstr = iobjstr;
8iobjstr = "";
9else
10dobjstr = dobjstr + (prepstr && ((dobjstr && " ") + prepstr));
11dobjstr = dobjstr + (iobjstr && ((dobjstr && " ") + iobjstr));
12endif
13sources = {@player.location:contents(), @player.contents, @player.location:obvious_exits()};
14dobj = player.programmer ? this:match_object(dobjstr) | player:my_match_object(dobjstr);
15dobj = valid(dobj) ? dobj | $match_utils:match(dobjstr, sources);
16(ticks_left() < 4000) && suspend(0);
17if (!(dobj in {$failed_match, $ambiguous_match}))
18if (player.programmer || (dobj in sources))
19dobj:look_self();
20endif
21elseif (fakeobj = this:match_fake(dobjstr))
22if (fakeobj == {"seat"})
23player:tell_lines(this.seat_desc);
24elseif (fakeobj == {"pool"})
25player:tell_lines(this.pool_desc);
26else
27return player:tell_lines(fakeobj);
28endif
29return this:who_do_what();
30else
31$command_utils:object_match_failed(dobj, dobjstr);
32endif
33elseif (!iobjstr)
34player:tell(verb, " ", prepstr, " what?");
35else
36sources = {@player.location:contents(), @player.contents};
37iobj = player.programmer ? this:match_object(iobjstr) | player:my_match_object(iobjstr);
38iobj = valid(iobj) ? iobj | $match_utils:match(iobjstr, sources);
39(ticks_left() < 4000) && suspend(0);
40if (!$command_utils:object_match_failed(iobj, iobjstr))
41if (dobjstr == "")
42if (player.programmer || (iobj in sources))
43iobj:look_self();
44endif
45elseif ((thing = iobj:match(dobjstr)) == $failed_match)
46player:tell("I don't see any \"", dobjstr, "\" ", prepstr, " ", iobj.name, ".");
47elseif (thing == $ambiguous_match)
48player:tell("There are several things ", prepstr, " ", iobj.name, " one might call \"", dobjstr, "\".");
49else
50thing:look_self();
51endif
52endif
53endif

is_unlocked_for

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

none

Source

1"WIZ PERMS";
2if ($object_utils:isa(args[1], $monster) && this.bot_locked)
3return 0;
4endif
5return (this.key == 0) || $lock_utils:eval_key(this.key, args[1]);

replace_detail

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1"WIZ PERMS";
2set_task_perms(player);
3z = this:find_detail(args[1]);
4if (z)
5dname = this.details[z][1][1];
6if ($command_utils:yes_or_no(tostr("Do you really want to clear the detail \"", dname, "\"?")))
7this.details = setremove(this.details, this.details[z]);
8player:tell("Detail \"", dname, "\" reset as \"", args[1], "\".");
9return args[1];
10else
11return "abort!!!";
12endif
13endif
14return args[1];

@det*ail @new-d*etail @newd*etail

Spec this is anyFlags rdOwner #2Definer #104

Referenced by

none

Source

1"WIZ PERMS";
2set_task_perms(player);
3if (iobjstr && ((player == this.owner) || player.wizard))
4name = this:replace_detail(iobjstr);
5if (name == "abort!!!")
6return player:tell("Original detail preserved.");
7endif
8player:tell("Describe \"", iobjstr, "\".");
9desc = $command_utils:read_lines();
10det = {{name}, desc};
11this.details = {@this.details, det};
12player:tell("\"", name, "\" added as a detail. Use \"@detail-a*lias ", name, " is <alias>\" to add aliases.");
13else
14player:tell("You must own this room and create details by entering \"@detail here is <name>\".");
15endif

@detail-a*lias @detaila*lias

Spec any is anyFlags rdOwner #2Definer #104

Referenced by

none

Source

1"WIZ PERMS";
2set_task_perms(player);
3if (iobjstr && ((player == this.owner) || player.wizard))
4z = this:find_detail(dobjstr);
5if (z)
6this.details[z][1] = {@this.details[z][1], iobjstr};
7return player:tell("Alias \"", iobjstr, "\" added to \"", dobjstr, "\".");
8endif
9player:tell("No detail called \"", dobjstr, "\" was found.");
10endif
11player:tell("You must own the room and supply a name for the detail alias.");

remove_detail

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1"WIZ PERMS";
2set_task_perms(player);
3z = this:find_detail(args[1]);
4if (z)
5this.details = setremove(this.details, this.details[z]);
6player:tell("Detail \"", args[1], "\" removed.");
7return 1;
8endif
9return 0;

@rmdet*ail

Spec any out of/from inside/from thisFlags rdOwner #2Definer #104

Referenced by

none

Source

1"WIZ PERMS";
2set_task_perms(player);
3if ((player == this.owner) || player.wizard)
4if (!this:remove_detail(dobjstr))
5player:tell("No detail called \"", dobjstr, "\" was found.");
6endif
7endif

@edit-d*etail

Spec any on top of/on/onto/upon thisFlags rdOwner #2Definer #104

Referenced by

none

Source

1"WIZ PERMS";
2set_task_perms(player);
3if (dobjstr && ((player == this.owner) || player.wizard))
4z = this:find_detail(dobjstr);
5if (z)
6this.temp_detail_index = z;
7this.temp_detail_desc = this.details[z][2];
8$note_editor:invoke(tostr(this, ".temp_detail_desc"), "@edit");
9"See this:enterfunc for the cleanup routine";
10return;
11endif
12return player:tell("No detail called \"", dobjstr, "\" was found.");
13endif
14player:tell("You must own the room and supply a name for the detail to edit.");

@rmdetail-a*lias @rmdetaila*lias

Spec any out of/from inside/from thisFlags rdOwner #2Definer #104

Referenced by

none

Source

1"WIZ PERMS";
2set_task_perms(player);
3if (dobjstr && ((player == this.owner) || player.wizard))
4z = this:find_detail(dobjstr);
5if (z)
6if (this.details[z][1] == {dobjstr})
7return player:tell("\"", dobjstr, "\" is the only alias for that detail. Use \"@rmdet ", dobjstr, " from here\" if you really want to delete the whole detail.");
8else
9this.details[z][1] = setremove(this.details[z][1], dobjstr);
10player:tell("\"", dobjstr, "\" has been removed as an alias for that detail.");
11endif
12endif
13endif

find_detail

Spec this none thisFlags rxdOwner #36Definer #104

Referenced by

Source

1for detail in (this.details)
2z = $string_utils:match_stringlist(args[1], detail[1]);
3if ((z != $failed_match) && args[1])
4return detail in this.details;
5endif
6endfor
7return;

@newseat @new-seat @newpool @new-pool

Spec this is anyFlags rdOwner #36Definer #104

Referenced by

none

Source

1"If there is an indirect object string, insert it as the name of the seat or pool";
2if (iobjstr && ((player == this.owner) || player.wizard))
3if ((verb == "@newseat") || (verb == "@new-seat"))
4this.seat = iobjstr;
5player:tell("Seat '", this.seat, "' added.");
6else
7this.pool = iobjstr;
8player:tell("Pool '", this.pool, "' added.");
9endif
10endif

@rmseat @rm-seat @rmpool @rm-pool

Spec this none noneFlags rdOwner #36Definer #104

Referenced by

none

Source

1"Clear all properties associated with the seat or pool. Reset the maximum occupants to 1";
2if ((player == this.owner) || player.wizard)
3if ((verb == "@rmseat") || (verb == "@rm-seat"))
4this.seat = "";
5this.seat_desc = "You notice nothing special.";
6this.seat_aliai = {};
7this.seat_contents = {};
8this.seat_max = 1;
9player:tell("Seat removed. All associated properties reset.");
10else
11this.pool = "";
12this.pool_desc = "You see nothing special.";
13this.pool_aliai = {};
14this.pool_contents = {};
15this.pool_max = 1;
16player:tell("Pool removed. All associated properties reset.");
17endif
18endif

@descseat @desc-seat @descpool @desc-pool

Spec this as anyFlags rdOwner #36Definer #104

Referenced by

none

Source

1"enter indirect object string as the description";
2if ((player == this.owner) || player.wizard)
3if ((verb == "@descseat") || (verb == "@desc-seat"))
4this.seat_desc = iobjstr;
5player:tell("Seat described.");
6else
7this.pool_desc = iobjstr;
8player:tell("Pool described.");
9endif
10endif

@maxseat @max-seat @maxpool @max-pool

Spec this is anyFlags rdOwner #36Definer #104

Referenced by

none

Source

1"if no indirect object, tell player current setting";
2"test for a valid integer in indirect object => if so, change";
3if (iobjstr == "")
4if ((verb == "@maxseat") || (verb == "@max-seat"))
5player:tell("Up to ", tostr(this.seat_max), " may occupy ", this.seat, ".");
6else
7player:tell("Up to ", tostr(this.pool_max), " may swim in ", this.pool, ".");
8endif
9elseif (toint(iobjstr) && ((player == this.owner) || player.wizard))
10if ((verb == "@maxseat") || (verb == "@max-seat"))
11this.seat_max = toint(iobjstr);
12player:tell("Up to ", tostr(this.seat_max), " may now occupy ", this.seat, ".");
13else
14this.pool_max = toint(iobjstr);
15player:tell("Up to ", tostr(this.pool_max), " may now swim in ", this.pool, ".");
16endif
17else
18player:tell(iobjstr, " is not a valid integer");
19endif

@seatalias @seat-alias @poolalias @pool-alias

Spec this is anyFlags rdOwner #36Definer #104

Referenced by

none

Source

1"if not found as name or alias of seat or pool";
2"add to the appropriate set of aliases";
3if ((player == this.owner) || player.wizard)
4if (this:match_fake(iobjstr))
5player:tell(iobjstr, " is already used as an alias.");
6elseif ((verb == "@seatalias") || (verb == "@seat-alias"))
7if (iobjstr)
8this.seat_aliai = setadd(this.seat_aliai, iobjstr);
9endif
10player:tell($string_utils:english_list(this.seat_aliai), " is/are alias(es) for the seat '", this.seat, "'.");
11else
12if (iobjstr)
13this.pool_aliai = setadd(this.pool_aliai, iobjstr);
14endif
15player:tell($string_utils:english_list(this.pool_aliai), " is/are alias(es) for the pool '", this.pool, "'.");
16endif
17endif

@rmseatalias @rmpoolalias

Spec any out of/from inside/from thisFlags rdOwner #36Definer #104

Referenced by

none

Source

1"check for direct object in seat aliases and in pool aliases => if found, remove";
2if ((player == this.owner) || player.wizard)
3if (dobjstr in this.seat_aliai)
4this.seat_aliai = setremove(this.seat_aliai, dobjstr);
5elseif (dobjstr in this.pool_aliai)
6this.pool_aliai = setremove(this.pool_aliai, dobjstr);
7else
8player:tell(dobjstr, " is not an alias.");
9endif
10endif

sit rest wait sleep relax idle

Spec any any anyFlags rdOwner #36Definer #104

Referenced by

none

Source

1"See if iobj has an overriding verb";
2"Test for max occupancy, add player to contents.";
3if ($object_utils:has_callable_verb(iobj, verb))
4return iobj:(verb)(@args);
5endif
6if (this.seat)
7if (player in this.seat_contents)
8player:tell("You already ", verb, " on ", this.seat, ".");
9elseif (length(this.seat_contents) < this.seat_max)
10if (player in this.pool_contents)
11this:dry();
12endif
13if (this.sit_phrase)
14$you:say_action(this.sit_phrase);
15else
16$you:say_action(tostr("%N %<", $gender_utils:_verb_singular(verb, player.gender), "> on ", this.seat, "."));
17endif
18this.seat_contents = setadd(this.seat_contents, player);
19else
20$you:say_action(tostr("%N %<attempts> to ", verb, " on ", this.seat, ", but %<is> crowded out."));
21endif
22else
23player:tell("You can't ", verb, " here.");
24endif

stand

Spec any any anyFlags rxdOwner #36Definer #104

Referenced by

Source

1if (player in this.seat_contents)
2if (this.stand_phrase)
3$you:say_action(this.stand_phrase);
4else
5$you:say_action(tostr("%N %<", $gender_utils:_verb_singular(verb, player.gender), "> from ", this.seat, "."));
6endif
7this.seat_contents = setremove(this.seat_contents, player);
8else
9player:tell("You are already standing.");
10endif
11return;

swim dive bathe

Spec any any anyFlags rdOwner #36Definer #104

Referenced by

none

Source

1"Test for max occupancy, add player to contents.";
2if (this.pool)
3if (player in this.pool_contents)
4player:tell("You're already in ", this.pool, ".");
5elseif (length(this.pool_contents) < this.pool_max)
6if (player in this.seat_contents)
7this:stand();
8endif
9if (this.swim_phrase)
10$you:say_action(this.swim_phrase);
11else
12$you:say_action(tostr("%N %<", $gender_utils:_verb_singular(verb, player.gender), "> in ", this.pool, "."));
13endif
14this.pool_contents = setadd(this.pool_contents, player);
15else
16$you:say_action(tostr("%N %<attempts> to ", verb, " in ", this.pool, ", but %<is> crowded out."));
17endif
18else
19player:tell("You can't ", verb, " here.");
20endif

dry

Spec any any anyFlags rxdOwner #36Definer #104

Referenced by

Source

1if (player in this.pool_contents)
2if (this.dry_phrase)
3$you:say_action(this.dry_phrase);
4else
5$you:say_action(tostr("%N %<gets> out from ", this.pool, "."));
6endif
7this.pool_contents = setremove(this.pool_contents, player);
8else
9player:tell("You are already drying.");
10endif
11return;

push put

Spec any any anyFlags rdOwner #36Definer #104

Referenced by

none

Source

1"Push or put object into pool or seat";
2"dobjstr must match valid object, prepstr must be in,into,on, iobjstr must match pool or seat";
3try
4if (!dobjstr)
5return player:tell(verb, " what?");
6elseif (this:match_fake(dobjstr))
7return player:tell($string_utils:capitalize(dobjstr), " will not move.");
8elseif (valid(dobj))
9if (valid(iobj) && $object_utils:has_callable_verb(iobj, verb))
10return iobj:(verb)(@args);
11elseif (valid(dobj) && $object_utils:has_callable_verb(dobj, verb))
12return dobj:(verb)(@args);
13endif
14if ((fakeobj = this:match_fake(iobjstr)) && (prepstr in {"in", "into", "on"}))
15if (fakeobj == {"seat"})
16if (dobj in this.seat_contents)
17return player:tell(dobj:titlec(), " is already there.");
18endif
19fake = this.seat;
20this.seat_contents = setadd(this.seat_contents, dobj);
21elseif (fakeobj == {"pool"})
22if (dobj in this.pool_contents)
23return player:tell(dobj:titlec(), " is already there.");
24endif
25fake = this.pool;
26this.pool_contents = setadd(this.pool_contents, dobj);
27else
28return player:tell(dobj:titlec(), " will not go there.");
29endif
30dobj:moveto(this);
31if (this.push_phrase)
32$you:say_action(this.push_phrase);
33else
34$you:say_action(tostr("%N %<", $gender_utils:_verb_singular(verb, player.gender), "> ", dobjstr, " ", prepstr, " ", fake, "."));
35endif
36return;
37elseif (prepstr || iobjstr)
38player:tell(dobj:titlec(), " will not go there.");
39else
40player:tell(verb, " ", dobjstr, " where?");
41endif
42elseif (dobj == $failed_match)
43player:tell(verb, " what?");
44else
45player:tell(verb, " which ", dobjstr, "?");
46endif
47except v (ANY)
48$command_utils:do_huh(verb, args);
49endtry

match_fake

Spec this none thisFlags rxdOwner #36Definer #104

Referenced by

Source

1"USAGE: match_fake(STRING) => 1 or 0";
2"Looks for matches in the props .details and .seatlist";
3if (random(100) == 1)
4player.free_points = player.free_points + 5e-05;
5index = random(4);
6sboost = (18.0 - player.stats[2][index]) * 5e-05;
7player.stats[2][index] = (sboost > 0.0) ? player.stats[2][index] + sboost | player.stats[2][index];
8player.stats_current[2][index] = (sboost > 0.0) ? player.stats_current[2][index] + sboost | player.stats_current[2][index];
9endif
10if ($string_utils:match_stringlist(args[1], {this.seat, @this.seat_aliai}) != $failed_match)
11return {"seat"};
12elseif ($string_utils:match_stringlist(args[1], {this.pool, @this.pool_aliai}) != $failed_match)
13return {"pool"};
14elseif ($string_utils:match_stringlist(args[1], this.fakes) != $failed_match)
15return tostr("Examining ", args[1], " reveals nothing new.");
16elseif ((`this.virtual_exits ! E_PROPNF => 0' && valid(this:match_exit(args[1]))) && (e = this.virtual_exit_to_use))
17return tostr("You see the entrance to ", e[2].name, ".");
18else
19x = this:find_detail(args[1]);
20return x ? this.details[x][2] | {};
21endif

who_do_what

Spec this none thisFlags rxdOwner #36Definer #104

Referenced by

Source

1sitters = {};
2swimmers = {};
3for x in (this.seat_contents)
4if (x in this:contents())
5sitters = setadd(sitters, x:title());
6elseif (!(x in this.contents))
7this.seat_contents = setremove(this.seat_contents, x);
8endif
9endfor
10if (player in this.seat_contents)
11sitters = setremove(sitters, player:title());
12sitters = setadd(sitters, "you");
13endif
14for x in (this.pool_contents)
15if (x in this:contents())
16swimmers = setadd(swimmers, x:title());
17elseif (!(x in this.contents))
18this.pool_contents = setremove(this.pool_contents, x);
19endif
20endfor
21if (player in this.pool_contents)
22swimmers = setremove(swimmers, player:title());
23swimmers = setadd(swimmers, "you");
24endif
25sitnum = length(sitters);
26swimnum = length(swimmers);
27if (sitnum)
28be = "is";
29if ((player in this.seat_contents) && (sitnum == 1))
30sitters[1] = "You";
31be = "are";
32elseif (sitnum > 1)
33be = "are";
34endif
35loafers = $string_utils:english_list(sitters);
36be = ((length(this.seat_contents) == 1) && (sitters[1] != "You")) ? $gender_utils:get_conj("is/are", this.seat_contents[1]) | be;
37player:tell($string_utils:capitalize(loafers), " ", be, " relaxing on ", this.seat, ".");
38endif
39if (swimnum)
40ara = "is";
41if ((player in this.pool_contents) && (swimnum == 1))
42swimmers[1] = "You";
43ara = "are";
44elseif (swimnum > 1)
45ara = "are";
46endif
47drowners = $string_utils:english_list(swimmers);
48ara = ((length(this.pool_contents) == 1) && (swimmers[1] != "You")) ? $gender_utils:get_conj("is/are", this.pool_contents[1]) | ara;
49player:tell($string_utils:capitalize(drowners), " ", ara, " swimming in ", this.pool, ".");
50endif

huh_dry

Spec this none thisFlags rxdOwner #36Definer #104

Referenced by

Source

1if (player in this.pool_contents)
2return this:dry();
3else
4return player:tell("You're not in ", this.pool, ".");
5endif

exitfunc

Spec this none thisFlags rxdOwner #36Definer #104

Referenced by

none

Source

1object = args[1];
2if (object in this.pool_contents)
3this.pool_contents = setremove(this.pool_contents, object);
4elseif (object in this.seat_contents)
5this.seat_contents = setremove(this.seat_contents, object);
6endif
7pass(@args);

attack_bypass

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1"WIZ PERMS";
2"USAGE: attack_bypass(verb,@args)";
3if (!dobjstr)
4return player:tell("Shhh! Not so rowdy!");
5endif
6dobj = this:match(dobjstr);
7if ((!(dobj in {$failed_match, $ambiguous_match})) || this:match_fake(dobjstr))
8"play through";
9else
10return $rp_regulator:person_match_failed(dobj, dobjstr);
11endif
12$you:say_action(tostr("%N %<attempts> to ", args[1], " %d."));
13$you:say_action(this.stop_msg);
14player:pass_out();
15if (player.stats_current[2][4] > 0.2)
16player:take_hit(player.stats_current[2][4] / 2.0);
17endif
18this:announce($string_utils:pronoun_sub(this.remove_msg, player));
19player:moveto(this.dump_loc);
20this.dump_loc:announce($string_utils:pronoun_sub(this.dump_msg, player));

enterfunc

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1"WIZ PERMS";
2object = args[1];
3if (`object.alive ! E_PROPNF => 0' && (random(100) == 1))
4object.free_points = object.free_points + 5e-05;
5index = random(4);
6sboost = (18.0 - object.stats[2][index]) * 5e-05;
7object.stats[2][index] = (sboost > 0.0) ? object.stats[2][index] + sboost | object.stats[2][index];
8object.stats_current[2][index] = (sboost > 0.0) ? object.stats_current[2][index] + sboost | object.stats_current[2][index];
9endif
10fork (0)
11if (`object.alert ! E_PROPNF => 0')
12if ((this.temp_detail_index && this.temp_detail_desc) && (object == this.owner))
13this.details[this.temp_detail_index][2] = {@this.temp_detail_desc};
14this.temp_detail_index = 0;
15this.temp_detail_desc = {};
16endif
17elseif (object == this.blessed_object)
18this.blessed_object = #-1;
19endif
20pass(@args);
21endfork

valid_attack

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1"USAGE: valid_attack(attacker<STRING>,victim<STRING>) => {0 or 1,attacker<object>,victim<object>}";
2x = this:match(args[1]);
3y = (args[2] in {"me", "myself"}) ? player | this:match(args[2]);
4x = (!valid(x)) ? $match_utils:match(args[1], this.contents) | x;
5y = (!valid(y)) ? $match_utils:match(args[2], this.contents) | y;
6if ((((x in this.contents) && (y in this.contents)) && `y.alive ! E_PROPNF => 0') && `x.alive ! E_PROPNF => 0')
7if ($object_utils:isa(this, $terrain) && (!this:match_loc(x, y)))
8return {0, x, y};
9endif
10return {1, x, y};
11endif
12return {0, x, y};

do_attack

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1"USAGE: do_attack(attacker<STRING>,victim<STRING>,damage<FLOAT>,stun<INTEGER>)";
2"WIZ PERMS";
3suspend(1);
4melee = this:valid_attack(args[1], args[2]);
5if ((!melee[1]) || this.sanctuary)
6return;
7elseif ((!melee[3].alive) && (!(melee[3].location == $dead_zone)))
8return;
9elseif (((!melee[2].alive) || (!melee[2].alert)) || (!melee[2].mobile))
10return;
11endif
12x = melee[2];
13y = melee[3];
14dobj = x.wielded;
15dobjstr = x.wielded:title();
16iobj = y;
17iobjstr = y:title();
18prob = x:to_hit() / y:to_defend();
19hit = x:roll_against("attack");
20defend = y:roll_against("defense");
21if (defend > hit)
22hit = 0;
23elseif ((hit == 1) && (defend == hit))
24hit = (x:roll_against("attack") > y:roll_against("defense")) ? 1 | 0;
25endif
26c = {};
27if ((((c = $set_utils:intersection(x.contents, children($cuffs))) != {}) && c[1].wornness) || (args[4] == 2))
28slam = " %<kicks> at ";
29if ((c != {}) && c[1].wornness)
30fork (1)
31x.location:announce_all("*** [cyan]ZAP![normal] ***");
32x:freeze();
33endfork
34endif
35elseif (x.wielded.shoots)
36slam = x.wielded.shoot_verbage;
37else
38slam = x.wielded.usage_verbage;
39endif
40if (!hit)
41"If target is out-to-lunch, 40% chance to improve attack";
42sleepy = (!(y in connected_players())) && (!`!(!property_info(y, "my_tell")) ! E_PROPNF => 0');
43if (((!y.alert) || (!y.mobile)) || sleepy)
44hit = (random(5) > 3) ? 1 | 0;
45endif
46endif
47if (hit)
48this:big_news(x, y, slam, ". HIT!");
49if (is_player(y))
50prob = prob * 0.5;
51elseif (`y.hostility ! E_PROPNF => 0')
52y.enemy = x;
53prob = 2.0 * (prob / tofloat(y.hostility));
54elseif ($object_utils:has_property(y, "hostility") && (!y.hostility))
55prob = prob * 3.0;
56endif
57this:stat_boost(x, prob);
58if (args[4] != 0)
59stunned = random(10 + toint(prob));
60if ((stunned > 8) && y.alert)
61if ((!is_player(y)) || (y in connected_players()))
62if (x.wielded.can_paralyse && y.mobile)
63y:freeze();
64elseif (x.wielded.can_stun)
65y:pass_out();
66endif
67endif
68endif
69return y:take_hit(args[3] / 2.0, x);
70endif
71return (hit < 2) ? y:take_hit(args[3], x) | y:take_hit(args[3] * 2.0, x);
72else
73this:big_news(x, y, slam, ". MISS!");
74if (`y.hostility ! E_PROPNF => 0')
75"if the victim is a retaliatory bot.";
76y:take_hit(0.0, x);
77endif
78endif
79return;

stat_boost

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1"USAGE: stat_boost(creature,probability)";
2"boosts creature's combat-related stats based on the probability of it hitting it's opponent";
3"WIZ PERMS";
4x = toobj(args[1]);
5"set_task_perms(x.owner)";
6prob = tofloat(args[2]);
7boost = 0.005 / prob;
8if (!x.alive)
9return;
10endif
11"FREE CHARACTER POINTS";
12if ($object_utils:has_property(x, "free_points"))
13x.free_points = x.free_points + (boost / 2.0);
14endif
15"STRENGTH";
16x.stats[2][1] = x.stats[2][1] + (boost / x.stats[2][1]);
17x.stats_current[2][1] = x.stats_current[2][1] + (boost / x.stats_current[2][1]);
18"DEXTERITY";
19x.stats[2][2] = x.stats[2][2] + (boost / x.stats[2][2]);
20x.stats_current[2][2] = x.stats_current[2][2] + (boost / x.stats_current[2][2]);
21"HEALTH";
22x.stats[2][4] = x.stats[2][4] + (2.0 * (boost / x.stats[2][4]));
23x.stats_current[2][4] = x.stats_current[2][4] + (2.0 * (boost / x.stats_current[2][4]));
24"COMBAT";
25combat = "combat" in x.skills[1];
26if (combat)
27newc = (x.skills[2][combat] > 4.0) ? x.skills[2][combat] + (boost / 3.142) | (x.skills[2][combat] + boost);
28x.skills[2][combat] = (x.skills[2][combat] > 6.0) ? x.skills[2][combat] + (boost / 6.384) | newc;
29endif

big_news

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1"USAGE: big_news(assailant, victim, attack verbage, 'hit' or 'miss')";
2x = args[1];
3y = args[2];
4slam = args[3];
5deed = args[4];
6this:announce_all_but({x, y}, $string_utils:pronoun_sub(tostr("%N", slam, iobjstr, deed), x));
7x:tell($string_utils:pronoun_sub(tostr("You", slam, iobjstr, deed), $you));
8y:tell($string_utils:pronoun_sub(tostr("%N", slam, "you", deed), x));
9if ((y.stats_current[2][4] < 4.0) && is_player(y))
10force_input(y, "@health");
11endif

attack hit fight kill destroy punch kick stun disable shoot

Spec any any anyFlags rxdOwner #2Definer #104

Referenced by

none

Source

1"USAGE: attack <OBJ> [with <OBJ>]";
2"       the optional [with <OBJ>] automatically wields the object.";
3"       'punch, kick, stun, disable' attempt a non-lethal attack.";
4"       'kill, destroy' attacks until target is dead or 5 hits are executed, whichever comes first. Only works on monsters, not PCs or NPCs.";
5"       'shoot' only works if what you're wielding can fire.";
6if ($object_utils:isa(player, $guest))
7return player:tell("Guests are not allowed to fight.");
8elseif (!dobjstr)
9return player:tell($string_utils:capitalize(verb), " what?");
10elseif ($object_utils:has_callable_verb(dobj, verb))
11return dobj:(verb)(@args);
12endif
13"WIZARDLY";
14if (`!(!property_info(player, "wielded")) ! E_PROPNF => 0')
15melee = this:valid_attack(player.name, dobjstr);
16dobj = melee[3];
17if (this.sanctuary)
18return this:attack_bypass(verb, @args);
19elseif ((!melee[1]) && valid(melee[3]))
20if (!`melee[3].alive ! E_PROPNF => 0')
21return player:tell("You cannot fight ", dobjstr, ".");
22endif
23endif
24if (valid(melee[3]))
25if ((valid(iobj) && `!(!property_info(iobj, "weapon")) ! E_PROPNF => 0') && (iobj.location in {player, player.location}))
26iobj:moveto(player);
27player:_wield(iobj);
28elseif (iobjstr)
29return player:tell("You can't wield that!");
30endif
31if (!(player.wielded in player.contents))
32player:_wield($hand);
33endif
34if ((!player.wielded.shoots) && (verb == "shoot"))
35return valid(player.wielded.ammo_type) ? $you:say_action("%N %<attempts> to fire. *Click!* Empty!") | player:tell("You cannot fire ", player.wielded:title(), ".");
36elseif (player.wielded.shoots && (verb in {"kill", "destroy"}))
37for q in [1..4]
38fork (q)
39player.wielded:do_shoot(tostr(melee[3]));
40endfork
41endfor
42return;
43elseif (player.wielded.shoots && (!(verb in {"punch", "kick"})))
44if (melee[3] == player)
45return this:mooicide();
46else
47return player.wielded:do_shoot(tostr(melee[3]));
48endif
49endif
50dam = player:damage();
51if ((verb in {"punch", "kick", "stun", "disable"}) || (player.wielded == $hand))
52x = 1;
53if (verb == "punch")
54player.wielded = $hand;
55dam = player:damage();
56elseif (verb == "kick")
57dam = 0.8;
58x = 2;
59endif
60else
61x = 0;
62endif
63if (melee[3] == player)
64return this:mooicide();
65endif
66whacks = ((verb in {"kill", "destroy"}) && (!$object_utils:isa(melee[3], $player))) ? 5 | 1;
67for whack in [1..whacks]
68this:queue_attack(player.name, tostr(melee[3]), dam, x);
69endfor
70elseif (melee[3] == $ambiguous_match)
71player:tell("The name \"", dobjstr, "\" is ambiguous. Try a different name (eg. \"first ", dobjstr, "\").");
72elseif (this:match_fake(dobjstr))
73player:tell("It seems \"", dobjstr, "\" will not spar with you.");
74else
75player:tell(verb, " what?");
76endif
77else
78player:tell("Why do you have to be so violent?");
79endif

mooicide

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1if ((!player.wielded.can_stun) && (player:damage(1) > 2.125))
2if ($command_utils:yes_or_no("Do you really want to kill yourself?"))
3dobj = player.wielded;
4if (player.wielded.shoots)
5slam = player.wielded.shoot_verbage;
6else
7slam = player.wielded.usage_verbage;
8endif
9this:big_news(player, player, slam, ". Owch!");
10return player:die();
11else
12return player:tell("That would have been messy!");
13endif
14else
15return player:tell("That would hurt!");
16endif

queue_attack

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1"WIZARDLY";
2attacker = this:match(args[1]);
3victim = this:match(args[2]);
4attacker = (!valid(attacker)) ? $match_utils:match(args[1], this:contents()) | attacker;
5victim = (!valid(victim)) ? $match_utils:match(args[2], this:contents()) | victim;
6if ((!$rp_regulator:person_match_failed(victim, args[2])) && `victim.alive ! E_PROPNF => 0')
7if (((attacks = length(this.attack_queue)) > 2) && $object_utils:isa(victim, $rpgamer))
8if ($list_utils:count(player.name, $list_utils:slice(this.attack_queue, 1)) > (attacks / 2))
9`$rp_regulator:add_spaz() ! E_VERBNF => ""';
10return player:tell("Rapid paste and/or macro attacks are forbidden.");
11endif
12elseif ((attacks > 4) && ($list_utils:count(player.name, $list_utils:slice(this.attack_queue, 1)) > (attacks / 2)))
13`$rp_regulator:add_spaz() ! E_VERBNF => ""';
14return player:tell("Rapid paste and/or macro attacks are forbidden.");
15endif
16"Execute the first in queue if not from attacker";
17if (this.attack_queue)
18if (args[1] != this.attack_queue[1][1])
19this:advance_queue();
20endif
21elseif (!this.battle_on)
22this.battle_on = 1;
23attacker:tell("You move to attack.");
24if (victim in connected_players())
25victim:tell("You sense an imminent attack from ", attacker:title(), ".");
26"INITIATIVE ROLL";
27ai = attacker:roll_against("dexterity");
28vi = victim:roll_against("dexterity");
29if (vi > ai)
30ai = 0;
31elseif ((ai == 1) && (vi == 1))
32ai = (attacker:roll_against("dexterity") > victim:roll_against("dexterity")) ? 1 | 0;
33endif
34z = ai ? 15 | 25;
35else
36z = 15;
37endif
38"Check back in z seconds. If queue clear, end battle";
39fork (z)
40if (this.attack_queue && (!$scheduler:valid_task(this.battle_task)))
41this.battle_task = $scheduler:schedule(30, this, "battle_check");
42else
43this.battle_on = 0;
44endif
45endfork
46if (z == 25)
47attacker:tell(victim:titlec(), " has the intiative.");
48victim:tell("You won the intitiative, but must attack quickly to retain it.");
49return;
50endif
51suspend(3);
52return this:do_attack(@args);
53endif
54"Queue if attacker is doubletiming, else execute";
55if ((this.attack_queue == {}) || (args[1] == this.attack_queue[$][1]))
56this.attack_queue = {@this.attack_queue, args};
57attacker:tell("You move to attack.");
58else
59this:do_attack(@args);
60endif
61"If victim or attacker goes down, clear the queue";
62if (((((!attacker.alive) || (!victim.alive)) || (!attacker.alert)) || (!attacker.mobile)) || (!victim.alive))
63return this:clear_queue();
64endif
65"Check back in 6 seconds to advance queue";
66fork (6)
67this:advance_queue();
68endfork
69endif

battle_check

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

none

Source

1if (this.attack_queue == {})
2this.battle_on = 0;
3elseif (this.battle_on)
4this.battle_task = $scheduler:schedule(30, this, "battle_check");
5this:advance_queue();
6elseif ((!this.battle_on) && (this.attack_queue != {}))
7$scheduler:schedule(10, this, "clear_queue");
8endif

clear_queue

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1"WIZARDLY";
2more = 1;
3while (more)
4more = this:advance_queue();
5suspend(0);
6endwhile
7this.battle_on = 0;
8this.battle_task = 0;

advance_queue

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1"WIZARDLY";
2if (this.attack_queue)
3z = this.attack_queue[1];
4x = this:match(z[1]);
5y = this:match(z[2]);
6x = (x == $ambiguous_match) ? $match_utils:match(z[1], players()) | x;
7y = (y == $ambiguous_match) ? $match_utils:match(z[2], players()) | y;
8if ((x != $failed_match) && (y != $failed_match))
9if (((x.alive && y.alive) && x.alert) && x.mobile)
10this:do_attack(@z);
11endif
12suspend(0);
13endif
14this.attack_queue = setremove(this.attack_queue, z);
15return 1;
16else
17return 0;
18endif

tell_exits

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1if ((!this.dark) || this:light_on())
2names = {};
3dests = {};
4for r in (this:obvious_exits())
5if ((!($terrain in $object_utils:ancestors(this))) || this:match_loc(player, r))
6names = {@names, r.name};
7dests = {@dests, tostr("(to ", r.dest.name, ")")};
8endif
9endfor
10for v in (`this.virtual_exits ! E_PROPNF => {}')
11names = {@names, this:exit_name(v)};
12dests = {@dests, tostr("(to ", v[2].name, ")")};
13endfor
14l = length(names);
15if (l)
16player:tell("");
17endif
18if (l == 1)
19player:tell("Exit: ", names[1], " ", dests[1]);
20elseif (l > 1)
21howlong = (length($list_utils:longest(names)) + 1) - length(names[1]);
22space = $string_utils:space(howlong, " ");
23line = (("Exits: " + names[1]) + space) + dests[1];
24final = {line};
25for x in [2..l]
26howlong = (length($list_utils:longest(names)) + 1) - length(names[x]);
27space = $string_utils:space(howlong, " ");
28line = (("       " + names[x]) + space) + dests[x];
29final = {@final, line};
30endfor
31player:tell_lines(final);
32endif
33endif

title

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1name = (x = this.name in $list_utils:slice(this.ansi_title, 1)) ? this.ansi_title[x][2] | this.name;
2if (`this.location:title() ! ANY')
3if (this.title_style == 1)
4name = tostr(name, " ", "(", this.location:title(), "[normal])");
5elseif (this.title_style > 1)
6name = tostr(name, " of ", this.location:title(), "[normal]");
7endif
8endif
9return name;

look_self

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1{?brief = 0} = args;
2player:tell();
3len = abs(player:linelen()) - 3;
4player:tell($ansi_utils:center(this:title(), len));
5underscore = $string_utils:space($ansi_utils:length(this:title()), "=");
6bar = $string_utils:space((len - length(underscore)) / 2, "-");
7underscore = (bar + underscore) + bar;
8player:tell(underscore);
9if (!brief)
10if ((!this.dark) || this:light_on())
11desc = this:description();
12if (desc)
13player:tell_lines(desc);
14else
15player:tell("You see nothing special.");
16endif
17if (this.outdoors && $object_utils:has_callable_verb(this.location, "weather_msg"))
18player:tell(this.location:weather_msg());
19endif
20(seconds_left() < 6) && suspend(0);
21this:tell_contents(setremove(this:contents(), player), this.ctype);
22(seconds_left() < 5) && suspend(0);
23this:who_do_what();
24(seconds_left() < 4) && suspend(0);
25this:tell_exits();
26else
27player:tell_lines(this.dark_desc ? this.dark_desc | "It's too dark to see anything.");
28endif
29endif

huh

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

none

Source

1if ((valid(ex = this:match_exit(verb)) && (ex == this)) && (!argstr))
2return ex:invoke();
3elseif (caller in connected_players())
4if ((ex != $failed_match) && (ex in this:exits()))
5return ex:invoke();
6else
7if ((verb in {"stop", "quit"}) && (dobjstr in {"swimming", "bathing"}))
8return this:huh_dry();
9elseif (((verb in {"get", "climb"}) && (dobjstr == "out")) && this.pool)
10return this:huh_dry();
11elseif (verb in {"g", "t", "get", "take", "move"})
12if (valid(dobj) && this:match(dobj))
13if ($object_utils:has_verb(dobj, verb))
14return dobj:(verb)(@args);
15endif
16elseif (this:match(dobjstr) == $ambiguous_match)
17return player:tell("There is more than one \"", dobjstr, "\" here.");
18elseif (this:match_fake(dobjstr))
19return player:tell($string_utils:capitalize(dobjstr), " will not move.");
20else
21return player:tell("You find no ", dobjstr, " here.");
22endif
23endif
24endif
25if (dobjstr && (dobj == $ambiguous_match))
26dobj = this:match(dobjstr);
27dobjstr = valid(dobj) ? $list_utils:shortest(setremove(dobj.aliases, dobjstr)) | dobjstr;
28endif
29if (iobjstr && (iobj == $ambiguous_match))
30iobj = this:match(iobjstr);
31iobjstr = valid(iobj) ? $list_utils:shortest(setremove(iobj.aliases, iobjstr)) | iobjstr;
32endif
33args = {dobjstr, prepstr, iobjstr};
34return $command_utils:do_huh(verb, args);
35endif

@outdoor*s

Spec any any anyFlags rdOwner #36Definer #104

Referenced by

none

Source

1"usage:  @outdoor [on|off]";
2"  Set's whether the time of day/weather is used.";
3com = $string_utils:trim(argstr);
4if (!com)
5player:tell("The outdoor messages are ", this.outdoors ? "on." | "off.");
6return;
7endif
8if ((!player.wizard) && (!(player == this.owner)))
9player:tell(E_PERM);
10return;
11endif
12if (com in {"on", "1", "yes"})
13this.outdoors = 1;
14player:tell("The outdoor messages are ", this.outdoors ? "on." | "off.");
15elseif (com in {"off", "0", "no"})
16this.outdoors = 0;
17player:tell("The outdoor messages are ", this.outdoors ? "on." | "off.");
18else
19player:tell(E_INVARG);
20endif

help_msg

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1msg = {};
2if (`this.help_msg ! E_PROPNF => 0')
3msg = (typeof(this.help_msg) == LIST) ? {@this.help_msg, "---"} | {this.help_msg, "---"};
4endif
5if (`this.build_help ! E_PROPNF => 0' && (!(parent(player) in {$rpgamer, $guest})))
6msg = (typeof(this.build_help) == LIST) ? {@msg, @this.build_help, "---"} | {@msg, this.build_help, "---"};
7endif
8msg = (`this.help_msg != parent(this).help_msg ! E_PROPNF => 0' || (`this.build_help != parent(this).build_help ! E_PROPNF => 0' && (!(parent(player) in {$rpgamer, $guest})))) ? {@msg, tostr("Try \"help ", parent(this), "\" also.")} | msg;
9return msg || 0;

match

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1target = {@this:contents(), @this:exits()};
2match = $match_utils:match(args[1], target);
3return (((match in {$ambiguous_match, $nothing}) || `match.location == this ! E_INVIND => 0') || `match.source == this ! ANY => 0') ? match | $failed_match;

disfunc

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1if ((((cp = caller_perms()) == player) || $perm_utils:controls(cp, player)) || (caller == this))
2this:announce($string_utils:pronoun_sub("%N %<has> disconnected.", player));
3"need the first check since guests don't control themselves";
4if ($object_utils:isa(player, $guest))
5"guest disfuncs are handled by $guest:disfunc. Don't add them here";
6elseif ($rp_regulator.do_clean_rooms || (this != player.home))
7$housekeeper:move_players_home(player);
8endif
9endif

tell_contents

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1if ((!this.dark) || this:light_on())
2if (this:_hole())
3player:tell("There is a small hole dug here.");
4endif
5{contents, ctype} = args;
6if (contents != {})
7if (ctype == 0)
8player:tell("Contents:");
9for thing in (contents)
10player:tell("  ", thing:title());
11endfor
12elseif (ctype == 1)
13for thing in (contents)
14if (`thing.gender ! E_PROPNF => 0')
15player:tell($string_Utils:pronoun_sub("%n ", $gender_utils:get_conj("is", thing), " here.", thing));
16else
17player:tell("You see ", thing:title(), " here.");
18endif
19endfor
20elseif (ctype == 2)
21player:tell("You see ", $string_utils:title_list(contents), " here.");
22elseif (ctype == 3)
23players = things = {};
24for x in (contents)
25pokemons = 0;
26if (`x.gender ! E_PROPNF => 0')
27players = {@players, x};
28pokemons = `$object_utils:isa(x, $replicating_monster) ! ANY => 0' ? 1 | pokemons;
29else
30things = {@things, x};
31endif
32endfor
33if (things)
34player:tell("You see ", $string_utils:title_list(things), " here.");
35endif
36if (players)
37if (!pokemons)
38player:tell($string_utils:title_listc(players), (length(players) == 1) ? " " + $gender_utils:get_conj("is", players[1]) | " are", " here.");
39else
40player:tell($breeder:group_booguns(players));
41endif
42endif
43endif
44endif
45endif

light_on

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1(ticks_left() < 6000) && suspend(0);
2contents = this:contents();
3for o in (this:contents())
4for oo in (o:contents())
5contents = setadd(contents, oo);
6(ticks_left() < 4000) && suspend(0);
7endfor
8(ticks_left() < 5000) && suspend(0);
9endfor
10for o in (contents)
11if (`o.light_on ! E_PROPNF => 0')
12return 1;
13endif
14(ticks_left() < 4000) && suspend(0);
15endfor
16return 0;

_hole

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1if ($object_utils:isa(this, $terrain))
2return ({player.x_loc, player.y_loc} in this.holes) ? 1 | 0;
3endif
4return this.holes ? 1 | 0;

sneak

Spec any any anyFlags rxdOwner #36Definer #104

Referenced by

none

Source

1"USAGE: 'sneak <direction>' gives player a chance of moving unnoticed. It is used just like the 'go' verb.";
2if (`player:roll_against("stealth") ! ANY => 0' && player.obvious)
3player.obvious = 0;
4fork (3)
5player.obvious = 1;
6endfork
7endif
8this:go(@args);

contents

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1stuff = {};
2for o in (this.contents)
3stuff = `o.obvious ! E_PROPNF => 1' ? {@stuff, o} | stuff;
4endfor
5return stuff;

loot rob pilfer roll search strip

Spec any any anyFlags rdOwner #2Definer #104

Referenced by

none

Source

1"USAGE: search [any] => checks for success against 'search' skill.";
2"       Found objects having a make_visible() verb should return a 1 when called.";
3if (player.location != this)
4return;
5elseif (player.owner != player)
6return player:notify("Guests are not allowed to do that.");
7elseif (this == player.searching)
8return player:tell("You're still searching.");
9endif
10dobj = (!valid(dobj)) ? $match_utils:match(dobjstr, {@this:contents(), @this:obvious_exits()}) | dobj;
11if (dobj == $ambiguous_match)
12return player:tell("Which one?");
13elseif ($object_utils:has_callable_verb(dobj, verb))
14dobj:(verb)(@args);
15elseif ((dobjstr && (!valid(dobj))) && this:match_fake(dobjstr))
16player:tell("You find nothing that a casual glance did not reveal.");
17elseif (verb == "search")
18player.searching = this;
19exits = {};
20for x in (this.exits)
21exits = x.obvious ? exits | {@exits, x};
22endfor
23objects = {};
24objects = $set_utils:union(this:contents(), exits);
25player:tell("You begin searching ", this:title(), ".");
26for object in (objects)
27suspend(7);
28if (player.location != player.searching)
29return player.searching = $nothing;
30endif
31srch = dfnd = 0;
32if (`!object.obvious ! E_PROPNF => 0' || (object in exits))
33srch = player:roll_against("search");
34if ($object_utils:has_callable_verb(object, "roll_against"))
35dfnd = object:roll_against("stealth");
36else
37dfnd = random(2) - 1;
38endif
39endif
40if (srch <= dfnd)
41objects = setremove(objects, object);
42endif
43endfor
44player.searching = $nothing;
45for object in (objects)
46if (`!object.obvious ! E_PROPNF => 0')
47if (`object:make_visible() ! E_VERBNF => 0')
48player:tell("You reveal ", object:title(), ".");
49else
50player:tell("You discover ", object:title(), " (still in hiding).");
51endif
52elseif (object in exits)
53player:tell("You detect a hidden exit, ", object:title());
54endif
55endfor
56if (!objects)
57player:tell("You discover nothing new.");
58endif
59else
60player:tell("You want to ", verb, " what?");
61endif

com*mand per*suade

Spec any at/to anyFlags rdOwner #36Definer #104

Referenced by

none

Source

1if ($object_utils:has_callable_verb(dobj, verb))
2return dobj:(verb)(@args);
3endif
4name = dobjstr;
5argstr = iobjstr;
6who = player.location:match_object(name);
7sayverb = $string_utils:get_say_verb(argstr);
8preppy = $string_utils:get_say_verb_prep(sayverb);
9argstr = $code_utils:argstr(verb, args, argstr);
10metitle = player:titlec();
11if (!valid(who))
12whotitle = name;
13wttell = setremove(setremove(player.location.contents, who), player);
14else
15whotitle = who:title();
16wilf = $lang_utils:in_line_for($lang_utils:speaking(player), who);
17who:Tell(metitle, " ", $gender_utils:get_conj(sayverb, player), preppy, "you, \"", $lang_utils:encrypt(player, who, argstr), "\" ", wilf);
18wttell = setremove(setremove(player.location.contents, who), player);
19endif
20pilf = $lang_utils:in_line_for($lang_utils:speaking(player), player);
21player:tell("You ", $you:verb_sub(sayverb), preppy, whotitle, ", \"", argstr, "\" ", pilf);
22$lang_utils:announce(player, wttell, tostr(metitle, " ", $gender_utils:get_conj(sayverb, player), preppy, whotitle, ", \"%lang_encrypt\""), argstr);
23com = player:roll_against("command");
24def = `who:roll_against("command") ! ANY => 1';
25if (com && (!def))
26blurb = (verb in {"com", "command"}) ? "<<<The command was *very* compelling.>>>" | "<<<The suggestion was *very* persuasive.>>>";
27elseif (def && (!com))
28blurb = (verb in {"com", "command"}) ? "<<<The command was not at all compelling.>>>" | "<<<The suggestion was not persuasive.>>>";
29elseif (com && def)
30blurb = (verb in {"com", "command"}) ? "<<<The command was somewhat compelling.>>>" | "<<<The suggestion was somewhat persuasive.>>>";
31else
32blurb = (verb in {"com", "command"}) ? "<<<The command was only mildly compelling.>>>" | "<<<The suggestion was mildly persuasive.>>>";
33endif
34nomatch = `who:tell(blurb) ! ANY => 1';
35if (nomatch)
36player:tell("<<<Good practice.>>>");
37else
38player:tell(blurb);
39endif

dig

Spec any any anyFlags rdOwner #2Definer #104

Referenced by

none

Source

1"Calls 'this:special_dig_verb()' if one exists, or passes to an object's 'dig' verb.";
2if (dobj != this)
3if ($object_utils:has_callable_verb(dobj, verb))
4return dobj:(verb)(@args);
5endif
6return player:tell("Dig where?");
7endif
8if (`((this.dig_level - 4) + player.wielded.dig_level) > 0 ! ANY => 0')
9if (this:_hole())
10return player:tell("There's already a hole here.");
11else
12$you:say_action("%N %<digs> into %l.");
13`this:special_dig_verb() ! E_VERBNF => ""';
14hole = $object_utils:isa(this, $terrain) ? {player.x_loc, player.y_loc} | {1, 1};
15this.holes = setadd(this.holes, hole);
16this.fakes = setadd(this.fakes, "hole");
17$scheduler:schedule(86400 / this.dig_level, this, "fill_hole", {hole});
18endif
19else
20player:tell("You try to burrow, but can't seem to dig here.");
21endif

who_location_msg

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

Source

1return (parent(player) in {$rpgamer, `$local.guest ! ANY => $guest'}) ? `this.location:title() ! ANY => pass(@args)' | pass(@args);

fill_hole

Spec this none thisFlags rxdOwner #2Definer #104

Referenced by

none

Source

1if ((!caller_perms().wizard) && (caller_perms() != this.owner))
2return E_PERM;
3endif
4this.holes = setremove(this.holes, args[1]);
5this.fakes = this.holes ? this.fakes | setremove(this.fakes, "hole");