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.14 by root, Thu Jan 8 19:23:44 2009 UTC vs.
Revision 1.16 by root, Mon Oct 26 02:48:02 2009 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.
102
101=back 103=back
102 104
103The environment is that standard "map scripting environment", which is 105The environment is that standard "map scripting environment", which is
104limited in the type of constructs allowed (no loops, for example). 106limited in the type of constructs allowed (no loops, for example).
105 107
138Like C<@cond>, but proceed regardless of the outcome. 140Like C<@cond>, but proceed regardless of the outcome.
139 141
140=item @msg perl 142=item @msg perl
141 143
142Like C<@cond>, but the return value will be stringified and prepended to 144Like C<@cond>, but the return value will be stringified and prepended to
143the message. 145the reply message.
146
147=item @check match expression
148
149Executes a match expression (see
150http://pod.tst.eu/http://cvs.schmorp.de/deliantra/server/lib/cf/match.pm)
151to see if it matches.
152
153C<self> is the npc object, C<object>, C<source> and C<originator> are the
154player communicating with the NPC.
155
156If the check fails, the match is skipped.
157
158=item @find match expression
159
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.
162
163When you want to skip the match when no objects have been found, combine
164C<@find> with C<@cond>:
165
166 @match see my spellbook
167 @find type=SPELLBOOK in inv
168 @cond @find
169 It looks dirty.
170 @match see my spellbook
171 I can't see any, where do you have it?
144 172
145=item @setstate state value 173=item @setstate state value
146 174
147Sets the named state C<state> to the given C<value>. State values are 175Sets the named state C<state> to the given C<value>. State values are
148associated with a specific player-NPC pair, so each NPC has its own state 176associated with a specific player-NPC pair, so each NPC has its own state
171associated with a specific player and can be seen by all NPCs. with 199associated with a specific player and can be seen by all NPCs. with
172respect to a particular player, which makes them suitable to store quest 200respect to a particular player, which makes them suitable to store quest
173markers and other information (e.g. reputation/alignment). Flags are 201markers and other information (e.g. reputation/alignment). Flags are
174persistent over the lifetime of a player, so be careful :) 202persistent over the lifetime of a player, so be careful :)
175 203
204Perversely enough, using C<@setfflag> without a C<value> clears the flag
205as if it was never set, so always provide a flag value (e.g. C<1>) when
206you want to set the flag.
207
176See C<@ifflag> for an example. 208See C<@ifflag> for an example.
177 209
178=item @ifflag flag value 210=item @ifflag flag value
179 211
180Requires that the named C<flag> has the given C<value>, otherwise this 212Requires that the named C<flag> has the given C<value>, otherwise this
181topic is skipped. For more complex comparisons, see C<@cond> with 213topic is skipped. For more complex comparisons, see C<@cond> with
182C<$flag>. Example: 214C<$flag>.
215
216If no C<value> is given, then the ifflag succeeds when the flag is true.
217
218Example:
183 219
184 @match I want to do the quest! 220 @match I want to do the quest!
185 @setflag kings_quest 1 221 @setflag kings_quest 1
186 Then seek out Bumblebee in Navar, he will tell you... 222 Then seek out Bumblebee in Navar, he will tell you...
187 @match I did the quest 223 @match I did the quest
245 my @replies; 281 my @replies;
246 my @match; # @match/@parse command results 282 my @match; # @match/@parse command results
247 283
248 my $state = $self->{npc}{$self->{ob}->name}{dialog_state} ||= {}; 284 my $state = $self->{npc}{$self->{ob}->name}{dialog_state} ||= {};
249 my $flag = $self->{ob}{dialog_flag} ||= {}; 285 my $flag = $self->{ob}{dialog_flag} ||= {};
286
287 my @find;
250 288
251 my %vars = ( 289 my %vars = (
252 who => $self->{ob}, 290 who => $self->{ob},
253 npc => $self->{npc}, 291 npc => $self->{npc},
254 state => $state, 292 state => $state,
282 or next topic; 320 or next topic;
283 321
284 } elsif ($cmd eq "eval") { 322 } elsif ($cmd eq "eval") {
285 cf::safe_eval $args, %vars; 323 cf::safe_eval $args, %vars;
286 warn "\@eval evaluation error: $@\n" if $@; 324 warn "\@eval evaluation error: $@\n" if $@;
325
326 } elsif ($cmd eq "check") {
327 eval {
328 cf::match::match $args, $self->{ob}, $self->{npc}, $self->{ob}
329 or next topic;
330 };
331 warn "\@check evaluation error: $@\n" if $@;
332
333 } elsif ($cmd eq "find") {
334 @find = eval {
335 cf::match::match $args, $self->{ob}, $self->{npc}, $self->{ob}
336 };
337 warn "\@find evaluation error: $@\n" if $@;
287 338
288 } elsif ($cmd eq "msg") { 339 } elsif ($cmd eq "msg") {
289 push @replies, [$self->{npc}, (scalar cf::safe_eval $args, %vars)]; 340 push @replies, [$self->{npc}, (scalar cf::safe_eval $args, %vars)];
290 341
291 } elsif ($cmd eq "setflag") { 342 } elsif ($cmd eq "setflag") {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines