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.15 by root, Tue Oct 13 00:24:14 2009 UTC vs.
Revision 1.19 by root, Fri Feb 5 01:26:35 2010 UTC

96 96
97=item $flag - A hashref that stores flags associated with the player and 97=item $flag - A hashref that stores flags associated with the player and
98can be seen by all NPCs (so better name your flags uniquely). This is 98can be seen by all NPCs (so better name your flags uniquely). This is
99useful for storing e.g. quest information. See C<@setflag> and C<@ifflag>. 99useful for storing e.g. quest information. See C<@setflag> and C<@ifflag>.
100 100
101=item @find - see @find, below. 101=item $find - see @find, below.
102 102
103=back 103=back
104 104
105The environment is that standard "map scripting environment", which is 105The environment is that standard "map scripting environment", which is
106limited in the type of constructs allowed (no loops, for example). 106limited in the type of constructs allowed (no loops, for example).
156If the check fails, the match is skipped. 156If the check fails, the match is skipped.
157 157
158=item @find match expression 158=item @find match expression
159 159
160Like C<@check> in that it executes a match expression, but instead of 160Like C<@check> in that it executes a match expression, but instead of
161failing, it gathers all objects matched into the C<@find> array variable. 161failing, it gathers all objects into an array and provides a reference to
162the array in the C<$find> variable.
162 163
163When you want to skip the match when no objects have been found, combine 164When you want to skip the match when no objects have been found, combine
164C<@find> with C<@cond>: 165C<@find> with C<@cond>:
165 166
166 @match see my spellbook 167 @match see my spellbook
167 @find type=SPELLBOOK in inv 168 @find type=SPELLBOOK in inv
168 @cond @find 169 @cond @$find
169 It looks dirty. 170 It looks dirty.
170 @match see my spellbook 171 @match see my spellbook
171 I can't see any, where do you have it? 172 I can't see any, where do you have it?
172 173
173=item @setstate state value 174=item @setstate state value
199associated with a specific player and can be seen by all NPCs. with 200associated with a specific player and can be seen by all NPCs. with
200respect to a particular player, which makes them suitable to store quest 201respect to a particular player, which makes them suitable to store quest
201markers and other information (e.g. reputation/alignment). Flags are 202markers and other information (e.g. reputation/alignment). Flags are
202persistent over the lifetime of a player, so be careful :) 203persistent over the lifetime of a player, so be careful :)
203 204
205Perversely enough, using C<@setfflag> without a C<value> clears the flag
206as if it was never set, so always provide a flag value (e.g. C<1>) when
207you want to set the flag.
208
204See C<@ifflag> for an example. 209See C<@ifflag> for an example.
205 210
206=item @ifflag flag value 211=item @ifflag flag value
207 212
208Requires that the named C<flag> has the given C<value>, otherwise this 213Requires that the named C<flag> has the given C<value>, otherwise this
209topic is skipped. For more complex comparisons, see C<@cond> with 214topic is skipped. For more complex comparisons, see C<@cond> with
210C<$flag>. Example: 215C<$flag>.
216
217If no C<value> is given, then the ifflag succeeds when the flag is true.
218
219Example:
211 220
212 @match I want to do the quest! 221 @match I want to do the quest!
213 @setflag kings_quest 1 222 @setflag kings_quest 1
214 Then seek out Bumblebee in Navar, he will tell you... 223 Then seek out Bumblebee in Navar, he will tell you...
215 @match I did the quest 224 @match I did the quest
283 npc => $self->{npc}, 292 npc => $self->{npc},
284 state => $state, 293 state => $state,
285 flag => $flag, 294 flag => $flag,
286 msg => $msg, 295 msg => $msg,
287 match => \@match, 296 match => \@match,
297 find => \@find,
288 ); 298 );
289 299
290 local $self->{ob}{record_replies} = \@replies; 300 local $self->{ob}{record_replies} = \@replies;
291 301
292 # now execute @-commands (which can result in a no-match) 302 # now execute @-commands (which can result in a no-match)
331 } elsif ($cmd eq "msg") { 341 } elsif ($cmd eq "msg") {
332 push @replies, [$self->{npc}, (scalar cf::safe_eval $args, %vars)]; 342 push @replies, [$self->{npc}, (scalar cf::safe_eval $args, %vars)];
333 343
334 } elsif ($cmd eq "setflag") { 344 } elsif ($cmd eq "setflag") {
335 my ($name, $value) = split /\s+/, $args, 2; 345 my ($name, $value) = split /\s+/, $args, 2;
336 $value ? $flag->{$name} = $value 346 defined $value ? $flag->{$name} = $value
337 : delete $flag->{$name}; 347 : delete $flag->{$name};
338 348
339 } elsif ($cmd eq "setstate") { 349 } elsif ($cmd eq "setstate") {
340 my ($name, $value) = split /\s+/, $args, 2; 350 my ($name, $value) = split /\s+/, $args, 2;
341 $value ? $state->{$name} = $value 351 defined $value ? $state->{$name} = $value
342 : delete $state->{$name}; 352 : delete $state->{$name};
343 353
344 } elsif ($cmd eq "ifflag") { 354 } elsif ($cmd eq "ifflag") {
345 my ($name, $value) = split /\s+/, $args, 2; 355 my ($name, $value) = split /\s+/, $args, 2;
346 $flag->{$name} eq $value 356 defined $value ? $flag->{$name} eq $value
357 : $flag->{$name}
347 or next topic; 358 or next topic;
348 359
349 } elsif ($cmd eq "ifstate") { 360 } elsif ($cmd eq "ifstate") {
350 my ($name, $value) = split /\s+/, $args, 2; 361 my ($name, $value) = split /\s+/, $args, 2;
351 $state->{$name} eq $value 362 $state->{$name} eq $value

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines