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.9 by root, Mon Apr 21 06:35:26 2008 UTC vs.
Revision 1.13 by root, Thu Jan 8 04:35:04 2009 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,
316 } elsif ($cmd eq "trigger") { 310 } elsif ($cmd eq "trigger") {
317 my ($con, $state) = split /\s+/, $args, 2; 311 my ($con, $state) = split /\s+/, $args, 2;
318 $con = $con * 1; 312 $con = $con * 1;
319 313
320 if (defined $state) { 314 if (defined $state) {
321 $self->{npc}->map->trigger ($args, $state); 315 $self->{npc}->map->trigger ($args, $state, $self->{npc}, $self->{ob});
322 } else { 316 } else {
323 my $rvalue = \$self->{npc}{dialog_trigger}{$con}; 317 my $rvalue = \$self->{npc}{dialog_trigger}{$con};
324 $self->{npc}->map->trigger ($con, $$rvalue = !$$rvalue); 318 $self->{npc}->map->trigger ($con, $$rvalue = !$$rvalue, $self->{npc}, $self->{ob});
325 } 319 }
326 320
327 } elsif ($cmd eq "addtopic") { 321 } elsif ($cmd eq "addtopic") {
328 push @kw, split /\|/, $args; 322 push @kw, split /\|/, $args;
329 $self->{add_topic}->(split /\s*\|\s*/, $args) if $self->{add_topic}; 323 $self->{add_topic}->(split /\s*\|\s*/, $args) if $self->{add_topic};
337 } 331 }
338 } 332 }
339 333
340 delete $self->{npc}{$self->{ob}->name}{dialog_state} unless %$state; 334 delete $self->{npc}{$self->{ob}->name}{dialog_state} unless %$state;
341 delete $self->{ob}{dialog_flag} unless %$flag; 335 delete $self->{ob}{dialog_flag} unless %$flag;
342
343 # combine lines into paragraphs
344 $reply =~ s/(?<=\S)\n(?=\w)/ /g;
345 $reply =~ s/\n\n/\n/g;
346 336
347 # ignores flags and npc from replies 337 # ignores flags and npc from replies
348 $reply = join "\n", (map $_->[1], @replies), $reply; 338 $reply = join "\n", (map $_->[1], @replies), $reply;
349 339
350 # now mark up all matching keywords 340 # now mark up all matching keywords
355 last; 345 last;
356 } 346 }
357 } 347 }
358 } 348 }
359 349
350 $self->{npc}->use_trigger ($self->{ob})
351 if $self->{npc}->type == cf::MAGIC_EAR;
352
360 return wantarray ? ($reply, @kw) : $reply; 353 return wantarray ? ($reply, @kw) : $reply;
361 } 354 }
362 } 355 }
363 } 356 }
364 357

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines