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

Comparing deliantra/server/ext/NPC_Dialogue.pm (file contents):
Revision 1.7 by elmex, Sat Aug 25 16:51:38 2007 UTC vs.
Revision 1.11 by root, Mon Sep 22 01:33:09 2008 UTC

11=cut 11=cut
12 12
13package NPC_Dialogue; 13package NPC_Dialogue;
14 14
15use strict; 15use strict;
16
17sub has_dialogue($) {
18 my ($ob) = @_;
19
20 $ob->msg =~ /^\@match /;
21}
22 16
23sub parse_message($) { 17sub parse_message($) {
24 map [split /\n/, $_, 2], 18 map [split /\n/, $_, 2],
25 grep length, 19 grep length,
26 split /^\@match /m, 20 split /^\@match /m,
125 119
126=item B<matching for an item name and removing the matched item> 120=item B<matching for an item name and removing the matched item>
127 121
128 @match found earhorn 122 @match found earhorn
129 @cond grep $_->slaying =~ /Gramp's walking stick/, $who->inv 123 @cond grep $_->slaying =~ /Gramp's walking stick/, $who->inv
130 @eval my @g = grep { $_->slaying =~ /Gramp's walking stick/ } $who->inv; $g[0]->decrease_ob_nr (1); 124 @eval my @g = grep { $_->slaying =~ /Gramp's walking stick/ } $who->inv; $g[0]->decrease;
131 Thanks for the earhorn! 125 Thanks for the earhorn!
132 126
133This example is a bit more complex. The C<@eval> statement will search 127This example is a bit more complex. The C<@eval> statement will search
134the players inventory for the same term as the C<@cond> and then 128the players inventory for the same term as the C<@cond> and then
135decreases the number of objects used there. 129decreases the number of objects used there.
212When a state argument is given it should be either 0 or 1. 1 will 'push' the connection 206When a state argument is given it should be either 0 or 1. 1 will 'push' the connection
213and 0 will 'release' the connection. This is useful for example when you want to 207and 0 will 'release' the connection. This is useful for example when you want to
214let a npc control a door. 208let a npc control a door.
215 209
216Trigger all objects with the given connected-id by 'releasing' the connection. 210Trigger all objects with the given connected-id by 'releasing' the connection.
211
212=item @playersound face-name
213
214Plays the given sound face (either an alias or sound file path) so that
215only the player talking to the npc can hear it.
216
217=item @npcsound face-name
218
219Plays the given sound face (either an alias or sound file path) as if
220the npc had made that sound, i.e. it will be located at the npc and all
221players near enough can hear it.
217 222
218=item @addtopic topic 223=item @addtopic topic
219 224
220Adds the given topic names (separated by C<|>) to the list of topics 225Adds the given topic names (separated by C<|>) to the list of topics
221returned. 226returned.
263 or next topic; 268 or next topic;
264 269
265 } elsif ($cmd eq "comment") { 270 } elsif ($cmd eq "comment") {
266 # nop 271 # nop
267 272
273 } elsif ($cmd eq "playersound") {
274 $self->{ob}->contr->play_sound (cf::sound::find $args);
275
276 } elsif ($cmd eq "npcsound") {
277 $self->{npc}->play_sound (cf::sound::find $args);
278
268 } elsif ($cmd eq "cond") { 279 } elsif ($cmd eq "cond") {
269 cf::safe_eval $args, %vars 280 cf::safe_eval $args, %vars
270 or next topic; 281 or next topic;
271 282
272 } elsif ($cmd eq "eval") { 283 } elsif ($cmd eq "eval") {
320 } 331 }
321 } 332 }
322 333
323 delete $self->{npc}{$self->{ob}->name}{dialog_state} unless %$state; 334 delete $self->{npc}{$self->{ob}->name}{dialog_state} unless %$state;
324 delete $self->{ob}{dialog_flag} unless %$flag; 335 delete $self->{ob}{dialog_flag} unless %$flag;
325
326 # combine lines into paragraphs
327 $reply =~ s/(?<=\S)\n(?=\w)/ /g;
328 $reply =~ s/\n\n/\n/g;
329 336
330 # ignores flags and npc from replies 337 # ignores flags and npc from replies
331 $reply = join "\n", (map $_->[1], @replies), $reply; 338 $reply = join "\n", (map $_->[1], @replies), $reply;
332 339
333 # now mark up all matching keywords 340 # now mark up all matching keywords

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines