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

Comparing deliantra/server/lib/cf/match.pm (file contents):
Revision 1.21 by root, Wed Oct 21 00:44:39 2009 UTC vs.
Revision 1.22 by root, Sat Oct 24 11:45:40 2009 UTC

362 operator = '=' | '==' | '!=' | '<' | '<=' | '>' | '>=' 362 operator = '=' | '==' | '!=' | '<' | '<=' | '>' | '>='
363 363
364 expr = flag 364 expr = flag
365 | sattr 365 | sattr
366 | aattr '[' <constant> ']' 366 | aattr '[' <constant> ']'
367 | 'stat.' statattr
367 | special 368 | special
368 | func '(' args ')' 369 | func '(' args ')'
369 | '{' perl code block '}' 370 | '{' perl code block '}'
370 371
371 func = <any function name> 372 func = <any function name>
372 sattr = <any scalar object attribute> 373 sattr = <any scalar object attribute>
373 aattr = <any array object attribute> 374 aattr = <any array object attribute>
374 flag = <any object flag> 375 flag = <any object flag>
376 statattr = <any stat attribute: exp, food, str, dex, hp, maxhp...>
375 special = <any ()-less "function"> 377 special = <any ()-less "function">
376 378
377 constant = <number> | '"' <string> '"' | <uppercase cf::XXX name> 379 constant = <number> | '"' <string> '"' | <uppercase cf::XXX name>
378 args = <depends on function> 380 args = <depends on function>
379 381
448 } 450 }
449 451
450 our $flag = $cf::REFLECT{object}{flags}; 452 our $flag = $cf::REFLECT{object}{flags};
451 our $sattr = $cf::REFLECT{object}{scalars}; 453 our $sattr = $cf::REFLECT{object}{scalars};
452 our $aattr = $cf::REFLECT{object}{arrays}; 454 our $aattr = $cf::REFLECT{object}{arrays};
455 our $lattr = $cf::REFLECT{living}{scalars};
453 456
454 sub expr { 457 sub expr {
455 # ws done by factor 458 # ws done by factor
456 my $res; 459 my $res;
457 460
459 # perl 462 # perl
460 463
461 my $expr = $1; 464 my $expr = $1;
462 465
463 $res .= $expr =~ /\{([^;]+)\}/ ? $1 : "do $expr"; 466 $res .= $expr =~ /\{([^;]+)\}/ ? $1 : "do $expr";
467
468 } elsif (/\Gstats\.([A-Za-z0-9_]+)/gc) {
469
470 if (exists $lattr->{$1}) {
471 $res .= "\$_->stats->$1";
472 } elsif (exists $lattr->{"\u$1"}) {
473 $res .= "\$_->stats->\u$1";
474 } else {
475 die "living statistic name expected (str, pow, hp, sp...)\n";
476 }
464 477
465 } elsif (/\G([A-Za-z0-9_]+)/gc) { 478 } elsif (/\G([A-Za-z0-9_]+)/gc) {
466 479
467 if (my $func = $func{$1}) { 480 if (my $func = $func{$1}) {
468 /\G\s*\(/gc 481 /\G\s*\(/gc
675 688
676 $res 689 $res
677} 690}
678 691
679if (0) {#d# 692if (0) {#d#
680 die parse 1, 'applied in inv'; 693 die parse 1, 'stats.pow';
681 exit 0; 694 exit 0;
682} 695}
683 696
684our %CACHE; 697our %CACHE;
685 698

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines