generic container #54

Parent #255Owner #29Flags read, fertileSource hellcore/hellcore.db

Aliases: generic container

29 verbs · 62 properties · 6 children

Verbs

VerbSpecFlagsDefinerLines
weightthis none thisrxd#549
acceptablethis none thisrxd#5411
look_selfthis none thisrxd#547
openthis none nonerxd#5413
lockedthis none thisrxd#541
closethis none nonerxd#5413
tell_appraisethis none thisrxd#5422
descriptionthis none thisrxd#545
tell_contents_backupthis none thisrxd#5411
broadcast_noise broadcast_soundthis none thisrxd#5411
get_fromthis none thisrxd#547
put_intothis none thisrxd#547
cant_get_fromthis none thisrxd#5419
exitfuncthis none thisrxd#5411
enterfuncthis none thisrxd#5411
match_backupthis none thisrxd#541
tell_contentsthis none thisrxd#5432
tell_contents_subthis none thisrxd#5462
contents_valuethis none thisrxd#548
can_globthis none thisrxd#544
cant_put_intothis none thisrxd#5411
cleanany out of/from inside/from thisrxd#5424
match_contentsthis none thisrxd#542
make_noisethis none thisrxd#542
countany in/inside/into thisrxd#5450
_breakthis none thisrxd#5432
peekthis none nonerxd#5415
old_count this none thisthis none thisrxd#5417
set_plural_namethis none thisrxd#545

Properties

PropertyDefinerFlagsOwnerValue
capacity#54rc#2910000
weight_reduction#54rc#290.6
opaque#54rc#291
dark#54rc#290
close_msg#54rc#29"%DN closes %dl."
open_msg#54rc#29"%N opens %dl."
remove_msg#54rc#29"%DN gets %it from %dl."
put_msg#54rc#29""
empty_msg#54rc#29"You don't find anything in %dt."
contents_msg#54rc#29"In %dt you find:"
open_fail_msg#54rc#29"%N struggles to pry open %tl, but it seems to be locked."
put_fail_msg#54rc#29"%N tries to shove %t into %l, but it won't fit."
closed_msg#54rc#29"It's closed."
closable#54rc#291
open#54rwc#290
get_from_msg#54rc#29""
max_objects#54rc#29100
spill_on_break#54rc#291
peek_msg#54rc#29"%DN opens %dt and peeks inside."
clean_start_msg#54rc#29"You begin scrubbing %dt inside of %dl."
oclean_start_msg#54rc#29"%DN starts scrubbing %dt inside of %dl."
clean_finish_msg#54rc#29"You brush your hands off. You cleaned %dt out of %dl."
oclean_finish_msg#54rc#29"%DN brushes off %p hands."
break_msg#255rc#29"%DT breaks open, spilling %tp contents all over the ground."
repair_difficulty#255rc#29<clear>
junk_on_break#255rc#290
rename_on_break#255rc#29<clear>
smashable#255rc#290
repairable#255rc#29<clear>
armor#255rc#29<clear>
held_break_msg#255rc#29"Your %t breaks open, spilling %tp contents all over the ground."
oheld_break_msg#255rc#29"%DN's %t breaks open, spilling %tp contents all over the ground."
handed#5rc#29<clear>
wield_msg#5rc#29<clear>
unwield_msg#5rc#29<clear>
size#5rc#29<clear>
look_place_msg#5rc#29<clear>
value#5rc#29<clear>
get_msg#5rc#29""
drop_msg#5rc#29<clear>
get_fail_msg#5rc#29<clear>
junk_ok#5rc#29<clear>
floats#5rc#29<clear>
long_name_msg#5rc#29<clear>
article#5rc#29<clear>
setup_list#5rc#29
list of 8{"weight,weight in grams (500g = 1 lb),100", "value,dollar value,0", "description,description", "weight_reduction,what factor to reduce an object's weight by when in the container,0.75", "capacity,how many grams will it hold,10000", "opaque,can we see what's inside when it's closed?,1", "dark,can we see what's inside when it's open?,0", "closable,can it be closed?,1"}
health#5rc#2920
health_max#5rc#29<clear>
min_skill#5rc#29<clear>
skill#5rc#29<clear>
recipe_for#5rc#29<clear>
carried_msg#5rc#29<clear>
aliases#1rc#29{"generic container"}
description#1rc#29"A container."
object_size#1r#29{22295, 1298433816}
hidden_verbs#1rc#29
list of 12{"hold", "stow", "@setup", "throw", "give", "junk", "appraise", "stash", "feed", "breakdown", "count", "clean"}
phelp_msg#1rc#29
list of 1{"It's a container. You can 'open <container>', 'close <container>', 'look <container>', 'get <something> from <container>', or 'put <something> in <container>'."}
weight#1rc#29<clear>
owner_verbs#1rc#29<clear>
plural_name#1rc#29<clear>
client_image#1rc#29<clear>
listening#1rc#29<clear>

Ancestry

Ancestors (nearest first): #255 generic smashable thing#5 generic thing#1 root

Children: #105 pattern file, #147 generic workbench, #178 stashed items, #188 generic globbing container, #366 pattern file, #367 furnace

Call graph

calls n54_0 #54:weight n20_59 #20:name_and_number n54_0->n20_59 n48_8 #48:suspend_if_needed n54_0->n48_8 n54_1 #54:acceptable n54_1->n54_0 n54_2 #54:look_self n255_2 #255:look_self n54_2->n255_2 n54_16 #54:tell_contents n54_2->n54_16 n47_3 #47:map_verb n54_2->n47_3 n107_43 #107:tell n54_16->n107_43 n254_5 #254:plurals n54_16->n254_5 n254_6 #254:group_by_type n54_16->n254_6 n54_17 #54:tell_contents_sub n54_16->n54_17 n54_3 #54:open n54_4 #54:locked n54_3->n54_4 n1_66 #1:announce_action_text n54_3->n1_66 n20_34 #20:pronoun_sub n54_3->n20_34 n54_3->n107_43 n1_39 #1:dnamec n54_3->n1_39 n6_102 #6:client_tell n54_3->n6_102 n54_5 #54:close n54_5->n1_66 n54_5->n20_34 n54_5->n107_43 n54_5->n1_39 n54_5->n6_102 n1_31 #1:dname n54_5->n1_31 n54_6 #54:tell_appraise n54_6->n107_43 n54_18 #54:contents_value n54_6->n54_18 n54_7 #54:description n54_7->n20_34 n5_4 #5:description n54_7->n5_4 n54_8 #54:tell_contents_backup n54_8->n47_3 n54_8->n20_34 n54_8->n107_43 n20_6 #20:english_list n54_8->n20_6 n54_10 #54:get_from n47_25 #47:randomly_permute n54_10->n47_25 n54_11 #54:put_into n54_11->n47_25 n54_12 #54:cant_get_from n54_12->n1_31 n54_13 #54:exitfunc n175_1 #175:tell_inv_rm n54_13->n175_1 n54_14 #54:enterfunc n175_0 #175:tell_inv_add n54_14->n175_0 n54_15 #54:match_backup n44_0 #44:match n54_15->n44_0 n1_23 #1:contents n54_15->n1_23 n54_17->n1_23 n6_54 #6:check_pref n54_17->n6_54 n47_16 #47:slice n54_17->n47_16 n20_85 #20:english_weight_short n54_17->n20_85 n20_80 #20:aggregate_number n54_17->n20_80 n6_121 #6:tell_item_list n54_17->n6_121 n54_19 #54:can_glob n5_21 #5:can_glob n54_19->n5_21 n54_21 #54:clean n54_21->n20_34 n54_21->n107_43 n54_21->n1_31 n54_21->n44_0 n103_2 #103:junk n54_21->n103_2 n54_22 #54:match_contents n54_22->n44_0 n54_23 #54:make_noise

Showing 48 of 60 verbs; 12 not shown.

Source

weight

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

Source

1if (this.weight < 0)
2return -1;
3endif
4weight = 0;
5for x in (this.contents)
6weight = weight + toint(`x:weight() ! ANY => 0 && $nets.prognet:announce(player, "broken :weight for " + $su:nn(x), 1)');
7$cu:sin(0);
8endfor
9return toint(tofloat(weight) * this.weight_reduction) + this.weight;

acceptable

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

none

Source

1what = args[1];
2if (is_a(what, $lock))
3return 1;
4endif
5if ((is_a(what, $container) && (this.weight > 0)) && (this.weight < 50000))
6return 0;
7endif
8if (length(this.contents) > 250)
9return 0;
10endif
11return ((this:weight() - this.weight) + what:weight()) < this.capacity;

look_self

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

Source

1pass(@args);
2if (this.open || (!this.opaque))
3if (this:tell_contents() == 0)
4"    player:tell($su:ps(this.empty_msg));";
5endif
6endif
7$lu:map_verb(occupants(this, $decal), "tell_person", this);

open

Spec this none noneFlags rxdOwner #361Definer #54

Referenced by

Source

1if (this:locked())
2player:aat($su:ps(this.open_fail_msg, player, this, this));
3elseif (this.open)
4player:tell(this:dnamec(), " is already open.");
5else
6this.open = 1;
7if (this.location == player)
8player:client_tell("#$#inventory");
9player:client_tell("open #", toint(this));
10player:client_tell("#$#/inventory");
11endif
12player:aat($su:ps(this.open_msg, player, this, this));
13endif

locked

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

Source

1return 0;

close

Spec this none noneFlags rxdOwner #361Definer #54

Referenced by

Source

1if (!this.closable)
2player:tell("You can't close ", this:dname(), ".");
3elseif (!this.open)
4player:tell(this:dnamec(), " is already closed.");
5else
6if (this.location == player)
7player:client_tell("#$#inventory");
8player:client_tell("close #", toint(this));
9player:client_tell("#$#/inventory");
10endif
11this.open = 0;
12player:aat($su:ps(this.close_msg, player, this, this));
13endif

tell_appraise

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

none

Source

1roll = args[1];
2pass(@args);
3if (roll > 0)
4player:tell("It can hold about ", this.capacity / 1000, "kg.");
5wr = 1.0 - this.weight_reduction;
6wr = toint(wr * 10.0);
7player:tell("It seems ", {"barely", "somewhat", "quite", "very", "extremely"}[min(5, max(1, wr))], " efficient for carrying heavy loads.");
8endif
9if (roll > 1)
10val = this:contents_value();
11if (val > 0)
12var = max(1, val / (3 + roll));
13val = val + (random(var) - (var / 2));
14val = max(1, val);
15if (val > 1000)
16val = (val / 100) * 100;
17elseif (val > 100)
18val = (val / 10) * 10;
19endif
20player:tell(("You think its contents might fetch about $" + tostr(val)) + " on the market.");
21endif
22endif

description

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

Source

1d = (typeof(d = pass(@args)) == LIST) ? d | {d};
2if ((!this.open) && this.closed_msg)
3d[$] = (d[$] + " ") + $su:ps(this.closed_msg, this, this);
4endif
5return d;

tell_contents_backup

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

none

Source

1"Copied from generic container (#931):tell_contents by Gilmore (#98) Fri Apr  2 01:51:47 2004 PST";
2if (this.open || (!this.opaque))
3if (this.dark || (!this.contents))
4if (m = this.empty_msg)
5player:tell($su:ps(this.empty_msg, player, this, this));
6endif
7else
8contents = $su:english_list($lu:map_verb(this.contents, "iname"));
9player:tell($su:ps(strsub(this.contents_msg, "%t", contents), player, this, this));
10endif
11endif

broadcast_noise broadcast_sound

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

none

Source

1":broadcast_noise(STR noise-message, INT volume[, INT noiseid, OBJ sourceexit])";
2msg = args[1];
3volume = args[2];
4sourceexit = (length(args) > 3) ? args[4] | #-1;
5noiseid = (length(args) > 2) ? args[3] | random(9999999);
6volume = min(volume, 7);
7volume = max(volume, -4);
8sd = {"faint", "faint", "faint", "distant", "muffled", "muffled", "loud", "loud", "loud", "deafening", "deafening", "deafening"}[volume + 5];
9if (is_a(this.location, $room))
10this.location:broadcast_noise(msg, volume, noiseid, this);
11endif

get_from

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

none

Source

1who = args[1];
2targets = (typeof(args[2]) == LIST) ? $lu:randomly_permute(args[2]) | {args[2]};
3if (this.open)
4who:queue_action($actions.get, {targets, this, {}}, 1, "get from " + this.name);
5else
6return E_INVARG;
7endif

put_into

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

none

Source

1who = args[1];
2targets = (typeof(args[2]) == LIST) ? $lu:randomly_permute(args[2]) | {args[2]};
3if (this.open)
4who:queue_action($actions.put, {targets, this, {}}, 1, "put into " + this.name);
5else
6return E_INVARG;
7endif

cant_get_from

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

none

Source

1getter = args[1];
2targets = args[2];
3if (typeof(targets) != LIST)
4targets = {targets};
5endif
6if (!this.contents)
7return this:dname() + " is empty";
8elseif (!this.open)
9return this:dname() + " isn't open";
10endif
11for x in (targets)
12if (!(x in this.contents))
13targets = setremove(targets, x);
14endif
15endfor
16if (!targets)
17return "that's not in " + this:dname();
18endif
19return 0;

exitfunc

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

Source

1what = args[1];
2location = this;
3while (valid(location))
4location = location.location;
5if (is_a(location, $player) && location.client)
6location:client_tell("#$#inventory");
7$client:tell_inv_rm(location, what);
8location:client_tell("#$#/inventory");
9break;
10endif
11endwhile

enterfunc

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

none

Source

1what = args[1];
2location = this;
3while (valid(location))
4location = location.location;
5if (is_a(location, $player) && location.client)
6location:client_tell("#$#inventory");
7$client:tell_inv_add(location, what);
8location:client_tell("#$#/inventory");
9break;
10endif
11endwhile

match_backup

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

none

Source

1return $match_utils:match(args[1], this:contents());

tell_contents

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

Source

1{?c = this.contents} = args;
2names = {@$iu:pluralsc(), "Misc"};
3show_nonthings = 0;
4if (is_a(player, $prog))
5names = {@names, "Non-things"};
6show_nonthings = 1;
7nonthings = {};
8endif
9things = {};
10count = 0;
11for x in (c)
12if (!is_a(x, $thing))
13if (show_nonthings && (!is_a(x, $decal)))
14nonthings = {@nonthings, x};
15count = count + 1;
16endif
17else
18things = {@things, x};
19count = count + 1;
20endif
21endfor
22buckets = $iu:group_by_type(things);
23if (show_nonthings)
24buckets = {@buckets, nonthings};
25endif
26for x in [1..length(buckets)]
27if (buckets[x])
28player:tell($ansi.bold_on, names[x], ":", $ansi.reset);
29this:tell_contents_sub(buckets[x]);
30endif
31endfor
32return count;

tell_contents_sub

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

Source

1"Copied from generic container (#931):tell_contents by Satan (#2) Sat Jul 22 18:45:06 2006 PDT";
2"Copied from generic player (#6):tell_contents by Satan (#2) Sat Jul 22 18:39:37 2006 PDT";
3msg_db = {};
4names = {};
5if (args)
6things = args[1];
7else
8things = this:contents();
9endif
10for x in (things)
11if (is_a(x, $decal))
12things = setremove(things, x);
13endif
14endfor
15weights = player:check_pref("weights");
16if (#594466 in $lu:slice(callers(), 1))
17weights = 0;
18endif
19total_weight = 0;
20if (things)
21for x in (things)
22yield 1;
23added = 0;
24if (list_name = `x:list_name() ! ANY => 0')
25iname = list_name;
26else
27iname = x:iname();
28endif
29if (weights)
30iname = ((((iname + $ansi.cyan) + " [") + $su:english_weight_short(weight = x:weight())) + "]") + $ansi.reset;
31total_weight = total_weight + weight;
32endif
33if (msg_db)
34for y in [1..length(msg_db)]
35if (msg_db[y][2] == iname)
36msg_db[y][3] = msg_db[y][3] + 1;
37msg_db[y][1] = setadd(msg_db[y][1], x);
38added = 1;
39endif
40endfor
41endif
42if (!added)
43msg_db = setadd(msg_db, {{x}, iname, 1});
44endif
45endfor
46for x in (msg_db)
47if (x[3] > 1)
48name = ($string_utils:aggregate_number(x[3]) + " ") + x[1][1]:plural_name();
49if (weights)
50wt = 0;
51for z in (x[1])
52wt = wt + z:weight();
53endfor
54name = ((((name + $ansi.cyan) + " [") + $su:english_weight_short(wt)) + "]") + $ansi.reset;
55endif
56else
57name = x[2];
58endif
59names = {@names, name};
60endfor
61player:tell_item_list(names);
62endif

contents_value

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

Source

1"Copied from generic container (#931):weight by Gilmore (#98) Sun Aug 13 21:08:11 2006 PDT";
2val = 0;
3for x in (this.contents)
4if (is_a(x, $thing))
5val = val + x:value();
6endif
7endfor
8return val;

can_glob

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

none

Source

1if (this.contents)
2return 0;
3endif
4return pass(@args);

cant_put_into

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

none

Source

1what = args[1];
2who = args[2];
3if (!this.open)
4return "it's closed";
5elseif (length(this.contents) >= this.max_objects)
6return "it's full";
7elseif (this.health <= 0)
8return "it's far too broken";
9elseif (what == this)
10return "that's just crazy";
11endif

clean

Spec any out of/from inside/from thisFlags rxdOwner #361Definer #54

Referenced by

none

Source

1"Clean dirt or grime from the container.";
2decals = args[1];
3thing = $match_utils:match(decals, this.contents);
4if (!valid(thing))
5player:tell("There isn't any of that in ", this:dname(), ".");
6return;
7elseif (!is_a(thing, $decal))
8player:tell("The ", thing.name, " isn't dirt or grime. It's possible that the ", this.name, " is clean.");
9return;
10else
11player:tell($su:ps(this.clean_start_msg, player, thing, this));
12player.location:announce($su:ps(this.oclean_start_msg, player, thing, this));
13suspend(4);
14player:tell($su:ps(this.clean_finish_msg, player, thing, this));
15player.location:announce($su:ps(this.oclean_finish_msg, player, thing, this));
16r = random(4);
17if (r == 4)
18suspend(2);
19player:tell("Ugh. You got some ", thing.name, " on yourself!");
20thing:moveto(player);
21else
22$rpg:junk(thing);
23endif
24endif

match_contents

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

none

Source

1s = args[1];
2return $mu:match(s, this.contents);

make_noise

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

none

Source

1":broadcast_noise(OBJ noise, OBJ source[, LIST params, INT volume, INT noiseid, OBJ sourceexit])";
2this:room():make_noise(@args);

count

Spec any in/inside/into thisFlags rxdOwner #29Definer #54

Referenced by

none

Source

1"Copied from stuffzzzzzzz (#487387):count by Mada (#299353) Mon Mar  1 21:21:11 2010 CST";
2if ((!this.open) && this.opaque)
3player:tell("It's not open.");
4return;
5endif
6matches = {};
7for candidate in ({@this.contents})
8if (((((valid(match = $mu:match(dobjstr, {candidate})) && match:name()) && (!`match:is_hidden(player) ! E_VERBNF => 0')) && (!is_a(match, $exit))) && (match != player)) && (!is_a(match, $decal)))
9matches = {@matches, match};
10endif
11endfor
12cats = $lu:remove_duplicates($lu:map_verb(matches, "name"));
13can_glob = is_a(this, #216254);
14forstr = {};
15for cat in (cats)
16howmany = 0;
17for candidate in (matches)
18if (candidate:name() == cat)
19globcheck = can_glob && is_a(candidate, $glob);
20if (!howmany)
21if (globcheck)
22generic = candidate.item;
23else
24parent = parent(candidate);
25generic = (parent:name() == candidate:name()) ? parent | candidate;
26endif
27endif
28howmany = howmany + (globcheck ? candidate.amount | 1);
29endif
30yield;
31endfor
32if ((howmany == 1) && `generic.long_name_msg ! E_PROPNF => ""')
33cat = generic.long_name_msg;
34endif
35if (is_a(generic, $player) || (!howmany))
36pref = "";
37else
38pref = $su:english_number(howmany) + " ";
39endif
40forstr = {@forstr, pref + ((howmany > 1) ? generic:plural_name() | cat)};
41endfor
42locstr = (this.location == player) ? "your" | "the";
43if (!forstr)
44player:tell("You don't see any '", dobjstr, "' in ", this:dname(), " to count.");
45return;
46elseif (length(forstr) > 1)
47forstr[$] = "and " + forstr[$];
48endif
49thelist = (length(forstr) == 2) ? (forstr[1] + " ") + forstr[2] | $su:from_list(forstr, ", ");
50player:tell("Searching for \"", dobjstr, "\" in ", locstr, " ", this:name(), " you find ", thelist, ".");

_break

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

Source

1if (this.spill_on_break)
2room_left = (`this.location.max_objects ! E_PROPNF => 100000' - length(this.location:occupants(#1))) + this.junk_on_break;
3occupants = this:occupants(#1);
4if (length(occupants) > room_left)
5excess = occupants[max(0, room_left) + 1..$];
6else
7excess = {};
8endif
9if (is_a(this.location, $creature))
10dest = this:room();
11else
12dest = this.location;
13endif
14if (room_left && occupants)
15for what in (occupants[1..min(room_left, length(occupants))])
16what:moveto(dest);
17endfor
18endif
19if (this.junk_on_break)
20for what in (excess)
21what:moveto(dest);
22endfor
23fork (0)
24for what in (excess)
25if (is_a(what, #1))
26$rpg:junk(what);
27endif
28endfor
29endfork
30endif
31endif
32pass(@args);

peek

Spec this none noneFlags rxdOwner #361Definer #54

Referenced by

none

Source

1"Peek inside without bothering to open it.";
2if (this:locked())
3player:tell("It's locked, you can't just peek in!");
4return;
5endif
6if (this.open)
7this:look_self();
8return;
9else
10player.location:announce_all($su:ps(this.peek_msg, player, this));
11this:tell_contents();
12if (!this.contents)
13player:tell("Huh. It's empty.");
14endif
15endif

old_count this none this

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

none

Source

1"Copied from generic container (#931):count by MARViN (#241405) Mon Mar  1 21:20:43 2010 CST";
2if (!this.open)
3player:tell("It's not open.");
4return;
5endif
6target = $match_utils:match(dobjstr, this.contents);
7if ((!$recycler:valid(target)) || is_a(target, $decal))
8player:tell("You don't see any '", dobjstr, "' in ", this:dname(), " to count.");
9return;
10endif
11if (is_a(target, $glob))
12parent = target.item;
13else
14parent = parent(target);
15endif
16howmany = length(this:occupants(parent));
17player:tell("You count ", $su:english_number(howmany), " ", (howmany > 1) ? parent:plural_name() | parent.name, ".");

set_plural_name

Spec this none thisFlags rxdOwner #361Definer #54

Referenced by

none

Source

1"Copied from generic container (#931):set_name by Satan (#2) Tue May 25 14:41:49 2010 CDT";
2"Copied from door (#170):set_name by Satan (#2) Sat Aug 19 12:00:14 2006 PDT";
3"set_name(newname) attempts to change this.name to newname";
4"  => E_PERM   if you don't own this or aren't its parent, or are a player trying to do an end-run around $player_db...";
5return (typeof(e = `this.plural_name = args[1] ! ANY') != ERR) || e;