… | |
… | |
13 | use strict; |
13 | use strict; |
14 | |
14 | |
15 | sub has_dialogue($) { |
15 | sub has_dialogue($) { |
16 | my ($ob) = @_; |
16 | my ($ob) = @_; |
17 | |
17 | |
18 | $ob->get_message =~ /^\@match /; |
18 | $ob->msg =~ /^\@match /; |
19 | } |
19 | } |
20 | |
20 | |
21 | sub parse_message($) { |
21 | sub parse_message($) { |
22 | map [split /\n/, $_, 2], |
22 | map [split /\n/, $_, 2], |
23 | grep length, |
23 | grep length, |
… | |
… | |
30 | |
30 | |
31 | my $self = bless { |
31 | my $self = bless { |
32 | %arg, |
32 | %arg, |
33 | }, $class; |
33 | }, $class; |
34 | |
34 | |
35 | $self->{match} ||= [parse_message $self->{npc}->get_message]; |
35 | $self->{match} ||= [parse_message $self->{npc}->msg]; |
36 | |
36 | |
37 | $self; |
37 | $self; |
38 | } |
38 | } |
39 | |
39 | |
40 | sub greet { |
40 | sub greet { |
… | |
… | |
245 | $state->{$name} eq $value |
245 | $state->{$name} eq $value |
246 | or next topic; |
246 | or next topic; |
247 | |
247 | |
248 | } elsif ($cmd eq "trigger") { |
248 | } elsif ($cmd eq "trigger") { |
249 | my $rvalue = \$self->{npc}{dialog_trigger}{$args*1}; |
249 | my $rvalue = \$self->{npc}{dialog_trigger}{$args*1}; |
250 | |
250 | $self->{npc}->map->trigger ($args, $$rvalue = !$$rvalue); |
251 | my $trigger = cf::object::new "magic_ear"; |
|
|
252 | $trigger->set_value ($$rvalue); |
|
|
253 | |
|
|
254 | # needs to be on the map for remove_button_link to work |
|
|
255 | # the same *should* be true for add_button_link.... |
|
|
256 | $self->{npc}->map->insert_object ($trigger, 0, 0); |
|
|
257 | |
|
|
258 | $trigger->add_button_link ($self->{npc}->map, $args); |
|
|
259 | |
|
|
260 | $trigger->use_trigger; |
|
|
261 | |
|
|
262 | $trigger->remove_button_link; |
|
|
263 | $trigger->remove; |
|
|
264 | $trigger->free; |
|
|
265 | |
|
|
266 | $$rvalue = !$$rvalue; |
|
|
267 | |
251 | |
268 | } elsif ($cmd eq "addtopic") { |
252 | } elsif ($cmd eq "addtopic") { |
269 | push @kw, split /\|/, $args; |
253 | push @kw, split /\|/, $args; |
270 | $self->{add_topic}->(split /\s*\|\s*/, $args) if $self->{add_topic}; |
254 | $self->{add_topic}->(split /\s*\|\s*/, $args) if $self->{add_topic}; |
271 | |
255 | |
272 | } elsif ($cmd eq "deltopic") { |
256 | } elsif ($cmd eq "deltopic") { |
273 | # not yet implemented, do it out-of-band |
257 | # not yet implemented, do it out-of-band |
274 | $self->{del_topic}->(split /\s*\|\s*/, $args) if $self->{del_topic}; |
258 | $self->{del_topic}->(split /\s*\|\s*/, $args) if $self->{del_topic}; |
275 | |
259 | |
276 | } else { |
260 | } else { |
277 | warn "unknown dialogue command <$cmd,$args> used (from " . $self->{npc}->get_message . ")"; |
261 | warn "unknown dialogue command <$cmd,$args> used (from " . $self->{npc}->msg . ")"; |
278 | } |
262 | } |
279 | } |
263 | } |
280 | |
264 | |
281 | delete $self->{npc}{$self->{ob}->name}{dialog_state} unless %$state; |
265 | delete $self->{npc}{$self->{ob}->name}{dialog_state} unless %$state; |
282 | delete $self->{ob}{dialog_flag} unless %$flag; |
266 | delete $self->{ob}{dialog_flag} unless %$flag; |