ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/ext/commands.ext
(Generate patch)

Comparing deliantra/server/ext/commands.ext (file contents):
Revision 1.25 by pippijn, Fri Mar 2 11:13:50 2007 UTC vs.
Revision 1.34 by pippijn, Fri Mar 2 15:25:37 2007 UTC

17 17
18 if (length $from) { 18 if (length $from) {
19 $item = $ob->find_best_object_match ($from) 19 $item = $ob->find_best_object_match ($from)
20 or return $ob->message ("rename: could not find a matching item to rename."); 20 or return $ob->message ("rename: could not find a matching item to rename.");
21 } else { 21 } else {
22 $item = $ob->find_marked_object () 22 $item = $ob->find_marked_object
23 or return $ob->message ("rename: no from name and no marked item found to rename."); 23 or return $ob->message ("rename: no from name and no marked item found to rename.");
24 } 24 }
25 25
26 $item->custom_name (length $to ? $to : undef); 26 $item->custom_name (length $to ? $to : undef);
27 27
87 $ob->reply (undef, (join "\n", who_listing $ob->may ("extended_who")), cf::NDI_UNIQUE | cf::NDI_DK_ORANGE); 87 $ob->reply (undef, (join "\n", who_listing $ob->may ("extended_who")), cf::NDI_UNIQUE | cf::NDI_DK_ORANGE);
88 88
89 1 89 1
90}; 90};
91 91
92cf::register_command body => sub {
93 my ($ob) = @_;
94
95 my @body_locations = ("in your range slot", "on your arm", "on your body", "on your head",
96 "around your neck", "in your skill slot", "on your finger", "around your shoulders",
97 "on your feet", "on your hands", "around your wrists", "around your waist");
98
99 # Too hard to try and make a header that lines everything up, so just
100 # give a description. (comment from C++)
101 $ob->reply (undef, "The first column is the name of the body location.");
102 $ob->reply (undef, "The second column is how many of those locations your body has.");
103 $ob->reply (undef, "The third column is how many slots in that location are available.");
104
105 for (0 .. scalar @body_locations - 1) {
106 $ob->reply (undef, (sprintf "%-30s %5d %5d", $body_locations[$_], $ob->body_info($_), $ob->body_used($_)))
107 if $ob->body_info($_) or $ob->body_used($_);
108 }
109
110 $ob->reply (undef, "You are not allowed to wear armor")
111 unless $ob->flag (cf::FLAG_USE_ARMOUR);
112 $ob->reply (undef, "You are not allowed to use weapons")
113 unless $ob->flag (cf::FLAG_USE_WEAPON);
114
115 1
116};
117
118cf::register_command mark => sub {
119 my ($pl, $arg) = @_;
120
121 if (length $arg) {
122 my $ob = $pl->find_best_object_match ($arg);
123
124 return $pl->reply (undef, "Could not find an object that matches $arg")
125 unless $ob;
126
127 $pl->contr->mark ($ob);
128 $pl->reply (undef, (sprintf "Marked item %s", $ob->name, $ob->title));
129 } else {
130 my $ob = $pl->find_marked_object;
131
132 $pl->reply (undef, $ob
133 ? (sprintf "%s %s * is marked.", $ob->name, $ob->title)
134 : "You have no marked object.");
135 }
136
137 1
138};
139
140cf::register_command who => sub {
141 my ($ob, $arg) = @_;
142
143 $ob->speed_left ($ob->speed_left - 0.25);
144
145 $ob->reply (undef, (join "\n", who_listing $ob->may ("extended_who")), cf::NDI_UNIQUE | cf::NDI_DK_ORANGE);
146
147 1
148};
149
150for my $cmd ("run", "fire") {
151 my $oncmd = "${cmd}_on";
152 cf::register_command $cmd => sub {
153 my ($ob, $arg) = @_;
154
155 $ob->reply (undef, "Can't $cmd into a non adjacent square.")
156 if $arg < 0 or $arg >= 9;
157
158 $ob->contr->$oncmd (1);
159 $ob->move_player ($arg);
160
161 1
162 };
163
164 cf::register_command "${cmd}_stop" => sub {
165 my ($ob) = @_;
166
167 $ob->contr->$oncmd (0);
168
169 1
170 };
171}
172
173cf::register_command mapinfo => sub {
174 my ($ob) = @_;
175
176 my $map = $ob->map
177 or return;
178 $ob->reply (undef, (sprintf "%s (%s) %s", $map->name, $map->path, $ob->region->longname));
179 $ob->reply (undef, (sprintf "players: %d difficulty: %d size: %d start: %dx%d timeout: %d",
180 $map->players, $map->difficulty, $map->width, $map->height, $map->enter_x, $map->enter_y, $map->timeout))
181 if $ob->flag (cf::FLAG_WIZ);
182 $ob->reply (undef, $map->msg);
183
184 1
185};
186
92cf::register_command whereami => sub { 187cf::register_command whereami => sub {
93 my ($ob) = @_; 188 my ($ob) = @_;
94 189
95 my $reg = $ob->region; 190 my $reg = $ob->region;
96 $ob->reply (undef, (sprintf "You are %s.\n%s", $reg->longname, $reg->msg)); 191 $ob->reply (undef, (sprintf "You are %s.\n%s", $reg->longname, $reg->msg));
97 192
98 1 193 1
99}; 194};
100 195
196sub _set_mode($$$@) {
197 my ($name, $ob, $arg, $slot, @choices) = @_;
198
199 my $oldmode = $ob->contr->$slot;
200
201 return $ob->reply (undef, "$name is set to $choices[$oldmode]")
202 unless $arg;
203
204 my ($idx) = grep $choices[$_] eq $arg, 0 .. $#choices
205 or return $ob->reply (undef, "$name: Unknown options '$arg', valid options are @choices"), 1;
206
207 $ob->contr->$slot ($idx);
208 $ob->reply (undef, "$name" . ($oldmode == $ob->contr->unapply ? "" : " now") . " set to " . $choices[$ob->contr->$slot]);
209}
210
101cf::register_command applymode => sub { 211cf::register_command applymode => sub {
102 my ($ob, $arg) = @_; 212 my ($ob, $arg) = @_;
103 my @types = ("nochoice", "never", "always");
104 my $mapping = {
105 nochoice => 1,
106 never => 2,
107 always => 3,
108 };
109 213
110 my $oldmode = $ob->contr->unapply; 214 _set_mode "applymode", $ob, $arg, unapply => qw(nochoice never always);
111 my $oldmode_name = $types[$oldmode];
112
113 return $ob->reply (undef, "applymode is set to $oldmode_name")
114 unless $arg;
115
116 return $ob->reply (undef, "applymode: Unknown options '$arg', valid options are @types")
117 unless $mapping->{$arg};
118
119 $ob->contr->unapply ($mapping->{$arg} - 1); # HACK: because of the $mapping->{$arg} check before, where $arg should not be 0
120 # but $arg would be 0 if a user enters an incorrect value
121 $ob->reply (undef, "applymode" . ($oldmode == $ob->contr->unapply ? "" : " now") . " set to " . $types[$ob->contr->unapply]);
122 215
123 1 216 1
124}; 217};
125 218
126cf::register_command petmode => sub { 219cf::register_command petmode => sub {
127 my ($ob, $arg) = @_; 220 my ($ob, $arg) = @_;
128 my @types = ("normal", "sad", "defend", "arena");
129 my $mapping = {
130 normal => 1,
131 sad => 2,
132 defend => 3,
133 arena => 4,
134 };
135 221
136 my $oldtype = $ob->contr->petmode; 222 _set_mode "petmode", $ob, $arg, petmode => qw(normal sad defend arena);
137 my $oldtype_name = $types[$oldtype];
138
139 return $ob->reply (undef, "petmode is set to $oldtype_name")
140 unless $arg;
141
142 return $ob->reply (undef, "petmode: Unknown options '$arg', valid options are @types")
143 unless $mapping->{$arg};
144
145 $ob->contr->petmode ($mapping->{$arg} - 1); # HACK: because of the $mapping->{$arg} check before, where $arg should not be 0
146 # but $arg would be 0 if a user enters an incorrect value
147 $ob->reply (undef, "petmode" . ($oldtype == $ob->contr->petmode ? "" : " now") . " set to " . $types[$ob->contr->petmode]);
148 223
149 1 224 1
150}; 225};
151 226
152cf::register_command usekeys => sub { 227cf::register_command usekeys => sub {
153 my ($ob, $arg) = @_; 228 my ($ob, $arg) = @_;
154 my @types = ("inventory", "keyrings", "containers");
155 my $mapping = {
156 inventory => 1,
157 keyrings => 2,
158 containers => 3,
159 };
160 229
161 my $oldtype = $ob->contr->usekeys; 230 _set_mode "usekeys", $ob, $arg, usekeys => qw(inventory keyrings containers);
162 my $oldtype_name = $types[$oldtype];
163
164 return $ob->reply (undef, "usekeys is set to $oldtype_name")
165 unless $arg;
166
167 return $ob->reply (undef, "usekeys: Unknown options '$arg', valid options are @types")
168 unless $mapping->{$arg};
169
170 $ob->contr->usekeys ($mapping->{$arg} - 1); # HACK: because of the $mapping->{$arg} check before, where $arg should not be 0
171 # but $arg would be 0 if a user enters an incorrect value
172 $ob->reply (undef, "usekeys" . ($oldtype == $ob->contr->usekeys ? "" : " now") . " set to " . $types[$ob->contr->usekeys]);
173 231
174 1 232 1
175}; 233};
176 234
177cf::register_command afk => sub { 235cf::register_command afk => sub {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines